/** * 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', 'models/VEntity', 'models/VCatalog', 'utils/Messages' ], function(require, Backbone, BusinessCatalogDetailLayoutViewTmpl, Utils, VEntity, VCatalog, Messages) { 'use strict'; var BusinessCatalogDetailLayoutView = Backbone.Marionette.LayoutView.extend( /** @lends BusinessCatalogDetailLayoutView */ { _viewName: 'BusinessCatalogDetailLayoutView', template: BusinessCatalogDetailLayoutViewTmpl, /** Layout sub regions */ regions: {}, /** ui selector cache */ ui: { title: '[data-id="title"]', editButton: '[data-id="editButton"]', description: '[data-id="description"]', editBox: '[data-id="editBox"]', createDate: '[data-id="createDate"]' }, /** ui events hash */ events: function() { var events = {}; events["click " + this.ui.editButton] = 'onEditButton'; events["click " + this.ui.cancelButton] = 'onCancelButtonClick'; return events; }, /** * intialize a new BusinessCatalogDetailLayoutView Layout * @constructs */ initialize: function(options) { _.extend(this, _.pick(options, '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 }); } }); } }); return BusinessCatalogDetailLayoutView; });