define(["require","backbone","hbs!tmpl/business_catalog/TreeLayoutView_tmpl","utils/Utils","collection/VCatalogList","utils/CommonViewFunction","utils/Messages","utils/UrlLinks"],function(require,Backbone,TreeLayoutView_tmpl,Utils,VCatalogList,CommonViewFunction,Messages,UrlLinks){"use strict";return Backbone.Marionette.LayoutView.extend({_viewName:"TreeLayoutView",template:TreeLayoutView_tmpl,regions:{},ui:{Parent:'[data-id="Parent"]',childList:'[data-id="childList"]',liClick:"li a[data-href]",backTaxanomy:'[data-id="backTaxanomy"]',expandArrow:'[data-id="expandArrow"]',searchTermInput:'[data-id="searchTermInput"]',refreshTaxanomy:'[data-id="refreshTaxanomy"]',descriptionAssign:'[data-id="descriptionAssign"]'},events:function(){var events={};return events["dblclick "+this.ui.liClick]=function(e){this.changeArrowState(e)},events["click "+this.ui.liClick]=function(e){var that=this;that.addActiveClass(e),that.url=$(e.currentTarget).data("href"),this.viewBased&&Utils.setUrl({url:"#!/taxonomy/detailCatalog"+that.url,mergeBrowserUrl:!1,trigger:!0,updateTabState:!0})},events["click "+this.ui.backTaxanomy]="backButtonTaxanomy",events["click "+this.ui.refreshTaxanomy]="refreshButtonTaxanomy",events["click "+this.ui.expandArrow]="changeArrowState",events["change "+this.ui.searchTermInput]=function(){var termUrl=this.termCollection.url.split("/",5).join("/")+"/"+this.ui.searchTermInput.val().split(".").join("/terms/");this.fetchCollection(termUrl,!0),this.viewBased&&Utils.setUrl({url:"#!/taxonomy/detailCatalog"+termUrl,mergeBrowserUrl:!1,trigger:!0,updateTabState:!0})},events},initialize:function(options){_.extend(this,_.pick(options,"url","viewBased")),this.parentCollection=new VCatalogList,this.childCollection=new VCatalogList,this.taxanomy=new VCatalogList,this.termCollection=new VCatalogList},bindEvents:function(){this.listenTo(this.parentCollection,"reset",function(){this.parentCollection.fullCollection.models.length?this.generateTree(!0):(Utils.getUrlState.isTaxonomyTab()||Utils.getUrlState.isInitial())&&this.createDefaultTaxonomy()},this),this.listenTo(this.childCollection,"reset",function(){this.generateTree()},this),this.listenTo(this.taxanomy,"reset",function(){this.searchResult()},this),this.listenTo(this.termCollection,"reset",function(){this.termSearchData()},this),this.listenTo(this.childCollection,"error",function(model,response){this.hideLoader()},this),this.listenTo(this.parentCollection,"error",function(model,response){this.hideLoader()},this)},onRender:function(){var that=this;this.bindEvents(),that.ui.backTaxanomy.hide(),this.fetchCollection(this.url,!0),this.fetchTaxanomyCollections(),this.viewBased?this.ui.descriptionAssign.hide():this.ui.descriptionAssign.show()},backButtonTaxanomy:function(e){this.backButton=!0;var dataURL=this.$(".taxonomyTree").find('li[data-id="Parent"]').find("a").data("href").split("/terms");dataURL.pop();if(dataURL.join("/terms").length){this.ui.backTaxanomy.show();var currentURL="#!/taxonomy/detailCatalog"+dataURL.join("/terms");this.fetchCollection(dataURL.join("/terms"),!0),this.url=dataURL.join("/terms"),this.viewBased&&Utils.setUrl({url:currentURL,mergeBrowserUrl:!1,trigger:!0,updateTabState:!0})}},manualRender:function(url){var splitUrl=this.url.split("/terms");if(url&&this.url!=url)if(splitUrl.length>1&&""==splitUrl[splitUrl.length-1]){var checkUrl=splitUrl;checkUrl.pop(),url!=checkUrl&&this.fetchCollection(url,!0)}else Utils.getUrlState.getQueryParams()&&"true"==Utils.getUrlState.getQueryParams().load?(this.viewBased&&Utils.setUrl({url:"#!/taxonomy/detailCatalog"+url,mergeBrowserUrl:!1,trigger:!1,updateTabState:!0}),this.fetchCollection(url,!0)):this.fetchCollection(url,!0);!url&&Utils.getUrlState.isTaxonomyTab()&&this.selectFirstElement()},changeArrowState:function(e){var scope=this.$('[data-id="expandArrow"]');if(e&&(scope=$(e.currentTarget)),scope.is("a")){var url=scope.data("href");scope=scope.parent().find("i.toggleArrow")}else if(scope.is("i"))var url=scope.parent().find("a").data("href");scope.hasClass("fa-angle-down")?(scope.toggleClass("fa-angle-right fa-angle-down"),this.ui.childList.hide()):e&&$(e.currentTarget).parents("li.parentChild").length?(scope.parent("li").find(".tools .taxanomyloader").show(),this.url=url,this.fetchCollection(url,!0),this.viewBased&&Utils.setUrl({url:"#!/taxonomy/detailCatalog"+url,mergeBrowserUrl:!1,trigger:!0,updateTabState:!0})):(scope.toggleClass("fa-angle-right fa-angle-down"),this.ui.childList.show())},fetchCollection:function(url,isParent){if(url)this.url=url;else{var parentURL=this.ui.Parent.find("a").data("href");this.url=parentURL||UrlLinks.taxonomiesApiUrl()}this.showLoader(),isParent?(this.parentCollection.url=this.url,this.parentCollection.fullCollection.reset(void 0,{silent:!0}),this.parentCollection.fetch({reset:!0,cache:!0})):(this.childCollection.url=this.url+"?hierarchy/path:.",this.childCollection.fullCollection.reset(void 0,{silent:!0}),this.childCollection.fetch({reset:!0,cache:!0}))},showLoader:function(){this.$(".taxonomyTree").find("li.active .tools .taxanomyloader").show(),this.$(".contentLoading").show()},hideLoader:function(){this.$(".taxanomyloader").hide(),this.$(".contentLoading").hide()},addActiveClass:function(e){this.$("ul.taxonomyTree").find("li").removeClass("active"),e.jquery?e.parent("li").addClass("active"):e.currentTarget?$(e.currentTarget).parent("li").addClass("active"):$(e).parent.length?$(e).parent("li").addClass("active"):$(e).parents("li").addClass("active")},fetchTaxanomyCollections:function(){this.taxanomy.fetch({reset:!0})},refreshButtonTaxanomy:function(){this.fetchTaxanomyCollections();var url="";this.$(".taxonomyTree").find(".active").parents(".parentChild").length?(url=this.$(".taxonomyTree").find(".active a").data("href").split("/").slice(0,-2).join("/"),this.refresh=this.$(".taxonomyTree").find(".active a").data("href")):(url=this.$(".taxonomyTree").find(".active a").data("href"),this.refresh=this.$(".taxonomyTree").find(".active a").data("href")),this.fetchCollection(url,!0)},searchResult:function(){var that=this;_.each(this.taxanomy.models,function(model,key){var name=model.get("name");that.termCollection.url=UrlLinks.taxonomiesTermsApiUrl(name)}),this.termCollection.fetch({reset:!0})},termSearchData:function(){var str="";this.termCollection.fullCollection.comparator=function(model){return model.get("name")},this.termCollection.fullCollection.sort().each(function(model){str+=""}),this.ui.searchTermInput.html(str),this.ui.searchTermInput.select2({placeholder:"Search Term",allowClear:!0})},onSearchTerm:function(){Utils.setUrl({url:"#!/search/searchResult",urlParams:{query:this.$(".taxonomyTree").find("li.active").find("a").data("name"),searchType:"dsl",dslChecked:!0},mergeBrowserUrl:!1,trigger:!0,updateTabState:!0})},selectFirstElement:function(){var dataURL=this.$(".taxonomyTree").find('li[data-id="Parent"]').find("a").data("href");dataURL&&(this.url=dataURL,this.viewBased&&Utils.getUrlState.isTaxonomyTab()&&Utils.setUrl({url:"#!/taxonomy/detailCatalog"+dataURL,mergeBrowserUrl:!1,trigger:!0,updateTabState:!0}))},generateTree:function(isParent){var parentLi="",childLi="",that=this;isParent?function(url){var href=!1;if(_.each(that.parentCollection.fullCollection.models,function(model,key){model.get("terms")?href=model.get("terms").href:model.get("href")&&(href=model.get("href")+"/terms");var hrefUrl="/api"+model.get("href").split("/api")[1];if(hrefUrl){var backUrlCheck=hrefUrl.split("taxonomies/");backUrlCheck.length>1&&(backUrlCheck[1].split("/terms").length<=1?that.ui.backTaxanomy.hide():that.ui.backTaxanomy.show())}var name=Utils.checkTagOrTerm(model.get("name"),!0);name.name&&(parentLi=that.viewBased?'
'+name.name+"":'
'+name.name+"")}),href){var hrefUrl="/api"+href.split("/api")[1];that.fetchCollection(hrefUrl)}that.ui.childList.html(""),that.ui.Parent.addClass("active"),that.ui.Parent.html(parentLi)}():(this.changeArrowState(),function(){that.childCollection.fullCollection.comparator=function(model){return model.get("name").toLowerCase()},that.childCollection.fullCollection.sort().each(function(model,key){var name=Utils.checkTagOrTerm(model.get("name"),!0),hrefUrl="/api"+model.get("href").split("/api")[1];name.name&&(that.viewBased?childLi+='
  • '+name.name+"
  • ":childLi+='
  • '+name.name+"
  • ")}),that.ui.childList.html(childLi)}(),(Utils.getUrlState.isInitial()||"taxonomy"==Utils.getUrlState.getQueryUrl().lastValue)&&this.selectFirstElement(),this.refresh&&(this.addActiveClass(this.$(".taxonomyTree").find('a[data-href="'+this.refresh+'"]')),this.refresh=void 0)),this.hideLoader(),this.viewBased&&Utils.generatePopover({el:this.$(".termPopover"),container:this.$el,popoverOptions:{content:function(){var lis="
  • Create Subterm
  • ";return Utils.getUrlState.getQueryUrl().hash.split("terms").length>1&&(lis="
  • Search Assets
  • "+lis,lis+="
  • Delete Term
  • "),""}}}).parent(".tools").off("click").on("click","li",function(e){e.stopPropagation(),that.$(".termPopover").popover("hide"),that[$(this).find("a").data("fn")](e)})},onAddTerm:function(e){var that=this;require(["views/business_catalog/AddTermLayoutView","modules/Modal"],function(AddTermLayoutView,Modal){var view=new AddTermLayoutView({url:that.$(".taxonomyTree").find("li.active").find(">a[data-name]").data("href"),model:new that.parentCollection.model}),modal=new Modal({title:"Create Sub-term",content:view,okCloses:!0,showFooter:!0,allowCancel:!0,okText:"Create"}).open();modal.$el.find("button.ok").attr("disabled",!0),modal.on("ok",function(){that.saveAddTerm(view)}),view.ui.termName.on("keyup",function(){this.value.indexOf(" ")>=0?(modal.$el.find("button.ok").prop("disabled",!0),view.ui.termName.addClass("addTermDisable"),view.$(".alertTerm").show()):(modal.$el.find("button.ok").prop("disabled",!1),view.ui.termName.removeClass("addTermDisable"),view.$(".alertTerm").hide())}),view.on("closeModal",function(){modal.trigger("cancel")})})},saveAddTerm:function(view){var that=this,url=view.url;view.model.url=url+"/terms/"+view.ui.termName.val(),this.showLoader(),view.model.set({description:view.ui.termDetail.val()}).save(null,{success:function(model,response){that.create=!0,that.fetchTaxanomyCollections(),that.fetchCollection(url,!0),Utils.notifySuccess({content:"Term "+view.ui.termName.val()+Messages.addSuccessMessage})},complete:function(){that.hideLoader()}})},deleteTerm:function(e){var termName=this.$(".taxonomyTree").find("li.active a").data("name"),that=($(e.target).data("assetname"),this),modal=CommonViewFunction.deleteTagModel({msg:"
    Delete: "+_.escape(termName)+"?

    Assets mapped to this term will be unclassified.

    ",titleMessage:Messages.deleteTerm,buttonText:"Delete"});modal.on("ok",function(){that.deleteTermData(e)}),modal.on("closeModal",function(){modal.trigger("cancel")})},deleteTermData:function(e){var that=this;this.showLoader(),require(["models/VCatalog"],function(VCatalog){var termModel=new VCatalog,url=that.$(".taxonomyTree").find("li.active a").data("href"),termName=that.$(".taxonomyTree").find("li.active a").text();termModel.deleteTerm(url,{skipDefaultError:!0,success:function(data){Utils.notifySuccess({content:"Term "+termName+Messages.deleteSuccessMessage});var termURL=url.split("/").slice(0,-2).join("/");that.viewBased&&Utils.setUrl({url:"#!/taxonomy/detailCatalog"+termURL,mergeBrowserUrl:!1,trigger:!0,updateTabState:!0}),that.fetchCollection(termURL,!0)},cust_error:function(model,response){var message="Term "+termName+Messages.deleteErrorMessage;response&&response.responseJSON&&(message=response.responseJSON.errorMessage),Utils.notifyError({content:message})},complete:function(){that.hideLoader()}})})},moveTerm:function(){var that=this;require(["views/business_catalog/MoveTermLayoutView","modules/Modal"],function(MoveTermLayoutView,Modal){var view=new MoveTermLayoutView({taxanomyCollection:that.collection}),modal=new Modal({title:"Move Term",content:view,okCloses:!0,showFooter:!0,allowCancel:!0,okText:"Move"}).open();view.on("closeModal",function(){modal.trigger("cancel")})})},createDefaultTaxonomy:function(){var that=this;require(["views/business_catalog/AddTermLayoutView","modules/Modal"],function(AddTermLayoutView,Modal){var view=new AddTermLayoutView({url:UrlLinks.taxonomiesApiUrl(),model:new that.parentCollection.model,defaultTerm:!0}),modal=new Modal({title:"Taxonomy",content:view,okCloses:!0,showFooter:!0,allowCancel:!0,okText:"Create"}).open();modal.$el.find("button.ok").attr("disabled",!0),modal.on("ok",function(){that.saveDefaultTaxonomy(view)}),view.ui.termName.on("keyup",function(){this.value.indexOf(" ")>=0?(modal.$el.find("button.ok").prop("disabled",!0),view.ui.termName.addClass("addTermDisable"),view.$(".alertTerm").show()):(modal.$el.find("button.ok").prop("disabled",!1),view.ui.termName.removeClass("addTermDisable"),view.$(".alertTerm").hide())}),view.on("closeModal",function(){modal.trigger("cancel")})})},saveDefaultTaxonomy:function(view){var that=this,url=view.url;view.model.url=url+"/"+view.ui.termName.val(),this.showLoader(),view.model.set({description:view.ui.termDetail.val()}).save(null,{skipDefaultError:!0,success:function(model,response){that.fetchCollection(view.model.url,!0),Utils.notifySuccess({content:"Default taxonomy "+view.ui.termName.val()+Messages.addSuccessMessage})},cust_error:function(model,response){Utils.notifyError({content:"Default taxonomy "+view.ui.termName.val()+Messages.addErrorMessage})},complete:function(){that.hideLoader()}})}})});