client/js/main.js
changeset 21 b43dd87f7ffa
parent 20 bd58970ffd16
child 23 70c8af9b44ec
--- a/client/js/main.js	Fri Aug 17 12:50:00 2012 +0200
+++ b/client/js/main.js	Fri Aug 17 18:36:12 2012 +0200
@@ -79,63 +79,102 @@
 
 Rkns.Bins = {}
 
-Rkns.Bins._Base = function(_project) {
-    if (typeof _project !== "undefined") {
-        this._project = _project;
+Rkns.Bins._Base = function(_renkan, _opts) {
+    if (typeof _renkan !== "undefined") {
+        this.renkan = _renkan;
+        this.renkan.$.find(".Rk-Bin-Main").hide();
+        this.$ = Rkns.$('<li>')
+            .addClass("Rk-Bin")
+            .appendTo(_renkan.$.find(".Rk-Bin-List"));
+        this.title_$ = Rkns.$('<h2>')
+            .addClass("Rk-Bin-Title")
+            .appendTo(this.$);
+        this.main_$ = Rkns.$('<div>')
+            .addClass("Rk-Bin-Main")
+            .appendTo(this.$);
+        this.renkan.resizeBins();
     }
 }
-
-Rkns.Bins._Base.prototype.baseTemplate = '';
-
-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.remotemodel !== "string") {
+        _opts.remotemodel = "FullJson";
     }
-    if (typeof _opts.language == "undefined" || typeof Rkns.i18n[_opts.language] == "undefined") {
+    if (typeof _opts.language !== "string" || typeof Rkns.i18n[_opts.language] == "undefined") {
         _opts.language = "en";
     }
-    if (typeof _opts.container == "undefined") {
+    if (typeof _opts.container !== "string") {
         _opts.container = "renkan";
     }
+    if (typeof _opts.search !== "object" || !_opts.search) {
+        _opts.search = [];
+    }
     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)
     }
-    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);
+    this.$ = Rkns.$("#" + _opts.container);
+    this.$.html(this.template());
+    this.remotemodel = this.project.remotemodel = new Rkns.RemoteModels[_opts.remotemodel](this.project, _opts);
+    this.renderer = this.project.renderer = new Rkns.Renderer.Scene(this.project, _opts);
+    this.renderer.renkan = this;
+    this.tabs = [];
+    this.selected_bin_item = undefined;
+    this.mousedown = false;
     var _this = this;
-/*    if (typeof _opts.bins === "object") {
-        this.bins = Rkns._(_opts.bins).map(function(_type) {
-            return new Rkns.Bins[_type](_this);
+    this.$.mouseup(function() {
+        _this.selected_bin_item = undefined;
+    });
+    if (!_opts.search.length) {
+        this.$.find(".Rk-Search-Form").detach();
+    } else {
+        var _tmpl = Rkns._.template('<option value="<%= name %>"><%= name %></option>');
+        this.$.find(".Rk-Search-Select").html(
+            Rkns._(_opts.search).map(function(_name) {
+                return _tmpl({name:_name});
+            }).join("")
+        );
+    }
+    this.$.find(".Rk-Search-Form").submit(function() {
+        _this.tabs.push(
+            new Rkns.Bins[_this.$.find(".Rk-Search-Select").val()](
+                _this,
+                {
+                    search: _this.$.find(".Rk-Search-Input").val()
+                }
+            )
+        );
+        return false;
+    });
+    this.$.find(".Rk-Bins")
+        .click(function(_e) {
+            if (_e.target.className == "Rk-Bin-Title") {
+                var _mainDiv = Rkns.$(_e.target).siblings(".Rk-Bin-Main");
+                if (_mainDiv.is(":hidden")) {
+                    _this.$.find(".Rk-Bin-Main").slideUp();
+                    _mainDiv.slideDown();
+                }
+            }
+        }).mousedown(function(_e) {
+            var _t = Rkns.$(_e.target);
+            while (!_t.is(".Rk-Bins,.Rk-Bin-Item")) {
+                _t = _t.parent();
+            }
+            if (_t.is(".Rk-Bin-Item")) {
+                _this.selected_bin_item = {
+                    uri : $(_t).attr("data-uri"),
+                    title : $(_t).attr("data-title"),
+                    description : $(_t).attr("data-description")
+                }
+                return false;
+            }
         });
-        Rkns.$('.Rk-TabButton:last').addClass("active");
-        Rkns.$('.Rk-TabDiv:last').show();
-} */
+    Rkns.$(window).resize(function() {
+        _this.resizeBins();
+    })
+    
     this.project.remotemodel.onLoad(function() {
         if (typeof _this.project.current_user === "undefined") {
             _this.project.current_user = _this.project.users[0];
@@ -145,9 +184,20 @@
 }
 
 Rkns.Renkan.prototype.template = Rkns._.template(
-    '<div class="Rk-Bins"></div><div class="Rk-Render"></div>'
+    '<div class="Rk-Bins">'
+    + '<form class="Rk-Search-Form"><input class="Rk-Search-Input" type="search" placeholder="Search" /><select class="Rk-Search-Select"></select></form>'
+    + '<ul class="Rk-Bin-List"></ul></div><div class="Rk-Render"></div>'
 );
 
+
+Rkns.Renkan.prototype.resizeBins = function() {
+    var _titles = this.$.find(".Rk-Bin-Title"),
+        _d = _titles.length * _titles.outerHeight() + this.$.find(".Rk-Search-Form").outerHeight();
+    this.$.find(".Rk-Bin-Main").css({
+        height: this.$.find(".Rk-Bins").height() - _d
+    });
+}
+
 /* Utility functions */
 
 Rkns.Utils = {