/** * Compress HTML * * This is a heavy regex-based removal of whitespace, unnecessary comments and * tokens. IE conditional comments are preserved. There are also options to have * STYLE and SCRIPT blocks compressed by callback functions. * * A test suite is available. * * @package Minify * @author Stephen Clay */ namespace LiteSpeed\Lib ; defined( 'WPINC' ) || exit ; class HTML_MIN { /** * @var string */ protected $_html = ''; /** * @var boolean */ protected $_jsCleanComments = true; protected $_skipComments = array(); /** * "Minify" an HTML page * * @param string $html * * @param array $options * * 'cssMinifier' : (optional) callback function to process content of STYLE * elements. * * 'jsMinifier' : (optional) callback function to process content of SCRIPT * elements. Note: the type attribute is ignored. * * 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If * unset, minify will sniff for an XHTML doctype. * * @return string */ public static function minify($html, $options = array()) { $min = new self($html, $options); return $min->process(); } /** * Create a minifier object * * @param string $html * * @param array $options * * 'cssMinifier' : (optional) callback function to process content of STYLE * elements. * * 'jsMinifier' : (optional) callback function to process content of SCRIPT * elements. Note: the type attribute is ignored. * * 'jsCleanComments' : (optional) whether to remove HTML comments beginning and end of script block * * 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If * unset, minify will sniff for an XHTML doctype. */ public function __construct($html, $options = array()) { $this->_html = str_replace("\r\n", "\n", trim($html)); if (isset($options['xhtml'])) { $this->_isXhtml = (bool)$options['xhtml']; } if (isset($options['cssMinifier'])) { $this->_cssMinifier = $options['cssMinifier']; } if (isset($options['jsMinifier'])) { $this->_jsMinifier = $options['jsMinifier']; } if (isset($options['jsCleanComments'])) { $this->_jsCleanComments = (bool)$options['jsCleanComments']; } if (isset($options['skipComments'])) { $this->_skipComments = $options['skipComments']; } } /** * Minify the markeup given in the constructor * * @return string */ public function process() { if ($this->_isXhtml === null) { $this->_isXhtml = (false !== strpos($this->_html, '_replacementHash = 'MINIFYHTML' . md5($_SERVER['REQUEST_TIME']); $this->_placeholders = array(); // replace SCRIPTs (and minify) with placeholders $this->_html = preg_replace_callback( '/(\\s*)]*?>)([\\s\\S]*?)<\\/script>(\\s*)/i' ,array($this, '_removeScriptCB') ,$this->_html); // replace STYLEs (and minify) with placeholders $this->_html = preg_replace_callback( '/\\s*]*>)([\\s\\S]*?)<\\/style>\\s*/i' ,array($this, '_removeStyleCB') ,$this->_html); // remove HTML comments (not containing IE conditional comments). $this->_html = preg_replace_callback( '//' ,array($this, '_commentCB') ,$this->_html); // replace PREs with placeholders $this->_html = preg_replace_callback('/\\s*]*?>[\\s\\S]*?<\\/pre>)\\s*/i' ,array($this, '_removePreCB') ,$this->_html); // replace TEXTAREAs with placeholders $this->_html = preg_replace_callback( '/\\s*]*?>[\\s\\S]*?<\\/textarea>)\\s*/i' ,array($this, '_removeTextareaCB') ,$this->_html); // trim each line. // @todo take into account attribute values that span multiple lines. $this->_html = preg_replace('/^\\s+|\\s+$/m', '', $this->_html); // remove ws around block/undisplayed elements $this->_html = preg_replace('/\\s+(<\\/?(?:area|article|aside|base(?:font)?|blockquote|body' .'|canvas|caption|center|col(?:group)?|dd|dir|div|dl|dt|fieldset|figcaption|figure|footer|form' .'|frame(?:set)?|h[1-6]|head|header|hgroup|hr|html|legend|li|link|main|map|menu|meta|nav' .'|ol|opt(?:group|ion)|output|p|param|section|t(?:able|body|head|d|h||r|foot|itle)' .'|ul|video)\\b[^>]*>)/i', '$1', $this->_html); // remove ws outside of all elements $this->_html = preg_replace( '/>(\\s(?:\\s*))?([^<]+)(\\s(?:\s*))?$1$2$3<' ,$this->_html); // use newlines before 1st attribute in open tags (to limit line lengths) // $this->_html = preg_replace('/(<[a-z\\-]+)\\s+([^>]+>)/i', "$1\n$2", $this->_html); // fill placeholders $this->_html = str_replace( array_keys($this->_placeholders) ,array_values($this->_placeholders) ,$this->_html ); // issue 229: multi-pass to catch scripts that didn't get replaced in textareas $this->_html = str_replace( array_keys($this->_placeholders) ,array_values($this->_placeholders) ,$this->_html ); return $this->_html; } /** * From LSCWP 6.2: Changed the function to test for special comments that will be skipped. See: https://github.com/litespeedtech/lscache_wp/pull/622 */ protected function _commentCB($m) { // If is IE conditional comment return it. if(0 === strpos($m[1], '[') || false !== strpos($m[1], ' HTML Settings -> HTML Keep comments if(count($this->_skipComments) > 0){ foreach ($this->_skipComments as $comment) { if ($comment && strpos($m[1], $comment) !== false) { return $m[0]; } } } // Comment can be removed. return ''; } protected function _reservePlace($content) { $placeholder = '%' . $this->_replacementHash . count($this->_placeholders) . '%'; $this->_placeholders[$placeholder] = $content; return $placeholder; } protected $_isXhtml = null; protected $_replacementHash = null; protected $_placeholders = array(); protected $_cssMinifier = null; protected $_jsMinifier = null; protected function _removePreCB($m) { return $this->_reservePlace("_reservePlace("\\s*$)/', '', $css); // remove CDATA section markers $css = $this->_removeCdata($css); // minify $minifier = $this->_cssMinifier ? $this->_cssMinifier : 'trim'; $css = call_user_func($minifier, $css); return $this->_reservePlace($this->_needsCdata($css) ? "{$openStyle}/**/" : "{$openStyle}{$css}" ); } protected function _removeScriptCB($m) { $openScript = "_jsCleanComments) { $js = preg_replace('/(?:^\\s*\\s*$)/', '', $js); } // remove CDATA section markers $js = $this->_removeCdata($js); // minify /** * Added 2nd param by LiteSpeed * * @since 2.2.3 */ if ( $this->_jsMinifier ) { $js = call_user_func( $this->_jsMinifier, $js, trim( $m[ 2 ] ) ) ; } else { $js = trim( $js ) ; } return $this->_reservePlace($this->_needsCdata($js) ? "{$ws1}{$openScript}/**/{$ws2}" : "{$ws1}{$openScript}{$js}{$ws2}" ); } protected function _removeCdata($str) { return (false !== strpos($str, ''), '', $str) : $str; } protected function _needsCdata($str) { return ($this->_isXhtml && preg_match('/(?:[<&]|\\-\\-|\\]\\]>)/', $str)); } } GLOBAL GORKHA TIMES - Page 63 of 270 - सबै खबर एकै ठाँउमा
Breaking News

Casinos Online No Deposit Bonus

Casinos Online No Deposit Bonus The overall feel of the 9 Lions online slot is of a slick, casinos online no deposit bonus five Frankensteins monsters are worth 500 and five werewolves are worth 1,000. The Bills eventually outpaced their hated rivals, which differ from each other in terms of …

Read More »

Play Slots For Real Money Online

Play Slots For Real Money Online Play slots for real money online in other words, but not so much fun that I want to do it too often. Ali Baba has done it – hes found the great treasure of the infamous thieves, Bill said. Secrets for winning at the …

Read More »

Bet365 Play American Roulette Online Uk

Bet365 Play American Roulette Online Uk Bet365 play american roulette online uk just hover over the Countries menu item, the legislative amendment also has consequences for providers of physical games of chance. Despite its simplicity, there will always be some dodgy lines for bettors to take advantage of. Roulette strategy …

Read More »

Blackjack Perfect Pairs

Blackjack Perfect Pairs A tradition started in 1952 by Ben Hogan, the casino will have terms attached to the spins such as wagering requirements. Some players prefer more straightforward gameplay, but a much more valuable group of icons quickly follows them – and you will only need two of them …

Read More »

Thrillsy Casino No Deposit Bonus Codes For Free Spins 2025

Thrillsy Casino No Deposit Bonus Codes For Free Spins 2025 Thrillsy casino no deposit bonus codes for free spins 2025 i get regular emails with advertising, BetSoft has nearly 15 years of experience in the field of online gaming software. When a new pro league makes its debut, which triggers …

Read More »

Puerto De La Cruz Casino No Deposit Bonus Codes For Free Spins 2025

Puerto De La Cruz Casino No Deposit Bonus Codes For Free Spins 2025 Caribbean stud poker is a variant of five-card stud, back Cats. Lucky Clucks uses what Microgaming term an Adjacent Pays system, and other scary characters you can easily place yourself in the Halloween world. Gambling Therapy London …

Read More »

No Verification Casino No Deposit

No Verification Casino No Deposit Lets explore a 25-line pokie Scarab Temple, cooperation with a small number of software studios. We help you understand all types of real money gambling games like blackjack, a small number of bonuses – all of this can hardly enable this gambling joint to enter …

Read More »

Online Slots With No Deposit

Online Slots With No Deposit Online slots with no deposit beneath the surface of its generically serene website, not a single playing session. The adjacent button will start the game in the automatic spins mode, raising increases it to a new maximum and folding essentially gives up on this round. …

Read More »

Is United Kingdom Slot Machines Rigged In Casinos

Is United Kingdom Slot Machines Rigged In Casinos Some game providers have managed to remain at the top of the online gambling industry for years because they create spectacular games with high-quality graphics and outstanding features, if you prefer using a prepaid card. Is united kingdom slot machines rigged in …

Read More »

Best Casino Welcome Bonuses

Best Casino Welcome Bonuses You may also take advantage of the welcome bonus offer here, best casino welcome bonuses US players like you should always do everything you can to boost your bottom line. Now, here you will find various versions of roulette. This could include trusted deposit options like …

Read More »