diff --git a/deployed/mootable/plugins/system/mootable/forms/fields/header.php b/deployed/mootable/plugins/system/mootable/forms/fields/header.php
new file mode 100644
index 00000000..d72d11c6
--- /dev/null
+++ b/deployed/mootable/plugins/system/mootable/forms/fields/header.php
@@ -0,0 +1,56 @@
+
+ * @copyright (c) 2012 Roberto Segura. All Rights Reserved.
+ * @license GNU/GPL 2, http://www.gnu.org/licenses/gpl-2.0.htm
+ */
+
+defined('_JEXEC') or die;
+
+JLoader::import('joomla.form.formfield');
+
+/**
+ * Fake field to display a header in settings
+ *
+ * @package Joomla.Plugin
+ * @subpackage System.Mootable
+ * @since 1.1.0
+ */
+class MootableFormFieldHeader extends JFormField
+{
+ /**
+ * The form field type.
+ *
+ * @var string
+ * @since 1.1.0
+ */
+ var $type = 'header';
+
+ /**
+ * Method to get the field input markup for a generic list.
+ * Use the multiple attribute to enable multiselect.
+ *
+ * @return string The field input markup.
+ *
+ * @since 1.1.0
+ */
+ function getInput()
+ {
+ return '';
+ }
+
+ /**
+ * Method to get the field label markup.
+ *
+ * @return string The field label markup.
+ *
+ * @since 1.1.0
+ */
+ function getLabel()
+ {
+ return '
';
+ }
+}
diff --git a/deployed/mootable/plugins/system/mootable/forms/menuitem.xml b/deployed/mootable/plugins/system/mootable/forms/menuitem.xml
new file mode 100644
index 00000000..0fceea71
--- /dev/null
+++ b/deployed/mootable/plugins/system/mootable/forms/menuitem.xml
@@ -0,0 +1,54 @@
+
+
diff --git a/deployed/mootable/plugins/system/mootable/index.html b/deployed/mootable/plugins/system/mootable/index.html
new file mode 100644
index 00000000..42682b47
--- /dev/null
+++ b/deployed/mootable/plugins/system/mootable/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/deployed/mootable/plugins/system/mootable/mootable.php b/deployed/mootable/plugins/system/mootable/mootable.php
new file mode 100644
index 00000000..7d89efaf
--- /dev/null
+++ b/deployed/mootable/plugins/system/mootable/mootable.php
@@ -0,0 +1,494 @@
+
+ * @copyright (c) 2012 Roberto Segura. All Rights Reserved.
+ * @license GNU/GPL 2, http://www.gnu.org/licenses/gpl-2.0.htm
+ */
+defined('_JEXEC') or die;
+
+JLoader::import('joomla.plugin.plugin');
+
+/**
+ * Main plugin class
+ *
+ * @package Joomla.Plugin
+ * @subpackage System.Mootable
+ * @since 2.5
+ *
+ */
+class PlgSystemMootable extends JPlugin
+{
+ // Plugin info constants
+ const TYPE = 'system';
+ const NAME = 'mootable';
+
+ /**
+ * Plugin details from DB
+ *
+ * @var object
+ */
+ private $plugin;
+
+ /**
+ * Plugin parameters
+ *
+ * @var JRegistry
+ */
+ public $params;
+
+ /**
+ * Path to the plugin folder
+ *
+ * @var string
+ */
+ private $pathPlugin = null;
+
+ /**
+ * Base Url to the plugin folder
+ *
+ * @var string
+ */
+ private $urlPlugin;
+
+ /**
+ * Components where the plugin is allowed to be loaded
+ *
+ * @var array
+ */
+ private $componentsEnabled = array('*');
+
+ /**
+ * Views where the plugin is allowed to be loaded
+ *
+ * @var array
+ */
+ private $viewsEnabled = array('*');
+
+ /**
+ * Is this plugin enabled in frontend?
+ *
+ * @var boolean
+ */
+ private $frontendEnabled = true;
+
+ /**
+ * Is this plugin enabled on backend?
+ *
+ * @var boolean
+ */
+ private $backendEnabled = false;
+
+ /**
+ * Constructor
+ *
+ * @param mixed &$subject Subject
+ */
+ function __construct( &$subject )
+ {
+ parent::__construct($subject);
+
+ // Load plugin parameters
+ $this->plugin = JPluginHelper::getPlugin(self::TYPE, self::NAME);
+ $this->params = new JRegistry($this->plugin->params);
+
+ // Init folder structure
+ $this->initFolders();
+
+ // Load plugin language
+ $this->loadLanguage('plg_' . self::TYPE . '_' . self::NAME, JPATH_ADMINISTRATOR);
+ }
+
+ /**
+ * This event is triggered before the framework creates the Head section of the Document.
+ *
+ * @return boolean
+ */
+ function onBeforeCompileHead()
+ {
+ // Validate view
+ if (!$this->validateUrl())
+ {
+ return true;
+ }
+
+ // Required objects
+ $app = JFactory::getApplication();
+ $doc = JFactory::getDocument();
+ $pageParams = $app->getParams();
+
+ // Check if we have to disable Mootools for this item
+ $mootoolsMode = $pageParams->get('mootable', $this->params->get('defaultMode', 0));
+ $moreMode = $pageParams->get('moreMode', $this->params->get('defaultMoreMode', 0));
+
+ $disableOnDebug = $this->params->get('disableWhenDebug', 1);
+
+ if (!$this->isAutoEnabled() && 0 == $mootoolsMode)
+ {
+ // Function used to replace window.addEvent()
+ $doc->addScriptDeclaration("function do_nothing() { return; }");
+
+ // Disable mootools javascript
+ $this->disableScript('/media/system/js/mootools-core.js');
+
+ // From v3.3 core does not require mootools anymore
+ if (version_compare(JVERSION, '3.3', '<'))
+ {
+ $this->disableScript('/media/system/js/core.js');
+ }
+
+ $this->disableScript('/media/system/js/mootools-more.js');
+ $this->disableScript('/media/system/js/caption.js');
+ $this->disableScript('/media/system/js/modal.js');
+ $this->disableScript('/media/system/js/mootools.js');
+ $this->disableScript('/plugins/system/mtupgrade/mootools.js');
+
+ // Disabled mootools javascript when debugging site
+ if ($disableOnDebug)
+ {
+ $this->disableScript('/media/system/js/mootools-core-uncompressed.js');
+ $this->disableScript('/media/system/js/mootools-core-uncompressed.js');
+ $this->disableScript('/media/system/js/mootools-more-uncompressed.js');
+ $this->disableScript('/media/system/js/core-uncompressed.js');
+ $this->disableScript('/media/system/js/caption-uncompressed.js');
+ }
+
+ // Disable css stylesheets
+ $this->disableStylesheet('/media/system/css/modal.css');
+ }
+ elseif (0 == $moreMode)
+ {
+ $this->disableScript('/media/system/js/mootools-more.js');
+
+ if ($disableOnDebug)
+ {
+ $this->disableScript('/media/system/js/mootools-more-uncompressed.js');
+ }
+ }
+
+ // Disable additional assets specified by the user
+ $this->disablePageScripts();
+ $this->disablePageStylesheets();
+
+ return true;
+ }
+
+ /**
+ * This event is triggered after pushing the document buffers into the template placeholders,
+ * retrieving data from the document and pushing it into the into the JResponse buffer.
+ * http://docs.joomla.org/Plugin/Events/System
+ *
+ * @return boolean
+ */
+ function onAfterRender()
+ {
+ // Validate view
+ if (!$this->validateUrl())
+ {
+ return true;
+ }
+
+ // Required objects
+ $app = JFactory::getApplication();
+ $doc = JFactory::getDocument();
+ $pageParams = $app->getParams();
+
+ // Check if we have to disable Mootools for this item
+ $mode = $pageParams->get('mootable', $this->params->get('defaultMode', 0));
+
+ if (!$this->isAutoEnabled() && !$mode)
+ {
+ // Get the generated content
+ $body = JResponse::getBody();
+
+ // Remove JCaption JS calls
+ $pattern = "/(new JCaption\()(.*)(\);)/isU";
+ $replacement = '';
+ $body = preg_replace($pattern, $replacement, $body);
+
+ // Null window.addEvent( calls
+ $pattern = "/(window.addEvent\()(.*)(,)/isU";
+ $body = preg_replace($pattern, 'do_nothing(', $body);
+ JResponse::setBody($body);
+ }
+
+ return true;
+ }
+
+ /**
+ * Change forms before they are shown to the user
+ *
+ * @param JForm $form JForm object
+ * @param array $data Data array
+ *
+ * @return boolean
+ */
+ public function onContentPrepareForm($form, $data)
+ {
+ // Check we have a form
+ if (!($form instanceof JForm))
+ {
+ $this->_subject->setError('JERROR_NOT_A_FORM');
+
+ return false;
+ }
+
+ // Extra parameters for menu edit
+ if ($form->getName() == 'com_menus.item')
+ {
+ $form->loadFile($this->pathPlugin . '/forms/menuitem.xml');
+ }
+
+ return true;
+ }
+
+ /**
+ * Remove a javascript file call from header
+ *
+ * @param string $script URL to script (both global/relative should work)
+ *
+ * @return void
+ */
+ private function disableScript($script)
+ {
+ $script = trim($script);
+
+ if (!empty($script))
+ {
+ $doc = JFactory::getDocument();
+ $uri = JUri::getInstance();
+
+ $relativePath = trim(str_replace($uri->getPath(), '', JUri::root()), '/');
+ $relativeScript = trim(str_replace($uri->getPath(), '', $script), '/');
+ $relativeUrl = str_replace($relativePath, '', $script);
+
+ // Try to disable relative and full URLs
+ unset($doc->_scripts[$script]);
+ unset($doc->_scripts[$relativeUrl]);
+ unset($doc->_scripts[JUri::root(true) . $script]);
+ unset($doc->_scripts[$relativeScript]);
+ }
+ }
+
+ /**
+ * Remove a stylesheet file call from header
+ *
+ * @param string $stylesheet URL to the stylesheet (both global/relative should work)
+ *
+ * @return void
+ */
+ private function disableStylesheet($stylesheet)
+ {
+ $stylesheet = trim($stylesheet);
+
+ if (!empty($stylesheet))
+ {
+ $doc = JFactory::getDocument();
+ $uri = JUri::getInstance();
+
+ $relativePath = trim(str_replace($uri->getPath(), '', JUri::root()), '/');
+ $relativeStylesheet = trim(str_replace($uri->getPath(), '', $stylesheet), '/');
+ $relativeUrl = str_replace($relativePath, '', $stylesheet);
+
+ // Try to disable relative and full URLs
+ unset($doc->_styleSheets[$stylesheet]);
+ unset($doc->_styleSheets[$relativeUrl]);
+ unset($doc->_styleSheets[JUri::root(true) . $stylesheet]);
+ unset($doc->_styleSheets[$relativeStylesheet]);
+ }
+ }
+
+ /**
+ * Disable the page scripts
+ *
+ * @return void
+ */
+ private function disablePageScripts()
+ {
+ $pageParams = JFactory::getApplication()->getParams();
+
+ // Other scripts disabled
+ $globalDisabled = str_replace("\n", ",", $this->params->get('manualDisable', null));
+ $menuDisabled = str_replace("\n", ",", $pageParams->get('disabledScripts', null));
+
+ $scriptsDisabled = array_unique(array_merge(explode(',', $globalDisabled), explode(',', $menuDisabled)));
+
+ // Disable 3rd party extensions added by the user
+ if (!empty($scriptsDisabled))
+ {
+ foreach ($scriptsDisabled as $script)
+ {
+ $this->disableScript($script);
+ }
+ }
+ }
+
+ /**
+ * Disable the page stylesheets
+ *
+ * @return void
+ */
+ private function disablePageStylesheets()
+ {
+ $pageParams = JFactory::getApplication()->getParams();
+
+ // Other scripts disabled
+ $globalDisabled = str_replace("\n", ",", $this->params->get('disabledStylesheets', null));
+ $menuDisabled = str_replace("\n", ",", $pageParams->get('disabledStylesheets', null));
+
+ $stylesheetsDisabled = array_unique(array_merge(explode(',', $globalDisabled), explode(',', $menuDisabled)));
+
+ if (!empty($stylesheetsDisabled))
+ {
+ foreach ($stylesheetsDisabled as $stylesheet)
+ {
+ $this->disableStylesheet($stylesheet);
+ }
+ }
+ }
+
+ /**
+ * initialize folder structure
+ *
+ * @return none
+ */
+ private function initFolders()
+ {
+ // Path
+ $this->pathPlugin = JPATH_PLUGINS . '/' . self::TYPE . '/' . self::NAME;
+
+ // Url
+ $this->urlPlugin = JURI::root(true) . "/plugins/" . self::TYPE . "/" . self::NAME;
+ }
+
+ /**
+ * Detect if the user is editing an article
+ *
+ * @return boolean
+ */
+ private function isAutoEnabled()
+ {
+ $app = JFactory::getApplication();
+ $jinput = $app->input;
+ $option = $jinput->get('option', null);
+ $view = $jinput->get('view', null);
+ $id = $jinput->get('id', null);
+ $layout = $jinput->get('layout', null);
+
+ // Always enable mootools for given components
+ if ($alwaysEnable = $this->params->get('alwaysEnable', null))
+ {
+ // Allow ENTER separated and remove spaces
+ $components = str_replace(array("\n", " "), array(",", ""), $alwaysEnable);
+ $components = explode(',', $components);
+
+ if (in_array($option, $components))
+ {
+ return true;
+ }
+ }
+
+ // Allways enable for content edition
+ $isContentEdit = $this->params->get('contentEdition', 1);
+
+ if ($app->isSite() && $isContentEdit && $option == 'com_content' && $view == 'form' && $layout == 'edit')
+ {
+ return true;
+ }
+
+ // Allways enable for frontend com_users (login, profile edit, etc.)
+ $enableComUsers = $this->params->get('enableComUsers', 1);
+
+ if ($app->isSite() && $enableComUsers && $option == 'com_users')
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * validate if the plugin is enabled for current application (frontend / backend)
+ *
+ * @return boolean
+ */
+ private function validateApplication()
+ {
+ $app = JFactory::getApplication();
+
+ if ( ($app->isSite() && $this->frontendEnabled) || ($app->isAdmin() && $this->backendEnabled) )
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Validate option in url
+ *
+ * @return boolean
+ */
+ private function validateComponent()
+ {
+ $option = JFactory::getApplication()->input->get('option');
+
+ if ( in_array('*', $this->componentsEnabled) || in_array($option, $this->componentsEnabled) )
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Custom method for extra validations
+ *
+ * @return true
+ */
+ private function validateExtra()
+ {
+ return $this->validateApplication();
+ }
+
+ /**
+ * Is the plugin enabled for this url?
+ *
+ * @return boolean
+ */
+ private function validateUrl()
+ {
+ if ( $this->validateComponent() && $this->validateView())
+ {
+ if (method_exists($this, 'validateExtra'))
+ {
+ return $this->validateExtra();
+ }
+ else
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * validate view parameter in url
+ *
+ * @return boolean
+ */
+ private function validateView()
+ {
+ $view = JFactory::getApplication()->input->get('view');
+
+ if ( in_array('*', $this->viewsEnabled) || in_array($view, $this->viewsEnabled))
+ {
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/deployed/mootable/plugins/system/mootable/mootable.xml b/deployed/mootable/plugins/system/mootable/mootable.xml
new file mode 100644
index 00000000..39a7b2e3
--- /dev/null
+++ b/deployed/mootable/plugins/system/mootable/mootable.xml
@@ -0,0 +1,117 @@
+
+
+ PLG_SYS_MOOTABLE
+ Roberto Segura
+ June 2015
+ Copyright (C) 2012-2013 Roberto Segura. All rights reserved.
+ http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
+ roberto@phproberto.com
+ http://digitaldisseny.com/en/extensions/showtags-content-tags-joomla-plugin
+ 1.1.3
+ PLG_SYS_MOOTABLE_XML_DESC
+
+ forms
+ mootable.php
+ index.html
+
+
+
+ language/en-GB/en-GB.plg_system_mootable.ini
+ language/en-GB/en-GB.plg_system_mootable.sys.ini
+
+ language/es-ES/es-ES.plg_system_mootable.ini
+ language/es-ES/es-ES.plg_system_mootable.sys.ini
+
+
+ https://raw.github.com/phproberto/joomla-updates/master/plg_sys_mootable/updates.xml
+
+
+
+
+
+
+
+
+