├── static ├── css │ ├── common.css │ ├── video.css │ ├── vpn.css │ ├── wallpaper.css │ ├── home.css │ ├── admin │ │ └── login.css │ └── news.css ├── bower_components │ ├── jquery │ │ ├── src │ │ │ ├── outro.js │ │ │ ├── selector.js │ │ │ ├── var │ │ │ │ ├── arr.js │ │ │ │ ├── rnotwhite.js │ │ │ │ ├── strundefined.js │ │ │ │ ├── push.js │ │ │ │ ├── class2type.js │ │ │ │ ├── concat.js │ │ │ │ ├── indexOf.js │ │ │ │ ├── slice.js │ │ │ │ ├── pnum.js │ │ │ │ ├── toString.js │ │ │ │ ├── hasOwn.js │ │ │ │ └── support.js │ │ │ ├── ajax │ │ │ │ ├── var │ │ │ │ │ ├── rquery.js │ │ │ │ │ └── nonce.js │ │ │ │ ├── parseJSON.js │ │ │ │ ├── parseXML.js │ │ │ │ ├── script.js │ │ │ │ ├── load.js │ │ │ │ └── jsonp.js │ │ │ ├── css │ │ │ │ ├── var │ │ │ │ │ ├── rmargin.js │ │ │ │ │ ├── cssExpand.js │ │ │ │ │ ├── rnumnonpx.js │ │ │ │ │ ├── isHidden.js │ │ │ │ │ └── getStyles.js │ │ │ │ ├── hiddenVisibleSelectors.js │ │ │ │ ├── addGetHookIf.js │ │ │ │ ├── swap.js │ │ │ │ ├── curCSS.js │ │ │ │ └── defaultDisplay.js │ │ │ ├── data │ │ │ │ ├── var │ │ │ │ │ ├── data_priv.js │ │ │ │ │ └── data_user.js │ │ │ │ └── accepts.js │ │ │ ├── manipulation │ │ │ │ ├── var │ │ │ │ │ └── rcheckableType.js │ │ │ │ ├── _evalUrl.js │ │ │ │ └── support.js │ │ │ ├── core │ │ │ │ ├── var │ │ │ │ │ └── rsingleTag.js │ │ │ │ ├── parseHTML.js │ │ │ │ ├── access.js │ │ │ │ └── ready.js │ │ │ ├── traversing │ │ │ │ ├── var │ │ │ │ │ └── rneedsContext.js │ │ │ │ └── findFilter.js │ │ │ ├── event │ │ │ │ ├── support.js │ │ │ │ ├── ajax.js │ │ │ │ └── alias.js │ │ │ ├── attributes.js │ │ │ ├── deprecated.js │ │ │ ├── effects │ │ │ │ └── animatedSelector.js │ │ │ ├── selector-sizzle.js │ │ │ ├── queue │ │ │ │ └── delay.js │ │ │ ├── jquery.js │ │ │ ├── exports │ │ │ │ ├── global.js │ │ │ │ └── amd.js │ │ │ ├── attributes │ │ │ │ ├── support.js │ │ │ │ └── prop.js │ │ │ ├── intro.js │ │ │ ├── wrap.js │ │ │ └── dimensions.js │ │ ├── bower.json │ │ ├── .bower.json │ │ └── MIT-LICENSE.txt │ ├── angular-once │ │ ├── .gitignore │ │ ├── package.json │ │ ├── LICENSE.txt │ │ ├── Gruntfile.js │ │ ├── bower.json │ │ └── .bower.json │ ├── cryptojslib │ │ ├── status.bat │ │ ├── push.bat │ │ ├── components │ │ │ ├── pad-nopadding-min.js │ │ │ ├── pad-nopadding.js │ │ │ ├── format-hex-min.js │ │ │ ├── pad-ansix923-min.js │ │ │ ├── pad-iso97971-min.js │ │ │ ├── pad-zeropadding-min.js │ │ │ ├── pad-iso10126-min.js │ │ │ ├── mode-ecb-min.js │ │ │ ├── mode-ofb-min.js │ │ │ ├── mode-ctr-min.js │ │ │ ├── sha224-min.js │ │ │ ├── mode-cfb-min.js │ │ │ ├── x64-core-min.js │ │ │ ├── evpkdf-min.js │ │ │ ├── mode-ecb.js │ │ │ ├── sha384-min.js │ │ │ ├── pad-iso97971.js │ │ │ ├── lib-typedarrays-min.js │ │ │ ├── pbkdf2-min.js │ │ │ ├── hmac-min.js │ │ │ ├── pad-zeropadding.js │ │ │ ├── mode-ctr-gladman-min.js │ │ │ ├── enc-base64-min.js │ │ │ ├── enc-utf16-min.js │ │ │ ├── rc4-min.js │ │ │ ├── pad-iso10126.js │ │ │ ├── pad-ansix923.js │ │ │ ├── sha1-min.js │ │ │ ├── mode-ofb.js │ │ │ ├── mode-ctr.js │ │ │ ├── sha256-min.js │ │ │ ├── format-hex.js │ │ │ ├── sha224.js │ │ │ ├── mode-cfb.js │ │ │ ├── aes-min.js │ │ │ ├── lib-typedarrays.js │ │ │ ├── sha384.js │ │ │ ├── rabbit-legacy-min.js │ │ │ ├── sha3-min.js │ │ │ ├── rabbit-min.js │ │ │ ├── mode-ctr-gladman.js │ │ │ ├── md5-min.js │ │ │ └── core-min.js │ │ ├── bower.json │ │ ├── .gitattributes │ │ ├── .bower.json │ │ └── copyright.txt │ ├── angular │ │ ├── angular.min.js.gzip │ │ ├── bower.json │ │ ├── angular-csp.css │ │ ├── .bower.json │ │ ├── package.json │ │ └── README.md │ ├── angular-animate │ │ ├── bower.json │ │ ├── .bower.json │ │ ├── package.json │ │ └── README.md │ ├── angular-resource │ │ ├── bower.json │ │ ├── .bower.json │ │ ├── package.json │ │ └── README.md │ ├── angular-sanitize │ │ ├── bower.json │ │ ├── .bower.json │ │ ├── package.json │ │ └── README.md │ ├── angular-ui-router │ │ ├── bower.json │ │ ├── .bower.json │ │ ├── LICENSE │ │ └── src │ │ │ ├── stateFilters.js │ │ │ ├── viewScroll.js │ │ │ └── view.js │ ├── angular-loading-bar │ │ ├── bower.json │ │ ├── .bower.json │ │ ├── LICENSE │ │ ├── package.json │ │ ├── build │ │ │ ├── loading-bar.min.css │ │ │ └── loading-bar.min.js │ │ ├── Gruntfile.js │ │ └── CHANGELOG.md │ └── velocity │ │ ├── bower.json │ │ └── .bower.json ├── favicon.ico ├── images │ ├── wallpaper.jpg │ ├── fonts │ │ ├── Italiana.ttf │ │ └── Italiana.woff2 │ ├── iconfont │ │ ├── iconfont.eot │ │ ├── iconfont.ttf │ │ └── iconfont.woff │ └── loading-spin.svg ├── templates │ ├── video.html │ ├── news │ │ ├── index.html │ │ ├── detail.html │ │ └── list.html │ ├── vpn.html │ ├── wallpaper │ │ └── index.html │ ├── music │ │ ├── index.html │ │ └── play.html │ └── home.html ├── scss │ ├── video.scss │ ├── main.scss │ ├── common.scss │ ├── vpn.scss │ ├── wallpaper.scss │ └── home.scss ├── components │ ├── k-player │ │ ├── images │ │ │ └── iconfonts │ │ │ │ ├── iconfont.eot │ │ │ │ ├── iconfont.ttf │ │ │ │ ├── iconfont.woff │ │ │ │ └── iconfont.svg │ │ ├── config.rb │ │ └── k-player.html │ ├── k-slider │ │ └── k-slider.css │ ├── extended │ │ └── extended.js │ └── k-scroll │ │ └── k-scroll.css ├── js │ ├── services │ │ ├── music.js │ │ ├── wallpaper.js │ │ ├── navbar.js │ │ ├── news.js │ │ └── memory.js │ ├── video.js │ ├── wallpaper.js │ └── home.js ├── config.rb └── index.html ├── README.md ├── services ├── music.js ├── wallpaper.js ├── video.js └── news.js ├── middlewares ├── errorhandler.js └── view.js ├── db ├── wallpaper.js ├── music.js ├── news.js └── video.js ├── config.default.js ├── web_router.js ├── controllers ├── news.js ├── wallpaper.js └── music.js ├── .gitignore ├── package.json ├── setupsocket.js ├── app.js └── Gruntfile.js /static/css/common.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | iro-x 2 | ======= 3 | next generation web -------------------------------------------------------------------------------- /static/bower_components/jquery/src/outro.js: -------------------------------------------------------------------------------- 1 | })); 2 | -------------------------------------------------------------------------------- /static/bower_components/angular-once/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .idea/ -------------------------------------------------------------------------------- /static/bower_components/jquery/src/selector.js: -------------------------------------------------------------------------------- 1 | define([ "./selector-sizzle" ]); 2 | -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KuroGuo/iro-x/HEAD/static/favicon.ico -------------------------------------------------------------------------------- /static/bower_components/jquery/src/var/arr.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return []; 3 | }); 4 | -------------------------------------------------------------------------------- /static/css/video.css: -------------------------------------------------------------------------------- 1 | #video,#video k-player{position:absolute;width:100%;height:100%} 2 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/status.bat: -------------------------------------------------------------------------------- 1 | git status 2 | git log --branches --not --remotes -------------------------------------------------------------------------------- /static/images/wallpaper.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KuroGuo/iro-x/HEAD/static/images/wallpaper.jpg -------------------------------------------------------------------------------- /static/bower_components/jquery/src/ajax/var/rquery.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return (/\?/); 3 | }); 4 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/var/rnotwhite.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return (/\S+/g); 3 | }); 4 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/css/var/rmargin.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return (/^margin/); 3 | }); 4 | -------------------------------------------------------------------------------- /static/images/fonts/Italiana.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KuroGuo/iro-x/HEAD/static/images/fonts/Italiana.ttf -------------------------------------------------------------------------------- /static/templates/video.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/push.bat: -------------------------------------------------------------------------------- 1 | git status 2 | git add -A 3 | git commit -m %1 4 | git push 5 | git status -------------------------------------------------------------------------------- /static/bower_components/jquery/src/var/strundefined.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return typeof undefined; 3 | }); 4 | -------------------------------------------------------------------------------- /static/images/fonts/Italiana.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KuroGuo/iro-x/HEAD/static/images/fonts/Italiana.woff2 -------------------------------------------------------------------------------- /static/images/iconfont/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KuroGuo/iro-x/HEAD/static/images/iconfont/iconfont.eot -------------------------------------------------------------------------------- /static/images/iconfont/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KuroGuo/iro-x/HEAD/static/images/iconfont/iconfont.ttf -------------------------------------------------------------------------------- /static/images/iconfont/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KuroGuo/iro-x/HEAD/static/images/iconfont/iconfont.woff -------------------------------------------------------------------------------- /static/scss/video.scss: -------------------------------------------------------------------------------- 1 | #video, 2 | #video k-player { 3 | position: absolute; 4 | width: 100%; 5 | height: 100%; 6 | } -------------------------------------------------------------------------------- /static/bower_components/jquery/src/var/push.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.push; 5 | }); 6 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/var/class2type.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | // [[Class]] -> type pairs 3 | return {}; 4 | }); 5 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/var/concat.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.concat; 5 | }); 6 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/var/indexOf.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.indexOf; 5 | }); 6 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/var/slice.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.slice; 5 | }); 6 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/css/var/cssExpand.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return [ "Top", "Right", "Bottom", "Left" ]; 3 | }); 4 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/var/pnum.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; 3 | }); 4 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/data/var/data_priv.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../Data" 3 | ], function( Data ) { 4 | return new Data(); 5 | }); 6 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/data/var/data_user.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../Data" 3 | ], function( Data ) { 4 | return new Data(); 5 | }); 6 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/manipulation/var/rcheckableType.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return (/^(?:checkbox|radio)$/i); 3 | }); 4 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/ajax/var/nonce.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../../core" 3 | ], function( jQuery ) { 4 | return jQuery.now(); 5 | }); 6 | -------------------------------------------------------------------------------- /static/bower_components/angular/angular.min.js.gzip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KuroGuo/iro-x/HEAD/static/bower_components/angular/angular.min.js.gzip -------------------------------------------------------------------------------- /static/bower_components/jquery/src/var/toString.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./class2type" 3 | ], function( class2type ) { 4 | return class2type.toString; 5 | }); 6 | -------------------------------------------------------------------------------- /services/music.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var Music = require('../db/music'); 4 | 5 | exports.findAll = function (callback) { 6 | Music.find(callback); 7 | }; -------------------------------------------------------------------------------- /static/bower_components/jquery/src/var/hasOwn.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./class2type" 3 | ], function( class2type ) { 4 | return class2type.hasOwnProperty; 5 | }); 6 | -------------------------------------------------------------------------------- /static/components/k-player/images/iconfonts/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KuroGuo/iro-x/HEAD/static/components/k-player/images/iconfonts/iconfont.eot -------------------------------------------------------------------------------- /static/components/k-player/images/iconfonts/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KuroGuo/iro-x/HEAD/static/components/k-player/images/iconfonts/iconfont.ttf -------------------------------------------------------------------------------- /static/components/k-player/images/iconfonts/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KuroGuo/iro-x/HEAD/static/components/k-player/images/iconfonts/iconfont.woff -------------------------------------------------------------------------------- /static/bower_components/jquery/src/core/var/rsingleTag.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | // Match a standalone tag 3 | return (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); 4 | }); 5 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/var/support.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | // All support tests are defined in their respective modules. 3 | return {}; 4 | }); 5 | -------------------------------------------------------------------------------- /static/templates/news/index.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
-------------------------------------------------------------------------------- /static/bower_components/angular/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.3.10", 4 | "main": "./angular.js", 5 | "ignore": [], 6 | "dependencies": { 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/css/var/rnumnonpx.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../../var/pnum" 3 | ], function( pnum ) { 4 | return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 5 | }); 6 | -------------------------------------------------------------------------------- /services/wallpaper.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var Wallpaper = require('../db/wallpaper'); 4 | 5 | exports.findAll = function (callback) { 6 | Wallpaper.find().sort({_id: -1}).exec(callback); 7 | }; -------------------------------------------------------------------------------- /static/bower_components/jquery/src/traversing/var/rneedsContext.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../../core", 3 | "../../selector" 4 | ], function( jQuery ) { 5 | return jQuery.expr.match.needsContext; 6 | }); 7 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/event/support.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../var/support" 3 | ], function( support ) { 4 | 5 | support.focusinBubbles = "onfocusin" in window; 6 | 7 | return support; 8 | 9 | }); 10 | -------------------------------------------------------------------------------- /static/scss/main.scss: -------------------------------------------------------------------------------- 1 | @import "compass/reset"; 2 | @import "base.scss"; 3 | @import "home.scss"; 4 | @import "video.scss"; 5 | @import "music.scss"; 6 | @import "wallpaper.scss"; 7 | @import "news.scss"; 8 | @import "vpn.scss"; -------------------------------------------------------------------------------- /middlewares/errorhandler.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = function (err, req, res, next) { 4 | res.status(500).send({ 5 | error: { 6 | message: err.message 7 | } 8 | }); 9 | console.log(err.stack); 10 | } -------------------------------------------------------------------------------- /static/components/k-slider/k-slider.css: -------------------------------------------------------------------------------- 1 | .k-slider-wrapper { 2 | position: relative; 3 | } 4 | 5 | .k-slider { 6 | width: 10000rem; 7 | } 8 | 9 | .k-slider-section { 10 | display: inline-block; 11 | vertical-align: top; 12 | } -------------------------------------------------------------------------------- /db/wallpaper.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var mongoose = require('mongoose'); 4 | 5 | var wallpaperSchema = mongoose.Schema({ 6 | name: String, 7 | src: String 8 | }); 9 | 10 | module.exports = mongoose.model('Wallpaper', wallpaperSchema); -------------------------------------------------------------------------------- /static/bower_components/angular-animate/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-animate", 3 | "version": "1.3.10", 4 | "main": "./angular-animate.js", 5 | "ignore": [], 6 | "dependencies": { 7 | "angular": "1.3.10" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /static/bower_components/angular-resource/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-resource", 3 | "version": "1.3.10", 4 | "main": "./angular-resource.js", 5 | "ignore": [], 6 | "dependencies": { 7 | "angular": "1.3.10" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /static/bower_components/angular-sanitize/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.3.10", 4 | "main": "./angular-sanitize.js", 5 | "ignore": [], 6 | "dependencies": { 7 | "angular": "1.3.10" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /static/js/services/music.js: -------------------------------------------------------------------------------- 1 | ;(function (angular) { 'use strict'; 2 | angular.module('iro.services.music', ['ngResource']) 3 | .factory('Music', ['$resource', function ($resource) { 4 | return $resource('/api/music/:name'); 5 | }]); 6 | })(angular); -------------------------------------------------------------------------------- /static/js/services/wallpaper.js: -------------------------------------------------------------------------------- 1 | ;(function (angular) { 'use strict'; 2 | angular.module('iro.services.wallpaper', []) 3 | .factory('Wallpaper', ['$resource', function ($resource) { 4 | return $resource('/api/wallpaper/:name'); 5 | }]); 6 | })(angular); -------------------------------------------------------------------------------- /static/scss/common.scss: -------------------------------------------------------------------------------- 1 | $font-stack: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif; 2 | $base-color: #6bf; 3 | $base-color-light: #7cf; 4 | $base-color-rich: #5af; 5 | $base-color-big-rich: #03c; 6 | $text-color: #222; 7 | -------------------------------------------------------------------------------- /db/music.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var mongoose = require('mongoose'); 4 | 5 | var musicSchema = mongoose.Schema({ 6 | name: String, 7 | src: String, 8 | lrcUrl: String, 9 | bgSrc: String 10 | }); 11 | 12 | module.exports = mongoose.model('Music', musicSchema); -------------------------------------------------------------------------------- /static/templates/vpn.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

VPN

4 | 5 |
6 |
7 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/pad-nopadding-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | CryptoJS.pad.NoPadding={pad:function(){},unpad:function(){}}; 8 | -------------------------------------------------------------------------------- /static/js/services/navbar.js: -------------------------------------------------------------------------------- 1 | ;(function (angular) { 'use strict'; 2 | angular.module('iro.services.navbar', []) 3 | .factory('navbar', [function () { 4 | var navbar = {}; 5 | 6 | navbar.customBackgroundColor = null; 7 | 8 | return navbar; 9 | }]); 10 | })(angular); -------------------------------------------------------------------------------- /static/bower_components/jquery/src/attributes.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./core", 3 | "./attributes/attr", 4 | "./attributes/prop", 5 | "./attributes/classes", 6 | "./attributes/val" 7 | ], function( jQuery ) { 8 | 9 | // Return jQuery for attributes-only inclusion 10 | return jQuery; 11 | }); 12 | -------------------------------------------------------------------------------- /db/news.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var mongoose = require('mongoose'); 4 | 5 | var newsSchema = mongoose.Schema({ 6 | title: String, 7 | content: String, 8 | from: String, 9 | fromURL: String, 10 | thumbSrc: String, 11 | updateTime: Date 12 | }); 13 | 14 | module.exports = mongoose.model('News', newsSchema); -------------------------------------------------------------------------------- /static/bower_components/jquery/src/deprecated.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./core", 3 | "./traversing" 4 | ], function( jQuery ) { 5 | 6 | // The number of elements contained in the matched element set 7 | jQuery.fn.size = function() { 8 | return this.length; 9 | }; 10 | 11 | jQuery.fn.andSelf = jQuery.fn.addBack; 12 | 13 | }); 14 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/ajax/parseJSON.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | // Support: Android 2.3 6 | // Workaround failure to string-cast null input 7 | jQuery.parseJSON = function( data ) { 8 | return JSON.parse( data + "" ); 9 | }; 10 | 11 | return jQuery.parseJSON; 12 | 13 | }); 14 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/effects/animatedSelector.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core", 3 | "../selector", 4 | "../effects" 5 | ], function( jQuery ) { 6 | 7 | jQuery.expr.filters.animated = function( elem ) { 8 | return jQuery.grep(jQuery.timers, function( fn ) { 9 | return elem === fn.elem; 10 | }).length; 11 | }; 12 | 13 | }); 14 | -------------------------------------------------------------------------------- /static/js/services/news.js: -------------------------------------------------------------------------------- 1 | ;(function (angular) { 'use strict'; 2 | angular.module('iro.services.news', []) 3 | .factory('News', ['$resource', function ($resource) { 4 | return $resource('/api/news/:id', null, { 5 | pageQuery: {method: 'GET', params: {startId: null, count: 48}, isArray: true} 6 | }); 7 | }]); 8 | })(angular); -------------------------------------------------------------------------------- /static/bower_components/angular/angular-csp.css: -------------------------------------------------------------------------------- 1 | /* Include this file in your html if you are using the CSP mode. */ 2 | 3 | @charset "UTF-8"; 4 | 5 | [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], 6 | .ng-cloak, .x-ng-cloak, 7 | .ng-hide:not(.ng-hide-animate) { 8 | display: none !important; 9 | } 10 | 11 | ng\:form { 12 | display: block; 13 | } 14 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cryptojslib", 3 | "version": "3.1.2", 4 | "main": "**/*.js", 5 | "homepage": "https://github.com/sytelus/cryptojs", 6 | "repository": { 7 | "type": "git", 8 | "url": "git://github.com/sytelus/cryptojs.git" 9 | }, 10 | "dependencies": { 11 | }, 12 | "devDependencies": { 13 | } 14 | } -------------------------------------------------------------------------------- /static/bower_components/jquery/src/manipulation/_evalUrl.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../ajax" 3 | ], function( jQuery ) { 4 | 5 | jQuery._evalUrl = function( url ) { 6 | return jQuery.ajax({ 7 | url: url, 8 | type: "GET", 9 | dataType: "script", 10 | async: false, 11 | global: false, 12 | "throws": true 13 | }); 14 | }; 15 | 16 | return jQuery._evalUrl; 17 | 18 | }); 19 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/pad-nopadding.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | /** 8 | * A noop padding strategy. 9 | */ 10 | CryptoJS.pad.NoPadding = { 11 | pad: function () { 12 | }, 13 | 14 | unpad: function () { 15 | } 16 | }; 17 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/selector-sizzle.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./core", 3 | "sizzle" 4 | ], function( jQuery, Sizzle ) { 5 | 6 | jQuery.find = Sizzle; 7 | jQuery.expr = Sizzle.selectors; 8 | jQuery.expr[":"] = jQuery.expr.pseudos; 9 | jQuery.unique = Sizzle.uniqueSort; 10 | jQuery.text = Sizzle.getText; 11 | jQuery.isXMLDoc = Sizzle.isXML; 12 | jQuery.contains = Sizzle.contains; 13 | 14 | }); 15 | -------------------------------------------------------------------------------- /static/templates/wallpaper/index.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 6 |
7 |
-------------------------------------------------------------------------------- /static/bower_components/angular-once/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-once", 3 | "author": "Tadeusz Wójcik ", 4 | "version": "0.1.8", 5 | "devDependencies": { 6 | "grunt": "~0.4.1", 7 | "grunt-bump": "~0.0.1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/tadeuszwojcik/angular-once.git" 12 | }, 13 | "main": "once.js" 14 | } 15 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/format-hex-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | (function(){var b=CryptoJS,d=b.lib.CipherParams,c=b.enc.Hex;b.format.Hex={stringify:function(a){return a.ciphertext.toString(c)},parse:function(a){a=c.parse(a);return d.create({ciphertext:a})}}})(); 8 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/pad-ansix923-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | CryptoJS.pad.AnsiX923={pad:function(a,d){var b=a.sigBytes,c=4*d,c=c-b%c,b=b+c-1;a.clamp();a.words[b>>>2]|=c<<24-8*(b%4);a.sigBytes+=c},unpad:function(a){a.sigBytes-=a.words[a.sigBytes-1>>>2]&255}}; 8 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/pad-iso97971-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | CryptoJS.pad.Iso97971={pad:function(a,b){a.concat(CryptoJS.lib.WordArray.create([2147483648],1));CryptoJS.pad.ZeroPadding.pad(a,b)},unpad:function(a){CryptoJS.pad.ZeroPadding.unpad(a);a.sigBytes--}}; 8 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/pad-zeropadding-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | CryptoJS.pad.ZeroPadding={pad:function(a,c){var b=4*c;a.clamp();a.sigBytes+=b-(a.sigBytes%b||b)},unpad:function(a){for(var c=a.words,b=a.sigBytes-1;!(c[b>>>2]>>>24-8*(b%4)&255);)b--;a.sigBytes=b+1}}; 8 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/event/ajax.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core", 3 | "../event" 4 | ], function( jQuery ) { 5 | 6 | // Attach a bunch of functions for handling common AJAX events 7 | jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) { 8 | jQuery.fn[ type ] = function( fn ) { 9 | return this.on( type, fn ); 10 | }; 11 | }); 12 | 13 | }); 14 | -------------------------------------------------------------------------------- /static/templates/music/index.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
    5 |
  • 6 | {{music.name}} 7 |
  • 8 |
9 |
10 |
-------------------------------------------------------------------------------- /config.default.js: -------------------------------------------------------------------------------- 1 | // 默认配置 2 | 'use strict'; 3 | 4 | var config = { 5 | // mongodb地址 6 | db: 'mongodb://localhost/iro-x', 7 | 8 | // 监听端口 9 | port: process.env.PORT || 1337, 10 | 11 | // 音乐路径前缀 12 | musicPathPre: '/static/', 13 | 14 | // 壁纸路径前缀 15 | wallpaperPathPre: '/static/', 16 | 17 | // 爬虫采集间隔时间(单位:毫秒) 18 | scrapRate: 20 * 60 * 1000, 19 | 20 | sessionSecret: 'iro' 21 | }; 22 | 23 | module.exports = config; 24 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/pad-iso10126-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | CryptoJS.pad.Iso10126={pad:function(a,c){var b=4*c,b=b-a.sigBytes%b;a.concat(CryptoJS.lib.WordArray.random(b-1)).concat(CryptoJS.lib.WordArray.create([b<<24],1))},unpad:function(a){a.sigBytes-=a.words[a.sigBytes-1>>>2]&255}}; 8 | -------------------------------------------------------------------------------- /middlewares/view.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var fs = require('fs'), 4 | path = require('path'); 5 | 6 | module.exports = function (req, res, next) { 7 | if (/^\/static\//.test(req.path)) { 8 | next(); 9 | return; 10 | } 11 | 12 | fs.readFile(path.join(__dirname, '../static/index.html'), { 13 | encoding: 'utf8' 14 | }, function (err, data) { 15 | if (err) { 16 | next(err); 17 | } 18 | res.send(data); 19 | }); 20 | } -------------------------------------------------------------------------------- /static/bower_components/jquery/src/css/var/isHidden.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../../core", 3 | "../../selector" 4 | // css is assumed 5 | ], function( jQuery ) { 6 | 7 | return function( elem, el ) { 8 | // isHidden might be called from jQuery#filter function; 9 | // in that case, element will be second argument 10 | elem = el || elem; 11 | return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); 12 | }; 13 | }); 14 | -------------------------------------------------------------------------------- /static/images/loading-spin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/mode-ecb-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | CryptoJS.mode.ECB=function(){var a=CryptoJS.lib.BlockCipherMode.extend();a.Encryptor=a.extend({processBlock:function(a,b){this._cipher.encryptBlock(a,b)}});a.Decryptor=a.extend({processBlock:function(a,b){this._cipher.decryptBlock(a,b)}});return a}(); 8 | -------------------------------------------------------------------------------- /db/video.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var mongoose = require('mongoose'); 4 | 5 | var videoSchema = mongoose.Schema({ 6 | vid: String, 7 | title: String, 8 | src: String, 9 | danmus: [{ 10 | content: String, 11 | videoTime: Number, 12 | sendTime: Date 13 | }], 14 | comments: [{ 15 | body: String, 16 | date: Date, 17 | writer: mongoose.Schema.Types.ObjectId 18 | }] 19 | }); 20 | 21 | module.exports = mongoose.model('Video', videoSchema); -------------------------------------------------------------------------------- /static/templates/news/detail.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 |
5 |
6 |
-------------------------------------------------------------------------------- /web_router.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var express = require('express'); 4 | 5 | var music = require('./controllers/music'); 6 | var wallpaper = require('./controllers/wallpaper'); 7 | var news = require('./controllers/news'); 8 | 9 | var router = express.Router(); 10 | 11 | router.get('/music', music.all); 12 | 13 | router.get('/wallpaper', wallpaper.all); 14 | 15 | router.get('/news', news.query); 16 | router.get('/news/:id', news.get); 17 | 18 | module.exports = router; -------------------------------------------------------------------------------- /static/bower_components/jquery/src/css/hiddenVisibleSelectors.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core", 3 | "../selector" 4 | ], function( jQuery ) { 5 | 6 | jQuery.expr.filters.hidden = function( elem ) { 7 | // Support: Opera <= 12.12 8 | // Opera reports offsetWidths and offsetHeights less than zero on some elements 9 | return elem.offsetWidth <= 0 && elem.offsetHeight <= 0; 10 | }; 11 | jQuery.expr.filters.visible = function( elem ) { 12 | return !jQuery.expr.filters.hidden( elem ); 13 | }; 14 | 15 | }); 16 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/css/var/getStyles.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return function( elem ) { 3 | // Support: IE<=11+, Firefox<=30+ (#15098, #14150) 4 | // IE throws on elements created in popups 5 | // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 6 | if ( elem.ownerDocument.defaultView.opener ) { 7 | return elem.ownerDocument.defaultView.getComputedStyle( elem, null ); 8 | } 9 | 10 | return window.getComputedStyle( elem, null ); 11 | }; 12 | }); 13 | -------------------------------------------------------------------------------- /static/js/services/memory.js: -------------------------------------------------------------------------------- 1 | ;(function (angular) { 'use strict'; 2 | angular.module('iro.services.memory', []) 3 | .factory('memory', [function () { 4 | var memory = {}; 5 | 6 | return { 7 | get: function (key) { 8 | return memory[key]; 9 | }, 10 | set: function (key, value) { 11 | memory[key] = value; 12 | }, 13 | remove: function (key) { 14 | delete memory[key]; 15 | } 16 | }; 17 | }]); 18 | })(angular); -------------------------------------------------------------------------------- /static/bower_components/jquery/src/data/accepts.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | /** 6 | * Determines whether an object can have data 7 | */ 8 | jQuery.acceptData = function( owner ) { 9 | // Accepts only: 10 | // - Node 11 | // - Node.ELEMENT_NODE 12 | // - Node.DOCUMENT_NODE 13 | // - Object 14 | // - Any 15 | /* jshint -W018 */ 16 | return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 17 | }; 18 | 19 | return jQuery.acceptData; 20 | }); 21 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/mode-ofb-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | CryptoJS.mode.OFB=function(){var b=CryptoJS.lib.BlockCipherMode.extend(),d=b.Encryptor=b.extend({processBlock:function(b,e){var a=this._cipher,d=a.blockSize,f=this._iv,c=this._keystream;f&&(c=this._keystream=f.slice(0),this._iv=void 0);a.encryptBlock(c,0);for(a=0;a= 1.0.8" 7 | }, 8 | "ignore": [ 9 | "**/.*", 10 | "node_modules", 11 | "bower_components", 12 | "component.json", 13 | "package.json", 14 | "lib", 15 | "config", 16 | "sample", 17 | "test", 18 | "tests", 19 | "ngdoc_assets", 20 | "Gruntfile.js", 21 | "files.js" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/mode-ctr-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | CryptoJS.mode.CTR=function(){var b=CryptoJS.lib.BlockCipherMode.extend(),g=b.Encryptor=b.extend({processBlock:function(b,f){var a=this._cipher,e=a.blockSize,c=this._iv,d=this._counter;c&&(d=this._counter=c.slice(0),this._iv=void 0);c=d.slice(0);a.encryptBlock(c,0);d[e-1]=d[e-1]+1|0;for(a=0;a 5 | 6 | Everyone is permitted to copy and distribute verbatim or modified 7 | copies of this license document, and changing it is allowed as long 8 | as the name is changed. 9 | 10 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 11 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 12 | 13 | 0. You just DO WHAT THE FUCK YOU WANT TO. -------------------------------------------------------------------------------- /static/bower_components/angular-once/Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function (grunt) { 2 | grunt.loadNpmTasks('grunt-bump'); 3 | 4 | grunt.initConfig({ 5 | bump: { 6 | options: { 7 | files: [ 8 | 'package.json', 9 | 'bower.json' 10 | ], 11 | commit: true, 12 | commitMessage: 'chore(release): v%VERSION%', 13 | commitFiles: [ 14 | 'package.json', 15 | 'bower.json' 16 | ], 17 | createTag: true, 18 | push: true, 19 | pushTo: 'origin' 20 | } 21 | } 22 | }); 23 | }; -------------------------------------------------------------------------------- /static/bower_components/jquery/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "version": "2.1.3", 4 | "main": "dist/jquery.js", 5 | "license": "MIT", 6 | "ignore": [ 7 | "**/.*", 8 | "build", 9 | "speed", 10 | "test", 11 | "*.md", 12 | "AUTHORS.txt", 13 | "Gruntfile.js", 14 | "package.json" 15 | ], 16 | "devDependencies": { 17 | "sizzle": "2.1.1-jquery.2.1.2", 18 | "requirejs": "2.1.10", 19 | "qunit": "1.14.0", 20 | "sinon": "1.8.1" 21 | }, 22 | "keywords": [ 23 | "jquery", 24 | "javascript", 25 | "library" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /static/components/extended/extended.js: -------------------------------------------------------------------------------- 1 | window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame 2 | || window.mozRequestAnimationFrame || window.msRequestAnimationFrame; 3 | 4 | window.cancelAnimationFrame = window.cancelAnimationFrame || window.webkitCancelAnimationFrame 5 | || window.mozCancelAnimationFrame || window.msCancelAnimationFrame; 6 | 7 | Blob.prototype.slice = Blob.prototype.slice || Blob.prototype.webkitSlice; 8 | 9 | window.URL.createObjectURL = window.URL.createObjectURL || window.URL.webkitCreateObjectURL; -------------------------------------------------------------------------------- /controllers/news.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var news = require('../services/news'); 4 | 5 | exports.get = function (req, res, next) { 6 | var id = req.params.id; 7 | 8 | news.getById(id, function (err, news) { 9 | if (err) { 10 | return next(err); 11 | } 12 | res.send(news); 13 | }); 14 | }; 15 | 16 | exports.query = function (req, res, next) { 17 | var startId = req.query.startId; 18 | var count = req.query.count || 50; 19 | 20 | news.query(startId, count, function (err, newsList) { 21 | if (err) { 22 | return next(err); 23 | } 24 | 25 | res.send(newsList); 26 | }); 27 | }; -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /static/templates/music/play.html: -------------------------------------------------------------------------------- 1 |
2 |
    3 |
  • {{lrc.content}}
  • 4 |
5 |
6 | 9 |
-------------------------------------------------------------------------------- /static/bower_components/angular-animate/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-animate", 3 | "version": "1.3.10", 4 | "main": "./angular-animate.js", 5 | "ignore": [], 6 | "dependencies": { 7 | "angular": "1.3.10" 8 | }, 9 | "homepage": "https://github.com/angular/bower-angular-animate", 10 | "_release": "1.3.10", 11 | "_resolution": { 12 | "type": "version", 13 | "tag": "v1.3.10", 14 | "commit": "ae99c60870b78d1bcd01135d4412feaddd8b0959" 15 | }, 16 | "_source": "git://github.com/angular/bower-angular-animate.git", 17 | "_target": "~1.3.10", 18 | "_originalSource": "angular-animate", 19 | "_direct": true 20 | } -------------------------------------------------------------------------------- /static/bower_components/angular-resource/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-resource", 3 | "version": "1.3.10", 4 | "main": "./angular-resource.js", 5 | "ignore": [], 6 | "dependencies": { 7 | "angular": "1.3.10" 8 | }, 9 | "homepage": "https://github.com/angular/bower-angular-resource", 10 | "_release": "1.3.10", 11 | "_resolution": { 12 | "type": "version", 13 | "tag": "v1.3.10", 14 | "commit": "6364e8feb985d5fb0016c7eafa5bbfa5e722fb9a" 15 | }, 16 | "_source": "git://github.com/angular/bower-angular-resource.git", 17 | "_target": "~1.3.10", 18 | "_originalSource": "angular-resource", 19 | "_direct": true 20 | } -------------------------------------------------------------------------------- /static/bower_components/angular-sanitize/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.3.10", 4 | "main": "./angular-sanitize.js", 5 | "ignore": [], 6 | "dependencies": { 7 | "angular": "1.3.10" 8 | }, 9 | "homepage": "https://github.com/angular/bower-angular-sanitize", 10 | "_release": "1.3.10", 11 | "_resolution": { 12 | "type": "version", 13 | "tag": "v1.3.10", 14 | "commit": "ca325002f33016665f660b8a3ac249a2fa489a07" 15 | }, 16 | "_source": "git://github.com/angular/bower-angular-sanitize.git", 17 | "_target": "~1.3.10", 18 | "_originalSource": "angular-sanitize", 19 | "_direct": true 20 | } -------------------------------------------------------------------------------- /static/bower_components/jquery/src/ajax/parseXML.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | // Cross-browser xml parsing 6 | jQuery.parseXML = function( data ) { 7 | var xml, tmp; 8 | if ( !data || typeof data !== "string" ) { 9 | return null; 10 | } 11 | 12 | // Support: IE9 13 | try { 14 | tmp = new DOMParser(); 15 | xml = tmp.parseFromString( data, "text/xml" ); 16 | } catch ( e ) { 17 | xml = undefined; 18 | } 19 | 20 | if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { 21 | jQuery.error( "Invalid XML: " + data ); 22 | } 23 | return xml; 24 | }; 25 | 26 | return jQuery.parseXML; 27 | 28 | }); 29 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/css/addGetHookIf.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | 3 | function addGetHookIf( conditionFn, hookFn ) { 4 | // Define the hook, we'll check on the first run if it's really needed. 5 | return { 6 | get: function() { 7 | if ( conditionFn() ) { 8 | // Hook not needed (or it's not possible to use it due 9 | // to missing dependency), remove it. 10 | delete this.get; 11 | return; 12 | } 13 | 14 | // Hook needed; redefine it so that the support test is not executed again. 15 | return (this.get = hookFn).apply( this, arguments ); 16 | } 17 | }; 18 | } 19 | 20 | return addGetHookIf; 21 | 22 | }); 23 | -------------------------------------------------------------------------------- /static/bower_components/angular-once/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-once", 3 | "version": "0.1.8", 4 | "main": "once.js", 5 | "description": "one time bindings for AngularJS", 6 | "homepage": "https://github.com/tadeuszwojcik/angular-once", 7 | "author": "Tadeusz Wójcik ", 8 | "repository": { 9 | "type": "git", 10 | "url": "https://github.com/tadeuszwojcik/angular-once.git" 11 | }, 12 | "license": "WTFPL", 13 | "keywords": [ 14 | "bindings", 15 | "binding", 16 | "directive", 17 | "angularjs", 18 | "angular", 19 | "watcher", 20 | "one time", 21 | "watch fighters" 22 | ] 23 | } -------------------------------------------------------------------------------- /static/templates/news/list.html: -------------------------------------------------------------------------------- 1 |
2 | 10 |
-------------------------------------------------------------------------------- /controllers/wallpaper.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var config = require('../config'); 4 | var wallpaper = require('../services/wallpaper'); 5 | var url = require('url'); 6 | 7 | exports.all = function (req, res, next) { 8 | wallpaper.findAll(function (err, wallpapers) { 9 | if (err) { 10 | next(err); 11 | return; 12 | } 13 | 14 | if (config.wallpaperPathPre) { 15 | wallpapers = wallpapers.map(function (wallpaper) { 16 | return { 17 | name: wallpaper.name, 18 | src: url.resolve(config.wallpaperPathPre, wallpaper.src) 19 | }; 20 | }); 21 | } 22 | 23 | res.send(wallpapers); 24 | }); 25 | }; -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cryptojslib", 3 | "version": "3.1.2", 4 | "main": "**/*.js", 5 | "homepage": "https://github.com/sytelus/cryptojs", 6 | "repository": { 7 | "type": "git", 8 | "url": "git://github.com/sytelus/cryptojs.git" 9 | }, 10 | "dependencies": {}, 11 | "devDependencies": {}, 12 | "_release": "3.1.2", 13 | "_resolution": { 14 | "type": "version", 15 | "tag": "v3.1.2", 16 | "commit": "79faa50ca65a0bc302ff93518215c015b4d3004c" 17 | }, 18 | "_source": "git://github.com/sytelus/CryptoJS.git", 19 | "_target": "~3.1.2", 20 | "_originalSource": "cryptojslib", 21 | "_direct": true 22 | } -------------------------------------------------------------------------------- /static/bower_components/angular-loading-bar/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-loading-bar", 3 | "version": "0.6.0", 4 | "main": [ 5 | "build/loading-bar.js", 6 | "build/loading-bar.css" 7 | ], 8 | "ignore": [ 9 | "**/.*", 10 | "node_modules", 11 | "components", 12 | "test", 13 | "example" 14 | ], 15 | "devDependencies": { 16 | "angular": "^1.2.9", 17 | "angular-1.3": "angular#1.3", 18 | "angular-mocks": "^1.2.9", 19 | "angular-mocks-1.3": "angular-mocks#1.3", 20 | "angular-animate": "^1.2.9", 21 | "angular-animate-1.3": "angular-animate#1.3" 22 | }, 23 | "resolutions": { 24 | "angular": "1.2.23" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/queue/delay.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core", 3 | "../queue", 4 | "../effects" // Delay is optional because of this dependency 5 | ], function( jQuery ) { 6 | 7 | // Based off of the plugin by Clint Helfers, with permission. 8 | // http://blindsignals.com/index.php/2009/07/jquery-delay/ 9 | jQuery.fn.delay = function( time, type ) { 10 | time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 11 | type = type || "fx"; 12 | 13 | return this.queue( type, function( next, hooks ) { 14 | var timeout = setTimeout( next, time ); 15 | hooks.stop = function() { 16 | clearTimeout( timeout ); 17 | }; 18 | }); 19 | }; 20 | 21 | return jQuery.fn.delay; 22 | }); 23 | -------------------------------------------------------------------------------- /static/js/video.js: -------------------------------------------------------------------------------- 1 | ;(function (angular) { 'use strict'; 2 | angular.module('iro.video', ['iro.services.memory', 'k-player']) 3 | .controller('VideoCtrl', ['$scope', function ($scope) { 4 | $scope.global.title = '视频'; 5 | }]) 6 | .directive('iroVideo', ['$window', 'memory', function ($window, memory) { 7 | return { 8 | restrict: 'E', 9 | link: function (scope, element, attrs, controller) { 10 | memory.get('videoModel') && (scope.player = memory.get('videoModel')); 11 | 12 | element.on('$destroy', function () { 13 | memory.set('videoModel', scope.player); 14 | }); 15 | } 16 | }; 17 | }]); 18 | })(angular); -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/mode-cfb-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | CryptoJS.mode.CFB=function(){function g(c,b,e,a){var d=this._iv;d?(d=d.slice(0),this._iv=void 0):d=this._prevBlock;a.encryptBlock(d,0);for(a=0;a", 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/angular/angular.js/issues" 23 | }, 24 | "homepage": "http://angularjs.org" 25 | } 26 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/evpkdf-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | (function(){var b=CryptoJS,a=b.lib,f=a.Base,k=a.WordArray,a=b.algo,l=a.EvpKDF=f.extend({cfg:f.extend({keySize:4,hasher:a.MD5,iterations:1}),init:function(a){this.cfg=this.cfg.extend(a)},compute:function(a,b){for(var c=this.cfg,d=c.hasher.create(),g=k.create(),f=g.words,h=c.keySize,c=c.iterations;f.length", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/angular/angular.js/issues" 24 | }, 25 | "homepage": "http://angularjs.org" 26 | } 27 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/sha384-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | (function(){var c=CryptoJS,a=c.x64,b=a.Word,e=a.WordArray,a=c.algo,d=a.SHA512,a=a.SHA384=d.extend({_doReset:function(){this._hash=new e.init([new b.init(3418070365,3238371032),new b.init(1654270250,914150663),new b.init(2438529370,812702999),new b.init(355462360,4144912697),new b.init(1731405415,4290775857),new b.init(2394180231,1750603025),new b.init(3675008525,1694076839),new b.init(1203062813,3204075428)])},_doFinalize:function(){var a=d._doFinalize.call(this);a.sigBytes-=16;return a}});c.SHA384= 8 | d._createHelper(a);c.HmacSHA384=d._createHmacHelper(a)})(); 9 | -------------------------------------------------------------------------------- /static/bower_components/angular-sanitize/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.3.10", 4 | "description": "AngularJS module for sanitizing HTML", 5 | "main": "angular-sanitize.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "html", 18 | "client-side" 19 | ], 20 | "author": "Angular Core Team ", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/angular/angular.js/issues" 24 | }, 25 | "homepage": "http://angularjs.org" 26 | } 27 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/jquery.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./core", 3 | "./selector", 4 | "./traversing", 5 | "./callbacks", 6 | "./deferred", 7 | "./core/ready", 8 | "./data", 9 | "./queue", 10 | "./queue/delay", 11 | "./attributes", 12 | "./event", 13 | "./event/alias", 14 | "./manipulation", 15 | "./manipulation/_evalUrl", 16 | "./wrap", 17 | "./css", 18 | "./css/hiddenVisibleSelectors", 19 | "./serialize", 20 | "./ajax", 21 | "./ajax/xhr", 22 | "./ajax/script", 23 | "./ajax/jsonp", 24 | "./ajax/load", 25 | "./event/ajax", 26 | "./effects", 27 | "./effects/animatedSelector", 28 | "./offset", 29 | "./dimensions", 30 | "./deprecated", 31 | "./exports/amd", 32 | "./exports/global" 33 | ], function( jQuery ) { 34 | 35 | return jQuery; 36 | 37 | }); 38 | -------------------------------------------------------------------------------- /static/scss/vpn.scss: -------------------------------------------------------------------------------- 1 | @import "compass/css3"; 2 | 3 | #vpn { 4 | position: absolute; 5 | top: 0; 6 | bottom: 0; 7 | left: 0; 8 | right: 0; 9 | 10 | .main-area { 11 | position: absolute; 12 | max-width: 30rem; 13 | max-height: 7rem; 14 | padding: 2rem; 15 | top: 1rem; 16 | bottom: 1rem; 17 | left: 1rem; 18 | right: 1rem; 19 | margin: auto; 20 | background-color: rgba(0,0,0,.6); 21 | border: .1rem solid rgba(255,255,255,.6); 22 | border-radius: .4rem; 23 | color: white; 24 | 25 | .title { 26 | font-size: 2rem; 27 | margin-bottom: 1rem; 28 | } 29 | 30 | .account { 31 | font-family: Monaco, Consolas, "Lucida Console", monospace; 32 | font-size: 1.3rem; 33 | line-height: 1.2em; 34 | @include user-select(text); 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/pad-iso97971.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | /** 8 | * ISO/IEC 9797-1 Padding Method 2. 9 | */ 10 | CryptoJS.pad.Iso97971 = { 11 | pad: function (data, blockSize) { 12 | // Add 0x80 byte 13 | data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); 14 | 15 | // Zero pad the rest 16 | CryptoJS.pad.ZeroPadding.pad(data, blockSize); 17 | }, 18 | 19 | unpad: function (data) { 20 | // Remove zero padding 21 | CryptoJS.pad.ZeroPadding.unpad(data); 22 | 23 | // Remove one more byte -- the 0x80 byte 24 | data.sigBytes--; 25 | } 26 | }; 27 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/lib-typedarrays-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | (function(){if("function"==typeof ArrayBuffer){var b=CryptoJS.lib.WordArray,e=b.init;(b.init=function(a){a instanceof ArrayBuffer&&(a=new Uint8Array(a));if(a instanceof Int8Array||a instanceof Uint8ClampedArray||a instanceof Int16Array||a instanceof Uint16Array||a instanceof Int32Array||a instanceof Uint32Array||a instanceof Float32Array||a instanceof Float64Array)a=new Uint8Array(a.buffer,a.byteOffset,a.byteLength);if(a instanceof Uint8Array){for(var b=a.byteLength,d=[],c=0;c>>2]|=a[c]<< 8 | 24-8*(c%4);e.call(this,d,b)}else e.apply(this,arguments)}).prototype=b}})(); 9 | -------------------------------------------------------------------------------- /static/bower_components/angular-resource/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-resource", 3 | "version": "1.3.10", 4 | "description": "AngularJS module for interacting with RESTful server-side data sources", 5 | "main": "angular-resource.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "rest", 18 | "client-side" 19 | ], 20 | "author": "Angular Core Team ", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/angular/angular.js/issues" 24 | }, 25 | "homepage": "http://angularjs.org" 26 | } 27 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/pbkdf2-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | (function(){var b=CryptoJS,a=b.lib,d=a.Base,m=a.WordArray,a=b.algo,q=a.HMAC,l=a.PBKDF2=d.extend({cfg:d.extend({keySize:4,hasher:a.SHA1,iterations:1}),init:function(a){this.cfg=this.cfg.extend(a)},compute:function(a,b){for(var c=this.cfg,f=q.create(c.hasher,a),g=m.create(),d=m.create([1]),l=g.words,r=d.words,n=c.keySize,c=c.iterations;l.lengthe&&(b=a.finalize(b));b.clamp();for(var f=this._oKey=b.clone(),g=this._iKey=b.clone(),h=f.words,j=g.words,d=0;d= 1.0.8" 7 | }, 8 | "ignore": [ 9 | "**/.*", 10 | "node_modules", 11 | "bower_components", 12 | "component.json", 13 | "package.json", 14 | "lib", 15 | "config", 16 | "sample", 17 | "test", 18 | "tests", 19 | "ngdoc_assets", 20 | "Gruntfile.js", 21 | "files.js" 22 | ], 23 | "homepage": "https://github.com/angular-ui/ui-router", 24 | "_release": "0.2.13", 25 | "_resolution": { 26 | "type": "version", 27 | "tag": "0.2.13", 28 | "commit": "c3d543aae43d4600512520a0d70723ac31f2cb62" 29 | }, 30 | "_source": "git://github.com/angular-ui/ui-router.git", 31 | "_target": "~0.2.10", 32 | "_originalSource": "angular-ui-router" 33 | } -------------------------------------------------------------------------------- /static/bower_components/velocity/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "velocity", 3 | "version": "1.2.1", 4 | "homepage": "http://velocityjs.org", 5 | "authors": [ 6 | { "name" : "Julian Shapiro", 7 | "homepage" : "http://julian.com/" 8 | } 9 | ], 10 | "description": "Accelerated JavaScript animation.", 11 | "main": [ "./velocity.js", "./velocity.ui.js"], 12 | "keywords": [ 13 | "animation", 14 | "jquery", 15 | "animate", 16 | "lightweight", 17 | "smooth", 18 | "ui", 19 | "velocity.js", 20 | "velocityjs", 21 | "javascript" 22 | ], 23 | "license": "MIT", 24 | "ignore": [ 25 | "*.json", 26 | "!/bower.json", 27 | "LICENSE", 28 | "*.md" 29 | ], 30 | "dependencies": { 31 | "jquery": "*" 32 | }, 33 | "repository" : 34 | { 35 | "type" : "git", 36 | "url" : "http://github.com/julianshapiro/velocity.git" 37 | } 38 | } -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/pad-zeropadding.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | /** 8 | * Zero padding strategy. 9 | */ 10 | CryptoJS.pad.ZeroPadding = { 11 | pad: function (data, blockSize) { 12 | // Shortcut 13 | var blockSizeBytes = blockSize * 4; 14 | 15 | // Pad 16 | data.clamp(); 17 | data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); 18 | }, 19 | 20 | unpad: function (data) { 21 | // Shortcut 22 | var dataWords = data.words; 23 | 24 | // Unpad 25 | var i = data.sigBytes - 1; 26 | while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { 27 | i--; 28 | } 29 | data.sigBytes = i + 1; 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/mode-ctr-gladman-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | /* 8 | 9 | Counter block mode compatible with Dr Brian Gladman fileenc.c 10 | derived from CryptoJS.mode.CTR 11 | Jan Hruby jhruby.web@gmail.com 12 | */ 13 | CryptoJS.mode.CTRGladman=function(){function h(a){if(255===(a>>24&255)){var c=a>>16&255,b=a>>8&255,e=a&255;255===c?(c=0,255===b?(b=0,255===e?e=0:++e):++b):++c;a=0+(c<<16)+(b<<8);a+=e}else a+=16777216;return a}var g=CryptoJS.lib.BlockCipherMode.extend(),j=g.Encryptor=g.extend({processBlock:function(a,c){var b=this._cipher,e=b.blockSize,d=this._iv,f=this._counter;d&&(f=this._counter=d.slice(0),this._iv=void 0);d=f;if(0===(d[0]=h(d[0])))d[1]=h(d[1]);f=f.slice(0);b.encryptBlock(f,0);for(b=0;b>>2]>>>24-8*(a%4)&255)<<16|(e[a+1>>>2]>>>24-8*((a+1)%4)&255)<<8|e[a+2>>>2]>>>24-8*((a+2)%4)&255,g=0;4>g&&a+0.75*g>>6*(3-g)&63));if(e=c.charAt(64))for(;b.length%4;)b.push(e);return b.join("")},parse:function(b){var e=b.length,f=this._map,c=f.charAt(64);c&&(c=b.indexOf(c),-1!=c&&(e=c));for(var c=[],a=0,d=0;d< 8 | e;d++)if(d%4){var g=f.indexOf(b.charAt(d-1))<<2*(d%4),h=f.indexOf(b.charAt(d))>>>6-2*(d%4);c[a>>>2]|=(g|h)<<24-8*(a%4);a++}return j.create(c,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})(); 9 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/enc-utf16-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | (function(){var e=CryptoJS,f=e.lib.WordArray,e=e.enc;e.Utf16=e.Utf16BE={stringify:function(b){var d=b.words;b=b.sigBytes;for(var c=[],a=0;a>>2]>>>16-8*(a%4)&65535));return c.join("")},parse:function(b){for(var d=b.length,c=[],a=0;a>>1]|=b.charCodeAt(a)<<16-16*(a%2);return f.create(c,2*d)}};e.Utf16LE={stringify:function(b){var d=b.words;b=b.sigBytes;for(var c=[],a=0;a>>2]>>>16-8*(a%4)&65535)<<8&4278255360|(d[a>>> 8 | 2]>>>16-8*(a%4)&65535)>>>8&16711935));return c.join("")},parse:function(b){for(var d=b.length,c=[],a=0;a>>1,j=e[g],h=b.charCodeAt(a)<<16-16*(a%2);e[g]=j|h<<8&4278255360|h>>>8&16711935}return f.create(c,2*d)}}})(); 9 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/rc4-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | (function(){function l(){for(var a=this._S,d=this._i,c=this._j,b=0,e=0;4>e;e++){var d=(d+1)%256,c=(c+a[d])%256,f=a[d];a[d]=a[c];a[c]=f;b|=a[(a[d]+a[c])%256]<<24-8*e}this._i=d;this._j=c;return b}var g=CryptoJS,k=g.lib.StreamCipher,h=g.algo,j=h.RC4=k.extend({_doReset:function(){for(var a=this._key,d=a.words,a=a.sigBytes,c=this._S=[],b=0;256>b;b++)c[b]=b;for(var e=b=0;256>b;b++){var f=b%a,e=(e+c[b]+(d[f>>>2]>>>24-8*(f%4)&255))%256,f=c[b];c[b]=c[e];c[e]=f}this._i=this._j=0},_doProcessBlock:function(a, 8 | d){a[d]^=l.call(this)},keySize:8,ivSize:0});g.RC4=k._createHelper(j);h=h.RC4Drop=j.extend({cfg:j.cfg.extend({drop:192}),_doReset:function(){j._doReset.call(this);for(var a=this.cfg.drop;0", 8 | "repository": { 9 | "type": "git", 10 | "url": "https://github.com/tadeuszwojcik/angular-once.git" 11 | }, 12 | "license": "WTFPL", 13 | "keywords": [ 14 | "bindings", 15 | "binding", 16 | "directive", 17 | "angularjs", 18 | "angular", 19 | "watcher", 20 | "one time", 21 | "watch fighters" 22 | ], 23 | "_release": "0.1.8", 24 | "_resolution": { 25 | "type": "version", 26 | "tag": "v0.1.8", 27 | "commit": "0d3e1013c4f4dc714ce99902ce052d2f3c983bff" 28 | }, 29 | "_source": "git://github.com/tadeuszwojcik/angular-once.git", 30 | "_target": "~0.1.8", 31 | "_originalSource": "angular-once", 32 | "_direct": true 33 | } -------------------------------------------------------------------------------- /static/config.rb: -------------------------------------------------------------------------------- 1 | require 'compass/import-once/activate' 2 | # Require any additional compass plugins here. 3 | 4 | # Set this to the root of your project when deployed: 5 | http_path = "/" 6 | css_dir = "css" 7 | sass_dir = "scss" 8 | images_dir = "images" 9 | javascripts_dir = "js" 10 | 11 | # You can select your preferred output style here (can be overridden via the command line): 12 | # output_style = :expanded or :nested or :compact or :compressed 13 | 14 | # To enable relative paths to assets via compass helper functions. Uncomment: 15 | # relative_assets = true 16 | 17 | # To disable debugging comments that display the original location of your selectors. Uncomment: 18 | # line_comments = false 19 | 20 | 21 | # If you prefer the indented syntax, you might want to regenerate this 22 | # project again passing --syntax sass, or you can uncomment this: 23 | # preferred_syntax = :sass 24 | # and then run: 25 | # sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass 26 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/pad-iso10126.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | /** 8 | * ISO 10126 padding strategy. 9 | */ 10 | CryptoJS.pad.Iso10126 = { 11 | pad: function (data, blockSize) { 12 | // Shortcut 13 | var blockSizeBytes = blockSize * 4; 14 | 15 | // Count padding bytes 16 | var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; 17 | 18 | // Pad 19 | data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). 20 | concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); 21 | }, 22 | 23 | unpad: function (data) { 24 | // Get number of padding bytes from last byte 25 | var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; 26 | 27 | // Remove padding 28 | data.sigBytes -= nPaddingBytes; 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /static/components/k-player/config.rb: -------------------------------------------------------------------------------- 1 | require 'compass/import-once/activate' 2 | # Require any additional compass plugins here. 3 | 4 | # Set this to the root of your project when deployed: 5 | http_path = "/" 6 | css_dir = "css" 7 | sass_dir = "scss" 8 | images_dir = "images" 9 | javascripts_dir = "javascripts" 10 | 11 | # You can select your preferred output style here (can be overridden via the command line): 12 | # output_style = :expanded or :nested or :compact or :compressed 13 | 14 | # To enable relative paths to assets via compass helper functions. Uncomment: 15 | # relative_assets = true 16 | 17 | # To disable debugging comments that display the original location of your selectors. Uncomment: 18 | # line_comments = false 19 | 20 | 21 | # If you prefer the indented syntax, you might want to regenerate this 22 | # project again passing --syntax sass, or you can uncomment this: 23 | # preferred_syntax = :sass 24 | # and then run: 25 | # sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass 26 | -------------------------------------------------------------------------------- /setupsocket.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var video = require('./services/video'); 4 | 5 | module.exports = function (io) { 6 | setupDanmuIO(io); 7 | }; 8 | 9 | function setupDanmuIO(io) { 10 | var danmuIO = io.of('/danmu'); 11 | danmuIO.on('connection', function (socket) { 12 | var roomid, 13 | vid, 14 | title; 15 | 16 | socket.on('load', function (data) { 17 | vid = data.vid, 18 | title = data.title; 19 | roomid = vid; 20 | 21 | socket.join(roomid); 22 | 23 | video.findOrCreateOne(vid, title, function (err, video) { 24 | socket.emit('load', {danmus: video.danmus}); 25 | }); 26 | }); 27 | 28 | socket.on('say', function (data) { 29 | var content = data.content, 30 | videoTime = data.videoTime; 31 | 32 | if (roomid) { 33 | socket.broadcast.to(roomid).emit('newDanmu', {_id: new Date().getTime() ,content: content, videoTime: videoTime}); 34 | video.addDanmu(vid, videoTime, content); 35 | } 36 | }); 37 | }); 38 | } -------------------------------------------------------------------------------- /static/bower_components/jquery/src/attributes/support.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../var/support" 3 | ], function( support ) { 4 | 5 | (function() { 6 | var input = document.createElement( "input" ), 7 | select = document.createElement( "select" ), 8 | opt = select.appendChild( document.createElement( "option" ) ); 9 | 10 | input.type = "checkbox"; 11 | 12 | // Support: iOS<=5.1, Android<=4.2+ 13 | // Default value for a checkbox should be "on" 14 | support.checkOn = input.value !== ""; 15 | 16 | // Support: IE<=11+ 17 | // Must access selectedIndex to make default options select 18 | support.optSelected = opt.selected; 19 | 20 | // Support: Android<=2.3 21 | // Options inside disabled selects are incorrectly marked as disabled 22 | select.disabled = true; 23 | support.optDisabled = !opt.disabled; 24 | 25 | // Support: IE<=11+ 26 | // An input loses its value after becoming a radio 27 | input = document.createElement( "input" ); 28 | input.value = "t"; 29 | input.type = "radio"; 30 | support.radioValue = input.value === "t"; 31 | })(); 32 | 33 | return support; 34 | 35 | }); 36 | -------------------------------------------------------------------------------- /services/video.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var Video = require('../db/video'); 4 | 5 | exports.addVideo = function (vid, title, callback) { 6 | var video = new Video({ 7 | vid: vid, 8 | title: title 9 | }); 10 | 11 | video.save(callback); 12 | }; 13 | 14 | exports.addDanmu = function (vid, videoTime, content, callback) { 15 | Video.update({vid: vid}, { 16 | $push: { 17 | danmus: { 18 | content: content, 19 | videoTime: videoTime, 20 | sendTime: new Date() 21 | } 22 | } 23 | }, callback || function () {}); 24 | }; 25 | 26 | exports.findOneByVid = function (vid) { 27 | return Video.findOne({vid: vid}); 28 | }; 29 | 30 | exports.findOrCreateOne = function (vid, title, callback) { 31 | Video.findOne({vid: vid}, function (err, video) { 32 | if (!video) { 33 | video = new Video({ 34 | vid: vid, 35 | title: title 36 | }); 37 | 38 | video.save(callback); 39 | return; 40 | } 41 | 42 | if (typeof callback === 'function') { 43 | callback.apply(this, arguments); 44 | } 45 | }); 46 | }; -------------------------------------------------------------------------------- /static/bower_components/angular-loading-bar/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-loading-bar", 3 | "version": "0.6.0", 4 | "main": [ 5 | "build/loading-bar.js", 6 | "build/loading-bar.css" 7 | ], 8 | "ignore": [ 9 | "**/.*", 10 | "node_modules", 11 | "components", 12 | "test", 13 | "example" 14 | ], 15 | "devDependencies": { 16 | "angular": "^1.2.9", 17 | "angular-1.3": "angular#1.3", 18 | "angular-mocks": "^1.2.9", 19 | "angular-mocks-1.3": "angular-mocks#1.3", 20 | "angular-animate": "^1.2.9", 21 | "angular-animate-1.3": "angular-animate#1.3" 22 | }, 23 | "resolutions": { 24 | "angular": "1.2.23" 25 | }, 26 | "homepage": "https://github.com/chieffancypants/angular-loading-bar", 27 | "_release": "0.6.0", 28 | "_resolution": { 29 | "type": "version", 30 | "tag": "0.6.0", 31 | "commit": "9015398813555eafd122d4b5aa541cc02eceeacb" 32 | }, 33 | "_source": "git://github.com/chieffancypants/angular-loading-bar.git", 34 | "_target": "~0.6.0", 35 | "_originalSource": "angular-loading-bar", 36 | "_direct": true 37 | } -------------------------------------------------------------------------------- /static/scss/wallpaper.scss: -------------------------------------------------------------------------------- 1 | @import "compass/css3"; 2 | 3 | #wallpaper { 4 | position: absolute; 5 | left: 0; 6 | top: 0; 7 | width: 100%; 8 | height: 100%; 9 | background-color: #eee; 10 | 11 | .wallpaper-list { 12 | position: absolute; 13 | left: 0; 14 | right: 0; 15 | width: 100%; 16 | height: 100%; 17 | overflow: hidden; 18 | 19 | ul { 20 | overflow: hidden; 21 | padding: 1rem; 22 | 23 | li { 24 | position: relative; 25 | float: left; 26 | width: 33.33333%; 27 | height: 16rem; 28 | 29 | .thumb { 30 | position: absolute; 31 | left: 1rem; 32 | right: 1rem; 33 | top: 1rem; 34 | bottom: 1rem; 35 | margin: auto; 36 | border: .6rem solid white; 37 | @include box-shadow(0 .1rem .4rem rgba(0,0,0,.4)); 38 | background-clip: content-box; 39 | background-repeat: no-repeat; 40 | background-position: center center; 41 | background-size: cover; 42 | cursor: pointer; 43 | } 44 | } 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /static/bower_components/jquery/src/exports/amd.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | // Register as a named AMD module, since jQuery can be concatenated with other 6 | // files that may use define, but not via a proper concatenation script that 7 | // understands anonymous AMD modules. A named AMD is safest and most robust 8 | // way to register. Lowercase jquery is used because AMD module names are 9 | // derived from file names, and jQuery is normally delivered in a lowercase 10 | // file name. Do this after creating the global so that if an AMD module wants 11 | // to call noConflict to hide this version of jQuery, it will work. 12 | 13 | // Note that for maximum portability, libraries that are not jQuery should 14 | // declare themselves as anonymous modules, and avoid setting a global if an 15 | // AMD loader is present. jQuery is a special case. For more information, see 16 | // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 17 | 18 | if ( typeof define === "function" && define.amd ) { 19 | define( "jquery", [], function() { 20 | return jQuery; 21 | }); 22 | } 23 | 24 | }); 25 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/core/parseHTML.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core", 3 | "./var/rsingleTag", 4 | "../manipulation" // buildFragment 5 | ], function( jQuery, rsingleTag ) { 6 | 7 | // data: string of html 8 | // context (optional): If specified, the fragment will be created in this context, defaults to document 9 | // keepScripts (optional): If true, will include scripts passed in the html string 10 | jQuery.parseHTML = function( data, context, keepScripts ) { 11 | if ( !data || typeof data !== "string" ) { 12 | return null; 13 | } 14 | if ( typeof context === "boolean" ) { 15 | keepScripts = context; 16 | context = false; 17 | } 18 | context = context || document; 19 | 20 | var parsed = rsingleTag.exec( data ), 21 | scripts = !keepScripts && []; 22 | 23 | // Single tag 24 | if ( parsed ) { 25 | return [ context.createElement( parsed[1] ) ]; 26 | } 27 | 28 | parsed = jQuery.buildFragment( [ data ], context, scripts ); 29 | 30 | if ( scripts && scripts.length ) { 31 | jQuery( scripts ).remove(); 32 | } 33 | 34 | return jQuery.merge( [], parsed.childNodes ); 35 | }; 36 | 37 | return jQuery.parseHTML; 38 | 39 | }); 40 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/manipulation/support.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../var/support" 3 | ], function( support ) { 4 | 5 | (function() { 6 | var fragment = document.createDocumentFragment(), 7 | div = fragment.appendChild( document.createElement( "div" ) ), 8 | input = document.createElement( "input" ); 9 | 10 | // Support: Safari<=5.1 11 | // Check state lost if the name is set (#11217) 12 | // Support: Windows Web Apps (WWA) 13 | // `name` and `type` must use .setAttribute for WWA (#14901) 14 | input.setAttribute( "type", "radio" ); 15 | input.setAttribute( "checked", "checked" ); 16 | input.setAttribute( "name", "t" ); 17 | 18 | div.appendChild( input ); 19 | 20 | // Support: Safari<=5.1, Android<4.2 21 | // Older WebKit doesn't clone checked state correctly in fragments 22 | support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 23 | 24 | // Support: IE<=11+ 25 | // Make sure textarea (and checkbox) defaultValue is properly cloned 26 | div.innerHTML = ""; 27 | support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 28 | })(); 29 | 30 | return support; 31 | 32 | }); 33 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/pad-ansix923.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | /** 8 | * ANSI X.923 padding strategy. 9 | */ 10 | CryptoJS.pad.AnsiX923 = { 11 | pad: function (data, blockSize) { 12 | // Shortcuts 13 | var dataSigBytes = data.sigBytes; 14 | var blockSizeBytes = blockSize * 4; 15 | 16 | // Count padding bytes 17 | var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; 18 | 19 | // Compute last byte position 20 | var lastBytePos = dataSigBytes + nPaddingBytes - 1; 21 | 22 | // Pad 23 | data.clamp(); 24 | data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); 25 | data.sigBytes += nPaddingBytes; 26 | }, 27 | 28 | unpad: function (data) { 29 | // Get number of padding bytes from last byte 30 | var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; 31 | 32 | // Remove padding 33 | data.sigBytes -= nPaddingBytes; 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/sha1-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | (function(){var k=CryptoJS,b=k.lib,m=b.WordArray,l=b.Hasher,d=[],b=k.algo.SHA1=l.extend({_doReset:function(){this._hash=new m.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(n,p){for(var a=this._hash.words,e=a[0],f=a[1],h=a[2],j=a[3],b=a[4],c=0;80>c;c++){if(16>c)d[c]=n[p+c]|0;else{var g=d[c-3]^d[c-8]^d[c-14]^d[c-16];d[c]=g<<1|g>>>31}g=(e<<5|e>>>27)+b+d[c];g=20>c?g+((f&h|~f&j)+1518500249):40>c?g+((f^h^j)+1859775393):60>c?g+((f&h|f&j|h&j)-1894007588):g+((f^h^ 8 | j)-899497514);b=j;j=h;h=f<<30|f>>>2;f=e;e=g}a[0]=a[0]+e|0;a[1]=a[1]+f|0;a[2]=a[2]+h|0;a[3]=a[3]+j|0;a[4]=a[4]+b|0},_doFinalize:function(){var b=this._data,d=b.words,a=8*this._nDataBytes,e=8*b.sigBytes;d[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=Math.floor(a/4294967296);d[(e+64>>>9<<4)+15]=a;b.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var b=l.clone.call(this);b._hash=this._hash.clone();return b}});k.SHA1=l._createHelper(b);k.HmacSHA1=l._createHmacHelper(b)})(); 9 | -------------------------------------------------------------------------------- /static/bower_components/angular-loading-bar/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2014 Wes Cruver 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /static/js/wallpaper.js: -------------------------------------------------------------------------------- 1 | ;(function (angular) { 'use strict'; 2 | angular.module('iro.wallpaper', ['iro.services.wallpaper', 'iro.services.navbar', 'kScroll']) 3 | .controller('WallpaperCtrl', ['$scope', 'Wallpaper', 'navbar', '$window', '$document', 4 | function ($scope, Wallpaper, navbar, $window, $document) { 5 | $scope.wallpapers = Wallpaper.query(); 6 | 7 | $scope.liHeight = '16rem'; 8 | $window.addEventListener('resize', applyRewidth); 9 | rewidth.call($window); 10 | 11 | navbar.customBackgroundColor = 'rgba(51,51,51,1)'; 12 | $scope.$on('$destroy', function () { 13 | $window.removeEventListener('resize', applyRewidth); 14 | navbar.customBackgroundColor = null; 15 | }); 16 | 17 | $scope.global.title = '壁纸'; 18 | 19 | function applyRewidth() { 20 | $scope.$apply(rewidth); 21 | } 22 | 23 | function rewidth() { 24 | var rootFontSize = parseFloat($document.find('html').css('font-size')); 25 | $scope.liWidth = 100 / Math.round($window.innerWidth / rootFontSize / (parseFloat($scope.liHeight) * 16 / 9)) + '%'; 26 | } 27 | }]); 28 | })(angular); -------------------------------------------------------------------------------- /static/bower_components/angular-ui-router/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2014 The AngularUI Team, Karsten Sperling 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /static/bower_components/angular-ui-router/src/stateFilters.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @ngdoc filter 3 | * @name ui.router.state.filter:isState 4 | * 5 | * @requires ui.router.state.$state 6 | * 7 | * @description 8 | * Translates to {@link ui.router.state.$state#methods_is $state.is("stateName")}. 9 | */ 10 | $IsStateFilter.$inject = ['$state']; 11 | function $IsStateFilter($state) { 12 | var isFilter = function (state) { 13 | return $state.is(state); 14 | }; 15 | isFilter.$stateful = true; 16 | return isFilter; 17 | } 18 | 19 | /** 20 | * @ngdoc filter 21 | * @name ui.router.state.filter:includedByState 22 | * 23 | * @requires ui.router.state.$state 24 | * 25 | * @description 26 | * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}. 27 | */ 28 | $IncludedByStateFilter.$inject = ['$state']; 29 | function $IncludedByStateFilter($state) { 30 | var includesFilter = function (state) { 31 | return $state.includes(state); 32 | }; 33 | includesFilter.$stateful = true; 34 | return includesFilter; 35 | } 36 | 37 | angular.module('ui.router.state') 38 | .filter('isState', $IsStateFilter) 39 | .filter('includedByState', $IncludedByStateFilter); 40 | -------------------------------------------------------------------------------- /static/bower_components/jquery/MIT-LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2014 jQuery Foundation and other contributors 2 | http://jquery.com/ 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining 5 | a copy of this software and associated documentation files (the 6 | "Software"), to deal in the Software without restriction, including 7 | without limitation the rights to use, copy, modify, merge, publish, 8 | distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so, subject to 10 | the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 19 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 20 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /static/bower_components/velocity/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "velocity", 3 | "version": "1.2.1", 4 | "homepage": "http://velocityjs.org", 5 | "authors": [ 6 | { 7 | "name": "Julian Shapiro", 8 | "homepage": "http://julian.com/" 9 | } 10 | ], 11 | "description": "Accelerated JavaScript animation.", 12 | "main": [ 13 | "./velocity.js", 14 | "./velocity.ui.js" 15 | ], 16 | "keywords": [ 17 | "animation", 18 | "jquery", 19 | "animate", 20 | "lightweight", 21 | "smooth", 22 | "ui", 23 | "velocity.js", 24 | "velocityjs", 25 | "javascript" 26 | ], 27 | "license": "MIT", 28 | "ignore": [ 29 | "*.json", 30 | "!/bower.json", 31 | "LICENSE", 32 | "*.md" 33 | ], 34 | "dependencies": { 35 | "jquery": "*" 36 | }, 37 | "repository": { 38 | "type": "git", 39 | "url": "http://github.com/julianshapiro/velocity.git" 40 | }, 41 | "_release": "1.2.1", 42 | "_resolution": { 43 | "type": "version", 44 | "tag": "1.2.1", 45 | "commit": "8bbefc92d5314efccefd2d5ac8c3cadb4db4f784" 46 | }, 47 | "_source": "git://github.com/julianshapiro/velocity.git", 48 | "_target": "~1.2.1", 49 | "_originalSource": "velocity", 50 | "_direct": true 51 | } -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/mode-ofb.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | /** 8 | * Output Feedback block mode. 9 | */ 10 | CryptoJS.mode.OFB = (function () { 11 | var OFB = CryptoJS.lib.BlockCipherMode.extend(); 12 | 13 | var Encryptor = OFB.Encryptor = OFB.extend({ 14 | processBlock: function (words, offset) { 15 | // Shortcuts 16 | var cipher = this._cipher 17 | var blockSize = cipher.blockSize; 18 | var iv = this._iv; 19 | var keystream = this._keystream; 20 | 21 | // Generate keystream 22 | if (iv) { 23 | keystream = this._keystream = iv.slice(0); 24 | 25 | // Remove IV for subsequent blocks 26 | this._iv = undefined; 27 | } 28 | cipher.encryptBlock(keystream, 0); 29 | 30 | // Encrypt 31 | for (var i = 0; i < blockSize; i++) { 32 | words[offset + i] ^= keystream[i]; 33 | } 34 | } 35 | }); 36 | 37 | OFB.Decryptor = Encryptor; 38 | 39 | return OFB; 40 | }()); 41 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/copyright.txt: -------------------------------------------------------------------------------- 1 | This is as-is copy of https://code.google.com/p/crypto-js/wiki/License. This github repo does not have anything additional to whatever original Google Code copyright notice says. 2 | 3 | Copyright (c) 2009-2013 Jeff Mott 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /static/bower_components/jquery/src/event/alias.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core", 3 | "../event" 4 | ], function( jQuery ) { 5 | 6 | jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + 7 | "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 8 | "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { 9 | 10 | // Handle event binding 11 | jQuery.fn[ name ] = function( data, fn ) { 12 | return arguments.length > 0 ? 13 | this.on( name, null, data, fn ) : 14 | this.trigger( name ); 15 | }; 16 | }); 17 | 18 | jQuery.fn.extend({ 19 | hover: function( fnOver, fnOut ) { 20 | return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); 21 | }, 22 | 23 | bind: function( types, data, fn ) { 24 | return this.on( types, null, data, fn ); 25 | }, 26 | unbind: function( types, fn ) { 27 | return this.off( types, null, fn ); 28 | }, 29 | 30 | delegate: function( selector, types, data, fn ) { 31 | return this.on( types, selector, data, fn ); 32 | }, 33 | undelegate: function( selector, types, fn ) { 34 | // ( namespace ) or ( selector, types [, fn] ) 35 | return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); 36 | } 37 | }); 38 | 39 | }); 40 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/mode-ctr.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | /** 8 | * Counter block mode. 9 | */ 10 | CryptoJS.mode.CTR = (function () { 11 | var CTR = CryptoJS.lib.BlockCipherMode.extend(); 12 | 13 | var Encryptor = CTR.Encryptor = CTR.extend({ 14 | processBlock: function (words, offset) { 15 | // Shortcuts 16 | var cipher = this._cipher 17 | var blockSize = cipher.blockSize; 18 | var iv = this._iv; 19 | var counter = this._counter; 20 | 21 | // Generate keystream 22 | if (iv) { 23 | counter = this._counter = iv.slice(0); 24 | 25 | // Remove IV for subsequent blocks 26 | this._iv = undefined; 27 | } 28 | var keystream = counter.slice(0); 29 | cipher.encryptBlock(keystream, 0); 30 | 31 | // Increment counter 32 | counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 33 | 34 | // Encrypt 35 | for (var i = 0; i < blockSize; i++) { 36 | words[offset + i] ^= keystream[i]; 37 | } 38 | } 39 | }); 40 | 41 | CTR.Decryptor = Encryptor; 42 | 43 | return CTR; 44 | }()); 45 | -------------------------------------------------------------------------------- /static/css/home.css: -------------------------------------------------------------------------------- 1 | #home{position:absolute;width:100%;height:100%}#home .menu-list{background-color:rgba(0,0,0,0.2);overflow:hidden;position:absolute;bottom:2%;left:2%;right:2%;margin:auto;width:26rem}#home .menu-list .k-slider-wrapper{height:7rem}#home .menu-list .k-slider-wrapper a{display:inline-block;width:6.5rem;height:7rem;color:white;text-align:center;position:relative;cursor:pointer}#home .menu-list .k-slider-wrapper a.active{color:#999}#home .menu-list .k-slider-wrapper a .icon,#home .menu-list .k-slider-wrapper a .text{position:absolute;left:0;right:0}#home .menu-list .k-slider-wrapper a .icon{top:15%;font-size:3.5rem}#home .menu-list .k-slider-wrapper a .text{bottom:15%;font-size:1rem}#home .menu-list .slider-nav{height:16px;text-align:center}#home .menu-list .slider-nav .circle{display:inline-block;width:6px;height:6px;border-radius:100%;background-color:rgba(255,255,255,0.5);margin:0 3px;-moz-transform:translateZ(0);-ms-transform:translateZ(0);-webkit-transform:translateZ(0);transform:translateZ(0)}#home .menu-list .slider-nav .circle.active{background-color:white}#home .datetime-box{display:block;cursor:default;position:absolute;background-color:rgba(0,0,0,0.2);right:2%;top:2%;text-align:right;padding:1rem}#home .datetime-box .date,#home .datetime-box .time,#home .datetime-box .day{color:white}#home .datetime-box .time{font-size:5rem;line-height:0.9em}#home .datetime-box .date,#home .datetime-box .day{font-size:1.2rem;line-height:1.2em} 2 | -------------------------------------------------------------------------------- /static/bower_components/angular-loading-bar/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-loading-bar", 3 | "version": "0.6.0", 4 | "description": "An automatic loading bar for AngularJS", 5 | "main": "src/loading-bar.js", 6 | "directories": { 7 | "example": "example", 8 | "test": "test" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git://github.com/chieffancypants/angular-loading-bar.git" 13 | }, 14 | "keywords": [ 15 | "angular", 16 | "angularjs", 17 | "loading", 18 | "loadingbar", 19 | "progress", 20 | "progressbar" 21 | ], 22 | "author": "Wes Cruver", 23 | "license": "MIT", 24 | "bugs": { 25 | "url": "https://github.com/chieffancypants/angular-loading-bar/issues" 26 | }, 27 | "homepage": "https://chieffancypants.github.io/angular-loading-bar", 28 | "devDependencies": { 29 | "karma-script-launcher": "~0.1.0", 30 | "karma-chrome-launcher": "~0.1.0", 31 | "karma-firefox-launcher": "~0.1.0", 32 | "karma-html2js-preprocessor": "~0.1.0", 33 | "karma-jasmine": "~0.1.3", 34 | "karma-coffee-preprocessor": "~0.1.0", 35 | "karma-phantomjs-launcher": "~0.1.0", 36 | "karma": "~0.10.2", 37 | "karma-coverage": "~0.1.0", 38 | "grunt": "~0.4.1", 39 | "grunt-contrib-jshint": "~0.6.4", 40 | "grunt-contrib-uglify": "~0.2.4", 41 | "grunt-contrib-cssmin": "~0.6.1", 42 | "grunt-karma": "~0.6.2", 43 | "grunt-contrib-concat": "~0.3.0" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/sha256-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | (function(k){for(var g=CryptoJS,h=g.lib,v=h.WordArray,j=h.Hasher,h=g.algo,s=[],t=[],u=function(q){return 4294967296*(q-(q|0))|0},l=2,b=0;64>b;){var d;a:{d=l;for(var w=k.sqrt(d),r=2;r<=w;r++)if(!(d%r)){d=!1;break a}d=!0}d&&(8>b&&(s[b]=u(k.pow(l,0.5))),t[b]=u(k.pow(l,1/3)),b++);l++}var n=[],h=h.SHA256=j.extend({_doReset:function(){this._hash=new v.init(s.slice(0))},_doProcessBlock:function(q,h){for(var a=this._hash.words,c=a[0],d=a[1],b=a[2],k=a[3],f=a[4],g=a[5],j=a[6],l=a[7],e=0;64>e;e++){if(16>e)n[e]= 8 | q[h+e]|0;else{var m=n[e-15],p=n[e-2];n[e]=((m<<25|m>>>7)^(m<<14|m>>>18)^m>>>3)+n[e-7]+((p<<15|p>>>17)^(p<<13|p>>>19)^p>>>10)+n[e-16]}m=l+((f<<26|f>>>6)^(f<<21|f>>>11)^(f<<7|f>>>25))+(f&g^~f&j)+t[e]+n[e];p=((c<<30|c>>>2)^(c<<19|c>>>13)^(c<<10|c>>>22))+(c&d^c&b^d&b);l=j;j=g;g=f;f=k+m|0;k=b;b=d;d=c;c=m+p|0}a[0]=a[0]+c|0;a[1]=a[1]+d|0;a[2]=a[2]+b|0;a[3]=a[3]+k|0;a[4]=a[4]+f|0;a[5]=a[5]+g|0;a[6]=a[6]+j|0;a[7]=a[7]+l|0},_doFinalize:function(){var d=this._data,b=d.words,a=8*this._nDataBytes,c=8*d.sigBytes; 9 | b[c>>>5]|=128<<24-c%32;b[(c+64>>>9<<4)+14]=k.floor(a/4294967296);b[(c+64>>>9<<4)+15]=a;d.sigBytes=4*b.length;this._process();return this._hash},clone:function(){var b=j.clone.call(this);b._hash=this._hash.clone();return b}});g.SHA256=j._createHelper(h);g.HmacSHA256=j._createHmacHelper(h)})(Math); 10 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/core/access.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | // Multifunctional method to get and set values of a collection 6 | // The value/s can optionally be executed if it's a function 7 | var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 8 | var i = 0, 9 | len = elems.length, 10 | bulk = key == null; 11 | 12 | // Sets many values 13 | if ( jQuery.type( key ) === "object" ) { 14 | chainable = true; 15 | for ( i in key ) { 16 | jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); 17 | } 18 | 19 | // Sets one value 20 | } else if ( value !== undefined ) { 21 | chainable = true; 22 | 23 | if ( !jQuery.isFunction( value ) ) { 24 | raw = true; 25 | } 26 | 27 | if ( bulk ) { 28 | // Bulk operations run against the entire set 29 | if ( raw ) { 30 | fn.call( elems, value ); 31 | fn = null; 32 | 33 | // ...except when executing function values 34 | } else { 35 | bulk = fn; 36 | fn = function( elem, key, value ) { 37 | return bulk.call( jQuery( elem ), value ); 38 | }; 39 | } 40 | } 41 | 42 | if ( fn ) { 43 | for ( ; i < len; i++ ) { 44 | fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); 45 | } 46 | } 47 | } 48 | 49 | return chainable ? 50 | elems : 51 | 52 | // Gets 53 | bulk ? 54 | fn.call( elems ) : 55 | len ? fn( elems[0], key ) : emptyGet; 56 | }; 57 | 58 | return access; 59 | 60 | }); 61 | -------------------------------------------------------------------------------- /static/components/k-player/k-player.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 打开文件 4 |
5 |
6 |
7 | 8 | 9 |
10 | 11 |
12 |
13 | 14 | {{player.currentTimeDisplay}} / {{player.durationDisplay}} 15 |
16 | 发送 17 | 18 | 19 |
20 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/ajax/script.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core", 3 | "../ajax" 4 | ], function( jQuery ) { 5 | 6 | // Install script dataType 7 | jQuery.ajaxSetup({ 8 | accepts: { 9 | script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" 10 | }, 11 | contents: { 12 | script: /(?:java|ecma)script/ 13 | }, 14 | converters: { 15 | "text script": function( text ) { 16 | jQuery.globalEval( text ); 17 | return text; 18 | } 19 | } 20 | }); 21 | 22 | // Handle cache's special case and crossDomain 23 | jQuery.ajaxPrefilter( "script", function( s ) { 24 | if ( s.cache === undefined ) { 25 | s.cache = false; 26 | } 27 | if ( s.crossDomain ) { 28 | s.type = "GET"; 29 | } 30 | }); 31 | 32 | // Bind script tag hack transport 33 | jQuery.ajaxTransport( "script", function( s ) { 34 | // This transport only deals with cross domain requests 35 | if ( s.crossDomain ) { 36 | var script, callback; 37 | return { 38 | send: function( _, complete ) { 39 | script = jQuery(" 21 | ``` 22 | 23 | Note that this package is not in CommonJS format, so doing `require('angular')` will return `undefined`. 24 | If you're using [Browserify](https://github.com/substack/node-browserify), you can use 25 | [exposify](https://github.com/thlorenz/exposify) to have `require('angular')` return the `angular` 26 | global. 27 | 28 | ### bower 29 | 30 | ```shell 31 | bower install angular 32 | ``` 33 | 34 | Then add a ` 38 | ``` 39 | 40 | ## Documentation 41 | 42 | Documentation is available on the 43 | [AngularJS docs site](http://docs.angularjs.org/). 44 | 45 | ## License 46 | 47 | The MIT License 48 | 49 | Copyright (c) 2010-2012 Google, Inc. http://angularjs.org 50 | 51 | Permission is hereby granted, free of charge, to any person obtaining a copy 52 | of this software and associated documentation files (the "Software"), to deal 53 | in the Software without restriction, including without limitation the rights 54 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 55 | copies of the Software, and to permit persons to whom the Software is 56 | furnished to do so, subject to the following conditions: 57 | 58 | The above copyright notice and this permission notice shall be included in 59 | all copies or substantial portions of the Software. 60 | 61 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 62 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 63 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 64 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 65 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 66 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 67 | THE SOFTWARE. 68 | -------------------------------------------------------------------------------- /static/bower_components/angular-ui-router/src/view.js: -------------------------------------------------------------------------------- 1 | 2 | $ViewProvider.$inject = []; 3 | function $ViewProvider() { 4 | 5 | this.$get = $get; 6 | /** 7 | * @ngdoc object 8 | * @name ui.router.state.$view 9 | * 10 | * @requires ui.router.util.$templateFactory 11 | * @requires $rootScope 12 | * 13 | * @description 14 | * 15 | */ 16 | $get.$inject = ['$rootScope', '$templateFactory']; 17 | function $get( $rootScope, $templateFactory) { 18 | return { 19 | // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... }) 20 | /** 21 | * @ngdoc function 22 | * @name ui.router.state.$view#load 23 | * @methodOf ui.router.state.$view 24 | * 25 | * @description 26 | * 27 | * @param {string} name name 28 | * @param {object} options option object. 29 | */ 30 | load: function load(name, options) { 31 | var result, defaults = { 32 | template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {} 33 | }; 34 | options = extend(defaults, options); 35 | 36 | if (options.view) { 37 | result = $templateFactory.fromConfig(options.view, options.params, options.locals); 38 | } 39 | if (result && options.notify) { 40 | /** 41 | * @ngdoc event 42 | * @name ui.router.state.$state#$viewContentLoading 43 | * @eventOf ui.router.state.$view 44 | * @eventType broadcast on root scope 45 | * @description 46 | * 47 | * Fired once the view **begins loading**, *before* the DOM is rendered. 48 | * 49 | * @param {Object} event Event object. 50 | * @param {Object} viewConfig The view config properties (template, controller, etc). 51 | * 52 | * @example 53 | * 54 | *
55 |          * $scope.$on('$viewContentLoading',
56 |          * function(event, viewConfig){
57 |          *     // Access to all the view config properties.
58 |          *     // and one special property 'targetView'
59 |          *     // viewConfig.targetView
60 |          * });
61 |          * 
62 | */ 63 | $rootScope.$broadcast('$viewContentLoading', options); 64 | } 65 | return result; 66 | } 67 | }; 68 | } 69 | } 70 | 71 | angular.module('ui.router.state').provider('$view', $ViewProvider); 72 | -------------------------------------------------------------------------------- /static/bower_components/angular-loading-bar/build/loading-bar.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * angular-loading-bar v0.6.0 3 | * https://chieffancypants.github.io/angular-loading-bar 4 | * Copyright (c) 2014 Wes Cruver 5 | * License: MIT 6 | */ 7 | 8 | #loading-bar,#loading-bar-spinner{pointer-events:none;-webkit-pointer-events:none;-webkit-transition:350ms linear all;-moz-transition:350ms linear all;-o-transition:350ms linear all;transition:350ms linear all}#loading-bar.ng-enter,#loading-bar.ng-leave.ng-leave-active,#loading-bar-spinner.ng-enter,#loading-bar-spinner.ng-leave.ng-leave-active{opacity:0}#loading-bar.ng-enter.ng-enter-active,#loading-bar.ng-leave,#loading-bar-spinner.ng-enter.ng-enter-active,#loading-bar-spinner.ng-leave{opacity:1}#loading-bar .bar{-webkit-transition:width 350ms;-moz-transition:width 350ms;-o-transition:width 350ms;transition:width 350ms;background:#29d;position:fixed;z-index:10002;top:0;left:0;width:100%;height:2px;border-bottom-right-radius:1px;border-top-right-radius:1px}#loading-bar .peg{position:absolute;width:70px;right:0;top:0;height:2px;opacity:.45;-moz-box-shadow:#29d 1px 0 6px 1px;-ms-box-shadow:#29d 1px 0 6px 1px;-webkit-box-shadow:#29d 1px 0 6px 1px;box-shadow:#29d 1px 0 6px 1px;-moz-border-radius:100%;-webkit-border-radius:100%;border-radius:100%}#loading-bar-spinner{display:block;position:fixed;z-index:10002;top:10px;left:10px}#loading-bar-spinner .spinner-icon{width:14px;height:14px;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:10px;-webkit-animation:loading-bar-spinner 400ms linear infinite;-moz-animation:loading-bar-spinner 400ms linear infinite;-ms-animation:loading-bar-spinner 400ms linear infinite;-o-animation:loading-bar-spinner 400ms linear infinite;animation:loading-bar-spinner 400ms linear infinite}@-webkit-keyframes loading-bar-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes loading-bar-spinner{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes loading-bar-spinner{0%{-o-transform:rotate(0deg);transform:rotate(0deg)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes loading-bar-spinner{0%{-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-bar-spinner{0%{transform:rotate(0deg);transform:rotate(0deg)}100%{transform:rotate(360deg);transform:rotate(360deg)}} -------------------------------------------------------------------------------- /static/scss/home.scss: -------------------------------------------------------------------------------- 1 | @import "compass/css3"; 2 | 3 | #home { 4 | position: absolute; 5 | width: 100%; 6 | height: 100%; 7 | 8 | $padding: 2%; 9 | $menu-list-inner-width: 26rem; 10 | $menu-list-inner-height: 7rem; 11 | 12 | 13 | .menu-list { 14 | background-color: rgba(0, 0, 0, 0.2); 15 | overflow: hidden; 16 | position: absolute; 17 | bottom: $padding; 18 | left: $padding; 19 | right: $padding; 20 | margin: auto; 21 | width: $menu-list-inner-width; 22 | 23 | .k-slider-wrapper { 24 | height: $menu-list-inner-height; 25 | 26 | a { 27 | display: inline-block; 28 | width: $menu-list-inner-width / 4; 29 | height: $menu-list-inner-height; 30 | color: white; 31 | text-align: center; 32 | position: relative; 33 | cursor: pointer; 34 | // @include transition(all .2s); 35 | // @include transform(translateZ(0)scale(1)); 36 | 37 | &.active { 38 | // @include transform(translateZ(0)scale(.95)); 39 | color: #999; 40 | } 41 | 42 | .icon, 43 | .text { 44 | position: absolute; 45 | left: 0; 46 | right: 0; 47 | } 48 | 49 | .icon { 50 | top: 15%; 51 | font-size: 3.5rem; 52 | } 53 | 54 | .text { 55 | bottom: 15%; 56 | font-size: 1rem; 57 | } 58 | } 59 | } 60 | 61 | .slider-nav { 62 | height: 16px; 63 | text-align: center; 64 | 65 | .circle { 66 | display: inline-block; 67 | width: 6px; 68 | height: 6px; 69 | border-radius: 100%; 70 | background-color: rgba(255,255,255,.5); 71 | margin: 0 3px; 72 | @include transform(translateZ(0)); 73 | 74 | &.active { 75 | background-color: white; 76 | } 77 | } 78 | } 79 | } 80 | 81 | .datetime-box { 82 | display: block; 83 | cursor: default; 84 | position: absolute; 85 | background-color: rgba(0, 0, 0, .2); 86 | right: $padding; 87 | top: $padding; 88 | text-align: right; 89 | padding: 1rem; 90 | 91 | .date, 92 | .time, 93 | .day { 94 | color: white; 95 | } 96 | 97 | .time { 98 | font-size: 5rem; 99 | line-height: 0.9em; 100 | } 101 | 102 | .date, 103 | .day { 104 | font-size: 1.2rem; 105 | line-height: 1.2em; 106 | } 107 | } 108 | } -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/mode-ctr-gladman.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | /** @preserve 8 | * Counter block mode compatible with Dr Brian Gladman fileenc.c 9 | * derived from CryptoJS.mode.CTR 10 | * Jan Hruby jhruby.web@gmail.com 11 | */ 12 | CryptoJS.mode.CTRGladman = (function () { 13 | var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); 14 | 15 | function incWord(word) 16 | { 17 | if (((word >> 24) & 0xff) === 0xff) { //overflow 18 | var b1 = (word >> 16)&0xff; 19 | var b2 = (word >> 8)&0xff; 20 | var b3 = word & 0xff; 21 | 22 | if (b1 === 0xff) // overflow b1 23 | { 24 | b1 = 0; 25 | if (b2 === 0xff) 26 | { 27 | b2 = 0; 28 | if (b3 === 0xff) 29 | { 30 | b3 = 0; 31 | } 32 | else 33 | { 34 | ++b3; 35 | } 36 | } 37 | else 38 | { 39 | ++b2; 40 | } 41 | } 42 | else 43 | { 44 | ++b1; 45 | } 46 | 47 | word = 0; 48 | word += (b1 << 16); 49 | word += (b2 << 8); 50 | word += b3; 51 | } 52 | else 53 | { 54 | word += (0x01 << 24); 55 | } 56 | return word; 57 | } 58 | 59 | function incCounter(counter) 60 | { 61 | if ((counter[0] = incWord(counter[0])) === 0) 62 | { 63 | // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 64 | counter[1] = incWord(counter[1]); 65 | } 66 | return counter; 67 | } 68 | 69 | var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ 70 | processBlock: function (words, offset) { 71 | // Shortcuts 72 | var cipher = this._cipher 73 | var blockSize = cipher.blockSize; 74 | var iv = this._iv; 75 | var counter = this._counter; 76 | 77 | // Generate keystream 78 | if (iv) { 79 | counter = this._counter = iv.slice(0); 80 | 81 | // Remove IV for subsequent blocks 82 | this._iv = undefined; 83 | } 84 | 85 | incCounter(counter); 86 | 87 | var keystream = counter.slice(0); 88 | cipher.encryptBlock(keystream, 0); 89 | 90 | // Encrypt 91 | for (var i = 0; i < blockSize; i++) { 92 | words[offset + i] ^= keystream[i]; 93 | } 94 | } 95 | }); 96 | 97 | CTRGladman.Decryptor = Encryptor; 98 | 99 | return CTRGladman; 100 | }()); 101 | 102 | 103 | -------------------------------------------------------------------------------- /static/bower_components/angular-animate/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular-animate 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngAnimate). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular-animate 15 | ``` 16 | 17 | Add a ` 21 | ``` 22 | 23 | Then add `ngAnimate` as a dependency for your app: 24 | 25 | ```javascript 26 | angular.module('myApp', ['ngAnimate']); 27 | ``` 28 | 29 | Note that this package is not in CommonJS format, so doing `require('angular-animate')` will 30 | return `undefined`. 31 | 32 | ### bower 33 | 34 | ```shell 35 | bower install angular-animate 36 | ``` 37 | 38 | Then add a ` 42 | ``` 43 | 44 | Then add `ngAnimate` as a dependency for your app: 45 | 46 | ```javascript 47 | angular.module('myApp', ['ngAnimate']); 48 | ``` 49 | 50 | ## Documentation 51 | 52 | Documentation is available on the 53 | [AngularJS docs site](http://docs.angularjs.org/api/ngAnimate). 54 | 55 | ## License 56 | 57 | The MIT License 58 | 59 | Copyright (c) 2010-2012 Google, Inc. http://angularjs.org 60 | 61 | Permission is hereby granted, free of charge, to any person obtaining a copy 62 | of this software and associated documentation files (the "Software"), to deal 63 | in the Software without restriction, including without limitation the rights 64 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 65 | copies of the Software, and to permit persons to whom the Software is 66 | furnished to do so, subject to the following conditions: 67 | 68 | The above copyright notice and this permission notice shall be included in 69 | all copies or substantial portions of the Software. 70 | 71 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 72 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 73 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 74 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 75 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 76 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 77 | THE SOFTWARE. 78 | -------------------------------------------------------------------------------- /static/bower_components/angular-resource/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular-resource 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngResource). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular-resource 15 | ``` 16 | 17 | Add a ` 21 | ``` 22 | 23 | Then add `ngResource` as a dependency for your app: 24 | 25 | ```javascript 26 | angular.module('myApp', ['ngResource']); 27 | ``` 28 | 29 | Note that this package is not in CommonJS format, so doing `require('angular-resource')` will 30 | return `undefined`. 31 | 32 | ### bower 33 | 34 | ```shell 35 | bower install angular-resource 36 | ``` 37 | 38 | Add a ` 42 | ``` 43 | 44 | Then add `ngResource` as a dependency for your app: 45 | 46 | ```javascript 47 | angular.module('myApp', ['ngResource']); 48 | ``` 49 | 50 | ## Documentation 51 | 52 | Documentation is available on the 53 | [AngularJS docs site](http://docs.angularjs.org/api/ngResource). 54 | 55 | ## License 56 | 57 | The MIT License 58 | 59 | Copyright (c) 2010-2012 Google, Inc. http://angularjs.org 60 | 61 | Permission is hereby granted, free of charge, to any person obtaining a copy 62 | of this software and associated documentation files (the "Software"), to deal 63 | in the Software without restriction, including without limitation the rights 64 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 65 | copies of the Software, and to permit persons to whom the Software is 66 | furnished to do so, subject to the following conditions: 67 | 68 | The above copyright notice and this permission notice shall be included in 69 | all copies or substantial portions of the Software. 70 | 71 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 72 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 73 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 74 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 75 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 76 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 77 | THE SOFTWARE. 78 | -------------------------------------------------------------------------------- /static/bower_components/angular-sanitize/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular-sanitize 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngSanitize). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular-sanitize 15 | ``` 16 | 17 | Add a ` 21 | ``` 22 | 23 | Then add `ngSanitize` as a dependency for your app: 24 | 25 | ```javascript 26 | angular.module('myApp', ['ngSanitize']); 27 | ``` 28 | 29 | Note that this package is not in CommonJS format, so doing `require('angular-sanitize')` will 30 | return `undefined`. 31 | 32 | ### bower 33 | 34 | ```shell 35 | bower install angular-sanitize 36 | ``` 37 | 38 | Add a ` 42 | ``` 43 | 44 | Then add `ngSanitize` as a dependency for your app: 45 | 46 | ```javascript 47 | angular.module('myApp', ['ngSanitize']); 48 | ``` 49 | 50 | ## Documentation 51 | 52 | Documentation is available on the 53 | [AngularJS docs site](http://docs.angularjs.org/api/ngSanitize). 54 | 55 | ## License 56 | 57 | The MIT License 58 | 59 | Copyright (c) 2010-2012 Google, Inc. http://angularjs.org 60 | 61 | Permission is hereby granted, free of charge, to any person obtaining a copy 62 | of this software and associated documentation files (the "Software"), to deal 63 | in the Software without restriction, including without limitation the rights 64 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 65 | copies of the Software, and to permit persons to whom the Software is 66 | furnished to do so, subject to the following conditions: 67 | 68 | The above copyright notice and this permission notice shall be included in 69 | all copies or substantial portions of the Software. 70 | 71 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 72 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 73 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 74 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 75 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 76 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 77 | THE SOFTWARE. 78 | -------------------------------------------------------------------------------- /static/bower_components/angular-loading-bar/Gruntfile.js: -------------------------------------------------------------------------------- 1 | /*global module:false*/ 2 | module.exports = function(grunt) { 3 | 4 | grunt.initConfig({ 5 | 6 | // Metadata. 7 | pkg: grunt.file.readJSON('package.json'), 8 | banner: '/*! \n * <%= pkg.title || pkg.name %> v<%= pkg.version %>\n' + 9 | ' * <%= pkg.homepage %>\n' + 10 | ' * Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' + 11 | ' * License: <%= pkg.license %>\n' + 12 | ' */\n', 13 | 14 | // Task configuration. 15 | uglify: { 16 | options: { 17 | banner: '<%= banner %>', 18 | report: 'gzip' 19 | }, 20 | build: { 21 | src: 'src/loading-bar.js', 22 | dest: 'build/loading-bar.min.js' 23 | } 24 | }, 25 | 26 | cssmin: { 27 | options: { 28 | banner: '<%= banner %>', 29 | report: 'gzip' 30 | }, 31 | minify: { 32 | src: 'src/loading-bar.css', 33 | dest: 'build/loading-bar.min.css' 34 | } 35 | }, 36 | 37 | karma: { 38 | unit: { 39 | configFile: 'test/karma-angular-1.2.conf.js', 40 | singleRun: true, 41 | coverageReporter: { 42 | type: 'text', 43 | dir: 'coverage/' 44 | } 45 | }, 46 | unit13: { 47 | configFile: 'test/karma-angular-1.3.conf.js', 48 | singleRun: true, 49 | coverageReporter: { 50 | type: 'text', 51 | dir: 'coverage/' 52 | } 53 | }, 54 | watch: { 55 | configFile: 'test/karma-angular-1.2.conf.js', 56 | singleRun: false, 57 | reporters: ['progress'] // Don't display coverage 58 | } 59 | }, 60 | 61 | jshint: { 62 | jshintrc: '.jshintrc', 63 | gruntfile: { 64 | src: 'Gruntfile.js' 65 | }, 66 | src: { 67 | src: ['src/*.js'] 68 | } 69 | }, 70 | 71 | concat: { 72 | build: { 73 | options: { 74 | banner: '<%= banner %>' 75 | }, 76 | files: { 77 | 'build/loading-bar.css': 'src/loading-bar.css', 78 | 'build/loading-bar.js': 'src/loading-bar.js', 79 | } 80 | } 81 | } 82 | }); 83 | 84 | grunt.loadNpmTasks('grunt-contrib-uglify'); 85 | grunt.loadNpmTasks('grunt-contrib-jshint'); 86 | grunt.loadNpmTasks('grunt-contrib-cssmin'); 87 | grunt.loadNpmTasks('grunt-contrib-concat'); 88 | grunt.loadNpmTasks('grunt-karma'); 89 | 90 | grunt.registerTask('default', ['jshint', 'karma:unit', 'karma:unit13', 'uglify', 'cssmin', 'concat:build']); 91 | grunt.registerTask('test', ['karma:watch']); 92 | grunt.registerTask('build', ['default']); 93 | 94 | }; 95 | -------------------------------------------------------------------------------- /static/components/k-scroll/k-scroll.css: -------------------------------------------------------------------------------- 1 | .k-scroller-wrapper > .scroll-bar { 2 | -webkit-transition-property: border-right-width, opacity; 3 | -moz-transition-property: border-right-width, opacity; 4 | transition-property: border-right-width, opacity; 5 | -webkit-transition-duration: .2s, .2s; 6 | -moz-transition-duration: .2s, .2s; 7 | transition-duration: .2s, .2s; 8 | -webkit-transition-delay: .4s, 1s; 9 | -moz-transition-delay: .4s, 1s; 10 | transition-delay: .4s, 1s; 11 | position: absolute; 12 | right: 0; 13 | top: 0; 14 | width: 1rem; 15 | height: 0; 16 | -webkit-box-sizing:border-box; 17 | -moz-box-sizing:border-box; 18 | box-sizing:border-box; 19 | z-index: 100; 20 | border-width: 0; 21 | border-style: solid; 22 | border-left-width: .2rem; 23 | border-left-color: transparent; 24 | border-right-color: rgba(0, 0, 0, .3); 25 | border-right-width: .3rem; 26 | opacity: 0; 27 | } 28 | 29 | .k-scroller-wrapper.hover > .scroll-bar { 30 | opacity: 1; 31 | -webkit-transition-duration: .2s, .2s; 32 | -moz-transition-duration: .2s, .2s; 33 | transition-duration: .2s, .2s; 34 | -webkit-transition-delay: .4s, 0; 35 | -moz-transition-delay: .4s, 0; 36 | transition-delay: .4s, 0; 37 | } 38 | 39 | .k-scroller-wrapper.dragging > .scroll-bar, 40 | .k-scroller-wrapper.scrolling > .scroll-bar, 41 | .k-scroller-wrapper.sliding > .scroll-bar { 42 | opacity: 1; 43 | -webkit-transition-duration: .2s, 0; 44 | -moz-transition-duration: .2s, 0; 45 | transition-duration: .2s, 0; 46 | -webkit-transition-delay: 0, 0; 47 | -moz-transition-delay: 0, 0; 48 | transition-delay: 0, 0; 49 | } 50 | 51 | .k-scroller-wrapper > .scroll-bar.hover, 52 | .k-scroller-wrapper > .scroll-bar.dragging { 53 | opacity: 1; 54 | border-right-width: .8rem; 55 | -webkit-transition-duration: .2s, 0; 56 | -moz-transition-duration: .2s, 0; 57 | transition-duration: .2s, 0; 58 | -webkit-transition-delay: 0, 0; 59 | -moz-transition-delay: 0, 0; 60 | transition-delay: 0, 0; 61 | } 62 | 63 | .k-scroller-wrapper > .scroll-bar.active, 64 | .k-scroller-wrapper > .scroll-bar.dragging { 65 | border-right-color: rgba(0, 0, 0, .4); 66 | } 67 | 68 | .k-scroller > .pulldown-hint, 69 | .k-scroller > .pullup-hint { 70 | height: 30rem; 71 | text-align: center; 72 | background-color: #222; 73 | position: absolute; 74 | color: white; 75 | left: 0; 76 | right: 0; 77 | } 78 | .k-scroller > .pulldown-hint > .content, 79 | .k-scroller > .pullup-hint > .content { 80 | position: relative; 81 | display: inline-block; 82 | width: 10rem; 83 | } 84 | .k-scroller > .pulldown-hint { 85 | line-height: 56rem; 86 | bottom: 100%; 87 | } 88 | .k-scroller > .pullup-hint { 89 | line-height: 4rem; 90 | top: 100%; 91 | } 92 | -------------------------------------------------------------------------------- /static/js/home.js: -------------------------------------------------------------------------------- 1 | ;(function (angular) { 'use strict'; 2 | angular.module('iro.home', ['kSlider']) 3 | .controller('HomeCtrl', ['$scope', '$interval', '$window', function ($scope, $interval, $window) { 4 | var clock = $interval(setDateTime, 1000); 5 | 6 | $scope.menuSlider = { 7 | sectionCount: 2, 8 | _currentSection: $window.sessionStorage['home.menuCurrentSection'] || 0 9 | }; 10 | 11 | $scope.menuSections = [0, 1]; 12 | 13 | $scope.$watch('menuSlider.currentSection', function (newValue) { 14 | $window.sessionStorage['home.menuCurrentSection'] = newValue; 15 | }); 16 | 17 | $scope.$on('$destroy', function () { 18 | $interval.cancel(clock); 19 | }); 20 | 21 | $scope.global.title = null; 22 | 23 | setDateTime(); 24 | 25 | function setDateTime() { 26 | var now = new Date(); 27 | 28 | $scope.time = getTime(now); 29 | $scope.date = getDate(now); 30 | $scope.day = getDay(now); 31 | } 32 | 33 | function getDate(now) { 34 | var month = now.getMonth() + 1; 35 | var date = now.getDate(); 36 | var day = now.getDay(); 37 | 38 | return numToHanzi(month) + '月' + numToHanzi(date) + '日'; 39 | } 40 | 41 | function getTime(now) { 42 | var hours = now.getHours(); 43 | var minutes = now.getMinutes(); 44 | 45 | if (hours < 10) { 46 | hours = '0' + hours; 47 | } 48 | if (minutes < 10) { 49 | minutes = '0' + minutes; 50 | } 51 | 52 | return hours + ':' + minutes; 53 | } 54 | 55 | function getDay(now) { 56 | var day = now.getDay(); 57 | 58 | var dayHanzi = { 59 | '0': '星期日', 60 | '1': '星期一', 61 | '2': '星期二', 62 | '3': '星期三', 63 | '4': '星期四', 64 | '5': '星期五', 65 | '6': '星期六' 66 | }; 67 | 68 | return dayHanzi[day]; 69 | } 70 | 71 | function numToHanzi(num) { 72 | var tens = Math.floor(num / 10); 73 | var units = Math.floor(num % 10); 74 | 75 | var numHanzi = { 76 | '0': '', 77 | '1': '一', 78 | '2': '二', 79 | '3': '三', 80 | '4': '四', 81 | '5': '五', 82 | '6': '六', 83 | '7': '七', 84 | '8': '八', 85 | '9': '九' 86 | }; 87 | 88 | var result = ''; 89 | 90 | if (tens > 0) { 91 | if (tens > 1) { 92 | result += numHanzi[tens]; 93 | } 94 | result += '十'; 95 | } 96 | result += numHanzi[units]; 97 | 98 | return result; 99 | } 100 | }]); 101 | })(angular); -------------------------------------------------------------------------------- /static/bower_components/jquery/src/core/ready.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core", 3 | "../core/init", 4 | "../deferred" 5 | ], function( jQuery ) { 6 | 7 | // The deferred used on DOM ready 8 | var readyList; 9 | 10 | jQuery.fn.ready = function( fn ) { 11 | // Add the callback 12 | jQuery.ready.promise().done( fn ); 13 | 14 | return this; 15 | }; 16 | 17 | jQuery.extend({ 18 | // Is the DOM ready to be used? Set to true once it occurs. 19 | isReady: false, 20 | 21 | // A counter to track how many items to wait for before 22 | // the ready event fires. See #6781 23 | readyWait: 1, 24 | 25 | // Hold (or release) the ready event 26 | holdReady: function( hold ) { 27 | if ( hold ) { 28 | jQuery.readyWait++; 29 | } else { 30 | jQuery.ready( true ); 31 | } 32 | }, 33 | 34 | // Handle when the DOM is ready 35 | ready: function( wait ) { 36 | 37 | // Abort if there are pending holds or we're already ready 38 | if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 39 | return; 40 | } 41 | 42 | // Remember that the DOM is ready 43 | jQuery.isReady = true; 44 | 45 | // If a normal DOM Ready event fired, decrement, and wait if need be 46 | if ( wait !== true && --jQuery.readyWait > 0 ) { 47 | return; 48 | } 49 | 50 | // If there are functions bound, to execute 51 | readyList.resolveWith( document, [ jQuery ] ); 52 | 53 | // Trigger any bound ready events 54 | if ( jQuery.fn.triggerHandler ) { 55 | jQuery( document ).triggerHandler( "ready" ); 56 | jQuery( document ).off( "ready" ); 57 | } 58 | } 59 | }); 60 | 61 | /** 62 | * The ready event handler and self cleanup method 63 | */ 64 | function completed() { 65 | document.removeEventListener( "DOMContentLoaded", completed, false ); 66 | window.removeEventListener( "load", completed, false ); 67 | jQuery.ready(); 68 | } 69 | 70 | jQuery.ready.promise = function( obj ) { 71 | if ( !readyList ) { 72 | 73 | readyList = jQuery.Deferred(); 74 | 75 | // Catch cases where $(document).ready() is called after the browser event has already occurred. 76 | // We once tried to use readyState "interactive" here, but it caused issues like the one 77 | // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 78 | if ( document.readyState === "complete" ) { 79 | // Handle it asynchronously to allow scripts the opportunity to delay ready 80 | setTimeout( jQuery.ready ); 81 | 82 | } else { 83 | 84 | // Use the handy event callback 85 | document.addEventListener( "DOMContentLoaded", completed, false ); 86 | 87 | // A fallback to window.onload, that will always work 88 | window.addEventListener( "load", completed, false ); 89 | } 90 | } 91 | return readyList.promise( obj ); 92 | }; 93 | 94 | // Kick off the DOM ready check even if the user does not 95 | jQuery.ready.promise(); 96 | 97 | }); 98 | -------------------------------------------------------------------------------- /static/css/news.css: -------------------------------------------------------------------------------- 1 | #news{position:absolute;left:0;right:0;top:0;bottom:0;background-color:white}#news .news-view-container{position:absolute;left:0;right:0;top:0;bottom:0}#news .news-view-container.ng-leave{-moz-animation:leave 0.4s forwards;-webkit-animation:leave 0.4s forwards;animation:leave 0.4s forwards}#news .news-list{position:absolute;left:0;right:0;top:0;bottom:0;background-color:white;overflow:hidden;-moz-animation:enter 0.4s backwards;-webkit-animation:enter 0.4s backwards;animation:enter 0.4s backwards}#news .news-list .news-list-inner{position:absolute;left:0;right:0;top:0;min-height:100%;padding:1rem;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#news .news-list .news-list-inner li{position:relative;float:left;width:33.33333%;height:16rem}#news .news-list .news-list-inner li a{position:absolute;top:1rem;bottom:1rem;left:1rem;right:1rem;display:block;cursor:pointer;transition:background-color 0 .08s}#news .news-list .news-list-inner li a.visited{opacity:.5}#news .news-list .news-list-inner li a .thumb{position:absolute;top:0;bottom:2.4rem;left:0;right:0;background-repeat:no-repeat;background-position:center center;background-size:cover;background-color:white;transition:opacity 0 .08s}#news .news-list .news-list-inner li a .title{position:absolute;left:0;right:0;bottom:0;height:2.4rem;line-height:2.4rem;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;background-color:white;transition:background-color 0 .08s}#news .news-list .news-list-inner li a.active{background-color:black}#news .news-list .news-list-inner li a.active .thumb{opacity:.7}#news .news-list .news-list-inner li a.no-thumb .thumb{display:none}#news .news-list .news-list-inner li a.no-thumb .title{font-size:3.4rem;line-height:1.33em;top:.0;bottom:0;left:0;right:0;height:auto;position:absolute;white-space:normal}#news .news-list .news-list-inner li a.no-thumb.active .title{background-color:#ccc}#news .news-detail{position:absolute;left:0;right:0;top:0;bottom:0;overflow:hidden;background-color:white;-moz-animation:enter 0.4s backwards;-webkit-animation:enter 0.4s backwards;animation:enter 0.4s backwards}#news .news-detail .news-detail-inner{max-width:60rem;margin-left:auto;margin-right:auto;background-color:white;padding-left:1.2rem;padding-right:1.2rem;padding-bottom:6rem;-moz-user-select:text;-ms-user-select:text;-webkit-user-select:text;user-select:text;opacity:1}.wide-screen #news .news-detail .news-detail-inner{margin-top:2rem;margin-bottom:3rem;padding-left:3rem;padding-right:3rem}#news .news-detail .news-detail-inner .title{text-align:center;font-size:1.9rem;padding:1.2em 0}#news .news-detail .news-detail-inner .content{font-size:1.2rem;line-height:1.5em}#news .news-detail .news-detail-inner .content p{margin:1.2rem 0;text-indent:2em}#news .news-detail .news-detail-inner .content img{display:block;margin:auto;max-width:100% !important;height:auto !important} 2 | -------------------------------------------------------------------------------- /static/bower_components/angular-loading-bar/build/loading-bar.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * angular-loading-bar v0.6.0 3 | * https://chieffancypants.github.io/angular-loading-bar 4 | * Copyright (c) 2014 Wes Cruver 5 | * License: MIT 6 | */ 7 | !function(){"use strict";angular.module("angular-loading-bar",["cfp.loadingBarInterceptor"]),angular.module("chieffancypants.loadingBar",["cfp.loadingBarInterceptor"]),angular.module("cfp.loadingBarInterceptor",["cfp.loadingBar"]).config(["$httpProvider",function(a){var b=["$q","$cacheFactory","$timeout","$rootScope","cfpLoadingBar",function(b,c,d,e,f){function g(){d.cancel(i),f.complete(),k=0,j=0}function h(b){var d,e=c.get("$http"),f=a.defaults;!b.cache&&!f.cache||b.cache===!1||"GET"!==b.method&&"JSONP"!==b.method||(d=angular.isObject(b.cache)?b.cache:angular.isObject(f.cache)?f.cache:e);var g=void 0!==d?void 0!==d.get(b.url):!1;return void 0!==b.cached&&g!==b.cached?b.cached:(b.cached=g,g)}var i,j=0,k=0,l=f.latencyThreshold;return{request:function(a){return a.ignoreLoadingBar||h(a)||(e.$broadcast("cfpLoadingBar:loading",{url:a.url}),0===j&&(i=d(function(){f.start()},l)),j++,f.set(k/j)),a},response:function(a){return a.config.ignoreLoadingBar||h(a.config)||(k++,e.$broadcast("cfpLoadingBar:loaded",{url:a.config.url}),k>=j?g():f.set(k/j)),a},responseError:function(a){return a.config.ignoreLoadingBar||h(a.config)||(k++,e.$broadcast("cfpLoadingBar:loaded",{url:a.config.url}),k>=j?g():f.set(k/j)),b.reject(a)}}}];a.interceptors.push(b)}]),angular.module("cfp.loadingBar",[]).provider("cfpLoadingBar",function(){this.includeSpinner=!0,this.includeBar=!0,this.latencyThreshold=100,this.startSize=.02,this.parentSelector="body",this.spinnerTemplate='
',this.loadingBarTemplate='
',this.$get=["$injector","$document","$timeout","$rootScope",function(a,b,c,d){function e(){k||(k=a.get("$animate"));var e=b.find(n).eq(0);c.cancel(m),r||(d.$broadcast("cfpLoadingBar:started"),r=!0,u&&k.enter(o,e),t&&k.enter(q,e),f(v))}function f(a){if(r){var b=100*a+"%";p.css("width",b),s=a,c.cancel(l),l=c(function(){g()},250)}}function g(){if(!(h()>=1)){var a=0,b=h();a=b>=0&&.25>b?(3*Math.random()+3)/100:b>=.25&&.65>b?3*Math.random()/100:b>=.65&&.9>b?2*Math.random()/100:b>=.9&&.99>b?.005:0;var c=h()+a;f(c)}}function h(){return s}function i(){s=0,r=!1}function j(){k||(k=a.get("$animate")),d.$broadcast("cfpLoadingBar:completed"),f(1),c.cancel(m),m=c(function(){var a=k.leave(o,i);a&&a.then&&a.then(i),k.leave(q)},500)}var k,l,m,n=this.parentSelector,o=angular.element(this.loadingBarTemplate),p=o.find("div").eq(0),q=angular.element(this.spinnerTemplate),r=!1,s=0,t=this.includeSpinner,u=this.includeBar,v=this.startSize;return{start:e,set:f,status:h,inc:g,complete:j,includeSpinner:this.includeSpinner,latencyThreshold:this.latencyThreshold,parentSelector:this.parentSelector,startSize:this.startSize}}]})}(); -------------------------------------------------------------------------------- /static/bower_components/jquery/src/ajax/jsonp.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core", 3 | "./var/nonce", 4 | "./var/rquery", 5 | "../ajax" 6 | ], function( jQuery, nonce, rquery ) { 7 | 8 | var oldCallbacks = [], 9 | rjsonp = /(=)\?(?=&|$)|\?\?/; 10 | 11 | // Default jsonp settings 12 | jQuery.ajaxSetup({ 13 | jsonp: "callback", 14 | jsonpCallback: function() { 15 | var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); 16 | this[ callback ] = true; 17 | return callback; 18 | } 19 | }); 20 | 21 | // Detect, normalize options and install callbacks for jsonp requests 22 | jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 23 | 24 | var callbackName, overwritten, responseContainer, 25 | jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 26 | "url" : 27 | typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" 28 | ); 29 | 30 | // Handle iff the expected data type is "jsonp" or we have a parameter to set 31 | if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 32 | 33 | // Get callback name, remembering preexisting value associated with it 34 | callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? 35 | s.jsonpCallback() : 36 | s.jsonpCallback; 37 | 38 | // Insert callback into url or form data 39 | if ( jsonProp ) { 40 | s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 41 | } else if ( s.jsonp !== false ) { 42 | s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 43 | } 44 | 45 | // Use data converter to retrieve json after script execution 46 | s.converters["script json"] = function() { 47 | if ( !responseContainer ) { 48 | jQuery.error( callbackName + " was not called" ); 49 | } 50 | return responseContainer[ 0 ]; 51 | }; 52 | 53 | // force json dataType 54 | s.dataTypes[ 0 ] = "json"; 55 | 56 | // Install callback 57 | overwritten = window[ callbackName ]; 58 | window[ callbackName ] = function() { 59 | responseContainer = arguments; 60 | }; 61 | 62 | // Clean-up function (fires after converters) 63 | jqXHR.always(function() { 64 | // Restore preexisting value 65 | window[ callbackName ] = overwritten; 66 | 67 | // Save back as free 68 | if ( s[ callbackName ] ) { 69 | // make sure that re-using the options doesn't screw things around 70 | s.jsonpCallback = originalSettings.jsonpCallback; 71 | 72 | // save the callback name for future use 73 | oldCallbacks.push( callbackName ); 74 | } 75 | 76 | // Call if it was a function and we have a response 77 | if ( responseContainer && jQuery.isFunction( overwritten ) ) { 78 | overwritten( responseContainer[ 0 ] ); 79 | } 80 | 81 | responseContainer = overwritten = undefined; 82 | }); 83 | 84 | // Delegate to script 85 | return "script"; 86 | } 87 | }); 88 | 89 | }); 90 | -------------------------------------------------------------------------------- /static/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 |
27 |

iro

28 | 29 | 30 |
31 | 38 |
39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /static/bower_components/angular-loading-bar/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | Changelog 2 | ========== 3 | 4 | ## 0.6.0 5 | - Customize progress bar template: ([#111](https://github.com/chieffancypants/angular-loading-bar/pull/111)) 6 | - Only append bar to first parent found ([#108](https://github.com/chieffancypants/angular-loading-bar/pull/108)) 7 | 8 | ## 0.5.2: 9 | Fixes for Angular 1.3 breaking changes: 10 | - Circular dependencies: ([#98](https://github.com/chieffancypants/angular-loading-bar/issues/98)), ([#101](https://github.com/chieffancypants/angular-loading-bar/pull/101)) 11 | - $animate no longer accepts callbacks: ([#102](https://github.com/chieffancypants/angular-loading-bar/pull/102)) 12 | 13 | ## 0.5.1 14 | - Reworked cache logic to allow cache:true ([#96](https://github.com/chieffancypants/angular-loading-bar/pull/96)) 15 | 16 | ## 0.5.0 17 | - Added spinner template configuration ([#82](https://github.com/chieffancypants/angular-loading-bar/pull/82)) 18 | - $timeout was not canceled properly ([#79](https://github.com/chieffancypants/angular-loading-bar/pull/79)) 19 | 20 | ## 0.4.3 21 | - update z-index to work with other css frameworks ([#69](https://github.com/chieffancypants/angular-loading-bar/pull/69)) 22 | - ignoreLoadingBar not ignored when calculating percentage complete ([#70](https://github.com/chieffancypants/angular-loading-bar/pull/70)) 23 | 24 | ## 0.4.2 25 | - Split loading bar into different modules so they can be included separately ([#46](https://github.com/chieffancypants/angular-loading-bar/issues/46)) 26 | 27 | ## 0.4.1 28 | - Fix for route views defined on body where loading bar is also attached ([#56](https://github.com/chieffancypants/angular-loading-bar/issues/56)) 29 | 30 | ## 0.4.0 31 | - Initial load percentage is now configurable ([#47](https://github.com/chieffancypants/angular-loading-bar/issues/47)) 32 | - Peg graphic reworked so the loadingbar does not require CSS changes when not at the very top of the page ([#42](https://github.com/chieffancypants/angular-loading-bar/issues/42), [#45](https://github.com/chieffancypants/angular-loading-bar/issues/45), [#10](https://github.com/chieffancypants/angular-loading-bar/issues/10)) 33 | - z-index of spinner increased to work with Bootstrap 3 z-indexes ([#53](https://github.com/chieffancypants/angular-loading-bar/issues/53)) 34 | 35 | ## 0.3.0 36 | - Loading bar only appears on XHR requests with high latency ([#27](https://github.com/chieffancypants/angular-loading-bar/issues/27)) 37 | 38 | ## 0.2.0 39 | - Progression bar not calculated correctly for consecutive calls within the 500ms delay ([#29](https://github.com/chieffancypants/angular-loading-bar/issues/29), [#32](https://github.com/chieffancypants/angular-loading-bar/issues/32)) 40 | - Event broadcasts when loading (#31) 41 | 42 | ## 0.1.1 43 | - Alias chieffancypants.loadingbar to angular-loading-bar (#25, #19) 44 | 45 | ## 0.1.0 46 | - Fixed issues with Angular 1.2-rc3+ 47 | - Ability to ignore particular XHR requests (#21) 48 | - Broadcasting of events (#18) 49 | -------------------------------------------------------------------------------- /static/bower_components/jquery/src/traversing/findFilter.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core", 3 | "../var/indexOf", 4 | "./var/rneedsContext", 5 | "../selector" 6 | ], function( jQuery, indexOf, rneedsContext ) { 7 | 8 | var risSimple = /^.[^:#\[\.,]*$/; 9 | 10 | // Implement the identical functionality for filter and not 11 | function winnow( elements, qualifier, not ) { 12 | if ( jQuery.isFunction( qualifier ) ) { 13 | return jQuery.grep( elements, function( elem, i ) { 14 | /* jshint -W018 */ 15 | return !!qualifier.call( elem, i, elem ) !== not; 16 | }); 17 | 18 | } 19 | 20 | if ( qualifier.nodeType ) { 21 | return jQuery.grep( elements, function( elem ) { 22 | return ( elem === qualifier ) !== not; 23 | }); 24 | 25 | } 26 | 27 | if ( typeof qualifier === "string" ) { 28 | if ( risSimple.test( qualifier ) ) { 29 | return jQuery.filter( qualifier, elements, not ); 30 | } 31 | 32 | qualifier = jQuery.filter( qualifier, elements ); 33 | } 34 | 35 | return jQuery.grep( elements, function( elem ) { 36 | return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; 37 | }); 38 | } 39 | 40 | jQuery.filter = function( expr, elems, not ) { 41 | var elem = elems[ 0 ]; 42 | 43 | if ( not ) { 44 | expr = ":not(" + expr + ")"; 45 | } 46 | 47 | return elems.length === 1 && elem.nodeType === 1 ? 48 | jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : 49 | jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 50 | return elem.nodeType === 1; 51 | })); 52 | }; 53 | 54 | jQuery.fn.extend({ 55 | find: function( selector ) { 56 | var i, 57 | len = this.length, 58 | ret = [], 59 | self = this; 60 | 61 | if ( typeof selector !== "string" ) { 62 | return this.pushStack( jQuery( selector ).filter(function() { 63 | for ( i = 0; i < len; i++ ) { 64 | if ( jQuery.contains( self[ i ], this ) ) { 65 | return true; 66 | } 67 | } 68 | }) ); 69 | } 70 | 71 | for ( i = 0; i < len; i++ ) { 72 | jQuery.find( selector, self[ i ], ret ); 73 | } 74 | 75 | // Needed because $( selector, context ) becomes $( context ).find( selector ) 76 | ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); 77 | ret.selector = this.selector ? this.selector + " " + selector : selector; 78 | return ret; 79 | }, 80 | filter: function( selector ) { 81 | return this.pushStack( winnow(this, selector || [], false) ); 82 | }, 83 | not: function( selector ) { 84 | return this.pushStack( winnow(this, selector || [], true) ); 85 | }, 86 | is: function( selector ) { 87 | return !!winnow( 88 | this, 89 | 90 | // If this is a positional/relative selector, check membership in the returned set 91 | // so $("p:first").is("p:last") won't return true for a doc with two "p". 92 | typeof selector === "string" && rneedsContext.test( selector ) ? 93 | jQuery( selector ) : 94 | selector || [], 95 | false 96 | ).length; 97 | } 98 | }); 99 | 100 | }); 101 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/md5-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | (function(E){function h(a,f,g,j,p,h,k){a=a+(f&g|~f&j)+p+k;return(a<>>32-h)+f}function k(a,f,g,j,p,h,k){a=a+(f&j|g&~j)+p+k;return(a<>>32-h)+f}function l(a,f,g,j,h,k,l){a=a+(f^g^j)+h+l;return(a<>>32-k)+f}function n(a,f,g,j,h,k,l){a=a+(g^(f|~j))+h+l;return(a<>>32-k)+f}for(var r=CryptoJS,q=r.lib,F=q.WordArray,s=q.Hasher,q=r.algo,a=[],t=0;64>t;t++)a[t]=4294967296*E.abs(E.sin(t+1))|0;q=q.MD5=s.extend({_doReset:function(){this._hash=new F.init([1732584193,4023233417,2562383102,271733878])}, 8 | _doProcessBlock:function(m,f){for(var g=0;16>g;g++){var j=f+g,p=m[j];m[j]=(p<<8|p>>>24)&16711935|(p<<24|p>>>8)&4278255360}var g=this._hash.words,j=m[f+0],p=m[f+1],q=m[f+2],r=m[f+3],s=m[f+4],t=m[f+5],u=m[f+6],v=m[f+7],w=m[f+8],x=m[f+9],y=m[f+10],z=m[f+11],A=m[f+12],B=m[f+13],C=m[f+14],D=m[f+15],b=g[0],c=g[1],d=g[2],e=g[3],b=h(b,c,d,e,j,7,a[0]),e=h(e,b,c,d,p,12,a[1]),d=h(d,e,b,c,q,17,a[2]),c=h(c,d,e,b,r,22,a[3]),b=h(b,c,d,e,s,7,a[4]),e=h(e,b,c,d,t,12,a[5]),d=h(d,e,b,c,u,17,a[6]),c=h(c,d,e,b,v,22,a[7]), 9 | b=h(b,c,d,e,w,7,a[8]),e=h(e,b,c,d,x,12,a[9]),d=h(d,e,b,c,y,17,a[10]),c=h(c,d,e,b,z,22,a[11]),b=h(b,c,d,e,A,7,a[12]),e=h(e,b,c,d,B,12,a[13]),d=h(d,e,b,c,C,17,a[14]),c=h(c,d,e,b,D,22,a[15]),b=k(b,c,d,e,p,5,a[16]),e=k(e,b,c,d,u,9,a[17]),d=k(d,e,b,c,z,14,a[18]),c=k(c,d,e,b,j,20,a[19]),b=k(b,c,d,e,t,5,a[20]),e=k(e,b,c,d,y,9,a[21]),d=k(d,e,b,c,D,14,a[22]),c=k(c,d,e,b,s,20,a[23]),b=k(b,c,d,e,x,5,a[24]),e=k(e,b,c,d,C,9,a[25]),d=k(d,e,b,c,r,14,a[26]),c=k(c,d,e,b,w,20,a[27]),b=k(b,c,d,e,B,5,a[28]),e=k(e,b, 10 | c,d,q,9,a[29]),d=k(d,e,b,c,v,14,a[30]),c=k(c,d,e,b,A,20,a[31]),b=l(b,c,d,e,t,4,a[32]),e=l(e,b,c,d,w,11,a[33]),d=l(d,e,b,c,z,16,a[34]),c=l(c,d,e,b,C,23,a[35]),b=l(b,c,d,e,p,4,a[36]),e=l(e,b,c,d,s,11,a[37]),d=l(d,e,b,c,v,16,a[38]),c=l(c,d,e,b,y,23,a[39]),b=l(b,c,d,e,B,4,a[40]),e=l(e,b,c,d,j,11,a[41]),d=l(d,e,b,c,r,16,a[42]),c=l(c,d,e,b,u,23,a[43]),b=l(b,c,d,e,x,4,a[44]),e=l(e,b,c,d,A,11,a[45]),d=l(d,e,b,c,D,16,a[46]),c=l(c,d,e,b,q,23,a[47]),b=n(b,c,d,e,j,6,a[48]),e=n(e,b,c,d,v,10,a[49]),d=n(d,e,b,c, 11 | C,15,a[50]),c=n(c,d,e,b,t,21,a[51]),b=n(b,c,d,e,A,6,a[52]),e=n(e,b,c,d,r,10,a[53]),d=n(d,e,b,c,y,15,a[54]),c=n(c,d,e,b,p,21,a[55]),b=n(b,c,d,e,w,6,a[56]),e=n(e,b,c,d,D,10,a[57]),d=n(d,e,b,c,u,15,a[58]),c=n(c,d,e,b,B,21,a[59]),b=n(b,c,d,e,s,6,a[60]),e=n(e,b,c,d,z,10,a[61]),d=n(d,e,b,c,q,15,a[62]),c=n(c,d,e,b,x,21,a[63]);g[0]=g[0]+b|0;g[1]=g[1]+c|0;g[2]=g[2]+d|0;g[3]=g[3]+e|0},_doFinalize:function(){var a=this._data,f=a.words,g=8*this._nDataBytes,j=8*a.sigBytes;f[j>>>5]|=128<<24-j%32;var h=E.floor(g/ 12 | 4294967296);f[(j+64>>>9<<4)+15]=(h<<8|h>>>24)&16711935|(h<<24|h>>>8)&4278255360;f[(j+64>>>9<<4)+14]=(g<<8|g>>>24)&16711935|(g<<24|g>>>8)&4278255360;a.sigBytes=4*(f.length+1);this._process();a=this._hash;f=a.words;for(g=0;4>g;g++)j=f[g],f[g]=(j<<8|j>>>24)&16711935|(j<<24|j>>>8)&4278255360;return a},clone:function(){var a=s.clone.call(this);a._hash=this._hash.clone();return a}});r.MD5=s._createHelper(q);r.HmacMD5=s._createHmacHelper(q)})(Math); 13 | -------------------------------------------------------------------------------- /static/components/k-player/images/iconfonts/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Created by FontForge 20120731 at Sat Sep 27 20:13:42 2014 6 | By Ads 7 | 8 | 9 | 10 | 24 | 26 | 28 | 30 | 32 | 36 | 38 | 40 | 42 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /static/bower_components/cryptojslib/components/core-min.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.1.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2013 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | var CryptoJS=CryptoJS||function(h,r){var k={},l=k.lib={},n=function(){},f=l.Base={extend:function(a){n.prototype=this;var b=new n;a&&b.mixIn(a);b.hasOwnProperty("init")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}}, 8 | j=l.WordArray=f.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=r?b:4*a.length},toString:function(a){return(a||s).stringify(this)},concat:function(a){var b=this.words,d=a.words,c=this.sigBytes;a=a.sigBytes;this.clamp();if(c%4)for(var e=0;e>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((c+e)%4);else if(65535>>2]=d[e>>>2];else b.push.apply(b,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,b=this.sigBytes;a[b>>>2]&=4294967295<< 9 | 32-8*(b%4);a.length=h.ceil(b/4)},clone:function(){var a=f.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var b=[],d=0;d>>2]>>>24-8*(c%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c>>3]|=parseInt(a.substr(c, 10 | 2),16)<<24-4*(c%8);return new j.init(d,b/2)}},p=m.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c>>2]>>>24-8*(c%4)&255));return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return new j.init(d,b)}},t=m.Utf8={stringify:function(a){try{return decodeURIComponent(escape(p.stringify(a)))}catch(b){throw Error("Malformed UTF-8 data");}},parse:function(a){return p.parse(unescape(encodeURIComponent(a)))}}, 11 | q=l.BufferedBlockAlgorithm=f.extend({reset:function(){this._data=new j.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=t.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var b=this._data,d=b.words,c=b.sigBytes,e=this.blockSize,f=c/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;c=h.min(4*a,c);if(a){for(var g=0;g