Пример #1
0
 /**
  * Test...
  *
  * @return  void
  */
 public function testAddStyleSheet()
 {
     $this->object->addStyleSheet('http://www.joomla.org', 'text/style', 'screen', array('attrib1' => 'value1'));
     $this->assertThat($this->object->_styleSheets['http://www.joomla.org']['mime'], $this->equalTo('text/style'));
     $this->assertThat($this->object->_styleSheets['http://www.joomla.org']['media'], $this->equalTo('screen'));
     $this->assertThat($this->object->_styleSheets['http://www.joomla.org']['attribs'], $this->equalTo(array('attrib1' => 'value1')));
 }
Пример #2
0
 public function addCompiledStyleSheet($path)
 {
     $path = $this->lessToCss($path);
     if ($path) {
         return $this->document->addStyleSheet($path);
     }
 }
Пример #3
0
 public function populate()
 {
     if (!empty($this->script_files)) {
         ksort($this->script_files);
         foreach ($this->script_files as $order => $order_entries) {
             foreach ($order_entries as $entry_key => $entry) {
                 $this->document->addScript($entry);
             }
         }
     }
     if (!empty($this->inline_scripts)) {
         ksort($this->inline_scripts);
         foreach ($this->inline_scripts as $order => $order_entries) {
             foreach ($order_entries as $entry_key => $entry) {
                 $this->document->addScriptDeclaration($entry);
             }
         }
     }
     if (!empty($this->style_files)) {
         ksort($this->style_files);
         foreach ($this->style_files as $order => $order_entries) {
             foreach ($order_entries as $entry_key => $entry) {
                 $this->document->addStyleSheet($entry);
             }
         }
     }
     if (!empty($this->inline_styles)) {
         ksort($this->inline_styles);
         foreach ($this->inline_styles as $order => $order_entries) {
             foreach ($order_entries as $entry_key => $entry) {
                 $this->document->addStyleDeclaration($entry);
             }
         }
     }
     // Generate domready script
     if (!empty($this->domready_scripts)) {
         ksort($this->domready_scripts);
         $strHtml = 'window.addEvent(\'domready\', function() {';
         foreach ($this->domready_scripts as $order => $order_entries) {
             foreach ($order_entries as $entry_key => $entry) {
                 $strHtml .= chr(13) . $entry;
             }
         }
         $strHtml .= chr(13) . '});' . chr(13);
         $this->document->addScriptDeclaration($strHtml);
     }
     if (!empty($this->loadevent_scripts)) {
         ksort($this->loadevent_scripts);
         $strHtml = 'window.addEvent(\'load\', function() {';
         foreach ($this->loadevent_scripts as $order => $order_entries) {
             foreach ($order_entries as $entry_key => $entry) {
                 $strHtml .= chr(13) . $entry;
             }
         }
         $strHtml .= chr(13) . '});' . chr(13);
         $this->document->addScriptDeclaration($strHtml);
     }
     $this->populated = true;
     $this->reset();
 }
 /**
  * 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;
     }
 }
 public function addStyle($file, $order = self::DEFAULT_ORDER)
 {
     if (!empty($file)) {
         $this->document->addStyleSheet($file);
     }
 }
Пример #6
0
 /**
  * Generates the head HTML and return the results as a string
  *
  * @param   JDocument  $document  The document for which the head will be created
  *
  * @return  string  The head hTML
  *
  * @since   11.1
  */
 public function fetchHead($document)
 {
     // Convert the tagids to titles
     if (isset($document->_metaTags['standard']['tags'])) {
         $tagsHelper = new JHelperTags();
         $document->_metaTags['standard']['tags'] = implode(', ', $tagsHelper->getTagNames($document->_metaTags['standard']['tags']));
     }
     // Trigger the onBeforeCompileHead event
     $app = JFactory::getApplication();
     $app->triggerEvent('onBeforeCompileHead');
     // Get line endings
     $lnEnd = $document->_getLineEnd();
     $tab = $document->_getTab();
     $tagEnd = ' />';
     $buffer = '';
     // Generate charset when using HTML5 (should happen first)
     if ($document->isHtml5()) {
         $buffer .= $tab . '<meta charset="' . $document->getCharset() . '" />' . $lnEnd;
     }
     // Generate base tag (need to happen early)
     $base = $document->getBase();
     if (!empty($base)) {
         $buffer .= $tab . '<base href="' . $document->getBase() . '" />' . $lnEnd;
     }
     // Generate META tags (needs to happen as early as possible in the head)
     foreach ($document->_metaTags as $type => $tag) {
         foreach ($tag as $name => $content) {
             if ($type == 'http-equiv' && !($document->isHtml5() && $name == 'content-type')) {
                 $buffer .= $tab . '<meta http-equiv="' . $name . '" content="' . htmlspecialchars($content) . '" />' . $lnEnd;
             } elseif ($type == 'standard' && !empty($content)) {
                 $buffer .= $tab . '<meta name="' . $name . '" content="' . htmlspecialchars($content) . '" />' . $lnEnd;
             }
         }
     }
     // Don't add empty descriptions
     $documentDescription = $document->getDescription();
     if ($documentDescription) {
         $buffer .= $tab . '<meta name="description" content="' . htmlspecialchars($documentDescription) . '" />' . $lnEnd;
     }
     // Don't add empty generators
     $generator = $document->getGenerator();
     if ($generator) {
         $buffer .= $tab . '<meta name="generator" content="' . htmlspecialchars($generator) . '" />' . $lnEnd;
     }
     $buffer .= $tab . '<title>' . htmlspecialchars($document->getTitle(), ENT_COMPAT, 'UTF-8') . '</title>' . $lnEnd;
     // Generate link declarations
     foreach ($document->_links as $link => $linkAtrr) {
         $buffer .= $tab . '<link href="' . $link . '" ' . $linkAtrr['relType'] . '="' . $linkAtrr['relation'] . '"';
         if ($temp = JArrayHelper::toString($linkAtrr['attribs'])) {
             $buffer .= ' ' . $temp;
         }
         $buffer .= ' />' . $lnEnd;
     }
     // Generate stylesheet
     $css = '';
     $css_path = JPATH_THEMES . '/' . $document->template . '/css/';
     $params = $document->params;
     $css .= 'body {' . 'background-color:' . $params->get('body_background_color', '#fff') . ';' . ($params->get('body_background_image', '') ? 'background-image: url(/' . $params->get('body_background_image', '') . ');' : '') . 'color:' . $params->get('body_font_color', '#222') . ';' . 'font-size:' . $params->get('body_font_size', '14px') . '}';
     $css .= 'a{' . 'color:' . $params->get('link_color', '#e67e22') . '}';
     $css .= 'a:hover{' . 'color:' . $params->get('link_hover_color', '#ffa348') . '}';
     $css .= '.mainmenu .nav a{' . 'color:' . $params->get('mainmenu_font_color', '#222') . ' !important;' . 'font-size:' . $params->get('menu_font_size', '16px') . '}';
     $css .= '.mainmenu .nav li.active a, .mainmenu .nav li a:hover{' . 'background-color:' . $params->get('mainmenu_active_background_color', '#fff') . ';' . 'color:' . $params->get('mainmenu_active_font_color', '#fff') . ' !important}';
     if ($params->get('full_width_head', 0)) {
         $css .= '#top-blocks{' . 'background-color:' . $params->get('head_background_color', '#222') . ';' . 'color:' . $params->get('head_font_color', '#fff') . '}';
     } else {
         $css .= '#top-blocks > .container{' . 'background-color:' . $params->get('head_background_color', '#222') . ';' . 'color:' . $params->get('head_font_color', '#fff') . '}';
     }
     if ($params->get('full_width_menu', 0)) {
         $css .= '.mainmenu {' . 'background-color:' . $params->get('mainmenu_background_color', '#e67e22') . '}';
     } else {
         $css .= '.mainmenu > .container{' . 'background-color:' . $params->get('mainmenu_background_color', '#e67e22') . '}';
     }
     if ($params->get('full_width_footer', 0)) {
         $css .= 'footer{' . 'background-color:' . $params->get('footer_background_color', '#222') . ';' . 'color:' . $params->get('footer_font_color', '#fff') . '}';
     } else {
         $css .= 'footer > .container{' . 'background-color:' . $params->get('footer_background_color', '#222') . ';' . 'color:' . $params->get('footer_font_color', '#fff') . '}';
     }
     $css .= 'h1{font-size:' . $params->get('h1_font_size', '1.8em') . '}';
     $css .= 'h2{font-size:' . $params->get('h2_font_size', '1.6em') . '}';
     $css .= 'h3{font-size:' . $params->get('h3_font_size', '1.4em') . '}';
     $css .= 'h4{font-size:' . $params->get('h4_font_size', '1.3em') . '}';
     $css .= 'h5{font-size:' . $params->get('h5_font_size', '1.2em') . '}';
     $css = $this->_compress($css);
     file_put_contents($css_path . 'global.css', $css);
     $rel_path = 'templates/' . $document->template . '/css/global.css';
     $document->addStyleSheet($rel_path);
     if ($document->params->get('compile_css', 0)) {
         ob_start();
         foreach ($document->_styleSheets as $strSrc => $strAttr) {
             $cssFile = JPATH_BASE . DS . $strSrc;
             if (file_exists($cssFile)) {
                 include $cssFile;
             }
         }
         foreach ($document->_style as $type => $content) {
             echo $content;
         }
         $oc = ob_get_contents();
         ob_end_clean();
         $css = $this->_compress($oc);
         file_put_contents($css_path . 'all.css', $css);
         $rel_path = 'templates/' . $document->template . '/css/all.css';
         $buffer .= $tab . '<link rel="stylesheet" href="' . $rel_path . '"';
         $buffer .= $tagEnd . $lnEnd;
     } else {
         foreach ($document->_styleSheets as $strSrc => $strAttr) {
             $buffer .= $tab . '<link rel="stylesheet" href="' . $strSrc . '"';
             if (!is_null($strAttr['mime']) && (!$document->isHtml5() || $strAttr['mime'] != 'text/css')) {
                 $buffer .= ' type="' . $strAttr['mime'] . '"';
             }
             if (!is_null($strAttr['media'])) {
                 $buffer .= ' media="' . $strAttr['media'] . '"';
             }
             if ($temp = JArrayHelper::toString($strAttr['attribs'])) {
                 $buffer .= ' ' . $temp;
             }
             $buffer .= $tagEnd . $lnEnd;
         }
     }
     if (!$document->params->get('disable_scripts', 0)) {
         // Generate script file links
         foreach ($document->_scripts as $strSrc => $strAttr) {
             $buffer .= $tab . '<script src="' . $strSrc . '"';
             $defaultMimes = array('text/javascript', 'application/javascript', 'text/x-javascript', 'application/x-javascript');
             if (!is_null($strAttr['mime']) && (!$document->isHtml5() || !in_array($strAttr['mime'], $defaultMimes))) {
                 $buffer .= ' type="' . $strAttr['mime'] . '"';
             }
             if ($strAttr['defer']) {
                 $buffer .= ' defer="defer"';
             }
             if ($strAttr['async']) {
                 $buffer .= ' async="async"';
             }
             $buffer .= '></script>' . $lnEnd;
         }
         // Generate script declarations
         foreach ($document->_script as $type => $content) {
             $buffer .= $tab . '<script type="' . $type . '">' . $lnEnd;
             // This is for full XHTML support.
             if ($document->_mime != 'text/html') {
                 $buffer .= $tab . $tab . '<![CDATA[' . $lnEnd;
             }
             $buffer .= $content . $lnEnd;
             // See above note
             if ($document->_mime != 'text/html') {
                 $buffer .= $tab . $tab . ']]>' . $lnEnd;
             }
             $buffer .= $tab . '</script>' . $lnEnd;
         }
         // Generate script language declarations.
         if (count(JText::script())) {
             $buffer .= $tab . '<script type="text/javascript">' . $lnEnd;
             $buffer .= $tab . $tab . '(function() {' . $lnEnd;
             $buffer .= $tab . $tab . $tab . 'var strings = ' . json_encode(JText::script()) . ';' . $lnEnd;
             $buffer .= $tab . $tab . $tab . 'if (typeof Joomla == \'undefined\') {' . $lnEnd;
             $buffer .= $tab . $tab . $tab . $tab . 'Joomla = {};' . $lnEnd;
             $buffer .= $tab . $tab . $tab . $tab . 'Joomla.JText = strings;' . $lnEnd;
             $buffer .= $tab . $tab . $tab . '}' . $lnEnd;
             $buffer .= $tab . $tab . $tab . 'else {' . $lnEnd;
             $buffer .= $tab . $tab . $tab . $tab . 'Joomla.JText.load(strings);' . $lnEnd;
             $buffer .= $tab . $tab . $tab . '}' . $lnEnd;
             $buffer .= $tab . $tab . '})();' . $lnEnd;
             $buffer .= $tab . '</script>' . $lnEnd;
         }
     }
     if (!$document->params->get('compile_css', 0)) {
         // Generate stylesheet declarations
         foreach ($document->_style as $type => $content) {
             $buffer .= $tab . '<style type="' . $type . '">' . $lnEnd;
             // This is for full XHTML support.
             if ($document->_mime != 'text/html') {
                 $buffer .= $tab . $tab . '<![CDATA[' . $lnEnd;
             }
             $buffer .= $content . $lnEnd;
             // See above note
             if ($document->_mime != 'text/html') {
                 $buffer .= $tab . $tab . ']]>' . $lnEnd;
             }
             $buffer .= $tab . '</style>' . $lnEnd;
         }
     }
     foreach ($document->_custom as $custom) {
         $buffer .= $tab . $custom . $lnEnd;
     }
     return $buffer;
 }
Пример #7
0
 /**
  * Call a CSS file. Manage fork files.
  *
  * @access	protected static
  * @param	JDocument	$doc	Document.
  * @param	string	$base	Component base from site root.
  * @param	string	$file	Component file.
  * @param	boolean	$replace	Replace the file or override. (Default : Override)
  * @return	void
  *
  * @since	Cook 2.0
  */
 protected static function addStyleSheet($doc, $base, $file, $replace = false)
 {
     $url = JURI::root(true) . '/' . $base . '/' . $file;
     $url = str_replace(DS, '/', $url);
     $urlFork = null;
     if (file_exists(JPATH_SITE . DS . $base . DS . 'fork' . DS . $file)) {
         $urlFork = JURI::root(true) . '/' . $base . '/fork/' . $file;
         $urlFork = str_replace(DS, '/', $urlFork);
     }
     if ($replace && $urlFork) {
         $url = $urlFork;
     }
     $doc->addStyleSheet($url);
     if (!$replace && $urlFork) {
         $doc->addStyleSheet($urlFork);
     }
 }
Пример #8
0
 /**
  * @testdox  Test that addStyleSheet returns an instance of $this
  */
 public function testEnsureAddStylesheetReturnsThisObject()
 {
     $this->assertSame($this->object, $this->object->addStyleSheet('http://www.joomla.org/media/system/css/system.css'));
 }
Пример #9
0
 /**
  * @param       $file
  *
  * @internal param int $priority
  * @internal param array $browserspecific
  */
 public function addStyle($file)
 {
     $this->document->addStyleSheet($file);
 }