client/js/main.js
changeset 20 bd58970ffd16
parent 18 4423bfcd8f9f
child 21 b43dd87f7ffa
--- a/client/js/main.js	Thu Aug 16 17:24:13 2012 +0200
+++ b/client/js/main.js	Fri Aug 17 12:50:00 2012 +0200
@@ -33,9 +33,9 @@
 
 Rkns._ = _;
 
-Rkns.Serializers = {};
+Rkns.RemoteModels = {};
 
-Rkns.Serializers._Base = function(_project) {
+Rkns.RemoteModels._Base = function(_project, _opts) {
     if (typeof _project !== "undefined") {
         this._project = _project;
         this._callbackQueue = [];
@@ -43,23 +43,31 @@
     }
 }
 
-Rkns.Serializers._Base.prototype.deserialize = function() {}
+Rkns.RemoteModels._Base.prototype.fullSave
+    = Rkns.RemoteModels._Base.prototype.addUser
+    = Rkns.RemoteModels._Base.prototype.addNode
+    = Rkns.RemoteModels._Base.prototype.addEdge
+    = Rkns.RemoteModels._Base.prototype.updateNode
+    = Rkns.RemoteModels._Base.prototype.updateEdge
+    = Rkns.RemoteModels._Base.prototype.removeNode
+    = Rkns.RemoteModels._Base.prototype.removeEdge
+    = function() {}
 
-Rkns.Serializers._Base.prototype.deferCallback = function(_callback) {
+Rkns.RemoteModels._Base.prototype.deferCallback = function(_callback) {
     var _this = this;
     Rkns._.defer(function() {
         _callback.call(_this);
     });
 }
 
-Rkns.Serializers._Base.prototype.handleCallbacks = function() {
+Rkns.RemoteModels._Base.prototype.handleCallbacks = function() {
     this._loaded = true;
     while (this._callbackQueue.length) {
         this.deferCallback(this._callbackQueue.splice(0,1)[0]);
     }
 }
 
-Rkns.Serializers._Base.prototype.onLoad = function(_callback) {
+Rkns.RemoteModels._Base.prototype.onLoad = function(_callback) {
     if (this._loaded) {
         this.deferCallback(_callback);
     } else {
@@ -67,117 +75,78 @@
     }
 }
 
-Rkns.Serializers._Base.prototype.save = function() {}
+Rkns.RemoteModels._Base.prototype.save = function() {}
+
+Rkns.Bins = {}
+
+Rkns.Bins._Base = function(_project) {
+    if (typeof _project !== "undefined") {
+        this._project = _project;
+    }
+}
+
+Rkns.Bins._Base.prototype.baseTemplate = '';
 
-Rkns.Project = function(_opts) {
-    if (typeof _opts.serializer == "undefined") {
-        _opts.serializer = "BasicJson";
+Rkns.Bins._Base.prototype.addTab = function(_title) {
+    var _tabDiv = Rkns.$('<div>');
+    _tabDiv.addClass('Rk-TabDiv')
+        .css("display","none")
+        .appendTo('.Rk-TabDivs');
+    var _tabButton = Rkns.$('<li>');
+    _tabButton.addClass('Rk-TabButton')
+        .html(_title)
+        .click(function() {
+            Rkns.$('.Rk-TabButton').removeClass("active");
+            Rkns.$(this).addClass("active");
+            Rkns.$('.Rk-TabDiv').hide();
+            _tabDiv.show();
+        })
+        .appendTo('.Rk-TabButtons');
+    return {
+        button: _tabButton,
+        contents: _tabDiv
+    }
+}
+
+/* Point of entry */
+
+Rkns.Renkan = function(_opts) {
+    if (typeof _opts.remotemodel == "undefined") {
+        _opts.remotemodel = "BasicJson";
     }
     if (typeof _opts.language == "undefined" || typeof Rkns.i18n[_opts.language] == "undefined") {
         _opts.language = "en";
     }
-    this.l10n = Rkns.i18n[_opts.language];
-    this._opts = _opts;
-    this.users = new Rkns.Model.List();
-    this.nodes = new Rkns.Model.List();
-    this.edges = new Rkns.Model.List();
-    if (typeof this._opts.user === "object") {
-        this.current_user = this.addUser(this._opts.user)
+    if (typeof _opts.container == "undefined") {
+        _opts.container = "renkan";
+    }
+    this.project = new Rkns.ViewModel.Project();
+    this.project.l10n = Rkns.i18n[_opts.language];
+    if (typeof _opts.user === "object") {
+        this.current_user = this.project.addUser(_opts.user)
     }
-    this.serializer = new Rkns.Serializers[_opts.serializer](this);
-    this.renderer = new Rkns.Renderer.Scene(this);
+    Rkns.$("#" + _opts.container).html(this.template());
+    this.project.remotemodel = new Rkns.RemoteModels[_opts.remotemodel](this.project, _opts);
+    this.project.renderer = new Rkns.Renderer.Scene(this.project, _opts);
     var _this = this;
-    this.serializer.onLoad(function() {
-        if (typeof _this.current_user === "undefined") {
-            _this.current_user = _proj.users[0];
+/*    if (typeof _opts.bins === "object") {
+        this.bins = Rkns._(_opts.bins).map(function(_type) {
+            return new Rkns.Bins[_type](_this);
+        });
+        Rkns.$('.Rk-TabButton:last').addClass("active");
+        Rkns.$('.Rk-TabDiv:last').show();
+} */
+    this.project.remotemodel.onLoad(function() {
+        if (typeof _this.project.current_user === "undefined") {
+            _this.project.current_user = _this.project.users[0];
         }
-        _this.renderer.draw();
+        _this.project.renderer.draw();
     });
 }
 
-Rkns.Project.prototype.addNode = function(_props, _render_save) {
-    var _node = new Rkns.Model.Node(this, _props);
-    this.nodes.push(_node);
-    if (typeof _render_save !== "undefined" && (_render_save&Rkns._RENDER)) {
-        var _controller = this.renderer.addController("Node", _node);
-        _controller.redraw();
-    }
-    if (typeof _render_save !== "undefined" && (_render_save&Rkns._SAVE)) {
-        this.serializer.save();
-    }
-    return _node;
-}
-
-Rkns.Project.prototype.addEdge = function(_props, _render_save) {
-    var _edge = new Rkns.Model.Edge(this, _props);
-    this.edges.push(_edge);
-    if (typeof _render_save !== "undefined" && (_render_save&Rkns._RENDER)) {
-        var _controller = this.renderer.addController("Edge", _edge);
-        _controller.redraw();
-    }
-    if (typeof _render_save !== "undefined" && (_render_save&Rkns._SAVE)) {
-        this.serializer.save();
-    }
-    return _edge;
-}
-
-Rkns.Project.prototype.addUser = function(_props, _render_save) {
-    var _user = new Rkns.Model.User(this, _props);
-    this.users.push(_user);
-    return _user;
-}
-
-Rkns.Project.prototype.updateElement = function(_element, _props, _render_save) {
-    Rkns._(_props).each(function(_v, _k) {
-        _element[_k] = _v;
-    });
-    if (typeof _render_save !== "undefined" && (_render_save&Rkns._RENDER)) {
-        if (typeof _element.__controller !== "undefined") {
-            _element.__controller.redraw();
-        } else {
-            this._renderer.redraw();
-        }
-    }
-    if (typeof _render_save !== "undefined" && (_render_save&Rkns._SAVE)) {
-        this.serializer.save();
-    }
-}
-
-Rkns.Project.prototype.removeNode = function(_node, _render_save) {
-    this.nodes.removeId(_node.id);
-    if (typeof _node.__controller !== "undefined") {
-        this.renderer.removeController(_node.__controller);
-    }
-    var _this = this;
-    this.edges = this.edges.filter(function(_edge) {
-        var _keep = _edge.from !== _node && _edge.to !== _node;
-        if (!_keep && typeof _edge.__controller !== "undefined") {
-            _this.renderer.removeController(_edge.__controller);
-        }
-        return _keep;
-    });
-    if (typeof _render_save !== "undefined" && (_render_save&Rkns._RENDER)) {
-        this.renderer.redraw();
-    }
-    if (typeof _render_save !== "undefined" && (_render_save&Rkns._SAVE)) {
-        this.serializer.save();
-    }
-    return _node;
-}
-
-Rkns.Project.prototype.removeEdge = function(_edge, _render_save) {
-    this.edges.removeId(_edge.id);
-    if (typeof _edge.__controller !== "undefined") {
-        this.renderer.removeController(_edge.__controller);
-    }
-    if (typeof _render_save !== "undefined" && (_render_save&Rkns._RENDER)) {
-        this.renderer.redraw();
-    }
-    if (typeof _render_save !== "undefined" && (_render_save&Rkns._SAVE)) {
-        this.serializer.save();
-    }
-    return _edge;
-}
+Rkns.Renkan.prototype.template = Rkns._.template(
+    '<div class="Rk-Bins"></div><div class="Rk-Render"></div>'
+);
 
 /* Utility functions */