define([ "require", "backbone", "table-dragger", "hbs!tmpl/search/SearchResultLayoutView_tmpl", "modules/Modal", "models/VEntity", "utils/Utils", "utils/Globals", "collection/VSearchList", "models/VCommon", "utils/CommonViewFunction", "utils/Messages", "utils/Enums", "utils/UrlLinks", "platform" ], function(require, Backbone, tableDragger, SearchResultLayoutViewTmpl, Modal, VEntity, Utils, Globals, VSearchList, VCommon, CommonViewFunction, Messages, Enums, UrlLinks, platform) {
"use strict";
var SearchResultLayoutView = Backbone.Marionette.LayoutView.extend({
_viewName: "SearchResultLayoutView",
template: SearchResultLayoutViewTmpl,
regions: {
RTagLayoutView: "#r_tagLayoutView",
RSearchLayoutView: "#r_searchLayoutView",
REntityTableLayoutView: "#r_searchResultTableLayoutView",
RSearchQuery: "#r_searchQuery"
},
ui: {
tagClick: '[data-id="tagClick"]',
termClick: '[data-id="termClick"]',
addTag: '[data-id="addTag"]',
addTerm: '[data-id="addTerm"]',
paginationDiv: '[data-id="paginationDiv"]',
previousData: "[data-id='previousData']",
nextData: "[data-id='nextData']",
pageRecordText: "[data-id='pageRecordText']",
addAssignTag: "[data-id='addAssignTag']",
addAssignTerm: "[data-id='addAssignTerm']",
createEntity: "[data-id='createEntity']",
checkDeletedEntity: "[data-id='checkDeletedEntity']",
checkSubClassification: "[data-id='checkSubClassification']",
checkSubType: "[data-id='checkSubType']",
colManager: "[data-id='colManager']",
containerCheckBox: "[data-id='containerCheckBox']",
columnEmptyInfo: "[data-id='columnEmptyInfo']",
showPage: "[data-id='showPage']",
gotoPage: "[data-id='gotoPage']",
gotoPagebtn: "[data-id='gotoPagebtn']",
activePage: "[data-id='activePage']"
},
templateHelpers: function() {
return {
entityCreate: Globals.entityCreate,
searchType: this.searchType,
fromView: this.fromView,
isGlossaryView: "glossary" == this.fromView,
isSearchTab: Utils.getUrlState.isSearchTab()
};
},
events: function() {
var events = {}, that = this;
return events["click " + this.ui.tagClick] = function(e) {
var scope = $(e.currentTarget);
"i" == e.target.nodeName.toLocaleLowerCase() ? this.onClickTagCross(e) : this.triggerUrl({
url: "#!/tag/tagAttribute/" + scope.text(),
urlParams: null,
mergeBrowserUrl: !1,
trigger: !0,
updateTabState: null
});
}, events["click " + this.ui.termClick] = function(e) {
var scope = $(e.currentTarget);
"i" == e.target.nodeName.toLocaleLowerCase() ? this.onClickTermCross(e) : this.triggerUrl({
url: "#!/glossary/" + scope.find("i").data("termguid"),
urlParams: {
gType: "term",
viewType: "term",
fromView: "entity"
},
mergeBrowserUrl: !1,
trigger: !0,
updateTabState: null
});
}, events["keyup " + this.ui.gotoPage] = function(e) {
var code = e.which;
parseInt(e.currentTarget.value);
e.currentTarget.value ? that.ui.gotoPagebtn.attr("disabled", !1) : that.ui.gotoPagebtn.attr("disabled", !0),
13 == code && e.currentTarget.value && that.gotoPagebtn();
}, events["change " + this.ui.showPage] = "changePageLimit", events["click " + this.ui.gotoPagebtn] = "gotoPagebtn",
events["click " + this.ui.addTag] = "onClickAddTag", events["click " + this.ui.addTerm] = "onClickAddTermBtn",
events["click " + this.ui.addAssignTag] = "onClickAddTag", events["click " + this.ui.addAssignTerm] = "onClickAddTermBtn",
events["click " + this.ui.nextData] = "onClicknextData", events["click " + this.ui.previousData] = "onClickpreviousData",
events["click " + this.ui.createEntity] = "onClickCreateEntity", events["click " + this.ui.checkDeletedEntity] = "onCheckExcludeIncludeResult",
events["click " + this.ui.checkSubClassification] = "onCheckExcludeIncludeResult",
events["click " + this.ui.checkSubType] = "onCheckExcludeIncludeResult", events;
},
initialize: function(options) {
if (_.extend(this, _.pick(options, "value", "guid", "initialView", "isTypeTagNotExists", "classificationDefCollection", "entityDefCollection", "typeHeaders", "searchVent", "enumDefCollection", "tagCollection", "searchTableColumns", "isTableDropDisable", "fromView", "glossaryCollection", "termName", "businessMetadataDefCollection", "profileDBView")),
this.entityModel = new VEntity(), this.searchCollection = new VSearchList(), this.limit = 25,
this.asyncFetchCounter = 0, this.offset = 0, this.bindEvents(), this.multiSelectEntity = [],
this.searchType = "基础查询", this.columnOrder = null, this.defaultColumns = [ "selected", "name", "description", "typeName", "owner", "tag", "term" ],
this.value) {
if (this.value.searchType && "dsl" == this.value.searchType && (this.searchType = "高级查询"),
this.value.pageLimit) {
var pageLimit = parseInt(this.value.pageLimit, 10);
_.isNaN(pageLimit) || 0 == pageLimit || pageLimit <= -1 ? (this.value.pageLimit = this.limit,
this.triggerUrl()) : this.limit = pageLimit;
}
if (this.value.pageOffset) {
var pageOffset = parseInt(this.value.pageOffset, 10);
_.isNaN(pageOffset) || pageLimit <= -1 ? (this.value.pageOffset = this.offset, this.triggerUrl()) : this.offset = pageOffset;
}
}
"IE" === platform.name && (this.isTableDropDisable = !0);
},
bindEvents: function() {
var that = this;
this.onClickLoadMore(), this.listenTo(this.searchCollection, "backgrid:selected", function(model, checked) {
this.multiSelectEntity = [], checked === !0 ? model.set("isEnable", !0) : model.set("isEnable", !1),
this.searchCollection.find(function(item) {
if (item.get("isEnable")) {
var obj = item.toJSON();
that.multiSelectEntity.push({
id: obj.guid,
model: obj
});
}
}), this.updateMultiSelect();
}), this.listenTo(this.searchCollection, "error", function(model, response) {
this.hideLoader({
type: "error"
});
var responseJSON = response && response.responseJSON ? response.responseJSON : null, errorText = responseJSON && (responseJSON.errorMessage || responseJSON.message || responseJSON.error) || "无效表达式";
errorText && (Utils.notifyError({
content: errorText
}), this.$(".searchTable > .well").html("
" + _.escape(errorText) + ""));
}, this), this.listenTo(this.searchCollection, "state-changed", function(state) {
if (Utils.getUrlState.isSearchTab()) {
this.updateColumnList(state);
var excludeDefaultColumn = [];
this.value && this.value.type && (excludeDefaultColumn = _.difference(this.searchTableColumns[this.value.type], this.defaultColumns),
null === this.searchTableColumns[this.value.type] ? this.ui.columnEmptyInfo.show() : this.ui.columnEmptyInfo.hide()),
this.columnOrder = this.getColumnOrder(this.REntityTableLayoutView.$el.find(".colSort th.renderable")),
this.triggerUrl();
var attributes = this.searchCollection.filterObj.attributes;
excludeDefaultColumn && attributes && (excludeDefaultColumn.length > attributes.length || _.difference(excludeDefaultColumn, attributes).length) && this.fetchCollection(this.value);
}
}, this), this.listenTo(this.searchVent, "search:refresh", function(model, response) {
this.fetchCollection();
}, this), this.listenTo(this.searchCollection, "backgrid:sorted", function(model, response) {
this.checkTableFetch();
}, this);
},
onRender: function() {
if (this.checkEntityImage = {}, this.commonTableOptions = {
collection: this.searchCollection,
includePagination: !1,
includeFooterRecords: !1,
includeColumnManager: !(!Utils.getUrlState.isSearchTab() || !this.value || "basic" !== this.value.searchType || this.profileDBView),
includeOrderAbleColumns: !1,
includeSizeAbleColumns: !1,
includeTableLoader: !1,
includeAtlasTableSorting: !0,
showDefaultTableSorted: !0,
updateFullCollectionManually: !0,
columnOpts: {
opts: {
initialColumnsVisible: null,
saveState: !1
},
visibilityControlOpts: {
buttonTemplate: _.template("")
},
el: this.ui.colManager
},
gridOpts: {
emptyText: "没有找到记录!",
className: "table table-hover backgrid table-quickMenu colSort"
},
sortOpts: {
sortColumn: "name",
sortDirection: "ascending"
},
filterOpts: {},
paginatorOpts: {}
}, this.initialView) Globals.entityTypeConfList && this.$(".entityLink").show(),
this.isTypeTagNotExists && Utils.notifyError({
content: Messages.search.notExists
}); else {
var value = {};
this.value ? (value = this.value, value && value.includeDE && this.ui.checkDeletedEntity.prop("checked", !0),
value && value.excludeSC && this.ui.checkSubClassification.prop("checked", !0),
value && value.excludeST && this.ui.checkSubType.prop("checked", !0)) : value = {
query: null,
searchType: "basic"
}, this.updateColumnList(), this.value && this.searchTableColumns && null === this.searchTableColumns[this.value.type] ? this.ui.columnEmptyInfo.show() : this.ui.columnEmptyInfo.hide(),
this.fetchCollection(value, _.extend({
fromUrl: !0
}, this.value && this.value.pageOffset ? {
next: !0
} : null)), this.ui.showPage.select2({
data: _.sortBy(_.union([ 25, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500 ], [ this.limit ])),
tags: !0,
dropdownCssClass: "number-input",
multiple: !1
}), this.value && this.value.pageLimit && this.ui.showPage.val(this.limit).trigger("change", {
skipViewChange: !0
});
}
},
getColumnOrderWithPosition: function() {
var that = this;
return _.map(that.columnOrder, function(value, key) {
return key + "::" + value;
}).join(",");
},
triggerUrl: function(options) {
Utils.setUrl(_.extend({
url: Utils.getUrlState.getQueryUrl().queyParams[0],
urlParams: this.columnOrder ? _.extend(this.value, {
uiParameters: this.getColumnOrderWithPosition()
}) : this.value,
mergeBrowserUrl: !1,
trigger: !1,
updateTabState: !0
}, options));
},
updateMultiSelect: function() {
this.multiSelectEntity.length > 0 ? this.$(".multiSelectTag,.multiSelectTerm").show() : this.$(".multiSelectTag,.multiSelectTerm").hide();
},
updateColumnList: function(updatedList) {
if (updatedList) {
var listOfColumns = [];
_.map(updatedList, function(obj) {
obj.name;
obj.renderable && listOfColumns.push(obj.name);
}), listOfColumns = _.sortBy(listOfColumns), this.value.attributes = listOfColumns.length ? listOfColumns.join(",") : null,
this.value && this.value.type && this.searchTableColumns && (this.searchTableColumns[this.value.type] = listOfColumns.length ? listOfColumns : null);
} else this.value && this.value.type && this.searchTableColumns && this.value.attributes && (this.searchTableColumns[this.value.type] = this.value.attributes.split(","));
},
fetchCollection: function(value, options) {
var that = this, isPostMethod = this.value && "basic" === this.value.searchType, isSearchTab = Utils.getUrlState.isSearchTab(), tagFilters = null, entityFilters = null;
if (isSearchTab && (tagFilters = CommonViewFunction.attributeFilter.generateAPIObj(this.value.tagFilters),
entityFilters = CommonViewFunction.attributeFilter.generateAPIObj(this.value.entityFilters)),
isPostMethod && isSearchTab) var excludeDefaultColumn = this.value.type && this.searchTableColumns ? _.difference(this.searchTableColumns[this.value.type], this.defaultColumns) : null, filterObj = {
entityFilters: entityFilters,
tagFilters: tagFilters,
attributes: excludeDefaultColumn ? excludeDefaultColumn : null
};
this.showLoader(), Globals.searchApiCallRef && 1 === Globals.searchApiCallRef.readyState && Globals.searchApiCallRef.abort();
var apiObj = {
skipDefaultError: !0,
sort: !1,
success: function(dataOrCollection, response) {
if (!that.isDestroyed) {
Globals.searchApiCallRef = void 0;
var isFirstPage = 0 === that.offset, dataLength = 0, goToPage = that.ui.gotoPage.val();
if (that.ui.gotoPage.val(""), that.ui.gotoPage.parent().removeClass("has-error"),
that.ui.gotoPagebtn.prop("disabled", !0), that.ui.pageRecordText instanceof jQuery) {
if (dataLength = isPostMethod && dataOrCollection && dataOrCollection.entities ? dataOrCollection.entities.length : dataOrCollection.length,
!dataLength && that.offset >= that.limit && (options && options.next || goToPage) && options && !options.fromUrl) {
that.hideLoader();
var pageNumber = that.activePage + 1;
return goToPage ? (pageNumber = goToPage, that.offset = (that.activePage - 1) * that.limit) : (that.finalPage = that.activePage,
that.ui.nextData.attr("disabled", !0), that.offset = that.offset - that.limit),
that.value && (that.value.pageOffset = that.offset, that.triggerUrl()), void Utils.notifyInfo({
html: !0,
content: Messages.search.noRecordForPage + "" + Utils.getNumberSuffix({
number: pageNumber,
sup: !0
}) + " 页"
});
}
if (isPostMethod && (Utils.findAndMergeRefEntity({
attributeObject: dataOrCollection.entities,
referredEntities: dataOrCollection.referredEntities
}), that.searchCollection.reset(dataOrCollection.entities, {
silent: !0
}), that.searchCollection.fullCollection.reset(dataOrCollection.entities, {
silent: !0
})), dataLength < that.limit ? that.ui.nextData.attr("disabled", !0) : that.ui.nextData.attr("disabled", !1),
isFirstPage && (!dataLength || dataLength < that.limit) ? that.ui.paginationDiv.hide() : that.ui.paginationDiv.show(),
isFirstPage ? (that.ui.previousData.attr("disabled", !0), that.pageFrom = 1, that.pageTo = that.limit) : that.ui.previousData.attr("disabled", !1),
options && options.next ? (that.pageTo = that.offset + that.limit, that.pageFrom = that.offset + 1) : !isFirstPage && options && options.previous && (that.pageTo = that.pageTo - that.limit,
that.pageFrom = that.pageTo - that.limit + 1), that.ui.pageRecordText.html("显示 " + that.searchCollection.models.length + " 条记录 从 " + that.pageFrom + " - " + that.pageTo),
that.activePage = Math.round(that.pageTo / that.limit), that.ui.activePage.attr("title", "Page " + that.activePage),
that.ui.activePage.text(that.activePage), that.renderTableLayoutView(), that.multiSelectEntity = [],
that.updateMultiSelect(), dataLength > 0 && that.$(".searchTable").removeClass("noData"),
Utils.getUrlState.isSearchTab() && value && !that.profileDBView) {
var searchString = '搜索条件:' + CommonViewFunction.generateQueryOfFilter(that.value) + "的结果为:";
Globals.entityCreate && Globals.entityTypeConfList && Utils.getUrlState.isSearchTab() && (searchString += '如果你没有在搜索结果中找到目标实体,那么你可以创建新实体
'),
that.$(".searchResult").html(searchString);
}
}
}
},
silent: !0,
reset: !0
};
if (this.value) var checkBoxValue = {
excludeDeletedEntities: !this.value.includeDE,
includeSubClassifications: !this.value.excludeSC,
includeSubTypes: !this.value.excludeST,
includeClassificationAttributes: !0
};
if (value) {
if (value.searchType && (this.searchCollection.url = UrlLinks.searchApiUrl(value.searchType)),
_.extend(this.searchCollection.queryParams, {
limit: this.limit,
offset: this.offset,
query: _.trim(value.query),
typeName: value.type || null,
classification: value.tag || null,
termName: value.term || null
}), this.profileDBView && value.typeName && value.guid) {
var profileParam = {};
profileParam.guid = value.guid, profileParam.relation = "hive_db" === value.typeName ? "__hive_table.db" : "__hbase_table.namespace",
profileParam.sortBy = "name", profileParam.sortOrder = "ASCENDING", _.extend(this.searchCollection.queryParams, profileParam);
}
isPostMethod ? (this.searchCollection.filterObj = _.extend({}, filterObj), apiObj.data = _.extend(checkBoxValue, filterObj, _.pick(this.searchCollection.queryParams, "query", "excludeDeletedEntities", "limit", "offset", "typeName", "classification", "termName")),
Globals.searchApiCallRef = this.searchCollection.getBasicRearchResult(apiObj)) : (apiObj.data = null,
this.searchCollection.filterObj = null, this.profileDBView && _.extend(this.searchCollection.queryParams, checkBoxValue),
Globals.searchApiCallRef = this.searchCollection.fetch(apiObj));
} else _.extend(this.searchCollection.queryParams, {
limit: this.limit,
offset: this.offset
}), isPostMethod ? (apiObj.data = _.extend(checkBoxValue, filterObj, _.pick(this.searchCollection.queryParams, "query", "excludeDeletedEntities", "limit", "offset", "typeName", "classification", "termName")),
Globals.searchApiCallRef = this.searchCollection.getBasicRearchResult(apiObj)) : (apiObj.data = null,
this.profileDBView && _.extend(this.searchCollection.queryParams, checkBoxValue),
Globals.searchApiCallRef = this.searchCollection.fetch(apiObj));
},
tableRender: function(options) {
var that = this, savedColumnOrder = options.order, TableLayout = options.table, columnCollection = Backgrid.Columns.extend({
sortKey: "displayOrder",
className: "my-awesome-css-animated-grid",
comparator: function(item) {
return item.get(this.sortKey) || 999;
},
setPositions: function() {
return _.each(this.models, function(model, index) {
model.set("displayOrder", (null == savedColumnOrder ? index : parseInt(savedColumnOrder[model.get("label")])) + 1, {
silent: !0
});
}), this;
}
}), columns = new columnCollection(that.searchCollection.dynamicTable ? that.getDaynamicColumns(that.searchCollection.toJSON()) : that.getFixedDslColumn());
if (columns.setPositions().sort(), "Advanced Search" == this.searchType && columns.length && that.searchCollection.length) {
var tableColumnNames = Object.keys(that.searchCollection.toJSON()[0]);
that.commonTableOptions.sortOpts = {
sortColumn: tableColumnNames[0],
sortDirection: "ascending"
};
}
var table = new TableLayout(_.extend({}, that.commonTableOptions, {
columns: columns
}));
if (0 === table.collection.length && that.$(".searchTable").addClass("noData"),
that.REntityTableLayoutView && (that.value || (that.value = that.options.value),
that.REntityTableLayoutView.show(table), "dsl" !== that.value.searchType ? that.ui.containerCheckBox.show() : that.ui.containerCheckBox.hide(),
that.$(".ellipsis-with-margin .inputAssignTag").hide(), table.trigger("grid:refresh"),
that.isTableDropDisable !== !0)) {
var tableDropFunction = function(from, to, el) {
tableDragger(document.querySelector(".colSort")).destroy(), that.columnOrder = that.getColumnOrder(el.querySelectorAll("th.renderable")),
that.triggerUrl(), that.tableRender({
order: that.columnOrder,
table: TableLayout
}), that.checkTableFetch();
};
that.REntityTableLayoutView.$el.find(".colSort thead tr th:not(.select-all-header-cell)").addClass("dragHandler"),
tableDragger(document.querySelector(".colSort"), {
dragHandler: ".dragHandler"
}).on("drop", tableDropFunction);
}
},
renderTableLayoutView: function(col) {
var that = this;
require([ "utils/TableLayout" ], function(TableLayout) {
if (that.value.uiParameters) var savedColumnOrder = _.object(that.value.uiParameters.split(",").map(function(a) {
return a.split("::");
}));
that.tableRender({
order: savedColumnOrder,
table: TableLayout
}), that.checkTableFetch();
});
},
getColumnOrder: function(arr) {
for (var obj = {}, i = 0; i < arr.length; ++i) {
var innerText = arr[i].innerText.trim();
obj["" == innerText ? "Select" : innerText] = i;
}
return obj;
},
checkTableFetch: function() {
this.asyncFetchCounter <= 0 && (this.hideLoader(), Utils.generatePopover({
el: this.$('[data-id="showMoreLess"]'),
contentClass: "popover-tag-term",
viewFixedPopover: !0,
popoverOptions: {
container: null,
content: function() {
return $(this).find(".popup-tag-term").children().clone();
}
}
}));
},
getFixedDslColumn: function() {
var that = this, columnToShow = null, col = {};
if (this.value = "glossary" === this.fromView ? this.value : Utils.getUrlState.getQueryParams() || this.value,
this.value && "basic" === this.value.searchType && this.searchTableColumns && void 0 !== this.searchTableColumns[this.value.type] && (columnToShow = null == this.searchTableColumns[this.value.type] ? [] : this.searchTableColumns[this.value.type]),
col.Check = {
name: "selected",
label: "选择",
cell: "select-row",
resizeable: !1,
orderable: !1,
renderable: !columnToShow || _.contains(columnToShow, "selected"),
headerCell: "select-all"
}, col.name = {
label: this.value && this.profileDBView ? "表格名称" : "名称",
cell: "html",
editable: !1,
resizeable: !0,
orderable: !1,
renderable: !0,
className: "searchTableName",
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
var obj = model.toJSON(), nameHtml = "", name = Utils.getName(obj);
if (obj.attributes && void 0 !== obj.attributes.serviceType) void 0 === Globals.serviceTypeMap[obj.typeName] && (Globals.serviceTypeMap[obj.typeName] = obj.attributes ? obj.attributes.serviceType : null); else if (void 0 === Globals.serviceTypeMap[obj.typeName] && that.entityDefCollection) {
var defObj = that.entityDefCollection.fullCollection.find({
name: obj.typeName
});
defObj && (Globals.serviceTypeMap[obj.typeName] = defObj.get("serviceType"));
}
obj.serviceType = Globals.serviceTypeMap[obj.typeName], nameHtml = obj.guid ? "-1" == obj.guid ? '' + name + "" : '' + name + "" : '' + name + "",
obj.status && Enums.entityStateReadOnly[obj.status] && (nameHtml += '',
nameHtml = '' + nameHtml + "
");
var getImageData = function(options) {
var imagePath = options.imagePath, returnImgUrl = null;
that.checkEntityImage[model.get("guid")] = !1, $.ajax({
url: imagePath,
method: "get",
cache: !0
}).always(function(data, status, xhr) {
404 == data.status ? returnImgUrl = getImageData({
imagePath: Utils.getEntityIconPath({
entityData: obj,
errorUrl: imagePath
})
}) : data && (that.checkEntityImage[model.get("guid")] = imagePath, returnImgUrl = imagePath,
that.$("img[data-imgGuid='" + obj.guid + "']").removeClass("searchTableLogoLoader").attr("src", imagePath));
});
}, img = "";
return img = "",
void 0 == that.checkEntityImage[model.get("guid")] ? getImageData({
imagePath: Utils.getEntityIconPath({
entityData: obj
})
}) : 0 != that.checkEntityImage[model.get("guid")] && (img = ""),
img + nameHtml;
}
})
}, col.owner = {
label: "所有者",
cell: "String",
editable: !1,
resizeable: !0,
orderable: !0,
renderable: !0,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
var obj = model.toJSON();
if (obj && obj.attributes && obj.attributes.owner) return obj.attributes.owner;
}
})
}, this.value && this.profileDBView && (col.createTime = {
label: "创建时间",
cell: "Html",
editable: !1,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
var obj = model.toJSON();
return obj && obj.attributes && obj.attributes.createTime ? Utils.formatDate({
date: obj.attributes.createTime
}) : "-";
}
})
}), this.value && !this.profileDBView && (col.description = {
label: "描述",
cell: "String",
editable: !1,
resizeable: !0,
orderable: !0,
renderable: !0,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
var obj = model.toJSON();
if (obj && obj.attributes && obj.attributes.description) return obj.attributes.description;
}
})
}, col.typeName = {
label: "类型",
cell: "Html",
editable: !1,
resizeable: !0,
orderable: !0,
renderable: !columnToShow || _.contains(columnToShow, "typeName"),
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
var obj = model.toJSON();
if (obj && obj.typeName) return '' + obj.typeName + "";
}
})
}, this.getTagCol({
col: col,
columnToShow: columnToShow
}), _.contains([ "glossary" ], this.fromView) || this.getTermCol({
col: col,
columnToShow: columnToShow
}), this.value && "basic" === this.value.searchType)) {
var def = this.entityDefCollection.fullCollection.find({
name: this.value.type
}), systemAttr = [], businessMetadataAttr = [], businessAttributes = {};
if ("_ALL_ENTITY_TYPES" == this.value.type ? this.businessMetadataDefCollection.each(function(model) {
var sortedAttributes = model.get("attributeDefs") || null, name = model.get("name");
sortedAttributes && (sortedAttributes = _.sortBy(sortedAttributes, function(obj) {
return obj.name;
}), businessAttributes[name] = $.extend(!0, {}, sortedAttributes));
}) : businessAttributes = def ? $.extend(!0, {}, def.get("businessAttributeDefs")) || null : null,
def || Globals[this.value.type] || (this.value.tag ? Globals[this.value.tag] ? Globals[this.value.tag] : Globals[Enums.addOnClassification[0]] : void 0)) {
var attrObj = def ? Utils.getNestedSuperTypeObj({
data: def.toJSON(),
collection: this.entityDefCollection,
attrMerge: !0
}) : [];
this.value.type && (Globals[this.value.type] || Globals[Enums.addOnEntities[0]]) && (systemAttr = (Globals[this.value.type] || Globals[Enums.addOnEntities[0]]).attributeDefs),
this.value.tag && (Globals[this.value.tag] || Globals[Enums.addOnClassification[0]]) && (systemAttr = (Globals[this.value.tag] || Globals[Enums.addOnClassification[0]]).attributeDefs),
attrObj = attrObj.concat(systemAttr), businessAttributes && _.each(businessAttributes, function(businessMetadata, businessMetadataName) {
_.each(businessMetadata, function(attr, index) {
var attribute = attr;
attribute.isBusinessAttributes = !0, attribute.name = businessMetadataName + "." + attribute.name,
businessMetadataAttr.push(attribute);
});
}), attrObj = attrObj.concat(businessMetadataAttr), _.each(attrObj, function(obj, key) {
var key = obj.name, isRenderable = _.contains(columnToShow, key), isSortable = obj.typeName.search(/(array|map)/i) == -1;
return "name" == key || "description" == key || "owner" == key ? void (columnToShow && (col[key].renderable = isRenderable)) : void ("__historicalGuids" != key && "__classificationsText" != key && "__classificationNames" != key && "__propagatedClassificationNames" != key && (col[obj.name] = {
label: Enums.systemAttributes[obj.name] ? Enums.systemAttributes[obj.name] : _.escape(obj.isBusinessAttributes ? obj.name : obj.name.capitalize()),
cell: "Html",
headerCell: Backgrid.HeaderHTMLDecodeCell,
editable: !1,
resizeable: !0,
orderable: !0,
sortable: isSortable,
renderable: isRenderable,
headerClassName: obj.isBusinessAttributes ? "no-capitalize" : "",
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
var modelObj = model.toJSON();
if (modelObj && modelObj.attributes && !_.isUndefined(modelObj.attributes[key])) {
var tempObj = {
scope: that,
attributeDefs: [ obj ],
valueObject: {},
isTable: !1
};
if ("__labels" == key) {
var values = modelObj.attributes[key] ? modelObj.attributes[key].split("|") : null, valueOfArray = [];
if (values) return "" === values[values.length - 1] && values.pop(), "" === values[0] && values.shift(),
_.each(values, function(names) {
valueOfArray.push('' + _.escape(names) + "");
}), valueOfArray.join(" ");
}
if ("__customAttributes" == key) {
var customAttributes = modelObj.attributes[key] ? JSON.parse(modelObj.attributes[key]) : null, valueOfArray = [];
if (customAttributes) return _.each(Object.keys(customAttributes), function(value, index) {
valueOfArray.push('' + _.escape(value) + " : " + _.escape(Object.values(customAttributes)[index]) + "");
}), valueOfArray.join(" ");
}
tempObj.valueObject[key] = modelObj.attributes[key];
var tablecolumn = CommonViewFunction.propertyTable(tempObj);
if (_.isArray(modelObj.attributes[key])) {
var column = $("" + tablecolumn + "
");
return tempObj.valueObject[key].length > 2 && column.addClass("toggleList semi-collapsed").append("Show More"),
column;
}
return tablecolumn;
}
}
})
}));
});
}
}
return this.searchCollection.constructor.getTableCols(col, this.searchCollection);
},
onClickLoadMore: function() {
this.$el.on("click", "[data-id='load-more-columns']", function(event) {
event.stopPropagation(), event.stopImmediatePropagation();
var $this = $(this), $toggleList = $(this).parents(".toggleList");
$toggleList.length && ($toggleList.hasClass("semi-collapsed") ? ($toggleList.removeClass("semi-collapsed"),
$this.text("Show Less")) : ($toggleList.addClass("semi-collapsed"), $this.text("Show More")));
});
},
getDaynamicColumns: function(valueObj) {
var that = this, col = {};
if (valueObj && valueObj.length) {
var firstObj = _.first(valueObj);
_.each(_.keys(firstObj), function(key) {
col[key] = {
label: key.capitalize(),
cell: "Html",
editable: !1,
resizeable: !0,
orderable: !0,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
var modelObj = model.toJSON();
if ("name" == key) {
var nameHtml = "", name = _.escape(modelObj[key]);
return nameHtml = modelObj.guid ? '' + name + "" : '' + name + "",
modelObj.status && Enums.entityStateReadOnly[modelObj.status] ? (nameHtml += '',
'' + nameHtml + "
") : nameHtml;
}
if (modelObj && !_.isUndefined(modelObj[key])) {
var tempObj = {
scope: that,
valueObject: {},
isTable: !1
};
return tempObj.valueObject[key] = modelObj[key], CommonViewFunction.propertyTable(tempObj);
}
}
})
};
});
}
return this.searchCollection.constructor.getTableCols(col, this.searchCollection);
},
getTagCol: function(options) {
var columnToShow = options.columnToShow, col = options.col;
col && (col.tag = {
label: "分类",
cell: "Html",
editable: !1,
sortable: !1,
resizeable: !0,
orderable: !0,
renderable: !columnToShow || _.contains(columnToShow, "tag"),
className: "searchTag",
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
var obj = model.toJSON();
if ("-1" != obj.guid) return obj.status && Enums.entityStateReadOnly[obj.status] ? '' + CommonViewFunction.tagForTable(obj) : CommonViewFunction.tagForTable(obj);
}
})
});
},
getTermCol: function(options) {
var columnToShow = options.columnToShow, col = options.col;
col && (col.term = {
label: "术语",
cell: "Html",
editable: !1,
sortable: !1,
resizeable: !0,
orderable: !0,
renderable: !columnToShow || _.contains(columnToShow, "term"),
className: "searchTag",
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
var obj = model.toJSON();
if ("-1" != obj.guid) return obj.typeName && !_.startsWith(obj.typeName, "AtlasGlossary") ? obj.status && Enums.entityStateReadOnly[obj.status] ? '
' + CommonViewFunction.termForTable(obj) : CommonViewFunction.termForTable(obj) : void 0;
}
})
});
},
addTagModalView: function(guid, multiple) {
var that = this;
require([ "views/tag/AddTagModalView" ], function(AddTagModalView) {
new AddTagModalView({
guid: guid,
multiple: multiple,
callback: function() {
that.multiSelectEntity = [], that.$(".multiSelectTag,.multiSelectTerm").hide(),
that.fetchCollection(), that.searchVent && that.searchVent.trigger("entityList:refresh");
},
tagList: that.getTagList(guid, multiple),
showLoader: that.showLoader.bind(that),
hideLoader: that.hideLoader.bind(that),
collection: that.classificationDefCollection,
enumDefCollection: that.enumDefCollection
});
});
},
getTagList: function(guid, multiple) {
if (multiple && 0 !== multiple.length) return [];
var model = this.searchCollection.find(function(item) {
var obj = item.toJSON();
if (obj.guid === guid) return !0;
});
if (!model) return [];
var obj = model.toJSON();
return _.compact(_.map(obj.classifications, function(val) {
if (val.entityGuid == guid) return val.typeName;
}));
},
showLoader: function() {
this.$(".fontLoader:not(.for-ignore)").addClass("show"), this.$(".tableOverlay").addClass("show");
},
hideLoader: function(options) {
this.$(".fontLoader:not(.for-ignore)").removeClass("show"), options && "error" === options.type ? this.$(".ellipsis-with-margin,.pagination-box").hide() : this.$(".ellipsis-with-margin,.pagination-box").show(),
this.$(".tableOverlay").removeClass("show");
},
onClickAddTag: function(e) {
var guid = "", that = this, isTagMultiSelect = $(e.currentTarget).hasClass("multiSelectTag");
isTagMultiSelect && this.multiSelectEntity && this.multiSelectEntity.length ? that.addTagModalView(guid, this.multiSelectEntity) : (guid = that.$(e.currentTarget).data("guid"),
that.addTagModalView(guid));
},
assignTermModalView: function(glossaryCollection, obj) {
var that = this, terms = 0;
_.each(glossaryCollection.fullCollection.models, function(model) {
model.get("terms") && (terms += model.get("terms").length);
}), terms ? require([ "views/glossary/AssignTermLayoutView" ], function(AssignTermLayoutView) {
new AssignTermLayoutView({
guid: obj.guid,
multiple: obj.multiple,
associatedTerms: obj.associatedTerms,
callback: function() {
that.multiSelectEntity = [], that.$(".multiSelectTag,.multiSelectTerm").hide(),
that.fetchCollection();
},
glossaryCollection: glossaryCollection
});
}) : Utils.notifyInfo({
content: "There are no available terms"
});
},
onClickAddTermBtn: function(e) {
var that = this, entityGuid = $(e.currentTarget).data("guid"), obj = {
guid: entityGuid,
multiple: void 0,
associatedTerms: void 0
}, isTermMultiSelect = $(e.currentTarget).hasClass("multiSelectTerm");
that.assignTermModalView(this.glossaryCollection, obj), isTermMultiSelect && this.multiSelectEntity && this.multiSelectEntity.length ? obj.multiple = this.multiSelectEntity : entityGuid && (obj.associatedTerms = this.searchCollection.find({
guid: entityGuid
}).get("meanings"));
},
onClickTagCross: function(e) {
var that = this, tagName = $(e.target).data("name"), guid = $(e.target).data("guid"), entityGuid = $(e.target).data("entityguid"), assetName = $(e.target).data("assetname");
CommonViewFunction.deleteTag({
tagName: tagName,
guid: guid,
associatedGuid: guid != entityGuid ? entityGuid : null,
msg: "
确认删除 " + _.escape(tagName) + " 与 " + _.escape(assetName) + "的关联?
",
titleMessage: Messages.removeTag,
okText: "Remove",
showLoader: that.showLoader.bind(that),
hideLoader: that.hideLoader.bind(that),
callback: function() {
that.fetchCollection(), that.searchVent && that.searchVent.trigger("entityList:refresh");
}
});
},
onClickTermCross: function(e) {
var $el = $(e.target), termGuid = $el.data("termguid"), guid = $el.data("guid"), termName = $(e.currentTarget).text(), assetname = $el.data("assetname"), meanings = this.searchCollection.find({
guid: guid
}).get("meanings"), that = this, termObj = _.find(meanings, {
termGuid: termGuid
});
CommonViewFunction.removeCategoryTermAssociation({
termGuid: termGuid,
model: {
guid: guid,
relationshipGuid: termObj.relationGuid
},
collection: that.glossaryCollection,
msg: "
Remove: " + _.escape(termName) + " assignment from " + _.escape(assetname) + "?
",
titleMessage: Messages.glossary.removeTermfromEntity,
isEntityView: !0,
buttonText: "Remove",
callback: function() {
that.fetchCollection();
}
});
},
onClicknextData: function() {
this.offset = this.offset + this.limit, _.extend(this.searchCollection.queryParams, {
offset: this.offset
}), this.value && (this.value.pageOffset = this.offset, this.triggerUrl()), this.fetchCollection(null, {
next: !0
});
},
onClickpreviousData: function() {
this.offset = this.offset - this.limit, this.offset <= -1 && (this.offset = 0),
_.extend(this.searchCollection.queryParams, {
offset: this.offset
}), this.value && (this.value.pageOffset = this.offset, this.triggerUrl()), this.fetchCollection(null, {
previous: !0
});
},
onClickCreateEntity: function(e) {
var that = this;
$(e.currentTarget).blur(), require([ "views/entity/CreateEntityLayoutView" ], function(CreateEntityLayoutView) {
new CreateEntityLayoutView({
entityDefCollection: that.entityDefCollection,
typeHeaders: that.typeHeaders,
searchVent: that.searchVent,
callback: function() {
that.fetchCollection();
}
});
});
},
onCheckExcludeIncludeResult: function(e) {
var flag = !1, val = $(e.currentTarget).attr("data-value");
e.target.checked && (flag = !0), this.value && (this.value[val] = flag, this.triggerUrl()),
_.extend(this.searchCollection.queryParams, {
limit: this.limit,
offset: this.offset
}), this.fetchCollection();
},
changePageLimit: function(e, obj) {
if (!obj || obj && !obj.skipViewChange) {
var limit = parseInt(this.ui.showPage.val());
if (0 == limit) return void this.ui.showPage.data("select2").$container.addClass("has-error");
this.ui.showPage.data("select2").$container.removeClass("has-error"), this.limit = limit,
this.offset = 0, this.value && (this.value.pageLimit = this.limit, this.value.pageOffset = this.offset,
this.triggerUrl()), _.extend(this.searchCollection.queryParams, {
limit: this.limit,
offset: this.offset
}), this.fetchCollection();
}
},
gotoPagebtn: function(e) {
var goToPage = parseInt(this.ui.gotoPage.val());
if (!(_.isNaN(goToPage) || goToPage <= -1)) {
if (this.finalPage && this.finalPage < goToPage) return void Utils.notifyInfo({
html: !0,
content: Messages.search.noRecordForPage + "
" + Utils.getNumberSuffix({
number: goToPage,
sup: !0
}) + " 页"
});
this.offset = (goToPage - 1) * this.limit, this.offset <= -1 && (this.offset = 0),
_.extend(this.searchCollection.queryParams, {
limit: this.limit,
offset: this.offset
}), this.offset == this.pageFrom - 1 ? Utils.notifyInfo({
content: Messages.search.onSamePage
}) : (this.value && (this.value.pageOffset = this.offset, this.triggerUrl()), this.fetchCollection(null, {
next: !0
}));
}
}
});
return SearchResultLayoutView;
});