123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- 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('<input type="search" <% if (placeholder) { %> 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('<select > <option>ALL</option><% _.each(list, function(data) {if(_.isObject(data)){ %><option value="<%= data.value %>"><%= data.label %></option><% }else{ %><option value="<%= data %>"><%= data %></option><% } %><% }); %></select>'),
- 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;
- });
|