openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit e3ad8da4d9dfc8806c7437ae788ebd285a04cf55
parent 6af20b9945c5312f6f4e8559ce57ba4b61d421df
Author: Jan Dankert <devnull@localhost>
Date:   Tue, 28 Aug 2018 00:33:27 +0200

Editoren für Markdown (SimpleMDE) und HTML (Trumbowyg) installiert.

Diffstat:
modules/cms-core/action/PageelementAction.class.php | 26+++++++-------------------
modules/cms-core/model/Element.class.php | 2+-
modules/cms-ui/action/IndexAction.class.php | 2++
modules/cms-ui/themes/default/html/views/pageelement/edit.php | 22++++++++++------------
modules/cms-ui/themes/default/html/views/pageelement/edit.tpl.src.xml | 9+++++----
modules/editor/trumbowyg/langs/ar.min.js | 12++++++++++++
modules/editor/trumbowyg/langs/bg.min.js | 9+++++++++
modules/editor/trumbowyg/langs/by.min.js | 9+++++++++
modules/editor/trumbowyg/langs/ca.min.js | 12++++++++++++
modules/editor/trumbowyg/langs/cs.min.js | 9+++++++++
modules/editor/trumbowyg/langs/da.min.js | 10++++++++++
modules/editor/trumbowyg/langs/de.min.js | 10++++++++++
modules/editor/trumbowyg/langs/el.min.js | 13+++++++++++++
modules/editor/trumbowyg/langs/es.min.js | 10++++++++++
modules/editor/trumbowyg/langs/es_ar.min.js | 11+++++++++++
modules/editor/trumbowyg/langs/fa.min.js | 11+++++++++++
modules/editor/trumbowyg/langs/fi.min.js | 10++++++++++
modules/editor/trumbowyg/langs/fr.min.js | 11+++++++++++
modules/editor/trumbowyg/langs/he.min.js | 10++++++++++
modules/editor/trumbowyg/langs/hr.min.js | 10++++++++++
modules/editor/trumbowyg/langs/hu.min.js | 11+++++++++++
modules/editor/trumbowyg/langs/id.min.js | 12++++++++++++
modules/editor/trumbowyg/langs/it.min.js | 9+++++++++
modules/editor/trumbowyg/langs/ja.min.js | 11+++++++++++
modules/editor/trumbowyg/langs/ko.min.js | 11+++++++++++
modules/editor/trumbowyg/langs/lt.min.js | 9+++++++++
modules/editor/trumbowyg/langs/mn.min.js | 9+++++++++
modules/editor/trumbowyg/langs/my.min.js | 9+++++++++
modules/editor/trumbowyg/langs/nl.min.js | 10++++++++++
modules/editor/trumbowyg/langs/no_nb.min.js | 11+++++++++++
modules/editor/trumbowyg/langs/ph.min.js | 9+++++++++
modules/editor/trumbowyg/langs/pl.min.js | 10++++++++++
modules/editor/trumbowyg/langs/pt.min.js | 12++++++++++++
modules/editor/trumbowyg/langs/pt_br.min.js | 12++++++++++++
modules/editor/trumbowyg/langs/ro.min.js | 13+++++++++++++
modules/editor/trumbowyg/langs/rs.min.js | 9+++++++++
modules/editor/trumbowyg/langs/rs_latin.min.js | 10++++++++++
modules/editor/trumbowyg/langs/ru.min.js | 9+++++++++
modules/editor/trumbowyg/langs/sk.min.js | 9+++++++++
modules/editor/trumbowyg/langs/sq.min.js | 9+++++++++
modules/editor/trumbowyg/langs/sv.min.js | 13+++++++++++++
modules/editor/trumbowyg/langs/tr.min.js | 10++++++++++
modules/editor/trumbowyg/langs/ua.min.js | 9+++++++++
modules/editor/trumbowyg/langs/vi.min.js | 10++++++++++
modules/editor/trumbowyg/langs/zh_cn.min.js | 12++++++++++++
modules/editor/trumbowyg/langs/zh_tw.min.js | 12++++++++++++
modules/editor/trumbowyg/plugins/allowtagsfrompaste/trumbowyg.allowtagsfrompaste.js | 143+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/allowtagsfrompaste/trumbowyg.allowtagsfrompaste.min.js | 2++
modules/editor/trumbowyg/plugins/base64/trumbowyg.base64.js | 129+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/base64/trumbowyg.base64.min.js | 2++
modules/editor/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.js | 112+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.min.js | 2++
modules/editor/trumbowyg/plugins/colors/trumbowyg.colors.js | 185+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/colors/trumbowyg.colors.min.js | 2++
modules/editor/trumbowyg/plugins/colors/ui/sass/trumbowyg.colors.scss | 50++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/colors/ui/trumbowyg.colors.css | 43+++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/colors/ui/trumbowyg.colors.min.css | 3+++
modules/editor/trumbowyg/plugins/emoji/trumbowyg.emoji.js | 968+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/emoji/trumbowyg.emoji.min.js | 2++
modules/editor/trumbowyg/plugins/emoji/ui/sass/trumbowyg.emoji.scss | 56++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/emoji/ui/trumbowyg.emoji.css | 47+++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/emoji/ui/trumbowyg.emoji.min.css | 3+++
modules/editor/trumbowyg/plugins/fontfamily/trumbowyg.fontfamily.js | 73+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/fontfamily/trumbowyg.fontfamily.min.js | 2++
modules/editor/trumbowyg/plugins/fontsize/trumbowyg.fontsize.js | 117+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/fontsize/trumbowyg.fontsize.min.js | 2++
modules/editor/trumbowyg/plugins/highlight/trumbowyg.highlight.js | 82+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/highlight/trumbowyg.highlight.min.js | 2++
modules/editor/trumbowyg/plugins/highlight/ui/sass/trumbowyg.highlight.scss | 25+++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.css | 20++++++++++++++++++++
modules/editor/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.min.css | 3+++
modules/editor/trumbowyg/plugins/history/trumbowyg.history.js | 190+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/history/trumbowyg.history.min.js | 2++
modules/editor/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.js | 89+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.min.js | 2++
modules/editor/trumbowyg/plugins/lineheight/trumbowyg.lineheight.js | 104+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/lineheight/trumbowyg.lineheight.min.js | 2++
modules/editor/trumbowyg/plugins/mathml/trumbowyg.mathml.js | 88+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/mathml/trumbowyg.mathml.min.js | 2++
modules/editor/trumbowyg/plugins/mathml/ui/sass/trumbowyg.mathml.scss | 36++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/mathml/ui/trumbowyg.mathml.css | 29+++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/mathml/ui/trumbowyg.mathml.min.css | 3+++
modules/editor/trumbowyg/plugins/mention/trumbowyg.mention.js | 105+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/mention/trumbowyg.mention.min.js | 2++
modules/editor/trumbowyg/plugins/mention/ui/sass/trumbowyg.mention.scss | 39+++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/mention/ui/trumbowyg.mention.css | 32++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/mention/ui/trumbowyg.mention.min.css | 3+++
modules/editor/trumbowyg/plugins/noembed/trumbowyg.noembed.js | 104+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/noembed/trumbowyg.noembed.min.js | 2++
modules/editor/trumbowyg/plugins/pasteembed/trumbowyg.pasteembed.js | 96+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/pasteembed/trumbowyg.pasteembed.min.js | 2++
modules/editor/trumbowyg/plugins/pasteimage/trumbowyg.pasteimage.js | 41+++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/pasteimage/trumbowyg.pasteimage.min.js | 2++
modules/editor/trumbowyg/plugins/preformatted/trumbowyg.preformatted.js | 130+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/preformatted/trumbowyg.preformatted.min.js | 2++
modules/editor/trumbowyg/plugins/resizimg/trumbowyg.resizimg.js | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/resizimg/trumbowyg.resizimg.min.js | 2++
modules/editor/trumbowyg/plugins/ruby/trumbowyg.ruby.js | 72++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/ruby/trumbowyg.ruby.min.js | 2++
modules/editor/trumbowyg/plugins/table/trumbowyg.table.js | 283+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/table/trumbowyg.table.min.js | 2++
modules/editor/trumbowyg/plugins/table/ui/sass/trumbowyg.table.scss | 41+++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/table/ui/trumbowyg.table.css | 32++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/table/ui/trumbowyg.table.min.css | 3+++
modules/editor/trumbowyg/plugins/template/trumbowyg.template.js | 64++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/template/trumbowyg.template.min.js | 2++
modules/editor/trumbowyg/plugins/upload/trumbowyg.upload.js | 261+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/plugins/upload/trumbowyg.upload.min.js | 2++
modules/editor/trumbowyg/trumbowyg.js | 1823+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/trumbowyg.min.js | 3+++
modules/editor/trumbowyg/ui/icons.svg | 2++
modules/editor/trumbowyg/ui/sass/trumbowyg.scss | 809+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/ui/trumbowyg.css | 587+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/editor/trumbowyg/ui/trumbowyg.min.css | 3+++
modules/template-engine/components/html/editor/editor.js | 21+++++++++++++++++++++
modules/template-engine/components/html/editor/editor.min.js | 4++--
modules/template-engine/components/html/form/form.js | 5+++--
modules/template-engine/components/html/form/form.min.js | 8++++----
modules/template-engine/components/html/if/If.class.php | 3++-
modules/template-engine/components/html/image/image.js | 2+-
modules/template-engine/components/html/image/image.min.js | 4++--
modules/template-engine/components/template.xsd | 1836+------------------------------------------------------------------------------
122 files changed, 7735 insertions(+), 1880 deletions(-)

diff --git a/modules/cms-core/action/PageelementAction.class.php b/modules/cms-core/action/PageelementAction.class.php @@ -231,7 +231,7 @@ class PageelementAction extends Action $this->setTemplateVar('desc' ,$this->value->element->desc ); $this->setTemplateVar('elementid',$this->value->element->elementid); $this->setTemplateVar('languageid',$this->value->languageid ); - $this->setTemplateVar('type' ,$this->value->element->type ); + $this->setTemplateVar('type' ,$this->value->element->getTypeName() ); $this->setTemplateVar('value_time',time() ); @@ -692,26 +692,14 @@ class PageelementAction extends Action */ private function editlongtext() { - if ($this->value->element->wiki) - $this->setTemplateVar( 'editor','wiki' ); - elseif ($this->value->element->html) - $this->setTemplateVar( 'editor','html' ); - else - $this->setTemplateVar( 'editor','text' ); + $formats = Element::getAvailableFormats(); + $this->setTemplateVar( 'editor',$formats[ $this->value->element->format ] ); if ( !isset($this->templateVars['text'])) - // Möglicherweise ist die Ausgabevariable bereits gesetzt, wenn man bereits - // einen Text eingegeben hat (Vorschaufunktion). - $this->setTemplateVar( 'text',$this->linkifyOIDs( $this->value->text ) ); + // Möglicherweise ist die Ausgabevariable bereits gesetzt, wenn man bereits + // einen Text eingegeben hat (Vorschaufunktion). + $this->setTemplateVar( 'text',$this->linkifyOIDs( $this->value->text ) ); - /* - * - if (! $this->isEditMode() ) - { - $this->value->generate(); // Inhalt erzeugen. - $this->setTemplateVar('text',$this->linkifyOIDs( $this->value->value )); - } - */ if ( $this->getSessionVar('pageaction') != '' ) $this->setTemplateVar('old_pageaction',$this->getSessionVar('pageaction')); @@ -719,7 +707,7 @@ class PageelementAction extends Action - if ( $this->element->wiki ) + if ( $this->element->wiki && false /* OLD */ ) { $project = new Project( $this->page->projectid ); $languages = $project->getLanguages(); diff --git a/modules/cms-core/model/Element.class.php b/modules/cms-core/model/Element.class.php @@ -395,7 +395,7 @@ SQL */ function getRelatedProperties() { - $prp = array('text' =>array('inherit','withIcon','allLanguages','writable','html','defaultText'), + $prp = array('text' =>array('inherit','withIcon','allLanguages','writable','html','defaultText','format'), 'longtext'=>array('inherit','withIcon','allLanguages','writable','html','defaultText','format'), 'select' =>array('inherit','withIcon','allLanguages','writable','defaultText','code'), 'number' =>array('inherit','withIcon','allLanguages','writable','decPoint','decimals','thousandSep'), diff --git a/modules/cms-ui/action/IndexAction.class.php b/modules/cms-ui/action/IndexAction.class.php @@ -194,6 +194,7 @@ class IndexAction extends Action } $css[] = OR_HTML_MODULES_DIR . 'editor/simplemde/simplemde'; + $css[] = OR_HTML_MODULES_DIR . 'editor/trumbowyg/ui/trumbowyg'; $outFiles = array(); $modified = false; @@ -505,6 +506,7 @@ class IndexAction extends Action $js[] = OR_HTML_MODULES_DIR . 'editor/simplemde/simplemde'; + $js[] = OR_HTML_MODULES_DIR . 'editor/trumbowyg/trumbowyg'; //$js[] = OR_THEMES_DIR . '../editor/markitup/markitup/jquery.markitup'; //$js[] = OR_THEMES_DIR . '../editor/editor/ckeditor'; diff --git a/modules/cms-ui/themes/default/html/views/pageelement/edit.php b/modules/cms-ui/themes/default/html/views/pageelement/edit.php @@ -144,13 +144,11 @@ <td colspan="2"> <div class="inputholder"><input<?php if ('') echo ' disabled="true"' ?> id="<?php echo REQUEST_ID ?>_text" name="text<?php if ('') echo '_disabled' ?>" type="text" maxlength="255" class="text" value="<?php echo Text::encodeHtml(@$text) ?>" /><?php if ('') { ?><input type="hidden" name="text" value="<?php $text ?>"/><?php } ?></div> - - </td> </tr> <?php } ?> <?php $if4=($type=='longtext'); if($if4){?> - <?php $if5=(!empty($preview)); if($if5){?> + <?php $if5=(isset($preview)); if($if5){?> <div class="preview"> <fieldset class="<?php echo '1'?" open":" closed" ?><?php echo '1'?" show":"" ?>"><legend><div class="arrow arrow-right on-closed"></div><div class="arrow arrow-down on-open"></div><?php echo lang('page_preview') ?></legend><div> <span class="text"><?php echo nl2br($preview); ?></span> @@ -158,12 +156,16 @@ </div></fieldset> </div> <?php } ?> + <?php $if5=($editor=='markdown'); if($if5){?> + <textarea name="text" class="editor markdown-editor"><?php echo ${'text'} ?></textarea> + + <?php } ?> <?php $if5=($editor=='html'); if($if5){?> <textarea name="text" class="editor html-editor" id="pageelement_edit_editor"><?php echo ${'text'} ?></textarea> <?php } ?> <?php $if5=($editor=='wiki'); if($if5){?> - <?php $if6=(!empty($languagetext)); if($if6){?> + <?php $if6=(isset($languagetext)); if($if6){?> <fieldset class="<?php echo '1'?" open":" closed" ?><?php echo '1'?" show":"" ?>"><legend><div class="arrow arrow-right on-closed"></div><div class="arrow arrow-down on-open"></div><?php echo $languagename ?></legend><div> <span class="text"><?php echo nl2br(encodeHtml(htmlentities($languagetext))); ?></span> @@ -259,7 +261,7 @@ </div></fieldset> <?php } ?> <?php $if5=($editor=='text'); if($if5){?> - <div class="inputholder"><textarea class="longtext" name="text"><?php echo Text::encodeHtml($text) ?></textarea></div> + <div class="inputholder"><textarea class="editor raw-editor" name="text"><?php echo Text::encodeHtml($text) ?></textarea></div> @@ -325,8 +327,6 @@ <div class="inputholder"><input<?php if ('') echo ' disabled="true"' ?> id="<?php echo REQUEST_ID ?>_number" name="number<?php if ('') echo '_disabled' ?>" type="text" maxlength="20" class="text" value="<?php echo Text::encodeHtml(@$number) ?>" /><?php if ('') { ?><input type="hidden" name="number" value="<?php $number ?>"/><?php } ?></div> - - </div> </div></fieldset> <?php } ?> @@ -335,14 +335,12 @@ <div> <div class="inputholder"><select id="<?php echo REQUEST_ID ?>_text" name="text" title="" class=""<?php if (count($items)<=1) echo ' disabled="disabled"'; ?> size=1"><?php include_once( 'modules/template-engine/components/html/selectbox/component-select-box.php') ?><?php component_select_option_list($items,$text,0,0) ?><?php if (count($items)==0) { ?><input type="hidden" name="text" value="" /><?php } ?><?php if (count($items)==1) { ?><input type="hidden" name="text" value="<?php echo array_keys($items)[0] ?>" /><?php } ?> </select></div> - - </div> </div></fieldset> <?php } ?> <?php $if4=($type=='longtext'); if($if4){?> <?php $if5=($editor=='wiki'); if($if5){?> - <?php $if6=(!empty($languages)); if($if6){?> + <?php $if6=(isset($languages)); if($if6){?> <fieldset class="<?php echo '1'?" open":" closed" ?><?php echo '1'?" show":"" ?>"><legend><div class="arrow arrow-right on-closed"></div><div class="arrow arrow-down on-open"></div><?php echo lang('editor_show_language') ?></legend><div> <div> <?php foreach($languages as $languageid=>$languagename){ ?> @@ -383,7 +381,7 @@ <?php } ?> <?php } ?> <fieldset class="<?php echo '1'?" open":" closed" ?><?php echo '1'?" show":"" ?>"><legend><div class="arrow arrow-right on-closed"></div><div class="arrow arrow-down on-open"></div><?php echo lang('options') ?></legend><div> - <?php $if5=(!empty($release)); if($if5){?> + <?php $if5=(isset($release)); if($if5){?> <div> <?php { $tmpname = 'release';$default = '';$readonly = ''; if ( isset($$tmpname) ) @@ -405,7 +403,7 @@ </label> </div> <?php } ?> - <?php $if5=(!empty($publish)); if($if5){?> + <?php $if5=(isset($publish)); if($if5){?> <div> <?php { $tmpname = 'publish';$default = '';$readonly = ''; if ( isset($$tmpname) ) diff --git a/modules/cms-ui/themes/default/html/views/pageelement/edit.tpl.src.xml b/modules/cms-ui/themes/default/html/views/pageelement/edit.tpl.src.xml @@ -100,7 +100,6 @@ <row> <column colspan="2"> <input size="50" maxlength="255" class="text" name="text"></input> - <focus field="text"></focus> </column> </row> </if> @@ -112,6 +111,10 @@ </group> </part> </if> + + <if value="var:editor" equals="markdown"> + <editor type="markdown" name="text"></editor> + </if> <if value="var:editor" equals="html"> <editor type="html" name="text"></editor> </if> @@ -173,7 +176,7 @@ </group> </if> <if value="var:editor" equals="text"> - <inputarea class="longtext" name="text" rows="25" cols="70"></inputarea> + <inputarea class="editor raw-editor" name="text" rows="25" cols="70"></inputarea> <focus field="text"></focus> </if> </if> @@ -228,7 +231,6 @@ <part> <hidden name="decimals" default="decimals"></hidden> <input size="15" maxlength="20" name="number"></input> - <focus field="number"></focus> </part> </group> </if> @@ -236,7 +238,6 @@ <group> <part> <selectbox list="items" name="text"></selectbox> - <focus field="text"></focus> </part> </group> </if> diff --git a/modules/editor/trumbowyg/langs/ar.min.js b/modules/editor/trumbowyg/langs/ar.min.js @@ -0,0 +1,11 @@ +/* =========================================================== + * ar.js + * Arabic translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Abo Mokh ahmed (abomokhahmed) + * Github : https://github.com/abomokhahmed + * Reviewed by : Abdellah Chadidi (chadidi) + * Github : https://github.com/chadidi + */ +jQuery.trumbowyg.langs.ar={_dir:"rtl",viewHTML:"إعرض-HTML",undo:"تراجع",redo:"إعادة",formatting:"تنسيق",p:"فقرة",blockquote:"اقتباس",code:"كود",header:"رأس",bold:"عريض",italic:"مائل",strikethrough:"مشطوب",underline:"خطّ سفلي",strong:"بارز",em:"تغميق",del:"حذف",superscript:"الأس",subscript:"أس سفلي",unorderedList:"قائمة غير مرتّبة",orderedList:"قائمة مرتّبة",insertImage:"إدراج صورة",insertVideo:"إدراج فيديو",link:"رابط",createLink:"انشاء رابط",unlink:"حذف رابط",justifyLeft:"تصحيح للشمال",justifyCenter:"توسيط",justifyRight:"تصحيح لليمين",justifyFull:"تصحيح لكلا الإتّجاهين",horizontalRule:"إدراج خطّ أفقي",fullscreen:"ملء الشاشة",close:"إغلاق",submit:"إرسال",reset:"إعادة تعيين",required:"إلزامي",description:"وصف",title:"عنوان",text:"نصّ",target:"الهدف"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/bg.min.js b/modules/editor/trumbowyg/langs/bg.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * bg.js + * Bulgarian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Aleksandar Dimitrov + */ +jQuery.trumbowyg.langs.bg={viewHTML:"Прегледай HTML",formatting:"Форматиране",p:"Параграф",blockquote:"Цитат",code:"Код",header:"Заглавие",bold:"Удебелен",italic:"Наклонен",strikethrough:"Зачеркнат",underline:"Подчертан",strong:"Удебелен",em:"Наклонен",del:"Зачеркнат",unorderedList:"Обикновен списък",orderedList:"Номериран списък",insertImage:"Добави изображение",insertVideo:"Добави видео",link:"Връзка",createLink:"Създай връзка",unlink:"Премахни връзката",justifyLeft:"Подравни от ляво",justifyCenter:"Центрирай",justifyRight:"Подравни от дясно",justifyFull:"Подравни по ширина",horizontalRule:"Хоризонтална линия",fullscreen:"На цял екран",close:"Затвори",submit:"Впиши",reset:"Отмени",required:"Задължително",description:"Описание",title:"Заглавие",text:"Текст"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/by.min.js b/modules/editor/trumbowyg/langs/by.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * by.js + * Belarusian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Yury Karalkou + */ +jQuery.trumbowyg.langs.by={viewHTML:"Паглядзець HTML",undo:"Скасаваць",redo:"Паўтарыць",formatting:"Фарматаванне",p:"Звычайны",blockquote:"Цытата",code:"Код",header:"Загаловак",bold:"Паўтлусты",italic:"Курсіў",strikethrough:"Закрэслены",underline:"Падкрэслены",strong:"Паўтлусты",em:"Курсіў",del:"Закрэслены",superscript:"Верхні індэкс",subscript:"Індэкс",unorderedList:"Звычайны спіс",orderedList:"Нумараваны спіс",insertImage:"Уставіць выяву",insertVideo:"Уставіць відэа",link:"Спасылка",createLink:"Уставіць спасылку",unlink:"Выдаліць спасылку",justifyLeft:"Па леваму боку",justifyCenter:"У цэнтры",justifyRight:"Па праваму боку",justifyFull:"Па шырыні",horizontalRule:"Гарызантальная лінія",removeformat:"Ачысціць фарматаванне",fullscreen:"На ўвесь экран",close:"Зачыніць",submit:"Уставіць",reset:"Скасаваць",required:"Абавязкова",description:"Апісанне",title:"Падказка",text:"Тэкст"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/ca.min.js b/modules/editor/trumbowyg/langs/ca.min.js @@ -0,0 +1,11 @@ +/* =========================================================== + * ca.js + * Catalan translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Àlfons Sánchez (alsanan) + * Twitter : @alsanan + * Website : about.me/alsanan + * Github : https://github.com/alsanan + */ +jQuery.trumbowyg.langs.ca={viewHTML:"Veure HTML",formatting:"Formatar",p:"Paragraf",blockquote:"Citació",code:"Codi",header:"Títol",bold:"Negreta",italic:"Itàlica",strikethrough:"Suprimir",underline:"Subratllat",strong:"Forta",em:"Èmfasi",del:"Apagar",unorderedList:"Lista desordenada",orderedList:"Lista ordenada",insertImage:"Inserir imatge",insertVideo:"Inserir vídeo",link:"Enllaç",createLink:"Crear un enllaç",unlink:"Eliminar enllaç",justifyLeft:"Alinear a esquerra",justifyCenter:"Centrar",justifyRight:"Alinear a dreta",justifyFull:"Justificar",horizontalRule:"Inserir separador horitzontal",fullscreen:"Pantalla completa",close:"Tancar",submit:"Enviar",reset:"Reiniciar",required:"Obligatori",description:"Descripció",title:"Títol",text:"Text"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/cs.min.js b/modules/editor/trumbowyg/langs/cs.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * cs.js + * Czech translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Jan Svoboda (https://github.com/svoboda-jan) + */ +jQuery.trumbowyg.langs.cs={viewHTML:"Zobrazit HTML",formatting:"Formátování",p:"Odstavec",blockquote:"Citace",code:"Kód",header:"Nadpis",bold:"Tučné",italic:"Kurzíva",strikethrough:"Přeškrtnuté",underline:"Podtržené",strong:"Tučné",em:"Zvýraznit",del:"Smazat",unorderedList:"Netříděný seznam",orderedList:"Tříděný seznam",insertImage:"Vložit obrázek",insertVideo:"Vložit video",link:"Odkaz",createLink:"Vložit odkaz",unlink:"Smazat odkaz",justifyLeft:"Zarovnat doleva",justifyCenter:"Zarovnat na střed",justifyRight:"Zarovnat doprava",justifyFull:"Zarovnat do bloku",horizontalRule:"Vložit vodorovnou čáru",fullscreen:"Režim celé obrazovky",close:"Zavřít",submit:"Potvrdit",reset:"Zrušit",required:"Povinné",description:"Popis",title:"Nadpis",text:"Text"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/da.min.js b/modules/editor/trumbowyg/langs/da.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * da.js + * Danish translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Christian Pedersen + * Github : https://github.com/chripede + */ +jQuery.trumbowyg.langs.da={viewHTML:"Vis HTML",formatting:"Formatter",p:"Afsnit",blockquote:"Citat",code:"Kode",header:"Overskrift",bold:"Fed",italic:"Kursiv",strikethrough:"Gennemstreg",underline:"Understreg",strong:"Vigtig",em:"Fremhæv",del:"Slettet",unorderedList:"Uordnet liste",orderedList:"Ordnet liste",insertImage:"Indsæt billede",insertVideo:"Indsæt video",link:"Link",createLink:"Indsæt link",unlink:"Fjern link",justifyLeft:"Venstrestil",justifyCenter:"Centrer",justifyRight:"Højrestil",justifyFull:"Lige margener",horizontalRule:"Horisontal linie",fullscreen:"Fuld skærm",close:"Luk",submit:"Bekræft",reset:"Annuller",required:"Påkrævet",description:"Beskrivelse",title:"Titel",text:"Tekst"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/de.min.js b/modules/editor/trumbowyg/langs/de.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * de.js + * German translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Manfred Timm + * Github : https://github.com/Manfred62 + */ +jQuery.trumbowyg.langs.de={viewHTML:"HTML anzeigen",formatting:"Formatieren",p:"Absatz",blockquote:"Zitat",code:"Code",header:"Überschrift",bold:"Fett",italic:"Kursiv",strikethrough:"Durchgestrichen",underline:"Unterstrichen",strong:"Wichtig",em:"Betont",del:"Gelöscht",unorderedList:"Ungeordnete Liste",orderedList:"Geordnete Liste",insertImage:"Bild einfügen",insertVideo:"Video einfügen",link:"Link",createLink:"Link einfügen",unlink:"Link entfernen",justifyLeft:"Links ausrichten",justifyCenter:"Zentrieren",justifyRight:"Rechts ausrichten",justifyFull:"Blocksatz",horizontalRule:"Horizontale Linie einfügen",fullscreen:"Vollbild",close:"Schliessen",submit:"Bestätigen",reset:"Zurücksetzen",required:"Erforderlich",description:"Beschreibung",title:"Titel",text:"Text"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/el.min.js b/modules/editor/trumbowyg/langs/el.min.js @@ -0,0 +1,12 @@ +/* =========================================================== + * el.js + * Greek translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Merianos Nikos + * Twitter : @_webresources + * Website : http://www.wp-lion.com + * LinkedIn: https://gr.linkedin.com/in/merianosnikos + * Behance: https://www.behance.net/web_design_blog + */ +jQuery.trumbowyg.langs.el={viewHTML:"Προβολή κώδικα HTML",formatting:"Μορφοποίηση",p:"Παράγραφος",blockquote:"Παράθεση",code:"Κώδικας",header:"Επικεφαλίδα",bold:"Έντονα",italic:"Πλάγια",strikethrough:"Διαγραφή",underline:"Υπογράμμιση",strong:"Έντονα",em:"Πλάγια",del:"Διαγραφή",unorderedList:"Αταξινόμητη λίστα",orderedList:"Ταξινομημένη λίστα",insertImage:"Εισαγωγή εικόνας",insertVideo:"Εισαγωγή βίντεο",link:"Σύνδεσμος",createLink:"Δημιουργία συνδέσμου",unlink:"Διαγραφή συνδέσμου",justifyLeft:"Στοίχιση αριστερά",justifyCenter:"Στοίχιση στο κέντρο",justifyRight:"Στοίχιση δεξιά",justifyFull:"Πλήρης στοίχιση",horizontalRule:"Οριζόντια γραμμή",removeformat:"Καθαρισμός μορφοποίησης",fullscreen:"Πλήρης οθόνη",close:"Κλείσιμο",submit:"Υποβολή",reset:"Επαναφορά",required:"Απαραίτητο",description:"Περιγραφή",title:"Τίτλος",text:"Κείμενο"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/es.min.js b/modules/editor/trumbowyg/langs/es.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * es.js + * Spanish translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Moisés Márquez + * Email : moises.marquez.g@gmail.com + */ +jQuery.trumbowyg.langs.es={viewHTML:"Ver HTML",undo:"Deshacer",redo:"Rehacer",formatting:"Formato",p:"Párrafo",blockquote:"Cita",code:"Código",header:"Título",bold:"Negrita",italic:"Cursiva",strikethrough:"Tachado",underline:"Subrayado",strong:"Negrita",em:"Énfasis",del:"Borrar",superscript:"Sobrescrito",subscript:"Subíndice",unorderedList:"Lista Desordenada",orderedList:"Lista Ordenada",insertImage:"Insertar una imagen",insertVideo:"Insertar un vídeo",link:"Enlace",createLink:"Insertar un enlace",unlink:"Suprimir un enlace",justifyLeft:"Izquierda",justifyCenter:"Centrar",justifyRight:"Derecha",justifyFull:"Justificado",horizontalRule:"Insertar separador horizontal",removeformat:"Eliminar formato",fullscreen:"Pantalla completa",close:"Cerrar",submit:"Enviar",reset:"Cancelar",required:"Obligatorio",description:"Descripción",title:"Título",text:"Texto",target:"Target"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/es_ar.min.js b/modules/editor/trumbowyg/langs/es_ar.min.js @@ -0,0 +1,10 @@ +/* =========================================================== + * es_ar.js + * Spanish (Argentina) translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Félix Vera + * Email : felix.vera@gmail.com + */ +// jshint camelcase:false +jQuery.trumbowyg.langs.es_ar={viewHTML:"Ver HTML",formatting:"Formato",p:"Párrafo",blockquote:"Cita",code:"Código",header:"Título",bold:"Negrita",italic:"Itálica",strikethrough:"Tachado",underline:"Subrayado",strong:"Fuere",em:"Énfasis",del:"Borrar",unorderedList:"Lista Desordenada",orderedList:"Lista Ordenada",insertImage:"Insertar una imagen",insertVideo:"Insertar un video",link:"Vínculo",createLink:"Insertar un vínculo",unlink:"Suprimir un vínculo",justifyLeft:"Alinear a la Izquierda",justifyCenter:"Centrar",justifyRight:"Alinear a la Derecha",justifyFull:"Justificado",horizontalRule:"Insertar separado Horizontal",fullscreen:"Pantalla Completa",close:"Cerrar",submit:"Enviar",reset:"Cancelar",required:"Obligatorio",description:"Descripción",title:"Título",text:"Texto"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/fa.min.js b/modules/editor/trumbowyg/langs/fa.min.js @@ -0,0 +1,10 @@ +/* =========================================================== + * fa.js + * Persian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Kiarash Soleimanzadeh + * Github : https://github.com/kiyarash + * Email : kiarash.s@hotmail.com + */ +jQuery.trumbowyg.langs.fa={_dir:"rtl",viewHTML:"نمایش کد اچ تی ام ال",formatting:"قالب بندی",p:"پاراگراف",blockquote:"نقل قول",code:"کد",header:"سر تیتر",bold:"ضخیم",italic:"مورب",strikethrough:"میان خط دار",underline:"زیر خط دار",strong:"برجسته",em:"مورب",del:"حذف شده",unorderedList:"لیست نامرتب",orderedList:"لیست مرتب",insertImage:"درج تصویر",insertVideo:"درج ویدئو",link:"لینک",createLink:"درج لینک",unlink:"حذف لینک",justifyLeft:"تراز به چپ",justifyCenter:"تراز به وسط",justifyRight:"تراز به راست",justifyFull:"تراز به چپ و راست",horizontalRule:"درج خط افقی",fullscreen:"تمام صفحه",close:"بستن",submit:"تائید",reset:"انصراف",required:"اجباری",description:"توضیحات",title:"عنوان",text:"متن"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/fi.min.js b/modules/editor/trumbowyg/langs/fi.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * fi.js + * Finnish translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Teppo Koivula (teppokoivula) + * Github : https://github.com/teppokoivula + */ +jQuery.trumbowyg.langs.fi={viewHTML:"Näytä HTML",undo:"Kumoa",redo:"Tee uudelleen",formatting:"Muotoilu",p:"Kappale",blockquote:"Lainaus",code:"Koodi",header:"Otsikko",bold:"Lihavointi",italic:"Kursivointi",strikethrough:"Yliviivaus",underline:"Allevivaus",strong:"Vahvennus",em:"Painotus",del:"Poistettu",unorderedList:"Luettelo",orderedList:"Numeroitu luettelo",insertImage:"Lisää kuva",insertVideo:"Lisää video",link:"Linkki",createLink:"Luo linkki",unlink:"Poista linkki",justifyLeft:"Tasaa vasemmalle",justifyCenter:"Keskitä",justifyRight:"Tasaa oikealle",justifyFull:"Tasaa",horizontalRule:"Vaakaviiva",fullscreen:"Kokoruutu",close:"Sulje",submit:"Lisää",reset:"Palauta",required:"Pakollinen",description:"Kuvaus",title:"Otsikko",text:"Teksti"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/fr.min.js b/modules/editor/trumbowyg/langs/fr.min.js @@ -0,0 +1,10 @@ +/* =========================================================== + * fr.js + * French translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ +jQuery.trumbowyg.langs.fr={viewHTML:"Voir le HTML",undo:"Annuler",redo:"Refaire",formatting:"Format",p:"Paragraphe",blockquote:"Citation",code:"Code",header:"Titre",bold:"Gras",italic:"Italique",strikethrough:"Rayé",underline:"Souligné",strong:"Fort",em:"Emphase",del:"Supprimé",superscript:"Exposant",subscript:"Indice",unorderedList:"Liste à puces",orderedList:"Liste ordonnée",insertImage:"Insérer une image",insertVideo:"Insérer une video",link:"Lien",createLink:"Insérer un lien",unlink:"Supprimer le lien",justifyLeft:"Aligner à gauche",justifyCenter:"Centrer",justifyRight:"Aligner à droite",justifyFull:"Justifier",horizontalRule:"Insérer un séparateur horizontal",removeformat:"Supprimer formatage",fullscreen:"Plein écran",close:"Fermer",submit:"Valider",reset:"Annuler",required:"Obligatoire",description:"Description",title:"Titre",text:"Texte",target:"Cible"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/he.min.js b/modules/editor/trumbowyg/langs/he.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * he.js + * Hebrew translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Udi Doron (udidoron) + * Github : https://github.com/udidoron + */ +jQuery.trumbowyg.langs.he={_dir:"rtl",viewHTML:"צפה ב-HTML",formatting:"פורמט",p:"פסקה",blockquote:"ציטוט",code:"קוד",header:"ראשית",bold:"מודגש",italic:"נטוי",strikethrough:"קו חוצה",underline:"קו תחתון",strong:"בולט",em:"הדגשה",del:"נמחק",unorderedList:"רשימה ללא סדר",orderedList:"רשימה מסודרת",insertImage:"הכנס תמונה",insertVideo:"הכנס סרטון",link:"קישור",createLink:"צור קישור",unlink:"הסר קישור",justifyLeft:"ישר לשמאל",justifyCenter:"מרכז",justifyRight:"ישר לימין",justifyFull:"ישר לשני הצדדים",horizontalRule:"הכנס קו אופקי",fullscreen:"מסך מלא",close:"סגור",submit:"שלח",reset:"אתחל מחדש",required:"נחוץ",description:"תיאור",title:"כותרת",text:"טקסט"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/hr.min.js b/modules/editor/trumbowyg/langs/hr.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * hr.js + * Croatian translation for Trumbowyg + * https://www.github.com/Buda9 + * =========================================================== + * Author : Davor Budimir (https://www.github.com/Buda9) + */ +// jshint camelcase:false +jQuery.trumbowyg.langs.hr={viewHTML:"Poglеdaj HTML kód",formatting:"Formatiranjе",p:"Odlomak",blockquote:"Citat",code:"Kód",header:"Zaglavlje",bold:"Podеbljano",italic:"Nakošeno",strikethrough:"Prеcrtano",underline:"Podvučеno",strong:"Podеbljano",em:"Istaknuto",del:"Obrisano",unorderedList:"Neuređen popis",orderedList:"Uređen popis",insertImage:"Dodaj sliku",insertVideo:"Dodaj vidеo",link:"Povezica",createLink:"Dodaj povezicu",unlink:"Ukloni povezicu",justifyLeft:"Lijеvo poravnanjе",justifyCenter:"Središnje poravnanjе",justifyRight:"Dеsno poravnanjе",justifyFull:"Obostrano poravnanjе",horizontalRule:"Horizontalna crta",fullscreen:"Puni zaslon",close:"Zatvori",submit:"Unеsi",reset:"Otkaži",required:"Obavеzno poljе",description:"Opis",title:"Naslov",text:"Tеkst"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/hu.min.js b/modules/editor/trumbowyg/langs/hu.min.js @@ -0,0 +1,10 @@ +/* =========================================================== + * hu.js + * Hungarian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Peter MATO + * Web: http://fixme.hu + * GitHub: https://github.com/matopeter + */ +jQuery.trumbowyg.langs.hu={viewHTML:"HTML nézet",formatting:"Stílusok",p:"Bekezdés",blockquote:"Idézet",code:"Kód",header:"Címsor",bold:"Félkövér",italic:"Dőlt",strikethrough:"Áthúzott",underline:"Aláhúzott",strong:"Vastag",em:"Kiemelt",del:"Törölt",unorderedList:"Felsorolás",orderedList:"Számozás",insertImage:"Kép beszúrása",insertVideo:"Video beszúrása",link:"Link",createLink:"Link létrehozása",unlink:"Link eltávolítása",justifyLeft:"Balra igazítás",justifyCenter:"Középre igazítás",justifyRight:"Jobbra igazítás",justifyFull:"Sorkizárt",horizontalRule:"Vízszintes vonal",fullscreen:"Teljes képernyő",close:"Bezár",submit:"Beküldés",reset:"Alaphelyzet",required:"Kötelező",description:"Leírás",title:"Cím",text:"Szöveg",removeformat:"Formázás eltávolítása"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/id.min.js b/modules/editor/trumbowyg/langs/id.min.js @@ -0,0 +1,11 @@ +/* =========================================================== + * id.js + * Indonesian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Rezha Julio (kimiamania) + * Twitter : @kimiamania + * Website : http://rezhajulio.web.id + * Github : https://github.com/kimiamania + */ +jQuery.trumbowyg.langs.id={viewHTML:"Lihat HTML",formatting:"Penyusunan",p:"Paragraf",blockquote:"Kutipan",code:"Kode",header:"Kepala",bold:"Tebal",italic:"Miring",strikethrough:"Coret",underline:"Garis bawah",strong:"Tebal",em:"Miring",del:"Dicoret",unorderedList:"Daftar tak teratur",orderedList:"Daftar teratur",insertImage:"Sisipkan gambar",insertVideo:"Sisipkan video",link:"Tautan",createLink:"Sisipkan Tautan",unlink:"Singkirkan tautan",justifyLeft:"Rata kiri",justifyCenter:"Rata Tengah",justifyRight:"Rata kanan",justifyFull:"Rata kiri dan kanan",horizontalRule:"Sisipkan garis mendatar",fullscreen:"Layar penuh",close:"Tutup",submit:"Setuju",reset:"Batal",required:"Diperlukan",description:"Deskripsi",title:"Judul",text:"Teks"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/it.min.js b/modules/editor/trumbowyg/langs/it.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * it.js + * Italian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Mirko Buffoni + */ +jQuery.trumbowyg.langs.it={viewHTML:"Mostra HTML",formatting:"Formattazione",p:"Paragrafo",blockquote:"Citazione",code:"Codice",header:"Intestazione",bold:"Grassetto",italic:"Italico",strikethrough:"Barrato",underline:"Sottolineato",strong:"Rafforza",em:"Enfatizza",del:"Cancella",unorderedList:"Elenco puntato",orderedList:"Elenco numerato",insertImage:"Inserisci immagine",insertVideo:"Inserisci video",link:"Collegamento",createLink:"Crea un collegamento",unlink:"Elimina collegamento",justifyLeft:"Allinea a sinistra",justifyCenter:"Centra",justifyRight:"Allinea a destra",justifyFull:"Giustifica",horizontalRule:"Inserisci un separatore orizzontale",fullscreen:"Schermo intero",close:"Chiudi",submit:"Invia",reset:"Annulla",required:"Obbligatorio",description:"Descrizione",title:"Titolo",text:"Testo",removeformat:"Rimuovi Formattazione",superscript:"Apice",subscript:"Pedice"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/ja.min.js b/modules/editor/trumbowyg/langs/ja.min.js @@ -0,0 +1,10 @@ +/* =========================================================== + * ja.js + * Japanese translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Kouta Fukuhara (foo9) + * Twitter : @foo9 + * Website : https://github.com/foo9 + */ +jQuery.trumbowyg.langs.ja={viewHTML:"HTML表示",undo:"元に戻す",redo:"やり直す",formatting:"フォーマット",p:"段落",blockquote:"引用",code:"コード",header:"見出し",bold:"太字",italic:"斜体",strikethrough:"取り消し線",underline:"下線",strong:"太字",em:"斜体",del:"取り消し線",superscript:"上付き文字",subscript:"下付き文字",unorderedList:"順序なしリスト",orderedList:"順序ありリスト",insertImage:"画像の挿入",link:"リンク",createLink:"リンクの作成",unlink:"リンクの削除",justifyLeft:"左揃え",justifyCenter:"中央揃え",justifyRight:"右揃え",justifyFull:"両端揃え",horizontalRule:"横罫線",removeformat:"フォーマットの削除",fullscreen:"全画面表示",close:"閉じる",submit:"送信",reset:"キャンセル",required:"必須",description:"説明",title:"タイトル",text:"テキスト",target:"ターゲット"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/ko.min.js b/modules/editor/trumbowyg/langs/ko.min.js @@ -0,0 +1,10 @@ +/* =========================================================== + * ko.js + * Korean translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : JoongSeob Vito Kim (dorajistyle) + * Blog : http://dorajistyle.pe.kr + * Github : https://github.com/dorajistyle + */ +jQuery.trumbowyg.langs.ko={viewHTML:"HTML로 보기",formatting:"양식",p:"문단",blockquote:"인용부호",code:"코드",header:"머릿말",bold:"진하게",italic:"기울임",strikethrough:"취소선",underline:"밑줄",strong:"굵게",em:"강조",del:"취소",unorderedList:"순차 목록",orderedList:"비순차 목록",insertImage:"이미지 넣기",insertVideo:"비디오 넣기",link:"링크",createLink:"링크 넣기",unlink:"링크 없애기",justifyLeft:"왼쪽 정렬",justifyCenter:"가운데 정렬",justifyRight:"오른쪽 정렬",justifyFull:"혼합 정렬",horizontalRule:"가로줄 넣기",fullscreen:"전체 화면",close:"닫기",submit:"전송",reset:"초기화",required:"꼭 입력해야 합니다.",description:"설명",title:"제목",text:"본문 내용"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/lt.min.js b/modules/editor/trumbowyg/langs/lt.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * lt.js + * Lithuanian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Justas Brazauskas + */ +jQuery.trumbowyg.langs.lt={viewHTML:"Žiūrėti HTML",formatting:"Formatuoti",p:"Paragrafas",blockquote:"Citata",code:"Kodas",header:"Antraštė",bold:"Paryškinti",italic:"Kursyvuoti",strikethrough:"Perbraukti",underline:"Pabrėžti",strong:"Paryškinti",em:"Pabrėžti",del:"Trinti",unorderedList:"Sąrašas",orderedList:"Numeruotas sąrašas",insertImage:"Pridėti vaizdą",insertVideo:"Pridėti video",link:"Nuoroda",createLink:"Kurti nuorodą",unlink:"Ištrinti nuorodą",justifyLeft:"Lyginti kairėn",justifyCenter:"Lygiuoti Centre",justifyRight:"Lyginti dešinėn",justifyFull:"Centruoti",horizontalRule:"Horizontali linija",fullscreen:"Pilnas ekranas",close:"Uždaryti",submit:"Siųsti",reset:"Atšaukti",required:"Privaloma",description:"Aprašymas",title:"Pavadinimas",text:"Tekstas",removeformat:"Pašalinti formatavimą",superscript:"Viršutinis indeksas",subscript:"Apatinis indeksas"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/mn.min.js b/modules/editor/trumbowyg/langs/mn.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * mn.js + * Mongolian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Ganbayar.B (ganbayar13) + */ +jQuery.trumbowyg.langs.mn={viewHTML:"HTML харах",undo:"Буцаах",redo:"Дахих",formatting:"Формат",p:"Догол мөр",blockquote:"Ишлэл",code:"Код",header:"Гарчиг",bold:"Тод",italic:"Налуу",strikethrough:"Дундуур зураас",underline:"Доогуур зураас",strong:"Тод",em:"Налуу",del:"Дундуур зураас",superscript:"Дээд индекс",subscript:"Доод индекс",unorderedList:"Дугаарлаагүй жагсаалт",orderedList:"Дугаарласан жагсаалт",insertImage:"Зураг оруулах",insertVideo:"Видео оруулах",link:"Холбоос",createLink:"Холбоос үүсгэх",unlink:"Холбоос цуцлах",justifyLeft:"Зүүн тийш шахах",justifyCenter:"Голлуулах",justifyRight:"Баруун Баруун тийш шахах",justifyFull:"Тэгшитгэх",horizontalRule:"Хөндлөн шугам",removeformat:"Формат арилгах",fullscreen:"Дэлгэц дүүргэх",close:"Хаах",submit:"Оруулах",reset:"Цуцлах",required:"Шаардлагатай",description:"Тайлбар",title:"Гарчиг",text:"Текст",target:"Бай"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/my.min.js b/modules/editor/trumbowyg/langs/my.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * my.js + * Malaysian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : JohnPozy + */ +jQuery.trumbowyg.langs.id={viewHTML:"Lihat HTML",formatting:"Pemformatan",p:"Perenggan",blockquote:"Blockquote",code:"Kod",header:"Pengepala",bold:"Tebal",italic:"Condong",strikethrough:"Garis batal",underline:"Garis bawah",strong:"Kuat",em:"Condong",del:"Hapus",unorderedList:"Senarai tidak tertib",orderedList:"Senarai tertib",insertImage:"Masukkan imej",insertVideo:"Masukkan video",link:"Pautan",createLink:"Cipta pautan",unlink:"Hapus pautan",justifyLeft:"Mengimbangkan ke kiri",justifyCenter:"Mengimbangkan ke tengah",justifyRight:"Mengimbangkan ke kanan",justifyFull:"Mengimbangkan ke kiri dan kanan",horizontalRule:"Masukkan garis mendatar",fullscreen:"Skrin penuh",close:"Tutup",submit:"Hantar",reset:"Batal",required:"Diperlukan",description:"Perihal",title:"Tajuk",text:"Teks"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/nl.min.js b/modules/editor/trumbowyg/langs/nl.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * nl.js + * Dutch translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Danny Hiemstra + * Github : https://github.com/dhiemstra + */ +jQuery.trumbowyg.langs.nl={viewHTML:"HTML bekijken",formatting:"Opmaak",p:"Paragraaf",blockquote:"Citaat",code:"Code",header:"Kop",bold:"Vet",italic:"Cursief",strikethrough:"Doorhalen",underline:"Onderlijnen",strong:"Sterk",em:"Nadruk",del:"Verwijderd",unorderedList:"Ongenummerde lijst",orderedList:"Genummerde lijst",insertImage:"Afbeelding invoegen",insertVideo:"Video invoegen",link:"Link",createLink:"Link maken",unlink:"Link verwijderen",justifyLeft:"Links uitlijnen",justifyCenter:"Centreren",justifyRight:"Rechts uitlijnen",justifyFull:"Uitvullen",horizontalRule:"Horizontale lijn",removeFormat:"Opmaak verwijderen",fullscreen:"Volledig scherm",close:"Sluiten",submit:"Verzenden",reset:"Herstellen",required:"Verplicht",description:"Omschrijving",title:"Titel",text:"Tekst"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/no_nb.min.js b/modules/editor/trumbowyg/langs/no_nb.min.js @@ -0,0 +1,10 @@ +/* =========================================================== + * no_nb.js + * Norwegian Bokmål translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Jon Severin Eivik Jakobsen + * Github : https://github.com/jsejakobsen + */ +// jshint camelcase:false +jQuery.trumbowyg.langs.no_nb={viewHTML:"Vis HTML",formatting:"Formater",p:"Avsnitt",blockquote:"Sitat",code:"Kode",header:"Overskrift",bold:"Fet",italic:"Kursiv",strikethrough:"Gjennomstreking",underline:"Understreking",strong:"Viktig",em:"Fremhevet",del:"Slettet",unorderedList:"Uordnet liste",orderedList:"Ordnet liste",insertImage:"Sett inn bilde",insertVideo:"Sett inn video",link:"Lenke",createLink:"Sett inn lenke",unlink:"Fjern lenke",justifyLeft:"Venstrejuster",justifyCenter:"Midtstill",justifyRight:"Høyrejuster",justifyFull:"Blokkjuster",horizontalRule:"Horisontal linje",fullscreen:"Full skjerm",close:"Lukk",submit:"Bekreft",reset:"Avbryt",required:"Påkrevd",description:"Beskrivelse",title:"Tittel",text:"Tekst"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/ph.min.js b/modules/editor/trumbowyg/langs/ph.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * ph.js + * Filipino translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : @leogono + */ +jQuery.trumbowyg.langs.ph={viewHTML:"Tumingin sa HTML",formatting:"Formatting",p:"Talata",blockquote:"Blockquote",code:"Kowd",header:"Header",bold:"Makapal",italic:"Hilig",strikethrough:"Strikethrough",underline:"Salungguhit",strong:"Malakas",em:"Hilig",del:"Tinanggal",unorderedList:"Hindi nakahanay na listahan",orderedList:"Nakahanay na listahan",insertImage:"Ilagay ang larawan",insertVideo:"Ilagay ang video",link:"Koneksyon",createLink:"Iugnay",unlink:"Tanggalin ang koneksyon",justifyLeft:"Ihanay sa kaliwa",justifyCenter:"Ihanay sa gitna",justifyRight:"Ihanay sa kanan",justifyFull:"Ihanay sa kaliwa at kanan",horizontalRule:"Pahalang na linya",fullscreen:"Fullscreen",close:"Isara",submit:"Ipasa",reset:"I-reset",required:"Kailangan",description:"Paglalarawan",title:"Pamagat",text:"Teksto"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/pl.min.js b/modules/editor/trumbowyg/langs/pl.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * pl.js + * Polish translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Paweł Abramowicz + * Github : https://github.com/pawelabrams + */ +jQuery.trumbowyg.langs.pl={viewHTML:"Pokaż HTML",formatting:"Format",p:"Akapit",blockquote:"Cytat",code:"Kod",header:"Nagłówek",bold:"Pogrubienie",italic:"Pochylenie",strikethrough:"Przekreślenie",underline:"Podkreślenie",strong:"Wytłuszczenie",em:"Uwydatnienie",del:"Usunięte",unorderedList:"Lista nieuporządkowana",orderedList:"Lista uporządkowana",insertImage:"Wstaw obraz",insertVideo:"Wstaw film",link:"Link",createLink:"Wstaw link",unlink:"Usuń link",justifyLeft:"Wyrównaj do lewej",justifyCenter:"Wyśrodkuj",justifyRight:"Wyrównaj do prawej",justifyFull:"Wyjustuj",horizontalRule:"Odkreśl linią",fullscreen:"Pełny ekran",close:"Zamknij",submit:"Zastosuj",reset:"Przywróć",required:"Wymagane",description:"Opis",title:"Tytuł",text:"Tekst"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/pt.min.js b/modules/editor/trumbowyg/langs/pt.min.js @@ -0,0 +1,11 @@ +/* =========================================================== + * pt.js + * Portuguese translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Ramiro Varandas Jr (ramirovjr) + * Twitter : @ramirovjnr + * Website : about.me/ramirovjnr + * Github : https://github.com/ramirovjr + */ +jQuery.trumbowyg.langs.pt={viewHTML:"Ver HTML",undo:"Desfazer",redo:"Refazer",formatting:"Formatar",p:"Paragráfo",blockquote:"Citação",code:"Código",header:"Título",bold:"Negrito",italic:"Itálico",strikethrough:"Suprimir",underline:"Sublinhado",strong:"Negrito",em:"Ênfase",del:"Apagar",superscript:"Sobrescrito",subscript:"Subscrito",unorderedList:"Lista não ordenada",orderedList:"Lista ordenada",insertImage:"Inserir imagem",insertVideo:"Inserir vídeo",link:"Link",createLink:"Criar um link",unlink:"Remover link",justifyLeft:"Alinhar a esquerda",justifyCenter:"Centralizar",justifyRight:"Alinhar a direita",justifyFull:"Justificar",horizontalRule:"Inserir separador horizontal",removeformat:"Remover formatação",fullscreen:"Tela cheia",close:"Fechar",submit:"Enviar",reset:"Limpar",required:"Obrigatório",description:"Descrição",title:"Título",text:"Texto",target:"Target"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/pt_br.min.js b/modules/editor/trumbowyg/langs/pt_br.min.js @@ -0,0 +1,11 @@ +/* =========================================================== + * pt_br.js + * Portuguese Brazilian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Alex Gotardi (alexgotardi) + * Twitter : @alexgotardi + * Github : https://github.com/alexgotardi + */ +// jshint camelcase:false +jQuery.trumbowyg.langs.pt_br={viewHTML:"Ver HTML",undo:"Desfazer",redo:"Refazer",formatting:"Formatar",p:"Parágrafo",blockquote:"Citação",code:"Código",header:"Título",bold:"Negrito",italic:"Itálico",strikethrough:"Tachado",underline:"Sublinhado",strong:"Negrito",em:"Ênfase",del:"Apagar",superscript:"Sobrescrito",subscript:"Subscrito",unorderedList:"Lista não ordenada",orderedList:"Lista ordenada",insertImage:"Inserir imagem",insertVideo:"Inserir vídeo",link:"Link",createLink:"Criar um link",unlink:"Remover link",justifyLeft:"Alinhar a esquerda",justifyCenter:"Centralizar",justifyRight:"Alinhar a direita",justifyFull:"Justificar",horizontalRule:"Inserir separador horizontal",removeformat:"Remover formatação",fullscreen:"Tela cheia",close:"Fechar",submit:"Enviar",reset:"Limpar",required:"Obrigatório",description:"Descrição",title:"Título",text:"Texto",target:"Target"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/ro.min.js b/modules/editor/trumbowyg/langs/ro.min.js @@ -0,0 +1,12 @@ +/* =========================================================== + * ro.js + * Romanian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Vladut Radulescu (pacMakaveli) + * Email: pacMakaveli90@gmail.com + * Twitter : @pacMakaveli90 + * Website : creative-studio51.co.uk + * Github : https://github.com/pacMakaveli + */ +jQuery.trumbowyg.langs.ro={viewHTML:"Vizualizare HTML",formatting:"Format",p:"Paragraf",blockquote:"Citație",code:"Cod",header:"Titlu",bold:"Bold",italic:"Italic",strikethrough:"Tăiat",underline:"Subliniat",strong:"Puternic",em:"Accentuat",del:"Sterge",unorderedList:"Lista dezordonată",orderedList:"Liste ordonată",insertImage:"Adăugare Imagine",insertVideo:"Adăugare Video",link:"Link",createLink:"Crează link",unlink:"Remover link",justifyLeft:"Aliniază stânga",justifyCenter:"Aliniază centru",justifyRight:"Aliniază dreapta",justifyFull:"Justificare",horizontalRule:"Linie orizontală",fullscreen:"Tot ecranul",close:"Închide",submit:"Procesează",reset:"Resetează",required:"Obligatoriu",description:"Descriere",title:"Titlu",text:"Text"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/rs.min.js b/modules/editor/trumbowyg/langs/rs.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * rs.js + * Serbian (Cyrlic) translation for Trumbowyg + * https://www.github.com/johonunu + * =========================================================== + * Author : Nikola Trifunovic (https://www.github.com/johonunu) + */ +jQuery.trumbowyg.langs.rs={viewHTML:"Погледај HTML кóд",formatting:"Форматирање",p:"Параграф",blockquote:"Цитат",code:"Кóд",header:"Наслов",bold:"Подебљано",italic:"Курзив",strikethrough:"Прецртано",underline:"Подвучено",strong:"Подебљано",em:"Истакнуто",del:"Обрисано",unorderedList:"Ненабројива листа",orderedList:"Набројива листа",insertImage:"Унеси слику",insertVideo:"Унеси видео",link:"Линк",createLink:"Унеси линк",unlink:"Уклони линк",justifyLeft:"Лево равнање",justifyCenter:"Централно равнање",justifyRight:"Десно равнање",justifyFull:"Обострано равнање",horizontalRule:"Хоризонтална линија",fullscreen:"Режим читавог екрана",close:"Затвори",submit:"Унеси",reset:"Откажи",required:"Обавезно поље",description:"Опис",title:"Наслов",text:"Текст"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/rs_latin.min.js b/modules/editor/trumbowyg/langs/rs_latin.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * rs_latin.js + * Serbian (Latin) translation for Trumbowyg + * https://www.github.com/johonunu + * =========================================================== + * Author : Nikola Trifunovic (https://www.github.com/johonunu) + */ +// jshint camelcase:false +jQuery.trumbowyg.langs.rs_latin={viewHTML:"Poglеdaj HTML kód",formatting:"Formatiranjе",p:"Paragraf",blockquote:"Citat",code:"Kód",header:"Naslov",bold:"Podеbljano",italic:"Kurziv",strikethrough:"Prеcrtano",underline:"Podvučеno",strong:"Podеbljano",em:"Istaknuto",del:"Obrisano",unorderedList:"Nеnabrojiva lista",orderedList:"Nabrojiva lista",insertImage:"Unеsi sliku",insertVideo:"Unеsi vidеo",link:"Link",createLink:"Unеsi link",unlink:"Ukloni link",justifyLeft:"Lеvo ravnanjе",justifyCenter:"Cеntralno ravnanjе",justifyRight:"Dеsno ravnanjе",justifyFull:"Obostrano ravnanjе",horizontalRule:"Horizontalna linija",fullscreen:"Rеžim čitavog еkrana",close:"Zatvori",submit:"Unеsi",reset:"Otkaži",required:"Obavеzno poljе",description:"Opis",title:"Naslov",text:"Tеkst"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/ru.min.js b/modules/editor/trumbowyg/langs/ru.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * ru.js + * Russion translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Yuri Lya + */ +jQuery.trumbowyg.langs.ru={viewHTML:"Посмотреть HTML",undo:"Отменить",redo:"Повторить",formatting:"Форматирование",p:"Обычный",blockquote:"Цитата",code:"Код",header:"Заголовок",bold:"Полужирный",italic:"Курсив",strikethrough:"Зачеркнутый",underline:"Подчеркнутый",strong:"Полужирный",em:"Курсив",del:"Зачеркнутый",superscript:"Надстрочный",subscript:"Подстрочный",unorderedList:"Обычный список",orderedList:"Нумерованный список",insertImage:"Вставить изображение",insertVideo:"Вставить видео",link:"Ссылка",createLink:"Вставить ссылку",unlink:"Удалить ссылку",justifyLeft:"По левому краю",justifyCenter:"По центру",justifyRight:"По правому краю",justifyFull:"По ширине",horizontalRule:"Горизонтальная линия",removeformat:"Очистить форматирование",fullscreen:"Во весь экран",close:"Закрыть",submit:"Вставить",reset:"Отменить",required:"Обязательное",description:"Описание",title:"Подсказка",text:"Текст"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/sk.min.js b/modules/editor/trumbowyg/langs/sk.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * sk.js + * Slovak translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : VeeeneX (https://github.com/VeeeneX) + */ +jQuery.trumbowyg.langs.sk={viewHTML:"Zobraziť HTML",formatting:"Formátovanie",p:"Paragraf",blockquote:"Citácia",code:"Kód",header:"Nadpis",bold:"Tučné",italic:"Kurzíva",strikethrough:"Preškrtnuté",underline:"Podčiarknuté",strong:"Tučné",em:"Zvýrazniť",del:"Zmazať",unorderedList:"Netriedený zoznam",orderedList:"Triedený zoznam",insertImage:"Vložiť obrázok",insertVideo:"Vložiť video",link:"Odkaz",createLink:"Vložiť odkaz",unlink:"Zmazať odkaz",justifyLeft:"Zarovnať doľava",justifyCenter:"Zarovnať na stred",justifyRight:"Zarovnať doprava",justifyFull:"Zarovnať do bloku",horizontalRule:"Vložit vodorovnú čiaru",fullscreen:"Režim celej obrazovky",close:"Zavrieť",submit:"Potvrdiť",reset:"Zrušiť",required:"Povinné",description:"Popis",title:"Nadpis",text:"Text"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/sq.min.js b/modules/editor/trumbowyg/langs/sq.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * sq.js + * Albanian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Adalen Vladi + */ +jQuery.trumbowyg.langs.sq={viewHTML:"Shfaq HTML",undo:"Prish",redo:"Ribej",formatting:"Formatimi",p:"Paragraf",blockquote:"Citat",code:"Kodi",header:"Koka",bold:"Spikatur",italic:"Pjerret",strikethrough:"Vize ne mes",underline:"Nenvizo",strong:"I trashe",em:"I theksuar",del:"I fshire",superscript:"Indeks i sipërm",subscript:"Indeks i poshtem",unorderedList:"Liste e parenditur",orderedList:"Liste e renditur",insertImage:"Fut Foto",insertVideo:"Fut Video",link:"Link",createLink:"Krijo Link",unlink:"Hiq Link",justifyLeft:"Drejto Majtas",justifyCenter:"Drejto ne Qender",justifyRight:"Drejto Djathtas",justifyFull:"Drejto Vete",horizontalRule:"Vendos rregulloren horizontale",removeformat:"Hiq formatin",fullscreen:"Ekran i plotë",close:"Mbyll",submit:"Konfirmo",reset:"Anullo",required:"I detyrueshem",description:"Pershkrimi",title:"Titulli",text:"Tekst",target:"Objektivi",width:"Gjeresia"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/sv.min.js b/modules/editor/trumbowyg/langs/sv.min.js @@ -0,0 +1,12 @@ +/* =========================================================== + * sv.js + * Swedish translation for Trumbowyg + * http://www.tim-international.net + * =========================================================== + * Author : T. Almroth + * Github : https://github.com/timint + * + * Review : M Hagberg + * Github : https://github.com/pestbarn + */ +jQuery.trumbowyg.langs.sv={viewHTML:"Visa HTML",formatting:"Formatering",p:"Paragraf",blockquote:"Citat",code:"Kod",header:"Rubrik",bold:"Fet",italic:"Kursiv",strikethrough:"Genomstruken",underline:"Understruken",strong:"Fet",em:"Kursiv",del:"Rensa formatering",unorderedList:"Punktlista",orderedList:"Numrerad lista",insertImage:"Infoga bild",insertVideo:"Infoga video",link:"Länk",createLink:"Infoga länk",unlink:"Ta bort länk",justifyLeft:"Vänsterjustera",justifyCenter:"Centrera",justifyRight:"Högerjustera",justifyFull:"Marginaljustera",horizontalRule:"Horisontell linje",fullscreen:"Fullskärm",close:"Stäng",submit:"Bekräfta",reset:"Återställ",required:"Obligatorisk",description:"Beskrivning",title:"Titel",text:"Text"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/tr.min.js b/modules/editor/trumbowyg/langs/tr.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * tr.js + * Turkish translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Emrah Bilbay (munzur) + * Github : https://github.com/munzur + */ +jQuery.trumbowyg.langs.tr={viewHTML:"HTML Kodu",formatting:"Biçimlendirme",p:"Paragraf",blockquote:"Alıntı",code:"Kod",header:"Başlık",bold:"Kalın",italic:"İtalik",strikethrough:"Üzeri çizgili",underline:"Altı çizgili",strong:"Koyu",em:"Vurgulu",del:"Üzeri çizgili",unorderedList:"Simgeli liste",orderedList:"Numaralı liste",insertImage:"Resim yerleştir",insertVideo:"Video yerleştir",link:"Link",createLink:"Link yerleştir",unlink:"Linki sil",justifyLeft:"Sola hizala",justifyCenter:"Ortaya hizala",justifyRight:"Sağa hizala",justifyFull:"Yasla",horizontalRule:"Yatay satır ekle",fullscreen:"Tam ekran",close:"Kapat",submit:"Onayla",reset:"Sıfırla",required:"Gerekli",description:"Açıklama",title:"Başlık",text:"Metin"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/ua.min.js b/modules/editor/trumbowyg/langs/ua.min.js @@ -0,0 +1,8 @@ +/* =========================================================== + * ua.js + * Ukrainian translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Igor Buksha + */ +jQuery.trumbowyg.langs.ua={viewHTML:"Подивитись HTML",formatting:"Форматування",p:"Звичайний",blockquote:"Витяг",code:"Код",header:"Заголовок",bold:"Напівжирний",italic:"Курсив",strikethrough:"Закреслений",underline:"Підкреслений",strong:"Напівжирний",em:"Курсив",del:"Закреслений",unorderedList:"Звичайний список",orderedList:"Нумерований список",insertImage:"Вставити зображення",insertVideo:"Вставити відео",link:"Посилання",createLink:"Вставити посилання",unlink:"Видалити посилання",justifyLeft:"По лівому краю",justifyCenter:"В центрі",justifyRight:"По правому краю",justifyFull:"По ширині",horizontalRule:"Горизонтальна лінія",fullscreen:"На весь екран",close:"Закрити",submit:"Вставити",reset:"Скасувати",required:"Обов'язкове",description:"Опис",title:"Підказка",text:"Текст"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/vi.min.js b/modules/editor/trumbowyg/langs/vi.min.js @@ -0,0 +1,9 @@ +/* =========================================================== + * vi.js + * Vietnamese translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : heocoi + * Github: https://github.com/heocoi + */ +jQuery.trumbowyg.langs.vi={viewHTML:"Hiển thị HTML",formatting:"Định dạng",p:"Đoạn",blockquote:"Trích dẫn",code:"Code",header:"Đầu trang",bold:"In đậm",italic:"In nghiêng",strikethrough:"Gạch ngang",underline:"Gạch chân",strong:"In đậm",em:"In nghiêng",del:"Gạch ngang",unorderedList:"Danh sách không thứ tự",orderedList:"Danh sách có thứ tự",insertImage:"Chèn hình ảnh",insertVideo:"Chèn video",link:"Đường dẫn",createLink:"Tạo đường dẫn",unlink:"Hủy đường dẫn",justifyLeft:"Canh lề trái",justifyCenter:"Canh giữa",justifyRight:"Canh lề phải",justifyFull:"Canh đều",horizontalRule:"Thêm đường kẻ ngang",fullscreen:"Toàn màn hình",close:"Đóng",submit:"Đồng ý",reset:"Hủy bỏ",required:"Bắt buộc",description:"Mô tả",title:"Tiêu đề",text:"Nội dung"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/zh_cn.min.js b/modules/editor/trumbowyg/langs/zh_cn.min.js @@ -0,0 +1,11 @@ +/* =========================================================== + * zh_cn.js + * Simplified Chinese translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Liu Kai (akai) + * Twitter : @akai404 + * Github : https://github.com/akai + */ +// jshint camelcase:false +jQuery.trumbowyg.langs.zh_cn={viewHTML:"源代码",formatting:"格式",p:"段落",blockquote:"引用",code:"代码",header:"标题",bold:"加粗",italic:"斜体",strikethrough:"删除线",underline:"下划线",strong:"加粗",em:"斜体",del:"删除线",unorderedList:"无序列表",orderedList:"有序列表",insertImage:"插入图片",insertVideo:"插入视频",link:"超链接",createLink:"插入链接",unlink:"取消链接",justifyLeft:"居左对齐",justifyCenter:"居中对齐",justifyRight:"居右对齐",justifyFull:"两端对齐",horizontalRule:"插入分隔线",fullscreen:"全屏",close:"关闭",submit:"确定",reset:"取消",required:"必需的",description:"描述",title:"标题",text:"文字"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/langs/zh_tw.min.js b/modules/editor/trumbowyg/langs/zh_tw.min.js @@ -0,0 +1,11 @@ +/* =========================================================== + * zh_tw.js + * Traditional Chinese translation for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Peter Dave Hello (PeterDaveHello) + * Twitter : @PeterDaveHello + * Github : https://github.com/PeterDaveHello + */ +// jshint camelcase:false +jQuery.trumbowyg.langs.zh_tw={viewHTML:"原始碼",formatting:"格式",p:"段落",blockquote:"引用",code:"代碼",header:"標題",bold:"加粗",italic:"斜體",strikethrough:"刪除線",underline:"底線",strong:"加粗",em:"斜體",del:"刪除線",unorderedList:"無序列表",orderedList:"有序列表",insertImage:"插入圖片",insertVideo:"插入影片",link:"超連結",createLink:"插入連結",unlink:"取消連結",justifyLeft:"靠左對齊",justifyCenter:"置中對齊",justifyRight:"靠右對齊",justifyFull:"左右對齊",horizontalRule:"插入分隔線",fullscreen:"全螢幕",close:"關閉",submit:"確定",reset:"取消",required:"必需的",description:"描述",title:"標題",text:"文字"};+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/allowtagsfrompaste/trumbowyg.allowtagsfrompaste.js b/modules/editor/trumbowyg/plugins/allowtagsfrompaste/trumbowyg.allowtagsfrompaste.js @@ -0,0 +1,143 @@ +/* =========================================================== + * trumbowyg.allowTagsFromPaste.js v1.0.2 + * It cleans tags from pasted text, whilst allowing several specified tags + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Fathi Anshory (0x00000F5C) + * Twitter : @fscchannl + * Notes: + * - removeformatPasted must be set to FALSE since it was applied prior to pasteHandlers, or else it will be useless + * - It is most advisable to use along with the cleanpaste plugin, or else you'd end up with dirty markup + */ + +(function ($) { + 'use strict'; + + var defaultOptions = { + allowTagsFromPaste: [ + 'a', + 'abbr', + 'address', + 'b', + 'bdi', + 'bdo', + 'blockquote', + 'br', + 'cite', + 'code', + 'del', + 'dfn', + 'details', + 'em', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'hr', + 'i', + 'ins', + 'kbd', + 'mark', + 'meter', + 'pre', + 'progress', + 'q', + 'rp', + 'rt', + 'ruby', + 's', + 'samp', + 'small', + 'span', + 'strong', + 'sub', + 'summary', + 'sup', + 'time', + 'u', + 'var', + 'wbr', + 'img', + 'map', + 'area', + 'canvas', + 'figcaption', + 'figure', + 'picture', + 'audio', + 'source', + 'track', + 'video', + 'ul', + 'ol', + 'li', + 'dl', + 'dt', + 'dd', + 'table', + 'caption', + 'th', + 'tr', + 'td', + 'thead', + 'tbody', + 'tfoot', + 'col', + 'colgroup', + 'style', + 'div', + 'p', + 'form', + 'input', + 'textarea', + 'button', + 'select', + 'optgroup', + 'option', + 'label', + 'fieldset', + 'legend', + 'datalist', + 'keygen', + 'output', + 'iframe', + 'link', + 'nav', + 'header', + 'hgroup', + 'footer', + 'main', + 'section', + 'article', + 'aside', + 'dialog', + 'script', + 'noscript', + 'embed', + 'object', + 'param' + ] + }; + + $.extend(true, $.trumbowyg, { + plugins: { + allowTagsFromPaste: { + init: function (trumbowyg) { + trumbowyg.o.removeformatPasted = false; + trumbowyg.o.plugins.allowTagsFromPaste = trumbowyg.o.allowTagsFromPaste ? $(defaultOptions.allowTagsFromPaste).not(trumbowyg.o.allowTagsFromPaste).get() : []; + trumbowyg.pasteHandlers.push(function () { + setTimeout(function () { + var processNodes = trumbowyg.$ed.html(); + $.each(trumbowyg.o.plugins.allowTagsFromPaste, function (iterator, tagName) { + processNodes = processNodes.replace(new RegExp('<\\/?' + tagName + '(\\s[^>]*)?>', 'gi'), ''); + }); + trumbowyg.$ed.html(processNodes); + }, 0); + }); + } + } + } + }); +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/allowtagsfrompaste/trumbowyg.allowtagsfrompaste.min.js b/modules/editor/trumbowyg/plugins/allowtagsfrompaste/trumbowyg.allowtagsfrompaste.min.js @@ -0,0 +1 @@ +!function(e){"use strict";var t={allowTagsFromPaste:["a","abbr","address","b","bdi","bdo","blockquote","br","cite","code","del","dfn","details","em","h1","h2","h3","h4","h5","h6","hr","i","ins","kbd","mark","meter","pre","progress","q","rp","rt","ruby","s","samp","small","span","strong","sub","summary","sup","time","u","var","wbr","img","map","area","canvas","figcaption","figure","picture","audio","source","track","video","ul","ol","li","dl","dt","dd","table","caption","th","tr","td","thead","tbody","tfoot","col","colgroup","style","div","p","form","input","textarea","button","select","optgroup","option","label","fieldset","legend","datalist","keygen","output","iframe","link","nav","header","hgroup","footer","main","section","article","aside","dialog","script","noscript","embed","object","param"]};e.extend(!0,e.trumbowyg,{plugins:{allowTagsFromPaste:{init:function(a){a.o.removeformatPasted=!1,a.o.plugins.allowTagsFromPaste=a.o.allowTagsFromPaste?e(t.allowTagsFromPaste).not(a.o.allowTagsFromPaste).get():[],a.pasteHandlers.push(function(){setTimeout(function(){var t=a.$ed.html();e.each(a.o.plugins.allowTagsFromPaste,function(e,a){t=t.replace(new RegExp("<\\/?"+a+"(\\s[^>]*)?>","gi"),"")}),a.$ed.html(t)},0)})}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/base64/trumbowyg.base64.js b/modules/editor/trumbowyg/plugins/base64/trumbowyg.base64.js @@ -0,0 +1,129 @@ +/* =========================================================== + * trumbowyg.base64.js v1.0 + * Base64 plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Cyril Biencourt (lizardK) + */ + +(function ($) { + 'use strict'; + + var isSupported = function () { + return typeof FileReader !== 'undefined'; + }; + + var isValidImage = function (type) { + return /^data:image\/[a-z]?/i.test(type); + }; + + $.extend(true, $.trumbowyg, { + langs: { + // jshint camelcase:false + en: { + base64: 'Image as base64', + file: 'File', + errFileReaderNotSupported: 'FileReader is not supported by your browser.', + errInvalidImage: 'Invalid image file.' + }, + fr: { + base64: 'Image en base64', + file: 'Fichier' + }, + cs: { + base64: 'Vložit obrázek', + file: 'Soubor' + }, + zh_cn: { + base64: '图片(Base64编码)', + file: '文件' + }, + nl: { + base64: 'Afbeelding inline', + file: 'Bestand', + errFileReaderNotSupported: 'Uw browser ondersteunt deze functionaliteit niet.', + errInvalidImage: 'De gekozen afbeelding is ongeldig.' + }, + ru: { + base64: 'Изображение как код в base64', + file: 'Файл', + errFileReaderNotSupported: 'FileReader не поддерживается вашим браузером.', + errInvalidImage: 'Недопустимый файл изображения.' + }, + ja: { + base64: '画像 (Base64形式)', + file: 'ファイル', + errFileReaderNotSupported: 'あなたのブラウザーはFileReaderをサポートしていません', + errInvalidImage: '画像形式が正しくありません' + }, + tr: { + base64: 'Base64 olarak resim', + file: 'Dosya', + errFileReaderNotSupported: 'FileReader tarayıcınız tarafından desteklenmiyor.', + errInvalidImage: 'Geçersiz resim dosyası.' + } + }, + // jshint camelcase:true + + plugins: { + base64: { + shouldInit: isSupported, + init: function (trumbowyg) { + var btnDef = { + isSupported: isSupported, + fn: function () { + trumbowyg.saveRange(); + + var file; + var $modal = trumbowyg.openModalInsert( + // Title + trumbowyg.lang.base64, + + // Fields + { + file: { + type: 'file', + required: true, + attributes: { + accept: 'image/*' + } + }, + alt: { + label: 'description', + value: trumbowyg.getRangeText() + } + }, + + // Callback + function (values) { + var fReader = new FileReader(); + + fReader.onloadend = function (e) { + if (isValidImage(e.target.result)) { + trumbowyg.execCmd('insertImage', fReader.result); + $(['img[src="', fReader.result, '"]:not([alt])'].join(''), trumbowyg.$box).attr('alt', values.alt); + trumbowyg.closeModal(); + } else { + trumbowyg.addErrorOnModalField( + $('input[type=file]', $modal), + trumbowyg.lang.errInvalidImage + ); + } + }; + + fReader.readAsDataURL(file); + } + ); + + $('input[type=file]').on('change', function (e) { + file = e.target.files[0]; + }); + } + }; + + trumbowyg.addBtnDef('base64', btnDef); + } + } + } + }); +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/base64/trumbowyg.base64.min.js b/modules/editor/trumbowyg/plugins/base64/trumbowyg.base64.min.js @@ -0,0 +1 @@ +!function(e){"use strict";var a=function(){return"undefined"!=typeof FileReader},r=function(e){return/^data:image\/[a-z]?/i.test(e)};e.extend(!0,e.trumbowyg,{langs:{en:{base64:"Image as base64",file:"File",errFileReaderNotSupported:"FileReader is not supported by your browser.",errInvalidImage:"Invalid image file."},fr:{base64:"Image en base64",file:"Fichier"},cs:{base64:"Vložit obrázek",file:"Soubor"},zh_cn:{base64:"图片(Base64编码)",file:"文件"},nl:{base64:"Afbeelding inline",file:"Bestand",errFileReaderNotSupported:"Uw browser ondersteunt deze functionaliteit niet.",errInvalidImage:"De gekozen afbeelding is ongeldig."},ru:{base64:"Изображение как код в base64",file:"Файл",errFileReaderNotSupported:"FileReader не поддерживается вашим браузером.",errInvalidImage:"Недопустимый файл изображения."},ja:{base64:"画像 (Base64形式)",file:"ファイル",errFileReaderNotSupported:"あなたのブラウザーはFileReaderをサポートしていません",errInvalidImage:"画像形式が正しくありません"},tr:{base64:"Base64 olarak resim",file:"Dosya",errFileReaderNotSupported:"FileReader tarayıcınız tarafından desteklenmiyor.",errInvalidImage:"Geçersiz resim dosyası."}},plugins:{base64:{shouldInit:a,init:function(i){var t={isSupported:a,fn:function(){i.saveRange();var a,t=i.openModalInsert(i.lang.base64,{file:{type:"file",required:!0,attributes:{accept:"image/*"}},alt:{label:"description",value:i.getRangeText()}},function(n){var l=new FileReader;l.onloadend=function(a){r(a.target.result)?(i.execCmd("insertImage",l.result),e(['img[src="',l.result,'"]:not([alt])'].join(""),i.$box).attr("alt",n.alt),i.closeModal()):i.addErrorOnModalField(e("input[type=file]",t),i.lang.errInvalidImage)},l.readAsDataURL(a)});e("input[type=file]").on("change",function(e){a=e.target.files[0]})}};i.addBtnDef("base64",t)}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.js b/modules/editor/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.js @@ -0,0 +1,112 @@ +/* =========================================================== + * trumbowyg.cleanpaste.js v1.0 + * Font Clean paste plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Authors : Eric Radin + * Todd Graham (slackwalker) + * + * This plugin will perform a "cleaning" on any paste, in particular + * it will clean pasted content of microsoft word document tags and classes. + */ + +(function ($) { + 'use strict'; + + function checkValidTags(snippet) { + var theString = snippet; + + // Replace uppercase element names with lowercase + theString = theString.replace(/<[^> ]*/g, function (match) { + return match.toLowerCase(); + }); + + // Replace uppercase attribute names with lowercase + theString = theString.replace(/<[^>]*>/g, function (match) { + match = match.replace(/ [^=]+=/g, function (match2) { + return match2.toLowerCase(); + }); + return match; + }); + + // Put quotes around unquoted attributes + theString = theString.replace(/<[^>]*>/g, function (match) { + match = match.replace(/( [^=]+=)([^"][^ >]*)/g, '$1\"$2\"'); + return match; + }); + + return theString; + } + + function cleanIt(html) { + // first make sure all tags and attributes are made valid + html = checkValidTags(html); + + // Replace opening bold tags with strong + html = html.replace(/<b(\s+|>)/g, '<strong$1'); + // Replace closing bold tags with closing strong + html = html.replace(/<\/b(\s+|>)/g, '</strong$1'); + + // Replace italic tags with em + html = html.replace(/<i(\s+|>)/g, '<em$1'); + // Replace closing italic tags with closing em + html = html.replace(/<\/i(\s+|>)/g, '</em$1'); + + // strip out comments -cgCraft + html = html.replace(/<!(?:--[\s\S]*?--\s*)?>\s*/g, ''); + + // strip out &nbsp; -cgCraft + html = html.replace(/&nbsp;/gi, ' '); + // strip out extra spaces -cgCraft + html = html.replace(/ <\//gi, '</'); + + while (html.indexOf(' ') !== -1) { + html = html.split(' ').join(' '); + } + + // strip &nbsp; -cgCraft + html = html.replace(/^\s*|\s*$/g, ''); + + // Strip out unaccepted attributes + html = html.replace(/<[^>]*>/g, function (match) { + match = match.replace(/ ([^=]+)="[^"]*"/g, function (match2, attributeName) { + if (['alt', 'href', 'src', 'title'].indexOf(attributeName) !== -1) { + return match2; + } + return ''; + }); + return match; + }); + + // Final cleanout for MS Word crud + html = html.replace(/<\?xml[^>]*>/g, ''); + html = html.replace(/<[^ >]+:[^>]*>/g, ''); + html = html.replace(/<\/[^ >]+:[^>]*>/g, ''); + + // remove unwanted tags + html = html.replace(/<(div|span|style|meta|link).*?>/gi, ''); + + return html; + } + + // clean editor + // this will clean the inserted contents + // it does a compare, before and after paste to determine the + // pasted contents + $.extend(true, $.trumbowyg, { + plugins: { + cleanPaste: { + init: function (trumbowyg) { + trumbowyg.pasteHandlers.push(function () { + try { + trumbowyg.$ed.html(cleanIt(trumbowyg.$ed.html())); + } catch (c) { + } + }); + } + } + } + }); +})(jQuery); + + diff --git a/modules/editor/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.min.js b/modules/editor/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.min.js @@ -0,0 +1 @@ +!function(e){"use strict";function r(e){var r=e;return r=r.replace(/<[^> ]*/g,function(e){return e.toLowerCase()}),r=r.replace(/<[^>]*>/g,function(e){return e=e.replace(/ [^=]+=/g,function(e){return e.toLowerCase()})}),r=r.replace(/<[^>]*>/g,function(e){return e=e.replace(/( [^=]+=)([^"][^ >]*)/g,'$1"$2"')})}function n(e){for(e=r(e),e=e.replace(/<b(\s+|>)/g,"<strong$1"),e=e.replace(/<\/b(\s+|>)/g,"</strong$1"),e=e.replace(/<i(\s+|>)/g,"<em$1"),e=e.replace(/<\/i(\s+|>)/g,"</em$1"),e=e.replace(/<!(?:--[\s\S]*?--\s*)?>\s*/g,""),e=e.replace(/&nbsp;/gi," "),e=e.replace(/ <\//gi,"</");e.indexOf(" ")!==-1;)e=e.split(" ").join(" ");return e=e.replace(/^\s*|\s*$/g,""),e=e.replace(/<[^>]*>/g,function(e){return e=e.replace(/ ([^=]+)="[^"]*"/g,function(e,r){return["alt","href","src","title"].indexOf(r)!==-1?e:""})}),e=e.replace(/<\?xml[^>]*>/g,""),e=e.replace(/<[^ >]+:[^>]*>/g,""),e=e.replace(/<\/[^ >]+:[^>]*>/g,""),e=e.replace(/<(div|span|style|meta|link).*?>/gi,"")}e.extend(!0,e.trumbowyg,{plugins:{cleanPaste:{init:function(e){e.pasteHandlers.push(function(){try{e.$ed.html(n(e.$ed.html()))}catch(r){}})}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/colors/trumbowyg.colors.js b/modules/editor/trumbowyg/plugins/colors/trumbowyg.colors.js @@ -0,0 +1,185 @@ +/* =========================================================== + * trumbowyg.colors.js v1.2 + * Colors picker plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +(function ($) { + 'use strict'; + + $.extend(true, $.trumbowyg, { + langs: { + // jshint camelcase:false + cs: { + foreColor: 'Barva textu', + backColor: 'Barva pozadí' + }, + en: { + foreColor: 'Text color', + backColor: 'Background color' + }, + fr: { + foreColor: 'Couleur du texte', + backColor: 'Couleur de fond' + }, + nl: { + foreColor: 'Tekstkleur', + backColor: 'Achtergrondkleur' + }, + sk: { + foreColor: 'Farba textu', + backColor: 'Farba pozadia' + }, + zh_cn: { + foreColor: '文字颜色', + backColor: '背景颜色' + }, + ru: { + foreColor: 'Цвет текста', + backColor: 'Цвет выделения текста' + }, + ja: { + foreColor: '文字色', + backColor: '背景色' + }, + tr: { + foreColor: 'Yazı rengi', + backColor: 'Arkaplan rengi' + } + } + }); + + // jshint camelcase:true + + + function hex(x) { + return ('0' + parseInt(x).toString(16)).slice(-2); + } + + function colorToHex(rgb) { + if (rgb.search('rgb') === -1) { + return rgb.replace('#', ''); + } else if (rgb === 'rgba(0, 0, 0, 0)') { + return 'transparent'; + } else { + rgb = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/); + return hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]); + } + } + + function colorTagHandler(element, trumbowyg) { + var tags = []; + + if (!element.style) { + return tags; + } + + // background color + if (element.style.backgroundColor !== '') { + var backColor = colorToHex(element.style.backgroundColor); + if (trumbowyg.o.plugins.colors.colorList.indexOf(backColor) >= 0) { + tags.push('backColor' + backColor); + } else { + tags.push('backColorFree'); + } + } + + // text color + var foreColor; + if (element.style.color !== '') { + foreColor = colorToHex(element.style.color); + } else if (element.hasAttribute('color')) { + foreColor = colorToHex(element.getAttribute('color')); + } + if (foreColor) { + if (trumbowyg.o.plugins.colors.colorList.indexOf(foreColor) >= 0) { + tags.push('foreColor' + foreColor); + } else { + tags.push('foreColorFree'); + } + } + + return tags; + } + + var defaultOptions = { + colorList: ['ffffff', '000000', 'eeece1', '1f497d', '4f81bd', 'c0504d', '9bbb59', '8064a2', '4bacc6', 'f79646', 'ffff00', 'f2f2f2', '7f7f7f', 'ddd9c3', 'c6d9f0', 'dbe5f1', 'f2dcdb', 'ebf1dd', 'e5e0ec', 'dbeef3', 'fdeada', 'fff2ca', 'd8d8d8', '595959', 'c4bd97', '8db3e2', 'b8cce4', 'e5b9b7', 'd7e3bc', 'ccc1d9', 'b7dde8', 'fbd5b5', 'ffe694', 'bfbfbf', '3f3f3f', '938953', '548dd4', '95b3d7', 'd99694', 'c3d69b', 'b2a2c7', 'b7dde8', 'fac08f', 'f2c314', 'a5a5a5', '262626', '494429', '17365d', '366092', '953734', '76923c', '5f497a', '92cddc', 'e36c09', 'c09100', '7f7f7f', '0c0c0c', '1d1b10', '0f243e', '244061', '632423', '4f6128', '3f3151', '31859b', '974806', '7f6000'] + }; + + // Add all colors in two dropdowns + $.extend(true, $.trumbowyg, { + plugins: { + color: { + init: function (trumbowyg) { + trumbowyg.o.plugins.colors = trumbowyg.o.plugins.colors || defaultOptions; + var foreColorBtnDef = { + dropdown: buildDropdown('foreColor', trumbowyg) + }, + backColorBtnDef = { + dropdown: buildDropdown('backColor', trumbowyg) + }; + + trumbowyg.addBtnDef('foreColor', foreColorBtnDef); + trumbowyg.addBtnDef('backColor', backColorBtnDef); + }, + tagHandler: colorTagHandler + } + } + }); + + function buildDropdown(fn, trumbowyg) { + var dropdown = []; + + $.each(trumbowyg.o.plugins.colors.colorList, function (i, color) { + var btn = fn + color, + btnDef = { + fn: fn, + forceCss: true, + param: '#' + color, + style: 'background-color: #' + color + ';' + }; + trumbowyg.addBtnDef(btn, btnDef); + dropdown.push(btn); + }); + + var removeColorButtonName = fn + 'Remove', + removeColorBtnDef = { + fn: 'removeFormat', + param: fn, + style: 'background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAG0lEQVQIW2NkQAAfEJMRmwBYhoGBYQtMBYoAADziAp0jtJTgAAAAAElFTkSuQmCC);' + }; + trumbowyg.addBtnDef(removeColorButtonName, removeColorBtnDef); + dropdown.push(removeColorButtonName); + + // add free color btn + var freeColorButtonName = fn + 'Free', + freeColorBtnDef = { + fn: function () { + trumbowyg.openModalInsert(trumbowyg.lang[fn], + { + color: { + label: fn, + value: '#FFFFFF' + } + }, + // callback + function (values) { + trumbowyg.execCmd(fn, values.color); + return true; + } + ); + }, + text: '#', + // style adjust for displaying the text + style: 'text-indent: 0;line-height: 20px;padding: 0 5px;' + }; + trumbowyg.addBtnDef(freeColorButtonName, freeColorBtnDef); + dropdown.push(freeColorButtonName); + + return dropdown; + } +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/colors/trumbowyg.colors.min.js b/modules/editor/trumbowyg/plugins/colors/trumbowyg.colors.min.js @@ -0,0 +1 @@ +!function(o){"use strict";function r(o){return("0"+parseInt(o).toString(16)).slice(-2)}function e(o){return o.search("rgb")===-1?o.replace("#",""):"rgba(0, 0, 0, 0)"===o?"transparent":(o=o.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/),r(o[1])+r(o[2])+r(o[3]))}function a(o,r){var a=[];if(!o.style)return a;if(""!==o.style.backgroundColor){var f=e(o.style.backgroundColor);r.o.plugins.colors.colorList.indexOf(f)>=0?a.push("backColor"+f):a.push("backColorFree")}var c;return""!==o.style.color?c=e(o.style.color):o.hasAttribute("color")&&(c=e(o.getAttribute("color"))),c&&(r.o.plugins.colors.colorList.indexOf(c)>=0?a.push("foreColor"+c):a.push("foreColorFree")),a}function f(r,e){var a=[];o.each(e.o.plugins.colors.colorList,function(o,f){var c=r+f,l={fn:r,forceCss:!0,param:"#"+f,style:"background-color: #"+f+";"};e.addBtnDef(c,l),a.push(c)});var f=r+"Remove",c={fn:"removeFormat",param:r,style:"background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAG0lEQVQIW2NkQAAfEJMRmwBYhoGBYQtMBYoAADziAp0jtJTgAAAAAElFTkSuQmCC);"};e.addBtnDef(f,c),a.push(f);var l=r+"Free",d={fn:function(){e.openModalInsert(e.lang[r],{color:{label:r,value:"#FFFFFF"}},function(o){return e.execCmd(r,o.color),!0})},text:"#",style:"text-indent: 0;line-height: 20px;padding: 0 5px;"};return e.addBtnDef(l,d),a.push(l),a}o.extend(!0,o.trumbowyg,{langs:{cs:{foreColor:"Barva textu",backColor:"Barva pozadí"},en:{foreColor:"Text color",backColor:"Background color"},fr:{foreColor:"Couleur du texte",backColor:"Couleur de fond"},nl:{foreColor:"Tekstkleur",backColor:"Achtergrondkleur"},sk:{foreColor:"Farba textu",backColor:"Farba pozadia"},zh_cn:{foreColor:"文字颜色",backColor:"背景颜色"},ru:{foreColor:"Цвет текста",backColor:"Цвет выделения текста"},ja:{foreColor:"文字色",backColor:"背景色"},tr:{foreColor:"Yazı rengi",backColor:"Arkaplan rengi"}}});var c={colorList:["ffffff","000000","eeece1","1f497d","4f81bd","c0504d","9bbb59","8064a2","4bacc6","f79646","ffff00","f2f2f2","7f7f7f","ddd9c3","c6d9f0","dbe5f1","f2dcdb","ebf1dd","e5e0ec","dbeef3","fdeada","fff2ca","d8d8d8","595959","c4bd97","8db3e2","b8cce4","e5b9b7","d7e3bc","ccc1d9","b7dde8","fbd5b5","ffe694","bfbfbf","3f3f3f","938953","548dd4","95b3d7","d99694","c3d69b","b2a2c7","b7dde8","fac08f","f2c314","a5a5a5","262626","494429","17365d","366092","953734","76923c","5f497a","92cddc","e36c09","c09100","7f7f7f","0c0c0c","1d1b10","0f243e","244061","632423","4f6128","3f3151","31859b","974806","7f6000"]};o.extend(!0,o.trumbowyg,{plugins:{color:{init:function(o){o.o.plugins.colors=o.o.plugins.colors||c;var r={dropdown:f("foreColor",o)},e={dropdown:f("backColor",o)};o.addBtnDef("foreColor",r),o.addBtnDef("backColor",e)},tagHandler:a}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/colors/ui/sass/trumbowyg.colors.scss b/modules/editor/trumbowyg/plugins/colors/ui/sass/trumbowyg.colors.scss @@ -0,0 +1,49 @@ +/** + * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor + * Default stylesheet for Trumbowyg editor plugin + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +.trumbowyg-dropdown-foreColor, +.trumbowyg-dropdown-backColor { + width: 276px; + padding: 7px 5px; + + svg { + display: none !important; + } + + button { + display: block; + position: relative; + float: left; + text-indent: -9999px; + height: 20px; + width: 20px; + border: 1px solid #333; + padding: 0; + margin: 2px; + + &:hover, + &:focus { + &::after { + content: " "; + display: block; + position: absolute; + top: -5px; + left: -5px; + height: 27px; + width: 27px; + background: inherit; + border: 1px solid #FFF; + box-shadow: #000 0 0 2px; + z-index: 10; + } + } + } +}+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/colors/ui/trumbowyg.colors.css b/modules/editor/trumbowyg/plugins/colors/ui/trumbowyg.colors.css @@ -0,0 +1,43 @@ +/** + * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor + * Trumbowyg plugin stylesheet + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +.trumbowyg-dropdown-foreColor, +.trumbowyg-dropdown-backColor { + width: 276px; + padding: 7px 5px; } + .trumbowyg-dropdown-foreColor svg, + .trumbowyg-dropdown-backColor svg { + display: none !important; } + .trumbowyg-dropdown-foreColor button, + .trumbowyg-dropdown-backColor button { + display: block; + position: relative; + float: left; + text-indent: -9999px; + height: 20px; + width: 20px; + border: 1px solid #333; + padding: 0; + margin: 2px; } + .trumbowyg-dropdown-foreColor button:hover::after, .trumbowyg-dropdown-foreColor button:focus::after, + .trumbowyg-dropdown-backColor button:hover::after, + .trumbowyg-dropdown-backColor button:focus::after { + content: " "; + display: block; + position: absolute; + top: -5px; + left: -5px; + height: 27px; + width: 27px; + background: inherit; + border: 1px solid #FFF; + box-shadow: #000 0 0 2px; + z-index: 10; } diff --git a/modules/editor/trumbowyg/plugins/colors/ui/trumbowyg.colors.min.css b/modules/editor/trumbowyg/plugins/colors/ui/trumbowyg.colors.min.css @@ -0,0 +1,2 @@ +/** Trumbowyg v2.10.0 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */ +.trumbowyg-dropdown-backColor,.trumbowyg-dropdown-foreColor{width:276px;padding:7px 5px}.trumbowyg-dropdown-backColor svg,.trumbowyg-dropdown-foreColor svg{display:none!important}.trumbowyg-dropdown-backColor button,.trumbowyg-dropdown-foreColor button{display:block;position:relative;float:left;text-indent:-9999px;height:20px;width:20px;border:1px solid #333;padding:0;margin:2px}.trumbowyg-dropdown-backColor button:focus::after,.trumbowyg-dropdown-backColor button:hover::after,.trumbowyg-dropdown-foreColor button:focus::after,.trumbowyg-dropdown-foreColor button:hover::after{content:" ";display:block;position:absolute;top:-5px;left:-5px;height:27px;width:27px;background:inherit;border:1px solid #FFF;box-shadow:#000 0 0 2px;z-index:10}+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/emoji/trumbowyg.emoji.js b/modules/editor/trumbowyg/plugins/emoji/trumbowyg.emoji.js @@ -0,0 +1,968 @@ +/* =========================================================== + * trumbowyg.emoji.js v0.1 + * Emoji picker plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Nicolas Pion + * Twitter : @nicolas_pion + */ + +(function ($) { + 'use strict'; + + var defaultOptions = { + emojiList: [ + ':bowtie:', + ':smile:', + ':laughing:', + ':blush:', + ':smiley:', + ':relaxed:', + ':smirk:', + ':heart_eyes:', + ':kissing_heart:', + ':kissing_closed_eyes:', + ':flushed:', + ':relieved:', + ':satisfied:', + ':grin:', + ':wink:', + ':stuck_out_tongue_winking_eye:', + ':stuck_out_tongue_closed_eyes:', + ':grinning:', + ':kissing:', + ':kissing_smiling_eyes:', + ':stuck_out_tongue:', + ':sleeping:', + ':worried:', + ':frowning:', + ':anguished:', + ':open_mouth:', + ':grimacing:', + ':confused:', + ':hushed:', + ':expressionless:', + ':unamused:', + ':sweat_smile:', + ':sweat:', + ':disappointed_relieved:', + ':weary:', + ':pensive:', + ':disappointed:', + ':confounded:', + ':fearful:', + ':cold_sweat:', + ':persevere:', + ':cry:', + ':sob:', + ':joy:', + ':astonished:', + ':scream:', + ':neckbeard:', + ':tired_face:', + ':angry:', + ':rage:', + ':triumph:', + ':sleepy:', + ':yum:', + ':mask:', + ':sunglasses:', + ':dizzy_face:', + ':imp:', + ':smiling_imp:', + ':neutral_face:', + ':no_mouth:', + ':innocent:', + ':alien:', + ':yellow_heart:', + ':blue_heart:', + ':purple_heart:', + ':heart:', + ':green_heart:', + ':broken_heart:', + ':heartbeat:', + ':heartpulse:', + ':two_hearts:', + ':revolving_hearts:', + ':cupid:', + ':sparkling_heart:', + ':sparkles:', + ':star:', + ':star2:', + ':dizzy:', + ':boom:', + ':collision:', + ':anger:', + ':exclamation:', + ':question:', + ':grey_exclamation:', + ':grey_question:', + ':zzz:', + ':dash:', + ':sweat_drops:', + ':notes:', + ':musical_note:', + ':fire:', + ':hankey:', + ':poop:', + ':shit:', + ':+1:', + ':thumbsup:', + ':-1:', + ':thumbsdown:', + ':ok_hand:', + ':punch:', + ':facepunch:', + ':fist:', + ':v:', + ':wave:', + ':hand:', + ':raised_hand:', + ':open_hands:', + ':point_up:', + ':point_down:', + ':point_left:', + ':point_right:', + ':raised_hands:', + ':pray:', + ':point_up_2:', + ':clap:', + ':muscle:', + ':metal:', + ':fu:', + ':runner:', + ':running:', + ':couple:', + ':family:', + ':two_men_holding_hands:', + ':two_women_holding_hands:', + ':dancer:', + ':dancers:', + ':ok_woman:', + ':no_good:', + ':information_desk_person:', + ':raising_hand:', + ':bride_with_veil:', + ':person_with_pouting_face:', + ':person_frowning:', + ':bow:', + ':couplekiss:', + ':couple_with_heart:', + ':massage:', + ':haircut:', + ':nail_care:', + ':boy:', + ':girl:', + ':woman:', + ':man:', + ':baby:', + ':older_woman:', + ':older_man:', + ':person_with_blond_hair:', + ':man_with_gua_pi_mao:', + ':man_with_turban:', + ':construction_worker:', + ':cop:', + ':angel:', + ':princess:', + ':smiley_cat:', + ':smile_cat:', + ':heart_eyes_cat:', + ':kissing_cat:', + ':smirk_cat:', + ':scream_cat:', + ':crying_cat_face:', + ':joy_cat:', + ':pouting_cat:', + ':japanese_ogre:', + ':japanese_goblin:', + ':see_no_evil:', + ':hear_no_evil:', + ':speak_no_evil:', + ':guardsman:', + ':skull:', + ':feet:', + ':lips:', + ':kiss:', + ':droplet:', + ':ear:', + ':eyes:', + ':nose:', + ':tongue:', + ':love_letter:', + ':bust_in_silhouette:', + ':busts_in_silhouette:', + ':speech_balloon:', + ':thought_balloon:', + ':feelsgood:', + ':finnadie:', + ':goberserk:', + ':godmode:', + ':hurtrealbad:', + ':rage1:', + ':rage2:', + ':rage3:', + ':rage4:', + ':suspect:', + ':trollface:', + ':sunny:', + ':umbrella:', + ':cloud:', + ':snowflake:', + ':snowman:', + ':zap:', + ':cyclone:', + ':foggy:', + ':ocean:', + ':cat:', + ':dog:', + ':mouse:', + ':hamster:', + ':rabbit:', + ':wolf:', + ':frog:', + ':tiger:', + ':koala:', + ':bear:', + ':pig:', + ':pig_nose:', + ':cow:', + ':boar:', + ':monkey_face:', + ':monkey:', + ':horse:', + ':racehorse:', + ':camel:', + ':sheep:', + ':elephant:', + ':panda_face:', + ':snake:', + ':bird:', + ':baby_chick:', + ':hatched_chick:', + ':hatching_chick:', + ':chicken:', + ':penguin:', + ':turtle:', + ':bug:', + ':honeybee:', + ':ant:', + ':beetle:', + ':snail:', + ':octopus:', + ':tropical_fish:', + ':fish:', + ':whale:', + ':whale2:', + ':dolphin:', + ':cow2:', + ':ram:', + ':rat:', + ':water_buffalo:', + ':tiger2:', + ':rabbit2:', + ':dragon:', + ':goat:', + ':rooster:', + ':dog2:', + ':pig2:', + ':mouse2:', + ':ox:', + ':dragon_face:', + ':blowfish:', + ':crocodile:', + ':dromedary_camel:', + ':leopard:', + ':cat2:', + ':poodle:', + ':paw_prints:', + ':bouquet:', + ':cherry_blossom:', + ':tulip:', + ':four_leaf_clover:', + ':rose:', + ':sunflower:', + ':hibiscus:', + ':maple_leaf:', + ':leaves:', + ':fallen_leaf:', + ':herb:', + ':mushroom:', + ':cactus:', + ':palm_tree:', + ':evergreen_tree:', + ':deciduous_tree:', + ':chestnut:', + ':seedling:', + ':blossom:', + ':ear_of_rice:', + ':shell:', + ':globe_with_meridians:', + ':sun_with_face:', + ':full_moon_with_face:', + ':new_moon_with_face:', + ':new_moon:', + ':waxing_crescent_moon:', + ':first_quarter_moon:', + ':waxing_gibbous_moon:', + ':full_moon:', + ':waning_gibbous_moon:', + ':last_quarter_moon:', + ':waning_crescent_moon:', + ':last_quarter_moon_with_face:', + ':first_quarter_moon_with_face:', + ':crescent_moon:', + ':earth_africa:', + ':earth_americas:', + ':earth_asia:', + ':volcano:', + ':milky_way:', + ':partly_sunny:', + ':octocat:', + ':squirrel:', + ':bamboo:', + ':gift_heart:', + ':dolls:', + ':school_satchel:', + ':mortar_board:', + ':flags:', + ':fireworks:', + ':sparkler:', + ':wind_chime:', + ':rice_scene:', + ':jack_o_lantern:', + ':ghost:', + ':santa:', + ':christmas_tree:', + ':gift:', + ':bell:', + ':no_bell:', + ':tanabata_tree:', + ':tada:', + ':confetti_ball:', + ':balloon:', + ':crystal_ball:', + ':cd:', + ':dvd:', + ':floppy_disk:', + ':camera:', + ':video_camera:', + ':movie_camera:', + ':computer:', + ':tv:', + ':iphone:', + ':phone:', + ':telephone:', + ':telephone_receiver:', + ':pager:', + ':fax:', + ':minidisc:', + ':vhs:', + ':sound:', + ':speaker:', + ':mute:', + ':loudspeaker:', + ':mega:', + ':hourglass:', + ':hourglass_flowing_sand:', + ':alarm_clock:', + ':watch:', + ':radio:', + ':satellite:', + ':loop:', + ':mag:', + ':mag_right:', + ':unlock:', + ':lock:', + ':lock_with_ink_pen:', + ':closed_lock_with_key:', + ':key:', + ':bulb:', + ':flashlight:', + ':high_brightness:', + ':low_brightness:', + ':electric_plug:', + ':battery:', + ':calling:', + ':email:', + ':mailbox:', + ':postbox:', + ':bath:', + ':bathtub:', + ':shower:', + ':toilet:', + ':wrench:', + ':nut_and_bolt:', + ':hammer:', + ':seat:', + ':moneybag:', + ':yen:', + ':dollar:', + ':pound:', + ':euro:', + ':credit_card:', + ':money_with_wings:', + ':e-mail:', + ':inbox_tray:', + ':outbox_tray:', + ':envelope:', + ':incoming_envelope:', + ':postal_horn:', + ':mailbox_closed:', + ':mailbox_with_mail:', + ':mailbox_with_no_mail:', + ':package:', + ':door:', + ':smoking:', + ':bomb:', + ':gun:', + ':hocho:', + ':pill:', + ':syringe:', + ':page_facing_up:', + ':page_with_curl:', + ':bookmark_tabs:', + ':bar_chart:', + ':chart_with_upwards_trend:', + ':chart_with_downwards_trend:', + ':scroll:', + ':clipboard:', + ':calendar:', + ':date:', + ':card_index:', + ':file_folder:', + ':open_file_folder:', + ':scissors:', + ':pushpin:', + ':paperclip:', + ':black_nib:', + ':pencil2:', + ':straight_ruler:', + ':triangular_ruler:', + ':closed_book:', + ':green_book:', + ':blue_book:', + ':orange_book:', + ':notebook:', + ':notebook_with_decorative_cover:', + ':ledger:', + ':books:', + ':bookmark:', + ':name_badge:', + ':microscope:', + ':telescope:', + ':newspaper:', + ':football:', + ':basketball:', + ':soccer:', + ':baseball:', + ':tennis:', + ':8ball:', + ':rugby_football:', + ':bowling:', + ':golf:', + ':mountain_bicyclist:', + ':bicyclist:', + ':horse_racing:', + ':snowboarder:', + ':swimmer:', + ':surfer:', + ':ski:', + ':spades:', + ':hearts:', + ':clubs:', + ':diamonds:', + ':gem:', + ':ring:', + ':trophy:', + ':musical_score:', + ':musical_keyboard:', + ':violin:', + ':space_invader:', + ':video_game:', + ':black_joker:', + ':flower_playing_cards:', + ':game_die:', + ':dart:', + ':mahjong:', + ':clapper:', + ':memo:', + ':pencil:', + ':book:', + ':art:', + ':microphone:', + ':headphones:', + ':trumpet:', + ':saxophone:', + ':guitar:', + ':shoe:', + ':sandal:', + ':high_heel:', + ':lipstick:', + ':boot:', + ':shirt:', + ':tshirt:', + ':necktie:', + ':womans_clothes:', + ':dress:', + ':running_shirt_with_sash:', + ':jeans:', + ':kimono:', + ':bikini:', + ':ribbon:', + ':tophat:', + ':crown:', + ':womans_hat:', + ':mans_shoe:', + ':closed_umbrella:', + ':briefcase:', + ':handbag:', + ':pouch:', + ':purse:', + ':eyeglasses:', + ':fishing_pole_and_fish:', + ':coffee:', + ':tea:', + ':sake:', + ':baby_bottle:', + ':beer:', + ':beers:', + ':cocktail:', + ':tropical_drink:', + ':wine_glass:', + ':fork_and_knife:', + ':pizza:', + ':hamburger:', + ':fries:', + ':poultry_leg:', + ':meat_on_bone:', + ':spaghetti:', + ':curry:', + ':fried_shrimp:', + ':bento:', + ':sushi:', + ':fish_cake:', + ':rice_ball:', + ':rice_cracker:', + ':rice:', + ':ramen:', + ':stew:', + ':oden:', + ':dango:', + ':egg:', + ':bread:', + ':doughnut:', + ':custard:', + ':icecream:', + ':ice_cream:', + ':shaved_ice:', + ':birthday:', + ':cake:', + ':cookie:', + ':chocolate_bar:', + ':candy:', + ':lollipop:', + ':honey_pot:', + ':apple:', + ':green_apple:', + ':tangerine:', + ':lemon:', + ':cherries:', + ':grapes:', + ':watermelon:', + ':strawberry:', + ':peach:', + ':melon:', + ':banana:', + ':pear:', + ':pineapple:', + ':sweet_potato:', + ':eggplant:', + ':tomato:', + ':corn:', + ':house:', + ':house_with_garden:', + ':school:', + ':office:', + ':post_office:', + ':hospital:', + ':bank:', + ':convenience_store:', + ':love_hotel:', + ':hotel:', + ':wedding:', + ':church:', + ':department_store:', + ':european_post_office:', + ':city_sunrise:', + ':city_sunset:', + ':japanese_castle:', + ':european_castle:', + ':tent:', + ':factory:', + ':tokyo_tower:', + ':japan:', + ':mount_fuji:', + ':sunrise_over_mountains:', + ':sunrise:', + ':stars:', + ':statue_of_liberty:', + ':bridge_at_night:', + ':carousel_horse:', + ':rainbow:', + ':ferris_wheel:', + ':fountain:', + ':roller_coaster:', + ':ship:', + ':speedboat:', + ':boat:', + ':sailboat:', + ':rowboat:', + ':anchor:', + ':rocket:', + ':airplane:', + ':helicopter:', + ':steam_locomotive:', + ':tram:', + ':mountain_railway:', + ':bike:', + ':aerial_tramway:', + ':suspension_railway:', + ':mountain_cableway:', + ':tractor:', + ':blue_car:', + ':oncoming_automobile:', + ':car:', + ':red_car:', + ':taxi:', + ':oncoming_taxi:', + ':articulated_lorry:', + ':bus:', + ':oncoming_bus:', + ':rotating_light:', + ':police_car:', + ':oncoming_police_car:', + ':fire_engine:', + ':ambulance:', + ':minibus:', + ':truck:', + ':train:', + ':station:', + ':train2:', + ':bullettrain_front:', + ':bullettrain_side:', + ':light_rail:', + ':monorail:', + ':railway_car:', + ':trolleybus:', + ':ticket:', + ':fuelpump:', + ':vertical_traffic_light:', + ':traffic_light:', + ':warning:', + ':construction:', + ':beginner:', + ':atm:', + ':slot_machine:', + ':busstop:', + ':barber:', + ':hotsprings:', + ':checkered_flag:', + ':crossed_flags:', + ':izakaya_lantern:', + ':moyai:', + ':circus_tent:', + ':performing_arts:', + ':round_pushpin:', + ':triangular_flag_on_post:', + ':jp:', + ':kr:', + ':cn:', + ':us:', + ':fr:', + ':es:', + ':it:', + ':ru:', + ':gb:', + ':uk:', + ':de:', + ':one:', + ':two:', + ':three:', + ':four:', + ':five:', + ':six:', + ':seven:', + ':eight:', + ':nine:', + ':keycap_ten:', + ':1234:', + ':zero:', + ':hash:', + ':symbols:', + ':arrow_backward:', + ':arrow_down:', + ':arrow_forward:', + ':arrow_left:', + ':capital_abcd:', + ':abcd:', + ':abc:', + ':arrow_lower_left:', + ':arrow_lower_right:', + ':arrow_right:', + ':arrow_up:', + ':arrow_upper_left:', + ':arrow_upper_right:', + ':arrow_double_down:', + ':arrow_double_up:', + ':arrow_down_small:', + ':arrow_heading_down:', + ':arrow_heading_up:', + ':leftwards_arrow_with_hook:', + ':arrow_right_hook:', + ':left_right_arrow:', + ':arrow_up_down:', + ':arrow_up_small:', + ':arrows_clockwise:', + ':arrows_counterclockwise:', + ':rewind:', + ':fast_forward:', + ':information_source:', + ':ok:', + ':twisted_rightwards_arrows:', + ':repeat:', + ':repeat_one:', + ':new:', + ':top:', + ':up:', + ':cool:', + ':free:', + ':ng:', + ':cinema:', + ':koko:', + ':signal_strength:', + ':u5272:', + ':u5408:', + ':u55b6:', + ':u6307:', + ':u6708:', + ':u6709:', + ':u6e80:', + ':u7121:', + ':u7533:', + ':u7a7a:', + ':u7981:', + ':sa:', + ':restroom:', + ':mens:', + ':womens:', + ':baby_symbol:', + ':no_smoking:', + ':parking:', + ':wheelchair:', + ':metro:', + ':baggage_claim:', + ':accept:', + ':wc:', + ':potable_water:', + ':put_litter_in_its_place:', + ':secret:', + ':congratulations:', + ':m:', + ':passport_control:', + ':left_luggage:', + ':customs:', + ':ideograph_advantage:', + ':cl:', + ':sos:', + ':id:', + ':no_entry_sign:', + ':underage:', + ':no_mobile_phones:', + ':do_not_litter:', + ':non-potable_water:', + ':no_bicycles:', + ':no_pedestrians:', + ':children_crossing:', + ':no_entry:', + ':eight_spoked_asterisk:', + ':sparkle:', + ':eight_pointed_black_star:', + ':heart_decoration:', + ':vs:', + ':vibration_mode:', + ':mobile_phone_off:', + ':chart:', + ':currency_exchange:', + ':aries:', + ':taurus:', + ':gemini:', + ':cancer:', + ':leo:', + ':virgo:', + ':libra:', + ':scorpius:', + ':sagittarius:', + ':capricorn:', + ':aquarius:', + ':pisces:', + ':ophiuchus:', + ':six_pointed_star:', + ':negative_squared_cross_mark:', + ':a:', + ':b:', + ':ab:', + ':o2:', + ':diamond_shape_with_a_dot_inside:', + ':recycle:', + ':end:', + ':back:', + ':on:', + ':soon:', + ':clock1:', + ':clock130:', + ':clock10:', + ':clock1030:', + ':clock11:', + ':clock1130:', + ':clock12:', + ':clock1230:', + ':clock2:', + ':clock230:', + ':clock3:', + ':clock330:', + ':clock4:', + ':clock430:', + ':clock5:', + ':clock530:', + ':clock6:', + ':clock630:', + ':clock7:', + ':clock730:', + ':clock8:', + ':clock830:', + ':clock9:', + ':clock930:', + ':heavy_dollar_sign:', + ':copyright:', + ':registered:', + ':tm:', + ':x:', + ':heavy_exclamation_mark:', + ':bangbang:', + ':interrobang:', + ':o:', + ':heavy_multiplication_x:', + ':heavy_plus_sign:', + ':heavy_minus_sign:', + ':heavy_division_sign:', + ':white_flower:', + ':100:', + ':heavy_check_mark:', + ':ballot_box_with_check:', + ':radio_button:', + ':link:', + ':curly_loop:', + ':wavy_dash:', + ':part_alternation_mark:', + ':trident:', + ':black_small_square:', + ':white_small_square:', + ':black_medium_small_square:', + ':white_medium_small_square:', + ':black_medium_square:', + ':white_medium_square:', + ':white_large_square:', + ':white_check_mark:', + ':black_square_button:', + ':white_square_button:', + ':black_circle:', + ':white_circle:', + ':red_circle:', + ':large_blue_circle:', + ':large_blue_diamond:', + ':large_orange_diamond:', + ':small_blue_diamond:', + ':small_orange_diamond:', + ':small_red_triangle:', + ':small_red_triangle_down:', + ':shipit:' + ] + }; + + // Add all emoji in a dropdown + $.extend(true, $.trumbowyg, { + langs: { + // jshint camelcase:false + en: { + emoji: 'Add an emoji' + }, + fr: { + emoji: 'Ajouter un emoji' + }, + zh_cn: { + emoji: '添加表情' + }, + ru: { + emoji: 'Вставить emoji' + }, + ja: { + emoji: '絵文字の挿入' + }, + tr: { + emoji: 'Emoji ekle' + } + }, + // jshint camelcase:true + plugins: { + emoji: { + init: function (trumbowyg) { + trumbowyg.o.plugins.emoji = trumbowyg.o.plugins.emoji || defaultOptions; + var emojiBtnDef = { + dropdown: buildDropdown(trumbowyg) + }; + trumbowyg.addBtnDef('emoji', emojiBtnDef); + } + } + } + }); + + function buildDropdown(trumbowyg) { + var dropdown = []; + + $.each(trumbowyg.o.plugins.emoji.emojiList, function (i, emoji) { + if ($.isArray(emoji)) { // Custom emoji behaviour + var emojiCode = emoji[0], + emojiUrl = emoji[1], + emojiHtml = '<img src="' + emojiUrl + '" alt="' + emojiCode + '">', + customEmojiBtnName = 'emoji-' + emojiCode.replace(/:/g, ''), + customEmojiBtnDef = { + hasIcon: false, + text: emojiHtml, + fn: function () { + trumbowyg.execCmd('insertImage', emojiUrl, false, true); + return true; + } + }; + + trumbowyg.addBtnDef(customEmojiBtnName, customEmojiBtnDef); + dropdown.push(customEmojiBtnName); + } else { // Default behaviour + var btn = emoji.replace(/:/g, ''), + defaultEmojiBtnName = 'emoji-' + btn, + defaultEmojiBtnDef = { + text: emoji, + fn: function () { + trumbowyg.execCmd('insertText', emoji); + return true; + } + }; + + trumbowyg.addBtnDef(defaultEmojiBtnName, defaultEmojiBtnDef); + dropdown.push(defaultEmojiBtnName); + } + }); + + return dropdown; + } +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/emoji/trumbowyg.emoji.min.js b/modules/editor/trumbowyg/plugins/emoji/trumbowyg.emoji.min.js @@ -0,0 +1 @@ +!function(e){"use strict";function a(a){var o=[];return e.each(a.o.plugins.emoji.emojiList,function(r,i){if(e.isArray(i)){var n=i[0],t=i[1],_='<img src="'+t+'" alt="'+n+'">',s="emoji-"+n.replace(/:/g,""),l={hasIcon:!1,text:_,fn:function(){return a.execCmd("insertImage",t,!1,!0),!0}};a.addBtnDef(s,l),o.push(s)}else{var c=i.replace(/:/g,""),u="emoji-"+c,h={text:i,fn:function(){return a.execCmd("insertText",i),!0}};a.addBtnDef(u,h),o.push(u)}}),o}var o={emojiList:[":bowtie:",":smile:",":laughing:",":blush:",":smiley:",":relaxed:",":smirk:",":heart_eyes:",":kissing_heart:",":kissing_closed_eyes:",":flushed:",":relieved:",":satisfied:",":grin:",":wink:",":stuck_out_tongue_winking_eye:",":stuck_out_tongue_closed_eyes:",":grinning:",":kissing:",":kissing_smiling_eyes:",":stuck_out_tongue:",":sleeping:",":worried:",":frowning:",":anguished:",":open_mouth:",":grimacing:",":confused:",":hushed:",":expressionless:",":unamused:",":sweat_smile:",":sweat:",":disappointed_relieved:",":weary:",":pensive:",":disappointed:",":confounded:",":fearful:",":cold_sweat:",":persevere:",":cry:",":sob:",":joy:",":astonished:",":scream:",":neckbeard:",":tired_face:",":angry:",":rage:",":triumph:",":sleepy:",":yum:",":mask:",":sunglasses:",":dizzy_face:",":imp:",":smiling_imp:",":neutral_face:",":no_mouth:",":innocent:",":alien:",":yellow_heart:",":blue_heart:",":purple_heart:",":heart:",":green_heart:",":broken_heart:",":heartbeat:",":heartpulse:",":two_hearts:",":revolving_hearts:",":cupid:",":sparkling_heart:",":sparkles:",":star:",":star2:",":dizzy:",":boom:",":collision:",":anger:",":exclamation:",":question:",":grey_exclamation:",":grey_question:",":zzz:",":dash:",":sweat_drops:",":notes:",":musical_note:",":fire:",":hankey:",":poop:",":shit:",":+1:",":thumbsup:",":-1:",":thumbsdown:",":ok_hand:",":punch:",":facepunch:",":fist:",":v:",":wave:",":hand:",":raised_hand:",":open_hands:",":point_up:",":point_down:",":point_left:",":point_right:",":raised_hands:",":pray:",":point_up_2:",":clap:",":muscle:",":metal:",":fu:",":runner:",":running:",":couple:",":family:",":two_men_holding_hands:",":two_women_holding_hands:",":dancer:",":dancers:",":ok_woman:",":no_good:",":information_desk_person:",":raising_hand:",":bride_with_veil:",":person_with_pouting_face:",":person_frowning:",":bow:",":couplekiss:",":couple_with_heart:",":massage:",":haircut:",":nail_care:",":boy:",":girl:",":woman:",":man:",":baby:",":older_woman:",":older_man:",":person_with_blond_hair:",":man_with_gua_pi_mao:",":man_with_turban:",":construction_worker:",":cop:",":angel:",":princess:",":smiley_cat:",":smile_cat:",":heart_eyes_cat:",":kissing_cat:",":smirk_cat:",":scream_cat:",":crying_cat_face:",":joy_cat:",":pouting_cat:",":japanese_ogre:",":japanese_goblin:",":see_no_evil:",":hear_no_evil:",":speak_no_evil:",":guardsman:",":skull:",":feet:",":lips:",":kiss:",":droplet:",":ear:",":eyes:",":nose:",":tongue:",":love_letter:",":bust_in_silhouette:",":busts_in_silhouette:",":speech_balloon:",":thought_balloon:",":feelsgood:",":finnadie:",":goberserk:",":godmode:",":hurtrealbad:",":rage1:",":rage2:",":rage3:",":rage4:",":suspect:",":trollface:",":sunny:",":umbrella:",":cloud:",":snowflake:",":snowman:",":zap:",":cyclone:",":foggy:",":ocean:",":cat:",":dog:",":mouse:",":hamster:",":rabbit:",":wolf:",":frog:",":tiger:",":koala:",":bear:",":pig:",":pig_nose:",":cow:",":boar:",":monkey_face:",":monkey:",":horse:",":racehorse:",":camel:",":sheep:",":elephant:",":panda_face:",":snake:",":bird:",":baby_chick:",":hatched_chick:",":hatching_chick:",":chicken:",":penguin:",":turtle:",":bug:",":honeybee:",":ant:",":beetle:",":snail:",":octopus:",":tropical_fish:",":fish:",":whale:",":whale2:",":dolphin:",":cow2:",":ram:",":rat:",":water_buffalo:",":tiger2:",":rabbit2:",":dragon:",":goat:",":rooster:",":dog2:",":pig2:",":mouse2:",":ox:",":dragon_face:",":blowfish:",":crocodile:",":dromedary_camel:",":leopard:",":cat2:",":poodle:",":paw_prints:",":bouquet:",":cherry_blossom:",":tulip:",":four_leaf_clover:",":rose:",":sunflower:",":hibiscus:",":maple_leaf:",":leaves:",":fallen_leaf:",":herb:",":mushroom:",":cactus:",":palm_tree:",":evergreen_tree:",":deciduous_tree:",":chestnut:",":seedling:",":blossom:",":ear_of_rice:",":shell:",":globe_with_meridians:",":sun_with_face:",":full_moon_with_face:",":new_moon_with_face:",":new_moon:",":waxing_crescent_moon:",":first_quarter_moon:",":waxing_gibbous_moon:",":full_moon:",":waning_gibbous_moon:",":last_quarter_moon:",":waning_crescent_moon:",":last_quarter_moon_with_face:",":first_quarter_moon_with_face:",":crescent_moon:",":earth_africa:",":earth_americas:",":earth_asia:",":volcano:",":milky_way:",":partly_sunny:",":octocat:",":squirrel:",":bamboo:",":gift_heart:",":dolls:",":school_satchel:",":mortar_board:",":flags:",":fireworks:",":sparkler:",":wind_chime:",":rice_scene:",":jack_o_lantern:",":ghost:",":santa:",":christmas_tree:",":gift:",":bell:",":no_bell:",":tanabata_tree:",":tada:",":confetti_ball:",":balloon:",":crystal_ball:",":cd:",":dvd:",":floppy_disk:",":camera:",":video_camera:",":movie_camera:",":computer:",":tv:",":iphone:",":phone:",":telephone:",":telephone_receiver:",":pager:",":fax:",":minidisc:",":vhs:",":sound:",":speaker:",":mute:",":loudspeaker:",":mega:",":hourglass:",":hourglass_flowing_sand:",":alarm_clock:",":watch:",":radio:",":satellite:",":loop:",":mag:",":mag_right:",":unlock:",":lock:",":lock_with_ink_pen:",":closed_lock_with_key:",":key:",":bulb:",":flashlight:",":high_brightness:",":low_brightness:",":electric_plug:",":battery:",":calling:",":email:",":mailbox:",":postbox:",":bath:",":bathtub:",":shower:",":toilet:",":wrench:",":nut_and_bolt:",":hammer:",":seat:",":moneybag:",":yen:",":dollar:",":pound:",":euro:",":credit_card:",":money_with_wings:",":e-mail:",":inbox_tray:",":outbox_tray:",":envelope:",":incoming_envelope:",":postal_horn:",":mailbox_closed:",":mailbox_with_mail:",":mailbox_with_no_mail:",":package:",":door:",":smoking:",":bomb:",":gun:",":hocho:",":pill:",":syringe:",":page_facing_up:",":page_with_curl:",":bookmark_tabs:",":bar_chart:",":chart_with_upwards_trend:",":chart_with_downwards_trend:",":scroll:",":clipboard:",":calendar:",":date:",":card_index:",":file_folder:",":open_file_folder:",":scissors:",":pushpin:",":paperclip:",":black_nib:",":pencil2:",":straight_ruler:",":triangular_ruler:",":closed_book:",":green_book:",":blue_book:",":orange_book:",":notebook:",":notebook_with_decorative_cover:",":ledger:",":books:",":bookmark:",":name_badge:",":microscope:",":telescope:",":newspaper:",":football:",":basketball:",":soccer:",":baseball:",":tennis:",":8ball:",":rugby_football:",":bowling:",":golf:",":mountain_bicyclist:",":bicyclist:",":horse_racing:",":snowboarder:",":swimmer:",":surfer:",":ski:",":spades:",":hearts:",":clubs:",":diamonds:",":gem:",":ring:",":trophy:",":musical_score:",":musical_keyboard:",":violin:",":space_invader:",":video_game:",":black_joker:",":flower_playing_cards:",":game_die:",":dart:",":mahjong:",":clapper:",":memo:",":pencil:",":book:",":art:",":microphone:",":headphones:",":trumpet:",":saxophone:",":guitar:",":shoe:",":sandal:",":high_heel:",":lipstick:",":boot:",":shirt:",":tshirt:",":necktie:",":womans_clothes:",":dress:",":running_shirt_with_sash:",":jeans:",":kimono:",":bikini:",":ribbon:",":tophat:",":crown:",":womans_hat:",":mans_shoe:",":closed_umbrella:",":briefcase:",":handbag:",":pouch:",":purse:",":eyeglasses:",":fishing_pole_and_fish:",":coffee:",":tea:",":sake:",":baby_bottle:",":beer:",":beers:",":cocktail:",":tropical_drink:",":wine_glass:",":fork_and_knife:",":pizza:",":hamburger:",":fries:",":poultry_leg:",":meat_on_bone:",":spaghetti:",":curry:",":fried_shrimp:",":bento:",":sushi:",":fish_cake:",":rice_ball:",":rice_cracker:",":rice:",":ramen:",":stew:",":oden:",":dango:",":egg:",":bread:",":doughnut:",":custard:",":icecream:",":ice_cream:",":shaved_ice:",":birthday:",":cake:",":cookie:",":chocolate_bar:",":candy:",":lollipop:",":honey_pot:",":apple:",":green_apple:",":tangerine:",":lemon:",":cherries:",":grapes:",":watermelon:",":strawberry:",":peach:",":melon:",":banana:",":pear:",":pineapple:",":sweet_potato:",":eggplant:",":tomato:",":corn:",":house:",":house_with_garden:",":school:",":office:",":post_office:",":hospital:",":bank:",":convenience_store:",":love_hotel:",":hotel:",":wedding:",":church:",":department_store:",":european_post_office:",":city_sunrise:",":city_sunset:",":japanese_castle:",":european_castle:",":tent:",":factory:",":tokyo_tower:",":japan:",":mount_fuji:",":sunrise_over_mountains:",":sunrise:",":stars:",":statue_of_liberty:",":bridge_at_night:",":carousel_horse:",":rainbow:",":ferris_wheel:",":fountain:",":roller_coaster:",":ship:",":speedboat:",":boat:",":sailboat:",":rowboat:",":anchor:",":rocket:",":airplane:",":helicopter:",":steam_locomotive:",":tram:",":mountain_railway:",":bike:",":aerial_tramway:",":suspension_railway:",":mountain_cableway:",":tractor:",":blue_car:",":oncoming_automobile:",":car:",":red_car:",":taxi:",":oncoming_taxi:",":articulated_lorry:",":bus:",":oncoming_bus:",":rotating_light:",":police_car:",":oncoming_police_car:",":fire_engine:",":ambulance:",":minibus:",":truck:",":train:",":station:",":train2:",":bullettrain_front:",":bullettrain_side:",":light_rail:",":monorail:",":railway_car:",":trolleybus:",":ticket:",":fuelpump:",":vertical_traffic_light:",":traffic_light:",":warning:",":construction:",":beginner:",":atm:",":slot_machine:",":busstop:",":barber:",":hotsprings:",":checkered_flag:",":crossed_flags:",":izakaya_lantern:",":moyai:",":circus_tent:",":performing_arts:",":round_pushpin:",":triangular_flag_on_post:",":jp:",":kr:",":cn:",":us:",":fr:",":es:",":it:",":ru:",":gb:",":uk:",":de:",":one:",":two:",":three:",":four:",":five:",":six:",":seven:",":eight:",":nine:",":keycap_ten:",":1234:",":zero:",":hash:",":symbols:",":arrow_backward:",":arrow_down:",":arrow_forward:",":arrow_left:",":capital_abcd:",":abcd:",":abc:",":arrow_lower_left:",":arrow_lower_right:",":arrow_right:",":arrow_up:",":arrow_upper_left:",":arrow_upper_right:",":arrow_double_down:",":arrow_double_up:",":arrow_down_small:",":arrow_heading_down:",":arrow_heading_up:",":leftwards_arrow_with_hook:",":arrow_right_hook:",":left_right_arrow:",":arrow_up_down:",":arrow_up_small:",":arrows_clockwise:",":arrows_counterclockwise:",":rewind:",":fast_forward:",":information_source:",":ok:",":twisted_rightwards_arrows:",":repeat:",":repeat_one:",":new:",":top:",":up:",":cool:",":free:",":ng:",":cinema:",":koko:",":signal_strength:",":u5272:",":u5408:",":u55b6:",":u6307:",":u6708:",":u6709:",":u6e80:",":u7121:",":u7533:",":u7a7a:",":u7981:",":sa:",":restroom:",":mens:",":womens:",":baby_symbol:",":no_smoking:",":parking:",":wheelchair:",":metro:",":baggage_claim:",":accept:",":wc:",":potable_water:",":put_litter_in_its_place:",":secret:",":congratulations:",":m:",":passport_control:",":left_luggage:",":customs:",":ideograph_advantage:",":cl:",":sos:",":id:",":no_entry_sign:",":underage:",":no_mobile_phones:",":do_not_litter:",":non-potable_water:",":no_bicycles:",":no_pedestrians:",":children_crossing:",":no_entry:",":eight_spoked_asterisk:",":sparkle:",":eight_pointed_black_star:",":heart_decoration:",":vs:",":vibration_mode:",":mobile_phone_off:",":chart:",":currency_exchange:",":aries:",":taurus:",":gemini:",":cancer:",":leo:",":virgo:",":libra:",":scorpius:",":sagittarius:",":capricorn:",":aquarius:",":pisces:",":ophiuchus:",":six_pointed_star:",":negative_squared_cross_mark:",":a:",":b:",":ab:",":o2:",":diamond_shape_with_a_dot_inside:",":recycle:",":end:",":back:",":on:",":soon:",":clock1:",":clock130:",":clock10:",":clock1030:",":clock11:",":clock1130:",":clock12:",":clock1230:",":clock2:",":clock230:",":clock3:",":clock330:",":clock4:",":clock430:",":clock5:",":clock530:",":clock6:",":clock630:",":clock7:",":clock730:",":clock8:",":clock830:",":clock9:",":clock930:",":heavy_dollar_sign:",":copyright:",":registered:",":tm:",":x:",":heavy_exclamation_mark:",":bangbang:",":interrobang:",":o:",":heavy_multiplication_x:",":heavy_plus_sign:",":heavy_minus_sign:",":heavy_division_sign:",":white_flower:",":100:",":heavy_check_mark:",":ballot_box_with_check:",":radio_button:",":link:",":curly_loop:",":wavy_dash:",":part_alternation_mark:",":trident:",":black_small_square:",":white_small_square:",":black_medium_small_square:",":white_medium_small_square:",":black_medium_square:",":white_medium_square:",":white_large_square:",":white_check_mark:",":black_square_button:",":white_square_button:",":black_circle:",":white_circle:",":red_circle:",":large_blue_circle:",":large_blue_diamond:",":large_orange_diamond:",":small_blue_diamond:",":small_orange_diamond:",":small_red_triangle:",":small_red_triangle_down:",":shipit:"]};e.extend(!0,e.trumbowyg,{langs:{en:{emoji:"Add an emoji"},fr:{emoji:"Ajouter un emoji"},zh_cn:{emoji:"添加表情"},ru:{emoji:"Вставить emoji"},ja:{emoji:"絵文字の挿入"},tr:{emoji:"Emoji ekle"}},plugins:{emoji:{init:function(e){e.o.plugins.emoji=e.o.plugins.emoji||o;var r={dropdown:a(e)};e.addBtnDef("emoji",r)}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/emoji/ui/sass/trumbowyg.emoji.scss b/modules/editor/trumbowyg/plugins/emoji/ui/sass/trumbowyg.emoji.scss @@ -0,0 +1,56 @@ +/** + * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor + * Default stylesheet for Trumbowyg editor plugin + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +.trumbowyg-dropdown-emoji { + width: 265px; + padding: 7px 0 7px 5px; + height: 200px; + overflow-y: scroll; + overflow-x: hidden; +} + +.trumbowyg-dropdown-emoji svg { + display: none !important; +} + +.trumbowyg-dropdown-emoji button { + display: block; + position: relative; + float: left; + height: 26px; + width: 26px; + padding: 0; + margin: 2px; + line-height: 24px; + text-align: center; + + &:hover, + &:focus { + &::after { + display: block; + position: absolute; + top: -5px; + left: -5px; + height: 27px; + width: 27px; + background: inherit; + box-shadow: #000 0 0 2px; + z-index: 10; + background-color: transparent; + } + } +} + +.trumbowyg .emoji { + width: 22px; + height: 22px; + display: inline-block; +} diff --git a/modules/editor/trumbowyg/plugins/emoji/ui/trumbowyg.emoji.css b/modules/editor/trumbowyg/plugins/emoji/ui/trumbowyg.emoji.css @@ -0,0 +1,47 @@ +/** + * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor + * Trumbowyg plugin stylesheet + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +.trumbowyg-dropdown-emoji { + width: 265px; + padding: 7px 0 7px 5px; + height: 200px; + overflow-y: scroll; + overflow-x: hidden; } + +.trumbowyg-dropdown-emoji svg { + display: none !important; } + +.trumbowyg-dropdown-emoji button { + display: block; + position: relative; + float: left; + height: 26px; + width: 26px; + padding: 0; + margin: 2px; + line-height: 24px; + text-align: center; } + .trumbowyg-dropdown-emoji button:hover::after, .trumbowyg-dropdown-emoji button:focus::after { + display: block; + position: absolute; + top: -5px; + left: -5px; + height: 27px; + width: 27px; + background: inherit; + box-shadow: #000 0 0 2px; + z-index: 10; + background-color: transparent; } + +.trumbowyg .emoji { + width: 22px; + height: 22px; + display: inline-block; } diff --git a/modules/editor/trumbowyg/plugins/emoji/ui/trumbowyg.emoji.min.css b/modules/editor/trumbowyg/plugins/emoji/ui/trumbowyg.emoji.min.css @@ -0,0 +1,2 @@ +/** Trumbowyg v2.10.0 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */ +.trumbowyg-dropdown-emoji{width:265px;padding:7px 0 7px 5px;height:200px;overflow-y:scroll;overflow-x:hidden}.trumbowyg-dropdown-emoji svg{display:none!important}.trumbowyg-dropdown-emoji button{display:block;position:relative;float:left;height:26px;width:26px;padding:0;margin:2px;line-height:24px;text-align:center}.trumbowyg-dropdown-emoji button:focus::after,.trumbowyg-dropdown-emoji button:hover::after{display:block;position:absolute;top:-5px;left:-5px;height:27px;width:27px;background:inherit;box-shadow:#000 0 0 2px;z-index:10;background-color:transparent}.trumbowyg .emoji{width:22px;height:22px;display:inline-block}+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/fontfamily/trumbowyg.fontfamily.js b/modules/editor/trumbowyg/plugins/fontfamily/trumbowyg.fontfamily.js @@ -0,0 +1,73 @@ +(function ($) { + 'use strict'; + + $.extend(true, $.trumbowyg, { + langs: { + // jshint camelcase:false + en: { + fontFamily: 'Font' + }, + fr: { + fontFamily: 'Police' + }, + nl: { + fontFamily: 'Lettertype' + }, + tr: { + fontFamily: 'Yazı Tipi' + } + } + }); + // jshint camelcase:true + + var defaultOptions = { + fontList: [ + {name: 'Arial', family: 'Arial, Helvetica, sans-serif'}, + {name: 'Arial Black', family: '\'Arial Black\', Gadget, sans-serif'}, + {name: 'Comic Sans', family: '\'Comic Sans MS\', Textile, cursive, sans-serif'}, + {name: 'Courier New', family: '\'Courier New\', Courier, monospace'}, + {name: 'Georgia', family: 'Georgia, serif'}, + {name: 'Impact', family: 'Impact, Charcoal, sans-serif'}, + {name: 'Lucida Console', family: '\'Lucida Console\', Monaco, monospace'}, + {name: 'Lucida Sans', family: '\'Lucida Sans Uncide\', \'Lucida Grande\', sans-serif'}, + {name: 'Palatino', family: '\'Palatino Linotype\', \'Book Antiqua\', Palatino, serif'}, + {name: 'Tahoma', family: 'Tahoma, Geneva, sans-serif'}, + {name: 'Times New Roman', family: '\'Times New Roman\', Times, serif'}, + {name: 'Trebuchet', family: '\'Trebuchet MS\', Helvetica, sans-serif'}, + {name: 'Verdana', family: 'Verdana, Geneva, sans-serif'} + ] + }; + + // Add dropdown with web safe fonts + $.extend(true, $.trumbowyg, { + plugins: { + fontfamily: { + init: function (trumbowyg) { + trumbowyg.o.plugins.fontfamily = trumbowyg.o.plugins.fontfamily || defaultOptions; + trumbowyg.addBtnDef('fontfamily', { + dropdown: buildDropdown(trumbowyg), + hasIcon: false, + text: trumbowyg.lang.fontFamily + }); + } + } + } + }); + + function buildDropdown(trumbowyg) { + var dropdown = []; + + $.each(trumbowyg.o.plugins.fontfamily.fontList, function (index, font) { + trumbowyg.addBtnDef('fontfamily_' + index, { + title: '<span style="font-family: ' + font.family + ';">' + font.name + '</span>', + hasIcon: false, + fn: function () { + trumbowyg.execCmd('fontName', font.family, true); + } + }); + dropdown.push('fontfamily_' + index); + }); + + return dropdown; + } +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/fontfamily/trumbowyg.fontfamily.min.js b/modules/editor/trumbowyg/plugins/fontfamily/trumbowyg.fontfamily.min.js @@ -0,0 +1 @@ +!function(a){"use strict";function n(n){var i=[];return a.each(n.o.plugins.fontfamily.fontList,function(a,e){n.addBtnDef("fontfamily_"+a,{title:'<span style="font-family: '+e.family+';">'+e.name+"</span>",hasIcon:!1,fn:function(){n.execCmd("fontName",e.family,!0)}}),i.push("fontfamily_"+a)}),i}a.extend(!0,a.trumbowyg,{langs:{en:{fontFamily:"Font"},fr:{fontFamily:"Police"},nl:{fontFamily:"Lettertype"},tr:{fontFamily:"Yazı Tipi"}}});var i={fontList:[{name:"Arial",family:"Arial, Helvetica, sans-serif"},{name:"Arial Black",family:"'Arial Black', Gadget, sans-serif"},{name:"Comic Sans",family:"'Comic Sans MS', Textile, cursive, sans-serif"},{name:"Courier New",family:"'Courier New', Courier, monospace"},{name:"Georgia",family:"Georgia, serif"},{name:"Impact",family:"Impact, Charcoal, sans-serif"},{name:"Lucida Console",family:"'Lucida Console', Monaco, monospace"},{name:"Lucida Sans",family:"'Lucida Sans Uncide', 'Lucida Grande', sans-serif"},{name:"Palatino",family:"'Palatino Linotype', 'Book Antiqua', Palatino, serif"},{name:"Tahoma",family:"Tahoma, Geneva, sans-serif"},{name:"Times New Roman",family:"'Times New Roman', Times, serif"},{name:"Trebuchet",family:"'Trebuchet MS', Helvetica, sans-serif"},{name:"Verdana",family:"Verdana, Geneva, sans-serif"}]};a.extend(!0,a.trumbowyg,{plugins:{fontfamily:{init:function(a){a.o.plugins.fontfamily=a.o.plugins.fontfamily||i,a.addBtnDef("fontfamily",{dropdown:n(a),hasIcon:!1,text:a.lang.fontFamily})}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/fontsize/trumbowyg.fontsize.js b/modules/editor/trumbowyg/plugins/fontsize/trumbowyg.fontsize.js @@ -0,0 +1,117 @@ +(function ($) { + 'use strict'; + + $.extend(true, $.trumbowyg, { + langs: { + // jshint camelcase:false + en: { + fontsize: 'Font size', + fontsizes: { + 'x-small': 'Extra small', + 'small': 'Small', + 'medium': 'Regular', + 'large': 'Large', + 'x-large': 'Extra large', + 'custom': 'Custom' + } + }, + fr: { + fontsize: 'Taille de la police', + fontsizes: { + 'x-small': 'Très petit', + 'small': 'Petit', + 'medium': 'Normal', + 'large': 'Grand', + 'x-large': 'Très grand', + 'custom': 'Douane' + } + }, + nl: { + fontsize: 'Lettergrootte', + fontsizes: { + 'x-small': 'Extra klein', + 'small': 'Klein', + 'medium': 'Normaal', + 'large': 'Groot', + 'x-large': 'Extra groot', + 'custom': 'Tilpasset' + } + }, + tr: { + fontsize: 'Yazı Boyutu', + fontsizes: { + 'x-small': 'Çok Küçük', + 'small': 'Küçük', + 'medium': 'Normal', + 'large': 'Büyük', + 'x-large': 'Çok Büyük', + 'custom': 'Görenek' + } + } + } + }); + // jshint camelcase:true + + // Add dropdown with font sizes + $.extend(true, $.trumbowyg, { + plugins: { + fontsize: { + init: function (trumbowyg) { + trumbowyg.addBtnDef('fontsize', { + dropdown: buildDropdown(trumbowyg) + }); + } + } + } + }); + + function buildDropdown(trumbowyg) { + var dropdown = []; + var sizes = ['x-small', 'small', 'medium', 'large', 'x-large']; + + $.each(sizes, function (index, size) { + trumbowyg.addBtnDef('fontsize_' + size, { + text: '<span style="font-size: ' + size + ';">' + trumbowyg.lang.fontsizes[size] + '</span>', + hasIcon: false, + fn: function () { + trumbowyg.execCmd('fontSize', index + 1, true); + } + }); + dropdown.push('fontsize_' + size); + }); + + var freeSizeButtonName = 'fontsize_custom', + freeSizeBtnDef = { + fn: function () { + trumbowyg.openModalInsert('Custom Font Size', + { + size: { + label: 'Font Size', + value: '48px' + } + }, + function (values) { + var text = trumbowyg.range.startContainer.parentElement; + var selectedText = trumbowyg.getRangeText(); + if ($(text).html() === selectedText) { + $(text).css('font-size', values.size); + } else { + trumbowyg.range.deleteContents(); + var html = '<span style="font-size: ' + values.size + ';">' + selectedText + '</span>'; + var node = $(html)[0]; + trumbowyg.range.insertNode(node); + } + trumbowyg.saveRange(); + return true; + } + ); + }, + text: '<span style="font-size: medium;">' + trumbowyg.lang.fontsizes.custom + '</span>', + hasIcon: false + }; + trumbowyg.addBtnDef(freeSizeButtonName, freeSizeBtnDef); + dropdown.push(freeSizeButtonName); + + return dropdown; + } +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/fontsize/trumbowyg.fontsize.min.js b/modules/editor/trumbowyg/plugins/fontsize/trumbowyg.fontsize.min.js @@ -0,0 +1 @@ +!function(e){"use strict";function t(t){var n=[],s=["x-small","small","medium","large","x-large"];e.each(s,function(e,s){t.addBtnDef("fontsize_"+s,{text:'<span style="font-size: '+s+';">'+t.lang.fontsizes[s]+"</span>",hasIcon:!1,fn:function(){t.execCmd("fontSize",e+1,!0)}}),n.push("fontsize_"+s)});var a="fontsize_custom",o={fn:function(){t.openModalInsert("Custom Font Size",{size:{label:"Font Size",value:"48px"}},function(n){var s=t.range.startContainer.parentElement,a=t.getRangeText();if(e(s).html()===a)e(s).css("font-size",n.size);else{t.range.deleteContents();var o='<span style="font-size: '+n.size+';">'+a+"</span>",l=e(o)[0];t.range.insertNode(l)}return t.saveRange(),!0})},text:'<span style="font-size: medium;">'+t.lang.fontsizes.custom+"</span>",hasIcon:!1};return t.addBtnDef(a,o),n.push(a),n}e.extend(!0,e.trumbowyg,{langs:{en:{fontsize:"Font size",fontsizes:{"x-small":"Extra small",small:"Small",medium:"Regular",large:"Large","x-large":"Extra large",custom:"Custom"}},fr:{fontsize:"Taille de la police",fontsizes:{"x-small":"Très petit",small:"Petit",medium:"Normal",large:"Grand","x-large":"Très grand",custom:"Douane"}},nl:{fontsize:"Lettergrootte",fontsizes:{"x-small":"Extra klein",small:"Klein",medium:"Normaal",large:"Groot","x-large":"Extra groot",custom:"Tilpasset"}},tr:{fontsize:"Yazı Boyutu",fontsizes:{"x-small":"Çok Küçük",small:"Küçük",medium:"Normal",large:"Büyük","x-large":"Çok Büyük",custom:"Görenek"}}}}),e.extend(!0,e.trumbowyg,{plugins:{fontsize:{init:function(e){e.addBtnDef("fontsize",{dropdown:t(e)})}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/highlight/trumbowyg.highlight.js b/modules/editor/trumbowyg/plugins/highlight/trumbowyg.highlight.js @@ -0,0 +1,82 @@ +/* globals Prism */ +(function ($, Prism) { + 'use strict'; + + // My plugin default options + var defaultOptions = {}; + + function highlightIt(text, language) { + return [ + '<pre class="language-' + language + '">', + '<code class="language-' + language + '">' + Prism.highlight(text, Prism.languages[language]) + '</code>', + '</pre>', + ].join(''); + } + + // If my plugin is a button + function buildButtonDef(trumbowyg) { + return { + fn: function () { + var $modal = trumbowyg.openModal('Code', [ + '<div class="' + trumbowyg.o.prefix + 'highlight-form-group">', + ' <select class="' + trumbowyg.o.prefix + 'highlight-form-control language">', + (function () { + var options = ''; + + for (var lang in Prism.languages) { + if (Prism.languages[lang].comment) { + options += '<option value="' + lang + '">' + lang + '</option>'; + } + } + + return options; + })(), + ' </select>', + '</div>', + '<div class="' + trumbowyg.o.prefix + 'highlight-form-group">', + ' <textarea class="' + trumbowyg.o.prefix + 'highlight-form-control code"></textarea>', + '</div>', + ].join('\n')), + $language = $modal.find('.language'), + $code = $modal.find('.code'); + + // Listen clicks on modal box buttons + $modal.on('tbwconfirm', function () { + trumbowyg.restoreRange(); + trumbowyg.execCmd('insertHTML', highlightIt($code.val(), $language.val())); + trumbowyg.execCmd('insertHTML', '<p><br></p>'); + + trumbowyg.closeModal(); + }); + + $modal.on('tbwcancel', function () { + trumbowyg.closeModal(); + }); + } + }; + } + + $.extend(true, $.trumbowyg, { + // Add some translations + langs: { + en: { + highlight: 'Code syntax highlight' + } + }, + // Add our plugin to Trumbowyg registred plugins + plugins: { + highlight: { + init: function (trumbowyg) { + // Fill current Trumbowyg instance with my plugin default options + trumbowyg.o.plugins.highlight = $.extend(true, {}, + defaultOptions, + trumbowyg.o.plugins.highlight || {} + ); + + // If my plugin is a button + trumbowyg.addBtnDef('highlight', buildButtonDef(trumbowyg)); + } + } + } + }); +})(jQuery, Prism); diff --git a/modules/editor/trumbowyg/plugins/highlight/trumbowyg.highlight.min.js b/modules/editor/trumbowyg/plugins/highlight/trumbowyg.highlight.min.js @@ -0,0 +1 @@ +!function(n,i){"use strict";function e(n,e){return['<pre class="language-'+e+'">','<code class="language-'+e+'">'+i.highlight(n,i.languages[e])+"</code>","</pre>"].join("")}function o(n){return{fn:function(){var o=n.openModal("Code",['<div class="'+n.o.prefix+'highlight-form-group">',' <select class="'+n.o.prefix+'highlight-form-control language">',function(){var n="";for(var e in i.languages)i.languages[e].comment&&(n+='<option value="'+e+'">'+e+"</option>");return n}()," </select>","</div>",'<div class="'+n.o.prefix+'highlight-form-group">',' <textarea class="'+n.o.prefix+'highlight-form-control code"></textarea>',"</div>"].join("\n")),t=o.find(".language"),g=o.find(".code");o.on("tbwconfirm",function(){n.restoreRange(),n.execCmd("insertHTML",e(g.val(),t.val())),n.execCmd("insertHTML","<p><br></p>"),n.closeModal()}),o.on("tbwcancel",function(){n.closeModal()})}}}var t={};n.extend(!0,n.trumbowyg,{langs:{en:{highlight:"Code syntax highlight"}},plugins:{highlight:{init:function(i){i.o.plugins.highlight=n.extend(!0,{},t,i.o.plugins.highlight||{}),i.addBtnDef("highlight",o(i))}}}})}(jQuery,Prism);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/highlight/ui/sass/trumbowyg.highlight.scss b/modules/editor/trumbowyg/plugins/highlight/ui/sass/trumbowyg.highlight.scss @@ -0,0 +1,25 @@ +/** + * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor + * Default stylesheet for Trumbowyg editor plugin + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +.trumbowyg-highlight-form-group { + margin: 15px 10px; + + .trumbowyg-highlight-form-control { + width: 100%; + border: 1px solid #DEDEDE; + font-size: 14px; + padding: 7px; + + &.code { + height: 200px; + } + } +} diff --git a/modules/editor/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.css b/modules/editor/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.css @@ -0,0 +1,20 @@ +/** + * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor + * Trumbowyg plugin stylesheet + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +.trumbowyg-highlight-form-group { + margin: 15px 10px; } + .trumbowyg-highlight-form-group .trumbowyg-highlight-form-control { + width: 100%; + border: 1px solid #DEDEDE; + font-size: 14px; + padding: 7px; } + .trumbowyg-highlight-form-group .trumbowyg-highlight-form-control.code { + height: 200px; } diff --git a/modules/editor/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.min.css b/modules/editor/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.min.css @@ -0,0 +1,2 @@ +/** Trumbowyg v2.10.0 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */ +.trumbowyg-highlight-form-group{margin:15px 10px}.trumbowyg-highlight-form-group .trumbowyg-highlight-form-control{width:100%;border:1px solid #DEDEDE;font-size:14px;padding:7px}.trumbowyg-highlight-form-group .trumbowyg-highlight-form-control.code{height:200px}+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/history/trumbowyg.history.js b/modules/editor/trumbowyg/plugins/history/trumbowyg.history.js @@ -0,0 +1,190 @@ +/*/* =========================================================== + * trumbowyg.history.js v1.0 + * history plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Sven Dunemann [dunemann@forelabs.eu] + */ + +(function ($) { + 'use strict'; + $.extend(true, $.trumbowyg, { + langs: { + de: { + history: { + redo: 'Wiederholen', + undo: 'Rückgängig' + } + }, + en: { + history: { + redo: 'Redo', + undo: 'Undo' + } + }, + fr: { + history: { + redo: 'Annuler', + undo: 'Rétablir' + } + } + }, + plugins: { + history: { + init: function (t) { + t.o.plugins.history = $.extend(true, { + _stack: [], + _index: -1, + _focusEl: undefined + }, t.o.plugins.history || {}); + + var btnBuildDefRedo = { + title: t.lang.history.redo, + ico: 'redo', + key: 'Y', + fn: function () { + if (t.o.plugins.history._index < t.o.plugins.history._stack.length - 1) { + t.o.plugins.history._index += 1; + var index = t.o.plugins.history._index; + var newState = t.o.plugins.history._stack[index]; + + t.execCmd('html', newState); + // because of some semantic optimisations we have to save the state back + // to history + t.o.plugins.history._stack[index] = t.$ed.html(); + + carretToEnd(); + toggleButtonStates(); + } + } + }; + + var btnBuildDefUndo = { + title: t.lang.history.undo, + ico: 'undo', + key: 'Z', + fn: function () { + if (t.o.plugins.history._index > 0) { + t.o.plugins.history._index -= 1; + var index = t.o.plugins.history._index, + newState = t.o.plugins.history._stack[index]; + + t.execCmd('html', newState); + // because of some semantic optimisations we have to save the state back + // to history + t.o.plugins.history._stack[index] = t.$ed.html(); + + carretToEnd(); + toggleButtonStates(); + } + } + }; + + var pushToHistory = function () { + var index = t.o.plugins.history._index, + stack = t.o.plugins.history._stack, + latestState = stack.slice(-1)[0] || '<p></p>', + prevState = stack[index], + newState = t.$ed.html(), + focusEl = t.doc.getSelection().focusNode, + focusElText = '', + latestStateTagsList, + newStateTagsList, + prevFocusEl = t.o.plugins.history._focusEl; + + latestStateTagsList = $('<div>' + latestState + '</div>').find('*').map(function () { + return this.localName; + }); + newStateTagsList = $('<div>' + newState + '</div>').find('*').map(function () { + return this.localName; + }); + if (focusEl) { + t.o.plugins.history._focusEl = focusEl; + focusElText = focusEl.outerHTML || focusEl.textContent; + } + + if (newState !== prevState) { + // a new stack entry is defined when current insert ends on a whitespace character + // or count of node elements has been changed + // or focused element differs from previous one + if (focusElText.slice(-1).match(/\s/) || + !arraysAreIdentical(latestStateTagsList, newStateTagsList) || + t.o.plugins.history._index <= 0 || focusEl !== prevFocusEl) + { + t.o.plugins.history._index += 1; + // remove newer entries in history when something new was added + // because timeline was changes with interaction + t.o.plugins.history._stack = stack.slice( + 0, t.o.plugins.history._index + ); + // now add new state to modifed history + t.o.plugins.history._stack.push(newState); + } else { + // modify last stack entry + t.o.plugins.history._stack[index] = newState; + } + + toggleButtonStates(); + } + }; + + var toggleButtonStates = function () { + var index = t.o.plugins.history._index, + stackSize = t.o.plugins.history._stack.length, + undoState = (index > 0), + redoState = (stackSize !== 0 && index !== stackSize - 1); + + toggleButtonState('historyUndo', undoState); + toggleButtonState('historyRedo', redoState); + }; + + var toggleButtonState = function (btn, enable) { + var button = t.$box.find('.trumbowyg-' + btn + '-button'); + + if (enable) { + button.removeClass('trumbowyg-disable'); + } else if (!button.hasClass('trumbowyg-disable')) { + button.addClass('trumbowyg-disable'); + } + }; + + var arraysAreIdentical = function (a, b) { + if (a === b) { + return true; + } + if (a == null || b == null) { + return false; + } + if (a.length !== b.length) { + return false; + } + + for (var i = 0; i < a.length; i += 1) { + if (a[i] !== b[i]) { + return false; + } + } + return true; + }; + + var carretToEnd = function () { + var node = t.doc.getSelection().focusNode, + range = t.doc.createRange(); + + if (node.childNodes.length > 0) { + range.setStartAfter(node.childNodes[node.childNodes.length - 1]); + range.setEndAfter(node.childNodes[node.childNodes.length - 1]); + t.doc.getSelection().removeAllRanges(); + t.doc.getSelection().addRange(range); + } + }; + + t.$c.on('tbwinit tbwchange', pushToHistory); + + t.addBtnDef('historyRedo', btnBuildDefRedo); + t.addBtnDef('historyUndo', btnBuildDefUndo); + } + } + } + }); +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/history/trumbowyg.history.min.js b/modules/editor/trumbowyg/plugins/history/trumbowyg.history.min.js @@ -0,0 +1 @@ +!function(i){"use strict";i.extend(!0,i.trumbowyg,{langs:{de:{history:{redo:"Wiederholen",undo:"Rückgängig"}},en:{history:{redo:"Redo",undo:"Undo"}},fr:{history:{redo:"Annuler",undo:"Rétablir"}}},plugins:{history:{init:function(o){o.o.plugins.history=i.extend(!0,{_stack:[],_index:-1,_focusEl:void 0},o.o.plugins.history||{});var t={title:o.lang.history.redo,ico:"redo",key:"Y",fn:function(){if(o.o.plugins.history._index<o.o.plugins.history._stack.length-1){o.o.plugins.history._index+=1;var i=o.o.plugins.history._index,t=o.o.plugins.history._stack[i];o.execCmd("html",t),o.o.plugins.history._stack[i]=o.$ed.html(),d(),e()}}},n={title:o.lang.history.undo,ico:"undo",key:"Z",fn:function(){if(o.o.plugins.history._index>0){o.o.plugins.history._index-=1;var i=o.o.plugins.history._index,t=o.o.plugins.history._stack[i];o.execCmd("html",t),o.o.plugins.history._stack[i]=o.$ed.html(),d(),e()}}},s=function(){var t,n,s=o.o.plugins.history._index,r=o.o.plugins.history._stack,d=r.slice(-1)[0]||"<p></p>",u=r[s],h=o.$ed.html(),c=o.doc.getSelection().focusNode,g="",a=o.o.plugins.history._focusEl;t=i("<div>"+d+"</div>").find("*").map(function(){return this.localName}),n=i("<div>"+h+"</div>").find("*").map(function(){return this.localName}),c&&(o.o.plugins.history._focusEl=c,g=c.outerHTML||c.textContent),h!==u&&(g.slice(-1).match(/\s/)||!l(t,n)||o.o.plugins.history._index<=0||c!==a?(o.o.plugins.history._index+=1,o.o.plugins.history._stack=r.slice(0,o.o.plugins.history._index),o.o.plugins.history._stack.push(h)):o.o.plugins.history._stack[s]=h,e())},e=function(){var i=o.o.plugins.history._index,t=o.o.plugins.history._stack.length,n=i>0,s=0!==t&&i!==t-1;r("historyUndo",n),r("historyRedo",s)},r=function(i,t){var n=o.$box.find(".trumbowyg-"+i+"-button");t?n.removeClass("trumbowyg-disable"):n.hasClass("trumbowyg-disable")||n.addClass("trumbowyg-disable")},l=function(i,o){if(i===o)return!0;if(null==i||null==o)return!1;if(i.length!==o.length)return!1;for(var t=0;t<i.length;t+=1)if(i[t]!==o[t])return!1;return!0},d=function(){var i=o.doc.getSelection().focusNode,t=o.doc.createRange();i.childNodes.length>0&&(t.setStartAfter(i.childNodes[i.childNodes.length-1]),t.setEndAfter(i.childNodes[i.childNodes.length-1]),o.doc.getSelection().removeAllRanges(),o.doc.getSelection().addRange(t))};o.$c.on("tbwinit tbwchange",s),o.addBtnDef("historyRedo",t),o.addBtnDef("historyUndo",n)}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.js b/modules/editor/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.js @@ -0,0 +1,89 @@ +/*/* =========================================================== + * trumbowyg.insertaudio.js v1.0 + * InsertAudio plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Adam Hess (AdamHess) + */ + +(function ($) { + 'use strict'; + + var insertAudioOptions = { + src: { + label: 'URL', + required: true + }, + autoplay: { + label: 'AutoPlay', + required: false, + type: 'checkbox' + }, + muted: { + label: 'Muted', + required: false, + type: 'checkbox' + }, + preload: { + label: 'preload options', + required: false + } + }; + + + $.extend(true, $.trumbowyg, { + langs: { + en: { + insertAudio: 'Insert Audio' + }, + fr: { + insertAudio: 'Insérer un son' + }, + ru: { + insertAudio: 'Вставить аудио' + }, + ja: { + insertAudio: '音声の挿入' + }, + tr: { + insertAudio: 'Ses Ekle' + } + }, + plugins: { + insertAudio: { + init: function (trumbowyg) { + var btnDef = { + fn: function () { + var insertAudioCallback = function (v) { + // controls should always be show otherwise the audio will + // be invisible defeating the point of a wysiwyg + var html = '<audio controls'; + if (v.src) { + html += ' src=\'' + v.src + '\''; + } + if (v.autoplay) { + html += ' autoplay'; + } + if (v.muted) { + html += ' muted'; + } + if (v.preload) { + html += ' preload=\'' + v + '\''; + } + html += '></audio>'; + var node = $(html)[0]; + trumbowyg.range.deleteContents(); + trumbowyg.range.insertNode(node); + return true; + }; + + trumbowyg.openModalInsert(trumbowyg.lang.insertAudio, insertAudioOptions, insertAudioCallback); + } + }; + + trumbowyg.addBtnDef('insertAudio', btnDef); + } + } + } + }); +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.min.js b/modules/editor/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.min.js @@ -0,0 +1 @@ +!function(e){"use strict";var r={src:{label:"URL",required:!0},autoplay:{label:"AutoPlay",required:!1,type:"checkbox"},muted:{label:"Muted",required:!1,type:"checkbox"},preload:{label:"preload options",required:!1}};e.extend(!0,e.trumbowyg,{langs:{en:{insertAudio:"Insert Audio"},fr:{insertAudio:"Insérer un son"},ru:{insertAudio:"Вставить аудио"},ja:{insertAudio:"音声の挿入"},tr:{insertAudio:"Ses Ekle"}},plugins:{insertAudio:{init:function(n){var t={fn:function(){var t=function(r){var t="<audio controls";r.src&&(t+=" src='"+r.src+"'"),r.autoplay&&(t+=" autoplay"),r.muted&&(t+=" muted"),r.preload&&(t+=" preload='"+r+"'"),t+="></audio>";var o=e(t)[0];return n.range.deleteContents(),n.range.insertNode(o),!0};n.openModalInsert(n.lang.insertAudio,r,t)}};n.addBtnDef("insertAudio",t)}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/lineheight/trumbowyg.lineheight.js b/modules/editor/trumbowyg/plugins/lineheight/trumbowyg.lineheight.js @@ -0,0 +1,104 @@ +(function ($) { + 'use strict'; + + $.extend(true, $.trumbowyg, { + langs: { + // jshint camelcase:false + en: { + lineheight: 'Line height', + lineheights: { + '0.9': 'Small', + 'normal': 'Regular', + '1.5': 'Large', + '2.0': 'Extra large' + } + }, + fr: { + lineheight: 'Hauteur de ligne', + lineheights: { + '0.9': 'Petit', + 'normal': 'Regular', + '1.5': 'Grand', + '2.0': 'Très grand' + } + }, + nl: { + lineheight: 'Regelhoogte', + lineheights: { + '0.9': 'Klein', + 'normal': 'Normaal', + '1.5': 'Groot', + '2.0': 'Extra groot' + } + }, + tr: { + lineheight: 'Satır yüksekliği', + lineheights: { + '0.9': 'Küçük', + 'normal': 'Normal', + '1.5': 'Büyük', + '2.0': 'Çok Büyük' + } + } + } + }); + // jshint camelcase:true + + // Add dropdown with font sizes + $.extend(true, $.trumbowyg, { + plugins: { + lineheight: { + init: function (trumbowyg) { + trumbowyg.addBtnDef('lineheight', { + dropdown: buildDropdown(trumbowyg) + }); + } + } + } + }); + + // Build the dropdown + function buildDropdown(trumbowyg) { + var dropdown = []; + var sizes = ['0.9', 'normal', '1.5', '2.0']; + + $.each(sizes, function(index, size) { + trumbowyg.addBtnDef('lineheight_' + size, { + text: '<span style="line-height: ' + size + ';">' + trumbowyg.lang.lineheights[size] + '</span>', + hasIcon: false, + fn: function(){ + trumbowyg.saveRange(); + var text = trumbowyg.getRangeText(); + if (text.replace(/\s/g, '') !== '') { + try { + var parent = getSelectionParentElement(); + $(parent).css('lineHeight', size); + } catch (e) { + } + } + } + }); + dropdown.push('lineheight_' + size); + }); + + return dropdown; + } + + // Get the selection's parent + function getSelectionParentElement() { + var parentEl = null, + selection; + if (window.getSelection) { + selection = window.getSelection(); + if (selection.rangeCount) { + parentEl = selection.getRangeAt(0).commonAncestorContainer; + if (parentEl.nodeType !== 1) { + parentEl = parentEl.parentNode; + } + } + } else if ((selection = document.selection) && selection.type !== 'Control') { + parentEl = selection.createRange().parentElement(); + } + return parentEl; + } +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/lineheight/trumbowyg.lineheight.min.js b/modules/editor/trumbowyg/plugins/lineheight/trumbowyg.lineheight.min.js @@ -0,0 +1 @@ +!function(e){"use strict";function n(n){var i=[],l=["0.9","normal","1.5","2.0"];return e.each(l,function(l,r){n.addBtnDef("lineheight_"+r,{text:'<span style="line-height: '+r+';">'+n.lang.lineheights[r]+"</span>",hasIcon:!1,fn:function(){n.saveRange();var i=n.getRangeText();if(""!==i.replace(/\s/g,""))try{var l=t();e(l).css("lineHeight",r)}catch(a){}}}),i.push("lineheight_"+r)}),i}function t(){var e,n=null;return window.getSelection?(e=window.getSelection(),e.rangeCount&&(n=e.getRangeAt(0).commonAncestorContainer,1!==n.nodeType&&(n=n.parentNode))):(e=document.selection)&&"Control"!==e.type&&(n=e.createRange().parentElement()),n}e.extend(!0,e.trumbowyg,{langs:{en:{lineheight:"Line height",lineheights:{.9:"Small",normal:"Regular",1.5:"Large","2.0":"Extra large"}},fr:{lineheight:"Hauteur de ligne",lineheights:{.9:"Petit",normal:"Regular",1.5:"Grand","2.0":"Très grand"}},nl:{lineheight:"Regelhoogte",lineheights:{.9:"Klein",normal:"Normaal",1.5:"Groot","2.0":"Extra groot"}},tr:{lineheight:"Satır yüksekliği",lineheights:{.9:"Küçük",normal:"Normal",1.5:"Büyük","2.0":"Çok Büyük"}}}}),e.extend(!0,e.trumbowyg,{plugins:{lineheight:{init:function(e){e.addBtnDef("lineheight",{dropdown:n(e)})}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/mathml/trumbowyg.mathml.js b/modules/editor/trumbowyg/plugins/mathml/trumbowyg.mathml.js @@ -0,0 +1,88 @@ +/* =========================================================== + * trumbowyg.mathMl.js v1.0 + * MathML plugin for Trumbowyg + * https://github.com/loclamor/Trumbowyg/tree/mathml-plugin/plugins/mathml + * =========================================================== + * Author : loclamor + */ + +/* globals MathJax */ +(function($) { + 'use strict'; + $.extend(true, $.trumbowyg, { + langs: { + en: { + mathml: 'Insert Formulas', + formulas: 'Formulas', + inline: 'Inline' + }, + fr: { + mathml: 'Inserer une formule', + formulas: 'Formule', + inline: 'En ligne' + }, + tr: { + mathml: 'Formül Ekle', + formulas: 'Formüller', + inline: 'Satır içi' + } + }, + plugins: { + mathml: { + init: function(trumbowyg) { + var btnDef = { + fn: function() { + trumbowyg.saveRange(); + var mathMLoptions = { + formulas: { + label: trumbowyg.lang.formulas, + required: true, + value: '' + }, + inline: { + label: trumbowyg.lang.inline, + attributes: { + checked: true + }, + type: 'checkbox', + required: false, + } + }; + + var mathmlCallback = function(v) { + var delimitor = v.inline ? '$' : '$$'; + if (trumbowyg.currentMathNode) { + $(trumbowyg.currentMathNode).html(delimitor + ' ' + v.formulas + ' ' + delimitor).attr('formulas', v.formulas).attr('inline', (v.inline ? 'true' : 'false')); + } else { + var html = '<span class="mathMlContainer" contenteditable="false" formulas="' + v.formulas + '" inline="' + (v.inline ? 'true' : 'false') + '" >' + delimitor + ' ' + v.formulas + ' ' + delimitor + '</span>'; + var node = $(html)[0]; + node.onclick = function(e) { + trumbowyg.currentMathNode = this; + mathMLoptions.formulas.value = $(this).attr('formulas'); + if ($(this).attr('inline') === "true") { + mathMLoptions.inline.attributes.checked = true; + } else { + delete mathMLoptions.inline.attributes.checked; + } + trumbowyg.openModalInsert(trumbowyg.lang.mathml, mathMLoptions, mathmlCallback); + }; + trumbowyg.range.deleteContents(); + trumbowyg.range.insertNode(node); + } + + trumbowyg.currentMathNode = false; + MathJax.Hub.Queue(['Typeset', MathJax.Hub]); + return true; + }; + + mathMLoptions.formulas.value = trumbowyg.getRangeText(); + mathMLoptions.inline.attributes.checked = true; + trumbowyg.openModalInsert(trumbowyg.lang.mathml, mathMLoptions, mathmlCallback); + } + }; + trumbowyg.addBtnDef('mathml', btnDef); + } + } + } + }); +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/mathml/trumbowyg.mathml.min.js b/modules/editor/trumbowyg/plugins/mathml/trumbowyg.mathml.min.js @@ -0,0 +1 @@ +!function(e){"use strict";e.extend(!0,e.trumbowyg,{langs:{en:{mathml:"Insert Formulas",formulas:"Formulas",inline:"Inline"},fr:{mathml:"Inserer une formule",formulas:"Formule",inline:"En ligne"},tr:{mathml:"Formül Ekle",formulas:"Formüller",inline:"Satır içi"}},plugins:{mathml:{init:function(n){var t={fn:function(){n.saveRange();var t={formulas:{label:n.lang.formulas,required:!0,value:""},inline:{label:n.lang.inline,attributes:{checked:!0},type:"checkbox",required:!1}},a=function(l){var r=l.inline?"$":"$$";if(n.currentMathNode)e(n.currentMathNode).html(r+" "+l.formulas+" "+r).attr("formulas",l.formulas).attr("inline",l.inline?"true":"false");else{var i='<span class="mathMlContainer" contenteditable="false" formulas="'+l.formulas+'" inline="'+(l.inline?"true":"false")+'" >'+r+" "+l.formulas+" "+r+"</span>",u=e(i)[0];u.onclick=function(l){n.currentMathNode=this,t.formulas.value=e(this).attr("formulas"),"true"===e(this).attr("inline")?t.inline.attributes.checked=!0:delete t.inline.attributes.checked,n.openModalInsert(n.lang.mathml,t,a)},n.range.deleteContents(),n.range.insertNode(u)}return n.currentMathNode=!1,MathJax.Hub.Queue(["Typeset",MathJax.Hub]),!0};t.formulas.value=n.getRangeText(),t.inline.attributes.checked=!0,n.openModalInsert(n.lang.mathml,t,a)}};n.addBtnDef("mathml",t)}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/mathml/ui/sass/trumbowyg.mathml.scss b/modules/editor/trumbowyg/plugins/mathml/ui/sass/trumbowyg.mathml.scss @@ -0,0 +1,36 @@ +/** + * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor + * Default stylesheet for Trumbowyg editor plugin + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +.mathMlContainer { + + position: relative; + + &[inline="false"] { + display: block; + width: 100%; + } + + &:hover { + pointer-events: none; + &:after { + content: '\270E'; + pointer-events: auto; + position: absolute; + left: 0px; + top: 0px; + background-color: #ffffffd4; + cursor: pointer; + bottom: 0px; + right: 0px; + box-shadow: 0 0 5px 5px #ffffffd4; + } + } +} diff --git a/modules/editor/trumbowyg/plugins/mathml/ui/trumbowyg.mathml.css b/modules/editor/trumbowyg/plugins/mathml/ui/trumbowyg.mathml.css @@ -0,0 +1,29 @@ +/** + * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor + * Trumbowyg plugin stylesheet + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +.mathMlContainer { + position: relative; } + .mathMlContainer[inline="false"] { + display: block; + width: 100%; } + .mathMlContainer:hover { + pointer-events: none; } + .mathMlContainer:hover:after { + content: '\270E'; + pointer-events: auto; + position: absolute; + left: 0px; + top: 0px; + background-color: #ffffffd4; + cursor: pointer; + bottom: 0px; + right: 0px; + box-shadow: 0 0 5px 5px #ffffffd4; } diff --git a/modules/editor/trumbowyg/plugins/mathml/ui/trumbowyg.mathml.min.css b/modules/editor/trumbowyg/plugins/mathml/ui/trumbowyg.mathml.min.css @@ -0,0 +1,2 @@ +/** Trumbowyg v2.10.0 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */ +.mathMlContainer{position:relative}.mathMlContainer[inline=false]{display:block;width:100%}.mathMlContainer:hover{pointer-events:none}.mathMlContainer:hover:after{content:'\270E';pointer-events:auto;position:absolute;left:0;top:0;background-color:#fffd4;cursor:pointer;bottom:0;right:0;box-shadow:0 0 5px 5px #fffd4}+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/mention/trumbowyg.mention.js b/modules/editor/trumbowyg/plugins/mention/trumbowyg.mention.js @@ -0,0 +1,105 @@ +/* =========================================================== + * trumbowyg.mention.js v0.1 + * Mention plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Viper + * Github: https://github.com/Globulopolis + * Website: http://киноархив.com + */ + +(function ($) { + 'use strict'; + + var defaultOptions = { + source: '', + formatDropdownItem: formatDropdownItem, + formatResult: formatResult + }; + + $.extend(true, $.trumbowyg, { + langs: { + en: { + mention: 'Mention' + }, + fr: { + mention: 'Mentioner' + }, + ru: { + mention: 'Упомянуть' + }, + tr: { + mention: 'Bahset' + } + }, + + plugins: { + mention: { + init: function (trumbowyg) { + trumbowyg.o.plugins.mention = $.extend(true, {}, defaultOptions, trumbowyg.o.plugins.mention || {}); + + var btnDef = { + dropdown: buildDropdown(trumbowyg.o.plugins.mention.source, trumbowyg) + }; + + trumbowyg.addBtnDef('mention', btnDef); + } + } + } + }); + + /** + * Build dropdown list + * + * @param {Array} items Items + * @param {object} trumbowyg Editor + * + * @return {Array} + */ + function buildDropdown(items, trumbowyg) { + var dropdown = []; + + // Check if source is an array + if (items.constructor === Array) { + $.each(items, function (i, item) { + var btn = 'mention-' + i, + btnDef = { + hasIcon: false, + text: trumbowyg.o.plugins.mention.formatDropdownItem(item), + fn: function () { + trumbowyg.execCmd('insertHTML', trumbowyg.o.plugins.mention.formatResult(item)); + + return true; + } + }; + + trumbowyg.addBtnDef(btn, btnDef); + dropdown.push(btn); + }); + } + + return dropdown; + } + + /** + * Format item in dropdown. + * + * @param {object} item Item object. + * + * @return {string} + */ + function formatDropdownItem(item) { + return item.login; + } + + /** + * Format result pasted in editor. + * + * @param {object} item Item object. + * + * @return {string} + */ + function formatResult(item) { + return '@' + item.login + ' '; + } +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/mention/trumbowyg.mention.min.js b/modules/editor/trumbowyg/plugins/mention/trumbowyg.mention.min.js @@ -0,0 +1 @@ +!function(n){"use strict";function t(t,o){var e=[];return t.constructor===Array&&n.each(t,function(n,t){var i="mention-"+n,r={hasIcon:!1,text:o.o.plugins.mention.formatDropdownItem(t),fn:function(){return o.execCmd("insertHTML",o.o.plugins.mention.formatResult(t)),!0}};o.addBtnDef(i,r),e.push(i)}),e}function o(n){return n.login}function e(n){return"@"+n.login+" "}var i={source:"",formatDropdownItem:o,formatResult:e};n.extend(!0,n.trumbowyg,{langs:{en:{mention:"Mention"},fr:{mention:"Mentioner"},ru:{mention:"Упомянуть"},tr:{mention:"Bahset"}},plugins:{mention:{init:function(o){o.o.plugins.mention=n.extend(!0,{},i,o.o.plugins.mention||{});var e={dropdown:t(o.o.plugins.mention.source,o)};o.addBtnDef("mention",e)}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/mention/ui/sass/trumbowyg.mention.scss b/modules/editor/trumbowyg/plugins/mention/ui/sass/trumbowyg.mention.scss @@ -0,0 +1,39 @@ +/** + * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor + * Default stylesheet for Trumbowyg editor plugin + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +.trumbowyg-dropdown-mention { + height: calc(75%); + width: 300px; + max-width: 300px; + overflow-y: scroll; + overflow-x: hidden; + + svg { + display: none !important; + } + + button { + position: relative; + white-space: nowrap; + + &:after { + content: ""; + position: absolute; + top: 0; + right: 0; + width: 15%; + height: 100%; + background-size: 100%; + background-image: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, #ffffff 80%, #ffffff 100%); + pointer-events: none; + } + } +} diff --git a/modules/editor/trumbowyg/plugins/mention/ui/trumbowyg.mention.css b/modules/editor/trumbowyg/plugins/mention/ui/trumbowyg.mention.css @@ -0,0 +1,32 @@ +/** + * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor + * Trumbowyg plugin stylesheet + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +.trumbowyg-dropdown-mention { + height: calc(75%); + width: 300px; + max-width: 300px; + overflow-y: scroll; + overflow-x: hidden; } + .trumbowyg-dropdown-mention svg { + display: none !important; } + .trumbowyg-dropdown-mention button { + position: relative; + white-space: nowrap; } + .trumbowyg-dropdown-mention button:after { + content: ""; + position: absolute; + top: 0; + right: 0; + width: 15%; + height: 100%; + background-size: 100%; + background-image: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, #ffffff 80%, #ffffff 100%); + pointer-events: none; } diff --git a/modules/editor/trumbowyg/plugins/mention/ui/trumbowyg.mention.min.css b/modules/editor/trumbowyg/plugins/mention/ui/trumbowyg.mention.min.css @@ -0,0 +1,2 @@ +/** Trumbowyg v2.10.0 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */ +.trumbowyg-dropdown-mention{height:calc(75%);width:300px;max-width:300px;overflow-y:scroll;overflow-x:hidden}.trumbowyg-dropdown-mention svg{display:none!important}.trumbowyg-dropdown-mention button{position:relative;white-space:nowrap}.trumbowyg-dropdown-mention button:after{content:"";position:absolute;top:0;right:0;width:15%;height:100%;background-size:100%;background-image:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 80%,#fff 100%);pointer-events:none}+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/noembed/trumbowyg.noembed.js b/modules/editor/trumbowyg/plugins/noembed/trumbowyg.noembed.js @@ -0,0 +1,104 @@ +/* =========================================================== + * trumbowyg.noembed.js v1.0 + * noEmbed plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Jake Johns (jakejohns) + */ + +(function ($) { + 'use strict'; + + var defaultOptions = { + proxy: 'https://noembed.com/embed?nowrap=on', + urlFiled: 'url', + data: [], + success: undefined, + error: undefined + }; + + $.extend(true, $.trumbowyg, { + langs: { + en: { + noembed: 'Noembed', + noembedError: 'Error' + }, + sk: { + noembedError: 'Chyba' + }, + fr: { + noembedError: 'Erreur' + }, + cs: { + noembedError: 'Chyba' + }, + ru: { + noembedError: 'Ошибка' + }, + ja: { + noembedError: 'エラー' + }, + tr: { + noembedError: 'Hata' + } + }, + + plugins: { + noembed: { + init: function (trumbowyg) { + trumbowyg.o.plugins.noembed = $.extend(true, {}, defaultOptions, trumbowyg.o.plugins.noembed || {}); + + var btnDef = { + fn: function () { + var $modal = trumbowyg.openModalInsert( + // Title + trumbowyg.lang.noembed, + + // Fields + { + url: { + label: 'URL', + required: true + } + }, + + // Callback + function (data) { + $.ajax({ + url: trumbowyg.o.plugins.noembed.proxy, + type: 'GET', + data: data, + cache: false, + dataType: 'json', + + success: trumbowyg.o.plugins.noembed.success || function (data) { + if (data.html) { + trumbowyg.execCmd('insertHTML', data.html); + setTimeout(function () { + trumbowyg.closeModal(); + }, 250); + } else { + trumbowyg.addErrorOnModalField( + $('input[type=text]', $modal), + data.error + ); + } + }, + error: trumbowyg.o.plugins.noembed.error || function () { + trumbowyg.addErrorOnModalField( + $('input[type=text]', $modal), + trumbowyg.lang.noembedError + ); + } + }); + } + ); + } + }; + + trumbowyg.addBtnDef('noembed', btnDef); + } + } + } + }); +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/noembed/trumbowyg.noembed.min.js b/modules/editor/trumbowyg/plugins/noembed/trumbowyg.noembed.min.js @@ -0,0 +1 @@ +!function(e){"use strict";var r={proxy:"https://noembed.com/embed?nowrap=on",urlFiled:"url",data:[],success:void 0,error:void 0};e.extend(!0,e.trumbowyg,{langs:{en:{noembed:"Noembed",noembedError:"Error"},sk:{noembedError:"Chyba"},fr:{noembedError:"Erreur"},cs:{noembedError:"Chyba"},ru:{noembedError:"Ошибка"},ja:{noembedError:"エラー"},tr:{noembedError:"Hata"}},plugins:{noembed:{init:function(o){o.o.plugins.noembed=e.extend(!0,{},r,o.o.plugins.noembed||{});var n={fn:function(){var r=o.openModalInsert(o.lang.noembed,{url:{label:"URL",required:!0}},function(n){e.ajax({url:o.o.plugins.noembed.proxy,type:"GET",data:n,cache:!1,dataType:"json",success:o.o.plugins.noembed.success||function(n){n.html?(o.execCmd("insertHTML",n.html),setTimeout(function(){o.closeModal()},250)):o.addErrorOnModalField(e("input[type=text]",r),n.error)},error:o.o.plugins.noembed.error||function(){o.addErrorOnModalField(e("input[type=text]",r),o.lang.noembedError)}})})}};o.addBtnDef("noembed",n)}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/pasteembed/trumbowyg.pasteembed.js b/modules/editor/trumbowyg/plugins/pasteembed/trumbowyg.pasteembed.js @@ -0,0 +1,96 @@ +/* =========================================================== + * trumbowyg.pasteembed.js v1.0 + * Url paste to iframe with noembed. Plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Max Seelig + * Facebook : https://facebook.com/maxse + * Website : https://www.maxmade.nl/ + */ + +(function($) { + 'use strict'; + + var defaultOptions = { + enabled: true, + endpoints: [ + 'https://noembed.com/embed?nowrap=on', + 'https://api.maxmade.nl/url2iframe/embed' + ] + }; + + $.extend(true, $.trumbowyg, { + plugins: { + pasteEmbed: { + init: function(trumbowyg) { + trumbowyg.o.plugins.pasteEmbed = $.extend(true, {}, defaultOptions, trumbowyg.o.plugins.pasteEmbed || {}); + + if (!trumbowyg.o.plugins.pasteEmbed.enabled) { + return; + } + + trumbowyg.pasteHandlers.push(function(pasteEvent) { + try { + var clipboardData = (pasteEvent.originalEvent || pasteEvent).clipboardData, + pastedData = clipboardData.getData('Text'), + endpoints = trumbowyg.o.plugins.pasteEmbed.endpoints, + request = null; + + if (pastedData.startsWith('http')) { + pasteEvent.stopPropagation(); + pasteEvent.preventDefault(); + + var query = { + url: pastedData.trim() + }; + var content = ''; + var index = 0; + + if (request && request.transport) { + request.transport.abort(); + } + + request = $.ajax({ + crossOrigin: true, + url: endpoints[index], + type: 'GET', + data: query, + cache: false, + dataType: 'jsonp', + success: function(res) { + if (res.html) { + index = 0; + content = res.html; + } else { + index += 1; + } + }, + error: function() { + index += 1; + }, + complete: function() { + if (content.length === 0 && index < endpoints.length - 1) { + this.url = endpoints[index]; + this.data = query; + $.ajax(this); + } + if (index === endpoints.length - 1) { + content = $('<a>', { + href: pastedData, + text: pastedData + }).prop('outerHTML'); + } + if (content.length > 0) { + index = 0; + trumbowyg.execCmd('insertHTML', content); + } + } + }); + } + } catch (c) {} + }); + } + } + } + }); +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/pasteembed/trumbowyg.pasteembed.min.js b/modules/editor/trumbowyg/plugins/pasteembed/trumbowyg.pasteembed.min.js @@ -0,0 +1 @@ +!function(t){"use strict";var e={enabled:!0,endpoints:["https://noembed.com/embed?nowrap=on","https://api.maxmade.nl/url2iframe/embed"]};t.extend(!0,t.trumbowyg,{plugins:{pasteEmbed:{init:function(n){n.o.plugins.pasteEmbed=t.extend(!0,{},e,n.o.plugins.pasteEmbed||{}),n.o.plugins.pasteEmbed.enabled&&n.pasteHandlers.push(function(e){try{var a=(e.originalEvent||e).clipboardData,r=a.getData("Text"),s=n.o.plugins.pasteEmbed.endpoints,i=null;if(r.startsWith("http")){e.stopPropagation(),e.preventDefault();var o={url:r.trim()},p="",l=0;i&&i.transport&&i.transport.abort(),i=t.ajax({crossOrigin:!0,url:s[l],type:"GET",data:o,cache:!1,dataType:"jsonp",success:function(t){t.html?(l=0,p=t.html):l+=1},error:function(){l+=1},complete:function(){0===p.length&&l<s.length-1&&(this.url=s[l],this.data=o,t.ajax(this)),l===s.length-1&&(p=t("<a>",{href:r,text:r}).prop("outerHTML")),p.length>0&&(l=0,n.execCmd("insertHTML",p))}})}}catch(u){}})}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/pasteimage/trumbowyg.pasteimage.js b/modules/editor/trumbowyg/plugins/pasteimage/trumbowyg.pasteimage.js @@ -0,0 +1,41 @@ +/* =========================================================== + * trumbowyg.pasteimage.js v1.0 + * Basic base64 paste plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +(function ($) { + 'use strict'; + + $.extend(true, $.trumbowyg, { + plugins: { + pasteImage: { + init: function (trumbowyg) { + trumbowyg.pasteHandlers.push(function (pasteEvent) { + try { + var items = (pasteEvent.originalEvent || pasteEvent).clipboardData.items, + reader; + + for (var i = items.length - 1; i >= 0; i -= 1) { + if (items[i].type.match(/^image\//)) { + reader = new FileReader(); + /* jshint -W083 */ + reader.onloadend = function (event) { + trumbowyg.execCmd('insertImage', event.target.result, undefined, true); + }; + /* jshint +W083 */ + reader.readAsDataURL(items[i].getAsFile()); + } + } + } catch (c) { + } + }); + } + } + } + }); +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/pasteimage/trumbowyg.pasteimage.min.js b/modules/editor/trumbowyg/plugins/pasteimage/trumbowyg.pasteimage.min.js @@ -0,0 +1 @@ +!function(e){"use strict";e.extend(!0,e.trumbowyg,{plugins:{pasteImage:{init:function(e){e.pasteHandlers.push(function(t){try{for(var a,n=(t.originalEvent||t).clipboardData.items,i=n.length-1;i>=0;i-=1)n[i].type.match(/^image\//)&&(a=new FileReader,a.onloadend=function(t){e.execCmd("insertImage",t.target.result,void 0,!0)},a.readAsDataURL(n[i].getAsFile()))}catch(r){}})}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/preformatted/trumbowyg.preformatted.js b/modules/editor/trumbowyg/plugins/preformatted/trumbowyg.preformatted.js @@ -0,0 +1,130 @@ +/* =========================================================== + * trumbowyg.preformatted.js v1.0 + * Preformatted plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Casella Edoardo (Civile) + */ + + +(function ($) { + 'use strict'; + + $.extend(true, $.trumbowyg, { + langs: { + // jshint camelcase:false + en: { + preformatted: 'Code sample <pre>' + }, + fr: { + preformatted: 'Exemple de code <pre>' + }, + it: { + preformatted: 'Codice <pre>' + }, + zh_cn: { + preformatted: '代码示例 <pre>' + }, + ru: { + preformatted: 'Пример кода <pre>' + }, + ja: { + preformatted: 'コードサンプル <pre>' + }, + tr: { + preformatted: 'Kod örneği <pre>' + } + }, + // jshint camelcase:true + + plugins: { + preformatted: { + init: function (trumbowyg) { + var btnDef = { + fn: function () { + trumbowyg.saveRange(); + var text = trumbowyg.getRangeText(); + if (text.replace(/\s/g, '') !== '') { + try { + var curtag = getSelectionParentElement().tagName.toLowerCase(); + if (curtag === 'code' || curtag === 'pre') { + return unwrapCode(); + } + else { + trumbowyg.execCmd('insertHTML', '<pre><code>' + strip(text) + '</code></pre>'); + } + } catch (e) { + } + } + }, + tag: 'pre' + }; + + trumbowyg.addBtnDef('preformatted', btnDef); + } + } + } + }); + + /* + * GetSelectionParentElement + */ + function getSelectionParentElement() { + var parentEl = null, + selection; + + if (window.getSelection) { + selection = window.getSelection(); + if (selection.rangeCount) { + parentEl = selection.getRangeAt(0).commonAncestorContainer; + if (parentEl.nodeType !== 1) { + parentEl = parentEl.parentNode; + } + } + } else if ((selection = document.selection) && selection.type !== 'Control') { + parentEl = selection.createRange().parentElement(); + } + + return parentEl; + } + + /* + * Strip + * returns a text without HTML tags + */ + function strip(html) { + var tmp = document.createElement('DIV'); + tmp.innerHTML = html; + return tmp.textContent || tmp.innerText || ''; + } + + /* + * UnwrapCode + * ADD/FIX: to improve, works but can be better + * "paranoic" solution + */ + function unwrapCode() { + var container = null; + + if (document.selection) { //for IE + container = document.selection.createRange().parentElement(); + } else { + var select = window.getSelection(); + if (select.rangeCount > 0) { + container = select.getRangeAt(0).startContainer.parentNode; + } + } + + //'paranoic' unwrap + var ispre = $(container).contents().closest('pre').length; + var iscode = $(container).contents().closest('code').length; + + if (ispre && iscode) { + $(container).contents().unwrap('code').unwrap('pre'); + } else if (ispre) { + $(container).contents().unwrap('pre'); + } else if (iscode) { + $(container).contents().unwrap('code'); + } + } +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/preformatted/trumbowyg.preformatted.min.js b/modules/editor/trumbowyg/plugins/preformatted/trumbowyg.preformatted.min.js @@ -0,0 +1 @@ +!function(e){"use strict";function t(){var e,t=null;return window.getSelection?(e=window.getSelection(),e.rangeCount&&(t=e.getRangeAt(0).commonAncestorContainer,1!==t.nodeType&&(t=t.parentNode))):(e=document.selection)&&"Control"!==e.type&&(t=e.createRange().parentElement()),t}function n(e){var t=document.createElement("DIV");return t.innerHTML=e,t.textContent||t.innerText||""}function r(){var t=null;if(document.selection)t=document.selection.createRange().parentElement();else{var n=window.getSelection();n.rangeCount>0&&(t=n.getRangeAt(0).startContainer.parentNode)}var r=e(t).contents().closest("pre").length,o=e(t).contents().closest("code").length;r&&o?e(t).contents().unwrap("code").unwrap("pre"):r?e(t).contents().unwrap("pre"):o&&e(t).contents().unwrap("code")}e.extend(!0,e.trumbowyg,{langs:{en:{preformatted:"Code sample <pre>"},fr:{preformatted:"Exemple de code <pre>"},it:{preformatted:"Codice <pre>"},zh_cn:{preformatted:"代码示例 <pre>"},ru:{preformatted:"Пример кода <pre>"},ja:{preformatted:"コードサンプル <pre>"},tr:{preformatted:"Kod örneği <pre>"}},plugins:{preformatted:{init:function(e){var o={fn:function(){e.saveRange();var o=e.getRangeText();if(""!==o.replace(/\s/g,""))try{var a=t().tagName.toLowerCase();if("code"===a||"pre"===a)return r();e.execCmd("insertHTML","<pre><code>"+n(o)+"</code></pre>")}catch(c){}},tag:"pre"};e.addBtnDef("preformatted",o)}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/resizimg/trumbowyg.resizimg.js b/modules/editor/trumbowyg/plugins/resizimg/trumbowyg.resizimg.js @@ -0,0 +1,69 @@ +(function ($) { + 'use strict'; + + var defaultOptions = { + minSize: 32, + step: 4 + }; + + var preventDefault = function (ev) { + return ev.preventDefault(); + }; + + $.extend(true, $.trumbowyg, { + plugins: { + resizimg: { + init: function (trumbowyg) { + trumbowyg.o.plugins.resizimg = $.extend(true, {}, + defaultOptions, + trumbowyg.o.plugins.resizimg || {}, + { + resizable: { + resizeWidth: false, + onDragStart: function (ev, $el) { + var opt = trumbowyg.o.plugins.resizimg; + var x = ev.pageX - $el.offset().left; + var y = ev.pageY - $el.offset().top; + if (x < $el.width() - opt.minSize || y < $el.height() - opt.minSize) { + return false; + } + }, + onDrag: function (ev, $el, newWidth, newHeight) { + var opt = trumbowyg.o.plugins.resizimg; + if (newHeight < opt.minSize) { + newHeight = opt.minSize; + } + newHeight -= newHeight % opt.step; + $el.height(newHeight); + return false; + }, + onDragEnd: function () { + trumbowyg.$c.trigger('tbwchange'); + } + } + } + ); + + function initResizable() { + trumbowyg.$ed.find('img:not(.resizable)') + .resizable(trumbowyg.o.plugins.resizimg.resizable) + .on('mousedown', preventDefault); + } + + function destroyResizable() { + trumbowyg.$ed.find('img.resizable') + .resizable('destroy') + .off('mousedown', preventDefault); + trumbowyg.syncTextarea(); + } + + trumbowyg.$c.on('tbwinit', initResizable); + trumbowyg.$c.on('tbwfocus', initResizable); + trumbowyg.$c.on('tbwchange', initResizable); + trumbowyg.$c.on('tbwblur', destroyResizable); + trumbowyg.$c.on('tbwclose', destroyResizable); + } + } + } + }); +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/resizimg/trumbowyg.resizimg.min.js b/modules/editor/trumbowyg/plugins/resizimg/trumbowyg.resizimg.min.js @@ -0,0 +1 @@ +!function(i){"use strict";var e={minSize:32,step:4},n=function(i){return i.preventDefault()};i.extend(!0,i.trumbowyg,{plugins:{resizimg:{init:function(t){function o(){t.$ed.find("img:not(.resizable)").resizable(t.o.plugins.resizimg.resizable).on("mousedown",n)}function r(){t.$ed.find("img.resizable").resizable("destroy").off("mousedown",n),t.syncTextarea()}t.o.plugins.resizimg=i.extend(!0,{},e,t.o.plugins.resizimg||{},{resizable:{resizeWidth:!1,onDragStart:function(i,e){var n=t.o.plugins.resizimg,o=i.pageX-e.offset().left,r=i.pageY-e.offset().top;if(o<e.width()-n.minSize||r<e.height()-n.minSize)return!1},onDrag:function(i,e,n,o){var r=t.o.plugins.resizimg;return o<r.minSize&&(o=r.minSize),o-=o%r.step,e.height(o),!1},onDragEnd:function(){t.$c.trigger("tbwchange")}}}),t.$c.on("tbwinit",o),t.$c.on("tbwfocus",o),t.$c.on("tbwchange",o),t.$c.on("tbwblur",r),t.$c.on("tbwclose",r)}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/ruby/trumbowyg.ruby.js b/modules/editor/trumbowyg/plugins/ruby/trumbowyg.ruby.js @@ -0,0 +1,72 @@ +/* =========================================================== + * trumbowyg.ruby.js v1.0 + * Ruby text plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Fathi Anshory (0x00000F5C) + * Twitter : @fscchannl + * Comment : Since I use trumbowyg in my project and required it to insert ruby text, so I thought I can contribute a little. :D + */ + +(function ($) { + 'use strict'; + + $.extend(true, $.trumbowyg, { + langs: { + en: { + ruby: 'Add ruby text', + rubyModal: 'Ruby modal', + rubyText: 'Ruby text' + }, + fr: { + ruby: 'Ajouter du texte ruby', + rubyModal: 'Modale ruby', + rubyText: 'Texte ruby' + }, + id: { + ruby: 'Sisipkan teks ruby', + rubyModal: 'Modal teks ruby', + rubyText: 'Teks ruby' + }, + tr: { + ruby: 'Ruby metni ekle', + rubyModal: 'Ruby modal', + rubyText: 'Ruby metni' + } + }, + plugins: { + ruby: { + init: function (trumbowyg) { + var btnDef = { + fn: function () { + trumbowyg.saveRange(); + trumbowyg.openModalInsert( + trumbowyg.lang.ruby, + { + rubyText: { + label: trumbowyg.lang.rubyText, + required: false, + }, + modal: { + label: trumbowyg.lang.rubyModal, + value: trumbowyg.getRangeText(), + required: true + } + }, + function (v) { + var node = $('<ruby title="' + v.rubyText + '">' + v.modal + '<rp> (</rp><rt>' + v.rubyText + '</rt><rp>)</rp></ruby>')[0]; + trumbowyg.range.deleteContents(); + trumbowyg.range.insertNode(node); + trumbowyg.syncCode(); + trumbowyg.$c.trigger('tbwchange'); + return true; + } + ); + } + }; + trumbowyg.addBtnDef('ruby', btnDef); + } + } + } + }); +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/ruby/trumbowyg.ruby.min.js b/modules/editor/trumbowyg/plugins/ruby/trumbowyg.ruby.min.js @@ -0,0 +1 @@ +!function(e){"use strict";e.extend(!0,e.trumbowyg,{langs:{en:{ruby:"Add ruby text",rubyModal:"Ruby modal",rubyText:"Ruby text"},fr:{ruby:"Ajouter du texte ruby",rubyModal:"Modale ruby",rubyText:"Texte ruby"},id:{ruby:"Sisipkan teks ruby",rubyModal:"Modal teks ruby",rubyText:"Teks ruby"},tr:{ruby:"Ruby metni ekle",rubyModal:"Ruby modal",rubyText:"Ruby metni"}},plugins:{ruby:{init:function(r){var u={fn:function(){r.saveRange(),r.openModalInsert(r.lang.ruby,{rubyText:{label:r.lang.rubyText,required:!1},modal:{label:r.lang.rubyModal,value:r.getRangeText(),required:!0}},function(u){var t=e('<ruby title="'+u.rubyText+'">'+u.modal+"<rp> (</rp><rt>"+u.rubyText+"</rt><rp>)</rp></ruby>")[0];return r.range.deleteContents(),r.range.insertNode(t),r.syncCode(),r.$c.trigger("tbwchange"),!0})}};r.addBtnDef("ruby",u)}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/table/trumbowyg.table.js b/modules/editor/trumbowyg/plugins/table/trumbowyg.table.js @@ -0,0 +1,283 @@ +/* =========================================================== + * trumbowyg.table.custom.js v2.0 + * Table plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Sven Dunemann [dunemann@forelabs.eu] + */ + +(function ($) { + 'use strict'; + + var defaultOptions = { + rows: 8, + columns: 8, + styler: 'table' + }; + + $.extend(true, $.trumbowyg, { + langs: { + en: { + table: 'Insert table', + tableAddRow: 'Add row', + tableAddColumn: 'Add column', + tableDeleteRow: 'Delete row', + tableDeleteColumn: 'Delete column', + tableDestroy: 'Delete table', + error: 'Error' + }, + de: { + table: 'Tabelle einfügen', + tableAddRow: 'Zeile hinzufügen', + tableAddColumn: 'Spalte hinzufügen', + tableDeleteRow: 'Zeile löschen', + tableDeleteColumn: 'Spalte löschen', + tableDestroy: 'Tabelle löschen', + error: 'Error' + }, + sk: { + table: 'Vytvoriť tabuľky', + tableAddRow: 'Pridať riadok', + tableAddColumn: 'Pridať stĺpec', + error: 'Chyba' + }, + fr: { + table: 'Insérer un tableau', + tableAddRow: 'Ajouter des lignes', + tableAddColumn: 'Ajouter des colonnes', + error: 'Erreur' + }, + cs: { + table: 'Vytvořit příkaz Table', + tableAddRow: 'Přidat řádek', + tableAddColumn: 'Přidat sloupec', + error: 'Chyba' + }, + ru: { + table: 'Вставить таблицу', + tableAddRow: 'Добавить строки', + tableAddColumn: 'Добавить столбцы', + error: 'Ошибка' + }, + ja: { + table: '表の挿入', + tableAddRow: '行の追加', + tableAddColumn: '列の追加', + error: 'エラー' + }, + tr: { + table: 'Tablo ekle', + tableAddRow: 'Satır ekle', + tableAddColumn: 'Kolon ekle', + error: 'Hata' + } + }, + + plugins: { + table: { + init: function (t) { + t.o.plugins.table = $.extend(true, {}, defaultOptions, t.o.plugins.table || {}); + + var buildButtonDef = { + fn: function () { + t.saveRange(); + + var btnName = 'table'; + + var dropdownPrefix = t.o.prefix + 'dropdown', + dropdownOptions = { // the dropdown + class: dropdownPrefix + '-' + btnName + ' ' + dropdownPrefix + ' ' + t.o.prefix + 'fixed-top' + }; + dropdownOptions['data-' + dropdownPrefix] = btnName; + var $dropdown = $('<div/>', dropdownOptions); + + if (t.$box.find("." + dropdownPrefix + "-" + btnName).length === 0) { + t.$box.append($dropdown.hide()); + } else { + $dropdown = t.$box.find("." + dropdownPrefix + "-" + btnName); + } + + // clear dropdown + $dropdown.html(''); + + // when active table show AddRow / AddColumn + if (t.$box.find("." + t.o.prefix + "table-button").hasClass(t.o.prefix + 'active-button')) { + $dropdown.append(t.buildSubBtn('tableAddRow')); + $dropdown.append(t.buildSubBtn('tableAddColumn')); + $dropdown.append(t.buildSubBtn('tableDeleteRow')); + $dropdown.append(t.buildSubBtn('tableDeleteColumn')); + $dropdown.append(t.buildSubBtn('tableDestroy')); + } else { + var tableSelect = $('<table></table>'); + for (var i = 0; i < t.o.plugins.table.rows; i += 1) { + var row = $('<tr></tr>').appendTo(tableSelect); + for (var j = 0; j < t.o.plugins.table.columns; j += 1) { + $('<td></td>').appendTo(row); + } + } + tableSelect.find('td').on('mouseover', tableAnimate); + tableSelect.find('td').on('mousedown', tableBuild); + + $dropdown.append(tableSelect); + $dropdown.append($('<center>1x1</center>')); + } + + t.dropdown(btnName); + } + }; + + var tableAnimate = function(column_event) { + var column = $(column_event.target), + table = column.parents('table'), + colIndex = this.cellIndex, + rowIndex = this.parentNode.rowIndex; + + // reset all columns + table.find('td').removeClass('active'); + + for (var i = 0; i <= rowIndex; i += 1) { + for (var j = 0; j <= colIndex; j += 1) { + table.find("tr:nth-of-type("+(i+1)+")").find("td:nth-of-type("+(j+1)+")").addClass('active'); + } + } + + // set label + table.next('center').html((colIndex+1) + "x" + (rowIndex+1)); + }; + + var tableBuild = function(column_event) { + t.saveRange(); + + var tabler = $('<table></table>'); + if (t.o.plugins.table.styler) { + tabler.attr('class', t.o.plugins.table.styler); + } + + var column = $(column_event.target), + colIndex = this.cellIndex, + rowIndex = this.parentNode.rowIndex; + + for (var i = 0; i <= rowIndex; i += 1) { + var row = $('<tr></tr>').appendTo(tabler); + for (var j = 0; j <= colIndex; j += 1) { + $('<td></td>').appendTo(row); + } + } + + t.range.deleteContents(); + t.range.insertNode(tabler[0]); + t.$c.trigger('tbwchange'); + }; + + var addRow = { + title: t.lang['tableAddRow'], + text: t.lang['tableAddRow'], + ico: 'row-below', + + fn: function () { + t.saveRange(); + + var node = t.doc.getSelection().focusNode; + var table = $(node).closest('table'); + + if(table.length > 0) { + var row = $('<tr></tr>'); + // add columns according to current columns count + for (var i = 0; i < table.find('tr')[0].childElementCount; i += 1) { + $('<td></td>').appendTo(row); + } + // add row to table + row.appendTo(table); + } + + return true; + } + }; + + var addColumn = { + title: t.lang['tableAddColumn'], + text: t.lang['tableAddColumn'], + ico: 'col-right', + + fn: function () { + t.saveRange(); + + var node = t.doc.getSelection().focusNode; + var table = $(node).closest('table'); + + if(table.length > 0) { + $(table).find('tr').each(function() { + $(this).find('td:last').after('<td></td>'); + }); + } + + return true; + } + }; + + var destroy = { + title: t.lang['tableDestroy'], + text: t.lang['tableDestroy'], + ico: 'table-delete', + + fn: function () { + t.saveRange(); + + var node = t.doc.getSelection().focusNode, + table = $(node).closest('table'); + + table.remove(); + + return true; + } + }; + + var deleteRow = { + title: t.lang['tableDeleteRow'], + text: t.lang['tableDeleteRow'], + ico: 'row-delete', + + fn: function () { + t.saveRange(); + + var node = t.doc.getSelection().focusNode, + row = $(node).closest('tr'); + + row.remove(); + + return true; + } + }; + + var deleteColumn = { + title: t.lang['tableDeleteColumn'], + text: t.lang['tableDeleteColumn'], + ico: 'col-delete', + + fn: function () { + t.saveRange(); + + var node = t.doc.getSelection().focusNode, + table = $(node).closest('table'), + td = $(node).closest('td'), + cellIndex = td.index(); + + $(table).find('tr').each(function() { + $(this).find('td:eq('+cellIndex+')').remove(); + }); + + return true; + } + }; + + t.addBtnDef('table', buildButtonDef); + t.addBtnDef('tableAddRow', addRow); + t.addBtnDef('tableAddColumn', addColumn); + t.addBtnDef('tableDeleteRow', deleteRow); + t.addBtnDef('tableDeleteColumn', deleteColumn); + t.addBtnDef('tableDestroy', destroy); + } + } + } + }); +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/table/trumbowyg.table.min.js b/modules/editor/trumbowyg/plugins/table/trumbowyg.table.min.js @@ -0,0 +1 @@ +!function(e){"use strict";var t={rows:8,columns:8,styler:"table"};e.extend(!0,e.trumbowyg,{langs:{en:{table:"Insert table",tableAddRow:"Add row",tableAddColumn:"Add column",tableDeleteRow:"Delete row",tableDeleteColumn:"Delete column",tableDestroy:"Delete table",error:"Error"},de:{table:"Tabelle einfügen",tableAddRow:"Zeile hinzufügen",tableAddColumn:"Spalte hinzufügen",tableDeleteRow:"Zeile löschen",tableDeleteColumn:"Spalte löschen",tableDestroy:"Tabelle löschen",error:"Error"},sk:{table:"Vytvoriť tabuľky",tableAddRow:"Pridať riadok",tableAddColumn:"Pridať stĺpec",error:"Chyba"},fr:{table:"Insérer un tableau",tableAddRow:"Ajouter des lignes",tableAddColumn:"Ajouter des colonnes",error:"Erreur"},cs:{table:"Vytvořit příkaz Table",tableAddRow:"Přidat řádek",tableAddColumn:"Přidat sloupec",error:"Chyba"},ru:{table:"Вставить таблицу",tableAddRow:"Добавить строки",tableAddColumn:"Добавить столбцы",error:"Ошибка"},ja:{table:"表の挿入",tableAddRow:"行の追加",tableAddColumn:"列の追加",error:"エラー"},tr:{table:"Tablo ekle",tableAddRow:"Satır ekle",tableAddColumn:"Kolon ekle",error:"Hata"}},plugins:{table:{init:function(l){l.o.plugins.table=e.extend(!0,{},t,l.o.plugins.table||{});var a={fn:function(){l.saveRange();var t="table",a=l.o.prefix+"dropdown",d={"class":a+"-"+t+" "+a+" "+l.o.prefix+"fixed-top"};d["data-"+a]=t;var r=e("<div/>",d);if(0===l.$box.find("."+a+"-"+t).length?l.$box.append(r.hide()):r=l.$box.find("."+a+"-"+t),r.html(""),l.$box.find("."+l.o.prefix+"table-button").hasClass(l.o.prefix+"active-button"))r.append(l.buildSubBtn("tableAddRow")),r.append(l.buildSubBtn("tableAddColumn")),r.append(l.buildSubBtn("tableDeleteRow")),r.append(l.buildSubBtn("tableDeleteColumn")),r.append(l.buildSubBtn("tableDestroy"));else{for(var b=e("<table></table>"),i=0;i<l.o.plugins.table.rows;i+=1)for(var s=e("<tr></tr>").appendTo(b),u=0;u<l.o.plugins.table.columns;u+=1)e("<td></td>").appendTo(s);b.find("td").on("mouseover",n),b.find("td").on("mousedown",o),r.append(b),r.append(e("<center>1x1</center>"))}l.dropdown(t)}},n=function(t){var l=e(t.target),a=l.parents("table"),n=this.cellIndex,o=this.parentNode.rowIndex;a.find("td").removeClass("active");for(var d=0;d<=o;d+=1)for(var r=0;r<=n;r+=1)a.find("tr:nth-of-type("+(d+1)+")").find("td:nth-of-type("+(r+1)+")").addClass("active");a.next("center").html(n+1+"x"+(o+1))},o=function(t){l.saveRange();var a=e("<table></table>");l.o.plugins.table.styler&&a.attr("class",l.o.plugins.table.styler);for(var n=(e(t.target),this.cellIndex),o=this.parentNode.rowIndex,d=0;d<=o;d+=1)for(var r=e("<tr></tr>").appendTo(a),b=0;b<=n;b+=1)e("<td></td>").appendTo(r);l.range.deleteContents(),l.range.insertNode(a[0]),l.$c.trigger("tbwchange")},d={title:l.lang.tableAddRow,text:l.lang.tableAddRow,ico:"row-below",fn:function(){l.saveRange();var t=l.doc.getSelection().focusNode,a=e(t).closest("table");if(a.length>0){for(var n=e("<tr></tr>"),o=0;o<a.find("tr")[0].childElementCount;o+=1)e("<td></td>").appendTo(n);n.appendTo(a)}return!0}},r={title:l.lang.tableAddColumn,text:l.lang.tableAddColumn,ico:"col-right",fn:function(){l.saveRange();var t=l.doc.getSelection().focusNode,a=e(t).closest("table");return a.length>0&&e(a).find("tr").each(function(){e(this).find("td:last").after("<td></td>")}),!0}},b={title:l.lang.tableDestroy,text:l.lang.tableDestroy,ico:"table-delete",fn:function(){l.saveRange();var t=l.doc.getSelection().focusNode,a=e(t).closest("table");return a.remove(),!0}},i={title:l.lang.tableDeleteRow,text:l.lang.tableDeleteRow,ico:"row-delete",fn:function(){l.saveRange();var t=l.doc.getSelection().focusNode,a=e(t).closest("tr");return a.remove(),!0}},s={title:l.lang.tableDeleteColumn,text:l.lang.tableDeleteColumn,ico:"col-delete",fn:function(){l.saveRange();var t=l.doc.getSelection().focusNode,a=e(t).closest("table"),n=e(t).closest("td"),o=n.index();return e(a).find("tr").each(function(){e(this).find("td:eq("+o+")").remove()}),!0}};l.addBtnDef("table",a),l.addBtnDef("tableAddRow",d),l.addBtnDef("tableAddColumn",r),l.addBtnDef("tableDeleteRow",i),l.addBtnDef("tableDeleteColumn",s),l.addBtnDef("tableDestroy",b)}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/table/ui/sass/trumbowyg.table.scss b/modules/editor/trumbowyg/plugins/table/ui/sass/trumbowyg.table.scss @@ -0,0 +1,41 @@ +/** + * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor + * Default stylesheet for Trumbowyg editor plugin + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +.trumbowyg-editor table { + width: 100%; + + td { + border: 1px dotted #e7eaec; + padding: 8px; + } +} + +.trumbowyg-dropdown-table { + table { + margin: 10px; + display: inline-block; + } + + table td { + display: inline-block; + height: 20px; + width: 20px; + margin: 1px; + background-color: #fff; + box-shadow: 0 0 0 1px #cecece inset; + + &.active { + background-color: #00b393; + box-shadow: none; + cursor: pointer; + } + } +} diff --git a/modules/editor/trumbowyg/plugins/table/ui/trumbowyg.table.css b/modules/editor/trumbowyg/plugins/table/ui/trumbowyg.table.css @@ -0,0 +1,32 @@ +/** + * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor + * Trumbowyg plugin stylesheet + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +.trumbowyg-editor table { + width: 100%; } + .trumbowyg-editor table td { + border: 1px dotted #e7eaec; + padding: 8px; } + +.trumbowyg-dropdown-table table { + margin: 10px; + display: inline-block; } + +.trumbowyg-dropdown-table table td { + display: inline-block; + height: 20px; + width: 20px; + margin: 1px; + background-color: #fff; + box-shadow: 0 0 0 1px #cecece inset; } + .trumbowyg-dropdown-table table td.active { + background-color: #00b393; + box-shadow: none; + cursor: pointer; } diff --git a/modules/editor/trumbowyg/plugins/table/ui/trumbowyg.table.min.css b/modules/editor/trumbowyg/plugins/table/ui/trumbowyg.table.min.css @@ -0,0 +1,2 @@ +/** Trumbowyg v2.10.0 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */ +.trumbowyg-editor table{width:100%}.trumbowyg-editor table td{border:1px dotted #e7eaec;padding:8px}.trumbowyg-dropdown-table table{margin:10px;display:inline-block}.trumbowyg-dropdown-table table td{display:inline-block;height:20px;width:20px;margin:1px;background-color:#fff;box-shadow:0 0 0 1px #cecece inset}.trumbowyg-dropdown-table table td.active{background-color:#00b393;box-shadow:none;cursor:pointer}+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/template/trumbowyg.template.js b/modules/editor/trumbowyg/plugins/template/trumbowyg.template.js @@ -0,0 +1,64 @@ +(function ($) { + 'use strict'; + + // Adds the language variables + $.extend(true, $.trumbowyg, { + langs: { + en: { + template: 'Template' + }, + fr: { + template: 'Patron' + }, + nl: { + template: 'Sjabloon' + }, + ru: { + template: 'Шаблон' + }, + ja: { + template: 'テンプレート' + }, + tr: { + template: 'Şablon' + } + } + }); + + // Adds the extra button definition + $.extend(true, $.trumbowyg, { + plugins: { + template: { + shouldInit: function (trumbowyg) { + return trumbowyg.o.plugins.hasOwnProperty('templates'); + }, + init: function (trumbowyg) { + trumbowyg.addBtnDef('template', { + dropdown: templateSelector(trumbowyg), + hasIcon: false, + text: trumbowyg.lang.template + }); + } + } + } + }); + + // Creates the template-selector dropdown. + function templateSelector(trumbowyg) { + var available = trumbowyg.o.plugins.templates; + var templates = []; + + $.each(available, function (index, template) { + trumbowyg.addBtnDef('template_' + index, { + fn: function () { + trumbowyg.html(template.html); + }, + hasIcon: false, + title: template.name + }); + templates.push('template_' + index); + }); + + return templates; + } +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/template/trumbowyg.template.min.js b/modules/editor/trumbowyg/plugins/template/trumbowyg.template.min.js @@ -0,0 +1 @@ +!function(t){"use strict";function e(e){var n=e.o.plugins.templates,a=[];return t.each(n,function(t,n){e.addBtnDef("template_"+t,{fn:function(){e.html(n.html)},hasIcon:!1,title:n.name}),a.push("template_"+t)}),a}t.extend(!0,t.trumbowyg,{langs:{en:{template:"Template"},fr:{template:"Patron"},nl:{template:"Sjabloon"},ru:{template:"Шаблон"},ja:{template:"テンプレート"},tr:{template:"Şablon"}}}),t.extend(!0,t.trumbowyg,{plugins:{template:{shouldInit:function(t){return t.o.plugins.hasOwnProperty("templates")},init:function(t){t.addBtnDef("template",{dropdown:e(t),hasIcon:!1,text:t.lang.template})}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/plugins/upload/trumbowyg.upload.js b/modules/editor/trumbowyg/plugins/upload/trumbowyg.upload.js @@ -0,0 +1,261 @@ +/* =========================================================== + * trumbowyg.upload.js v1.2 + * Upload plugin for Trumbowyg + * http://alex-d.github.com/Trumbowyg + * =========================================================== + * Author : Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + * Mod by : Aleksandr-ru + * Twitter : @Aleksandr_ru + * Website : aleksandr.ru + */ + +(function ($) { + 'use strict'; + + var defaultOptions = { + serverPath: '', + fileFieldName: 'fileToUpload', + data: [], // Additional data for ajax [{name: 'key', value: 'value'}] + headers: {}, // Additional headers + xhrFields: {}, // Additional fields + urlPropertyName: 'file', // How to get url from the json response (for instance 'url' for {url: ....}) + statusPropertyName: 'success', // How to get status from the json response + success: undefined, // Success callback: function (data, trumbowyg, $modal, values) {} + error: undefined, // Error callback: function () {} + imageWidthModalEdit: false // Add ability to edit image width + }; + + function getDeep(object, propertyParts) { + var mainProperty = propertyParts.shift(), + otherProperties = propertyParts; + + if (object !== null) { + if (otherProperties.length === 0) { + return object[mainProperty]; + } + + if (typeof object === 'object') { + return getDeep(object[mainProperty], otherProperties); + } + } + return object; + } + + addXhrProgressEvent(); + + $.extend(true, $.trumbowyg, { + langs: { + // jshint camelcase:false + en: { + upload: 'Upload', + file: 'File', + uploadError: 'Error' + }, + sk: { + upload: 'Nahrať', + file: 'Súbor', + uploadError: 'Chyba' + }, + fr: { + upload: 'Envoi', + file: 'Fichier', + uploadError: 'Erreur' + }, + cs: { + upload: 'Nahrát obrázek', + file: 'Soubor', + uploadError: 'Chyba' + }, + zh_cn: { + upload: '上传', + file: '文件', + uploadError: '错误' + }, + zh_tw: { + upload: '上傳', + file: '文件', + uploadError: '錯誤' + }, + ru: { + upload: 'Загрузка', + file: 'Файл', + uploadError: 'Ошибка' + }, + ja: { + upload: 'アップロード', + file: 'ファイル', + uploadError: 'エラー' + }, + pt_br: { + upload: 'Enviar do local', + file: 'Arquivo', + uploadError: 'Erro' + }, + tr: { + upload: 'Yükle', + file: 'Dosya', + uploadError: 'Hata' + } + }, + // jshint camelcase:true + + plugins: { + upload: { + init: function (trumbowyg) { + trumbowyg.o.plugins.upload = $.extend(true, {}, defaultOptions, trumbowyg.o.plugins.upload || {}); + var btnDef = { + fn: function () { + trumbowyg.saveRange(); + + var file, + prefix = trumbowyg.o.prefix; + + var fields = { + file: { + type: 'file', + required: true, + attributes: { + accept: 'image/*' + } + }, + alt: { + label: 'description', + value: trumbowyg.getRangeText() + } + }; + + if (trumbowyg.o.plugins.upload.imageWidthModalEdit) { + fields.width = { + value: '' + }; + } + + var $modal = trumbowyg.openModalInsert( + // Title + trumbowyg.lang.upload, + + // Fields + fields, + + // Callback + function (values) { + var data = new FormData(); + data.append(trumbowyg.o.plugins.upload.fileFieldName, file); + + trumbowyg.o.plugins.upload.data.map(function (cur) { + data.append(cur.name, cur.value); + }); + + $.map(values, function (curr, key) { + if (key !== 'file') { + data.append(key, curr); + } + }); + + if ($('.' + prefix + 'progress', $modal).length === 0) { + $('.' + prefix + 'modal-title', $modal) + .after( + $('<div/>', { + 'class': prefix + 'progress' + }).append( + $('<div/>', { + 'class': prefix + 'progress-bar' + }) + ) + ); + } + + $.ajax({ + url: trumbowyg.o.plugins.upload.serverPath, + headers: trumbowyg.o.plugins.upload.headers, + xhrFields: trumbowyg.o.plugins.upload.xhrFields, + type: 'POST', + data: data, + cache: false, + dataType: 'json', + processData: false, + contentType: false, + + progressUpload: function (e) { + $('.' + prefix + 'progress-bar').css('width', Math.round(e.loaded * 100 / e.total) + '%'); + }, + + success: function (data) { + if (trumbowyg.o.plugins.upload.success) { + trumbowyg.o.plugins.upload.success(data, trumbowyg, $modal, values); + } else { + if (!!getDeep(data, trumbowyg.o.plugins.upload.statusPropertyName.split('.'))) { + var url = getDeep(data, trumbowyg.o.plugins.upload.urlPropertyName.split('.')); + trumbowyg.execCmd('insertImage', url); + var $img = $('img[src="' + url + '"]:not([alt])', trumbowyg.$box); + $img.attr('alt', values.alt); + if (trumbowyg.o.imageWidthModalEdit && parseInt(values.width) > 0) { + $img.attr({ + width: values.width + }); + } + setTimeout(function () { + trumbowyg.closeModal(); + }, 250); + trumbowyg.$c.trigger('tbwuploadsuccess', [trumbowyg, data, url]); + } else { + trumbowyg.addErrorOnModalField( + $('input[type=file]', $modal), + trumbowyg.lang[data.message] + ); + trumbowyg.$c.trigger('tbwuploaderror', [trumbowyg, data]); + } + } + }, + + error: trumbowyg.o.plugins.upload.error || function () { + trumbowyg.addErrorOnModalField( + $('input[type=file]', $modal), + trumbowyg.lang.uploadError + ); + trumbowyg.$c.trigger('tbwuploaderror', [trumbowyg]); + } + }); + } + ); + + $('input[type=file]').on('change', function (e) { + try { + // If multiple files allowed, we just get the first. + file = e.target.files[0]; + } catch (err) { + // In IE8, multiple files not allowed + file = e.target.value; + } + }); + } + }; + + trumbowyg.addBtnDef('upload', btnDef); + } + } + } + }); + + function addXhrProgressEvent() { + if (!$.trumbowyg.addedXhrProgressEvent) { // Avoid adding progress event multiple times + var originalXhr = $.ajaxSettings.xhr; + $.ajaxSetup({ + xhr: function () { + var req = originalXhr(), + that = this; + if (req && typeof req.upload === 'object' && that.progressUpload !== undefined) { + req.upload.addEventListener('progress', function (e) { + that.progressUpload(e); + }, false); + } + + return req; + } + }); + $.trumbowyg.addedXhrProgressEvent = true; + } + } +})(jQuery); diff --git a/modules/editor/trumbowyg/plugins/upload/trumbowyg.upload.min.js b/modules/editor/trumbowyg/plugins/upload/trumbowyg.upload.min.js @@ -0,0 +1 @@ +!function(r){"use strict";function e(r,a){var o=a.shift(),l=a;if(null!==r){if(0===l.length)return r[o];if("object"==typeof r)return e(r[o],l)}return r}function a(){if(!r.trumbowyg.addedXhrProgressEvent){var e=r.ajaxSettings.xhr;r.ajaxSetup({xhr:function(){var r=e(),a=this;return r&&"object"==typeof r.upload&&void 0!==a.progressUpload&&r.upload.addEventListener("progress",function(r){a.progressUpload(r)},!1),r}}),r.trumbowyg.addedXhrProgressEvent=!0}}var o={serverPath:"",fileFieldName:"fileToUpload",data:[],headers:{},xhrFields:{},urlPropertyName:"file",statusPropertyName:"success",success:void 0,error:void 0,imageWidthModalEdit:!1};a(),r.extend(!0,r.trumbowyg,{langs:{en:{upload:"Upload",file:"File",uploadError:"Error"},sk:{upload:"Nahrať",file:"Súbor",uploadError:"Chyba"},fr:{upload:"Envoi",file:"Fichier",uploadError:"Erreur"},cs:{upload:"Nahrát obrázek",file:"Soubor",uploadError:"Chyba"},zh_cn:{upload:"上传",file:"文件",uploadError:"错误"},zh_tw:{upload:"上傳",file:"文件",uploadError:"錯誤"},ru:{upload:"Загрузка",file:"Файл",uploadError:"Ошибка"},ja:{upload:"アップロード",file:"ファイル",uploadError:"エラー"},pt_br:{upload:"Enviar do local",file:"Arquivo",uploadError:"Erro"},tr:{upload:"Yükle",file:"Dosya",uploadError:"Hata"}},plugins:{upload:{init:function(a){a.o.plugins.upload=r.extend(!0,{},o,a.o.plugins.upload||{});var l={fn:function(){a.saveRange();var o,l=a.o.prefix,t={file:{type:"file",required:!0,attributes:{accept:"image/*"}},alt:{label:"description",value:a.getRangeText()}};a.o.plugins.upload.imageWidthModalEdit&&(t.width={value:""});var i=a.openModalInsert(a.lang.upload,t,function(t){var d=new FormData;d.append(a.o.plugins.upload.fileFieldName,o),a.o.plugins.upload.data.map(function(r){d.append(r.name,r.value)}),r.map(t,function(r,e){"file"!==e&&d.append(e,r)}),0===r("."+l+"progress",i).length&&r("."+l+"modal-title",i).after(r("<div/>",{"class":l+"progress"}).append(r("<div/>",{"class":l+"progress-bar"}))),r.ajax({url:a.o.plugins.upload.serverPath,headers:a.o.plugins.upload.headers,xhrFields:a.o.plugins.upload.xhrFields,type:"POST",data:d,cache:!1,dataType:"json",processData:!1,contentType:!1,progressUpload:function(e){r("."+l+"progress-bar").css("width",Math.round(100*e.loaded/e.total)+"%")},success:function(o){if(a.o.plugins.upload.success)a.o.plugins.upload.success(o,a,i,t);else if(e(o,a.o.plugins.upload.statusPropertyName.split("."))){var l=e(o,a.o.plugins.upload.urlPropertyName.split("."));a.execCmd("insertImage",l);var d=r('img[src="'+l+'"]:not([alt])',a.$box);d.attr("alt",t.alt),a.o.imageWidthModalEdit&&parseInt(t.width)>0&&d.attr({width:t.width}),setTimeout(function(){a.closeModal()},250),a.$c.trigger("tbwuploadsuccess",[a,o,l])}else a.addErrorOnModalField(r("input[type=file]",i),a.lang[o.message]),a.$c.trigger("tbwuploaderror",[a,o])},error:a.o.plugins.upload.error||function(){a.addErrorOnModalField(r("input[type=file]",i),a.lang.uploadError),a.$c.trigger("tbwuploaderror",[a])}})});r("input[type=file]").on("change",function(r){try{o=r.target.files[0]}catch(e){o=r.target.value}})}};a.addBtnDef("upload",l)}}}})}(jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/trumbowyg.js b/modules/editor/trumbowyg/trumbowyg.js @@ -0,0 +1,1823 @@ +/** + * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor + * Trumbowyg core file + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +jQuery.trumbowyg = { + langs: { + en: { + viewHTML: 'View HTML', + + undo: 'Undo', + redo: 'Redo', + + formatting: 'Formatting', + p: 'Paragraph', + blockquote: 'Quote', + code: 'Code', + header: 'Header', + + bold: 'Bold', + italic: 'Italic', + strikethrough: 'Stroke', + underline: 'Underline', + + strong: 'Strong', + em: 'Emphasis', + del: 'Deleted', + + superscript: 'Superscript', + subscript: 'Subscript', + + unorderedList: 'Unordered list', + orderedList: 'Ordered list', + + insertImage: 'Insert Image', + link: 'Link', + createLink: 'Insert link', + unlink: 'Remove link', + + justifyLeft: 'Align Left', + justifyCenter: 'Align Center', + justifyRight: 'Align Right', + justifyFull: 'Align Justify', + + horizontalRule: 'Insert horizontal rule', + removeformat: 'Remove format', + + fullscreen: 'Fullscreen', + + close: 'Close', + + submit: 'Confirm', + reset: 'Cancel', + + required: 'Required', + description: 'Description', + title: 'Title', + text: 'Text', + target: 'Target', + width: 'Width' + } + }, + + // Plugins + plugins: {}, + + // SVG Path globally + svgPath: null, + + hideButtonTexts: null +}; + +// Makes default options read-only +Object.defineProperty(jQuery.trumbowyg, 'defaultOptions', { + value: { + lang: 'en', + + fixedBtnPane: false, + fixedFullWidth: false, + autogrow: false, + autogrowOnEnter: false, + imageWidthModalEdit: false, + + prefix: 'trumbowyg-', + + semantic: true, + resetCss: false, + removeformatPasted: false, + tagsToRemove: [], + btns: [ + ['viewHTML'], + ['undo', 'redo'], // Only supported in Blink browsers + ['formatting'], + ['strong', 'em', 'del'], + ['superscript', 'subscript'], + ['link'], + ['insertImage'], + ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'], + ['unorderedList', 'orderedList'], + ['horizontalRule'], + ['removeformat'], + ['fullscreen'] + ], + // For custom button definitions + btnsDef: {}, + + inlineElementsSelector: 'a,abbr,acronym,b,caption,cite,code,col,dfn,dir,dt,dd,em,font,hr,i,kbd,li,q,span,strikeout,strong,sub,sup,u', + + pasteHandlers: [], + + // imgDblClickHandler: default is defined in constructor + + plugins: {}, + urlProtocol: false, + minimalLinks: false + }, + writable: false, + enumerable: true, + configurable: false +}); + + +(function (navigator, window, document, $) { + 'use strict'; + + var CONFIRM_EVENT = 'tbwconfirm', + CANCEL_EVENT = 'tbwcancel'; + + $.fn.trumbowyg = function (options, params) { + var trumbowygDataName = 'trumbowyg'; + if (options === Object(options) || !options) { + return this.each(function () { + if (!$(this).data(trumbowygDataName)) { + $(this).data(trumbowygDataName, new Trumbowyg(this, options)); + } + }); + } + if (this.length === 1) { + try { + var t = $(this).data(trumbowygDataName); + switch (options) { + // Exec command + case 'execCmd': + return t.execCmd(params.cmd, params.param, params.forceCss); + + // Modal box + case 'openModal': + return t.openModal(params.title, params.content); + case 'closeModal': + return t.closeModal(); + case 'openModalInsert': + return t.openModalInsert(params.title, params.fields, params.callback); + + // Range + case 'saveRange': + return t.saveRange(); + case 'getRange': + return t.range; + case 'getRangeText': + return t.getRangeText(); + case 'restoreRange': + return t.restoreRange(); + + // Enable/disable + case 'enable': + return t.setDisabled(false); + case 'disable': + return t.setDisabled(true); + + // Toggle + case 'toggle': + return t.toggle(); + + // Destroy + case 'destroy': + return t.destroy(); + + // Empty + case 'empty': + return t.empty(); + + // HTML + case 'html': + return t.html(params); + } + } catch (c) { + } + } + + return false; + }; + + // @param: editorElem is the DOM element + var Trumbowyg = function (editorElem, options) { + var t = this, + trumbowygIconsId = 'trumbowyg-icons', + $trumbowyg = $.trumbowyg; + + // Get the document of the element. It use to makes the plugin + // compatible on iframes. + t.doc = editorElem.ownerDocument || document; + + // jQuery object of the editor + t.$ta = $(editorElem); // $ta : Textarea + t.$c = $(editorElem); // $c : creator + + options = options || {}; + + // Localization management + if (options.lang != null || $trumbowyg.langs[options.lang] != null) { + t.lang = $.extend(true, {}, $trumbowyg.langs.en, $trumbowyg.langs[options.lang]); + } else { + t.lang = $trumbowyg.langs.en; + } + + t.hideButtonTexts = $trumbowyg.hideButtonTexts != null ? $trumbowyg.hideButtonTexts : options.hideButtonTexts; + + // SVG path + var svgPathOption = $trumbowyg.svgPath != null ? $trumbowyg.svgPath : options.svgPath; + t.hasSvg = svgPathOption !== false; + t.svgPath = !!t.doc.querySelector('base') ? window.location.href.split('#')[0] : ''; + if ($('#' + trumbowygIconsId, t.doc).length === 0 && svgPathOption !== false) { + if (svgPathOption == null) { + // Hack to get svgPathOption based on trumbowyg.js path + var scriptElements = document.getElementsByTagName('script'); + for (var i = 0; i < scriptElements.length; i += 1) { + var source = scriptElements[i].src; + var matches = source.match('trumbowyg(\.min)?\.js'); + if (matches != null) { + svgPathOption = source.substring(0, source.indexOf(matches[0])) + 'ui/icons.svg'; + } + } + if (svgPathOption == null) { + console.warn('You must define svgPath: https://goo.gl/CfTY9U'); // jshint ignore:line + } + } + + var div = t.doc.createElement('div'); + div.id = trumbowygIconsId; + t.doc.body.insertBefore(div, t.doc.body.childNodes[0]); + $.ajax({ + async: true, + type: 'GET', + contentType: 'application/x-www-form-urlencoded; charset=UTF-8', + dataType: 'xml', + crossDomain: true, + url: svgPathOption, + data: null, + beforeSend: null, + complete: null, + success: function (data) { + div.innerHTML = new XMLSerializer().serializeToString(data.documentElement); + } + }); + } + + + /** + * When the button is associated to a empty object + * fn and title attributs are defined from the button key value + * + * For example + * foo: {} + * is equivalent to : + * foo: { + * fn: 'foo', + * title: this.lang.foo + * } + */ + var h = t.lang.header, // Header translation + isBlinkFunction = function () { + return (window.chrome || (window.Intl && Intl.v8BreakIterator)) && 'CSS' in window; + }; + t.btnsDef = { + viewHTML: { + fn: 'toggle' + }, + + undo: { + isSupported: isBlinkFunction, + key: 'Z' + }, + redo: { + isSupported: isBlinkFunction, + key: 'Y' + }, + + p: { + fn: 'formatBlock' + }, + blockquote: { + fn: 'formatBlock' + }, + h1: { + fn: 'formatBlock', + title: h + ' 1' + }, + h2: { + fn: 'formatBlock', + title: h + ' 2' + }, + h3: { + fn: 'formatBlock', + title: h + ' 3' + }, + h4: { + fn: 'formatBlock', + title: h + ' 4' + }, + subscript: { + tag: 'sub' + }, + superscript: { + tag: 'sup' + }, + + bold: { + key: 'B', + tag: 'b' + }, + italic: { + key: 'I', + tag: 'i' + }, + underline: { + tag: 'u' + }, + strikethrough: { + tag: 'strike' + }, + + strong: { + fn: 'bold', + key: 'B' + }, + em: { + fn: 'italic', + key: 'I' + }, + del: { + fn: 'strikethrough' + }, + + createLink: { + key: 'K', + tag: 'a' + }, + unlink: {}, + + insertImage: {}, + + justifyLeft: { + tag: 'left', + forceCss: true + }, + justifyCenter: { + tag: 'center', + forceCss: true + }, + justifyRight: { + tag: 'right', + forceCss: true + }, + justifyFull: { + tag: 'justify', + forceCss: true + }, + + unorderedList: { + fn: 'insertUnorderedList', + tag: 'ul' + }, + orderedList: { + fn: 'insertOrderedList', + tag: 'ol' + }, + + horizontalRule: { + fn: 'insertHorizontalRule' + }, + + removeformat: {}, + + fullscreen: { + class: 'trumbowyg-not-disable' + }, + close: { + fn: 'destroy', + class: 'trumbowyg-not-disable' + }, + + // Dropdowns + formatting: { + dropdown: ['p', 'blockquote', 'h1', 'h2', 'h3', 'h4'], + ico: 'p' + }, + link: { + dropdown: ['createLink', 'unlink'] + } + }; + + // Defaults Options + t.o = $.extend(true, {}, $trumbowyg.defaultOptions, options); + if (!t.o.hasOwnProperty('imgDblClickHandler')) { + t.o.imgDblClickHandler = t.getDefaultImgDblClickHandler(); + } + + t.urlPrefix = t.setupUrlPrefix(); + + t.disabled = t.o.disabled || (editorElem.nodeName === 'TEXTAREA' && editorElem.disabled); + + if (options.btns) { + t.o.btns = options.btns; + } else if (!t.o.semantic) { + t.o.btns[3] = ['bold', 'italic', 'underline', 'strikethrough']; + } + + $.each(t.o.btnsDef, function (btnName, btnDef) { + t.addBtnDef(btnName, btnDef); + }); + + // put this here in the event it would be merged in with options + t.eventNamespace = 'trumbowyg-event'; + + // Keyboard shortcuts are load in this array + t.keys = []; + + // Tag to button dynamically hydrated + t.tagToButton = {}; + t.tagHandlers = []; + + // Admit multiple paste handlers + t.pasteHandlers = [].concat(t.o.pasteHandlers); + + // Check if browser is IE + t.isIE = (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') !== -1); + + t.init(); + }; + + Trumbowyg.prototype = { + DEFAULT_SEMANTIC_MAP: { + 'b': 'strong', + 'i': 'em', + 's': 'del', + 'strike': 'del', + 'div': 'p' + }, + + init: function () { + var t = this; + t.height = t.$ta.height(); + + t.initPlugins(); + + try { + // Disable image resize, try-catch for old IE + t.doc.execCommand('enableObjectResizing', false, false); + t.doc.execCommand('defaultParagraphSeparator', false, 'p'); + } catch (e) { + } + + t.buildEditor(); + t.buildBtnPane(); + + t.fixedBtnPaneEvents(); + + t.buildOverlay(); + + setTimeout(function () { + if (t.disabled) { + t.setDisabled(true); + } + t.$c.trigger('tbwinit'); + }); + }, + + addBtnDef: function (btnName, btnDef) { + this.btnsDef[btnName] = btnDef; + }, + + setupUrlPrefix: function () { + var protocol = this.o.urlProtocol; + if (!protocol) { + return; + } + + if (typeof(protocol) !== 'string') { + return 'https://'; + } + return /:\/\/$/.test(protocol) ? protocol : protocol + '://'; + }, + + buildEditor: function () { + var t = this, + prefix = t.o.prefix, + html = ''; + + t.$box = $('<div/>', { + class: prefix + 'box ' + prefix + 'editor-visible ' + prefix + t.o.lang + ' trumbowyg' + }); + + // $ta = Textarea + // $ed = Editor + t.isTextarea = t.$ta.is('textarea'); + if (t.isTextarea) { + html = t.$ta.val(); + t.$ed = $('<div/>'); + t.$box + .insertAfter(t.$ta) + .append(t.$ed, t.$ta); + } else { + t.$ed = t.$ta; + html = t.$ed.html(); + + t.$ta = $('<textarea/>', { + name: t.$ta.attr('id'), + height: t.height + }).val(html); + + t.$box + .insertAfter(t.$ed) + .append(t.$ta, t.$ed); + t.syncCode(); + } + + t.$ta + .addClass(prefix + 'textarea') + .attr('tabindex', -1) + ; + + t.$ed + .addClass(prefix + 'editor') + .attr({ + contenteditable: true, + dir: t.lang._dir || 'ltr' + }) + .html(html) + ; + + if (t.o.tabindex) { + t.$ed.attr('tabindex', t.o.tabindex); + } + + if (t.$c.is('[placeholder]')) { + t.$ed.attr('placeholder', t.$c.attr('placeholder')); + } + + if (t.$c.is('[spellcheck]')) { + t.$ed.attr('spellcheck', t.$c.attr('spellcheck')); + } + + if (t.o.resetCss) { + t.$ed.addClass(prefix + 'reset-css'); + } + + if (!t.o.autogrow) { + t.$ta.add(t.$ed).css({ + height: t.height + }); + } + + t.semanticCode(); + + if (t.o.autogrowOnEnter) { + t.$ed.addClass(prefix + 'autogrow-on-enter'); + } + + var ctrl = false, + composition = false, + debounceButtonPaneStatus, + updateEventName = 'keyup'; + + t.$ed + .on('dblclick', 'img', t.o.imgDblClickHandler) + .on('keydown', function (e) { + if ((e.ctrlKey || e.metaKey) && !e.altKey) { + ctrl = true; + var key = t.keys[String.fromCharCode(e.which).toUpperCase()]; + + try { + t.execCmd(key.fn, key.param); + return false; + } catch (c) { + } + } + }) + .on('compositionstart compositionupdate', function () { + composition = true; + }) + .on(updateEventName + ' compositionend', function (e) { + if (e.type === 'compositionend') { + composition = false; + } else if (composition) { + return; + } + + var keyCode = e.which; + + if (keyCode >= 37 && keyCode <= 40) { + return; + } + + if ((e.ctrlKey || e.metaKey) && (keyCode === 89 || keyCode === 90)) { + t.$c.trigger('tbwchange'); + } else if (!ctrl && keyCode !== 17) { + var compositionEndIE = t.isIE ? e.type === 'compositionend' : true; + t.semanticCode(false, compositionEndIE && keyCode === 13); + t.$c.trigger('tbwchange'); + } else if (typeof e.which === 'undefined') { + t.semanticCode(false, false, true); + } + + setTimeout(function () { + ctrl = false; + }, 50); + }) + .on('mouseup keydown keyup', function (e) { + if ((!e.ctrlKey && !e.metaKey) || e.altKey) { + setTimeout(function () { // "hold on" to the ctrl key for 50ms + ctrl = false; + }, 50); + } + clearTimeout(debounceButtonPaneStatus); + debounceButtonPaneStatus = setTimeout(function () { + t.updateButtonPaneStatus(); + }, 50); + }) + .on('focus blur', function (e) { + t.$c.trigger('tbw' + e.type); + if (e.type === 'blur') { + $('.' + prefix + 'active-button', t.$btnPane).removeClass(prefix + 'active-button ' + prefix + 'active'); + } + if (t.o.autogrowOnEnter) { + if (t.autogrowOnEnterDontClose) { + return; + } + if (e.type === 'focus') { + t.autogrowOnEnterWasFocused = true; + t.autogrowEditorOnEnter(); + } + else if (!t.o.autogrow) { + t.$ed.css({height: t.$ed.css('min-height')}); + t.$c.trigger('tbwresize'); + } + } + }) + .on('cut', function () { + setTimeout(function () { + t.semanticCode(false, true); + t.$c.trigger('tbwchange'); + }, 0); + }) + .on('paste', function (e) { + if (t.o.removeformatPasted) { + e.preventDefault(); + + if (window.getSelection && window.getSelection().deleteFromDocument) { + window.getSelection().deleteFromDocument(); + } + + try { + // IE + var text = window.clipboardData.getData('Text'); + + try { + // <= IE10 + t.doc.selection.createRange().pasteHTML(text); + } catch (c) { + // IE 11 + t.doc.getSelection().getRangeAt(0).insertNode(t.doc.createTextNode(text)); + } + t.$c.trigger('tbwchange', e); + } catch (d) { + // Not IE + t.execCmd('insertText', (e.originalEvent || e).clipboardData.getData('text/plain')); + } + } + + // Call pasteHandlers + $.each(t.pasteHandlers, function (i, pasteHandler) { + pasteHandler(e); + }); + + setTimeout(function () { + t.semanticCode(false, true); + t.$c.trigger('tbwpaste', e); + }, 0); + }); + + t.$ta + .on('keyup', function () { + t.$c.trigger('tbwchange'); + }) + .on('paste', function () { + setTimeout(function () { + t.$c.trigger('tbwchange'); + }, 0); + }); + + t.$box.on('keydown', function (e) { + if (e.which === 27 && $('.' + prefix + 'modal-box', t.$box).length === 1) { + t.closeModal(); + return false; + } + }); + }, + + //autogrow when entering logic + autogrowEditorOnEnter: function () { + var t = this; + t.$ed.removeClass('autogrow-on-enter'); + var oldHeight = t.$ed[0].clientHeight; + t.$ed.height('auto'); + var totalHeight = t.$ed[0].scrollHeight; + t.$ed.addClass('autogrow-on-enter'); + if (oldHeight !== totalHeight) { + t.$ed.height(oldHeight); + setTimeout(function () { + t.$ed.css({height: totalHeight}); + t.$c.trigger('tbwresize'); + }, 0); + } + }, + + + // Build button pane, use o.btns option + buildBtnPane: function () { + var t = this, + prefix = t.o.prefix; + + var $btnPane = t.$btnPane = $('<div/>', { + class: prefix + 'button-pane' + }); + + $.each(t.o.btns, function (i, btnGrp) { + if (!$.isArray(btnGrp)) { + btnGrp = [btnGrp]; + } + + var $btnGroup = $('<div/>', { + class: prefix + 'button-group ' + ((btnGrp.indexOf('fullscreen') >= 0) ? prefix + 'right' : '') + }); + $.each(btnGrp, function (i, btn) { + try { // Prevent buildBtn error + if (t.isSupportedBtn(btn)) { // It's a supported button + $btnGroup.append(t.buildBtn(btn)); + } + } catch (c) { + } + }); + + if ($btnGroup.html().trim().length > 0) { + $btnPane.append($btnGroup); + } + }); + + t.$box.prepend($btnPane); + }, + + + // Build a button and his action + buildBtn: function (btnName) { // btnName is name of the button + var t = this, + prefix = t.o.prefix, + btn = t.btnsDef[btnName], + isDropdown = btn.dropdown, + hasIcon = btn.hasIcon != null ? btn.hasIcon : true, + textDef = t.lang[btnName] || btnName, + + $btn = $('<button/>', { + type: 'button', + class: prefix + btnName + '-button ' + (btn.class || '') + (!hasIcon ? ' ' + prefix + 'textual-button' : ''), + html: t.hasSvg && hasIcon ? + '<svg><use xlink:href="' + t.svgPath + '#' + prefix + (btn.ico || btnName).replace(/([A-Z]+)/g, '-$1').toLowerCase() + '"/></svg>' : + t.hideButtonTexts ? '' : (btn.text || btn.title || t.lang[btnName] || btnName), + title: (btn.title || btn.text || textDef) + ((btn.key) ? ' (Ctrl + ' + btn.key + ')' : ''), + tabindex: -1, + mousedown: function () { + if (!isDropdown || $('.' + btnName + '-' + prefix + 'dropdown', t.$box).is(':hidden')) { + $('body', t.doc).trigger('mousedown'); + } + + if ((t.$btnPane.hasClass(prefix + 'disable') || t.$box.hasClass(prefix + 'disabled')) && + !$(this).hasClass(prefix + 'active') && + !$(this).hasClass(prefix + 'not-disable')) { + return false; + } + + t.execCmd((isDropdown ? 'dropdown' : false) || btn.fn || btnName, btn.param || btnName, btn.forceCss); + + return false; + } + }); + + if (isDropdown) { + $btn.addClass(prefix + 'open-dropdown'); + var dropdownPrefix = prefix + 'dropdown', + dropdownOptions = { // the dropdown + class: dropdownPrefix + '-' + btnName + ' ' + dropdownPrefix + ' ' + prefix + 'fixed-top' + }; + dropdownOptions['data-' + dropdownPrefix] = btnName; + var $dropdown = $('<div/>', dropdownOptions); + $.each(isDropdown, function (i, def) { + if (t.btnsDef[def] && t.isSupportedBtn(def)) { + $dropdown.append(t.buildSubBtn(def)); + } + }); + t.$box.append($dropdown.hide()); + } else if (btn.key) { + t.keys[btn.key] = { + fn: btn.fn || btnName, + param: btn.param || btnName + }; + } + + if (!isDropdown) { + t.tagToButton[(btn.tag || btnName).toLowerCase()] = btnName; + } + + return $btn; + }, + // Build a button for dropdown menu + // @param n : name of the subbutton + buildSubBtn: function (btnName) { + var t = this, + prefix = t.o.prefix, + btn = t.btnsDef[btnName], + hasIcon = btn.hasIcon != null ? btn.hasIcon : true; + + if (btn.key) { + t.keys[btn.key] = { + fn: btn.fn || btnName, + param: btn.param || btnName + }; + } + + t.tagToButton[(btn.tag || btnName).toLowerCase()] = btnName; + + return $('<button/>', { + type: 'button', + class: prefix + btnName + '-dropdown-button' + (btn.ico ? ' ' + prefix + btn.ico + '-button' : ''), + html: t.hasSvg && hasIcon ? '<svg><use xlink:href="' + t.svgPath + '#' + prefix + (btn.ico || btnName).replace(/([A-Z]+)/g, '-$1').toLowerCase() + '"/></svg>' + (btn.text || btn.title || t.lang[btnName] || btnName) : (btn.text || btn.title || t.lang[btnName] || btnName), + title: ((btn.key) ? ' (Ctrl + ' + btn.key + ')' : null), + style: btn.style || null, + mousedown: function () { + $('body', t.doc).trigger('mousedown'); + + t.execCmd(btn.fn || btnName, btn.param || btnName, btn.forceCss); + + return false; + } + }); + }, + // Check if button is supported + isSupportedBtn: function (b) { + try { + return this.btnsDef[b].isSupported(); + } catch (c) { + } + return true; + }, + + // Build overlay for modal box + buildOverlay: function () { + var t = this; + t.$overlay = $('<div/>', { + class: t.o.prefix + 'overlay' + }).appendTo(t.$box); + return t.$overlay; + }, + showOverlay: function () { + var t = this; + $(window).trigger('scroll'); + t.$overlay.fadeIn(200); + t.$box.addClass(t.o.prefix + 'box-blur'); + }, + hideOverlay: function () { + var t = this; + t.$overlay.fadeOut(50); + t.$box.removeClass(t.o.prefix + 'box-blur'); + }, + + // Management of fixed button pane + fixedBtnPaneEvents: function () { + var t = this, + fixedFullWidth = t.o.fixedFullWidth, + $box = t.$box; + + if (!t.o.fixedBtnPane) { + return; + } + + t.isFixed = false; + + $(window) + .on('scroll.' + t.eventNamespace + ' resize.' + t.eventNamespace, function () { + if (!$box) { + return; + } + + t.syncCode(); + + var scrollTop = $(window).scrollTop(), + offset = $box.offset().top + 1, + bp = t.$btnPane, + oh = bp.outerHeight() - 2; + + if ((scrollTop - offset > 0) && ((scrollTop - offset - t.height) < 0)) { + if (!t.isFixed) { + t.isFixed = true; + bp.css({ + position: 'fixed', + top: 0, + left: fixedFullWidth ? '0' : 'auto', + zIndex: 7 + }); + $([t.$ta, t.$ed]).css({marginTop: bp.height()}); + } + bp.css({ + width: fixedFullWidth ? '100%' : (($box.width() - 1) + 'px') + }); + + $('.' + t.o.prefix + 'fixed-top', $box).css({ + position: fixedFullWidth ? 'fixed' : 'absolute', + top: fixedFullWidth ? oh : oh + (scrollTop - offset) + 'px', + zIndex: 15 + }); + } else if (t.isFixed) { + t.isFixed = false; + bp.removeAttr('style'); + $([t.$ta, t.$ed]).css({marginTop: 0}); + $('.' + t.o.prefix + 'fixed-top', $box).css({ + position: 'absolute', + top: oh + }); + } + }); + }, + + // Disable editor + setDisabled: function (disable) { + var t = this, + prefix = t.o.prefix; + + t.disabled = disable; + + if (disable) { + t.$ta.attr('disabled', true); + } else { + t.$ta.removeAttr('disabled'); + } + t.$box.toggleClass(prefix + 'disabled', disable); + t.$ed.attr('contenteditable', !disable); + }, + + // Destroy the editor + destroy: function () { + var t = this, + prefix = t.o.prefix; + + if (t.isTextarea) { + t.$box.after( + t.$ta + .css({height: ''}) + .val(t.html()) + .removeClass(prefix + 'textarea') + .show() + ); + } else { + t.$box.after( + t.$ed + .css({height: ''}) + .removeClass(prefix + 'editor') + .removeAttr('contenteditable') + .removeAttr('dir') + .html(t.html()) + .show() + ); + } + + t.$ed.off('dblclick', 'img'); + + t.destroyPlugins(); + + t.$box.remove(); + t.$c.removeData('trumbowyg'); + $('body').removeClass(prefix + 'body-fullscreen'); + t.$c.trigger('tbwclose'); + $(window).off('scroll.' + t.eventNamespace + ' resize.' + t.eventNamespace); + }, + + + // Empty the editor + empty: function () { + this.$ta.val(''); + this.syncCode(true); + }, + + + // Function call when click on viewHTML button + toggle: function () { + var t = this, + prefix = t.o.prefix; + + if (t.o.autogrowOnEnter) { + t.autogrowOnEnterDontClose = !t.$box.hasClass(prefix + 'editor-hidden'); + } + + t.semanticCode(false, true); + + setTimeout(function () { + t.doc.activeElement.blur(); + t.$box.toggleClass(prefix + 'editor-hidden ' + prefix + 'editor-visible'); + t.$btnPane.toggleClass(prefix + 'disable'); + $('.' + prefix + 'viewHTML-button', t.$btnPane).toggleClass(prefix + 'active'); + if (t.$box.hasClass(prefix + 'editor-visible')) { + t.$ta.attr('tabindex', -1); + } else { + t.$ta.removeAttr('tabindex'); + } + + if (t.o.autogrowOnEnter && !t.autogrowOnEnterDontClose) { + t.autogrowEditorOnEnter(); + } + }, 0); + }, + + // Open dropdown when click on a button which open that + dropdown: function (name) { + var t = this, + d = t.doc, + prefix = t.o.prefix, + $dropdown = $('[data-' + prefix + 'dropdown=' + name + ']', t.$box), + $btn = $('.' + prefix + name + '-button', t.$btnPane), + show = $dropdown.is(':hidden'); + + $('body', d).trigger('mousedown'); + + if (show) { + var o = $btn.offset().left; + $btn.addClass(prefix + 'active'); + + $dropdown.css({ + position: 'absolute', + top: $btn.offset().top - t.$btnPane.offset().top + $btn.outerHeight(), + left: (t.o.fixedFullWidth && t.isFixed) ? o + 'px' : (o - t.$btnPane.offset().left) + 'px' + }).show(); + + $(window).trigger('scroll'); + + $('body', d).on('mousedown.' + t.eventNamespace, function (e) { + if (!$dropdown.is(e.target)) { + $('.' + prefix + 'dropdown', t.$box).hide(); + $('.' + prefix + 'active', t.$btnPane).removeClass(prefix + 'active'); + $('body', d).off('mousedown.' + t.eventNamespace); + } + }); + } + }, + + + // HTML Code management + html: function (html) { + var t = this; + + if (html != null) { + t.$ta.val(html); + t.syncCode(true); + t.$c.trigger('tbwchange'); + return t; + } + + return t.$ta.val(); + }, + syncTextarea: function () { + var t = this; + t.$ta.val(t.$ed.text().trim().length > 0 || t.$ed.find('hr,img,embed,iframe,input').length > 0 ? t.$ed.html() : ''); + }, + syncCode: function (force) { + var t = this; + if (!force && t.$ed.is(':visible')) { + t.syncTextarea(); + } else { + // wrap the content in a div it's easier to get the innerhtml + var html = $('<div>').html(t.$ta.val()); + //scrub the html before loading into the doc + var safe = $('<div>').append(html); + $(t.o.tagsToRemove.join(','), safe).remove(); + t.$ed.html(safe.contents().html()); + } + + if (t.o.autogrow) { + t.height = t.$ed.height(); + if (t.height !== t.$ta.css('height')) { + t.$ta.css({height: t.height}); + t.$c.trigger('tbwresize'); + } + } + if (t.o.autogrowOnEnter) { + // t.autogrowEditorOnEnter(); + t.$ed.height('auto'); + var totalheight = t.autogrowOnEnterWasFocused ? t.$ed[0].scrollHeight : t.$ed.css('min-height'); + if (totalheight !== t.$ta.css('height')) { + t.$ed.css({height: totalheight}); + t.$c.trigger('tbwresize'); + } + } + }, + + // Analyse and update to semantic code + // @param force : force to sync code from textarea + // @param full : wrap text nodes in <p> + // @param keepRange : leave selection range as it is + semanticCode: function (force, full, keepRange) { + var t = this; + t.saveRange(); + t.syncCode(force); + + if (t.o.semantic) { + t.semanticTag('b'); + t.semanticTag('i'); + t.semanticTag('s'); + t.semanticTag('strike'); + + if (full) { + var inlineElementsSelector = t.o.inlineElementsSelector, + blockElementsSelector = ':not(' + inlineElementsSelector + ')'; + + // Wrap text nodes in span for easier processing + t.$ed.contents().filter(function () { + return this.nodeType === 3 && this.nodeValue.trim().length > 0; + }).wrap('<span data-tbw/>'); + + // Wrap groups of inline elements in paragraphs (recursive) + var wrapInlinesInParagraphsFrom = function ($from) { + if ($from.length !== 0) { + var $finalParagraph = $from.nextUntil(blockElementsSelector).addBack().wrapAll('<p/>').parent(), + $nextElement = $finalParagraph.nextAll(inlineElementsSelector).first(); + $finalParagraph.next('br').remove(); + wrapInlinesInParagraphsFrom($nextElement); + } + }; + wrapInlinesInParagraphsFrom(t.$ed.children(inlineElementsSelector).first()); + + t.semanticTag('div', true); + + // Unwrap paragraphs content, containing nothing usefull + t.$ed.find('p').filter(function () { + // Don't remove currently being edited element + if (t.range && this === t.range.startContainer) { + return false; + } + return $(this).text().trim().length === 0 && $(this).children().not('br,span').length === 0; + }).contents().unwrap(); + + // Get rid of temporial span's + $('[data-tbw]', t.$ed).contents().unwrap(); + + // Remove empty <p> + t.$ed.find('p:empty').remove(); + } + + if (!keepRange) { + t.restoreRange(); + } + + t.syncTextarea(); + } + }, + + semanticTag: function (oldTag, copyAttributes) { + var newTag; + + if (this.o.semantic != null && typeof this.o.semantic === 'object' && this.o.semantic.hasOwnProperty(oldTag)) { + newTag = this.o.semantic[oldTag]; + } else if (this.o.semantic === true && this.DEFAULT_SEMANTIC_MAP.hasOwnProperty(oldTag)) { + newTag = this.DEFAULT_SEMANTIC_MAP[oldTag]; + } else { + return; + } + + $(oldTag, this.$ed).each(function () { + var $oldTag = $(this); + $oldTag.wrap('<' + newTag + '/>'); + if (copyAttributes) { + $.each($oldTag.prop('attributes'), function () { + $oldTag.parent().attr(this.name, this.value); + }); + } + $oldTag.contents().unwrap(); + }); + }, + + // Function call when user click on "Insert Link" + createLink: function () { + var t = this, + documentSelection = t.doc.getSelection(), + node = documentSelection.focusNode, + text = new XMLSerializer().serializeToString(documentSelection.getRangeAt(0).cloneContents()), + url, + title, + target; + + while (['A', 'DIV'].indexOf(node.nodeName) < 0) { + node = node.parentNode; + } + + if (node && node.nodeName === 'A') { + var $a = $(node); + text = $a.text(); + url = $a.attr('href'); + if (!t.o.minimalLinks) { + title = $a.attr('title'); + target = $a.attr('target'); + } + var range = t.doc.createRange(); + range.selectNode(node); + documentSelection.removeAllRanges(); + documentSelection.addRange(range); + } + + t.saveRange(); + + var options = { + url: { + label: 'URL', + required: true, + value: url + }, + text: { + label: t.lang.text, + value: text + } + }; + if (!t.o.minimalLinks) { + Object.assign(options, { + title: { + label: t.lang.title, + value: title + }, + target: { + label: t.lang.target, + value: target + } + }); + } + + t.openModalInsert(t.lang.createLink, options, function (v) { // v is value + var url = t.prependUrlPrefix(v.url); + if (!url.length) { + return false; + } + + var link = $(['<a href="', v.url, '">', v.text || v.url, '</a>'].join('')); + + if (!t.o.minimalLinks) { + if (v.title.length > 0) { + link.attr('title', v.title); + } + if (v.target.length > 0) { + link.attr('target', v.target); + } + } + t.range.deleteContents(); + t.range.insertNode(link[0]); + t.syncCode(); + t.$c.trigger('tbwchange'); + return true; + }); + }, + prependUrlPrefix: function (url) { + var t = this; + if (!t.urlPrefix) { + return url; + } + + const VALID_LINK_PREFIX = /^([a-z][-+.a-z0-9]*:|\/|#)/i; + if (VALID_LINK_PREFIX.test(url)) { + return url; + } + + const SIMPLE_EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + if (SIMPLE_EMAIL_REGEX.test(url)) { + return 'mailto:' + url; + } + + return t.urlPrefix + url; + }, + unlink: function () { + var t = this, + documentSelection = t.doc.getSelection(), + node = documentSelection.focusNode; + + if (documentSelection.isCollapsed) { + while (['A', 'DIV'].indexOf(node.nodeName) < 0) { + node = node.parentNode; + } + + if (node && node.nodeName === 'A') { + var range = t.doc.createRange(); + range.selectNode(node); + documentSelection.removeAllRanges(); + documentSelection.addRange(range); + } + } + t.execCmd('unlink', undefined, undefined, true); + }, + insertImage: function () { + var t = this; + t.saveRange(); + + var options = { + url: { + label: 'URL', + required: true + }, + alt: { + label: t.lang.description, + value: t.getRangeText() + } + }; + + if (t.o.imageWidthModalEdit) { + options.width = {}; + } + + t.openModalInsert(t.lang.insertImage, options, function (v) { // v are values + t.execCmd('insertImage', v.url); + var $img = $('img[src="' + v.url + '"]:not([alt])', t.$box); + $img.attr('alt', v.alt); + + if (t.o.imageWidthModalEdit) { + $img.attr({ + width: v.width + }); + } + + t.syncCode(); + t.$c.trigger('tbwchange'); + + return true; + }); + }, + fullscreen: function () { + var t = this, + prefix = t.o.prefix, + fullscreenCssClass = prefix + 'fullscreen', + isFullscreen; + + t.$box.toggleClass(fullscreenCssClass); + isFullscreen = t.$box.hasClass(fullscreenCssClass); + $('body').toggleClass(prefix + 'body-fullscreen', isFullscreen); + $(window).trigger('scroll'); + t.$c.trigger('tbw' + (isFullscreen ? 'open' : 'close') + 'fullscreen'); + }, + + + /* + * Call method of trumbowyg if exist + * else try to call anonymous function + * and finaly native execCommand + */ + execCmd: function (cmd, param, forceCss, skipTrumbowyg) { + var t = this; + skipTrumbowyg = !!skipTrumbowyg || ''; + + if (cmd !== 'dropdown') { + t.$ed.focus(); + } + + try { + t.doc.execCommand('styleWithCSS', false, forceCss || false); + } catch (c) { + } + + try { + t[cmd + skipTrumbowyg](param); + } catch (c) { + try { + cmd(param); + } catch (e2) { + if (cmd === 'insertHorizontalRule') { + param = undefined; + } else if (cmd === 'formatBlock' && t.isIE) { + param = '<' + param + '>'; + } + + t.doc.execCommand(cmd, false, param); + + t.syncCode(); + t.semanticCode(false, true); + } + + if (cmd !== 'dropdown') { + t.updateButtonPaneStatus(); + t.$c.trigger('tbwchange'); + } + } + }, + + + // Open a modal box + openModal: function (title, content) { + var t = this, + prefix = t.o.prefix; + + // No open a modal box when exist other modal box + if ($('.' + prefix + 'modal-box', t.$box).length > 0) { + return false; + } + if (t.o.autogrowOnEnter) { + t.autogrowOnEnterDontClose = true; + } + + t.saveRange(); + t.showOverlay(); + + // Disable all btnPane btns + t.$btnPane.addClass(prefix + 'disable'); + + // Build out of ModalBox, it's the mask for animations + var $modal = $('<div/>', { + class: prefix + 'modal ' + prefix + 'fixed-top' + }).css({ + top: t.$btnPane.height() + }).appendTo(t.$box); + + // Click on overlay close modal by cancelling them + t.$overlay.one('click', function () { + $modal.trigger(CANCEL_EVENT); + return false; + }); + + // Build the form + var $form = $('<form/>', { + action: '', + html: content + }) + .on('submit', function () { + $modal.trigger(CONFIRM_EVENT); + return false; + }) + .on('reset', function () { + $modal.trigger(CANCEL_EVENT); + return false; + }) + .on('submit reset', function () { + if (t.o.autogrowOnEnter) { + t.autogrowOnEnterDontClose = false; + } + }); + + + // Build ModalBox and animate to show them + var $box = $('<div/>', { + class: prefix + 'modal-box', + html: $form + }) + .css({ + top: '-' + t.$btnPane.outerHeight() + 'px', + opacity: 0 + }) + .appendTo($modal) + .animate({ + top: 0, + opacity: 1 + }, 100); + + + // Append title + $('<span/>', { + text: title, + class: prefix + 'modal-title' + }).prependTo($box); + + $modal.height($box.outerHeight() + 10); + + + // Focus in modal box + $('input:first', $box).focus(); + + + // Append Confirm and Cancel buttons + t.buildModalBtn('submit', $box); + t.buildModalBtn('reset', $box); + + + $(window).trigger('scroll'); + + return $modal; + }, + // @param n is name of modal + buildModalBtn: function (n, $modal) { + var t = this, + prefix = t.o.prefix; + + return $('<button/>', { + class: prefix + 'modal-button ' + prefix + 'modal-' + n, + type: n, + text: t.lang[n] || n + }).appendTo($('form', $modal)); + }, + // close current modal box + closeModal: function () { + var t = this, + prefix = t.o.prefix; + + t.$btnPane.removeClass(prefix + 'disable'); + t.$overlay.off(); + + // Find the modal box + var $modalBox = $('.' + prefix + 'modal-box', t.$box); + + $modalBox.animate({ + top: '-' + $modalBox.height() + }, 100, function () { + $modalBox.parent().remove(); + t.hideOverlay(); + }); + + t.restoreRange(); + }, + // Preformated build and management modal + openModalInsert: function (title, fields, cmd) { + var t = this, + prefix = t.o.prefix, + lg = t.lang, + html = ''; + + $.each(fields, function (fieldName, field) { + var l = field.label || fieldName, + n = field.name || fieldName, + a = field.attributes || {}; + + var attr = Object.keys(a).map(function (prop) { + return prop + '="' + a[prop] + '"'; + }).join(' '); + + html += '<label><input type="' + (field.type || 'text') + '" name="' + n + '"' + + (field.type === 'checkbox' && field.value ? ' checked="checked"' : ' value="' + (field.value || '').replace(/"/g, '&quot;')) + + '"' + attr + '><span class="' + prefix + 'input-infos"><span>' + + (lg[l] ? lg[l] : l) + + '</span></span></label>'; + }); + + return t.openModal(title, html) + .on(CONFIRM_EVENT, function () { + var $form = $('form', $(this)), + valid = true, + values = {}; + + $.each(fields, function (fieldName, field) { + var n = field.name || fieldName; + + var $field = $('input[name="' + n + '"]', $form), + inputType = $field.attr('type'); + + switch (inputType.toLowerCase()) { + case 'checkbox': + values[n] = $field.is(':checked'); + break; + case 'radio': + values[n] = $field.filter(':checked').val(); + break; + default: + values[n] = $.trim($field.val()); + break; + } + // Validate value + if (field.required && values[n] === '') { + valid = false; + t.addErrorOnModalField($field, t.lang.required); + } else if (field.pattern && !field.pattern.test(values[n])) { + valid = false; + t.addErrorOnModalField($field, field.patternError); + } + }); + + if (valid) { + t.restoreRange(); + + if (cmd(values, fields)) { + t.syncCode(); + t.$c.trigger('tbwchange'); + t.closeModal(); + $(this).off(CONFIRM_EVENT); + } + } + }) + .one(CANCEL_EVENT, function () { + $(this).off(CONFIRM_EVENT); + t.closeModal(); + }); + }, + addErrorOnModalField: function ($field, err) { + var prefix = this.o.prefix, + $label = $field.parent(); + + $field + .on('change keyup', function () { + $label.removeClass(prefix + 'input-error'); + }); + + $label + .addClass(prefix + 'input-error') + .find('input+span') + .append( + $('<span/>', { + class: prefix + 'msg-error', + text: err + }) + ); + }, + + getDefaultImgDblClickHandler: function () { + var t = this; + + return function () { + var $img = $(this), + src = $img.attr('src'), + base64 = '(Base64)'; + + if (src.indexOf('data:image') === 0) { + src = base64; + } + + var options = { + url: { + label: 'URL', + value: src, + required: true + }, + alt: { + label: t.lang.description, + value: $img.attr('alt') + } + }; + + if (t.o.imageWidthModalEdit) { + options.width = { + value: $img.attr('width') ? $img.attr('width') : '' + }; + } + + t.openModalInsert(t.lang.insertImage, options, function (v) { + if (v.src !== base64) { + $img.attr({ + src: v.url + }); + } + $img.attr({ + alt: v.alt + }); + + if (t.o.imageWidthModalEdit) { + if (parseInt(v.width) > 0) { + $img.attr({ + width: v.width + }); + } else { + $img.removeAttr('width'); + } + } + + return true; + }); + return false; + }; + }, + + // Range management + saveRange: function () { + var t = this, + documentSelection = t.doc.getSelection(); + + t.range = null; + + if (documentSelection.rangeCount) { + var savedRange = t.range = documentSelection.getRangeAt(0), + range = t.doc.createRange(), + rangeStart; + range.selectNodeContents(t.$ed[0]); + range.setEnd(savedRange.startContainer, savedRange.startOffset); + rangeStart = (range + '').length; + t.metaRange = { + start: rangeStart, + end: rangeStart + (savedRange + '').length + }; + } + }, + restoreRange: function () { + var t = this, + metaRange = t.metaRange, + savedRange = t.range, + documentSelection = t.doc.getSelection(), + range; + + if (!savedRange) { + return; + } + + if (metaRange && metaRange.start !== metaRange.end) { // Algorithm from http://jsfiddle.net/WeWy7/3/ + var charIndex = 0, + nodeStack = [t.$ed[0]], + node, + foundStart = false, + stop = false; + + range = t.doc.createRange(); + + while (!stop && (node = nodeStack.pop())) { + if (node.nodeType === 3) { + var nextCharIndex = charIndex + node.length; + if (!foundStart && metaRange.start >= charIndex && metaRange.start <= nextCharIndex) { + range.setStart(node, metaRange.start - charIndex); + foundStart = true; + } + if (foundStart && metaRange.end >= charIndex && metaRange.end <= nextCharIndex) { + range.setEnd(node, metaRange.end - charIndex); + stop = true; + } + charIndex = nextCharIndex; + } else { + var cn = node.childNodes, + i = cn.length; + + while (i > 0) { + i -= 1; + nodeStack.push(cn[i]); + } + } + } + } + + documentSelection.removeAllRanges(); + documentSelection.addRange(range || savedRange); + }, + getRangeText: function () { + return this.range + ''; + }, + + updateButtonPaneStatus: function () { + var t = this, + prefix = t.o.prefix, + tags = t.getTagsRecursive(t.doc.getSelection().focusNode), + activeClasses = prefix + 'active-button ' + prefix + 'active'; + + $('.' + prefix + 'active-button', t.$btnPane).removeClass(activeClasses); + $.each(tags, function (i, tag) { + var btnName = t.tagToButton[tag.toLowerCase()], + $btn = $('.' + prefix + btnName + '-button', t.$btnPane); + + if ($btn.length > 0) { + $btn.addClass(activeClasses); + } else { + try { + $btn = $('.' + prefix + 'dropdown .' + prefix + btnName + '-dropdown-button', t.$box); + var dropdownBtnName = $btn.parent().data('dropdown'); + $('.' + prefix + dropdownBtnName + '-button', t.$box).addClass(activeClasses); + } catch (e) { + } + } + }); + }, + getTagsRecursive: function (element, tags) { + var t = this; + tags = tags || (element && element.tagName ? [element.tagName] : []); + + if (element && element.parentNode) { + element = element.parentNode; + } else { + return tags; + } + + var tag = element.tagName; + if (tag === 'DIV') { + return tags; + } + if (tag === 'P' && element.style.textAlign !== '') { + tags.push(element.style.textAlign); + } + + $.each(t.tagHandlers, function (i, tagHandler) { + tags = tags.concat(tagHandler(element, t)); + }); + + tags.push(tag); + + return t.getTagsRecursive(element, tags).filter(function (tag) { + return tag != null; + }); + }, + + // Plugins + initPlugins: function () { + var t = this; + t.loadedPlugins = []; + $.each($.trumbowyg.plugins, function (name, plugin) { + if (!plugin.shouldInit || plugin.shouldInit(t)) { + plugin.init(t); + if (plugin.tagHandler) { + t.tagHandlers.push(plugin.tagHandler); + } + t.loadedPlugins.push(plugin); + } + }); + }, + destroyPlugins: function () { + $.each(this.loadedPlugins, function (i, plugin) { + if (plugin.destroy) { + plugin.destroy(); + } + }); + } + }; +})(navigator, window, document, jQuery); diff --git a/modules/editor/trumbowyg/trumbowyg.min.js b/modules/editor/trumbowyg/trumbowyg.min.js @@ -0,0 +1,2 @@ +/** Trumbowyg v2.10.0 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */ +jQuery.trumbowyg={langs:{en:{viewHTML:"View HTML",undo:"Undo",redo:"Redo",formatting:"Formatting",p:"Paragraph",blockquote:"Quote",code:"Code",header:"Header",bold:"Bold",italic:"Italic",strikethrough:"Stroke",underline:"Underline",strong:"Strong",em:"Emphasis",del:"Deleted",superscript:"Superscript",subscript:"Subscript",unorderedList:"Unordered list",orderedList:"Ordered list",insertImage:"Insert Image",link:"Link",createLink:"Insert link",unlink:"Remove link",justifyLeft:"Align Left",justifyCenter:"Align Center",justifyRight:"Align Right",justifyFull:"Align Justify",horizontalRule:"Insert horizontal rule",removeformat:"Remove format",fullscreen:"Fullscreen",close:"Close",submit:"Confirm",reset:"Cancel",required:"Required",description:"Description",title:"Title",text:"Text",target:"Target",width:"Width"}},plugins:{},svgPath:null,hideButtonTexts:null},Object.defineProperty(jQuery.trumbowyg,"defaultOptions",{value:{lang:"en",fixedBtnPane:!1,fixedFullWidth:!1,autogrow:!1,autogrowOnEnter:!1,imageWidthModalEdit:!1,prefix:"trumbowyg-",semantic:!0,resetCss:!1,removeformatPasted:!1,tagsToRemove:[],btns:[["viewHTML"],["undo","redo"],["formatting"],["strong","em","del"],["superscript","subscript"],["link"],["insertImage"],["justifyLeft","justifyCenter","justifyRight","justifyFull"],["unorderedList","orderedList"],["horizontalRule"],["removeformat"],["fullscreen"]],btnsDef:{},inlineElementsSelector:"a,abbr,acronym,b,caption,cite,code,col,dfn,dir,dt,dd,em,font,hr,i,kbd,li,q,span,strikeout,strong,sub,sup,u",pasteHandlers:[],plugins:{},urlProtocol:!1,minimalLinks:!1},writable:!1,enumerable:!0,configurable:!1}),function(e,t,n,a){"use strict";var o="tbwconfirm",r="tbwcancel";a.fn.trumbowyg=function(e,t){var n="trumbowyg";if(e===Object(e)||!e)return this.each(function(){a(this).data(n)||a(this).data(n,new i(this,e))});if(1===this.length)try{var o=a(this).data(n);switch(e){case"execCmd":return o.execCmd(t.cmd,t.param,t.forceCss);case"openModal":return o.openModal(t.title,t.content);case"closeModal":return o.closeModal();case"openModalInsert":return o.openModalInsert(t.title,t.fields,t.callback);case"saveRange":return o.saveRange();case"getRange":return o.range;case"getRangeText":return o.getRangeText();case"restoreRange":return o.restoreRange();case"enable":return o.setDisabled(!1);case"disable":return o.setDisabled(!0);case"toggle":return o.toggle();case"destroy":return o.destroy();case"empty":return o.empty();case"html":return o.html(t)}}catch(r){}return!1};var i=function(o,r){var i=this,s="trumbowyg-icons",l=a.trumbowyg;i.doc=o.ownerDocument||n,i.$ta=a(o),i.$c=a(o),r=r||{},null!=r.lang||null!=l.langs[r.lang]?i.lang=a.extend(!0,{},l.langs.en,l.langs[r.lang]):i.lang=l.langs.en,i.hideButtonTexts=null!=l.hideButtonTexts?l.hideButtonTexts:r.hideButtonTexts;var d=null!=l.svgPath?l.svgPath:r.svgPath;if(i.hasSvg=d!==!1,i.svgPath=i.doc.querySelector("base")?t.location.href.split("#")[0]:"",0===a("#"+s,i.doc).length&&d!==!1){if(null==d){for(var c=n.getElementsByTagName("script"),u=0;u<c.length;u+=1){var g=c[u].src,f=g.match("trumbowyg(.min)?.js");null!=f&&(d=g.substring(0,g.indexOf(f[0]))+"ui/icons.svg")}null==d&&console.warn("You must define svgPath: https://goo.gl/CfTY9U")}var h=i.doc.createElement("div");h.id=s,i.doc.body.insertBefore(h,i.doc.body.childNodes[0]),a.ajax({async:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",dataType:"xml",crossDomain:!0,url:d,data:null,beforeSend:null,complete:null,success:function(e){h.innerHTML=(new XMLSerializer).serializeToString(e.documentElement)}})}var p=i.lang.header,m=function(){return(t.chrome||t.Intl&&Intl.v8BreakIterator)&&"CSS"in t};i.btnsDef={viewHTML:{fn:"toggle"},undo:{isSupported:m,key:"Z"},redo:{isSupported:m,key:"Y"},p:{fn:"formatBlock"},blockquote:{fn:"formatBlock"},h1:{fn:"formatBlock",title:p+" 1"},h2:{fn:"formatBlock",title:p+" 2"},h3:{fn:"formatBlock",title:p+" 3"},h4:{fn:"formatBlock",title:p+" 4"},subscript:{tag:"sub"},superscript:{tag:"sup"},bold:{key:"B",tag:"b"},italic:{key:"I",tag:"i"},underline:{tag:"u"},strikethrough:{tag:"strike"},strong:{fn:"bold",key:"B"},em:{fn:"italic",key:"I"},del:{fn:"strikethrough"},createLink:{key:"K",tag:"a"},unlink:{},insertImage:{},justifyLeft:{tag:"left",forceCss:!0},justifyCenter:{tag:"center",forceCss:!0},justifyRight:{tag:"right",forceCss:!0},justifyFull:{tag:"justify",forceCss:!0},unorderedList:{fn:"insertUnorderedList",tag:"ul"},orderedList:{fn:"insertOrderedList",tag:"ol"},horizontalRule:{fn:"insertHorizontalRule"},removeformat:{},fullscreen:{"class":"trumbowyg-not-disable"},close:{fn:"destroy","class":"trumbowyg-not-disable"},formatting:{dropdown:["p","blockquote","h1","h2","h3","h4"],ico:"p"},link:{dropdown:["createLink","unlink"]}},i.o=a.extend(!0,{},l.defaultOptions,r),i.o.hasOwnProperty("imgDblClickHandler")||(i.o.imgDblClickHandler=i.getDefaultImgDblClickHandler()),i.urlPrefix=i.setupUrlPrefix(),i.disabled=i.o.disabled||"TEXTAREA"===o.nodeName&&o.disabled,r.btns?i.o.btns=r.btns:i.o.semantic||(i.o.btns[3]=["bold","italic","underline","strikethrough"]),a.each(i.o.btnsDef,function(e,t){i.addBtnDef(e,t)}),i.eventNamespace="trumbowyg-event",i.keys=[],i.tagToButton={},i.tagHandlers=[],i.pasteHandlers=[].concat(i.o.pasteHandlers),i.isIE=e.userAgent.indexOf("MSIE")!==-1||e.appVersion.indexOf("Trident/")!==-1,i.init()};i.prototype={DEFAULT_SEMANTIC_MAP:{b:"strong",i:"em",s:"del",strike:"del",div:"p"},init:function(){var e=this;e.height=e.$ta.height(),e.initPlugins();try{e.doc.execCommand("enableObjectResizing",!1,!1),e.doc.execCommand("defaultParagraphSeparator",!1,"p")}catch(t){}e.buildEditor(),e.buildBtnPane(),e.fixedBtnPaneEvents(),e.buildOverlay(),setTimeout(function(){e.disabled&&e.setDisabled(!0),e.$c.trigger("tbwinit")})},addBtnDef:function(e,t){this.btnsDef[e]=t},setupUrlPrefix:function(){var e=this.o.urlProtocol;if(e)return"string"!=typeof e?"https://":/:\/\/$/.test(e)?e:e+"://"},buildEditor:function(){var e=this,n=e.o.prefix,o="";e.$box=a("<div/>",{"class":n+"box "+n+"editor-visible "+n+e.o.lang+" trumbowyg"}),e.isTextarea=e.$ta.is("textarea"),e.isTextarea?(o=e.$ta.val(),e.$ed=a("<div/>"),e.$box.insertAfter(e.$ta).append(e.$ed,e.$ta)):(e.$ed=e.$ta,o=e.$ed.html(),e.$ta=a("<textarea/>",{name:e.$ta.attr("id"),height:e.height}).val(o),e.$box.insertAfter(e.$ed).append(e.$ta,e.$ed),e.syncCode()),e.$ta.addClass(n+"textarea").attr("tabindex",-1),e.$ed.addClass(n+"editor").attr({contenteditable:!0,dir:e.lang._dir||"ltr"}).html(o),e.o.tabindex&&e.$ed.attr("tabindex",e.o.tabindex),e.$c.is("[placeholder]")&&e.$ed.attr("placeholder",e.$c.attr("placeholder")),e.$c.is("[spellcheck]")&&e.$ed.attr("spellcheck",e.$c.attr("spellcheck")),e.o.resetCss&&e.$ed.addClass(n+"reset-css"),e.o.autogrow||e.$ta.add(e.$ed).css({height:e.height}),e.semanticCode(),e.o.autogrowOnEnter&&e.$ed.addClass(n+"autogrow-on-enter");var r,i=!1,s=!1,l="keyup";e.$ed.on("dblclick","img",e.o.imgDblClickHandler).on("keydown",function(t){if((t.ctrlKey||t.metaKey)&&!t.altKey){i=!0;var n=e.keys[String.fromCharCode(t.which).toUpperCase()];try{return e.execCmd(n.fn,n.param),!1}catch(a){}}}).on("compositionstart compositionupdate",function(){s=!0}).on(l+" compositionend",function(t){if("compositionend"===t.type)s=!1;else if(s)return;var n=t.which;if(!(n>=37&&n<=40)){if(!t.ctrlKey&&!t.metaKey||89!==n&&90!==n)if(i||17===n)"undefined"==typeof t.which&&e.semanticCode(!1,!1,!0);else{var a=!e.isIE||"compositionend"===t.type;e.semanticCode(!1,a&&13===n),e.$c.trigger("tbwchange")}else e.$c.trigger("tbwchange");setTimeout(function(){i=!1},50)}}).on("mouseup keydown keyup",function(t){(!t.ctrlKey&&!t.metaKey||t.altKey)&&setTimeout(function(){i=!1},50),clearTimeout(r),r=setTimeout(function(){e.updateButtonPaneStatus()},50)}).on("focus blur",function(t){if(e.$c.trigger("tbw"+t.type),"blur"===t.type&&a("."+n+"active-button",e.$btnPane).removeClass(n+"active-button "+n+"active"),e.o.autogrowOnEnter){if(e.autogrowOnEnterDontClose)return;"focus"===t.type?(e.autogrowOnEnterWasFocused=!0,e.autogrowEditorOnEnter()):e.o.autogrow||(e.$ed.css({height:e.$ed.css("min-height")}),e.$c.trigger("tbwresize"))}}).on("cut",function(){setTimeout(function(){e.semanticCode(!1,!0),e.$c.trigger("tbwchange")},0)}).on("paste",function(n){if(e.o.removeformatPasted){n.preventDefault(),t.getSelection&&t.getSelection().deleteFromDocument&&t.getSelection().deleteFromDocument();try{var o=t.clipboardData.getData("Text");try{e.doc.selection.createRange().pasteHTML(o)}catch(r){e.doc.getSelection().getRangeAt(0).insertNode(e.doc.createTextNode(o))}e.$c.trigger("tbwchange",n)}catch(i){e.execCmd("insertText",(n.originalEvent||n).clipboardData.getData("text/plain"))}}a.each(e.pasteHandlers,function(e,t){t(n)}),setTimeout(function(){e.semanticCode(!1,!0),e.$c.trigger("tbwpaste",n)},0)}),e.$ta.on("keyup",function(){e.$c.trigger("tbwchange")}).on("paste",function(){setTimeout(function(){e.$c.trigger("tbwchange")},0)}),e.$box.on("keydown",function(t){if(27===t.which&&1===a("."+n+"modal-box",e.$box).length)return e.closeModal(),!1})},autogrowEditorOnEnter:function(){var e=this;e.$ed.removeClass("autogrow-on-enter");var t=e.$ed[0].clientHeight;e.$ed.height("auto");var n=e.$ed[0].scrollHeight;e.$ed.addClass("autogrow-on-enter"),t!==n&&(e.$ed.height(t),setTimeout(function(){e.$ed.css({height:n}),e.$c.trigger("tbwresize")},0))},buildBtnPane:function(){var e=this,t=e.o.prefix,n=e.$btnPane=a("<div/>",{"class":t+"button-pane"});a.each(e.o.btns,function(o,r){a.isArray(r)||(r=[r]);var i=a("<div/>",{"class":t+"button-group "+(r.indexOf("fullscreen")>=0?t+"right":"")});a.each(r,function(t,n){try{e.isSupportedBtn(n)&&i.append(e.buildBtn(n))}catch(a){}}),i.html().trim().length>0&&n.append(i)}),e.$box.prepend(n)},buildBtn:function(e){var t=this,n=t.o.prefix,o=t.btnsDef[e],r=o.dropdown,i=null==o.hasIcon||o.hasIcon,s=t.lang[e]||e,l=a("<button/>",{type:"button","class":n+e+"-button "+(o["class"]||"")+(i?"":" "+n+"textual-button"),html:t.hasSvg&&i?'<svg><use xlink:href="'+t.svgPath+"#"+n+(o.ico||e).replace(/([A-Z]+)/g,"-$1").toLowerCase()+'"/></svg>':t.hideButtonTexts?"":o.text||o.title||t.lang[e]||e,title:(o.title||o.text||s)+(o.key?" (Ctrl + "+o.key+")":""),tabindex:-1,mousedown:function(){return r&&!a("."+e+"-"+n+"dropdown",t.$box).is(":hidden")||a("body",t.doc).trigger("mousedown"),!((t.$btnPane.hasClass(n+"disable")||t.$box.hasClass(n+"disabled"))&&!a(this).hasClass(n+"active")&&!a(this).hasClass(n+"not-disable"))&&(t.execCmd(!!r&&"dropdown"||o.fn||e,o.param||e,o.forceCss),!1)}});if(r){l.addClass(n+"open-dropdown");var d=n+"dropdown",c={"class":d+"-"+e+" "+d+" "+n+"fixed-top"};c["data-"+d]=e;var u=a("<div/>",c);a.each(r,function(e,n){t.btnsDef[n]&&t.isSupportedBtn(n)&&u.append(t.buildSubBtn(n))}),t.$box.append(u.hide())}else o.key&&(t.keys[o.key]={fn:o.fn||e,param:o.param||e});return r||(t.tagToButton[(o.tag||e).toLowerCase()]=e),l},buildSubBtn:function(e){var t=this,n=t.o.prefix,o=t.btnsDef[e],r=null==o.hasIcon||o.hasIcon;return o.key&&(t.keys[o.key]={fn:o.fn||e,param:o.param||e}),t.tagToButton[(o.tag||e).toLowerCase()]=e,a("<button/>",{type:"button","class":n+e+"-dropdown-button"+(o.ico?" "+n+o.ico+"-button":""),html:t.hasSvg&&r?'<svg><use xlink:href="'+t.svgPath+"#"+n+(o.ico||e).replace(/([A-Z]+)/g,"-$1").toLowerCase()+'"/></svg>'+(o.text||o.title||t.lang[e]||e):o.text||o.title||t.lang[e]||e,title:o.key?" (Ctrl + "+o.key+")":null,style:o.style||null,mousedown:function(){return a("body",t.doc).trigger("mousedown"),t.execCmd(o.fn||e,o.param||e,o.forceCss),!1}})},isSupportedBtn:function(e){try{return this.btnsDef[e].isSupported()}catch(t){}return!0},buildOverlay:function(){var e=this;return e.$overlay=a("<div/>",{"class":e.o.prefix+"overlay"}).appendTo(e.$box),e.$overlay},showOverlay:function(){var e=this;a(t).trigger("scroll"),e.$overlay.fadeIn(200),e.$box.addClass(e.o.prefix+"box-blur")},hideOverlay:function(){var e=this;e.$overlay.fadeOut(50),e.$box.removeClass(e.o.prefix+"box-blur")},fixedBtnPaneEvents:function(){var e=this,n=e.o.fixedFullWidth,o=e.$box;e.o.fixedBtnPane&&(e.isFixed=!1,a(t).on("scroll."+e.eventNamespace+" resize."+e.eventNamespace,function(){if(o){e.syncCode();var r=a(t).scrollTop(),i=o.offset().top+1,s=e.$btnPane,l=s.outerHeight()-2;r-i>0&&r-i-e.height<0?(e.isFixed||(e.isFixed=!0,s.css({position:"fixed",top:0,left:n?"0":"auto",zIndex:7}),a([e.$ta,e.$ed]).css({marginTop:s.height()})),s.css({width:n?"100%":o.width()-1+"px"}),a("."+e.o.prefix+"fixed-top",o).css({position:n?"fixed":"absolute",top:n?l:l+(r-i)+"px",zIndex:15})):e.isFixed&&(e.isFixed=!1,s.removeAttr("style"),a([e.$ta,e.$ed]).css({marginTop:0}),a("."+e.o.prefix+"fixed-top",o).css({position:"absolute",top:l}))}}))},setDisabled:function(e){var t=this,n=t.o.prefix;t.disabled=e,e?t.$ta.attr("disabled",!0):t.$ta.removeAttr("disabled"),t.$box.toggleClass(n+"disabled",e),t.$ed.attr("contenteditable",!e)},destroy:function(){var e=this,n=e.o.prefix;e.isTextarea?e.$box.after(e.$ta.css({height:""}).val(e.html()).removeClass(n+"textarea").show()):e.$box.after(e.$ed.css({height:""}).removeClass(n+"editor").removeAttr("contenteditable").removeAttr("dir").html(e.html()).show()),e.$ed.off("dblclick","img"),e.destroyPlugins(),e.$box.remove(),e.$c.removeData("trumbowyg"),a("body").removeClass(n+"body-fullscreen"),e.$c.trigger("tbwclose"),a(t).off("scroll."+e.eventNamespace+" resize."+e.eventNamespace)},empty:function(){this.$ta.val(""),this.syncCode(!0)},toggle:function(){var e=this,t=e.o.prefix;e.o.autogrowOnEnter&&(e.autogrowOnEnterDontClose=!e.$box.hasClass(t+"editor-hidden")),e.semanticCode(!1,!0),setTimeout(function(){e.doc.activeElement.blur(),e.$box.toggleClass(t+"editor-hidden "+t+"editor-visible"),e.$btnPane.toggleClass(t+"disable"),a("."+t+"viewHTML-button",e.$btnPane).toggleClass(t+"active"),e.$box.hasClass(t+"editor-visible")?e.$ta.attr("tabindex",-1):e.$ta.removeAttr("tabindex"),e.o.autogrowOnEnter&&!e.autogrowOnEnterDontClose&&e.autogrowEditorOnEnter()},0)},dropdown:function(e){var n=this,o=n.doc,r=n.o.prefix,i=a("[data-"+r+"dropdown="+e+"]",n.$box),s=a("."+r+e+"-button",n.$btnPane),l=i.is(":hidden");if(a("body",o).trigger("mousedown"),l){var d=s.offset().left;s.addClass(r+"active"),i.css({position:"absolute",top:s.offset().top-n.$btnPane.offset().top+s.outerHeight(),left:n.o.fixedFullWidth&&n.isFixed?d+"px":d-n.$btnPane.offset().left+"px"}).show(),a(t).trigger("scroll"),a("body",o).on("mousedown."+n.eventNamespace,function(e){i.is(e.target)||(a("."+r+"dropdown",n.$box).hide(),a("."+r+"active",n.$btnPane).removeClass(r+"active"),a("body",o).off("mousedown."+n.eventNamespace))})}},html:function(e){var t=this;return null!=e?(t.$ta.val(e),t.syncCode(!0),t.$c.trigger("tbwchange"),t):t.$ta.val()},syncTextarea:function(){var e=this;e.$ta.val(e.$ed.text().trim().length>0||e.$ed.find("hr,img,embed,iframe,input").length>0?e.$ed.html():"")},syncCode:function(e){var t=this;if(!e&&t.$ed.is(":visible"))t.syncTextarea();else{var n=a("<div>").html(t.$ta.val()),o=a("<div>").append(n);a(t.o.tagsToRemove.join(","),o).remove(),t.$ed.html(o.contents().html())}if(t.o.autogrow&&(t.height=t.$ed.height(),t.height!==t.$ta.css("height")&&(t.$ta.css({height:t.height}),t.$c.trigger("tbwresize"))),t.o.autogrowOnEnter){t.$ed.height("auto");var r=t.autogrowOnEnterWasFocused?t.$ed[0].scrollHeight:t.$ed.css("min-height");r!==t.$ta.css("height")&&(t.$ed.css({height:r}),t.$c.trigger("tbwresize"))}},semanticCode:function(e,t,n){var o=this;if(o.saveRange(),o.syncCode(e),o.o.semantic){if(o.semanticTag("b"),o.semanticTag("i"),o.semanticTag("s"),o.semanticTag("strike"),t){var r=o.o.inlineElementsSelector,i=":not("+r+")";o.$ed.contents().filter(function(){return 3===this.nodeType&&this.nodeValue.trim().length>0}).wrap("<span data-tbw/>");var s=function(e){if(0!==e.length){var t=e.nextUntil(i).addBack().wrapAll("<p/>").parent(),n=t.nextAll(r).first();t.next("br").remove(),s(n)}};s(o.$ed.children(r).first()),o.semanticTag("div",!0),o.$ed.find("p").filter(function(){return(!o.range||this!==o.range.startContainer)&&(0===a(this).text().trim().length&&0===a(this).children().not("br,span").length)}).contents().unwrap(),a("[data-tbw]",o.$ed).contents().unwrap(),o.$ed.find("p:empty").remove()}n||o.restoreRange(),o.syncTextarea()}},semanticTag:function(e,t){var n;if(null!=this.o.semantic&&"object"==typeof this.o.semantic&&this.o.semantic.hasOwnProperty(e))n=this.o.semantic[e];else{if(this.o.semantic!==!0||!this.DEFAULT_SEMANTIC_MAP.hasOwnProperty(e))return;n=this.DEFAULT_SEMANTIC_MAP[e]}a(e,this.$ed).each(function(){var e=a(this);e.wrap("<"+n+"/>"),t&&a.each(e.prop("attributes"),function(){e.parent().attr(this.name,this.value)}),e.contents().unwrap()})},createLink:function(){for(var e,t,n,o=this,r=o.doc.getSelection(),i=r.focusNode,s=(new XMLSerializer).serializeToString(r.getRangeAt(0).cloneContents());["A","DIV"].indexOf(i.nodeName)<0;)i=i.parentNode;if(i&&"A"===i.nodeName){var l=a(i);s=l.text(),e=l.attr("href"),o.o.minimalLinks||(t=l.attr("title"),n=l.attr("target"));var d=o.doc.createRange();d.selectNode(i),r.removeAllRanges(),r.addRange(d)}o.saveRange();var c={url:{label:"URL",required:!0,value:e},text:{label:o.lang.text,value:s}};o.o.minimalLinks||Object.assign(c,{title:{label:o.lang.title,value:t},target:{label:o.lang.target,value:n}}),o.openModalInsert(o.lang.createLink,c,function(e){var t=o.prependUrlPrefix(e.url);if(!t.length)return!1;var n=a(['<a href="',e.url,'">',e.text||e.url,"</a>"].join(""));return o.o.minimalLinks||(e.title.length>0&&n.attr("title",e.title),e.target.length>0&&n.attr("target",e.target)),o.range.deleteContents(),o.range.insertNode(n[0]),o.syncCode(),o.$c.trigger("tbwchange"),!0})},prependUrlPrefix:function(e){var t=this;if(!t.urlPrefix)return e;const n=/^([a-z][-+.a-z0-9]*:|\/|#)/i;if(n.test(e))return e;const a=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;return a.test(e)?"mailto:"+e:t.urlPrefix+e},unlink:function(){var e=this,t=e.doc.getSelection(),n=t.focusNode;if(t.isCollapsed){for(;["A","DIV"].indexOf(n.nodeName)<0;)n=n.parentNode;if(n&&"A"===n.nodeName){var a=e.doc.createRange();a.selectNode(n),t.removeAllRanges(),t.addRange(a)}}e.execCmd("unlink",void 0,void 0,!0)},insertImage:function(){var e=this;e.saveRange();var t={url:{label:"URL",required:!0},alt:{label:e.lang.description,value:e.getRangeText()}};e.o.imageWidthModalEdit&&(t.width={}),e.openModalInsert(e.lang.insertImage,t,function(t){e.execCmd("insertImage",t.url);var n=a('img[src="'+t.url+'"]:not([alt])',e.$box);return n.attr("alt",t.alt),e.o.imageWidthModalEdit&&n.attr({width:t.width}),e.syncCode(),e.$c.trigger("tbwchange"),!0})},fullscreen:function(){var e,n=this,o=n.o.prefix,r=o+"fullscreen";n.$box.toggleClass(r),e=n.$box.hasClass(r),a("body").toggleClass(o+"body-fullscreen",e),a(t).trigger("scroll"),n.$c.trigger("tbw"+(e?"open":"close")+"fullscreen")},execCmd:function(e,t,n,a){var o=this;a=!!a||"","dropdown"!==e&&o.$ed.focus();try{o.doc.execCommand("styleWithCSS",!1,n||!1)}catch(r){}try{o[e+a](t)}catch(r){try{e(t)}catch(i){"insertHorizontalRule"===e?t=void 0:"formatBlock"===e&&o.isIE&&(t="<"+t+">"),o.doc.execCommand(e,!1,t),o.syncCode(),o.semanticCode(!1,!0)}"dropdown"!==e&&(o.updateButtonPaneStatus(),o.$c.trigger("tbwchange"))}},openModal:function(e,n){var i=this,s=i.o.prefix;if(a("."+s+"modal-box",i.$box).length>0)return!1;i.o.autogrowOnEnter&&(i.autogrowOnEnterDontClose=!0),i.saveRange(),i.showOverlay(),i.$btnPane.addClass(s+"disable");var l=a("<div/>",{"class":s+"modal "+s+"fixed-top"}).css({top:i.$btnPane.height()}).appendTo(i.$box);i.$overlay.one("click",function(){return l.trigger(r),!1});var d=a("<form/>",{action:"",html:n}).on("submit",function(){return l.trigger(o),!1}).on("reset",function(){return l.trigger(r),!1}).on("submit reset",function(){i.o.autogrowOnEnter&&(i.autogrowOnEnterDontClose=!1)}),c=a("<div/>",{"class":s+"modal-box",html:d}).css({top:"-"+i.$btnPane.outerHeight()+"px",opacity:0}).appendTo(l).animate({top:0,opacity:1},100);return a("<span/>",{text:e,"class":s+"modal-title"}).prependTo(c),l.height(c.outerHeight()+10),a("input:first",c).focus(),i.buildModalBtn("submit",c),i.buildModalBtn("reset",c),a(t).trigger("scroll"),l},buildModalBtn:function(e,t){var n=this,o=n.o.prefix;return a("<button/>",{"class":o+"modal-button "+o+"modal-"+e,type:e,text:n.lang[e]||e}).appendTo(a("form",t))},closeModal:function(){var e=this,t=e.o.prefix;e.$btnPane.removeClass(t+"disable"),e.$overlay.off();var n=a("."+t+"modal-box",e.$box);n.animate({top:"-"+n.height()},100,function(){n.parent().remove(),e.hideOverlay()}),e.restoreRange()},openModalInsert:function(e,t,n){var i=this,s=i.o.prefix,l=i.lang,d="";return a.each(t,function(e,t){var n=t.label||e,a=t.name||e,o=t.attributes||{},r=Object.keys(o).map(function(e){return e+'="'+o[e]+'"'}).join(" ");d+='<label><input type="'+(t.type||"text")+'" name="'+a+'"'+("checkbox"===t.type&&t.value?' checked="checked"':' value="'+(t.value||"").replace(/"/g,"&quot;"))+'"'+r+'><span class="'+s+'input-infos"><span>'+(l[n]?l[n]:n)+"</span></span></label>"}),i.openModal(e,d).on(o,function(){var e=a("form",a(this)),r=!0,s={};a.each(t,function(t,n){var o=n.name||t,l=a('input[name="'+o+'"]',e),d=l.attr("type");switch(d.toLowerCase()){case"checkbox":s[o]=l.is(":checked");break;case"radio":s[o]=l.filter(":checked").val();break;default:s[o]=a.trim(l.val())}n.required&&""===s[o]?(r=!1,i.addErrorOnModalField(l,i.lang.required)):n.pattern&&!n.pattern.test(s[o])&&(r=!1,i.addErrorOnModalField(l,n.patternError))}),r&&(i.restoreRange(),n(s,t)&&(i.syncCode(),i.$c.trigger("tbwchange"),i.closeModal(),a(this).off(o)))}).one(r,function(){a(this).off(o),i.closeModal()})},addErrorOnModalField:function(e,t){var n=this.o.prefix,o=e.parent();e.on("change keyup",function(){o.removeClass(n+"input-error")}),o.addClass(n+"input-error").find("input+span").append(a("<span/>",{"class":n+"msg-error",text:t}))},getDefaultImgDblClickHandler:function(){var e=this;return function(){var t=a(this),n=t.attr("src"),o="(Base64)";0===n.indexOf("data:image")&&(n=o);var r={url:{label:"URL",value:n,required:!0},alt:{label:e.lang.description,value:t.attr("alt")}};return e.o.imageWidthModalEdit&&(r.width={value:t.attr("width")?t.attr("width"):""}),e.openModalInsert(e.lang.insertImage,r,function(n){return n.src!==o&&t.attr({src:n.url}),t.attr({alt:n.alt}),e.o.imageWidthModalEdit&&(parseInt(n.width)>0?t.attr({width:n.width}):t.removeAttr("width")),!0}),!1}},saveRange:function(){var e=this,t=e.doc.getSelection();if(e.range=null,t.rangeCount){var n,a=e.range=t.getRangeAt(0),o=e.doc.createRange();o.selectNodeContents(e.$ed[0]),o.setEnd(a.startContainer,a.startOffset),n=(o+"").length,e.metaRange={start:n,end:n+(a+"").length}}},restoreRange:function(){var e,t=this,n=t.metaRange,a=t.range,o=t.doc.getSelection();if(a){if(n&&n.start!==n.end){var r,i=0,s=[t.$ed[0]],l=!1,d=!1;for(e=t.doc.createRange();!d&&(r=s.pop());)if(3===r.nodeType){var c=i+r.length;!l&&n.start>=i&&n.start<=c&&(e.setStart(r,n.start-i),l=!0),l&&n.end>=i&&n.end<=c&&(e.setEnd(r,n.end-i),d=!0),i=c}else for(var u=r.childNodes,g=u.length;g>0;)g-=1,s.push(u[g])}o.removeAllRanges(),o.addRange(e||a)}},getRangeText:function(){return this.range+""},updateButtonPaneStatus:function(){var e=this,t=e.o.prefix,n=e.getTagsRecursive(e.doc.getSelection().focusNode),o=t+"active-button "+t+"active";a("."+t+"active-button",e.$btnPane).removeClass(o),a.each(n,function(n,r){var i=e.tagToButton[r.toLowerCase()],s=a("."+t+i+"-button",e.$btnPane);if(s.length>0)s.addClass(o);else try{s=a("."+t+"dropdown ."+t+i+"-dropdown-button",e.$box);var l=s.parent().data("dropdown");a("."+t+l+"-button",e.$box).addClass(o)}catch(d){}})},getTagsRecursive:function(e,t){var n=this;if(t=t||(e&&e.tagName?[e.tagName]:[]),!e||!e.parentNode)return t;e=e.parentNode;var o=e.tagName;return"DIV"===o?t:("P"===o&&""!==e.style.textAlign&&t.push(e.style.textAlign),a.each(n.tagHandlers,function(a,o){t=t.concat(o(e,n))}),t.push(o),n.getTagsRecursive(e,t).filter(function(e){return null!=e}))},initPlugins:function(){var e=this;e.loadedPlugins=[],a.each(a.trumbowyg.plugins,function(t,n){n.shouldInit&&!n.shouldInit(e)||(n.init(e),n.tagHandler&&e.tagHandlers.push(n.tagHandler),e.loadedPlugins.push(n))})},destroyPlugins:function(){a.each(this.loadedPlugins,function(e,t){t.destroy&&t.destroy()})}}}(navigator,window,document,jQuery);+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/ui/icons.svg b/modules/editor/trumbowyg/ui/icons.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg"><symbol id="trumbowyg-blockquote" viewBox="0 0 72 72"><path d="M21.3 31.9h-.6c.8-1.2 1.9-2.2 3.4-3.2 2.1-1.4 5-2.7 9.2-3.3l-1.4-8.9c-4.7.7-8.5 2.1-11.7 4-2.4 1.4-4.3 3.1-5.8 4.9-2.3 2.7-3.7 5.7-4.5 8.5-.8 2.8-1 5.4-1 7.5 0 2.3.3 4 .4 4.8 0 .1.1.3.1.4 1.2 5.4 6.1 9.5 11.9 9.5 6.7 0 12.2-5.4 12.2-12.2s-5.5-12-12.2-12zM49.5 31.9h-.6c.8-1.2 1.9-2.2 3.4-3.2 2.1-1.4 5-2.7 9.2-3.3l-1.4-8.9c-4.7.7-8.5 2.1-11.7 4-2.4 1.4-4.3 3.1-5.8 4.9-2.3 2.7-3.7 5.7-4.5 8.5-.8 2.8-1 5.4-1 7.5 0 2.3.3 4 .4 4.8 0 .1.1.3.1.4 1.2 5.4 6.1 9.5 11.9 9.5 6.7 0 12.2-5.4 12.2-12.2s-5.5-12-12.2-12z"/></symbol><symbol id="trumbowyg-bold" viewBox="0 0 72 72"><path d="M51.1 37.8c-1.1-1.4-2.5-2.5-4.2-3.3 1.2-.8 2.1-1.8 2.8-3 1-1.6 1.5-3.5 1.5-5.3 0-2-.6-4-1.7-5.8-1.1-1.8-2.8-3.2-4.8-4.1-2-.9-4.6-1.3-7.8-1.3h-16v42h16.3c2.6 0 4.8-.2 6.7-.7 1.9-.5 3.4-1.2 4.7-2.1 1.3-1 2.4-2.4 3.2-4.1.9-1.7 1.3-3.6 1.3-5.7.2-2.5-.5-4.7-2-6.6zM40.8 50.2c-.6.1-1.8.2-3.4.2h-9V38.5h8.3c2.5 0 4.4.2 5.6.6 1.2.4 2 1 2.7 2 .6.9 1 2 1 3.3 0 1.1-.2 2.1-.7 2.9-.5.9-1 1.5-1.7 1.9-.8.4-1.7.8-2.8 1zm2.6-20.4c-.5.7-1.3 1.3-2.5 1.6-.8.3-2.5.4-4.8.4h-7.7V21.6h7.1c1.4 0 2.6 0 3.6.1s1.7.2 2.2.4c1 .3 1.7.8 2.2 1.7.5.9.8 1.8.8 3-.1 1.3-.4 2.2-.9 3z"/></symbol><symbol id="trumbowyg-close" viewBox="0 0 72 72"><path d="M57 20.5l-5.4-5.4-15.5 15.5-15.6-15.5-5.4 5.4L30.7 36 15.1 51.5l5.4 5.4 15.6-15.5 15.5 15.5 5.4-5.4L41.5 36z"/></symbol><symbol id="trumbowyg-create-link" viewBox="0 0 72 72"><path d="M31.1 48.9l-6.7 6.7c-.8.8-1.6.9-2.1.9s-1.4-.1-2.1-.9L15 50.4c-1.1-1.1-1.1-3.1 0-4.2l6.1-6.1.2-.2 6.5-6.5c-1.2-.6-2.5-.9-3.8-.9-2.3 0-4.6.9-6.3 2.6L11 41.8c-3.5 3.5-3.5 9.2 0 12.7l5.2 5.2c1.7 1.7 4 2.6 6.3 2.6s4.6-.9 6.3-2.6l6.7-6.7c2.5-2.6 3.1-6.7 1.5-10l-5.9 5.9zM38.7 22.5l6.7-6.7c.8-.8 1.6-.9 2.1-.9s1.4.1 2.1.9l5.2 5.2c1.1 1.1 1.1 3.1 0 4.2l-6.1 6.1-.2.2L42 38c1.2.6 2.5.9 3.8.9 2.3 0 4.6-.9 6.3-2.6l6.7-6.7c3.5-3.5 3.5-9.2 0-12.7l-5.2-5.2c-1.7-1.7-4-2.6-6.3-2.6s-4.6.9-6.3 2.6l-6.7 6.7c-2.7 2.7-3.3 6.9-1.7 10.2l6.1-6.1c0 .1 0 .1 0 0z"/><path d="M44.2 30.5c.2-.2.4-.6.4-.9 0-.3-.1-.6-.4-.9l-2.3-2.3c-.3-.2-.6-.4-.9-.4-.3 0-.6.1-.9.4L25.9 40.6c-.2.2-.4.6-.4.9 0 .3.1.6.4.9l2.3 2.3c.2.2.6.4.9.4.3 0 .6-.1.9-.4l14.2-14.2zM49.9 55.4h-8.5v-5h8.5v-8.9h5.2v8.9h8.5v5h-8.5v8.9h-5.2v-8.9z"/></symbol><symbol id="trumbowyg-del" viewBox="0 0 72 72"><path d="M45.8 45c0 1-.3 1.9-.9 2.8-.6.9-1.6 1.6-3 2.1s-3.1.8-5 .8c-2.1 0-4-.4-5.7-1.1-1.7-.7-2.9-1.7-3.6-2.7-.8-1.1-1.3-2.6-1.5-4.5l-.1-.8-6.7.6v.9c.1 2.8.9 5.4 2.3 7.6 1.5 2.3 3.5 4 6.1 5.1 2.6 1.1 5.7 1.6 9.4 1.6 2.9 0 5.6-.5 8-1.6 2.4-1.1 4.3-2.7 5.6-4.7 1.3-2 2-4.2 2-6.5 0-1.6-.3-3.1-.9-4.5l-.2-.6H44c0 .1 1.8 2.3 1.8 5.5zM29 28.9c-.8-.8-1.2-1.7-1.2-2.9 0-.7.1-1.3.4-1.9.3-.6.7-1.1 1.4-1.6.6-.5 1.4-.9 2.5-1.1 1.1-.3 2.4-.4 3.9-.4 2.9 0 5 .6 6.3 1.7 1.3 1.1 2.1 2.7 2.4 5.1l.1.9 6.8-.5v-.9c-.1-2.5-.8-4.7-2.1-6.7s-3.2-3.5-5.6-4.5c-2.4-1-5.1-1.5-8.1-1.5-2.8 0-5.3.5-7.6 1.4-2.3 1-4.2 2.4-5.4 4.3-1.2 1.9-1.9 3.9-1.9 6.1 0 1.7.4 3.4 1.2 4.9l.3.5h11.8c-2.3-.9-3.9-1.7-5.2-2.9zm13.3-6.2zM22.7 20.3zM13 34.1h46.1v3.4H13z"/></symbol><symbol id="trumbowyg-em" viewBox="0 0 72 72"><path d="M26 57l10.1-42h7.2L33.2 57H26z"/></symbol><symbol id="trumbowyg-fontsize" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M9 4v3h5v12h3V7h5V4H9zm-6 8h3v7h3v-7h3V9H3v3z"/></symbol><symbol id="trumbowyg-fullscreen" viewBox="0 0 72 72"><path d="M25.2 7.1H7.1v17.7l6.7-6.5 10.5 10.5 4.5-4.5-10.4-10.5zM47.2 7.1l6.5 6.7-10.5 10.5 4.5 4.5 10.5-10.4 6.7 6.8V7.1zM47.7 43.2l-4.5 4.5 10.4 10.5-6.8 6.7h18.1V47.2l-6.7 6.5zM24.3 43.2L13.8 53.6l-6.7-6.8v18.1h17.7l-6.5-6.7 10.5-10.5z"/><path fill="currentColor" d="M10.7 28.8h18.1V11.2l-6.6 6.4L11.6 7.1l-4.5 4.5 10.5 10.5zM60.8 28.8l-6.4-6.6 10.5-10.6-4.5-4.5-10.5 10.5-6.7-6.9v18.1zM60.4 64.9l4.5-4.5-10.5-10.5 6.9-6.7H43.2v17.6l6.6-6.4zM11.6 64.9l10.5-10.5 6.7 6.9V43.2H11.1l6.5 6.6L7.1 60.4z"/></symbol><symbol id="trumbowyg-h1" viewBox="0 0 72 72"><path d="M6.4 14.9h7.4v16.7h19.1V14.9h7.4V57h-7.4V38H13.8v19H6.4V14.9zM47.8 22.5c1.4 0 2.8-.1 4.1-.4 1.3-.2 2.5-.6 3.6-1.2 1.1-.5 2-1.3 2.8-2.1.8-.9 1.3-1.9 1.5-3.2h5.5v41.2h-7.4v-29H47.8v-5.3z"/></symbol><symbol id="trumbowyg-h2" viewBox="0 0 72 72"><path d="M1.5 14.9h7.4v16.7H28V14.9h7.4V57H28V38H8.8v19H1.5V14.9zM70.2 56.9H42c0-3.4.9-6.4 2.5-9s3.8-4.8 6.6-6.7c1.3-1 2.7-1.9 4.2-2.9 1.5-.9 2.8-1.9 4-3 1.2-1.1 2.2-2.2 3-3.4.8-1.2 1.2-2.7 1.2-4.3 0-.7-.1-1.5-.3-2.4s-.5-1.6-1-2.4c-.5-.7-1.2-1.3-2.1-1.8-.9-.5-2.1-.7-3.5-.7-1.3 0-2.4.3-3.3.8s-1.6 1.3-2.1 2.2-.9 2-1.2 3.3c-.3 1.3-.4 2.6-.4 4.1h-6.7c0-2.3.3-4.4.9-6.3.6-1.9 1.5-3.6 2.7-5 1.2-1.4 2.7-2.5 4.4-3.3 1.7-.8 3.8-1.2 6.1-1.2 2.5 0 4.6.4 6.3 1.2 1.7.8 3.1 1.9 4.1 3.1 1 1.3 1.8 2.6 2.2 4.1.4 1.5.6 2.9.6 4.2 0 1.6-.3 3.1-.8 4.5-.5 1.3-1.2 2.6-2.1 3.7-.9 1.1-1.8 2.2-2.9 3.1-1.1.9-2.2 1.8-3.4 2.7-1.2.8-2.4 1.6-3.5 2.4-1.2.7-2.3 1.5-3.3 2.2-1 .7-1.9 1.5-2.6 2.3-.7.8-1.3 1.7-1.5 2.6h20.1v5.9z"/></symbol><symbol id="trumbowyg-h3" viewBox="0 0 72 72"><path d="M1.4 14.5h7.4v16.7h19.1V14.5h7.4v42.1h-7.4v-19H8.8v19H1.4V14.5zM53.1 32.4c1.1 0 2.2 0 3.3-.2 1.1-.2 2.1-.5 2.9-1 .9-.5 1.6-1.2 2.1-2 .5-.9.8-1.9.8-3.2 0-1.8-.6-3.2-1.8-4.2-1.2-1.1-2.7-1.6-4.6-1.6-1.2 0-2.2.2-3.1.7-.9.5-1.6 1.1-2.2 1.9-.6.8-1 1.7-1.3 2.7-.3 1-.4 2-.4 3.1h-6.7c.1-2 .5-3.9 1.1-5.6.7-1.7 1.6-3.2 2.7-4.4s2.6-2.2 4.2-2.9c1.6-.7 3.5-1.1 5.6-1.1 1.6 0 3.2.2 4.7.7 1.6.5 2.9 1.2 4.2 2.1 1.2.9 2.2 2.1 3 3.4.7 1.4 1.1 3 1.1 4.8 0 2.1-.5 3.9-1.4 5.4-.9 1.6-2.4 2.7-4.4 3.4v.1c2.4.5 4.2 1.6 5.5 3.5 1.3 1.9 2 4.1 2 6.8 0 2-.4 3.7-1.2 5.3-.8 1.6-1.8 2.9-3.2 3.9-1.3 1.1-2.9 1.9-4.7 2.5-1.8.6-3.6.9-5.6.9-2.4 0-4.5-.3-6.3-1s-3.3-1.7-4.5-2.9c-1.2-1.3-2.1-2.8-2.7-4.5-.6-1.8-1-3.7-1-5.9h6.7c-.1 2.5.5 4.6 1.9 6.3 1.3 1.7 3.3 2.5 5.9 2.5 2.2 0 4.1-.6 5.6-1.9 1.5-1.3 2.3-3.1 2.3-5.4 0-1.6-.3-2.9-.9-3.8-.6-.9-1.5-1.7-2.5-2.2-1-.5-2.2-.8-3.4-.9-1.3-.1-2.6-.2-3.9-.1v-5.2z"/></symbol><symbol id="trumbowyg-h4" viewBox="0 0 72 72"><path d="M1.5 14.9h7.4v16.7H28V14.9h7.4V57H28V38H8.9v19H1.5V14.9zM70.5 47.2h-5.3V57h-6.4v-9.8H41.2v-6.7l17.7-24.8h6.4v26.2h5.3v5.3zm-24.2-5.3h12.5V23.7h-.1L46.3 41.9z"/></symbol><symbol id="trumbowyg-horizontal-rule" viewBox="0 0 72 72"><path d="M9.1 32h54v8h-54z"/></symbol><symbol id="trumbowyg-insert-image" viewBox="0 0 72 72"><path d="M64 17v38H8V17h56m8-8H0v54h72V9z"/><path d="M17.5 22C15 22 13 24 13 26.5s2 4.5 4.5 4.5 4.5-2 4.5-4.5-2-4.5-4.5-4.5zM16 50h27L29.5 32zM36 36.2l8.9-8.5L60.2 50H45.9S35.6 35.9 36 36.2z"/></symbol><symbol id="trumbowyg-italic" viewBox="0 0 72 72"><path d="M26 57l10.1-42h7.2L33.2 57H26z"/></symbol><symbol id="trumbowyg-justify-center" viewBox="0 0 72 72"><path d="M9 14h54v8H9zM9 50h54v8H9zM18 32h36v8H18z"/></symbol><symbol id="trumbowyg-justify-full" viewBox="0 0 72 72"><path d="M9 14h54v8H9zM9 50h54v8H9zM9 32h54v8H9z"/></symbol><symbol id="trumbowyg-justify-left" viewBox="0 0 72 72"><path d="M9 14h54v8H9zM9 50h54v8H9zM9 32h36v8H9z"/></symbol><symbol id="trumbowyg-justify-right" viewBox="0 0 72 72"><path d="M9 14h54v8H9zM9 50h54v8H9zM27 32h36v8H27z"/></symbol><symbol id="trumbowyg-lineheight" viewBox="0 0 72 72"><path d="M31 14h36v8H31zM31 50h36v8H31zM31 32h30v8H31z"/><path stroke-miterlimit="10" fill="none" stroke="currentColor" stroke-width="3.6428" d="M7.82 47.207l8.332 8.15 8.106-8.15M24.276 24.635l-8.333-8.15-8.105 8.15"/><path d="M14.347 53.761v-36h3.385v36z"/></symbol><symbol id="trumbowyg-link" viewBox="0 0 72 72"><path d="M30.9 49.1l-6.7 6.7c-.8.8-1.6.9-2.1.9s-1.4-.1-2.1-.9l-5.2-5.2c-1.1-1.1-1.1-3.1 0-4.2l6.1-6.1.2-.2 6.5-6.5c-1.2-.6-2.5-.9-3.8-.9-2.3 0-4.6.9-6.3 2.6L10.8 42c-3.5 3.5-3.5 9.2 0 12.7l5.2 5.2c1.7 1.7 4 2.6 6.3 2.6s4.6-.9 6.3-2.6l6.7-6.7C38 50.5 38.6 46.3 37 43l-6.1 6.1zM38.5 22.7l6.7-6.7c.8-.8 1.6-.9 2.1-.9s1.4.1 2.1.9l5.2 5.2c1.1 1.1 1.1 3.1 0 4.2l-6.1 6.1-.2.2-6.5 6.5c1.2.6 2.5.9 3.8.9 2.3 0 4.6-.9 6.3-2.6l6.7-6.7c3.5-3.5 3.5-9.2 0-12.7l-5.2-5.2c-1.7-1.7-4-2.6-6.3-2.6s-4.6.9-6.3 2.6l-6.7 6.7c-2.7 2.7-3.3 6.9-1.7 10.2l6.1-6.1z"/><path d="M44.1 30.7c.2-.2.4-.6.4-.9 0-.3-.1-.6-.4-.9l-2.3-2.3c-.2-.2-.6-.4-.9-.4-.3 0-.6.1-.9.4L25.8 40.8c-.2.2-.4.6-.4.9 0 .3.1.6.4.9l2.3 2.3c.2.2.6.4.9.4.3 0 .6-.1.9-.4l14.2-14.2z"/></symbol><symbol id="trumbowyg-ordered-list" viewBox="0 0 72 72"><path d="M27 14h36v8H27zM27 50h36v8H27zM27 32h36v8H27zM11.8 15.8V22h1.8v-7.8h-1.5l-2.1 1 .3 1.3zM12.1 38.5l.7-.6c1.1-1 2.1-2.1 2.1-3.4 0-1.4-1-2.4-2.7-2.4-1.1 0-2 .4-2.6.8l.5 1.3c.4-.3 1-.6 1.7-.6.9 0 1.3.5 1.3 1.1 0 .9-.9 1.8-2.6 3.3l-1 .9V40H15v-1.5h-2.9zM13.3 53.9c1-.4 1.4-1 1.4-1.8 0-1.1-.9-1.9-2.6-1.9-1 0-1.9.3-2.4.6l.4 1.3c.3-.2 1-.5 1.6-.5.8 0 1.2.3 1.2.8 0 .7-.8.9-1.4.9h-.7v1.3h.7c.8 0 1.6.3 1.6 1.1 0 .6-.5 1-1.4 1-.7 0-1.5-.3-1.8-.5l-.4 1.4c.5.3 1.3.6 2.3.6 2 0 3.2-1 3.2-2.4 0-1.1-.8-1.8-1.7-1.9z"/></symbol><symbol id="trumbowyg-p" viewBox="0 0 72 72"><path d="M47.8 15.1H30.1c-4.7 0-8.5 3.7-8.5 8.4s3.7 8.4 8.4 8.4v25h7V19.8h3v37.1h4.1V19.8h3.7v-4.7z"/></symbol><symbol id="trumbowyg-redo" viewBox="0 0 72 72"><path d="M10.8 51.2c0-5.1 2.1-9.7 5.4-13.1 3.3-3.3 8-5.4 13.1-5.4H46v-12L61.3 36 45.9 51.3V39.1H29.3c-3.3 0-6.4 1.3-8.5 3.5-2.2 2.2-3.5 5.2-3.5 8.5h-6.5z"/></symbol><symbol id="trumbowyg-removeformat" viewBox="0 0 72 72"><path d="M58.2 54.6L52 48.5l3.6-3.6 6.1 6.1 6.4-6.4 3.8 3.8-6.4 6.4 6.1 6.1-3.6 3.6-6.1-6.1-6.4 6.4-3.7-3.8 6.4-6.4zM21.7 52.1H50V57H21.7zM18.8 15.2h34.1v6.4H39.5v24.2h-7.4V21.5H18.8v-6.3z"/></symbol><symbol id="trumbowyg-strikethrough" viewBox="0 0 72 72"><path d="M45.8 45c0 1-.3 1.9-.9 2.8-.6.9-1.6 1.6-3 2.1s-3.1.8-5 .8c-2.1 0-4-.4-5.7-1.1-1.7-.7-2.9-1.7-3.6-2.7-.8-1.1-1.3-2.6-1.5-4.5l-.1-.8-6.7.6v.9c.1 2.8.9 5.4 2.3 7.6 1.5 2.3 3.5 4 6.1 5.1 2.6 1.1 5.7 1.6 9.4 1.6 2.9 0 5.6-.5 8-1.6 2.4-1.1 4.3-2.7 5.6-4.7 1.3-2 2-4.2 2-6.5 0-1.6-.3-3.1-.9-4.5l-.2-.6H44c0 .1 1.8 2.3 1.8 5.5zM29 28.9c-.8-.8-1.2-1.7-1.2-2.9 0-.7.1-1.3.4-1.9.3-.6.7-1.1 1.4-1.6.6-.5 1.4-.9 2.5-1.1 1.1-.3 2.4-.4 3.9-.4 2.9 0 5 .6 6.3 1.7 1.3 1.1 2.1 2.7 2.4 5.1l.1.9 6.8-.5v-.9c-.1-2.5-.8-4.7-2.1-6.7s-3.2-3.5-5.6-4.5c-2.4-1-5.1-1.5-8.1-1.5-2.8 0-5.3.5-7.6 1.4-2.3 1-4.2 2.4-5.4 4.3-1.2 1.9-1.9 3.9-1.9 6.1 0 1.7.4 3.4 1.2 4.9l.3.5h11.8c-2.3-.9-3.9-1.7-5.2-2.9zm13.3-6.2zM22.7 20.3zM13 34.1h46.1v3.4H13z"/></symbol><symbol id="trumbowyg-strong" viewBox="0 0 72 72"><path d="M51.1 37.8c-1.1-1.4-2.5-2.5-4.2-3.3 1.2-.8 2.1-1.8 2.8-3 1-1.6 1.5-3.5 1.5-5.3 0-2-.6-4-1.7-5.8-1.1-1.8-2.8-3.2-4.8-4.1-2-.9-4.6-1.3-7.8-1.3h-16v42h16.3c2.6 0 4.8-.2 6.7-.7 1.9-.5 3.4-1.2 4.7-2.1 1.3-1 2.4-2.4 3.2-4.1.9-1.7 1.3-3.6 1.3-5.7.2-2.5-.5-4.7-2-6.6zM40.8 50.2c-.6.1-1.8.2-3.4.2h-9V38.5h8.3c2.5 0 4.4.2 5.6.6 1.2.4 2 1 2.7 2 .6.9 1 2 1 3.3 0 1.1-.2 2.1-.7 2.9-.5.9-1 1.5-1.7 1.9-.8.4-1.7.8-2.8 1zm2.6-20.4c-.5.7-1.3 1.3-2.5 1.6-.8.3-2.5.4-4.8.4h-7.7V21.6h7.1c1.4 0 2.6 0 3.6.1s1.7.2 2.2.4c1 .3 1.7.8 2.2 1.7.5.9.8 1.8.8 3-.1 1.3-.4 2.2-.9 3z"/></symbol><symbol id="trumbowyg-subscript" viewBox="0 0 72 72"><path d="M32 15h7.8L56 57.1h-7.9L44.3 46H27.4l-4 11.1h-7.6L32 15zm-2.5 25.4h12.9L36 22.3h-.2l-6.3 18.1zM58.7 59.9c.6-1.4 2-2.8 4.1-4.4 1.9-1.3 3.1-2.3 3.7-2.9.8-.9 1.3-1.9 1.3-3 0-.9-.2-1.6-.7-2.2-.5-.6-1.2-.9-2.1-.9-1.2 0-2.1.5-2.5 1.4-.3.5-.4 1.4-.5 2.5h-4c.1-1.8.4-3.2 1-4.3 1.1-2.1 3-3.1 5.8-3.1 2.2 0 3.9.6 5.2 1.8 1.3 1.2 1.9 2.8 1.9 4.8 0 1.5-.5 2.9-1.4 4.1-.6.8-1.6 1.7-3 2.6L66 57.7c-1 .7-1.7 1.2-2.1 1.6-.4.3-.7.7-1 1.1H72V64H57.8c0-1.5.3-2.8.9-4.1z"/></symbol><symbol id="trumbowyg-superscript" viewBox="0 0 72 72"><path d="M32 15h7.8L56 57.1h-7.9l-4-11.1H27.4l-4 11.1h-7.6L32 15zm-2.5 25.4h12.9L36 22.3h-.2l-6.3 18.1zM49.6 28.8c.5-1.1 1.6-2.3 3.4-3.6 1.5-1.1 2.5-1.9 3-2.4.7-.7 1-1.6 1-2.4 0-.7-.2-1.3-.6-1.8-.4-.5-1-.7-1.7-.7-1 0-1.7.4-2.1 1.1-.2.4-.3 1.1-.4 2.1H49c.1-1.5.3-2.6.8-3.5.9-1.7 2.5-2.6 4.8-2.6 1.8 0 3.2.5 4.3 1.5 1.1 1 1.6 2.3 1.6 4 0 1.3-.4 2.4-1.1 3.4-.5.7-1.3 1.4-2.4 2.2l-1.3 1c-.8.6-1.4 1-1.7 1.3-.3.3-.6.6-.8.9h7.4v3H48.8c0-1.3.3-2.4.8-3.5z"/></symbol><symbol id="trumbowyg-table" viewBox="0 0 72 72"><path d="M25.686 51.38v-6.347q0-.462-.297-.76-.298-.297-.761-.297H14.04q-.463 0-.761.297-.298.298-.298.76v6.346q0 .463.298.76.298.298.76.298h10.589q.463 0 .76-.298.298-.297.298-.76zm0-12.692v-6.346q0-.463-.297-.76-.298-.298-.761-.298H14.04q-.463 0-.761.298-.298.297-.298.76v6.346q0 .462.298.76.298.297.76.297h10.589q.463 0 .76-.297.298-.298.298-.76zm16.94 12.691v-6.346q0-.462-.297-.76-.298-.297-.761-.297H30.98q-.463 0-.76.297-.299.298-.299.76v6.346q0 .463.298.76.298.298.761.298h10.588q.463 0 .76-.298.299-.297.299-.76zm-16.94-25.383v-6.345q0-.463-.297-.76-.298-.298-.761-.298H14.04q-.463 0-.761.297-.298.298-.298.76v6.346q0 .463.298.76.298.298.76.298h10.589q.463 0 .76-.298.298-.297.298-.76zm16.94 12.692v-6.346q0-.463-.297-.76-.298-.298-.761-.298H30.98q-.463 0-.76.298-.299.297-.299.76v6.346q0 .462.298.76.298.297.761.297h10.588q.463 0 .76-.297.299-.298.299-.76zm16.94 12.691v-6.346q0-.462-.297-.76-.298-.297-.76-.297H47.92q-.463 0-.76.297-.298.298-.298.76v6.346q0 .463.297.76.298.298.761.298h10.588q.463 0 .761-.298.298-.297.298-.76zm-16.94-25.383v-6.345q0-.463-.297-.76-.298-.298-.761-.298H30.98q-.463 0-.76.297-.299.298-.299.76v6.346q0 .463.298.76.298.298.761.298h10.588q.463 0 .76-.298.299-.297.299-.76zm16.94 12.692v-6.346q0-.463-.297-.76-.298-.298-.76-.298H47.92q-.463 0-.76.298-.298.297-.298.76v6.346q0 .462.297.76.298.297.761.297h10.588q.463 0 .761-.297.298-.298.298-.76zm0-12.692v-6.345q0-.463-.297-.76-.298-.298-.76-.298H47.92q-.463 0-.76.297-.298.298-.298.76v6.346q0 .463.297.76.298.298.761.298h10.588q.463 0 .761-.298.298-.297.298-.76zm4.236-10.576v35.96q0 2.18-1.555 3.734-1.555 1.553-3.739 1.553H14.04q-2.184 0-3.739-1.553-1.555-1.553-1.555-3.735V15.42q0-2.181 1.555-3.735 1.555-1.553 3.739-1.553h44.468q2.184 0 3.739 1.553 1.555 1.554 1.555 3.735z"/></symbol><symbol id="trumbowyg-underline" viewBox="0 0 72 72"><path d="M36 35zM15.2 55.9h41.6V59H15.2zM21.1 13.9h6.4v21.2c0 1.2.1 2.5.2 3.7.1 1.3.5 2.4 1 3.4.6 1 1.4 1.8 2.6 2.5 1.1.6 2.7 1 4.8 1 2.1 0 3.7-.3 4.8-1 1.1-.6 2-1.5 2.6-2.5.6-1 .9-2.1 1-3.4.1-1.3.2-2.5.2-3.7V13.9H51v23.3c0 2.3-.4 4.4-1.1 6.1-.7 1.7-1.7 3.2-3 4.4-1.3 1.2-2.9 2-4.7 2.6-1.8.6-3.9.9-6.1.9-2.2 0-4.3-.3-6.1-.9-1.8-.6-3.4-1.5-4.7-2.6-1.3-1.2-2.3-2.6-3-4.4-.7-1.7-1.1-3.8-1.1-6.1V13.9z"/></symbol><symbol id="trumbowyg-undo" viewBox="0 0 72 72"><path d="M61.2 51.2c0-5.1-2.1-9.7-5.4-13.1-3.3-3.3-8-5.4-13.1-5.4H26.1v-12L10.8 36l15.3 15.3V39.1h16.7c3.3 0 6.4 1.3 8.5 3.5 2.2 2.2 3.5 5.2 3.5 8.5h6.4z"/></symbol><symbol id="trumbowyg-unlink" viewBox="0 0 72 72"><path d="M30.9 49.1l-6.7 6.7c-.8.8-1.6.9-2.1.9s-1.4-.1-2.1-.9l-5.2-5.2c-1.1-1.1-1.1-3.1 0-4.2l6.1-6.1.2-.2 6.5-6.5c-1.2-.6-2.5-.9-3.8-.9-2.3 0-4.6.9-6.3 2.6L10.8 42c-3.5 3.5-3.5 9.2 0 12.7l5.2 5.2c1.7 1.7 4 2.6 6.3 2.6s4.6-.9 6.3-2.6l6.7-6.7C38 50.5 38.6 46.3 37 43l-6.1 6.1zM38.5 22.7l6.7-6.7c.8-.8 1.6-.9 2.1-.9s1.4.1 2.1.9l5.2 5.2c1.1 1.1 1.1 3.1 0 4.2l-6.1 6.1-.2.2-6.5 6.5c1.2.6 2.5.9 3.8.9 2.3 0 4.6-.9 6.3-2.6l6.7-6.7c3.5-3.5 3.5-9.2 0-12.7l-5.2-5.2c-1.7-1.7-4-2.6-6.3-2.6s-4.6.9-6.3 2.6l-6.7 6.7c-2.7 2.7-3.3 6.9-1.7 10.2l6.1-6.1z"/><path d="M44.1 30.7c.2-.2.4-.6.4-.9 0-.3-.1-.6-.4-.9l-2.3-2.3c-.2-.2-.6-.4-.9-.4-.3 0-.6.1-.9.4L25.8 40.8c-.2.2-.4.6-.4.9 0 .3.1.6.4.9l2.3 2.3c.2.2.6.4.9.4.3 0 .6-.1.9-.4l14.2-14.2zM41.3 55.8v-5h22.2v5H41.3z"/></symbol><symbol id="trumbowyg-unordered-list" viewBox="0 0 72 72"><path d="M27 14h36v8H27zM27 50h36v8H27zM9 50h9v8H9zM9 32h9v8H9zM9 14h9v8H9zM27 32h36v8H27z"/></symbol><symbol id="trumbowyg-view-html" viewBox="0 0 72 72"><path fill="none" stroke="currentColor" stroke-width="8" stroke-miterlimit="10" d="M26.9 17.9L9 36.2 26.9 54M45 54l17.9-18.3L45 17.9"/></symbol><symbol id="trumbowyg-base64" viewBox="0 0 72 72"><path d="M64 17v38H8V17h56m8-8H0v54h72V9z"/><path d="M29.9 28.9c-.5-.5-1.1-.8-1.8-.8s-1.4.2-1.9.7c-.5.4-.9 1-1.2 1.6-.3.6-.5 1.3-.6 2.1-.1.7-.2 1.4-.2 1.9l.1.1c.6-.8 1.2-1.4 2-1.8.8-.4 1.7-.5 2.7-.5.9 0 1.8.2 2.6.6.8.4 1.6.9 2.2 1.5.6.6 1 1.3 1.2 2.2.3.8.4 1.6.4 2.5 0 1.1-.2 2.1-.5 3-.3.9-.8 1.7-1.5 2.4-.6.7-1.4 1.2-2.3 1.6-.9.4-1.9.6-3 .6-1.6 0-2.8-.3-3.9-.9-1-.6-1.8-1.4-2.5-2.4-.6-1-1-2.1-1.3-3.4-.2-1.3-.4-2.6-.4-3.9 0-1.3.1-2.6.4-3.8.3-1.3.8-2.4 1.4-3.5.7-1 1.5-1.9 2.5-2.5 1-.6 2.3-1 3.8-1 .9 0 1.7.1 2.5.4.8.3 1.4.6 2 1.1.6.5 1.1 1.1 1.4 1.8.4.7.6 1.5.7 2.5h-4c0-1-.3-1.6-.8-2.1zm-3.5 6.8c-.4.2-.8.5-1 .8-.3.4-.5.8-.6 1.2-.1.5-.2 1-.2 1.5s.1.9.2 1.4c.1.5.4.9.6 1.2.3.4.6.7 1 .9.4.2.9.3 1.4.3.5 0 1-.1 1.3-.3.4-.2.7-.5 1-.9.3-.4.5-.8.6-1.2.1-.5.2-.9.2-1.4 0-.5-.1-1-.2-1.4-.1-.5-.3-.9-.6-1.2-.3-.4-.6-.7-1-.9-.4-.2-.9-.3-1.4-.3-.4 0-.9.1-1.3.3zM36.3 41.3v-3.8l9-12.1H49v12.4h2.7v3.5H49v4.8h-4v-4.8h-8.7zM45 30.7l-5.3 7.2h5.4l-.1-7.2z"/></symbol><symbol id="trumbowyg-back-color" viewBox="0 0 72 72"><path d="M36.5 22.3l-6.3 18.1H43l-6.3-18.1z"/><path d="M9 8.9v54.2h54.1V8.9H9zm39.9 48.2L45 46H28.2l-3.9 11.1h-7.6L32.8 15h7.8l16.2 42.1h-7.9z"/></symbol><symbol id="trumbowyg-fore-color" viewBox="0 0 72 72"><path d="M32 15h7.8L56 57.1h-7.9l-4-11.1H27.4l-4 11.1h-7.6L32 15zm-2.5 25.4h12.9L36 22.3h-.2l-6.3 18.1z"/></symbol><symbol id="trumbowyg-emoji" viewBox="0 0 72 72"><path d="M36.05 9C21.09 9 8.949 21.141 8.949 36.101c0 14.96 12.141 27.101 27.101 27.101 14.96 0 27.101-12.141 27.101-27.101S51.01 9 36.05 9zm9.757 15.095c2.651 0 4.418 1.767 4.418 4.418s-1.767 4.418-4.418 4.418-4.418-1.767-4.418-4.418 1.767-4.418 4.418-4.418zm-19.479 0c2.651 0 4.418 1.767 4.418 4.418s-1.767 4.418-4.418 4.418-4.418-1.767-4.418-4.418 1.767-4.418 4.418-4.418zm9.722 30.436c-14.093 0-16.261-13.009-16.261-13.009h32.522S50.143 54.531 36.05 54.531z"/></symbol><symbol id="trumbowyg-highlight" viewBox="0 0 60 60"><path d="M11 7c0-2.206-1.794-4-4-4S3 4.794 3 7s1.794 4 4 4 4-1.794 4-4zM7 9c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2zM16 11c2.206 0 4-1.794 4-4s-1.794-4-4-4-4 1.794-4 4 1.794 4 4 4zm0-6c1.103 0 2 .897 2 2s-.897 2-2 2-2-.897-2-2 .897-2 2-2zM25 11c2.206 0 4-1.794 4-4s-1.794-4-4-4-4 1.794-4 4 1.794 4 4 4zm0-6c1.103 0 2 .897 2 2s-.897 2-2 2-2-.897-2-2 .897-2 2-2z"/><path d="M0 0v60h60V0H0zm2 2h56v10H2V2zm0 56V14h5v44H2zm56 0H9V14h49v44z"/><path d="M5 17H4a1 1 0 1 0 0 2h1a1 1 0 1 0 0-2zM5 21H4a1 1 0 1 0 0 2h1a1 1 0 1 0 0-2zM5 25H4a1 1 0 1 0 0 2h1a1 1 0 1 0 0-2zM5 29H4a1 1 0 1 0 0 2h1a1 1 0 1 0 0-2zM5 33H4a1 1 0 1 0 0 2h1a1 1 0 1 0 0-2zM5 37H4a1 1 0 1 0 0 2h1a1 1 0 1 0 0-2zM5 41H4a1 1 0 1 0 0 2h1a1 1 0 1 0 0-2zM5 45H4a1 1 0 1 0 0 2h1a1 1 0 1 0 0-2zM5 49H4a1 1 0 1 0 0 2h1a1 1 0 1 0 0-2zM5 53H4a1 1 0 1 0 0 2h1a1 1 0 1 0 0-2zM13 19h13a1 1 0 1 0 0-2H13a1 1 0 1 0 0 2zM30 19h10a1 1 0 1 0 0-2H30a1 1 0 1 0 0 2zM44 19h2a1 1 0 1 0 0-2h-2a1 1 0 1 0 0 2zM35 22a1 1 0 0 0 1 1h15a1 1 0 1 0 0-2H36a1 1 0 0 0-1 1zM32 21H18a1 1 0 1 0 0 2h14a1 1 0 1 0 0-2zM13 23h1a1 1 0 1 0 0-2h-1a1 1 0 1 0 0 2zM13 27h9a1 1 0 1 0 0-2h-9a1 1 0 1 0 0 2zM26 27h2a1 1 0 1 0 0-2h-2a1 1 0 1 0 0 2zM46 25H32a1 1 0 1 0 0 2h14a1 1 0 1 0 0-2zM13 31h13a1 1 0 1 0 0-2H13a1 1 0 1 0 0 2zM41 30a1 1 0 0 0-1-1H30a1 1 0 1 0 0 2h10a1 1 0 0 0 1-1zM36 35h8a1 1 0 1 0 0-2h-8a1 1 0 1 0 0 2zM17 34a1 1 0 0 0 1 1h14a1 1 0 1 0 0-2H18a1 1 0 0 0-1 1zM13 35h1a1 1 0 1 0 0-2h-1a1 1 0 1 0 0 2zM13 39h9a1 1 0 1 0 0-2h-9a1 1 0 1 0 0 2zM26 39h2a1 1 0 1 0 0-2h-2a1 1 0 1 0 0 2zM31 38a1 1 0 0 0 1 1h15a1 1 0 1 0 0-2H32a1 1 0 0 0-1 1zM13 43h13a1 1 0 1 0 0-2H13a1 1 0 1 0 0 2zM40 41H30a1 1 0 1 0 0 2h10a1 1 0 1 0 0-2zM51 41h-7a1 1 0 1 0 0 2h7a1 1 0 1 0 0-2zM40 45h-4a1 1 0 1 0 0 2h4a1 1 0 1 0 0-2zM17 46a1 1 0 0 0 1 1h14a1 1 0 1 0 0-2H18a1 1 0 0 0-1 1zM13 47h1a1 1 0 1 0 0-2h-1a1 1 0 1 0 0 2zM22 49h-9a1 1 0 1 0 0 2h9a1 1 0 1 0 0-2zM28 49h-2a1 1 0 1 0 0 2h2a1 1 0 1 0 0-2zM39 49h-7a1 1 0 1 0 0 2h7a1 1 0 1 0 0-2zM44 49h-1a1 1 0 1 0 0 2h1a1 1 0 1 0 0-2z"/></symbol><symbol id="trumbowyg-insert-audio" viewBox="0 0 8 8"><path d="M3.344 0L2 2H0v4h2l1.344 2H4V0h-.656zM5 1v1c.152 0 .313.026.469.063H5.5c.86.215 1.5.995 1.5 1.938a1.99 1.99 0 0 1-2 2.001v1a2.988 2.988 0 0 0 3-3 2.988 2.988 0 0 0-3-3zm0 2v2l.25-.031C5.683 4.851 6 4.462 6 4c0-.446-.325-.819-.75-.938v-.031h-.031L5 3z"/></symbol><symbol id="trumbowyg-mathml" viewBox="0 0 445.878 445.878"><path d="M426.024 86.447H209.705l-84.911 298.911c-2.568 7.967-9.854 13.482-18.22 13.771-.236 0-.464.006-.688.006a19.868 19.868 0 0 1-18.436-12.478l-34.714-86.782H19.851C8.884 299.876 0 290.986 0 280.022c0-10.965 8.893-19.854 19.851-19.854H66.18a19.862 19.862 0 0 1 18.436 12.483l19.237 48.09 72.472-260.218a19.855 19.855 0 0 1 18.903-13.781h230.798c10.97 0 19.854 8.89 19.854 19.851s-8.892 19.854-19.856 19.854zm10.699 266.78l-78.259-87.904 74.576-82.783c1.318-1.454 1.638-3.547.857-5.341a4.977 4.977 0 0 0-4.54-2.946h-47.18a4.995 4.995 0 0 0-3.759 1.72l-50.059 58.047-49.674-58.029a4.95 4.95 0 0 0-3.771-1.738H225.58a4.947 4.947 0 0 0-4.521 2.929 4.939 4.939 0 0 0 .824 5.332l73.743 82.81-77.641 87.923a4.977 4.977 0 0 0-.813 5.325 4.978 4.978 0 0 0 4.528 2.92h48.9c1.472 0 2.867-.65 3.807-1.785l51.819-62.181 53.05 62.229a4.972 4.972 0 0 0 3.782 1.743h49.97a4.938 4.938 0 0 0 4.527-2.926 4.966 4.966 0 0 0-.832-5.345z"/></symbol><symbol id="trumbowyg-mention" viewBox="0 0 128 128"><path fill-rule="evenodd" d="M73.309 62.5c-1.53 9.86-8.16 17.85-14.45 17.85-5.61 0-8.5-4.08-8.5-10.54 0-13.089 8.84-24.139 20.06-24.139 2.21 0 3.91.34 5.27.68L73.309 62.5zm14.45 44.2c-6.8 3.57-15.98 5.44-24.65 5.44-25.329 0-43.519-16.15-43.519-44.54 0-32.469 22.78-52.869 48.789-52.869 26.35 0 40.63 17.17 40.63 39.27 0 19.549-9.18 28.899-16.49 28.729-4.76-.17-5.95-4.76-4.25-14.79l5.1-31.449c-4.25-2.38-12.75-4.25-20.23-4.25-24.48 0-39.779 18.87-39.779 39.609 0 13.94 7.99 22.1 19.039 22.1 9.01 0 16.66-4.42 21.93-13.09h.34c.85 9.01 6.63 13.09 14.62 13.09 18.36 0 32.3-15.64 32.3-40.459 0-28.56-21.42-49.13-51.34-49.13C31.83 4.361 6.67 34.451 6.67 69.13c0 33.32 24.82 53.55 53.039 53.55 12.07 0 20.91-1.53 31.11-6.12l-3.06-9.86z"/></symbol><symbol id="trumbowyg-noembed" viewBox="0 0 72 72"><path d="M31.5 33.6V25l11 11-11 11v-8.8z"/><path d="M64 17v38H8V17h56m8-8H0v54h72V9z"/></symbol><symbol id="trumbowyg-preformatted" viewBox="0 0 72 72"><path d="M10.3 33.5c.4 0 .9-.1 1.5-.2s1.2-.3 1.8-.7c.6-.3 1.1-.8 1.5-1.3.4-.5.6-1.3.6-2.1V17.1c0-1.4.3-2.6.8-3.6s1.2-1.9 2-2.5c.8-.7 1.6-1.2 2.5-1.5.9-.3 1.6-.5 2.2-.5h5.3v5.3h-3.2c-.7 0-1.3.1-1.8.4-.4.3-.8.6-1 1-.2.4-.4.9-.4 1.3-.1.5-.1.9-.1 1.4v11.4c0 1.2-.2 2.1-.7 2.9-.5.8-1 1.4-1.7 1.8-.6.4-1.3.8-2 1-.7.2-1.3.3-1.7.4v.1c.5 0 1 .1 1.7.3.7.2 1.3.5 2 .9.6.5 1.2 1.1 1.7 1.9.5.8.7 2 .7 3.4v11.1c0 .4 0 .9.1 1.4.1.5.2.9.4 1.3s.6.7 1 1c.4.3 1 .4 1.8.4h3.2V63h-5.3c-.6 0-1.4-.2-2.2-.5-.9-.3-1.7-.8-2.5-1.5s-1.4-1.5-2-2.5c-.5-1-.8-2.2-.8-3.6V43.5c0-.9-.2-1.7-.6-2.3-.4-.6-.9-1.1-1.5-1.5-.6-.4-1.2-.6-1.8-.7-.6-.1-1.1-.2-1.5-.2v-5.3zM61.8 38.7c-.4 0-1 .1-1.6.2-.6.1-1.2.4-1.8.7-.6.3-1.1.7-1.5 1.3-.4.5-.6 1.3-.6 2.1v12.1c0 1.4-.3 2.6-.8 3.6s-1.2 1.9-2 2.5c-.8.7-1.6 1.2-2.5 1.5-.9.3-1.6.5-2.2.5h-5.3v-5.3h3.2c.7 0 1.3-.1 1.8-.4.4-.3.8-.6 1-1 .2-.4.4-.9.4-1.3.1-.5.1-.9.1-1.4V42.3c0-1.2.2-2.1.7-2.9.5-.8 1-1.4 1.7-1.8.6-.4 1.3-.8 2-1 .7-.2 1.3-.3 1.7-.4v-.1c-.5 0-1-.1-1.7-.3-.7-.2-1.3-.5-2-.9-.6-.4-1.2-1.1-1.7-1.9-.5-.8-.7-2-.7-3.4V18.5c0-.4 0-.9-.1-1.4-.1-.5-.2-.9-.4-1.3s-.6-.7-1-1c-.4-.3-1-.4-1.8-.4h-3.2V9.1h5.3c.6 0 1.4.2 2.2.5.9.3 1.7.8 2.5 1.5s1.4 1.5 2 2.5c.5 1 .8 2.2.8 3.6v11.6c0 .9.2 1.7.6 2.3.4.6.9 1.1 1.5 1.5.6.4 1.2.6 1.8.7.6.1 1.2.2 1.6.2v5.2z"/></symbol><symbol id="trumbowyg-ruby" viewBox="0 0 72 72"><path d="M16.499 24.477h8.018L41.08 67.5H33l-4.04-11.361H11.804L7.764 67.5H0l16.499-43.023zm-2.65 25.907h13.127l-6.438-18.497h-.177l-6.512 18.497zM65.053 16.685c-6.316 1.178-12.025 1.98-17.126 2.408a362.385 362.385 0 0 0-.965 5.833c-.25 1.57-.679 3.907-1.286 7.013 3.033-1.963 5.852-3.266 8.458-3.907 2.639-.642 4.905-.891 6.797-.75 1.891.108 3.746.661 5.566 1.661 1.82.964 3.264 2.408 4.334 4.334 1.104 1.893 1.427 4.088.965 6.584-.466 2.461-1.554 4.494-3.265 6.101-1.679 1.605-3.658 2.783-5.941 3.532-2.283.785-4.853 1.251-7.707 1.391-2.819.144-5.906.161-9.259.056 0-1.642-.287-3.212-.857-4.71l.108-.59c2.711.5 5.246.768 7.601.802 2.39 0 4.529-.195 6.421-.589 1.927-.393 3.605-1.069 5.031-2.031 1.427-.965 2.319-2.319 2.676-4.067.394-1.75.269-3.229-.373-4.443-.644-1.249-1.446-2.213-2.408-2.891-.929-.68-2.161-1.034-3.693-1.071-1.536-.072-3.265.089-5.192.482-1.927.391-3.82 1.14-5.672 2.248a24.308 24.308 0 0 0-4.978 3.907l-4.872-1.981c1.463-5.031 2.355-8.597 2.677-10.703.321-2.105.642-4.067.963-5.887-3.961.25-7.154.411-9.58.481-.215-1.927-.52-3.534-.91-4.817l.32-.32c3.604.32 7.225.446 10.865.375.214-1.355.481-3.103.804-5.245.354-2.175.407-3.621.16-4.336.034-.784.374-1.017 1.017-.695l5.085.749c.428.251.444.573.055.964l-.857.91c-.537 2.89-.981 5.352-1.338 7.385 4.279-.427 9.312-1.393 15.092-2.89l1.284 4.707"/></symbol><symbol id="trumbowyg-col-delete" viewBox="0 0 24 24"><g transform="translate(-326 -532.36)"><rect width="6" height="15" x="335" y="537.36" fill="#ed5565" stroke="#000" stroke-linejoin="round" stroke-linecap="round" stroke-width=".837" rx=".646"/><path d="M347.58 536.498c-.051-.618-.55-1.138-1.178-1.138H329.6c-.628 0-1.127.52-1.18 1.138h-.02v15.663a1.2 1.2 0 0 0 1.2 1.2h16.801a1.2 1.2 0 0 0 1.2-1.2v-15.663h-.021M334.4 552.16h-4.8v-3.6h4.8v3.6m0-4.7h-4.8v-3.7h4.8v3.7m0-4.9h-4.8v-3.601h4.8v3.6m6 9.601h-4.8v-3.6h4.8v3.6m0-4.7h-4.8v-3.7h4.8v3.7m0-4.9h-4.8v-3.601h4.8v3.6m6.001 9.601h-4.8v-3.6h4.8v3.6m0-4.7h-4.8v-3.7h4.8v3.7m0-4.9h-4.8v-3.601h4.8v3.6"/></g></symbol><symbol id="trumbowyg-col-left" viewBox="0 0 24 24"><g transform="translate(-326 -532.36)"><rect width="6" height="15" x="329" y="537.36" fill="#1ab394" stroke="#000" stroke-linejoin="round" stroke-linecap="round" stroke-width=".837" rx=".646"/><path d="M347.58 536.498c-.051-.618-.55-1.138-1.178-1.138H329.6c-.628 0-1.127.52-1.18 1.138h-.02v15.663a1.2 1.2 0 0 0 1.2 1.2h16.801a1.2 1.2 0 0 0 1.2-1.2v-15.663h-.021M334.4 552.16h-4.8v-3.6h4.8v3.6m0-4.7h-4.8v-3.7h4.8v3.7m0-4.9h-4.8v-3.601h4.8v3.6m6 9.601h-4.8v-3.6h4.8v3.6m0-4.7h-4.8v-3.7h4.8v3.7m0-4.9h-4.8v-3.601h4.8v3.6m6.001 9.601h-4.8v-3.6h4.8v3.6m0-4.7h-4.8v-3.7h4.8v3.7m0-4.9h-4.8v-3.601h4.8v3.6"/></g></symbol><symbol id="trumbowyg-col-right" viewBox="0 0 24 24"><g transform="matrix(-1 0 0 1 350 -532.36)"><rect y="537.36" x="329" height="15" width="6" fill="#1ab394" stroke="#000" stroke-linejoin="round" stroke-linecap="round" stroke-width=".837" rx=".646"/><path d="M347.58 536.498c-.051-.618-.55-1.138-1.178-1.138H329.6c-.628 0-1.127.52-1.18 1.138h-.02v15.663a1.2 1.2 0 0 0 1.2 1.2h16.801a1.2 1.2 0 0 0 1.2-1.2v-15.663h-.021M334.4 552.16h-4.8v-3.6h4.8v3.6m0-4.7h-4.8v-3.7h4.8v3.7m0-4.9h-4.8v-3.601h4.8v3.6m6 9.601h-4.8v-3.6h4.8v3.6m0-4.7h-4.8v-3.7h4.8v3.7m0-4.9h-4.8v-3.601h4.8v3.6m6.001 9.601h-4.8v-3.6h4.8v3.6m0-4.7h-4.8v-3.7h4.8v3.7m0-4.9h-4.8v-3.601h4.8v3.6"/></g></symbol><symbol id="trumbowyg-row-above" viewBox="0 0 24 24"><rect y="-347" x="537.06" height="18" width="6" transform="matrix(0 1 1 0 350 -532.36)" fill="#1ab394" stroke="#000" stroke-linejoin="round" stroke-linecap="round" stroke-width=".917" rx=".776"/><path d="M2.42 4.138C2.47 3.52 2.97 3 3.598 3H20.4c.628 0 1.127.52 1.18 1.138h.02V19.8a1.2 1.2 0 0 1-1.2 1.2H3.599a1.2 1.2 0 0 1-1.2-1.2V4.138h.021M15.6 19.8h4.8v-3.6h-4.8v3.6m0-4.7h4.8v-3.7h-4.8v3.7m0-4.9h4.8V6.6h-4.8v3.6m-6 9.601h4.8v-3.6H9.6v3.6m0-4.7h4.8v-3.7H9.6v3.7m0-4.9h4.8V6.6H9.6v3.6m-6.001 9.601h4.8v-3.6H3.6v3.6m0-4.7h4.8v-3.7H3.6v3.7m0-4.9h4.8V6.6H3.6v3.6"/></symbol><symbol id="trumbowyg-row-below" viewBox="0 0 24 24"><rect y="-347.06" x="548.4" height="18.13" width="4.427" transform="matrix(0 1 1 0 350 -532.36)" fill="#1ab394" stroke="#000" stroke-linejoin="round" stroke-linecap="round" stroke-width=".79" rx=".781"/><path d="M2.42 4.138C2.47 3.52 2.97 3 3.598 3H20.4c.628 0 1.127.52 1.18 1.138h.02V19.8a1.2 1.2 0 0 1-1.2 1.2H3.599a1.2 1.2 0 0 1-1.2-1.2V4.138h.021M15.6 19.8h4.8v-3.6h-4.8v3.6m0-4.7h4.8v-3.7h-4.8v3.7m0-4.9h4.8V6.6h-4.8v3.6m-6 9.601h4.8v-3.6H9.6v3.6m0-4.7h4.8v-3.7H9.6v3.7m0-4.9h4.8V6.6H9.6v3.6m-6.001 9.601h4.8v-3.6H3.6v3.6m0-4.7h4.8v-3.7H3.6v3.7m0-4.9h4.8V6.6H3.6v3.6"/></symbol><symbol id="trumbowyg-row-delete" viewBox="0 0 24 24"><rect width="5" height="18" x="543.36" y="-347" transform="rotate(90 103.18 -429.18)" fill="#ed5565" rx=".776"/><path d="M21.58 4.136c-.051-.618-.55-1.138-1.178-1.138H3.6c-.628 0-1.127.52-1.18 1.138H2.4v15.663A1.2 1.2 0 0 0 3.6 21h16.801a1.2 1.2 0 0 0 1.2-1.2V4.136h-.021M8.4 19.799H3.6v-3.6h4.8v3.6m0-4.7H3.6v-3.7h4.8v3.7m0-4.9H3.6V6.597h4.8v3.6m6 9.601H9.6v-3.6h4.8v3.6m0-4.7H9.6v-3.7h4.8v3.7m0-4.9H9.6V6.597h4.8v3.6m6.001 9.601h-4.8v-3.6h4.8v3.6m0-4.7h-4.8v-3.7h4.8v3.7m0-4.9h-4.8V6.597h4.8v3.6"/></symbol><symbol id="trumbowyg-table-delete" viewBox="0 0 24 24"><rect y="-347" x="537.06" height="18" width="6" transform="matrix(0 1 1 0 350 -532.36)" fill="#ed5565" stroke="#000" stroke-linejoin="round" stroke-linecap="round" stroke-width=".917" rx=".776"/><rect width="5" height="18" x="543.36" y="-347" transform="rotate(90 103.18 -429.18)" fill="#ed5565" rx=".776"/><rect y="-347.06" x="548.4" height="18.13" width="4.427" transform="matrix(0 1 1 0 350 -532.36)" fill="#ed5565" stroke="#000" stroke-linejoin="round" stroke-linecap="round" stroke-width=".79" rx=".781"/><path d="M21.58 4.136c-.051-.618-.55-1.138-1.178-1.138H3.6c-.628 0-1.127.52-1.18 1.138H2.4v15.663A1.2 1.2 0 0 0 3.6 21h16.801a1.2 1.2 0 0 0 1.2-1.2V4.136h-.021M8.4 19.799H3.6v-3.6h4.8v3.6m0-4.7H3.6v-3.7h4.8v3.7m0-4.9H3.6V6.597h4.8v3.6m6 9.601H9.6v-3.6h4.8v3.6m0-4.7H9.6v-3.7h4.8v3.7m0-4.9H9.6V6.597h4.8v3.6m6.001 9.601h-4.8v-3.6h4.8v3.6m0-4.7h-4.8v-3.7h4.8v3.7m0-4.9h-4.8V6.597h4.8v3.6"/></symbol><symbol id="trumbowyg-upload" viewBox="0 0 72 72"><path d="M64 27v28H8V27H0v36h72V27h-8z"/><path d="M32.1 6.7h8v33.6h-8z"/><path d="M48 35.9L36 49.6 24 36h24z"/></symbol></svg>+ \ No newline at end of file diff --git a/modules/editor/trumbowyg/ui/sass/trumbowyg.scss b/modules/editor/trumbowyg/ui/sass/trumbowyg.scss @@ -0,0 +1,809 @@ +/** + * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor + * Default stylesheet for Trumbowyg editor + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +$light-color: #ecf0f1 !default; +$dark-color: #222 !default; + +$modal-submit-color: #2ecc71 !default; +$modal-reset-color: #EEE !default; + +$transition-duration: 150ms !default; +$slow-transition-duration: 300ms !default; + +#trumbowyg-icons { + overflow: hidden; + visibility: hidden; + height: 0; + width: 0; + + svg { + height: 0; + width: 0; + } +} + +.trumbowyg-box { + *, + *::before, + *::after { + box-sizing: border-box; + } + + svg { + width: 17px; + height: 100%; + fill: $dark-color; + } +} + +.trumbowyg-box, +.trumbowyg-editor { + display: block; + position: relative; + border: 1px solid #DDD; + width: 100%; + min-height: 300px; + margin: 17px auto; +} + +.trumbowyg-box .trumbowyg-editor { + margin: 0 auto; +} + +.trumbowyg-box.trumbowyg-fullscreen { + background: #FEFEFE; + border: none !important; +} + +.trumbowyg-editor, +.trumbowyg-textarea { + position: relative; + box-sizing: border-box; + padding: 20px; + min-height: 300px; + width: 100%; + border-style: none; + resize: none; + outline: none; + overflow: auto; + + &.trumbowyg-autogrow-on-enter { + transition: height $slow-transition-duration ease-out; + } +} + +.trumbowyg-box-blur .trumbowyg-editor { + *, + &::before { + color: transparent !important; + text-shadow: 0 0 7px #333; + + @media screen and (min-width: 0 \0) { + color: rgba(200, 200, 200, 0.6) !important; + } + @supports (-ms-accelerator:true) { + color: rgba(200, 200, 200, 0.6) !important; + } + } + img, + hr { + opacity: 0.2; + } +} + +.trumbowyg-textarea { + position: relative; + display: block; + overflow: auto; + border: none; + font-size: 14px; + font-family: "Inconsolata", "Consolas", "Courier", "Courier New", sans-serif; + line-height: 18px; +} + +.trumbowyg-box.trumbowyg-editor-visible { + .trumbowyg-textarea { + height: 1px !important; + width: 25%; + min-height: 0 !important; + padding: 0 !important; + background: none; + opacity: 0 !important; + } +} + +.trumbowyg-box.trumbowyg-editor-hidden { + .trumbowyg-textarea { + display: block; + } + .trumbowyg-editor { + display: none; + } +} + +.trumbowyg-box.trumbowyg-disabled { + .trumbowyg-textarea { + opacity: 0.8; + background: none; + } +} + +.trumbowyg-editor[contenteditable=true]:empty:not(:focus)::before { + content: attr(placeholder); + color: #999; + pointer-events: none; +} + +.trumbowyg-button-pane { + width: 100%; + min-height: 36px; + background: $light-color; + border-bottom: 1px solid darken($light-color, 7%); + margin: 0; + padding: 0 5px; + position: relative; + list-style-type: none; + line-height: 10px; + backface-visibility: hidden; + z-index: 11; + + &::after { + content: " "; + display: block; + position: absolute; + top: 36px; + left: 0; + right: 0; + width: 100%; + height: 1px; + background: darken($light-color, 7%); + } + + .trumbowyg-button-group { + display: inline-block; + + .trumbowyg-fullscreen-button svg { + color: transparent; + } + + &::after { + content: " "; + display: inline-block; + width: 1px; + background: darken($light-color, 7%); + margin: 0 5px; + height: 35px; + vertical-align: top; + } + + &:last-child::after { + content: none; + } + } + + button { + display: inline-block; + position: relative; + width: 35px; + height: 35px; + padding: 1px 6px !important; + margin-bottom: 1px; + overflow: hidden; + border: none; + cursor: pointer; + background: none; + vertical-align: middle; + transition: background-color $transition-duration, opacity $transition-duration; + + &.trumbowyg-textual-button { + width: auto; + line-height: 35px; + user-select: none; + } + } + + &.trumbowyg-disable button:not(.trumbowyg-not-disable):not(.trumbowyg-active), + button.trumbowyg-disable, + .trumbowyg-disabled & button:not(.trumbowyg-not-disable):not(.trumbowyg-viewHTML-button) { + opacity: 0.2; + cursor: default; + } + &.trumbowyg-disable, + .trumbowyg-disabled & { + .trumbowyg-button-group::before { + background: darken($light-color, 3%); + } + } + + button:not(.trumbowyg-disable):hover, + button:not(.trumbowyg-disable):focus, + button.trumbowyg-active { + background-color: #FFF; + outline: none; + } + + .trumbowyg-open-dropdown { + &::after { + display: block; + content: " "; + position: absolute; + top: 25px; + right: 3px; + height: 0; + width: 0; + border: 3px solid transparent; + border-top-color: #555; + } + + &.trumbowyg-textual-button { + padding-left: 10px !important; + padding-right: 18px !important; + + &::after { + top: 17px; + right: 7px; + } + } + } + + .trumbowyg-right { + float: right; + } +} + +.trumbowyg-dropdown { + width: 200px; + border: 1px solid $light-color; + padding: 5px 0; + border-top: none; + background: #FFF; + margin-left: -1px; + box-shadow: rgba(0, 0, 0, .1) 0 2px 3px; + z-index: 12; + + button { + display: block; + width: 100%; + height: 35px; + line-height: 35px; + text-decoration: none; + background: #FFF; + padding: 0 10px; + color: #333 !important; + border: none; + cursor: pointer; + text-align: left; + font-size: 15px; + transition: all $transition-duration; + + &:hover, + &:focus { + background: $light-color; + } + + svg { + float: left; + margin-right: 14px; + } + } +} + +/* Modal box */ +.trumbowyg-modal { + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + max-width: 520px; + width: 100%; + height: 350px; + z-index: 12; + overflow: hidden; + backface-visibility: hidden; +} + +.trumbowyg-modal-box { + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + max-width: 500px; + width: calc(100% - 20px); + padding-bottom: 45px; + z-index: 1; + background-color: #FFF; + text-align: center; + font-size: 14px; + box-shadow: rgba(0, 0, 0, .2) 0 2px 3px; + backface-visibility: hidden; + + .trumbowyg-modal-title { + font-size: 24px; + font-weight: bold; + margin: 0 0 20px; + padding: 15px 0 13px; + display: block; + border-bottom: 1px solid #EEE; + color: #333; + background: lighten($light-color, 5%); + } + + .trumbowyg-progress { + width: 100%; + height: 3px; + position: absolute; + top: 58px; + + .trumbowyg-progress-bar { + background: #2BC06A; + width: 0; + height: 100%; + transition: width $transition-duration linear; + } + } + + label { + display: block; + position: relative; + margin: 15px 12px; + height: 29px; + line-height: 29px; + overflow: hidden; + + .trumbowyg-input-infos { + display: block; + text-align: left; + height: 25px; + line-height: 25px; + transition: all 150ms; + + span { + display: block; + color: darken($light-color, 45%); + background-color: lighten($light-color, 5%); + border: 1px solid #DEDEDE; + padding: 0 7px; + width: 150px; + } + span.trumbowyg-msg-error { + color: #e74c3c; + } + } + + &.trumbowyg-input-error { + input, + textarea { + border: 1px solid #e74c3c; + } + + .trumbowyg-input-infos { + margin-top: -27px; + } + } + + input { + position: absolute; + top: 0; + right: 0; + height: 27px; + line-height: 27px; + border: 1px solid #DEDEDE; + background: #fff; + font-size: 14px; + max-width: 330px; + width: 70%; + padding: 0 7px; + transition: all $transition-duration; + + &:hover, + &:focus { + outline: none; + border: 1px solid #95a5a6; + } + &:focus { + background: lighten($light-color, 5%); + } + } + + input[type="checkbox"]{ + left: 5px; + top: 5px; + right: auto; + + + .trumbowyg-input-infos span{ + width: auto; + padding-left: 25px; + } + } + } + + .error { + margin-top: 25px; + display: block; + color: red; + } + + .trumbowyg-modal-button { + position: absolute; + bottom: 10px; + right: 0; + text-decoration: none; + color: #FFF; + display: block; + width: 100px; + height: 35px; + line-height: 33px; + margin: 0 10px; + background-color: #333; + border: none; + cursor: pointer; + font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif; + font-size: 16px; + transition: all $transition-duration; + + &.trumbowyg-modal-submit { + right: 110px; + background: darken($modal-submit-color, 3%); + + &:hover, + &:focus { + background: lighten($modal-submit-color, 5%); + outline: none; + } + &:active { + background: darken($modal-submit-color, 10%); + } + } + + &.trumbowyg-modal-reset { + color: #555; + background: darken($modal-reset-color, 3%); + + &:hover, + &:focus { + background: lighten($modal-reset-color, 5%); + outline: none; + } + &:active { + background: darken($modal-reset-color, 10%); + } + } + } +} + +.trumbowyg-overlay { + position: absolute; + background-color: rgba(255, 255, 255, 0.5); + height: 100%; + width: 100%; + left: 0; + display: none; + top: 0; + z-index: 10; +} + +/** + * Fullscreen + */ +body.trumbowyg-body-fullscreen { + overflow: hidden; +} + +.trumbowyg-fullscreen { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + margin: 0; + padding: 0; + z-index: 99999; + + &.trumbowyg-box, + .trumbowyg-editor { + border: none; + } + .trumbowyg-editor, + .trumbowyg-textarea { + height: calc(100% - 37px) !important; + overflow: auto; + } + .trumbowyg-overlay { + height: 100% !important; + } + .trumbowyg-button-group .trumbowyg-fullscreen-button svg { + color: $dark-color; + fill: transparent; + } +} + +.trumbowyg-editor { + object, + embed, + video, + img { + max-width: 100%; + } + video, + img { + height: auto; + } + img { + cursor: move; + } + + /* + * lset for resetCss option + */ + &.trumbowyg-reset-css { + background: #FEFEFE !important; + font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif !important; + font-size: 14px !important; + line-height: 1.45em !important; + color: #333; + + a { + color: #15c !important; + text-decoration: underline !important; + } + + div, + p, + ul, + ol, + blockquote { + box-shadow: none !important; + background: none !important; + margin: 0 !important; + margin-bottom: 15px !important; + line-height: 1.4em !important; + font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif !important; + font-size: 14px !important; + border: none; + } + iframe, + object, + hr { + margin-bottom: 15px !important; + } + blockquote { + margin-left: 32px !important; + font-style: italic !important; + color: #555; + } + ul { + list-style: disc; + } + ul, + ol { + padding-left: 20px !important; + } + ul ul, + ol ol, + ul ol, + ol ul { + border: none; + margin: 2px !important; + padding: 0 !important; + padding-left: 24px !important; + } + hr { + display: block; + height: 1px; + border: none; + border-top: 1px solid #CCC; + } + + h1, + h2, + h3, + h4 { + color: #111; + background: none; + margin: 0 !important; + padding: 0 !important; + font-weight: bold; + } + + h1 { + font-size: 32px !important; + line-height: 38px !important; + margin-bottom: 20px !important; + } + h2 { + font-size: 26px !important; + line-height: 34px !important; + margin-bottom: 15px !important; + } + h3 { + font-size: 22px !important; + line-height: 28px !important; + margin-bottom: 7px !important; + } + h4 { + font-size: 16px !important; + line-height: 22px !important; + margin-bottom: 7px !important; + } + } +} + +/* + * Dark theme + */ +.trumbowyg-dark { + .trumbowyg-textarea { + background: #111; + color: #ddd; + } + .trumbowyg-box { + border: 1px solid lighten($dark-color, 7%); + + &.trumbowyg-fullscreen { + background: #111; + } + &.trumbowyg-box-blur .trumbowyg-editor { + *, + &::before { + text-shadow: 0 0 7px #ccc; + + @media screen and (min-width: 0 \0 + ) { + color: rgba(20, 20, 20, 0.6) !important; + } + @supports (-ms-accelerator:true) { + color: rgba(20, 20, 20, 0.6) !important; + } + } + } + + svg { + fill: $light-color; + color: $light-color; + } + } + .trumbowyg-button-pane { + background-color: $dark-color; + border-bottom-color: lighten($dark-color, 7%); + + &::after { + background: lighten($dark-color, 7%); + } + + .trumbowyg-button-group:not(:empty) { + &::after { + background-color: lighten($dark-color, 7%); + } + .trumbowyg-fullscreen-button svg { + color: transparent; + } + } + + &.trumbowyg-disable { + .trumbowyg-button-group::after { + background-color: lighten($dark-color, 3%); + } + } + + button:not(.trumbowyg-disable):hover, + button:not(.trumbowyg-disable):focus, + button.trumbowyg-active { + background-color: #333; + } + + .trumbowyg-open-dropdown::after { + border-top-color: #fff; + } + } + .trumbowyg-fullscreen { + .trumbowyg-button-group .trumbowyg-fullscreen-button svg { + color: $light-color; + fill: transparent; + } + } + + .trumbowyg-dropdown { + border-color: $dark-color; + background: #333; + box-shadow: rgba(0, 0, 0, .3) 0 2px 3px; + + button { + background: #333; + color: #fff !important; + + &:hover, + &:focus { + background: $dark-color; + } + } + } + + // Modal box + .trumbowyg-modal-box { + background-color: $dark-color; + + .trumbowyg-modal-title { + border-bottom: 1px solid #555; + color: #fff; + background: lighten($dark-color, 10%); + } + + label { + display: block; + position: relative; + margin: 15px 12px; + height: 27px; + line-height: 27px; + overflow: hidden; + + .trumbowyg-input-infos { + span { + color: #eee; + background-color: lighten($dark-color, 5%); + border-color: $dark-color; + } + span.trumbowyg-msg-error { + color: #e74c3c; + } + } + + &.trumbowyg-input-error { + input, + textarea { + border-color: #e74c3c; + } + } + + input { + border-color: $dark-color; + color: #eee; + background: #333; + + &:hover, + &:focus { + border-color: lighten($dark-color, 25%); + } + &:focus { + background-color: lighten($dark-color, 5%); + } + } + } + + .trumbowyg-modal-button { + &.trumbowyg-modal-submit { + background: darken($modal-submit-color, 20%); + + &:hover, + &:focus { + background: darken($modal-submit-color, 10%); + } + &:active { + background: darken($modal-submit-color, 25%); + } + } + &.trumbowyg-modal-reset { + background: #333; + color: #ccc; + + &:hover, + &:focus { + background: #444; + } + &:active { + background: #111; + } + } + } + } + .trumbowyg-overlay { + background-color: rgba(15, 15, 15, 0.6); + } +} diff --git a/modules/editor/trumbowyg/ui/trumbowyg.css b/modules/editor/trumbowyg/ui/trumbowyg.css @@ -0,0 +1,587 @@ +/** + * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor + * Default stylesheet for Trumbowyg editor + * ------------------------ + * @link http://alex-d.github.io/Trumbowyg + * @license MIT + * @author Alexandre Demode (Alex-D) + * Twitter : @AlexandreDemode + * Website : alex-d.fr + */ + +#trumbowyg-icons { + overflow: hidden; + visibility: hidden; + height: 0; + width: 0; } + #trumbowyg-icons svg { + height: 0; + width: 0; } + +.trumbowyg-box *, +.trumbowyg-box *::before, +.trumbowyg-box *::after { + box-sizing: border-box; } + +.trumbowyg-box svg { + width: 17px; + height: 100%; + fill: #222; } + +.trumbowyg-box, +.trumbowyg-editor { + display: block; + position: relative; + border: 1px solid #DDD; + width: 100%; + min-height: 300px; + margin: 17px auto; } + +.trumbowyg-box .trumbowyg-editor { + margin: 0 auto; } + +.trumbowyg-box.trumbowyg-fullscreen { + background: #FEFEFE; + border: none !important; } + +.trumbowyg-editor, +.trumbowyg-textarea { + position: relative; + box-sizing: border-box; + padding: 20px; + min-height: 300px; + width: 100%; + border-style: none; + resize: none; + outline: none; + overflow: auto; } + .trumbowyg-editor.trumbowyg-autogrow-on-enter, + .trumbowyg-textarea.trumbowyg-autogrow-on-enter { + transition: height 300ms ease-out; } + +.trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-box-blur .trumbowyg-editor::before { + color: transparent !important; + text-shadow: 0 0 7px #333; } + @media screen and (min-width: 0 \0) { + .trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-box-blur .trumbowyg-editor::before { + color: rgba(200, 200, 200, 0.6) !important; } } + @supports (-ms-accelerator: true) { + .trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-box-blur .trumbowyg-editor::before { + color: rgba(200, 200, 200, 0.6) !important; } } + +.trumbowyg-box-blur .trumbowyg-editor img, +.trumbowyg-box-blur .trumbowyg-editor hr { + opacity: 0.2; } + +.trumbowyg-textarea { + position: relative; + display: block; + overflow: auto; + border: none; + font-size: 14px; + font-family: "Inconsolata", "Consolas", "Courier", "Courier New", sans-serif; + line-height: 18px; } + +.trumbowyg-box.trumbowyg-editor-visible .trumbowyg-textarea { + height: 1px !important; + width: 25%; + min-height: 0 !important; + padding: 0 !important; + background: none; + opacity: 0 !important; } + +.trumbowyg-box.trumbowyg-editor-hidden .trumbowyg-textarea { + display: block; } + +.trumbowyg-box.trumbowyg-editor-hidden .trumbowyg-editor { + display: none; } + +.trumbowyg-box.trumbowyg-disabled .trumbowyg-textarea { + opacity: 0.8; + background: none; } + +.trumbowyg-editor[contenteditable=true]:empty:not(:focus)::before { + content: attr(placeholder); + color: #999; + pointer-events: none; } + +.trumbowyg-button-pane { + width: 100%; + min-height: 36px; + background: #ecf0f1; + border-bottom: 1px solid #d7e0e2; + margin: 0; + padding: 0 5px; + position: relative; + list-style-type: none; + line-height: 10px; + backface-visibility: hidden; + z-index: 11; } + .trumbowyg-button-pane::after { + content: " "; + display: block; + position: absolute; + top: 36px; + left: 0; + right: 0; + width: 100%; + height: 1px; + background: #d7e0e2; } + .trumbowyg-button-pane .trumbowyg-button-group { + display: inline-block; } + .trumbowyg-button-pane .trumbowyg-button-group .trumbowyg-fullscreen-button svg { + color: transparent; } + .trumbowyg-button-pane .trumbowyg-button-group::after { + content: " "; + display: inline-block; + width: 1px; + background: #d7e0e2; + margin: 0 5px; + height: 35px; + vertical-align: top; } + .trumbowyg-button-pane .trumbowyg-button-group:last-child::after { + content: none; } + .trumbowyg-button-pane button { + display: inline-block; + position: relative; + width: 35px; + height: 35px; + padding: 1px 6px !important; + margin-bottom: 1px; + overflow: hidden; + border: none; + cursor: pointer; + background: none; + vertical-align: middle; + transition: background-color 150ms, opacity 150ms; } + .trumbowyg-button-pane button.trumbowyg-textual-button { + width: auto; + line-height: 35px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .trumbowyg-button-pane.trumbowyg-disable button:not(.trumbowyg-not-disable):not(.trumbowyg-active), + .trumbowyg-button-pane button.trumbowyg-disable, + .trumbowyg-disabled .trumbowyg-button-pane button:not(.trumbowyg-not-disable):not(.trumbowyg-viewHTML-button) { + opacity: 0.2; + cursor: default; } + .trumbowyg-button-pane.trumbowyg-disable .trumbowyg-button-group::before, + .trumbowyg-disabled .trumbowyg-button-pane .trumbowyg-button-group::before { + background: #e3e9eb; } + .trumbowyg-button-pane button:not(.trumbowyg-disable):hover, + .trumbowyg-button-pane button:not(.trumbowyg-disable):focus, + .trumbowyg-button-pane button.trumbowyg-active { + background-color: #FFF; + outline: none; } + .trumbowyg-button-pane .trumbowyg-open-dropdown::after { + display: block; + content: " "; + position: absolute; + top: 25px; + right: 3px; + height: 0; + width: 0; + border: 3px solid transparent; + border-top-color: #555; } + .trumbowyg-button-pane .trumbowyg-open-dropdown.trumbowyg-textual-button { + padding-left: 10px !important; + padding-right: 18px !important; } + .trumbowyg-button-pane .trumbowyg-open-dropdown.trumbowyg-textual-button::after { + top: 17px; + right: 7px; } + .trumbowyg-button-pane .trumbowyg-right { + float: right; } + +.trumbowyg-dropdown { + width: 200px; + border: 1px solid #ecf0f1; + padding: 5px 0; + border-top: none; + background: #FFF; + margin-left: -1px; + box-shadow: rgba(0, 0, 0, 0.1) 0 2px 3px; + z-index: 12; } + .trumbowyg-dropdown button { + display: block; + width: 100%; + height: 35px; + line-height: 35px; + text-decoration: none; + background: #FFF; + padding: 0 10px; + color: #333 !important; + border: none; + cursor: pointer; + text-align: left; + font-size: 15px; + transition: all 150ms; } + .trumbowyg-dropdown button:hover, .trumbowyg-dropdown button:focus { + background: #ecf0f1; } + .trumbowyg-dropdown button svg { + float: left; + margin-right: 14px; } + +/* Modal box */ +.trumbowyg-modal { + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + max-width: 520px; + width: 100%; + height: 350px; + z-index: 12; + overflow: hidden; + backface-visibility: hidden; } + +.trumbowyg-modal-box { + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + max-width: 500px; + width: calc(100% - 20px); + padding-bottom: 45px; + z-index: 1; + background-color: #FFF; + text-align: center; + font-size: 14px; + box-shadow: rgba(0, 0, 0, 0.2) 0 2px 3px; + backface-visibility: hidden; } + .trumbowyg-modal-box .trumbowyg-modal-title { + font-size: 24px; + font-weight: bold; + margin: 0 0 20px; + padding: 15px 0 13px; + display: block; + border-bottom: 1px solid #EEE; + color: #333; + background: #fbfcfc; } + .trumbowyg-modal-box .trumbowyg-progress { + width: 100%; + height: 3px; + position: absolute; + top: 58px; } + .trumbowyg-modal-box .trumbowyg-progress .trumbowyg-progress-bar { + background: #2BC06A; + width: 0; + height: 100%; + transition: width 150ms linear; } + .trumbowyg-modal-box label { + display: block; + position: relative; + margin: 15px 12px; + height: 29px; + line-height: 29px; + overflow: hidden; } + .trumbowyg-modal-box label .trumbowyg-input-infos { + display: block; + text-align: left; + height: 25px; + line-height: 25px; + transition: all 150ms; } + .trumbowyg-modal-box label .trumbowyg-input-infos span { + display: block; + color: #69878f; + background-color: #fbfcfc; + border: 1px solid #DEDEDE; + padding: 0 7px; + width: 150px; } + .trumbowyg-modal-box label .trumbowyg-input-infos span.trumbowyg-msg-error { + color: #e74c3c; } + .trumbowyg-modal-box label.trumbowyg-input-error input, + .trumbowyg-modal-box label.trumbowyg-input-error textarea { + border: 1px solid #e74c3c; } + .trumbowyg-modal-box label.trumbowyg-input-error .trumbowyg-input-infos { + margin-top: -27px; } + .trumbowyg-modal-box label input { + position: absolute; + top: 0; + right: 0; + height: 27px; + line-height: 27px; + border: 1px solid #DEDEDE; + background: #fff; + font-size: 14px; + max-width: 330px; + width: 70%; + padding: 0 7px; + transition: all 150ms; } + .trumbowyg-modal-box label input:hover, .trumbowyg-modal-box label input:focus { + outline: none; + border: 1px solid #95a5a6; } + .trumbowyg-modal-box label input:focus { + background: #fbfcfc; } + .trumbowyg-modal-box label input[type="checkbox"] { + left: 5px; + top: 5px; + right: auto; } + .trumbowyg-modal-box label input[type="checkbox"] + .trumbowyg-input-infos span { + width: auto; + padding-left: 25px; } + .trumbowyg-modal-box .error { + margin-top: 25px; + display: block; + color: red; } + .trumbowyg-modal-box .trumbowyg-modal-button { + position: absolute; + bottom: 10px; + right: 0; + text-decoration: none; + color: #FFF; + display: block; + width: 100px; + height: 35px; + line-height: 33px; + margin: 0 10px; + background-color: #333; + border: none; + cursor: pointer; + font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif; + font-size: 16px; + transition: all 150ms; } + .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit { + right: 110px; + background: #2bc06a; } + .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:hover, .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:focus { + background: #40d47e; + outline: none; } + .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:active { + background: #25a25a; } + .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset { + color: #555; + background: #e6e6e6; } + .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:hover, .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:focus { + background: #fbfbfb; + outline: none; } + .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:active { + background: #d5d5d5; } + +.trumbowyg-overlay { + position: absolute; + background-color: rgba(255, 255, 255, 0.5); + height: 100%; + width: 100%; + left: 0; + display: none; + top: 0; + z-index: 10; } + +/** + * Fullscreen + */ +body.trumbowyg-body-fullscreen { + overflow: hidden; } + +.trumbowyg-fullscreen { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + margin: 0; + padding: 0; + z-index: 99999; } + .trumbowyg-fullscreen.trumbowyg-box, + .trumbowyg-fullscreen .trumbowyg-editor { + border: none; } + .trumbowyg-fullscreen .trumbowyg-editor, + .trumbowyg-fullscreen .trumbowyg-textarea { + height: calc(100% - 37px) !important; + overflow: auto; } + .trumbowyg-fullscreen .trumbowyg-overlay { + height: 100% !important; } + .trumbowyg-fullscreen .trumbowyg-button-group .trumbowyg-fullscreen-button svg { + color: #222; + fill: transparent; } + +.trumbowyg-editor { + /* + * lset for resetCss option + */ } + .trumbowyg-editor object, + .trumbowyg-editor embed, + .trumbowyg-editor video, + .trumbowyg-editor img { + max-width: 100%; } + .trumbowyg-editor video, + .trumbowyg-editor img { + height: auto; } + .trumbowyg-editor img { + cursor: move; } + .trumbowyg-editor.trumbowyg-reset-css { + background: #FEFEFE !important; + font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif !important; + font-size: 14px !important; + line-height: 1.45em !important; + color: #333; } + .trumbowyg-editor.trumbowyg-reset-css a { + color: #15c !important; + text-decoration: underline !important; } + .trumbowyg-editor.trumbowyg-reset-css div, + .trumbowyg-editor.trumbowyg-reset-css p, + .trumbowyg-editor.trumbowyg-reset-css ul, + .trumbowyg-editor.trumbowyg-reset-css ol, + .trumbowyg-editor.trumbowyg-reset-css blockquote { + box-shadow: none !important; + background: none !important; + margin: 0 !important; + margin-bottom: 15px !important; + line-height: 1.4em !important; + font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif !important; + font-size: 14px !important; + border: none; } + .trumbowyg-editor.trumbowyg-reset-css iframe, + .trumbowyg-editor.trumbowyg-reset-css object, + .trumbowyg-editor.trumbowyg-reset-css hr { + margin-bottom: 15px !important; } + .trumbowyg-editor.trumbowyg-reset-css blockquote { + margin-left: 32px !important; + font-style: italic !important; + color: #555; } + .trumbowyg-editor.trumbowyg-reset-css ul { + list-style: disc; } + .trumbowyg-editor.trumbowyg-reset-css ul, + .trumbowyg-editor.trumbowyg-reset-css ol { + padding-left: 20px !important; } + .trumbowyg-editor.trumbowyg-reset-css ul ul, + .trumbowyg-editor.trumbowyg-reset-css ol ol, + .trumbowyg-editor.trumbowyg-reset-css ul ol, + .trumbowyg-editor.trumbowyg-reset-css ol ul { + border: none; + margin: 2px !important; + padding: 0 !important; + padding-left: 24px !important; } + .trumbowyg-editor.trumbowyg-reset-css hr { + display: block; + height: 1px; + border: none; + border-top: 1px solid #CCC; } + .trumbowyg-editor.trumbowyg-reset-css h1, + .trumbowyg-editor.trumbowyg-reset-css h2, + .trumbowyg-editor.trumbowyg-reset-css h3, + .trumbowyg-editor.trumbowyg-reset-css h4 { + color: #111; + background: none; + margin: 0 !important; + padding: 0 !important; + font-weight: bold; } + .trumbowyg-editor.trumbowyg-reset-css h1 { + font-size: 32px !important; + line-height: 38px !important; + margin-bottom: 20px !important; } + .trumbowyg-editor.trumbowyg-reset-css h2 { + font-size: 26px !important; + line-height: 34px !important; + margin-bottom: 15px !important; } + .trumbowyg-editor.trumbowyg-reset-css h3 { + font-size: 22px !important; + line-height: 28px !important; + margin-bottom: 7px !important; } + .trumbowyg-editor.trumbowyg-reset-css h4 { + font-size: 16px !important; + line-height: 22px !important; + margin-bottom: 7px !important; } + +/* + * Dark theme + */ +.trumbowyg-dark .trumbowyg-textarea { + background: #111; + color: #ddd; } + +.trumbowyg-dark .trumbowyg-box { + border: 1px solid #343434; } + .trumbowyg-dark .trumbowyg-box.trumbowyg-fullscreen { + background: #111; } + .trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before { + text-shadow: 0 0 7px #ccc; } + @media screen and (min-width: 0 \0 ) { + .trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before { + color: rgba(20, 20, 20, 0.6) !important; } } + @supports (-ms-accelerator: true) { + .trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before { + color: rgba(20, 20, 20, 0.6) !important; } } + .trumbowyg-dark .trumbowyg-box svg { + fill: #ecf0f1; + color: #ecf0f1; } + +.trumbowyg-dark .trumbowyg-button-pane { + background-color: #222; + border-bottom-color: #343434; } + .trumbowyg-dark .trumbowyg-button-pane::after { + background: #343434; } + .trumbowyg-dark .trumbowyg-button-pane .trumbowyg-button-group:not(:empty)::after { + background-color: #343434; } + .trumbowyg-dark .trumbowyg-button-pane .trumbowyg-button-group:not(:empty) .trumbowyg-fullscreen-button svg { + color: transparent; } + .trumbowyg-dark .trumbowyg-button-pane.trumbowyg-disable .trumbowyg-button-group::after { + background-color: #2a2a2a; } + .trumbowyg-dark .trumbowyg-button-pane button:not(.trumbowyg-disable):hover, + .trumbowyg-dark .trumbowyg-button-pane button:not(.trumbowyg-disable):focus, + .trumbowyg-dark .trumbowyg-button-pane button.trumbowyg-active { + background-color: #333; } + .trumbowyg-dark .trumbowyg-button-pane .trumbowyg-open-dropdown::after { + border-top-color: #fff; } + +.trumbowyg-dark .trumbowyg-fullscreen .trumbowyg-button-group .trumbowyg-fullscreen-button svg { + color: #ecf0f1; + fill: transparent; } + +.trumbowyg-dark .trumbowyg-dropdown { + border-color: #222; + background: #333; + box-shadow: rgba(0, 0, 0, 0.3) 0 2px 3px; } + .trumbowyg-dark .trumbowyg-dropdown button { + background: #333; + color: #fff !important; } + .trumbowyg-dark .trumbowyg-dropdown button:hover, .trumbowyg-dark .trumbowyg-dropdown button:focus { + background: #222; } + +.trumbowyg-dark .trumbowyg-modal-box { + background-color: #222; } + .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-title { + border-bottom: 1px solid #555; + color: #fff; + background: #3c3c3c; } + .trumbowyg-dark .trumbowyg-modal-box label { + display: block; + position: relative; + margin: 15px 12px; + height: 27px; + line-height: 27px; + overflow: hidden; } + .trumbowyg-dark .trumbowyg-modal-box label .trumbowyg-input-infos span { + color: #eee; + background-color: #2f2f2f; + border-color: #222; } + .trumbowyg-dark .trumbowyg-modal-box label .trumbowyg-input-infos span.trumbowyg-msg-error { + color: #e74c3c; } + .trumbowyg-dark .trumbowyg-modal-box label.trumbowyg-input-error input, + .trumbowyg-dark .trumbowyg-modal-box label.trumbowyg-input-error textarea { + border-color: #e74c3c; } + .trumbowyg-dark .trumbowyg-modal-box label input { + border-color: #222; + color: #eee; + background: #333; } + .trumbowyg-dark .trumbowyg-modal-box label input:hover, .trumbowyg-dark .trumbowyg-modal-box label input:focus { + border-color: #626262; } + .trumbowyg-dark .trumbowyg-modal-box label input:focus { + background-color: #2f2f2f; } + .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit { + background: #1b7943; } + .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:hover, .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:focus { + background: #25a25a; } + .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:active { + background: #176437; } + .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset { + background: #333; + color: #ccc; } + .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:hover, .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:focus { + background: #444; } + .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:active { + background: #111; } + +.trumbowyg-dark .trumbowyg-overlay { + background-color: rgba(15, 15, 15, 0.6); } diff --git a/modules/editor/trumbowyg/ui/trumbowyg.min.css b/modules/editor/trumbowyg/ui/trumbowyg.min.css @@ -0,0 +1,2 @@ +/** Trumbowyg v2.10.0 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */ +#trumbowyg-icons,#trumbowyg-icons svg{height:0;width:0}#trumbowyg-icons{overflow:hidden;visibility:hidden}.trumbowyg-box *,.trumbowyg-box ::after,.trumbowyg-box ::before{box-sizing:border-box}.trumbowyg-box svg{width:17px;height:100%;fill:#222}.trumbowyg-box,.trumbowyg-editor{display:block;position:relative;border:1px solid #DDD;width:100%;min-height:300px;margin:17px auto}.trumbowyg-box .trumbowyg-editor{margin:0 auto}.trumbowyg-box.trumbowyg-fullscreen{background:#FEFEFE;border:none!important}.trumbowyg-editor,.trumbowyg-textarea{position:relative;box-sizing:border-box;padding:20px;min-height:300px;width:100%;border-style:none;resize:none;outline:0;overflow:auto}.trumbowyg-editor.trumbowyg-autogrow-on-enter,.trumbowyg-textarea.trumbowyg-autogrow-on-enter{transition:height .3s ease-out}.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-box-blur .trumbowyg-editor::before{color:transparent!important;text-shadow:0 0 7px #333}@media screen and (min-width:0 \0){.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-box-blur .trumbowyg-editor::before{color:rgba(200,200,200,.6)!important}}@supports (-ms-accelerator:true){.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-box-blur .trumbowyg-editor::before{color:rgba(200,200,200,.6)!important}}.trumbowyg-box-blur .trumbowyg-editor hr,.trumbowyg-box-blur .trumbowyg-editor img{opacity:.2}.trumbowyg-textarea{position:relative;display:block;overflow:auto;border:none;font-size:14px;font-family:Inconsolata,Consolas,Courier,"Courier New",sans-serif;line-height:18px}.trumbowyg-box.trumbowyg-editor-visible .trumbowyg-textarea{height:1px!important;width:25%;min-height:0!important;padding:0!important;background:0 0;opacity:0!important}.trumbowyg-box.trumbowyg-editor-hidden .trumbowyg-textarea{display:block}.trumbowyg-box.trumbowyg-editor-hidden .trumbowyg-editor{display:none}.trumbowyg-box.trumbowyg-disabled .trumbowyg-textarea{opacity:.8;background:0 0}.trumbowyg-editor[contenteditable=true]:empty:not(:focus)::before{content:attr(placeholder);color:#999;pointer-events:none}.trumbowyg-button-pane{width:100%;min-height:36px;background:#ecf0f1;border-bottom:1px solid #d7e0e2;margin:0;padding:0 5px;position:relative;list-style-type:none;line-height:10px;backface-visibility:hidden;z-index:11}.trumbowyg-button-pane::after{content:" ";display:block;position:absolute;top:36px;left:0;right:0;width:100%;height:1px;background:#d7e0e2}.trumbowyg-button-pane .trumbowyg-button-group{display:inline-block}.trumbowyg-button-pane .trumbowyg-button-group .trumbowyg-fullscreen-button svg{color:transparent}.trumbowyg-button-pane .trumbowyg-button-group::after{content:" ";display:inline-block;width:1px;background:#d7e0e2;margin:0 5px;height:35px;vertical-align:top}.trumbowyg-button-pane .trumbowyg-button-group:last-child::after{content:none}.trumbowyg-button-pane button{display:inline-block;position:relative;width:35px;height:35px;padding:1px 6px!important;margin-bottom:1px;overflow:hidden;border:none;cursor:pointer;background:0 0;vertical-align:middle;transition:background-color 150ms,opacity 150ms}.trumbowyg-button-pane button.trumbowyg-textual-button{width:auto;line-height:35px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.trumbowyg-button-pane button.trumbowyg-disable,.trumbowyg-button-pane.trumbowyg-disable button:not(.trumbowyg-not-disable):not(.trumbowyg-active),.trumbowyg-disabled .trumbowyg-button-pane button:not(.trumbowyg-not-disable):not(.trumbowyg-viewHTML-button){opacity:.2;cursor:default}.trumbowyg-button-pane.trumbowyg-disable .trumbowyg-button-group::before,.trumbowyg-disabled .trumbowyg-button-pane .trumbowyg-button-group::before{background:#e3e9eb}.trumbowyg-button-pane button.trumbowyg-active,.trumbowyg-button-pane button:not(.trumbowyg-disable):focus,.trumbowyg-button-pane button:not(.trumbowyg-disable):hover{background-color:#FFF;outline:0}.trumbowyg-button-pane .trumbowyg-open-dropdown::after{display:block;content:" ";position:absolute;top:25px;right:3px;height:0;width:0;border:3px solid transparent;border-top-color:#555}.trumbowyg-button-pane .trumbowyg-open-dropdown.trumbowyg-textual-button{padding-left:10px!important;padding-right:18px!important}.trumbowyg-button-pane .trumbowyg-open-dropdown.trumbowyg-textual-button::after{top:17px;right:7px}.trumbowyg-modal,.trumbowyg-modal-box{top:0;left:50%;transform:translateX(-50%);backface-visibility:hidden;position:absolute}.trumbowyg-button-pane .trumbowyg-right{float:right}.trumbowyg-dropdown{width:200px;border:1px solid #ecf0f1;padding:5px 0;border-top:none;background:#FFF;margin-left:-1px;box-shadow:rgba(0,0,0,.1) 0 2px 3px;z-index:12}.trumbowyg-dropdown button{display:block;width:100%;height:35px;line-height:35px;text-decoration:none;background:#FFF;padding:0 10px;color:#333!important;border:none;cursor:pointer;text-align:left;font-size:15px;transition:all 150ms}.trumbowyg-dropdown button:focus,.trumbowyg-dropdown button:hover{background:#ecf0f1}.trumbowyg-dropdown button svg{float:left;margin-right:14px}.trumbowyg-modal{max-width:520px;width:100%;height:350px;z-index:12;overflow:hidden}.trumbowyg-modal-box{max-width:500px;width:calc(100% - 20px);padding-bottom:45px;z-index:1;background-color:#FFF;text-align:center;font-size:14px;box-shadow:rgba(0,0,0,.2) 0 2px 3px}.trumbowyg-modal-box .trumbowyg-modal-title{font-size:24px;font-weight:700;margin:0 0 20px;padding:15px 0 13px;display:block;border-bottom:1px solid #EEE;color:#333;background:#fbfcfc}.trumbowyg-modal-box .trumbowyg-progress{width:100%;height:3px;position:absolute;top:58px}.trumbowyg-modal-box .trumbowyg-progress .trumbowyg-progress-bar{background:#2BC06A;width:0;height:100%;transition:width 150ms linear}.trumbowyg-modal-box label{display:block;position:relative;margin:15px 12px;height:29px;line-height:29px;overflow:hidden}.trumbowyg-modal-box label .trumbowyg-input-infos{display:block;text-align:left;height:25px;line-height:25px;transition:all 150ms}.trumbowyg-modal-box label .trumbowyg-input-infos span{display:block;color:#69878f;background-color:#fbfcfc;border:1px solid #DEDEDE;padding:0 7px;width:150px}.trumbowyg-modal-box label .trumbowyg-input-infos span.trumbowyg-msg-error{color:#e74c3c}.trumbowyg-modal-box label.trumbowyg-input-error input,.trumbowyg-modal-box label.trumbowyg-input-error textarea{border:1px solid #e74c3c}.trumbowyg-modal-box label.trumbowyg-input-error .trumbowyg-input-infos{margin-top:-27px}.trumbowyg-modal-box label input{position:absolute;top:0;right:0;height:27px;line-height:27px;border:1px solid #DEDEDE;background:#fff;font-size:14px;max-width:330px;width:70%;padding:0 7px;transition:all 150ms}.trumbowyg-modal-box label input:focus,.trumbowyg-modal-box label input:hover{outline:0;border:1px solid #95a5a6}.trumbowyg-modal-box label input:focus{background:#fbfcfc}.trumbowyg-modal-box label input[type=checkbox]{left:5px;top:5px;right:auto}.trumbowyg-modal-box label input[type=checkbox]+.trumbowyg-input-infos span{width:auto;padding-left:25px}.trumbowyg-modal-box .error{margin-top:25px;display:block;color:red}.trumbowyg-modal-box .trumbowyg-modal-button{position:absolute;bottom:10px;right:0;text-decoration:none;color:#FFF;display:block;width:100px;height:35px;line-height:33px;margin:0 10px;background-color:#333;border:none;cursor:pointer;font-family:"Trebuchet MS",Helvetica,Verdana,sans-serif;font-size:16px;transition:all 150ms}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit{right:110px;background:#2bc06a}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:focus,.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:hover{background:#40d47e;outline:0}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:active{background:#25a25a}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset{color:#555;background:#e6e6e6}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:focus,.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:hover{background:#fbfbfb;outline:0}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:active{background:#d5d5d5}.trumbowyg-overlay{position:absolute;background-color:rgba(255,255,255,.5);height:100%;width:100%;left:0;display:none;top:0;z-index:10}body.trumbowyg-body-fullscreen{overflow:hidden}.trumbowyg-fullscreen{position:fixed;top:0;left:0;width:100%;height:100%;margin:0;padding:0;z-index:99999}.trumbowyg-fullscreen .trumbowyg-editor,.trumbowyg-fullscreen.trumbowyg-box{border:none}.trumbowyg-fullscreen .trumbowyg-editor,.trumbowyg-fullscreen .trumbowyg-textarea{height:calc(100% - 37px)!important;overflow:auto}.trumbowyg-fullscreen .trumbowyg-overlay{height:100%!important}.trumbowyg-fullscreen .trumbowyg-button-group .trumbowyg-fullscreen-button svg{color:#222;fill:transparent}.trumbowyg-editor embed,.trumbowyg-editor img,.trumbowyg-editor object,.trumbowyg-editor video{max-width:100%}.trumbowyg-editor img,.trumbowyg-editor video{height:auto}.trumbowyg-editor img{cursor:move}.trumbowyg-editor.trumbowyg-reset-css{background:#FEFEFE!important;font-family:"Trebuchet MS",Helvetica,Verdana,sans-serif!important;font-size:14px!important;line-height:1.45em!important;color:#333}.trumbowyg-editor.trumbowyg-reset-css a{color:#15c!important;text-decoration:underline!important}.trumbowyg-editor.trumbowyg-reset-css blockquote,.trumbowyg-editor.trumbowyg-reset-css div,.trumbowyg-editor.trumbowyg-reset-css ol,.trumbowyg-editor.trumbowyg-reset-css p,.trumbowyg-editor.trumbowyg-reset-css ul{box-shadow:none!important;background:0 0!important;margin:0 0 15px!important;line-height:1.4em!important;font-family:"Trebuchet MS",Helvetica,Verdana,sans-serif!important;font-size:14px!important;border:none}.trumbowyg-editor.trumbowyg-reset-css hr,.trumbowyg-editor.trumbowyg-reset-css iframe,.trumbowyg-editor.trumbowyg-reset-css object{margin-bottom:15px!important}.trumbowyg-editor.trumbowyg-reset-css blockquote{margin-left:32px!important;font-style:italic!important;color:#555}.trumbowyg-editor.trumbowyg-reset-css ul{list-style:disc}.trumbowyg-editor.trumbowyg-reset-css ol,.trumbowyg-editor.trumbowyg-reset-css ul{padding-left:20px!important}.trumbowyg-editor.trumbowyg-reset-css ol ol,.trumbowyg-editor.trumbowyg-reset-css ol ul,.trumbowyg-editor.trumbowyg-reset-css ul ol,.trumbowyg-editor.trumbowyg-reset-css ul ul{border:none;margin:2px!important;padding:0 0 0 24px!important}.trumbowyg-editor.trumbowyg-reset-css hr{display:block;height:1px;border:none;border-top:1px solid #CCC}.trumbowyg-editor.trumbowyg-reset-css h1,.trumbowyg-editor.trumbowyg-reset-css h2,.trumbowyg-editor.trumbowyg-reset-css h3,.trumbowyg-editor.trumbowyg-reset-css h4{color:#111;background:0 0;margin:0!important;padding:0!important;font-weight:700}.trumbowyg-editor.trumbowyg-reset-css h1{font-size:32px!important;line-height:38px!important;margin-bottom:20px!important}.trumbowyg-editor.trumbowyg-reset-css h2{font-size:26px!important;line-height:34px!important;margin-bottom:15px!important}.trumbowyg-editor.trumbowyg-reset-css h3{font-size:22px!important;line-height:28px!important;margin-bottom:7px!important}.trumbowyg-editor.trumbowyg-reset-css h4{font-size:16px!important;line-height:22px!important;margin-bottom:7px!important}.trumbowyg-dark .trumbowyg-textarea{background:#111;color:#ddd}.trumbowyg-dark .trumbowyg-box{border:1px solid #343434}.trumbowyg-dark .trumbowyg-box.trumbowyg-fullscreen{background:#111}.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before{text-shadow:0 0 7px #ccc}@media screen and (min-width:0 \0){.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before{color:rgba(20,20,20,.6)!important}}@supports (-ms-accelerator:true){.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before{color:rgba(20,20,20,.6)!important}}.trumbowyg-dark .trumbowyg-box svg{fill:#ecf0f1;color:#ecf0f1}.trumbowyg-dark .trumbowyg-button-pane{background-color:#222;border-bottom-color:#343434}.trumbowyg-dark .trumbowyg-button-pane::after{background:#343434}.trumbowyg-dark .trumbowyg-button-pane .trumbowyg-button-group:not(:empty)::after{background-color:#343434}.trumbowyg-dark .trumbowyg-button-pane .trumbowyg-button-group:not(:empty) .trumbowyg-fullscreen-button svg{color:transparent}.trumbowyg-dark .trumbowyg-button-pane.trumbowyg-disable .trumbowyg-button-group::after{background-color:#2a2a2a}.trumbowyg-dark .trumbowyg-button-pane button.trumbowyg-active,.trumbowyg-dark .trumbowyg-button-pane button:not(.trumbowyg-disable):focus,.trumbowyg-dark .trumbowyg-button-pane button:not(.trumbowyg-disable):hover{background-color:#333}.trumbowyg-dark .trumbowyg-button-pane .trumbowyg-open-dropdown::after{border-top-color:#fff}.trumbowyg-dark .trumbowyg-fullscreen .trumbowyg-button-group .trumbowyg-fullscreen-button svg{color:#ecf0f1;fill:transparent}.trumbowyg-dark .trumbowyg-dropdown{border-color:#222;background:#333;box-shadow:rgba(0,0,0,.3) 0 2px 3px}.trumbowyg-dark .trumbowyg-dropdown button{background:#333;color:#fff!important}.trumbowyg-dark .trumbowyg-dropdown button:focus,.trumbowyg-dark .trumbowyg-dropdown button:hover{background:#222}.trumbowyg-dark .trumbowyg-modal-box{background-color:#222}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-title{border-bottom:1px solid #555;color:#fff;background:#3c3c3c}.trumbowyg-dark .trumbowyg-modal-box label{display:block;position:relative;margin:15px 12px;height:27px;line-height:27px;overflow:hidden}.trumbowyg-dark .trumbowyg-modal-box label .trumbowyg-input-infos span{color:#eee;background-color:#2f2f2f;border-color:#222}.trumbowyg-dark .trumbowyg-modal-box label .trumbowyg-input-infos span.trumbowyg-msg-error{color:#e74c3c}.trumbowyg-dark .trumbowyg-modal-box label.trumbowyg-input-error input,.trumbowyg-dark .trumbowyg-modal-box label.trumbowyg-input-error textarea{border-color:#e74c3c}.trumbowyg-dark .trumbowyg-modal-box label input{border-color:#222;color:#eee;background:#333}.trumbowyg-dark .trumbowyg-modal-box label input:focus,.trumbowyg-dark .trumbowyg-modal-box label input:hover{border-color:#626262}.trumbowyg-dark .trumbowyg-modal-box label input:focus{background-color:#2f2f2f}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit{background:#1b7943}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:focus,.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:hover{background:#25a25a}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:active{background:#176437}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset{background:#333;color:#ccc}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:focus,.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:hover{background:#444}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:active{background:#111}.trumbowyg-dark .trumbowyg-overlay{background-color:rgba(15,15,15,.6)}+ \ No newline at end of file diff --git a/modules/template-engine/components/html/editor/editor.js b/modules/template-engine/components/html/editor/editor.js @@ -57,5 +57,26 @@ $(document).on('orViewLoaded',function(event, data) { }) } ); + // Markdown-Editor anzeigen + $(event.target).find("textarea.editor.markdown-editor").each( function() { + + var editor = new SimpleMDE({ element: $(this)[0] }); + } ); + + // Markdown-Editor anzeigen + $(event.target).find("textarea.editor.html-editor").each( function() { + + + $(this).trumbowyg(); + + // copy back to textarea on form submit... + /* + $(textareaEl).closest('form').submit(function() { + var newValue = editor.getValue(); + $(textareaEl).val( newValue ); + }) + */ + } ); + }); \ No newline at end of file diff --git a/modules/template-engine/components/html/editor/editor.min.js b/modules/template-engine/components/html/editor/editor.min.js @@ -1 +1 @@ -;$(document).on('orViewLoaded',function(e,t){$(e.target).find('textarea').orAutoheight();$(e.target).find('textarea.editor.ace-editor').each(function(){var t=$(this),i=$('<div class="editor__code-editor" />').insertAfter(t),e=ace.edit(i.get(0)),o=t.data('mode');e.renderer.setShowGutter(!0);e.setTheme('ace/theme/github');e.getSession().setTabSize(4);e.getSession().setUseWrapMode(!0);e.setHighlightActiveLine(!0);e.getSession().setValue(t.val());e.getSession().setMode('ace/mode/'+o);e.getSession().on('change',function(i){t.val(e.getSession().getValue())});t.closest('form').submit(function(){t.val(e.getSession().getValue())})});$(e.target).find('textarea.editor.code-editor').each(function(){var t=$(this).data('mode'),i=$(this).data('mimetype');if(i.length>0)t=i;var o=CodeMirror.fromTextArea(this,{lineNumbers:!0,viewportMargin:Infinity,mode:t});var e=this;$(e).closest('form').submit(function(){var t=o.getValue();$(e).val(t)})})});- \ No newline at end of file +;$(document).on('orViewLoaded',function(e,t){$(e.target).find('textarea').orAutoheight();$(e.target).find('textarea.editor.ace-editor').each(function(){var t=$(this),i=$('<div class="editor__code-editor" />').insertAfter(t),e=ace.edit(i.get(0)),a=t.data('mode');e.renderer.setShowGutter(!0);e.setTheme('ace/theme/github');e.getSession().setTabSize(4);e.getSession().setUseWrapMode(!0);e.setHighlightActiveLine(!0);e.getSession().setValue(t.val());e.getSession().setMode('ace/mode/'+a);e.getSession().on('change',function(i){t.val(e.getSession().getValue())});t.closest('form').submit(function(){t.val(e.getSession().getValue())})});$(e.target).find('textarea.editor.code-editor').each(function(){var t=$(this).data('mode'),i=$(this).data('mimetype');if(i.length>0)t=i;var a=CodeMirror.fromTextArea(this,{lineNumbers:!0,viewportMargin:Infinity,mode:t});var e=this;$(e).closest('form').submit(function(){var t=a.getValue();$(e).val(t)})});$(e.target).find('textarea.editor.markdown-editor').each(function(){var e=new SimpleMDE({element:$(this)[0]})});$(e.target).find('textarea.editor.html-editor').each(function(){$(this).trumbowyg()})});+ \ No newline at end of file diff --git a/modules/template-engine/components/html/form/form.js b/modules/template-engine/components/html/form/form.js @@ -54,7 +54,8 @@ function formSubmit(form) $('#uname' ).closest('form').submit(); } */ - + + /* if ( $('#pageelement_edit_editor').length>0 ) { var instance = CKEDITOR.instances['pageelement_edit_editor']; @@ -63,7 +64,7 @@ function formSubmit(form) var value = instance.getData(); $('#pageelement_edit_editor').html( value ); } - } + }*/ var status = $('<div class="notice info"><div class="text loader"></div></div>'); diff --git a/modules/template-engine/components/html/form/form.min.js b/modules/template-engine/components/html/form/form.min.js @@ -1,3 +1,3 @@ -;$(document).on('orViewLoaded',function(e,t){if($('div.panel form input[type=password]').length>0&&$('#uname').attr('value')!=''){$('div.panel form input[name=login_name] ').attr('value',$('#uname').attr('value'));$('div.panel form input[name=login_password]').attr('value',$('#upassword').attr('value'))};$(e.target).find('form[data-autosave="true"] input[type="checkbox"]').click(function(){$(this).closest('form').submit()});$(e.target).find('input.submit.cancel').click(function(){});$(e.target).find('form').submit(function(e){if($(this).data('target')=='view'){formSubmit($(this));e.preventDefault()}})});function formSubmit(e){if($('#pageelement_edit_editor').length>0){var i=CKEDITOR.instances['pageelement_edit_editor'];if(i){var l=i.getData();$('#pageelement_edit_editor').html(l)}};var t=$('<div class="notice info"><div class="text loader"></div></div>');$('#noticebar').prepend(t);$(t).show();$(e).find('.error').removeClass('error');var a=$(e).serializeArray(),d=$(e).attr('method').toUpperCase();if(d=='GET'){var r=$(e).data('action'),s=$(e).data('method'),n=$(e).data('id');loadView($(e).closest('div.content'),r,s,n,a)} -else{var o='./api/';$(e).closest('div.content').addClass('loader');o+='?output=json';a['output']='json';if($(e).data('async')||$(e).data('async')=='true'){$('#dialog > .view').html('');$('#dialog').removeClass('is-open').addClass('is-closed')};$.ajax({'type':'POST',url:o,data:a,success:function(a,o,i){$(e).closest('div.content').removeClass('loader');$(t).remove();doResponse(a,o,e)},error:function(a,o,s){$(e).closest('div.content').removeClass('loader');$(t).remove();var r;try{var i=jQuery.parseJSON(a.responseText);r=i.error+'/'+i.description+': '+i.reason}catch(n){r=a.responseText};notify('error',r)}});$(e).fadeIn()}};function doResponse(e,t,a){if(t!='success'){alert('Server error: '+t);return};$.each(e['notices'],function(t,e){var o=$('<div class="notice '+e.status+'"><div class="text">'+e.text+'</div></div>');if($(a).data('async')=='true')notifyBrowser(e.text);$.each(e.log,function(e,t){$(o).append('<div class="log">'+t+'</div>')});$('#noticebar').prepend(o);$(o).fadeIn().click(function(){$(this).fadeOut('fast',function(){$(this).remove()})});var i;if(e.status=='ok'){i=3;if($(a).data('async')!='true'){$('#dialog > .view').html('').hide();$('#dialog').removeClass('is-open').addClass('is-closed');$(a).closest('div.panel').find('div.header ul.views li.action.active').removeClass('dirty')}} -else{i=8};setTimeout(function(){$(o).fadeOut('slow').remove()},i*1000)});$.each(e['errors'],function(e,t){$('input[name='+t+']').addClass('error').parent().addClass('error').parents('fieldset').addClass('show').addClass('open')});if(!e.control){};if(e.control.redirect)window.location.href=e.control.redirect;if(e.control.new_style)setUserStyle(e.control.new_style);if(e.control.refresh);else if(e.control.next_view);else if(e.errors.length==0)$(a).closest('div.panel').find('li.action.active').orLoadView()};- \ No newline at end of file +;$(document).on('orViewLoaded',function(e,t){if($('div.panel form input[type=password]').length>0&&$('#uname').attr('value')!=''){$('div.panel form input[name=login_name] ').attr('value',$('#uname').attr('value'));$('div.panel form input[name=login_password]').attr('value',$('#upassword').attr('value'))};$(e.target).find('form[data-autosave="true"] input[type="checkbox"]').click(function(){$(this).closest('form').submit()});$(e.target).find('input.submit.cancel').click(function(){});$(e.target).find('form').submit(function(e){if($(this).data('target')=='view'){formSubmit($(this));e.preventDefault()}})});function formSubmit(e){var t=$('<div class="notice info"><div class="text loader"></div></div>');$('#noticebar').prepend(t);$(t).show();$(e).find('.error').removeClass('error');var a=$(e).serializeArray(),n=$(e).attr('method').toUpperCase();if(n=='GET'){var r=$(e).data('action'),s=$(e).data('method'),i=$(e).data('id');loadView($(e).closest('div.content'),r,s,i,a)} +else{var o='./api/';$(e).closest('div.content').addClass('loader');o+='?output=json';a['output']='json';if($(e).data('async')||$(e).data('async')=='true'){$('#dialog > .view').html('');$('#dialog').removeClass('is-open').addClass('is-closed')};$.ajax({'type':'POST',url:o,data:a,success:function(a,o,r){$(e).closest('div.content').removeClass('loader');$(t).remove();doResponse(a,o,e)},error:function(a,o,i){$(e).closest('div.content').removeClass('loader');$(t).remove();var s;try{var r=jQuery.parseJSON(a.responseText);s=r.error+'/'+r.description+': '+r.reason}catch(n){s=a.responseText};notify('error',s)}});$(e).fadeIn()}};function doResponse(e,t,a){if(t!='success'){alert('Server error: '+t);return};$.each(e['notices'],function(t,e){var o=$('<div class="notice '+e.status+'"><div class="text">'+e.text+'</div></div>');if($(a).data('async')=='true')notifyBrowser(e.text);$.each(e.log,function(e,t){$(o).append('<div class="log">'+t+'</div>')});$('#noticebar').prepend(o);$(o).fadeIn().click(function(){$(this).fadeOut('fast',function(){$(this).remove()})});var r;if(e.status=='ok'){r=3;if($(a).data('async')!='true'){$('#dialog > .view').html('').hide();$('#dialog').removeClass('is-open').addClass('is-closed');$(a).closest('div.panel').find('div.header ul.views li.action.active').removeClass('dirty')}} +else{r=8};setTimeout(function(){$(o).fadeOut('slow').remove()},r*1000)});$.each(e['errors'],function(e,t){$('input[name='+t+']').addClass('error').parent().addClass('error').parents('fieldset').addClass('show').addClass('open')});if(!e.control){};if(e.control.redirect)window.location.href=e.control.redirect;if(e.control.new_style)setUserStyle(e.control.new_style);if(e.control.refresh);else if(e.control.next_view);else if(e.errors.length==0)$(a).closest('div.panel').find('li.action.active').orLoadView()};+ \ No newline at end of file diff --git a/modules/template-engine/components/html/if/If.class.php b/modules/template-engine/components/html/if/If.class.php @@ -9,6 +9,7 @@ class IfComponent extends Component public $contains; public $value; public $empty; + public $equals; public $lessthan; public $greaterthan; public $present; @@ -34,7 +35,7 @@ HTML; elseif (strlen($this->greaterthan)>0) echo 'intval(' . $this->value($this->greaterthan).')<intval('.$this->value($this->value).')'; elseif (! empty($this->present)) - echo '!empty(' . $this->textasvarname($this->present).')'; + echo 'isset(' . $this->textasvarname($this->present).')'; // 'isset' verwenden! Nicht empty(), da false empty ist. elseif (! empty($this->empty)) echo 'empty(' . $this->textasvarname($this->empty).')'; else diff --git a/modules/template-engine/components/html/image/image.js b/modules/template-engine/components/html/image/image.js @@ -1,4 +1,4 @@ -$(document).on('orViewLoaded orHeaderLoaded',function(event, data) { +$(document).on('orViewLoaded',function(event, data) { // Convert linked SVG to an inline SVG, because we want to style it... diff --git a/modules/template-engine/components/html/image/image.min.js b/modules/template-engine/components/html/image/image.min.js @@ -1 +1 @@ -;$(document).on('orViewLoaded orHeaderLoaded',function(o,d){var e=document.querySelectorAll('img.image-icon');SVGInjector(e)});- \ No newline at end of file +;$(document).on('orViewLoaded',function(o,n){var e=document.querySelectorAll('img.image-icon');SVGInjector(e)});+ \ No newline at end of file diff --git a/modules/template-engine/components/template.xsd b/modules/template-engine/components/template.xsd @@ -1,1833 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns="http://www.openrat.de/template" - targetNamespace="http://www.openrat.de/template" xmlns:xsd="http://www.w3.org/2001/XMLSchema" - elementFormDefault="qualified" attributeFormDefault="unqualified"> - <xsd:element name="selector" type="selectorType"/> - <xsd:complexType name="selectorType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="types" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="id" type="xsd:string"/> - <xsd:attribute name="folderid" type="xsd:string"/> - <xsd:attribute name="param" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="text" type="textType"/> - <xsd:complexType name="textType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="prefix" type="xsd:string"/> - <xsd:attribute name="suffix" type="xsd:string"/> - <xsd:attribute name="title" type="xsd:string"/> - <xsd:attribute name="type" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="escape" type="xsd:boolean"/> - <xsd:attribute name="var" type="xsd:string"/> - <xsd:attribute name="text" type="xsd:string"/> - <xsd:attribute name="key" type="xsd:string"/> - <xsd:attribute name="raw" type="xsd:string"/> - <xsd:attribute name="value" type="xsd:string"/> - <xsd:attribute name="maxlength" type="xsd:string"/> - <xsd:attribute name="accesskey" type="xsd:string"/> - <xsd:attribute name="cut" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="dummy" type="dummyType"/> - <xsd:complexType name="dummyType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - </xsd:complexType> - <xsd:element name="logo" type="logoType"/> - <xsd:complexType name="logoType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="name" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="else" type="elseType"/> - <xsd:complexType name="elseType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - </xsd:complexType> - <xsd:element name="label" type="labelType"/> - <xsd:complexType name="labelType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="for" type="xsd:string"/> - <xsd:attribute name="value" type="xsd:string"/> - <xsd:attribute name="key" type="xsd:string"/> - <xsd:attribute name="text" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="editor" type="editorType"/> - <xsd:complexType name="editorType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="type" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="mode" type="xsd:string"/> - <xsd:attribute name="extension" type="xsd:string"/> - <xsd:attribute name="mimetype" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="newline" type="newlineType"/> - <xsd:complexType name="newlineType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - </xsd:complexType> - <xsd:element name="link" type="linkType"/> - <xsd:complexType name="linkType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="var1" type="xsd:string"/> - <xsd:attribute name="var2" type="xsd:string"/> - <xsd:attribute name="var3" type="xsd:string"/> - <xsd:attribute name="var4" type="xsd:string"/> - <xsd:attribute name="var5" type="xsd:string"/> - <xsd:attribute name="value1" type="xsd:string"/> - <xsd:attribute name="value2" type="xsd:string"/> - <xsd:attribute name="value3" type="xsd:string"/> - <xsd:attribute name="value4" type="xsd:string"/> - <xsd:attribute name="value5" type="xsd:string"/> - <xsd:attribute name="target" type="xsd:string"/> - <xsd:attribute name="type" type="xsd:string"/> - <xsd:attribute name="action" type="xsd:string"/> - <xsd:attribute name="subaction" type="xsd:string"/> - <xsd:attribute name="title" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="url" type="xsd:string"/> - <xsd:attribute name="config" type="xsd:string"/> - <xsd:attribute name="id" type="xsd:string"/> - <xsd:attribute name="accesskey" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="anchor" type="xsd:string"/> - <xsd:attribute name="frame" type="xsd:string"/> - <xsd:attribute name="modal" type="xsd:boolean"/> - </xsd:complexType> - <xsd:element name="radio" type="radioType"/> - <xsd:complexType name="radioType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="readonly" type="xsd:boolean"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="value" type="xsd:string"/> - <xsd:attribute name="prefix" type="xsd:string"/> - <xsd:attribute name="suffix" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="onchange" type="xsd:string"/> - <xsd:attribute name="children" type="xsd:string"/> - <xsd:attribute name="checked" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="set" type="setType"/> - <xsd:complexType name="setType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="var" type="xsd:string"/> - <xsd:attribute name="value" type="xsd:string"/> - <xsd:attribute name="key" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="checkbox" type="checkboxType"/> - <xsd:complexType name="checkboxType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="default" type="xsd:boolean"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="readonly" type="xsd:boolean"/> - </xsd:complexType> - <xsd:element name="input" type="inputType"/> - <xsd:complexType name="inputType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="default" type="xsd:string"/> - <xsd:attribute name="type" type="xsd:string"/> - <xsd:attribute name="index" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="prefix" type="xsd:string"/> - <xsd:attribute name="value" type="xsd:string"/> - <xsd:attribute name="size" type="xsd:string"/> - <xsd:attribute name="maxlength" type="xsd:int"/> - <xsd:attribute name="onchange" type="xsd:string"/> - <xsd:attribute name="readonly" type="xsd:boolean"/> - <xsd:attribute name="hint" type="xsd:string"/> - <xsd:attribute name="icon" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="insert" type="insertType"/> - <xsd:complexType name="insertType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="url" type="xsd:string"/> - <xsd:attribute name="function" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="header" type="headerType"/> - <xsd:complexType name="headerType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="views" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="date" type="dateType"/> - <xsd:complexType name="dateType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="date" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="if" type="ifType"/> - <xsd:complexType name="ifType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="true" type="xsd:string"/> - <xsd:attribute name="false" type="xsd:string"/> - <xsd:attribute name="contains" type="xsd:string"/> - <xsd:attribute name="value" type="xsd:string"/> - <xsd:attribute name="empty" type="xsd:string"/> - <xsd:attribute name="lessthan" type="xsd:string"/> - <xsd:attribute name="greaterthan" type="xsd:string"/> - <xsd:attribute name="present" type="xsd:string"/> - <xsd:attribute name="not" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="qrcode" type="qrcodeType"/> - <xsd:complexType name="qrcodeType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="title" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="list" type="listType"/> - <xsd:complexType name="listType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="list" type="xsd:string"/> - <xsd:attribute name="extract" type="xsd:boolean"/> - <xsd:attribute name="key" type="xsd:string"/> - <xsd:attribute name="value" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="table" type="tableType"/> - <xsd:complexType name="tableType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="width" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="inputarea" type="inputareaType"/> - <xsd:complexType name="inputareaType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="rows" type="xsd:int"/> - <xsd:attribute name="cols" type="xsd:int"/> - <xsd:attribute name="value" type="xsd:string"/> - <xsd:attribute name="index" type="xsd:string"/> - <xsd:attribute name="onchange" type="xsd:string"/> - <xsd:attribute name="prefix" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="default" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="window" type="windowType"/> - <xsd:complexType name="windowType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - </xsd:complexType> - <xsd:element name="part" type="partType"/> - <xsd:complexType name="partType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="id" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="user" type="userType"/> - <xsd:complexType name="userType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="user" type="xsd:string"/> - <xsd:attribute name="id" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="selectbox" type="selectboxType"/> - <xsd:complexType name="selectboxType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="list" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="default" type="xsd:string"/> - <xsd:attribute name="title" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="addempty" type="xsd:boolean"/> - <xsd:attribute name="multiple" type="xsd:boolean"/> - <xsd:attribute name="size" type="xsd:int"/> - <xsd:attribute name="lang" type="xsd:boolean"/> - </xsd:complexType> - <xsd:element name="column" type="columnType"/> - <xsd:complexType name="columnType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="width" type="xsd:string"/> - <xsd:attribute name="style" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="colspan" type="xsd:string"/> - <xsd:attribute name="rowspan" type="xsd:string"/> - <xsd:attribute name="header" type="xsd:boolean"/> - <xsd:attribute name="title" type="xsd:string"/> - <xsd:attribute name="url" type="xsd:string"/> - <xsd:attribute name="action" type="xsd:string"/> - <xsd:attribute name="id" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="radiobox" type="radioboxType"/> - <xsd:complexType name="radioboxType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="list" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="default" type="xsd:string"/> - <xsd:attribute name="onchange" type="xsd:string"/> - <xsd:attribute name="title" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="image" type="imageType"/> - <xsd:complexType name="imageType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="action" type="xsd:string"/> - <xsd:attribute name="method" type="xsd:string"/> - <xsd:attribute name="config" type="xsd:string"/> - <xsd:attribute name="file" type="xsd:string"/> - <xsd:attribute name="url" type="xsd:string"/> - <xsd:attribute name="icon" type="xsd:string"/> - <xsd:attribute name="align" type="xsd:string"/> - <xsd:attribute name="type" type="xsd:string"/> - <xsd:attribute name="elementtype" type="xsd:string"/> - <xsd:attribute name="fileext" type="xsd:string"/> - <xsd:attribute name="tree" type="xsd:string"/> - <xsd:attribute name="notice" type="xsd:string"/> - <xsd:attribute name="size" type="xsd:string"/> - <xsd:attribute name="title" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="hidden" type="hiddenType"/> - <xsd:complexType name="hiddenType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="default" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="row" type="rowType"/> - <xsd:complexType name="rowType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="id" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="focus" type="focusType"/> - <xsd:complexType name="focusType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - </xsd:complexType> - <xsd:element name="group" type="groupType"/> - <xsd:complexType name="groupType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="open" type="xsd:boolean"/> - <xsd:attribute name="show" type="xsd:boolean"/> - <xsd:attribute name="title" type="xsd:string"/> - <xsd:attribute name="icon" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="button" type="buttonType"/> - <xsd:complexType name="buttonType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="type" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="src" type="xsd:string"/> - <xsd:attribute name="text" type="xsd:string"/> - <xsd:attribute name="value" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="password" type="passwordType"/> - <xsd:complexType name="passwordType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="default" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="size" type="xsd:int"/> - <xsd:attribute name="maxlength" type="xsd:int"/> - </xsd:complexType> - <xsd:element name="form" type="formType"/> - <xsd:complexType name="formType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="method" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="action" type="xsd:string"/> - <xsd:attribute name="subaction" type="xsd:string"/> - <xsd:attribute name="id" type="xsd:string"/> - <xsd:attribute name="languageid" type="xsd:string"/> - <xsd:attribute name="modelid" type="xsd:string"/> - <xsd:attribute name="label" type="xsd:string"/> - <xsd:attribute name="cancel" type="xsd:boolean"/> - <xsd:attribute name="visible" type="xsd:boolean"/> - <xsd:attribute name="target" type="xsd:string"/> - <xsd:attribute name="enctype" type="xsd:string"/> - <xsd:attribute name="async" type="xsd:boolean"/> - <xsd:attribute name="autosave" type="xsd:boolean"/> - <xsd:attribute name="type" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="upload" type="uploadType"/> - <xsd:complexType name="uploadType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="size" type="xsd:int"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="multiple" type="xsd:boolean"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="maxlength" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="output" type="outputType"/> - <xsd:complexType name="outputType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - </xsd:complexType> - <xsd:element name="tree" type="treeType"/> - <xsd:complexType name="treeType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="tree" type="xsd:string"/> - </xsd:complexType> -</xsd:schema>- \ No newline at end of file + targetNamespace="http://www.openrat.de/template" xmlns:xsd="http://www.w3.org/2001/XMLSchema" + elementFormDefault="qualified" attributeFormDefault="unqualified"> +<xsd:element name="selector" type="selectorType" /><xsd:complexType name="selectorType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="types" type="xsd:string" /><xsd:attribute name="name" type="xsd:string" /><xsd:attribute name="id" type="xsd:string" /><xsd:attribute name="folderid" type="xsd:string" /><xsd:attribute name="param" type="xsd:string" /></xsd:complexType><xsd:element name="text" type="textType" /><xsd:complexType name="textType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="prefix" type="xsd:string" /><xsd:attribute name="suffix" type="xsd:string" /><xsd:attribute name="title" type="xsd:string" /><xsd:attribute name="type" type="xsd:string" /><xsd:attribute name="class" type="xsd:string" /><xsd:attribute name="escape" type="xsd:boolean" /><xsd:attribute name="var" type="xsd:string" /><xsd:attribute name="text" type="xsd:string" /><xsd:attribute name="key" type="xsd:string" /><xsd:attribute name="raw" type="xsd:string" /><xsd:attribute name="value" type="xsd:string" /><xsd:attribute name="maxlength" type="xsd:string" /><xsd:attribute name="accesskey" type="xsd:string" /><xsd:attribute name="cut" type="xsd:string" /></xsd:complexType><xsd:element name="dummy" type="dummyType" /><xsd:complexType name="dummyType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice></xsd:complexType><xsd:element name="logo" type="logoType" /><xsd:complexType name="logoType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="name" type="xsd:string" /></xsd:complexType><xsd:element name="else" type="elseType" /><xsd:complexType name="elseType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice></xsd:complexType><xsd:element name="label" type="labelType" /><xsd:complexType name="labelType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="for" type="xsd:string" /><xsd:attribute name="value" type="xsd:string" /><xsd:attribute name="key" type="xsd:string" /><xsd:attribute name="text" type="xsd:string" /></xsd:complexType><xsd:element name="editor" type="editorType" /><xsd:complexType name="editorType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="type" type="xsd:string" /><xsd:attribute name="name" type="xsd:string" /><xsd:attribute name="mode" type="xsd:string" /><xsd:attribute name="extension" type="xsd:string" /><xsd:attribute name="mimetype" type="xsd:string" /></xsd:complexType><xsd:element name="newline" type="newlineType" /><xsd:complexType name="newlineType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice></xsd:complexType><xsd:element name="link" type="linkType" /><xsd:complexType name="linkType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="var1" type="xsd:string" /><xsd:attribute name="var2" type="xsd:string" /><xsd:attribute name="var3" type="xsd:string" /><xsd:attribute name="var4" type="xsd:string" /><xsd:attribute name="var5" type="xsd:string" /><xsd:attribute name="value1" type="xsd:string" /><xsd:attribute name="value2" type="xsd:string" /><xsd:attribute name="value3" type="xsd:string" /><xsd:attribute name="value4" type="xsd:string" /><xsd:attribute name="value5" type="xsd:string" /><xsd:attribute name="target" type="xsd:string" /><xsd:attribute name="type" type="xsd:string" /><xsd:attribute name="action" type="xsd:string" /><xsd:attribute name="subaction" type="xsd:string" /><xsd:attribute name="title" type="xsd:string" /><xsd:attribute name="class" type="xsd:string" /><xsd:attribute name="url" type="xsd:string" /><xsd:attribute name="config" type="xsd:string" /><xsd:attribute name="id" type="xsd:string" /><xsd:attribute name="accesskey" type="xsd:string" /><xsd:attribute name="name" type="xsd:string" /><xsd:attribute name="anchor" type="xsd:string" /><xsd:attribute name="frame" type="xsd:string" /><xsd:attribute name="modal" type="xsd:boolean" /></xsd:complexType><xsd:element name="radio" type="radioType" /><xsd:complexType name="radioType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="readonly" type="xsd:boolean" /><xsd:attribute name="name" type="xsd:string" /><xsd:attribute name="value" type="xsd:string" /><xsd:attribute name="prefix" type="xsd:string" /><xsd:attribute name="suffix" type="xsd:string" /><xsd:attribute name="class" type="xsd:string" /><xsd:attribute name="onchange" type="xsd:string" /><xsd:attribute name="children" type="xsd:string" /><xsd:attribute name="checked" type="xsd:string" /></xsd:complexType><xsd:element name="set" type="setType" /><xsd:complexType name="setType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="var" type="xsd:string" /><xsd:attribute name="value" type="xsd:string" /><xsd:attribute name="key" type="xsd:string" /></xsd:complexType><xsd:element name="checkbox" type="checkboxType" /><xsd:complexType name="checkboxType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="default" type="xsd:boolean" /><xsd:attribute name="name" type="xsd:string" /><xsd:attribute name="readonly" type="xsd:boolean" /></xsd:complexType><xsd:element name="input" type="inputType" /><xsd:complexType name="inputType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="class" type="xsd:string" /><xsd:attribute name="default" type="xsd:string" /><xsd:attribute name="type" type="xsd:string" /><xsd:attribute name="index" type="xsd:string" /><xsd:attribute name="name" type="xsd:string" /><xsd:attribute name="prefix" type="xsd:string" /><xsd:attribute name="value" type="xsd:string" /><xsd:attribute name="size" type="xsd:string" /><xsd:attribute name="maxlength" type="xsd:int" /><xsd:attribute name="onchange" type="xsd:string" /><xsd:attribute name="readonly" type="xsd:boolean" /><xsd:attribute name="hint" type="xsd:string" /><xsd:attribute name="icon" type="xsd:string" /></xsd:complexType><xsd:element name="insert" type="insertType" /><xsd:complexType name="insertType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="name" type="xsd:string" /><xsd:attribute name="url" type="xsd:string" /><xsd:attribute name="function" type="xsd:string" /></xsd:complexType><xsd:element name="header" type="headerType" /><xsd:complexType name="headerType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="views" type="xsd:string" /></xsd:complexType><xsd:element name="date" type="dateType" /><xsd:complexType name="dateType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="date" type="xsd:string" /></xsd:complexType><xsd:element name="if" type="ifType" /><xsd:complexType name="ifType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="true" type="xsd:string" /><xsd:attribute name="false" type="xsd:string" /><xsd:attribute name="contains" type="xsd:string" /><xsd:attribute name="value" type="xsd:string" /><xsd:attribute name="empty" type="xsd:string" /><xsd:attribute name="equals" type="xsd:string" /><xsd:attribute name="lessthan" type="xsd:string" /><xsd:attribute name="greaterthan" type="xsd:string" /><xsd:attribute name="present" type="xsd:string" /><xsd:attribute name="not" type="xsd:string" /></xsd:complexType><xsd:element name="qrcode" type="qrcodeType" /><xsd:complexType name="qrcodeType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="title" type="xsd:string" /></xsd:complexType><xsd:element name="list" type="listType" /><xsd:complexType name="listType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="list" type="xsd:string" /><xsd:attribute name="extract" type="xsd:boolean" /><xsd:attribute name="key" type="xsd:string" /><xsd:attribute name="value" type="xsd:string" /></xsd:complexType><xsd:element name="table" type="tableType" /><xsd:complexType name="tableType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="class" type="xsd:string" /><xsd:attribute name="width" type="xsd:string" /></xsd:complexType><xsd:element name="inputarea" type="inputareaType" /><xsd:complexType name="inputareaType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="name" type="xsd:string" /><xsd:attribute name="rows" type="xsd:int" /><xsd:attribute name="cols" type="xsd:int" /><xsd:attribute name="value" type="xsd:string" /><xsd:attribute name="index" type="xsd:string" /><xsd:attribute name="onchange" type="xsd:string" /><xsd:attribute name="prefix" type="xsd:string" /><xsd:attribute name="class" type="xsd:string" /><xsd:attribute name="default" type="xsd:string" /></xsd:complexType><xsd:element name="window" type="windowType" /><xsd:complexType name="windowType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice></xsd:complexType><xsd:element name="part" type="partType" /><xsd:complexType name="partType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="class" type="xsd:string" /><xsd:attribute name="id" type="xsd:string" /></xsd:complexType><xsd:element name="user" type="userType" /><xsd:complexType name="userType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="user" type="xsd:string" /><xsd:attribute name="id" type="xsd:string" /></xsd:complexType><xsd:element name="selectbox" type="selectboxType" /><xsd:complexType name="selectboxType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="list" type="xsd:string" /><xsd:attribute name="name" type="xsd:string" /><xsd:attribute name="default" type="xsd:string" /><xsd:attribute name="title" type="xsd:string" /><xsd:attribute name="class" type="xsd:string" /><xsd:attribute name="addempty" type="xsd:boolean" /><xsd:attribute name="multiple" type="xsd:boolean" /><xsd:attribute name="size" type="xsd:int" /><xsd:attribute name="lang" type="xsd:boolean" /></xsd:complexType><xsd:element name="column" type="columnType" /><xsd:complexType name="columnType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="width" type="xsd:string" /><xsd:attribute name="style" type="xsd:string" /><xsd:attribute name="class" type="xsd:string" /><xsd:attribute name="colspan" type="xsd:string" /><xsd:attribute name="rowspan" type="xsd:string" /><xsd:attribute name="header" type="xsd:boolean" /><xsd:attribute name="title" type="xsd:string" /><xsd:attribute name="url" type="xsd:string" /><xsd:attribute name="action" type="xsd:string" /><xsd:attribute name="id" type="xsd:string" /><xsd:attribute name="name" type="xsd:string" /></xsd:complexType><xsd:element name="radiobox" type="radioboxType" /><xsd:complexType name="radioboxType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="list" type="xsd:string" /><xsd:attribute name="name" type="xsd:string" /><xsd:attribute name="default" type="xsd:string" /><xsd:attribute name="onchange" type="xsd:string" /><xsd:attribute name="title" type="xsd:string" /><xsd:attribute name="class" type="xsd:string" /></xsd:complexType><xsd:element name="image" type="imageType" /><xsd:complexType name="imageType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="action" type="xsd:string" /><xsd:attribute name="method" type="xsd:string" /><xsd:attribute name="config" type="xsd:string" /><xsd:attribute name="file" type="xsd:string" /><xsd:attribute name="url" type="xsd:string" /><xsd:attribute name="icon" type="xsd:string" /><xsd:attribute name="align" type="xsd:string" /><xsd:attribute name="type" type="xsd:string" /><xsd:attribute name="elementtype" type="xsd:string" /><xsd:attribute name="fileext" type="xsd:string" /><xsd:attribute name="tree" type="xsd:string" /><xsd:attribute name="notice" type="xsd:string" /><xsd:attribute name="size" type="xsd:string" /><xsd:attribute name="title" type="xsd:string" /></xsd:complexType><xsd:element name="hidden" type="hiddenType" /><xsd:complexType name="hiddenType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="name" type="xsd:string" /><xsd:attribute name="default" type="xsd:string" /></xsd:complexType><xsd:element name="row" type="rowType" /><xsd:complexType name="rowType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="class" type="xsd:string" /><xsd:attribute name="id" type="xsd:string" /></xsd:complexType><xsd:element name="focus" type="focusType" /><xsd:complexType name="focusType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice></xsd:complexType><xsd:element name="group" type="groupType" /><xsd:complexType name="groupType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="open" type="xsd:boolean" /><xsd:attribute name="show" type="xsd:boolean" /><xsd:attribute name="title" type="xsd:string" /><xsd:attribute name="icon" type="xsd:string" /></xsd:complexType><xsd:element name="button" type="buttonType" /><xsd:complexType name="buttonType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="type" type="xsd:string" /><xsd:attribute name="class" type="xsd:string" /><xsd:attribute name="src" type="xsd:string" /><xsd:attribute name="text" type="xsd:string" /><xsd:attribute name="value" type="xsd:string" /></xsd:complexType><xsd:element name="password" type="passwordType" /><xsd:complexType name="passwordType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="name" type="xsd:string" /><xsd:attribute name="default" type="xsd:string" /><xsd:attribute name="class" type="xsd:string" /><xsd:attribute name="size" type="xsd:int" /><xsd:attribute name="maxlength" type="xsd:int" /></xsd:complexType><xsd:element name="form" type="formType" /><xsd:complexType name="formType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="method" type="xsd:string" /><xsd:attribute name="name" type="xsd:string" /><xsd:attribute name="action" type="xsd:string" /><xsd:attribute name="subaction" type="xsd:string" /><xsd:attribute name="id" type="xsd:string" /><xsd:attribute name="languageid" type="xsd:string" /><xsd:attribute name="modelid" type="xsd:string" /><xsd:attribute name="label" type="xsd:string" /><xsd:attribute name="cancel" type="xsd:boolean" /><xsd:attribute name="visible" type="xsd:boolean" /><xsd:attribute name="target" type="xsd:string" /><xsd:attribute name="enctype" type="xsd:string" /><xsd:attribute name="async" type="xsd:boolean" /><xsd:attribute name="autosave" type="xsd:boolean" /><xsd:attribute name="type" type="xsd:string" /></xsd:complexType><xsd:element name="upload" type="uploadType" /><xsd:complexType name="uploadType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="size" type="xsd:int" /><xsd:attribute name="name" type="xsd:string" /><xsd:attribute name="multiple" type="xsd:boolean" /><xsd:attribute name="class" type="xsd:string" /><xsd:attribute name="maxlength" type="xsd:string" /></xsd:complexType><xsd:element name="output" type="outputType" /><xsd:complexType name="outputType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice></xsd:complexType><xsd:element name="tree" type="treeType" /><xsd:complexType name="treeType"><xsd:choice maxOccurs="unbounded" minOccurs="0"><xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="text" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="else" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="label" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="link" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="set" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="input" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="header" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="date" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="if" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="list" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="table" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="window" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="part" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="user" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="column" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="image" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="row" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="group" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="button" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="password" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="form" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="output" maxOccurs="unbounded" minOccurs="0" /><xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0" /></xsd:choice><xsd:attribute name="tree" type="xsd:string" /></xsd:complexType></xsd:schema>+ \ No newline at end of file