Как использовать переименование таблицы стилей Google Closure с внешней библиотекой Javascript, такой как jQuery?
Я изучаю функцию переименования таблиц стилей Google и не знаю, как переписать мои селекторы jquery. Я не нашел документ очень ясно об этом.
Если у меня есть код, который выглядит так:
<div class="MyClass"></div>
<div id="MyID"></div>
$('.MyClass').someFunc();
$('#MyID').someFunc();
Как должны быть написаны HTML и javascript, чтобы переименование CSS работало?
Спасибо за ваши предложения.
1 ответ
Чтобы таблицы стилей Closure работали в сочетании с внешней библиотекой, такой как jQuery, вам также потребуется использовать библиотеку Closure, чтобы добавить поддержку для goog.getCssName
, Однако, поскольку Closure-Library написана так, чтобы максимально использовать исключение мертвого кода из Closure-compiler, только очень небольшой объем кода библиотеки будет включен в окончательный вывод (около 1 КБ в этом примере).
Шаг 1 - Настройте свой проект
Вам понадобятся следующие инструменты:
Шаг 2 - Настройка исходных файлов
Источник таблицы стилей (sample.gss)
@def BG_COLOR rgb(235, 239, 249);
@def DIALOG_BORDER_COLOR rgb(107, 144, 218);
@def DIALOG_BG_COLOR BG_COLOR;
.MyClass {
background-color: BG_COLOR;
height:100px;
}
#MyId {
background-color: DIALOG_BG_COLOR;
border: 1px solid DIALOG_BORDER_COLOR;
height:100px;
}
Закрытие шаблона источника (sample.soy)
{namespace ClosureSample}
/**
* SampleHtml
*/
{template .SampleHtml autoescape="false"}
<div class="{css MyClass}"></div>
{/template}
Javascript Source ( sample.js)
goog.require('ClosureSample');
document.write(ClosureSample.SampleHtml());
$(function() {
$('.' + goog.getCssName('MyClass')).css('background-color', 'pink');
});
Источник HTML ( development.htm)
<!DOCTYPE html>
<html>
<head>
<title>Closure stylesheets with External Library</title>
<link rel="Stylesheet" media="all" href="sample.css" />
<script type="text/javascript" src="sample_renaming_map.js"></script>
<script type="text/javascript" src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
<script type="text/javascript">
goog.require('goog.soy');
goog.require('goog.string.StringBuffer');
</script>
<script type="text/javascript" src="soyutils_usegoog.js"></script>
<script type="text/javascript" src="sample-templates.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript" src="sample.js"></script>
<div id="MyId"></div>
</body>
</html>
Шаг 3 - Скомпилируйте свою таблицу стилей и шаблоны
Используя инструменты, загруженные из шаблонов и проектов таблиц стилей, вам необходимо скомпилировать sample.gss
а также sample.soy
файлы. Вот команды, используемые для этого примера:
java -jar closure-stylesheets.jar \
--pretty-print \
--output-file sample.css \
--output-renaming-map-format CLOSURE_UNCOMPILED \
--rename CLOSURE \
--output-renaming-map sample_renaming_map.js \
sample.gss
java -jar SoyToJsSrcCompiler.jar \
--shouldProvideRequireSoyNamespaces \
--shouldGenerateJsdoc \
--outputPathFormat {INPUT_FILE_NAME_NO_EXT}.js \
--cssHandlingScheme goog \
sample.soy
С помощью этих файлов вы можете проверить переименование во время разработки. Смотрите пример.
Шаг 4 - Компиляция проекта для производства
Сначала скомпилируйте таблицы стилей, чтобы создать карту переименования, используя опцию "CLOSURE_COMPILED":
java -jar closure-stylesheets.jar \
--output-file sample.css \
--output-renaming-map-format CLOSURE_COMPILED \
--rename CLOSURE \
--output-renaming-map sample_renaming_map.js \
sample.gss
Затем вам нужно будет рассчитать файлы зависимостей библиотеки Closure и скомпилировать все исходные файлы javascript в один источник.
Примечание: поскольку jQuery не совместим с ADVANCED_OPTIMIZATIONS из Closure-compiler, он не будет включен в качестве входных данных. Вместо этого, обратитесь к соответствующему файлу jQuery extern, найденному в папке contrib / externs компилятора Closure.
Сценарий calcdeps.py в проекте библиотеки Closure может также использоваться для вызова компилятора Closure для входных файлов, которые он определяет.
python calcdeps.py \
-i sample.js \
-p PATH_TO_CLOSURE_LIBRARY_FOLDER \
-p sample-templates.js \
-o compiled \
-c compiler.jar \
-f --js=sample_renaming_map.js
-f --compilation_level=ADVANCED_OPTIMIZATIONS \
-f --warning_level=VERBOSE \
-f --externs=jquery-1.7-externs.js \
-f --js_output_file=sample_compiled.js
Смотрите окончательный результат: скомпилированная версия.
Финальные заметки
Как видите, использование таблиц стилей Google Closure требует не только части всего набора инструментов Closure, но и довольно сложного.
- Для вывода HTML требуется использование Google Closure-шаблонов. В этом надуманном примере я использовал
document.write
вызовите для вывода HTML с правильно переименованным классом, однако есть более изящные и поддерживаемые методы для производственного кода. - Таблицы стилей закрытия не переименовывают селекторы идентификаторов, поэтому код для идентификатора не затрагивается.
- Для удобства просмотра скомпилированный пример ссылается на библиотеку jQuery из Google CDN. Однако было бы одинаково правильно объединить библиотеку jQuery и скомпилированный исходный код в один исходный файл JS.