├── .gitignore ├── .jshintrc ├── Gruntfile.js ├── LICENSE-MIT ├── README.md ├── bin └── update-website.sh ├── non-npm ├── angular-1-4-fixed.js ├── angular-bind-polymer.js ├── file-saver │ ├── FileSaver.js │ ├── FileSaver.min.js │ ├── LICENSE.md │ ├── README.md │ └── demo │ │ ├── demo.css │ │ ├── demo.js │ │ ├── demo.min.js │ │ └── index.xhtml └── viktor │ ├── globals.js │ └── patch-sharing.js ├── npm-shrinkwrap.json ├── package.json ├── src ├── app │ ├── 3rd-party │ │ └── google-api │ │ │ └── module.js │ ├── app.js │ └── ui │ │ ├── controller │ │ ├── compressor.js │ │ ├── delay.js │ │ ├── keyboard.js │ │ ├── master-controls.js │ │ ├── master-volume.js │ │ ├── modulation-wheel.js │ │ ├── pitch-bend.js │ │ └── reverb.js │ │ ├── fixes.js │ │ ├── module.js │ │ ├── module │ │ ├── footer │ │ │ ├── controller │ │ │ │ └── footer.js │ │ │ ├── module.js │ │ │ └── template │ │ │ │ └── footer.html │ │ ├── instruments │ │ │ └── synth │ │ │ │ ├── controller │ │ │ │ ├── envelopes.js │ │ │ │ ├── filter.js │ │ │ │ ├── lfo.js │ │ │ │ ├── mixer.js │ │ │ │ ├── modulation.js │ │ │ │ ├── noise.js │ │ │ │ ├── oscillator-bank.js │ │ │ │ └── polyphony.js │ │ │ │ ├── module.js │ │ │ │ └── template │ │ │ │ ├── envelopes.html │ │ │ │ ├── filter.html │ │ │ │ ├── lfo.html │ │ │ │ ├── mixer.html │ │ │ │ ├── modulation+polyphony.html │ │ │ │ ├── noise.html │ │ │ │ ├── oscillator-bank.html │ │ │ │ └── synth.html │ │ ├── maillist │ │ │ ├── controller │ │ │ │ ├── maillist.js │ │ │ │ └── midi-data.js │ │ │ ├── module.js │ │ │ └── template │ │ │ │ └── maillist.html │ │ ├── patch-library │ │ │ ├── controller │ │ │ │ ├── drop-down.js │ │ │ │ └── patch-library.js │ │ │ ├── module.js │ │ │ └── template │ │ │ │ ├── drop-down.html │ │ │ │ └── patch-library.html │ │ ├── settings │ │ │ ├── controller │ │ │ │ └── settings.js │ │ │ ├── module.js │ │ │ └── template │ │ │ │ └── settings.html │ │ ├── t-shirts │ │ │ ├── controller │ │ │ │ └── t-shirts.js │ │ │ ├── module.js │ │ │ └── template │ │ │ │ └── t-shirts.html │ │ └── typed-ad │ │ │ ├── controller │ │ │ └── typed-ad.js │ │ │ ├── module.js │ │ │ └── template │ │ │ └── typed-ad.html │ │ └── template │ │ ├── compressor.html │ │ ├── daw.html │ │ ├── delay.html │ │ ├── keyboard.html │ │ ├── master-controls.html │ │ ├── master-volume.html │ │ ├── modulation-wheel.html │ │ ├── pitch-bend.html │ │ └── reverb.html ├── client │ ├── images │ │ ├── 0-100-knob.png │ │ ├── 0-100-slider-base.png │ │ ├── 6-range-knob.png │ │ ├── cards │ │ │ ├── facebook-card.jpg │ │ │ └── twitter-card.jpg │ │ ├── lfo-knob.png │ │ ├── noise-slider-base.png │ │ ├── range-knob.png │ │ ├── slider-knob.png │ │ ├── switch.png │ │ ├── synth-base-panel.jpg │ │ ├── t-shirts │ │ │ ├── button-dark.png │ │ │ ├── button-light.png │ │ │ ├── ghost-jam.png │ │ │ ├── metalic.png │ │ │ ├── metalic2.png │ │ │ ├── mono.png │ │ │ ├── sketch-light.png │ │ │ ├── sketch.png │ │ │ └── true-color.png │ │ └── wheel.png │ ├── index.html │ └── styles │ │ ├── ads.styl │ │ ├── bootstrap-override.styl │ │ ├── daw │ │ ├── bottom-row.styl │ │ ├── daw.styl │ │ ├── keyboard.styl │ │ ├── modals.styl │ │ ├── patch-library │ │ │ ├── drop-down.styl │ │ │ └── patch-library.styl │ │ ├── settings │ │ │ └── modal.styl │ │ ├── synth │ │ │ ├── control-bank.styl │ │ │ ├── envelopes.styl │ │ │ ├── mixer.styl │ │ │ ├── modulation.styl │ │ │ ├── noise.styl │ │ │ ├── oscillator-bank.styl │ │ │ └── synth.styl │ │ └── t-shirts │ │ │ └── t-shirts.styl │ │ ├── fonts.styl │ │ ├── footer.styl │ │ ├── maillist.styl │ │ ├── main.styl │ │ ├── social.styl │ │ ├── variables.styl │ │ └── viktor-round-button.styl └── server │ ├── client │ ├── bower.json │ └── non-bower │ │ └── webaudio-controls │ │ ├── .gitignore │ │ ├── Gruntfile.js │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bower.json │ │ ├── bower_components │ │ ├── NodeBind │ │ │ ├── conf │ │ │ │ ├── karma.conf.js │ │ │ │ └── mocha.conf.js │ │ │ └── src │ │ │ │ └── NodeBind.js │ │ ├── TemplateBinding │ │ │ ├── build.json │ │ │ ├── load.js │ │ │ ├── src │ │ │ │ ├── TemplateBinding.js │ │ │ │ └── template_element.css │ │ │ └── template-instantiation.md │ │ ├── URL │ │ │ ├── testharness.css │ │ │ ├── testharness.js │ │ │ ├── testharnessreport.js │ │ │ ├── url.js │ │ │ ├── urltestgenerator.html │ │ │ ├── urltestharness.html │ │ │ ├── urltestparser.js │ │ │ ├── urltestrunner.html │ │ │ └── urltests.txt │ │ ├── core-component-page │ │ │ └── core-component-page.html │ │ ├── observe-js │ │ │ ├── conf │ │ │ │ ├── karma.conf.js │ │ │ │ └── mocha.conf.js │ │ │ ├── observe-js.html │ │ │ ├── src │ │ │ │ └── observe.js │ │ │ └── util │ │ │ │ └── planner.js │ │ ├── polymer-expressions │ │ │ ├── build.json │ │ │ ├── conf │ │ │ │ ├── karma.conf.js │ │ │ │ └── mocha.conf.js │ │ │ ├── polymer-expressions.html │ │ │ ├── smoke.html │ │ │ ├── src │ │ │ │ └── polymer-expressions.js │ │ │ └── third_party │ │ │ │ └── esprima │ │ │ │ ├── CONTRIBUTING.md │ │ │ │ ├── LICENSE.BSD │ │ │ │ └── esprima.js │ │ ├── polymer-gestures │ │ │ ├── .gitignore │ │ │ ├── banner.txt │ │ │ ├── build.json │ │ │ ├── conf │ │ │ │ └── karma.conf.js │ │ │ ├── polymer-gestures.html │ │ │ ├── polymer-gestures.js │ │ │ ├── src │ │ │ │ ├── dispatcher.js │ │ │ │ ├── eventFactory.js │ │ │ │ ├── hold.js │ │ │ │ ├── mouse.js │ │ │ │ ├── ms.js │ │ │ │ ├── pinch.js │ │ │ │ ├── platform-events.js │ │ │ │ ├── pointer.js │ │ │ │ ├── pointermap.js │ │ │ │ ├── scope.js │ │ │ │ ├── tap.js │ │ │ │ ├── targetfind.js │ │ │ │ ├── touch-action.js │ │ │ │ ├── touch.js │ │ │ │ └── track.js │ │ │ └── test │ │ │ │ ├── html │ │ │ │ ├── content-handler.html │ │ │ │ ├── focus.html │ │ │ │ └── ghostclick.html │ │ │ │ ├── js │ │ │ │ ├── eventListeners.js │ │ │ │ ├── fake.js │ │ │ │ ├── gestures.js │ │ │ │ ├── pointermap.js │ │ │ │ └── setup.js │ │ │ │ └── runner.html │ │ ├── polymer │ │ │ ├── PRIMER.md │ │ │ ├── build.bat │ │ │ ├── explainer │ │ │ │ ├── data-bind.vsdx │ │ │ │ └── samples.html │ │ │ ├── polymer-micro.html │ │ │ ├── polymer-mini.html │ │ │ ├── polymer.html │ │ │ ├── src │ │ │ │ ├── expr │ │ │ │ │ ├── focus.html │ │ │ │ │ ├── gestures.html │ │ │ │ │ ├── log.html │ │ │ │ │ ├── sinspect.html │ │ │ │ │ ├── style-auditor.html │ │ │ │ │ └── style-protector.html │ │ │ │ ├── features │ │ │ │ │ ├── micro │ │ │ │ │ │ ├── attributes.html │ │ │ │ │ │ ├── constructor.html │ │ │ │ │ │ ├── extends.html │ │ │ │ │ │ ├── mixins.html │ │ │ │ │ │ └── properties.html │ │ │ │ │ ├── mini │ │ │ │ │ │ ├── ready.html │ │ │ │ │ │ ├── shadow.html │ │ │ │ │ │ ├── shady.html │ │ │ │ │ │ └── template.html │ │ │ │ │ └── standard │ │ │ │ │ │ ├── annotations.html │ │ │ │ │ │ ├── configure.html │ │ │ │ │ │ ├── effects.html │ │ │ │ │ │ ├── events.html │ │ │ │ │ │ ├── notify-path.html │ │ │ │ │ │ ├── resolveUrl.html │ │ │ │ │ │ ├── styling.html │ │ │ │ │ │ ├── utils.html │ │ │ │ │ │ └── x-styling.html │ │ │ │ ├── lib │ │ │ │ │ ├── annotations │ │ │ │ │ │ ├── annotations.html │ │ │ │ │ │ └── demo │ │ │ │ │ │ │ └── app-chrome.html │ │ │ │ │ ├── array-observe.html │ │ │ │ │ ├── array-splice.html │ │ │ │ │ ├── async.html │ │ │ │ │ ├── base.html │ │ │ │ │ ├── bind │ │ │ │ │ │ ├── bind-annotations.html │ │ │ │ │ │ ├── bind-effects.html │ │ │ │ │ │ ├── bind.html │ │ │ │ │ │ └── demo │ │ │ │ │ │ │ ├── app-chrome.html │ │ │ │ │ │ │ ├── app.html │ │ │ │ │ │ │ └── src │ │ │ │ │ │ │ ├── annotations-bind-demo.html │ │ │ │ │ │ │ └── bind-demo.html │ │ │ │ │ ├── case-map.html │ │ │ │ │ ├── collection.html │ │ │ │ │ ├── css-parse.html │ │ │ │ │ ├── debounce.html │ │ │ │ │ ├── dom-api.html │ │ │ │ │ ├── dom-module.html │ │ │ │ │ ├── event-api.html │ │ │ │ │ ├── gestures.html │ │ │ │ │ ├── lang.html │ │ │ │ │ ├── module.html │ │ │ │ │ ├── polymer.html │ │ │ │ │ ├── resolve-url.html │ │ │ │ │ ├── settings.html │ │ │ │ │ ├── style-defaults.html │ │ │ │ │ ├── style-transformer.html │ │ │ │ │ ├── style-util.html │ │ │ │ │ ├── template │ │ │ │ │ │ ├── templatizer.html │ │ │ │ │ │ ├── x-array-selector.html │ │ │ │ │ │ ├── x-autobind.html │ │ │ │ │ │ ├── x-if.html │ │ │ │ │ │ ├── x-repeat.html │ │ │ │ │ │ └── x-template.html │ │ │ │ │ └── x-style.html │ │ │ │ └── polymer.html │ │ │ └── wct.conf.js │ │ └── webcomponentsjs │ │ │ ├── CustomElements.js │ │ │ ├── CustomElements.min.js │ │ │ ├── HTMLImports.js │ │ │ ├── HTMLImports.min.js │ │ │ ├── ShadowDOM.js │ │ │ ├── ShadowDOM.min.js │ │ │ ├── build.log │ │ │ ├── webcomponents-lite.js │ │ │ ├── webcomponents-lite.min.js │ │ │ ├── webcomponents.js │ │ │ └── webcomponents.min.js │ │ ├── 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 │ │ ├── lib │ │ ├── webaudio-controls.min.html │ │ ├── webaudio-keyboard.min.html │ │ ├── webaudio-knob.min.html │ │ ├── webaudio-param.min.html │ │ ├── webaudio-slider.min.html │ │ └── webaudio-switch.min.html │ │ ├── package.json │ │ ├── sample1.html │ │ ├── sample2.html │ │ ├── sample3.html │ │ ├── sample4.html │ │ └── webcomponents │ │ ├── webaudio-controls.html │ │ ├── webaudio-controls.min.html │ │ ├── webaudio-keyboard.html │ │ ├── webaudio-knob.html │ │ ├── webaudio-param.html │ │ ├── webaudio-slider.html │ │ └── webaudio-switch.html │ └── server.js └── test ├── data └── patch-sharing.js └── patch-sharing-test.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | node_modules 4 | 5 | src/server/client/bower_components 6 | src/server/client/impulses 7 | src/server/client/css 8 | src/server/client/js 9 | src/server/client/images 10 | src/server/client/index.html -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "curly": true, 3 | "eqeqeq": true, 4 | "immed": true, 5 | "latedef": "nofunc", 6 | "newcap": true, 7 | "noarg": true, 8 | "sub": true, 9 | "undef": true, 10 | "unused": true, 11 | "boss": true, 12 | "eqnull": true, 13 | "node": true, 14 | "predef": ["describe", "it", "before", "beforeEach", "after", "afterEach", "module", "window", "document", "navigator", "FileReader", "Blob", "ga", "$", "alert"] 15 | } 16 | -------------------------------------------------------------------------------- /LICENSE-MIT: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015-2019 Nikolay Tsenkov nikolay@tsenkov.net 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation 5 | files (the "Software"), to deal in the Software without 6 | restriction, including without limitation the rights to use, 7 | copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the 9 | Software is furnished to do so, subject to the following 10 | conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /bin/update-website.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | mkdir build && cd build/ 4 | 5 | git clone https://github.com/nicroto/viktor.git 6 | 7 | cd viktor 8 | 9 | git checkout gh-pages 10 | 11 | rm -rf * 12 | 13 | cp -R ../../src/server/client/ . 14 | 15 | git add --all 16 | 17 | git commit -m "update website" 18 | 19 | git push -------------------------------------------------------------------------------- /non-npm/angular-bind-polymer.js: -------------------------------------------------------------------------------- 1 | angular.module('eee-c.angularBindPolymer', []). 2 | directive('bindPolymer', ['$parse', function($parse) { 3 | 'use strict'; 4 | return { 5 | restrict: 'A', 6 | scope : false, 7 | compile: function bindPolymerCompile($element, $attr) { 8 | var attrMap = {}; 9 | 10 | for (var prop in $attr) { 11 | if (angular.isString($attr[prop])) { 12 | var _match = $attr[prop].match(/\{\{\s*([\.\w]+)\s*\}\}/); 13 | if (_match) { 14 | attrMap[prop] = $parse(_match[1]); 15 | } 16 | } 17 | } 18 | 19 | return function bindPolymerLink(scope, element, attrs) { 20 | 21 | // When Polymer sees a change to the bound variable, 22 | // $apply / $digest the changes here in Angular 23 | var observer = new MutationObserver(function processMutations(mutations) { 24 | mutations.forEach(function processMutation(mutation) { 25 | var attributeName, newValue, oldValue, newType, oldType, getter; 26 | attributeName = mutation.attributeName; 27 | 28 | if(attributeName in attrMap) { 29 | newValue = element.attr(attributeName); 30 | getter = attrMap[attributeName]; 31 | oldValue = getter(scope); 32 | newType = typeof newValue; 33 | oldType = typeof oldValue; 34 | 35 | if ( oldType !== newType && newType === "string" ) { 36 | if ( oldType === "number" ) { 37 | newValue = parseFloat( newValue ); 38 | } else if ( oldType === "boolean" ) { 39 | newValue = ( newValue === "true" ); 40 | } 41 | } 42 | 43 | if(oldValue != newValue && angular.isFunction(getter.assign)) { 44 | getter.assign(scope, newValue); 45 | } 46 | } 47 | }); 48 | scope.$apply(); 49 | }); 50 | 51 | observer.observe(element[0], {attributes: true}); 52 | scope.$on('$destroy', observer.disconnect.bind(observer)); 53 | } 54 | } 55 | }; 56 | }]); -------------------------------------------------------------------------------- /non-npm/file-saver/LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright © 2015 [Eli Grey][1]. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | 9 | [1]: http://eligrey.com 10 | -------------------------------------------------------------------------------- /non-npm/file-saver/demo/demo.css: -------------------------------------------------------------------------------- 1 | html { 2 | background-color: #DDD; 3 | } 4 | body { 5 | -webkit-box-sizing: content-box; 6 | -moz-box-sizing: content-box; 7 | box-sizing: content-box; 8 | width: 900px; 9 | margin: 0 auto; 10 | font-family: Verdana, Helvetica, Arial, sans-serif; 11 | -webkit-box-shadow: 0 0 10px 2px rgba(0, 0, 0, .5); 12 | -moz-box-shadow: 0 0 10px 2px rgba(0, 0, 0, .5); 13 | box-shadow: 0 0 10px 2px rgba(0, 0, 0, .5); 14 | padding: 7px 25px 70px; 15 | background-color: #FFF; 16 | } 17 | h1, h2, h3, h4, h5, h6 { 18 | font-family: Georgia, "Times New Roman", serif; 19 | } 20 | h2, form { 21 | text-align: center; 22 | } 23 | form { 24 | margin-top: 5px; 25 | } 26 | .input { 27 | width: 500px; 28 | height: 300px; 29 | margin: 0 auto; 30 | display: block; 31 | } 32 | section { 33 | margin-top: 40px; 34 | } 35 | #canvas { 36 | cursor: crosshair; 37 | } 38 | #canvas, #html { 39 | border: 1px solid #000; 40 | } 41 | .filename { 42 | text-align: right; 43 | } 44 | #html { 45 | -webkit-box-sizing: border-box; 46 | -moz-box-sizing: border-box; 47 | box-sizing: border-box; 48 | overflow: auto; 49 | padding: 1em; 50 | } 51 | -------------------------------------------------------------------------------- /non-npm/viktor/globals.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | 5 | FACEBOOK_APP_ID: 1435210983455180, 6 | 7 | GOOGLE_API_KEY: "AIzaSyA_ZvkfZiWe1uJlRbuXpWsSqYGV523Vvps", 8 | 9 | EMAILLIST_API_KEY: "PSpPFKcg1MaLYljElHup" 10 | 11 | }; -------------------------------------------------------------------------------- /src/app/3rd-party/google-api/module.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var angular = require( "angular" ), 4 | GLOBALS = require( "globals" ), 5 | mod = angular.module( "google-api", [] ); 6 | 7 | mod.run( [ "$window", "googleApi", function( $window, googleApi ) { 8 | 9 | $window.initGoogleApiAngular = function() { 10 | var gapi = $window.gapi; 11 | 12 | gapi.client.setApiKey( GLOBALS.GOOGLE_API_KEY ); 13 | gapi.client.load( 'urlshortener', 'v1' ).then( function() { 14 | console.log( "Google API loaded!" ); 15 | googleApi.api = gapi; 16 | googleApi.loaded = true; 17 | } ); 18 | }; 19 | 20 | } ] ); 21 | 22 | mod.service( "googleApi",[ function() { 23 | var self = this; 24 | 25 | self.loaded = false; 26 | self.api = null; 27 | } ] ); 28 | 29 | module.exports = mod; -------------------------------------------------------------------------------- /src/app/app.js: -------------------------------------------------------------------------------- 1 | /* jshint -W117 */ 2 | 3 | 'use strict'; 4 | 5 | var angular = require( "angular" ), 6 | store = require( "store" ), 7 | queryStringUtils = require( "querystring" ), 8 | app = angular.module( "app", [ 9 | require( "angular-bootstrap-npm" ), 10 | require( "ng-file-upload" ).name, 11 | require( "angular-bind-polymer" ).name, 12 | require( "./ui/fixes" ).name, 13 | require( "./ui/module" ).name, 14 | require( "./3rd-party/google-api/module" ).name 15 | ] ), 16 | NV1Engine = require( "viktor-nv1-engine" ), 17 | patchSharing = require( "non-npm-patch-sharing" ), 18 | AudioContext = global.AudioContext || global.webkitAudioContext, 19 | is_iOS = /(iPad|iPhone|iPod)/g.test( navigator.userAgent ), 20 | is_chrome = /Chrome/.test( navigator.userAgent ) && /Google Inc/.test( navigator.vendor ), 21 | queryString = window.location.search.substr( 1 ), 22 | dawEngine, 23 | patchLibrary, 24 | globalVars = { 25 | sizeRatio: 1200 / 1200 26 | }, 27 | bootstrap = function() { 28 | var result = NV1Engine.create( AudioContext, store ); 29 | 30 | dawEngine = result.dawEngine; 31 | patchLibrary = result.patchLibrary; 32 | 33 | patchSharing.resolvePatchSelection( queryString, patchLibrary ); 34 | 35 | dawEngine.loadPatch( patchLibrary.getSelected().patch ); 36 | 37 | // !!! BOOTSTRAP !!! 38 | angular.resumeBootstrap(); 39 | }; 40 | 41 | // !!! DEFFERS THE BOOTSTRAP !!! 42 | global.name = "NG_DEFER_BOOTSTRAP!"; 43 | 44 | app.config( [ "dawEngineProvider", function( dawEngineProvider ) { 45 | dawEngineProvider.dawEngine = dawEngine; 46 | } ] ); 47 | 48 | app.factory( "globalVars", function() { 49 | return globalVars; 50 | } ); 51 | 52 | app.factory( "patchSharing", function() { 53 | return patchSharing; 54 | } ); 55 | 56 | app.factory( "patchLibrary", function() { 57 | return patchLibrary; 58 | } ); 59 | 60 | angular.element( document ).ready( function () { 61 | var $button = angular.element( document.querySelector( "#loadSynthButton" ) ); 62 | 63 | if ( is_iOS || is_chrome ) { 64 | $button.removeClass( "hide" ); 65 | $button.one( "click", function() { 66 | $button.remove(); 67 | bootstrap(); 68 | initGoogleApi(); 69 | } ); 70 | } else { 71 | $button.remove(); 72 | bootstrap(); 73 | } 74 | 75 | // show Privacy Policy 76 | var queryParams = queryStringUtils.parse( queryString ), 77 | privacyPolicyParam = queryParams.privacy; 78 | 79 | if ( privacyPolicyParam ) { 80 | var footerCtrl = angular.element( document.querySelector( "footer" ) ).controller(); 81 | if ( footerCtrl ) { 82 | footerCtrl.openPrivacyPolicyModal(); 83 | } 84 | } 85 | } ); 86 | 87 | module.exports = app; -------------------------------------------------------------------------------- /src/app/ui/controller/compressor.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = function( mod ) { 4 | 5 | mod.controller( "CompressorCtrl", [ "$scope", "globalVars", "dawEngine", "patchLibrary", function( $scope, globalVars, dawEngine, patchLibrary ) { 6 | var self = this, 7 | settingsChangeHandler = function( newValue, oldValue ) { 8 | if ( newValue === oldValue ) { 9 | return; 10 | } 11 | 12 | dawEngine.compressorSettings = { 13 | enabled : self.enabled, 14 | threshold : self.threshold, 15 | ratio : self.ratio, 16 | knee : self.knee, 17 | attack : self.attack, 18 | release : self.release, 19 | makeupGain : self.makeupGain 20 | }; 21 | 22 | patchLibrary.preserveUnsaved( dawEngine.getPatch() ); 23 | }, 24 | settings, 25 | pollSettings = function() { 26 | settings = dawEngine.compressorSettings; 27 | 28 | self.enabled = settings.enabled; 29 | self.threshold = settings.threshold; 30 | self.ratio = settings.ratio; 31 | self.knee = settings.knee; 32 | self.attack = settings.attack; 33 | self.release = settings.release; 34 | self.makeupGain = settings.makeupGain; 35 | }, 36 | watchers = [], 37 | registerForChanges = function() { 38 | [ 39 | "compressor.enabled.value", 40 | "compressor.threshold.value", 41 | "compressor.ratio.value", 42 | "compressor.knee.value", 43 | "compressor.attack.value", 44 | "compressor.release.value", 45 | "compressor.makeupGain.value" 46 | ].forEach( function( path ) { 47 | watchers.push( $scope.$watch( path, settingsChangeHandler ) ); 48 | } ); 49 | }, 50 | unregisterFromChanges = function() { 51 | watchers.forEach( function( unregister ) { 52 | unregister(); 53 | } ); 54 | watchers = []; 55 | }; 56 | 57 | self.knobWidth = Math.round(45 * globalVars.sizeRatio); 58 | 59 | pollSettings(); 60 | 61 | registerForChanges(); 62 | 63 | dawEngine.onPatchChange( function() { 64 | unregisterFromChanges(); 65 | pollSettings(); 66 | registerForChanges(); 67 | } ); 68 | } ] ); 69 | 70 | mod.directive( "compressor", [ "$templateCache", function( $templateCache ) { 71 | return { 72 | restrict: "E", 73 | replace: true, 74 | template: $templateCache.get( "compressor.html" ) 75 | }; 76 | } ] ); 77 | 78 | }; -------------------------------------------------------------------------------- /src/app/ui/controller/delay.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var settingsConvertor = require( "viktor-nv1-settings-convertor" ); 4 | 5 | module.exports = function( mod ) { 6 | 7 | mod.controller( "DelayCtrl", [ "$scope", "dawEngine", "patchLibrary", function( $scope, dawEngine, patchLibrary ) { 8 | var self = this, 9 | settingsChangeHandler = function( newValue, oldValue ) { 10 | if ( newValue === oldValue ) { 11 | return; 12 | } 13 | 14 | dawEngine.delaySettings = { 15 | time : settingsConvertor.transposeParam( self.time, settings.time.range ), 16 | feedback: settingsConvertor.transposeParam( self.feedback, settings.feedback.range ), 17 | dry : settingsConvertor.transposeParam( self.dry, settings.dry.range ), 18 | wet : settingsConvertor.transposeParam( self.wet, settings.wet.range ) 19 | }; 20 | 21 | patchLibrary.preserveUnsaved( dawEngine.getPatch() ); 22 | }, 23 | settings, 24 | pollSettings = function() { 25 | settings = dawEngine.delaySettings; 26 | 27 | self.time = settingsConvertor.transposeParam( settings.time, [ 0, 100 ] ); 28 | self.feedback = settingsConvertor.transposeParam( settings.feedback, [ 0, 100 ] ); 29 | self.dry = settingsConvertor.transposeParam( settings.dry, [ 0, 100 ] ); 30 | self.wet = settingsConvertor.transposeParam( settings.wet, [ 0, 100 ] ); 31 | }, 32 | watchers = [], 33 | registerForChanges = function() { 34 | [ 35 | "delay.time.value", 36 | "delay.feedback.value", 37 | "delay.dry.value", 38 | "delay.wet.value" 39 | ].forEach( function( path ) { 40 | watchers.push( $scope.$watch( path, settingsChangeHandler ) ); 41 | } ); 42 | }, 43 | unregisterFromChanges = function() { 44 | watchers.forEach( function( unregister ) { 45 | unregister(); 46 | } ); 47 | watchers = []; 48 | }; 49 | 50 | pollSettings(); 51 | 52 | registerForChanges(); 53 | 54 | dawEngine.onPatchChange( function() { 55 | unregisterFromChanges(); 56 | pollSettings(); 57 | registerForChanges(); 58 | } ); 59 | } ] ); 60 | 61 | mod.directive( "delay", [ "$templateCache", function( $templateCache ) { 62 | return { 63 | restrict: "E", 64 | replace: true, 65 | template: $templateCache.get( "delay.html" ) 66 | }; 67 | } ] ); 68 | 69 | }; -------------------------------------------------------------------------------- /src/app/ui/controller/master-controls.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = function( mod ) { 4 | 5 | mod.directive( "masterControls", [ "$templateCache", function( $templateCache ) { 6 | return { 7 | restrict: "E", 8 | replace: true, 9 | template: $templateCache.get( "master-controls.html" ) 10 | }; 11 | } ] ); 12 | 13 | }; -------------------------------------------------------------------------------- /src/app/ui/controller/master-volume.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var settingsConvertor = require( "viktor-nv1-settings-convertor" ), 4 | LEVEL_RANGE = [ 0, 100 ]; 5 | 6 | module.exports = function( mod ) { 7 | 8 | mod.controller( "MasterVolumeCtrl", [ "$scope", "dawEngine", "patchLibrary", function( $scope, dawEngine, patchLibrary ) { 9 | var self = this, 10 | settingsChangeHandler = function( newValue, oldValue ) { 11 | if ( newValue === oldValue ) { 12 | return; 13 | } 14 | 15 | dawEngine.masterVolumeSettings = { 16 | level: settingsConvertor.transposeParam( self.level, settings.level.range ) 17 | }; 18 | 19 | patchLibrary.preserveUnsaved( dawEngine.getPatch() ); 20 | }, 21 | settings, 22 | pollSettings = function() { 23 | settings = dawEngine.masterVolumeSettings; 24 | self.level = settingsConvertor.transposeParam( settings.level, LEVEL_RANGE ); 25 | }, 26 | watchers = [], 27 | registerForChanges = function() { 28 | [ 29 | "masterVolume.level.value" 30 | ].forEach( function( path ) { 31 | watchers.push( $scope.$watch( path, settingsChangeHandler ) ); 32 | } ); 33 | }, 34 | unregisterFromChanges = function() { 35 | watchers.forEach( function( unregister ) { 36 | unregister(); 37 | } ); 38 | watchers = []; 39 | }; 40 | 41 | pollSettings(); 42 | 43 | registerForChanges(); 44 | 45 | dawEngine.onPatchChange( function() { 46 | unregisterFromChanges(); 47 | pollSettings(); 48 | registerForChanges(); 49 | } ); 50 | } ] ); 51 | 52 | mod.directive( "masterVolume", [ "$templateCache", function( $templateCache ) { 53 | return { 54 | restrict: "E", 55 | replace: true, 56 | template: $templateCache.get( "master-volume.html" ) 57 | }; 58 | } ] ); 59 | 60 | mod.directive( "masterVolumeValue", [ "$document", "dawEngine", function( $document, dawEngine ) { 61 | 62 | return { 63 | restrict: "A", 64 | link: function( scope, $element ) { 65 | dawEngine.addExternalMidiMessageHandler( function( type, parsed ) { 66 | if ( type === "volume" ) { 67 | $element[ 0 ].setValue( 68 | settingsConvertor.transposeParam( parsed.volume, LEVEL_RANGE ).value 69 | ); 70 | } 71 | } ); 72 | } 73 | }; 74 | 75 | } ] ); 76 | 77 | }; -------------------------------------------------------------------------------- /src/app/ui/controller/modulation-wheel.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var settingsConvertor = require( "viktor-nv1-settings-convertor" ), 4 | RATE_RANGE = [ 0, 128 ]; 5 | 6 | module.exports = function( mod ) { 7 | 8 | mod.controller( "ModulationWheelCtrl", [ "$scope", "dawEngine", function( $scope, dawEngine ) { 9 | var self = this, 10 | settingsChangeHandler = function( newValue, oldValue ) { 11 | if ( newValue === oldValue ) { 12 | return; 13 | } 14 | 15 | var modulationSettings = dawEngine.modulationSettings; 16 | 17 | modulationSettings.rate = settingsConvertor.transposeParam( self.modulation, settings.rate.range ); 18 | 19 | dawEngine.modulationSettings = modulationSettings; 20 | }, 21 | settings, 22 | pollSettings = function() { 23 | settings = dawEngine.modulationSettings; 24 | 25 | self.modulation = settingsConvertor.transposeParam( settings.rate, RATE_RANGE ); 26 | }, 27 | watchers = [], 28 | registerForChanges = function() { 29 | [ 30 | "modulationWheel.modulation.value" 31 | ].forEach( function( path ) { 32 | watchers.push( $scope.$watch( path, settingsChangeHandler ) ); 33 | } ); 34 | }, 35 | unregisterFromChanges = function() { 36 | watchers.forEach( function( unregister ) { 37 | unregister(); 38 | } ); 39 | watchers = []; 40 | }; 41 | 42 | pollSettings(); 43 | 44 | registerForChanges(); 45 | 46 | dawEngine.onPatchChange( function() { 47 | unregisterFromChanges(); 48 | pollSettings(); 49 | registerForChanges(); 50 | } ); 51 | } ] ); 52 | 53 | mod.directive( "modulationWheel", [ "$templateCache", function( $templateCache ) { 54 | return { 55 | restrict: "E", 56 | replace: true, 57 | template: $templateCache.get( "modulation-wheel.html" ) 58 | }; 59 | } ] ); 60 | 61 | mod.directive( "modWheelValue", [ "dawEngine", function( dawEngine ) { 62 | 63 | return { 64 | restrict: "A", 65 | link: function( scope, $element ) { 66 | dawEngine.addExternalMidiMessageHandler( function( type, parsed ) { 67 | if ( type === "modulationWheel" ) { 68 | $element[ 0 ].setValue( 69 | settingsConvertor.transposeParam( parsed.modulation, RATE_RANGE ).value 70 | ); 71 | } 72 | } ); 73 | } 74 | }; 75 | 76 | } ] ); 77 | 78 | }; -------------------------------------------------------------------------------- /src/app/ui/controller/pitch-bend.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var settingsConvertor = require( "viktor-nv1-settings-convertor" ), 4 | BEND_RANGE = [ 0, 128 ], 5 | RANGE_CENTER = settingsConvertor.getRangeCenter( BEND_RANGE ); 6 | 7 | module.exports = function( mod ) { 8 | 9 | mod.controller( "PitchBendCtrl", [ "$scope", "dawEngine", function( $scope, dawEngine ) { 10 | var self = this, 11 | settingsChangeHandler = function() { 12 | dawEngine.pitchSettings = { 13 | bend: settingsConvertor.transposeParam( self.bend, settings.bend.range ) 14 | }; 15 | }, 16 | settings = dawEngine.pitchSettings; 17 | 18 | self.bend = settingsConvertor.transposeParam( settings.bend, BEND_RANGE ); 19 | 20 | [ 21 | "pitch.bend.value" 22 | ].forEach( function( path ) { 23 | $scope.$watch( path, settingsChangeHandler ); 24 | } ); 25 | 26 | } ] ); 27 | 28 | mod.directive( "pitchBend", [ "$templateCache", function( $templateCache ) { 29 | return { 30 | restrict: "E", 31 | replace: true, 32 | template: $templateCache.get( "pitch-bend.html" ) 33 | }; 34 | } ] ); 35 | 36 | mod.directive( "pitchBendValue", [ "$document", "dawEngine", function( $document, dawEngine ) { 37 | 38 | return { 39 | restrict: "A", 40 | link: function( scope, $element ) { 41 | dawEngine.addExternalMidiMessageHandler( function( type, parsed ) { 42 | if ( type === "pitchBend" ) { 43 | $element[ 0 ].setValue( 44 | settingsConvertor.transposeParam( parsed.pitchBend, BEND_RANGE ).value 45 | ); 46 | } 47 | } ); 48 | 49 | // handle pitch return to center 50 | var isPitchBending = false; 51 | $document.on( "mouseup", function() { 52 | if ( isPitchBending ) { 53 | isPitchBending = false; 54 | $element.attr( "value", RANGE_CENTER ); 55 | } 56 | } ); 57 | $element.on( "mousedown", function() { 58 | isPitchBending = true; 59 | } ); 60 | } 61 | }; 62 | 63 | } ] ); 64 | 65 | }; -------------------------------------------------------------------------------- /src/app/ui/controller/reverb.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var settingsConvertor = require( "viktor-nv1-settings-convertor" ); 4 | 5 | module.exports = function( mod ) { 6 | 7 | mod.controller( "ReverbCtrl", [ "$scope", "dawEngine", "patchLibrary", function( $scope, dawEngine, patchLibrary ) { 8 | var self = this, 9 | settingsChangeHandler = function( newValue, oldValue ) { 10 | if ( newValue === oldValue ) { 11 | return; 12 | } 13 | 14 | dawEngine.reverbSettings = { 15 | level: settingsConvertor.transposeParam( self.level, settings.level.range ) 16 | }; 17 | 18 | patchLibrary.preserveUnsaved( dawEngine.getPatch() ); 19 | }, 20 | settings, 21 | pollSettings = function() { 22 | settings = dawEngine.reverbSettings; 23 | self.level = settingsConvertor.transposeParam( settings.level, [ 0, 100 ] ); 24 | }, 25 | watchers = [], 26 | registerForChanges = function() { 27 | [ 28 | "reverb.level.value" 29 | ].forEach( function( path ) { 30 | watchers.push( $scope.$watch( path, settingsChangeHandler ) ); 31 | } ); 32 | }, 33 | unregisterFromChanges = function() { 34 | watchers.forEach( function( unregister ) { 35 | unregister(); 36 | } ); 37 | watchers = []; 38 | }; 39 | 40 | pollSettings(); 41 | 42 | registerForChanges(); 43 | 44 | dawEngine.onPatchChange( function() { 45 | unregisterFromChanges(); 46 | pollSettings(); 47 | registerForChanges(); 48 | } ); 49 | } ] ); 50 | 51 | mod.directive( "reverb", [ "$templateCache", function( $templateCache ) { 52 | return { 53 | restrict: "E", 54 | replace: true, 55 | template: $templateCache.get( "reverb.html" ) 56 | }; 57 | } ] ); 58 | 59 | }; -------------------------------------------------------------------------------- /src/app/ui/fixes.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var angular = require( "angular" ), 4 | mod = angular.module( "fixes", [] ); 5 | 6 | mod.directive( "updateNumberValue", function() { 7 | 8 | return { 9 | restrict: "A", 10 | link: function( scope, element ) { 11 | angular.element( element ).on( "change", function( e ) { 12 | var $element = angular.element( e.target ); 13 | if ( parseFloat( $element.attr( "value" ) ) !== e.target.value ) { 14 | $element.attr( "value", e.target.value ); 15 | } 16 | } ); 17 | } 18 | }; 19 | 20 | } ); 21 | 22 | mod.directive( "knobRedraw", [ "$document", function( $document ) { 23 | 24 | return { 25 | restrict: "A", 26 | link: function( scope, $element, attrs ) { 27 | var tryRedraw = function( $element ) { 28 | var element = $element[ 0 ]; 29 | if ( element.redraw && "function" === typeof( element.redraw ) ) { 30 | element.redraw(); 31 | } 32 | }; 33 | 34 | $document.bind( "WebComponentsReady", function() { 35 | tryRedraw( $element ); 36 | } ); 37 | attrs.$observe( "value", function() { 38 | tryRedraw( $element ); 39 | } ); 40 | 41 | } 42 | }; 43 | 44 | } ] ); 45 | 46 | mod.directive( "updateControlValue", [ "$document", function( $document ) { 47 | 48 | return { 49 | restrict: "A", 50 | link: function( scope, $element, attrs ) { 51 | var trySet = function( $element, newValue ) { 52 | var control = $element.length && $element[ 0 ]; 53 | if ( control && control.setValue && "function" === typeof( control.setValue ) ) { 54 | control.setValue( newValue ); 55 | } 56 | }; 57 | 58 | $document.bind( "WebComponentsReady", function() { 59 | trySet( $element, parseFloat( $element.attr( "value" ) ) ); 60 | } ); 61 | attrs.$observe( "value", function( newValueStr ) { 62 | trySet( $element, parseFloat( newValueStr ) ); 63 | } ); 64 | } 65 | }; 66 | 67 | } ] ); 68 | 69 | module.exports = mod; -------------------------------------------------------------------------------- /src/app/ui/module.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var angular = require( "angular" ), 4 | template = require( "./template/daw.html" ), 5 | mod = angular.module( "dawModule", [ 6 | template.name, 7 | require( "./module/settings/module" ).name, 8 | require( "./module/patch-library/module" ).name, 9 | require( "./module/instruments/synth/module" ).name, 10 | require( "./module/maillist/module" ).name, 11 | require( "./module/typed-ad/module" ).name, 12 | require( "./module/footer/module" ).name, 13 | require( "./module/t-shirts/module" ).name, 14 | 15 | require( "./template/master-controls.html" ).name, 16 | require( "./template/compressor.html" ).name, 17 | require( "./template/delay.html" ).name, 18 | require( "./template/reverb.html" ).name, 19 | require( "./template/master-volume.html" ).name, 20 | require( "./template/pitch-bend.html" ).name, 21 | require( "./template/modulation-wheel.html" ).name, 22 | require( "./template/keyboard.html" ).name 23 | ] ), 24 | Synth = require( "viktor-nv1-engine" ).Synth, 25 | synth; 26 | 27 | mod.provider( "dawEngine", function dawEngineProvider() { 28 | 29 | var self = this; 30 | 31 | self.dawEngine = null; 32 | 33 | self.$get = function dawEngineFactory() { 34 | return self.dawEngine; 35 | }; 36 | 37 | } ); 38 | 39 | mod.factory( "synth",[ "dawEngine", function( dawEngine ) { 40 | if ( !synth ) { 41 | dawEngine.instruments.forEach( function( instrument ) { 42 | if ( instrument instanceof Synth ) { 43 | // cache the instance 44 | synth = instrument; 45 | } 46 | } ); 47 | } 48 | 49 | return synth; 50 | } ] ); 51 | 52 | mod.directive( "dawContainer", [ "$templateCache", function($templateCache) { 53 | return { 54 | restrict: "E", 55 | replace: true, 56 | template: $templateCache.get( template.name ) 57 | }; 58 | } ] ); 59 | 60 | // Directives (without a controller) 61 | require( "./controller/master-controls" )( mod ); 62 | 63 | // Controllers 64 | require( "./controller/compressor" )( mod ); 65 | require( "./controller/delay" )( mod ); 66 | require( "./controller/reverb" )( mod ); 67 | require( "./controller/master-volume" )( mod ); 68 | require( "./controller/pitch-bend" )( mod ); 69 | require( "./controller/modulation-wheel" )( mod ); 70 | require( "./controller/keyboard" )( mod ); 71 | 72 | module.exports = mod; -------------------------------------------------------------------------------- /src/app/ui/module/footer/controller/footer.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = function( mod ) { 4 | 5 | mod.controller( "FooterCtrl", [ "$scope", "$modal", function( $scope, $modal ) { 6 | var self = this; 7 | 8 | self.openPrivacyPolicyModal = function() { 9 | $modal.open( { 10 | animation: $scope.animationsEnabled, 11 | templateUrl: 'privacyPolicyModal.html', 12 | controller: 'FooterModalCtrl', 13 | controllerAs: 'footerModal', 14 | size: null, 15 | resolve: null 16 | } ); 17 | }; 18 | 19 | self.openAboutModal = function() { 20 | $modal.open( { 21 | animation: $scope.animationsEnabled, 22 | templateUrl: 'aboutModal.html', 23 | controller: 'FooterModalCtrl', 24 | controllerAs: 'footerModal', 25 | size: null, 26 | resolve: null 27 | } ); 28 | }; 29 | } ] ); 30 | 31 | mod.directive( "footerDirective", [ "$templateCache", function( $templateCache ) { 32 | return { 33 | restrict: "E", 34 | replace: true, 35 | template: $templateCache.get( "footer.html" ) 36 | }; 37 | } ] ); 38 | 39 | mod.controller( "FooterModalCtrl", [ "$modalInstance", function( $modalInstance ) { 40 | var self = this; 41 | 42 | self.close = function() { 43 | $modalInstance.dismiss(); 44 | }; 45 | } ] ); 46 | 47 | }; -------------------------------------------------------------------------------- /src/app/ui/module/footer/module.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var angular = require( "angular" ), 4 | template = require( "./template/footer.html" ), 5 | mod = angular.module( "footerModule", [ 6 | template.name 7 | ] ); 8 | 9 | // Controllers 10 | require( "./controller/footer" )( mod ); 11 | 12 | module.exports = mod; -------------------------------------------------------------------------------- /src/app/ui/module/instruments/synth/controller/filter.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var settingsConvertor = require( "viktor-nv1-settings-convertor" ); 4 | 5 | module.exports = function( mod ) { 6 | 7 | mod.controller( "FilterCtrl", [ "$scope", "dawEngine", "synth", "patchLibrary", function( $scope, dawEngine, synth, patchLibrary ) { 8 | var self = this, 9 | settingsChangeHandler = function( newValue, oldValue ) { 10 | if ( newValue === oldValue ) { 11 | return; 12 | } 13 | 14 | synth.filterSettings = { 15 | cutoff: settingsConvertor.transposeParam( self.cutoff, settings.cutoff.range ), 16 | emphasis: settingsConvertor.transposeParam( self.emphasis, settings.emphasis.range ), 17 | envAmount: settingsConvertor.transposeParam( self.envAmount, settings.envAmount.range ) 18 | }; 19 | 20 | patchLibrary.preserveUnsaved( dawEngine.getPatch() ); 21 | }, 22 | settings, 23 | pollSettings = function() { 24 | settings = synth.filterSettings; 25 | 26 | self.cutoff = settingsConvertor.transposeParam( settings.cutoff, [ 0, 500 ] ); 27 | self.emphasis = settingsConvertor.transposeParam( settings.emphasis, [ 1, 100 ] ); 28 | self.envAmount = settingsConvertor.transposeParam( settings.envAmount, [ 0, 100 ] ); 29 | }, 30 | watchers = [], 31 | registerForChanges = function() { 32 | [ 33 | "filter.cutoff.value", 34 | "filter.emphasis.value", 35 | "filter.envAmount.value" 36 | ].forEach( function( path ) { 37 | watchers.push( $scope.$watch( path, settingsChangeHandler ) ); 38 | } ); 39 | }, 40 | unregisterFromChanges = function() { 41 | watchers.forEach( function( unregister ) { 42 | unregister(); 43 | } ); 44 | watchers = []; 45 | }; 46 | 47 | pollSettings(); 48 | 49 | registerForChanges(); 50 | 51 | dawEngine.onPatchChange( function() { 52 | unregisterFromChanges(); 53 | pollSettings(); 54 | registerForChanges(); 55 | } ); 56 | } ] ); 57 | 58 | mod.directive( "filter", [ "$templateCache", function( $templateCache ) { 59 | return { 60 | restrict: "E", 61 | replace: true, 62 | template: $templateCache.get( "filter.html" ) 63 | }; 64 | } ] ); 65 | 66 | }; -------------------------------------------------------------------------------- /src/app/ui/module/instruments/synth/controller/lfo.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var settingsConvertor = require( "viktor-nv1-settings-convertor" ); 4 | 5 | module.exports = function( mod ) { 6 | 7 | mod.controller( "LFOCtrl", [ "$scope", "dawEngine", "synth", "patchLibrary", function( $scope, dawEngine, synth, patchLibrary ) { 8 | var self = this, 9 | settingsChangeHandler = function( newValue, oldValue ) { 10 | if ( newValue === oldValue ) { 11 | return; 12 | } 13 | 14 | synth.lfoSettings = { 15 | waveform: self.waveform, 16 | rate: self.rate, 17 | amount: settingsConvertor.transposeParam( self.amount, settings.amount.range ) 18 | }; 19 | 20 | patchLibrary.preserveUnsaved( dawEngine.getPatch() ); 21 | }, 22 | settings, 23 | pollSettings = function() { 24 | settings = synth.lfoSettings; 25 | 26 | self.waveform = settings.waveform; 27 | self.rate = settings.rate; 28 | self.amount = settingsConvertor.transposeParam( settings.amount, [ 0, 100 ] ); 29 | }, 30 | watchers = [], 31 | registerForChanges = function() { 32 | [ 33 | "lfo.waveform.value", 34 | "lfo.rate.value", 35 | "lfo.amount.value" 36 | ].forEach( function( path ) { 37 | watchers.push( $scope.$watch( path, settingsChangeHandler ) ); 38 | } ); 39 | }, 40 | unregisterFromChanges = function() { 41 | watchers.forEach( function( unregister ) { 42 | unregister(); 43 | } ); 44 | watchers = []; 45 | }; 46 | 47 | pollSettings(); 48 | 49 | registerForChanges(); 50 | 51 | dawEngine.onPatchChange( function() { 52 | unregisterFromChanges(); 53 | pollSettings(); 54 | registerForChanges(); 55 | } ); 56 | } ] ); 57 | 58 | mod.directive( "lfo", [ "$templateCache", function( $templateCache ) { 59 | return { 60 | restrict: "E", 61 | replace: true, 62 | template: $templateCache.get( "lfo.html" ) 63 | }; 64 | } ] ); 65 | 66 | }; -------------------------------------------------------------------------------- /src/app/ui/module/instruments/synth/controller/mixer.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var settingsConvertor = require( "viktor-nv1-settings-convertor" ); 4 | 5 | module.exports = function( mod ) { 6 | 7 | mod.controller( "MixerCtrl", [ "$scope", "dawEngine", "synth", "patchLibrary", function( $scope, dawEngine, synth, patchLibrary ) { 8 | var self = this, 9 | settingsChangeHandler = function( newValue, oldValue ) { 10 | if ( newValue === oldValue ) { 11 | return; 12 | } 13 | 14 | synth.mixerSettings = { 15 | volume1: { 16 | enabled: self.volume1.enabled, 17 | level: settingsConvertor.transposeParam( self.volume1.level, settings.volume1.level.range ) 18 | }, 19 | volume2: { 20 | enabled: self.volume2.enabled, 21 | level: settingsConvertor.transposeParam( self.volume2.level, settings.volume2.level.range ) 22 | }, 23 | volume3: { 24 | enabled: self.volume3.enabled, 25 | level: settingsConvertor.transposeParam( self.volume3.level, settings.volume3.level.range ) 26 | } 27 | }; 28 | 29 | patchLibrary.preserveUnsaved( dawEngine.getPatch() ); 30 | }, 31 | settings, 32 | pollSettings = function() { 33 | settings = synth.mixerSettings; 34 | 35 | self.volume1 = { 36 | enabled: settings.volume1.enabled, 37 | level: settingsConvertor.transposeParam( settings.volume1.level, [ 0, 100 ] ) 38 | }; 39 | self.volume2 = { 40 | enabled: settings.volume2.enabled, 41 | level: settingsConvertor.transposeParam( settings.volume2.level, [ 0, 100 ] ) 42 | }; 43 | self.volume3 = { 44 | enabled: settings.volume3.enabled, 45 | level: settingsConvertor.transposeParam( settings.volume3.level, [ 0, 100 ] ) 46 | }; 47 | }, 48 | watchers = [], 49 | registerForChanges = function() { 50 | [ 51 | "mixer.volume1.enabled.value", 52 | "mixer.volume1.level.value", 53 | "mixer.volume2.enabled.value", 54 | "mixer.volume2.level.value", 55 | "mixer.volume3.enabled.value", 56 | "mixer.volume3.level.value" 57 | ].forEach( function( path ) { 58 | watchers.push( $scope.$watch( path, settingsChangeHandler ) ); 59 | } ); 60 | }, 61 | unregisterFromChanges = function() { 62 | watchers.forEach( function( unregister ) { 63 | unregister(); 64 | } ); 65 | watchers = []; 66 | }; 67 | 68 | pollSettings(); 69 | 70 | registerForChanges(); 71 | 72 | dawEngine.onPatchChange( function() { 73 | unregisterFromChanges(); 74 | pollSettings(); 75 | registerForChanges(); 76 | } ); 77 | } ] ); 78 | 79 | mod.directive( "mixer", [ "$templateCache", function( $templateCache ) { 80 | return { 81 | restrict: "E", 82 | replace: true, 83 | template: $templateCache.get( "mixer.html" ) 84 | }; 85 | } ] ); 86 | 87 | }; -------------------------------------------------------------------------------- /src/app/ui/module/instruments/synth/controller/modulation.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var settingsConvertor = require( "viktor-nv1-settings-convertor" ); 4 | 5 | module.exports = function( mod ) { 6 | 7 | mod.controller( "ModulationCtrl", [ "$scope", "dawEngine", "synth", "patchLibrary", function( $scope, dawEngine, synth, patchLibrary ) { 8 | var self = this, 9 | settingsChangeHandler = function( newValue, oldValue ) { 10 | if ( newValue === oldValue ) { 11 | return; 12 | } 13 | 14 | synth.modulationSettings = { 15 | waveform: self.waveform, 16 | portamento: settingsConvertor.transposeParam( self.portamento, settings.portamento.range ), 17 | rate: synth.modulationSettings.rate 18 | }; 19 | 20 | patchLibrary.preserveUnsaved( dawEngine.getPatch() ); 21 | }, 22 | settings, 23 | pollSettings = function() { 24 | settings = synth.modulationSettings; 25 | 26 | self.waveform = settings.waveform; 27 | self.portamento = settingsConvertor.transposeParam( settings.portamento, [ 0, 100 ] ); 28 | }, 29 | watchers = [], 30 | registerForChanges = function() { 31 | [ 32 | "modulation.waveform.value", 33 | "modulation.portamento.value" 34 | ].forEach( function( path ) { 35 | watchers.push( $scope.$watch( path, settingsChangeHandler ) ); 36 | } ); 37 | }, 38 | unregisterFromChanges = function() { 39 | watchers.forEach( function( unregister ) { 40 | unregister(); 41 | } ); 42 | watchers = []; 43 | }; 44 | 45 | pollSettings(); 46 | 47 | registerForChanges(); 48 | 49 | dawEngine.onPatchChange( function() { 50 | unregisterFromChanges(); 51 | pollSettings(); 52 | registerForChanges(); 53 | } ); 54 | } ] ); 55 | 56 | mod.directive( "modulationPlusPolyphony", [ "$templateCache", function( $templateCache ) { 57 | return { 58 | restrict: "E", 59 | replace: true, 60 | template: $templateCache.get( "modulation+polyphony.html" ) 61 | }; 62 | } ] ); 63 | 64 | }; -------------------------------------------------------------------------------- /src/app/ui/module/instruments/synth/controller/noise.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var settingsConvertor = require( "viktor-nv1-settings-convertor" ); 4 | 5 | module.exports = function( mod ) { 6 | 7 | mod.controller( "NoiseCtrl", [ "$scope", "dawEngine", "synth", "patchLibrary", function( $scope, dawEngine, synth, patchLibrary ) { 8 | var self = this, 9 | settingsChangeHandler = function( newValue, oldValue ) { 10 | if ( newValue === oldValue ) { 11 | return; 12 | } 13 | 14 | synth.noiseSettings = { 15 | enabled: self.enabled, 16 | level: settingsConvertor.transposeParam( self.level, settings.level.range ), 17 | type: self.type 18 | }; 19 | 20 | patchLibrary.preserveUnsaved( dawEngine.getPatch() ); 21 | }, 22 | settings, 23 | pollSettings = function() { 24 | settings = synth.noiseSettings; 25 | 26 | self.enabled = settings.enabled; 27 | self.level = settingsConvertor.transposeParam( settings.level, [ 0, 100 ] ); 28 | self.type = settings.type; 29 | }, 30 | watchers = [], 31 | registerForChanges = function() { 32 | [ 33 | "noise.enabled.value", 34 | "noise.level.value", 35 | "noise.type.value" 36 | ].forEach( function( path ) { 37 | watchers.push( $scope.$watch( path, settingsChangeHandler ) ); 38 | } ); 39 | }, 40 | unregisterFromChanges = function() { 41 | watchers.forEach( function( unregister ) { 42 | unregister(); 43 | } ); 44 | watchers = []; 45 | }; 46 | 47 | pollSettings(); 48 | 49 | registerForChanges(); 50 | 51 | dawEngine.onPatchChange( function() { 52 | unregisterFromChanges(); 53 | pollSettings(); 54 | registerForChanges(); 55 | } ); 56 | } ] ); 57 | 58 | mod.directive( "noise", [ "$templateCache", function( $templateCache ) { 59 | return { 60 | restrict: "E", 61 | replace: true, 62 | template: $templateCache.get( "noise.html" ) 63 | }; 64 | } ] ); 65 | 66 | }; -------------------------------------------------------------------------------- /src/app/ui/module/instruments/synth/controller/polyphony.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = function( mod ) { 4 | 5 | mod.controller( "PolyphonyCtrl", [ "$scope", "dawEngine", "synth", "patchLibrary", function( $scope, dawEngine, synth, patchLibrary ) { 6 | var self = this, 7 | settingsChangeHandler = function( newValue, oldValue ) { 8 | if ( newValue === oldValue ) { 9 | return; 10 | } 11 | 12 | settings = synth.polyphonySettings; 13 | 14 | synth.polyphonySettings = { 15 | voiceCount: self.voiceCount, 16 | sustain: settings.sustain 17 | }; 18 | 19 | patchLibrary.preserveUnsaved( dawEngine.getPatch() ); 20 | }, 21 | settings, 22 | pollSettings = function() { 23 | settings = synth.polyphonySettings; 24 | 25 | self.voiceCount = settings.voiceCount; 26 | }, 27 | watchers = [], 28 | registerForChanges = function() { 29 | [ 30 | "polyphony.voiceCount.value" 31 | ].forEach( function( path ) { 32 | watchers.push( $scope.$watch( path, settingsChangeHandler ) ); 33 | } ); 34 | }, 35 | unregisterFromChanges = function() { 36 | watchers.forEach( function( unregister ) { 37 | unregister(); 38 | } ); 39 | watchers = []; 40 | }; 41 | 42 | pollSettings(); 43 | 44 | registerForChanges(); 45 | 46 | dawEngine.onPatchChange( function() { 47 | unregisterFromChanges(); 48 | pollSettings(); 49 | registerForChanges(); 50 | } ); 51 | } ] ); 52 | 53 | // directive is defined in the modulation controller 54 | 55 | }; -------------------------------------------------------------------------------- /src/app/ui/module/instruments/synth/module.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var angular = require( "angular" ), 4 | template = require( "./template/synth.html" ), 5 | mod = angular.module( "synth", [ 6 | template.name, 7 | require( "./template/modulation+polyphony.html" ).name, 8 | require( "./template/oscillator-bank.html" ).name, 9 | require( "./template/mixer.html" ).name, 10 | require( "./template/noise.html" ).name, 11 | require( "./template/envelopes.html" ).name, 12 | require( "./template/filter.html" ).name, 13 | require( "./template/lfo.html" ).name 14 | ] ); 15 | 16 | mod.directive( "synth", [ "$templateCache", function( $templateCache ) { 17 | return { 18 | restrict: "E", 19 | replace: true, 20 | template: $templateCache.get( template.name ) 21 | }; 22 | } ] ); 23 | 24 | // Controllers 25 | require( "./controller/polyphony" )( mod ); 26 | require( "./controller/modulation" )( mod ); 27 | require( "./controller/oscillator-bank" )( mod ); 28 | require( "./controller/mixer" )( mod ); 29 | require( "./controller/noise" )( mod ); 30 | require( "./controller/envelopes" )( mod ); 31 | require( "./controller/filter" )( mod ); 32 | require( "./controller/lfo" )( mod ); 33 | 34 | module.exports = mod; -------------------------------------------------------------------------------- /src/app/ui/module/instruments/synth/template/filter.html: -------------------------------------------------------------------------------- 1 |
61 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/observe-js/conf/karma.conf.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 | 11 | module.exports = function(karma) { 12 | var common = require('../../tools/test/karma-common.conf.js'); 13 | karma.set(common.mixin_common_opts(karma, { 14 | // base path, that will be used to resolve files and exclude 15 | basePath: '../', 16 | 17 | // list of files / patterns to load in the browser 18 | files: [ 19 | 'node_modules/chai/chai.js', 20 | 'conf/mocha.conf.js', 21 | 'src/observe.js', 22 | 'util/array_reduction.js', 23 | 'tests/*.js' 24 | ], 25 | 26 | // list of files to exclude 27 | exclude: [ 28 | 'tests/d8_array_fuzzer.js', 29 | 'tests/d8_planner_test.js' 30 | ], 31 | })); 32 | }; 33 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/observe-js/conf/mocha.conf.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 | 11 | mocha.setup({ 12 | ui:'tdd', 13 | ignoreLeaks: true 14 | }); 15 | var assert = chai.assert; 16 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/observe-js/observe-js.html: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-expressions/build.json: -------------------------------------------------------------------------------- 1 | [ 2 | "third_party/esprima/esprima.js", 3 | "src/polymer-expressions.js" 4 | ] 5 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-expressions/conf/karma.conf.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 | 11 | module.exports = function(karma) { 12 | var common = require('../../tools/test/karma-common.conf.js'); 13 | karma.set(common.mixin_common_opts(karma, { 14 | // base path, that will be used to resolve files and exclude 15 | basePath: '../../', 16 | 17 | // list of files / patterns to load in the browser 18 | files: [ 19 | 'polymer-expressions/node_modules/chai/chai.js', 20 | 'polymer-expressions/conf/mocha.conf.js', 21 | 'TemplateBinding/load.js', 22 | 'polymer-expressions/third_party/esprima/esprima.js', 23 | 'polymer-expressions/src/polymer-expressions.js', 24 | 'polymer-expressions/tests/tests.js', 25 | {pattern: 'NodeBind/src/*.js', included: false}, 26 | {pattern: 'TemplateBinding/src/*.css', included: false}, 27 | {pattern: 'TemplateBinding/src/*.js', included: false}, 28 | {pattern: 'observe-js/src/*.js', included: false} 29 | ] 30 | })); 31 | }; 32 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-expressions/conf/mocha.conf.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 | 11 | mocha.setup({ 12 | ui:'tdd', 13 | ignoreLeaks: true 14 | }); 15 | var assert = chai.assert; 16 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-expressions/polymer-expressions.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-expressions/smoke.html: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 |PolymerExpressions tests 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 32 | 33 | 34 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-expressions/third_party/esprima/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribution Guide 2 | 3 | This page describes how to contribute changes to Esprima. 4 | 5 | Please do **not** create a pull request without reading this guide first. Failure to do so may result in the **rejection** of the pull request. 6 | 7 | **1. Create a ticket in the [issue tracker](http://issues.esprima.org)**. 8 | This serves as a placeholder for important feedback, review, or any future updates. 9 | 10 | **2. Run all the tests**. This requires Node.js: `npm install` to set up, `npm test` to run the tests. 11 | 12 | **3. Work on a feature branch**. If the change still needs some tweaks, it will not clutter the master branch. 13 | 14 | **4. Write a reasonable commit message:** 15 | 16 | * Keep the first line < 72 characters. Write additional paragraphs if necessary. 17 | * Put the link to the ticket. This is important for cross-referencing purposes. 18 | 19 | 20 | For more information, please check the [detailed contribution guide](http://esprima.org/doc/index.html#contribution). 21 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-expressions/third_party/esprima/LICENSE.BSD: -------------------------------------------------------------------------------- 1 | Redistribution and use in source and binary forms, with or without 2 | modification, are permitted provided that the following conditions are met: 3 | 4 | * Redistributions of source code must retain the above copyright 5 | notice, this list of conditions and the following disclaimer. 6 | * Redistributions in binary form must reproduce the above copyright 7 | notice, this list of conditions and the following disclaimer in the 8 | documentation and/or other materials provided with the distribution. 9 | 10 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 11 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 12 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 13 | ARE DISCLAIMED. IN NO EVENT SHALLBE LIABLE FOR ANY 14 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 16 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 17 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 18 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 19 | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 20 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-gestures/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-gestures/banner.txt: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-gestures/build.json: -------------------------------------------------------------------------------- 1 | [ 2 | "src/scope.js", 3 | "src/targetfind.js", 4 | "src/touch-action.js", 5 | "src/eventFactory.js", 6 | "src/pointermap.js", 7 | "src/dispatcher.js", 8 | "src/mouse.js", 9 | "src/touch.js", 10 | "src/ms.js", 11 | "src/pointer.js", 12 | "src/platform-events.js", 13 | "src/track.js", 14 | "src/hold.js", 15 | "src/tap.js", 16 | "src/pinch.js" 17 | ] 18 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-gestures/conf/karma.conf.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 | 11 | module.exports = function(karma) { 12 | var common = require('../../tools/test/karma-common.conf.js'); 13 | karma.set(common.mixin_common_opts(karma, { 14 | // base path, that will be used to resolve files and exclude 15 | basePath: '../../', 16 | 17 | // list of files / patterns to load in the browser 18 | files: [ 19 | 'polymer-gestures/node_modules/chai/chai.js', 20 | 'polymer-gestures/src/scope.js', 21 | 'polymer-gestures/src/targetfind.js', 22 | 'polymer-gestures/src/touch-action.js', 23 | 'polymer-gestures/src/eventFactory.js', 24 | 'polymer-gestures/src/pointermap.js', 25 | 'polymer-gestures/src/dispatcher.js', 26 | 'polymer-gestures/src/mouse.js', 27 | 'polymer-gestures/src/touch.js', 28 | 'polymer-gestures/src/ms.js', 29 | 'polymer-gestures/src/pointer.js', 30 | 'polymer-gestures/src/platform-events.js', 31 | 'polymer-gestures/src/track.js', 32 | 'polymer-gestures/src/hold.js', 33 | 'polymer-gestures/src/tap.js', 34 | 'polymer-gestures/test/js/setup.js', 35 | 'polymer-gestures/test/js/fake.js', 36 | 'polymer-gestures/test/js/*.js' 37 | ] 38 | })); 39 | }; 40 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-gestures/polymer-gestures.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-gestures/polymer-gestures.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. 3 | * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt 4 | * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 5 | * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt 6 | * Code distributed by Google as part of the polymer project is also 7 | * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt 8 | */ 9 | (function() { 10 | var thisFile = 'polymer-gestures.js'; 11 | var scopeName = 'PolymerGestures'; 12 | var modules = [ 13 | 'src/scope.js', 14 | 'src/targetfind.js', 15 | 'src/touch-action.js', 16 | 'src/eventFactory.js', 17 | 'src/pointermap.js', 18 | 'src/dispatcher.js', 19 | 'src/mouse.js', 20 | 'src/touch.js', 21 | 'src/ms.js', 22 | 'src/pointer.js', 23 | 'src/platform-events.js', 24 | 'src/track.js', 25 | 'src/hold.js', 26 | 'src/tap.js', 27 | 'src/pinch.js' 28 | ]; 29 | 30 | window[scopeName] = { 31 | entryPointName: thisFile, 32 | modules: modules 33 | }; 34 | 35 | var script = document.currentScript || document.querySelector('script[src $= "' + thisFile + '"]'); 36 | var src = script.attributes.src.value; 37 | var basePath = src.slice(0, src.indexOf(thisFile)); 38 | 39 | if (!window.PolymerLoader) { 40 | var path = basePath + '../tools/loader/loader.js'; 41 | document.write(''); 42 | } 43 | 44 | document.write(''); 45 | 46 | })(); 47 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-gestures/src/platform-events.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. 3 | * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt 4 | * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 5 | * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt 6 | * Code distributed by Google as part of the polymer project is also 7 | * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt 8 | */ 9 | 10 | /** 11 | * This module contains the handlers for native platform events. 12 | * From here, the dispatcher is called to create unified pointer events. 13 | * Included are touch events (v1), mouse events, and MSPointerEvents. 14 | */ 15 | (function(scope) { 16 | 17 | var dispatcher = scope.dispatcher; 18 | var nav = window.navigator; 19 | 20 | if (window.PointerEvent) { 21 | dispatcher.registerSource('pointer', scope.pointerEvents); 22 | } else if (nav.msPointerEnabled) { 23 | dispatcher.registerSource('ms', scope.msEvents); 24 | } else { 25 | dispatcher.registerSource('mouse', scope.mouseEvents); 26 | if (window.ontouchstart !== undefined) { 27 | dispatcher.registerSource('touch', scope.touchEvents); 28 | } 29 | } 30 | 31 | // Work around iOS bugs https://bugs.webkit.org/show_bug.cgi?id=135628 and https://bugs.webkit.org/show_bug.cgi?id=136506 32 | var ua = navigator.userAgent; 33 | var IS_IOS = ua.match(/iPad|iPhone|iPod/) && 'ontouchstart' in window; 34 | 35 | dispatcher.IS_IOS = IS_IOS; 36 | scope.touchEvents.IS_IOS = IS_IOS; 37 | 38 | dispatcher.register(document, true); 39 | })(window.PolymerGestures); 40 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-gestures/src/pointer.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. 3 | * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt 4 | * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 5 | * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt 6 | * Code distributed by Google as part of the polymer project is also 7 | * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt 8 | */ 9 | 10 | (function(scope) { 11 | var dispatcher = scope.dispatcher; 12 | var pointermap = dispatcher.pointermap; 13 | var pointerEvents = { 14 | events: [ 15 | 'pointerdown', 16 | 'pointermove', 17 | 'pointerup', 18 | 'pointercancel' 19 | ], 20 | prepareEvent: function(inEvent) { 21 | var e = dispatcher.cloneEvent(inEvent); 22 | e._source = 'pointer'; 23 | return e; 24 | }, 25 | register: function(target) { 26 | dispatcher.listen(target, this.events); 27 | }, 28 | unregister: function(target) { 29 | if (target.nodeType === Node.DOCUMENT_NODE) { 30 | return; 31 | } 32 | dispatcher.unlisten(target, this.events); 33 | }, 34 | cleanup: function(id) { 35 | pointermap['delete'](id); 36 | }, 37 | pointerdown: function(inEvent) { 38 | var e = this.prepareEvent(inEvent); 39 | e.target = scope.findTarget(inEvent); 40 | pointermap.set(e.pointerId, e.target); 41 | dispatcher.down(e); 42 | }, 43 | pointermove: function(inEvent) { 44 | var target = pointermap.get(inEvent.pointerId); 45 | if (target) { 46 | var e = this.prepareEvent(inEvent); 47 | e.target = target; 48 | dispatcher.move(e); 49 | } 50 | }, 51 | pointerup: function(inEvent) { 52 | var e = this.prepareEvent(inEvent); 53 | e.relatedTarget = scope.findTarget(inEvent); 54 | e.target = pointermap.get(e.pointerId); 55 | dispatcher.up(e); 56 | this.cleanup(inEvent.pointerId); 57 | }, 58 | pointercancel: function(inEvent) { 59 | var e = this.prepareEvent(inEvent); 60 | e.relatedTarget = scope.findTarget(inEvent); 61 | e.target = pointermap.get(e.pointerId); 62 | dispatcher.cancel(e); 63 | this.cleanup(inEvent.pointerId); 64 | } 65 | }; 66 | 67 | scope.pointerEvents = pointerEvents; 68 | })(window.PolymerGestures); 69 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-gestures/src/pointermap.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. 3 | * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt 4 | * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 5 | * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt 6 | * Code distributed by Google as part of the polymer project is also 7 | * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt 8 | */ 9 | 10 | /** 11 | * This module implements an map of pointer states 12 | */ 13 | (function(scope) { 14 | var USE_MAP = window.Map && window.Map.prototype.forEach; 15 | var POINTERS_FN = function(){ return this.size; }; 16 | function PointerMap() { 17 | if (USE_MAP) { 18 | var m = new Map(); 19 | m.pointers = POINTERS_FN; 20 | return m; 21 | } else { 22 | this.keys = []; 23 | this.values = []; 24 | } 25 | } 26 | 27 | PointerMap.prototype = { 28 | set: function(inId, inEvent) { 29 | var i = this.keys.indexOf(inId); 30 | if (i > -1) { 31 | this.values[i] = inEvent; 32 | } else { 33 | this.keys.push(inId); 34 | this.values.push(inEvent); 35 | } 36 | }, 37 | has: function(inId) { 38 | return this.keys.indexOf(inId) > -1; 39 | }, 40 | 'delete': function(inId) { 41 | var i = this.keys.indexOf(inId); 42 | if (i > -1) { 43 | this.keys.splice(i, 1); 44 | this.values.splice(i, 1); 45 | } 46 | }, 47 | get: function(inId) { 48 | var i = this.keys.indexOf(inId); 49 | return this.values[i]; 50 | }, 51 | clear: function() { 52 | this.keys.length = 0; 53 | this.values.length = 0; 54 | }, 55 | // return value, key, map 56 | forEach: function(callback, thisArg) { 57 | this.values.forEach(function(v, i) { 58 | callback.call(thisArg, v, this.keys[i], this); 59 | }, this); 60 | }, 61 | pointers: function() { 62 | return this.keys.length; 63 | } 64 | }; 65 | 66 | scope.PointerMap = PointerMap; 67 | })(window.PolymerGestures); 68 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-gestures/src/scope.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 | window.PolymerGestures = {}; 11 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-gestures/src/touch-action.js: -------------------------------------------------------------------------------- 1 | /* 2 | * 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 | 11 | (function() { 12 | function shadowSelector(v) { 13 | return 'html /deep/ ' + selector(v); 14 | } 15 | function selector(v) { 16 | return '[touch-action="' + v + '"]'; 17 | } 18 | function rule(v) { 19 | return '{ -ms-touch-action: ' + v + '; touch-action: ' + v + ';}'; 20 | } 21 | var attrib2css = [ 22 | 'none', 23 | 'auto', 24 | 'pan-x', 25 | 'pan-y', 26 | { 27 | rule: 'pan-x pan-y', 28 | selectors: [ 29 | 'pan-x pan-y', 30 | 'pan-y pan-x' 31 | ] 32 | }, 33 | 'manipulation' 34 | ]; 35 | var styles = ''; 36 | // only install stylesheet if the browser has touch action support 37 | var hasTouchAction = typeof document.head.style.touchAction === 'string'; 38 | // only add shadow selectors if shadowdom is supported 39 | var hasShadowRoot = !window.ShadowDOMPolyfill && document.head.createShadowRoot; 40 | 41 | if (hasTouchAction) { 42 | attrib2css.forEach(function(r) { 43 | if (String(r) === r) { 44 | styles += selector(r) + rule(r) + '\n'; 45 | if (hasShadowRoot) { 46 | styles += shadowSelector(r) + rule(r) + '\n'; 47 | } 48 | } else { 49 | styles += r.selectors.map(selector) + rule(r.rule) + '\n'; 50 | if (hasShadowRoot) { 51 | styles += r.selectors.map(shadowSelector) + rule(r.rule) + '\n'; 52 | } 53 | } 54 | }); 55 | 56 | var el = document.createElement('style'); 57 | el.textContent = styles; 58 | document.head.appendChild(el); 59 | } 60 | })(); 61 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-gestures/test/html/content-handler.html: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | content tap 14 | 15 | 16 | 41 | 42 | 43 |Tap the gray box with touch. If the screen turns green, the test passed. If it turns red, the test failed.44 | 45 |46 | 47 |48 | 49 | 50 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-gestures/test/html/focus.html: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 |Ghostclick 14 | 15 | 16 | 41 | 42 | 43 |Tap the gray box with touch. If the screen turns green, the test passed. If it turns red, the test failed.44 | 45 | 46 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-gestures/test/js/pointermap.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. 3 | * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt 4 | * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 5 | * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt 6 | * Code distributed by Google as part of the polymer project is also 7 | * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt 8 | */ 9 | 10 | suite('PointerMap', function() { 11 | var PointerMap = PolymerGestures.PointerMap; 12 | var p; 13 | setup(function() { 14 | p = new PointerMap(); 15 | }); 16 | 17 | test('PointerMap has Map API', function() { 18 | var keys = [ 19 | 'set', 20 | 'get', 21 | 'has', 22 | 'delete', 23 | 'pointers', 24 | 'clear', 25 | 'forEach' 26 | ]; 27 | keys.forEach(function(k) { 28 | assert.property(PointerMap.prototype, k); 29 | }); 30 | }); 31 | test('PointerMap .set', function() { 32 | p.set(1, true); 33 | if (!window.Map || !(p instanceof Map)) { 34 | assert.lengthOf(p.keys, 1); 35 | assert.lengthOf(p.values, 1); 36 | } 37 | assert.equal(p.pointers(), 1); 38 | }); 39 | test('PointerMap .get', function() { 40 | var p = new PointerMap(); 41 | 42 | }); 43 | test('PointerMap .pointers', function() { 44 | assert.isFunction(p.pointers); 45 | assert.equal(p.pointers(), 0); 46 | p.set(1, true); 47 | assert.equal(p.pointers(), 1); 48 | p.set(1, false); 49 | assert.equal(p.pointers(), 1); 50 | }); 51 | test('PointerMap .has', function() { 52 | p.set(1, true); 53 | assert.isTrue(p.has(1)); 54 | assert.isFalse(p.has(0)); 55 | }); 56 | test('PointerMap .delete', function() { 57 | p.set(1, true); 58 | p.set(2, false); 59 | assert.equal(p.pointers(), 2); 60 | p.delete(1); 61 | assert.equal(p.pointers(), 1); 62 | assert.isFalse(p.get(2)); 63 | }); 64 | test('PointerMap .clear', function() { 65 | p.set(1, true); 66 | p.clear(); 67 | assert.equal(p.pointers(), 0); 68 | }); 69 | test('PointerMap .forEach', function() { 70 | p.set(1, true); 71 | p.set(2, false); 72 | p.set(3, {}); 73 | p.forEach(function(v, k, m) { 74 | assert.ok(k); 75 | assert.equal(p.get(k), v); 76 | // assert.equal(m, p); 77 | }); 78 | }); 79 | }); 80 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-gestures/test/js/setup.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. 3 | * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt 4 | * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 5 | * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt 6 | * Code distributed by Google as part of the polymer project is also 7 | * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt 8 | */ 9 | 10 | mocha.setup({ui: 'tdd'}); 11 | assert = chai.assert; 12 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer-gestures/test/runner.html: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 |Polymer Gestures test runner 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/build.bat: -------------------------------------------------------------------------------- 1 | START /B vulcanize polymer-simplex.html --inline --strip -output dist/polymer-simplex.html 2 | START /B vulcanize polymer.html --inline --strip -output dist/polymer.html 3 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/explainer/data-bind.vsdx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicroto/viktor/2b0509343a63323935abbfbba42b2fd65fb9b806/src/server/client/non-bower/webaudio-controls/bower_components/polymer/explainer/data-bind.vsdx -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/explainer/samples.html: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | 14 |Explainer Samples 15 | 16 | 17 | 18 | 19 | 20 | 21 | 27 | 28 | 29 | 30 | 31 | 46 | 47 |48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/polymer-micro.html: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 35 | 36 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/polymer-mini.html: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 45 | 46 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/polymer.html: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/expr/focus.html: -------------------------------------------------------------------------------- 1 | 10 | 23 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/expr/gestures.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/expr/log.html: -------------------------------------------------------------------------------- 1 | 10 | 22 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/expr/style-protector.html: -------------------------------------------------------------------------------- 1 | 2 | 53 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/features/micro/constructor.html: -------------------------------------------------------------------------------- 1 | 10 | 75 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/features/micro/extends.html: -------------------------------------------------------------------------------- 1 | 10 | 80 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/features/micro/mixins.html: -------------------------------------------------------------------------------- 1 | 10 | 41 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/features/mini/shadow.html: -------------------------------------------------------------------------------- 1 | 10 | 11 | 41 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/features/mini/template.html: -------------------------------------------------------------------------------- 1 | 10 | 61 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/features/standard/resolveUrl.html: -------------------------------------------------------------------------------- 1 | 10 | 28 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/annotations/demo/app-chrome.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Template Test 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | {{text}} 32 | 33 | 34 | 35 | 36 | 37 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/async.html: -------------------------------------------------------------------------------- 1 | 10 | 69 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/bind/demo/app-chrome.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |Bind Test 6 | 7 | 8 | 9 | 10 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/bind/demo/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |Bind Test 6 | 7 | 8 | 9 | 10 | 11 | 12 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/bind/demo/src/annotations-bind-demo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |annotated #foo span:12 |
13 | {{text}} 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/case-map.html: -------------------------------------------------------------------------------- 1 | 10 | 47 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/debounce.html: -------------------------------------------------------------------------------- 1 | 10 | 70 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/dom-module.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/event-api.html: -------------------------------------------------------------------------------- 1 | 10 | 11 | 93 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/lang.html: -------------------------------------------------------------------------------- 1 | 10 | 22 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/module.html: -------------------------------------------------------------------------------- 1 | 10 | 57 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/polymer.html: -------------------------------------------------------------------------------- 1 | 10 | 78 | 79 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/settings.html: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/style-defaults.html: -------------------------------------------------------------------------------- 1 | 10 | 11 | 33 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/style-util.html: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/template/x-autobind.html: -------------------------------------------------------------------------------- 1 | 10 | 11 | 52 | 53 | 81 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/lib/template/x-template.html: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 40 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/src/polymer.html: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/polymer/wct.conf.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | suites: ['test/runner.html'], 3 | }; 4 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/bower_components/webcomponentsjs/build.log: -------------------------------------------------------------------------------- 1 | BUILD LOG 2 | --------- 3 | Build Time: 2015-04-13T13:57:39-0700 4 | 5 | NODEJS INFORMATION 6 | ================== 7 | nodejs: v0.12.0 8 | gulp: 3.8.11 9 | gulp-audit: 1.0.0 10 | gulp-concat: 2.5.2 11 | gulp-header: 1.2.2 12 | gulp-uglify: 1.2.0 13 | run-sequence: 1.0.2 14 | web-component-tester: 2.2.6 15 | 16 | REPO REVISIONS 17 | ============== 18 | webcomponentsjs: ef29f20f1678f1b121ea5acce84cf36c599f7627 19 | 20 | BUILD HASHES 21 | ============ 22 | CustomElements.js: 2292abfeeb0ca0e03314f35edc50867c89b2dc93 23 | CustomElements.min.js: 131750c5b4297103b7702bb9123498bd5d4113a3 24 | HTMLImports.js: 5488833312a155d45744190715c0a702ba4d1340 25 | HTMLImports.min.js: 3d3cc90f2ff3fd718cb80253b4dc18ac54157411 26 | ShadowDOM.js: bf6aa1c79006401b100f0b60caa8b4f60333c209 27 | ShadowDOM.min.js: bf7028b266a9567556e3e99946dee55b451db0a8 28 | webcomponents-lite.js: 22a5d4a7b77eff8bca4dff1d0ed8c0cf11bd43e1 29 | webcomponents-lite.min.js: 45223241dc94cf226d7626e6f85af2370e186134 30 | webcomponents.js: eb64d78f556c672f905a703e10dba21bfe97694b 31 | webcomponents.min.js: 65d1bdca02300557e2055f91b236c20624ca0317 -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/img/LittlePhatty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicroto/viktor/2b0509343a63323935abbfbba42b2fd65fb9b806/src/server/client/non-bower/webaudio-controls/img/LittlePhatty.png -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/img/LittlePhatty_sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicroto/viktor/2b0509343a63323935abbfbba42b2fd65fb9b806/src/server/client/non-bower/webaudio-controls/img/LittlePhatty_sample.png -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/img/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicroto/viktor/2b0509343a63323935abbfbba42b2fd65fb9b806/src/server/client/non-bower/webaudio-controls/img/bg.png -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/img/defknob2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicroto/viktor/2b0509343a63323935abbfbba42b2fd65fb9b806/src/server/client/non-bower/webaudio-controls/img/defknob2.png -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/img/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicroto/viktor/2b0509343a63323935abbfbba42b2fd65fb9b806/src/server/client/non-bower/webaudio-controls/img/demo.png -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/img/hsliderbody.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicroto/viktor/2b0509343a63323935abbfbba42b2fd65fb9b806/src/server/client/non-bower/webaudio-controls/img/hsliderbody.png -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/img/hsliderknob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicroto/viktor/2b0509343a63323935abbfbba42b2fd65fb9b806/src/server/client/non-bower/webaudio-controls/img/hsliderknob.png -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/img/hsw5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicroto/viktor/2b0509343a63323935abbfbba42b2fd65fb9b806/src/server/client/non-bower/webaudio-controls/img/hsw5.png -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/img/sample3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicroto/viktor/2b0509343a63323935abbfbba42b2fd65fb9b806/src/server/client/non-bower/webaudio-controls/img/sample3.png -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/img/switch_toggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicroto/viktor/2b0509343a63323935abbfbba42b2fd65fb9b806/src/server/client/non-bower/webaudio-controls/img/switch_toggle.png -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/img/testknob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicroto/viktor/2b0509343a63323935abbfbba42b2fd65fb9b806/src/server/client/non-bower/webaudio-controls/img/testknob.png -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/img/vernier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicroto/viktor/2b0509343a63323935abbfbba42b2fd65fb9b806/src/server/client/non-bower/webaudio-controls/img/vernier.png -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/img/vsliderbody.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicroto/viktor/2b0509343a63323935abbfbba42b2fd65fb9b806/src/server/client/non-bower/webaudio-controls/img/vsliderbody.png -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/img/vsliderknob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicroto/viktor/2b0509343a63323935abbfbba42b2fd65fb9b806/src/server/client/non-bower/webaudio-controls/img/vsliderknob.png -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/lib/webaudio-param.min.html: -------------------------------------------------------------------------------- 1 | 6 |-------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webaudio-controls", 3 | "dependencies": { 4 | "grunt": "~0.4.1" 5 | }, 6 | "devDependencies": { 7 | "grunt-banner": "^0.4.0", 8 | "grunt-contrib-clean": "~0.5.0", 9 | "grunt-contrib-connect": "^0.10.1", 10 | "grunt-vulcanize": "^0.6.4" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/sample4.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | [Polymer] WebAudio-Keyboard Test 6 | 7 | 8 | 9 | 10 | 43 | 44 | 45 | MidiOut :
46 | Program :47 |
48 | Volume :
49 |50 | 51 | 52 | -------------------------------------------------------------------------------- /src/server/client/non-bower/webaudio-controls/webcomponents/webaudio-controls.html: -------------------------------------------------------------------------------- 1 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/server/server.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var http = require('http'), 4 | pathUtils = require('path'), 5 | express = require("express"), 6 | app = express(), 7 | PORT = process.env.PORT || 5000; 8 | 9 | app.use( express.static( pathUtils.resolve( __dirname, "client" ) ) ); 10 | 11 | http.createServer(app).listen( PORT, function() { 12 | console.log('Express server listening on port ' + PORT); 13 | console.log('http://localhost:' + PORT); 14 | } ); --------------------------------------------------------------------------------