'use strict'; define( [ 'vent', 'marionette', 'Commands/CommandController', 'Mixins/AsModelBoundView', 'Mixins/AsValidatedView', 'Mixins/CopyToClipboard' ], function (vent, Marionette, CommandController, AsModelBoundView, AsValidatedView) { var view = Marionette.ItemView.extend({ template: 'Settings/General/GeneralViewTemplate', events: { 'change .x-auth' : '_setAuthOptionsVisibility', 'change .x-ssl' : '_setSslOptionsVisibility', 'click .x-reset-api-key' : '_resetApiKey', 'change .x-update-mechanism' : '_setScriptGroupVisibility' }, ui: { authToggle : '.x-auth', authOptions : '.x-auth-options', sslToggle : '.x-ssl', sslOptions : '.x-ssl-options', resetApiKey : '.x-reset-api-key', copyApiKey : '.x-copy-api-key', apiKeyInput : '.x-api-key', updateMechanism : '.x-update-mechanism', scriptGroup : '.x-script-group' }, initialize: function () { this.listenTo(vent, vent.Events.CommandComplete, this._commandComplete); }, onRender: function(){ if(!this.ui.authToggle.prop('checked')){ this.ui.authOptions.hide(); } if(!this.ui.sslToggle.prop('checked')){ this.ui.sslOptions.hide(); } if (!this._showScriptGroup()) { this.ui.scriptGroup.hide(); } CommandController.bindToCommand({ element: this.ui.resetApiKey, command: { name: 'resetApiKey' } }); }, onShow: function () { this.ui.copyApiKey.copyToClipboard(this.ui.apiKeyInput); }, _setAuthOptionsVisibility: function () { var showAuthOptions = this.ui.authToggle.prop('checked'); if (showAuthOptions) { this.ui.authOptions.slideDown(); } else { this.ui.authOptions.slideUp(); } }, _setSslOptionsVisibility: function () { var showSslOptions = this.ui.sslToggle.prop('checked'); if (showSslOptions) { this.ui.sslOptions.slideDown(); } else { this.ui.sslOptions.slideUp(); } }, _resetApiKey: function () { if (window.confirm('Reset API Key?')) { CommandController.Execute('resetApiKey', { name : 'resetApiKey' }); } }, _commandComplete: function (options) { if (options.command.get('name') === 'resetapikey') { this.model.fetch(); } }, _setScriptGroupVisibility: function () { if (this._showScriptGroup()) { this.ui.scriptGroup.slideDown(); } else { this.ui.scriptGroup.slideUp(); } }, _showScriptGroup: function () { return this.ui.updateMechanism.val() === 'script'; } }); AsModelBoundView.call(view); AsValidatedView.call(view); return view; });