define([ "require", "backbone", "hbs!tmpl/glossary/AssignTermLayoutView_tmpl", "utils/Utils", "utils/Enums", "utils/Messages", "utils/UrlLinks", "modules/Modal", "jquery-steps" ], function(require, Backbone, AssignTermLayoutViewTmpl, Utils, Enums, Messages, UrlLinks, Modal) {
var AssignTermLayoutView = Backbone.Marionette.LayoutView.extend({
_viewName: "AssignTermLayoutView",
template: AssignTermLayoutViewTmpl,
templateHelpers: function() {
return {
isAttributeRelationView: this.isAttributeRelationView,
selectedTermAttributeList: Enums.termRelationAttributeList[this.selectedTermAttribute]
};
},
regions: {
RGlossaryTree: "#r_glossaryTree"
},
ui: {
wizard: '[data-id="wizard"]'
},
events: function() {
var events = {};
return events;
},
initialize: function(options) {
_.extend(this, _.pick(options, "glossaryCollection", "guid", "callback", "hideLoader", "isCategoryView", "categoryData", "isTermView", "termData", "isAttributeRelationView", "selectedTermAttribute", "associatedTerms", "multiple"));
var that = this;
this.options = options, this.isCategoryView || this.isTermView || this.isAttributeRelationView || (this.isEntityView = !0),
this.glossary = {
selectedItem: {}
};
var title = "";
title = this.isCategoryView || this.isEntityView ? "指定术语给 " + (this.isCategoryView ? "Category" : "entity") : this.isAttributeRelationView ? "指定术语给 " + this.selectedTermAttribute : "指定类别给术语",
this.modal = new Modal({
title: title,
content: this,
cancelText: "Cancel",
okText: "Assign",
allowCancel: !0,
showFooter: !this.isAttributeRelationView,
mainClass: "wizard-modal",
okCloses: !1
}), this.modal.open(), this.modal.$el.find("button.ok").attr("disabled", !0), this.modal.on("closeModal", function() {
that.modal.trigger("cancel"), that.assignTermError && that.hideLoader && that.hideLoader(),
options.onModalClose && options.onModalClose();
}), this.modal.on("ok", function() {
that.assignTerm();
}), this.bindEvents();
},
bindEvents: function() {
this.listenTo(this.glossaryCollection, "node_selected", function(skip) {
this.modal.$el.find("button.ok").attr("disabled", !1);
}, this);
},
onRender: function() {
this.renderGlossaryTree();
var that = this;
this.isAttributeRelationView && this.ui.wizard.steps({
headerTag: "h3",
bodyTag: "section",
transitionEffect: "slideLeft",
autoFocus: !0,
enableCancelButton: !0,
transitionEffect: $.fn.steps.transitionEffect.none,
transitionEffectSpeed: 200,
labels: {
cancel: "取消",
finish: "Assign",
next: "下一步",
previous: "上一步",
loading: "Loading ..."
},
onStepChanging: function(event, currentIndex, newIndex) {
var isMatch = "GlossaryTerm" == that.glossary.selectedItem.type;
return isMatch || Utils.notifyWarn({
content: "Please select Term for association"
}), isMatch;
},
onFinished: function(event, currentIndex) {
var $assignBtn = $(this).find('a[href="#finish"]');
$assignBtn.attr("disabled") || ($assignBtn.attr("disabled", !0).showButtonLoader(),
$assignBtn.parent().attr("aria-disabled", "true").addClass("disabled"), that.assignTerm());
},
onCanceled: function(event) {
that.modal.trigger("cancel");
}
});
},
assignTerm: function() {
this.assignTermError = !1;
var that = this, data = [], termAttributeFormData = [], selectedItem = this.glossary.selectedItem, selectedGuid = selectedItem.guid, termName = selectedItem.text, ajaxOptions = {
success: function(rModel, response) {
Utils.notifySuccess({
content: (that.isCategoryView || that.isEntityView || that.isAttributeRelationView ? "Term" : "Category") + " is associated successfully "
}), that.modal.trigger("closeModal"), that.callback && that.callback();
},
cust_error: function() {
var $assignBtn = that.$el.find('a[href="#finish"]');
$assignBtn.removeAttr("disabled").hideButtonLoader(), $assignBtn.parent().attr("aria-disabled", "false").removeClass("disabled"),
that.assignTermError = !0;
}
}, model = new this.glossaryCollection.model();
if (this.isCategoryView) data = $.extend(!0, {}, this.categoryData), data.terms ? data.terms.push({
termGuid: selectedGuid
}) : data.terms = [ {
termGuid: selectedGuid
} ], model.assignTermToCategory(_.extend(ajaxOptions, {
data: JSON.stringify(data),
guid: data.guid
})); else if (this.isTermView) data = $.extend(!0, {}, this.termData), data.categories ? data.categories.push({
categoryGuid: selectedGuid
}) : data.categories = [ {
categoryGuid: selectedGuid
} ], model.assignCategoryToTerm(_.extend(ajaxOptions, {
data: JSON.stringify(data),
guid: data.guid
})); else if (this.isAttributeRelationView) termAttributeFormData = this.$('[data-id="termAttributeForm"]').serializeArray().reduce(function(obj, item) {
return obj[item.name] = item.value, obj;
}, {}), data = $.extend(!0, {}, this.termData), data[this.selectedTermAttribute] ? data[this.selectedTermAttribute].push(_.extend({
termGuid: selectedGuid
}, termAttributeFormData)) : data[this.selectedTermAttribute] = [ _.extend({
termGuid: selectedGuid
}, termAttributeFormData) ], model.assignTermToAttributes(_.extend(ajaxOptions, {
data: JSON.stringify(data),
guid: data.guid
})); else {
var deletedEntity = [], skipEntity = [];
if (this.multiple ? (_.each(that.multiple, function(entity, i) {
var name = Utils.getName(entity.model);
Enums.entityStateReadOnly[entity.model.status] ? deletedEntity.push(name) : _.indexOf(entity.model.meaningNames || _.pluck(entity.model.meanings, "displayText"), termName) === -1 ? data.push({
guid: entity.model.guid
}) : skipEntity.push(name);
}), deletedEntity.length && Utils.notifyError({
html: !0,
content: "" + deletedEntity.join(", ") + " " + (1 === deletedEntity.length ? "entity " : "entities ") + Messages.assignTermDeletedEntity
})) : data.push({
guid: that.guid
}), skipEntity.length) {
var text = "" + skipEntity.length + " of " + that.multiple.length + " entities selected have already been associated with " + termName + " term, Do you want to associate the term with other entities ?", removeCancelButton = !1;
skipEntity.length + deletedEntity.length === that.multiple.length && (text = (skipEntity.length > 1 ? "All selected" : "Selected") + " entities have already been associated with " + termName + " term",
removeCancelButton = !0);
var notifyObj = {
text: text,
modal: !0,
ok: function(argument) {
data.length && model.assignTermToEntity(selectedGuid, _.extend(ajaxOptions, {
data: JSON.stringify(data)
}));
},
cancel: function(argument) {}
};
removeCancelButton && (notifyObj.confirm = {
confirm: !0,
buttons: [ {
text: "Ok",
addClass: "btn-atlas btn-md",
click: function(notice) {
notice.remove();
}
}, null ]
}), Utils.notifyConfirm(notifyObj);
} else data.length && model.assignTermToEntity(selectedGuid, _.extend(ajaxOptions, {
data: JSON.stringify(data)
}));
}
},
renderGlossaryTree: function() {
var that = this;
require([ "views/glossary/GlossaryLayoutView" ], function(GlossaryLayoutView) {
that.RGlossaryTree.show(new GlossaryLayoutView(_.extend({
isAssignTermView: that.isCategoryView,
isAssignCategoryView: that.isTermView,
isAssignEntityView: that.isEntityView,
isAssignAttributeRelationView: that.isAttributeRelationView,
glossary: that.glossary,
associatedTerms: that.associatedTerms
}, that.options)));
});
}
});
return AssignTermLayoutView;
});