From: <jon...@us...> - 2009-08-07 18:24:25
|
Revision: 20677 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=20677&view=rev Author: jonnybradley Date: 2009-08-07 18:24:16 +0000 (Fri, 07 Aug 2009) Log Message: ----------- [NEW] Toolbars revamp from coe branch Manual merge, so possibly a few more bits to come - such as: TODO: Rename quicktags to toolbars (coming very soon) Find/make missing icons Check no javascript behaviour Create database upgrade script Test test test! Modified Paths: -------------- trunk/css/admin.css trunk/lib/quicktags/quicktagslib.php trunk/lib/setup/prefs.php trunk/lib/smarty_tiki/block.textarea.php trunk/lib/tiki-js.js trunk/lib/wiki-plugins/wikiplugin_alink.php trunk/lib/wiki-plugins/wikiplugin_code.php trunk/lib/wiki-plugins/wikiplugin_countdown.php trunk/lib/wiki-plugins/wikiplugin_flash.php trunk/lib/wiki-plugins/wikiplugin_group.php trunk/lib/wiki-plugins/wikiplugin_groupmailcore.php trunk/lib/wiki-plugins/wikiplugin_html.php trunk/lib/wiki-plugins/wikiplugin_img.php trunk/lib/wiki-plugins/wikiplugin_listpages.php trunk/lib/wiki-plugins/wikiplugin_map.php trunk/lib/wiki-plugins/wikiplugin_mediaplayer.php trunk/lib/wiki-plugins/wikiplugin_quote.php trunk/lib/wiki-plugins/wikiplugin_rss.php trunk/lib/wiki-plugins/wikiplugin_tracker.php trunk/lib/wiki-plugins/wikiplugin_trackeritemfield.php trunk/lib/wiki-plugins/wikiplugin_trackerlist.php trunk/lib/wiki-plugins/wikiplugin_trackerstat.php trunk/lib/wiki-plugins/wikiplugin_usercount.php trunk/lib/wiki-plugins/wikiplugin_userlist.php trunk/setup_fckeditor.php trunk/styles/layout/layout.css trunk/templates/comments.tpl trunk/templates/map/tiki-map_edit.tpl trunk/templates/tiki-admin_content_templates.tpl trunk/templates/tiki-admin_quicktags.tpl trunk/templates/tiki-admin_tracker_fields.tpl trunk/templates/tiki-admin_trackers.tpl trunk/templates/tiki-blog_post.tpl trunk/templates/tiki-calendar_edit_item.tpl trunk/templates/tiki-edit_article.tpl trunk/templates/tiki-edit_submission.tpl trunk/templates/tiki-edit_wiki_section.tpl trunk/templates/tiki-faq_questions.tpl trunk/templates/tiki-send_newsletters.tpl trunk/templates/tiki-take_survey.tpl trunk/templates/tiki-user_tasks_edit.tpl trunk/templates/tiki-view_forum.tpl trunk/templates/tiki-view_tracker.tpl trunk/templates/tiki-view_tracker_item.tpl trunk/templates/tracker_item_field_input.tpl trunk/templates/wiki_edit.tpl trunk/tiki-admin_content_templates.php trunk/tiki-admin_quicktags.php trunk/tiki-admin_tracker_fields.php trunk/tiki-admin_trackers.php trunk/tiki-blog_post.php trunk/tiki-calendar.php trunk/tiki-calendar_edit_item.php trunk/tiki-edit_article.php trunk/tiki-edit_submission.php trunk/tiki-edit_wiki_section.php trunk/tiki-editpage.php trunk/tiki-faq_questions.php trunk/tiki-map_edit.php trunk/tiki-send_newsletters.php trunk/tiki-take_survey.php trunk/tiki-user_tasks.php trunk/tiki-view_forum.php trunk/tiki-view_forum_thread.php trunk/tiki-view_tracker.php trunk/tiki-view_tracker_item.php Added Paths: ----------- trunk/lib/smarty_tiki/function.quicktags.php Removed Paths: ------------- trunk/templates/tiki-admin_quicktags_content.tpl trunk/templates/tiki-admin_quicktags_edit.tpl trunk/templates/tiki-edit_help_tool.tpl Modified: trunk/css/admin.css =================================================================== --- trunk/css/admin.css 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/css/admin.css 2009-08-07 18:24:16 UTC (rev 20677) @@ -128,3 +128,92 @@ } div.adminanchors a {float: left} + +/* from ui-revamp branch, via coe branch - jb july 2009 */ + +.quicktags-admin .full { + border: solid thin gray; + float: left; + height: 478px; + width: 200px; + overflow-y: auto; + overflow-x: hidden; + margin: 0; +} + +.quicktags-admin .rows { + min-height: 490px; + float: left; + padding: 1em 2em 1em 0; +} + +.quicktags-admin .selectDiv { + float: left; + clear: left; +} + +.quicktags-admin .li { + display: block; +} + +.quicktag img.icon { + vertical-align: middle; + margin-right: 4px; +} + +.quicktags-admin .quicktag { + cursor: pointer; + height: 1.5em; + line-height: 1.2em; +} + +.quicktags-admin .rows .row { + height: 20px; + min-width: 500px; + overflow-y: auto; + overflow-x: hidden; + border: solid thin gray; + margin: 0; + padding: 2px 4px 0; +} + +.quicktags-admin .row li.quicktag { + list-style-type: none; + float: left; + width: 18px; + overflow: hidden; +} + +.quicktags-admin .row li.qt-plugin { + width: auto; + background-color: #9C0; + border: thin #690 solid; + margin: 0 .4em 0 0; + padding: 2px .4em 0 .2em; + color: #030; + font-style: normal; + font-weight: normal; + font-size: 10px; +} + +.qt-wys { + font-style: italic; +} + +.qt-wiki { + font-weight: bold; +} + +#qt_filter_div { + background-color: #fff; + border-top: thin gray solid; + border-right: thin gray solid; + border-bottom: none; + border-left: thin gray solid; + padding-left: .5em; +} + +#qt_filter_div a { + +} +/* end from ui-revamp branch */ Modified: trunk/lib/quicktags/quicktagslib.php =================================================================== --- trunk/lib/quicktags/quicktagslib.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/quicktags/quicktagslib.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -1,4 +1,4 @@ -<?php +<?php //this script may only be included - so its better to die if called directly. if (strpos($_SERVER["SCRIPT_NAME"],basename(__FILE__)) !== false) { @@ -6,93 +6,873 @@ exit; } -class QuickTagsLib extends TikiLib { - function list_quicktags($offset, $maxRecords, $sort_mode, $find, $category=null) { +include_once('lib/smarty_tiki/block.self_link.php'); + +abstract class Quicktag +{ + protected $wysiwyg; + protected $icon; + protected $label; + + private $requiredPrefs = array(); + + public static function getTag( $tagName ) // {{{ + { + if( $tag = QuicktagInline::fromName( $tagName ) ) + return $tag; + elseif( $tag = QuicktagBlock::fromName( $tagName ) ) + return $tag; + elseif( $tag = QuicktagLineBased::fromName( $tagName ) ) + return $tag; + elseif( $tag = QuicktagFckOnly::fromName( $tagName ) ) + return $tag; + elseif( $tag = QuicktagWikiplugin::fromName( $tagName ) ) + return $tag; + elseif( $tag = QuicktagPicker::fromName( $tagName ) ) + return $tag; + elseif( $tagName == 'fullscreen' ) + return new QuicktagFullscreen; + elseif( $tagName == 'enlarge' ) + return new QuicktagTextareaResize( 'enlarge' ); + elseif( $tagName == 'reduce' ) + return new QuicktagTextareaResize( 'reduce' ); + elseif( $tagName == 'help' ) + return new QuicktagHelptool; + elseif( $tagName == '-' ) + return new QuicktagSeparator; + } // }}} + + public static function getList() // {{{ + { + global $tikilib; + $plugins = $tikilib->plugin_get_list(); + foreach( $plugins as & $name ) + $name = "wikiplugin_$name"; + + return array_merge( array( + '-', + 'bold', + 'italic', + 'strike', + 'sub', + 'sup', + 'tikilink', + 'link', + 'anchor', + 'color', + 'bgcolor', + 'center', + 'table', + 'rule', + 'pagebreak', + 'blockquote', + 'h1', + 'h2', + 'h3', + 'toc', + 'image', + 'list', + 'numlist', + 'specialchar', + 'smiley', + 'templates', + 'cut', + 'copy', + 'paste', + 'pastetext', + 'pasteword', + 'print', + 'spellcheck', + 'undo', + 'redo', + 'find', + 'replace', + 'selectall', + 'removeformat', + 'showblocks', + 'left', + 'right', + 'full', + 'indent', + 'outdent', + 'underline', + 'unlink', + 'style', + 'fontname', + 'fontsize', + 'source', + 'fullscreen', + 'enlarge', + 'reduce', + 'help', + ), $plugins ); + } // }}} + + abstract function getWikiHtml( $areaName ); + + function isAccessible() // {{{ + { + global $prefs; + + foreach( $this->requiredPrefs as $prefName ) + if( ! isset($prefs[$prefName]) || $prefs[$prefName] != 'y' ) + return false; + + return true; + } // }}} + + function getWysiwygToken() // {{{ + { + return $this->wysiwyg; + } // }}} + + protected function addRequiredPreference( $prefName ) // {{{ + { + $this->requiredPrefs[] = $prefName; + } // }}} + + protected function setIcon( $icon ) // {{{ + { + $this->icon = $icon; + + return $this; + } // }}} + + protected function setLabel( $label ) // {{{ + { + $this->label = $label; + + return $this; + } // }}} + + protected function setWysiwygToken( $token ) // {{{ + { + $this->wysiwyg = $token; + + return $this; + } // }}} + + function getIconHtml() // {{{ + { + return '<img src="' . htmlentities($this->icon, ENT_QUOTES, 'UTF-8') . '" alt="' . htmlentities($this->label, ENT_QUOTES, 'UTF-8') . '" title="' . htmlentities($this->label, ENT_QUOTES, 'UTF-8') . '" class="icon"/>'; + } // }}} + + function getSelfLink( $click, $title, $class ) { // {{{ + global $smarty; - $bindvars=array(); - if ($find) { - $findesc = '%' . $find . '%'; - $mid = " where (`taglabel` like ?)"; - $bindvars[] = $findesc; + $params = array(); + $params['_onclick'] = $click . (substr($click, strlen($click)-1) != ';' ? ';' : '') . 'return false;'; + $params['_class'] = 'quicktag ' . (!empty($class) ? ' '.$class : ''); + $params['_ajax'] = 'n'; + $content = $title; + $params['_icon'] = $this->icon; + + if (strpos($class, 'qt-plugin') !== false) { + $params['_menu_text'] = 'y'; + $params['_menu_icon'] = 'y'; } else { - $mid = ""; } - if ( !empty($category) ) { - if ( is_array($category) ) { - $mid .= ( $mid ? ' and ' : ' where ' ) . '('; - foreach ( $category as $k => $v ) { - if ( $k > 0 ) $mid .= ' OR'; - $mid .= ' `tagcategory` like ?'; - $bindvars[] = $v; - } - $mid .= ')'; - } else { - $mid .= ( $mid ? ' and ' : ' where ' ) . '(`tagcategory` like ?)'; - $bindvars[] = $category; + return smarty_block_self_link($params, $content, $smarty); + } // }}} + + function getLabel() // {{{ + { + return $this->label; + } // }}} + +} + +class QuicktagSeparator extends Quicktag +{ + function __construct() // {{{ + { + $this->setWysiwygToken('-'); + $this->setIcon('pics/icons/tree_vertline.png'); + } // }}} + + function getWikiHtml( $areaName ) // {{{ + { + return '|'; + } // }}} +} + +class QuicktagFckOnly extends Quicktag +{ + private function __construct( $token, $icon = 'pics/icons/shading.png' ) // {{{ + { + $this->setWysiwygToken( $token ); + $this->setIcon($icon); + } // }}} + + public static function fromName( $name ) // {{{ + { + switch( $name ) { + case 'templates': + return new self( 'Templates', 'pics/icons/page_white_stack.png' ); + case 'cut': + return new self( 'Cut', 'pics/icons/cut.png' ); + case 'copy': + return new self( 'Copy', 'pics/icons/page_copy.png' ); + case 'paste': + return new self( 'Paste', 'pics/icons/page_paste.png' ); + case 'pastetext': + return new self( 'PasteText' ); + case 'pasteword': + return new self( 'PasteWord' ); + case 'print': + return new self( 'Print' ); + case 'spellcheck': + return new self( 'SpellCheck' ); + case 'undo': + return new self( 'Undo' ); + case 'redo': + return new self( 'Redo' ); + case 'find': + return new self( 'Find' ); + case 'replace': + return new self( 'Replace' ); + case 'selectall': + return new self( 'SelectAll' ); + case 'removeformat': + return new self( 'RemoveFormat' ); + case 'showblocks': + return new self( 'ShowBlocks' ); + case 'left': + return new self( 'JustifyLeft' ); + case 'right': + return new self( 'JustifyRight' ); + case 'full': + return new self( 'JustifyFull' ); + case 'indent': + return new self( 'Indent' ); + case 'outdent': + return new self( 'Outdent' ); + case 'underline': + return new self( 'Underline' ); + case 'unlink': + return new self( 'Unlink' ); + case 'style': + return new self( 'Style' ); + case 'fontname': + return new self( 'FontName' ); + case 'fontsize': + return new self( 'FontSize' ); + case 'source': + return new self( 'Source' ); + } + } // }}} + + function getWikiHtml( $areaName ) // {{{ + { + return null; + } // }}} +} + +class QuicktagInline extends Quicktag +{ + protected $syntax; + + public static function fromName( $tagName ) // {{{ + { + switch( $tagName ) { + case 'bold': + $label = tra('Bold'); + $icon = tra('pics/icons/text_bold.png'); + $wysiwyg = 'Bold'; + $syntax = '__text__'; + break; + case 'italic': + $label = tra('Italic'); + $icon = tra('pics/icons/text_italic.png'); + $wysiwyg = 'Italic'; + $syntax = "''text''"; + break; + case 'strike': + $label = tra('Strikethrough'); + $icon = tra('pics/icons/text_strikethrough.png'); + $wysiwyg = 'StrikeThrough'; + $syntax = '--text--'; + break; + case 'sub': + $label = tra('Subscript'); + $icon = tra('pics/icons/text_subscript.png'); + $wysiwyg = 'Subscript'; + $syntax = '{SUB()}text{SUB}'; + break; + case 'sup': + $label = tra('Superscript'); + $icon = tra('pics/icons/text_superscript.png'); + $wysiwyg = 'Superscript'; + $syntax = '{SUP()}text{SUP}'; + break; + case 'tikilink': + $label = tra('Wiki Link'); + $icon = tra('pics/icons/page_link.png'); + $wysiwyg = 'tikilink'; + $syntax = '((text))'; + break; + case 'link': + $label = tra('Link'); + $icon = tra('pics/icons/world_link.png'); + $wysiwyg = 'Link'; + $syntax = '[http://example.com|text]'; + break; + case 'anchor': + $label = tra('Anchor'); + $icon = tra('pics/icons/anchor.png'); + $wysiwyg = 'Anchor'; + $syntax = '{ANAME()}text{ANAME}'; + break; + case 'color': + $label = tra('Text Color'); + $icon = tra('pics/icons/palette.png'); + $wysiwyg = 'TextColor'; + $syntax = '~~red:text~~'; + break; + case 'bgcolor': + $label = tra('Background Color'); + $icon = tra('pics/icons/palette.png'); + $wysiwyg = 'BGColor'; + $syntax = '~~white,black:text~~'; + break; + default: + return; + } + + $tag = new self; + $tag->setLabel( $label ) + ->setWysiwygToken( $wysiwyg ) + ->setIcon( !empty($icon) ? $icon : 'pics/icons/shading.png' ) + ->setSyntax( $syntax ); + + return $tag; + } // }}} + + protected function setSyntax( $syntax ) // {{{ + { + $this->syntax = $syntax; + + return $this; + } // }}} + + function getWikiHtml( $areaName ) // {{{ + { + return $this->getSelfLink('needToConfirm=false;insertAt(\'' . $areaName . '\', \'' . addslashes(htmlentities($this->syntax, ENT_COMPAT, 'UTF-8')) . '\');return false;', + htmlentities($this->label, ENT_QUOTES, 'UTF-8'), 'qt-inline'); + + //return '<a href="javascript:insertAt(\'' . $areaName . '\', \'' . addslashes(htmlentities($this->syntax, ENT_COMPAT, 'UTF-8')) . + // '\'); return false;" onclick="needToConfirm=false;" title="' . htmlentities($this->label, ENT_QUOTES, 'UTF-8') . '" class="quicktags qt-inline">' . $this->getIconHtml() . '</a>'; + } // }}} + +} + +class QuicktagBlock extends QuicktagInline // Will change in the future +{ + protected $syntax; + + public static function fromName( $tagName ) // {{{ + { + switch( $tagName ) { + case 'center': + $label = tra('Align Center'); + $icon = tra('pics/icons/text_align_center.png'); + $wysiwyg = 'JustifyCenter'; + $syntax = "::text::"; + break; + case 'table': + $label = tra('Table'); + $icon = tra('pics/icons/table.png'); + $wysiwyg = 'Table'; + $syntax = '||r1c1|r1c2\nr2c1|r2c2||'; + break; + case 'rule': + $label = tra('Horizontal Bar'); + $icon = tra('pics/icons/page.png'); + $wysiwyg = 'Rule'; + $syntax = '---'; + break; + case 'pagebreak': + $label = tra('Page Break'); + $icon = tra('pics/icons/page.png'); + $wysiwyg = 'PageBreak'; + $syntax = '---'; + break; + case 'blockquote': + $label = tra('Block Quote'); + $icon = tra('pics/icons/box.png'); + $wysiwyg = 'Blockquote'; + $syntax = '^text^'; + break; + case 'h1': + case 'h2': + case 'h3': + $label = tra('Heading') . ' ' . $tagName{1}; + $icon = 'pics/icons/text_heading_' . $tagName{1} . '.png'; + $wysiwyg = null; + $syntax = str_repeat('!', $tagName{1}) . 'text'; + break; + case 'image': + $label = tra('Image'); + $icon = tra('pics/icons/picture.png'); + $wysiwyg = 'tikiimage'; + $syntax = '{img src= width= height= link= }'; + break; + case 'toc': + $label = tra('Table of contents'); + $icon = tra('pics/icons/book.png'); + $wysiwyg = 'TOC'; + $syntax = '{maketoc}'; + break; + default: + return; + } + + $tag = new self; + $tag->setLabel( $label ) + ->setWysiwygToken( $wysiwyg ) + ->setIcon( !empty($icon) ? $icon : 'pics/icons/shading.png' ) + ->setSyntax( $syntax ); + + return $tag; + } // }}} + + function getWikiHtml( $areaName ) // {{{ + { + return $this->getSelfLink('needToConfirm=false;insertAt(\'' . $areaName . '\', \'' . addslashes(htmlentities($this->syntax, ENT_COMPAT, 'UTF-8')) . '\', true);return false;', + htmlentities($this->label, ENT_QUOTES, 'UTF-8'), 'qt-block'); + //return '<a href="javascript:insertAt(\'' . $areaName . '\', \'' . addslashes(htmlentities($this->syntax, ENT_COMPAT, 'UTF-8')) . '\', true); return false;" onclick="needToConfirm=false;" title="' . htmlentities($this->label, ENT_QUOTES, 'UTF-8') . '" class="quicktag qt-block">' . $this->getIconHtml() . '</a>'; + } // }}} +} + +class QuicktagLineBased extends QuicktagInline // Will change in the future +{ + protected $syntax; + + public static function fromName( $tagName ) // {{{ + { + switch( $tagName ) { + case 'list': + $label = tra('Unordered List'); + $icon = tra('pics/icons/text_list_bullets.png'); + $wysiwyg = 'UnorderedList'; + $syntax = '*text'; + break; + case 'numlist': + $label = tra('Ordered List'); + $icon = tra('pics/icons/text_list_numbers.png'); + $wysiwyg = 'OrderedList'; + $syntax = '#text'; + break; + default: + return; + } + + $tag = new self; + $tag->setLabel( $label ) + ->setWysiwygToken( $wysiwyg ) + ->setIcon( !empty($icon) ? $icon : 'pics/icons/shading.png' ) + ->setSyntax( $syntax ); + + return $tag; + } // }}} + + function getWikiHtml( $areaName ) // {{{ + { + return $this->getSelfLink('needToConfirm=false;insertAt(\'' . $areaName . '\', \'' . addslashes(htmlentities($this->syntax, ENT_COMPAT, 'UTF-8')) . '\', true, true);return false;', + htmlentities($this->label, ENT_QUOTES, 'UTF-8'), 'qt-line'); + //return '<a href="javascript:insertAt(\'' . $areaName . '\', \'' . addslashes(htmlentities($this->syntax, ENT_COMPAT, 'UTF-8')) . '\', true, true); return false;" onclick="needToConfirm=false;" title="' . htmlentities($this->label, ENT_QUOTES, 'UTF-8') . '" class="quicktag qt-line">' . $this->getIconHtml() . '</a>'; + } // }}} +} + +class QuicktagPicker extends Quicktag +{ + private $list; + + public static function fromName( $tagName ) // {{{ + { + $prefs = array(); + + switch( $tagName ) { + case 'specialchar': + $wysiwyg = 'SpecialChar'; + $label = tra('Special Characters'); + $icon = tra('pics/icons/world_edit.png'); + // Line taken from DokuWiki + $list = explode(' ','À à Á á  â à ã Ä ä Ǎ ǎ Ă ă Å å Ā ā Ą ą Æ æ Ć ć Ç ç Č č Ĉ ĉ Ċ ċ Ð đ ð Ď ď È è É é Ê ê Ë ë Ě ě Ē ē Ė ė Ę ę Ģ ģ Ĝ ĝ Ğ ğ Ġ ġ Ĥ ĥ Ì ì Í í Î î Ï ï Ǐ ǐ Ī ī İ ı Į į Ĵ ĵ Ķ ķ Ĺ ĺ Ļ ļ Ľ ľ Ł ł Ŀ ŀ Ń ń Ñ ñ Ņ ņ Ň ň Ò ò Ó ó Ô ô Õ õ Ö ö Ǒ ǒ Ō ō Ő ő Œ œ Ø ø Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ş ş Š š Ŝ ŝ Ţ ţ Ť ť Ù ù Ú ú Û û Ü ü Ǔ ǔ Ŭ ŭ Ū ū Ů ů ǖ ǘ ǚ ǜ Ų ų Ű ű Ŵ ŵ Ý ý Ÿ ÿ Ŷ ŷ Ź ź Ž ž Ż ż Þ þ ß Ħ ħ ¿ ¡ ¢ £ ¤ ¥ € ¦ § ª ¬ ¯ ° ± ÷ ‰ ¼ ½ ¾ ¹ ² ³ µ ¶ † ‡ · • º ∀ ∂ ∃ Ə ə ∅ ∇ ∈ ∉ ∋ ∏ ∑ ‾ − ∗ √ ∝ ∞ ∠ ∧ ∨ ∩ ∪ ∫ ∴ ∼ ≅ ≈ ≠ ≡ ≤ ≥ ⊂ ⊃ ⊄ ⊆ ⊇ ⊕ ⊗ ⊥ ⋅ ◊ ℘ ℑ ℜ ℵ ♠ ♣ ♥ ♦ 𝛼 𝛽 𝛤 𝛾 𝛥 𝛿 𝜀 𝜁 𝛨 𝜂 𝛩 𝜃 𝜄 𝜅 𝛬 𝜆 𝜇 𝜈 𝛯 𝜉 𝛱 𝜋 𝛳 𝜍 𝛴 𝜎 𝜏 𝜐 𝛷 𝜑 𝜒 𝛹 𝜓 𝛺 𝜔 𝛻 𝜕 ★ ☆ ☎ ☚ ☛ ☜ ☝ ☞ ☟ ☹ ☺ ✔ ✘ × „ “ ” ‚ ‘ ’ « » ‹ › — – … ← ↑ → ↓ ↔ ⇐ ⇑ ⇒ ⇓ ⇔ © ™ ® ′ ″'); + $list = array_combine( $list, $list ); + break; + case 'smiley': + $wysiwyg = 'Smiley'; + $label = tra('Smileys'); + $icon = tra('img/smiles/icon_smile.gif'); + $rawList = array( 'biggrin', 'confused', 'cool', 'cry', 'eek', 'evil', 'exclaim', 'frown', 'idea', 'lol', 'mad', 'mrgreen', 'neutral', 'question', 'razz', 'redface', 'rolleyes', 'sad', 'smile', 'surprised', 'twisted', 'wink', 'arrow', 'santa' ); + $prefs[] = 'feature_smileys'; + + $list = array(); + foreach( $rawList as $smiley ) { + $tra = htmlentities( tra($smiley), ENT_QUOTES, 'UTF-8' ); + $list["(:$smiley:)"] = '<img src="img/smiles/icon_' .$smiley . '.gif" alt="' . $tra . '" title="' . $tra . '" border="0" width="15" height="15" />'; } + break; + default: + return; } - $query = "select * from `tiki_quicktags` $mid order by ".$this->convertSortMode($sort_mode); - $query_cant = "select count(*) from `tiki_quicktags` $mid"; - $result = $this->query($query,$bindvars,$maxRecords,$offset); - $cant = $this->getOne($query_cant,$bindvars); - $ret = array(); - while ($res = $result->fetchRow()) { - $res['iconpath'] = $res['tagicon']; - if (!is_file($res['tagicon'])) - $res['tagicon'] = 'pics/icons/page_white_code.png'; - $ret[] = $res; + $tag = new self; + $tag->setWysiwygToken( $wysiwyg ) + ->setLabel( $label ) + ->setIcon( !empty($icon) ? $icon : 'pics/icons/shading.png' ) + ->setList( $list ); + foreach( $prefs as $pref ) { + $tag->addRequiredPreference( $pref ); } - $retval = array(); - $retval["data"] = $ret; - $retval["cant"] = $cant; - return $retval; + + return $tag; + } // }}} + + function setList( $list ) // {{{ + { + $this->list = $list; + } // }}} + + function getWikiHtml( $areaName ) // {{{ + { + static $pickerAdded = false; + static $index = -1; + global $headerlib; + + if( ! $pickerAdded ) { + $headerlib->add_js( <<<JS +var pickerData = []; +var pickerDiv; + +function displayPicker( closeTo, list, areaname ) { + var pickerDiv = document.createElement('div'); + document.body.appendChild( pickerDiv ); + + var coord; + if (typeof closeTo.getCoordinates == 'function') { // moo + coord = closeTo.getCoordinates(); + } else if (\$jq) { // jq + coord = \$jq(closeTo).offset(); + coord.bottom = coord.top + \$jq(closeTo).height(); } + pickerDiv.className = 'quicktags-picker'; + pickerDiv.style.left = coord.left + 'px'; + pickerDiv.style.top = (coord.bottom + 8) + 'px'; - function replace_quicktag($tagId, $taglabel, $taginsert, $tagicon, $tagcategory) { - if ($tagId) { - $bindvars=array($taglabel, $taginsert, $tagicon, $tagcategory, $tagId); - $query = "update `tiki_quicktags` set `taglabel`=?,`taginsert`=?,`tagicon`=?,`tagcategory`=? where `tagId`=?"; - $result = $this->query($query,$bindvars); - } else { - $bindvars=array($taglabel, $taginsert, $tagicon, $tagcategory); - $query = "delete from `tiki_quicktags` where `taglabel`=? and `taginsert`=? and `tagicon`=? and `tagcategory`=? "; - $result = $this->query($query,$bindvars); - $query = "insert into `tiki_quicktags`(`taglabel`,`taginsert`,`tagicon`,`tagcategory`) values(?,?,?,?)"; - $result = $this->query($query,$bindvars); + var prepareLink = function( link, ins, disp ) { + link.innerHTML = disp; + link.href = 'javascript:void(0)'; + link.onclick = function() { + insertAt( areaname, ins ); + if (typeof pickerDiv.dispose == 'function') { + pickerDiv.dispose(); + } else if (\$jq) { + \$jq('div.quicktags-picker').remove(); + } } - return true; - } + }; - function remove_quicktag($tagId) { - $query = "delete from `tiki_quicktags` where `tagId`=?"; - $this->query($query,array($tagId)); - return true; - } + for( var i in pickerData[list] ) { + var char = pickerData[list][i]; + var link = document.createElement( 'a' ); - function get_quicktag($tagId) { - $query = "select * from `tiki_quicktags` where `tagId`=?"; - $result = $this->query($query,array($tagId)); - if (!$result->numRows()) return false; - $res = $result->fetchRow(); - return $res; + pickerDiv.appendChild( link ); + pickerDiv.appendChild( document.createTextNode(' ') ); + prepareLink( link, i, char ); } +} - function list_icons($p) { - $back = array(); - foreach($p as $path) { - $handle = opendir($path); - while ($file = readdir($handle)) { - if (((strtolower(substr($file, -4, 4)) == ".gif") - or (strtolower(substr($file, -4, 4)) == ".png")) - and (ereg("^[-_a-zA-Z0-9\.]*$", $file))) - { - $back[] = $path .'/' .$file; +JS +, 0 ); + } + + ++$index; + $headerlib->add_js( "pickerData.push( " . json_encode($this->list) . " );", 1 ); + + return $this->getSelfLink('displayPicker( this, ' . $index . ', \'' . $areaName . '\'); needToConfirm=false', + htmlentities($this->label, ENT_QUOTES, 'UTF-8'), 'qt-picker'); + //return '<a href="javascript:void(0)" onclick="displayPicker( this, ' . $index . ', \'' . $areaName . '\'); needToConfirm=false;" title="' . htmlentities($this->label, ENT_QUOTES, 'UTF-8') . '" class="quicktag qt-picker">' . $this->getIconHtml() . '</a>'; + } // }}} +} + +class QuicktagFullscreen extends Quicktag +{ + function __construct() // {{{ + { + $this->setLabel( tra('Full Screen Edit') ) + ->setIcon( 'pics/icons/application_get.png' ) + ->setWysiwygToken( 'FitWindow' ); + } // }}} + + function getWikiHtml( $areaName ) // {{{ + { + $name = 'zoom'; + if( isset($_REQUEST['zoom']) ) + $name = 'preview'; + return '<input type="image" name="'.$name.'" alt="' . htmlentities($this->label, ENT_QUOTES, 'UTF-8') . '" class="quicktag qt-fullscreen" title="' . htmlentities($this->label, ENT_QUOTES, 'UTF-8') . '" value="wiki_edit" onclick="needToConfirm=false;" title="" class="icon" src="' . htmlentities($this->icon, ENT_QUOTES, 'UTF-8') . '"/>'; + } // }}} +} + +class QuicktagTextareaResize extends Quicktag +{ + private $diff; + + function __construct( $type ) // {{{ + { + switch( $type ) { + case 'reduce': + $this->setLabel( tra('Reduce area height') ) + ->setIcon( tra('pics/icons/arrow_in.png') ); + $this->diff = '-10'; + break; + + case 'enlarge': + $this->setLabel( tra('Enlarge area height') ) + ->setIcon( tra('pics/icons/arrow_out.png') ); + $this->diff = '+10'; + break; + + default: + throw new Exception('Unknown resize icon type type'); + } + } // }}} + + function getWikiHtml( $areaName ) // {{{ + { + return $this->getSelfLink('textareasize(\'' . $areaName . '\', ' . $this->diff . ', 0);needToConfirm = false;', + htmlentities($this->label, ENT_QUOTES, 'UTF-8'), 'qt-resize'); + //return '<a href="javascript:textareasize(\'' . $areaName . '\', ' . $this->diff . ', 0)" onclick="needToConfirm = false;" title="' . htmlentities($this->label, ENT_QUOTES, 'UTF-8') . '" class="quicktag qt-resize">' . $this->getIconHtml() . '</a>'; + } // }}} + + function isAccessible() // {{{ + { + return parent::isAccessible() && ! isset($_REQUEST['zoom']); + } // }}} +} + +class QuicktagHelptool extends Quicktag +{ + function __construct() // {{{ + { + $this->setLabel( tra('Wiki Help') ) + ->setIcon( 'pics/icons/help.png' ); + } // }}} + + function getWikiHtml( $areaName ) // {{{ + { + + global $wikilib, $smarty, $plugins; + if (!isset($plugins)) { + include_once ('lib/wiki/wikilib.php'); + $plugins = $wikilib->list_plugins(true); + } + $smarty->assign_by_ref('plugins', $plugins); + return $smarty->fetch("tiki-edit_help.tpl"); + +// return $this->getSelfLink('needToConfirm=false;flip(\'help_sections\')', +// htmlentities($this->label, ENT_QUOTES, 'UTF-8'), 'qt-resize'); + } // }}} + + function isAccessible() // {{{ + { + return parent::isAccessible(); + } // }}} +} + +class QuicktagWikiplugin extends Quicktag +{ + private $pluginName; + + public static function fromName( $name ) // {{{ + { + global $tikilib; + if( substr( $name, 0, 11 ) == 'wikiplugin_' ) { + $name = substr( $name, 11 ); + if( $info = $tikilib->plugin_info( $name ) ) { + if (isset($info['icon']) and $info['icon'] != '') { + $icon = $info['icon']; + } else { + $icon = 'pics/icons/plugin.png'; } + + $tag = new self; + $tag->setLabel( str_ireplace('wikiplugin_', '', $info['name'] )) + ->setIcon( $icon ) + ->setWysiwygToken( self::getToken( $name ) ) + ->setPluginName( $name ); + + return $tag; } } - return $back; - } + } // }}} + function setPluginName( $name ) // {{{ + { + $this->pluginName = $name; + + return $this; + } // }}} + + function isAccessible() // {{{ + { + global $tikilib; + return parent::isAccessible() && $tikilib->plugin_enabled( $this->pluginName ); + } // }}} + + private static function getIcon( $name ) // {{{ + { + // This property could be added to the plugin definition + switch($name) { + default: + return 'pics/icons/plugin.png'; + } + } // }}} + + private static function getToken( $name ) // {{{ + { + switch($name) { + case 'flash': return 'Flash'; + } + } // }}} + + function getWikiHtml( $areaName ) // {{{ + { + return $this->getSelfLink('popup_plugin_form(\'' . $areaName . '\',\'' . $this->pluginName . '\');needToConfirm=false;', + htmlentities($this->label, ENT_QUOTES, 'UTF-8'), 'qt-plugin'); + //return '<a href="javascript:popup_plugin_form(\'' . $this->pluginName . '\')" onclick="needToConfirm=false;" title="' . htmlentities($this->label, ENT_QUOTES, 'UTF-8') . '" class="quicktag">' . $this->getIconHtml() . '</a>'; + } // }}} } -$quicktagslib = new QuickTagsLib; + +class QuicktagsList +{ + private $lines = array(); + + private function __construct() {} + + public static function fromPreference( $section ) // {{{ + { + global $tikilib; + + $global = $tikilib->get_preference( 'toolbar_global' . (strpos($section, '_comments') !== false ? '_comments' : '')); + $local = $tikilib->get_preference( 'toolbar_'.$section, $global ); + + return self::fromPreferenceString( $local ); + } // }}} + + public static function fromPreferenceString( $string ) // {{{ + { + $list = new self; + + $string = preg_replace( '/\s+/', '', $string ); + + foreach( explode( '/', $string ) as $line ) { + $list->addLine( explode( ',', $line ) ); + } + + return $list; + } // }}} + + private function addLine( array $tags ) // {{{ + { + $elements = array(); + $group = array(); + + foreach( $tags as $tagName ) { + if( $tagName == '-' ) { + if( count($group) ) { + $elements[] = $group; + $group = array(); + } + } else { + if( ( $tag = Quicktag::getTag( $tagName ) ) + && $tag->isAccessible() ) { + + $group[] = $tag; + } + } + } + + if( count($group) ) + $elements[] = $group; + + if( count( $elements ) ) + $this->lines[] = $elements; + } // }}} + + function getWysiwygArray() // {{{ + { + $lines = array(); + foreach( $this->lines as $line ) { + $lineOut = array(); + + foreach( $line as $group ) { + foreach( $group as $tag ) { + + if( $token = $tag->getWysiwygToken() ) + $lineOut[] = $token; + } + + $lineOut[] = '-'; + } + + $lineOut = array_slice( $lineOut, 0, -1 ); + + if( count($lineOut) ) + $lines[] = array($lineOut); + } + + return $lines; + } // }}} + + function getWikiHtml( $areaName ) // {{{ + { + global $tiki_p_admin, $tiki_p_admin_quicktags, $smarty, $section; + $html = ''; + + if ($tiki_p_admin == 'y' or $tiki_p_admin_quicktags == 'y') { + $params = array('_script' => 'tiki-admin_quicktags.php', '_onclick' => 'needToConfirm = true;', '_class' => 'quicktag', '_icon' => 'wrench', '_ajax' => 'n'); + if (isset($section)) { $params['section'] = $section; } + $content = tra('Admin Quicktags'); + $html .= '<div class="helptool-admin">'; + $html .= smarty_block_self_link($params, $content, $smarty); + $html .= '</div>'; + } + + foreach( $this->lines as $line ) { + $lineHtml = ''; + + foreach( $line as $group ) { + $groupHtml = ''; + foreach( $group as $tag ) { + $groupHtml .= $tag->getWikiHtml( $areaName ); + } + + if( ! empty($groupHtml) ) { + $param = empty($lineHtml) ? '' : ' class="quicktag-list"'; + $lineHtml .= "<span$param>$groupHtml</span>"; + } + } + if( ! empty($lineHtml) ) { + $html .= "<div>$lineHtml</div>"; + } + } + + return $html; + } // }}} + + function contains($name) { // {{{ + foreach( $this->lines as $line ) { + foreach( $line as $group ) { + foreach( $group as $tag ) { + if ($tag->getLabel() == $name) { + return true; + } + } + } + } + return false; + } // }}} +} + Modified: trunk/lib/setup/prefs.php =================================================================== --- trunk/lib/setup/prefs.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/setup/prefs.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -1149,7 +1149,16 @@ 'default_rows_textarea_comment' => '6', 'default_rows_textarea_forum' => '20', 'default_rows_textarea_forumthread' => '10', - + + 'toolbar_global' => ' + bold, italic, strike, - , color, bgcolor, - , sub, sup, + - , tikilink, image, link, unlink, -, undo, redo, + - , find, replace,-, removeformat, specialchar + / + templates, -, style, -, h1, h2, h3, left, center, -, list, numlist, outdent, indent, + - , table, -, source, showblocks, fullscreen, enlarge, reduce + ', + // pagination 'direct_pagination' => 'y', 'nextprev_pagination' => 'y', Modified: trunk/lib/smarty_tiki/block.textarea.php =================================================================== --- trunk/lib/smarty_tiki/block.textarea.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/smarty_tiki/block.textarea.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -45,14 +45,14 @@ // {editform Meat=$pagedata InstanceName='edit' ToolbarSet="Tiki"} // <input type="hidden" name="wysiwyg" value="y" /> } else { - if ( $params['_quicktags'] == 'y' ) { +/* if ( $params['_quicktags'] == 'y' ) { global $quicktagslib; include_once ('lib/quicktags/quicktagslib.php'); $quicktags = $quicktagslib->list_quicktags(0, -1, 'taglabel_asc', '', $params['_section']); $smarty->assign_by_ref('quicktags', $quicktags["data"]); } else { $smarty->clear_assign('quicktags'); - } + }*/ if ( isset($params['_enlarge']) && $params['_enlarge'] == 'y' ) $smarty->assign_by_ref('enlarge', $params['_enlarge']); Added: trunk/lib/smarty_tiki/function.quicktags.php =================================================================== --- trunk/lib/smarty_tiki/function.quicktags.php (rev 0) +++ trunk/lib/smarty_tiki/function.quicktags.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -0,0 +1,35 @@ +<?php +/* + * $Id: function.quicktags.php 20665 2009-08-07 15:13:18Z jonnybradley $ + * + * Smarty plugin to display content only to some groups + */ + +function smarty_function_quicktags($params, $content, &$smarty, $repeat) +{ + if($repeat) + return; + + if( ! isset( $params['section'] ) ) { + global $section; + if( ! empty($section) ) + $params['section'] = $section; + else + $params['section'] = 'global'; + } + + if( isset( $params['comments'] ) && $params['comments'] == 'y' ) { + $comments = true; + } else { + $comments = false; + } + + if( ! isset( $params['area_name'] ) ) { + $params['area_name'] = 'wikiedit'; + } + + include_once( 'lib/quicktags/quicktagslib.php' ); + $list = QuicktagsList::fromPreference( $params['section'] . ($comments ? '_comments' : '') ); + return $list->getWikiHtml( $params['area_name'] ); +} + Modified: trunk/lib/tiki-js.js =================================================================== --- trunk/lib/tiki-js.js 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/tiki-js.js 2009-08-07 18:24:16 UTC (rev 20677) @@ -330,50 +330,77 @@ function setCaretToPos (textarea, pos) { setSelectionRange(textarea, pos, pos); } -function insertAt(elementId, replaceString) { - //inserts given text at selection or cursor position - textarea = getElementById(elementId); - var toBeReplaced = /text|page|area_name/g; //substrings in replaceString to be replaced by the selection if a selection was done - if (textarea.setSelectionRange) { - //Mozilla UserAgent Gecko-1.4 - var selectionStart = textarea.selectionStart; - var selectionEnd = textarea.selectionEnd; - var scrollTop=textarea.scrollTop; - if (selectionStart != selectionEnd) { // has there been a selection - var newString = replaceString.replace(toBeReplaced, textarea.value.substring(selectionStart, selectionEnd)); - textarea.value = textarea.value.substring(0, selectionStart) - + newString - + textarea.value.substring(selectionEnd); - setSelectionRange(textarea, selectionStart, selectionStart + newString.length); - } - else {// set caret - textarea.value = textarea.value.substring(0, selectionStart) - + replaceString - + textarea.value.substring(selectionEnd); - setCaretToPos(textarea, selectionStart + replaceString.length); - } - textarea.scrollTop=scrollTop; - } - else if (document.selection) { - //UserAgent IE-6.0 - textarea.focus(); - var range = document.selection.createRange(); - if (range.parentElement() == textarea) { - var isCollapsed = range.text == ''; - if (! isCollapsed) { - range.text = replaceString.replace(toBeReplaced, range.text); - range.moveStart('character', -range.text.length); - range.select(); - } - else { - range.text = replaceString; - } - } - } - else { //UserAgent Gecko-1.0.1 (NN7.0) - setSomeElement(elementId, replaceString) - //alert("don't know yet how to handle insert" + document); - } +function insertAt(elementId, replaceString, blockLevel, perLine) { + //inserts given text at selection or cursor position + textarea = getElementById(elementId); + var toBeReplaced = /text|page|area_name/g; //substrings in replaceString to be replaced by the selection if a selection was done + if (textarea.setSelectionRange) { + //Mozilla UserAgent Gecko-1.4 + var selectionStart = textarea.selectionStart; + var selectionEnd = textarea.selectionEnd; + var scrollTop=textarea.scrollTop; + + if( blockLevel ) { + // Block level operations apply to entire lines + + // +1 and -1 to handle end of line caret position correctly + selectionStart = textarea.value.lastIndexOf( "\n", selectionStart - 1 ) + 1; + selectionEnd = textarea.value.indexOf( "\n", selectionEnd ); + + if( selectionEnd == -1 ) + selectionEnd = textarea.value.length; + } + + if (selectionStart != selectionEnd) { // has there been a selection + var newString = ''; + if( perLine ) { + var lines = textarea.value.substring(selectionStart, selectionEnd).split("\n"); + for( k = 0; lines.length > k; ++k ) { + if( lines[k].length != 0 ) + newString += replaceString.replace(toBeReplaced, lines[k]); + if( k != lines.length - 1 ) + newString += "\n"; + } + } else { + if (replaceString.match(toBeReplaced)) { + newString = replaceString.replace(toBeReplaced, textarea.value.substring(selectionStart, selectionEnd)); + } else { + newString = replaceString + '\n' + textarea.value.substring(selectionStart, selectionEnd); + } + } + textarea.value = textarea.value.substring(0, selectionStart) + + newString + + textarea.value.substring(selectionEnd); + setSelectionRange(textarea, selectionStart, selectionStart + newString.length); + } + else {// set caret + textarea.value = textarea.value.substring(0, selectionStart) + + replaceString + + textarea.value.substring(selectionEnd); + setCaretToPos(textarea, selectionStart + replaceString.length); + } + textarea.scrollTop=scrollTop; + } + else if (document.selection) { + //UserAgent IE-6.0 + textarea.focus(); + var range = document.selection.createRange(); + if (range.parentElement() == textarea) { + var isCollapsed = range.text == ''; + if (! isCollapsed) { + range.text = replaceString.replace(toBeReplaced, range.text); + range.moveStart('character', -range.text.length); + range.select(); + } + else { + range.text = replaceString; + } + } + } + else { //UserAgent Gecko-1.0.1 (NN7.0) + setSomeElement(elementId, replaceString); + //alert("don't know yet how to handle insert" + document); + } } function setUserModuleFromCombo(id, textarea) { Modified: trunk/lib/wiki-plugins/wikiplugin_alink.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_alink.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_alink.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -30,6 +30,7 @@ 'description' => tra('Creates a link to an anchor within a page. Anchors can be created using the ANAME plugin.'), 'prefs' => array('wikiplugin_alink'), 'body' => tra('Anchor link label.'), + 'icon' => 'pics/icons/world_link.png', 'params' => array( 'aname' => array( 'required' => true, Modified: trunk/lib/wiki-plugins/wikiplugin_code.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_code.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_code.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -13,6 +13,7 @@ 'description' => tra('Displays a snippet of code'), 'prefs' => array('wikiplugin_code'), 'body' => tra('code'), + 'icon' => 'pics/icons/page_white_code.png', 'params' => array( 'caption' => array( 'required' => false, Modified: trunk/lib/wiki-plugins/wikiplugin_countdown.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_countdown.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_countdown.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -24,6 +24,7 @@ 'documentation' => 'PluginCountdown', 'description' => tra('Displays a countdown from now until the specified date.'), 'prefs' => array('wikiplugin_countdown'), + 'icon' => 'pics/icons/clock.png', 'body' => tra('Text to append to the countdown.'), 'params' => array( 'enddate' => array( Modified: trunk/lib/wiki-plugins/wikiplugin_flash.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_flash.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_flash.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -16,6 +16,7 @@ 'description' => tra('Displays a SWF on the wiki page'), 'prefs' => array('wikiplugin_flash'), 'extraparams' => true, + 'icon' => 'pics/icons/page_white_flash.png', 'params' => array( 'movie' => array( 'required' => true, Modified: trunk/lib/wiki-plugins/wikiplugin_group.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_group.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_group.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -19,6 +19,7 @@ 'description' => tra("Display wiki text if user is in one of listed groups"), 'body' => tra('Wiki text to display if conditions are met. The body may contain {ELSE}. Text after the marker will be displayed to users not matching the condition.'), 'prefs' => array('wikiplugin_group'), + 'icon' => 'pics/icons/group.png', 'params' => array( 'friends' => array( 'required' => false, Modified: trunk/lib/wiki-plugins/wikiplugin_groupmailcore.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_groupmailcore.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_groupmailcore.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -11,9 +11,9 @@ function wikiplugin_groupmailcore_info() { return array( - 'name' => tra('GroupMail'), + 'name' => tra('GroupMailCore'), 'documentation' => '', - 'description' => tra('Displays GroupMail functions on a wiki page'), + 'description' => tra('Displays GroupMail functions on a wiki page. Usually set up using a plugin alias created by the GroupMail profile.'), 'prefs' => array('wikiplugin_groupmailcore', 'feature_trackers'), //'extraparams' => true, 'params' => array( Modified: trunk/lib/wiki-plugins/wikiplugin_html.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_html.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_html.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -18,6 +18,7 @@ 'body' => tra('HTML code'), 'validate' => 'all', 'filter' => 'rawhtml_unsafe', + 'icon' => 'pics/icons/html.png', 'params' => array( 'wiki' => array( 'required' => false, Modified: trunk/lib/wiki-plugins/wikiplugin_img.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_img.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_img.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -6,6 +6,7 @@ 'name' => tra( 'Img' ), 'description' => tra( 'Displays an image.' ), 'prefs' => array( 'wikiplugin_img' ), + 'icon' => 'pics/icons/picture.png', 'params' => array( 'src' => array( 'required' => false, Modified: trunk/lib/wiki-plugins/wikiplugin_listpages.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_listpages.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_listpages.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -14,6 +14,7 @@ 'documentation' => 'PluginListpages', 'description' => tra('List wiki pages.'), 'prefs' => array('wikiplugin_listpages'), + 'icon' => 'pics/icons/page_white_stack.png', 'params' => array( 'offset' => array( 'required' => false, Modified: trunk/lib/wiki-plugins/wikiplugin_map.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_map.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_map.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -17,6 +17,7 @@ 'documentation' => 'PluginMap', 'description' => tra('Displays a map'), 'prefs' => array( 'feature_maps', 'wikiplugin_map' ), + 'icon' => 'pics/icons/map.png', 'params' => array( 'mapfile' => array( 'required' => true, Modified: trunk/lib/wiki-plugins/wikiplugin_mediaplayer.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_mediaplayer.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_mediaplayer.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -10,6 +10,7 @@ 'description' => 'Simple mp3 or flv Player', 'extraparams' =>true, 'prefs' => array( 'wikiplugin_mediaplayer' ), + 'icon' => 'pics/icons/television.png', 'params' => array( 'mp3' => array( 'required' => false, Modified: trunk/lib/wiki-plugins/wikiplugin_quote.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_quote.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_quote.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -22,6 +22,7 @@ 'description' => tra("Quote text by surrounding the text with a box, like the [QUOTE] BBCode"), 'prefs' => array( 'wikiplugin_quote' ), 'body' => tra('Quoted text'), + 'icon' => 'pics/icons/quotes.png', 'params' => array( 'replyto' => array( 'required' => false, Modified: trunk/lib/wiki-plugins/wikiplugin_rss.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_rss.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_rss.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -14,6 +14,7 @@ 'documentation' => 'PluginRSS', 'description' => tra('Inserts an RSS feed output.'), 'prefs' => array( 'wikiplugin_rss' ), + 'icon' => 'pics/icons/rss.png', 'params' => array( 'id' => array( 'required' => true, Modified: trunk/lib/wiki-plugins/wikiplugin_tracker.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_tracker.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_tracker.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -17,6 +17,7 @@ 'description' => tra("Displays an input form for tracker submit"), 'prefs' => array( 'feature_trackers', 'wikiplugin_tracker' ), 'body' => tra('Confirmation message after posting form'), + 'icon' => 'pics/icons/database.png', 'params' => array( 'trackerId' => array( 'required' => true, @@ -742,9 +743,9 @@ } } elseif ($f['type'] == 'a') { if ($f['options_array'][0] == 1 && empty($quicktags)) { - global $quicktagslib; include_once ('lib/quicktags/quicktagslib.php'); - $quicktags = $quicktagslib->list_quicktags(0, -1, 'taglabel_asc', '', 'trackers'); - $smarty->assign_by_ref('quicktags', $quicktags['data']); + //global $quicktagslib; include_once ('lib/quicktags/quicktagslib.php'); + //$quicktags = $quicktagslib->list_quicktags(0, -1, 'taglabel_asc', '', 'trackers'); + //$smarty->assign_by_ref('quicktags', $quicktags['data']); } } elseif ($f['type'] == 'l' && isset($itemId)) { $opts[1] = split(':', $f['options_array'][1]); Modified: trunk/lib/wiki-plugins/wikiplugin_trackeritemfield.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_trackeritemfield.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_trackeritemfield.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -13,6 +13,7 @@ 'description' => tra("Displays the value of a tracker item field or the wiki text if the value of the field is set or has a value(if itemId not specified, use the itemId of the url or the user tracker)."), 'prefs' => array( 'wikiplugin_trackeritemfield', 'feature_trackers' ), 'body' => tra('Wiki text containing an {ELSE} marker.'), + 'icon' => 'pics/icons/database_go.png', 'params' => array( 'trackerId' => array( 'required' => false, Modified: trunk/lib/wiki-plugins/wikiplugin_trackerlist.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_trackerlist.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_trackerlist.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -14,6 +14,7 @@ 'description' => tra('Displays the output of a tracker content, fields are indicated with numeric ids.'), 'prefs' => array( 'feature_trackers', 'wikiplugin_trackerlist' ), 'body' => tra('Notice'), + 'icon' => 'pics/icons/database_table.png', 'params' => array( 'trackerId' => array( 'required' => true, Modified: trunk/lib/wiki-plugins/wikiplugin_trackerstat.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_trackerstat.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_trackerstat.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -22,6 +22,7 @@ 'description' => tra("Displays some stat of a tracker content, fields are indicated with numeric ids."), 'prefs' => array( 'feature_trackers', 'wikiplugin_trackerstat' ), 'body' => tra('Title'), + 'icon' => 'pics/icons/database_lightning.png', 'params' => array( 'trackerId' => array( 'required' => true, Modified: trunk/lib/wiki-plugins/wikiplugin_usercount.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_usercount.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_usercount.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -17,6 +17,7 @@ 'description' => tra('Displays the number of registered users'), 'prefs' => array( 'wikiplugin_usercount' ), 'body' => tra('Group name'), + 'icon' => 'pics/icons/group_gear.png', 'params' => array( ), ); Modified: trunk/lib/wiki-plugins/wikiplugin_userlist.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_userlist.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/lib/wiki-plugins/wikiplugin_userlist.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -17,6 +17,7 @@ 'description' => tra('Displays a list of registered users'), 'prefs' => array( 'wikiplugin_userlist' ), 'body' => tra('Login Filter'), + 'icon' => 'pics/icons/group_go.png', 'params' => array( 'sep' => array( 'required' => false, Modified: trunk/setup_fckeditor.php =================================================================== --- trunk/setup_fckeditor.php 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/setup_fckeditor.php 2009-08-07 18:24:16 UTC (rev 20677) @@ -5,28 +5,15 @@ // (this is why FCKeditor doesn't find the "Tiki" toolbar defined here when compression is activated) $force_no_compression = true; include('tiki-setup.php'); +include_once 'lib/quicktags/quicktagslib.php'; -if ($prefs['feature_wysiwyg'] != 'y') { - $smarty->assign('msg', tra("This feature is disabled").": feature_wysiwyg"); - $smarty->display("error.tpl"); - die; -} +$fckstyle = 'styles/'.$prefs['style']; +$smarty->assign('fckstyle',$fckstyle); -global $tikilib; -$smarty->assign('fckstyle',$tikilib->get_style_path('', '', $prefs['style'])); -$smarty->assign('fckstyleoption',$tikilib->get_style_path($prefs['style'], $prefs['style_option'], $prefs['style_option'])); +$section = isset($_GET['section']) ? $_GET['section'] : 'wiki page'; -$tools = split("\r\n|\n",$prefs['wysiwyg_toolbar']); -$line = 0; -foreach ($tools as $t) { - $t = trim($t); - if ($t == '/') { - $line++; - } else { - $els = split(',',$t); - $els = array_map('trim',$els); - $toolbar[$line][] = $els; - } -} -$smarty->assign('toolbar',$toolbar); +$quicktags = QuicktagsList::fromPreference( $section ); +file_put_contents('temp/cache/foo', print_r($quicktags->getWysiwygArray(), true)); +$smarty->assign('toolbar', $quicktags->getWysiwygArray() ); + $smarty->display('setup_fckeditor.tpl', null, null, 'application/javascript'); Modified: trunk/styles/layout/layout.css =================================================================== --- trunk/styles/layout/layout.css 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/styles/layout/layout.css 2009-08-07 18:24:16 UTC (rev 20677) @@ -570,6 +570,54 @@ padding: 0; } +/* New Quicktags (toolbars) */ + +a.quicktag { + padding: 0 .5em 0 0; +} + +a.qt-plugin { +} + +a.qt-plugin div { + /* .iconmenu */ + background-color: #CD8; + border: thin #690 solid; + margin: 0 .4em 0 0; + padding: 2px .4em 0 .2em; + color: #030; + font-size: 10px; +} + +a.qt-plugin:hover { + text-decoration: none; +} + +a.qt-plugin div img { /* div.iconmenu img.icon */ + margin-bottom: 4px; +} + +span.quicktag-list { + padding: 0 0 0 .5em; + line-height: 20px; + border-left: medium double lightgray; +} + +.helptool-admin { + float: right; + border-left: medium double lightgrey; + padding-left:8px; + margin-left:8px; +} + +.quicktags-picker { + position: absolute; + width: 300px; + background-color: white; + border: thin solid black; + z-index: 300; +} + /* New Help section */ div#tikihelp { position: fixed; Modified: trunk/templates/comments.tpl =================================================================== --- trunk/templates/comments.tpl 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/templates/comments.tpl 2009-08-07 18:24:16 UTC (rev 20677) @@ -315,18 +315,12 @@ {/if} {* End: Xenfasa adding and testing article ratings in comments here *} - {if $prefs.feature_smileys eq 'y'} - <tr> - <td class="formcolor"><label>{tr}Smileys{/tr}</label></td> - <td class="formcolor">{include file='tiki-smileys.tpl' area_name="editpost2"}</td> - </tr> - {/if} - - {if $quicktags and $prefs.quicktags_over_textarea eq 'y'} + {assign var=quicktags_html value=true}{* can't find where this gets set in ui-revamp project *} + {if $quicktags_html and $prefs.quicktags_over_textarea eq 'y'} <tr> - <td class="formcolor"><label>{tr}Quicktags{/tr}</label></td> + <td class="formcolor"><label>{tr}Quicktags{/tr}</label></td> <td class="formcolor"> - {include file='tiki-edit_help_tool.tpl' area_name='editpost2'} + {quicktags area_name='editpost2' comments='y'} </td> </tr> {/if} @@ -334,12 +328,9 @@ <tr> <td class="formcolor"> <label for="editpost2">{if $forum_mode eq 'y'}{tr}Reply{/tr}{else}{tr}Comment{/tr} <span class="attention">({tr}required{/tr})</span>{/if}</label> - <br /><br /> - {include file='textareasize.tpl' area_name='editpost2' formId='editpostform'} - <br /><br /> - {if $quicktags and $prefs.quicktags_over_textarea neq 'y'} - {include file='tiki-edit_help_tool.tpl' area_name='editpost2'} - {/if} + {if $quicktags_html and $prefs.quicktags_over_textarea neq 'y'} + {quicktags area_name='editpost2' comments='y'} + {/if} </td> <td class="formcolor"> <textarea id="editpost2" name="comments_data" rows="{$rows}" cols="{$cols}">{if $prefs.feature_forum_replyempty ne 'y' || $edit_reply > 0 || $comment_preview eq 'y'}{$comment_data|escape}{/if}</textarea> Modified: trunk/templates/map/tiki-map_edit.tpl =================================================================== --- trunk/templates/map/tiki-map_edit.tpl 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/templates/map/tiki-map_edit.tpl 2009-08-07 18:24:16 UTC (rev 20677) @@ -91,7 +91,7 @@ {if $prefs.quicktags_over_textarea neq 'y'}<table style="border:0; width:100%"><tr><td style="border:0;">{/if} <div id='textarea-toolbar' style='padding:3px; font-size:10px; {if $prefs.quicktags_over_textarea neq 'y'}float:left;{/if}'> <div style='float:left; margin-right:5px'>{include file='textareasize.tpl' area_name='mapdata' formId='editpageform' ToolbarSet='Tiki'}</div> - {include file=tiki-edit_help_tool.tpl area_name='mapdata'} + {quicktags area_name='mapdata'} </div> {if $prefs.quicktags_over_textarea neq 'y'}</td><td style="border:0;">{/if} <textarea id='mapdata' class='wikiedit' name='pagedata' rows='{$rows}' wrap='virtual' cols='{$cols}' style='width:99%'>{$pagedata|escape}</textarea> Modified: trunk/templates/tiki-admin_content_templates.tpl =================================================================== --- trunk/templates/tiki-admin_content_templates.tpl 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/templates/tiki-admin_content_templates.tpl 2009-08-07 18:24:16 UTC (rev 20677) @@ -74,7 +74,7 @@ <tr> <td class="formcolor"><label>{tr}Quicktags{/tr}</label></td> <td class="formcolor"> - {include file='tiki-edit_help_tool.tpl' area_name='editwiki'} + {quicktags area_name='editwiki'} </td> </tr> {/if} @@ -92,7 +92,7 @@ <br /> <br /> {if $prefs.quicktags_over_textarea neq 'y'} - {include file='tiki-edit_help_tool.tpl' area_name='editwiki'} + {quicktags area_name='editwiki'} {/if} </td> <td class="formcolor"> Modified: trunk/templates/tiki-admin_quicktags.tpl =================================================================== --- trunk/templates/tiki-admin_quicktags.tpl 2009-08-07 17:25:28 UTC (rev 20676) +++ trunk/templates/tiki-admin_quicktags.tpl 2009-08-07 18:24:16 UTC (rev 20677) @@ -1,17 +1,54 @@ -{* $Id$ *} -{title help="QuickTags"}{tr}Admin Quicktags{/tr}{/title} - -{tabset name="tiki-admin_quicktags"} -{tab name="{tr}QuickTags{/tr}"} -<div id="quicktags-content"> - {include file='tiki-admin_quicktags_content.tpl'} +{title help="Quicktags"}{tr}Admin Quicktags{/tr}{/title} +<div class="quicktags-admin clearfix"> + <form method="get" action="tiki-admin_quicktags.php"> + <div> + <label>{tr}Section{/tr}:</label> + <select name="section" onchange="this.form.submit()"> + {foreach from=$sections item=name} + <option{if $name eq $loaded} selected="selected"{/if}>{$name|escape}</option> + {/foreach} + </select> + <label>{tr}Comments{/tr}:</label> + <input name="comments" type="checkbox" onchange="this.form.submit()" {if $comments eq 'on'}checked{/if}/> + {if $prefs.javascript_enabled eq 'n'}<input name="load" type="submit" value="{tr}Load{/tr}"/>{/if} + </div> + </form> + <div class="rows"> + <label for... [truncated message content] |