====== Плагин Box ======
---- plugin ----
description: Выделение секций информации с помощью блоков с настраиваемым стилем
author : Christopher Smith
email : chris@jalakai.co.uk
type : syntax
lastupdate : 2016-02-17
compatible : Elenor of Tsort, 2008-05-05 - 2005-09-22, Rincewind, Anteater, Angua, Weatherwax, Binky, Hrun, Detritus, Greebo, Hogfather
depends :
conflicts :
similar : note, wrap
tags : style, boxes
downloadurl: https://github.com/Chris--S/dokuwiki-plugin-box/zipball/master
bugtracker : https://github.com/Chris--S/dokuwiki-plugin-box/issues
sourcerepo : https://github.com/Chris--S/dokuwiki-plugin-box
donationurl:
----
**Хотя этот плагин по-прежнему работает нормально, его функциональные возможности включены в плагин [[plugin:wrap|Wrap Plugin]].**
Этот плагин добавляет в [[:DokuWiki]] блоки, что позволяет выделять особо важные секции в прямоугольниках с настраиваемым стилем, в том числе со скруглёнными углами, Snazzy (разновидность онлайн-открыток с узорным обрамлением), заголовками, настраиваемой шириной (включая процентную). Разметка «ДокуВики» разрешена и внутри блока - там, где все идет хорошо - и внутри заголовка, где следует использовать только текстовую разметку, ссылки, смайлы и тому подобное.
Наиболее часто используемый стиль, вероятно, имеет смысл установить в качестве базового. [[#style.css|Подробнее ниже]]
==== Заметки ====
* Мою версию этой страницы, которая может быть обновлена совсем недавно, можно найти [[http://wiki.jalakai.co.uk/dokuwiki/doku.php/tutorial/boxes|здесь]]
* 24.09.2009 эта ссылка не работает :(
* 28.10.2009 эта ссылка, кажется, теперь работает :-)
* 13.12.2009 опять битая :(
* 30.01.2010 Скопирован и вставлен ниже код в style.css и syntax.php (./plugins/box/ ..). Работает с последней версией Lemming.
===== Благодарности =====
Закругленные углы основаны на [[http://www.cssplay.co.uk/boxes/snazzy.html|snazzy borders]] от Stu Nicholls из [[http://www.cssplay.co.uk|CSS Play]], который, в свою очередь, был вдохновлён [[http://pro.html.it/esempio/nifty/|nifty corners]] от Alessandro Fulciniti. До развития CSS до 3 версии не было более практичного способа красивой стилизации. В настоящее время в GitHub имеются правки плагина, вводящие более простые CSS 3 - решения.
===== Синтаксис =====
Простой box:
function _boxstyle($str) {
if (!strlen($str)) return array();
$styles = array();
$tokens = preg_split('/\s+/', $str, 9); // limit is defensive
foreach ($tokens as $token) {
if (preg_match('/^\d*\.?\d+(%|px|em|ex|pt|cm|mm|pi|in)$/', $token)) {
$styles['width'] = $token;
continue;
}
// restrict token (class names) characters to prevent any malicious data
if (preg_match('/[^A-Za-z0-9_-]/',$token)) continue;
$styles['class'] = (isset($styles['class']) ? $styles['class'].' ' : '').$token;
}
return $styles;
}
* сохраните файл
Этот скрип ограничивает символы, доступные для использования в именах любых настраиваемых стилей, буквенно-цифровыми символами, а также тире и подчеркиванием (например A-Z, a-z, 0-9, _ -). Он также обновляет определение ширины поля для поддержки любого допустимого значения длины CSS . Смотрите подробности в **синтаксисе**.
===== Исправление безопасности 2 =====
Это исправление применяется ко всем версиям плагина до 3 марта 2008 г. Рекомендуется, чтобы пользователи плагина обновили DW и этот плагин до самых последних версий. Для тех, кто желает исправить уязвимость без обновления.
case 'box_close' :
$renderer->doc .= "\n";
if ($data) {
- $renderer->doc .= "
Спасибо Энди Уэбберу из группы этического взлома Oracle за обнаружение этого недостатка. --- //[[chris@jalakai.co.uk|Christopher Smith]] 2008-03-03 17:46//
===== Что нужно сделать =====
===== Ошибки =====
* Боксы могут перекрывать оглавление вверху страницы. Требуется исправление CSS .
**Ошибка рендеринга в IE 6.0** - Запуск плагина box с шаблоном круглого box. Прокрутка (или, если поле достаточно велико, просто обновляется страница) иногда приводит к тому, что строки / блоки поля не обновляются, оставляя цвет фона на дисплее. Удалось воспроизвести проблему на домашней странице box'а «ДокуВики»[[http://wiki.jalakai.co.uk/dokuwiki/doku.php/tutorial/boxes|здесь]]. Плохая область кажется больше, если прямоугольник больше (в нем больше текста). --- //[[ja@vibtech.co.uk|Jonathan Alexander]] 2005-12-06 14:49//
>Нашел исправление, которое, кажется, работает для меня от [[http://www.communitymx.com/content/article.cfm?page=2&cid=C37E0|communitymx]] (спасибо Google) просто вставил код ниже под объявлением "div.box .box_content" в style.css выше.
\n";
+ $renderer->doc .= " \n";
}
$renderer->doc .= $this->_xhtml_boxclose();
break;
/* Hides from IE5-mac \*/
* HTML .div.box.box_content {height: 1%;}
/* End hide from IE5-mac */
* **Отсутствуют
foo
bar
приводит к этому HTML:
foo
bar
как видите, одного не хватает. --- //[[bernd@bzed.de|Bernd Zeimetz]] 2007-03-03 02:39 CET// \\ **Решение CET**: измените две строки в рендере функции (рядом с 'box_open'):
--- syntax.php 2008-02-27 23:44:08.000000000 +0100
+++ syntax.php.new 2008-02-27 23:55:23.000000000 +0100
@@ -129,9 +129,9 @@
case 'box_open' :
if ($this->title_mode) {
$this->title_mode = false;
- $renderer->doc .= "\n";
+ $renderer->doc .= "
\n";
} else {
- $renderer->doc .= $this->_xhtml_boxopen($data)."";
+ $renderer->doc .= $this->_xhtml_boxopen($data)."
";
}
break;
строки, начинающиеся с "-" являются исходными строками, строки "+"- новыми. --- //[[stefan@kuchling.de|Stefan Kuchling]]//
Этот патч добавлен в последнюю версию плагина. Спасибо Бернд и Стефан за ваши усилия. --- //[[chris@jalakai.co.uk|Christopher Smith]] 2008-03-03 17:46//
===== Подсказки =====
==== Альтернативный синтаксис и разрешающая разметка в подписях ====
Отличный плагин! Я изменил свою копию и подумал, что другим может быть интересно. [[http://robmeerman.co.uk/coding/file_renamer|Смотреть пример]]. FIXME
Изменения:
- Изменен синтаксис: ''**%%<<<%%** width classes | title ::: //content// ::: caption **%%>>>%%**''
- Разметка разрешена в подписях
- Заголовок и подпись могут занимать несколько строк (т. е. несколько абзацев).
- Ширина может быть указана в %, px, em или ex //(теперь включено в версию выпуска)//
Возможность разместить разметку в подписи хороша, когда вы хотите привлечь внимание к примечанию, скажем, об альтернативной версии какого-либо программного обеспечения - это выглядит очень хорошо, если в подписи есть ссылка для скачивания.
Он хорошо работает на моем сайте, и единственная проблема, с которой он, кажется, заключается в том, что я не могу вкладывать box'ы (не знаю почему).
Полный код см. в разделе: [[boxes_mod|Модифицированные Box'ы]]
--- //[[robert.meerman@gmail.com|Robert Meerman]] 2006/02/24 17:13//
> Привет, Роберт! Вы пробовали свой синтаксис с патчем вложенности, я кратко посмотрел на ваш код и не увидел ничего, что должно препятствовать вложению. Ура --- //[[chris@jalakai.co.uk|Christopher Smith]] 2006-02-24 19:26//
==== Backporting на 2005-07-13 ====
Вот что я сделал для резервного копирования этого плагина в выпуск 2005-07-13.
* Добавьте style.css tв конец вашего шаблона ''design.css'' и ''print.css'':
$ cd .../lib/plugins/box
$ cat style.css >> ../../tpl/template_name/design.css
$ cat style.css >> ../../tpl/template_name/print.css
* Примените следующий патч:
--- box-orig/syntax.php 2005-11-24 13:28:17.000000000 -0800
+++ box/syntax.php 2005-12-16 14:52:48.000000000 -0800
@@ -45,6 +45,19 @@
function getType(){ return 'container';}
function getAllowedTypes() { return array('container','substition','protected','disabled','formatting','paragraphs'); }
+
+ function syntax_plugin_box(){
+ global $PARSER_MODES;
+ $this->allowedModes = array_merge(
+ $PARSER_MODES['container'],
+ $PARSER_MODES['substition'],
+ $PARSER_MODES['protected'],
+ $PARSER_MODES['disabled'],
+ $PARSER_MODES['formatting'],
+ $PARSER_MODES['paragraphs']
+ );
+ }
+
function getPType(){ return 'normal';}
// must return a number lower than returned by native 'code' mode (200)
@@ -54,9 +67,9 @@
* Connect pattern to lexer
*/
function connectTo($mode) {
- $this->Lexer->addEntryPattern('(?=.*?)',$mode,'plugin_box');
- $this->Lexer->addEntryPattern('(?=.*?)',$mode,'plugin_box');
- $this->Lexer->addEntryPattern('.*?)',$mode,'plugin_box');
+ $this->Lexer->addEntryPattern('(?=.*?\x3C/box.*?\x3E)',$mode,'plugin_box');
+ $this->Lexer->addEntryPattern('(?=.*?\x3C/box.*?\x3E)',$mode,'plugin_box');
+ $this->Lexer->addEntryPattern('.*?\x3C/box.*?\x3E)',$mode,'plugin_box');
}
function postConnect() {
@@ -182,4 +195,4 @@
}
==== Более подробный CSS с дополнительными параметрами цвета ====
Это очень удобный плагин! Я начал экспериментировать с CSS, чтобы сделать некоторые нестандартные вещи (я собираюсь использовать этот плагин в 3-4 установках «ДокуВики»), а именно, чтобы скрыть внутреннюю границу и пару других небольших настроек цвета. В итоге я получил кое-что, что, на мой взгляд, было бы более гибко изменять (отдельные определения для отдельных границ), больше прокомментировал (я попытался отметить некоторые разделы немного лучше) и, возможно, более дружественный к IE (я думаю, что исправил проблему с тем, что один из цветов фона не отображается в IE 6).
Я не эксперт в области CSS , поэтому не могу гарантировать, что сделал это на 100% эффективно, но он работает со всеми браузерами, которые поддерживает browsershots.org.
CSS можно увидеть здесь: http://wiki.ryanjacobs.name/public/tech/dokuwiki_box_plugin_css FIXME
Если кому-то интересно… Ура! --- //[[ryan.jake@gmail.com|Ryan Jacobs]]//
==== Добавить поддержку экспорта ODT ====
Это добавляет базовую поддержку [[plugin:odt|OpenOffice/ODT экспорт плагина]]; нет цветов; без выравнивания, без причудливого форматирования; но излучается основной контент.
$ diff -u syntax.php.dist syntax.php
--- syntax.php.dist 2009-06-22 06:45:22.000000000 +0100
+++ syntax.php 2009-06-24 12:55:14.000000000 +0100
@@ -157,6 +157,45 @@
}
return true;
+ } elseif($mode == 'odt'){
+ switch ($instr) {
+ case 'title_open' :
+ $this->title_mode = true;
+ $renderer->table_open(1);
+ $renderer->tablerow_open();
+ $renderer->tableheader_open(1, "left");
+ break;
+
+ case 'box_open' :
+ if ($this->title_mode) {
+ $this->title_mode = false;
+ $renderer->tableheader_close();
+ $renderer->tablerow_close();
+ $renderer->tablerow_open();
+ $renderer->tablecell_open();
+ } else {
+ $renderer->table_open(1);
+ $renderer->tablerow_open();
+ $renderer->tablecell_open();
+ }
+ break;
+
+ case 'data' :
+ $renderer->doc .= $renderer->cdata($data);
+ break;
+
+ case 'box_close' :
+ $renderer->tablecell_close();
+ $renderer->tablerow_close();
+ $renderer->table_close();
+ if ($data) {
+ $renderer->p_open('legendcenter');
+ $renderer->doc .= $renderer->cdata($data);
+ $renderer->p_close();
+ }
+ break;
+ }
+ return true;
}
return false;
}
===== Обсуждение =====
Спасибо за плагин. У меня вопрос, могу ли я что-то сделать, чтобы сохранить пустую строку в исходном тексте без использования синтаксиса '\\' или любого другого редактирования исходного текста? Спасибо и пока
--- [[user>pronto|pronto]] //2014-07-30 11:31//
----
Спасибо за плагин, выглядит действительно здорово. Однако я хочу использовать его для выделения различного контента. Например, я хотел бы использовать \n";
was missing
----
Привет - Спасибо за отличный плагин. У меня проблемы с рамками и подписями при печати. Я скопировал plugins / box / style.css → plugins / box / print.css, и он работает, но когда я добавляю заголовок вверху, между верхней частью поля и заголовком вставляется дополнительная строка. Я использую шаблон монокниги.[[http://www.kabissa.org/wiki/doku.php?id=playground&rev=1178805954&mbdo=print|Щелкните, чтобы увидеть пример на моей вики-площадке]]. Буду очень признателен за любые предложения. ---//[[http://www.saidia.org|Tobias]] (5/10/2007)//
----
Хороший плагин. Мне интересно, можно ли сделать так, чтобы заголовок работал как заголовок, где в него можно встроить ссылки?
----
Привет, у меня много ссылок. Я часто копирую и вставляю. Можно ли сохранить возврат каретки и избежать добавления вручную «\\» в конце каждой новой строки?
Тогда как хороший плагин.
\\
Я заметил, что когда я копирую код третьего поля [[http://wiki.jalakai.co.uk/dokuwiki/doku.php/test/boxes]] и вставляю сюда (или в мою «ДокуВики»), текстовое поле находится только на одном линия. Я не включаю подпись \\
this is
also
boxed
e.g. ** this is
also
boxed
**
\\ \\
На вашей тестовой странице текстовое поле состоит из 3 строк. Почему на вашей странице 1 строчка, а у вас - 3 строчки? Я копирую и вставляю точно такой же исходный код. На вашей странице сохраняется возврат каретки. \\
Как я могу вести себя так же? Так что я смогу скопировать и вставить, сохраняя CR.
> Да. См. [[plugin:linebreak|Плагин разрыва строки]] --- //[[chris@jalakai.co.uk|Christopher Smith]] 2007-07-26 13:08//
>> Также см. [[plugin:xbr|Рендеринг разрыва строки]] --- //[[chris@jalakai.co.uk|Christopher Smith]] 2008/11/11 06:26//
----
Привет Крис, Очень красивые и полезные эффекты. Есть мысли о добавлении значка в строку заголовка?\\
См., например, http://www.headshift.com/\\
Я просто не понимаю, как они это сделали!\\
С уважением, Peter Chan 2007-10-02
----
Привет, я пытаюсь использовать коробки в последней версии «ДокуВики» (2006-06-26b), но, похоже, это не работает. Единственное поведение плагина, которое мне удалось определить, - это разметка в заголовках. Если я выделю заголовок жирным шрифтом, он отобразит звездочки. Если бы плагин просто нюхал, не сработала бы разметка? Почему это не сработает? Спасибо. Рик Рейнольдс 16 января 2008 г.
> В настоящее время форматирование субтитров не поддерживается. Однако модифицированный плагин боксов, в котором используется немного другой синтаксис, позволяет форматировать подписи. См. Ссылки выше. --- //[[chris@jalakai.co.uk|Christopher Smith]] 2008-03-03 17:46//
>>Это верно, но box_mod не обновлен для поддержки DokuWiki 2008-05-05: небольшие ошибки макета, особенно когда на странице больше одного поля… По моему опыту, работает гораздо более плавно. [[gijsh@sherpanet.nl|Gijs van Gemert]]
----
У меня это начало работать, когда я перешел на шаблон dokucms. С шаблоном по умолчанию у меня это не сработает. 2008-02-11
----
Можно ли добавить поддержку абсолютной (или минимальной) высоты ящиков? Я пробовал делать это сам, но моих знаний PHP и CSS недостаточно для реализации этого.
> Да, теперь есть поддержка высоты. Проверьте мой модифицированный плагин: [[plugin:boxwh|boxwh плагин]]
----
Есть ли шанс разрешить изменение цвета текста (поскольку черный цвет на темных цветах часто нечитаем)? Боб 4 апреля 2008 г.
----
Я заметил, что необходимо очистить кеш, чтобы можно было вставить инструкции CSS нового плагина :
* Я последовал советам « ДокуВики» по [[:devel:caching]] (кешированию),
* Я коснулся conf / local.php, отредактировал и сохранил ...
* Я выбрал встроенный HTML в форме конфигурации
тем не менее, в моем листе CSS нет инструкции CSS div.box , и поле не отображается должным образом. Наконец-то я обнаружил проблему с разрешением файла:
ls -l box/style.css
-rwx------ 1 box/style.css
это нужно исправить в archive.tgz?
----
Спасибо за этот плагин.
Я сделал небольшое изменение в трех строках в syntax.php, чтобы создать XHTML-совместимый документ. (Это просто некоторые пропущенные символы…)
(line 133) $renderer->doc .= $this->_xhtml_boxopen($data)."_title_colours}>";
...
(line 139) $renderer->doc .= "
\n_content_colours}>";
...
(line 153) $renderer->doc .= " в конец поля и уничтожает все оставшиеся макеты и стили. Это ошибка плагина box или самой dokuwiki?
//Pletiplot -- 2010-12-20//
----
Пожалуйста, исправьте свой CSS .
Правило @CHARSET "UTF-8"; в вашем print.css недопустимо.
--- [[user>flam]] //2011/01/05 12:03//
----
Можно ли добавить к нему кнопку закрытия, чтобы использовать ее как уведомление?
----
:!: Плагин **Box** не может правильно работать с плагином **Include**. Обычно **Box** хранит любой контент в формате ''div.box div.xbox div.box_content''. Но **Include** вставки выпадают в ''div.box div.xbox''. Возможно, это из-за неправильного состояния //getType// и / или //getPType//. --- [[user>Rainbow_Spike@derpy.ru|dr-yukon]] //2019-01-03 13:26//
----
Базовый движок «Докувики» работает с изображениями только в пикселях. Этот плагин можно использовать как процентное увеличение. Добавьте \n";
* Добавьте пробел между **class='box_title'** и **{$this->_title_colours}**
* Добавьте пробел между **class='box_content'** и **{$this->_content_colours}**
* Добавьте пробел между **class='box_caption'** и **{$this->_title_colours}**
//---[[http://www.cyclotronp.net|ZebulonT]] -- 2009-07-05 16:37//
----
У меня новая версия dokuwiki (Муравьед). Плагин Box теперь помещает еще один div.box.img > .xbox > .box_content > a > img {
width: 100%;
width: -moz-available;
width: -webkit-fill-available;
width: stretch;
}
в ''/lib/plugins/box/style.css'' и опишите как ''%%{{%%your image}} '' для увеличения на экране --- [[user>Rainbow_Spike@derpy.ru|dr-yukon]] //2020-09-06 14:37//
----