define([ "require", "backbone", "underscore", "utils/Utils", "utils/Globals", "backgrid-filter", "backgrid-paginator", "select2" ], function(require, Backbone, _, Utils) { "use strict"; var HeaderSearchCell = Backbone.View.extend({ tagName: "td", className: "backgrid-filter", template: _.template(' placeholder="<%- placeholder %>" <% } %> name="<%- name %>" <% if (style) { %> style="<%- style %>" <% } %> />'), placeholder: "", events: { "keyup input": "evKeyUp", submit: "search" }, initialize: function(options) { _.extend(this, _.pick(options, "column")), this.name = this.column.get("name"), void 0 !== this.column.get("reName") && (this.name = this.column.get("reName")); var collection = this.collection, self = this; Backbone.PageableCollection && collection instanceof Backbone.PageableCollection && (collection.queryParams[this.name] = function() { return self.searchBox().val() || null; }); }, render: function() { return this.$el.empty().append(this.template({ name: this.column.get("name"), placeholder: this.column.get("placeholder") || "Search", style: this.column.get("headerSearchStyle") })), this.$el.addClass("renderable"), this.delegateEvents(), this; }, evKeyUp: function(e) { var $clearButton = this.clearButton(), searchTerms = this.searchBox().val(); e.shiftKey || this.search(), searchTerms ? $clearButton.show() : $clearButton.hide(); }, searchBox: function() { return this.$el.find("input[type=search]"); }, clearButton: function() { return this.$el.find(".clear"); }, search: function() { var data = {}, collection = this.collection; Backbone.PageableCollection && collection instanceof Backbone.PageableCollection && "server" === collection.mode && (collection.state.currentPage = collection.state.firstPage); var query = this.searchBox().val(); query && (data[this.name] = query), collection.extraSearchParams && _.extend(data, collection.extraSearchParams), "server" === collection.mode ? collection.fetch({ data: data, reset: !0, success: function() {}, error: function(msResponse) { Utils.notifyError("Error", "Invalid input data!"); } }) : "client" === collection.mode; }, clear: function(e) { e && e.preventDefault(), this.searchBox().val(null), this.collection.fetch({ reset: !0 }); } }), HeaderFilterCell = Backbone.View.extend({ tagName: "td", className: "backgrid-filter", template: _.template(''), placeholder: "", events: { click: function() {} }, initialize: function(options) { _.extend(this, _.pick(options, "column")), this.name = this.column.get("name"), this.headerFilterOptions = this.column.get("headerFilterOptions"); }, render: function() { var that = this; return this.$el.empty().append(this.template({ name: this.column.get("name"), list: this.headerFilterOptions.filterList })), this.$el.find("select").select2({ allowClear: !0, closeOnSelect: !1, width: this.headerFilterOptions.filterWidth || "100%", height: this.headerFilterOptions.filterHeight || "20px" }), this.$el.addClass("renderable"), this.$el.find("select").on("click", function(e) { that.search(e.currentTarget.value); }), this; }, search: function(selectedOptionValue) { var query, data = {}, collection = this.collection; Backbone.PageableCollection && collection instanceof Backbone.PageableCollection && "server" === collection.mode && (collection.state.currentPage = collection.state.firstPage), "ALL" !== selectedOptionValue && (query = selectedOptionValue), query && (data[this.name] = query), collection.extraSearchParams && _.extend(data, collection.extraSearchParams), collection.fetch({ data: data, reset: !0 }); } }), HeaderRow = Backgrid.Row.extend({ requiredOptions: [ "columns", "collection" ], initialize: function() { Backgrid.Row.prototype.initialize.apply(this, arguments); }, makeCell: function(column, options) { var headerCell; switch (!0) { case column.has("canHeaderSearch") && column.get("canHeaderSearch") === !0: headerCell = new HeaderSearchCell({ column: column, collection: this.collection }); break; case column.has("canHeaderFilter") && column.get("canHeaderFilter") === !0: headerCell = new HeaderFilterCell({ column: column, collection: this.collection }); break; default: headerCell = new Backbone.View({ tagName: "td" }); } return headerCell; } }), Header = Backgrid.Header.extend({ initialize: function(options) { var args = Array.prototype.slice.apply(arguments); Backgrid.Header.prototype.initialize.apply(this, args), this.searchRow = new HeaderRow({ columns: this.columns, collection: this.collection }); }, render: function() { var args = Array.prototype.slice.apply(arguments); return Backgrid.Header.prototype.render.apply(this, args), this.$el.append(this.searchRow.render().$el), this; }, remove: function() { var args = Array.prototype.slice.apply(arguments); return Backgrid.Header.prototype.remove.apply(this, args), this.searchRow.remove.apply(this.searchRow, arguments), Backbone.View.prototype.remove.apply(this, arguments); } }); return Header; });