| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| define(['require', |
| 'backbone', |
| 'hbs!tmpl/business_catalog/BusinessCatalogDetailLayoutView_tmpl', |
| 'utils/Utils', |
| 'collection/VCatalogList', |
| 'models/VEntity', |
| 'models/VCatalog', |
| 'utils/Messages' |
| ], function(require, Backbone, BusinessCatalogDetailLayoutViewTmpl, Utils, VCatalogList, VEntity, VCatalog, Messages) { |
| 'use strict'; |
| |
| var BusinessCatalogDetailLayoutView = Backbone.Marionette.LayoutView.extend( |
| /** @lends BusinessCatalogDetailLayoutView */ |
| { |
| _viewName: 'BusinessCatalogDetailLayoutView', |
| |
| template: BusinessCatalogDetailLayoutViewTmpl, |
| |
| /** Layout sub regions */ |
| regions: { |
| REntityDetailTableLayoutView: "#r_entityDetailTableLayoutView", |
| RSchemaTableLayoutView: "#r_schemaTableLayoutView", |
| RTagTableLayoutView: "#r_tagTableLayoutView", |
| RLineageLayoutView: "#r_lineageLayoutView", |
| }, |
| /** ui selector cache */ |
| ui: { |
| title: '[data-id="title"]', |
| editButton: '[data-id="editButton"]', |
| description: '[data-id="description"]', |
| createDate: '[data-id="createDate"]', |
| updateDate: '[data-id="updateDate"]', |
| createdUser: '[data-id="createdUser"]' |
| }, |
| /** ui events hash */ |
| events: function() { |
| var events = {}; |
| events["click " + this.ui.editButton] = 'onEditButton'; |
| return events; |
| }, |
| /** |
| * intialize a new BusinessCatalogDetailLayoutView Layout |
| * @constructs |
| */ |
| initialize: function(options) { |
| _.extend(this, _.pick(options, 'globalVent', 'url', 'collection')); |
| this.bindEvents(); |
| }, |
| bindEvents: function() { |
| var that = this; |
| this.listenTo(this.collection, 'error', function(model, response) { |
| this.$('.fontLoader').hide(); |
| if (response && response.responseJSON && response.responseJSON.message) { |
| Utils.notifyError({ |
| content: response.responseJSON.message |
| }); |
| } |
| |
| }, this); |
| this.listenTo(this.collection, 'reset', function() { |
| this.$('.fontLoader').hide(); |
| this.$('.hide').removeClass('hide'); |
| this.model = this.collection.first(); |
| var name = this.model.get('name'), |
| description = this.model.get('description'), |
| createdDate = this.model.get('creation_time'); |
| if (name) { |
| this.ui.title.show(); |
| this.termName = Utils.checkTagOrTerm(name, true); |
| this.ui.title.html('<span>' + this.termName.name + '</span>'); |
| } else { |
| this.ui.title.hide(); |
| } |
| if (description) { |
| this.ui.description.show(); |
| this.ui.description.html('<span>' + _.escape(description) + '</span>'); |
| } else { |
| this.ui.description.hide(); |
| } |
| if (createdDate) { |
| var splitDate = createdDate.split(":"); |
| this.ui.createDate.html('<strong> Date Created: </strong> ' + splitDate[0] + " " + splitDate[1] + ":" + splitDate[2] + ":" + splitDate[3] + " (GMT)"); |
| } |
| Utils.hideTitleLoader(this.$('.fontLoader'), this.$('.catlogDetail')); |
| }, this); |
| }, |
| onRender: function() { |
| var that = this; |
| Utils.showTitleLoader(this.$('.page-title .fontLoader'), this.$('.catlogDetail')); |
| }, |
| fetchCollection: function() { |
| this.collection.fetch({ reset: true }); |
| }, |
| onEditButton: function(e) { |
| var that = this; |
| $(e.currentTarget).blur(); |
| require([ |
| 'views/tag/CreateTagLayoutView', |
| 'modules/Modal' |
| ], function(CreateTagLayoutView, Modal) { |
| var view = new CreateTagLayoutView({ 'termCollection': that.collection, 'descriptionData': that.model.get('description'), 'tag': _.unescape(that.termName.name) }); |
| var modal = new Modal({ |
| title: 'Edit Term', |
| content: view, |
| cancelText: "Cancel", |
| okText: 'Save', |
| allowCancel: true, |
| }).open(); |
| view.ui.description.on('keyup', function(e) { |
| that.textAreaChangeEvent(view, modal); |
| }); |
| modal.$el.find('button.ok').prop('disabled', true); |
| modal.on('ok', function() { |
| that.onSaveDescriptionClick(view); |
| }); |
| modal.on('closeModal', function() { |
| modal.trigger('cancel'); |
| }); |
| }); |
| }, |
| textAreaChangeEvent: function(view, modal) { |
| if (view.description == view.ui.description.val()) { |
| modal.$el.find('button.ok').prop('disabled', true); |
| } else { |
| modal.$el.find('button.ok').prop('disabled', false); |
| } |
| }, |
| onSaveDescriptionClick: function(view) { |
| view.description = view.ui.description.val(); |
| this.onSaveButton(this.collection.first().toJSON(), Messages.updateTermDescriptionMessage, view); |
| this.ui.description.show(); |
| }, |
| onSaveButton: function(saveObject, message, view) { |
| var that = this, |
| termModel = new VCatalog(); |
| termModel.url = function() { |
| return that.collection.url; |
| }; |
| Utils.showTitleLoader(this.$('.page-title .fontLoader'), this.$('.catlogDetail')); |
| termModel.set({ |
| "description": view.ui.description.val() |
| }).save(null, { |
| type: "PUT", |
| success: function(model, response) { |
| that.collection.fetch({ reset: true }); |
| Utils.notifySuccess({ |
| content: message |
| }); |
| }, |
| error: function(model, response) { |
| if (response.responseJSON && response.responseJSON.error) { |
| that.collection.fetch({ reset: true }); |
| Utils.notifyError({ |
| content: response.responseJSON.error |
| }); |
| } |
| } |
| }); |
| } |
| }); |
| return BusinessCatalogDetailLayoutView; |
| |
| }); |