mirror of
https://gitlab.silvrtree.co.uk/martind2000/feedmaster-core.git
synced 2025-01-10 21:45:08 +00:00
init
This commit is contained in:
commit
c93cf0d286
32
.editorconfig
Normal file
32
.editorconfig
Normal file
@ -0,0 +1,32 @@
|
||||
; http://editorconfig.org
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*.txt]
|
||||
insert_final_newline = false
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.py]
|
||||
indent_size = 4
|
||||
|
||||
[*.m]
|
||||
indent_size = 4
|
||||
|
||||
[Makefile]
|
||||
indent_style = tab
|
||||
indent_size = 8
|
||||
|
||||
[*.{js,json}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
230
.gitignore
vendored
Normal file
230
.gitignore
vendored
Normal file
@ -0,0 +1,230 @@
|
||||
# Created by .ignore support plugin (hsz.mobi)
|
||||
### Archives template
|
||||
# It's better to unpack these files and commit the raw source because
|
||||
# git has its own built in compression methods.
|
||||
*.7z
|
||||
*.jar
|
||||
*.rar
|
||||
*.zip
|
||||
*.gz
|
||||
*.bzip
|
||||
*.bz2
|
||||
*.xz
|
||||
*.lzma
|
||||
*.cab
|
||||
|
||||
#packing-only formats
|
||||
*.iso
|
||||
*.tar
|
||||
|
||||
#package management formats
|
||||
*.dmg
|
||||
*.xpi
|
||||
*.gem
|
||||
*.egg
|
||||
*.deb
|
||||
*.rpm
|
||||
*.msi
|
||||
*.msm
|
||||
*.msp
|
||||
### Windows template
|
||||
# Windows image file caches
|
||||
Thumbs.db
|
||||
ehthumbs.db
|
||||
|
||||
# Folder config file
|
||||
Desktop.ini
|
||||
|
||||
# Recycle Bin used on file shares
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# Windows Installer files
|
||||
*.cab
|
||||
*.msi
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# Windows shortcuts
|
||||
*.lnk
|
||||
### OSX template
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
### JetBrains template
|
||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio
|
||||
|
||||
*.iml
|
||||
|
||||
## Directory-based project format:
|
||||
.idea/
|
||||
# if you remove the above rule, at least ignore the following:
|
||||
|
||||
# User-specific stuff:
|
||||
# .idea/workspace.xml
|
||||
# .idea/tasks.xml
|
||||
# .idea/dictionaries
|
||||
|
||||
# Sensitive or high-churn files:
|
||||
# .idea/dataSources.ids
|
||||
# .idea/dataSources.xml
|
||||
# .idea/sqlDataSources.xml
|
||||
# .idea/dynamic.xml
|
||||
# .idea/uiDesigner.xml
|
||||
|
||||
# Gradle:
|
||||
# .idea/gradle.xml
|
||||
# .idea/libraries
|
||||
|
||||
# Mongo Explorer plugin:
|
||||
# .idea/mongoSettings.xml
|
||||
|
||||
## File-based project format:
|
||||
*.ipr
|
||||
*.iws
|
||||
|
||||
## Plugin-specific files:
|
||||
|
||||
# IntelliJ
|
||||
/out/
|
||||
|
||||
# mpeltonen/sbt-idea plugin
|
||||
.idea_modules/
|
||||
|
||||
# JIRA plugin
|
||||
atlassian-ide-plugin.xml
|
||||
|
||||
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||
com_crashlytics_export_strings.xml
|
||||
crashlytics.properties
|
||||
crashlytics-build.properties
|
||||
### Node template
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
|
||||
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (http://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directory
|
||||
# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git
|
||||
node_modules
|
||||
bower_components
|
||||
|
||||
### VisualStudioCode template
|
||||
.settings
|
||||
|
||||
### Xcode template
|
||||
# Xcode
|
||||
#
|
||||
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
|
||||
|
||||
## Build generated
|
||||
build/
|
||||
DerivedData
|
||||
|
||||
## Various settings
|
||||
*.pbxuser
|
||||
!default.pbxuser
|
||||
*.mode1v3
|
||||
!default.mode1v3
|
||||
*.mode2v3
|
||||
!default.mode2v3
|
||||
*.perspectivev3
|
||||
!default.perspectivev3
|
||||
xcuserdata
|
||||
|
||||
## Other
|
||||
*.xccheckout
|
||||
*.moved-aside
|
||||
*.xcuserstate
|
||||
|
||||
dist
|
||||
www/libs
|
||||
/www/
|
||||
/app/libs/
|
||||
### Android template
|
||||
# Built application files
|
||||
*.apk
|
||||
*.ap_
|
||||
|
||||
# Files for the ART/Dalvik VM
|
||||
*.dex
|
||||
|
||||
# Java class files
|
||||
*.class
|
||||
|
||||
# Generated files
|
||||
bin/
|
||||
gen/
|
||||
out/
|
||||
|
||||
# Gradle files
|
||||
.gradle/
|
||||
build/
|
||||
|
||||
# Local configuration file (sdk path, etc)
|
||||
local.properties
|
||||
|
||||
# Proguard folder generated by Eclipse
|
||||
proguard/
|
||||
|
||||
# Log Files
|
||||
*.log
|
||||
|
||||
# Android Studio Navigation editor temp files
|
||||
.navigation/
|
||||
|
||||
# Android Studio captures folder
|
||||
captures/
|
||||
|
||||
# Intellij
|
||||
*.iml
|
||||
.idea/workspace.xml
|
||||
|
||||
# Keystore files
|
||||
*.jks
|
||||
### Dropbox template
|
||||
# Dropbox settings and caches
|
||||
.dropbox
|
||||
.dropbox.attr
|
||||
.dropbox.cache
|
||||
|
46
.jscsrc
Normal file
46
.jscsrc
Normal file
@ -0,0 +1,46 @@
|
||||
{
|
||||
"disallowKeywords": ["with"],
|
||||
"disallowKeywordsOnNewLine": ["else"],
|
||||
"disallowMixedSpacesAndTabs": true,
|
||||
"disallowMultipleVarDecl": "exceptUndefined",
|
||||
"disallowNewlineBeforeBlockStatements": true,
|
||||
"disallowQuotedKeysInObjects": true,
|
||||
"disallowSpaceAfterObjectKeys": true,
|
||||
"disallowSpaceAfterPrefixUnaryOperators": true,
|
||||
"disallowSpacesInFunction": {
|
||||
"beforeOpeningRoundBrace": true
|
||||
},
|
||||
"disallowSpacesInsideParentheses": true,
|
||||
"disallowTrailingWhitespace": true,
|
||||
"maximumLineLength": 160,
|
||||
"requireCamelCaseOrUpperCaseIdentifiers": false,
|
||||
"requireCapitalizedComments": true,
|
||||
"requireCapitalizedConstructors": true,
|
||||
"requireCurlyBraces": true,
|
||||
"requireSpaceAfterKeywords": [
|
||||
"if",
|
||||
"else",
|
||||
"for",
|
||||
"while",
|
||||
"do",
|
||||
"switch",
|
||||
"case",
|
||||
"return",
|
||||
"try",
|
||||
"catch",
|
||||
"typeof"
|
||||
],
|
||||
"requireSpaceAfterLineComment": true,
|
||||
"requireSpaceAfterBinaryOperators": true,
|
||||
"requireSpaceBeforeBinaryOperators": true,
|
||||
"requireSpaceBeforeBlockStatements": true,
|
||||
"requireSpaceBeforeObjectValues": true,
|
||||
"requireSpacesInFunction": {
|
||||
"beforeOpeningCurlyBrace": true
|
||||
},
|
||||
"requireTrailingComma": false,
|
||||
"requireEarlyReturn": false,
|
||||
"validateIndentation": 2,
|
||||
"validateLineBreaks": "LF",
|
||||
"validateQuoteMarks": "'"
|
||||
}
|
37
.jshintrc
Normal file
37
.jshintrc
Normal file
@ -0,0 +1,37 @@
|
||||
{
|
||||
"predef": [
|
||||
"Promise",
|
||||
"$"
|
||||
],
|
||||
"globals": {
|
||||
"$": false,
|
||||
"MicroEvent": false
|
||||
},
|
||||
"node":true,
|
||||
"browser": true,
|
||||
"boss": true,
|
||||
"curly": true,
|
||||
"debug": false,
|
||||
"devel": true,
|
||||
"eqeqeq": true,
|
||||
"evil": true,
|
||||
"forin": false,
|
||||
"immed": false,
|
||||
"laxbreak": false,
|
||||
"newcap": true,
|
||||
"noarg": true,
|
||||
"noempty": false,
|
||||
"nonew": false,
|
||||
"nomen": false,
|
||||
"onevar": false,
|
||||
"plusplus": false,
|
||||
"regexp": false,
|
||||
"undef": true,
|
||||
"sub": true,
|
||||
"strict": false,
|
||||
"white": false,
|
||||
"eqnull": true,
|
||||
"esnext": true,
|
||||
"unused": true,
|
||||
"supernew":true
|
||||
}
|
BIN
app/assets/fm-old.png
Normal file
BIN
app/assets/fm-old.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.9 KiB |
BIN
app/assets/fm.png
Normal file
BIN
app/assets/fm.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.5 KiB |
BIN
app/assets/tf_small_pale.png
Normal file
BIN
app/assets/tf_small_pale.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.3 KiB |
76
app/css/normalize-min.css
vendored
Normal file
76
app/css/normalize-min.css
vendored
Normal file
@ -0,0 +1,76 @@
|
||||
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;}
|
||||
body{margin:0;}
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
menu,
|
||||
nav,
|
||||
section,
|
||||
summary{display:block;}
|
||||
audio,
|
||||
canvas,
|
||||
progress,
|
||||
video{display:inline-block;vertical-align:baseline;}
|
||||
audio:not([controls]){display:none;height:0;}
|
||||
[hidden],
|
||||
template{display:none;}
|
||||
a{background-color:transparent;}
|
||||
a:active,
|
||||
a:hover{outline:0;}
|
||||
abbr[title]{border-bottom:1px dotted;}
|
||||
b,
|
||||
strong{font-weight:bold;}
|
||||
dfn{font-style:italic;}
|
||||
h1{font-size:2em;margin:0.67em 0;}
|
||||
mark{background:#ff0;color:#000;}
|
||||
small{font-size:80%;}
|
||||
sub,
|
||||
sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}
|
||||
sup{top:-0.5em;}
|
||||
sub{bottom:-0.25em;}
|
||||
img{border:0;}
|
||||
svg:not(:root){overflow:hidden;}
|
||||
figure{margin:1em 40px;}
|
||||
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0;}
|
||||
pre{overflow:auto;}
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp{font-family:monospace, monospace;font-size:1em;}
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea{color:inherit;font:inherit;margin:0;}
|
||||
button{overflow:visible;}
|
||||
button,
|
||||
select{text-transform:none;}
|
||||
button,
|
||||
html input[type="button"],
|
||||
input[type="reset"],
|
||||
input[type="submit"]{-webkit-appearance:button;cursor:pointer;}
|
||||
button[disabled],
|
||||
html input[disabled]{cursor:default;}
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner{border:0;padding:0;}
|
||||
input{line-height:normal;}
|
||||
input[type="checkbox"],
|
||||
input[type="radio"]{box-sizing:border-box;padding:0;}
|
||||
input[type="number"]::-webkit-inner-spin-button,
|
||||
input[type="number"]::-webkit-outer-spin-button{height:auto;}
|
||||
input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;}
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;}
|
||||
fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em;}
|
||||
legend{border:0;padding:0;}
|
||||
textarea{overflow:auto;}
|
||||
optgroup{font-weight:bold;}
|
||||
table{border-collapse:collapse;border-spacing:0;}
|
||||
td,
|
||||
th{padding:0;}
|
427
app/css/normalize.css
vendored
Normal file
427
app/css/normalize.css
vendored
Normal file
@ -0,0 +1,427 @@
|
||||
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
|
||||
|
||||
/**
|
||||
* 1. Set default font family to sans-serif.
|
||||
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||
* user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
font-family: sans-serif; /* 1 */
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
||||
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
||||
* and Firefox.
|
||||
* Correct `block` display not defined for `main` in IE 11.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
menu,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `inline-block` display not defined in IE 8/9.
|
||||
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
progress,
|
||||
video {
|
||||
display: inline-block; /* 1 */
|
||||
vertical-align: baseline; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `[hidden]` styling not present in IE 8/9/10.
|
||||
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
|
||||
*/
|
||||
|
||||
[hidden],
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the gray background color from active links in IE 10.
|
||||
*/
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability when focused and also mouse hovered in all browsers.
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address variable `h1` font-size and margin within `section` and `article`
|
||||
* contexts in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/* Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove border when inside `a` element in IE 8/9/10.
|
||||
*/
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct overflow not hidden in IE 9/10/11.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margin not present in IE 8/9 and Safari.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Contain overflow in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address odd `em`-unit font size rendering in all browsers.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||||
* styling of `select`, unless a `border` property is set.
|
||||
*/
|
||||
|
||||
/**
|
||||
* 1. Correct color not being inherited.
|
||||
* Known issue: affects color of disabled elements.
|
||||
* 2. Correct font properties not being inherited.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
color: inherit; /* 1 */
|
||||
font: inherit; /* 2 */
|
||||
margin: 0; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
button {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
||||
* Correct `select` style inheritance in Firefox.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
cursor: pointer; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* It's recommended that you don't attempt to style these elements.
|
||||
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||||
*
|
||||
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||
* 2. Remove excess padding in IE 8/9/10.
|
||||
*/
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||||
* `font-size` values of the `input`, it causes the cursor style of the
|
||||
* decrement button to change from `default` to `text`.
|
||||
*/
|
||||
|
||||
input[type="number"]::-webkit-inner-spin-button,
|
||||
input[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
|
||||
* (include `-moz` to future-proof).
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
-moz-box-sizing: content-box;
|
||||
-webkit-box-sizing: content-box; /* 2 */
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||||
* Safari (but not Chrome) clips the cancel button when the search input has
|
||||
* padding (and `textfield` appearance).
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
border: 0; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default vertical scrollbar in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Don't inherit the `font-weight` (applied by a rule above).
|
||||
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||||
*/
|
||||
|
||||
optgroup {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
padding: 0;
|
||||
}
|
181
app/css/skeleton-min.css
vendored
Normal file
181
app/css/skeleton-min.css
vendored
Normal file
@ -0,0 +1,181 @@
|
||||
.container{position:relative;width:100%;max-width:960px;margin:0 auto;padding:0 20px;box-sizing:border-box;}
|
||||
.column,
|
||||
.columns{width:100%;float:left;box-sizing:border-box;}
|
||||
@media (min-width:400px){.container{width:85%;padding:0;}
|
||||
}
|
||||
@media (min-width:550px){.container{width:80%;}
|
||||
.column,
|
||||
.columns{margin-left:4%;}
|
||||
.column:first-child,
|
||||
.columns:first-child{margin-left:0;}
|
||||
.one.column,
|
||||
.one.columns{width:4.66666666667%;}
|
||||
.two.columns{width:13.3333333333%;}
|
||||
.three.columns{width:22%;}
|
||||
.four.columns{width:30.6666666667%;}
|
||||
.five.columns{width:39.3333333333%;}
|
||||
.six.columns{width:48%;}
|
||||
.seven.columns{width:56.6666666667%;}
|
||||
.eight.columns{width:65.3333333333%;}
|
||||
.nine.columns{width:74.0%;}
|
||||
.ten.columns{width:82.6666666667%;}
|
||||
.eleven.columns{width:91.3333333333%;}
|
||||
.twelve.columns{width:100%;margin-left:0;}
|
||||
.one-third.column{width:30.6666666667%;}
|
||||
.two-thirds.column{width:65.3333333333%;}
|
||||
.one-half.column{width:48%;}
|
||||
.offset-by-one.column,
|
||||
.offset-by-one.columns{margin-left:8.66666666667%;}
|
||||
.offset-by-two.column,
|
||||
.offset-by-two.columns{margin-left:17.3333333333%;}
|
||||
.offset-by-three.column,
|
||||
.offset-by-three.columns{margin-left:26%;}
|
||||
.offset-by-four.column,
|
||||
.offset-by-four.columns{margin-left:34.6666666667%;}
|
||||
.offset-by-five.column,
|
||||
.offset-by-five.columns{margin-left:43.3333333333%;}
|
||||
.offset-by-six.column,
|
||||
.offset-by-six.columns{margin-left:52%;}
|
||||
.offset-by-seven.column,
|
||||
.offset-by-seven.columns{margin-left:60.6666666667%;}
|
||||
.offset-by-eight.column,
|
||||
.offset-by-eight.columns{margin-left:69.3333333333%;}
|
||||
.offset-by-nine.column,
|
||||
.offset-by-nine.columns{margin-left:78.0%;}
|
||||
.offset-by-ten.column,
|
||||
.offset-by-ten.columns{margin-left:86.6666666667%;}
|
||||
.offset-by-eleven.column,
|
||||
.offset-by-eleven.columns{margin-left:95.3333333333%;}
|
||||
.offset-by-one-third.column,
|
||||
.offset-by-one-third.columns{margin-left:34.6666666667%;}
|
||||
.offset-by-two-thirds.column,
|
||||
.offset-by-two-thirds.columns{margin-left:69.3333333333%;}
|
||||
.offset-by-one-half.column,
|
||||
.offset-by-one-half.columns{margin-left:52%;}
|
||||
}
|
||||
html{font-size:62.5%;}
|
||||
body{font-size:1.5em;line-height:1.6;font-weight:400;font-family:"Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;color:#222;}
|
||||
h1, h2, h3, h4, h5, h6{margin-top:0;margin-bottom:2rem;font-weight:300;}
|
||||
h1{font-size:4.0rem;line-height:1.2;letter-spacing:-.1rem;}
|
||||
h2{font-size:3.6rem;line-height:1.25;letter-spacing:-.1rem;}
|
||||
h3{font-size:3.0rem;line-height:1.3;letter-spacing:-.1rem;}
|
||||
h4{font-size:2.4rem;line-height:1.35;letter-spacing:-.08rem;}
|
||||
h5{font-size:1.8rem;line-height:1.5;letter-spacing:-.05rem;}
|
||||
h6{font-size:1.5rem;line-height:1.6;letter-spacing:0;}
|
||||
@media (min-width:550px){h1{font-size:5.0rem;}
|
||||
h2{font-size:4.2rem;}
|
||||
h3{font-size:3.6rem;}
|
||||
h4{font-size:3.0rem;}
|
||||
h5{font-size:2.4rem;}
|
||||
h6{font-size:1.5rem;}
|
||||
}
|
||||
p{margin-top:0;}
|
||||
a{color:#1EAEDB;}
|
||||
a:hover{color:#0FA0CE;}
|
||||
.button,
|
||||
button,
|
||||
input[type="submit"],
|
||||
input[type="reset"],
|
||||
input[type="button"]{display:inline-block;height:38px;padding:0 30px;color:#555;text-align:center;font-size:11px;font-weight:600;line-height:38px;letter-spacing:.1rem;text-transform:uppercase;text-decoration:none;white-space:nowrap;background-color:transparent;border-radius:4px;border:1px solid #bbb;cursor:pointer;box-sizing:border-box;}
|
||||
.button:hover,
|
||||
button:hover,
|
||||
input[type="submit"]:hover,
|
||||
input[type="reset"]:hover,
|
||||
input[type="button"]:hover,
|
||||
.button:focus,
|
||||
button:focus,
|
||||
input[type="submit"]:focus,
|
||||
input[type="reset"]:focus,
|
||||
input[type="button"]:focus{color:#333;border-color:#888;outline:0;}
|
||||
.button.button-primary,
|
||||
button.button-primary,
|
||||
input[type="submit"].button-primary,
|
||||
input[type="reset"].button-primary,
|
||||
input[type="button"].button-primary{color:#FFF;background-color:#33C3F0;border-color:#33C3F0;}
|
||||
.button.button-primary:hover,
|
||||
button.button-primary:hover,
|
||||
input[type="submit"].button-primary:hover,
|
||||
input[type="reset"].button-primary:hover,
|
||||
input[type="button"].button-primary:hover,
|
||||
.button.button-primary:focus,
|
||||
button.button-primary:focus,
|
||||
input[type="submit"].button-primary:focus,
|
||||
input[type="reset"].button-primary:focus,
|
||||
input[type="button"].button-primary:focus{color:#FFF;background-color:#1EAEDB;border-color:#1EAEDB;}
|
||||
input[type="email"],
|
||||
input[type="number"],
|
||||
input[type="search"],
|
||||
input[type="text"],
|
||||
input[type="tel"],
|
||||
input[type="url"],
|
||||
input[type="password"],
|
||||
textarea,
|
||||
select{height:38px;padding:6px 10px;background-color:#fff;border:1px solid #D1D1D1;border-radius:4px;box-shadow:none;box-sizing:border-box;}
|
||||
input[type="email"],
|
||||
input[type="number"],
|
||||
input[type="search"],
|
||||
input[type="text"],
|
||||
input[type="tel"],
|
||||
input[type="url"],
|
||||
input[type="password"],
|
||||
textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;}
|
||||
textarea{min-height:65px;padding-top:6px;padding-bottom:6px;}
|
||||
input[type="email"]:focus,
|
||||
input[type="number"]:focus,
|
||||
input[type="search"]:focus,
|
||||
input[type="text"]:focus,
|
||||
input[type="tel"]:focus,
|
||||
input[type="url"]:focus,
|
||||
input[type="password"]:focus,
|
||||
textarea:focus,
|
||||
select:focus{border:1px solid #33C3F0;outline:0;}
|
||||
label,
|
||||
legend{display:block;margin-bottom:.5rem;font-weight:600;}
|
||||
fieldset{padding:0;border-width:0;}
|
||||
input[type="checkbox"],
|
||||
input[type="radio"]{display:inline;}
|
||||
label > .label-body{display:inline-block;margin-left:.5rem;font-weight:normal;}
|
||||
ul{list-style:circle inside;}
|
||||
ol{list-style:decimal inside;}
|
||||
ol, ul{padding-left:0;margin-top:0;}
|
||||
ul ul,
|
||||
ul ol,
|
||||
ol ol,
|
||||
ol ul{margin:1.5rem 0 1.7rem 3rem;font-size:90%;}
|
||||
li{margin-bottom:1rem;}
|
||||
code{padding:.2rem .5rem;margin:0 .2rem;font-size:90%;white-space:nowrap;background:#F1F1F1;border:1px solid #E1E1E1;border-radius:4px;}
|
||||
pre > code{display:block;padding:1rem 1.5rem;white-space:pre;}
|
||||
th,
|
||||
td{padding:12px 15px;text-align:left;border-bottom:1px solid #E1E1E1;}
|
||||
th:first-child,
|
||||
td:first-child{padding-left:0;}
|
||||
th:last-child,
|
||||
td:last-child{padding-right:0;}
|
||||
button,
|
||||
.button{margin-bottom:1rem;}
|
||||
input,
|
||||
textarea,
|
||||
select,
|
||||
fieldset{margin-bottom:1.5rem;}
|
||||
pre,
|
||||
blockquote,
|
||||
dl,
|
||||
figure,
|
||||
table,
|
||||
p,
|
||||
ul,
|
||||
ol,
|
||||
form{margin-bottom:2.5rem;}
|
||||
.u-full-width{width:100%;box-sizing:border-box;}
|
||||
.u-max-full-width{max-width:100%;box-sizing:border-box;}
|
||||
.u-pull-right{float:right;}
|
||||
.u-pull-left{float:left;}
|
||||
hr{margin-top:3rem;margin-bottom:3.5rem;border-width:0;border-top:1px solid #E1E1E1;}
|
||||
.container:after,
|
||||
.row:after,
|
||||
.u-cf{content:"";display:table;clear:both;}
|
||||
@media (min-width:400px){}
|
||||
@media (min-width:550px){}
|
||||
@media (min-width:750px){}
|
||||
@media (min-width:1000px){}
|
||||
@media (min-width:1200px){}
|
418
app/css/skeleton.css
vendored
Normal file
418
app/css/skeleton.css
vendored
Normal file
@ -0,0 +1,418 @@
|
||||
/*
|
||||
* Skeleton V2.0.4
|
||||
* Copyright 2014, Dave Gamache
|
||||
* www.getskeleton.com
|
||||
* Free to use under the MIT license.
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* 12/29/2014
|
||||
*/
|
||||
|
||||
|
||||
/* Table of contents
|
||||
––––––––––––––––––––––––––––––––––––––––––––––––––
|
||||
- Grid
|
||||
- Base Styles
|
||||
- Typography
|
||||
- Links
|
||||
- Buttons
|
||||
- Forms
|
||||
- Lists
|
||||
- Code
|
||||
- Tables
|
||||
- Spacing
|
||||
- Utilities
|
||||
- Clearing
|
||||
- Media Queries
|
||||
*/
|
||||
|
||||
|
||||
/* Grid
|
||||
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
||||
.container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 0 20px;
|
||||
box-sizing: border-box; }
|
||||
.column,
|
||||
.columns {
|
||||
width: 100%;
|
||||
float: left;
|
||||
box-sizing: border-box; }
|
||||
|
||||
/* For devices larger than 400px */
|
||||
@media (min-width: 400px) {
|
||||
.container {
|
||||
width: 85%;
|
||||
padding: 0; }
|
||||
}
|
||||
|
||||
/* For devices larger than 550px */
|
||||
@media (min-width: 550px) {
|
||||
.container {
|
||||
width: 80%; }
|
||||
.column,
|
||||
.columns {
|
||||
margin-left: 4%; }
|
||||
.column:first-child,
|
||||
.columns:first-child {
|
||||
margin-left: 0; }
|
||||
|
||||
.one.column,
|
||||
.one.columns { width: 4.66666666667%; }
|
||||
.two.columns { width: 13.3333333333%; }
|
||||
.three.columns { width: 22%; }
|
||||
.four.columns { width: 30.6666666667%; }
|
||||
.five.columns { width: 39.3333333333%; }
|
||||
.six.columns { width: 48%; }
|
||||
.seven.columns { width: 56.6666666667%; }
|
||||
.eight.columns { width: 65.3333333333%; }
|
||||
.nine.columns { width: 74.0%; }
|
||||
.ten.columns { width: 82.6666666667%; }
|
||||
.eleven.columns { width: 91.3333333333%; }
|
||||
.twelve.columns { width: 100%; margin-left: 0; }
|
||||
|
||||
.one-third.column { width: 30.6666666667%; }
|
||||
.two-thirds.column { width: 65.3333333333%; }
|
||||
|
||||
.one-half.column { width: 48%; }
|
||||
|
||||
/* Offsets */
|
||||
.offset-by-one.column,
|
||||
.offset-by-one.columns { margin-left: 8.66666666667%; }
|
||||
.offset-by-two.column,
|
||||
.offset-by-two.columns { margin-left: 17.3333333333%; }
|
||||
.offset-by-three.column,
|
||||
.offset-by-three.columns { margin-left: 26%; }
|
||||
.offset-by-four.column,
|
||||
.offset-by-four.columns { margin-left: 34.6666666667%; }
|
||||
.offset-by-five.column,
|
||||
.offset-by-five.columns { margin-left: 43.3333333333%; }
|
||||
.offset-by-six.column,
|
||||
.offset-by-six.columns { margin-left: 52%; }
|
||||
.offset-by-seven.column,
|
||||
.offset-by-seven.columns { margin-left: 60.6666666667%; }
|
||||
.offset-by-eight.column,
|
||||
.offset-by-eight.columns { margin-left: 69.3333333333%; }
|
||||
.offset-by-nine.column,
|
||||
.offset-by-nine.columns { margin-left: 78.0%; }
|
||||
.offset-by-ten.column,
|
||||
.offset-by-ten.columns { margin-left: 86.6666666667%; }
|
||||
.offset-by-eleven.column,
|
||||
.offset-by-eleven.columns { margin-left: 95.3333333333%; }
|
||||
|
||||
.offset-by-one-third.column,
|
||||
.offset-by-one-third.columns { margin-left: 34.6666666667%; }
|
||||
.offset-by-two-thirds.column,
|
||||
.offset-by-two-thirds.columns { margin-left: 69.3333333333%; }
|
||||
|
||||
.offset-by-one-half.column,
|
||||
.offset-by-one-half.columns { margin-left: 52%; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Base Styles
|
||||
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
||||
/* NOTE
|
||||
html is set to 62.5% so that all the REM measurements throughout Skeleton
|
||||
are based on 10px sizing. So basically 1.5rem = 15px :) */
|
||||
html {
|
||||
font-size: 62.5%; }
|
||||
body {
|
||||
font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */
|
||||
line-height: 1.6;
|
||||
font-weight: 400;
|
||||
font-family: 'Roboto Slab', "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
color: #222; }
|
||||
|
||||
|
||||
/* Typography
|
||||
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 2rem;
|
||||
font-weight: 300; }
|
||||
h1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;}
|
||||
h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; }
|
||||
h3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; }
|
||||
h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; }
|
||||
h5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.05rem; }
|
||||
h6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; }
|
||||
|
||||
/* Larger than phablet */
|
||||
@media (min-width: 550px) {
|
||||
h1 { font-size: 5.0rem; }
|
||||
h2 { font-size: 4.2rem; }
|
||||
h3 { font-size: 3.6rem; }
|
||||
h4 { font-size: 3.0rem; }
|
||||
h5 { font-size: 2.4rem; }
|
||||
h6 { font-size: 1.5rem; }
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0; }
|
||||
|
||||
|
||||
/* Links
|
||||
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
||||
a {
|
||||
color: #1EAEDB; }
|
||||
a:hover {
|
||||
color: #0FA0CE; }
|
||||
|
||||
|
||||
/* Buttons
|
||||
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
||||
.button,
|
||||
button,
|
||||
input[type="submit"],
|
||||
input[type="reset"],
|
||||
input[type="button"] {
|
||||
display: inline-block;
|
||||
height: 38px;
|
||||
padding: 0 30px;
|
||||
color: #555;
|
||||
text-align: center;
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
line-height: 38px;
|
||||
letter-spacing: .1rem;
|
||||
text-transform: uppercase;
|
||||
text-decoration: none;
|
||||
white-space: nowrap;
|
||||
background-color: transparent;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #bbb;
|
||||
cursor: pointer;
|
||||
box-sizing: border-box; }
|
||||
.button:hover,
|
||||
button:hover,
|
||||
input[type="submit"]:hover,
|
||||
input[type="reset"]:hover,
|
||||
input[type="button"]:hover,
|
||||
.button:focus,
|
||||
button:focus,
|
||||
input[type="submit"]:focus,
|
||||
input[type="reset"]:focus,
|
||||
input[type="button"]:focus {
|
||||
color: #333;
|
||||
border-color: #888;
|
||||
outline: 0; }
|
||||
.button.button-primary,
|
||||
button.button-primary,
|
||||
input[type="submit"].button-primary,
|
||||
input[type="reset"].button-primary,
|
||||
input[type="button"].button-primary {
|
||||
color: #FFF;
|
||||
background-color: #33C3F0;
|
||||
border-color: #33C3F0; }
|
||||
.button.button-primary:hover,
|
||||
button.button-primary:hover,
|
||||
input[type="submit"].button-primary:hover,
|
||||
input[type="reset"].button-primary:hover,
|
||||
input[type="button"].button-primary:hover,
|
||||
.button.button-primary:focus,
|
||||
button.button-primary:focus,
|
||||
input[type="submit"].button-primary:focus,
|
||||
input[type="reset"].button-primary:focus,
|
||||
input[type="button"].button-primary:focus {
|
||||
color: #FFF;
|
||||
background-color: #1EAEDB;
|
||||
border-color: #1EAEDB; }
|
||||
|
||||
|
||||
/* Forms
|
||||
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
||||
input[type="email"],
|
||||
input[type="number"],
|
||||
input[type="search"],
|
||||
input[type="text"],
|
||||
input[type="tel"],
|
||||
input[type="url"],
|
||||
input[type="password"],
|
||||
textarea,
|
||||
select {
|
||||
height: 38px;
|
||||
padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */
|
||||
background-color: #fff;
|
||||
border: 1px solid #D1D1D1;
|
||||
border-radius: 4px;
|
||||
box-shadow: none;
|
||||
box-sizing: border-box; }
|
||||
/* Removes awkward default styles on some inputs for iOS */
|
||||
input[type="email"],
|
||||
input[type="number"],
|
||||
input[type="search"],
|
||||
input[type="text"],
|
||||
input[type="tel"],
|
||||
input[type="url"],
|
||||
input[type="password"],
|
||||
textarea {
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none; }
|
||||
textarea {
|
||||
min-height: 65px;
|
||||
padding-top: 6px;
|
||||
padding-bottom: 6px; }
|
||||
input[type="email"]:focus,
|
||||
input[type="number"]:focus,
|
||||
input[type="search"]:focus,
|
||||
input[type="text"]:focus,
|
||||
input[type="tel"]:focus,
|
||||
input[type="url"]:focus,
|
||||
input[type="password"]:focus,
|
||||
textarea:focus,
|
||||
select:focus {
|
||||
border: 1px solid #33C3F0;
|
||||
outline: 0; }
|
||||
label,
|
||||
legend {
|
||||
display: block;
|
||||
margin-bottom: .5rem;
|
||||
font-weight: 600; }
|
||||
fieldset {
|
||||
padding: 0;
|
||||
border-width: 0; }
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
display: inline; }
|
||||
label > .label-body {
|
||||
display: inline-block;
|
||||
margin-left: .5rem;
|
||||
font-weight: normal; }
|
||||
|
||||
|
||||
/* Lists
|
||||
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
||||
ul {
|
||||
list-style: circle inside; }
|
||||
ol {
|
||||
list-style: decimal inside; }
|
||||
ol, ul {
|
||||
padding-left: 0;
|
||||
margin-top: 0; }
|
||||
ul ul,
|
||||
ul ol,
|
||||
ol ol,
|
||||
ol ul {
|
||||
margin: 1.5rem 0 1.5rem 3rem;
|
||||
font-size: 90%; }
|
||||
li {
|
||||
margin-bottom: 1rem; }
|
||||
|
||||
|
||||
/* Code
|
||||
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
||||
code {
|
||||
padding: .2rem .5rem;
|
||||
margin: 0 .2rem;
|
||||
font-size: 90%;
|
||||
white-space: nowrap;
|
||||
background: #F1F1F1;
|
||||
border: 1px solid #E1E1E1;
|
||||
border-radius: 4px; }
|
||||
pre > code {
|
||||
display: block;
|
||||
padding: 1rem 1.5rem;
|
||||
white-space: pre; }
|
||||
|
||||
|
||||
/* Tables
|
||||
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
||||
th,
|
||||
td {
|
||||
padding: 12px 15px;
|
||||
text-align: left;
|
||||
border-bottom: 1px solid #E1E1E1; }
|
||||
th:first-child,
|
||||
td:first-child {
|
||||
padding-left: 0; }
|
||||
th:last-child,
|
||||
td:last-child {
|
||||
padding-right: 0; }
|
||||
|
||||
|
||||
/* Spacing
|
||||
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
||||
button,
|
||||
.button {
|
||||
margin-bottom: 1rem; }
|
||||
input,
|
||||
textarea,
|
||||
select,
|
||||
fieldset {
|
||||
margin-bottom: 1.5rem; }
|
||||
pre,
|
||||
blockquote,
|
||||
dl,
|
||||
figure,
|
||||
table,
|
||||
p,
|
||||
ul,
|
||||
ol,
|
||||
form {
|
||||
margin-bottom: 2.5rem; }
|
||||
|
||||
|
||||
/* Utilities
|
||||
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
||||
.u-full-width {
|
||||
width: 100%;
|
||||
box-sizing: border-box; }
|
||||
.u-max-full-width {
|
||||
max-width: 100%;
|
||||
box-sizing: border-box; }
|
||||
.u-pull-right {
|
||||
float: right; }
|
||||
.u-pull-left {
|
||||
float: left; }
|
||||
|
||||
|
||||
/* Misc
|
||||
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
||||
hr {
|
||||
margin-top: 3rem;
|
||||
margin-bottom: 3.5rem;
|
||||
border-width: 0;
|
||||
border-top: 1px solid #E1E1E1; }
|
||||
|
||||
|
||||
/* Clearing
|
||||
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
||||
|
||||
/* Self Clearing Goodness */
|
||||
.container:after,
|
||||
.row:after,
|
||||
.u-cf {
|
||||
content: "";
|
||||
display: table;
|
||||
clear: both; }
|
||||
|
||||
|
||||
/* Media Queries
|
||||
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
||||
/*
|
||||
Note: The best way to structure the use of media queries is to create the queries
|
||||
near the relevant code. For example, if you wanted to change the styles for buttons
|
||||
on small devices, paste the mobile query code up in the buttons section and style it
|
||||
there.
|
||||
*/
|
||||
|
||||
|
||||
/* Larger than mobile */
|
||||
@media (min-width: 400px) {}
|
||||
|
||||
/* Larger than phablet (also point when grid becomes active) */
|
||||
@media (min-width: 550px) {}
|
||||
|
||||
/* Larger than tablet */
|
||||
@media (min-width: 750px) {}
|
||||
|
||||
/* Larger than desktop */
|
||||
@media (min-width: 1000px) {}
|
||||
|
||||
/* Larger than Desktop HD */
|
||||
@media (min-width: 1200px) {}
|
3
app/ejs/list.ejs
Normal file
3
app/ejs/list.ejs
Normal file
@ -0,0 +1,3 @@
|
||||
<% list.forEach(function (item) { %>
|
||||
<button id="<%=item.name%>" class="pure-button"><%=item.name%></button>
|
||||
<% }) %>
|
12
app/ejs/runner.ejs
Normal file
12
app/ejs/runner.ejs
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
<h1><%= d.title %></h1>
|
||||
<% d.items.forEach(function (item) { %>
|
||||
<div class='row entry'>
|
||||
<h4><a href='<%=item.url%>'><%=item.title %></a></h4>
|
||||
<div class='u-full-width content' style='overflow:hidden;'><%-item.description-%></div>
|
||||
<div class='info' style='font-size:75%;color:#bbbbbb;'>
|
||||
<span class='author' ><%=item.author%></span>
|
||||
<span class='date' ><%=item.date%></span>
|
||||
</div>
|
||||
</div>
|
||||
<% }) %>
|
11
app/ejs/test.ejs
Normal file
11
app/ejs/test.ejs
Normal file
@ -0,0 +1,11 @@
|
||||
<h1><%= d.title %></h1>
|
||||
<% d.items.forEach(function (item) { %>
|
||||
<div class='pure-u-1 entry'>
|
||||
<h2><a href='<%=item.url%>'><%=item.title %></a></h2>
|
||||
<div class='u-full-width content' style='overflow:hidden;'><%=item.description%></div>
|
||||
<div class='info' style='font-size:75%;color:#bbbbbb;'>
|
||||
<span class='author' ><%=item.author%></span>
|
||||
<span class='date' ><%=item.date%></span>
|
||||
</div>
|
||||
</div>
|
||||
<% }) %>
|
76
app/feeds.html
Normal file
76
app/feeds.html
Normal file
@ -0,0 +1,76 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>
|
||||
Feedmaster
|
||||
</title>
|
||||
<meta charset="UTF-8">
|
||||
|
||||
<meta name="description" content="">
|
||||
<meta name="keywords" content="">
|
||||
|
||||
<link href="fonts/fonts.css" rel="stylesheet" type="text/css">
|
||||
|
||||
<link rel="stylesheet" href="css/normalize-min.css">
|
||||
<link rel="stylesheet" href="css/skeleton.css">
|
||||
<style>
|
||||
.info {
|
||||
border-bottom: 1px solid #bbbbbb;
|
||||
padding-bottom:
|
||||
}
|
||||
|
||||
.entry {
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 320px !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
|
||||
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
<meta name="msapplication-TileColor" content="#9f00a7">
|
||||
<meta name="msapplication-TileImage" content="/mstile-144x144.png">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="u-full-width content">
|
||||
Last update: <span id="lastupdate">x</span>
|
||||
<!-- <button id="refresh">Refresh</button>-->
|
||||
<div id="list" class="u-full-width content"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="feedcontent" class="container">
|
||||
</div>
|
||||
|
||||
<!-- <script type="text/javascript" src="js/zepto.js"></script>
|
||||
<script type="text/javascript" src="js/moment.js"></script>
|
||||
<script type="text/javascript" src="js/ejs.js"></script>-->
|
||||
<script type="text/javascript" src="js/output.min.js"></script>
|
||||
<script type="text/javascript" src="js/app.prod.js"></script>
|
||||
<script type="text/javascript" src="js/fx.js"></script>
|
||||
<script type="text/javascript" src="js/fx_methods.js"></script>
|
||||
<script type="text/javascript" src="js/zprogress.js"></script>
|
||||
<script type="text/javascript" src="js/jquery.unveil.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
BIN
app/fonts/Roboto_Slab-normal-300.woff
Normal file
BIN
app/fonts/Roboto_Slab-normal-300.woff
Normal file
Binary file not shown.
BIN
app/fonts/Roboto_Slab-normal-400.woff
Normal file
BIN
app/fonts/Roboto_Slab-normal-400.woff
Normal file
Binary file not shown.
BIN
app/fonts/Roboto_Slab-normal-700.woff
Normal file
BIN
app/fonts/Roboto_Slab-normal-700.woff
Normal file
Binary file not shown.
20
app/fonts/fonts.css
Normal file
20
app/fonts/fonts.css
Normal file
@ -0,0 +1,20 @@
|
||||
@font-face {
|
||||
font-family: 'Roboto Slab';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: url(Roboto_Slab-normal-300.woff) format('woff');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto Slab';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url(Roboto_Slab-normal-400.woff) format('woff');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto Slab';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: url(Roboto_Slab-normal-700.woff) format('woff');
|
||||
}
|
173
app/js/app.prod.js
Normal file
173
app/js/app.prod.js
Normal file
@ -0,0 +1,173 @@
|
||||
var APP = {
|
||||
refreshStep: 0,
|
||||
preUrl: '/',
|
||||
|
||||
_storage: {
|
||||
lastupdated: null,
|
||||
feeds: {}
|
||||
},
|
||||
_list : null,
|
||||
_feed : null,
|
||||
|
||||
feeds: ['paleo', 'lifestyle', 'tech', 'news'],
|
||||
lastUpdated: null,
|
||||
preCache: function() {
|
||||
this._list = new EJS({url: 'ejs/list.ejs'});
|
||||
this._feed = new EJS({
|
||||
url: 'ejs/test.ejs'
|
||||
});
|
||||
},
|
||||
init: function() {
|
||||
/*$('#refresh').on('click', $.proxy(this.refresh, this));*/
|
||||
console.log('app starting...');
|
||||
$.zprogress.start();
|
||||
this.preCache();
|
||||
$.zprogress.inc(0.2);
|
||||
this.doLoad();
|
||||
$.zprogress.inc(0.2);
|
||||
this.getLastUpdateDate();
|
||||
$.zprogress.done(true);
|
||||
console.log('Last updated: ' + this.lastUpdated);
|
||||
Android.hideProgress();
|
||||
},
|
||||
getLastUpdateDate: function() {
|
||||
var formatted, dt;
|
||||
// this.lastUpdated = localStorage.getItem('lastUpdated') || null;
|
||||
|
||||
if (this.lastUpdated == null)
|
||||
$('#lastupdate').empty().append('Never');
|
||||
else {
|
||||
dt = new Date(this.lastUpdated);
|
||||
formatted = moment(dt).startOf('minute').fromNow();
|
||||
console.log(formatted);
|
||||
$('#lastupdate').empty().append(formatted);
|
||||
}
|
||||
|
||||
},
|
||||
refresh: function() {
|
||||
this.refreshStep = 0;
|
||||
console.log('refresh');
|
||||
console.log(this);
|
||||
console.log('get ' + this.feeds[this.refreshStep]);
|
||||
// $('#lastupdate').empty().append('Refreshing...');
|
||||
// this.showAndroidToast('Refreshing...');
|
||||
$.zprogress.start();
|
||||
this.doRefresh();
|
||||
|
||||
},
|
||||
doRefresh: function() {
|
||||
var self = this;
|
||||
if (this.refreshStep < this.feeds.length) {
|
||||
var feedUrl = this.preUrl + this.feeds[this.refreshStep] + '.json';
|
||||
$('#lastupdate').empty().append('Refreshing: ' + this.feeds[this.refreshStep]);
|
||||
/* $.getJSON(feedUrl, function(data) {
|
||||
console.log(self);
|
||||
|
||||
self.doUpdate(data);
|
||||
});*/
|
||||
|
||||
var jsonData = Android.getJson(feedUrl);
|
||||
//console.log();
|
||||
if (jsonData != '')
|
||||
{
|
||||
self.doUpdate(JSON.parse(jsonData));
|
||||
}
|
||||
|
||||
} else {
|
||||
console.log('Done');
|
||||
this.doSave();
|
||||
this.showList();
|
||||
Android.hideProgress();
|
||||
$.zprogress.done(true);
|
||||
|
||||
|
||||
}
|
||||
},
|
||||
doUpdate: function(data) {
|
||||
// console.log(this);
|
||||
// console.log(data);
|
||||
this._storage.feeds[this.feeds[this.refreshStep]] = data;
|
||||
|
||||
console.log(this._storage);
|
||||
this.refreshStep++;
|
||||
$.zprogress.inc(0.2);
|
||||
this.doRefresh();
|
||||
},
|
||||
doSave: function() {
|
||||
console.log('Saving...');
|
||||
this.lastUpdated = new Date();
|
||||
this._storage.lastupdated = this.lastUpdated;
|
||||
localStorage.setItem('lastUpdated', this.lastUpdated);
|
||||
localStorage.setItem('_storage', JSON.stringify(this._storage));
|
||||
this.getLastUpdateDate();
|
||||
},
|
||||
doLoad: function() {
|
||||
|
||||
var _load = localStorage.getItem('_storage');
|
||||
$('#lastupdate').empty().append('Loading...');
|
||||
if (_load != null)
|
||||
this._storage = JSON.parse(_load);
|
||||
else
|
||||
this._storage = {
|
||||
lastupdated: null,
|
||||
feeds: {}
|
||||
};
|
||||
this.lastUpdated = this._storage.lastupdated || null;
|
||||
this.showList();
|
||||
},
|
||||
clearFeed: function() {
|
||||
$('#feedcontent').empty();
|
||||
},
|
||||
showList: function() {
|
||||
var output, d = {},
|
||||
list = [];
|
||||
for (var key in this._storage.feeds) {
|
||||
console.log(key);
|
||||
list.push({
|
||||
name: key
|
||||
});
|
||||
}
|
||||
|
||||
d.list = list;
|
||||
|
||||
var output = this._list.render(d);
|
||||
$('#list').empty().append(output);
|
||||
|
||||
for (var key in this._storage.feeds) {
|
||||
$('#' + key).on('click', $.proxy(this.showFeed, this, key));
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
showFeed: function(opt) {
|
||||
var output, d;
|
||||
console.log('show feed ' + opt);
|
||||
$('#feedcontent').empty();
|
||||
d = {
|
||||
d: this._storage.feeds[opt]
|
||||
};
|
||||
var output = this._feed.render(d);
|
||||
|
||||
$('#feedcontent').append(output);
|
||||
$("img").unveil();
|
||||
},showAndroidToast: function(toastmsg) {
|
||||
Android.showToast(toastmsg);
|
||||
}, showProgress: function () {
|
||||
Android.showProgress();
|
||||
},
|
||||
hideProgress: function () {
|
||||
Android.hideProgress();
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
Zepto(function($) {
|
||||
console.log('Start app');
|
||||
if (typeof(Storage) !== "undefined") {
|
||||
APP.init();
|
||||
} else {
|
||||
// Sorry! No Web Storage support..
|
||||
alert('No local storage');
|
||||
}
|
||||
});
|
2
app/js/app.prod.min.js
vendored
Normal file
2
app/js/app.prod.min.js
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
var APP={refreshStep:0,preUrl:"/",_storage:{lastupdated:null,feeds:{}},_list:null,_feed:null,feeds:["paleo","lifestyle"],lastUpdated:null,preCache:function(){this._list=new EJS({url:"ejs/list.ejs"}),this._feed=new EJS({url:"ejs/test.ejs"})},init:function(){$("#refresh").on("click",$.proxy(this.refresh,this)),console.log("app starting..."),this.preCache(),this.doLoad(),this.getLastUpdateDate(),console.log("Last updated: "+this.lastUpdated)},getLastUpdateDate:function(){var e,t;null==this.lastUpdated?$("#lastupdate").empty().append("Never"):(t=new Date(this.lastUpdated),e=moment(t).startOf("minute").fromNow(),console.log(e),$("#lastupdate").empty().append(e))},refresh:function(){this.refreshStep=0,console.log("refresh"),console.log(this),console.log("get "+this.feeds[this.refreshStep]),$("#lastupdate").empty().append("Refreshing..."),this.doRefresh()},doRefresh:function(){var e=this;if(this.refreshStep<this.feeds.length){var t=this.preUrl+this.feeds[this.refreshStep]+".json";$("#lastupdate").empty().append("Refreshing: "+this.feeds[this.refreshStep]),$.getJSON(t,function(t){console.log(e),e.doUpdate(t)})}else console.log("Done"),this.doSave()},doUpdate:function(e){console.log(this),console.log(e),this._storage.feeds[this.feeds[this.refreshStep]]=e,console.log(this._storage),this.refreshStep++,this.doRefresh()},doSave:function(){console.log("Saving..."),this.lastUpdated=new Date,this._storage.lastupdated=this.lastUpdated,localStorage.setItem("lastUpdated",this.lastUpdated),localStorage.setItem("_storage",JSON.stringify(this._storage)),this.getLastUpdateDate()},doLoad:function(){var e=localStorage.getItem("_storage");$("#lastupdate").empty().append("Loading..."),this._storage=null!=e?JSON.parse(e):{lastupdated:null,feeds:{}},this.lastUpdated=this._storage.lastupdated||null,this.showList()},showList:function(){var e,t={},s=[];for(var o in this._storage.feeds)console.log(o),s.push({name:o});t.list=s;var e=this._list.render(t);$("#list").empty().append(e);for(var o in this._storage.feeds)$("#"+o).on("click",$.proxy(this.showFeed,this,o))},showFeed:function(e){var t,s;console.log("show feed "+e),$("#feedcontent").empty(),s={d:this._storage.feeds[e]};var t=this._feed.render(s);$("#feedcontent").append(t)}};Zepto(function(){console.log("Start app"),"undefined"!=typeof Storage?APP.init():alert("No local storage")});
|
||||
//# sourceMappingURL=app.prod.min.js.map
|
1
app/js/app.prod.min.js.map
Normal file
1
app/js/app.prod.min.js.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"sources":["app.prod.js"],"names":["APP","refreshStep","preUrl","_storage","lastupdated","feeds","_list","_feed","lastUpdated","preCache","this","EJS","url","init","$","on","proxy","refresh","console","log","doLoad","getLastUpdateDate","formatted","dt","empty","append","Date","moment","startOf","fromNow","doRefresh","self","length","feedUrl","getJSON","data","doUpdate","doSave","localStorage","setItem","JSON","stringify","_load","getItem","parse","showList","output","d","list","key","push","name","render","showFeed","opt","Zepto","alert"],"mappings":"AAAA,GAAIA,MACAC,YAAa,EACbC,OAAQ,IAERC,UACIC,YAAa,KACbC,UAEJC,MAAQ,KACRC,MAAQ,KAERF,OAAQ,QAAS,aACjBG,YAAa,KACbC,SAAU,WACNC,KAAKJ,MAAQ,GAAIK,MAAKC,IAAK,iBAC3BF,KAAKH,MAAQ,GAAII,MACbC,IAAK,kBAGbC,KAAM,WACFC,EAAE,YAAYC,GAAG,QAASD,EAAEE,MAAMN,KAAKO,QAASP,OAChDQ,QAAQC,IAAI,mBACZT,KAAKD,WACLC,KAAKU,SACLV,KAAKW,oBACLH,QAAQC,IAAI,iBAAmBT,KAAKF,cAExCa,kBAAmB,WACf,GAAIC,GAAWC,CAGS,OAApBb,KAAKF,YACLM,EAAE,eAAeU,QAAQC,OAAO,UAEhCF,EAAK,GAAIG,MAAKhB,KAAKF,aACnBc,EAAYK,OAAOJ,GAAIK,QAAQ,UAAUC,UACzCX,QAAQC,IAAIG,GACZR,EAAE,eAAeU,QAAQC,OAAOH,KAIxCL,QAAS,WACLP,KAAKT,YAAc,EACnBiB,QAAQC,IAAI,WACZD,QAAQC,IAAIT,MACZQ,QAAQC,IAAI,OAAST,KAAKL,MAAMK,KAAKT,cACrCa,EAAE,eAAeU,QAAQC,OAAO,iBAChCf,KAAKoB,aAGTA,UAAW,WACP,GAAIC,GAAOrB,IACX,IAAIA,KAAKT,YAAcS,KAAKL,MAAM2B,OAAQ,CACtC,GAAIC,GAAUvB,KAAKR,OAASQ,KAAKL,MAAMK,KAAKT,aAAe,OAC3Da,GAAE,eAAeU,QAAQC,OAAO,eAAiBf,KAAKL,MAAMK,KAAKT,cACjEa,EAAEoB,QAAQD,EAAS,SAASE,GACxBjB,QAAQC,IAAIY,GAEZA,EAAKK,SAASD,SAGlBjB,SAAQC,IAAI,QACZT,KAAK2B,UAGbD,SAAU,SAASD,GACfjB,QAAQC,IAAIT,MACZQ,QAAQC,IAAIgB,GACZzB,KAAKP,SAASE,MAAMK,KAAKL,MAAMK,KAAKT,cAAgBkC,EAEpDjB,QAAQC,IAAIT,KAAKP,UACjBO,KAAKT,cACLS,KAAKoB,aAETO,OAAQ,WACJnB,QAAQC,IAAI,aACZT,KAAKF,YAAc,GAAIkB,MACvBhB,KAAKP,SAASC,YAAcM,KAAKF,YACjC8B,aAAaC,QAAQ,cAAe7B,KAAKF,aACzC8B,aAAaC,QAAQ,WAAYC,KAAKC,UAAU/B,KAAKP,WACrDO,KAAKW,qBAETD,OAAQ,WAEJ,GAAIsB,GAAQJ,aAAaK,QAAQ,WACjC7B,GAAE,eAAeU,QAAQC,OAAO,cAE5Bf,KAAKP,SADI,MAATuC,EACgBF,KAAKI,MAAMF,IAGvBtC,YAAa,KACbC,UAERK,KAAKF,YAAcE,KAAKP,SAASC,aAAe,KAChDM,KAAKmC,YAETA,SAAU,WACN,GAAIC,GAAQC,KACRC,IACJ,KAAK,GAAIC,KAAOvC,MAAKP,SAASE,MAC1Ba,QAAQC,IAAI8B,GACZD,EAAKE,MACDC,KAAMF,GAIdF,GAAEC,KAAOA,CAET,IAAIF,GAASpC,KAAKJ,MAAM8C,OAAOL,EAC/BjC,GAAE,SAASU,QAAQC,OAAOqB,EAE1B,KAAK,GAAIG,KAAOvC,MAAKP,SAASE,MAC1BS,EAAE,IAAMmC,GAAKlC,GAAG,QAASD,EAAEE,MAAMN,KAAK2C,SAAU3C,KAAMuC,KAK9DI,SAAU,SAASC,GACf,GAAIR,GAAQC,CACZ7B,SAAQC,IAAI,aAAemC,GAC3BxC,EAAE,gBAAgBU,QAClBuB,GACIA,EAAGrC,KAAKP,SAASE,MAAMiD,GAE3B,IAAIR,GAASpC,KAAKH,MAAM6C,OAAOL,EAE/BjC,GAAE,gBAAgBW,OAAOqB,IAMjCS,OAAM,WACFrC,QAAQC,IAAI,aACY,mBAAd,SACNnB,IAAIa,OAGJ2C,MAAM"}
|
123
app/js/fx.js
Normal file
123
app/js/fx.js
Normal file
@ -0,0 +1,123 @@
|
||||
// Zepto.js
|
||||
// (c) 2010-2015 Thomas Fuchs
|
||||
// Zepto.js may be freely distributed under the MIT license.
|
||||
|
||||
;(function($, undefined){
|
||||
var prefix = '', eventPrefix,
|
||||
vendors = { Webkit: 'webkit', Moz: '', O: 'o' },
|
||||
testEl = document.createElement('div'),
|
||||
supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,
|
||||
transform,
|
||||
transitionProperty, transitionDuration, transitionTiming, transitionDelay,
|
||||
animationName, animationDuration, animationTiming, animationDelay,
|
||||
cssReset = {}
|
||||
|
||||
function dasherize(str) { return str.replace(/([a-z])([A-Z])/, '$1-$2').toLowerCase() }
|
||||
function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : name.toLowerCase() }
|
||||
|
||||
$.each(vendors, function(vendor, event){
|
||||
if (testEl.style[vendor + 'TransitionProperty'] !== undefined) {
|
||||
prefix = '-' + vendor.toLowerCase() + '-'
|
||||
eventPrefix = event
|
||||
return false
|
||||
}
|
||||
})
|
||||
|
||||
transform = prefix + 'transform'
|
||||
cssReset[transitionProperty = prefix + 'transition-property'] =
|
||||
cssReset[transitionDuration = prefix + 'transition-duration'] =
|
||||
cssReset[transitionDelay = prefix + 'transition-delay'] =
|
||||
cssReset[transitionTiming = prefix + 'transition-timing-function'] =
|
||||
cssReset[animationName = prefix + 'animation-name'] =
|
||||
cssReset[animationDuration = prefix + 'animation-duration'] =
|
||||
cssReset[animationDelay = prefix + 'animation-delay'] =
|
||||
cssReset[animationTiming = prefix + 'animation-timing-function'] = ''
|
||||
|
||||
$.fx = {
|
||||
off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined),
|
||||
speeds: { _default: 400, fast: 200, slow: 600 },
|
||||
cssPrefix: prefix,
|
||||
transitionEnd: normalizeEvent('TransitionEnd'),
|
||||
animationEnd: normalizeEvent('AnimationEnd')
|
||||
}
|
||||
|
||||
$.fn.animate = function(properties, duration, ease, callback, delay){
|
||||
if ($.isFunction(duration))
|
||||
callback = duration, ease = undefined, duration = undefined
|
||||
if ($.isFunction(ease))
|
||||
callback = ease, ease = undefined
|
||||
if ($.isPlainObject(duration))
|
||||
ease = duration.easing, callback = duration.complete, delay = duration.delay, duration = duration.duration
|
||||
if (duration) duration = (typeof duration == 'number' ? duration :
|
||||
($.fx.speeds[duration] || $.fx.speeds._default)) / 1000
|
||||
if (delay) delay = parseFloat(delay) / 1000
|
||||
return this.anim(properties, duration, ease, callback, delay)
|
||||
}
|
||||
|
||||
$.fn.anim = function(properties, duration, ease, callback, delay){
|
||||
var key, cssValues = {}, cssProperties, transforms = '',
|
||||
that = this, wrappedCallback, endEvent = $.fx.transitionEnd,
|
||||
fired = false
|
||||
|
||||
if (duration === undefined) duration = $.fx.speeds._default / 1000
|
||||
if (delay === undefined) delay = 0
|
||||
if ($.fx.off) duration = 0
|
||||
|
||||
if (typeof properties == 'string') {
|
||||
// keyframe animation
|
||||
cssValues[animationName] = properties
|
||||
cssValues[animationDuration] = duration + 's'
|
||||
cssValues[animationDelay] = delay + 's'
|
||||
cssValues[animationTiming] = (ease || 'linear')
|
||||
endEvent = $.fx.animationEnd
|
||||
} else {
|
||||
cssProperties = []
|
||||
// CSS transitions
|
||||
for (key in properties)
|
||||
if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') '
|
||||
else cssValues[key] = properties[key], cssProperties.push(dasherize(key))
|
||||
|
||||
if (transforms) cssValues[transform] = transforms, cssProperties.push(transform)
|
||||
if (duration > 0 && typeof properties === 'object') {
|
||||
cssValues[transitionProperty] = cssProperties.join(', ')
|
||||
cssValues[transitionDuration] = duration + 's'
|
||||
cssValues[transitionDelay] = delay + 's'
|
||||
cssValues[transitionTiming] = (ease || 'linear')
|
||||
}
|
||||
}
|
||||
|
||||
wrappedCallback = function(event){
|
||||
if (typeof event !== 'undefined') {
|
||||
if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below"
|
||||
$(event.target).unbind(endEvent, wrappedCallback)
|
||||
} else
|
||||
$(this).unbind(endEvent, wrappedCallback) // triggered by setTimeout
|
||||
|
||||
fired = true
|
||||
$(this).css(cssReset)
|
||||
callback && callback.call(this)
|
||||
}
|
||||
if (duration > 0){
|
||||
this.bind(endEvent, wrappedCallback)
|
||||
// transitionEnd is not always firing on older Android phones
|
||||
// so make sure it gets fired
|
||||
setTimeout(function(){
|
||||
if (fired) return
|
||||
wrappedCallback.call(that)
|
||||
}, ((duration + delay) * 1000) + 25)
|
||||
}
|
||||
|
||||
// trigger page reflow so new elements can animate
|
||||
this.size() && this.get(0).clientLeft
|
||||
|
||||
this.css(cssValues)
|
||||
|
||||
if (duration <= 0) setTimeout(function() {
|
||||
that.each(function(){ wrappedCallback.call(this) })
|
||||
}, 0)
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
testEl = null
|
||||
})(Zepto)
|
71
app/js/fx_methods.js
Normal file
71
app/js/fx_methods.js
Normal file
@ -0,0 +1,71 @@
|
||||
// Zepto.js
|
||||
// (c) 2010-2015 Thomas Fuchs
|
||||
// Zepto.js may be freely distributed under the MIT license.
|
||||
|
||||
;(function($, undefined){
|
||||
var document = window.document, docElem = document.documentElement,
|
||||
origShow = $.fn.show, origHide = $.fn.hide, origToggle = $.fn.toggle
|
||||
|
||||
function anim(el, speed, opacity, scale, callback) {
|
||||
if (typeof speed == 'function' && !callback) callback = speed, speed = undefined
|
||||
var props = { opacity: opacity }
|
||||
if (scale) {
|
||||
props.scale = scale
|
||||
el.css($.fx.cssPrefix + 'transform-origin', '0 0')
|
||||
}
|
||||
return el.animate(props, speed, null, callback)
|
||||
}
|
||||
|
||||
function hide(el, speed, scale, callback) {
|
||||
return anim(el, speed, 0, scale, function(){
|
||||
origHide.call($(this))
|
||||
callback && callback.call(this)
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.show = function(speed, callback) {
|
||||
origShow.call(this)
|
||||
if (speed === undefined) speed = 0
|
||||
else this.css('opacity', 0)
|
||||
return anim(this, speed, 1, '1,1', callback)
|
||||
}
|
||||
|
||||
$.fn.hide = function(speed, callback) {
|
||||
if (speed === undefined) return origHide.call(this)
|
||||
else return hide(this, speed, '0,0', callback)
|
||||
}
|
||||
|
||||
$.fn.toggle = function(speed, callback) {
|
||||
if (speed === undefined || typeof speed == 'boolean')
|
||||
return origToggle.call(this, speed)
|
||||
else return this.each(function(){
|
||||
var el = $(this)
|
||||
el[el.css('display') == 'none' ? 'show' : 'hide'](speed, callback)
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.fadeTo = function(speed, opacity, callback) {
|
||||
return anim(this, speed, opacity, null, callback)
|
||||
}
|
||||
|
||||
$.fn.fadeIn = function(speed, callback) {
|
||||
var target = this.css('opacity')
|
||||
if (target > 0) this.css('opacity', 0)
|
||||
else target = 1
|
||||
return origShow.call(this).fadeTo(speed, target, callback)
|
||||
}
|
||||
|
||||
$.fn.fadeOut = function(speed, callback) {
|
||||
return hide(this, speed, null, callback)
|
||||
}
|
||||
|
||||
$.fn.fadeToggle = function(speed, callback) {
|
||||
return this.each(function(){
|
||||
var el = $(this)
|
||||
el[
|
||||
(el.css('opacity') == 0 || el.css('display') == 'none') ? 'fadeIn' : 'fadeOut'
|
||||
](speed, callback)
|
||||
})
|
||||
}
|
||||
|
||||
})(Zepto)
|
109
app/js/jquery.unveil.js
Normal file
109
app/js/jquery.unveil.js
Normal file
@ -0,0 +1,109 @@
|
||||
/**
|
||||
* jQuery Unveil
|
||||
* A very lightweight jQuery plugin to lazy load images
|
||||
* http://luis-almeida.github.com/unveil
|
||||
*
|
||||
* Licensed under the MIT license.
|
||||
* Copyright 2013 Luís Almeida
|
||||
* https://github.com/luis-almeida
|
||||
*/
|
||||
|
||||
function Url() {
|
||||
|
||||
this.protocol = null;
|
||||
this.host = null;
|
||||
}
|
||||
|
||||
Url.prototype.parseUrl = function(url)
|
||||
{
|
||||
var parser = document.createElement('a');
|
||||
parser.href = url;
|
||||
|
||||
this.protocol = parser.protocol; // => "http:"
|
||||
this.host = parser.hostname; // => "example.com"
|
||||
parser.port; // => "3000"
|
||||
parser.pathname; // => "/pathname/"
|
||||
parser.search; // => "?search=test"
|
||||
parser.hash; // => "#hash"
|
||||
parser.host; // => "example.com:3000"
|
||||
|
||||
}
|
||||
|
||||
|
||||
;
|
||||
(function($) {
|
||||
|
||||
var blackList = ['feeds.feedburner.com', '.feedsportal.co'];
|
||||
$.fn.unveil = function(threshold, callback) {
|
||||
|
||||
var $w = $(window),
|
||||
th = threshold || 0,
|
||||
retina = window.devicePixelRatio > 1,
|
||||
attrib = retina ? "data-src-retina" : "data-src",
|
||||
images = this,
|
||||
loaded;
|
||||
|
||||
this.one("unveil", function() {
|
||||
var source = this.getAttribute(attrib);
|
||||
|
||||
if (!Android.isNetworkAvailable()) {
|
||||
console.log('No network, cant unveil pic: ' + source);
|
||||
return -1;
|
||||
}
|
||||
|
||||
this.removeAttribute("srcset");
|
||||
this.removeAttribute("sizes");
|
||||
|
||||
var quality = ['960,fit','480,fit,q65'];
|
||||
var q = Android.isWiFi() ? quality[0]:quality[1];
|
||||
var iserve = 'https://image.silvrtree.co.uk/' + q + '/';
|
||||
|
||||
source = source || this.getAttribute("data-src");
|
||||
|
||||
|
||||
var flag = false;
|
||||
for (var item in blackList) {
|
||||
var u = blackList[item];
|
||||
if (source.indexOf(u) !== -1) {
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
source = iserve + source;
|
||||
console.log(source);
|
||||
if (source && !flag) {
|
||||
this.setAttribute("src", source);
|
||||
if (typeof callback === "function") callback.call(this);
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
this.setAttribute("style", 'display:none !important;');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function unveil() {
|
||||
var inview = images.filter(function() {
|
||||
var $e = $(this);
|
||||
// if ($e.is(":hidden")) return;
|
||||
|
||||
var wt = $w.scrollTop(),
|
||||
wb = wt + $w.height(),
|
||||
et = $e.offset().top,
|
||||
eb = et + $e.height();
|
||||
|
||||
return eb >= wt - th && et <= wb + th;
|
||||
});
|
||||
|
||||
loaded = inview.trigger("unveil");
|
||||
images = images.not(loaded);
|
||||
}
|
||||
|
||||
$w.on("scroll.unveil resize.unveil lookup.unveil", unveil);
|
||||
|
||||
unveil();
|
||||
|
||||
return this;
|
||||
|
||||
};
|
||||
|
||||
})(window.jQuery || window.Zepto);
|
3
app/js/output.min.js
vendored
Normal file
3
app/js/output.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
74
app/js/zprogress.js
Normal file
74
app/js/zprogress.js
Normal file
@ -0,0 +1,74 @@
|
||||
// zprogress (c) 2013 Thomas Fuchs
|
||||
// MIT-licensed - https://github.com/madrobby/zprogress
|
||||
|
||||
;(function($){
|
||||
var html =
|
||||
'<style>#zprogress{position:fixed;top:0;left:0;width:100%;height:3px;opacity:0;pointer-events:none;-webkit-pointer-events:none;z-index:1000}'+
|
||||
'#zprogress_indicator{width:100%;margin-left:-100%;height:100%;background:#1c88ff}'+
|
||||
'</style>'+
|
||||
'<div id=zprogress><div id=zprogress_indicator></div></div>',
|
||||
$wrapper, $indicator, value, timeout,
|
||||
MARGIN = 12.5,
|
||||
LMARGIN = MARGIN/100,
|
||||
RMARGIN = 1 - LMARGIN
|
||||
|
||||
function init(){
|
||||
if($wrapper) return
|
||||
|
||||
$('body').append(html)
|
||||
$wrapper = $('#zprogress')
|
||||
$indicator = $('#zprogress_indicator')
|
||||
}
|
||||
|
||||
function anim(){
|
||||
$indicator.animate({ translateX: value*100+'%' }, 200)
|
||||
}
|
||||
|
||||
function clear(){
|
||||
if(timeout) clearTimeout(timeout)
|
||||
timeout = undefined
|
||||
}
|
||||
|
||||
function trickle(){
|
||||
timeout = setTimeout(function(){
|
||||
$.zprogress.inc((RMARGIN-value)*.035*Math.random())
|
||||
trickle()
|
||||
}, 350+(400*Math.random()))
|
||||
}
|
||||
|
||||
$.zprogress = {
|
||||
start: function(){
|
||||
init()
|
||||
clear()
|
||||
value = LMARGIN
|
||||
$wrapper.animate({ opacity: 1 })
|
||||
$indicator.animate({ translateX: '0%' }, 0)
|
||||
setTimeout(function(){
|
||||
anim()
|
||||
trickle()
|
||||
},0)
|
||||
},
|
||||
inc: function(delta){
|
||||
if(value<RMARGIN) value+=delta||.05
|
||||
anim()
|
||||
},
|
||||
set: function(newValue){
|
||||
init()
|
||||
clear()
|
||||
value = newValue
|
||||
anim()
|
||||
trickle()
|
||||
},
|
||||
done: function(){
|
||||
init()
|
||||
clear()
|
||||
value = 1
|
||||
anim()
|
||||
setTimeout(function(){$wrapper.animate({ opacity: 0 })}, 100)
|
||||
},
|
||||
color: function(color){
|
||||
init()
|
||||
$indicator.css({ backgroundColor: color })
|
||||
}
|
||||
}
|
||||
})(Zepto)
|
3
fonts.list
Normal file
3
fonts.list
Normal file
@ -0,0 +1,3 @@
|
||||
Ubuntu:300,400,500,700
|
||||
Ubuntu+Condensed
|
||||
|
169
gulpfile.js
Normal file
169
gulpfile.js
Normal file
@ -0,0 +1,169 @@
|
||||
var gulp = require('gulp');
|
||||
var autoprefixer = require('gulp-autoprefixer');
|
||||
var cssnano = require('gulp-cssnano');
|
||||
var jshint = require('gulp-jshint');
|
||||
var uglify = require('gulp-uglify');
|
||||
var rename = require('gulp-rename');
|
||||
var concat = require('gulp-concat');
|
||||
var notify = require('gulp-notify');
|
||||
var cache = require('gulp-cache');
|
||||
var livereload = require('gulp-livereload');
|
||||
var htmlmin = require('gulp-htmlmin');
|
||||
var inject = require('gulp-inject');
|
||||
var del = require('del');
|
||||
var htmlreplace = require('gulp-html-replace');
|
||||
var stripDebug = require('gulp-strip-debug');
|
||||
var scss = require('gulp-scss');
|
||||
var sass = require('gulp-sass');
|
||||
var googleWebFonts = require('gulp-google-webfonts');
|
||||
|
||||
|
||||
var filePath = {
|
||||
build_dir: './dist'
|
||||
};
|
||||
|
||||
var fontOptions = { };
|
||||
|
||||
gulp.task('appJS', function() {
|
||||
return gulp.src(['app/js/mandecoder.js','app/js/index.js'])
|
||||
.pipe(stripDebug())
|
||||
.pipe(jshint('.jshintrc'))
|
||||
.pipe(jshint.reporter('default'))
|
||||
.pipe(concat('app.js'))
|
||||
/*.pipe(gulp.dest('dist/js'))*/
|
||||
/*.pipe(rename({suffix: '.min'}))*/
|
||||
.pipe(uglify({mangle: false}))
|
||||
/*.pipe(concat('app.js'))*/
|
||||
.pipe(gulp.dest('www/js'));
|
||||
});
|
||||
|
||||
gulp.task('cc2650', function() {
|
||||
return gulp.src(['app/js/device/CC2650/**/*'])
|
||||
.pipe(stripDebug())
|
||||
.pipe(jshint('.jshintrc'))
|
||||
.pipe(jshint.reporter('default'))
|
||||
.pipe(concat('cc2650.js'))
|
||||
/*.pipe(gulp.dest('dist/js'))*/
|
||||
/*.pipe(rename({suffix: '.min'}))*/
|
||||
.pipe(uglify({mangle: false}))
|
||||
/*.pipe(concat('app.js'))*/
|
||||
.pipe(gulp.dest('www/js'));
|
||||
});
|
||||
|
||||
gulp.task('devices', function() {
|
||||
return gulp.src(['app/js/standards/bluetooth_company_identifiers.js','app/js/standards/capability.js','app/js/standards/battery.js','app/js/standards/button.js'])
|
||||
.pipe(stripDebug())
|
||||
.pipe(jshint('.jshintrc'))
|
||||
.pipe(jshint.reporter('default'))
|
||||
.pipe(concat('standards.js'))
|
||||
/*.pipe(gulp.dest('dist/js'))*/
|
||||
/*.pipe(rename({suffix: '.min'}))*/
|
||||
.pipe(uglify({mangle: false}))
|
||||
/*.pipe(concat('app.js'))*/
|
||||
.pipe(gulp.dest('www/js'));
|
||||
});
|
||||
|
||||
gulp.task('vendor', function() {
|
||||
return gulp.src(['app/libs/jquery/dist/jquery.min.js',
|
||||
'app/libs/mui/packages/cdn/js/mui.min.js'])
|
||||
.pipe(concat('vendor.js'))
|
||||
.pipe(uglify({mangle: false}))
|
||||
.pipe(gulp.dest('www/libs'));
|
||||
});
|
||||
|
||||
|
||||
gulp.task('mui', function() {
|
||||
return gulp.src(['app/css/custom.scss'])
|
||||
.pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
|
||||
//.pipe(cssnano())
|
||||
.pipe(gulp.dest('www/css'));
|
||||
});
|
||||
|
||||
gulp.task('customMUI', function() {
|
||||
return gulp.src(['app/css/custom.scss'])
|
||||
.pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
|
||||
//.pipe(cssnano())
|
||||
.pipe(rename('mui.custom.css'))
|
||||
.pipe(gulp.dest('app/css'));
|
||||
});
|
||||
|
||||
gulp.task('styles', function() {
|
||||
return gulp.src(['app/css/app.css','app/css/progress.css'])
|
||||
.pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
|
||||
.pipe(cssnano())
|
||||
.pipe(concat('app.css'))
|
||||
.pipe(gulp.dest('www/css'));
|
||||
});
|
||||
|
||||
gulp.task('fonts', function() {
|
||||
return gulp.src('./fonts.list')
|
||||
.pipe(googleWebFonts(fontOptions))
|
||||
.pipe(gulp.dest('www/fonts'))
|
||||
;
|
||||
});
|
||||
|
||||
gulp.task('index', function() {
|
||||
|
||||
return gulp.src(['app/index.html'])
|
||||
.pipe(htmlreplace({
|
||||
mui: 'css/custom.css',
|
||||
css: 'css/app.css',
|
||||
js: 'js/app.js',
|
||||
vendor: 'libs/vendor.js',
|
||||
fonts: 'fonts/fonts.css',
|
||||
standards: 'js/standards.js',
|
||||
cc2650: 'js/cc2650.js'
|
||||
|
||||
}))
|
||||
.pipe(htmlmin({removeComments: true, collapseWhitespace: true, keepClosingSlash: true}))
|
||||
|
||||
.pipe(gulp.dest('www/'));
|
||||
});
|
||||
|
||||
|
||||
gulp.task('partials', function() {
|
||||
|
||||
// Gulp.src(['app/partials/**/*']).pipe(gulp.dest('dist/partials'));
|
||||
// gulp.src(['app/libs/ejs_production.js']).pipe(gulp.dest('dist/libs'));
|
||||
// gulp.src(['app/libs/microevent.js']).pipe(gulp.dest('dist/libs'));
|
||||
//gulp.src(['app/fav/**/*']).pipe(size({title: 'Partials'})).pipe(gulp.dest('dist/fav'));
|
||||
gulp.src(['app/img/logo.png']).pipe(gulp.dest('www/img'));
|
||||
});
|
||||
|
||||
gulp.task('copy', function() {
|
||||
return gulp.src(['app/**/*'])
|
||||
.pipe(gulp.dest('www'));
|
||||
});
|
||||
|
||||
gulp.task('buildJS', function() {
|
||||
gulp.start('appJS','cc2650','devices','vendor');
|
||||
});
|
||||
|
||||
gulp.task('clean', function() {
|
||||
return del(['www']);
|
||||
});
|
||||
|
||||
|
||||
gulp.task('normal', ['clean'], function() {
|
||||
'use strict';
|
||||
gulp.start('copy','watch');
|
||||
});
|
||||
|
||||
gulp.task('default', ['clean'], function() {
|
||||
gulp.start('buildJS','mui','styles','fonts', 'index', 'partials');
|
||||
});
|
||||
|
||||
gulp.task('watch',function() {
|
||||
gulp.watch('app/**/*',['copy']);
|
||||
|
||||
});
|
||||
|
||||
gulp.task('MUIWatcher', function() {
|
||||
'use strict';
|
||||
gulp.start('customMUI','watchMUI');
|
||||
});
|
||||
|
||||
gulp.task('watchMUI',function() {
|
||||
gulp.watch('app/css/custom.scss',['customMUI']);
|
||||
|
||||
});
|
16
localserver.js
Normal file
16
localserver.js
Normal file
@ -0,0 +1,16 @@
|
||||
var express = require('express');
|
||||
var path = require('path');
|
||||
|
||||
var app = express();
|
||||
|
||||
app.use(express.static(path.join(__dirname, 'www')));
|
||||
|
||||
/*
|
||||
App.get('/', function (req, res) {
|
||||
res.send('Hello World!');
|
||||
});
|
||||
*/
|
||||
|
||||
app.listen(3000, function() {
|
||||
console.log('Example app listening on port 3000!');
|
||||
});
|
41
package.json
Normal file
41
package.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"name": "feedmaster-core",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "http://gitlab.silvrtree.co.uk/martind2000/sensortoy.git"
|
||||
},
|
||||
"author": "Martin Donnelly <martind2000@gmail.com>",
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"del": "^2.2.0",
|
||||
"gulp": "^3.9.1",
|
||||
"gulp-autoprefixer": "^3.1.0",
|
||||
"gulp-cache": "^0.4.5",
|
||||
"gulp-concat": "^2.6.0",
|
||||
"gulp-cssnano": "^2.1.2",
|
||||
"gulp-google-webfonts": "0.0.12",
|
||||
"gulp-html-replace": "^1.6.0",
|
||||
"gulp-htmlmin": "^2.0.0",
|
||||
"gulp-inject": "^4.1.0",
|
||||
"gulp-jshint": "^2.0.1",
|
||||
"gulp-livereload": "^3.8.1",
|
||||
"gulp-notify": "^2.2.0",
|
||||
"gulp-rename": "^1.2.2",
|
||||
"gulp-sass": "^2.3.1",
|
||||
"gulp-scss": "^1.3.17",
|
||||
"gulp-strip-debug": "^1.1.0",
|
||||
"gulp-uglify": "^1.5.3",
|
||||
"gulp-watch": "^4.3.6",
|
||||
"jshint": "^2.9.2",
|
||||
"scss": "^0.2.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"express": "^4.13.4"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user