Code LightСтолкнулся с необходимостью выводить подсвеченный код на страницах. К сожалению, не удалось найти нормального плагина для этой цели. Все, что есть на JED, не выдерживает критики. Поиск в сети не дал приемлемых результатов.



Суть проблемы. Дело в том, что практически все плагины, включая системный плагин подсветки в самой Джумла, добавляют подсветку на этапе создания материала. То есть, создают большое количество мусорных тегов, которые хранятся в базе данных и раздувают её. Кроме того, весь этот мусор отправляется сервером вместе с текстом материала, замедляя работу сайта. Вычислить такие плагины легко – они требуют визуального редактора для своей работы, обычно, JCE или TinyMCE.



Альтернативным вариантом был бы плагин, работающий исключительно на стороне браузера пользователя. Поискав, я такие обнаружил, но радоваться было нечему. Решая одну проблему, они создавали другую: тяжёлый javascript сводил на нет все преимущества. Стоит сказать, что во всех случаях javascript библиотека весила больше 300 KB... Назрела необходимость создания собственного плагина.



Для разработки плагина я использовал модульную javascript библиотеку: библиотека Prism. Её вес в полной комплектации 370.15KB, но благодаря модульности, его можно значительно уменьшить. Я оставил такие языки: HTML, XML, SVG, MathML, CSS, JavaScript, C, C++, Java, PHP, Python, SQL. Кроме того, саму библиотеку подправил и оптимизировал. В результате вес javascript файла плагина уменьшился всего до 28,6 KB. Загрузку скрипта сделал асинхронной, то есть, плагин получился СЕО-оптимизированный, и не вызывает задержки отображения страницы.



Для вывода кода в материал нужно использовать инструкцию:
<pre class="line-numbers" data-start="1"><code class="language-css">your code here...</code></pre>. Вместо css подставляется нужный язык из набора выше.
Тип плагина: контент плагин. Скачать можно ниже.



Скачать плагин Code Light (20,1 кБ).

Совместимость Joomla! 3+


Плагин включает тёмную и светлую темы. На этом сайте светлая.

PHP:
protected function populateState()
	{
		$app = JFactory::getApplication('site');

		// Load state from the request.
		$pk = $app->input->getInt('id');
		$this->setState('article.id', $pk);

		$offset = $app->input->getUInt('limitstart');
		$this->setState('list.offset', $offset);

		// Load the parameters.
		$params = $app->getParams();
		$this->setState('params', $params);

		$user = JFactory::getUser();

		// If $pk is set then authorise on complete asset, else on component only
		$asset = empty($pk) ? 'com_content' : 'com_content.article.' . $pk;

		if ((!$user->authorise('core.edit.state', $asset)) && (!$user->authorise('core.edit', $asset)))
		{
			$this->setState('filter.published', 1);
			$this->setState('filter.archived', 2);
		}

		$this->setState('filter.language', JLanguageMultilang::isEnabled());
	}


CSS:
#breadcrumbs {
    background-color: #f0e5e5;
    padding: 10px 10% 10px;
    font-size: 0.8em;
}
#breadcrumbs li {
    list-style-type: none;
    display: inline-block;
}
#breadcrumbs a {
    text-decoration: none;
    color: #fc0303;
}
.wr_page {
    max-width: 1200px;
    margin: 0 auto;
    box-shadow: 0 20px 80px 10px #000000;
    padding: 40px;
}


JavaScript:
function saveIt(name) {
	var x = document.getElementById(name).style.display;

	if (!x) {
		alert('No cookie available');
	} else if (localStorage) {
		localStorage[name] = x;
	}
}

function readIt(name) {
	if (localStorage) {
		return localStorage[name];
	}
}



Добавить комментарий.

Добавить комментарий