123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842 |
- 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("<center>" + _.escape(errorText) + "</center>"));
- }, 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("<button class='btn btn-action btn-sm pull-right'>选择字段 <i class='fa fa-caret-down'></i></button>")
- },
- 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 + "<b>" + Utils.getNumberSuffix({
- number: pageNumber,
- sup: !0
- }) + "</b> 页"
- });
- }
- 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("显示 <u>" + that.searchCollection.models.length + " 条记录</u> 从 " + 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 = '搜索条件:<span class="filterQuery">' + CommonViewFunction.generateQueryOfFilter(that.value) + "的结果为:</span>";
- Globals.entityCreate && Globals.entityTypeConfList && Utils.getUrlState.isSearchTab() && (searchString += '<p>如果你没有在搜索结果中找到目标实体,那么你可以<a href="javascript:void(0)" data-id="createEntity">创建新实体</a></p>'),
- 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 ? '<span title="' + name + '">' + name + "</span>" : '<a title="' + name + '" href="#!/detailPage/' + obj.guid + (that.fromView ? "?from=" + that.fromView : "") + '">' + name + "</a>" : '<span title="' + name + '">' + name + "</span>",
- obj.status && Enums.entityStateReadOnly[obj.status] && (nameHtml += '<button type="button" title="Deleted" class="btn btn-action btn-md deleteBtn"><i class="fa fa-trash"></i></button>',
- nameHtml = '<div class="readOnly readOnlyLink">' + nameHtml + "</div>");
- 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 = "<div><img data-imgGuid='" + obj.guid + "' class='searchTableLogoLoader'></div>",
- void 0 == that.checkEntityImage[model.get("guid")] ? getImageData({
- imagePath: Utils.getEntityIconPath({
- entityData: obj
- })
- }) : 0 != that.checkEntityImage[model.get("guid")] && (img = "<div><img data-imgGuid='" + obj.guid + "' src='" + that.checkEntityImage[model.get("guid")] + "'></div>"),
- 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 '<a title="Search ' + obj.typeName + '" href="#!/search/searchResult?query=' + obj.typeName + ' &searchType=dsl&dslChecked=true">' + obj.typeName + "</a>";
- }
- })
- }, 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('<span class="json-string"><a class="btn btn-action btn-sm btn-blue btn-icon" ><span>' + _.escape(names) + "</span></a></span>");
- }), 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('<span class="json-string"><a class="btn btn-action btn-sm btn-blue btn-icon" ><span><span>' + _.escape(value) + "</span> : <span>" + _.escape(Object.values(customAttributes)[index]) + "</span></span></a></span>");
- }), valueOfArray.join(" ");
- }
- tempObj.valueObject[key] = modelObj.attributes[key];
- var tablecolumn = CommonViewFunction.propertyTable(tempObj);
- if (_.isArray(modelObj.attributes[key])) {
- var column = $("<div>" + tablecolumn + "</div>");
- return tempObj.valueObject[key].length > 2 && column.addClass("toggleList semi-collapsed").append("<span><a data-id='load-more-columns'>Show More</a></span>"),
- 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 ? '<a title="' + name + '" href="#!/detailPage/' + modelObj.guid + (that.fromView ? "?from=" + that.fromView : "") + '">' + name + "</a>" : '<span title="' + name + '">' + name + "</span>",
- modelObj.status && Enums.entityStateReadOnly[modelObj.status] ? (nameHtml += '<button type="button" title="Deleted" class="btn btn-action btn-md deleteBtn"><i class="fa fa-trash"></i></button>',
- '<div class="readOnly readOnlyLink">' + nameHtml + "</div>") : 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] ? '<div class="readOnly">' + 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] ? '<div class="readOnly">' + 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: "<div class='ellipsis-with-margin'>确认删除 <b>" + _.escape(tagName) + "</b> 与 <b>" + _.escape(assetName) + "的关联?</b></div>",
- 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: "<div class='ellipsis-with-margin'>Remove: <b>" + _.escape(termName) + "</b> assignment from <b>" + _.escape(assetname) + "?</b></div>",
- 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 + "<b>" + Utils.getNumberSuffix({
- number: goToPage,
- sup: !0
- }) + "</b> 页"
- });
- 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;
- });
|