/*!
* teeble - v0.3.15 - 2015-03-03
* https://github.com/HubSpot/teeble
* Copyright (c) 2015 HubSpot, Marc Neuwirth, Jonathan Kim;
* Licensed MIT
*/
(function() {
this.Teeble = {};
}).call(this);
(function() {
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
this.Teeble.TableRenderer = (function() {
TableRenderer.prototype.key = 'rows';
TableRenderer.prototype.hasFooter = false;
TableRenderer.prototype.data = null;
TableRenderer.prototype.header_template = null;
TableRenderer.prototype.row_template = null;
TableRenderer.prototype.rows_template = null;
TableRenderer.prototype.table_class = null;
TableRenderer.prototype.table_template = null;
TableRenderer.prototype.table_template_compiled = null;
TableRenderer.prototype.empty_message = "No data to display";
TableRenderer.prototype.classes = {
sorting: {
sortable_class: 'sorting'
}
};
TableRenderer.prototype.compile = _.template;
TableRenderer.prototype._initialize = function() {
var option, validOptions, _i, _len;
validOptions = ['table_class', 'partials', 'hasFooter', 'empty_message', 'cid', 'classes', 'compile'];
for (_i = 0, _len = validOptions.length; _i < _len; _i++) {
option = validOptions[_i];
if (this.options[option] != null) {
this[option] = this.options[option];
}
}
if (this.partials) {
return this.update_template(this.partials);
}
};
TableRenderer.prototype._getExtraData = function() {
return {};
};
TableRenderer.prototype._render = function(template, data) {
if (!template) {
console.log('no compiled template');
return false;
}
if (!data) {
console.log('no data');
return false;
} else {
data = _.extend({}, this._getExtraData(), data);
return template(data);
}
};
function TableRenderer(options) {
this.options = options;
this.update_template = __bind(this.update_template, this);
this.generate_columns = __bind(this.generate_columns, this);
this.render_empty = __bind(this.render_empty, this);
this.render_footer = __bind(this.render_footer, this);
this.render_header = __bind(this.render_header, this);
this.render_row = __bind(this.render_row, this);
this._render = __bind(this._render, this);
this._getExtraData = __bind(this._getExtraData, this);
this._initialize = __bind(this._initialize, this);
this._initialize();
this;
}
TableRenderer.prototype.render_row = function(data) {
if (!this.row_template_compiled) {
this.row_template_compiled = this.compile(this.row_template);
}
if (data) {
return this._render(this.row_template_compiled, data);
}
};
TableRenderer.prototype.render_header = function(data) {
if (!this.header_template_compiled) {
this.header_template_compiled = this.compile(this.header_template);
}
if (data) {
return this._render(this.header_template_compiled, data);
}
};
TableRenderer.prototype.render_footer = function(data) {
if (!this.footer_template_compiled) {
this.footer_template_compiled = this.compile(this.footer_template);
}
if (data) {
return this._render(this.footer_template_compiled, data);
}
};
TableRenderer.prototype.render_empty = function(data) {
if (!this.table_empty_template_compiled) {
this.table_empty_template_compiled = this.compile(this.table_empty_template);
}
if (data) {
if (!data.message) {
data.message = this.empty_message;
}
return this._render(this.table_empty_template_compiled, data);
}
};
TableRenderer.prototype._get_template_attributes = function(type, partial, i) {
var attribute, attributes, section, sortable, template, value, wrap, _ref;
sortable = partial.sortable;
section = partial[type];
wrap = false;
if (typeof section === 'string') {
template = section;
} else {
wrap = true;
if (section.template) {
template = section.template;
}
if (!section.attributes) {
section.attributes = {};
}
if (sortable) {
section.attributes['data-sort'] = sortable;
if (!section.attributes["class"]) {
section.attributes["class"] = [this.classes.sorting.sortable_class];
} else {
if (typeof section.attributes["class"] === 'string') {
section.attributes["class"] = [section.attributes["class"]];
}
section.attributes["class"].push(this.classes.sorting.sortable_class);
}
}
attributes = [];
_ref = section.attributes;
for (attribute in _ref) {
value = _ref[attribute];
if (value instanceof Array) {
value = value.join(' ');
}
attributes.push({
name: attribute,
value: value
});
}
}
if (template) {
return {
attributes: attributes,
wrap: wrap,
partial: template
};
} else {
return {
attributes: {},
wrap: wrap,
partial: ''
};
}
};
TableRenderer.prototype._generate_template = function(name, columns, wrap, td) {
var attribute, attributes, column, column_name, column_template, section, str, _i, _len, _ref, _ref1;
if (td == null) {
td = 'td';
}
str = "";
if (columns) {
for (column_name in columns) {
column = columns[column_name];
section = column[name];
if (section) {
column_template = "" + section.partial;
if (section.wrap) {
attributes = '';
if ((_ref = section.attributes) != null ? _ref.length : void 0) {
_ref1 = section.attributes;
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
attribute = _ref1[_i];
attributes += "" + attribute.name + "=\"" + attribute.value + "\" ";
}
}
column_template = "<" + td + " " + attributes + ">" + column_template + "" + td + ">";
}
str += column_template;
}
}
if (wrap) {
str = "<" + wrap + ">" + str + "" + wrap + ">";
}
}
return str;
};
TableRenderer.prototype.generate_columns = function(partials, clear) {
var column, i, partial, partial_name;
if (partials == null) {
partials = this.partials;
}
if (clear == null) {
clear = false;
}
if (this.columns && !clear) {
return this.columns;
} else {
i = 0;
this.columns = [];
for (partial_name in partials) {
partial = partials[partial_name];
column = {};
/* Header
*/
if (partial.header) {
column.header = this._get_template_attributes('header', partial, i);
}
/* Footer
*/
if (partial.footer) {
column.footer = this._get_template_attributes('footer', partial, i);
}
/* Cell
*/
if (partial.cell) {
column.cell = this._get_template_attributes('cell', partial, i);
}
this.columns.push(column);
i++;
}
return this.columns;
}
};
TableRenderer.prototype.update_template = function(partials) {
var columns;
if (partials == null) {
partials = this.partials;
}
columns = this.generate_columns();
this.header_template = this._generate_template('header', columns, 'tr', 'th');
this.footer_template = this._generate_template('footer', columns, 'tr');
this.row_template = this._generate_template('cell', columns);
return this.table_empty_template = "
{{{message}}} | ";
};
return TableRenderer;
})();
}).call(this);
(function() {
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
__hasProp = {}.hasOwnProperty,
__extends = 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; };
this.Teeble.EmptyView = (function(_super) {
__extends(EmptyView, _super);
function EmptyView() {
this.render = __bind(this.render, this);
this.initialize = __bind(this.initialize, this);
return EmptyView.__super__.constructor.apply(this, arguments);
}
EmptyView.prototype.initialize = function(options) {
this.options = options;
return this.renderer = this.options.renderer;
};
EmptyView.prototype.render = function() {
if (this.renderer) {
this.el = this.renderer.render_empty(this.options);
}
return this;
};
return EmptyView;
})(Backbone.View);
}).call(this);
(function() {
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
__hasProp = {}.hasOwnProperty,
__extends = 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; };
this.Teeble.FooterView = (function(_super) {
__extends(FooterView, _super);
function FooterView() {
this.stopListening = __bind(this.stopListening, this);
this.render = __bind(this.render, this);
this.initialize = __bind(this.initialize, this);
return FooterView.__super__.constructor.apply(this, arguments);
}
FooterView.prototype.tagName = 'tfoot';
FooterView.prototype.initialize = function(options) {
var _this = this;
this.options = options;
this.renderer = this.options.renderer;
if (this.collection.footer) {
if (this.collection.footer instanceof Backbone.Model) {
this.collection.footer.on('change', function() {
return _this.render();
});
}
this.data = this.collection.footer;
} else {
this.data = this.options;
}
return this.collection.footer;
};
FooterView.prototype.render = function() {
var data;
if (this.renderer) {
if (this.data.toJSON) {
data = this.data.toJSON();
} else {
data = this.data;
}
this.$el.html(this.renderer.render_footer(data));
}
return this;
};
FooterView.prototype.stopListening = function() {
var _ref;
if ((_ref = this.collection.footer) != null) {
_ref.off('change');
}
return FooterView.__super__.stopListening.apply(this, arguments);
};
return FooterView;
})(Backbone.View);
}).call(this);
(function() {
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
__hasProp = {}.hasOwnProperty,
__extends = 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; };
this.Teeble.HeaderView = (function(_super) {
__extends(HeaderView, _super);
function HeaderView() {
this.setSort = __bind(this.setSort, this);
this.sort = __bind(this.sort, this);
this._sort = __bind(this._sort, this);
this.render = __bind(this.render, this);
this.initialize = __bind(this.initialize, this);
return HeaderView.__super__.constructor.apply(this, arguments);
}
HeaderView.prototype.events = {
'click .sorting': 'sort'
};
HeaderView.prototype.tagName = 'thead';
HeaderView.prototype.initialize = function(options) {
this.options = options;
this.renderer = this.options.renderer;
return this.classes = this.options.classes;
};
HeaderView.prototype.delegateEvents = function() {
HeaderView.__super__.delegateEvents.apply(this, arguments);
return this.collection.on('reset', this.setSort, this);
};
HeaderView.prototype.undelegateEvents = function() {
HeaderView.__super__.undelegateEvents.apply(this, arguments);
return this.collection.off('reset', this.setSort);
};
HeaderView.prototype.render = function() {
if (this.renderer) {
this.$el.html(this.renderer.render_header(this.options));
this.setSort();
}
return this;
};
HeaderView.prototype._sort = function(e, direction) {
var $this, currentSort, _ref;
e.preventDefault();
$this = this.$(e.target);
if (!$this.hasClass(this.classes.sorting.sortable_class)) {
$this = $this.parents("." + this.classes.sorting.sortable_class);
}
currentSort = $this.attr('data-sort');
if (!$this.hasClass(this.classes.sorting.sorted_desc_class) && !$this.hasClass(this.classes.sorting.sorted_asc_class)) {
direction = (_ref = this.collection.sortDirections[currentSort]) != null ? _ref : direction;
}
return this.collection.setSort(currentSort, direction);
};
HeaderView.prototype.sort = function(e) {
var $this;
$this = this.$(e.currentTarget);
if ($this.hasClass(this.classes.sorting.sorted_desc_class)) {
return this._sort(e, 'asc');
} else {
return this._sort(e, 'desc');
}
};
HeaderView.prototype.setSort = function() {
var classDirection, direction;
if (this.collection.sortColumn) {
direction = 'desc';
if (this.collection.sortDirection) {
direction = this.collection.sortDirection;
}
classDirection = "sorted_" + direction + "_class";
return this.$el.find("." + this.classes.sorting.sortable_class).removeClass("" + this.classes.sorting.sorted_desc_class + " " + this.classes.sorting.sorted_asc_class).filter(".sorting[data-sort=\"" + this.collection.sortColumn + "\"]").addClass("" + this.classes.sorting[classDirection]);
}
};
return HeaderView;
})(Backbone.View);
}).call(this);
(function() {
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
__hasProp = {}.hasOwnProperty,
__extends = 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; };
this.Teeble.PaginationView = (function(_super) {
__extends(PaginationView, _super);
function PaginationView() {
this.gotoPage = __bind(this.gotoPage, this);
this.gotoLast = __bind(this.gotoLast, this);
this.gotoNext = __bind(this.gotoNext, this);
this.gotoPrev = __bind(this.gotoPrev, this);
this.gotoFirst = __bind(this.gotoFirst, this);
this.render = __bind(this.render, this);
return PaginationView.__super__.constructor.apply(this, arguments);
}
PaginationView.prototype.initialize = function(options) {
this.options = options;
};
PaginationView.prototype.tagName = 'div';
PaginationView.prototype.events = {
'click a.first': 'gotoFirst',
'click a.previous': 'gotoPrev',
'click a.next': 'gotoNext',
'click a.last': 'gotoLast',
'click a.pagination-page': 'gotoPage'
};
PaginationView.prototype.template = "\">\n
\n - \n \n
\n <% _.each(pages, function(page) { %>\n - \n \n
\n <% }); %>\n - \n \n
\n
\n
";
PaginationView.prototype.render = function() {
var html, info, page, pages;
if (!this.collection.information) {
this.collection.pager();
}
info = this.collection.information;
if (info.totalPages > 1) {
pages = (function() {
var _i, _len, _ref, _results;
_ref = info.pageSet;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
page = _ref[_i];
_results.push({
active: page === info.currentPage ? this.options.pagination.pagination_active : void 0,
number: page
});
}
return _results;
}).call(this);
html = _.template(this.template, {
pagination_class: this.options.pagination.pagination_class,
pagination_disabled: this.options.pagination.pagination_disabled,
pagination_active: this.options.pagination.pagination_active,
prev_disabled: info.previous === false,
next_disabled: info.next === false,
pages: pages
});
this.$el.html(html);
}
return this;
};
PaginationView.prototype.gotoFirst = function(e) {
e.preventDefault();
return this.collection.goTo(1);
};
PaginationView.prototype.gotoPrev = function(e) {
e.preventDefault();
return this.collection.previousPage();
};
PaginationView.prototype.gotoNext = function(e) {
e.preventDefault();
return this.collection.nextPage();
};
PaginationView.prototype.gotoLast = function(e) {
e.preventDefault();
return this.collection.goTo(this.collection.information.lastPage);
};
PaginationView.prototype.gotoPage = function(e) {
var page;
e.preventDefault();
page = this.$(e.target).text();
return this.collection.goTo(page);
};
return PaginationView;
})(Backbone.View);
}).call(this);
(function() {
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
__hasProp = {}.hasOwnProperty,
__extends = 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; };
this.Teeble.RowView = (function(_super) {
__extends(RowView, _super);
function RowView() {
this.render = __bind(this.render, this);
this.undelegateEvents = __bind(this.undelegateEvents, this);
this.delegateEvents = __bind(this.delegateEvents, this);
this.initialize = __bind(this.initialize, this);
return RowView.__super__.constructor.apply(this, arguments);
}
RowView.prototype.tagName = 'tr';
RowView.prototype.initialize = function(options) {
this.options = options;
return this.renderer = this.options.renderer;
};
RowView.prototype.delegateEvents = function() {
RowView.__super__.delegateEvents.apply(this, arguments);
this.model.bind('change', this.render, this);
return this.model.bind('destroy', this.remove, this);
};
RowView.prototype.undelegateEvents = function() {
RowView.__super__.undelegateEvents.apply(this, arguments);
this.model.unbind('change', this.render, this);
return this.model.unbind('destroy', this.remove, this);
};
RowView.prototype.render = function() {
if (this.renderer) {
this.$el.html(this.renderer.render_row(this.model.toJSON({
teeble: true
})));
if (this.options.sortColumnIndex != null) {
this.$el.find('td').eq(this.options.sortColumnIndex).addClass(this.options.sortableClass);
}
}
return this;
};
return RowView;
})(Backbone.View);
}).call(this);
(function() {
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
__hasProp = {}.hasOwnProperty,
__extends = 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; };
this.Teeble.TableView = (function(_super) {
__extends(TableView, _super);
function TableView() {
this.remove = __bind(this.remove, this);
this.addOne = __bind(this.addOne, this);
this.renderEmpty = __bind(this.renderEmpty, this);
this.renderBody = __bind(this.renderBody, this);
this.renderFooter = __bind(this.renderFooter, this);
this.renderHeader = __bind(this.renderHeader, this);
this.renderPagination = __bind(this.renderPagination, this);
this.render = __bind(this.render, this);
this.setOptions = __bind(this.setOptions, this);
this.initialize = __bind(this.initialize, this);
return TableView.__super__.constructor.apply(this, arguments);
}
TableView.prototype.tagName = 'div';
TableView.prototype.rendered = false;
TableView.prototype.classes = {
sorting: {
sortable_class: 'sorting',
sorted_desc_class: 'sorting_desc',
sorted_asc_class: 'sorting_asc',
sortable_cell: 'sorting_1'
},
pagination: {
pagination_class: 'pagination',
pagination_active: 'active',
pagination_disabled: 'disabled'
}
};
TableView.prototype.subviews = {
header: Teeble.HeaderView,
row: Teeble.RowView,
footer: Teeble.FooterView,
pagination: Teeble.PaginationView,
renderer: Teeble.TableRenderer,
empty: Teeble.EmptyView
};
TableView.prototype.initialize = function(options) {
var i, partial, partial_name, _ref;
this.options = options;
this.rows = [];
this.subviews = _.extend({}, this.subviews, this.options.subviews);
this.setOptions();
TableView.__super__.initialize.apply(this, arguments);
this.sortIndex = {};
i = 0;
_ref = this.options.partials;
for (partial_name in _ref) {
partial = _ref[partial_name];
if (partial.sortable) {
this.sortIndex[partial.sortable] = i;
}
i++;
}
return this.renderer = new this.subviews.renderer({
partials: this.options.partials,
table_class: this.options.table_class,
cid: this.cid,
classes: this.classes,
collection: this.collection,
compile: this.options.compile
});
};
TableView.prototype.delegateEvents = function() {
TableView.__super__.delegateEvents.apply(this, arguments);
this.collection.on('add', this.addOne, this);
this.collection.on('reset', this.renderBody, this);
this.collection.on('reset', this.renderFooter, this);
return this.collection.on('reset', this.renderPagination, this);
};
TableView.prototype.undelegateEvents = function() {
var _ref, _ref1;
TableView.__super__.undelegateEvents.apply(this, arguments);
if ((_ref = this.header) != null) {
_ref.undelegateEvents();
}
if ((_ref1 = this.footer) != null) {
_ref1.undelegateEvents();
}
this.collection.off('add', this.addOne);
this.collection.off('reset', this.renderBody);
this.collection.off('reset', this.renderFooter);
return this.collection.off('reset', this.renderPagination);
};
TableView.prototype.setOptions = function() {
return this;
};
TableView.prototype.render = function() {
var _base;
if (!this.collection.origModels && (this.collection.whereAll != null)) {
if (typeof (_base = this.collection).pager === "function") {
_base.pager();
}
}
this.$el.empty().append("");
this.table = this.$('table').addClass(this.options.table_class);
this.body = this.$('tbody');
this.rendered = true;
this.renderHeader();
this.renderBody();
this.renderFooter();
this.renderPagination();
this.trigger('teeble.render', this);
return this;
};
TableView.prototype.renderPagination = function() {
var _ref;
if (this.options.pagination && this.rendered) {
if ((_ref = this.pagination) != null) {
_ref.remove();
}
this.pagination = new this.subviews.pagination({
collection: this.collection,
pagination: this.classes.pagination
});
this.$el.append(this.pagination.render().el);
return this.trigger('pagination.render', this);
}
};
TableView.prototype.renderHeader = function() {
var _ref;
if (this.rendered) {
if ((_ref = this.header) != null) {
_ref.remove();
}
this.header = new this.subviews.header({
renderer: this.renderer,
collection: this.collection,
classes: this.classes
});
this.table.prepend(this.header.render().el);
return this.trigger('header.render', this);
}
};
TableView.prototype.renderFooter = function() {
var _ref;
if (this.options.footer && this.rendered) {
if ((_ref = this.footer) != null) {
_ref.remove();
}
if (this.collection.length > 0) {
this.footer = new this.subviews.footer({
renderer: this.renderer,
collection: this.collection
});
this.table.append(this.footer.render().el);
return this.trigger('footer.render', this);
}
}
};
TableView.prototype.renderBody = function() {
if (this.rendered) {
this.body.empty();
if (this.collection.length > 0) {
this.collection.each(this.addOne);
return this.trigger('body.render', this);
} else {
return this.renderEmpty();
}
}
};
TableView.prototype.renderEmpty = function() {
var options;
if (this.rendered) {
options = _.extend({}, this.options, {
renderer: this.renderer,
collection: this.collection
});
this.empty = new this.subviews.empty(options);
this.body.append(this.empty.render().el);
return this.trigger('empty.render', this);
}
};
TableView.prototype.addOne = function(item) {
var sortColumnIndex, view;
if (this.collection.sortColumn) {
sortColumnIndex = this.sortIndex[this.collection.sortColumn];
}
view = new this.subviews.row({
model: item,
renderer: this.renderer,
sortColumnIndex: sortColumnIndex,
sortableClass: this.classes.sorting.sortable_cell
});
this.rows.push(view);
this.body.append(view.render().el);
return this.trigger('row.render', view);
};
TableView.prototype.remove = function() {
var row, _i, _len, _ref, _ref1, _ref2;
TableView.__super__.remove.apply(this, arguments);
_ref = this.rows;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
row = _ref[_i];
row.undelegateEvents();
row.remove();
}
this.rows = [];
if ((_ref1 = this.header) != null) {
_ref1.remove();
}
return (_ref2 = this.footer) != null ? _ref2.remove() : void 0;
};
return TableView;
})(Backbone.View);
}).call(this);
(function() {
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
__hasProp = {}.hasOwnProperty,
__extends = 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; },
__slice = [].slice;
this.Teeble.ClientCollection = (function(_super) {
__extends(ClientCollection, _super);
function ClientCollection() {
this.eachAll = __bind(this.eachAll, this);
this.getFromAll = __bind(this.getFromAll, this);
this.whereAll = __bind(this.whereAll, this);
this.initialize = __bind(this.initialize, this);
return ClientCollection.__super__.constructor.apply(this, arguments);
}
ClientCollection.prototype.sortDirections = {};
ClientCollection.prototype.default_paginator_core = {
dataType: 'json',
url: function() {
return this.url();
}
};
ClientCollection.prototype.default_paginator_ui = {
sortColumn: '',
sortDirection: 'desc',
firstPage: 1,
currentPage: 1,
perPage: 10,
pagesInRange: 3
};
ClientCollection.prototype.initialize = function() {
this.paginator_ui = _.extend({}, this.default_paginator_ui, this.paginator_ui);
this.paginator_core = _.extend({}, this.default_paginator_core, this.paginator_core);
return ClientCollection.__super__.initialize.apply(this, arguments);
};
ClientCollection.prototype.whereAll = function(attrs) {
if (_.isEmpty(attrs)) {
return [];
}
return _.filter(this.origModels, function(model) {
var key, value;
for (key in attrs) {
value = attrs[key];
if (value !== model.get(key)) {
return false;
}
}
return true;
});
};
ClientCollection.prototype.getFromAll = function(obj) {
var id;
if (obj == null) {
return void 0;
}
id = obj.id || obj.cid || obj;
return this._byId[id] || _.findWhere(this.origModels, {
id: id
});
};
ClientCollection.prototype.eachAll = function() {
var _ref, _ref1;
return (_ref1 = _.each).call.apply(_ref1, [_, (_ref = this.origModels) != null ? _ref : this.models].concat(__slice.call(arguments)));
};
return ClientCollection;
})(Backbone.Paginator.clientPager);
}).call(this);
(function() {
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
__hasProp = {}.hasOwnProperty,
__extends = 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; };
this.Teeble.ServerCollection = (function(_super) {
__extends(ServerCollection, _super);
function ServerCollection() {
this.pager = __bind(this.pager, this);
this.setSort = __bind(this.setSort, this);
this.previousPage = __bind(this.previousPage, this);
this.nextPage = __bind(this.nextPage, this);
this.initialize = __bind(this.initialize, this);
return ServerCollection.__super__.constructor.apply(this, arguments);
}
ServerCollection.prototype.sortDirections = {};
ServerCollection.prototype.default_paginator_core = {
dataType: 'json',
url: function() {
return this.url();
}
};
ServerCollection.prototype.default_paginator_ui = {
firstPage: 1,
currentPage: 1,
perPage: 10,
pagesInRange: 3
};
ServerCollection.prototype.default_server_api = {
'offset': function() {
return (this.currentPage - 1) * this.perPage;
},
'limit': function() {
return this.perPage;
}
};
ServerCollection.prototype.initialize = function() {
this.paginator_ui = _.extend({}, this.default_paginator_ui, this.paginator_ui);
this.paginator_core = _.extend({}, this.default_paginator_core, this.paginator_core);
this.server_api = _.extend({}, this.default_server_api, this.server_api);
this.on('reset', this.info);
return ServerCollection.__super__.initialize.apply(this, arguments);
};
ServerCollection.prototype.nextPage = function(options) {
if (this.currentPage < this.information.totalPages) {
return this.promise = this.requestNextPage(options);
}
};
ServerCollection.prototype.previousPage = function(options) {
if (this.currentPage > 1) {
return this.promise = this.requestPreviousPage(options);
}
};
ServerCollection.prototype.setSort = function(column, direction) {
if (column !== void 0 && direction !== void 0) {
this.lastSortColumn = this.sortColumn;
this.sortColumn = column;
this.sortDirection = direction;
this.pager();
return this.info();
}
};
ServerCollection.prototype.pager = function(options) {
var _ref;
if (options == null) {
options = {};
}
if (this.lastSortColumn !== this.sortColumn && (this.sortColumn != null)) {
this.currentPage = 1;
this.lastSortColumn = this.sortColumn;
}
if ((_ref = options.reset) == null) {
options.reset = true;
}
ServerCollection.__super__.pager.call(this, options);
return this.info();
};
return ServerCollection;
})(Backbone.Paginator.requestPager);
}).call(this);
(function() {
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
__hasProp = {}.hasOwnProperty,
__extends = 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; };
this.Teeble.SortbarHeaderView = (function(_super) {
__extends(SortbarHeaderView, _super);
function SortbarHeaderView() {
this.sort = __bind(this.sort, this);
this.sortFieldChange = __bind(this.sortFieldChange, this);
this.sortBarChange = __bind(this.sortBarChange, this);
return SortbarHeaderView.__super__.constructor.apply(this, arguments);
}
SortbarHeaderView.prototype.events = {
'change .sortbar-column': 'sortBarChange',
'change .sortbar-field-select': 'sortFieldChange',
'click .sort-reverser': 'sort'
};
SortbarHeaderView.prototype.sortBarChange = function(e) {
var $this, column, existing, oldValue, value;
$this = this.$(e.currentTarget);
column = ~~($this.attr('data-column'));
value = $this.val();
oldValue = this.collection.sortbarColumns[column];
existing = _.indexOf(this.collection.sortbarColumns, value);
if (existing >= 0) {
this.collection.sortbarColumns[existing] = oldValue;
}
this.collection.sortbarColumns[column] = value;
this.renderer.update_template();
this.render();
return this.collection.trigger('reset');
};
SortbarHeaderView.prototype.sortFieldChange = function(e) {
return this.sort(e, 'asc');
};
SortbarHeaderView.prototype.sort = function(e, direction) {
var $sortReverser, currentSort;
if (e != null) {
e.preventDefault();
}
$sortReverser = this.$('.sort-reverser');
if ($sortReverser.hasClass('reverse') || direction) {
$sortReverser.removeClass('reverse');
direction = 'asc';
} else {
$sortReverser.addClass('reverse');
direction = 'desc';
}
currentSort = this.$('.sortbar-field-select').val();
return this.collection.setSort(currentSort, direction);
};
return SortbarHeaderView;
})(this.Teeble.HeaderView);
}).call(this);
(function() {
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
__hasProp = {}.hasOwnProperty,
__extends = 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; };
this.Teeble.SortbarRenderer = (function(_super) {
__extends(SortbarRenderer, _super);
function SortbarRenderer() {
this.update_template = __bind(this.update_template, this);
this._generate_template = __bind(this._generate_template, this);
this._getExtraData = __bind(this._getExtraData, this);
return SortbarRenderer.__super__.constructor.apply(this, arguments);
}
SortbarRenderer.prototype._getExtraData = function() {
return {
sortbarColumns: this.options.collection.sortbarColumns,
sortbarSortOptions: this.options.collection.sortbarSortOptions,
sortbarColumnOptions: this.options.collection.sortbarColumnOptions,
sortColumn: this.options.collection.sortColumn,
sortDirection: this.options.collection.sortDirection,
partials: this.partials
};
};
SortbarRenderer.prototype._generate_template = function(name, columns, wrap) {
var column, str, _i, _len, _ref;
str = SortbarRenderer.__super__._generate_template.call(this, name, columns);
_ref = this.options.collection.sortbarColumns;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
column = _ref[_i];
str += "<%= " + column + " %> | ";
}
if (wrap) {
str = "<" + wrap + ">" + str + "" + wrap + ">";
}
return str;
};
SortbarRenderer.prototype.update_template = function(partials) {
var columns;
if (partials == null) {
partials = this.partials;
}
columns = this.generate_columns();
this.header_template = "\n | \n Sorted by: \n \n \n \n reverse<% } %>\">\n \n \n \n Showing: \n | \n <% for(var i = 0; i < sortbarColumns.length; i++) { %>\n \n | \n <% } %>\n
";
this.footer_template = this._generate_template('footer', columns, 'tr');
this.row_template = this._generate_template('cell', columns);
this.table_empty_template = "{{message}} | ";
this.row_template_compiled = null;
this.header_template_compiled = null;
this.footer_template_compiled = null;
return this.table_empty_template_compiled = null;
};
return SortbarRenderer;
})(this.Teeble.TableRenderer);
}).call(this);