├── .gitignore ├── README.md └── web ├── config.js ├── deploy ├── dist ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ ├── proxima_nova_bold.eot │ ├── proxima_nova_bold.svg │ ├── proxima_nova_bold.ttf │ ├── proxima_nova_bold.woff │ ├── proxima_nova_bold_0.eot │ ├── proxima_nova_bold_0.ttf │ ├── proxima_nova_bold_0.woff │ ├── proxima_nova_light.eot │ ├── proxima_nova_light.svg │ ├── proxima_nova_light.ttf │ ├── proxima_nova_light.woff │ ├── proxima_nova_light_0.eot │ ├── proxima_nova_light_0.ttf │ ├── proxima_nova_light_0.woff │ ├── proxima_nova_regular.eot │ ├── proxima_nova_regular.svg │ ├── proxima_nova_regular.ttf │ ├── proxima_nova_regular.woff │ ├── proxima_nova_regular_0.eot │ ├── proxima_nova_regular_0.ttf │ ├── proxima_nova_regular_0.woff │ ├── proxima_nova_semibold.eot │ ├── proxima_nova_semibold.svg │ ├── proxima_nova_semibold.ttf │ ├── proxima_nova_semibold.woff │ ├── proxima_nova_semibold_0.eot │ ├── proxima_nova_semibold_0.ttf │ ├── proxima_nova_semibold_0.woff │ ├── proxima_nova_thin.eot │ ├── proxima_nova_thin.svg │ ├── proxima_nova_thin.ttf │ ├── proxima_nova_thin.woff │ ├── proxima_nova_thin_0.eot │ ├── proxima_nova_thin_0.ttf │ └── proxima_nova_thin_0.woff ├── images │ ├── icon-chevron-left.png │ ├── icon-chevron-left.svg │ ├── icon-chevron-right.png │ ├── icon-chevron-right.svg │ ├── logo.png │ ├── logo.svg │ ├── select-caret.png │ ├── select-caret@2x.png │ ├── spotify-logo-notext-80@2x.png │ └── spotify-logo.png ├── sp-bootstrap.css └── sp-bootstrap.min.css ├── images ├── ajaxSpinner.gif ├── favicon.ico ├── organize.jpg ├── plot-select.png ├── saxman.jpg ├── select-example.png └── sp-landing-tile3.jpg ├── index.html ├── lib ├── artists.js ├── bootstrap.min.js ├── jquery-1.11.1.min.js ├── jquery.min.js ├── moment.min.js ├── rsvp-latest.min.js ├── typeahead.bundle.js └── underscore-min.js └── styles2.css /.gitignore: -------------------------------------------------------------------------------- 1 | *.pkl 2 | *.pyc 3 | projenv 4 | songdata 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Organize Your Music 3 | 4 | A web app that lets you organize your music. 5 | 6 | Online at http://static.echonest.com/OrganizeYourMusic 7 | 8 | 9 | -------------------------------------------------------------------------------- /web/config.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var SPOTIFY_CLIENT_ID = '1c81d0d03de148c083744f5cce782ef7'; 4 | var REMOTE_SPOTIFY_REDIRECT_URI = 'http://static.echonest.com/OrganizeYourMusic/' 5 | var REMOTE_SPOTIFY_REDIRECT_URI = 'http://organizeyourmusic.playlistmachinery.com/' 6 | var LOCAL_SPOTIFY_REDIRECT_URI = 'http://localhost:8000/'; 7 | var SPOTIFY_REDIRECT_URI = REMOTE_SPOTIFY_REDIRECT_URI; 8 | -------------------------------------------------------------------------------- /web/deploy: -------------------------------------------------------------------------------- 1 | rsync -azv . plamere@playlistmachinery.com:/home/www/organizeyourmusic 2 | #s3cmd sync --acl-public * s3://static.echonest.com/OrganizeYourMusic/ 3 | -------------------------------------------------------------------------------- /web/dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /web/dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /web/dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_bold.eot -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_bold.svg: -------------------------------------------------------------------------------- 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 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_bold.ttf -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_bold.woff -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_bold_0.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_bold_0.eot -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_bold_0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_bold_0.ttf -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_bold_0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_bold_0.woff -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_light.eot -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_light.ttf -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_light.woff -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_light_0.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_light_0.eot -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_light_0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_light_0.ttf -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_light_0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_light_0.woff -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_regular.eot -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_regular.ttf -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_regular.woff -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_regular_0.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_regular_0.eot -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_regular_0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_regular_0.ttf -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_regular_0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_regular_0.woff -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_semibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_semibold.eot -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_semibold.svg: -------------------------------------------------------------------------------- 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 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_semibold.ttf -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_semibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_semibold.woff -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_semibold_0.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_semibold_0.eot -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_semibold_0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_semibold_0.ttf -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_semibold_0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_semibold_0.woff -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_thin.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_thin.eot -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_thin.ttf -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_thin.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_thin.woff -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_thin_0.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_thin_0.eot -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_thin_0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_thin_0.ttf -------------------------------------------------------------------------------- /web/dist/fonts/proxima_nova_thin_0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/fonts/proxima_nova_thin_0.woff -------------------------------------------------------------------------------- /web/dist/images/icon-chevron-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/images/icon-chevron-left.png -------------------------------------------------------------------------------- /web/dist/images/icon-chevron-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /web/dist/images/icon-chevron-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/images/icon-chevron-right.png -------------------------------------------------------------------------------- /web/dist/images/icon-chevron-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /web/dist/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/images/logo.png -------------------------------------------------------------------------------- /web/dist/images/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 26 | 27 | 28 | 29 | 32 | 35 | 38 | 39 | 40 | 41 | 44 | 47 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 63 | 68 | 72 | 78 | 87 | 89 | 91 | 92 | 93 | 99 | 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /web/dist/images/select-caret.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/images/select-caret.png -------------------------------------------------------------------------------- /web/dist/images/select-caret@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/images/select-caret@2x.png -------------------------------------------------------------------------------- /web/dist/images/spotify-logo-notext-80@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/images/spotify-logo-notext-80@2x.png -------------------------------------------------------------------------------- /web/dist/images/spotify-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/dist/images/spotify-logo.png -------------------------------------------------------------------------------- /web/images/ajaxSpinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/images/ajaxSpinner.gif -------------------------------------------------------------------------------- /web/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/images/favicon.ico -------------------------------------------------------------------------------- /web/images/organize.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/images/organize.jpg -------------------------------------------------------------------------------- /web/images/plot-select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/images/plot-select.png -------------------------------------------------------------------------------- /web/images/saxman.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/images/saxman.jpg -------------------------------------------------------------------------------- /web/images/select-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/images/select-example.png -------------------------------------------------------------------------------- /web/images/sp-landing-tile3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plamere/OrganizeYourMusic/f0fc0fca725d92f83d004afe6a45c4a6e1792d3a/web/images/sp-landing-tile3.jpg -------------------------------------------------------------------------------- /web/lib/bootstrap.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.1.1 (http://getbootstrap.com) 3 | * Copyright 2011-2014 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});return this.$element.trigger(j),j.isDefaultPrevented()?void 0:(this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")),f&&this.cycle(),this)};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);!e&&f.toggle&&"show"==c&&(c=!c),e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(b){a(d).remove(),a(e).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(''}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(a(c).is("body")?window:c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);{var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})}},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(b.RESET).addClass("affix");var a=this.$window.scrollTop(),c=this.$element.offset();return this.pinnedOffset=c.top-a},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"top"==this.affixed&&(e.top+=d),"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:c-h-this.$element.height()}))}}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery); -------------------------------------------------------------------------------- /web/lib/rsvp-latest.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * @overview RSVP - a tiny implementation of Promises/A+. 3 | * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors 4 | * @license Licensed under MIT license 5 | * See https://raw.githubusercontent.com/tildeio/rsvp.js/master/LICENSE 6 | * @version 3.2.1 7 | */ 8 | 9 | (function(){"use strict";function t(t){return"function"==typeof t||"object"==typeof t&&null!==t}function n(t){return"function"==typeof t}function r(t){return"object"==typeof t&&null!==t}function e(){}function o(t,n){for(var r=0,e=t.length;e>r;r++)if(t[r]===n)return r;return-1}function i(t){var n=t._promiseCallbacks;return n||(n=t._promiseCallbacks={}),n}function u(t,n){return"onerror"===t?void jt.on("error",n):2!==arguments.length?jt[t]:void(jt[t]=n)}function s(){setTimeout(function(){for(var t,n=0;ns;s++)R(o.resolve(t[s]),void 0,r,e);return i}function v(t,n){var r=this,e=new r(g,n);return O(e,t),e}function y(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function d(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function m(t,n){this._id=xt++,this._label=n,this._state=void 0,this._result=void 0,this._subscribers=[],jt.instrument&&St("created",this),g!==t&&("function"!=typeof t&&y(),this instanceof m?N(this,t):d())}function w(){return new TypeError("A promises callback cannot return that same promise.")}function g(){}function b(t){try{return t.then}catch(n){return Ut.error=n,Ut}}function E(t,n,r,e){try{t.call(n,r,e)}catch(o){return o}}function A(t,n,r){jt.async(function(t){var e=!1,o=E(r,n,function(r){e||(e=!0,n!==r?S(t,r,void 0):C(t,r))},function(n){e||(e=!0,O(t,n))},"Settle: "+(t._label||" unknown promise"));!e&&o&&(e=!0,O(t,o))},t)}function j(t,n){n._state===Dt?C(t,n._result):n._state===Kt?(n._onError=null,O(t,n._result)):R(n,void 0,function(r){n!==r?S(t,r,void 0):C(t,r)},function(n){O(t,n)})}function T(t,r,e){r.constructor===t.constructor&&e===kt&&constructor.resolve===Ct?j(t,r):e===Ut?O(t,Ut.error):void 0===e?C(t,r):n(e)?A(t,r,e):C(t,r)}function S(n,r){n===r?C(n,r):t(r)?T(n,r,b(r)):C(n,r)}function k(t){t._onError&&t._onError(t._result),I(t)}function C(t,n){t._state===Yt&&(t._result=n,t._state=Dt,0===t._subscribers.length?jt.instrument&&St("fulfilled",t):jt.async(I,t))}function O(t,n){t._state===Yt&&(t._state=Kt,t._result=n,jt.async(k,t))}function R(t,n,r,e){var o=t._subscribers,i=o.length;t._onError=null,o[i]=n,o[i+Dt]=r,o[i+Kt]=e,0===i&&t._state&&jt.async(I,t)}function I(t){var n=t._subscribers,r=t._state;if(jt.instrument&&St(r===Dt?"fulfilled":"rejected",t),0!==n.length){for(var e,o,i=t._result,u=0;ut;t+=2){var n=Xt[t],r=Xt[t+1];n(r),Xt[t]=void 0,Xt[t+1]=void 0}Wt=0}function $(){try{var t=require,n=t("vertx");return Ft=n.runOnLoop||n.runOnContext,F()}catch(r){return V()}}function z(t){var n={};return n.promise=new Nt(function(t,r){n.resolve=t,n.reject=r},t),n}function B(t,n){return Nt.all(t,n)}function H(t,n){return Nt.resolve(t,n).then(function(t){return B(t,n)})}function J(t,r,e){var o=gt(t)?B(t,e):H(t,e);return o.then(function(t){if(!n(r))throw new TypeError("You must pass a function as filter's second argument.");for(var o=t.length,i=new Array(o),u=0;o>u;u++)i[u]=r(t[u]);return B(i,e).then(function(n){for(var r=new Array(o),e=0,i=0;o>i;i++)n[i]&&(r[e]=t[i],e++);return r.length=e,r})})}function Q(t,n,r){this._superConstructor(t,n,!0,r)}function X(t,n,r){this._superConstructor(t,n,!1,r)}function Z(t,n){return new X(Nt,t,n).promise}function tt(t,n){return new nn(Nt,t,n).promise}function nt(t,r,e){return Nt.all(t,e).then(function(t){if(!n(r))throw new TypeError("You must pass a function as map's second argument.");for(var o=t.length,i=new Array(o),u=0;o>u;u++)i[u]=r(t[u]);return Nt.all(i,e)})}function rt(){this.value=void 0}function et(t){try{return t.then}catch(n){return sn.value=n,sn}}function ot(t,n,r){try{t.apply(n,r)}catch(e){return sn.value=e,sn}}function it(t,n){for(var r,e,o={},i=t.length,u=new Array(i),s=0;i>s;s++)u[s]=t[s];for(e=0;ee;e++)r[e-1]=t[e];return r}function st(t,n){return{then:function(r,e){return t.call(n,r,e)}}}function at(t,n){var r=function(){for(var r,e=this,o=arguments.length,i=new Array(o+1),u=!1,s=0;o>s;++s){if(r=arguments[s],!u){if(u=lt(r),u===an){var a=new Nt(g);return O(a,an.value),a}u&&u!==!0&&(r=st(u,r))}i[s]=r}var c=new Nt(g);return i[o]=function(t,r){t?O(c,t):void 0===n?S(c,r):n===!0?S(c,ut(arguments)):gt(n)?S(c,it(arguments,n)):S(c,r)},u?ft(c,i,t,e):ct(c,i,t,e)};return r.__proto__=t,r}function ct(t,n,r,e){var o=ot(r,e,n);return o===sn&&O(t,o.value),t}function ft(t,n,r,e){return Nt.all(n).then(function(n){var o=ot(r,e,n);return o===sn&&O(t,o.value),t})}function lt(t){return t&&"object"==typeof t?t.constructor===Nt?!0:et(t):!1}function ht(t,n){return Nt.race(t,n)}function pt(t,n){return Nt.reject(t,n)}function _t(t,n){return Nt.resolve(t,n)}function vt(t){throw setTimeout(function(){throw t}),t}function yt(t,n){jt.async(t,n)}function dt(){jt.on.apply(jt,arguments)}function mt(){jt.off.apply(jt,arguments)}var wt;wt=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var gt=wt,bt=Date.now||function(){return(new Date).getTime()},Et=Object.create||function(t){if(arguments.length>1)throw new Error("Second argument not supported");if("object"!=typeof t)throw new TypeError("Argument must be an object");return e.prototype=t,new e},At={mixin:function(t){return t.on=this.on,t.off=this.off,t.trigger=this.trigger,t._promiseCallbacks=void 0,t},on:function(t,n){if("function"!=typeof n)throw new TypeError("Callback must be a function");var r,e=i(this);r=e[t],r||(r=e[t]=[]),-1===o(r,n)&&r.push(n)},off:function(t,n){var r,e,u=i(this);return n?(r=u[t],e=o(r,n),void(-1!==e&&r.splice(e,1))):void(u[t]=[])},trigger:function(t,n,r){var e,o,u=i(this);if(e=u[t])for(var s=0;se;e++)this._eachEntry(r[e],e)},h.prototype._settleMaybeThenable=function(t,n){var r=this._instanceConstructor,e=r.resolve;if(e===Ct){var o=b(t);if(o===kt&&t._state!==Yt)t._onError=null,this._settledAt(t._state,n,t._result);else if("function"!=typeof o)this._remaining--,this._result[n]=this._makeResult(Dt,n,t);else if(r===Nt){var i=new r(g);T(i,t,o),this._willSettleAt(i,n)}else this._willSettleAt(new r(function(n){n(t)}),n)}else this._willSettleAt(e(t),n)},h.prototype._eachEntry=function(t,n){r(t)?this._settleMaybeThenable(t,n):(this._remaining--,this._result[n]=this._makeResult(Dt,n,t))},h.prototype._settledAt=function(t,n,r){var e=this.promise;e._state===Yt&&(this._remaining--,this._abortOnReject&&t===Kt?O(e,r):this._result[n]=this._makeResult(t,n,r)),0===this._remaining&&C(e,this._result)},h.prototype._makeResult=function(t,n,r){return r},h.prototype._willSettleAt=function(t,n){var r=this;R(t,void 0,function(t){r._settledAt(Dt,n,t)},function(t){r._settledAt(Kt,n,t)})};var Rt=p,It=_,Mt=v,Pt="rsvp_"+bt()+"-",xt=0,Nt=m;m.cast=Ct,m.all=Rt,m.race=It,m.resolve=Ct,m.reject=Mt,m.prototype={constructor:m,_guidKey:Pt,_onError:function(t){var n=this;jt.after(function(){n._onError&&jt.trigger("error",t,n._label)})},then:kt,"catch":function(t,n){return this.then(void 0,t,n)},"finally":function(t,n){var r=this,e=r.constructor;return r.then(function(n){return e.resolve(t()).then(function(){return n})},function(n){return e.resolve(t()).then(function(){return e.reject(n)})},n)}};var Yt=void 0,Dt=1,Kt=2,Ut=new M,qt=new M;Y.prototype=Et(Ot.prototype),Y.prototype._superConstructor=Ot,Y.prototype._makeResult=l,Y.prototype._validationError=function(){return new Error("allSettled must be called with an array")};var Ft,Gt,Lt=D,Vt=K,Wt=0,$t=({}.toString,U),zt="undefined"!=typeof window?window:void 0,Bt=zt||{},Ht=Bt.MutationObserver||Bt.WebKitMutationObserver,Jt="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),Qt="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,Xt=new Array(1e3);Gt=Jt?q():Ht?G():Qt?L():void 0===zt&&"function"==typeof require?$():V();var Zt=z,tn=J,nn=Q;Q.prototype=Et(Ot.prototype),Q.prototype._superConstructor=Ot,Q.prototype._init=function(){this._result={}},Q.prototype._validateInput=function(t){return t&&"object"==typeof t},Q.prototype._validationError=function(){return new Error("Promise.hash must be called with an object")},Q.prototype._enumerate=function(){var t=this,n=t.promise,r=t._input,e=[];for(var o in r)n._state===Yt&&Object.prototype.hasOwnProperty.call(r,o)&&e.push({position:o,entry:r[o]});var i=e.length;t._remaining=i;for(var u,s=0;n._state===Yt&&i>s;s++)u=e[s],t._eachEntry(u.entry,u.position)},X.prototype=Et(nn.prototype),X.prototype._superConstructor=Ot,X.prototype._makeResult=l,X.prototype._validationError=function(){return new Error("hashSettled must be called with an object")};var rn,en=Z,on=tt,un=nt,sn=new rt,an=new rt,cn=at;if("object"==typeof self)rn=self;else{if("object"!=typeof global)throw new Error("no global: `self` or `global` found");rn=global}var fn=rn,ln=ht,hn=pt,pn=_t,_n=vt;jt.async=$t,jt.after=function(t){setTimeout(t,0)};if("undefined"!=typeof window&&"object"==typeof window.__PROMISE_INSTRUMENTATION__){var vn=window.__PROMISE_INSTRUMENTATION__;u("instrument",!0);for(var yn in vn)vn.hasOwnProperty(yn)&&dt(yn,vn[yn])}var dn={race:ln,Promise:Nt,allSettled:Lt,hash:on,hashSettled:en,denodeify:cn,on:dt,off:mt,map:un,filter:tn,resolve:pn,reject:hn,all:Vt,rethrow:_n,defer:Zt,EventTarget:At,configure:u,async:yt};"function"==typeof define&&define.amd?define(function(){return dn}):"undefined"!=typeof module&&module.exports?module.exports=dn:"undefined"!=typeof fn&&(fn.RSVP=dn)}).call(this); -------------------------------------------------------------------------------- /web/lib/underscore-min.js: -------------------------------------------------------------------------------- 1 | (function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,v=e.reduce,h=e.reduceRight,g=e.filter,d=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,_=Object.keys,j=i.bind,w=function(n){return n instanceof w?n:this instanceof w?(this._wrapped=n,void 0):new w(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=w),exports._=w):n._=w,w.VERSION="1.4.3";var A=w.each=w.forEach=function(n,t,e){if(null!=n)if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a in n)if(w.has(n,a)&&t.call(e,n[a],a,n)===r)return};w.map=w.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e[e.length]=t.call(r,n,u,i)}),e)};var O="Reduce of empty array with no initial value";w.reduce=w.foldl=w.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduce===v)return e&&(t=w.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(O);return r},w.reduceRight=w.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduceRight===h)return e&&(t=w.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=w.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(O);return r},w.find=w.detect=function(n,t,r){var e;return E(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},w.filter=w.select=function(n,t,r){var e=[];return null==n?e:g&&n.filter===g?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&(e[e.length]=n)}),e)},w.reject=function(n,t,r){return w.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},w.every=w.all=function(n,t,e){t||(t=w.identity);var u=!0;return null==n?u:d&&n.every===d?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var E=w.some=w.any=function(n,t,e){t||(t=w.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};w.contains=w.include=function(n,t){return null==n?!1:y&&n.indexOf===y?-1!=n.indexOf(t):E(n,function(n){return n===t})},w.invoke=function(n,t){var r=o.call(arguments,2);return w.map(n,function(n){return(w.isFunction(t)?t:n[t]).apply(n,r)})},w.pluck=function(n,t){return w.map(n,function(n){return n[t]})},w.where=function(n,t){return w.isEmpty(t)?[]:w.filter(n,function(n){for(var r in t)if(t[r]!==n[r])return!1;return!0})},w.max=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.max.apply(Math,n);if(!t&&w.isEmpty(n))return-1/0;var e={computed:-1/0,value:-1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a>=e.computed&&(e={value:n,computed:a})}),e.value},w.min=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.min.apply(Math,n);if(!t&&w.isEmpty(n))return 1/0;var e={computed:1/0,value:1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;e.computed>a&&(e={value:n,computed:a})}),e.value},w.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=w.random(r++),e[r-1]=e[t],e[t]=n}),e};var F=function(n){return w.isFunction(n)?n:function(t){return t[n]}};w.sortBy=function(n,t,r){var e=F(t);return w.pluck(w.map(n,function(n,t,u){return{value:n,index:t,criteria:e.call(r,n,t,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||void 0===r)return 1;if(e>r||void 0===e)return-1}return n.indexi;){var o=i+a>>>1;u>r.call(e,n[o])?i=o+1:a=o}return i},w.toArray=function(n){return n?w.isArray(n)?o.call(n):n.length===+n.length?w.map(n,w.identity):w.values(n):[]},w.size=function(n){return null==n?0:n.length===+n.length?n.length:w.keys(n).length},w.first=w.head=w.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:o.call(n,0,t)},w.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},w.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},w.rest=w.tail=w.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},w.compact=function(n){return w.filter(n,w.identity)};var R=function(n,t,r){return A(n,function(n){w.isArray(n)?t?a.apply(r,n):R(n,t,r):r.push(n)}),r};w.flatten=function(n,t){return R(n,t,[])},w.without=function(n){return w.difference(n,o.call(arguments,1))},w.uniq=w.unique=function(n,t,r,e){w.isFunction(t)&&(e=r,r=t,t=!1);var u=r?w.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:w.contains(a,r))||(a.push(r),i.push(n[e]))}),i},w.union=function(){return w.uniq(c.apply(e,arguments))},w.intersection=function(n){var t=o.call(arguments,1);return w.filter(w.uniq(n),function(n){return w.every(t,function(t){return w.indexOf(t,n)>=0})})},w.difference=function(n){var t=c.apply(e,o.call(arguments,1));return w.filter(n,function(n){return!w.contains(t,n)})},w.zip=function(){for(var n=o.call(arguments),t=w.max(w.pluck(n,"length")),r=Array(t),e=0;t>e;e++)r[e]=w.pluck(n,""+e);return r},w.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},w.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=w.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},w.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},w.range=function(n,t,r){1>=arguments.length&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=Array(e);e>u;)i[u++]=n,n+=r;return i};var I=function(){};w.bind=function(n,t){var r,e;if(n.bind===j&&j)return j.apply(n,o.call(arguments,1));if(!w.isFunction(n))throw new TypeError;return r=o.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(o.call(arguments)));I.prototype=n.prototype;var u=new I;I.prototype=null;var i=n.apply(u,r.concat(o.call(arguments)));return Object(i)===i?i:u}},w.bindAll=function(n){var t=o.call(arguments,1);return 0==t.length&&(t=w.functions(n)),A(t,function(t){n[t]=w.bind(n[t],n)}),n},w.memoize=function(n,t){var r={};return t||(t=w.identity),function(){var e=t.apply(this,arguments);return w.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},w.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},w.defer=function(n){return w.delay.apply(w,[n,1].concat(o.call(arguments,1)))},w.throttle=function(n,t){var r,e,u,i,a=0,o=function(){a=new Date,u=null,i=n.apply(r,e)};return function(){var c=new Date,l=t-(c-a);return r=this,e=arguments,0>=l?(clearTimeout(u),u=null,a=c,i=n.apply(r,e)):u||(u=setTimeout(o,l)),i}},w.debounce=function(n,t,r){var e,u;return function(){var i=this,a=arguments,o=function(){e=null,r||(u=n.apply(i,a))},c=r&&!e;return clearTimeout(e),e=setTimeout(o,t),c&&(u=n.apply(i,a)),u}},w.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},w.wrap=function(n,t){return function(){var r=[n];return a.apply(r,arguments),t.apply(this,r)}},w.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},w.after=function(n,t){return 0>=n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},w.keys=_||function(n){if(n!==Object(n))throw new TypeError("Invalid object");var t=[];for(var r in n)w.has(n,r)&&(t[t.length]=r);return t},w.values=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push(n[r]);return t},w.pairs=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push([r,n[r]]);return t},w.invert=function(n){var t={};for(var r in n)w.has(n,r)&&(t[n[r]]=r);return t},w.functions=w.methods=function(n){var t=[];for(var r in n)w.isFunction(n[r])&&t.push(r);return t.sort()},w.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},w.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},w.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)w.contains(r,u)||(t[u]=n[u]);return t},w.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)null==n[r]&&(n[r]=t[r])}),n},w.clone=function(n){return w.isObject(n)?w.isArray(n)?n.slice():w.extend({},n):n},w.tap=function(n,t){return t(n),n};var S=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof w&&(n=n._wrapped),t instanceof w&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==t+"";case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;r.push(n),e.push(t);var a=0,o=!0;if("[object Array]"==u){if(a=n.length,o=a==t.length)for(;a--&&(o=S(n[a],t[a],r,e)););}else{var c=n.constructor,f=t.constructor;if(c!==f&&!(w.isFunction(c)&&c instanceof c&&w.isFunction(f)&&f instanceof f))return!1;for(var s in n)if(w.has(n,s)&&(a++,!(o=w.has(t,s)&&S(n[s],t[s],r,e))))break;if(o){for(s in t)if(w.has(t,s)&&!a--)break;o=!a}}return r.pop(),e.pop(),o};w.isEqual=function(n,t){return S(n,t,[],[])},w.isEmpty=function(n){if(null==n)return!0;if(w.isArray(n)||w.isString(n))return 0===n.length;for(var t in n)if(w.has(n,t))return!1;return!0},w.isElement=function(n){return!(!n||1!==n.nodeType)},w.isArray=x||function(n){return"[object Array]"==l.call(n)},w.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){w["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),w.isArguments(arguments)||(w.isArguments=function(n){return!(!n||!w.has(n,"callee"))}),w.isFunction=function(n){return"function"==typeof n},w.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},w.isNaN=function(n){return w.isNumber(n)&&n!=+n},w.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},w.isNull=function(n){return null===n},w.isUndefined=function(n){return void 0===n},w.has=function(n,t){return f.call(n,t)},w.noConflict=function(){return n._=t,this},w.identity=function(n){return n},w.times=function(n,t,r){for(var e=Array(n),u=0;n>u;u++)e[u]=t.call(r,u);return e},w.random=function(n,t){return null==t&&(t=n,n=0),n+(0|Math.random()*(t-n+1))};var T={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};T.unescape=w.invert(T.escape);var M={escape:RegExp("["+w.keys(T.escape).join("")+"]","g"),unescape:RegExp("("+w.keys(T.unescape).join("|")+")","g")};w.each(["escape","unescape"],function(n){w[n]=function(t){return null==t?"":(""+t).replace(M[n],function(t){return T[n][t]})}}),w.result=function(n,t){if(null==n)return null;var r=n[t];return w.isFunction(r)?r.call(n):r},w.mixin=function(n){A(w.functions(n),function(t){var r=w[t]=n[t];w.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),z.call(this,r.apply(w,n))}})};var N=0;w.uniqueId=function(n){var t=""+ ++N;return n?n+t:t},w.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var q=/(.)^/,B={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\t|\u2028|\u2029/g;w.template=function(n,t,r){r=w.defaults({},r,w.templateSettings);var e=RegExp([(r.escape||q).source,(r.interpolate||q).source,(r.evaluate||q).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,a,o){return i+=n.slice(u,o).replace(D,function(n){return"\\"+B[n]}),r&&(i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(i+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),a&&(i+="';\n"+a+"\n__p+='"),u=o+t.length,t}),i+="';\n",r.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var a=Function(r.variable||"obj","_",i)}catch(o){throw o.source=i,o}if(t)return a(t,w);var c=function(n){return a.call(this,n,w)};return c.source="function("+(r.variable||"obj")+"){\n"+i+"}",c},w.chain=function(n){return w(n).chain()};var z=function(n){return this._chain?w(n).chain():n};w.mixin(w),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];w.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],z.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];w.prototype[n]=function(){return z.call(this,t.apply(this._wrapped,arguments))}}),w.extend(w.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this); -------------------------------------------------------------------------------- /web/styles2.css: -------------------------------------------------------------------------------- 1 | /* Sticky footer styles */ 2 | html { 3 | position: relative; 4 | min-height: 100%; 5 | } 6 | 7 | body { 8 | /* Margin bottom by footer height */ 9 | margin-bottom: 28px; 10 | padding-top: 0; 11 | overflow-x: hidden; 12 | 13 | /*background:rgb(129,175,177) !important;*/ 14 | } 15 | 16 | #navbar { 17 | height:70px !important; 18 | min-height:70px !important; 19 | } 20 | 21 | .sidebar { 22 | overflow-x: hidden; 23 | width:240px; 24 | position: absolute; 25 | top: 70px; 26 | bottom: 4px; 27 | left: 0; 28 | z-index: 1000; 29 | padding: 20px; 30 | overflow-y: scroll; 31 | /* Scrollable contents if viewport is shorter than content. */ 32 | border-right: 1px solid #eee; 33 | font-size: 12px; 34 | line-height: 2.0em; 35 | } 36 | 37 | h3 { 38 | margin:0px !important; 39 | } 40 | 41 | .playlist-list li { 42 | cursor:pointer; 43 | } 44 | 45 | #track-table tr { 46 | cursor:pointer; 47 | } 48 | 49 | #main-wrapper { 50 | width:95%; 51 | } 52 | 53 | #the-track-list { 54 | height:600px; 55 | } 56 | 57 | .sidebar h4 { 58 | font-size:14px; 59 | text-transform:uppercase; 60 | padding:0px; 61 | margin-bottom:0px; 62 | margin-left:-10px; 63 | cursor:pointer; 64 | color:#666666; 65 | } 66 | 67 | #main-area { 68 | position:absolute; 69 | top: 75px; 70 | left:250px; 71 | bottom: 5px; 72 | right:15px; 73 | overflow-y: scroll; 74 | overflow-x: hidden; 75 | } 76 | 77 | .playlist-list { 78 | overflow-x: hidden; 79 | text-align: left; 80 | list-style:none; 81 | margin-left:0px; 82 | padding-left:0px; 83 | white-space:nowrap; 84 | } 85 | 86 | #footer { 87 | margin-top:10px; 88 | width: 90%; 89 | height: 18px; 90 | } 91 | 92 | #footer p { 93 | font-size:12px; 94 | } 95 | 96 | .sp-jumbotron-custom-inverse { 97 | /*background-image: url(images/background.jpg);*/ 98 | } 99 | 100 | #main { 101 | background-image: url(images/organize.jpg); 102 | } 103 | 104 | #playlists { 105 | display:none; 106 | font-size:18px; 107 | } 108 | 109 | #loaded { 110 | display:none; 111 | } 112 | 113 | #loading { 114 | } 115 | 116 | #loading-header { 117 | width:100%; 118 | overflow:hidden; 119 | white-space:nowrap; 120 | } 121 | 122 | #single-playlist { 123 | display:none; 124 | } 125 | 126 | 127 | @media screen and (min-width: 768px) { 128 | .sp-jumbotron-custom { 129 | } 130 | } 131 | 132 | 133 | .h1 { 134 | margin-bottom: 42px; /* (@padding-base-vertical * 7) */ 135 | } 136 | 137 | .top { 138 | margin-top:66px; 139 | position:relative; 140 | } 141 | 142 | img { 143 | margin: 0 auto; 144 | } 145 | 146 | h3 { 147 | font-weight: 600; /* @font-weight-semibold */ 148 | margin-top: 12px; 149 | } 150 | 151 | 152 | p { 153 | margin-bottom: 18px; /* a little more breathing room between feature tiles in mobile 154 | view) */ 155 | } 156 | 157 | @media screen and (min-width: 992px) { 158 | p { 159 | margin-bottom: 12px; /* reset to default */ 160 | } 161 | } 162 | 163 | #info { 164 | color:white; 165 | margin-top:20px; 166 | font-size:24px; 167 | } 168 | 169 | #oldinfo { 170 | font-size:18px; 171 | height:32px; 172 | text-align:left; 173 | } 174 | 175 | #linfo { 176 | font-size:18px; 177 | height:32px; 178 | text-align:left; 179 | } 180 | 181 | #playlist-title { 182 | text-transform:capitalize; 183 | margin-bottom:0px; 184 | } 185 | 186 | #playlist-sub-title { 187 | margin-bottom:10px; 188 | } 189 | 190 | #song-table tbody tr.selected { 191 | background-color:#81b71a; 192 | } 193 | 194 | .selected { 195 | background-color:#C3F0C8; 196 | } 197 | 198 | #song-table th { 199 | font-size:14px !important; 200 | } 201 | 202 | #song-table td { 203 | font-size:10px !important; 204 | } 205 | 206 | .nav-bar { 207 | height:72px !important; 208 | min-height:72px !important; 209 | } 210 | 211 | .fine-print { 212 | margin-bottom: 30px; /* (@padding-base-vertical * 5) */ 213 | } 214 | 215 | .go { 216 | margin-bottom:20px; 217 | } 218 | 219 | .playable:hover { 220 | color:#2ebd59; 221 | } 222 | 223 | .playing { 224 | color:#2ebd59; 225 | font-weight:bolder; 226 | } 227 | 228 | #save-button { 229 | margin-right:20px; 230 | font-size:24px; 231 | cursor:pointer; 232 | } 233 | 234 | 235 | #ttext { 236 | margin-top:20px; 237 | margin-bottom:30px; 238 | width: 80%; 239 | margin-left:auto; 240 | margin-right:auto; 241 | 242 | } 243 | 244 | #ttitle { 245 | color:white; 246 | } 247 | 248 | #jumbo-dialog { 249 | color:white; 250 | background: rgba(50,50,50, 0.3); 251 | border-radius:15px; 252 | } 253 | 254 | 255 | .hoverable { 256 | cursor: pointer; 257 | } 258 | 259 | #playlist-list { 260 | text-align: left 261 | } 262 | #playlist-list th { 263 | font-weight: bold 264 | } 265 | 266 | #min-bpm,#max-bpm { 267 | width:100px; 268 | } 269 | 270 | /* Loading spinner based on following stackoverflow answer: 271 | http://stackoverflow.com/questions/15982233/spinner-for-twitter-bootstrap-btn 272 | http://jsfiddle.net/oshybystyi/v04ag5ch/4/ */ 273 | 274 | .has-spinner .fa-spinner { 275 | opacity: 0; 276 | max-width: 0; 277 | 278 | -webkit-transition: opacity 0.25s, max-width 0.45s; 279 | -moz-transition: opacity 0.25s, max-width 0.45s; 280 | -o-transition: opacity 0.25s, max-width 0.45s; 281 | transition: opacity 0.25s, max-width 0.45s; /* Duration fixed since we animate additional hidden width */ 282 | } 283 | 284 | .has-spinner.active { 285 | cursor:progress; 286 | } 287 | 288 | .has-spinner.active .fa-spinner { 289 | opacity: 1; 290 | max-width: 50px; /* More than it will ever come, notice that this affects on animation duration */ 291 | } 292 | 293 | #tiny-track { 294 | font-size:10px; 295 | height:10px; 296 | margin-bottom:8px; 297 | } 298 | 299 | .stats { 300 | font-size:8px; 301 | margin-left:6px; 302 | } 303 | 304 | #uri-prompt { 305 | margin-top:20px; 306 | margin-left:auto; 307 | margin-right:auto; 308 | width:100%; 309 | padding-bottom:40px; 310 | color:#ffffff; 311 | font-size:24px; 312 | display:none; 313 | } 314 | 315 | #uri-go { 316 | } 317 | 318 | #uri-text { 319 | height:44px; 320 | } 321 | 322 | .work { 323 | display:none; 324 | } 325 | 326 | .err-txt { 327 | height:32px; 328 | } 329 | 330 | #favs { 331 | display:none; 332 | } 333 | 334 | .fav-text { 335 | text-transform:capitalize; 336 | font-weight:bolder; 337 | } 338 | 339 | .loading-text { 340 | margin:20px; 341 | } 342 | 343 | #what-label { 344 | text-align:left; 345 | color:#EEEEEE; 346 | font-size:28px; 347 | 348 | } 349 | 350 | #the-plots { 351 | } 352 | 353 | #the-plot { 354 | margin-top:20px; 355 | } 356 | 357 | #plot-controls { 358 | margin-top:5px; 359 | margin-left:10px; 360 | } 361 | #plot-controls label { 362 | font-weight:normal; 363 | } 364 | 365 | 366 | #plot-buttons { 367 | margin-top:20px; 368 | } 369 | 370 | .nbtn { 371 | font-size: 10px; 372 | line-height: 1.5; 373 | border-radius: 5px; 374 | padding: 6px 6px 6px; 375 | transition: background-color .15s ease,border-color .15s ease,color .15s 376 | ease; 377 | border-width: 0; 378 | letter-spacing: 1.2px; 379 | //min-width: 130px; 380 | //text-transform: uppercase; 381 | white-space: normal; 382 | } 383 | 384 | a#the-track-table_previous.paginate_button { 385 | padding-right:10px !important; 386 | margin-right:10px !important; 387 | } 388 | 389 | a#the-track-table_next.paginate_button { 390 | padding-right:10px !important; 391 | margin-right:10px !important; 392 | 393 | } 394 | 395 | .goog-custom-button { 396 | } 397 | 398 | #staging-playlist-name { 399 | font-size:32px; 400 | } 401 | 402 | .track-play { 403 | font-size:24px; 404 | visibility:hidden; 405 | } 406 | 407 | .google-visualization-table-tr-over .track-play { 408 | color: rgba(59, 153, 252, 1.0); 409 | visibility:visible; 410 | } 411 | 412 | .track-select { 413 | text-align: center; 414 | transform:scale(1.5); 415 | } 416 | 417 | .google-visualization-table-table tr td .glyphicon-pause { 418 | visibility:visible; 419 | color: rgba(59, 153, 252, 1.0); 420 | } 421 | 422 | .axis-select { 423 | } 424 | 425 | .track-header-cell, .track-table-cell { 426 | font-size:10px; 427 | } 428 | 429 | #staging-empty { 430 | margin-top:20px; 431 | } 432 | --------------------------------------------------------------------------------