Universal plugin which combines the functionality of many other plugins. Wrap wiki text inside containers (divs or spans) and give them a class (choose from a variety of preset classes), a width and/or a language with its associated text direction.
Compatible with DokuWiki
Universal plugin which combines the functionality of many other plugins. Wrap wiki text inside containers (divs or spans) and give them a class (choose from a variety of preset classes), a width and/or a language with its associated text direction.
Similar to alignment, block, box, class, clearfloat, color, columns, comment, commentsrc, div_span_shorthand, divalign, divalign2, emphasis, floatdiv, fontcolor, fontfamily, fontsize, fontsize2, hide, highlight, htmlcomment, important_paragraf, important_text, lang, layout, ltr, noprint, note, outdent, pagebreak, qna, side_note, spoiler, styler, tab, tablewidth, tip, typography, wpre
This plugin gives you the ability to wrap wiki text inside containers (divs or spans) and give them
It potentially replaces a lot of other plugins and is IMHO the better alternative for many. There is one exception: It currently lacks ODT support. If you need ODT support, you might want to take a look at similar plugins.
It fully replaces: class, divalign, div_span_shorthand, side_note, tip, clearfloat, emphasis, hide, hilited, important_paragraf, important_text, noprint, pagebreak, wpre, lang, ltr
It partly replaces: box, layout, note, styler, typography, color, columns, fontcolor, fontfamily, fontsize, fontsize2, highlight, tab, tablewidth
Download and install the plugin using the Plugin Manager using the URL given above. Refer to Plugins on how to install plugins manually.
The latest version (2010-11-20) is only compatible to the latest DokuWiki release 2010-11-07 (“Anteater”) and later (including “Rincewind”). Please don't update the plugin if you haven't upgraded your DokuWiki yet. If you'd like to install the plugin in an older DokuWiki version, install version 2010-03-14.
Version 2010-03-14 is only compatible to the DokuWiki release 2009-12-25 (“Lemming”). If you like to use the plugin in an older version (but younger than 2006-11-06), you only need to remove the file action.php inside the plugin's main folder. With removing that file you will not have the toolbar picker, but can use the plugin in older DokuWiki versions.
The plugin comes with an example page, which should explain a lot and looks like this in the default template:
Basic Syntax:
<WRAP classes width :language> "big" content </WRAP> or <block classes width :language> "big" content </block> or <div classes width :language> "big" content </div>
An uppercase <WRAP> (or alternatively <block> or <div>) creates a div and should be used for “big” containers, surrounding paragraphs, lists, tables, etc.
<wrap classes width :language>"small" content</wrap> or <inline classes width :language>"small" content</inline> or <span classes width :language>"small" content</span>
A lowercase <wrap> (or alternatively <inline> or <span>) creates a span and should be used for “small” containers, inside paragraphs, lists, tables, etc.
Please note, some things won't work with spans: alignments (including alignments generated by changing the text direction), multi-columns and widths if the according wrap isn't floated as well.
The following classes are currently available:
| class name | description/notes |
|---|---|
| columns – similar to columns, side_note, styler, tip | |
column | same as left in LTR languages and same as right in RTL languages |
left | same as column, will let you float your container on the left |
right | will let the container float right |
center | will position the container in the horizontal center of the page |
col2..col5 | will show the text in multiple columns (2, 3, 4 or 5), only works in modern browsers (Firefox, Chrome and Safari) |
| alignments – similar to divalign, columns, styler – |
|
leftalign | aligns text on the left |
rightalign | aligns text on the right |
centeralign | centers the text |
justify | justifies the text |
| boxes and notes – similar to box, note, tip | |
box | creates a box around the container (uses colours from style.ini) |
info (was information in first version) | creates a blue box with an info icon |
important | creates an orange box with an important icon |
alert (warning in previous versions) | creates a red box with a alert icon |
tip | creates a yellow box with a tip icon |
help | creates a violet box with a help icon |
todo | creates a cyan box with an todo icon |
download | creates a green box with a download icon |
round | adds rounded corners to any container with a background colour or a border (only works in modern browsers, i.e. no IE) |
danger | creates a red danger safety note |
warning | creates an orange warning safety note |
caution | creates a yellow caution safety note |
notice | creates a blue notice safety note |
safety | creates a green safety note |
| marks – similar to hilited, emphasis, important_paragraf, important_text | |
hi | marks text as highlighted |
lo | marks text as less significant |
em | marks text as especially emphasised |
sansserif, serif, monospace | |
bigger, muchbigger, smaller | |
fgred, fggreen, fgblue, fgcyan, fgviolet, fgyellow, fggrey, fgwhite, fgblack | |
bgred, bggreen, bgblue, bgcyan, bgviolet, bgyellow, bggrey, bgwhite, bgblack | |
| miscellaneous | |
clear | similar to clearfloat, should preferably be used with divs, i.e. uppercase <WRAP>s |
hide | hides the text per CSS (the text will still appear in the source code, in non-modern browsers and is searchable) |
noprint | displays text on the screen, but not in print, similar to noprint |
onlyprint | displays text only in print, but not on the screen |
pagebreak | forces a new page in printouts (not visible on the screen), similar to pagebreak |
nopagebreak | tries to avoid a pagebreak in printouts (not visible on the screen) |
spoiler | shows white text on a white background, only to be revealed by highlighting it; similar to hide |
indent | indents the text, could be used instead of tab |
outdent | “outdents” the text, could partly be used instead of outdent |
prewrap | wraps text inside pre-formatted code blocks, similar to wpre |
All tables inside a column or box will always be 100% wide. This makes positioning and sizing tables possible and partly replaces tablewidth.
clear or hide.)
You probably need to adjust a few of the classes to your template's needs, especially hi, lo and em if you have a dark or otherwise heavily coloured theme.
The classes are easily adjustable and extensible. Any wishes are welcome.
You can set any valid widths on any uppercase <WRAP> container: %, px, em, ex, pt, pc, cm, mm, in. Just set the width before or after or with the classes, e.g.
<WRAP someclass 50% anotherclass>...
You can change the language and the direction of a container by simply adding a colon followed by the language code, like this:
<wrap :en>This text is explicitly marked as English.</wrap>
The text direction (rtl, right to left or ltr, left to right) will get inserted automatically and is solely dependent on the language. The list of currently supported languages is taken from: http://meta.wikimedia.org/wiki/Template:List_of_language_names_ordered_by_code
If you like to mark a text with a different text direction than the default one, you should use divs, i.e. uppercase <WRAP>s. Otherwise the text alignment won't change as well.
If you like to add your own classes and styles to the plugin, you can simply add the styles for your class preceded by ”wrap_” to your user styles.
E.g. if you need a <WRAP myclass>, you edit (or create if it doesn't exist) your conf/userstyle.css and add your .wrap_myclass{} with its style definitions to it. (If necessary, edit conf/userprint.css1) for the print view, conf/userrtl.css2) for RTL languages and conf/userall.css3) for all styles as well.)
Since version 2010-03-14 you have the possibility to exclude certain class names from being prefixed with “wrap_”. Just add a comma separated list of class names into the config option “noPrefix” in the configuration manager.
in style.css
.dokuwiki div.wrap_note{ /* added */ background-color: #eee; color: #000; padding: .5em .5em .5em .5em; margin-bottom: 1em; overflow: hidden; }
call in DW-page:
<WRAP note>...</WRAP>
The old typography classes were removed in version 2011-05-15. If you need something similar, use the block plugin instead. If you like to have the old typography classes back, they are not lost:
They were not completely removed yet, but only put in a comment. To keep using them either remove the comments (search for “typography” in all.css and style.css). Or better (because future-proof) copy them to your own user styles (see above).
From version 2011-05-15 on the plugin includes a helper plugin which you can use to add classes, width and lang/dir to any other plugin.
// get lang from wrap helper plugin $lang = ''; if(!plugin_isdisabled('wrap')) { $wrap =& plugin_load('helper', 'wrap'); $attr = $wrap->getAttributes($data); if($attr['dir']) $lang = ' lang="'.$attr['lang'].'" xml:lang="'.$attr['lang'].'" dir="'.$attr['dir'].'"'; } // add lang to your plugin's output $renderer->doc .= '<span '.$lang.' class="foo">';
getAttributes() expects the string with “classes width :language”. It returns an array with
// get attributes from wrap helper plugin $attr = ''; if(!plugin_isdisabled('wrap')) { $wrap =& plugin_load('helper', 'wrap'); $attr = $wrap->buildAttributes($data, 'additionalClass'); } // add those attributes to your plugin's output $renderer->doc .= '<div '.$attr.'">';
buildAttributes() expects the same string as above (“classes width :language”) and an optional string for additional classes, in case your plugin has CSS classes of its own which it needs to reuse. It returns a string with all the attributes prepared for HTML.
You can help me with translations. There are two files to translate:
You can either send me language files to update by email or post them here or in the bugtracker. Please have a look at the available translations first.
Before reporting any issues (bugs or requests), please first take a look at the FAQ on plugin problems.
You can report any issues either on the Issue Tracker or here in this section.
I've just made the CSS work properly with some custom themes using the git master branch, eg one of my own and typo. the trick is to remove all the .dokuwiki in the different classes with a
perl -pi -e 's/\.dokuwiki//g' *.css
— Nicolas Thauvin 2009/09/09 23:22
Templates should use the.dokuwikiclass and many already do (as does the typo template). See more on the dokuwiki class. — Anika Henke 2009/09/18 00:37
Wouldn't it be nice to add quotation box, too …
- chris
Yes, I thought about that, too. But as the blockquote plugin would be semantically much more correct, I recommend using that instead. — Anika Henke 2009/09/18 00:37
Incredibly useful multipurpose plugin I must say. Thanks for that” Looking forward to intended ODT compatibility.
— Martin 2009/09/14 23:22
<WRAP centeralign>
<WRAP info 60%>
This is some text, text , text , text , text , text , text , text , text , text , text , text , text , text , text , text ,
text , text , text , text , text , text , text , text , text , text , text , text , text , text , text , text , text , text
</WRAP>
[[namespace:something|{{:picture.png|GO}}]]
</WRAP>
The result is the text of the info note is centered. If I use leftalign it aligns the whole box left. How do I get the box text to be left aligned and screen centered? peterennis [at] yahoo [dot] com
To position something you shouldn't use an alignment class, but one of the column classes. In this case it's “center” instead of “centeralign”. (And whenever you use “center” you should also give a width.) If you only want the info box to be centred, you can use<WRAP center info 60%>, and the image could be centred by using the normal DokuWiki syntax. — Anika Henke 2009/10/07 07:47
Like using tab-plugin in some places (perhaps tables)
I sometimes need space above or below a paragraph. Fed up fiddling with HTML, PHP methods so I just use . (dot)
Of course, it shows a dot! Is there an easy solution? peterennis [at] yahoo [dot] com
The best way would be to add your own classes. In this case you could use something like ”topspace” and ”bottomspace” and add.dokuwiki .wrap_topspace { margin-top: 1.5em; } .dokuwiki .wrap_bottomspace { margin-bottom: 1.5em; }etc. But this depends highly on your template and in which combination you will use those classes. Just fiddle around with the values to change their effect. (And from the semantic point of view you should probably ask yourself why and if you need that space and find a better name if you find a common usage pattern.) — Anika Henke 2009/10/07 08:05
I think too it depent on your template and the combination of classes. Testing with following code I could find something working for me.
css try differend combinations of height, margin, padding and line-height. The colors are only to see the effect. (%, px, em, ex, pt, pc, cm, mm, in):
div.wrap_testing { width: 100%; border: 2px solid yellow; }
div.wrap_empty1 { width: 100%; height: 2em; border: 2px solid red; }
div.wrap_empty2 { width: 100%; margin-top: 2em; margin-bottom: 2em; border: 2px solid violet; }
div.wrap_empty3 { width: 100%; padding-top: 2em; padding-bottom: 2em; border: 2px solid blue; }
div.wrap_empty4 { width: 100%; line-height: 2em; border: 2px solid green; }
dokuwiki:
\\ <div testing> <div empty1></div> </div> \\ <div testing> <div empty2></div> </div> \\ <div testing> <div empty3></div> </div> \\ <div testing> <div empty4></div> </div>
Love this plugin, but the CSS on my page seems to fail CSS3 validity check as a result.
1 .dokuwiki div.wrap_round Property -moz-border-radius doesn't exist : 20px 1 .dokuwiki div.wrap_round Property -webkit-border-radius doesn't exist : 20px 1 .dokuwiki div.wrap_round Property -khtml-border-radius doesn't exist : 20px 1 .dokuwiki span.wrap_round Property -moz-border-radius doesn't exist : 2px 1 .dokuwiki span.wrap_round Property -webkit-border-radius doesn't exist : 2px 1 .dokuwiki span.wrap_round Property -khtml-border-radius doesn't exist : 2px
I'm no CSS expert. Anybody have any suggestions? — michaelrepucci 2009/11/06 22:08
Actually, did some web searches and discovered that since these properties are proprietary, they're not considered part of “valid” CSS, even though they do follow standards. Oh well. When CSS3 is adopted, “border-radius” will replace the proprietary properties and validate. Until then, guess I'll live with it. I'll leave this note here for others who are curious like me. Anyway, nice to have rounded corners :) — michaelrepucci 2009/11/06 22:32
is there any way to skip the generation of the wrap_ “namespace” I'd like to use this for providing a (hidden) geotag on the page like this:
<WRAP hide geo geo-post>
<wrap latitude>52.085819</wrap><wrap longitude>5.115348</wrap>
</WRAP>
right now that results in:
<div class="wrap_hide wrap_geo wrap_geo-post">
<span class="wrap_latitude">52.085819</span><span class="wrap_longitude">5.115348</span>
</div>
where I would want:
<div class="wrap_hide geo geo-post">
<span class="latitude">52.085819</span><span class="longitude">5.115348</span>
</div>
I wouldn't want to skip the “wrap_” altogether. But it might be a good idea to add a config option for listing all class names which should not be adjusted but taken directly as specified. Then everybody is free to also add other microformat classes and more. I'll implement that as soon as I find the time. — Anika Henke 2010/01/07 01:52I just implemented this (in the repo). A new release which includes it will follow soon. — Anika Henke 2010/01/31 15:36
case DOKU_LEXER_ENTER:
$wrap = new syntax_plugin_wrap_base();
$attr = $wrap->buildAttributes($data);
$renderer->doc .= '<div'.$attr.'><p>';
break;
The div version of the plugin merges the first two paragraphs into one. The workaround is to leave a line break immediately after the opening <WRAP…> tag. The above code modification will fix this issue. This issue (and fix) is also present in the box plugin.
As described under known restrictions you can circumvent this by writing one more line after <WRAP> (see the very first syntax example). You solution will not fix this problem but will only cause more invalid code in other cases! This whole issue is due to a bug in the DokuWiki core: See 1797. And it annoys me as well.— Anika Henke 2010/01/15 09:43
This will be fixed in the next version (coming soon) if used with Anteater. — achAnika Henke
ach
2010/11/20 17:22
Are you planning support for regular dokuwiki headlines syntax? Plugin columns have it, so where is the problem? Thanks.
The columns plugin supports regular headlines, because it re-builds all headlines within its syntax completely from scratch. DokuWiki itself doesn't support headlines in any syntax and it's not possible to support them without such massive overhead. As the “emulated headlines” cover most desirable cases, I don't think I will implement anything which should rather be fixed in the DokuWiki core than patched in a plugin. — Anika HenkeAnika Henke
ach
2011/05/02 20:16The latest version (2011-05-15) now has experimental support for regular headlines implemented. This is not an official feature yet, because there might be unforeseen problems (most likely with section editing). You are free to try it out and please report any problems back. — Anika HenkeAnika Henke
ach
2011/05/15 18:12
Is there a way to make the emulated headlines contain “a name=…” anchors, similar to how the regular headlines have such anchors?
No, this is currently not possible and is also not planned. As a work-around you can use the bookmark plugin. — Anika Henke 2010/01/31 15:34I now implemented experimental support for regular headlines, so those will contain the anchors and will also be added to the TOC. — Anika HenkeAnika Henke
ach
2011/05/15 18:12
I've been using a few lines in conf/entities.conf and a template to easily make invisible tables with visible content. I use this to structure math proofs, so relevant parts of equations stay above each other. Is this something you could incorporate in your great plugin?
<bare> <html><div class="baretable"></html> </bare> <html></div></html >
div.dokuwiki div.baretable th, div.dokuwiki div.baretable td { border: 0px; }
It's quite easy to implement it yourself by adding your own class, with e.g.div.dokuwiki div.wrap_baretable table, div.dokuwiki div.wrap_baretable th, div.dokuwiki div.wrap_baretable td { border: 0; }you can use
<WRAP baretable> |foo| |bar| </WRAP>— Anika Henke
Anika Henke
ach
2011/05/02 20:48
Also check out the jsmath plugin.
Anika, sorry for spamming, just wanted to show my appreciation for the work you've done. -Alex.
I second that! -Tina
Me too. Fantastic addition to Dokuwiki. -Brett
http://www.1wiki.de/doku.php/playground:playground
I just fixed that issue in the repo. (But it's not always working in IE6.) The same issue would occur whenever you float something inside a box with a background colour (or a border), e.g. a right-aligned image in a <WRAP box>. If you don't want to install the adjusted plugin, you can also just put a<WRAP clear></WRAP>before the containing closing ”</WRAP>”, like... </olmap> <WRAP clear></WRAP> </WRAP>— Anika Henke 2010/06/12 22:20
thats works <WRAP clear></WRAP> THANK YOU
I want to use several of the functions as the admin of my wiki (like columns), but I would like my users to only be able to insert the info/important boxes into the pages. Is it possible to hide the editor button, or to hide some of them? I wouldn't mind being able to hide all of the buttons and just telling my users what syntax to type in.
You cat manually edit action.php or simply delete it - all buttons described there. MalamutMalamut
To edit Textlabels of the editor buttons:/plugins/wrap/lang/en/lang.php
It's a great plugin, but why uppercase for WRAP? All other Doku syntax and plugins use lovercase or case insensitive. May be replace wrap with “textwrap” and WRAP with “boxwrap”? It's more clear, as I think. MalamutMalamut
09.10.2010
UPD: It will be really great if you add two options to plugin configuration: words for div's and span's. I prefer to use box and text for it and now I simply modify wrap plugin's source to implement it, but it's not a good solution.
I have modified WRAP for my use. Download here: https://hahn-mediaservice.net/private/gast/dokuwiki/wrap.zip
The initial reasoning was to make it similar to DokuWiki's core html and php embedding (<html|HTML>and<php|PHP>).
Adding anything to the configuration options is a bad idea, as it would make the syntax different in every installation and could potentially break many things (other plugins, for example). (Although it would be beneficial for internationalization.)
I updated the code to use<block>and<div>additionally to<WRAP>and<inline>and<span>additionally to<wrap>. (Using<box>would conflict with the box plugin which is quite popular.) It will be in the next release (coming soon). — achAnika Henke
ach
2010/11/20 17:03
Some PNGs are not present in the picker. In folder images/note/16 “tb_” should be deleted in the filenames.
There are no and have never been any images with “tb_”. Could it be someone (e.g. from your team?) renamed them deliberately to remove them from the picker? — achAnika Henke
ach
2010/11/20 17:00
20/01/2011 : This plugin doesn't produce anything, either on this page or on my installation with the very latest Dokuwiki version.
This plugin is not installed on dokuwiki.org, so wouldn't work on this page. Did you have a look at the FAQ on plugin problems?Thanks for your answer. Well, I tried what's suggested over there, installing through the manager, various methods to force a page refresh, etc, still nogo. Not sure if there is a way to debug or log the failure ?Hmm, this is weird, especially since the plugin is a really simple one. You could start by defining what “doesn't produce anything” means? E.g. if you write<WRAP tip>test</WRAP>what do you see?
a) ”<WRAP tip>test</WRAP>”
b) “test” (unstyled)
c) nothing at allDon´t forget to set the class! In this case<WRAP tip>test</WRAP>— PeterIt worked when I deleted the contents of <dokuwiki>/data/cache/ ,I think it's the solution –Zhe
It would be nice if there could be a shorter code for empty divs like <WRAP clear></WRAP> → <WRAP clear />
Good idea. But this has not a very high priority for me. If someone sends a patch, I will implement it. — Anika HenkeAnika Henke
ach
2011/05/02 20:50To better keep track of things, I just added this request to the bugtracker. — Anika HenkeAnika Henke
ach
2011/05/29 13:44
The following CSS statement leads to different behaviour between firefox and internet explorer:
/* tables in columns and boxes should span the whole width */ .dokuwiki .plugin_wrap table { width: 100%; }
If you create boxes like this one:
<WRAP column> //**Headline**// ^Column 1 Row 1 |Column 2 Row 1 | ^Column 1 Row 2 |Column 2 Row 2 | ^Column 1 Row 3 |Column 2 Row 3 | ^Column 1 Row 4 |Column 2 Row 4 | ^Column 1 Row 5 |Column 2 Row 5 | </WRAP>
firefox will display a box as large as needed by the content of the box. Internet explorer (tested with version 7) displays a box with 100% page width.
IMHO table width: 100% is only needed if a fixed size is given. May a class wrap_fixsize should be added to wraps that include size information.
/* tables in columns and boxes should span the whole width */ .dokuwiki .plugin_wrap .wrap_fixsize table { width: 100%; }
and modified helper.php
//get width if (preg_match('/^\d*\.?\d+(%|px|em|ex|pt|pc|cm|mm|in)$/', $token)) { $attr['width'] = $token; $attr['class'] = (isset($attr['class']) ? $attr['class'].' ' : '')."wrap_fixsize"; continue; }
greetz
Frank
A quick modification to be able to add an ID to a box (I use it to make empty <div> that are processed by javascript).
In helpher.php#getAttributes
//get id if (preg_match('/#([A-Za-z0-9_-]+)/', $token)) { $attr['id'] = trim($token,'#'); continue; }
In helper.php#buildAttributes
if($attr['id']) $out .= ' id="'.hsc($attr['id']).'"';
Your's is ALWAYS the first plugin I install on a fresh DokuWiki system. Thank you SO MUCH Anika. This is a true jewel.
Louis
This is a wonderful plugin. The icing on the cake would be ODT support. Is that a possible future enhancement or is it a bridge too far?
- Lar
Great plug-in, but default template doesn't display it correctly. Was able to view via Safari on iPad, but not in OSX in any browser. Changed to “vector” template and all is well. -Bruce