/** * Initialising Theme Customiser if necessary * @param (bool) If true, additional LESS variables will be added to Theme Customiser */ protected function attachThemeCustomiser($useVars = true) { if (self::$less_js_included == false) { //JHTML::_('behavior.framework', true); JHtml::_('jquery.ui', array('core', 'sortable')); // For standard color picker JHtml::_('script', 'system/html5fallback.js', false, true); JHtml::_('behavior.colorpicker'); if (!defined('JMF_TPL_ASSETS')) { define('JMF_TPL_ASSETS', JURI::root(false) . 'plugins/system/ef4_jmframework/includes/assets/admin/'); } $app = JFactory::getApplication(); $jconf = JFactory::getConfig(); $cookie_path = $jconf->get('cookie_path') == '' ? JUri::base(true) : $jconf->get('cookie_path'); $cookie_domain = $jconf->get('cookie_domain') == '' ? $_SERVER['HTTP_HOST'] : $jconf->get('cookie_domain'); $global_vars = array(); // taking LESS initial variables generated by the template (based on parameters) if ($useVars) { $params = $this->document->params->toArray(); $variables = $this->params->get('jm_bootstrap_variables', array()); $variables = array_merge($params, $variables); if (!empty($variables)) { foreach ($variables as $k => $v) { $global_vars['@' . $k] = $v; } } } // Making sure that variables don't start with @. // Less.js doesn't want @ before variable name, whicle LessC PHP compiler requires it. $form_vars = array(); foreach ($global_vars as $k => $v) { $form_vars[str_replace('@', '', $k)] = $v; } // Including and merging variables stored in a Cookie by Theme Customiser, which override default params. $ts_cookie = JFactory::getApplication()->input->cookie->get('JMTH_TIMESTAMP_' . $this->template, 0); if ((int) $ts_cookie != -1) { //$form_cookie_vars = JFactory::getApplication()->input->cookie->get('JM_form_vars_'.$this->template, false, 'raw'); $form_cookie_vars = JFactory::getApplication()->getUserState($this->template . '.themer.state', false); if ($form_cookie_vars) { $cashed_vars = json_decode($form_cookie_vars, true); foreach ($cashed_vars as $k => $v) { if (preg_replace('#[^0-9a-z]#i', '', $v) != '') { $form_vars[$k] = $v; } } } } JFactory::getApplication()->input->cookie->set('JMTH_TIMESTAMP_' . $this->template, time(), 0, $cookie_path); // Saving all set of variables into Cookie. Just to be sure they won't get lost somewhere. //JFactory::getApplication()->input->cookie->set('JM_form_vars_'.$this->template, json_encode($form_vars), 0, $cookie_path); JFactory::getApplication()->setUserState($this->template . '.themer.state', json_encode($form_vars)); // All LESS vars that go directly in LESS object start with 'JM'. We don't need to pass any other variables. $less_vars = array(); foreach ($form_vars as $k => $v) { if (substr($k, 0, 2) == 'JM') { $less_vars[$k] = $v; } } $developer_mode = $this->params->get('devmode', false) == '1' ? true : false; $less_mode = $developer_mode ? 'development' : 'production'; $less_log = $developer_mode ? '2' : '0'; $less_dump = $developer_mode ? 'comments' : ''; $script_init = ' less = { env: "' . $less_mode . '", mode: "browser", async: false, logLevel: ' . $less_log . ', fileAsync: false, poll: 1000, functions: {}, dumpLineNumbers: "' . $less_dump . '", relativeUrls: false, rootpath: "' . JMF_TPL_URL . '/less/", globalVars: ' . json_encode($less_vars) . ' };'; // Must use addCustomTag() instead of addScript(), because LESS's init script has to go before LESS library. $this->document->addCustomTag('<script type="text/javascript">' . $script_init . '</script>'); $this->document->addCustomTag('<script type="text/javascript" src="' . JMF_FRAMEWORK_URL . '/includes/assets/template/themecustomiser/less-1.7.0.js' . '"></script>'); $this->document->addCustomTag('<script type="text/javascript" src="' . JMF_FRAMEWORK_URL . '/includes/assets/template/themecustomiser/jmthemecustomiser.jquery.js' . '"></script>'); $language = array('LANG_PLEASE_WAIT' => JText::_('PLG_SYSTEM_JMFRAMEWORK_THEMER_WAIT'), 'LANG_PLEASE_WAIT_APPLYING' => JText::_('PLG_SYSTEM_JMFRAMEWORK_THEMER_WAIT_APPLYING'), 'LANG_PLEASE_WAIT_SAVING' => JText::_('PLG_SYSTEM_JMFRAMEWORK_THEMER_WAIT_SAVING'), 'LANG_PLEASE_WAIT_RELOADING' => JText::_('PLG_SYSTEM_JMFRAMEWORK_THEMER_WAIT_RELOADING'), 'LANG_ERROR_FORBIDDEN' => JText::_('PLG_SYSTEM_JMFRAMEWORK_THEME_LOGIN_ERROR'), 'LANG_ERROR_UNAUTHORISED' => JText::_('PLG_SYSTEM_JMFRAMEWORK_THEME_ACCESS_ERROR'), 'LANG_ERROR_BAD_REQUEST' => JText::_('PLG_SYSTEM_JMFRAMEWORK_THEME_BAD_REQUEST_ERROR')); // extending JMThemeCustomiser with some variables and initialising Theme Customiser $script_interface = "\n jQuery.extend(JMThemeCustomiser, {\n url: '" . JFactory::getURI()->toString() . "',\n lang: " . json_encode($language) . ",\n lessVars: " . json_encode($form_vars) . ",\n cookie: {path: '" . $cookie_path . "', domain: '" . $cookie_domain . "'},\n styleId : " . (int) $app->getTemplate('template')->id . ",\n login_form : " . (int) $this->document->params->get('themerlogin', 0) . "\n });\n\n JMThemeCustomiser.init(\"" . $this->template . "\");\n \n jQuery(document).ready(function(){\n JMThemeCustomiser.render();\n jQuery(document).trigger('JMFrameworkInit');\n });\n "; $this->document->addCustomTag('<script type="text/javascript">' . $script_interface . '</script>'); // Adding all scripts manually $this->document->addStyleSheet(JMF_FRAMEWORK_URL . '/includes/assets/template/themecustomiser/jmthemecustomiser.css'); //$this->document->addStyleSheet(JURI::root(false).'plugins/system/ef4_jmframework/includes/assets/admin/formfields/jmiriscolor/iris.min.css'); $this->document->addScript(JURI::root(false) . 'plugins/system/ef4_jmframework/includes/assets/admin/js/jquery/jquery.ui.draggable.js'); $this->document->addScript(JURI::root(false) . 'plugins/system/ef4_jmframework/includes/assets/admin/js/jquery/jquery.ui.slider.js'); $this->document->addScript(JURI::root(false) . 'plugins/system/ef4_jmframework/includes/assets/admin/js/jquery/jquery.ui.accordion.js'); //$this->document->addScript(JURI::root(false).'plugins/system/ef4_jmframework/includes/assets/admin/formfields/jmiriscolor/iris.js'); $this->document->addScript(JURI::root(false) . 'plugins/system/ef4_jmframework/includes/assets/admin/js/jmoptiongroups.js'); $this->document->addScript(JURI::root(false) . 'plugins/system/ef4_jmframework/includes/assets/admin/js/jmgooglefont.js'); $this->document->addScriptDeclaration("\n jQuery(document).on('JMFrameworkInit', function(){\n jQuery('.jmirispicker').each(function() {\n jQuery(this).iris({\n hide: true,\n palettes: true\n });\n });\n \n jQuery('.minicolors').each(function() {\n jQuery(this).minicolors({\n control: jQuery(this).attr('data-control') || 'hue',\n position: jQuery(this).attr('data-position') || 'right',\n theme: 'bootstrap'\n });\n });\n \n jQuery(document).on('click',function(event){\n jQuery('.jmirispicker').each(function() {\n if (event.target != this && typeof jQuery(this).iris != 'undefined') {\n jQuery(this).iris('hide');\n }\n });\n });\n \n var JMThemerGoogleFonts = new JMGoogleFontHelper('.google-font-url').initialise();\n \n });\n "); self::$less_js_included = true; } }