Changeset 30093 for main/trunk/model-sites-dev/respooled
- Timestamp:
- 2015-08-04T13:50:35+12:00 (8 years ago)
- Location:
- main/trunk/model-sites-dev/respooled/collect/popup-video-respooled
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/model-sites-dev/respooled/collect/popup-video-respooled/etc/collectionConfig.xml
r29937 r30093 338 338 <gsf:script src="{$httpCollection}/js/qtip-popups.js"/> 339 339 340 <gsf:script src="{$httpCollection}/js/jquery.panzoom.js"/> 341 340 342 <gsf:script src="{$httpCollection}/js/key-detection.js"/> 341 343 -
main/trunk/model-sites-dev/respooled/collect/popup-video-respooled/js/audiosynth.view.js
r29980 r30093 292 292 293 293 var fnPlayKeyboard = function(e) { 294 console.log("***### fnPlayKeyboard() e=" + e); //JSON.stringify(e));294 //console.log("***### fnPlayKeyboard() e=" + e); //JSON.stringify(e)); 295 295 296 296 // check to see if any modal dialogs are open … … 307 307 } 308 308 309 console.log("**** testing keyboard event key: '" + e.key + "' keycode = " + e.keyCode);309 //console.log("**** testing keyboard event key: '" + e.key + "' keycode = " + e.keyCode); 310 310 311 311 var $focused = $(':focus'); … … 321 321 if (e.keyCode == 32) { // <space-bar> 322 322 togglePlayPause(); 323 //e.preventDefault();323 e.preventDefault(); 324 324 return false; 325 325 } … … 438 438 } 439 439 440 var drumKeyDown = { "C": false, "V": false, "B": false, "N": false, "M": false }; 441 440 442 var fnRemoveKeyBinding = function(e) { 441 443 442 console.log("**** key up at: " + Date.now())444 //console.log("**** key up at: " + Date.now()) 443 445 // console.log("*** event e = " + JSON.stringify(e)); 444 446 … … 462 464 keysPressed.splice(i, 1); 463 465 } 464 } 465 466 } 466 } 467 468 // See if drum animation should be stopped 469 if (e.keyCode == "C".charCodeAt(0)) { 470 drumKeyDown["C"] = false; 471 $('#drum1').trigger("mouseup"); 472 } 473 else if (e.keyCode == "V".charCodeAt(0)) { 474 drumKeyDown["V"] = false; 475 $('#drum3').trigger("mouseup"); 476 } 477 else if (e.keyCode == "B".charCodeAt(0)) { 478 drumKeyDown["B"] = false; 479 $('#drum2').trigger("mouseup"); 480 } 481 else if (e.keyCode == "N".charCodeAt(0)) { 482 drumKeyDown["N"] = false; 483 $('#drum4').trigger("mouseup"); 484 } 485 else if (e.keyCode == "M".charCodeAt(0)) { 486 drumKeyDown["M"] = false; 487 $('#drum5').trigger("mouseup"); 488 } 489 490 } 467 491 468 492 var fnPlaySong = function(arr) { … … 491 515 console.log("*** drum pressed keyCode: " + e.keyCode); 492 516 if (e.keyCode == "C".charCodeAt(0)) { 517 drumKeyDown["C"] = true; 493 518 $('#drum1').trigger("mousedown"); 494 519 } 495 520 else if (e.keyCode == "V".charCodeAt(0)) { 521 drumKeyDown["V"] = true; 522 $('#drum3').trigger("mousedown"); 523 } 524 else if (e.keyCode == "B".charCodeAt(0)) { 525 drumKeyDown["B"] = true; 496 526 $('#drum2').trigger("mousedown"); 497 527 } 498 else if (e.keyCode == "B".charCodeAt(0)) {499 $('#drum3').trigger("mousedown");500 }501 528 else if (e.keyCode == "N".charCodeAt(0)) { 529 drumKeyDown["N"] = true; 502 530 $('#drum4').trigger("mousedown"); 503 531 } 504 532 else if (e.keyCode == "M".charCodeAt(0)) { 533 drumKeyDown["M"] = true; 505 534 $('#drum5').trigger("mousedown"); 506 535 } -
main/trunk/model-sites-dev/respooled/collect/popup-video-respooled/js/game-on.js
r29980 r30093 40 40 var docStorage = null; 41 41 42 var site_name = gs.xsltParams.site_name; 43 var collection = gs.cgiParams["c"]; 44 42 45 if (hasLocalStorage) { 43 46 … … 55 58 } 56 59 60 console.log("docStorage = " + docStorage); 61 //console.log("docOID = " + docOID); 62 //console.log("*** docOID in docStorage = " + (docOID in docStorage)); 63 console.log("*** palTracks = " + (JSON.stringify(docStorage.palTracks))); 64 console.log("*** popTracks = " + (JSON.stringify(docStorage.popTracks))); 65 66 //console.log("*** palTracks.length = " + (Object.keys(docStorage.palTracks).length)); 67 68 /* 69 70 //if ((docStorage==null) || !(docOID in docStorage) || (docOID in Storage && !(docStorage[docOID].palTracks.length) )) { 71 if ((docStorage==null) || !(docStorage.palTracks) || (docStorage.palTracks && (Object.keys(docStorage.palTracks).length==0))) { 72 73 74 console.log("**** Need to retrieve Respooled data from DL"); 75 76 if (docStorage==null) { 77 docStorage = {palTracks:{}, popTracks:{}}; 78 } 79 gs.functions.getArchivesMetadata(collection, site_name, docOID, 80 "docStorage", 0, function(metadata) { 81 var metaval_encoded_str = metadata.getValue(); 82 var metaval_str = decodeURIComponent(metaval_encoded_str) 83 console.log("***!!! metadata = '" + metaval_str + "'"); 84 if (metaval_str != "") { 85 var metaval = eval("("+metaval_str+")"); 86 console.log("***!!! metadata JSON = " + JSON.stringify(metaval)); 87 docStorage = metaval; 88 } 89 else { 90 docStorage = {palTracks:{}, popTracks:{}}; 91 } 92 goDocStorage = docStorage; 93 } 94 ); 95 96 } 97 */ 98 99 //console.log("*** returning docStorage.palTracks " + JSON.stringify(docStorage.palTracks)); 100 57 101 return docStorage; 102 } 103 104 105 function saveDocStorage(log_prefix) 106 { 107 var docOID = gs.cgiParams.d; 108 var site_name = gs.xsltParams.site_name; 109 var collection = gs.cgiParams["c"]; 110 111 if (hasLocalStorage) { 112 console.log(log_prefix + ": Saving in Browser localStorage track data for '" + docOID + "'"); 113 localStorage.setItem(docOID,JSON.stringify(goDocStorage)); 114 } 115 116 /* 117 var goDocStorageStrEncoded = encodeURIComponent(JSON.stringify(goDocStorage)); 118 119 console.log(log_prefix+": Away to save metadata to DL: " + goDocStorageStrEncoded); 120 121 gs.functions.setArchivesMetadata(collection, site_name, docOID, 122 "docStorage", null, goDocStorageStrEncoded, null, "override", 123 function(response){ 124 console.log("**** saved Respooled metadata to the DL server") 125 console.log("*** response: " + JSON.stringify(response)); 126 } 127 ); 128 */ 58 129 } 59 130 … … 70 141 } 71 142 143 function getActiveOverlayLayers(opt_field) 144 { 145 var field = opt_field || "name"; 146 147 var popActiveLayers = []; 148 $('#popForm input:checked').each(function() { 149 popActiveLayers.push(this[field]); 150 }); 151 152 return popActiveLayers; 153 } 154 155 156 function getPalTracks(docOID) { 157 158 if (!("palTracks" in goDocStorage)) { 159 goDocStorage = {palTracks:{}, popTracks:{}}; 160 } 161 162 return goDocStorage.palTracks; 163 164 } 165 166 function getPopTracks(docOID) { 167 168 if (!("popTracks" in goDocStorage)) { 169 goDocStorage = {palTracks:{}, popTracks:{}}; 170 } 171 172 return goDocStorage.popTracks; 173 174 } 175 72 176 function populatePalList(docStorage) 73 177 { 74 178 // populate pal List 179 var docOID = gs.cgiParams.d; 180 75 181 if (hasLocalStorage) { 76 182 77 var palTracks = docStorage.palTracks || {};183 var palTracks = getPalTracks(docOID); 78 184 79 185 //console.log("*** palTracks = " + JSON.stringify(palTracks)); … … 103 209 104 210 211 function populatePopList(docStorage) 212 { 213 // populate pop List 214 var docOID = gs.cgiParams.d; 215 var hasPopTracks = false; 216 217 if (hasLocalStorage) { 218 219 var popTracks = getPopTracks(docOID); 220 221 //console.log("*** popTracks = " + JSON.stringify(popTracks)); 222 var popListKeys = Object.keys(popTracks).sort(); 223 224 if (popListKeys.length>0) { 225 hasPopTracks = true; 226 } 227 for (var i=0; i<popListKeys.length; i++) { 228 var key = popListKeys[i]; 229 var track = popTracks[key]; 230 var name = key; 231 var cb_name = name.replace(/[ -]/g,""); 232 var cb_value = name; 233 234 var opt_checked = (i==0) ? ' checked="checked"' : ""; 235 236 $('#popList').append('<div id="pop'+cb_name+'"><input type="checkbox" ' 237 + '" name="'+cb_name+'" value="' + cb_value + '"' 238 + opt_checked + '>' 239 + name + '</div>'); 240 } 241 } 242 243 if (!hasPopTracks) { 244 // Put in some fake data for now 245 console.log("**** adding baseline Popup Trivia item"); 246 247 $('#popList').append('<input type="checkbox" id="popPopupTrivia" name="PopupTrivia" value="Popup Trivia" checked="checked"/>Popup Trivia<br />'); 248 249 if (hasLocalStorage) { 250 var popTracks = getPopTracks(docOID); 251 popTracks["Popup Trivia"] = ""; 252 } 253 254 255 //$('#palList').append('<input type="checkbox" id="palDrumbeatHero" name="DrumbeatHero" value="Drum-beat Hero" />Drum-beat Hero<br />'); 256 } 257 } 258 259 105 260 function computeMidiStats(track) 106 261 { … … 168 323 go_top_level_group = new goPaper.group("gameOnPaper",[]); 169 324 325 var docOID = gs.cgiParams.d; 326 170 327 if (hasLocalStorage) { 171 328 … … 173 330 // palTracks[save_name] = [ { name: "my recording 1", baseCTime: 123.3, events: [ .... ] } ] 174 331 175 var palTracks = docStorage.palTracks || {};332 var palTracks = getPalTracks(docOID); 176 333 177 334 var total_duration = mediaPlayer.duration; … … 233 390 var block_events_len = block_events.length; 234 391 for (var ne=0; ne<block_events_len; ne++) { 235 392 236 393 var note_event = block_events[ne]; 237 394 var midi_pitch = note_event.midiPitch; 238 395 239 396 var startPercTime = (base_ctime + note_event.startCurrentTime)/total_duration; 397 240 398 var rx_org = startPercTime * go_paper_x_dim; 241 var ry_org = go_paper_y_dim - ((note_event.midiPitch - min_midi_pitch) * midi_y_dim_spacing) - midi_y_dim_spacing;399 var ry_org; 242 400 243 var rx_dim = (note_event.duration/1000)/total_duration * go_paper_x_dim;244 var ry_dim = midi_y_dim_spacing;401 var rx_dim; 402 var ry_dim; 245 403 404 if (note_event.type && (note_event.type=="drum")) { 405 ry_org = 0; 406 407 rx_dim = 1; 408 ry_dim = go_paper_y_dim; 409 } 410 else { 411 var midi_pitch = note_event.midiPitch; 412 413 //var startPercTime = (base_ctime + note_event.startCurrentTime)/total_duration; 414 //var rx_org = startPercTime * go_paper_x_dim; 415 ry_org = go_paper_y_dim - ((note_event.midiPitch - min_midi_pitch) * midi_y_dim_spacing) - midi_y_dim_spacing; 416 417 rx_dim = (note_event.duration/1000)/total_duration * go_paper_x_dim; 418 ry_dim = midi_y_dim_spacing; 419 } 420 246 421 var rect = goPaper.rect(rx_org,ry_org,rx_dim,ry_dim-0.2); 247 422 //rect.attr({stroke:"none", strokeWidth:0.2, fill:"#2E52A4"}); … … 251 426 go_top_level_group.push(rect); 252 427 253 if (midi_pitch < block_min_midi_pitch) { 254 block_min_midi_pitch = midi_pitch; 428 if (midi_pitch) { 429 if (midi_pitch < block_min_midi_pitch) { 430 block_min_midi_pitch = midi_pitch; 431 } 432 if (midi_pitch > block_max_midi_pitch) { 433 block_max_midi_pitch = midi_pitch; 434 } 255 435 } 256 if (midi_pitch > block_max_midi_pitch) { 257 block_max_midi_pitch = midi_pitch; 258 } 436 259 437 } 260 438 … … 343 521 goPaper = Raphael("gameOnPaper",go_paper_x_dim,go_paper_y_dim); 344 522 goPaper.canvas.style.backgroundColor = '#FFFFFF'; 523 524 if (gs.xsltParams.interface_name == "dlfm") { 525 526 $("#gameOnPaper>svg").panzoom({ 527 $zoomIn: $(".zoom-in"), 528 $zoomOut: $(".zoom-out"), 529 $zoomRange: $(".zoom-range"), 530 $reset: $(".reset") 531 }); 532 533 $("#gameOnPaper>svg").panzoom("option", "contain", true ); 534 535 } 345 536 346 537 … … 348 539 349 540 populatePalList(goDocStorage); 541 populatePopList(goDocStorage); 542 350 543 displayActiveTrackLayers(goDocStorage); 351 544 } 352 545 546 // pal routines 353 547 354 548 function palDeleteConfirmed() … … 359 553 var palActiveLayersValue = getActiveTrackLayers("value"); 360 554 361 var palTracks = goDocStorage.palTracks || {}; 555 var docOID = gs.cgiParams.d; 556 var palTracks = getPalTracks(docOID); 362 557 363 558 for (var i=0; i<palActiveLayersID.length; i++) { … … 368 563 delete palTracks[value]; 369 564 } 565 566 saveDocStorage("palDeleteConfirmed()"); 370 567 } 371 568 … … 387 584 function palSave() 388 585 { 389 var palTracks = goDocStorage.palTracks || {}; 586 var docOID = gs.cgiParams.d; 587 var palTracks = getPalTracks(docOID); 390 588 391 589 var json_edit_str = trackEditor.getSession().getValue(); 392 console.log("**** json edit str= " + json_edit_str);590 console.log("**** palSave() trackEditor.getSession value = " + json_edit_str); 393 591 394 592 var json_edit = eval("("+json_edit_str+")"); … … 398 596 //console.log("*** key = " + key); 399 597 var val = json_edit[key]; 400 console.log("**** Saving under key[ 598 console.log("**** Saving under key[" + key + "]: " + JSON.stringify(val)); 401 599 palTracks[key] = val; 402 600 } 403 601 } 404 602 405 if (hasLocalStorage) { 406 var docOID = gs.cgiParams.d; 407 console.log("Saving in Browser localStorage track data for '" + docOID + "'"); 408 localStorage.setItem(docOID,JSON.stringify(goDocStorage)); 409 } 603 saveDocStorage("palSave()"); 604 410 605 } 411 606 412 607 function palEdit() 413 608 { 414 var palTracks = goDocStorage.palTracks || {}; 609 var docOID = gs.cgiParams.d; 610 var palTracks = getPalTracks(docOID); 415 611 416 612 var palActiveLayers = getActiveTrackLayers("value"); … … 431 627 } 432 628 629 // 630 // Popup Info Overlay routines 631 // 632 633 634 function popCreate() 635 { 636 $('#create-info-popup').dialog('open'); 637 638 return false; // no need to process the event any further 639 } 640 641 function popDeleteConfirmed() 642 { 643 //var popActiveLayers = $('input[type=checkbox]:checked', '#popForm'); 644 645 var popActiveLayersID = getActiveOverlayLayers("name"); 646 var popActiveLayersValue = getActiveOverlayLayers("value"); 647 648 var docOID = gs.cgiParams.d; 649 var popTracks = getPopTracks(docOID); 650 651 for (var i=0; i<popActiveLayersID.length; i++) { 652 var id = popActiveLayersID[i]; 653 $('#pop'+id).remove(); 654 655 var value = popActiveLayersValue[i]; 656 delete popTracks[value]; 657 } 658 659 //console.log("***### pop mode, skipping saving for now"); 660 saveDocStorage("popDeleteConfirmed()"); 661 662 } 663 664 665 function popDelete() 666 { 667 $('#delete-info-popup').dialog('open'); 668 669 return false; // no need to process the event any further 670 } 671 672 function popSave() 673 { 674 var docOID = gs.cgiParams.d; 675 var popTracks = getPopTracks(docOID); 676 677 var text_edit_str = infoEditor.getSession().getValue(); 678 console.log("**** popSave() infoEditor.getSession value = " + text_edit_str); 679 680 var popActiveLayers = getActiveOverlayLayers(); 681 //var json_edit = eval("("+json_edit_str+")"); 682 683 var key = popActiveLayers[0]; 684 //console.log("**** Saving under key[" + key + "]: " + JSON.stringify(val)); 685 console.log("**** Saving under key[" + key + "]: " + text_edit_str); 686 popTracks[key] = text_edit_str; 687 688 /* 689 for (var key in json_edit){ 690 if (json_edit.hasOwnProperty(key)) { 691 //console.log("*** key = " + key); 692 var val = json_edit[key]; 693 console.log("**** Saving under key[" + key + "]: " + JSON.stringify(val)); 694 popTracks[key] = val; 695 } 696 } 697 */ 698 699 //console.log("***### pop mode, skipping saving for now"); 700 saveDocStorage("popSave()"); 701 702 } 703 704 705 function popEdit() 706 { 707 var docOID = gs.cgiParams.d; 708 var popTracks = getPopTracks(docOID); 709 710 var popActiveLayers = getActiveOverlayLayers("value"); 711 712 //var edit_json = {}; 713 var edit_text = ""; 714 715 for (var i=0; i<popActiveLayers.length; i++) { 716 var track_name = popActiveLayers[i]; 717 //edit_json[track_name] = popTracks[track_name]; 718 edit_text += popTracks[track_name]; 719 } 720 721 //infoEditor.setValue(JSON.stringify(edit_json,null,'\t')); 722 infoEditor.setValue(edit_text); 723 infoEditor.clearSelection(); 724 725 $('#edit-info-popup').dialog('open'); 726 727 return false; // no need to process the event any further 728 } 729 730 731 732 -
main/trunk/model-sites-dev/respooled/collect/popup-video-respooled/js/in-the-groove.js
r29888 r30093 42 42 var output = e.outputBuffer.getChannelData(c); 43 43 44 44 /* 45 45 for (var i = 0; i < bufferSize; i++) { 46 46 if ( ((mediaPlaybackMode == "neutral") || (mediaPlaybackMode == "record")) … … 55 55 prev_input[c] = input[i]; 56 56 } 57 */ 58 59 if ((mediaPlaybackMode == "neutral") || (mediaPlaybackMode == "record")) { 60 61 62 // Apply Graphics Equalizer, and then play the result 63 64 65 if ((typeof grapheqL !== "undefined") && (typeof grapheqR !== "undefined")) { 66 if (c==0) { 67 // left 68 output.set(grapheqL.process(input)); 69 70 } 71 else { 72 // right 73 output.set(grapheqR.process(input)); 74 } 75 } 76 } 77 else { 78 79 for (var i = 0; i < bufferSize; i++) { 80 if (InTheGroove) { 81 output[i] = input[i]; 82 } 83 else { 84 // Make sound 'tinny' through simple high-pass filter 85 output[i] = input[i] - prev_input[c]; 86 } 87 88 prev_input[c] = input[i]; 89 } 90 } 91 57 92 } 93 58 94 } 59 95 60 96 source.connect(tinnyEffectNode); 61 97 tinnyEffectNode.connect(audioCtx.destination); -
main/trunk/model-sites-dev/respooled/collect/popup-video-respooled/js/jam-guitar.js
r29942 r30093 239 239 this._strumDuration = 100; 240 240 if (this._midiPitch>=0) { 241 MIDI.noteOn( 0, this._midiPitch, 40);241 MIDI.noteOn(guitar_midi_inst_num, this._midiPitch, 40); 242 242 console.log("*** Setting Jam guitar strumForce = 5"); 243 243 } … … 265 265 if (this._midiPitch>=0) { 266 266 console.log("*** setting strumDuration = 0"); 267 MIDI.noteOff( 0, this._midiPitch, 0);267 MIDI.noteOff(guitar_midi_inst_num, this._midiPitch, 0); 268 268 } 269 269 } -
main/trunk/model-sites-dev/respooled/collect/popup-video-respooled/js/jquery-drums.js
r29938 r30093 1 1 // Based on: 2 2 // http://www.theonlytutorials.com/jquery-drum-sets-html5-audio-tag-example/ 3 4 5 var hitDrumStartCurrentTime = null; 6 var hitDrumEndCurrentTime; 7 var hitDrumMidiPitch; 8 var hitDrumMidiPitchReadable; 9 10 function calcDrumMidiNoteInfo() { 11 if (hitDrumStartCurrentTime != null) { 12 13 var hitDrumDuration = hitDrumEndCurrentTime - hitDrumStartCurrentTime; 14 15 // console.log("**** " + playedNotePitch + " (midi pitch = " + playedMidiPitch+ ") startTime = ", relativePlayStartTime + ", duration = " + playedDuration); 16 17 if (mediaPlayedNotes[String(mediaStartPlayTime)]) { 18 19 mediaPlayedNotes[String(mediaStartPlayTime)].push( 20 { 'type' : "drum", 21 'midiPitch' : hitDrumMidiPitch, 22 //'midiNoteOn' : relativePlayedNoteStartTime, 23 //'midiNoteOff' : relativePlayedNoteEndTime, 24 'startCurrentTime' : hitDrumStartCurrentTime, 25 'duration' : hitDrumDuration, 26 'startPercTime': hitDrumStartCurrentTime/mediaPlayer.duration, 27 'humanReadble' : hitDrumMidiPitchReadable } 28 ); 29 } 30 31 } 32 } 3 33 4 34 $(document).ready(function() { … … 26 56 27 57 $('.drum').mousedown(function() { 58 59 hitDrumStartCurrentTime = mediaPlayer.currentTime; 60 hitDrumMidiPitchReadable = $(this).attr('id'); 61 hitDrumMidiPitch = hitDrumMidiPitchReadable.replace(/^drum/,""); 28 62 29 63 //find the drum hit and play the respective audio … … 31 65 drum = eval(drum); 32 66 33 if (drum.ended) { 67 if (drum.ended) { 34 68 $(this).addClass('hit'); 35 69 drum.play(); … … 40 74 console.log("Error thrown when playing drum sound: " + e); 41 75 } 76 77 // Force finish of previous drum hit 78 hitDrumEndCurrentTime = mediaPlayer.currentTime; 79 calcDrumMidiNoteInfo(); 80 hitDrumStartCurrentTime = mediaPlayer.currentTime; 81 hitDrumEndCurrentTime = null; 82 42 83 $(this).addClass('hit'); 43 84 drum.play(); … … 46 87 47 88 $('.drum').mouseup(function() { 89 hitDrumEndCurrentTime = mediaPlayer.currentTime; 90 calcDrumMidiNoteInfo(); 91 hitDrumStartCurrentTime = null; 92 48 93 $(this).removeClass('hit'); 49 94 }); -
main/trunk/model-sites-dev/respooled/collect/popup-video-respooled/js/media-player.js
r29898 r30093 47 47 48 48 // Hide the browser's default controls 49 mediaPlayer.controls = false; 50 49 mediaPlayer.controls = false; 50 51 // Make the default volume a little bit quiter, so instruments can be heard over it 52 mediaPlayer.volume = 0.3 53 51 54 // Add a listener for the timeupdate event so we can update the progress bar 52 55 mediaPlayer.addEventListener('timeupdate', updateProgressBar, false); … … 343 346 //console.log("*** set up docStorage: " + JSON.stringify(docStorage)); 344 347 345 var palTracks = docStorage.palTracks;348 var palTracks = getPalTracks(docOID); 346 349 347 350 // Make timing information relative to ba base value … … 362 365 palTracks[save_name] = [ { name: save_name + " 1", baseCTime: base_time_sct, events: recordedNotesArray } ] 363 366 364 console.log("Storing " + num_rec_notes + " recorded notes as layer '" + save_name +"'"); 365 console.log("**** saved: " + JSON.stringify(palTracks[save_name])); 366 367 localStorage.setItem(docOID, JSON.stringify(docStorage)); 367 //console.log("Storing " + num_rec_notes + " recorded notes as layer '" + save_name +"'"); 368 //console.log("**** saved: " + JSON.stringify(palTracks[save_name])); 369 370 //localStorage.setItem(docOID, JSON.stringify(docStorage)); 371 368 372 } 369 373 else { 370 console.log("Warning: unable to save '" + save_name +"' as browser does not support LocalStorage"); 371 } 372 374 //console.log("Warning: unable to save '" + save_name +"' as browser does not support LocalStorage"); 375 } 376 377 saveDocStorage("saveRecording()"); 378 373 379 var cb_name = save_name.replace(/[ -]/g,""); 374 380 var cb_value = save_name; … … 386 392 return valid; 387 393 } 394 395 396 function saveNewOverlay() 397 { 398 var valid = true; 399 400 var $save_name_input = $("#create-info-name"); 401 var save_name = $save_name_input.val(); 402 403 if (save_name.match(/^\s*$/)) { 404 valid = false; 405 $save_name_input.addClass( "ui-state-error" ); 406 } 407 else { 408 409 if (hasLocalStorage) { 410 var docOID = gs.cgiParams.d; 411 412 413 // Force reset of what has been stored for this item 414 //localStorage.setItem(docOID, JSON.stringify(null)); 415 416 var docStorage = getDocStorage(docOID); 417 418 var popTracks = getPopTracks(docOID); 419 420 var template_webvtt; 421 template_webvtt = "WEBVTT\n"; 422 template_webvtt += "\n"; 423 template_webvtt += "NOTE Example Popup Info Nugget\n"; 424 template_webvtt += "\n"; 425 template_webvtt += "CueId1\n"; 426 template_webvtt += "00:00.000 --> 00:2.000\n"; 427 template_webvtt += "{\n"; 428 template_webvtt += "\"title\": \"My First Title\",\n"; 429 template_webvtt += "\"text\": \"My first info nugget text\",\n"; 430 template_webvtt += "\"xpos\": \"10px\",\n"; 431 template_webvtt += "\"ypos\": \"30px\"\n"; 432 template_webvtt += "}\n"; 433 template_webvtt += "\n"; 434 435 popTracks[save_name] = [ template_webvtt ]; // Set up new entry, with exemplar webVTT entry 436 437 //console.log("Storing " + num_rec_notes + " recorded notes as layer '" + save_name +"'"); 438 //console.log("**** saved: " + JSON.stringify(palTracks[save_name])); 439 440 //localStorage.setItem(docOID, JSON.stringify(docStorage)); 441 442 } 443 else { 444 //console.log("Warning: unable to save '" + save_name +"' as browser does not support LocalStorage"); 445 } 446 447 //console.log("***### pop mode, skipping saving for now"); 448 saveDocStorage("saveNewOverlay()"); 449 450 var cb_name = save_name.replace(/[ -]/g,""); 451 var cb_value = save_name; 452 var name = save_name; 453 454 $('#popList').append('<div id="pop'+cb_name+'"><input type="checkbox" ' 455 + '" name="'+cb_name+'" value="' + cb_value + '"' 456 + ' checked="checked">' 457 + name + '</div>'); 458 459 var $dialog = $('#create-info-popup'); 460 $dialog.dialog( "close" ); 461 } 462 463 return valid; 464 } 465 388 466 389 467 … … 417 495 } 418 496 }); 419 497 dialog.parent().css("z-index",999); 498 420 499 var form = dialog.find( "form" ).on( "submit", function( event ) { 421 500 event.preventDefault(); … … 450 529 } 451 530 }); 452 531 delete_dialog.parent().css("z-index",999); 453 532 454 533 var edit_dialog = $('#edit-recording-popup').dialog({ … … 479 558 } 480 559 }); 481 560 edit_dialog.parent().css("z-index",999); 561 482 562 trackEditor = ace.edit("trackEditor"); 483 563 trackEditor.getSession().setMode("ace/mode/json"); … … 486 566 trackEditor.getSession().setUndoManager(new UndoManager()); 487 567 568 // 569 // Pop layer overlays 570 // 571 572 var new_info_dialog = $('#create-info-popup').dialog({ 573 width : 500, 574 height: 350, 575 autoOpen: false, // Do not open on page load 576 modal: true, // Freeze the background behind the overlay 577 578 show: { 579 effect: "blind", 580 duration: 800 581 }, 582 hide: { 583 effect: "blind", 584 duration: 300 585 }, 586 587 buttons: { 588 "Create Overlay": saveNewOverlay, 589 Cancel: function() { 590 $(this).dialog("close"); 591 } 592 }, 593 close: function() { 594 form[0].reset(); 595 $( "#create-info-name" ).removeClass( "ui-state-error" ); 596 } 597 }); 598 new_info_dialog.parent().css("z-index",999); 599 600 var info_delete_dialog = $('#delete-info-popup').dialog({ 601 resizable: false, 602 autoOpen: false, 603 width: 500, 604 height:200, 605 modal: true, 606 607 show: { 608 effect: "blind", 609 duration: 800 610 }, 611 hide: { 612 effect: "blind", 613 duration: 300 614 }, 615 616 buttons: { 617 "Delete selected items": function() { 618 // call delete 619 popDeleteConfirmed(); 620 $( this ).dialog( "close" ); 621 }, 622 Cancel: function() { 623 $( this ).dialog( "close" ); 624 } 625 } 626 }); 627 info_delete_dialog.parent().css("z-index",999); 628 629 630 var info_edit_dialog = $('#edit-info-popup').dialog({ 631 resizable: true, 632 autoOpen: false, 633 width: 800, 634 height:600, 635 modal: true, 636 637 show: { 638 effect: "blind", 639 duration: 800 640 }, 641 hide: { 642 effect: "blind", 643 duration: 300 644 }, 645 646 buttons: { 647 "Save": function() { 648 // call delete 649 popSave(); 650 $( this ).dialog( "close" ); 651 }, 652 Cancel: function() { 653 $( this ).dialog( "close" ); 654 } 655 } 656 }); 657 info_edit_dialog.parent().css("z-index",999); 658 659 infoEditor = ace.edit("infoEditor"); 660 infoEditor.getSession().setMode("ace/mode/text"); 661 infoEditor.getSession().setUseSoftTabs(false); 662 var InfoUndoManager = require("ace/undomanager").UndoManager; 663 infoEditor.getSession().setUndoManager(new UndoManager()); 664 665 666 667 488 668 489 669 }); -
main/trunk/model-sites-dev/respooled/collect/popup-video-respooled/js/qtip-popups.js
r29891 r30093 6 6 var overlay= document.getElementById('overlay'); 7 7 var video= document.getElementById('video'); 8 8 9 9 video.addEventListener('timeupdate', function() { 10 10 11 //var trivia_layer_on = $('input[name=PopupTrivia]:checked', '#popForm').val() || ""; 12 var trivia_layer_on = $('input[name=PopupTrivia]:checked', '#popList').val() || ""; 13 //var trivia_layer_on = $('input:checked', '#popForm').val() || ""; 14 15 console.log("*** trivia_layer_on = " + trivia_layer_on); 11 16 12 var trivia_layer_on = $('input[name=PopupTrivia]:checked', '#bubForm').val() || ""; 13 if (trivia_layer_on != "PopupTrivia") { 17 if (trivia_layer_on != "Popup Trivia") { 14 18 return; 15 19 } 20 16 21 // Only get to here if asked for the popup trivia layer 17 22 //console.log("***#### trivia layer on = " + trivia_layer_on); 23 24 //var popActiveLayersID = getActiveOverlayLayers("name"); 25 26 27 vidTimeStamp = video.currentTime; 18 28 19 vidTimeStamp = video.currentTime; 20 var textTrack = document.getElementById('bubbles').track; 29 //for (var i=0; i<popActiveLayersID.length; i++) { 30 //var track_name = popActiveLayersID[i]; 31 32 var textTrack = document.getElementById('bubbles').track; 21 33 22 // for each cue 23 if (cueIdxOn>-1) { 24 // there is a cue presently on 25 // check if need to turn off cue 26 if (textTrack.cues[cueIdxOn].endTime<vidTimeStamp) { 27 // turn off 28 hideBubble(); 29 console.log("turn off cue:"+cueIdxOn); 30 cueIdxOn = -1; 31 } 32 } 33 34 if (cueIdxOn==-1) { 35 36 for (var cueIdx = 0; cueIdx < textTrack.cues.length; cueIdx++) { 37 38 if (vidTimeStamp>=textTrack.cues[cueIdx].startTime && vidTimeStamp<textTrack.cues[cueIdx].endTime) { 39 console.log("show cue:"+cueIdx); 40 // turn on 41 showBubble(cueIdx); 42 cueIdxOn = cueIdx; 34 // for each cue 35 if (cueIdxOn>-1) { 36 // there is a cue presently on 37 // check if need to turn off cue 38 if (textTrack.cues[cueIdxOn].endTime<vidTimeStamp) { 39 // turn off 40 hideBubble(); 41 console.log("turn off cue:"+cueIdxOn); 42 cueIdxOn = -1; 43 43 } 44 44 } 45 } 46 45 46 if (cueIdxOn==-1) { 47 48 for (var cueIdx = 0; cueIdx < textTrack.cues.length; cueIdx++) { 49 50 if (vidTimeStamp>=textTrack.cues[cueIdx].startTime && vidTimeStamp<textTrack.cues[cueIdx].endTime) { 51 console.log("show cue:"+cueIdx); 52 // turn on 53 showBubble(cueIdx); 54 cueIdxOn = cueIdx; 55 } 56 } 57 } 58 //} 47 59 48 60 }, false); -
main/trunk/model-sites-dev/respooled/collect/popup-video-respooled/js/respool-midi.js
r29877 r30093 150 150 var GM_num_to_instrument_array = null; 151 151 152 //MIDI.programChange(0, MIDI.GeneralMIDI.byName["instrument_name"].number); 153 //MIDI.programChange(0, MIDI.GM.byName["instrument_name"].number); 154 152 155 //var instrument_name = "lead 1 (square)"; 153 156 //var instrument_name = "lead 2 (sawtooth)"; 154 //var instrument_name = "acoustic grand piano";157 var instrument_name = "acoustic grand piano"; 155 158 //var instrument_name = "distortion guitar"; 156 var instrument_name = "overdriven guitar"; 159 //var instrument_name = "overdriven guitar"; 160 161 ////var instrument_names = ["acoustic grand piano" , "distortion guitar" ]; 162 var instrument_names = ["acoustic_grand_piano" , "church_organ", "acoustic_guitar_nylon", "overdriven_guitar" ]; 163 164 165 var guitar_midi_inst_num = 3; 157 166 158 167 window.onload = function () { 159 168 160 169 MIDI.loadPlugin({ 161 //soundfontUrl: "./soundfont/",162 //soundfontUrl: "./FluidR3_GM/",170 //soundfontUrl: gs.variables.httpCollection + "/soundfont/", 171 //soundfontUrl: gs.variables.httpCollection + "/FluidR3_GM/", 163 172 soundfontUrl: gs.variables.httpCollection + "/soundfont-fluidr3-gm/", 164 173 165 174 //instrument: "acoustic_grand_piano", 166 175 //instrument: "lead_1_square", 167 instrument: instrument_name.replace(/ /g,"_").replace(/[()]/g,""), 176 //instrument: instrument_name.replace(/ /g,"_").replace(/[()]/g,""), 177 instruments: instrument_names, 168 178 //instrument: "acoustic_bass", 169 179 //instrument: "voice_oohs", … … 189 199 } 190 200 201 /* 191 202 var channel = 0; // MIDI allows for 16 channels, 0-15 192 203 // the xylophone is represented as instrument 13 in General MIDI. 193 var instrument_num = GM_instrument_to_num_map[instrument_name]; 204 var instrument_num = MIDI.GM.byName[instrument_names[2]].number; 205 //var instrument_num = GM_instrument_to_num_map[instrument_name]; 194 206 console.log("*** instrument name: " + instrument_name + ", instrument num = " + instrument_num); 195 207 196 208 // middle C (C4) according to General MIDI 197 var note = 60;198 var velocity = 127; // how hard the note hits, from 0-127199 var delay = 1.5; // how long to hold the note, in seconds209 //var note = 60; 210 //var velocity = 127; // how hard the note hits, from 0-127 211 //var delay = 1.5; // how long to hold the note, in seconds 200 212 201 213 // play the note 202 MIDI.programChange(0, instrument_num); // Load xylophone into Channel 0 203 //MIDI.noteOn(0, note, velocity) // Play middle C on Channel 0 204 //MIDI.noteOff(0, note, delay) // Release the middle C after 0.5 seconds 214 MIDI.programChange(channel, instrument_num); 215 */ 216 217 var i; 218 for (i=0; i<instrument_names.length; i++) { 219 var instrument_num = MIDI.GM.byName[instrument_names[i]].number; 220 console.log("*** instrument name: " + instrument_names[i] + ", instrument num = " + instrument_num); 221 MIDI.programChange(i, instrument_num); // channel, inst_num 222 } 205 223 } 206 224 -
main/trunk/model-sites-dev/respooled/collect/popup-video-respooled/tracks/land-down-under-metadata-en.vtt
r29900 r30093 1 1 WEBVTT FILE 2 2 3 Land Down Under 4 00:00:40.000 --> 00:00:50.000 5 { 6 "title":"Land Down Under", 7 "text":"Men at Work wrote this song about 'crass European culture being imposed over the natural beauty of Australia.", 8 "xpos":"350px", 9 "ypos":"250px" 10 } 11 12 13 Land Down Under 3 ZiggyID1 14 4 00:00:20.000 --> 00:00:30.000 15 5 { -
main/trunk/model-sites-dev/respooled/collect/popup-video-respooled/transform/pages/about.xsl
r29875 r30093 63 63 <div style="width: 800px; margin-left: auto; margin-right: auto;"> 64 64 65 <xsl:if test="$interface_name='dlfm'"> 66 <style> 67 .popbanner { 68 background-color: #DEEDF7; 69 color: #000; 70 } 71 </style> 72 </xsl:if> 65 73 74 66 75 <div class="popbanner"> 67 76 <div class="poptitle"> 68 Pop -Up Videos Respooled77 Popup Videos Respooled 69 78 </div> 70 79 <div class="popbannersubtext"> … … 78 87 79 88 80 <!-- 81 <div style="background-color: #DD3611; color: white; padding: 4pt; margin-bottom: 6pt;"> 82 <table> 89 <xsl:choose> 90 <xsl:when test="$interface_name='dlfm'"> 91 <p class="about"> 92 Welcome to the Digitial Library for Musicology version of the 93 <i>Popup Videos Respooled</i> website. This is a project that 94 repurposes the <a 95 href="/greenstone3/respooled-library/collection/popup-video-respooled/page/about">original 96 Respooled project</a> (designed for a bit of fun), and recasts 97 it with an interface and functionality more suitable for 98 supporting musicological study. 99 </p> 100 </xsl:when> 101 <xsl:otherwise> 102 <p class="about"> 103 Welcome to <i>Popup Videos Respooled</i>, a project that rekindles the 104 ideas present in the popular music video TV show <i>Pop Up Videos</i>, 105 a Music TV format devised in the late 1990s that embellishes the shown 106 content with <i>info nuggets</i> that popup as bubbles and then 107 disappear, as a music video plays. Through this website we have 108 updated and extended the concept, using the open source <a 109 href="http://www.greenstone.org/greenstone3">Greenstone 3 Digital 110 Library Software</a> system as a way to organize the set of videos 111 contained in the site. The popup information is collated and 112 displayed as metadata. We have also introduced a gamification element 113 to the site, where users can play along with a song using a range of 114 virtual musical instruments: piano, drum-kit and guitar. 115 </p> 116 </xsl:otherwise> 117 </xsl:choose> 83 118 84 <tr> 85 <td> 86 <img src="{$httpPath}/images/firefox-128.png" /> 87 </td> 88 <td> 89 <p class="about"> 90 <i><font size="+2"> 91 An experiment with Firefox's Advanced 92 Audio Processing Extension ... 93 </font></i> 94 </p> 119 <p class="about"> 120 Use the search box above to search for content in the digital library, or else 121 click on the Titles, Artists, or Albums tabs to browser the collection 122 </p> 95 123 96 <p class="about">97 <i><font size="+2">98 ... featuring a mash-up of 99 <a class="mashup" href="http://www.greenstone.org" target="_blank">Greenstone</a>, 100 <a class="mashup" href="http://www.omras2.org/audioDB" target="_blank">AudioDB</a>, and 101 <a class="mashup" href="http://seasr.org/meandre/" target="_blank">Meandre</a>.102 </font></i>103 </p>124 <xsl:if test="$interface_name='respooled'"> 125 <p class="about"> 126 You might also be interested in the <a 127 href="/greenstone3/dlfm-library/collection/popup-video-respooled/page/about">alternative 128 interface</a> to this content, developed for 129 supporting musicological study. 130 </p> 131 </xsl:if> 104 132 105 133 106 <div id="bd-version" style="display:none;" class="about"> 107 <p> 108 <img src="{$httpPath}/images/warning-icon.png" /> 109 Version of Firefox detected: 110 <script type="text/javascript"> 111 document.write(BrowserDetect.version); 112 </script> 113 </p> 114 <p> 115 You need to upgrade to a more recent version of Firefox 116 (v4.0 or greater) to access all the audio features of 117 this demonstration. 118 </p> 119 </div> 120 121 <div id="bd-browser" style="display:none;" class="about"> 122 123 <p> 124 <img src="{$httpPath}/images/warning-icon.png" /> 125 Browser detected: 126 <script type="text/javascript"> 127 document.write(BrowserDetect.browser); 128 </script> 129 </p> 130 <p>You need to access this web-site using Firefox 131 (v4.0 or greater) to access all the audio features provided. 132 </p> 133 </div> 134 135 136 137 138 <script> 139 <xsl:text disable-output-escaping="yes"> 140 141 if (BrowserDetect.browser == "Firefox") { 142 if (BrowserDetect.version < 4) { 143 document.getElementById("bd-version").style.display="block"; 144 145 } 146 } 147 else { 148 document.getElementById("bd-browser").style.display="block"; 149 150 } 151 </xsl:text> 152 </script> 153 154 155 156 157 </td> 158 </tr> 159 </table> 160 </div> 161 --> 162 163 <p class="about">A music DL collection that explores what is possible with only client-side processing. 164 165 166 <style> 167 li { padding-bottom: 10px; } 168 169 </style> 170 171 172 <ol> 173 174 <li> 175 <i>Client-side workflows:</i> the client-side Javascript 176 processing code is refactored to follow the same methodology as 177 Meandre components. 178 </li> 179 180 <li> 181 <i>Visualization:</i> the 182 Pre-computed self-similarity heat-maps are dropped from the 183 collection building process in preference for the same information 184 being computed through Javascript running in the user's web 185 browser. 186 </li> 187 188 189 <li> 190 <i>Annotation:</i> ... 191 192 </li> 193 </ol> 194 195 </p> 196 197 134 <xsl:choose> 135 <xsl:when test="/page/pageRequest/userInformation/@username"> 136 <p class="about"> 137 To incorpoate new videos into the collection, you need to 138 have the <a href="/greenstone3/Popup_Videos_Respooled.user.js">RespoolMe!</a> User Script installed in your browser 139 </p> 140 141 </xsl:when> 142 </xsl:choose> 143 198 144 </div> 199 145 -
main/trunk/model-sites-dev/respooled/collect/popup-video-respooled/transform/pages/document.xsl
r29980 r30093 210 210 </td> 211 211 </tr> 212 212 213 213 <tr> 214 <td>Album Title</td> 215 <td><gsf:metadata name="dc.Title.albumtitle"/></td> 216 </tr> 214 <gsf:switch> 215 <gsf:metadata name='dc.Title.albumtitle'/> 216 <gsf:when test='exists'> 217 <tr> 218 <td>Album Title</td> 219 <td><gsf:metadata name="dc.Title.albumtitle"/></td> 220 </tr> 221 </gsf:when> 222 </gsf:switch> 217 223 218 224 <tr> … … 221 227 </tr> 222 228 223 <tr> 224 <td>Released</td> 225 <td><gsf:metadata name="dc.Coverage"/></td> 226 </tr> 229 <gsf:switch> 230 <gsf:metadata name='dc.Coverage'/> 231 <gsf:when test='exists'> 232 <tr> 233 <td>Released</td> 234 <td><gsf:metadata name="dc.Coverage"/></td> 235 </tr> 236 </gsf:when> 237 </gsf:switch> 238 227 239 228 240 <!-- … … 810 822 slide: function() { changeMaxFreq(grapheqR,"R") } }; 811 823 812 var bpoPropL = { orientation: 'vertical', range: 'min', min: 0.1, max: 2, step: 0.1, value: 1,824 var bpoPropL = { orientation: 'vertical', range: 'min', min: 0.1, max: 2, step: 0.1, value: 0.5, 813 825 slide: function() { changeBandsPerOctave(grapheqL,"L")} }; 814 var bpoPropR = { orientation: 'vertical', range: 'min', min: 0.1, max: 2, step: 0.1, value: 1,826 var bpoPropR = { orientation: 'vertical', range: 'min', min: 0.1, max: 2, step: 0.1, value: 0.5, 815 827 slide: function() { changeBandsPerOctave(grapheqR,"R")} }; 816 828 … … 852 864 853 865 var numSliders = grapheq.filters.length; 866 if (numSliders<8) { 867 numSliders=8; // Window can't go any smaller than this, due to length of text in title-bar 868 } 869 854 870 var offset = (35 * numSliders) + 12; 855 871 if (side == "L") { … … 981 997 <div style="clear: both; height: 0px;"><xsl:comment></xsl:comment></div> 982 998 983 <table class="inner-control" >999 <table class="inner-control" style="float: right;"> 984 1000 <tr id="bandSlidersL"> 985 1001 </tr> … … 1407 1423 Your browser does not support the video tag. 1408 1424 </video> 1425 <gsf:div id="trackBank"/> 1409 1426 1410 1427 </div> … … 1502 1519 1503 1520 1521 <div id="create-info-popup" title="Create Overlay"> 1522 <p>Do you want create a new named overlay?</p> 1523 1524 <form> 1525 <fieldset> 1526 <label for="name">Name</label> 1527 <input type="text" 1528 name="save-info-name" id="create-info-name" value="My Overlay" 1529 class="text ui-widget-content ui-corner-all"/> 1530 </fieldset> 1531 1532 <!-- Allow form submission with keyboard without duplicating the dialog button --> 1533 <input type="submit" tabindex="-1" style="position:absolute; top:-1000px"/> 1534 1535 </form> 1536 </div> 1537 1538 <div id="delete-info-popup" title="Delete Overlay"> 1539 <p>Are you sure you want to delete the selected overlays?</p> 1540 </div> 1541 1542 <div id="edit-info-popup" title="Edit Overlays"> 1543 <style> 1544 #infoEditor { 1545 position: absolute; 1546 top: 0; right: 0; bottom: 0; left: 0; 1547 } 1548 </style> 1549 <div id="infoEditor"><xsl:comment>Overlay Editor Area</xsl:comment></div> 1550 </div> 1551 1552 1504 1553 <div style="color: white;"> 1505 1554 1506 <form id=" bubForm" style="width: 99%; margin-top: 10px; margin-bottom: 10px;">1555 <form id="popForm" style="width: 99%; margin-top: 10px; margin-bottom: 10px;"> 1507 1556 <fieldset> 1508 1557 <legend id="mpm-legend">Popup Layers</legend> 1509 <input type="checkbox" name="PopupTrivia" value="PopupTrivia" />Popup Trivia<br /> 1558 <div id="popList"><xsl:comment>pop (popup overlay) list</xsl:comment></div> 1559 1560 1561 <!-- 1562 <input type="checkbox" name="PopupTrivia" value="Popup Trivia" />Popup Trivia<br /> 1510 1563 <input type="checkbox" name="Lyrics" value="Lyrics" />Lyrics<br /> 1511 1564 <input type="checkbox" name="MisheardLyrics" value="MisheardLyrics" />Misheard Lyrics<br /> 1512 1565 <input type="checkbox" name="GuitarChords" value="GuitarChords" />Play-along Guitar Chords<br /> 1566 --> 1513 1567 1568 1569 <xsl:choose> 1570 <xsl:when test="/page/pageRequest/userInformation/@username"> 1571 1514 1572 <div style="padding: 8px;"> 1515 1573 <button id="mpm-new-overlay" 1516 1574 classXX="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-primary" 1517 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center; margin-right: 8px;"> 1575 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center; margin-right: 2px;" 1576 onclick="return popCreate()"> 1518 1577 New Layer 1519 1578 </button> 1520 1579 <button id="mpm-merge-overlay" 1521 1580 classXX="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-primary" 1522 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center; margin-right: 8px;"> 1581 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center; margin-right: 2px;" 1582 onclick="return false;"> 1523 1583 Merge Selected 1524 1584 </button> 1525 1585 <button id="mpm-split-overlay" 1526 1586 classXX="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-primary" 1527 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center; margin-right: 8px;"> 1587 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center; margin-right: 2px;" 1588 onclick="return false;"> 1528 1589 Split Selected 1529 1590 </button> 1530 1591 <button id="mpm-edit-overlay" 1531 1592 classXX="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-primary" 1532 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center; margin-right: 8px;"> 1593 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center; margin-right: 2px;" 1594 onclick="return popEdit()"> 1533 1595 Edit Selected 1534 1596 </button> 1535 1597 <button id="mpm-delete-overlay" 1536 1598 classXX="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-primary" 1537 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center;"> 1599 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center;" 1600 onclick="return popDelete()"> 1538 1601 Delete Selected 1539 1602 </button> 1540 1603 </div> 1604 1605 </xsl:when> 1606 </xsl:choose> 1607 1541 1608 </fieldset> 1542 1609 </form> … … 1548 1615 <div id="mpm-div" class="radio-div"> 1549 1616 1617 <xsl:choose> 1618 <xsl:when test="/page/pageRequest/userInformation/@username"> 1619 1550 1620 <div class="radio-label-combo" style="display:inline-block; width: 32%"> 1551 1621 <span> … … 1554 1624 <label for="mpm-record" class="radio-label"> 1555 1625 <span style="color: red;" title="The notes/beat you play on the instruments get recorded, and form a new layer"> 1556 Lay down new track 1626 <xsl:choose> 1627 <xsl:when test="$interface_name='dlfm'"> 1628 Record 1629 </xsl:when> 1630 <xsl:otherwise> 1631 Lay down new track 1632 </xsl:otherwise> 1633 </xsl:choose> 1557 1634 </span> 1558 1635 </label> 1559 1636 </div> 1560 1637 </xsl:when> 1638 </xsl:choose> 1639 1561 1640 <div class="radio-label-combo" style="display:inline-block; width: 32%"> 1562 1641 <span> … … 1565 1644 <label for="mpm-neutral" class="radio-label"> 1566 1645 <span style="color: orange;" title="Sit back and relax listening to the video"> 1567 Put into Neutral 1646 <xsl:choose> 1647 <xsl:when test="$interface_name='dlfm'"> 1648 Inactive 1649 </xsl:when> 1650 <xsl:otherwise> 1651 Put into Neutral 1652 </xsl:otherwise> 1653 </xsl:choose> 1568 1654 </span> 1569 1655 </label> … … 1576 1662 <label for="mpm-game-on" class="radio-label"> 1577 1663 <span style="color: green;" title="When you play the video, try to play one of the instruments below to match the notes in the chosen layers on display. Get it right, and a rich rendition of the pop song is played, otherwise it sounds quite and tinny"> 1578 Game on! 1664 1665 <xsl:choose> 1666 <xsl:when test="$interface_name='dlfm'"> 1667 Play along 1668 </xsl:when> 1669 <xsl:otherwise> 1670 Game on! 1671 </xsl:otherwise> 1672 </xsl:choose> 1579 1673 </span> 1580 1674 </label> … … 1586 1680 1587 1681 1682 1588 1683 <form id="palForm" style="width: 99%; margin-top: 10px; margin-bottom: 10px; "> 1589 1684 <fieldset> 1590 1685 <legend id="pal-legend">Play Along Layers: Game On!</legend> 1591 1686 <div id="palList"><xsl:comment>play along list</xsl:comment></div> 1687 1688 1592 1689 1593 1690 <div style="padding: 8px;"> … … 1597 1694 Display Selected 1598 1695 </button> 1599 <button id="pal-merge-overlay" 1600 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center; margin-right: 2px;"> 1601 Merge Selected 1602 </button> 1603 <button id="pal-split-overlay" 1604 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center; margin-right: 2px;"> 1605 Split Selected 1606 </button> 1607 <button id="pal-edit-overlay" 1608 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center; margin-right: 2px;" 1609 onclick="return palEdit()"> 1610 Edit Selected 1611 </button> 1612 <button id="pal-delete-overlay" 1613 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center;" 1614 onclick="return palDelete()"> 1615 Delete Selected 1616 </button> 1696 <xsl:choose> 1697 <xsl:when test="/page/pageRequest/userInformation/@username"> 1698 1699 <button id="pal-merge-overlay" 1700 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center; margin-right: 2px;" 1701 onclick="return false;"> 1702 Merge Selected 1703 </button> 1704 <button id="pal-split-overlay" 1705 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center; margin-right: 2px;" 1706 onclick="return false;"> 1707 Split Selected 1708 </button> 1709 <button id="pal-edit-overlay" 1710 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center; margin-right: 2px;" 1711 onclick="return palEdit()"> 1712 Edit Selected 1713 </button> 1714 <button id="pal-delete-overlay" 1715 style="background-color:#2E52A4; color:#CCC; width:19%; text-align: center;" 1716 onclick="return palDelete()"> 1717 Delete Selected 1718 </button> 1719 </xsl:when> 1720 </xsl:choose> 1721 1617 1722 </div> 1723 1724 1618 1725 </fieldset> 1619 1726 </form> 1620 1727 1621 1728 1622 1729 </div> 1623 1730 … … 1629 1736 1630 1737 <div class="analysis-bar"> 1631 <div id="analysis-titlebar" style="background-image: none; background-color: #2E52A4; width: 97%; float: left; margin-bottom: 10px; ">1738 <div id="analysis-titlebar" style="background-image: none; background-color: #2E52A4; width: 97%; float: left; margin-bottom: 10px; z-index: 4; position: relative;"> 1632 1739 1633 1740 <xsl:choose> … … 1642 1749 1643 1750 <div id="analysis-area" class="documenttext" 1644 style="display: none; position: absolute: left: 0px; top: 0px;"> 1751 styleXX="display: none; position: absolute: left: 0px; top: 0px;" 1752 style="display: none; left: 0px; top: 0px; position: relative; z-index: 1;"> 1645 1753 <div style="width:97.7%; height: 500px; margin: 6px; background-colorXX: white"> 1646 <div id="gameOnPaper" width="100%" height="445" ><xsl:comment>filler</xsl:comment></div>1754 <div id="gameOnPaper" width="100%" height="445" style="position: absolute; top: 50px; "><xsl:comment>filler</xsl:comment></div> 1647 1755 <!-- 1648 1756 <svg id="gameOnPaper" xmlns="http://www.w3.org/2000/svg" version="1.1" … … 1656 1764 --> 1657 1765 </div> 1658 1766 1767 <xsl:if test="$interface_name='dlfm'"> 1768 1769 <div style="padding: 15px; padding-top: 0px;"> 1770 <button class="zoom-in">Zoom In</button> 1771 <button class="zoom-out">Zoom Out</button> 1772 <input type="range" class="zoom-range" /> 1773 <button class="reset">Reset</button> 1774 </div> 1775 </xsl:if> 1776 1659 1777 </div> 1660 1778 </div> … … 1696 1814 <option value="19">Church Organ</option> 1697 1815 <option value="24">Acoustic Guitar Nylon</option> 1816 <!-- 1698 1817 <option value="30">Distortion Guitar</option> 1818 --> 1699 1819 </select> 1700 1820 </div>
Note:
See TracChangeset
for help on using the changeset viewer.