123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- define([ "require", "utils/Utils", "lossless-json", "marionette", "backgrid", "asBreadcrumbs", "jquery-placeholder" ], function(require, Utils, LosslessJSON) {
- "use strict";
- Backbone.$.ajaxSetup({
- cache: !1
- });
- var oldBackboneSync = Backbone.sync;
- Backbone.sync = function(method, model, options) {
- var that = this;
- if (options.queryParam) {
- var generateQueryParam = $.param(options.queryParam);
- options.url.indexOf("?") !== -1 ? options.url = options.url + "&" + generateQueryParam : options.url = options.url + "?" + generateQueryParam;
- }
- return oldBackboneSync.apply(this, [ method, model, _.extend(options, {
- error: function(response) {
- Utils.defaultErrorHandler(that, response, options), that.trigger("error", that, response),
- options.cust_error && options.cust_error(that, response);
- },
- converters: _.extend($.ajaxSettings.converters, {
- "text json": function(data) {
- try {
- return LosslessJSON.parse(data, function(k, v) {
- try {
- return v.isLosslessNumber ? v.valueOf() : v;
- } catch (err) {
- return v.value;
- }
- });
- } catch (err) {
- if (!("syntaxerror" === err.name.toLowerCase() && data.length > 0 && data.indexOf("<html") > -1)) return $.parseJSON(data);
- var redirectUrl = window.location.origin + window.location.pathname;
- window.location = redirectUrl.substring(0, redirectUrl.lastIndexOf("/"));
- }
- }
- })
- }) ]);
- }, String.prototype.trunc = String.prototype.trunc || function(n) {
- return this.length > n ? this.substr(0, n - 1) + "..." : this;
- }, String.prototype.capitalize = function() {
- return this.charAt(0).toUpperCase() + this.slice(1);
- }, Backgrid.Column.prototype.defaults.sortType = "toggle";
- var cellInit = Backgrid.Cell.prototype.initialize;
- Backgrid.Cell.prototype.initialize = function() {
- cellInit.apply(this, arguments);
- var className = this.column.get("className"), rowClassName = this.column.get("rowClassName");
- rowClassName && this.$el.addClass(rowClassName), className && this.$el.addClass(className);
- }, Backgrid.HeaderRow = Backgrid.HeaderRow.extend({
- render: function() {
- var that = this;
- return Backgrid.HeaderRow.__super__.render.apply(this, arguments), _.each(this.columns.models, function(modelValue) {
- var elAttr = modelValue.get("elAttr"), elAttrObj = null;
- elAttr && (_.isFunction(elAttr) ? elAttrObj = elAttr(modelValue) : _.isObject(elAttr) && (elAttrObj = _.isArray(elAttr) ? elAttr : [ elAttr ]),
- _.each(elAttrObj, function(val) {
- that.$el.find("." + modelValue.get("name")).data(val);
- })), modelValue.get("width") && that.$el.find("." + modelValue.get("name")).css("min-width", modelValue.get("width") + "px"),
- modelValue.get("fixWidth") && that.$el.find("." + modelValue.get("name")).css("width", modelValue.get("fixWidth") + "px"),
- modelValue.get("toolTip") && that.$el.find("." + modelValue.get("name")).attr("title", modelValue.get("toolTip")),
- modelValue.get("headerClassName") && that.$el.find("." + modelValue.get("name").replace(".", "\\.")).addClass(modelValue.get("headerClassName"));
- }), this;
- }
- });
- var BackgridHeaderInitializeMethod = (Backgrid.HtmlCell = Backgrid.Cell.extend({
- className: "html-cell",
- render: function() {
- this.$el.empty();
- var rawValue = this.model.get(this.column.get("name")), formattedValue = this.formatter.fromRaw(rawValue, this.model);
- return this.$el.append(formattedValue), this.delegateEvents(), this;
- }
- }), function(options) {
- this.columns = options.columns, this.columns instanceof Backbone.Collection || (this.columns = new Backgrid.Columns(this.columns)),
- this.createHeaderRow(), this.listenTo(this.columns, "sort", _.bind(function() {
- this.createHeaderRow(), this.render();
- }, this));
- }), BackgridHeaderCreateHeaderRowMethod = function() {
- this.row = new Backgrid.HeaderRow({
- columns: this.columns,
- collection: this.collection
- });
- }, BackgridHeaderRenderMethod = function() {
- return this.$el.empty(), this.$el.append(this.row.render().$el), this.delegateEvents(),
- this.trigger("backgrid:header:rendered", this), this;
- };
- Backgrid.ExpandableCell = Backgrid.Cell.extend({
- accordion: !0,
- toggle: '<i style="cursor: pointer;" class="glyphicon toggle pull-left"></i>',
- toggleClass: "toggle",
- toggleExpandedClass: "fa fa-angle-down",
- toggleCollapsedClass: "fa fa-angle-right",
- trClass: "expandable",
- tdClass: "expandable-content",
- events: {
- click: "setToggle"
- },
- initialize: function(options) {
- options.accordion && (this.accordion = options.accordion), this.column = options.column,
- this.column instanceof Backgrid.Column || (this.column = new Backgrid.Column(this.column));
- var column = this.column, model = this.model, $el = this.$el;
- Backgrid.callByNeed(column.renderable(), column, model) && $el.addClass("renderable");
- },
- render: function() {
- this.$el.empty();
- var isExpand = !0;
- return this.column.get("isExpandVisible") && (isExpand = this.column.get("isExpandVisible")(this.$el, this.model)),
- this.$toggleEl = $(this.toggle).addClass(this.toggleClass).addClass(this.toggleCollapsedClass),
- this.$toggleEl = isExpand ? this.$toggleEl : this.$toggleEl.addClass("noToggle"),
- this.$el.append(this.$toggleEl), this.delegateEvents(), this;
- },
- setToggle: function() {
- var detailsRow = this.$el.data("details"), toggle = this.$toggleEl;
- if (!detailsRow && this.$toggleEl.hasClass("noToggle")) return !1;
- if (detailsRow) $(detailsRow).remove(), this.$el.data("details", null), toggle.removeClass(this.toggleExpandedClass).addClass(this.toggleCollapsedClass); else {
- if (this.accordion) {
- var table = this.$el.closest("table");
- $("." + this.toggleClass, table).filter("." + this.toggleExpandedClass).click();
- }
- var renderableColumns = this.$el.closest("table").find("th.renderable").length, isRenderable = !1, cellClass = this.tdClass;
- Backgrid.callByNeed(this.column.renderable(), this.column, this.model) && (isRenderable = !0,
- cellClass += " renderable"), detailsRow = $('<tr class="' + this.trClass + '"></td><td class="' + cellClass + '" colspan="' + (renderableColumns - 1) + '"></td></tr>'),
- this.$el.closest("tr").after(detailsRow), this.column.get("expand")(detailsRow.find("td." + this.tdClass), this.model),
- this.$el.data("details", detailsRow), toggle.removeClass(this.toggleCollapsedClass).addClass(this.toggleExpandedClass);
- }
- return this;
- }
- }), Backgrid.Header.prototype.initialize = BackgridHeaderInitializeMethod, Backgrid.Header.prototype.createHeaderRow = BackgridHeaderCreateHeaderRowMethod,
- Backgrid.Header.prototype.render = BackgridHeaderRenderMethod;
- var UriCell = Backgrid.UriCell = Backgrid.Cell.extend({
- className: "uri-cell",
- title: null,
- target: "_blank",
- initialize: function(options) {
- UriCell.__super__.initialize.apply(this, arguments), this.title = options.title || this.title,
- this.target = options.target || this.target;
- },
- render: function() {
- this.$el.empty();
- var rawValue = this.model.get(this.column.get("name")), href = _.isFunction(this.column.get("href")) ? this.column.get("href")(this.model) : this.column.get("href"), klass = this.column.get("klass"), formattedValue = this.formatter.fromRaw(rawValue, this.model);
- if (this.$el.append($("<a>", {
- tabIndex: -1,
- href: href,
- title: this.title || formattedValue,
- class: klass
- }).text(formattedValue)), this.column.has("iconKlass")) {
- var iconKlass = this.column.get("iconKlass"), iconTitle = this.column.get("iconTitle");
- this.$el.find("a").append('<i class="' + iconKlass + '" title="' + iconTitle + '"></i>');
- }
- return this.delegateEvents(), this;
- }
- });
- Backgrid.HeaderHTMLDecodeCell = Backgrid.HeaderCell.extend({
- initialize: function(options) {
- Backgrid.HeaderCell.prototype.initialize.apply(this, arguments), this.name = _.unescape(this.column.get("label")),
- this.$el.addClass(this.name);
- },
- render: function() {
- return this.$el.empty(), this.$el.text(this.name), this.delegateEvents(), this;
- }
- });
- });
|