Advertisement
Guest User

Untitled

a guest
Jun 27th, 2016
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var scenes = [
  2.                  { sceneID: 0, projectID: 1, title: "First scene", sequenceNo: ko.observable(1) },
  3.                  { sceneID: 1, projectID: 1, title: "Second scene", sequenceNo: ko.observable(2) },
  4.                  { sceneID: 2, projectID: 1, title: "Third scene", sequenceNo: ko.observable(3) }
  5.             ];
  6.  
  7. var texts = [
  8.             { textID: 0, sceneID: ko.observable(0), projectID: 1, title: "Text A", sequenceNo: ko.observable(1) },
  9.             { textID: 1, sceneID: ko.observable(null), projectID: 1, title: "Text B", sequenceNo: ko.observable(2) },
  10.             { textID: 2, sceneID: ko.observable(null), projectID: 1, title: "Text C", sequenceNo: ko.observable(3) },
  11.             { textID: 3, sceneID: ko.observable(2), projectID: 1, title: "Text D", sequenceNo: ko.observable(4) },
  12.             { textID: 4, sceneID: ko.observable(null), projectID: 1, title: "Text E", sequenceNo: ko.observable(5) },
  13.             { textID: 5, sceneID: ko.observable(2), projectID: 1, title: "Text F", sequenceNo: ko.observable(6) },
  14.             { textID: 6, sceneID: ko.observable(1), projectID: 1, title: "Text G", sequenceNo: ko.observable(7) },
  15.             { textID: 7, sceneID: ko.observable(1), projectID: 1, title: "Text H", sequenceNo: ko.observable(8) }
  16.         ];
  17. var u = ko.utils.unwrapObservable;
  18. ko.observableArray.fn.filter = function (predicate) {
  19.     var target = this;
  20.     var computed = ko.computed(function () {
  21.         return ko.utils.arrayFilter(target(), predicate);
  22.     });
  23.     var observableArray = new ko.observableArray(u(computed));
  24.     computed.subscribe(function (newValue) { observableArray(newValue); });
  25.     return observableArray;
  26. };
  27.  
  28. function ViewModel(scenes, texts) {
  29.         var self = this;
  30.     var projectID = 1;
  31.    
  32.     this.selectedScene = ko.observable();
  33.  
  34.     self.allScenes = ko.observableArray(scenes);
  35.     this.scenes = self.allScenes.filter(function (scene) {
  36.             return scene.projectID == projectID;
  37.         });
  38.  
  39.     self.allTexts = ko.observableArray(texts);
  40.     self.texts = ko.computed(function () {
  41.         return ko.utils.arrayFilter(self.allTexts(), function (text) {
  42.             return text.projectID == projectID;
  43.         });
  44.     });
  45.  
  46.            
  47.                 this.selectedText = ko.observable();
  48.    
  49.     // seed the available texts
  50.     //this.availableTexts = ko.observableArray(ko.utils.arrayFilter(this.texts(), function(text) {
  51.     //    return text.sceneID() === null;
  52.     //}));
  53.    
  54.    //this.availableTexts = ko.computed(function(){
  55.    //       return ko.utils.arrayFilter(self.texts(), function(text) {
  56.    //     return text.sceneID() === null;
  57.    //   })
  58.    //   });
  59.    
  60.     this.availableTexts = ko.computed({
  61.         read: function(){
  62.            return ko.utils.arrayFilter(self.texts(), function(text) {
  63.            return text.sceneID() === null;
  64.         })
  65.       },
  66.       write: function(value){
  67.         return value;
  68.       },
  69.       owner: self
  70.     });
  71.    
  72.    
  73.  
  74.     this.currentSceneTexts = ko.observableArray();
  75.     this.currentSceneTexts = ko.computed(function(){
  76.             var scene = self.selectedScene();
  77.    
  78.             if (!scene){
  79.         return [];
  80.         }
  81.         else {
  82.           return ko.utils.arrayFilter(self.texts(), function(text) {
  83.                   return text.sceneID() === scene.sceneID;
  84.           });
  85.         }
  86.     });
  87.                    
  88.    
  89.     // setup current texts when selected scene changes
  90.     this.selectedScene.subscribe(function(scene) {
  91.         //this.currentSceneTexts(ko.utils.arrayFilter(this.texts(), function(text) {
  92.         //    return text.sceneID() === scene.sceneID;
  93.         // }));
  94.     }, this);
  95.  
  96.     // handle sequence #s
  97.     function resetSequence(items) {
  98.         var count = 0;
  99.         ko.utils.arrayForEach(items, function(item) {
  100.             item.sequenceNo(++count);
  101.         });
  102.     }
  103.    
  104.     function recalcSequence() {
  105.         var count = 0;
  106.         ko.utils.arrayForEach(self.scenes(),function(scene){
  107.           var batches;
  108.  
  109.           if (scene === self.selectedScene()) {
  110.             batches = self.currentSceneTexts();
  111.           } else {
  112.             batches = ko.utils.arrayFilter(self.texts(), function (t) {
  113.                 return t.sceneID() === scene.sceneID;
  114.             });
  115.           }
  116.  
  117.             ko.utils.arrayForEach(batches, function (batch) {
  118.                 batch.sequenceNo(count++);
  119.           });
  120.         });
  121.        
  122.         self.allTexts.sort(function(a,b) {
  123.                 return a.sequenceNo() - b.sequenceNo();  
  124.         });
  125.      }
  126.  
  127.     this.scenes.subscribe(resetSequence);
  128.     this.currentSceneTexts.subscribe(recalcSequence);
  129.     this.availableTexts.subscribe(resetSequence);
  130.                 this.selectedText.subscribe(recalcSequence);
  131.    
  132.     // handle updated sceneID on a text (for use in afterMove)
  133.     this.updateSceneID = function(sceneID, arg) {
  134.         arg.item.sceneID(sceneID);
  135.     }
  136.    
  137.    
  138.     self.undoTextAllocation = function (field) {
  139.             //alert("remove this!")
  140.         field.sceneID(null);
  141.     };
  142.     self.addTextbatchToScene = function (data) {
  143.         var scene = self.selectedScene();
  144.         if (scene) {
  145.             //alert("add this!")
  146.             data.sceneID(scene.sceneID);
  147.         }
  148.         return false;
  149.     };
  150.    
  151.    
  152. }
  153.  
  154. ko.applyBindings(new ViewModel(scenes, texts));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement