/*
* Copyright 2013 Anyware Services
*
* Licensed 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.
*/
/**
* This class controls a ribbon button that opens/closes a tool or a window.
* Unique instance tool state will be reflected the open/close status by beeing toggled or not.
* @private
*/
Ext.define(
"Ametys.plugins.cms.iframe.OpenUrlButtonController",
{
extend: "Ametys.ribbon.element.ui.ButtonController",
/**
* @cfg {String} action Will be autogenerated.
* @inheritdoc
* @private
*/
/**
* @cfg {Boolean} toggle-enabled Will be autogenerated
* @inheritdoc
* @private
*/
/**
* @cfg {Boolean} toggle-state Will be autogenerated
* @inheritdoc
* @private
*/
/**
* @cfg {String} url (required) This configuration is required to set url of the iframe.
*/
/**
* @cfg {Boolean} [external=false] True to open the url in a new window. If false the url will be open inside a CMS tool.
*/
/**
* @property {Boolean} _external See #cfg-external.
* @private
*/
constructor: function(config)
{
config.action = this.self.getName() + "._act";
this._external = config['external'] == 'true';
if (!this._external)
{
config['toggle-enabled'] = true;
Ametys.message.MessageBus.on(Ametys.message.Message.TOOL_OPENED, this._onToolOpenedOrClosed, this);
Ametys.message.MessageBus.on(Ametys.message.Message.TOOL_CLOSED, this._onToolOpenedOrClosed, this);
}
this.callParent(arguments);
},
statics: {
/**
* @protected
* This action do open the tool using the given Ametys.tool.ToolFactory role. The following additional configuration are required: #cfg-opentool-id, #cfg-opentool-config.
* @param {Ametys.ribbon.element.ui.button.OpenToolButtonController} controller This controller calling this function.
*/
_act: function (controller)
{
if (controller._external)
{
window.open(controller.getInitialConfig("url"));
}
else
{
var role = controller.getInitialConfig("opentool-id") || 'uitool-iframe';
var parameters = {
'id': controller.getInitialConfig("url"),
'url': controller.getInitialConfig("url"),
'label': controller.getInitialConfig("label"),
'description': controller.getInitialConfig("description"),
'icon-small': controller.getInitialConfig("icon-small"),
'icon-medium': controller.getInitialConfig("icon-medium"),
'icon-large': controller.getInitialConfig("icon-large")
}
var tool = Ametys.tool.ToolsManager.getTool(role + '$' + controller.getInitialConfig("url"))
if (tool != null)
{
if (tool.getWrapper().isVisible())
{
tool.close();
controller.toggle(false);
}
else
{
tool.focus();
controller.toggle(true);
}
}
else
{
Ametys.tool.ToolsManager.openTool(role, parameters);
controller.toggle(true);
}
}
}
},
/**
* Listener on tool opened/closed
* @param {Ametys.message.Message} message Tool message
* @private
*/
_onToolOpenedOrClosed: function(message)
{
var url = this.getInitialConfig("url");
var thisToolTarget = message.getTarget(function (target) { return target.getParameters()['id'] == "uitool-iframe$" + url} );
if (thisToolTarget)
{
this.toggle(message.getType() == Ametys.message.Message.TOOL_OPENED);
}
}
}
);