145 lines
3.9 KiB
JavaScript
145 lines
3.9 KiB
JavaScript
var $, $1, Tabs, TabsView, Widget, _, p, tabs_template,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
_ = require("underscore");
|
|
|
|
$ = require("jquery");
|
|
|
|
$1 = require("bootstrap/tab");
|
|
|
|
p = require("../../core/properties");
|
|
|
|
tabs_template = require("./tabs_template");
|
|
|
|
Widget = require("./widget");
|
|
|
|
TabsView = (function(superClass) {
|
|
extend(TabsView, superClass);
|
|
|
|
function TabsView() {
|
|
return TabsView.__super__.constructor.apply(this, arguments);
|
|
}
|
|
|
|
TabsView.prototype.render = function() {
|
|
var $panels, active, child, children, html, j, key, len, panel, ref, ref1, ref2, tabs, that, val;
|
|
TabsView.__super__.render.call(this);
|
|
ref = this.child_views;
|
|
for (key in ref) {
|
|
if (!hasProp.call(ref, key)) continue;
|
|
val = ref[key];
|
|
val.$el.detach();
|
|
}
|
|
this.$el.empty();
|
|
tabs = this.mget('tabs');
|
|
active = this.mget('active');
|
|
children = this.mget('children');
|
|
html = $(tabs_template({
|
|
tabs: tabs,
|
|
active: function(i) {
|
|
if (i === active) {
|
|
return 'bk-bs-active';
|
|
} else {
|
|
return '';
|
|
}
|
|
}
|
|
}));
|
|
that = this;
|
|
html.find("> li > a").click(function(event) {
|
|
var panelId, panelIdx, ref1;
|
|
event.preventDefault();
|
|
$(this).tab('show');
|
|
panelId = $(this).attr('href').replace('#tab-', '');
|
|
tabs = that.model.get('tabs');
|
|
panelIdx = _.indexOf(tabs, _.find(tabs, function(panel) {
|
|
return panel.id === panelId;
|
|
}));
|
|
that.model.set('active', panelIdx);
|
|
return (ref1 = that.model.get('callback')) != null ? ref1.execute(that.model) : void 0;
|
|
});
|
|
$panels = html.children(".bk-bs-tab-pane");
|
|
ref1 = _.zip(children, $panels);
|
|
for (j = 0, len = ref1.length; j < len; j++) {
|
|
ref2 = ref1[j], child = ref2[0], panel = ref2[1];
|
|
$(panel).html(this.child_views[child.id].$el);
|
|
}
|
|
this.$el.append(html);
|
|
this.$el.tabs;
|
|
return this;
|
|
};
|
|
|
|
return TabsView;
|
|
|
|
})(Widget.View);
|
|
|
|
Tabs = (function(superClass) {
|
|
extend(Tabs, superClass);
|
|
|
|
function Tabs() {
|
|
return Tabs.__super__.constructor.apply(this, arguments);
|
|
}
|
|
|
|
Tabs.prototype.type = "Tabs";
|
|
|
|
Tabs.prototype.default_view = TabsView;
|
|
|
|
Tabs.prototype.initialize = function(options) {
|
|
var tab;
|
|
Tabs.__super__.initialize.call(this, options);
|
|
return this.children = (function() {
|
|
var j, len, ref, results;
|
|
ref = this.tabs;
|
|
results = [];
|
|
for (j = 0, len = ref.length; j < len; j++) {
|
|
tab = ref[j];
|
|
results.push(tab.get("child"));
|
|
}
|
|
return results;
|
|
}).call(this);
|
|
};
|
|
|
|
Tabs.define({
|
|
tabs: [p.Array, []],
|
|
active: [p.Number, 0],
|
|
callback: [p.Instance]
|
|
});
|
|
|
|
Tabs.internal({
|
|
children: [p.Array, []]
|
|
});
|
|
|
|
Tabs.prototype.get_layoutable_children = function() {
|
|
return this.get('children');
|
|
};
|
|
|
|
Tabs.prototype.get_edit_variables = function() {
|
|
var child, edit_variables, j, len, ref;
|
|
edit_variables = Tabs.__super__.get_edit_variables.call(this);
|
|
ref = this.get_layoutable_children();
|
|
for (j = 0, len = ref.length; j < len; j++) {
|
|
child = ref[j];
|
|
edit_variables = edit_variables.concat(child.get_edit_variables());
|
|
}
|
|
return edit_variables;
|
|
};
|
|
|
|
Tabs.prototype.get_constraints = function() {
|
|
var child, constraints, j, len, ref;
|
|
constraints = Tabs.__super__.get_constraints.call(this);
|
|
ref = this.get_layoutable_children();
|
|
for (j = 0, len = ref.length; j < len; j++) {
|
|
child = ref[j];
|
|
constraints = constraints.concat(child.get_constraints());
|
|
}
|
|
return constraints;
|
|
};
|
|
|
|
return Tabs;
|
|
|
|
})(Widget.Model);
|
|
|
|
module.exports = {
|
|
Model: Tabs,
|
|
View: TabsView
|
|
};
|