Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var scenes = [
- { sceneID: 0, projectID: 1, title: "First scene", sequenceNo: ko.observable(1) },
- { sceneID: 1, projectID: 1, title: "Second scene", sequenceNo: ko.observable(2) },
- { sceneID: 2, projectID: 1, title: "Third scene", sequenceNo: ko.observable(3) }
- ];
- var texts = [
- { textID: 0, sceneID: ko.observable(0), projectID: 1, title: "Text A", sequenceNo: ko.observable(1) },
- { textID: 1, sceneID: ko.observable(null), projectID: 1, title: "Text B", sequenceNo: ko.observable(2) },
- { textID: 2, sceneID: ko.observable(null), projectID: 1, title: "Text C", sequenceNo: ko.observable(3) },
- { textID: 3, sceneID: ko.observable(2), projectID: 1, title: "Text D", sequenceNo: ko.observable(4) },
- { textID: 4, sceneID: ko.observable(null), projectID: 1, title: "Text E", sequenceNo: ko.observable(5) },
- { textID: 5, sceneID: ko.observable(2), projectID: 1, title: "Text F", sequenceNo: ko.observable(6) },
- { textID: 6, sceneID: ko.observable(1), projectID: 1, title: "Text G", sequenceNo: ko.observable(7) },
- { textID: 7, sceneID: ko.observable(1), projectID: 1, title: "Text H", sequenceNo: ko.observable(8) }
- ];
- var u = ko.utils.unwrapObservable;
- ko.observableArray.fn.filter = function (predicate) {
- var target = this;
- var computed = ko.computed(function () {
- return ko.utils.arrayFilter(target(), predicate);
- });
- var observableArray = new ko.observableArray(u(computed));
- computed.subscribe(function (newValue) { observableArray(newValue); });
- return observableArray;
- };
- function ViewModel(scenes, texts) {
- var self = this;
- var projectID = 1;
- this.selectedScene = ko.observable();
- self.allScenes = ko.observableArray(scenes);
- this.scenes = self.allScenes.filter(function (scene) {
- return scene.projectID == projectID;
- });
- self.allTexts = ko.observableArray(texts);
- self.texts = ko.computed(function () {
- return ko.utils.arrayFilter(self.allTexts(), function (text) {
- return text.projectID == projectID;
- });
- });
- this.selectedText = ko.observable();
- // seed the available texts
- //this.availableTexts = ko.observableArray(ko.utils.arrayFilter(this.texts(), function(text) {
- // return text.sceneID() === null;
- //}));
- //this.availableTexts = ko.computed(function(){
- // return ko.utils.arrayFilter(self.texts(), function(text) {
- // return text.sceneID() === null;
- // })
- // });
- this.availableTexts = ko.computed({
- read: function(){
- return ko.utils.arrayFilter(self.texts(), function(text) {
- return text.sceneID() === null;
- })
- },
- write: function(value){
- return value;
- },
- owner: self
- });
- this.currentSceneTexts = ko.observableArray();
- this.currentSceneTexts = ko.computed(function(){
- var scene = self.selectedScene();
- if (!scene){
- return [];
- }
- else {
- return ko.utils.arrayFilter(self.texts(), function(text) {
- return text.sceneID() === scene.sceneID;
- });
- }
- });
- // setup current texts when selected scene changes
- this.selectedScene.subscribe(function(scene) {
- //this.currentSceneTexts(ko.utils.arrayFilter(this.texts(), function(text) {
- // return text.sceneID() === scene.sceneID;
- // }));
- }, this);
- // handle sequence #s
- function resetSequence(items) {
- var count = 0;
- ko.utils.arrayForEach(items, function(item) {
- item.sequenceNo(++count);
- });
- }
- function recalcSequence() {
- var count = 0;
- ko.utils.arrayForEach(self.scenes(),function(scene){
- var batches;
- if (scene === self.selectedScene()) {
- batches = self.currentSceneTexts();
- } else {
- batches = ko.utils.arrayFilter(self.texts(), function (t) {
- return t.sceneID() === scene.sceneID;
- });
- }
- ko.utils.arrayForEach(batches, function (batch) {
- batch.sequenceNo(count++);
- });
- });
- self.allTexts.sort(function(a,b) {
- return a.sequenceNo() - b.sequenceNo();
- });
- }
- this.scenes.subscribe(resetSequence);
- this.currentSceneTexts.subscribe(recalcSequence);
- this.availableTexts.subscribe(resetSequence);
- this.selectedText.subscribe(recalcSequence);
- // handle updated sceneID on a text (for use in afterMove)
- this.updateSceneID = function(sceneID, arg) {
- arg.item.sceneID(sceneID);
- }
- self.undoTextAllocation = function (field) {
- //alert("remove this!")
- field.sceneID(null);
- };
- self.addTextbatchToScene = function (data) {
- var scene = self.selectedScene();
- if (scene) {
- //alert("add this!")
- data.sceneID(scene.sceneID);
- }
- return false;
- };
- }
- ko.applyBindings(new ViewModel(scenes, texts));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement