├── images ├── ui-icons_222222_256x240.png ├── ui-icons_2e83ff_256x240.png ├── ui-icons_454545_256x240.png ├── ui-icons_888888_256x240.png ├── ui-icons_cd0a0a_256x240.png ├── ui-bg_glass_55_fbf9ee_1x400.png ├── ui-bg_glass_65_ffffff_1x400.png ├── ui-bg_glass_75_dadada_1x400.png ├── ui-bg_glass_75_e6e6e6_1x400.png ├── ui-bg_glass_95_fef1ec_1x400.png └── ui-bg_highlight-soft_75_cccccc_1x100.png ├── README.md ├── s.css ├── index.js ├── jquery-ui.structure.css ├── jquery.knob.min.js ├── index.html ├── jquery-ui.theme.css ├── jquery-ui.css └── jsrender.js /images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benschmaus/blipweb/HEAD/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benschmaus/blipweb/HEAD/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benschmaus/blipweb/HEAD/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benschmaus/blipweb/HEAD/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benschmaus/blipweb/HEAD/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benschmaus/blipweb/HEAD/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benschmaus/blipweb/HEAD/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benschmaus/blipweb/HEAD/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benschmaus/blipweb/HEAD/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /images/ui-bg_glass_95_fef1ec_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benschmaus/blipweb/HEAD/images/ui-bg_glass_95_fef1ec_1x400.png -------------------------------------------------------------------------------- /images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benschmaus/blipweb/HEAD/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Blipweb is a simple web app for creating and sharing patches for MeeBlip anode 2 | using the Web MIDI API, which is currently only supported by Chrome. 3 | 4 | You can see a video of it in action at https://www.youtube.com/watch?v=ToHkEqEFFlI 5 | 6 | To create patches, select the a) MIDI port your MeeBlip is connected to and 7 | b) MIDI channel your MeeBlip is configured to use. Change the knobs and switches and press "send to meeblip" for your changes to take effect. (Make sure you've got the right port and channel selected!) 8 | 9 | To save your patch click "get patch link". You can save the link to a bookmarks folder, put it in a web page, etc. 10 | In this way you can create shareable libraries of patches for your MeeBlip. 11 | 12 | There is a soundcloud group where you can share your patches. Find it at https://soundcloud.com/groups/meeblip-patches. 13 | 14 | blipweb Patches can also serve as a reference guide for creating sounds on your MeeBlip. For example, 15 | if you load a patch link in the app you can position the tactile knobs and switches on your MeeBlip to 16 | mirror those in the patch config to dial in the sound on your synth. Note that you need to use blipweb to control MeeBlip's MIDI-only params! 17 | 18 | Also, the resonance control is not supported as it's analog only. 19 | 20 | This version has been tested on my local system and works well. You can try out the 21 | latest stable version at https://factotumo.com/blipweb/. 22 | 23 | Read more about blipweb at https://factotumo.com/2016/02/blipweb-web-midi-patch-editor-for-meeblip-anode/ 24 | 25 | Feedback is welcome. 26 | -------------------------------------------------------------------------------- /s.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: sans-serif; 3 | } 4 | 5 | h1 { 6 | font-size: 1.5em; 7 | } 8 | 9 | .vt323 { 10 | font-family: 'VT323', monospace; 11 | font-size: 40px; 12 | } 13 | 14 | #controlBar { 15 | font-size: 1em; 16 | padding: 4px; 17 | 18 | } 19 | 20 | .foo { 21 | font-size: 1.5em; 22 | } 23 | 24 | .foo { 25 | color: #ff0000; 26 | } 27 | 28 | #container { 29 | border: 0px solid #000; 30 | margin-top: 25px; 31 | width: 80%; 32 | margin-left: 10%; 33 | margin-right: 10%; 34 | } 35 | 36 | #envelope { 37 | float: left; 38 | } 39 | 40 | #filter { 41 | 42 | } 43 | 44 | #oscillators { 45 | float: left; 46 | } 47 | 48 | #waveBanks { 49 | position: relative; 50 | font-size: .7em; 51 | border: 1px solid #333; 52 | width: 150px; 53 | text-align: center; 54 | top: -10px; 55 | left: 10px; 56 | } 57 | 58 | #waveBanks tr { 59 | } 60 | 61 | #waveBanks td { 62 | } 63 | 64 | #lfo { 65 | 66 | } 67 | 68 | #shareUrl { 69 | font-size: .7em; 70 | } 71 | 72 | .ui-dialog-titlebar { 73 | font-size: .7em !important; 74 | } 75 | 76 | 77 | input.controlButton { 78 | font-size: .7em; 79 | font-weight: bold; 80 | } 81 | 82 | .ui-button-text { 83 | font-size: .7em; 84 | } 85 | 86 | .knobGroup { 87 | border: 0px solid #000; 88 | margin-right: 5%; 89 | } 90 | 91 | .knobGroup h3 { 92 | font-size: .9em; 93 | } 94 | 95 | .knobLabelPair { 96 | width: 110px; 97 | float: left; 98 | } 99 | 100 | .knobLabelPairStacked { 101 | width: 105px; 102 | } 103 | 104 | .knobLabelPairWide { 105 | border: 0px solid #000; 106 | width: 120px; 107 | float: left; 108 | } 109 | 110 | .knobGroup h2 { 111 | padding: 3px; 112 | background: #000; 113 | color: #eee; 114 | font-size: 1em; 115 | } 116 | 117 | .clear { 118 | clear: both; 119 | height: 1px; 120 | } 121 | 122 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var formToCCs = { 2 | "aDecay": 54, 3 | "fDecay": 53, 4 | "sustain": 64, 5 | "fCut": 52, 6 | "wave": 51, 7 | "detune": 50, 8 | "octave": 65, 9 | "lDepth": 48, 10 | "lRate": 49, 11 | "lDest": 67, 12 | "pwmSweep": 66, 13 | "glide": 55, 14 | "vcfEnvAmount": 56, 15 | "lRand": 68, 16 | "lNoteRetrig": 69, 17 | "oscBWave": 70 18 | }; 19 | 20 | 21 | var midi = { 22 | 23 | onMIDISuccess: function(midiAccess) { 24 | console.log('MIDI Access Object', midiAccess); 25 | //console.log(this); 26 | 27 | var self = this; 28 | midiAccess.onstatechange = function(e) { 29 | self.onMIDIAccessChange(e); 30 | } 31 | this.midiAccess = midiAccess; 32 | this.inputs = {}; 33 | this.outputs = {}; 34 | 35 | this.initPorts(); 36 | }, 37 | 38 | initPorts: function() { 39 | 40 | var self = this; 41 | 42 | var inputs = this.midiAccess.inputs; 43 | if (inputs.size > 0) { 44 | inputs.forEach( 45 | function(port, key) { 46 | //console.log(port); 47 | self.registerPort(port); 48 | } 49 | ); 50 | } else { 51 | 52 | } 53 | 54 | var outputs = this.midiAccess.outputs; 55 | if (outputs.size > 0) { 56 | outputs.forEach( 57 | function(port, key) { 58 | self.registerPort(port); 59 | self.renderPort(port); 60 | } 61 | ); 62 | } else { 63 | 64 | } 65 | }, 66 | 67 | onMIDIAccessChange: function(e) { 68 | console.log("MIDI access change: " + e); 69 | //console.log(this); 70 | var port = e.port; 71 | 72 | if (port.type == "input") { 73 | if (this.inputs[port.name] === undefined) { 74 | this.registerPort(port); 75 | } 76 | } else { 77 | if (this.outputs[port.name] === undefined) { 78 | this.registerPort(port); 79 | } 80 | this.renderPort(port); 81 | } 82 | }, 83 | 84 | renderPort: function(port) { 85 | var portOptions = $("#port").children(); 86 | 87 | if (port.state == "connected") { 88 | if ((portOptions.length == 1) && (portOptions.get(0).text == "none")) { 89 | $("#port").empty(); 90 | } 91 | 92 | if (!$("#" + port.type + port.id).length) { 93 | var html = ''; 94 | $("#port").append(html); 95 | } 96 | } else { 97 | $("#" + port.type + port.id).remove(); 98 | 99 | if ($("#port").children().length == 0) { 100 | $("#port").append('') 101 | } 102 | } 103 | }, 104 | 105 | registerPort: function(port) { 106 | var self = this; 107 | if (port.type == "input") { 108 | this.inputs[port.name] = port; 109 | port.onmidimessage = function(m) { self.onMIDIMessage(m); }; 110 | } else { 111 | this.outputs[port.name] = port; 112 | } 113 | 114 | port.onstatechange = function(e) { self.onPortStateChange(e); }; 115 | }, 116 | 117 | onMIDIFailure: function(e) { 118 | // when we get a failed response, run this code 119 | alert("No access to MIDI devices or your browser doesn't support WebMIDI API. Please use WebMIDIAPIShim " + e); 120 | }, 121 | 122 | onPortStateChange: function(event) { 123 | console.log("port state change: " + event); 124 | }, 125 | 126 | onMIDIMessage: function(message) { 127 | //console.log(message); 128 | } 129 | 130 | }; 131 | 132 | if (navigator.requestMIDIAccess) { 133 | 134 | navigator.requestMIDIAccess({ 135 | sysex: false 136 | }).then( 137 | function(midiAccess) { midi.onMIDISuccess(midiAccess); }, 138 | function(e) { midi.onMIDIFailure(e); } 139 | ); 140 | 141 | } else { 142 | alert("No MIDI support in your browser."); 143 | } -------------------------------------------------------------------------------- /jquery-ui.structure.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI CSS Framework 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://api.jqueryui.com/category/theming/ 10 | */ 11 | 12 | /* Layout helpers 13 | ----------------------------------*/ 14 | .ui-helper-hidden { 15 | display: none; 16 | } 17 | .ui-helper-hidden-accessible { 18 | border: 0; 19 | clip: rect(0 0 0 0); 20 | height: 1px; 21 | margin: -1px; 22 | overflow: hidden; 23 | padding: 0; 24 | position: absolute; 25 | width: 1px; 26 | } 27 | .ui-helper-reset { 28 | margin: 0; 29 | padding: 0; 30 | border: 0; 31 | outline: 0; 32 | line-height: 1.3; 33 | text-decoration: none; 34 | font-size: 100%; 35 | list-style: none; 36 | } 37 | .ui-helper-clearfix:before, 38 | .ui-helper-clearfix:after { 39 | content: ""; 40 | display: table; 41 | border-collapse: collapse; 42 | } 43 | .ui-helper-clearfix:after { 44 | clear: both; 45 | } 46 | .ui-helper-clearfix { 47 | min-height: 0; /* support: IE7 */ 48 | } 49 | .ui-helper-zfix { 50 | width: 100%; 51 | height: 100%; 52 | top: 0; 53 | left: 0; 54 | position: absolute; 55 | opacity: 0; 56 | filter:Alpha(Opacity=0); /* support: IE8 */ 57 | } 58 | 59 | .ui-front { 60 | z-index: 100; 61 | } 62 | 63 | 64 | /* Interaction Cues 65 | ----------------------------------*/ 66 | .ui-state-disabled { 67 | cursor: default !important; 68 | } 69 | 70 | 71 | /* Icons 72 | ----------------------------------*/ 73 | 74 | /* states and images */ 75 | .ui-icon { 76 | display: block; 77 | text-indent: -99999px; 78 | overflow: hidden; 79 | background-repeat: no-repeat; 80 | } 81 | 82 | 83 | /* Misc visuals 84 | ----------------------------------*/ 85 | 86 | /* Overlays */ 87 | .ui-widget-overlay { 88 | position: fixed; 89 | top: 0; 90 | left: 0; 91 | width: 100%; 92 | height: 100%; 93 | } 94 | .ui-draggable-handle { 95 | -ms-touch-action: none; 96 | touch-action: none; 97 | } 98 | .ui-resizable { 99 | position: relative; 100 | } 101 | .ui-resizable-handle { 102 | position: absolute; 103 | font-size: 0.1px; 104 | display: block; 105 | -ms-touch-action: none; 106 | touch-action: none; 107 | } 108 | .ui-resizable-disabled .ui-resizable-handle, 109 | .ui-resizable-autohide .ui-resizable-handle { 110 | display: none; 111 | } 112 | .ui-resizable-n { 113 | cursor: n-resize; 114 | height: 7px; 115 | width: 100%; 116 | top: -5px; 117 | left: 0; 118 | } 119 | .ui-resizable-s { 120 | cursor: s-resize; 121 | height: 7px; 122 | width: 100%; 123 | bottom: -5px; 124 | left: 0; 125 | } 126 | .ui-resizable-e { 127 | cursor: e-resize; 128 | width: 7px; 129 | right: -5px; 130 | top: 0; 131 | height: 100%; 132 | } 133 | .ui-resizable-w { 134 | cursor: w-resize; 135 | width: 7px; 136 | left: -5px; 137 | top: 0; 138 | height: 100%; 139 | } 140 | .ui-resizable-se { 141 | cursor: se-resize; 142 | width: 12px; 143 | height: 12px; 144 | right: 1px; 145 | bottom: 1px; 146 | } 147 | .ui-resizable-sw { 148 | cursor: sw-resize; 149 | width: 9px; 150 | height: 9px; 151 | left: -5px; 152 | bottom: -5px; 153 | } 154 | .ui-resizable-nw { 155 | cursor: nw-resize; 156 | width: 9px; 157 | height: 9px; 158 | left: -5px; 159 | top: -5px; 160 | } 161 | .ui-resizable-ne { 162 | cursor: ne-resize; 163 | width: 9px; 164 | height: 9px; 165 | right: -5px; 166 | top: -5px; 167 | } 168 | .ui-selectable { 169 | -ms-touch-action: none; 170 | touch-action: none; 171 | } 172 | .ui-selectable-helper { 173 | position: absolute; 174 | z-index: 100; 175 | border: 1px dotted black; 176 | } 177 | .ui-sortable-handle { 178 | -ms-touch-action: none; 179 | touch-action: none; 180 | } 181 | .ui-button { 182 | display: inline-block; 183 | position: relative; 184 | padding: 0; 185 | line-height: normal; 186 | margin-right: .1em; 187 | cursor: pointer; 188 | vertical-align: middle; 189 | text-align: center; 190 | overflow: visible; /* removes extra width in IE */ 191 | } 192 | .ui-button, 193 | .ui-button:link, 194 | .ui-button:visited, 195 | .ui-button:hover, 196 | .ui-button:active { 197 | text-decoration: none; 198 | } 199 | /* to make room for the icon, a width needs to be set here */ 200 | .ui-button-icon-only { 201 | width: 2.2em; 202 | } 203 | /* button elements seem to need a little more width */ 204 | button.ui-button-icon-only { 205 | width: 2.4em; 206 | } 207 | .ui-button-icons-only { 208 | width: 3.4em; 209 | } 210 | button.ui-button-icons-only { 211 | width: 3.7em; 212 | } 213 | 214 | /* button text element */ 215 | .ui-button .ui-button-text { 216 | display: block; 217 | line-height: normal; 218 | } 219 | .ui-button-text-only .ui-button-text { 220 | padding: .4em 1em; 221 | } 222 | .ui-button-icon-only .ui-button-text, 223 | .ui-button-icons-only .ui-button-text { 224 | padding: .4em; 225 | text-indent: -9999999px; 226 | } 227 | .ui-button-text-icon-primary .ui-button-text, 228 | .ui-button-text-icons .ui-button-text { 229 | padding: .4em 1em .4em 2.1em; 230 | } 231 | .ui-button-text-icon-secondary .ui-button-text, 232 | .ui-button-text-icons .ui-button-text { 233 | padding: .4em 2.1em .4em 1em; 234 | } 235 | .ui-button-text-icons .ui-button-text { 236 | padding-left: 2.1em; 237 | padding-right: 2.1em; 238 | } 239 | /* no icon support for input elements, provide padding by default */ 240 | input.ui-button { 241 | padding: .4em 1em; 242 | } 243 | 244 | /* button icon element(s) */ 245 | .ui-button-icon-only .ui-icon, 246 | .ui-button-text-icon-primary .ui-icon, 247 | .ui-button-text-icon-secondary .ui-icon, 248 | .ui-button-text-icons .ui-icon, 249 | .ui-button-icons-only .ui-icon { 250 | position: absolute; 251 | top: 50%; 252 | margin-top: -8px; 253 | } 254 | .ui-button-icon-only .ui-icon { 255 | left: 50%; 256 | margin-left: -8px; 257 | } 258 | .ui-button-text-icon-primary .ui-button-icon-primary, 259 | .ui-button-text-icons .ui-button-icon-primary, 260 | .ui-button-icons-only .ui-button-icon-primary { 261 | left: .5em; 262 | } 263 | .ui-button-text-icon-secondary .ui-button-icon-secondary, 264 | .ui-button-text-icons .ui-button-icon-secondary, 265 | .ui-button-icons-only .ui-button-icon-secondary { 266 | right: .5em; 267 | } 268 | 269 | /* button sets */ 270 | .ui-buttonset { 271 | margin-right: 7px; 272 | } 273 | .ui-buttonset .ui-button { 274 | margin-left: 0; 275 | margin-right: -.3em; 276 | } 277 | 278 | /* workarounds */ 279 | /* reset extra padding in Firefox, see h5bp.com/l */ 280 | input.ui-button::-moz-focus-inner, 281 | button.ui-button::-moz-focus-inner { 282 | border: 0; 283 | padding: 0; 284 | } 285 | .ui-dialog { 286 | overflow: hidden; 287 | position: absolute; 288 | top: 0; 289 | left: 0; 290 | padding: .2em; 291 | outline: 0; 292 | } 293 | .ui-dialog .ui-dialog-titlebar { 294 | padding: .4em 1em; 295 | position: relative; 296 | } 297 | .ui-dialog .ui-dialog-title { 298 | float: left; 299 | margin: .1em 0; 300 | white-space: nowrap; 301 | width: 90%; 302 | overflow: hidden; 303 | text-overflow: ellipsis; 304 | } 305 | .ui-dialog .ui-dialog-titlebar-close { 306 | position: absolute; 307 | right: .3em; 308 | top: 50%; 309 | width: 20px; 310 | margin: -10px 0 0 0; 311 | padding: 1px; 312 | height: 20px; 313 | } 314 | .ui-dialog .ui-dialog-content { 315 | position: relative; 316 | border: 0; 317 | padding: .5em 1em; 318 | background: none; 319 | overflow: auto; 320 | } 321 | .ui-dialog .ui-dialog-buttonpane { 322 | text-align: left; 323 | border-width: 1px 0 0 0; 324 | background-image: none; 325 | margin-top: .5em; 326 | padding: .3em 1em .5em .4em; 327 | } 328 | .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { 329 | float: right; 330 | } 331 | .ui-dialog .ui-dialog-buttonpane button { 332 | margin: .5em .4em .5em 0; 333 | cursor: pointer; 334 | } 335 | .ui-dialog .ui-resizable-se { 336 | width: 12px; 337 | height: 12px; 338 | right: -5px; 339 | bottom: -5px; 340 | background-position: 16px 16px; 341 | } 342 | .ui-draggable .ui-dialog-titlebar { 343 | cursor: move; 344 | } 345 | .ui-menu { 346 | list-style: none; 347 | padding: 0; 348 | margin: 0; 349 | display: block; 350 | outline: none; 351 | } 352 | .ui-menu .ui-menu { 353 | position: absolute; 354 | } 355 | .ui-menu .ui-menu-item { 356 | position: relative; 357 | margin: 0; 358 | padding: 3px 1em 3px .4em; 359 | cursor: pointer; 360 | min-height: 0; /* support: IE7 */ 361 | /* support: IE10, see #8844 */ 362 | list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); 363 | } 364 | .ui-menu .ui-menu-divider { 365 | margin: 5px 0; 366 | height: 0; 367 | font-size: 0; 368 | line-height: 0; 369 | border-width: 1px 0 0 0; 370 | } 371 | .ui-menu .ui-state-focus, 372 | .ui-menu .ui-state-active { 373 | margin: -1px; 374 | } 375 | 376 | /* icon support */ 377 | .ui-menu-icons { 378 | position: relative; 379 | } 380 | .ui-menu-icons .ui-menu-item { 381 | padding-left: 2em; 382 | } 383 | 384 | /* left-aligned */ 385 | .ui-menu .ui-icon { 386 | position: absolute; 387 | top: 0; 388 | bottom: 0; 389 | left: .2em; 390 | margin: auto 0; 391 | } 392 | 393 | /* right-aligned */ 394 | .ui-menu .ui-menu-icon { 395 | left: auto; 396 | right: 0; 397 | } 398 | .ui-selectmenu-menu { 399 | padding: 0; 400 | margin: 0; 401 | position: absolute; 402 | top: 0; 403 | left: 0; 404 | display: none; 405 | } 406 | .ui-selectmenu-menu .ui-menu { 407 | overflow: auto; 408 | /* Support: IE7 */ 409 | overflow-x: hidden; 410 | padding-bottom: 1px; 411 | } 412 | .ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { 413 | font-size: 1em; 414 | font-weight: bold; 415 | line-height: 1.5; 416 | padding: 2px 0.4em; 417 | margin: 0.5em 0 0 0; 418 | height: auto; 419 | border: 0; 420 | } 421 | .ui-selectmenu-open { 422 | display: block; 423 | } 424 | .ui-selectmenu-button { 425 | display: inline-block; 426 | overflow: hidden; 427 | position: relative; 428 | text-decoration: none; 429 | cursor: pointer; 430 | } 431 | .ui-selectmenu-button span.ui-icon { 432 | right: 0.5em; 433 | left: auto; 434 | margin-top: -8px; 435 | position: absolute; 436 | top: 50%; 437 | } 438 | .ui-selectmenu-button span.ui-selectmenu-text { 439 | text-align: left; 440 | padding: 0.4em 2.1em 0.4em 1em; 441 | display: block; 442 | line-height: 1.4; 443 | overflow: hidden; 444 | text-overflow: ellipsis; 445 | white-space: nowrap; 446 | } 447 | -------------------------------------------------------------------------------- /jquery.knob.min.js: -------------------------------------------------------------------------------- 1 | (function(e){if(typeof define==="function"&&define.amd){define(["jquery"],e)}else{e(jQuery)}})(function(e){"use strict";var t={},n=Math.max,r=Math.min;t.c={};t.c.d=e(document);t.c.t=function(e){return e.originalEvent.touches.length-1};t.o=function(){var n=this;this.o=null;this.$=null;this.i=null;this.g=null;this.v=null;this.cv=null;this.x=0;this.y=0;this.w=0;this.h=0;this.$c=null;this.c=null;this.t=0;this.isInit=false;this.fgColor=null;this.pColor=null;this.dH=null;this.cH=null;this.eH=null;this.rH=null;this.scale=1;this.relative=false;this.relativeWidth=false;this.relativeHeight=false;this.$div=null;this.run=function(){var t=function(e,t){var r;for(r in t){n.o[r]=t[r]}n._carve().init();n._configure()._draw()};if(this.$.data("kontroled"))return;this.$.data("kontroled",true);this.extend();this.o=e.extend({min:this.$.data("min")!==undefined?this.$.data("min"):0,max:this.$.data("max")!==undefined?this.$.data("max"):100,stopper:true,readOnly:this.$.data("readonly")||this.$.attr("readonly")==="readonly",cursor:this.$.data("cursor")===true&&30||this.$.data("cursor")||0,thickness:this.$.data("thickness")&&Math.max(Math.min(this.$.data("thickness"),1),.01)||.35,lineCap:this.$.data("linecap")||"butt",width:this.$.data("width")||200,height:this.$.data("height")||200,displayInput:this.$.data("displayinput")==null||this.$.data("displayinput"),displayPrevious:this.$.data("displayprevious"),fgColor:this.$.data("fgcolor")||"#87CEEB",inputColor:this.$.data("inputcolor"),font:this.$.data("font")||"Arial",fontWeight:this.$.data("font-weight")||"bold",inline:false,step:this.$.data("step")||1,rotation:this.$.data("rotation"),draw:null,change:null,cancel:null,release:null,format:function(e){return e},parse:function(e){return parseFloat(e)}},this.o);this.o.flip=this.o.rotation==="anticlockwise"||this.o.rotation==="acw";if(!this.o.inputColor){this.o.inputColor=this.o.fgColor}if(this.$.is("fieldset")){this.v={};this.i=this.$.find("input");this.i.each(function(t){var r=e(this);n.i[t]=r;n.v[t]=n.o.parse(r.val());r.bind("change blur",function(){var e={};e[t]=r.val();n.val(n._validate(e))})});this.$.find("legend").remove()}else{this.i=this.$;this.v=this.o.parse(this.$.val());this.v===""&&(this.v=this.o.min);this.$.bind("change blur",function(){n.val(n._validate(n.o.parse(n.$.val())))})}!this.o.displayInput&&this.$.hide();this.$c=e(document.createElement("canvas")).attr({width:this.o.width,height:this.o.height});this.$div=e('
');this.$.wrap(this.$div).before(this.$c);this.$div=this.$.parent();if(typeof G_vmlCanvasManager!=="undefined"){G_vmlCanvasManager.initElement(this.$c[0])}this.c=this.$c[0].getContext?this.$c[0].getContext("2d"):null;if(!this.c){throw{name:"CanvasNotSupportedException",message:"Canvas not supported. Please use excanvas on IE8.0.",toString:function(){return this.name+": "+this.message}}}this.scale=(window.devicePixelRatio||1)/(this.c.webkitBackingStorePixelRatio||this.c.mozBackingStorePixelRatio||this.c.msBackingStorePixelRatio||this.c.oBackingStorePixelRatio||this.c.backingStorePixelRatio||1);this.relativeWidth=this.o.width%1!==0&&this.o.width.indexOf("%");this.relativeHeight=this.o.height%1!==0&&this.o.height.indexOf("%");this.relative=this.relativeWidth||this.relativeHeight;this._carve();if(this.v instanceof Object){this.cv={};this.copy(this.v,this.cv)}else{this.cv=this.v}this.$.bind("configure",t).parent().bind("configure",t);this._listen()._configure()._xy().init();this.isInit=true;this.$.val(this.o.format(this.v));this._draw();return this};this._carve=function(){if(this.relative){var e=this.relativeWidth?this.$div.parent().width()*parseInt(this.o.width)/100:this.$div.parent().width(),t=this.relativeHeight?this.$div.parent().height()*parseInt(this.o.height)/100:this.$div.parent().height();this.w=this.h=Math.min(e,t)}else{this.w=this.o.width;this.h=this.o.height}this.$div.css({width:this.w+"px",height:this.h+"px"});this.$c.attr({width:this.w,height:this.h});if(this.scale!==1){this.$c[0].width=this.$c[0].width*this.scale;this.$c[0].height=this.$c[0].height*this.scale;this.$c.width(this.w);this.$c.height(this.h)}return this};this._draw=function(){var e=true;n.g=n.c;n.clear();n.dH&&(e=n.dH());e!==false&&n.draw()};this._touch=function(e){var r=function(e){var t=n.xy2val(e.originalEvent.touches[n.t].pageX,e.originalEvent.touches[n.t].pageY);if(t==n.cv)return;if(n.cH&&n.cH(t)===false)return;n.change(n._validate(t));n._draw()};this.t=t.c.t(e);r(e);t.c.d.bind("touchmove.k",r).bind("touchend.k",function(){t.c.d.unbind("touchmove.k touchend.k");n.val(n.cv)});return this};this._mouse=function(e){var r=function(e){var t=n.xy2val(e.pageX,e.pageY);if(t==n.cv)return;if(n.cH&&n.cH(t)===false)return;n.change(n._validate(t));n._draw()};r(e);t.c.d.bind("mousemove.k",r).bind("keyup.k",function(e){if(e.keyCode===27){t.c.d.unbind("mouseup.k mousemove.k keyup.k");if(n.eH&&n.eH()===false)return;n.cancel()}}).bind("mouseup.k",function(e){t.c.d.unbind("mousemove.k mouseup.k keyup.k");n.val(n.cv)});return this};this._xy=function(){var e=this.$c.offset();this.x=e.left;this.y=e.top;return this};this._listen=function(){if(!this.o.readOnly){this.$c.bind("mousedown",function(e){e.preventDefault();n._xy()._mouse(e)}).bind("touchstart",function(e){e.preventDefault();n._xy()._touch(e)});this.listen()}else{this.$.attr("readonly","readonly")}if(this.relative){e(window).resize(function(){n._carve().init();n._draw()})}return this};this._configure=function(){if(this.o.draw)this.dH=this.o.draw;if(this.o.change)this.cH=this.o.change;if(this.o.cancel)this.eH=this.o.cancel;if(this.o.release)this.rH=this.o.release;if(this.o.displayPrevious){this.pColor=this.h2rgba(this.o.fgColor,"0.4");this.fgColor=this.h2rgba(this.o.fgColor,"0.6")}else{this.fgColor=this.o.fgColor}return this};this._clear=function(){this.$c[0].width=this.$c[0].width};this._validate=function(e){var t=~~((e<0?-.5:.5)+e/this.o.step)*this.o.step;return Math.round(t*100)/100};this.listen=function(){};this.extend=function(){};this.init=function(){};this.change=function(e){};this.val=function(e){};this.xy2val=function(e,t){};this.draw=function(){};this.clear=function(){this._clear()};this.h2rgba=function(e,t){var n;e=e.substring(1,7);n=[parseInt(e.substring(0,2),16),parseInt(e.substring(2,4),16),parseInt(e.substring(4,6),16)];return"rgba("+n[0]+","+n[1]+","+n[2]+","+t+")"};this.copy=function(e,t){for(var n in e){t[n]=e[n]}}};t.Dial=function(){t.o.call(this);this.startAngle=null;this.xy=null;this.radius=null;this.lineWidth=null;this.cursorExt=null;this.w2=null;this.PI2=2*Math.PI;this.extend=function(){this.o=e.extend({bgColor:this.$.data("bgcolor")||"#EEEEEE",angleOffset:this.$.data("angleoffset")||0,angleArc:this.$.data("anglearc")||360,inline:true},this.o)};this.val=function(e,t){if(null!=e){e=this.o.parse(e);if(t!==false&&e!=this.v&&this.rH&&this.rH(e)===false){return}this.cv=this.o.stopper?n(r(e,this.o.max),this.o.min):e;this.v=this.cv;this.$.val(this.o.format(this.v));this._draw()}else{return this.v}};this.xy2val=function(e,t){var i,s;i=Math.atan2(e-(this.x+this.w2),-(t-this.y-this.w2))-this.angleOffset;if(this.o.flip){i=this.angleArc-i-this.PI2}if(this.angleArc!=this.PI2&&i<0&&i>-.5){i=0}else if(i<0){i+=this.PI2}s=i*(this.o.max-this.o.min)/this.angleArc+this.o.min;this.o.stopper&&(s=n(r(s,this.o.max),this.o.min));return s};this.listen=function(){var t=this,i,s,o=function(e){e.preventDefault();var o=e.originalEvent,u=o.detail||o.wheelDeltaX,a=o.detail||o.wheelDeltaY,f=t._validate(t.o.parse(t.$.val()))+(u>0||a>0?t.o.step:u<0||a<0?-t.o.step:0);f=n(r(f,t.o.max),t.o.min);t.val(f,false);if(t.rH){clearTimeout(i);i=setTimeout(function(){t.rH(f);i=null},100);if(!s){s=setTimeout(function(){if(i)t.rH(f);s=null},200)}}},u,a,f=1,l={37:-t.o.step,38:t.o.step,39:t.o.step,40:-t.o.step};this.$.bind("keydown",function(i){var s=i.keyCode;if(s>=96&&s<=105){s=i.keyCode=s-48}u=parseInt(String.fromCharCode(s));if(isNaN(u)){s!==13&&s!==8&&s!==9&&s!==189&&(s!==190||t.$.val().match(/\./))&&i.preventDefault();if(e.inArray(s,[37,38,39,40])>-1){i.preventDefault();var o=t.o.parse(t.$.val())+l[s]*f;t.o.stopper&&(o=n(r(o,t.o.max),t.o.min));t.change(t._validate(o));t._draw();a=window.setTimeout(function(){f*=2},30)}}}).bind("keyup",function(e){if(isNaN(u)){if(a){window.clearTimeout(a);a=null;f=1;t.val(t.$.val())}}else{t.$.val()>t.o.max&&t.$.val(t.o.max)||t.$.val()this.o.max){this.v=this.o.min}this.$.val(this.v);this.w2=this.w/2;this.cursorExt=this.o.cursor/100;this.xy=this.w2*this.scale;this.lineWidth=this.xy*this.o.thickness;this.lineCap=this.o.lineCap;this.radius=this.xy-this.lineWidth/2;this.o.angleOffset&&(this.o.angleOffset=isNaN(this.o.angleOffset)?0:this.o.angleOffset);this.o.angleArc&&(this.o.angleArc=isNaN(this.o.angleArc)?this.PI2:this.o.angleArc);this.angleOffset=this.o.angleOffset*Math.PI/180;this.angleArc=this.o.angleArc*Math.PI/180;this.startAngle=1.5*Math.PI+this.angleOffset;this.endAngle=1.5*Math.PI+this.angleOffset+this.angleArc;var e=n(String(Math.abs(this.o.max)).length,String(Math.abs(this.o.min)).length,2)+2;this.o.displayInput&&this.i.css({width:(this.w/2+4>>0)+"px",height:(this.w/3>>0)+"px",position:"absolute","vertical-align":"middle","margin-top":(this.w/3>>0)+"px","margin-left":"-"+(this.w*3/4+2>>0)+"px",border:0,background:"none",font:this.o.fontWeight+" "+(this.w/e>>0)+"px "+this.o.font,"text-align":"center",color:this.o.inputColor||this.o.fgColor,padding:"0px","-webkit-appearance":"none"})||this.i.css({width:"0px",visibility:"hidden"})};this.change=function(e){this.cv=e;this.$.val(this.o.format(e))};this.angle=function(e){return(e-this.o.min)*this.angleArc/(this.o.max-this.o.min)};this.arc=function(e){var t,n;e=this.angle(e);if(this.o.flip){t=this.endAngle+1e-5;n=t-e-1e-5}else{t=this.startAngle-1e-5;n=t+e+1e-5}this.o.cursor&&(t=n-this.cursorExt)&&(n=n+this.cursorExt);return{s:t,e:n,d:this.o.flip&&!this.o.cursor}};this.draw=function(){var e=this.g,t=this.arc(this.cv),n,r=1;e.lineWidth=this.lineWidth;e.lineCap=this.lineCap;if(this.o.bgColor!=="none"){e.beginPath();e.strokeStyle=this.o.bgColor;e.arc(this.xy,this.xy,this.radius,this.endAngle-1e-5,this.startAngle+1e-5,true);e.stroke()}if(this.o.displayPrevious){n=this.arc(this.v);e.beginPath();e.strokeStyle=this.pColor;e.arc(this.xy,this.xy,this.radius,n.s,n.e,n.d);e.stroke();r=this.cv==this.v}e.beginPath();e.strokeStyle=r?this.o.fgColor:this.fgColor;e.arc(this.xy,this.xy,this.radius,t.s,t.e,t.d);e.stroke()};this.cancel=function(){this.val(this.v)}};e.fn.dial=e.fn.knob=function(n){return this.each(function(){var r=new t.Dial;r.o=n;r.$=e(this);r.run()}).parent()}}) -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | blipweb 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 31 | 32 | 33 | 34 | 35 | 36 |
37 | 38 |

blipweb: patch editing and sharing for meeblip anode. 39 | 40 | examples: perc, 41 | buzz, 42 | phlead

43 | 44 |
45 | 46 |
47 | MIDI: ports 48 | 51 | 52 | channels 53 | 59 |   60 | 61 | 62 | 63 | 64 | 65 |
66 | 67 | 68 |
69 |

envelope

70 |
71 | 72 |

amp. decay

73 | 74 | 75 |
76 |
77 | 78 |

filter decay

79 | 80 | 81 |
82 | 83 |
84 |

sustain

85 | 86 | 87 |
88 |
89 | 90 |
91 |

filter

92 |
93 | 94 |

cutoff

95 | 96 | 97 |
98 |
99 | 100 |
 
101 | 102 |
103 |

oscillators

104 |
105 | 106 |

wave

107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 |
rangebank abank b
118 | 125 | 138 | 139 |
140 | 141 |
142 |

detune

143 | 144 |
145 | 146 |
147 |
148 |

octave

149 | 150 | 151 |
152 | 153 |
154 |

wave bank

155 | 156 | 157 |
158 |
159 | 160 |
161 | 162 |
163 |

lfo

164 |
165 | 166 |

rate

167 | 168 | 169 |
170 | 171 |
172 |

depth

173 | 174 |
175 | 176 |
177 |

dest

178 | 179 | 180 |
181 |
182 | 183 |
 
184 | 185 |
186 |

MIDI only params

187 | 188 |
189 |

glide

190 | 191 |
192 | 193 |
194 |

vcf env. amount

195 | 196 |
197 | 198 |
199 |

lfo random

200 | 201 | 202 |
203 | 204 |
205 |

lfo note retrigger

206 | 207 | 208 |
209 | 210 |
211 |

osc. b wave

212 | 213 | 214 |
215 | 216 |
217 | 218 |
219 | 220 |
221 |

find source code / report issues at github. see also factotumo.com

222 |
223 | 224 |
225 | 226 | 419 | 420 | 421 | 422 | -------------------------------------------------------------------------------- /jquery-ui.theme.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI CSS Framework 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://api.jqueryui.com/category/theming/ 10 | * 11 | * To view and modify this theme, visit http://jqueryui.com/themeroller/ 12 | */ 13 | 14 | 15 | /* Component containers 16 | ----------------------------------*/ 17 | .ui-widget { 18 | font-family: Verdana,Arial,sans-serif; 19 | font-size: 1.1em; 20 | } 21 | .ui-widget .ui-widget { 22 | font-size: 1em; 23 | } 24 | .ui-widget input, 25 | .ui-widget select, 26 | .ui-widget textarea, 27 | .ui-widget button { 28 | font-family: Verdana,Arial,sans-serif; 29 | font-size: 1em; 30 | } 31 | .ui-widget-content { 32 | border: 1px solid #aaaaaa; 33 | background: #ffffff; 34 | color: #222222; 35 | } 36 | .ui-widget-content a { 37 | color: #222222; 38 | } 39 | .ui-widget-header { 40 | border: 1px solid #aaaaaa; 41 | background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; 42 | color: #222222; 43 | font-weight: bold; 44 | } 45 | .ui-widget-header a { 46 | color: #222222; 47 | } 48 | 49 | /* Interaction states 50 | ----------------------------------*/ 51 | .ui-state-default, 52 | .ui-widget-content .ui-state-default, 53 | .ui-widget-header .ui-state-default { 54 | border: 1px solid #d3d3d3; 55 | background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; 56 | font-weight: normal; 57 | color: #555555; 58 | } 59 | .ui-state-default a, 60 | .ui-state-default a:link, 61 | .ui-state-default a:visited { 62 | color: #555555; 63 | text-decoration: none; 64 | } 65 | .ui-state-hover, 66 | .ui-widget-content .ui-state-hover, 67 | .ui-widget-header .ui-state-hover, 68 | .ui-state-focus, 69 | .ui-widget-content .ui-state-focus, 70 | .ui-widget-header .ui-state-focus { 71 | border: 1px solid #999999; 72 | background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; 73 | font-weight: normal; 74 | color: #212121; 75 | } 76 | .ui-state-hover a, 77 | .ui-state-hover a:hover, 78 | .ui-state-hover a:link, 79 | .ui-state-hover a:visited, 80 | .ui-state-focus a, 81 | .ui-state-focus a:hover, 82 | .ui-state-focus a:link, 83 | .ui-state-focus a:visited { 84 | color: #212121; 85 | text-decoration: none; 86 | } 87 | .ui-state-active, 88 | .ui-widget-content .ui-state-active, 89 | .ui-widget-header .ui-state-active { 90 | border: 1px solid #aaaaaa; 91 | background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; 92 | font-weight: normal; 93 | color: #212121; 94 | } 95 | .ui-state-active a, 96 | .ui-state-active a:link, 97 | .ui-state-active a:visited { 98 | color: #212121; 99 | text-decoration: none; 100 | } 101 | 102 | /* Interaction Cues 103 | ----------------------------------*/ 104 | .ui-state-highlight, 105 | .ui-widget-content .ui-state-highlight, 106 | .ui-widget-header .ui-state-highlight { 107 | border: 1px solid #fcefa1; 108 | background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; 109 | color: #363636; 110 | } 111 | .ui-state-highlight a, 112 | .ui-widget-content .ui-state-highlight a, 113 | .ui-widget-header .ui-state-highlight a { 114 | color: #363636; 115 | } 116 | .ui-state-error, 117 | .ui-widget-content .ui-state-error, 118 | .ui-widget-header .ui-state-error { 119 | border: 1px solid #cd0a0a; 120 | background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; 121 | color: #cd0a0a; 122 | } 123 | .ui-state-error a, 124 | .ui-widget-content .ui-state-error a, 125 | .ui-widget-header .ui-state-error a { 126 | color: #cd0a0a; 127 | } 128 | .ui-state-error-text, 129 | .ui-widget-content .ui-state-error-text, 130 | .ui-widget-header .ui-state-error-text { 131 | color: #cd0a0a; 132 | } 133 | .ui-priority-primary, 134 | .ui-widget-content .ui-priority-primary, 135 | .ui-widget-header .ui-priority-primary { 136 | font-weight: bold; 137 | } 138 | .ui-priority-secondary, 139 | .ui-widget-content .ui-priority-secondary, 140 | .ui-widget-header .ui-priority-secondary { 141 | opacity: .7; 142 | filter:Alpha(Opacity=70); /* support: IE8 */ 143 | font-weight: normal; 144 | } 145 | .ui-state-disabled, 146 | .ui-widget-content .ui-state-disabled, 147 | .ui-widget-header .ui-state-disabled { 148 | opacity: .35; 149 | filter:Alpha(Opacity=35); /* support: IE8 */ 150 | background-image: none; 151 | } 152 | .ui-state-disabled .ui-icon { 153 | filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ 154 | } 155 | 156 | /* Icons 157 | ----------------------------------*/ 158 | 159 | /* states and images */ 160 | .ui-icon { 161 | width: 16px; 162 | height: 16px; 163 | } 164 | .ui-icon, 165 | .ui-widget-content .ui-icon { 166 | background-image: url("images/ui-icons_222222_256x240.png"); 167 | } 168 | .ui-widget-header .ui-icon { 169 | background-image: url("images/ui-icons_222222_256x240.png"); 170 | } 171 | .ui-state-default .ui-icon { 172 | background-image: url("images/ui-icons_888888_256x240.png"); 173 | } 174 | .ui-state-hover .ui-icon, 175 | .ui-state-focus .ui-icon { 176 | background-image: url("images/ui-icons_454545_256x240.png"); 177 | } 178 | .ui-state-active .ui-icon { 179 | background-image: url("images/ui-icons_454545_256x240.png"); 180 | } 181 | .ui-state-highlight .ui-icon { 182 | background-image: url("images/ui-icons_2e83ff_256x240.png"); 183 | } 184 | .ui-state-error .ui-icon, 185 | .ui-state-error-text .ui-icon { 186 | background-image: url("images/ui-icons_cd0a0a_256x240.png"); 187 | } 188 | 189 | /* positioning */ 190 | .ui-icon-blank { background-position: 16px 16px; } 191 | .ui-icon-carat-1-n { background-position: 0 0; } 192 | .ui-icon-carat-1-ne { background-position: -16px 0; } 193 | .ui-icon-carat-1-e { background-position: -32px 0; } 194 | .ui-icon-carat-1-se { background-position: -48px 0; } 195 | .ui-icon-carat-1-s { background-position: -64px 0; } 196 | .ui-icon-carat-1-sw { background-position: -80px 0; } 197 | .ui-icon-carat-1-w { background-position: -96px 0; } 198 | .ui-icon-carat-1-nw { background-position: -112px 0; } 199 | .ui-icon-carat-2-n-s { background-position: -128px 0; } 200 | .ui-icon-carat-2-e-w { background-position: -144px 0; } 201 | .ui-icon-triangle-1-n { background-position: 0 -16px; } 202 | .ui-icon-triangle-1-ne { background-position: -16px -16px; } 203 | .ui-icon-triangle-1-e { background-position: -32px -16px; } 204 | .ui-icon-triangle-1-se { background-position: -48px -16px; } 205 | .ui-icon-triangle-1-s { background-position: -64px -16px; } 206 | .ui-icon-triangle-1-sw { background-position: -80px -16px; } 207 | .ui-icon-triangle-1-w { background-position: -96px -16px; } 208 | .ui-icon-triangle-1-nw { background-position: -112px -16px; } 209 | .ui-icon-triangle-2-n-s { background-position: -128px -16px; } 210 | .ui-icon-triangle-2-e-w { background-position: -144px -16px; } 211 | .ui-icon-arrow-1-n { background-position: 0 -32px; } 212 | .ui-icon-arrow-1-ne { background-position: -16px -32px; } 213 | .ui-icon-arrow-1-e { background-position: -32px -32px; } 214 | .ui-icon-arrow-1-se { background-position: -48px -32px; } 215 | .ui-icon-arrow-1-s { background-position: -64px -32px; } 216 | .ui-icon-arrow-1-sw { background-position: -80px -32px; } 217 | .ui-icon-arrow-1-w { background-position: -96px -32px; } 218 | .ui-icon-arrow-1-nw { background-position: -112px -32px; } 219 | .ui-icon-arrow-2-n-s { background-position: -128px -32px; } 220 | .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } 221 | .ui-icon-arrow-2-e-w { background-position: -160px -32px; } 222 | .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } 223 | .ui-icon-arrowstop-1-n { background-position: -192px -32px; } 224 | .ui-icon-arrowstop-1-e { background-position: -208px -32px; } 225 | .ui-icon-arrowstop-1-s { background-position: -224px -32px; } 226 | .ui-icon-arrowstop-1-w { background-position: -240px -32px; } 227 | .ui-icon-arrowthick-1-n { background-position: 0 -48px; } 228 | .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } 229 | .ui-icon-arrowthick-1-e { background-position: -32px -48px; } 230 | .ui-icon-arrowthick-1-se { background-position: -48px -48px; } 231 | .ui-icon-arrowthick-1-s { background-position: -64px -48px; } 232 | .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } 233 | .ui-icon-arrowthick-1-w { background-position: -96px -48px; } 234 | .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } 235 | .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } 236 | .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } 237 | .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } 238 | .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } 239 | .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } 240 | .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } 241 | .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } 242 | .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } 243 | .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } 244 | .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } 245 | .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } 246 | .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } 247 | .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } 248 | .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } 249 | .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } 250 | .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } 251 | .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } 252 | .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } 253 | .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } 254 | .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } 255 | .ui-icon-arrow-4 { background-position: 0 -80px; } 256 | .ui-icon-arrow-4-diag { background-position: -16px -80px; } 257 | .ui-icon-extlink { background-position: -32px -80px; } 258 | .ui-icon-newwin { background-position: -48px -80px; } 259 | .ui-icon-refresh { background-position: -64px -80px; } 260 | .ui-icon-shuffle { background-position: -80px -80px; } 261 | .ui-icon-transfer-e-w { background-position: -96px -80px; } 262 | .ui-icon-transferthick-e-w { background-position: -112px -80px; } 263 | .ui-icon-folder-collapsed { background-position: 0 -96px; } 264 | .ui-icon-folder-open { background-position: -16px -96px; } 265 | .ui-icon-document { background-position: -32px -96px; } 266 | .ui-icon-document-b { background-position: -48px -96px; } 267 | .ui-icon-note { background-position: -64px -96px; } 268 | .ui-icon-mail-closed { background-position: -80px -96px; } 269 | .ui-icon-mail-open { background-position: -96px -96px; } 270 | .ui-icon-suitcase { background-position: -112px -96px; } 271 | .ui-icon-comment { background-position: -128px -96px; } 272 | .ui-icon-person { background-position: -144px -96px; } 273 | .ui-icon-print { background-position: -160px -96px; } 274 | .ui-icon-trash { background-position: -176px -96px; } 275 | .ui-icon-locked { background-position: -192px -96px; } 276 | .ui-icon-unlocked { background-position: -208px -96px; } 277 | .ui-icon-bookmark { background-position: -224px -96px; } 278 | .ui-icon-tag { background-position: -240px -96px; } 279 | .ui-icon-home { background-position: 0 -112px; } 280 | .ui-icon-flag { background-position: -16px -112px; } 281 | .ui-icon-calendar { background-position: -32px -112px; } 282 | .ui-icon-cart { background-position: -48px -112px; } 283 | .ui-icon-pencil { background-position: -64px -112px; } 284 | .ui-icon-clock { background-position: -80px -112px; } 285 | .ui-icon-disk { background-position: -96px -112px; } 286 | .ui-icon-calculator { background-position: -112px -112px; } 287 | .ui-icon-zoomin { background-position: -128px -112px; } 288 | .ui-icon-zoomout { background-position: -144px -112px; } 289 | .ui-icon-search { background-position: -160px -112px; } 290 | .ui-icon-wrench { background-position: -176px -112px; } 291 | .ui-icon-gear { background-position: -192px -112px; } 292 | .ui-icon-heart { background-position: -208px -112px; } 293 | .ui-icon-star { background-position: -224px -112px; } 294 | .ui-icon-link { background-position: -240px -112px; } 295 | .ui-icon-cancel { background-position: 0 -128px; } 296 | .ui-icon-plus { background-position: -16px -128px; } 297 | .ui-icon-plusthick { background-position: -32px -128px; } 298 | .ui-icon-minus { background-position: -48px -128px; } 299 | .ui-icon-minusthick { background-position: -64px -128px; } 300 | .ui-icon-close { background-position: -80px -128px; } 301 | .ui-icon-closethick { background-position: -96px -128px; } 302 | .ui-icon-key { background-position: -112px -128px; } 303 | .ui-icon-lightbulb { background-position: -128px -128px; } 304 | .ui-icon-scissors { background-position: -144px -128px; } 305 | .ui-icon-clipboard { background-position: -160px -128px; } 306 | .ui-icon-copy { background-position: -176px -128px; } 307 | .ui-icon-contact { background-position: -192px -128px; } 308 | .ui-icon-image { background-position: -208px -128px; } 309 | .ui-icon-video { background-position: -224px -128px; } 310 | .ui-icon-script { background-position: -240px -128px; } 311 | .ui-icon-alert { background-position: 0 -144px; } 312 | .ui-icon-info { background-position: -16px -144px; } 313 | .ui-icon-notice { background-position: -32px -144px; } 314 | .ui-icon-help { background-position: -48px -144px; } 315 | .ui-icon-check { background-position: -64px -144px; } 316 | .ui-icon-bullet { background-position: -80px -144px; } 317 | .ui-icon-radio-on { background-position: -96px -144px; } 318 | .ui-icon-radio-off { background-position: -112px -144px; } 319 | .ui-icon-pin-w { background-position: -128px -144px; } 320 | .ui-icon-pin-s { background-position: -144px -144px; } 321 | .ui-icon-play { background-position: 0 -160px; } 322 | .ui-icon-pause { background-position: -16px -160px; } 323 | .ui-icon-seek-next { background-position: -32px -160px; } 324 | .ui-icon-seek-prev { background-position: -48px -160px; } 325 | .ui-icon-seek-end { background-position: -64px -160px; } 326 | .ui-icon-seek-start { background-position: -80px -160px; } 327 | /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ 328 | .ui-icon-seek-first { background-position: -80px -160px; } 329 | .ui-icon-stop { background-position: -96px -160px; } 330 | .ui-icon-eject { background-position: -112px -160px; } 331 | .ui-icon-volume-off { background-position: -128px -160px; } 332 | .ui-icon-volume-on { background-position: -144px -160px; } 333 | .ui-icon-power { background-position: 0 -176px; } 334 | .ui-icon-signal-diag { background-position: -16px -176px; } 335 | .ui-icon-signal { background-position: -32px -176px; } 336 | .ui-icon-battery-0 { background-position: -48px -176px; } 337 | .ui-icon-battery-1 { background-position: -64px -176px; } 338 | .ui-icon-battery-2 { background-position: -80px -176px; } 339 | .ui-icon-battery-3 { background-position: -96px -176px; } 340 | .ui-icon-circle-plus { background-position: 0 -192px; } 341 | .ui-icon-circle-minus { background-position: -16px -192px; } 342 | .ui-icon-circle-close { background-position: -32px -192px; } 343 | .ui-icon-circle-triangle-e { background-position: -48px -192px; } 344 | .ui-icon-circle-triangle-s { background-position: -64px -192px; } 345 | .ui-icon-circle-triangle-w { background-position: -80px -192px; } 346 | .ui-icon-circle-triangle-n { background-position: -96px -192px; } 347 | .ui-icon-circle-arrow-e { background-position: -112px -192px; } 348 | .ui-icon-circle-arrow-s { background-position: -128px -192px; } 349 | .ui-icon-circle-arrow-w { background-position: -144px -192px; } 350 | .ui-icon-circle-arrow-n { background-position: -160px -192px; } 351 | .ui-icon-circle-zoomin { background-position: -176px -192px; } 352 | .ui-icon-circle-zoomout { background-position: -192px -192px; } 353 | .ui-icon-circle-check { background-position: -208px -192px; } 354 | .ui-icon-circlesmall-plus { background-position: 0 -208px; } 355 | .ui-icon-circlesmall-minus { background-position: -16px -208px; } 356 | .ui-icon-circlesmall-close { background-position: -32px -208px; } 357 | .ui-icon-squaresmall-plus { background-position: -48px -208px; } 358 | .ui-icon-squaresmall-minus { background-position: -64px -208px; } 359 | .ui-icon-squaresmall-close { background-position: -80px -208px; } 360 | .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } 361 | .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } 362 | .ui-icon-grip-solid-vertical { background-position: -32px -224px; } 363 | .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } 364 | .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } 365 | .ui-icon-grip-diagonal-se { background-position: -80px -224px; } 366 | 367 | 368 | /* Misc visuals 369 | ----------------------------------*/ 370 | 371 | /* Corner radius */ 372 | .ui-corner-all, 373 | .ui-corner-top, 374 | .ui-corner-left, 375 | .ui-corner-tl { 376 | border-top-left-radius: 4px; 377 | } 378 | .ui-corner-all, 379 | .ui-corner-top, 380 | .ui-corner-right, 381 | .ui-corner-tr { 382 | border-top-right-radius: 4px; 383 | } 384 | .ui-corner-all, 385 | .ui-corner-bottom, 386 | .ui-corner-left, 387 | .ui-corner-bl { 388 | border-bottom-left-radius: 4px; 389 | } 390 | .ui-corner-all, 391 | .ui-corner-bottom, 392 | .ui-corner-right, 393 | .ui-corner-br { 394 | border-bottom-right-radius: 4px; 395 | } 396 | 397 | /* Overlays */ 398 | .ui-widget-overlay { 399 | background: #aaaaaa; 400 | opacity: .3; 401 | filter: Alpha(Opacity=30); /* support: IE8 */ 402 | } 403 | .ui-widget-shadow { 404 | margin: -8px 0 0 -8px; 405 | padding: 8px; 406 | background: #aaaaaa; 407 | opacity: .3; 408 | filter: Alpha(Opacity=30); /* support: IE8 */ 409 | border-radius: 8px; 410 | } 411 | -------------------------------------------------------------------------------- /jquery-ui.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.11.4 - 2016-02-01 2 | * http://jqueryui.com 3 | * Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, button.css, dialog.css, menu.css, selectmenu.css, theme.css 4 | * To view and modify this theme, visit http://jqueryui.com/themeroller/ 5 | * Copyright jQuery Foundation and other contributors; Licensed MIT */ 6 | 7 | /* Layout helpers 8 | ----------------------------------*/ 9 | .ui-helper-hidden { 10 | display: none; 11 | } 12 | .ui-helper-hidden-accessible { 13 | border: 0; 14 | clip: rect(0 0 0 0); 15 | height: 1px; 16 | margin: -1px; 17 | overflow: hidden; 18 | padding: 0; 19 | position: absolute; 20 | width: 1px; 21 | } 22 | .ui-helper-reset { 23 | margin: 0; 24 | padding: 0; 25 | border: 0; 26 | outline: 0; 27 | line-height: 1.3; 28 | text-decoration: none; 29 | font-size: 100%; 30 | list-style: none; 31 | } 32 | .ui-helper-clearfix:before, 33 | .ui-helper-clearfix:after { 34 | content: ""; 35 | display: table; 36 | border-collapse: collapse; 37 | } 38 | .ui-helper-clearfix:after { 39 | clear: both; 40 | } 41 | .ui-helper-clearfix { 42 | min-height: 0; /* support: IE7 */ 43 | } 44 | .ui-helper-zfix { 45 | width: 100%; 46 | height: 100%; 47 | top: 0; 48 | left: 0; 49 | position: absolute; 50 | opacity: 0; 51 | filter:Alpha(Opacity=0); /* support: IE8 */ 52 | } 53 | 54 | .ui-front { 55 | z-index: 100; 56 | } 57 | 58 | 59 | /* Interaction Cues 60 | ----------------------------------*/ 61 | .ui-state-disabled { 62 | cursor: default !important; 63 | } 64 | 65 | 66 | /* Icons 67 | ----------------------------------*/ 68 | 69 | /* states and images */ 70 | .ui-icon { 71 | display: block; 72 | text-indent: -99999px; 73 | overflow: hidden; 74 | background-repeat: no-repeat; 75 | } 76 | 77 | 78 | /* Misc visuals 79 | ----------------------------------*/ 80 | 81 | /* Overlays */ 82 | .ui-widget-overlay { 83 | position: fixed; 84 | top: 0; 85 | left: 0; 86 | width: 100%; 87 | height: 100%; 88 | } 89 | .ui-draggable-handle { 90 | -ms-touch-action: none; 91 | touch-action: none; 92 | } 93 | .ui-resizable { 94 | position: relative; 95 | } 96 | .ui-resizable-handle { 97 | position: absolute; 98 | font-size: 0.1px; 99 | display: block; 100 | -ms-touch-action: none; 101 | touch-action: none; 102 | } 103 | .ui-resizable-disabled .ui-resizable-handle, 104 | .ui-resizable-autohide .ui-resizable-handle { 105 | display: none; 106 | } 107 | .ui-resizable-n { 108 | cursor: n-resize; 109 | height: 7px; 110 | width: 100%; 111 | top: -5px; 112 | left: 0; 113 | } 114 | .ui-resizable-s { 115 | cursor: s-resize; 116 | height: 7px; 117 | width: 100%; 118 | bottom: -5px; 119 | left: 0; 120 | } 121 | .ui-resizable-e { 122 | cursor: e-resize; 123 | width: 7px; 124 | right: -5px; 125 | top: 0; 126 | height: 100%; 127 | } 128 | .ui-resizable-w { 129 | cursor: w-resize; 130 | width: 7px; 131 | left: -5px; 132 | top: 0; 133 | height: 100%; 134 | } 135 | .ui-resizable-se { 136 | cursor: se-resize; 137 | width: 12px; 138 | height: 12px; 139 | right: 1px; 140 | bottom: 1px; 141 | } 142 | .ui-resizable-sw { 143 | cursor: sw-resize; 144 | width: 9px; 145 | height: 9px; 146 | left: -5px; 147 | bottom: -5px; 148 | } 149 | .ui-resizable-nw { 150 | cursor: nw-resize; 151 | width: 9px; 152 | height: 9px; 153 | left: -5px; 154 | top: -5px; 155 | } 156 | .ui-resizable-ne { 157 | cursor: ne-resize; 158 | width: 9px; 159 | height: 9px; 160 | right: -5px; 161 | top: -5px; 162 | } 163 | .ui-selectable { 164 | -ms-touch-action: none; 165 | touch-action: none; 166 | } 167 | .ui-selectable-helper { 168 | position: absolute; 169 | z-index: 100; 170 | border: 1px dotted black; 171 | } 172 | .ui-sortable-handle { 173 | -ms-touch-action: none; 174 | touch-action: none; 175 | } 176 | .ui-button { 177 | display: inline-block; 178 | position: relative; 179 | padding: 0; 180 | line-height: normal; 181 | margin-right: .1em; 182 | cursor: pointer; 183 | vertical-align: middle; 184 | text-align: center; 185 | overflow: visible; /* removes extra width in IE */ 186 | } 187 | .ui-button, 188 | .ui-button:link, 189 | .ui-button:visited, 190 | .ui-button:hover, 191 | .ui-button:active { 192 | text-decoration: none; 193 | } 194 | /* to make room for the icon, a width needs to be set here */ 195 | .ui-button-icon-only { 196 | width: 2.2em; 197 | } 198 | /* button elements seem to need a little more width */ 199 | button.ui-button-icon-only { 200 | width: 2.4em; 201 | } 202 | .ui-button-icons-only { 203 | width: 3.4em; 204 | } 205 | button.ui-button-icons-only { 206 | width: 3.7em; 207 | } 208 | 209 | /* button text element */ 210 | .ui-button .ui-button-text { 211 | display: block; 212 | line-height: normal; 213 | } 214 | .ui-button-text-only .ui-button-text { 215 | padding: .4em 1em; 216 | } 217 | .ui-button-icon-only .ui-button-text, 218 | .ui-button-icons-only .ui-button-text { 219 | padding: .4em; 220 | text-indent: -9999999px; 221 | } 222 | .ui-button-text-icon-primary .ui-button-text, 223 | .ui-button-text-icons .ui-button-text { 224 | padding: .4em 1em .4em 2.1em; 225 | } 226 | .ui-button-text-icon-secondary .ui-button-text, 227 | .ui-button-text-icons .ui-button-text { 228 | padding: .4em 2.1em .4em 1em; 229 | } 230 | .ui-button-text-icons .ui-button-text { 231 | padding-left: 2.1em; 232 | padding-right: 2.1em; 233 | } 234 | /* no icon support for input elements, provide padding by default */ 235 | input.ui-button { 236 | padding: .4em 1em; 237 | } 238 | 239 | /* button icon element(s) */ 240 | .ui-button-icon-only .ui-icon, 241 | .ui-button-text-icon-primary .ui-icon, 242 | .ui-button-text-icon-secondary .ui-icon, 243 | .ui-button-text-icons .ui-icon, 244 | .ui-button-icons-only .ui-icon { 245 | position: absolute; 246 | top: 50%; 247 | margin-top: -8px; 248 | } 249 | .ui-button-icon-only .ui-icon { 250 | left: 50%; 251 | margin-left: -8px; 252 | } 253 | .ui-button-text-icon-primary .ui-button-icon-primary, 254 | .ui-button-text-icons .ui-button-icon-primary, 255 | .ui-button-icons-only .ui-button-icon-primary { 256 | left: .5em; 257 | } 258 | .ui-button-text-icon-secondary .ui-button-icon-secondary, 259 | .ui-button-text-icons .ui-button-icon-secondary, 260 | .ui-button-icons-only .ui-button-icon-secondary { 261 | right: .5em; 262 | } 263 | 264 | /* button sets */ 265 | .ui-buttonset { 266 | margin-right: 7px; 267 | } 268 | .ui-buttonset .ui-button { 269 | margin-left: 0; 270 | margin-right: -.3em; 271 | } 272 | 273 | /* workarounds */ 274 | /* reset extra padding in Firefox, see h5bp.com/l */ 275 | input.ui-button::-moz-focus-inner, 276 | button.ui-button::-moz-focus-inner { 277 | border: 0; 278 | padding: 0; 279 | } 280 | .ui-dialog { 281 | overflow: hidden; 282 | position: absolute; 283 | top: 0; 284 | left: 0; 285 | padding: .2em; 286 | outline: 0; 287 | } 288 | .ui-dialog .ui-dialog-titlebar { 289 | padding: .4em 1em; 290 | position: relative; 291 | } 292 | .ui-dialog .ui-dialog-title { 293 | float: left; 294 | margin: .1em 0; 295 | white-space: nowrap; 296 | width: 90%; 297 | overflow: hidden; 298 | text-overflow: ellipsis; 299 | } 300 | .ui-dialog .ui-dialog-titlebar-close { 301 | position: absolute; 302 | right: .3em; 303 | top: 50%; 304 | width: 20px; 305 | margin: -10px 0 0 0; 306 | padding: 1px; 307 | height: 20px; 308 | } 309 | .ui-dialog .ui-dialog-content { 310 | position: relative; 311 | border: 0; 312 | padding: .5em 1em; 313 | background: none; 314 | overflow: auto; 315 | } 316 | .ui-dialog .ui-dialog-buttonpane { 317 | text-align: left; 318 | border-width: 1px 0 0 0; 319 | background-image: none; 320 | margin-top: .5em; 321 | padding: .3em 1em .5em .4em; 322 | } 323 | .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { 324 | float: right; 325 | } 326 | .ui-dialog .ui-dialog-buttonpane button { 327 | margin: .5em .4em .5em 0; 328 | cursor: pointer; 329 | } 330 | .ui-dialog .ui-resizable-se { 331 | width: 12px; 332 | height: 12px; 333 | right: -5px; 334 | bottom: -5px; 335 | background-position: 16px 16px; 336 | } 337 | .ui-draggable .ui-dialog-titlebar { 338 | cursor: move; 339 | } 340 | .ui-menu { 341 | list-style: none; 342 | padding: 0; 343 | margin: 0; 344 | display: block; 345 | outline: none; 346 | } 347 | .ui-menu .ui-menu { 348 | position: absolute; 349 | } 350 | .ui-menu .ui-menu-item { 351 | position: relative; 352 | margin: 0; 353 | padding: 3px 1em 3px .4em; 354 | cursor: pointer; 355 | min-height: 0; /* support: IE7 */ 356 | /* support: IE10, see #8844 */ 357 | list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); 358 | } 359 | .ui-menu .ui-menu-divider { 360 | margin: 5px 0; 361 | height: 0; 362 | font-size: 0; 363 | line-height: 0; 364 | border-width: 1px 0 0 0; 365 | } 366 | .ui-menu .ui-state-focus, 367 | .ui-menu .ui-state-active { 368 | margin: -1px; 369 | } 370 | 371 | /* icon support */ 372 | .ui-menu-icons { 373 | position: relative; 374 | } 375 | .ui-menu-icons .ui-menu-item { 376 | padding-left: 2em; 377 | } 378 | 379 | /* left-aligned */ 380 | .ui-menu .ui-icon { 381 | position: absolute; 382 | top: 0; 383 | bottom: 0; 384 | left: .2em; 385 | margin: auto 0; 386 | } 387 | 388 | /* right-aligned */ 389 | .ui-menu .ui-menu-icon { 390 | left: auto; 391 | right: 0; 392 | } 393 | .ui-selectmenu-menu { 394 | padding: 0; 395 | margin: 0; 396 | position: absolute; 397 | top: 0; 398 | left: 0; 399 | display: none; 400 | } 401 | .ui-selectmenu-menu .ui-menu { 402 | overflow: auto; 403 | /* Support: IE7 */ 404 | overflow-x: hidden; 405 | padding-bottom: 1px; 406 | } 407 | .ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { 408 | font-size: 1em; 409 | font-weight: bold; 410 | line-height: 1.5; 411 | padding: 2px 0.4em; 412 | margin: 0.5em 0 0 0; 413 | height: auto; 414 | border: 0; 415 | } 416 | .ui-selectmenu-open { 417 | display: block; 418 | } 419 | .ui-selectmenu-button { 420 | display: inline-block; 421 | overflow: hidden; 422 | position: relative; 423 | text-decoration: none; 424 | cursor: pointer; 425 | } 426 | .ui-selectmenu-button span.ui-icon { 427 | right: 0.5em; 428 | left: auto; 429 | margin-top: -8px; 430 | position: absolute; 431 | top: 50%; 432 | } 433 | .ui-selectmenu-button span.ui-selectmenu-text { 434 | text-align: left; 435 | padding: 0.4em 2.1em 0.4em 1em; 436 | display: block; 437 | line-height: 1.4; 438 | overflow: hidden; 439 | text-overflow: ellipsis; 440 | white-space: nowrap; 441 | } 442 | 443 | /* Component containers 444 | ----------------------------------*/ 445 | .ui-widget { 446 | font-family: Verdana,Arial,sans-serif; 447 | font-size: 1.1em; 448 | } 449 | .ui-widget .ui-widget { 450 | font-size: 1em; 451 | } 452 | .ui-widget input, 453 | .ui-widget select, 454 | .ui-widget textarea, 455 | .ui-widget button { 456 | font-family: Verdana,Arial,sans-serif; 457 | font-size: 1em; 458 | } 459 | .ui-widget-content { 460 | border: 1px solid #aaaaaa; 461 | background: #ffffff; 462 | color: #222222; 463 | } 464 | .ui-widget-content a { 465 | color: #222222; 466 | } 467 | .ui-widget-header { 468 | border: 1px solid #aaaaaa; 469 | background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; 470 | color: #222222; 471 | font-weight: bold; 472 | } 473 | .ui-widget-header a { 474 | color: #222222; 475 | } 476 | 477 | /* Interaction states 478 | ----------------------------------*/ 479 | .ui-state-default, 480 | .ui-widget-content .ui-state-default, 481 | .ui-widget-header .ui-state-default { 482 | border: 1px solid #d3d3d3; 483 | background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; 484 | font-weight: normal; 485 | color: #555555; 486 | } 487 | .ui-state-default a, 488 | .ui-state-default a:link, 489 | .ui-state-default a:visited { 490 | color: #555555; 491 | text-decoration: none; 492 | } 493 | .ui-state-hover, 494 | .ui-widget-content .ui-state-hover, 495 | .ui-widget-header .ui-state-hover, 496 | .ui-state-focus, 497 | .ui-widget-content .ui-state-focus, 498 | .ui-widget-header .ui-state-focus { 499 | border: 1px solid #999999; 500 | background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; 501 | font-weight: normal; 502 | color: #212121; 503 | } 504 | .ui-state-hover a, 505 | .ui-state-hover a:hover, 506 | .ui-state-hover a:link, 507 | .ui-state-hover a:visited, 508 | .ui-state-focus a, 509 | .ui-state-focus a:hover, 510 | .ui-state-focus a:link, 511 | .ui-state-focus a:visited { 512 | color: #212121; 513 | text-decoration: none; 514 | } 515 | .ui-state-active, 516 | .ui-widget-content .ui-state-active, 517 | .ui-widget-header .ui-state-active { 518 | border: 1px solid #aaaaaa; 519 | background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; 520 | font-weight: normal; 521 | color: #212121; 522 | } 523 | .ui-state-active a, 524 | .ui-state-active a:link, 525 | .ui-state-active a:visited { 526 | color: #212121; 527 | text-decoration: none; 528 | } 529 | 530 | /* Interaction Cues 531 | ----------------------------------*/ 532 | .ui-state-highlight, 533 | .ui-widget-content .ui-state-highlight, 534 | .ui-widget-header .ui-state-highlight { 535 | border: 1px solid #fcefa1; 536 | background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; 537 | color: #363636; 538 | } 539 | .ui-state-highlight a, 540 | .ui-widget-content .ui-state-highlight a, 541 | .ui-widget-header .ui-state-highlight a { 542 | color: #363636; 543 | } 544 | .ui-state-error, 545 | .ui-widget-content .ui-state-error, 546 | .ui-widget-header .ui-state-error { 547 | border: 1px solid #cd0a0a; 548 | background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; 549 | color: #cd0a0a; 550 | } 551 | .ui-state-error a, 552 | .ui-widget-content .ui-state-error a, 553 | .ui-widget-header .ui-state-error a { 554 | color: #cd0a0a; 555 | } 556 | .ui-state-error-text, 557 | .ui-widget-content .ui-state-error-text, 558 | .ui-widget-header .ui-state-error-text { 559 | color: #cd0a0a; 560 | } 561 | .ui-priority-primary, 562 | .ui-widget-content .ui-priority-primary, 563 | .ui-widget-header .ui-priority-primary { 564 | font-weight: bold; 565 | } 566 | .ui-priority-secondary, 567 | .ui-widget-content .ui-priority-secondary, 568 | .ui-widget-header .ui-priority-secondary { 569 | opacity: .7; 570 | filter:Alpha(Opacity=70); /* support: IE8 */ 571 | font-weight: normal; 572 | } 573 | .ui-state-disabled, 574 | .ui-widget-content .ui-state-disabled, 575 | .ui-widget-header .ui-state-disabled { 576 | opacity: .35; 577 | filter:Alpha(Opacity=35); /* support: IE8 */ 578 | background-image: none; 579 | } 580 | .ui-state-disabled .ui-icon { 581 | filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ 582 | } 583 | 584 | /* Icons 585 | ----------------------------------*/ 586 | 587 | /* states and images */ 588 | .ui-icon { 589 | width: 16px; 590 | height: 16px; 591 | } 592 | .ui-icon, 593 | .ui-widget-content .ui-icon { 594 | background-image: url("images/ui-icons_222222_256x240.png"); 595 | } 596 | .ui-widget-header .ui-icon { 597 | background-image: url("images/ui-icons_222222_256x240.png"); 598 | } 599 | .ui-state-default .ui-icon { 600 | background-image: url("images/ui-icons_888888_256x240.png"); 601 | } 602 | .ui-state-hover .ui-icon, 603 | .ui-state-focus .ui-icon { 604 | background-image: url("images/ui-icons_454545_256x240.png"); 605 | } 606 | .ui-state-active .ui-icon { 607 | background-image: url("images/ui-icons_454545_256x240.png"); 608 | } 609 | .ui-state-highlight .ui-icon { 610 | background-image: url("images/ui-icons_2e83ff_256x240.png"); 611 | } 612 | .ui-state-error .ui-icon, 613 | .ui-state-error-text .ui-icon { 614 | background-image: url("images/ui-icons_cd0a0a_256x240.png"); 615 | } 616 | 617 | /* positioning */ 618 | .ui-icon-blank { background-position: 16px 16px; } 619 | .ui-icon-carat-1-n { background-position: 0 0; } 620 | .ui-icon-carat-1-ne { background-position: -16px 0; } 621 | .ui-icon-carat-1-e { background-position: -32px 0; } 622 | .ui-icon-carat-1-se { background-position: -48px 0; } 623 | .ui-icon-carat-1-s { background-position: -64px 0; } 624 | .ui-icon-carat-1-sw { background-position: -80px 0; } 625 | .ui-icon-carat-1-w { background-position: -96px 0; } 626 | .ui-icon-carat-1-nw { background-position: -112px 0; } 627 | .ui-icon-carat-2-n-s { background-position: -128px 0; } 628 | .ui-icon-carat-2-e-w { background-position: -144px 0; } 629 | .ui-icon-triangle-1-n { background-position: 0 -16px; } 630 | .ui-icon-triangle-1-ne { background-position: -16px -16px; } 631 | .ui-icon-triangle-1-e { background-position: -32px -16px; } 632 | .ui-icon-triangle-1-se { background-position: -48px -16px; } 633 | .ui-icon-triangle-1-s { background-position: -64px -16px; } 634 | .ui-icon-triangle-1-sw { background-position: -80px -16px; } 635 | .ui-icon-triangle-1-w { background-position: -96px -16px; } 636 | .ui-icon-triangle-1-nw { background-position: -112px -16px; } 637 | .ui-icon-triangle-2-n-s { background-position: -128px -16px; } 638 | .ui-icon-triangle-2-e-w { background-position: -144px -16px; } 639 | .ui-icon-arrow-1-n { background-position: 0 -32px; } 640 | .ui-icon-arrow-1-ne { background-position: -16px -32px; } 641 | .ui-icon-arrow-1-e { background-position: -32px -32px; } 642 | .ui-icon-arrow-1-se { background-position: -48px -32px; } 643 | .ui-icon-arrow-1-s { background-position: -64px -32px; } 644 | .ui-icon-arrow-1-sw { background-position: -80px -32px; } 645 | .ui-icon-arrow-1-w { background-position: -96px -32px; } 646 | .ui-icon-arrow-1-nw { background-position: -112px -32px; } 647 | .ui-icon-arrow-2-n-s { background-position: -128px -32px; } 648 | .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } 649 | .ui-icon-arrow-2-e-w { background-position: -160px -32px; } 650 | .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } 651 | .ui-icon-arrowstop-1-n { background-position: -192px -32px; } 652 | .ui-icon-arrowstop-1-e { background-position: -208px -32px; } 653 | .ui-icon-arrowstop-1-s { background-position: -224px -32px; } 654 | .ui-icon-arrowstop-1-w { background-position: -240px -32px; } 655 | .ui-icon-arrowthick-1-n { background-position: 0 -48px; } 656 | .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } 657 | .ui-icon-arrowthick-1-e { background-position: -32px -48px; } 658 | .ui-icon-arrowthick-1-se { background-position: -48px -48px; } 659 | .ui-icon-arrowthick-1-s { background-position: -64px -48px; } 660 | .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } 661 | .ui-icon-arrowthick-1-w { background-position: -96px -48px; } 662 | .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } 663 | .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } 664 | .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } 665 | .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } 666 | .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } 667 | .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } 668 | .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } 669 | .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } 670 | .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } 671 | .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } 672 | .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } 673 | .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } 674 | .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } 675 | .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } 676 | .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } 677 | .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } 678 | .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } 679 | .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } 680 | .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } 681 | .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } 682 | .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } 683 | .ui-icon-arrow-4 { background-position: 0 -80px; } 684 | .ui-icon-arrow-4-diag { background-position: -16px -80px; } 685 | .ui-icon-extlink { background-position: -32px -80px; } 686 | .ui-icon-newwin { background-position: -48px -80px; } 687 | .ui-icon-refresh { background-position: -64px -80px; } 688 | .ui-icon-shuffle { background-position: -80px -80px; } 689 | .ui-icon-transfer-e-w { background-position: -96px -80px; } 690 | .ui-icon-transferthick-e-w { background-position: -112px -80px; } 691 | .ui-icon-folder-collapsed { background-position: 0 -96px; } 692 | .ui-icon-folder-open { background-position: -16px -96px; } 693 | .ui-icon-document { background-position: -32px -96px; } 694 | .ui-icon-document-b { background-position: -48px -96px; } 695 | .ui-icon-note { background-position: -64px -96px; } 696 | .ui-icon-mail-closed { background-position: -80px -96px; } 697 | .ui-icon-mail-open { background-position: -96px -96px; } 698 | .ui-icon-suitcase { background-position: -112px -96px; } 699 | .ui-icon-comment { background-position: -128px -96px; } 700 | .ui-icon-person { background-position: -144px -96px; } 701 | .ui-icon-print { background-position: -160px -96px; } 702 | .ui-icon-trash { background-position: -176px -96px; } 703 | .ui-icon-locked { background-position: -192px -96px; } 704 | .ui-icon-unlocked { background-position: -208px -96px; } 705 | .ui-icon-bookmark { background-position: -224px -96px; } 706 | .ui-icon-tag { background-position: -240px -96px; } 707 | .ui-icon-home { background-position: 0 -112px; } 708 | .ui-icon-flag { background-position: -16px -112px; } 709 | .ui-icon-calendar { background-position: -32px -112px; } 710 | .ui-icon-cart { background-position: -48px -112px; } 711 | .ui-icon-pencil { background-position: -64px -112px; } 712 | .ui-icon-clock { background-position: -80px -112px; } 713 | .ui-icon-disk { background-position: -96px -112px; } 714 | .ui-icon-calculator { background-position: -112px -112px; } 715 | .ui-icon-zoomin { background-position: -128px -112px; } 716 | .ui-icon-zoomout { background-position: -144px -112px; } 717 | .ui-icon-search { background-position: -160px -112px; } 718 | .ui-icon-wrench { background-position: -176px -112px; } 719 | .ui-icon-gear { background-position: -192px -112px; } 720 | .ui-icon-heart { background-position: -208px -112px; } 721 | .ui-icon-star { background-position: -224px -112px; } 722 | .ui-icon-link { background-position: -240px -112px; } 723 | .ui-icon-cancel { background-position: 0 -128px; } 724 | .ui-icon-plus { background-position: -16px -128px; } 725 | .ui-icon-plusthick { background-position: -32px -128px; } 726 | .ui-icon-minus { background-position: -48px -128px; } 727 | .ui-icon-minusthick { background-position: -64px -128px; } 728 | .ui-icon-close { background-position: -80px -128px; } 729 | .ui-icon-closethick { background-position: -96px -128px; } 730 | .ui-icon-key { background-position: -112px -128px; } 731 | .ui-icon-lightbulb { background-position: -128px -128px; } 732 | .ui-icon-scissors { background-position: -144px -128px; } 733 | .ui-icon-clipboard { background-position: -160px -128px; } 734 | .ui-icon-copy { background-position: -176px -128px; } 735 | .ui-icon-contact { background-position: -192px -128px; } 736 | .ui-icon-image { background-position: -208px -128px; } 737 | .ui-icon-video { background-position: -224px -128px; } 738 | .ui-icon-script { background-position: -240px -128px; } 739 | .ui-icon-alert { background-position: 0 -144px; } 740 | .ui-icon-info { background-position: -16px -144px; } 741 | .ui-icon-notice { background-position: -32px -144px; } 742 | .ui-icon-help { background-position: -48px -144px; } 743 | .ui-icon-check { background-position: -64px -144px; } 744 | .ui-icon-bullet { background-position: -80px -144px; } 745 | .ui-icon-radio-on { background-position: -96px -144px; } 746 | .ui-icon-radio-off { background-position: -112px -144px; } 747 | .ui-icon-pin-w { background-position: -128px -144px; } 748 | .ui-icon-pin-s { background-position: -144px -144px; } 749 | .ui-icon-play { background-position: 0 -160px; } 750 | .ui-icon-pause { background-position: -16px -160px; } 751 | .ui-icon-seek-next { background-position: -32px -160px; } 752 | .ui-icon-seek-prev { background-position: -48px -160px; } 753 | .ui-icon-seek-end { background-position: -64px -160px; } 754 | .ui-icon-seek-start { background-position: -80px -160px; } 755 | /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ 756 | .ui-icon-seek-first { background-position: -80px -160px; } 757 | .ui-icon-stop { background-position: -96px -160px; } 758 | .ui-icon-eject { background-position: -112px -160px; } 759 | .ui-icon-volume-off { background-position: -128px -160px; } 760 | .ui-icon-volume-on { background-position: -144px -160px; } 761 | .ui-icon-power { background-position: 0 -176px; } 762 | .ui-icon-signal-diag { background-position: -16px -176px; } 763 | .ui-icon-signal { background-position: -32px -176px; } 764 | .ui-icon-battery-0 { background-position: -48px -176px; } 765 | .ui-icon-battery-1 { background-position: -64px -176px; } 766 | .ui-icon-battery-2 { background-position: -80px -176px; } 767 | .ui-icon-battery-3 { background-position: -96px -176px; } 768 | .ui-icon-circle-plus { background-position: 0 -192px; } 769 | .ui-icon-circle-minus { background-position: -16px -192px; } 770 | .ui-icon-circle-close { background-position: -32px -192px; } 771 | .ui-icon-circle-triangle-e { background-position: -48px -192px; } 772 | .ui-icon-circle-triangle-s { background-position: -64px -192px; } 773 | .ui-icon-circle-triangle-w { background-position: -80px -192px; } 774 | .ui-icon-circle-triangle-n { background-position: -96px -192px; } 775 | .ui-icon-circle-arrow-e { background-position: -112px -192px; } 776 | .ui-icon-circle-arrow-s { background-position: -128px -192px; } 777 | .ui-icon-circle-arrow-w { background-position: -144px -192px; } 778 | .ui-icon-circle-arrow-n { background-position: -160px -192px; } 779 | .ui-icon-circle-zoomin { background-position: -176px -192px; } 780 | .ui-icon-circle-zoomout { background-position: -192px -192px; } 781 | .ui-icon-circle-check { background-position: -208px -192px; } 782 | .ui-icon-circlesmall-plus { background-position: 0 -208px; } 783 | .ui-icon-circlesmall-minus { background-position: -16px -208px; } 784 | .ui-icon-circlesmall-close { background-position: -32px -208px; } 785 | .ui-icon-squaresmall-plus { background-position: -48px -208px; } 786 | .ui-icon-squaresmall-minus { background-position: -64px -208px; } 787 | .ui-icon-squaresmall-close { background-position: -80px -208px; } 788 | .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } 789 | .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } 790 | .ui-icon-grip-solid-vertical { background-position: -32px -224px; } 791 | .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } 792 | .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } 793 | .ui-icon-grip-diagonal-se { background-position: -80px -224px; } 794 | 795 | 796 | /* Misc visuals 797 | ----------------------------------*/ 798 | 799 | /* Corner radius */ 800 | .ui-corner-all, 801 | .ui-corner-top, 802 | .ui-corner-left, 803 | .ui-corner-tl { 804 | border-top-left-radius: 4px; 805 | } 806 | .ui-corner-all, 807 | .ui-corner-top, 808 | .ui-corner-right, 809 | .ui-corner-tr { 810 | border-top-right-radius: 4px; 811 | } 812 | .ui-corner-all, 813 | .ui-corner-bottom, 814 | .ui-corner-left, 815 | .ui-corner-bl { 816 | border-bottom-left-radius: 4px; 817 | } 818 | .ui-corner-all, 819 | .ui-corner-bottom, 820 | .ui-corner-right, 821 | .ui-corner-br { 822 | border-bottom-right-radius: 4px; 823 | } 824 | 825 | /* Overlays */ 826 | .ui-widget-overlay { 827 | background: #aaaaaa; 828 | opacity: .3; 829 | filter: Alpha(Opacity=30); /* support: IE8 */ 830 | } 831 | .ui-widget-shadow { 832 | margin: -8px 0 0 -8px; 833 | padding: 8px; 834 | background: #aaaaaa; 835 | opacity: .3; 836 | filter: Alpha(Opacity=30); /* support: IE8 */ 837 | border-radius: 8px; 838 | } 839 | -------------------------------------------------------------------------------- /jsrender.js: -------------------------------------------------------------------------------- 1 | /*! JsRender v1.0.0-rc.70 (Beta - Release Candidate): http://jsviews.com/#jsrender */ 2 | /*! **VERSION FOR WEB** (For NODE.JS see http://jsviews.com/download/jsrender-node.js) */ 3 | /* 4 | * Best-of-breed templating in browser or on Node.js. 5 | * Does not require jQuery, or HTML DOM 6 | * Integrates with JsViews (http://jsviews.com/#jsviews) 7 | * 8 | * Copyright 2015, Boris Moore 9 | * Released under the MIT License. 10 | */ 11 | 12 | //jshint -W018, -W041 13 | 14 | (function(factory) { 15 | // global var is the this object, which is window when running in the usual browser environment 16 | var global = (0, eval)('this'), // jshint ignore:line 17 | $ = global.jQuery; 18 | 19 | if (typeof define === "function" && define.amd) { // AMD script loader, e.g. RequireJS 20 | define(factory); 21 | } else if (typeof exports === "object") { // CommonJS e.g. Browserify 22 | module.exports = $ 23 | ? factory($) 24 | : function($) { // If no global jQuery, take optional jQuery passed as parameter: require('jsrender')(jQuery) 25 | if ($ && !$.fn) { 26 | throw "Provide jQuery or null"; 27 | } 28 | return factory($); 29 | }; 30 | } else { // Browser using plain