Browse Source

Initial commit

tags/1.0.0
Leonie 4 months ago
commit
83306555ad
100 changed files with 2765 additions and 0 deletions
  1. 1
    0
      .gitignore
  2. 3
    0
      README.md
  3. 54
    0
      app/.bithoundrc
  4. 17
    0
      app/.gitignore
  5. 22
    0
      app/CONTRIBUTING.md
  6. 108
    0
      app/config.xml
  7. 23
    0
      app/hooks/README.md
  8. 786
    0
      app/package-lock.json
  9. BIN
      app/www/OpenSans-Light-webfont.woff
  10. BIN
      app/www/OpenSans-Regular-webfont.woff
  11. 54
    0
      app/www/app.html
  12. 88
    0
      app/www/app.js
  13. 1
    0
      app/www/config.js
  14. BIN
      app/www/fake_data/1.jpg
  15. BIN
      app/www/fake_data/2.jpg
  16. BIN
      app/www/fake_data/3.jpg
  17. BIN
      app/www/fake_data/4.jpg
  18. BIN
      app/www/fake_data/5.jpg
  19. BIN
      app/www/fake_data/6.jpg
  20. BIN
      app/www/fake_data/7.jpg
  21. BIN
      app/www/fake_data/8.jpg
  22. 23
    0
      app/www/fonts.css
  23. 123
    0
      app/www/getfeed.js
  24. BIN
      app/www/img/logo.png
  25. 31
    0
      app/www/index.html
  26. 252
    0
      app/www/logo.svg
  27. 107
    0
      app/www/primarycolor.js
  28. 155
    0
      app/www/style.css
  29. 43
    0
      app/www/welcome.js
  30. 49
    0
      backend.py
  31. BIN
      banners/1.jpg
  32. BIN
      banners/2.jpg
  33. BIN
      banners/3.jpg
  34. 54
    0
      demo/.bithoundrc
  35. 17
    0
      demo/.gitignore
  36. 22
    0
      demo/CONTRIBUTING.md
  37. 108
    0
      demo/config.xml
  38. 23
    0
      demo/hooks/README.md
  39. BIN
      demo/www/OpenSans-Light-webfont.woff
  40. BIN
      demo/www/OpenSans-Regular-webfont.woff
  41. 15
    0
      demo/www/app.js
  42. 115
    0
      demo/www/css/index.css
  43. BIN
      demo/www/fake_data/1.jpg
  44. BIN
      demo/www/fake_data/2.jpg
  45. BIN
      demo/www/fake_data/3.jpg
  46. BIN
      demo/www/fake_data/4.jpg
  47. BIN
      demo/www/fake_data/5.jpg
  48. BIN
      demo/www/fake_data/6.jpg
  49. BIN
      demo/www/fake_data/7.jpg
  50. BIN
      demo/www/fake_data/8.jpg
  51. 25
    0
      demo/www/fonts.css
  52. BIN
      demo/www/img/logo.png
  53. 37
    0
      demo/www/index.html
  54. 2
    0
      demo/www/jquery-3.4.1.min.js
  55. 49
    0
      demo/www/js/index.js
  56. 252
    0
      demo/www/logo.svg
  57. 106
    0
      demo/www/primarycolor.js
  58. 0
    0
      demo/www/res/.pgbomit
  59. BIN
      demo/www/res/icon/android/drawable-hdpi-icon.png
  60. BIN
      demo/www/res/icon/android/drawable-ldpi-icon.png
  61. BIN
      demo/www/res/icon/android/drawable-mdpi-icon.png
  62. BIN
      demo/www/res/icon/android/drawable-xhdpi-icon.png
  63. BIN
      demo/www/res/icon/android/drawable-xxhdpi-icon.png
  64. BIN
      demo/www/res/icon/android/drawable-xxxhdpi-icon.png
  65. BIN
      demo/www/res/icon/ios/icon-40.png
  66. BIN
      demo/www/res/icon/ios/icon-40@2x.png
  67. BIN
      demo/www/res/icon/ios/icon-50.png
  68. BIN
      demo/www/res/icon/ios/icon-50@2x.png
  69. BIN
      demo/www/res/icon/ios/icon-60.png
  70. BIN
      demo/www/res/icon/ios/icon-60@2x.png
  71. BIN
      demo/www/res/icon/ios/icon-60@3x.png
  72. BIN
      demo/www/res/icon/ios/icon-72.png
  73. BIN
      demo/www/res/icon/ios/icon-72@2x.png
  74. BIN
      demo/www/res/icon/ios/icon-76.png
  75. BIN
      demo/www/res/icon/ios/icon-76@2x.png
  76. BIN
      demo/www/res/icon/ios/icon-small.png
  77. BIN
      demo/www/res/icon/ios/icon-small@2x.png
  78. BIN
      demo/www/res/icon/ios/icon-small@3x.png
  79. BIN
      demo/www/res/icon/ios/icon.png
  80. BIN
      demo/www/res/icon/ios/icon@2x.png
  81. BIN
      demo/www/res/icon/windows/Square150x150Logo.scale-100.png
  82. BIN
      demo/www/res/icon/windows/Square150x150Logo.scale-240.png
  83. BIN
      demo/www/res/icon/windows/Square30x30Logo.scale-100.png
  84. BIN
      demo/www/res/icon/windows/Square310x310Logo.scale-100.png
  85. BIN
      demo/www/res/icon/windows/Square44x44Logo.scale-100.png
  86. BIN
      demo/www/res/icon/windows/Square44x44Logo.scale-240.png
  87. BIN
      demo/www/res/icon/windows/Square70x70Logo.scale-100.png
  88. BIN
      demo/www/res/icon/windows/Square71x71Logo.scale-100.png
  89. BIN
      demo/www/res/icon/windows/Square71x71Logo.scale-240.png
  90. BIN
      demo/www/res/icon/windows/StoreLogo.scale-100.png
  91. BIN
      demo/www/res/icon/windows/StoreLogo.scale-240.png
  92. BIN
      demo/www/res/icon/windows/Wide310x150Logo.scale-100.png
  93. BIN
      demo/www/res/icon/windows/Wide310x150Logo.scale-240.png
  94. BIN
      demo/www/res/icon/wp8/ApplicationIcon.png
  95. BIN
      demo/www/res/icon/wp8/Background.png
  96. BIN
      demo/www/res/screen/android/drawable-land-hdpi-screen.png
  97. BIN
      demo/www/res/screen/android/drawable-land-ldpi-screen.png
  98. BIN
      demo/www/res/screen/android/drawable-land-mdpi-screen.png
  99. BIN
      demo/www/res/screen/android/drawable-land-xhdpi-screen.png
  100. 0
    0
      demo/www/res/screen/android/drawable-land-xxhdpi-screen.png

+ 1
- 0
.gitignore View File

@@ -0,0 +1 @@
clientcred.secret

+ 3
- 0
README.md View File

@@ -0,0 +1,3 @@
# Nordcast

Nordcast is a new podcast streaming app by koyu.space

+ 54
- 0
app/.bithoundrc View File

@@ -0,0 +1,54 @@
{
"ignore": [
"www/spec/lib/**",
"**/deps/**",
"**/node_modules/**",
"**/thirdparty/**",
"**/third_party/**",
"**/vendor/**",
"**/**-min-**",
"**/**-min.**",
"**/**.min.**",
"**/**jquery.?(ui|effects)-*.*.?(*).?(cs|j)s",
"**/**jquery-*.*.?(*).?(cs|j)s",
"**/prototype?(*).js",
"**/**?(*).ts",
"**/mootools*.*.*.js",
"**/dojo.js",
"**/MochiKit.js",
"**/yahoo-*.js",
"**/yui*.js",
"**/ckeditor*.js",
"**/tiny_mce*.js",
"**/tiny_mce/?(langs|plugins|themes|utils)/**",
"**/MathJax/**",
"**/shBrush*.js",
"**/shCore.js",
"**/shLegacy.js",
"**/modernizr.custom.?(*).js",
"**/knockout-*.*.*.debug.js",
"**/extjs/*.js",
"**/extjs/*.xml",
"**/extjs/*.txt",
"**/extjs/*.html",
"**/extjs/*.properties",
"**/extjs/.sencha",
"**/extjs/docs/**",
"**/extjs/builds/**",
"**/extjs/cmd/**",
"**/extjs/examples/**",
"**/extjs/locale/**",
"**/extjs/packages/**",
"**/extjs/plugins/**",
"**/extjs/resources/**",
"**/extjs/src/**",
"**/extjs/welcome/**",
"bower_components/**"
],
"test": [
"**/test/**",
"**/tests/**",
"**/spec/**",
"**/specs/**"
]
}

+ 17
- 0
app/.gitignore View File

@@ -0,0 +1,17 @@
# Mac
.DS_Store

# Node
npm-debug.log
/node_modules

# Cordova
/platforms
/plugins

# res
resources/signing
jsconfig.json
.vscode/
typings/


+ 22
- 0
app/CONTRIBUTING.md View File

@@ -0,0 +1,22 @@
## Contributing

Thank you for your interest in contributing to the Hello World PhoneGap Template.

#### Issues

One of the best contributions is filing issues in the [Issue Tracker][issue-tracker].

All contributions (feature or bug fix) should start with an issue first.

#### Pull requests

- Fork the repository
- Create a branch (`git checkout -b issue-nnn`)
- If possible, add a failing test
- Commit your fix/feature and tests (`git commit -am "fixes for issue #nnn"`)
- Push to the branch (`git push -u origin issue-nnn`)
- Open a [Pull Request][pull-request]


[issue-tracker]: https://github.com/phonegap/phonegap-template-hello-world/issues
[pull-request]: https://github.com/phonegap/phonegap-template-hello-world/pulls

+ 108
- 0
app/config.xml View File

@@ -0,0 +1,108 @@
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.phonegap.helloworld" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0">
<name>helloworld</name>
<description>
Hello World sample application that responds to the deviceready event.
</description>
<author email="support@phonegap.com" href="http://phonegap.com">
PhoneGap Team
</author>
<content src="index.html" />
<preference name="DisallowOverscroll" value="true" />
<preference name="android-minSdkVersion" value="14" />
<plugin name="cordova-plugin-battery-status" source="npm" spec="~1.2.4" />
<plugin name="cordova-plugin-device" source="npm" spec="~1.1.6" />
<plugin name="cordova-plugin-dialogs" source="npm" spec="~1.3.3" />
<plugin name="cordova-plugin-file" source="npm" spec="~4.3.3" />
<plugin name="cordova-plugin-globalization" source="npm" spec="~1.0.7" />
<plugin name="cordova-plugin-inappbrowser" source="npm" spec="~1.7.1" />
<plugin name="cordova-plugin-network-information" source="npm" spec="~1.3.3" />
<platform name="android">
<icon density="ldpi" src="www/res/icon/android/drawable-ldpi-icon.png" />
<icon density="mdpi" src="www/res/icon/android/drawable-mdpi-icon.png" />
<icon density="hdpi" src="www/res/icon/android/drawable-hdpi-icon.png" />
<icon density="xhdpi" src="www/res/icon/android/drawable-xhdpi-icon.png" />
<icon density="xxhdpi" src="www/res/icon/android/drawable-xxhdpi-icon.png" />
<icon density="xxxhdpi" src="www/res/icon/android/drawable-xxxhdpi-icon.png" />
<splash density="land-ldpi" src="www/res/screen/android/drawable-land-ldpi-screen.png" />
<splash density="land-mdpi" src="www/res/screen/android/drawable-land-mdpi-screen.png" />
<splash density="land-hdpi" src="www/res/screen/android/drawable-land-hdpi-screen.png" />
<splash density="land-xhdpi" src="www/res/screen/android/drawable-land-xhdpi-screen.png" />
<splash density="land-xxhdpi" src="www/res/screen/android/drawable-land-xxhdpi-screen.png" />
<splash density="land-xxxhdpi" src="www/res/screen/android/drawable-land-xxxhdpi-screen.png" />
<splash density="port-ldpi" src="www/res/screen/android/drawable-port-ldpi-screen.png" />
<splash density="port-mdpi" src="www/res/screen/android/drawable-port-mdpi-screen.png" />
<splash density="port-hdpi" src="www/res/screen/android/drawable-port-hdpi-screen.png" />
<splash density="port-xhdpi" src="www/res/screen/android/drawable-port-xhdpi-screen.png" />
<splash density="port-xxhdpi" src="www/res/screen/android/drawable-port-xxhdpi-screen.png" />
<splash density="port-xxxhdpi" src="www/res/screen/android/drawable-port-xxxhdpi-screen.png" />
</platform>
<platform name="ios">
<icon height="57" platform="ios" src="www/res/icon/ios/icon.png" width="57" />
<icon height="114" platform="ios" src="www/res/icon/ios/icon@2x.png" width="114" />
<icon height="40" platform="ios" src="www/res/icon/ios/icon-40.png" width="40" />
<icon height="80" platform="ios" src="www/res/icon/ios/icon-40@2x.png" width="80" />
<icon height="50" platform="ios" src="www/res/icon/ios/icon-50.png" width="50" />
<icon height="100" platform="ios" src="www/res/icon/ios/icon-50@2x.png" width="100" />
<icon height="60" platform="ios" src="www/res/icon/ios/icon-60.png" width="60" />
<icon height="120" platform="ios" src="www/res/icon/ios/icon-60@2x.png" width="120" />
<icon height="180" platform="ios" src="www/res/icon/ios/icon-60@3x.png" width="180" />
<icon height="72" platform="ios" src="www/res/icon/ios/icon-72.png" width="72" />
<icon height="144" platform="ios" src="www/res/icon/ios/icon-72@2x.png" width="144" />
<icon height="76" platform="ios" src="www/res/icon/ios/icon-76.png" width="76" />
<icon height="152" platform="ios" src="www/res/icon/ios/icon-76@2x.png" width="152" />
<icon height="29" platform="ios" src="www/res/icon/ios/icon-small.png" width="29" />
<icon height="58" platform="ios" src="www/res/icon/ios/icon-small@2x.png" width="58" />
<icon height="87" platform="ios" src="www/res/icon/ios/icon-small@3x.png" width="87" />
<splash height="1136" platform="ios" src="www/res/screen/ios/Default-568h@2x~iphone.png" width="640" />
<splash height="1334" platform="ios" src="www/res/screen/ios/Default-667h.png" width="750" />
<splash height="2208" platform="ios" src="www/res/screen/ios/Default-736h.png" width="1242" />
<splash height="1242" platform="ios" src="www/res/screen/ios/Default-Landscape-736h.png" width="2208" />
<splash height="1536" platform="ios" src="www/res/screen/ios/Default-Landscape@2x~ipad.png" width="2048" />
<splash height="768" platform="ios" src="www/res/screen/ios/Default-Landscape~ipad.png" width="1024" />
<splash height="2048" platform="ios" src="www/res/screen/ios/Default-Portrait@2x~ipad.png" width="1536" />
<splash height="1024" platform="ios" src="www/res/screen/ios/Default-Portrait~ipad.png" width="768" />
<splash height="960" platform="ios" src="www/res/screen/ios/Default@2x~iphone.png" width="640" />
<splash height="480" platform="ios" src="www/res/screen/ios/Default~iphone.png" width="320" />
</platform>
<platform name="wp8">
<icon height="99" platform="wp8" src="www/res/icon/wp8/ApplicationIcon.png" width="99" />
<icon height="159" platform="wp8" src="www/res/icon/wp8/Background.png" width="159" />
<splash height="1280" platform="wp8" src="www/res/screen/wp8/screen-portrait.jpg" width="768" />
</platform>
<platform name="windows">
<icon height="150" platform="windows" src="www/res/icon/windows/Square150x150Logo.scale-100.png" width="150" />
<icon height="30" platform="windows" src="www/res/icon/windows/Square30x30Logo.scale-100.png" width="30" />
<icon height="50" platform="windows" src="www/res/icon/windows/StoreLogo.scale-100.png" width="50" />
<splash height="300" platform="windows" src="www/res/screen/windows/SplashScreen.scale-100.png" width="620" />
<icon height="120" platform="windows" src="www/res/icon/windows/StoreLogo.scale-240.png" width="120" />
<icon height="44" platform="windows" src="www/res/icon/windows/Square44x44Logo.scale-100.png" width="44" />
<icon height="106" platform="windows" src="www/res/icon/windows/Square44x44Logo.scale-240.png" width="106" />
<icon height="70" platform="windows" src="www/res/icon/windows/Square70x70Logo.scale-100.png" width="70" />
<icon height="71" platform="windows" src="www/res/icon/windows/Square71x71Logo.scale-100.png" width="71" />
<icon height="170" platform="windows" src="www/res/icon/windows/Square71x71Logo.scale-240.png" width="170" />
<icon height="360" platform="windows" src="www/res/icon/windows/Square150x150Logo.scale-240.png" width="360" />
<icon height="310" platform="windows" src="www/res/icon/windows/Square310x310Logo.scale-100.png" width="310" />
<icon height="150" platform="windows" src="www/res/icon/windows/Wide310x150Logo.scale-100.png" width="310" />
<icon height="360" platform="windows" src="www/res/icon/windows/Wide310x150Logo.scale-240.png" width="744" />
<splash height="1920" platform="windows" src="www/res/screen/windows/SplashScreenPhone.scale-240.png" width="1152" />
</platform>
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
<allow-intent href="market:*" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
</platform>
<plugin name="cordova-plugin-statusbar" spec="~2.4.2" />
<preference name="StatusBarOverlaysWebView" value="true" />
<preference name="StatusBarStyle" value="lightcontent" />
<preference name="StatusBarBackgroundColor" value="#ffffff" />
</widget>

+ 23
- 0
app/hooks/README.md View File

@@ -0,0 +1,23 @@
<!--
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
-->
# Cordova Hooks

Cordova Hooks represent special scripts which could be added by application and plugin developers or even by your own build system to customize cordova commands. See Hooks Guide for more details: http://cordova.apache.org/docs/en/edge/guide_appdev_hooks_index.md.html#Hooks%20Guide.

+ 786
- 0
app/package-lock.json View File

@@ -0,0 +1,786 @@
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"cordova-browser": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/cordova-browser/-/cordova-browser-5.0.4.tgz",
"integrity": "sha512-EDuG+9NGsaYpNSY6wF0kR34m1m38V+nRglGXxQ609fgMYrMHEYR2lg38nDr1Os4qeF0LJz8UQ7nq7Y+idg6Aig==",
"requires": {
"abbrev": "*",
"accepts": "*",
"ansi": "*",
"ansi-regex": "2.1.1",
"ansi-styles": "2.2.1",
"array-flatten": "1.1.1",
"balanced-match": "*",
"base64-js": "1.2.0",
"big-integer": "*",
"body-parser": "1.18.2",
"bplist-parser": "*",
"brace-expansion": "*",
"bytes": "*",
"chalk": "1.1.3",
"compressible": "*",
"compression": "1.7.2",
"concat-map": "*",
"content-disposition": "*",
"content-type": "*",
"cookie": "*",
"cookie-signature": "1.0.6",
"cordova-common": "2.2.5",
"cordova-registry-mapper": "*",
"cordova-serve": "2.0.1",
"debug": "2.6.9",
"depd": "*",
"destroy": "*",
"ee-first": "*",
"elementtree": "0.1.6",
"encodeurl": "*",
"escape-html": "*",
"escape-string-regexp": "*",
"etag": "*",
"express": "*",
"finalhandler": "*",
"forwarded": "*",
"fresh": "*",
"glob": "5.0.15",
"has-ansi": "2.0.0",
"http-errors": "1.6.3",
"iconv-lite": "0.4.19",
"inflight": "*",
"inherits": "*",
"ipaddr.js": "1.6.0",
"is-wsl": "*",
"media-typer": "*",
"merge-descriptors": "*",
"methods": "*",
"mime": "1.4.1",
"mime-db": "1.33.0",
"mime-types": "2.1.18",
"minimatch": "*",
"ms": "2.0.0",
"negotiator": "*",
"nopt": "3.0.6",
"on-finished": "*",
"on-headers": "*",
"once": "*",
"opn": "*",
"parseurl": "*",
"path-is-absolute": "*",
"path-to-regexp": "0.1.7",
"plist": "2.1.0",
"proxy-addr": "2.0.3",
"q": "*",
"qs": "6.5.1",
"range-parser": "*",
"raw-body": "2.3.2",
"safe-buffer": "5.1.1",
"sax": "0.3.5",
"send": "*",
"serve-static": "*",
"setprototypeof": "*",
"shelljs": "0.5.3",
"statuses": "1.4.0",
"strip-ansi": "3.0.1",
"supports-color": "2.0.0",
"type-is": "*",
"underscore": "*",
"unorm": "*",
"unpipe": "*",
"utils-merge": "*",
"vary": "*",
"wrappy": "*",
"xmlbuilder": "8.2.2",
"xmldom": "*"
},
"dependencies": {
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
},
"accepts": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
"integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
"requires": {
"mime-types": "~2.1.18",
"negotiator": "0.6.1"
}
},
"ansi": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz",
"integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE="
},
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
},
"ansi-styles": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
"integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
},
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"base64-js": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz",
"integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE="
},
"big-integer": {
"version": "1.6.32",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.32.tgz",
"integrity": "sha512-ljKJdR3wk9thHfLj4DtrNiOSTxvGFaMjWrG4pW75juXC4j7+XuKJVFdg4kgFMYp85PVkO05dFMj2dk2xVsH4xw=="
},
"body-parser": {
"version": "1.18.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
"integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
"requires": {
"bytes": "3.0.0",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "~1.1.1",
"http-errors": "~1.6.2",
"iconv-lite": "0.4.19",
"on-finished": "~2.3.0",
"qs": "6.5.1",
"raw-body": "2.3.2",
"type-is": "~1.6.15"
}
},
"bplist-parser": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz",
"integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=",
"requires": {
"big-integer": "^1.6.7"
}
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
},
"chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"requires": {
"ansi-styles": "^2.2.1",
"escape-string-regexp": "^1.0.2",
"has-ansi": "^2.0.0",
"strip-ansi": "^3.0.0",
"supports-color": "^2.0.0"
}
},
"compressible": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz",
"integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=",
"requires": {
"mime-db": ">= 1.34.0 < 2"
},
"dependencies": {
"mime-db": {
"version": "1.34.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.34.0.tgz",
"integrity": "sha1-RS0Oz/XDA0am3B5kseruDTcZ/5o="
}
}
},
"compression": {
"version": "1.7.2",
"resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz",
"integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=",
"requires": {
"accepts": "~1.3.4",
"bytes": "3.0.0",
"compressible": "~2.0.13",
"debug": "2.6.9",
"on-headers": "~1.0.1",
"safe-buffer": "5.1.1",
"vary": "~1.1.2"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"content-disposition": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
"integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
},
"content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
},
"cookie": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
"integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"cordova-common": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-2.2.5.tgz",
"integrity": "sha1-+TzvKtSUz8v1bEbj1hKqqctfzDI=",
"requires": {
"ansi": "^0.3.1",
"bplist-parser": "^0.1.0",
"cordova-registry-mapper": "^1.1.8",
"elementtree": "0.1.6",
"glob": "^5.0.13",
"minimatch": "^3.0.0",
"plist": "^2.1.0",
"q": "^1.4.1",
"shelljs": "^0.5.3",
"underscore": "^1.8.3",
"unorm": "^1.3.3"
}
},
"cordova-registry-mapper": {
"version": "1.1.15",
"resolved": "https://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz",
"integrity": "sha1-4kS5GFuBdUc7/2B5MkkFEV+D3Hw="
},
"cordova-serve": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/cordova-serve/-/cordova-serve-2.0.1.tgz",
"integrity": "sha512-3Xl1D5eyiQlY5ow6Kn/say0us2TqSw/zgQmyTLxbewTngQZ1CIqxmqD7EFGoCNBrB4HsdPmpiSpFCitybKQN9g==",
"requires": {
"chalk": "^1.1.1",
"compression": "^1.6.0",
"express": "^4.13.3",
"opn": "^5.3.0",
"shelljs": "^0.5.3"
}
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
},
"destroy": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"elementtree": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz",
"integrity": "sha1-KsTEbqMFFsjEy9teOsdBjlkt4gw=",
"requires": {
"sax": "0.3.5"
}
},
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
"express": {
"version": "4.16.3",
"resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz",
"integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=",
"requires": {
"accepts": "~1.3.5",
"array-flatten": "1.1.1",
"body-parser": "1.18.2",
"content-disposition": "0.5.2",
"content-type": "~1.0.4",
"cookie": "0.3.1",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "~1.1.2",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "1.1.1",
"fresh": "0.5.2",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
"on-finished": "~2.3.0",
"parseurl": "~1.3.2",
"path-to-regexp": "0.1.7",
"proxy-addr": "~2.0.3",
"qs": "6.5.1",
"range-parser": "~1.2.0",
"safe-buffer": "5.1.1",
"send": "0.16.2",
"serve-static": "1.13.2",
"setprototypeof": "1.1.0",
"statuses": "~1.4.0",
"type-is": "~1.6.16",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
}
},
"finalhandler": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
"integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "~2.3.0",
"parseurl": "~1.3.2",
"statuses": "~1.4.0",
"unpipe": "~1.0.0"
}
},
"forwarded": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
},
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"glob": {
"version": "5.0.15",
"resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
"requires": {
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "2 || 3",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"has-ansi": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
"requires": {
"ansi-regex": "^2.0.0"
}
},
"http-errors": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
"integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.3",
"setprototypeof": "1.1.0",
"statuses": ">= 1.4.0 < 2"
}
},
"iconv-lite": {
"version": "0.4.19",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
"integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"ipaddr.js": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz",
"integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs="
},
"is-wsl": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
"integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
},
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
},
"mime": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
"integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
},
"mime-db": {
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
"integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="
},
"mime-types": {
"version": "2.1.18",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
"integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
"requires": {
"mime-db": "~1.33.0"
}
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"requires": {
"brace-expansion": "^1.1.7"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"negotiator": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
},
"nopt": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"requires": {
"abbrev": "1"
}
},
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
"requires": {
"ee-first": "1.1.1"
}
},
"on-headers": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
"integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "1"
}
},
"opn": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
"integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
"requires": {
"is-wsl": "^1.1.0"
}
},
"parseurl": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
"integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
"plist": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz",
"integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=",
"requires": {
"base64-js": "1.2.0",
"xmlbuilder": "8.2.2",
"xmldom": "0.1.x"
}
},
"proxy-addr": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz",
"integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==",
"requires": {
"forwarded": "~0.1.2",
"ipaddr.js": "1.6.0"
}
},
"q": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
"integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
},
"qs": {
"version": "6.5.1",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
"integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
},
"range-parser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
"integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
},
"raw-body": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
"integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
"requires": {
"bytes": "3.0.0",
"http-errors": "1.6.2",
"iconv-lite": "0.4.19",
"unpipe": "1.0.0"
},
"dependencies": {
"depd": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
"integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
},
"http-errors": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
"integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
"requires": {
"depd": "1.1.1",
"inherits": "2.0.3",
"setprototypeof": "1.0.3",
"statuses": ">= 1.3.1 < 2"
}
},
"setprototypeof": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
"integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
}
}
},
"safe-buffer": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
},
"sax": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/sax/-/sax-0.3.5.tgz",
"integrity": "sha1-iPz8H3PAyLvVt8d2ttPzUB7tBz0="
},
"send": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
"integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
"requires": {
"debug": "2.6.9",
"depd": "~1.1.2",
"destroy": "~1.0.4",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
"http-errors": "~1.6.2",
"mime": "1.4.1",
"ms": "2.0.0",
"on-finished": "~2.3.0",
"range-parser": "~1.2.0",
"statuses": "~1.4.0"
}
},
"serve-static": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
"integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.2",
"send": "0.16.2"
}
},
"setprototypeof": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
"integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
},
"shelljs": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz",
"integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM="
},
"statuses": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
"integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
},
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"requires": {
"ansi-regex": "^2.0.0"
}
},
"supports-color": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
},
"type-is": {
"version": "1.6.16",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
"integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
"requires": {
"media-typer": "0.3.0",
"mime-types": "~2.1.18"
}
},
"underscore": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
"integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="
},
"unorm": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz",
"integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA="
},
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"xmlbuilder": {
"version": "8.2.2",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
"integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M="
},
"xmldom": {
"version": "0.1.27",
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
"integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk="
}
}
},
"cordova-plugin-battery-status": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/cordova-plugin-battery-status/-/cordova-plugin-battery-status-1.2.5.tgz",
"integrity": "sha1-bGSPmzz1qwNLlcXP/lhPVXbULKk="
},
"cordova-plugin-device": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-1.1.7.tgz",
"integrity": "sha1-/JQRG+aTJijGaGiTjd89yCyfv+Y="
},
"cordova-plugin-dialogs": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/cordova-plugin-dialogs/-/cordova-plugin-dialogs-1.3.4.tgz",
"integrity": "sha1-XMlm7nyZsvW1s934SQAmKLDacVc="
},
"cordova-plugin-globalization": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/cordova-plugin-globalization/-/cordova-plugin-globalization-1.0.9.tgz",
"integrity": "sha1-RluZmP7qC4iIRNCc19oCv6Jst6M="
},
"cordova-plugin-inappbrowser": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-inappbrowser/-/cordova-plugin-inappbrowser-1.7.2.tgz",
"integrity": "sha1-ZHY0lb6H6y562xoI8CCblupc7uA="
},
"cordova-plugin-network-information": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/cordova-plugin-network-information/-/cordova-plugin-network-information-1.3.4.tgz",
"integrity": "sha1-KPQmzCZZF03GIqBxgPm6DYVfc4M="
},
"cordova-plugin-statusbar": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-statusbar/-/cordova-plugin-statusbar-2.4.2.tgz",
"integrity": "sha1-/B+9wNjXAzp+jh8ff/FnrJvU+vY="
}
}
}

BIN
app/www/OpenSans-Light-webfont.woff View File


BIN
app/www/OpenSans-Regular-webfont.woff View File


+ 54
- 0
app/www/app.html View File

@@ -0,0 +1,54 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Nordcast</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="color-thief.js"></script>
<script src="primarycolor.js"></script>
<script src="getfeed.js"></script>
<script src="https://unpkg.com/ionicons@4.5.10-0/dist/ionicons.js"></script>
<script src="config.js"></script>
<script type="text/javascript" src="cordova.js"></script>
<script src="cordova.js"></script>
<script src="app.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</head>
<body>
<img src="logo.svg" height="128" alt="Logo" id="logo__intro" />
<div id="nav">
<img src="logo.svg" height="96" alt="Logo" id="logo__nav" />
<ion-icon name="settings" class="fa__nav"></ion-icon>
<ion-icon name="search" class="fa__nav2"></ion-icon>
<div id="wrapper__search">
<input type="text" id="qq" />
</div>
</div>
<div id="view__main">
<h1>Angesagt</h1>
<div id="section__featured">
</div>
<br /><h2>Nordcast Originals</h3>
<div id="section__originals">
<p><img src="fake_data/4.jpg" class="card__smaller" /><img src="fake_data/5.jpg" class="card__smaller" /><img src="fake_data/6.jpg" class="card__smaller" /><img src="fake_data/7.jpg" class="card__smaller" /><img src="fake_data/8.jpg" class="card__smaller" /><img src="fake_data/4.jpg" class="card__smaller" /><img src="fake_data/5.jpg" class="card__smaller" /><img src="fake_data/6.jpg" class="card__smaller" /><img src="fake_data/7.jpg" class="card__smaller" /><img src="fake_data/8.jpg" class="card__smaller" /></p>
</div>
<br /><h3>Neu und heiß</h3>
<div id="section__trending">
<p><img src="fake_data/4.jpg" class="card__small" /><img src="fake_data/5.jpg" class="card__small" /><img src="fake_data/6.jpg" class="card__small" /><img src="fake_data/7.jpg" class="card__small" /><img src="fake_data/8.jpg" class="card__small" /><img src="fake_data/4.jpg" class="card__small" /><img src="fake_data/5.jpg" class="card__small" /><img src="fake_data/6.jpg" class="card__small" /><img src="fake_data/7.jpg" class="card__small" /><img src="fake_data/8.jpg" class="card__small" /></p>
</div>
<br /><h3>Deine Liste</h3>
<div id="section__list">
</div>
</div>
<div id="view__settings">
<h1>Einstellungen</h1><br />
<button type="button" id="logout" class="btn btn-danger">Abmelden</button>
</div>
</body>
</html>

+ 88
- 0
app/www/app.js View File

@@ -0,0 +1,88 @@
document.addEventListener("deviceready", onDeviceReady, false);
$(document).ready(function() {
$("#view__main").css("padding-top", "90px");
var searchtoggle = false;
$("#wrapper__search").hide();
localStorage.setItem("podlist", "https://aboutweb.podigee.io/feed/mp3,https://www.nrwision.de/mediathek/sendungen/abschied-von-der-steinkohle/rss/100/")
$("#view__main").hide();
$("#view__settings").hide();
$("#nav").hide();
window.setTimeout(function() {
$("#logo__intro").hide();
$("#view__main").show();
$("#nav").show();
}, 2000);
$("#logout").click(function() {
localStorage.clear()
window.setTimeout(function() {
location.href = "index.html";
}, 200);
});
if (localStorage.getItem("podlist") === null) {
$("#section__list").html("<p style=\"text-align:center;\">Es befinden sich keine Podcasts in deiner Liste.</p>")
} else {
$("#section__list").html($("#section__list").html()+"<p>");
localStorage.getItem("podlist").split(",").forEach(function(feed) {
$.get(backend+"/api/v1/getpodcast?q="+feed, function(callback) {
$("#section__list").html($("#section__list").html()+"<img src=\""+callback.feed.image.href+"\" class=\"card__small\" />")
});
});
$("#section__list").html($("#section__list").html()+"</p>");
}
$("#section__featured").html();
$("#section__featured").html($("#section__featured").html()+"<div><img src=\""+backend+"/api/v1/getbanner/1\" class=\"card__big\" /></div>");
$("#section__featured").html($("#section__featured").html()+"<div><img src=\""+backend+"/api/v1/getbanner/2\" class=\"card__big\" /></div>");
$("#section__featured").html($("#section__featured").html()+"<div><img src=\""+backend+"/api/v1/getbanner/3\" class=\"card__big\" /></div>");

$(".card__big").primaryColor({
callback: function(color) {
$(this).css('box-shadow', '0px 0px 13px 2px rgba('+color+',0.75)');
}
});
$(".fa__nav2").click(function() {
if (searchtoggle === false) {
$("#wrapper__search").show();
searchtoggle = true;
$("#view__main").css("padding-top", "150px");
} else {
$("#wrapper__search").hide();
searchtoggle = false;
$("#view__main").css("padding-top", "90px");
}
});
$(".fa__nav").click(function() {
$("#view__main").hide();
$(".fa__nav").hide();
$(".fa__nav2").hide();
$("#wrapper__search").hide();
$("#view__main").css("padding-top", "90px");
searchtoggle = false;
$("#view__settings").show();
});
$("#logo__nav").click(function() {
$("#view__main").show();
$(".fa__nav").show();
$(".fa__nav2").show();
$("#view__settings").hide();
});
$("#qq").keyup(function() {
$.getJSON("https://searchapi.koyu.space/" + $("#qq").val(), function(data) {
$("#qq").autocomplete({
source: data[1],
select: function() {
setTimeout(function() {
$("#submit").click();
}, 50);
}
});
});
});
});

//Cordova-specific code
function onDeviceReady() {
if (cordova.platformId == 'android') {
StatusBar.backgroundColorByHexString("#fff");
}
}

+ 1
- 0
app/www/config.js View File

@@ -0,0 +1 @@
var backend = "http://192.168.178.95:9000";

BIN
app/www/fake_data/1.jpg View File


BIN
app/www/fake_data/2.jpg View File


BIN
app/www/fake_data/3.jpg View File


BIN
app/www/fake_data/4.jpg View File


BIN
app/www/fake_data/5.jpg View File


BIN
app/www/fake_data/6.jpg View File


BIN
app/www/fake_data/7.jpg View File


BIN
app/www/fake_data/8.jpg View File


+ 23
- 0
app/www/fonts.css View File

@@ -0,0 +1,23 @@
@font-face {
font-family: 'open_sansregular';
src: url('OpenSans-Regular-webfont.eot');
src: url('OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'),
url('OpenSans-Regular-webfont.woff') format('woff'),
url('OpenSans-Regular-webfont.ttf') format('truetype'),
url('OpenSans-Regular-webfont.svg#open_sansregular') format('svg');
font-weight: normal;
font-style: normal;

}

@font-face {
font-family: 'open_sanslight';
src: url('OpenSans-Light-webfont.eot');
src: url('OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'),
url('OpenSans-Light-webfont.woff') format('woff'),
url('OpenSans-Light-webfont.ttf') format('truetype'),
url('OpenSans-Light-webfont.svg#open_sanslight') format('svg');
font-weight: normal;
font-style: normal;

}

+ 123
- 0
app/www/getfeed.js View File

@@ -0,0 +1,123 @@

/**
* Copyright © 2017 Tino Reichardt (milky at Open-Digital-Signage dot org)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License Version 2, as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* Based on code by Jean-François Hovinne, http://hovinne.com/
* Homepage: https://github.com/mcmilk/jquery.getFeed/
*/

jQuery.getFeed = function(options) {
options = jQuery.extend({
url: null,
data: null,
cache: false,
success: null,
global: true
}, options);

if (options.url) {
return $.ajax({
type: 'GET',
url: options.url,
data: options.data,
cache: options.cache,
dataType: "xml",
success: function (xml) {
var feed = new JFeed(xml);
if (jQuery.isFunction(options.success)) options.success(feed);
},
global: options.global
});
}
};

function JFeed(xml) {
if (xml) this.parse(xml);
};

JFeed.prototype = {
type: '',
version: '',
title: '',
description: '',
parse: function (xml) {
if (jQuery('channel', xml).length == 1) {
this.type = 'rss';
var feedClass = new JRss(xml);
} else if (jQuery('feed', xml).length == 1) {
this.type = 'atom';
var feedClass = new JAtom(xml);
}
if (feedClass) jQuery.extend(this, feedClass);
}
};

function JFeedItem() {};

JFeedItem.prototype = {
title: '',
description: ''
};

function JAtom(xml) {
this._parse(xml);
};

JAtom.prototype = {

_parse: function (xml) {

var channel = jQuery('feed', xml).eq(0);

this.version = '1.0';
this.title = jQuery(channel).find('title:first').text();
this.description = jQuery(channel).find('subtitle:first').text();

this.items = new Array();
var feed = this;
jQuery('entry', xml).each(function () {
var item = new JFeedItem();
item.title = jQuery(this).find('title').eq(0).text();
item.description = jQuery(this).find('content').eq(0).html();
if (item.description === undefined) {
item.description = jQuery(this).find('summary').eq(0).text();
}
feed.items.push(item);
});
}
};

function JRss(xml) {
this._parse(xml);
};

JRss.prototype = {
_parse: function (xml) {
if (jQuery('rss', xml).length == 0) this.version = '1.0';
else this.version = jQuery('rss', xml).eq(0).attr('version');

var channel = jQuery('channel', xml).eq(0);
this.title = jQuery(channel).find('title:first').text();
this.description = jQuery(channel).find('description:first').text();

this.items = new Array();
var feed = this;

jQuery('item', xml).each(function () {
var item = new JFeedItem();
item._element = this;
item.title = $('<div/>').html(jQuery(this).find('title').eq(0).text()).text();
item.description = $('<div/>').html(jQuery(this).find('description').eq(0).text()).text();
feed.items.push(item);
});
}
};

BIN
app/www/img/logo.png View File


+ 31
- 0
app/www/index.html View File

@@ -0,0 +1,31 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Nordcast</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="primarycolor.js"></script>
<script src="getfeed.js"></script>
<script src="https://kit.fontawesome.com/8b5d897402.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script src="config.js"></script>
<script src="cordova.js"></script>
<script src="welcome.js"></script>
</head>
<body>
<img src="logo.svg" height="128" alt="Logo" id="logo__intro" />
<div id="view__welcome">
<h1>Willkommen bei Nordcast</h1>
<p>Bitte melde dich mit deinem koyu.space-Account an. Solltest du noch keinen Account haben, kannst du dir <a href="https://koyu.space/auth/sign_up" target="_blank">hier</a> einen machen.</p>
<p><input type="text" id="username" placeholder="Benutzername"></p>
<p><input type="password" id="password" placeholder="Passwort"></p>
<p><button class="btn btn-primary" id="kslogin" style="width: 80%;">Anmelden</button></p>
<div id="welcome__error"></div>
</div>
</body>
</html>

+ 252
- 0
app/www/logo.svg View File

@@ -0,0 +1,252 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg:svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1000"
height="1000"
viewBox="0 0 1000 1000"
id="svg2335"
sodipodi:version="0.32"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
sodipodi:docname="nordcast_logo.svg"
version="1.1">
<head>
<style
id="dark-reader-style">@media screen {

/* Leading rule */
html {
-webkit-filter: invert(100%) hue-rotate(180deg) contrast(150%) !important;
filter: invert(100%) hue-rotate(180deg) contrast(150%) !important;
}

/* Reverse rule */
img,
video,
:not(object):not(body)&gt;embed,
object,
svg image,
[style*=&quot;background:url&quot;],
[style*=&quot;background-image:url&quot;],
[style*=&quot;background: url&quot;],
[style*=&quot;background-image: url&quot;],
[background],
twitterwidget {
-webkit-filter: invert(100%) hue-rotate(180deg) !important;
filter: invert(100%) hue-rotate(180deg) !important;
}
[style*=&quot;background:url&quot;] *,
[style*=&quot;background-image:url&quot;] *,
[style*=&quot;background: url&quot;] *,
[style*=&quot;background-image: url&quot;] *,
input,
[background] *,
img[src^=&quot;https://s0.wp.com/latex.php&quot;],
twitterwidget .NaturalImage-image {
-webkit-filter: none !important;
filter: none !important;
}
.compatibility-with-darkreader-below-4-3-3 {
background: white !important;
}

/* Text contrast */
html {
text-shadow: 0 0 0 !important;
}

/* Full screen */
:-webkit-full-screen, :-webkit-full-screen * {
-webkit-filter: none !important;
filter: none !important;
}
:-moz-full-screen, :-moz-full-screen * {
-webkit-filter: none !important;
filter: none !important;
}
:fullscreen, :fullscreen * {
-webkit-filter: none !important;
filter: none !important;
}

/* Page background */
html {
background: rgb(0,0,0) !important;
}

/* Custom rules */
.compatibility-with-darkreader-below-4-3-3 {
background: white !important;
}

}</style>
</head>
<svg:metadata
id="metadata2494">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</svg:metadata>
<sodipodi:namedview
inkscape:window-height="986"
inkscape:window-width="1632"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
inkscape:zoom="0.49866667"
inkscape:cx="174.69867"
inkscape:cy="565.18164"
inkscape:window-x="1328"
inkscape:window-y="107"
inkscape:current-layer="svg2335"
showgrid="false"
inkscape:window-maximized="1" />
<svg:desc
id="desc2337">Produced by GNUPLOT 4.0 patchlevel 0 </svg:desc>
<svg:defs
id="defs2339">
<svg:circle
id="gpDot"
r="1"
cx="0"
cy="0" />
<svg:path
id="gpPt0"
style="stroke-width:0.133"
d="M -1,0 H 1 M 0,-1 v 2"
inkscape:connector-curvature="0" />
<svg:path
id="gpPt1"
style="stroke-width:0.133"
d="M -1,-1 1,1 M 1,-1 -1,1"
inkscape:connector-curvature="0" />
<svg:path
id="gpPt2"
style="stroke-width:0.133"
d="M -1,0 H 1 M 0,-1 v 2 m -1,-2 2,2 m -2,0 2,-2"
inkscape:connector-curvature="0" />
<svg:rect
id="gpPt3"
style="stroke-width:0.133"
x="-1"
y="-1"
width="2"
height="2" />
<svg:use
xlink:href="#gpPt3"
id="gpPt4"
style="fill:currentColor;stroke:none"
x="0"
y="0"
width="100%"
height="100%" />
<svg:circle
id="gpPt5"
style="stroke-width:0.133"
cx="0"
cy="0"
r="1" />
<svg:use
xlink:href="#gpPt5"
id="gpPt6"
style="fill:currentColor;stroke:none"
x="0"
y="0"
width="100%"
height="100%" />
<svg:path
id="gpPt7"
style="stroke-width:0.133"
d="m 0,-1.33 -1.33,2 h 2.66 z"
inkscape:connector-curvature="0" />
<svg:use
xlink:href="#gpPt7"
id="gpPt8"
style="fill:currentColor;stroke:none"
x="0"
y="0"
width="100%"
height="100%" />
<svg:use
xlink:href="#gpPt7"
id="gpPt9"
transform="scale(-1)"
x="0"
y="0"
width="100%"
height="100%" />
<svg:use
xlink:href="#gpPt9"
id="gpPt10"
style="fill:currentColor;stroke:none"
x="0"
y="0"
width="100%"
height="100%" />
<svg:use
xlink:href="#gpPt3"
id="gpPt11"
transform="rotate(45)"
x="0"
y="0"
width="100%"
height="100%" />
<svg:use
xlink:href="#gpPt11"
id="gpPt12"
style="fill:currentColor;stroke:none"
x="0"
y="0"
width="100%"
height="100%" />
</svg:defs>
<svg:g
style="color:#000000;fill:none;stroke:currentColor;stroke-width:1"
id="g2355"
transform="translate(0,250)" />
<svg:g
id="g4633"
transform="translate(120.85199,-67.324429)">
<svg:path
id="path2487"
d="m 62.008086,563.45728 4.174358,-10.42527 4.638174,-10.42527 4.174357,-9.95139 4.174358,-9.95139 4.174357,-9.47751 4.638175,-9.00364 4.174357,-8.52977 4.174357,-8.05589 4.174361,-7.10813 4.63817,-6.16039 4.17436,-5.68651 4.17436,-4.73876 4.63817,-4.26488 4.17436,-2.84325 4.17435,-1.89551 4.17436,-0.94775 h 4.63818 l 4.17435,0.94775 4.17436,1.89551 4.17436,2.84325 4.63817,4.26488 4.17436,4.73876 4.17436,5.68651 4.63817,6.16039 4.17436,7.10813 4.17436,8.05589 4.17435,8.52977 4.63818,9.00364 4.17436,9.47751 4.17435,9.95139 4.17436,9.95139 4.63817,10.42527 4.17436,10.42527 4.17436,10.42527 4.63817,10.42526 4.17436,9.9514 4.17436,9.95139 4.17436,9.47751 4.63817,9.00364 4.17436,8.52977 4.17435,8.05589 4.17436,7.10813 4.63818,6.16039 4.17435,5.68651 4.17436,4.73876 4.63818,4.26488 4.17435,2.84325 4.17436,1.89551 4.17436,0.94775 h 4.63817 l 4.17436,-0.94775 4.17436,-1.89551 4.17435,-2.84325 4.63818,-4.26488 4.17436,-4.73876 4.17435,-5.68651 4.63818,-6.16039 4.17436,-7.10813 4.17435,-8.05589 4.17436,-8.52977 4.63817,-9.00364 4.17436,-9.47751 4.17436,-9.95139 4.17436,-9.9514 4.63817,-10.42526 4.17436,-10.42527 4.17436,-10.42527 4.63817,-10.42527 4.17436,-9.95139 4.17435,-9.95139 4.17436,-9.47751 4.63818,-9.00364 4.17435,-8.52977 4.17436,-8.05589 4.17436,-7.10813 4.63817,-6.16039 4.17436,-5.68651 4.17436,-4.73876 4.63817,-4.26488 4.17436,-2.84325 4.17436,-1.89551 4.17435,-0.94775 h 4.63818 l 4.17436,0.94775 4.17435,1.89551 4.17436,2.84325 4.63817,4.26488 4.17436,4.73876 4.17436,5.68651 4.63817,6.16039 4.17436,7.10813 4.17436,8.05589 4.17436,8.52977 4.63817,9.00364 4.17436,9.47751 4.17435,9.95139 4.17436,9.95139 4.63818,10.42527 4.17435,10.42527"
style="color:#ff0000;fill:none;stroke:#000300;stroke-width:67.5058136;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<svg:text
id="text97"
y="737.27094"
x="425.93246"
style="font-style:normal;font-weight:normal;font-size:466.86846924px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:11.67171192"
xml:space="preserve"><svg:tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:11.67171192"
y="737.27094"
x="425.93246"
id="tspan95"
sodipodi:role="line">C</svg:tspan></svg:text>
<svg:rect
transform="matrix(0.85313923,0.52168328,-0.36935637,0.92928783,0,0)"
y="430.95306"
x="263.57062"
height="36.202095"
width="13.980225"
id="rect4615"
style="fill:#fe53ef;fill-opacity:0.94117647;stroke:#000300;stroke-width:53.52583694;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</svg:g>
</svg:svg>

+ 107
- 0
app/www/primarycolor.js View File

@@ -0,0 +1,107 @@
/**
* -------------------------------------------------------------------------------------------
* jquery.primarycolor.js v1.2.2
* Licensed under MIT (https://github.com/rythgs/jquery.primarycolor.js/blob/master/LICENCE)
* -------------------------------------------------------------------------------------------
*/
;(function($, window, document, undefined) {

'use strict';

var pluginName = 'primaryColor',
dataName = 'primary-color',
defaults = {
skip: 5, // 総なめすると重いので 5px 飛ばしで走査する
callback: null
};

function Plugin(element, options) {
this.element = element;
this.settings = $.extend({}, defaults, this.configure(options));
this._defaults = defaults;
this._name = pluginName;
this.primary = { rgb: '', count: 0 };
this.init();
}

$.extend(Plugin.prototype, {
init: function() {
$(new Image()).on('load', $.proxy(this.onLoad, this)).prop('src', this.element.src || '');
},
configure: function(options) {
if ( typeof options === 'function' ) {
return {callback: options};
} else if ( typeof options === 'object' || !options ) {
return options;
}
return {};
},
getImageData: function() {
var canvas = document.createElement('canvas');
canvas.width = this.element.width;
canvas.height = this.element.height;
var context = canvas.getContext('2d');
context.drawImage(this.element, 0, 0);
return context.getImageData(0, 0, this.element.width, this.element.height);
},
isApproximateColor: function(color1, color2) {
if ( !color1 || !color2 ) {
return false;
}
var c1 = color1.split(','),
c2 = color2.split(','),
r = c1[0] - c2[0],
g = c1[1] - c2[1],
b = c1[2] - c2[2],
l = Math.sqrt(r * r + g * g + b * b);
return l < 60;
},
onLoad: function() {
console.log(this.element.src);
var image_data = this.getImageData(),
data = image_data.data,
pixel_length = data.length / 4,
// 取得した色の出現回数を格納しておく
colors = {};

// 1px ごとに画像データを走査する ( 1px ごとに rgba の 4 要素ある )
for ( var px = 0; px < pixel_length; px = px + this.settings.skip * 4 ) {

// 透明度を持つものは無視
if ( data[px+3] < 255 ) {
continue;
}

var rgb = [ data[px], data[px+1], data[px+2] ].join(',');
// primary color との近似色判定
if ( this.primary.rgb && this.isApproximateColor(this.primary.rgb, rgb) ) {
rgb = this.primary.rgb;
}

// すでに同じ色が出現しているかカウント
// 保持しているプライマリカラーより出現回数が多くなったら入れ替え
colors[rgb] = colors[rgb] || 0;
var count = ++colors[rgb];
if ( count > this.primary.count ) {
this.primary.rgb = rgb;
this.primary.count = count;
}
}

$.data(this.element, dataName, this.primary.rgb);

if ( typeof this.settings.callback === 'function' ) {
this.settings.callback.call(this.element, this.primary.rgb);
}
}
});

$.fn[pluginName] = function(options) {
return this.each(function() {
if ( !$.data(this, 'plugin_' + pluginName) ) {
$.data(this, 'plugin_' + pluginName, new Plugin(this, options));
}
});
};

})(jQuery, window, document);

+ 155
- 0
app/www/style.css View File

@@ -0,0 +1,155 @@
@import url("fonts.css");

* {
box-sizing: border-box;
}

body {
background: #fff !important;
color: #333;
font-family: 'open_sansregular' !important;
padding: 0;
margin: 0;
}

#view__main {
padding-left: 20px;
}

#logo__intro {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

#nav {
background: #fff;
height: 90px;
position: fixed;
width: 100%;
}

#nav img {
margin: 0 auto;
display: block;
margin-top: -6px;
}

h1, h2, h3 {
font-family: 'open_sanslight';
font-weight: 300;
}

.card__big {
border-radius: 6px;
background: #fff;
margin: 15px;
margin-bottom: 30px;
}

.card__big img {
height: 100%;
}

#section__featured {
overflow-x: scroll;
overflow-y: hidden;
white-space: nowrap;
}

#section__featured div {
display: inline-block;
}

.card__smaller {
border-radius: 6px;
background: #fff;
box-shadow: 0px 0px 3px -1px rgba(0,0,0,0.75);
margin: 5px;
width: 80px;
height: 80px;
}

.card__small {
border-radius: 6px;
background: #fff;
box-shadow: 0px 0px 3px -1px rgba(0,0,0,0.75);
margin: 5px;
width: 64px;
height: 64px;
}

.fa__nav {
font-size: 24px;
margin-top: -60px;
margin-right: 25px;
float: right;
}

.fa__nav2 {
font-size: 24px;
margin-top: -60px;
margin-right: 70px;
float: right;
}

#wrapper__search {
background-color: #fff;
padding: 10px;
text-align: center;
margin: -20px;
}

#wrapper__search input {
border-radius: 5px;
border: 1px solid #ccc;
background: #fff;
color: #333;
height: 48px;
width: 80%;
font-size: 24pt;
font-family: 'open_sanslight';
font-weight: 300;
}

#wrapper__search input:focus {
outline: 0;
}

#view__welcome {
width: 80%;
margin: 0 auto;
text-align: center;
margin-top: 60px;
}

#view__welcome p,
#view__welcome h1 {
margin-bottom: 30px;

}

#view__welcome input,
#view__welcome input:focus {
outline: 0;
border-radius: 5px;
border: 1px solid #ccc;
background: #fff;
color: #333;
height: 48px;
width: 80%;
font-size: 24pt;
font-family: 'open_sanslight';
font-weight: 300;
}

#view__settings {
padding-top: 120px;
padding-left: 20px;
}

p {
margin-bottom: 0;
margin-top: 0;
}

+ 43
- 0
app/www/welcome.js View File

@@ -0,0 +1,43 @@
document.addEventListener("deviceready", onDeviceReady, false);
$(document).ready(function() {
$("#view__welcome").hide();
$("#nav").hide();
window.setTimeout(function() {
$("#logo__intro").hide();
$("#view__welcome").show();
$("#nav").show();
}, 2000);
if (localStorage.getItem("uuid") !== null) {
location.href = "app.html";
}
$("#kslogin").click(function() {
$("#kslogin").attr("disabled", "");
var oldHTML = $("#kslogin").html();
$("#kslogin").html("<i class=\"fas fa-sync-alt fa-spin\"></i> "+$("#kslogin").html());
window.setTimeout(function() {
$.post(backend+"/api/v1/login", {username: $("#username").val(), password: $("#password").val()}, function(data) {
if (data["login"] === "ok") {
localStorage.setItem("uuid", data["uuid"]);
window.setTimeout(function() {
location.href = "app.html";
}, 200)
} else {
$("#kslogin").removeAttr("disabled");
$("#kslogin").html(oldHTML);
$("#welcome__error").html("<p><b style=\"color:red;\">Der Benutzername und/oder das Passwort ist falsch.</b></p>");
}
}).error(function() {
$("#kslogin").removeAttr("disabled");
$("#kslogin").html(oldHTML);
$("#welcome__error").html("<p><b style=\"color:red;\">Der Benutzername und/oder das Passwort ist falsch.</b></p>");
});
}, 1000)
});
});

//Cordova-specific code
function onDeviceReady() {
if (cordova.platformId == 'android') {
StatusBar.backgroundColorByHexString("#fff");
}
}

+ 49
- 0
backend.py View File

@@ -0,0 +1,49 @@
from bottle import *
from mastodon import Mastodon
import feedparser
import json
import os.path
import redis
import uuid

admin = "koyu"
r = redis.StrictRedis(host='localhost', port=6379, db=0)

@get("/api/v1/getpodcast")
def getpodcast():
q = request.query["q"] # pylint: disable=unsubscriptable-object
response.headers['Access-Control-Allow-Origin'] = '*'
response.content_type = "application/json"
return json.dumps(feedparser.parse(q))

@get("/api/v1/getbanner/<val>")
def getbanner(val):
response.headers['Access-Control-Allow-Origin'] = '*'
response.content_type = "image/jpeg"
f = open("banners/"+val+".jpg", "rb")
img = f.read()
f.close()
return img

@post("/api/v1/login")
def login():
response.headers['Access-Control-Allow-Origin'] = '*'
response.content_type = "application/json"
username = request.forms.get("username")
password = request.forms.get("password")
mastodon = Mastodon(
client_id = 'clientcred.secret',
api_base_url = 'https://koyu.space'
)
mastodon.log_in(
username,
password
)
if not os.path.exists("usercred.secret"):
suid = str(uuid.uuid1())
r.set("nordcast/uuids/" + username, suid)
return json.dumps({"login": "ok", "uuid": suid})
else:
return "{\"login\": \"error\"}"

run(server="tornado",port=9000,host="0.0.0.0")

BIN
banners/1.jpg View File


BIN
banners/2.jpg View File


BIN
banners/3.jpg View File


+ 54
- 0
demo/.bithoundrc View File

@@ -0,0 +1,54 @@
{
"ignore": [
"www/spec/lib/**",
"**/deps/**",
"**/node_modules/**",
"**/thirdparty/**",
"**/third_party/**",
"**/vendor/**",
"**/**-min-**",
"**/**-min.**",
"**/**.min.**",
"**/**jquery.?(ui|effects)-*.*.?(*).?(cs|j)s",
"**/**jquery-*.*.?(*).?(cs|j)s",
"**/prototype?(*).js",
"**/**?(*).ts",
"**/mootools*.*.*.js",
"**/dojo.js",
"**/MochiKit.js",
"**/yahoo-*.js",
"**/yui*.js",
"**/ckeditor*.js",
"**/tiny_mce*.js",
"**/tiny_mce/?(langs|plugins|themes|utils)/**",
"**/MathJax/**",
"**/shBrush*.js",
"**/shCore.js",
"**/shLegacy.js",
"**/modernizr.custom.?(*).js",
"**/knockout-*.*.*.debug.js",
"**/extjs/*.js",
"**/extjs/*.xml",
"**/extjs/*.txt",
"**/extjs/*.html",
"**/extjs/*.properties",
"**/extjs/.sencha",
"**/extjs/docs/**",
"**/extjs/builds/**",
"**/extjs/cmd/**",
"**/extjs/examples/**",
"**/extjs/locale/**",
"**/extjs/packages/**",
"**/extjs/plugins/**",
"**/extjs/resources/**",
"**/extjs/src/**",
"**/extjs/welcome/**",
"bower_components/**"
],
"test": [
"**/test/**",