├── LICENSE ├── README.md ├── bower_components ├── polymer │ ├── .bower.json │ ├── LICENSE.txt │ ├── bower.json │ ├── build.log │ ├── polymer-micro.html │ ├── polymer-mini.html │ └── polymer.html ├── webaudio-controls │ ├── .bower.json │ ├── LICENSE │ ├── README.md │ ├── bower.json │ ├── img │ │ ├── LittlePhatty.png │ │ ├── LittlePhatty_sample.png │ │ ├── bg.png │ │ ├── defknob2.png │ │ ├── demo.png │ │ ├── hsliderbody.png │ │ ├── hsliderknob.png │ │ ├── hsw5.png │ │ ├── sample3.png │ │ ├── switch_toggle.png │ │ ├── testknob.png │ │ ├── vernier.png │ │ ├── vsliderbody.png │ │ └── vsliderknob.png │ ├── sample1.html │ ├── sample2.html │ ├── sample3.html │ ├── sample4.html │ └── webaudio-controls.html └── webcomponentsjs │ ├── .bower.json │ ├── CustomElements.js │ ├── CustomElements.min.js │ ├── HTMLImports.js │ ├── HTMLImports.min.js │ ├── MutationObserver.js │ ├── MutationObserver.min.js │ ├── README.md │ ├── ShadowDOM.js │ ├── ShadowDOM.min.js │ ├── bower.json │ ├── build.log │ ├── package.json │ ├── webcomponents-lite.js │ ├── webcomponents-lite.min.js │ ├── webcomponents.js │ └── webcomponents.min.js └── index.html /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 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 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, 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 THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vowelsynth 2 | 3 | demo page is available at : 4 | [https://g200kg.github.io/vowelsynth/](https://g200kg.github.io/vowelsynth/) 5 | 6 | # License 7 | 8 | Licensed under MIT License. 9 | -------------------------------------------------------------------------------- /bower_components/polymer/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "polymer", 3 | "version": "1.6.1", 4 | "main": [ 5 | "polymer.html", 6 | "polymer-mini.html", 7 | "polymer-micro.html" 8 | ], 9 | "license": "http://polymer.github.io/LICENSE.txt", 10 | "ignore": [ 11 | "/.*", 12 | "/test/", 13 | "/util/", 14 | "/explainer/", 15 | "gulpfile.js", 16 | "PRIMER.md", 17 | "CONTRIBUTING.md", 18 | "CHANGELOG.md" 19 | ], 20 | "authors": [ 21 | "The Polymer Authors (http://polymer.github.io/AUTHORS.txt)" 22 | ], 23 | "repository": { 24 | "type": "git", 25 | "url": "https://github.com/Polymer/polymer.git" 26 | }, 27 | "dependencies": { 28 | "webcomponentsjs": "^0.7.20" 29 | }, 30 | "devDependencies": { 31 | "web-component-tester": "*", 32 | "iron-component-page": "polymerElements/iron-component-page#^1.1.6" 33 | }, 34 | "private": true, 35 | "homepage": "https://github.com/Polymer/polymer", 36 | "_release": "1.6.1", 37 | "_resolution": { 38 | "type": "version", 39 | "tag": "v1.6.1", 40 | "commit": "1f197d9d7874b1e5808b2a5c26f34446a7d912fc" 41 | }, 42 | "_source": "git://github.com/Polymer/polymer.git", 43 | "_target": "^1.6.1", 44 | "_originalSource": "Polymer/polymer", 45 | "_direct": true 46 | } -------------------------------------------------------------------------------- /bower_components/polymer/LICENSE.txt: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2014 The Polymer Authors. All rights reserved. 2 | // 3 | // Redistribution and use in source and binary forms, with or without 4 | // modification, are permitted provided that the following conditions are 5 | // met: 6 | // 7 | // * Redistributions of source code must retain the above copyright 8 | // notice, this list of conditions and the following disclaimer. 9 | // * Redistributions in binary form must reproduce the above 10 | // copyright notice, this list of conditions and the following disclaimer 11 | // in the documentation and/or other materials provided with the 12 | // distribution. 13 | // * Neither the name of Google Inc. nor the names of its 14 | // contributors may be used to endorse or promote products derived from 15 | // this software without specific prior written permission. 16 | // 17 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20 | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21 | // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /bower_components/polymer/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "polymer", 3 | "version": "1.6.1", 4 | "main": [ 5 | "polymer.html", 6 | "polymer-mini.html", 7 | "polymer-micro.html" 8 | ], 9 | "license": "http://polymer.github.io/LICENSE.txt", 10 | "ignore": [ 11 | "/.*", 12 | "/test/", 13 | "/util/", 14 | "/explainer/", 15 | "gulpfile.js", 16 | "PRIMER.md", 17 | "CONTRIBUTING.md", 18 | "CHANGELOG.md" 19 | ], 20 | "authors": [ 21 | "The Polymer Authors (http://polymer.github.io/AUTHORS.txt)" 22 | ], 23 | "repository": { 24 | "type": "git", 25 | "url": "https://github.com/Polymer/polymer.git" 26 | }, 27 | "dependencies": { 28 | "webcomponentsjs": "^0.7.20" 29 | }, 30 | "devDependencies": { 31 | "web-component-tester": "*", 32 | "iron-component-page": "polymerElements/iron-component-page#^1.1.6" 33 | }, 34 | "private": true 35 | } 36 | -------------------------------------------------------------------------------- /bower_components/polymer/build.log: -------------------------------------------------------------------------------- 1 | BUILD LOG 2 | --------- 3 | Build Time: 2016-08-01T11:30:14-0700 4 | 5 | NODEJS INFORMATION 6 | ================== 7 | nodejs: v6.3.1 8 | abbrev: 1.0.7 9 | accepts: 1.3.3 10 | accessibility-developer-tools: 2.10.0 11 | acorn-jsx: 3.0.1 12 | adm-zip: 0.4.7 13 | after: 0.8.1 14 | agent-base: 2.0.1 15 | align-text: 0.1.4 16 | amdefine: 1.0.0 17 | ansi-cyan: 0.1.1 18 | ansi-escapes: 1.4.0 19 | ansi-red: 0.1.1 20 | ansi-regex: 2.0.0 21 | ansi-styles: 2.2.0 22 | ansi-wrap: 0.1.0 23 | append-field: 0.1.0 24 | archiver: 0.14.4 25 | archy: 1.0.0 26 | argparse: 1.0.7 27 | arr-diff: 1.1.0 28 | arr-flatten: 1.0.1 29 | arr-union: 2.1.0 30 | array-differ: 1.0.0 31 | array-find-index: 1.0.1 32 | array-flatten: 1.1.1 33 | array-slice: 0.2.3 34 | array-union: 1.0.2 35 | array-uniq: 1.0.2 36 | arraybuffer.slice: 0.0.6 37 | arrify: 1.0.1 38 | asap: 2.0.3 39 | asn1: 0.1.11 40 | assert-plus: 0.1.5 41 | assertion-error: 1.0.2 42 | async: 0.9.2 43 | aws-sign2: 0.5.0 44 | aws4: 1.4.1 45 | babel-polyfill: 6.7.2 46 | babel-regenerator-runtime: 6.5.0 47 | babel-runtime: 5.8.35 48 | backo2: 1.0.2 49 | backoff: 2.5.0 50 | balanced-match: 0.3.0 51 | base64-js: 0.0.8 52 | base64-arraybuffer: 0.1.2 53 | base64id: 0.1.0 54 | beeper: 1.1.0 55 | benchmark: 1.0.0 56 | better-assert: 1.0.2 57 | binaryextensions: 1.0.0 58 | bl: 0.9.5 59 | blob: 0.0.4 60 | bluebird: 3.4.1 61 | body-parser: 1.15.2 62 | boom: 0.4.2 63 | boxen: 0.3.1 64 | brace-expansion: 1.1.3 65 | browserstack: 1.5.0 66 | buffer-crc32: 0.2.5 67 | bufferstreams: 1.1.1 68 | builtin-modules: 1.1.1 69 | busboy: 0.2.13 70 | bytes: 2.4.0 71 | caller-path: 0.1.0 72 | callsite: 1.0.0 73 | callsites: 0.2.0 74 | camelcase: 2.1.1 75 | camelcase-keys: 2.1.0 76 | capture-stack-trace: 1.0.0 77 | caseless: 0.8.0 78 | center-align: 0.1.3 79 | chai: 3.5.0 80 | chalk: 1.1.1 81 | circular-json: 0.3.1 82 | cleankill: 1.0.3 83 | cli-cursor: 1.0.2 84 | cli-width: 2.1.0 85 | cliui: 2.1.0 86 | clone: 1.0.2 87 | clone-stats: 0.0.1 88 | code-point-at: 1.0.0 89 | color-convert: 1.0.0 90 | combined-stream: 0.0.7 91 | commander: 2.3.0 92 | component-bind: 1.0.0 93 | component-emitter: 1.1.2 94 | component-inherit: 0.0.3 95 | compress-commons: 0.2.9 96 | concat-map: 0.0.1 97 | concat-stream: 1.5.1 98 | configstore: 2.0.0 99 | content-disposition: 0.5.1 100 | content-type: 1.0.2 101 | cookie: 0.3.1 102 | cookie-signature: 1.0.6 103 | core-js: 2.2.0 104 | core-util-is: 1.0.2 105 | crc: 3.2.1 106 | crc32-stream: 0.3.4 107 | create-error-class: 2.0.1 108 | cryptiles: 0.2.2 109 | csv: 0.4.6 110 | csv-generate: 0.0.6 111 | csv-parse: 1.1.7 112 | csv-stringify: 0.0.8 113 | ctype: 0.5.3 114 | d: 0.1.1 115 | dashdash: 1.14.0 116 | debug: 2.2.0 117 | debuglog: 1.0.1 118 | decamelize: 1.2.0 119 | deep-eql: 0.1.3 120 | deep-extend: 0.4.1 121 | deep-is: 0.1.3 122 | defaults: 1.0.3 123 | del: 2.2.1 124 | delayed-stream: 0.0.5 125 | depd: 1.1.0 126 | deprecated: 0.0.1 127 | destroy: 1.0.4 128 | dezalgo: 1.0.3 129 | dicer: 0.2.5 130 | diff: 1.4.0 131 | doctrine: 1.2.2 132 | dom-serializer: 0.1.0 133 | dom5: 1.3.1 134 | domelementtype: 1.3.0 135 | domhandler: 2.3.0 136 | domutils: 1.5.1 137 | dot-prop: 2.4.0 138 | dtrace-provider: 0.6.0 139 | duplexer: 0.1.1 140 | duplexer2: 0.0.2 141 | ecc-jsbn: 0.1.1 142 | ee-first: 1.1.1 143 | encodeurl: 1.0.1 144 | end-of-stream: 0.1.5 145 | engine.io: 1.6.11 146 | engine.io-client: 1.6.11 147 | engine.io-parser: 1.2.4 148 | entities: 1.1.1 149 | error-ex: 1.3.0 150 | es5-ext: 0.10.11 151 | es6-iterator: 2.0.0 152 | es6-map: 0.1.4 153 | es6-promise: 2.3.0 154 | es6-set: 0.1.4 155 | es6-symbol: 3.0.2 156 | es6-weak-map: 2.0.1 157 | escape-html: 1.0.3 158 | escape-regexp-component: 1.0.2 159 | escape-string-regexp: 1.0.5 160 | escope: 3.6.0 161 | eslint-plugin-html: 1.5.1 162 | espree: 3.1.7 163 | esrecurse: 4.1.0 164 | estraverse: 4.2.0 165 | esutils: 2.0.2 166 | etag: 1.7.0 167 | event-emitter: 0.3.4 168 | exit-hook: 1.1.1 169 | express: 4.14.0 170 | extend: 2.0.1 171 | extend-shallow: 1.1.4 172 | extsprintf: 1.2.0 173 | fancy-log: 1.2.0 174 | fast-levenshtein: 1.1.3 175 | fd-slicer: 1.0.1 176 | figures: 1.7.0 177 | file-entry-cache: 1.3.1 178 | filled-array: 1.1.0 179 | find-index: 0.1.1 180 | finalhandler: 0.5.0 181 | find-up: 1.1.2 182 | first-chunk-stream: 1.0.0 183 | findup-sync: 0.3.0 184 | flagged-respawn: 0.3.1 185 | forever-agent: 0.5.2 186 | flat-cache: 1.2.1 187 | form-data: 0.2.0 188 | formatio: 1.1.1 189 | formidable: 1.0.17 190 | forwarded: 0.1.0 191 | freeport: 1.0.5 192 | fresh: 0.3.0 193 | fs.realpath: 1.0.0 194 | gaze: 0.5.2 195 | generate-function: 2.0.0 196 | generate-object-property: 1.2.0 197 | get-stdin: 4.0.1 198 | getpass: 0.1.6 199 | github-url-from-git: 1.4.0 200 | github-url-from-username-repo: 1.0.2 201 | glob: 7.0.5 202 | glob-stream: 3.1.18 203 | glob-watcher: 0.0.6 204 | glob2base: 0.0.12 205 | globals: 9.9.0 206 | globby: 5.0.0 207 | globule: 0.1.0 208 | glogg: 1.0.0 209 | got: 5.5.0 210 | graceful-fs: 4.1.3 211 | graceful-readlink: 1.0.1 212 | growl: 1.9.2 213 | gulp-audit: 1.0.0 214 | gulp-eslint: 2.1.0 215 | gulp-rename: 1.2.2 216 | gulp-replace: 0.5.4 217 | gulp-util: 3.0.7 218 | gulp-vulcanize: 6.1.0 219 | gulplog: 1.0.0 220 | handle-thing: 1.2.4 221 | has-ansi: 2.0.0 222 | has-binary: 0.1.7 223 | has-color: 0.1.7 224 | has-cors: 1.1.0 225 | has-gulplog: 0.1.0 226 | hoek: 0.9.1 227 | hpack.js: 2.1.4 228 | htmlparser2: 3.9.1 229 | hosted-git-info: 2.1.4 230 | hawk: 1.1.1 231 | http-deceiver: 1.2.7 232 | http-errors: 1.5.0 233 | http-signature: 0.11.0 234 | https-proxy-agent: 1.0.0 235 | hydrolysis: 1.23.1 236 | iconv-lite: 0.4.13 237 | ignore: 3.1.3 238 | imurmurhash: 0.1.4 239 | indent-string: 2.1.0 240 | indexof: 0.0.1 241 | inflight: 1.0.4 242 | inherits: 2.0.1 243 | ini: 1.3.4 244 | inquirer: 0.12.0 245 | interpret: 1.0.0 246 | ipaddr.js: 1.1.1 247 | is-absolute: 0.1.7 248 | is-arrayish: 0.2.1 249 | is-buffer: 1.1.3 250 | is-builtin-module: 1.0.0 251 | is-finite: 1.0.1 252 | is-fullwidth-code-point: 1.0.0 253 | is-my-json-valid: 2.13.1 254 | is-npm: 1.0.0 255 | is-obj: 1.0.0 256 | is-path-cwd: 1.0.0 257 | is-path-in-cwd: 1.0.0 258 | is-path-inside: 1.0.0 259 | is-plain-obj: 1.1.0 260 | is-property: 1.0.2 261 | is-redirect: 1.0.0 262 | is-relative: 0.1.3 263 | is-resolvable: 1.0.0 264 | is-retry-allowed: 1.0.0 265 | is-stream: 1.0.1 266 | is-typedarray: 1.0.0 267 | is-utf8: 0.2.1 268 | isarray: 1.0.0 269 | isexe: 1.1.2 270 | isstream: 0.1.2 271 | istextorbinary: 1.0.2 272 | jju: 1.3.0 273 | jodid25519: 1.0.2 274 | jsbn: 0.1.0 275 | json-parse-helpfulerror: 1.0.3 276 | json-schema: 0.2.2 277 | json-stable-stringify: 1.0.1 278 | json-stringify-safe: 5.0.1 279 | json3: 3.2.6 280 | jsonify: 0.0.0 281 | jsonpointer: 2.0.0 282 | jsprim: 1.3.0 283 | keep-alive-agent: 0.0.1 284 | kind-of: 1.1.0 285 | latest-version: 2.0.0 286 | launchpad: 0.5.3 287 | lazy-cache: 1.0.3 288 | lazypipe: 1.0.1 289 | lazystream: 0.1.0 290 | levn: 0.3.0 291 | liftoff: 2.2.0 292 | load-json-file: 1.1.0 293 | lodash: 1.0.2 294 | lodash._basecopy: 3.0.1 295 | lodash._basetostring: 3.0.1 296 | lodash._basevalues: 3.0.0 297 | lodash._getnative: 3.9.1 298 | lodash._isiterateecall: 3.0.9 299 | lodash._reescape: 3.0.0 300 | lodash._reevaluate: 3.0.0 301 | lodash._reinterpolate: 3.0.0 302 | lodash._root: 3.0.1 303 | lodash.escape: 3.2.0 304 | lodash.isarguments: 3.0.8 305 | lodash.isarray: 3.0.4 306 | lodash.keys: 3.1.2 307 | lodash.restparam: 3.6.1 308 | lodash.template: 3.6.2 309 | lodash.templatesettings: 3.1.1 310 | lolex: 1.3.2 311 | longest: 1.0.1 312 | loud-rejection: 1.3.0 313 | lowercase-keys: 1.0.0 314 | lru-cache: 2.7.3 315 | map-obj: 1.0.1 316 | media-typer: 0.3.0 317 | meow: 3.7.0 318 | merge-descriptors: 1.0.1 319 | methods: 1.1.2 320 | mime-db: 1.23.0 321 | mime-types: 2.1.11 322 | minimalistic-assert: 1.0.0 323 | minimatch: 3.0.0 324 | minimist: 1.2.0 325 | moment: 2.14.1 326 | ms: 0.7.1 327 | multipipe: 0.1.2 328 | multer: 1.1.0 329 | mute-stream: 0.0.5 330 | mv: 2.1.1 331 | nan: 2.4.0 332 | negotiator: 0.6.1 333 | node-int64: 0.3.3 334 | node-status-codes: 1.0.0 335 | nodegit-promise: 4.0.0 336 | nomnom: 1.8.1 337 | normalize-package-data: 2.3.5 338 | number-is-nan: 1.0.0 339 | oauth-sign: 0.5.0 340 | object-assign: 4.0.1 341 | object-component: 0.0.3 342 | obuf: 1.1.1 343 | on-finished: 2.3.0 344 | once: 1.3.3 345 | onetime: 1.1.0 346 | optionator: 0.8.1 347 | options: 0.0.6 348 | orchestrator: 0.3.7 349 | ordered-read-streams: 0.1.0 350 | os-homedir: 1.0.1 351 | os-tmpdir: 1.0.1 352 | osenv: 0.1.3 353 | package-json: 2.3.1 354 | parse-json: 2.2.0 355 | parse5: 1.5.1 356 | parsejson: 0.0.1 357 | parseqs: 0.0.2 358 | parseuri: 0.0.4 359 | parseurl: 1.3.1 360 | path-exists: 2.1.0 361 | path-is-absolute: 1.0.0 362 | path-is-inside: 1.0.1 363 | path-posix: 1.0.0 364 | path-to-regexp: 0.1.7 365 | path-type: 1.1.0 366 | pend: 1.2.0 367 | pify: 2.3.0 368 | pinkie: 2.0.4 369 | pinkie-promise: 2.0.0 370 | plist: 1.2.0 371 | plugin-error: 0.1.2 372 | pluralize: 1.2.1 373 | polyclean: 1.3.1 374 | precond: 0.2.3 375 | prelude-ls: 1.1.2 376 | prepend-http: 1.0.3 377 | pretty-hrtime: 1.0.2 378 | process-nextick-args: 1.0.6 379 | progress: 1.1.8 380 | promisify-node: 0.4.0 381 | proxy-addr: 1.1.2 382 | pseudomap: 1.0.2 383 | q: 1.4.1 384 | qs: 6.2.0 385 | range-parser: 1.2.0 386 | raw-body: 2.1.7 387 | read-all-stream: 3.1.0 388 | read-installed: 3.1.5 389 | read-package-json: 1.3.3 390 | read-pkg: 1.1.0 391 | read-pkg-up: 1.0.1 392 | readable-stream: 2.0.6 393 | readdir-scoped-modules: 1.0.2 394 | readline2: 1.0.1 395 | rechoir: 0.6.2 396 | redent: 1.0.0 397 | registry-url: 3.0.3 398 | repeat-string: 1.5.4 399 | repeating: 2.0.0 400 | replace-ext: 0.0.1 401 | replacestream: 4.0.0 402 | request: 2.51.0 403 | require-uncached: 1.0.2 404 | resolve: 1.1.7 405 | resolve-from: 1.0.1 406 | restore-cursor: 1.0.1 407 | right-align: 0.1.3 408 | run-async: 0.1.0 409 | run-sequence: 1.2.2 410 | safe-json-stringify: 1.0.3 411 | rx-lite: 3.1.2 412 | samsam: 1.1.2 413 | sauce-connect-launcher: 0.14.0 414 | select-hose: 2.0.0 415 | semver-diff: 2.1.0 416 | send: 0.11.1 417 | sequencify: 0.0.7 418 | serve-static: 1.11.1 419 | serve-waterfall: 1.1.1 420 | server-destroy: 1.0.1 421 | setprototypeof: 1.0.1 422 | sigmund: 1.0.1 423 | signal-exit: 2.1.2 424 | sinon: 1.17.5 425 | sinon-chai: 2.8.0 426 | slice-ansi: 0.0.4 427 | slide: 1.1.6 428 | sntp: 0.2.4 429 | socket.io: 1.4.8 430 | socket.io-adapter: 0.4.0 431 | socket.io-parser: 2.2.6 432 | source-map: 0.2.0 433 | sparkles: 1.0.0 434 | spdx-correct: 1.0.2 435 | spdx-exceptions: 1.0.4 436 | spdx-expression-parse: 1.0.2 437 | socket.io-client: 1.4.8 438 | spdx-license-ids: 1.2.0 439 | spdy: 3.3.4 440 | spdy-transport: 2.0.11 441 | sprintf-js: 1.0.3 442 | stacky: 1.3.1 443 | statuses: 1.3.0 444 | stream-combiner: 0.2.2 445 | stream-consume: 0.1.0 446 | stream-transform: 0.1.1 447 | streamsearch: 0.1.2 448 | string-width: 1.0.1 449 | string_decoder: 0.10.31 450 | stringstream: 0.0.5 451 | strip-ansi: 3.0.1 452 | strip-bom: 2.0.0 453 | supports-color: 2.0.0 454 | table: 3.7.8 455 | tar-stream: 1.1.5 456 | temp: 0.8.3 457 | test-fixture: 1.1.1 458 | text-table: 0.2.0 459 | textextensions: 1.0.1 460 | through: 2.3.8 461 | through2: 2.0.1 462 | tildify: 1.1.2 463 | time-stamp: 1.0.0 464 | timed-out: 2.0.0 465 | to-array: 0.1.4 466 | to-iso-string: 0.0.2 467 | tough-cookie: 2.3.1 468 | trim-newlines: 1.0.0 469 | tryit: 1.0.2 470 | tunnel-agent: 0.4.3 471 | tv4: 1.2.7 472 | tweetnacl: 0.13.3 473 | type-check: 0.3.2 474 | type-detect: 1.0.0 475 | type-is: 1.6.13 476 | typedarray: 0.0.6 477 | uglify-to-browserify: 1.0.2 478 | ultron: 1.0.2 479 | underscore: 1.6.0 480 | underscore.string: 3.0.3 481 | unique-stream: 1.0.0 482 | unpipe: 1.0.0 483 | unzip-response: 1.0.0 484 | update-notifier: 0.6.3 485 | urijs: 1.16.1 486 | url-parse-lax: 1.0.0 487 | utf8: 2.1.0 488 | util: 0.10.3 489 | util-deprecate: 1.0.2 490 | util-extend: 1.0.3 491 | utils-merge: 1.0.0 492 | uuid: 2.0.1 493 | v8flags: 2.0.11 494 | validate-npm-package-license: 3.0.1 495 | vargs: 0.1.0 496 | vary: 1.1.0 497 | vasync: 1.6.3 498 | verror: 1.6.1 499 | vinyl: 0.5.3 500 | vinyl-fs: 0.3.14 501 | wbuf: 1.7.2 502 | wct-local: 2.0.8 503 | wct-sauce: 1.8.4 504 | widest-line: 1.0.0 505 | window-size: 0.1.0 506 | wordwrap: 1.0.0 507 | wrappy: 1.0.1 508 | write: 0.2.1 509 | write-file-atomic: 1.1.4 510 | ws: 1.1.0 511 | xdg-basedir: 2.0.0 512 | xmlbuilder: 4.0.0 513 | xmldom: 0.1.22 514 | xmlhttprequest-ssl: 1.5.1 515 | xregexp: 3.1.1 516 | xtend: 4.0.1 517 | yallist: 2.0.0 518 | yargs: 3.10.0 519 | yauzl: 2.6.0 520 | yeast: 0.1.2 521 | zip-stream: 0.5.2 522 | acorn: 3.3.0 523 | bunyan: 1.8.1 524 | dateformat: 1.0.12 525 | escodegen: 1.8.0 526 | eslint: 2.13.1 527 | esprima: 2.7.2 528 | gulp: 3.9.1 529 | har-validator: 2.0.6 530 | jade: 0.26.3 531 | js-yaml: 3.6.1 532 | mime: 1.3.4 533 | mkdirp: 0.5.1 534 | mocha: 2.5.3 535 | ncp: 2.0.0 536 | node-uuid: 1.4.7 537 | nopt: 3.0.6 538 | rc: 1.1.6 539 | restify: 4.1.1 540 | rimraf: 2.5.4 541 | selenium-standalone: 5.5.0 542 | semver: 4.3.6 543 | shelljs: 0.6.0 544 | sshpk: 1.9.2 545 | strip-indent: 1.0.1 546 | strip-json-comments: 1.0.4 547 | uglify-js: 2.6.2 548 | user-home: 1.1.1 549 | vulcanize: 1.14.7 550 | wd: 0.3.12 551 | web-component-tester: 4.3.1 552 | which: 1.2.10 553 | 554 | REPO REVISIONS 555 | ============== 556 | polymer: 4abd53c716e32de2bbac4f87f5b01ce007119f04 557 | 558 | BUILD HASHES 559 | ============ 560 | polymer-mini.html: 7b55678ec0ca21f4a1af9423262f367d87a9b739 561 | polymer-micro.html: ff9824cb1fb68b011f3fe0de7b54474e65b52da7 562 | polymer.html: 2df3f2cd58aef56f63fc472e70c61d646adf801e -------------------------------------------------------------------------------- /bower_components/polymer/polymer-micro.html: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 730 | 731 | 732 | 733 | -------------------------------------------------------------------------------- /bower_components/webaudio-controls/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webaudio-controls", 3 | "homepage": "https://github.com/g200kg/webaudio-controls", 4 | "authors": [ 5 | "Tatsuya Shinyagaito " 6 | ], 7 | "description": "GUI parts library for Web Music Apps using [Polymer]", 8 | "main": "webaudio-controls.html", 9 | "keywords": [ 10 | "gui", 11 | "web", 12 | "music", 13 | "knob", 14 | "polymer" 15 | ], 16 | "license": "Apache License, Version 2.0", 17 | "ignore": [ 18 | "**/.*", 19 | "node_modules", 20 | "bower_components", 21 | "test", 22 | "tests" 23 | ], 24 | "dependencies": { 25 | "polymer": "Polymer/polymer#^1.4.0" 26 | }, 27 | "_release": "15e9e22aa8", 28 | "_resolution": { 29 | "type": "branch", 30 | "branch": "master", 31 | "commit": "15e9e22aa873f42be2516c9aae1576030d552305" 32 | }, 33 | "_source": "git://github.com/g200kg/webaudio-controls.git", 34 | "_target": "*", 35 | "_originalSource": "g200kg/webaudio-controls", 36 | "_direct": true 37 | } -------------------------------------------------------------------------------- /bower_components/webaudio-controls/LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, and 10 | distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by the copyright 13 | owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all other entities 16 | that control, are controlled by, or are under common control with that entity. 17 | For the purposes of this definition, "control" means (i) the power, direct or 18 | indirect, to cause the direction or management of such entity, whether by 19 | contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the 20 | outstanding shares, or (iii) beneficial ownership of such entity. 21 | 22 | "You" (or "Your") shall mean an individual or Legal Entity exercising 23 | permissions granted by this License. 24 | 25 | "Source" form shall mean the preferred form for making modifications, including 26 | but not limited to software source code, documentation source, and configuration 27 | files. 28 | 29 | "Object" form shall mean any form resulting from mechanical transformation or 30 | translation of a Source form, including but not limited to compiled object code, 31 | generated documentation, and conversions to other media types. 32 | 33 | "Work" shall mean the work of authorship, whether in Source or Object form, made 34 | available under the License, as indicated by a copyright notice that is included 35 | in or attached to the work (an example is provided in the Appendix below). 36 | 37 | "Derivative Works" shall mean any work, whether in Source or Object form, that 38 | is based on (or derived from) the Work and for which the editorial revisions, 39 | annotations, elaborations, or other modifications represent, as a whole, an 40 | original work of authorship. For the purposes of this License, Derivative Works 41 | shall not include works that remain separable from, or merely link (or bind by 42 | name) to the interfaces of, the Work and Derivative Works thereof. 43 | 44 | "Contribution" shall mean any work of authorship, including the original version 45 | of the Work and any modifications or additions to that Work or Derivative Works 46 | thereof, that is intentionally submitted to Licensor for inclusion in the Work 47 | by the copyright owner or by an individual or Legal Entity authorized to submit 48 | on behalf of the copyright owner. For the purposes of this definition, 49 | "submitted" means any form of electronic, verbal, or written communication sent 50 | to the Licensor or its representatives, including but not limited to 51 | communication on electronic mailing lists, source code control systems, and 52 | issue tracking systems that are managed by, or on behalf of, the Licensor for 53 | the purpose of discussing and improving the Work, but excluding communication 54 | that is conspicuously marked or otherwise designated in writing by the copyright 55 | owner as "Not a Contribution." 56 | 57 | "Contributor" shall mean Licensor and any individual or Legal Entity on behalf 58 | of whom a Contribution has been received by Licensor and subsequently 59 | incorporated within the Work. 60 | 61 | 2. Grant of Copyright License. 62 | 63 | Subject to the terms and conditions of this License, each Contributor hereby 64 | grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, 65 | irrevocable copyright license to reproduce, prepare Derivative Works of, 66 | publicly display, publicly perform, sublicense, and distribute the Work and such 67 | Derivative Works in Source or Object form. 68 | 69 | 3. Grant of Patent License. 70 | 71 | Subject to the terms and conditions of this License, each Contributor hereby 72 | grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, 73 | irrevocable (except as stated in this section) patent license to make, have 74 | made, use, offer to sell, sell, import, and otherwise transfer the Work, where 75 | such license applies only to those patent claims licensable by such Contributor 76 | that are necessarily infringed by their Contribution(s) alone or by combination 77 | of their Contribution(s) with the Work to which such Contribution(s) was 78 | submitted. If You institute patent litigation against any entity (including a 79 | cross-claim or counterclaim in a lawsuit) alleging that the Work or a 80 | Contribution incorporated within the Work constitutes direct or contributory 81 | patent infringement, then any patent licenses granted to You under this License 82 | for that Work shall terminate as of the date such litigation is filed. 83 | 84 | 4. Redistribution. 85 | 86 | You may reproduce and distribute copies of the Work or Derivative Works thereof 87 | in any medium, with or without modifications, and in Source or Object form, 88 | provided that You meet the following conditions: 89 | 90 | You must give any other recipients of the Work or Derivative Works a copy of 91 | this License; and 92 | You must cause any modified files to carry prominent notices stating that You 93 | changed the files; and 94 | You must retain, in the Source form of any Derivative Works that You distribute, 95 | all copyright, patent, trademark, and attribution notices from the Source form 96 | of the Work, excluding those notices that do not pertain to any part of the 97 | Derivative Works; and 98 | If the Work includes a "NOTICE" text file as part of its distribution, then any 99 | Derivative Works that You distribute must include a readable copy of the 100 | attribution notices contained within such NOTICE file, excluding those notices 101 | that do not pertain to any part of the Derivative Works, in at least one of the 102 | following places: within a NOTICE text file distributed as part of the 103 | Derivative Works; within the Source form or documentation, if provided along 104 | with the Derivative Works; or, within a display generated by the Derivative 105 | Works, if and wherever such third-party notices normally appear. The contents of 106 | the NOTICE file are for informational purposes only and do not modify the 107 | License. You may add Your own attribution notices within Derivative Works that 108 | You distribute, alongside or as an addendum to the NOTICE text from the Work, 109 | provided that such additional attribution notices cannot be construed as 110 | modifying the License. 111 | You may add Your own copyright statement to Your modifications and may provide 112 | additional or different license terms and conditions for use, reproduction, or 113 | distribution of Your modifications, or for any such Derivative Works as a whole, 114 | provided Your use, reproduction, and distribution of the Work otherwise complies 115 | with the conditions stated in this License. 116 | 117 | 5. Submission of Contributions. 118 | 119 | Unless You explicitly state otherwise, any Contribution intentionally submitted 120 | for inclusion in the Work by You to the Licensor shall be under the terms and 121 | conditions of this License, without any additional terms or conditions. 122 | Notwithstanding the above, nothing herein shall supersede or modify the terms of 123 | any separate license agreement you may have executed with Licensor regarding 124 | such Contributions. 125 | 126 | 6. Trademarks. 127 | 128 | This License does not grant permission to use the trade names, trademarks, 129 | service marks, or product names of the Licensor, except as required for 130 | reasonable and customary use in describing the origin of the Work and 131 | reproducing the content of the NOTICE file. 132 | 133 | 7. Disclaimer of Warranty. 134 | 135 | Unless required by applicable law or agreed to in writing, Licensor provides the 136 | Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, 137 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, 138 | including, without limitation, any warranties or conditions of TITLE, 139 | NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are 140 | solely responsible for determining the appropriateness of using or 141 | redistributing the Work and assume any risks associated with Your exercise of 142 | permissions under this License. 143 | 144 | 8. Limitation of Liability. 145 | 146 | In no event and under no legal theory, whether in tort (including negligence), 147 | contract, or otherwise, unless required by applicable law (such as deliberate 148 | and grossly negligent acts) or agreed to in writing, shall any Contributor be 149 | liable to You for damages, including any direct, indirect, special, incidental, 150 | or consequential damages of any character arising as a result of this License or 151 | out of the use or inability to use the Work (including but not limited to 152 | damages for loss of goodwill, work stoppage, computer failure or malfunction, or 153 | any and all other commercial damages or losses), even if such Contributor has 154 | been advised of the possibility of such damages. 155 | 156 | 9. Accepting Warranty or Additional Liability. 157 | 158 | While redistributing the Work or Derivative Works thereof, You may choose to 159 | offer, and charge a fee for, acceptance of support, warranty, indemnity, or 160 | other liability obligations and/or rights consistent with this License. However, 161 | in accepting such obligations, You may act only on Your own behalf and on Your 162 | sole responsibility, not on behalf of any other Contributor, and only if You 163 | agree to indemnify, defend, and hold each Contributor harmless for any liability 164 | incurred by, or claims asserted against, such Contributor by reason of your 165 | accepting any such warranty or additional liability. 166 | 167 | END OF TERMS AND CONDITIONS 168 | 169 | APPENDIX: How to apply the Apache License to your work 170 | 171 | To apply the Apache License to your work, attach the following boilerplate 172 | notice, with the fields enclosed by brackets "[]" replaced with your own 173 | identifying information. (Don't include the brackets!) The text should be 174 | enclosed in the appropriate comment syntax for the file format. We also 175 | recommend that a file or class name and description of purpose be included on 176 | the same "printed page" as the copyright notice for easier identification within 177 | third-party archives. 178 | 179 | Copyright [yyyy] [name of copyright owner] 180 | 181 | Licensed under the Apache License, Version 2.0 (the "License"); 182 | you may not use this file except in compliance with the License. 183 | You may obtain a copy of the License at 184 | 185 | http://www.apache.org/licenses/LICENSE-2.0 186 | 187 | Unless required by applicable law or agreed to in writing, software 188 | distributed under the License is distributed on an "AS IS" BASIS, 189 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 190 | See the License for the specific language governing permissions and 191 | limitations under the License. 192 | -------------------------------------------------------------------------------- /bower_components/webaudio-controls/README.md: -------------------------------------------------------------------------------- 1 | # webaudio-controls 2 | **WebAudioControls** is GUI parts library for Web application using [Polymer] WebComponents. 3 | Especially suitable for audio-applications like VST plugins. 4 | 5 | Polymer 1.4 compatible 6 | 7 | **WebAudioControls** is consist of following components 8 | 9 | Component | Description 10 | ---|--- 11 | webaudio-knob | Rotating or some other frame-by-frame animation knob 12 | webaudio-slider | Vertical or Horizontal slider 13 | webaudio-switch | Toggle/Kick/Radio switches 14 | webaudio-param | Editable value display field 15 | webaudio-keyboard | Mouse/Touch playable keyboard. multi-touch support. 16 | 17 | Chrome / Firefox / Safari / Opera / IE compatible 18 | iOS and Android touch devices compatible 19 | 20 | [Live Demo sample1 (with external image-files)](https://rawgithub.com/g200kg/webaudio-controls/master/sample1.html) 21 | [Live Demo sample2 (with code example)](https://rawgithub.com/g200kg/webaudio-controls/master/sample2.html) 22 | [Live Demo sample3 (Knob/Slider/Switch/Param/Keyboard default style)](https://rawgithub.com/g200kg/webaudio-controls/master/sample3.html) 23 | [Live Demo sample4 (webaudio-keyboard to webMIDIAPI)](https://rawgithub.com/g200kg/webaudio-controls/master/sample4.html) 24 | (need Mac+ChromeCanary+flagEnabled+MIDIdevice or Win+JazzPlugin or Mac+JazzPlugin+MidiDevice) 25 | [Renoid : Practical application using webaudio-controls](http://www.g200kg.com/renoid/) 26 | 27 | Using with external image-files. 28 | [![](img/demo.png)](https://rawgithub.com/g200kg/webaudio-controls/master/sample1.html) 29 | 30 | Default style with no external image-files. 31 | [![](img/sample3.png)](https://rawgithub.com/g200kg/webaudio-controls/master/sample3.html) 32 | 33 | ## To Operate 34 | Following user actions are supported. 35 | 36 | Operation | Component | Description 37 | ---|---|--- 38 | **Click** | Switch/Param | toggle / activate the switch or focus the param 39 | **Drag** | Knob/Slider | up/right to increase value / down/left to decrease value 40 | **Shift+Drag** | Knob/Slider | fine control 41 | **Ctrl+Click / Command+Click(Mac)** | Knob/Slider/Switch | set to default value 42 | **Edit with Keyboard** | Param | edit the value directly 43 | **MouseWheel** | Knob/Slider | rotate upward to increase value / downward to decrease value 44 | **Shift+MouseWheel** | Knob/Slider | fine control 45 | **Mouse Button Press / Touch** | Keyboard | play keyboard. multi-touch is supported 46 | 47 | --- 48 | ## How to use 49 | 50 | - Install Polymer 51 | > Use command 'bower install --save Polymer/polymer', if you use bower. Or download zipped file and deploy appropriately. 52 | 53 | - load webcomponents.js and polymer 54 | > <script src="bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
55 | <link rel="import" href="bower_components/polymer/polymer.html"> 56 | 57 | - load webaudio-contols 58 | > <link rel="import" href="bower_components/webaudio-controls/webaudio-controls.html" > 59 | 60 | - insert `webaudio-knob/slider/switch/param/keyboard` element 61 | > <webaudio-knob src="img/LittlePhatty.png" sprites="100" min="0" max="100"></webaudio-knob> 62 | > <webaudio-slider src="img/hsliderbody.png"></webaudio-slider> 63 | > <webaudio-switch src="img/switch_toggle.png" width="32" height="32"></webaudio-switch> 64 | > <webaudio-param src="" link="knob-1"></webaudio-param> 65 | > <webaudio-keyboard keys="25" ></webaudio-keyboard> 66 | 67 | --- 68 | ## Attributes 69 | 70 | ### webaudio-knob 71 | 72 | Attribute | Options | Default | Description 73 | --- | --- | --- | --- 74 | **src** | string | Internal embedded resource is used if not specified | url of the knob image. (single frame or vertical stitched) 75 | **value** | float | `0` | The current value. Also used as initial value if specified 76 | **defvalue** | float | Initial 'value' is used if not specified | The default value that will be used when ctrl+click 77 | **min** | float | `0` | Minimum value of the knob 78 | **max** | float | `100` | Maximum value of the knob 79 | **step** | float | `1` | Value step of the control. The 'value' is always rounded to multiple of 'step' 80 | **log** | int | `0` | If 1, knob scale is logalithmic. In this mode, `step` is ignored. 81 | **units** | string | `null` | specified units (e.g. Hz) is added to valuetip 82 | **width** | int | `64` | Knob display width in px 83 | **height** | int | `64` | Knob display height in px 84 | **diameter** | int | `64` | Knob display diameter in px. This attribute can be used instead of width / height if the display image is square 85 | **sprites** | int | `0` | if `0`, the `src` image should be single frame image that indicate middle position. the image will be rotated -135deg to +135deg. if `sprirites` is not `0`, the `src` image should be stitched multi-framed image. `sprites` specify the max frame number in the stitched knob image. Note that this is (number of frames) - 1 86 | **sensitivity** | float | `1` | Pointing device sensitivity. min-max range correspond to (128 / `sensitivity`) px 87 | **valuetip** | `0`,`1` | `1` | Enable the overlaid value-tip display. 88 | **tooltip** | string | `null` | Tooltip text that will be shown when mouse hover a while 89 | **enable** | `0`,`1` | `1` | Enable control with the pointing device. 90 | **colors** | string | "#e00;#000;#000" | Semicolon separated 3 colors for 'indicator', 'body' and 'highlight'. These colors are used in default knob (when `src` is not provided). 91 | 92 | ### webaudio-slider 93 | 94 | Attribute | Options | Default | Description 95 | --- | --- | --- | --- 96 | **src** | string | Internal embedded resource is used if not specified | url of the slider background image 97 | **knobsrc** | string | Internal embedded resouce is used if not specified | url of the slider knob part image 98 | **value** | float | `0` | The current value. Also used as initial value if specified 99 | **defvalue** | float | Initial 'value' is used if not specified | The default value that will be used when ctrl+click 100 | **min** | float | `0` | Minimum value of the slider 101 | **max** | float | `100` | Maximum value of the slider 102 | **step** | float | `1` | Value step of the control. The 'value' is always rounded to multiple of 'step' 103 | **width** | int | `24` | Slider display width in px 104 | **height** | int | `128` | Slider display height in px 105 | **knobwidth** | int | same as 'width' if 'direction' is `vert`, or same as 'height' if 'direction' is `horz` | Slider knob part width in px 106 | **knobheight** | int | same as 'width' if 'direction' is `vert`, or same as 'height' if 'direction' is `horz` | Slider knob part height in px 107 | **ditchlength** | int | ('height'-'knobheight') or ('width'-'knobwidth') depends on 'direction' | Knob movable length 108 | **direction** | `"vert"`,`"horz"` | `"vert"` | Slider direction. vertical or horizontal 109 | **sensitivity** | float | `1` | Pointing device sensitivity. min-max range correspond to (128 / 'sensitivity') px 110 | **valuetip** | `0`,`1` | `1` | Enable the overlaid value-tip display. 111 | **tooltip** | string | `null` | Tooltip text that will be shown when mouse hover a while 112 | **enable** | `0`, `1` | `1` | Enable control with the pointing device. 113 | **colors** | string | "#e00;#000;#fff" | Semicolon separated 3 colors for 'knob', 'background' and 'highlight'. These colors are used in default knob (when `src` or `knobsrc` is not provided). 114 | 115 | 116 | ### webaudio-switch 117 | 118 | Attribute | Options | Default | Description 119 | --- | --- | --- | --- 120 | **src** | string | Internal embedded resource is used if not specified | url of the vertical stitched switch image 121 | **value** | `0`,`1` | `0` | The current value (`0` or `1`). Also used as initial value of the switch if specified 122 | **defvalue** | `0`,`1` | Initial 'value' is used if not specified | The default value that will be used when ctrl+click 123 | **width** | int | `32` | Switch display width in px 124 | **height** | int | `32` | Switch display height in px 125 | **type** | `"toggle"`,`"kick"`,`"radio"` | `"toggle"` | Switch type. `"toggle"` switch has so-called 'checkbox' function. `"radio"` switch is a radio-button and the `"kick"` switch is a general command button 126 | **group** | string | `null` | Group id string used if the 'type' is `"radio"`. Only one switch will be set to `"1"` in same group 127 | **invert** | `0`,`1` | `0` | exchange on and off image 128 | **tooltip** | string | `null` | Tooltip text that will be shown when mouse hover a while 129 | **enable** | `0`,`1` | `1` | Enable control with the pointing device. 130 | **colors** | string | "#e00;#000;#fff" | Semicolon separated 3 colors for 'knob', 'background' and 'highlight'. These colors are used in default switch (when `src` is not provided). 131 | 132 | ### webaudio-param 133 | 134 | Attribute | Options | Default | Description 135 | --- | --- | --- | --- 136 | **src** | string | Black rectangle if not specified | Background image or color. Transparent if set to `""`, or url to background image. 137 | **value** | float | `0` | The current value. Usually same as linked control 138 | **width** | int | `32` | Parameter display width in px 139 | **height** | int | `16` | Parameter display height in px 140 | **fontsize** | int | `9` | Font-size of the parameter display 141 | **colors** | string | `"#e00;#000"` | Semicolon separated 2 colors for text and background. background color is used when `src` is not defined. 142 | **link** | string | `null` | Specify the linked webaudio-knob/slider/switch by Id 143 | 144 | ### webaudio-keyboard 145 | 146 | Attribute | Options | Default | Description 147 | --- | --- | --- | --- 148 | **values** | int array | `[]` | The array of current pressed key numbers. "values" may has more than one element in multi-touch environment. 149 | **width** | int | `480` | Keyboard display width in px 150 | **height** | int | `128` | Keyboard display height in px 151 | **min** | int | `0` | Lowest Key number. Each key is numbered incrementally from this number. If the "min" is not `0` and the modulo 12 is not zero, the keyboard is started from corresponding position (not-C). Note that the specified key should be a 'white-key'. 152 | **keys** | int | `25` | Number of keys. `25` means 25 keys keyboard. 153 | **colors** | string | '#222; #eee;#ccc; #333;#000; #e88;#c44; #c33;#800' | semicolon separated 9 keyboard colors. 'border; whitekey-grad-from;whitekey-grad-to; blackkey-grad-from;blackkey-grad-to; active-whitekey-grad-from;active-whitekey-grad-to; active-blackkey-grad-from;active-blackkey-grad-to'. Each key surface can has garadient left to right with 'from' and 'to'. 154 | **enable** | `0`,`1` | `1` | Enable control with the pointing device. 155 | 156 | --- 157 | ## Functions 158 | ### setValue(value, fire) 159 | `webaudio-knob` | `webaudio-slider` | `webaudio-switch` 160 | **description**: Each control can be setup and redraw by calling this function from JavaScript. 161 | If the `fire` parameter is `undefined` or `false`, this function will not fire `'change'` event. Or the `change` event will be fired. 162 | 163 | 164 | ### setNote(state,note) 165 | `webaudio-keyboard` 166 | **description**: webaudio-keyboard can be setup pressing state with this function from JavaScript. corresponding key specified by the `note` is pressed if the `state` is non-zero otherwise the key is released. This function will NOT fire the 'change' event. 167 | 168 | --- 169 | ## Events 170 | ### 'change' 171 | `webaudio-knob` | `webaudio-slider` | `webaudio-switch` | `webaudio-keyboard` 172 | **description**: 'change' event is emitted everytime value changes by user action or setValue() function with fire flag is `true`. In the event handler of `webaudio-knob`,`webaudio-slider` or `webaudio-switch`, current value can be get with referring `event.target.value`. 173 | 174 | ``` 175 | var knobs = document.getElementsByTagName('webaudio-knob'); 176 | for (var i = 0; i < knobs.length; i++) { 177 | var knob = knobs[i]; 178 | knob.addEventListener('change', function(e) { 179 | console.log(e.target.value); 180 | }); 181 | } 182 | ``` 183 | 184 | For the `webaudio-keyboard`, each 'change' event has the property '.note' that contain a array `[key-state, key-number]`. For example `event.note = [1, 60]` if the key#60 is on, or `event.note = [0, 60]` if the key#60 is off. 185 | 186 | ``` 187 | var keyboard = document.getElementsById('keyboard'); 188 | keyboard.addEventListener('change', function(e) { 189 | if(e.note[0]) 190 | console.log("Note-On:"+e.note[1]); 191 | else 192 | console.log("Note-Off:"+e.note[1]); 193 | }); 194 | ``` 195 | 196 | **Note**: The addEventListener() function is recommended for event handler setup instead of 'onchange=' attribute. 'onchange=' attribute seems not work on Safari. 197 | 198 | ### 'click' 199 | `webaudio-switch (kick)` 200 | **description**: 'click' event is emitted if the 'kick' type webaudio-switch has clicked. 201 | 202 | --- 203 | ## Creating knob images 204 | webaudio-knob (with sprites is `0` (default)) use a single frame knob image that indicate center position. 205 | For example, 206 | ![](img/testknob.png) 207 | This image will be rotated from -135deg to +135deg. This approach will works well if the image is flat designed, but more complex animation (for example, drop-shadowed, highlighted or something elastic) will need pre-rendered frame-by-frame animation as below. 208 | 209 | webaudio-knob (with non zero "sprites") use a vertical 'stitched' multi-frames animation image, and webaudio-switch use a vertical 'stitched' two-frames animation image. 210 | For example, 211 | ![](https://raw.github.com/g200kg/webaudio-controls/master/img/LittlePhatty_sample.png) 212 | ![](https://raw.github.com/g200kg/webaudio-controls/master/img/switch_toggle.png) 213 | 214 | This knob example has only 5 frames but it should has more frames for smooth animation. I recommend to use JKnobMan/WebKnobMan for making these stitched images, 215 | 216 | - [JKnobMan](http://www.g200kg.com/en/software/knobman.html) -- Java based Knob image creation tool. 217 | - [WebKnobMan](http://www.g200kg.com/en/webknobman/) -- WebApp version of the JknobMan 218 | - [KnobGallery](http://www.g200kg.com/en/webknobman/gallery.php) -- knob data sharing space 219 | 220 | --- 221 | 222 | Here is a brief instruction to export knob-image from KnobGallery 223 | 224 | - Go to [KnobGallery](http://www.g200kg.com/en/webknobman/gallery.php) 225 | - Find your favorite knob design and click 'Open with WebKnobMan' 226 | - Click on 'Export' to download `png` file 227 | - Of course, you can create your own! 228 | 229 | **Note: comply with license requirements** 230 | 231 | --- 232 | ## License 233 | WebAudio-Controls is developped based on: 234 | - [WebAudio-Knob](https://github.com/agektmr/webaudio-knob) by [Eiji Kitamura](http://google.com/+agektmr) 235 | - [WebAudio-Slider](https://github.com/ryoyakawai/webaudio-slider) by [Ryoya KAWAI](https://plus.google.com/108242669191458983485/posts) 236 | - [WebAudio-Switch](http://aikelab.net/switch/) by [Keisuke Ai](http://d.hatena.ne.jp/aike/) 237 | Integrated and enhanced by [g200kg](http://www.g200kg.com/) 238 | 239 | Copyright (c) 2013 Eiji Kitamura / Ryoya KAWAI / Keisuke Ai / g200kg (Tatsuya Shinyagaito) 240 | Licensed under the Apache License, Version 2.0 241 | 242 | --- 243 | Knob/Switch images in samples are from [Knob Gallery](http://www.g200kg.com/en/webknobman/gallery.php) 244 | [switch_toggle.knob](http://www.g200kg.com/en/webknobman/gallery.php?m=p&p=58) by [az](http://bji.yukihotaru.com/) (c) 2011 [CC-BY](http://creativecommons.org/licenses/by/3.0/) 245 | -------------------------------------------------------------------------------- /bower_components/webaudio-controls/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webaudio-controls", 3 | "version": "1.0.0", 4 | "homepage": "https://github.com/g200kg/webaudio-controls", 5 | "authors": [ 6 | "Tatsuya Shinyagaito " 7 | ], 8 | "description": "GUI parts library for Web Music Apps using [Polymer]", 9 | "main": "webaudio-controls.html", 10 | "keywords": [ 11 | "gui", 12 | "web", 13 | "music", 14 | "knob", 15 | "polymer" 16 | ], 17 | "license": "Apache License, Version 2.0", 18 | "ignore": [ 19 | "**/.*", 20 | "node_modules", 21 | "bower_components", 22 | "test", 23 | "tests" 24 | ], 25 | "dependencies": { 26 | "polymer": "Polymer/polymer#^1.4.0" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /bower_components/webaudio-controls/img/LittlePhatty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g200kg/vowelsynth/f3dcd9e555193c5b78c9d25e5ebd6a477bd90e89/bower_components/webaudio-controls/img/LittlePhatty.png -------------------------------------------------------------------------------- /bower_components/webaudio-controls/img/LittlePhatty_sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g200kg/vowelsynth/f3dcd9e555193c5b78c9d25e5ebd6a477bd90e89/bower_components/webaudio-controls/img/LittlePhatty_sample.png -------------------------------------------------------------------------------- /bower_components/webaudio-controls/img/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g200kg/vowelsynth/f3dcd9e555193c5b78c9d25e5ebd6a477bd90e89/bower_components/webaudio-controls/img/bg.png -------------------------------------------------------------------------------- /bower_components/webaudio-controls/img/defknob2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g200kg/vowelsynth/f3dcd9e555193c5b78c9d25e5ebd6a477bd90e89/bower_components/webaudio-controls/img/defknob2.png -------------------------------------------------------------------------------- /bower_components/webaudio-controls/img/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g200kg/vowelsynth/f3dcd9e555193c5b78c9d25e5ebd6a477bd90e89/bower_components/webaudio-controls/img/demo.png -------------------------------------------------------------------------------- /bower_components/webaudio-controls/img/hsliderbody.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g200kg/vowelsynth/f3dcd9e555193c5b78c9d25e5ebd6a477bd90e89/bower_components/webaudio-controls/img/hsliderbody.png -------------------------------------------------------------------------------- /bower_components/webaudio-controls/img/hsliderknob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g200kg/vowelsynth/f3dcd9e555193c5b78c9d25e5ebd6a477bd90e89/bower_components/webaudio-controls/img/hsliderknob.png -------------------------------------------------------------------------------- /bower_components/webaudio-controls/img/hsw5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g200kg/vowelsynth/f3dcd9e555193c5b78c9d25e5ebd6a477bd90e89/bower_components/webaudio-controls/img/hsw5.png -------------------------------------------------------------------------------- /bower_components/webaudio-controls/img/sample3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g200kg/vowelsynth/f3dcd9e555193c5b78c9d25e5ebd6a477bd90e89/bower_components/webaudio-controls/img/sample3.png -------------------------------------------------------------------------------- /bower_components/webaudio-controls/img/switch_toggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g200kg/vowelsynth/f3dcd9e555193c5b78c9d25e5ebd6a477bd90e89/bower_components/webaudio-controls/img/switch_toggle.png -------------------------------------------------------------------------------- /bower_components/webaudio-controls/img/testknob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g200kg/vowelsynth/f3dcd9e555193c5b78c9d25e5ebd6a477bd90e89/bower_components/webaudio-controls/img/testknob.png -------------------------------------------------------------------------------- /bower_components/webaudio-controls/img/vernier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g200kg/vowelsynth/f3dcd9e555193c5b78c9d25e5ebd6a477bd90e89/bower_components/webaudio-controls/img/vernier.png -------------------------------------------------------------------------------- /bower_components/webaudio-controls/img/vsliderbody.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g200kg/vowelsynth/f3dcd9e555193c5b78c9d25e5ebd6a477bd90e89/bower_components/webaudio-controls/img/vsliderbody.png -------------------------------------------------------------------------------- /bower_components/webaudio-controls/img/vsliderknob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/g200kg/vowelsynth/f3dcd9e555193c5b78c9d25e5ebd6a477bd90e89/bower_components/webaudio-controls/img/vsliderknob.png -------------------------------------------------------------------------------- /bower_components/webaudio-controls/sample1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | [Polymer] WebAudio-Controls Live Demo 6 | 7 | 8 | 9 | 17 | 18 | 19 |

WebAudio-Controls Live Demo

20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 |
31 |

Available At

32 | https://github.com/g200kg/webaudio-controls 33 |

To Operate

34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |
OperationComponentDescription
ClickSwitch/Paramtoggle / activate the switch or focus the param
DragKnob/Sliderup/right to increase value / down/left to decrease value
Shift+DragKnob/Sliderfine control
Ctrl+Click/Command+ClickKnob/Slider/Switchset to default value
Edit with KeyboardParamedit the value directly
MouseWheelKnob/Sliderrotate upward to increase value / downward to decrease value
Shift+MouseWheelKnob/Sliderfine control
44 |
45 | 46 |
47 |

License

48 | webaudio-controls is based on: 49 | 55 | 56 |

webaudio-controls is licensed under the Apache License, Version 2.0
57 | Copyright (c) 2013 Eiji Kitamura / Ryoya KAWAI / Keisuke Ai / g200kg (Tatsuya Shinyagaito)
58 |

59 |

Using Polymer and WebComponents
60 |

61 |
62 | Knob/Switch images are from Knob Gallery
63 | switch_toggle.knob by az Copyright (c) 2011 CC-BY 64 |
65 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /bower_components/webaudio-controls/sample2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | [Polymer] WebAudio Controls Test page 6 | 7 | 8 | 9 | 19 | 56 | 57 | 58 | 59 |
60 |
61 |


--- Events ---
62 |
63 | 64 |
65 | 66 |

WebAudio-Controls Test Page

67 |
68 |

WebAudio-Knobs

69 |
70 | 71 | <webaudio-knob id="knob1"></webaudio-knob>
72 | <webaudio-knob id="knob1a" colors="#fc0;#000;#444"></webaudio-knob> 73 |
Default webaudio-knob. If no knob-image is specified, simple embedded image resource is used. Colors are customizable.


74 | 75 |
76 | <webaudio-knob id="knob2" src="img/LittlePhatty.png" sprites="100" value="60" min="-100" max="100" step="20" diameter="64"><webaudio-knob> 77 |
Knob image file is assigned. Value range can be specified by min/max. The initial value is "60". The value is changed in step of "20".


78 | 79 |
80 | <webaudio-knob id="knob3" src="img/LittlePhatty.png" sprites="100" diameter="32"><webaudio-knob> 81 |
The knob image will be resized to specified size (even recommended to prepare required size image for clear display)


82 | 83 |
84 | <webaudio-knob id="knob4" src="img/hsw5.png" sprites="4" value="2" min="0" max="4" width="128" height="32"><webaudio-knob> 85 |
non-square image is used with specifying width/height instead of diameter.


86 | 87 | 88 |
89 | <webaudio-knob id="knob5" src="img/LittlePhatty.png" sprites="100" diameter="64" valuetip="0" tooltip="Knob Test"></webaudio-knob>
90 | <webaudio-param link="knob5"></webaudio-param> 91 |
92 |
webaudio-knob can has tooltip-text and editable parameter display field with webaudio-param


93 | 94 |
95 | 96 |

WebAudio-Sliders

97 | 98 | 99 |
100 | <webaudio-slider id="slider1"></webaudio-slider>
101 | <webaudio-slider id="slider1a" colors="#850;#230;#fff"></webaudio-slider>
102 | <webaudio-slider id="slider2" direction="horz"></webaudio-slider>
103 |
Default webaudio-slider. If no slider-image is specified, simple embedded image resource is used. 104 | The slider direction is specified by "direction" attribute. 105 |


106 | 107 |
108 | <webaudio-slider id="slider3" direction="horz" src="img/hsliderbody.png" knobsrc="img/hsliderknob.png"></webaudi-slider>
109 |
Specifying the sliderbase and sliderknob images. 110 |


111 | 112 | 113 |
114 | <webaudio-slider id="slider4" direction="horz" src="img/hsliderbody.png" knobsrc="img/hsliderknob.png" min="0" max="1" step="0.1" width="60" height="20" valuetip="0" tooltip="Slider Test"></webaudio-slider>
115 | <webaudio-param link="slider4"></webaudio-param>
116 |
Value step is specified, resized, tooltip-text and webaudio-param is added. 117 |


118 | 119 |
120 | 121 |

WebAudio-Switches

122 | 123 |
124 | <webaudio-switch id="toggle1"></webaudio-switch>
125 | <webaudio-switch id="toggle1a" colors="#0c0;#008;#fff"></webaudio-switch>
126 |
Default webaudio-switch. If no switch-image is specified, simple embedded image resource is used.


127 | 128 | 129 |
130 | <webaudio-switch id="toggle2" src="img/switch_toggle.png" width="32" height="32"></webaudio-switch>
131 | <webaudio-switch id="toggle3" src="img/switch_toggle.png" width="54" height="54"></webaudio-switch>
132 |
Image file is specified. Images are resized to specified size.


133 | 134 |
135 | <webaudio-switch id="kick1" src="img/switch_toggle.png" type="kick" width="54" height="54"></webaudio-switch> 136 |
Kick type switch. In this mode, this switch is on only while pressing.


137 | 138 | 139 | 140 |
141 | 142 | <webaudio-switch id="radioA" src="img/switch_toggle.png" type="radio" group="radio1" width="54" height="54" value="1" tooltip="Radio-A"></webaudio-switch>
143 | <webaudio-switch id="radioB" src="img/switch_toggle.png" type="radio" group="radio1" width="54" height="54" tooltip="Radio-B"></webaudio-switch&bt;
144 | <webaudio-switch id="radioC" src="img/switch_toggle.png" type="radio" group="radio1" width="54" height="54" tooltip="Radio-C"></webaudio-switch>
145 |
146 |
Radio type switch. In this mode, only one switch is activated in the group.


147 |
148 | 149 | 150 |
151 |

Specification

152 |

Refer the following page for detail specifications

153 | https://github.com/g200kg/webaudio-controls 154 |
155 | 156 |
157 |

License

158 | WebAudio-Controls is based on
159 | WebAudio-Knob by Eiji Kitamura
160 | WebAudio-Slider by Ryoya Kawai
161 | WebAudio-Switch by Keisuke Ai
162 | Integrated and enhanced by g200kg

163 | 164 | Using Polymer and WebComponents

165 | 166 |

Copyright (c) 2013 Eiji Kitamura / Ryoya KAWAI / Keisuke Ai / g200kg (Tatsuya Shinyagaito)
167 | webaudio-controls is licensed under the Apache License, Version 2.0

168 | 169 | Knob/Switch images are from Knob Gallery
170 | switch_toggle.knob by az Copyright (c) 2011 CC-BY 171 |
172 | 173 | 174 | -------------------------------------------------------------------------------- /bower_components/webaudio-controls/sample3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | [Polymer] WebAudio-Controls Live Demo 6 | 7 | 8 | 9 | 24 | 25 | 26 |

WebAudio-Controls Live Demo

27 |
28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | <webaudio-knob> 39 | <webaudio-param> 40 | <webaudio-slider> 41 | <webaudio-switch> 42 | <webaudio-keyboard> 43 |
44 |
45 | 46 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /bower_components/webaudio-controls/sample4.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | [Polymer] WebAudio-Keyboard Test 6 | 7 | 8 | 9 | 38 | 39 | 40 |

WebAudio-Keyboard Test

41 |

This test requires 'Web MIDI API' support, MIDI I/F, and External MIDI device

42 | MidiOut :

43 | Program : 44 |

45 | Volume :

46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /bower_components/webcomponentsjs/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webcomponentsjs", 3 | "main": "webcomponents.js", 4 | "version": "0.7.22", 5 | "homepage": "http://webcomponents.org", 6 | "authors": [ 7 | "The Polymer Authors" 8 | ], 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/webcomponents/webcomponentsjs.git" 12 | }, 13 | "keywords": [ 14 | "webcomponents" 15 | ], 16 | "license": "BSD", 17 | "ignore": [], 18 | "devDependencies": { 19 | "web-component-tester": "^4.0.1" 20 | }, 21 | "_release": "0.7.22", 22 | "_resolution": { 23 | "type": "version", 24 | "tag": "v0.7.22", 25 | "commit": "50f9751f8e638301603aebb33ba9f1e90d2b0d32" 26 | }, 27 | "_source": "https://github.com/Polymer/webcomponentsjs.git", 28 | "_target": "^0.7.20", 29 | "_originalSource": "webcomponentsjs" 30 | } -------------------------------------------------------------------------------- /bower_components/webcomponentsjs/CustomElements.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. 4 | * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt 5 | * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 6 | * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt 7 | * Code distributed by Google as part of the polymer project is also 8 | * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt 9 | */ 10 | // @version 0.7.22 11 | "undefined"==typeof WeakMap&&!function(){var e=Object.defineProperty,t=Date.now()%1e9,n=function(){this.name="__st"+(1e9*Math.random()>>>0)+(t++ +"__")};n.prototype={set:function(t,n){var o=t[this.name];return o&&o[0]===t?o[1]=n:e(t,this.name,{value:[t,n],writable:!0}),this},get:function(e){var t;return(t=e[this.name])&&t[0]===e?t[1]:void 0},"delete":function(e){var t=e[this.name];return t&&t[0]===e?(t[0]=t[1]=void 0,!0):!1},has:function(e){var t=e[this.name];return t?t[0]===e:!1}},window.WeakMap=n}(),function(e){function t(e){E.push(e),b||(b=!0,w(o))}function n(e){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(e)||e}function o(){b=!1;var e=E;E=[],e.sort(function(e,t){return e.uid_-t.uid_});var t=!1;e.forEach(function(e){var n=e.takeRecords();r(e),n.length&&(e.callback_(n,e),t=!0)}),t&&o()}function r(e){e.nodes_.forEach(function(t){var n=v.get(t);n&&n.forEach(function(t){t.observer===e&&t.removeTransientObservers()})})}function i(e,t){for(var n=e;n;n=n.parentNode){var o=v.get(n);if(o)for(var r=0;r0){var r=n[o-1],i=p(r,e);if(i)return void(n[o-1]=i)}else t(this.observer);n[o]=e},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(e){var t=this.options;t.attributes&&e.addEventListener("DOMAttrModified",this,!0),t.characterData&&e.addEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.addEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(e){var t=this.options;t.attributes&&e.removeEventListener("DOMAttrModified",this,!0),t.characterData&&e.removeEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.removeEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(e){if(e!==this.target){this.addListeners_(e),this.transientObservedNodes.push(e);var t=v.get(e);t||v.set(e,t=[]),t.push(this)}},removeTransientObservers:function(){var e=this.transientObservedNodes;this.transientObservedNodes=[],e.forEach(function(e){this.removeListeners_(e);for(var t=v.get(e),n=0;n=0)){n.push(e);for(var o,r=e.querySelectorAll("link[rel="+a+"]"),d=0,s=r.length;s>d&&(o=r[d]);d++)o["import"]&&i(o["import"],t,n);t(e)}}var a=window.HTMLImports?window.HTMLImports.IMPORT_LINK_TYPE:"none";e.forDocumentTree=r,e.forSubtree=t}),window.CustomElements.addModule(function(e){function t(e,t){return n(e,t)||o(e,t)}function n(t,n){return e.upgrade(t,n)?!0:void(n&&a(t))}function o(e,t){b(e,function(e){return n(e,t)?!0:void 0})}function r(e){N.push(e),y||(y=!0,setTimeout(i))}function i(){y=!1;for(var e,t=N,n=0,o=t.length;o>n&&(e=t[n]);n++)e();N=[]}function a(e){_?r(function(){d(e)}):d(e)}function d(e){e.__upgraded__&&!e.__attached&&(e.__attached=!0,e.attachedCallback&&e.attachedCallback())}function s(e){u(e),b(e,function(e){u(e)})}function u(e){_?r(function(){c(e)}):c(e)}function c(e){e.__upgraded__&&e.__attached&&(e.__attached=!1,e.detachedCallback&&e.detachedCallback())}function l(e){for(var t=e,n=window.wrap(document);t;){if(t==n)return!0;t=t.parentNode||t.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&t.host}}function f(e){if(e.shadowRoot&&!e.shadowRoot.__watched){g.dom&&console.log("watching shadow-root for: ",e.localName);for(var t=e.shadowRoot;t;)w(t),t=t.olderShadowRoot}}function p(e,n){if(g.dom){var o=n[0];if(o&&"childList"===o.type&&o.addedNodes&&o.addedNodes){for(var r=o.addedNodes[0];r&&r!==document&&!r.host;)r=r.parentNode;var i=r&&(r.URL||r._URL||r.host&&r.host.localName)||"";i=i.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",n.length,i||"")}var a=l(e);n.forEach(function(e){"childList"===e.type&&(M(e.addedNodes,function(e){e.localName&&t(e,a)}),M(e.removedNodes,function(e){e.localName&&s(e)}))}),g.dom&&console.groupEnd()}function m(e){for(e=window.wrap(e),e||(e=window.wrap(document));e.parentNode;)e=e.parentNode;var t=e.__observer;t&&(p(e,t.takeRecords()),i())}function w(e){if(!e.__observer){var t=new MutationObserver(p.bind(this,e));t.observe(e,{childList:!0,subtree:!0}),e.__observer=t}}function v(e){e=window.wrap(e),g.dom&&console.group("upgradeDocument: ",e.baseURI.split("/").pop());var n=e===window.wrap(document);t(e,n),w(e),g.dom&&console.groupEnd()}function h(e){E(e,v)}var g=e.flags,b=e.forSubtree,E=e.forDocumentTree,_=window.MutationObserver._isPolyfilled&&g["throttle-attached"];e.hasPolyfillMutations=_,e.hasThrottledAttached=_;var y=!1,N=[],M=Array.prototype.forEach.call.bind(Array.prototype.forEach),O=Element.prototype.createShadowRoot;O&&(Element.prototype.createShadowRoot=function(){var e=O.call(this);return window.CustomElements.watchShadow(this),e}),e.watchShadow=f,e.upgradeDocumentTree=h,e.upgradeDocument=v,e.upgradeSubtree=o,e.upgradeAll=t,e.attached=a,e.takeRecords=m}),window.CustomElements.addModule(function(e){function t(t,o){if("template"===t.localName&&window.HTMLTemplateElement&&HTMLTemplateElement.decorate&&HTMLTemplateElement.decorate(t),!t.__upgraded__&&t.nodeType===Node.ELEMENT_NODE){var r=t.getAttribute("is"),i=e.getRegisteredDefinition(t.localName)||e.getRegisteredDefinition(r);if(i&&(r&&i.tag==t.localName||!r&&!i["extends"]))return n(t,i,o)}}function n(t,n,r){return a.upgrade&&console.group("upgrade:",t.localName),n.is&&t.setAttribute("is",n.is),o(t,n),t.__upgraded__=!0,i(t),r&&e.attached(t),e.upgradeSubtree(t,r),a.upgrade&&console.groupEnd(),t}function o(e,t){Object.__proto__?e.__proto__=t.prototype:(r(e,t.prototype,t["native"]),e.__proto__=t.prototype)}function r(e,t,n){for(var o={},r=t;r!==n&&r!==HTMLElement.prototype;){for(var i,a=Object.getOwnPropertyNames(r),d=0;i=a[d];d++)o[i]||(Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(r,i)),o[i]=1);r=Object.getPrototypeOf(r)}}function i(e){e.createdCallback&&e.createdCallback()}var a=e.flags;e.upgrade=t,e.upgradeWithDefinition=n,e.implementPrototype=o}),window.CustomElements.addModule(function(e){function t(t,o){var s=o||{};if(!t)throw new Error("document.registerElement: first argument `name` must not be empty");if(t.indexOf("-")<0)throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '"+String(t)+"'.");if(r(t))throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '"+String(t)+"'. The type name is invalid.");if(u(t))throw new Error("DuplicateDefinitionError: a type with name '"+String(t)+"' is already registered");return s.prototype||(s.prototype=Object.create(HTMLElement.prototype)),s.__name=t.toLowerCase(),s["extends"]&&(s["extends"]=s["extends"].toLowerCase()),s.lifecycle=s.lifecycle||{},s.ancestry=i(s["extends"]),a(s),d(s),n(s.prototype),c(s.__name,s),s.ctor=l(s),s.ctor.prototype=s.prototype,s.prototype.constructor=s.ctor,e.ready&&v(document),s.ctor}function n(e){if(!e.setAttribute._polyfilled){var t=e.setAttribute;e.setAttribute=function(e,n){o.call(this,e,n,t)};var n=e.removeAttribute;e.removeAttribute=function(e){o.call(this,e,null,n)},e.setAttribute._polyfilled=!0}}function o(e,t,n){e=e.toLowerCase();var o=this.getAttribute(e);n.apply(this,arguments);var r=this.getAttribute(e);this.attributeChangedCallback&&r!==o&&this.attributeChangedCallback(e,o,r)}function r(e){for(var t=0;t<_.length;t++)if(e===_[t])return!0}function i(e){var t=u(e);return t?i(t["extends"]).concat([t]):[]}function a(e){for(var t,n=e["extends"],o=0;t=e.ancestry[o];o++)n=t.is&&t.tag;e.tag=n||e.__name,n&&(e.is=e.__name)}function d(e){if(!Object.__proto__){var t=HTMLElement.prototype;if(e.is){var n=document.createElement(e.tag);t=Object.getPrototypeOf(n)}for(var o,r=e.prototype,i=!1;r;)r==t&&(i=!0),o=Object.getPrototypeOf(r),o&&(r.__proto__=o),r=o;i||console.warn(e.tag+" prototype not found in prototype chain for "+e.is),e["native"]=t}}function s(e){return g(M(e.tag),e)}function u(e){return e?y[e.toLowerCase()]:void 0}function c(e,t){y[e]=t}function l(e){return function(){return s(e)}}function f(e,t,n){return e===N?p(t,n):O(e,t)}function p(e,t){e&&(e=e.toLowerCase()),t&&(t=t.toLowerCase());var n=u(t||e);if(n){if(e==n.tag&&t==n.is)return new n.ctor;if(!t&&!n.is)return new n.ctor}var o;return t?(o=p(e),o.setAttribute("is",t),o):(o=M(e),e.indexOf("-")>=0&&b(o,HTMLElement),o)}function m(e,t){var n=e[t];e[t]=function(){var e=n.apply(this,arguments);return h(e),e}}var w,v=(e.isIE,e.upgradeDocumentTree),h=e.upgradeAll,g=e.upgradeWithDefinition,b=e.implementPrototype,E=e.useNative,_=["annotation-xml","color-profile","font-face","font-face-src","font-face-uri","font-face-format","font-face-name","missing-glyph"],y={},N="http://www.w3.org/1999/xhtml",M=document.createElement.bind(document),O=document.createElementNS.bind(document);w=Object.__proto__||E?function(e,t){return e instanceof t}:function(e,t){if(e instanceof t)return!0;for(var n=e;n;){if(n===t.prototype)return!0;n=n.__proto__}return!1},m(Node.prototype,"cloneNode"),m(document,"importNode"),document.registerElement=t,document.createElement=p,document.createElementNS=f,e.registry=y,e["instanceof"]=w,e.reservedTagList=_,e.getRegisteredDefinition=u,document.register=document.registerElement}),function(e){function t(){i(window.wrap(document)),window.CustomElements.ready=!0;var e=window.requestAnimationFrame||function(e){setTimeout(e,16)};e(function(){setTimeout(function(){window.CustomElements.readyTime=Date.now(),window.HTMLImports&&(window.CustomElements.elapsed=window.CustomElements.readyTime-window.HTMLImports.readyTime),document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})})}var n=e.useNative,o=e.initializeModules;e.isIE;if(n){var r=function(){};e.watchShadow=r,e.upgrade=r,e.upgradeAll=r,e.upgradeDocumentTree=r,e.upgradeSubtree=r,e.takeRecords=r,e["instanceof"]=function(e,t){return e instanceof t}}else o();var i=e.upgradeDocumentTree,a=e.upgradeDocument;if(window.wrap||(window.ShadowDOMPolyfill?(window.wrap=window.ShadowDOMPolyfill.wrapIfNeeded,window.unwrap=window.ShadowDOMPolyfill.unwrapIfNeeded):window.wrap=window.unwrap=function(e){return e}),window.HTMLImports&&(window.HTMLImports.__importsParsingHook=function(e){e["import"]&&a(wrap(e["import"]))}),"complete"===document.readyState||e.flags.eager)t();else if("interactive"!==document.readyState||window.attachEvent||window.HTMLImports&&!window.HTMLImports.ready){var d=window.HTMLImports&&!window.HTMLImports.ready?"HTMLImportsLoaded":"DOMContentLoaded";window.addEventListener(d,t)}else t()}(window.CustomElements); -------------------------------------------------------------------------------- /bower_components/webcomponentsjs/HTMLImports.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. 4 | * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt 5 | * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 6 | * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt 7 | * Code distributed by Google as part of the polymer project is also 8 | * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt 9 | */ 10 | // @version 0.7.22 11 | "undefined"==typeof WeakMap&&!function(){var e=Object.defineProperty,t=Date.now()%1e9,n=function(){this.name="__st"+(1e9*Math.random()>>>0)+(t++ +"__")};n.prototype={set:function(t,n){var r=t[this.name];return r&&r[0]===t?r[1]=n:e(t,this.name,{value:[t,n],writable:!0}),this},get:function(e){var t;return(t=e[this.name])&&t[0]===e?t[1]:void 0},"delete":function(e){var t=e[this.name];return t&&t[0]===e?(t[0]=t[1]=void 0,!0):!1},has:function(e){var t=e[this.name];return t?t[0]===e:!1}},window.WeakMap=n}(),function(e){function t(e){E.push(e),g||(g=!0,f(r))}function n(e){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(e)||e}function r(){g=!1;var e=E;E=[],e.sort(function(e,t){return e.uid_-t.uid_});var t=!1;e.forEach(function(e){var n=e.takeRecords();o(e),n.length&&(e.callback_(n,e),t=!0)}),t&&r()}function o(e){e.nodes_.forEach(function(t){var n=v.get(t);n&&n.forEach(function(t){t.observer===e&&t.removeTransientObservers()})})}function i(e,t){for(var n=e;n;n=n.parentNode){var r=v.get(n);if(r)for(var o=0;o0){var o=n[r-1],i=m(o,e);if(i)return void(n[r-1]=i)}else t(this.observer);n[r]=e},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(e){var t=this.options;t.attributes&&e.addEventListener("DOMAttrModified",this,!0),t.characterData&&e.addEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.addEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(e){var t=this.options;t.attributes&&e.removeEventListener("DOMAttrModified",this,!0),t.characterData&&e.removeEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.removeEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(e){if(e!==this.target){this.addListeners_(e),this.transientObservedNodes.push(e);var t=v.get(e);t||v.set(e,t=[]),t.push(this)}},removeTransientObservers:function(){var e=this.transientObservedNodes;this.transientObservedNodes=[],e.forEach(function(e){this.removeListeners_(e);for(var t=v.get(e),n=0;nm&&(h=s[m]);m++)a(h)?(u.push(this),d++,n()):(h.addEventListener("load",r),h.addEventListener("error",i));else n()}function a(e){return l?e.__loaded||e["import"]&&"loading"!==e["import"].readyState:e.__importParsed}function s(e){for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)d(t)&&c(t)}function d(e){return"link"===e.localName&&"import"===e.rel}function c(e){var t=e["import"];t?o({target:e}):(e.addEventListener("load",o),e.addEventListener("error",o))}var u="import",l=Boolean(u in document.createElement("link")),h=Boolean(window.ShadowDOMPolyfill),m=function(e){return h?window.ShadowDOMPolyfill.wrapIfNeeded(e):e},p=m(document),f={get:function(){var e=window.HTMLImports.currentScript||document.currentScript||("complete"!==document.readyState?document.scripts[document.scripts.length-1]:null);return m(e)},configurable:!0};Object.defineProperty(document,"_currentScript",f),Object.defineProperty(p,"_currentScript",f);var v=/Trident/.test(navigator.userAgent),w=v?"complete":"interactive",b="readystatechange";l&&(new MutationObserver(function(e){for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)t.addedNodes&&s(t.addedNodes)}).observe(document.head,{childList:!0}),function(){if("loading"===document.readyState)for(var e,t=document.querySelectorAll("link[rel=import]"),n=0,r=t.length;r>n&&(e=t[n]);n++)c(e)}()),t(function(e){window.HTMLImports.ready=!0,window.HTMLImports.readyTime=(new Date).getTime();var t=p.createEvent("CustomEvent");t.initCustomEvent("HTMLImportsLoaded",!0,!0,e),p.dispatchEvent(t)}),e.IMPORT_LINK_TYPE=u,e.useNative=l,e.rootDocument=p,e.whenReady=t,e.isIE=v}(window.HTMLImports),function(e){var t=[],n=function(e){t.push(e)},r=function(){t.forEach(function(t){t(e)})};e.addModule=n,e.initializeModules=r}(window.HTMLImports),window.HTMLImports.addModule(function(e){var t=/(url\()([^)]*)(\))/g,n=/(@import[\s]+(?!url\())([^;]*)(;)/g,r={resolveUrlsInStyle:function(e,t){var n=e.ownerDocument,r=n.createElement("a");return e.textContent=this.resolveUrlsInCssText(e.textContent,t,r),e},resolveUrlsInCssText:function(e,r,o){var i=this.replaceUrls(e,o,r,t);return i=this.replaceUrls(i,o,r,n)},replaceUrls:function(e,t,n,r){return e.replace(r,function(e,r,o,i){var a=o.replace(/["']/g,"");return n&&(a=new URL(a,n).href),t.href=a,a=t.href,r+"'"+a+"'"+i})}};e.path=r}),window.HTMLImports.addModule(function(e){var t={async:!0,ok:function(e){return e.status>=200&&e.status<300||304===e.status||0===e.status},load:function(n,r,o){var i=new XMLHttpRequest;return(e.flags.debug||e.flags.bust)&&(n+="?"+Math.random()),i.open("GET",n,t.async),i.addEventListener("readystatechange",function(e){if(4===i.readyState){var n=null;try{var a=i.getResponseHeader("Location");a&&(n="/"===a.substr(0,1)?location.origin+a:a)}catch(e){console.error(e.message)}r.call(o,!t.ok(i)&&i,i.response||i.responseText,n)}}),i.send(),i},loadDocument:function(e,t,n){this.load(e,t,n).responseType="document"}};e.xhr=t}),window.HTMLImports.addModule(function(e){var t=e.xhr,n=e.flags,r=function(e,t){this.cache={},this.onload=e,this.oncomplete=t,this.inflight=0,this.pending={}};r.prototype={addNodes:function(e){this.inflight+=e.length;for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)this.require(t);this.checkDone()},addNode:function(e){this.inflight++,this.require(e),this.checkDone()},require:function(e){var t=e.src||e.href;e.__nodeUrl=t,this.dedupe(t,e)||this.fetch(t,e)},dedupe:function(e,t){if(this.pending[e])return this.pending[e].push(t),!0;return this.cache[e]?(this.onload(e,t,this.cache[e]),this.tail(),!0):(this.pending[e]=[t],!1)},fetch:function(e,r){if(n.load&&console.log("fetch",e,r),e)if(e.match(/^data:/)){var o=e.split(","),i=o[0],a=o[1];a=i.indexOf(";base64")>-1?atob(a):decodeURIComponent(a),setTimeout(function(){this.receive(e,r,null,a)}.bind(this),0)}else{var s=function(t,n,o){this.receive(e,r,t,n,o)}.bind(this);t.load(e,s)}else setTimeout(function(){this.receive(e,r,{error:"href must be specified"},null)}.bind(this),0)},receive:function(e,t,n,r,o){this.cache[e]=r;for(var i,a=this.pending[e],s=0,d=a.length;d>s&&(i=a[s]);s++)this.onload(e,i,r,n,o),this.tail();this.pending[e]=null},tail:function(){--this.inflight,this.checkDone()},checkDone:function(){this.inflight||this.oncomplete()}},e.Loader=r}),window.HTMLImports.addModule(function(e){var t=function(e){this.addCallback=e,this.mo=new MutationObserver(this.handler.bind(this))};t.prototype={handler:function(e){for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)"childList"===t.type&&t.addedNodes.length&&this.addedNodes(t.addedNodes)},addedNodes:function(e){this.addCallback&&this.addCallback(e);for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)t.children&&t.children.length&&this.addedNodes(t.children)},observe:function(e){this.mo.observe(e,{childList:!0,subtree:!0})}},e.Observer=t}),window.HTMLImports.addModule(function(e){function t(e){return"link"===e.localName&&e.rel===u}function n(e){var t=r(e);return"data:text/javascript;charset=utf-8,"+encodeURIComponent(t)}function r(e){return e.textContent+o(e)}function o(e){var t=e.ownerDocument;t.__importedScripts=t.__importedScripts||0;var n=e.ownerDocument.baseURI,r=t.__importedScripts?"-"+t.__importedScripts:"";return t.__importedScripts++,"\n//# sourceURL="+n+r+".js\n"}function i(e){var t=e.ownerDocument.createElement("style");return t.textContent=e.textContent,a.resolveUrlsInStyle(t),t}var a=e.path,s=e.rootDocument,d=e.flags,c=e.isIE,u=e.IMPORT_LINK_TYPE,l="link[rel="+u+"]",h={documentSelectors:l,importsSelectors:[l,"link[rel=stylesheet]:not([type])","style:not([type])","script:not([type])",'script[type="application/javascript"]','script[type="text/javascript"]'].join(","),map:{link:"parseLink",script:"parseScript",style:"parseStyle"},dynamicElements:[],parseNext:function(){var e=this.nextToParse();e&&this.parse(e)},parse:function(e){if(this.isParsed(e))return void(d.parse&&console.log("[%s] is already parsed",e.localName));var t=this[this.map[e.localName]];t&&(this.markParsing(e),t.call(this,e))},parseDynamic:function(e,t){this.dynamicElements.push(e),t||this.parseNext()},markParsing:function(e){d.parse&&console.log("parsing",e),this.parsingElement=e},markParsingComplete:function(e){e.__importParsed=!0,this.markDynamicParsingComplete(e),e.__importElement&&(e.__importElement.__importParsed=!0,this.markDynamicParsingComplete(e.__importElement)),this.parsingElement=null,d.parse&&console.log("completed",e)},markDynamicParsingComplete:function(e){var t=this.dynamicElements.indexOf(e);t>=0&&this.dynamicElements.splice(t,1)},parseImport:function(e){if(e["import"]=e.__doc,window.HTMLImports.__importsParsingHook&&window.HTMLImports.__importsParsingHook(e),e["import"]&&(e["import"].__importParsed=!0),this.markParsingComplete(e),e.__resource&&!e.__error?e.dispatchEvent(new CustomEvent("load",{bubbles:!1})):e.dispatchEvent(new CustomEvent("error",{bubbles:!1})),e.__pending)for(var t;e.__pending.length;)t=e.__pending.shift(),t&&t({target:e});this.parseNext()},parseLink:function(e){t(e)?this.parseImport(e):(e.href=e.href,this.parseGeneric(e))},parseStyle:function(e){var t=e;e=i(e),t.__appliedElement=e,e.__importElement=t,this.parseGeneric(e)},parseGeneric:function(e){this.trackElement(e),this.addElementToDocument(e)},rootImportForElement:function(e){for(var t=e;t.ownerDocument.__importLink;)t=t.ownerDocument.__importLink;return t},addElementToDocument:function(e){var t=this.rootImportForElement(e.__importElement||e);t.parentNode.insertBefore(e,t)},trackElement:function(e,t){var n=this,r=function(o){e.removeEventListener("load",r),e.removeEventListener("error",r),t&&t(o),n.markParsingComplete(e),n.parseNext()};if(e.addEventListener("load",r),e.addEventListener("error",r),c&&"style"===e.localName){var o=!1;if(-1==e.textContent.indexOf("@import"))o=!0;else if(e.sheet){o=!0;for(var i,a=e.sheet.cssRules,s=a?a.length:0,d=0;s>d&&(i=a[d]);d++)i.type===CSSRule.IMPORT_RULE&&(o=o&&Boolean(i.styleSheet))}o&&setTimeout(function(){e.dispatchEvent(new CustomEvent("load",{bubbles:!1}))})}},parseScript:function(t){var r=document.createElement("script");r.__importElement=t,r.src=t.src?t.src:n(t),e.currentScript=t,this.trackElement(r,function(t){r.parentNode&&r.parentNode.removeChild(r),e.currentScript=null}),this.addElementToDocument(r)},nextToParse:function(){return this._mayParse=[],!this.parsingElement&&(this.nextToParseInDoc(s)||this.nextToParseDynamic())},nextToParseInDoc:function(e,n){if(e&&this._mayParse.indexOf(e)<0){this._mayParse.push(e);for(var r,o=e.querySelectorAll(this.parseSelectorsForNode(e)),i=0,a=o.length;a>i&&(r=o[i]);i++)if(!this.isParsed(r))return this.hasResource(r)?t(r)?this.nextToParseInDoc(r.__doc,r):r:void 0}return n},nextToParseDynamic:function(){return this.dynamicElements[0]},parseSelectorsForNode:function(e){var t=e.ownerDocument||e;return t===s?this.documentSelectors:this.importsSelectors},isParsed:function(e){return e.__importParsed},needsDynamicParsing:function(e){return this.dynamicElements.indexOf(e)>=0},hasResource:function(e){return!t(e)||void 0!==e.__doc}};e.parser=h,e.IMPORT_SELECTOR=l}),window.HTMLImports.addModule(function(e){function t(e){return n(e,a)}function n(e,t){return"link"===e.localName&&e.getAttribute("rel")===t}function r(e){return!!Object.getOwnPropertyDescriptor(e,"baseURI")}function o(e,t){var n=document.implementation.createHTMLDocument(a);n._URL=t;var o=n.createElement("base");o.setAttribute("href",t),n.baseURI||r(n)||Object.defineProperty(n,"baseURI",{value:t});var i=n.createElement("meta");return i.setAttribute("charset","utf-8"),n.head.appendChild(i),n.head.appendChild(o),n.body.innerHTML=e,window.HTMLTemplateElement&&HTMLTemplateElement.bootstrap&&HTMLTemplateElement.bootstrap(n),n}var i=e.flags,a=e.IMPORT_LINK_TYPE,s=e.IMPORT_SELECTOR,d=e.rootDocument,c=e.Loader,u=e.Observer,l=e.parser,h={documents:{},documentPreloadSelectors:s,importsPreloadSelectors:[s].join(","),loadNode:function(e){m.addNode(e)},loadSubtree:function(e){var t=this.marshalNodes(e);m.addNodes(t)},marshalNodes:function(e){return e.querySelectorAll(this.loadSelectorsForNode(e))},loadSelectorsForNode:function(e){var t=e.ownerDocument||e;return t===d?this.documentPreloadSelectors:this.importsPreloadSelectors},loaded:function(e,n,r,a,s){if(i.load&&console.log("loaded",e,n),n.__resource=r,n.__error=a,t(n)){var d=this.documents[e];void 0===d&&(d=a?null:o(r,s||e),d&&(d.__importLink=n,this.bootDocument(d)),this.documents[e]=d),n.__doc=d}l.parseNext()},bootDocument:function(e){this.loadSubtree(e),this.observer.observe(e),l.parseNext()},loadedAll:function(){l.parseNext()}},m=new c(h.loaded.bind(h),h.loadedAll.bind(h));if(h.observer=new u,!document.baseURI){var p={get:function(){var e=document.querySelector("base");return e?e.href:window.location.href},configurable:!0};Object.defineProperty(document,"baseURI",p),Object.defineProperty(d,"baseURI",p)}e.importer=h,e.importLoader=m}),window.HTMLImports.addModule(function(e){var t=e.parser,n=e.importer,r={added:function(e){for(var r,o,i,a,s=0,d=e.length;d>s&&(a=e[s]);s++)r||(r=a.ownerDocument,o=t.isParsed(r)),i=this.shouldLoadNode(a),i&&n.loadNode(a),this.shouldParseNode(a)&&o&&t.parseDynamic(a,i)},shouldLoadNode:function(e){return 1===e.nodeType&&o.call(e,n.loadSelectorsForNode(e))},shouldParseNode:function(e){return 1===e.nodeType&&o.call(e,t.parseSelectorsForNode(e))}};n.observer.addCallback=r.added.bind(r);var o=HTMLElement.prototype.matches||HTMLElement.prototype.matchesSelector||HTMLElement.prototype.webkitMatchesSelector||HTMLElement.prototype.mozMatchesSelector||HTMLElement.prototype.msMatchesSelector}),function(e){function t(){window.HTMLImports.importer.bootDocument(r)}var n=e.initializeModules;e.isIE;if(!e.useNative){n();var r=e.rootDocument;"complete"===document.readyState||"interactive"===document.readyState&&!window.attachEvent?t():document.addEventListener("DOMContentLoaded",t)}}(window.HTMLImports); -------------------------------------------------------------------------------- /bower_components/webcomponentsjs/MutationObserver.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. 4 | * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt 5 | * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 6 | * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt 7 | * Code distributed by Google as part of the polymer project is also 8 | * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt 9 | */ 10 | // @version 0.7.22 11 | if (typeof WeakMap === "undefined") { 12 | (function() { 13 | var defineProperty = Object.defineProperty; 14 | var counter = Date.now() % 1e9; 15 | var WeakMap = function() { 16 | this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__"); 17 | }; 18 | WeakMap.prototype = { 19 | set: function(key, value) { 20 | var entry = key[this.name]; 21 | if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, { 22 | value: [ key, value ], 23 | writable: true 24 | }); 25 | return this; 26 | }, 27 | get: function(key) { 28 | var entry; 29 | return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined; 30 | }, 31 | "delete": function(key) { 32 | var entry = key[this.name]; 33 | if (!entry || entry[0] !== key) return false; 34 | entry[0] = entry[1] = undefined; 35 | return true; 36 | }, 37 | has: function(key) { 38 | var entry = key[this.name]; 39 | if (!entry) return false; 40 | return entry[0] === key; 41 | } 42 | }; 43 | window.WeakMap = WeakMap; 44 | })(); 45 | } 46 | 47 | (function(global) { 48 | if (global.JsMutationObserver) { 49 | return; 50 | } 51 | var registrationsTable = new WeakMap(); 52 | var setImmediate; 53 | if (/Trident|Edge/.test(navigator.userAgent)) { 54 | setImmediate = setTimeout; 55 | } else if (window.setImmediate) { 56 | setImmediate = window.setImmediate; 57 | } else { 58 | var setImmediateQueue = []; 59 | var sentinel = String(Math.random()); 60 | window.addEventListener("message", function(e) { 61 | if (e.data === sentinel) { 62 | var queue = setImmediateQueue; 63 | setImmediateQueue = []; 64 | queue.forEach(function(func) { 65 | func(); 66 | }); 67 | } 68 | }); 69 | setImmediate = function(func) { 70 | setImmediateQueue.push(func); 71 | window.postMessage(sentinel, "*"); 72 | }; 73 | } 74 | var isScheduled = false; 75 | var scheduledObservers = []; 76 | function scheduleCallback(observer) { 77 | scheduledObservers.push(observer); 78 | if (!isScheduled) { 79 | isScheduled = true; 80 | setImmediate(dispatchCallbacks); 81 | } 82 | } 83 | function wrapIfNeeded(node) { 84 | return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(node) || node; 85 | } 86 | function dispatchCallbacks() { 87 | isScheduled = false; 88 | var observers = scheduledObservers; 89 | scheduledObservers = []; 90 | observers.sort(function(o1, o2) { 91 | return o1.uid_ - o2.uid_; 92 | }); 93 | var anyNonEmpty = false; 94 | observers.forEach(function(observer) { 95 | var queue = observer.takeRecords(); 96 | removeTransientObserversFor(observer); 97 | if (queue.length) { 98 | observer.callback_(queue, observer); 99 | anyNonEmpty = true; 100 | } 101 | }); 102 | if (anyNonEmpty) dispatchCallbacks(); 103 | } 104 | function removeTransientObserversFor(observer) { 105 | observer.nodes_.forEach(function(node) { 106 | var registrations = registrationsTable.get(node); 107 | if (!registrations) return; 108 | registrations.forEach(function(registration) { 109 | if (registration.observer === observer) registration.removeTransientObservers(); 110 | }); 111 | }); 112 | } 113 | function forEachAncestorAndObserverEnqueueRecord(target, callback) { 114 | for (var node = target; node; node = node.parentNode) { 115 | var registrations = registrationsTable.get(node); 116 | if (registrations) { 117 | for (var j = 0; j < registrations.length; j++) { 118 | var registration = registrations[j]; 119 | var options = registration.options; 120 | if (node !== target && !options.subtree) continue; 121 | var record = callback(options); 122 | if (record) registration.enqueue(record); 123 | } 124 | } 125 | } 126 | } 127 | var uidCounter = 0; 128 | function JsMutationObserver(callback) { 129 | this.callback_ = callback; 130 | this.nodes_ = []; 131 | this.records_ = []; 132 | this.uid_ = ++uidCounter; 133 | } 134 | JsMutationObserver.prototype = { 135 | observe: function(target, options) { 136 | target = wrapIfNeeded(target); 137 | if (!options.childList && !options.attributes && !options.characterData || options.attributeOldValue && !options.attributes || options.attributeFilter && options.attributeFilter.length && !options.attributes || options.characterDataOldValue && !options.characterData) { 138 | throw new SyntaxError(); 139 | } 140 | var registrations = registrationsTable.get(target); 141 | if (!registrations) registrationsTable.set(target, registrations = []); 142 | var registration; 143 | for (var i = 0; i < registrations.length; i++) { 144 | if (registrations[i].observer === this) { 145 | registration = registrations[i]; 146 | registration.removeListeners(); 147 | registration.options = options; 148 | break; 149 | } 150 | } 151 | if (!registration) { 152 | registration = new Registration(this, target, options); 153 | registrations.push(registration); 154 | this.nodes_.push(target); 155 | } 156 | registration.addListeners(); 157 | }, 158 | disconnect: function() { 159 | this.nodes_.forEach(function(node) { 160 | var registrations = registrationsTable.get(node); 161 | for (var i = 0; i < registrations.length; i++) { 162 | var registration = registrations[i]; 163 | if (registration.observer === this) { 164 | registration.removeListeners(); 165 | registrations.splice(i, 1); 166 | break; 167 | } 168 | } 169 | }, this); 170 | this.records_ = []; 171 | }, 172 | takeRecords: function() { 173 | var copyOfRecords = this.records_; 174 | this.records_ = []; 175 | return copyOfRecords; 176 | } 177 | }; 178 | function MutationRecord(type, target) { 179 | this.type = type; 180 | this.target = target; 181 | this.addedNodes = []; 182 | this.removedNodes = []; 183 | this.previousSibling = null; 184 | this.nextSibling = null; 185 | this.attributeName = null; 186 | this.attributeNamespace = null; 187 | this.oldValue = null; 188 | } 189 | function copyMutationRecord(original) { 190 | var record = new MutationRecord(original.type, original.target); 191 | record.addedNodes = original.addedNodes.slice(); 192 | record.removedNodes = original.removedNodes.slice(); 193 | record.previousSibling = original.previousSibling; 194 | record.nextSibling = original.nextSibling; 195 | record.attributeName = original.attributeName; 196 | record.attributeNamespace = original.attributeNamespace; 197 | record.oldValue = original.oldValue; 198 | return record; 199 | } 200 | var currentRecord, recordWithOldValue; 201 | function getRecord(type, target) { 202 | return currentRecord = new MutationRecord(type, target); 203 | } 204 | function getRecordWithOldValue(oldValue) { 205 | if (recordWithOldValue) return recordWithOldValue; 206 | recordWithOldValue = copyMutationRecord(currentRecord); 207 | recordWithOldValue.oldValue = oldValue; 208 | return recordWithOldValue; 209 | } 210 | function clearRecords() { 211 | currentRecord = recordWithOldValue = undefined; 212 | } 213 | function recordRepresentsCurrentMutation(record) { 214 | return record === recordWithOldValue || record === currentRecord; 215 | } 216 | function selectRecord(lastRecord, newRecord) { 217 | if (lastRecord === newRecord) return lastRecord; 218 | if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) return recordWithOldValue; 219 | return null; 220 | } 221 | function Registration(observer, target, options) { 222 | this.observer = observer; 223 | this.target = target; 224 | this.options = options; 225 | this.transientObservedNodes = []; 226 | } 227 | Registration.prototype = { 228 | enqueue: function(record) { 229 | var records = this.observer.records_; 230 | var length = records.length; 231 | if (records.length > 0) { 232 | var lastRecord = records[length - 1]; 233 | var recordToReplaceLast = selectRecord(lastRecord, record); 234 | if (recordToReplaceLast) { 235 | records[length - 1] = recordToReplaceLast; 236 | return; 237 | } 238 | } else { 239 | scheduleCallback(this.observer); 240 | } 241 | records[length] = record; 242 | }, 243 | addListeners: function() { 244 | this.addListeners_(this.target); 245 | }, 246 | addListeners_: function(node) { 247 | var options = this.options; 248 | if (options.attributes) node.addEventListener("DOMAttrModified", this, true); 249 | if (options.characterData) node.addEventListener("DOMCharacterDataModified", this, true); 250 | if (options.childList) node.addEventListener("DOMNodeInserted", this, true); 251 | if (options.childList || options.subtree) node.addEventListener("DOMNodeRemoved", this, true); 252 | }, 253 | removeListeners: function() { 254 | this.removeListeners_(this.target); 255 | }, 256 | removeListeners_: function(node) { 257 | var options = this.options; 258 | if (options.attributes) node.removeEventListener("DOMAttrModified", this, true); 259 | if (options.characterData) node.removeEventListener("DOMCharacterDataModified", this, true); 260 | if (options.childList) node.removeEventListener("DOMNodeInserted", this, true); 261 | if (options.childList || options.subtree) node.removeEventListener("DOMNodeRemoved", this, true); 262 | }, 263 | addTransientObserver: function(node) { 264 | if (node === this.target) return; 265 | this.addListeners_(node); 266 | this.transientObservedNodes.push(node); 267 | var registrations = registrationsTable.get(node); 268 | if (!registrations) registrationsTable.set(node, registrations = []); 269 | registrations.push(this); 270 | }, 271 | removeTransientObservers: function() { 272 | var transientObservedNodes = this.transientObservedNodes; 273 | this.transientObservedNodes = []; 274 | transientObservedNodes.forEach(function(node) { 275 | this.removeListeners_(node); 276 | var registrations = registrationsTable.get(node); 277 | for (var i = 0; i < registrations.length; i++) { 278 | if (registrations[i] === this) { 279 | registrations.splice(i, 1); 280 | break; 281 | } 282 | } 283 | }, this); 284 | }, 285 | handleEvent: function(e) { 286 | e.stopImmediatePropagation(); 287 | switch (e.type) { 288 | case "DOMAttrModified": 289 | var name = e.attrName; 290 | var namespace = e.relatedNode.namespaceURI; 291 | var target = e.target; 292 | var record = new getRecord("attributes", target); 293 | record.attributeName = name; 294 | record.attributeNamespace = namespace; 295 | var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue; 296 | forEachAncestorAndObserverEnqueueRecord(target, function(options) { 297 | if (!options.attributes) return; 298 | if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) { 299 | return; 300 | } 301 | if (options.attributeOldValue) return getRecordWithOldValue(oldValue); 302 | return record; 303 | }); 304 | break; 305 | 306 | case "DOMCharacterDataModified": 307 | var target = e.target; 308 | var record = getRecord("characterData", target); 309 | var oldValue = e.prevValue; 310 | forEachAncestorAndObserverEnqueueRecord(target, function(options) { 311 | if (!options.characterData) return; 312 | if (options.characterDataOldValue) return getRecordWithOldValue(oldValue); 313 | return record; 314 | }); 315 | break; 316 | 317 | case "DOMNodeRemoved": 318 | this.addTransientObserver(e.target); 319 | 320 | case "DOMNodeInserted": 321 | var changedNode = e.target; 322 | var addedNodes, removedNodes; 323 | if (e.type === "DOMNodeInserted") { 324 | addedNodes = [ changedNode ]; 325 | removedNodes = []; 326 | } else { 327 | addedNodes = []; 328 | removedNodes = [ changedNode ]; 329 | } 330 | var previousSibling = changedNode.previousSibling; 331 | var nextSibling = changedNode.nextSibling; 332 | var record = getRecord("childList", e.target.parentNode); 333 | record.addedNodes = addedNodes; 334 | record.removedNodes = removedNodes; 335 | record.previousSibling = previousSibling; 336 | record.nextSibling = nextSibling; 337 | forEachAncestorAndObserverEnqueueRecord(e.relatedNode, function(options) { 338 | if (!options.childList) return; 339 | return record; 340 | }); 341 | } 342 | clearRecords(); 343 | } 344 | }; 345 | global.JsMutationObserver = JsMutationObserver; 346 | if (!global.MutationObserver) { 347 | global.MutationObserver = JsMutationObserver; 348 | JsMutationObserver._isPolyfilled = true; 349 | } 350 | })(self); -------------------------------------------------------------------------------- /bower_components/webcomponentsjs/MutationObserver.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. 4 | * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt 5 | * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 6 | * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt 7 | * Code distributed by Google as part of the polymer project is also 8 | * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt 9 | */ 10 | // @version 0.7.22 11 | "undefined"==typeof WeakMap&&!function(){var e=Object.defineProperty,t=Date.now()%1e9,r=function(){this.name="__st"+(1e9*Math.random()>>>0)+(t++ +"__")};r.prototype={set:function(t,r){var i=t[this.name];return i&&i[0]===t?i[1]=r:e(t,this.name,{value:[t,r],writable:!0}),this},get:function(e){var t;return(t=e[this.name])&&t[0]===e?t[1]:void 0},"delete":function(e){var t=e[this.name];return t&&t[0]===e?(t[0]=t[1]=void 0,!0):!1},has:function(e){var t=e[this.name];return t?t[0]===e:!1}},window.WeakMap=r}(),function(e){function t(e){N.push(e),O||(O=!0,b(i))}function r(e){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(e)||e}function i(){O=!1;var e=N;N=[],e.sort(function(e,t){return e.uid_-t.uid_});var t=!1;e.forEach(function(e){var r=e.takeRecords();n(e),r.length&&(e.callback_(r,e),t=!0)}),t&&i()}function n(e){e.nodes_.forEach(function(t){var r=p.get(t);r&&r.forEach(function(t){t.observer===e&&t.removeTransientObservers()})})}function a(e,t){for(var r=e;r;r=r.parentNode){var i=p.get(r);if(i)for(var n=0;n0){var n=r[i-1],a=l(n,e);if(a)return void(r[i-1]=a)}else t(this.observer);r[i]=e},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(e){var t=this.options;t.attributes&&e.addEventListener("DOMAttrModified",this,!0),t.characterData&&e.addEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.addEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(e){var t=this.options;t.attributes&&e.removeEventListener("DOMAttrModified",this,!0),t.characterData&&e.removeEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.removeEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(e){if(e!==this.target){this.addListeners_(e),this.transientObservedNodes.push(e);var t=p.get(e);t||p.set(e,t=[]),t.push(this)}},removeTransientObservers:function(){var e=this.transientObservedNodes;this.transientObservedNodes=[],e.forEach(function(e){this.removeListeners_(e);for(var t=p.get(e),r=0;r` tags in the main document block the loading of such imports. This is to ensure the imports have loaded and any registered elements in them have been upgraded. 79 | 80 | The webcomponents.js and webcomponents-lite.js polyfills parse element definitions and handle their upgrade asynchronously. If prematurely fetching the element from the DOM before it has an opportunity to upgrade, you'll be working with an `HTMLUnknownElement`. 81 | 82 | For these situations (or when you need an approximate replacement for the Polymer 0.5 `polymer-ready` behavior), you can use the `WebComponentsReady` event as a signal before interacting with the element. The criteria for this event to fire is all Custom Elements with definitions registered by the time HTML Imports available at load time have loaded have upgraded. 83 | 84 | ```js 85 | window.addEventListener('WebComponentsReady', function(e) { 86 | // imports are loaded and elements have been registered 87 | console.log('Components are ready'); 88 | }); 89 | ``` 90 | 91 | ## Known Issues 92 | 93 | * [Limited CSS encapsulation](#encapsulation) 94 | * [Element wrapping / unwrapping limitations](#wrapping) 95 | * [Custom element's constructor property is unreliable](#constructor) 96 | * [Contenteditable elements do not trigger MutationObserver](#contentedit) 97 | * [ShadowCSS: :host-context(...):host(...) doesn't work](#hostcontext) 98 | * [ShadowCSS: :host(.zot:not(.bar:nth-child(2))) doesn't work](#nestedparens) 99 | * [HTML imports: document.currentScript doesn't work as expected](#currentscript) 100 | * [execCommand isn't supported under Shadow DOM](#execcommand) 101 | 102 | ### Limited CSS encapsulation 103 | Under native Shadow DOM, CSS selectors cannot cross the shadow boundary. This means document level styles don't apply to shadow roots, and styles defined within a shadow root don't apply outside of that shadow root. [Several selectors](http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom-201/) are provided to be able to deal with the shadow boundary. 104 | 105 | The Shadow DOM polyfill can't prevent document styles from leaking into shadow roots. It can, however, encapsulate styles within shadow roots to some extent. This behavior isn't automatically emulated by the Shadow DOM polyfill, but it can be achieved by manually using the included ShadowCSS shim: 106 | 107 | ``` 108 | WebComponents.ShadowCSS.shimStyling( shadowRoot, scope ); 109 | ``` 110 | 111 | ... where `shadowRoot` is the shadow root of a DOM element, and `scope` is the name of the scope used to prefix the selectors. This removes all ` 41 | 255 | 256 | 257 |
258 |
259 | 260 | 261 | 262 | 263 | 264 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 |

VowelSynth

265 |

266 |
FreqVolVibDepthVibRateDelay
283 |
284 |
285 |
286 |
287 | Pointer drag in the square area or press SPACE to generate voice. 288 |
289 | Now support mobile browsers. 290 |

291 | Source code is available at :
292 | https://github.com/g200kg/vowelsynth 293 |
294 |
295 |
296 | 297 |
298 | 299 | 300 | --------------------------------------------------------------------------------