view src/light9/effecteval/effect-components.html @ 2376:4556eebe5d73

topdir reorgs; let pdm have its src/ dir; separate vite area from light9/
author drewp@bigasterisk.com
date Sun, 12 May 2024 19:02:10 -0700
parents light9/effecteval/effect-components.html@c81f86f3d65a
children
line wrap: on
line source

<link rel="import" href="/lib/polymer/polymer.html">
<script src="/websocket.js"></script>
<script src="/lib/jquery/dist/jquery.min.js"></script>

<dom-module id="song-effect-list">
  <template>
    <template is="dom-repeat" items="{{songs}}" as="song">
      <li>
        <a class="song"
           href="{{song.uri}}"
           on-click="focusSong">Song <span>{{song.label}}</span></a>
        <ul>
          <template is="dom-repeat" items="{{song.effects}}" as="effect">
            <li>
              <l9-effect uri="{{effect.uri}}"
                         label="{{effect.label}}"></l9-effect>
            </li>
          </template>
       <!--    <li>
          <effect-drop-target song-uri="{{song.uri}}"></effect-drop-target>
      </li>
      -->
        </ul>
      </li>
    </template>
  </template>
</dom-module>
<script>
 Polymer({
   is: "song-effect-list",
   properties: {
     songs: Object
   },
   ready: function() {
     reconnectingWebSocket("songEffectsUpdates", function(msg) {
       var m, s;
       m = window.location.search.match(/song=(http[^&]+)/);
       if (m) {
         var match = decodeURIComponent(m[1]);
         this.songs = msg.songs.filter(function(s) { return s.uri == match; });
       } else {
         this.songs = msg.songs;
       }
     }.bind(this));
   },
   focusSong: function(ev) {
     ev.preventDefault()
     window.location.search = '?' + $.param({song: ev.model.song.uri});
   }
 });
</script>

<dom-module id="l9-effect">
  <template>
    <a class="effect" href="{{href}}">{{label}}</a>
    
  </template>
</dom-module>
<script>
 Polymer({
   is: "l9-effect",
   properties: {
     uri: String,
     label: String,
     href: {
       type: String,
       computed: 'computeHref(uri)'
     }
   },
   computeHref: function(uri) {
     return 'effect?'+jQuery.param({uri: uri});
   },
   deleteEffect: function() {
     $.ajax({
       type: 'DELETE',
       url: 'effect?' + $.param({uri: this.uri})
     });
     console.log("del", this.uri);
   }
 });
</script>

<dom-module id="effect-drop-target">
  <template>
    <div class="dropTarget"
        on-dragenter="dragover"
        on-dragover="dragover"
        on-drop="drop">Add another (drop a sub or effect class)</div>
  </template>
</dom-module>
<script>
 Polymer({
   is: "effect-drop-target",
   properties: {
     songUri: String
   },
   dragover: function(event) {
     event.preventDefault()
     event.dataTransfer.dropEffect = 'copy'
   },
   drop: function(event) {
     event.preventDefault()
     $.post('songEffects', {
       uri: this.songUri,
       drop: event.dataTransfer.getData('text/uri-list')
     });
   }
 });
</script>