client/js/main.js
changeset 20 bd58970ffd16
parent 18 4423bfcd8f9f
child 21 b43dd87f7ffa
equal deleted inserted replaced
19:d49b927bfe62 20:bd58970ffd16
    31 
    31 
    32 Rkns.$ = jQuery;
    32 Rkns.$ = jQuery;
    33 
    33 
    34 Rkns._ = _;
    34 Rkns._ = _;
    35 
    35 
    36 Rkns.Serializers = {};
    36 Rkns.RemoteModels = {};
    37 
    37 
    38 Rkns.Serializers._Base = function(_project) {
    38 Rkns.RemoteModels._Base = function(_project, _opts) {
    39     if (typeof _project !== "undefined") {
    39     if (typeof _project !== "undefined") {
    40         this._project = _project;
    40         this._project = _project;
    41         this._callbackQueue = [];
    41         this._callbackQueue = [];
    42         this._loaded = false;
    42         this._loaded = false;
    43     }
    43     }
    44 }
    44 }
    45 
    45 
    46 Rkns.Serializers._Base.prototype.deserialize = function() {}
    46 Rkns.RemoteModels._Base.prototype.fullSave
       
    47     = Rkns.RemoteModels._Base.prototype.addUser
       
    48     = Rkns.RemoteModels._Base.prototype.addNode
       
    49     = Rkns.RemoteModels._Base.prototype.addEdge
       
    50     = Rkns.RemoteModels._Base.prototype.updateNode
       
    51     = Rkns.RemoteModels._Base.prototype.updateEdge
       
    52     = Rkns.RemoteModels._Base.prototype.removeNode
       
    53     = Rkns.RemoteModels._Base.prototype.removeEdge
       
    54     = function() {}
    47 
    55 
    48 Rkns.Serializers._Base.prototype.deferCallback = function(_callback) {
    56 Rkns.RemoteModels._Base.prototype.deferCallback = function(_callback) {
    49     var _this = this;
    57     var _this = this;
    50     Rkns._.defer(function() {
    58     Rkns._.defer(function() {
    51         _callback.call(_this);
    59         _callback.call(_this);
    52     });
    60     });
    53 }
    61 }
    54 
    62 
    55 Rkns.Serializers._Base.prototype.handleCallbacks = function() {
    63 Rkns.RemoteModels._Base.prototype.handleCallbacks = function() {
    56     this._loaded = true;
    64     this._loaded = true;
    57     while (this._callbackQueue.length) {
    65     while (this._callbackQueue.length) {
    58         this.deferCallback(this._callbackQueue.splice(0,1)[0]);
    66         this.deferCallback(this._callbackQueue.splice(0,1)[0]);
    59     }
    67     }
    60 }
    68 }
    61 
    69 
    62 Rkns.Serializers._Base.prototype.onLoad = function(_callback) {
    70 Rkns.RemoteModels._Base.prototype.onLoad = function(_callback) {
    63     if (this._loaded) {
    71     if (this._loaded) {
    64         this.deferCallback(_callback);
    72         this.deferCallback(_callback);
    65     } else {
    73     } else {
    66         this._callbackQueue.push(_callback);
    74         this._callbackQueue.push(_callback);
    67     }
    75     }
    68 }
    76 }
    69 
    77 
    70 Rkns.Serializers._Base.prototype.save = function() {}
    78 Rkns.RemoteModels._Base.prototype.save = function() {}
    71 
    79 
    72 Rkns.Project = function(_opts) {
    80 Rkns.Bins = {}
    73     if (typeof _opts.serializer == "undefined") {
    81 
    74         _opts.serializer = "BasicJson";
    82 Rkns.Bins._Base = function(_project) {
       
    83     if (typeof _project !== "undefined") {
       
    84         this._project = _project;
       
    85     }
       
    86 }
       
    87 
       
    88 Rkns.Bins._Base.prototype.baseTemplate = '';
       
    89 
       
    90 Rkns.Bins._Base.prototype.addTab = function(_title) {
       
    91     var _tabDiv = Rkns.$('<div>');
       
    92     _tabDiv.addClass('Rk-TabDiv')
       
    93         .css("display","none")
       
    94         .appendTo('.Rk-TabDivs');
       
    95     var _tabButton = Rkns.$('<li>');
       
    96     _tabButton.addClass('Rk-TabButton')
       
    97         .html(_title)
       
    98         .click(function() {
       
    99             Rkns.$('.Rk-TabButton').removeClass("active");
       
   100             Rkns.$(this).addClass("active");
       
   101             Rkns.$('.Rk-TabDiv').hide();
       
   102             _tabDiv.show();
       
   103         })
       
   104         .appendTo('.Rk-TabButtons');
       
   105     return {
       
   106         button: _tabButton,
       
   107         contents: _tabDiv
       
   108     }
       
   109 }
       
   110 
       
   111 /* Point of entry */
       
   112 
       
   113 Rkns.Renkan = function(_opts) {
       
   114     if (typeof _opts.remotemodel == "undefined") {
       
   115         _opts.remotemodel = "BasicJson";
    75     }
   116     }
    76     if (typeof _opts.language == "undefined" || typeof Rkns.i18n[_opts.language] == "undefined") {
   117     if (typeof _opts.language == "undefined" || typeof Rkns.i18n[_opts.language] == "undefined") {
    77         _opts.language = "en";
   118         _opts.language = "en";
    78     }
   119     }
    79     this.l10n = Rkns.i18n[_opts.language];
   120     if (typeof _opts.container == "undefined") {
    80     this._opts = _opts;
   121         _opts.container = "renkan";
    81     this.users = new Rkns.Model.List();
       
    82     this.nodes = new Rkns.Model.List();
       
    83     this.edges = new Rkns.Model.List();
       
    84     if (typeof this._opts.user === "object") {
       
    85         this.current_user = this.addUser(this._opts.user)
       
    86     }
   122     }
    87     this.serializer = new Rkns.Serializers[_opts.serializer](this);
   123     this.project = new Rkns.ViewModel.Project();
    88     this.renderer = new Rkns.Renderer.Scene(this);
   124     this.project.l10n = Rkns.i18n[_opts.language];
       
   125     if (typeof _opts.user === "object") {
       
   126         this.current_user = this.project.addUser(_opts.user)
       
   127     }
       
   128     Rkns.$("#" + _opts.container).html(this.template());
       
   129     this.project.remotemodel = new Rkns.RemoteModels[_opts.remotemodel](this.project, _opts);
       
   130     this.project.renderer = new Rkns.Renderer.Scene(this.project, _opts);
    89     var _this = this;
   131     var _this = this;
    90     this.serializer.onLoad(function() {
   132 /*    if (typeof _opts.bins === "object") {
    91         if (typeof _this.current_user === "undefined") {
   133         this.bins = Rkns._(_opts.bins).map(function(_type) {
    92             _this.current_user = _proj.users[0];
   134             return new Rkns.Bins[_type](_this);
       
   135         });
       
   136         Rkns.$('.Rk-TabButton:last').addClass("active");
       
   137         Rkns.$('.Rk-TabDiv:last').show();
       
   138 } */
       
   139     this.project.remotemodel.onLoad(function() {
       
   140         if (typeof _this.project.current_user === "undefined") {
       
   141             _this.project.current_user = _this.project.users[0];
    93         }
   142         }
    94         _this.renderer.draw();
   143         _this.project.renderer.draw();
    95     });
   144     });
    96 }
   145 }
    97 
   146 
    98 Rkns.Project.prototype.addNode = function(_props, _render_save) {
   147 Rkns.Renkan.prototype.template = Rkns._.template(
    99     var _node = new Rkns.Model.Node(this, _props);
   148     '<div class="Rk-Bins"></div><div class="Rk-Render"></div>'
   100     this.nodes.push(_node);
   149 );
   101     if (typeof _render_save !== "undefined" && (_render_save&Rkns._RENDER)) {
       
   102         var _controller = this.renderer.addController("Node", _node);
       
   103         _controller.redraw();
       
   104     }
       
   105     if (typeof _render_save !== "undefined" && (_render_save&Rkns._SAVE)) {
       
   106         this.serializer.save();
       
   107     }
       
   108     return _node;
       
   109 }
       
   110 
       
   111 Rkns.Project.prototype.addEdge = function(_props, _render_save) {
       
   112     var _edge = new Rkns.Model.Edge(this, _props);
       
   113     this.edges.push(_edge);
       
   114     if (typeof _render_save !== "undefined" && (_render_save&Rkns._RENDER)) {
       
   115         var _controller = this.renderer.addController("Edge", _edge);
       
   116         _controller.redraw();
       
   117     }
       
   118     if (typeof _render_save !== "undefined" && (_render_save&Rkns._SAVE)) {
       
   119         this.serializer.save();
       
   120     }
       
   121     return _edge;
       
   122 }
       
   123 
       
   124 Rkns.Project.prototype.addUser = function(_props, _render_save) {
       
   125     var _user = new Rkns.Model.User(this, _props);
       
   126     this.users.push(_user);
       
   127     return _user;
       
   128 }
       
   129 
       
   130 Rkns.Project.prototype.updateElement = function(_element, _props, _render_save) {
       
   131     Rkns._(_props).each(function(_v, _k) {
       
   132         _element[_k] = _v;
       
   133     });
       
   134     if (typeof _render_save !== "undefined" && (_render_save&Rkns._RENDER)) {
       
   135         if (typeof _element.__controller !== "undefined") {
       
   136             _element.__controller.redraw();
       
   137         } else {
       
   138             this._renderer.redraw();
       
   139         }
       
   140     }
       
   141     if (typeof _render_save !== "undefined" && (_render_save&Rkns._SAVE)) {
       
   142         this.serializer.save();
       
   143     }
       
   144 }
       
   145 
       
   146 Rkns.Project.prototype.removeNode = function(_node, _render_save) {
       
   147     this.nodes.removeId(_node.id);
       
   148     if (typeof _node.__controller !== "undefined") {
       
   149         this.renderer.removeController(_node.__controller);
       
   150     }
       
   151     var _this = this;
       
   152     this.edges = this.edges.filter(function(_edge) {
       
   153         var _keep = _edge.from !== _node && _edge.to !== _node;
       
   154         if (!_keep && typeof _edge.__controller !== "undefined") {
       
   155             _this.renderer.removeController(_edge.__controller);
       
   156         }
       
   157         return _keep;
       
   158     });
       
   159     if (typeof _render_save !== "undefined" && (_render_save&Rkns._RENDER)) {
       
   160         this.renderer.redraw();
       
   161     }
       
   162     if (typeof _render_save !== "undefined" && (_render_save&Rkns._SAVE)) {
       
   163         this.serializer.save();
       
   164     }
       
   165     return _node;
       
   166 }
       
   167 
       
   168 Rkns.Project.prototype.removeEdge = function(_edge, _render_save) {
       
   169     this.edges.removeId(_edge.id);
       
   170     if (typeof _edge.__controller !== "undefined") {
       
   171         this.renderer.removeController(_edge.__controller);
       
   172     }
       
   173     if (typeof _render_save !== "undefined" && (_render_save&Rkns._RENDER)) {
       
   174         this.renderer.redraw();
       
   175     }
       
   176     if (typeof _render_save !== "undefined" && (_render_save&Rkns._SAVE)) {
       
   177         this.serializer.save();
       
   178     }
       
   179     return _edge;
       
   180 }
       
   181 
   150 
   182 /* Utility functions */
   151 /* Utility functions */
   183 
   152 
   184 Rkns.Utils = {
   153 Rkns.Utils = {
   185     _ID_AUTO_INCREMENT : 0,
   154     _ID_AUTO_INCREMENT : 0,