summaryrefslogtreecommitdiff
path: root/extensions/WikiEditor/modules
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2016-05-01 15:12:12 -0400
committerLuke Shumaker <lukeshu@sbcglobal.net>2016-05-01 15:12:12 -0400
commitc9aa36da061816dee256a979c2ff8d2ee41824d9 (patch)
tree29f7002b80ee984b488bd047dbbd80b36bf892e9 /extensions/WikiEditor/modules
parentb4274e0e33eafb5e9ead9d949ebf031a9fb8363b (diff)
parentd1ba966140d7a60cd5ae4e8667ceb27c1a138592 (diff)
Merge branch 'archwiki'
# Conflicts: # skins/ArchLinux.php # skins/ArchLinux/archlogo.gif
Diffstat (limited to 'extensions/WikiEditor/modules')
-rw-r--r--extensions/WikiEditor/modules/contentCollector.js439
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.css22
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.dialogs.js7
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.highlight.js8
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.js3
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.preview.js3
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.previewDialog.js3
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.publish.js3
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.templateEditor.js12
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.templates.js12
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.tests.toolbar.js24
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.toc.js8
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.toolbar.hideSig.js4
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.toolbar.js3
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.toolbar.styles.css25
-rw-r--r--extensions/WikiEditor/modules/images/templateEditor/collapse.pngbin347 -> 0 bytes
-rw-r--r--extensions/WikiEditor/modules/images/templateEditor/dialog-collapsed.pngbin266 -> 0 bytes
-rw-r--r--extensions/WikiEditor/modules/images/templateEditor/dialog-expanded.pngbin263 -> 0 bytes
-rw-r--r--extensions/WikiEditor/modules/images/templateEditor/expand.pngbin223 -> 0 bytes
-rw-r--r--extensions/WikiEditor/modules/images/templateEditor/name-base.pngbin138 -> 0 bytes
-rw-r--r--extensions/WikiEditor/modules/images/templateEditor/text-base.pngbin88 -> 0 bytes
-rw-r--r--extensions/WikiEditor/modules/images/templateEditor/wiki-text.pngbin206 -> 0 bytes
-rw-r--r--extensions/WikiEditor/modules/images/toc/close.pngbin216 -> 0 bytes
-rw-r--r--extensions/WikiEditor/modules/images/toc/grab.pngbin92 -> 0 bytes
-rw-r--r--extensions/WikiEditor/modules/images/toc/grip.pngbin108 -> 0 bytes
-rw-r--r--extensions/WikiEditor/modules/images/toc/open.pngbin217 -> 0 bytes
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/button-sprite.svg3038
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-big.svg113
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold-A.svg131
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold-B.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold-F.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold-G.svg163
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold-N.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold-P.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold-V.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold-hy.pngbin0 -> 1675 bytes
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold.svg131
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-indent-rtl.pngbin317 -> 0 bytes
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-indent.pngbin316 -> 0 bytes
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-indent.svg220
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-italic-A.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-italic-C.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-italic-K.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-italic-hy.pngbin0 -> 1475 bytes
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-italic-i.svg104
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-italic.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-olist.svg202
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-small.svg114
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-subscript.svg114
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-superscript.svg114
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-ulist.svg204
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-file.svg206
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-gallery.svg191
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-ilink.svg148
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-link.svg94
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-newline.svg105
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-nowiki.svg112
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-redirect.svg118
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-reference.svg88
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-signature.svg274
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-table.svg131
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-xlink.svg125
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/search-replace.svg228
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.css32
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.css2
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js340
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.js72
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.highlight.js373
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.html85
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.iframe.js1387
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.js127
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.preview.js115
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.js33
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.publish.js29
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.templateEditor.js865
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.templates.js69
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.toc.css204
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.toc.js676
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js31
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.css39
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js292
81 files changed, 8409 insertions, 4729 deletions
diff --git a/extensions/WikiEditor/modules/contentCollector.js b/extensions/WikiEditor/modules/contentCollector.js
deleted file mode 100644
index 2c289212..00000000
--- a/extensions/WikiEditor/modules/contentCollector.js
+++ /dev/null
@@ -1,439 +0,0 @@
-// THIS FILE HAS BEEN MODIFIED for use with the mediawiki wikiEditor
-// It no longer requires etherpad.collab.ace.easysync2.Changeset
-// THIS FILE WAS ORIGINALLY AN APPJET MODULE: etherpad.collab.ace.contentcollector
-
-/**
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-var _MAX_LIST_LEVEL = 8;
-
-function sanitizeUnicode(s) {
- return s.replace(/[\uffff\ufffe\ufeff\ufdd0-\ufdef\ud800-\udfff]/g, '?');
-}
-
-function makeContentCollector( browser, domInterface ) {
- browser = browser || {};
-
- var dom = domInterface || {
- isNodeText : function(n) {
- return (n.nodeType == 3);
- },
- nodeTagName : function(n) {
- return n.tagName;
- },
- nodeValue : function(n) {
- try {
- return n.nodeValue;
- } catch ( err ) {
- return '';
- }
- },
- nodeName : function(n) {
- return n.nodeName;
- },
- nodeNumChildren : function(n) {
- return n.childNodes.length;
- },
- nodeChild : function(n, i) {
- return n.childNodes.item(i);
- },
- nodeProp : function(n, p) {
- return n[p];
- },
- nodeAttr : function(n, a) {
- return n.getAttribute(a);
- },
- optNodeInnerHTML : function(n) {
- return n.innerHTML;
- }
- };
-
- var _blockElems = {
- "div" : 1,
- "p" : 1,
- "pre" : 1,
- "li" : 1
- };
- function isBlockElement(n) {
- return !!_blockElems[(dom.nodeTagName(n) || "").toLowerCase()];
- }
- function textify(str) {
- return sanitizeUnicode(str.replace(/[\n\r ]/g, ' ').replace(/\xa0/g,
- ' ').replace(/\t/g, ' '));
- }
- function getAssoc(node, name) {
- return dom.nodeProp(node, "_magicdom_" + name);
- }
-
- var lines = (function() {
- var textArray = [];
- var self = {
- length : function() {
- return textArray.length;
- },
- atColumnZero : function() {
- return textArray[textArray.length - 1] === "";
- },
- startNew : function() {
- textArray.push("");
- self.flush(true);
- },
- textOfLine : function(i) {
- return textArray[i];
- },
- appendText : function(txt, attrString) {
- textArray[textArray.length - 1] += txt;
- // dmesg(txt+" / "+attrString);
- },
- textLines : function() {
- return textArray.slice();
- },
- // call flush only when you're done
- flush : function(withNewline) {
-
- }
- };
- self.startNew();
- return self;
- }());
- var cc = {};
- function _ensureColumnZero(state) {
- if (!lines.atColumnZero()) {
- _startNewLine(state);
- }
- }
- var selection, startPoint, endPoint;
- var selStart = [ -1, -1 ], selEnd = [ -1, -1 ];
- var blockElems = {
- "div" : 1,
- "p" : 1,
- "pre" : 1
- };
- function _isEmpty(node, state) {
- // consider clean blank lines pasted in IE to be empty
- if (dom.nodeNumChildren(node) == 0)
- return true;
- if (dom.nodeNumChildren(node) == 1 && getAssoc(node, "shouldBeEmpty")
- && dom.optNodeInnerHTML(node) == "&nbsp;"
- && !getAssoc(node, "unpasted")) {
- if (state) {
- var child = dom.nodeChild(node, 0);
- _reachPoint(child, 0, state);
- _reachPoint(child, 1, state);
- }
- return true;
- }
- return false;
- }
- function _pointHere(charsAfter, state) {
- var ln = lines.length() - 1;
- var chr = lines.textOfLine(ln).length;
- if (chr == 0 && state.listType && state.listType != 'none') {
- chr += 1; // listMarker
- }
- chr += charsAfter;
- return [ ln, chr ];
- }
- function _reachBlockPoint(nd, idx, state) {
- if (!dom.isNodeText(nd))
- _reachPoint(nd, idx, state);
- }
- function _reachPoint(nd, idx, state) {
- if (startPoint && nd == startPoint.node && startPoint.index == idx) {
- selStart = _pointHere(0, state);
- }
- if (endPoint && nd == endPoint.node && endPoint.index == idx) {
- selEnd = _pointHere(0, state);
- }
- }
- function _incrementFlag(state, flagName) {
- state.flags[flagName] = (state.flags[flagName] || 0) + 1;
- }
- function _decrementFlag(state, flagName) {
- state.flags[flagName]--;
- }
- function _enterList(state, listType) {
- var oldListType = state.listType;
- state.listLevel = (state.listLevel || 0) + 1;
- if (listType != 'none') {
- state.listNesting = (state.listNesting || 0) + 1;
- }
- state.listType = listType;
- return oldListType;
- }
- function _exitList(state, oldListType) {
- state.listLevel--;
- if (state.listType != 'none') {
- state.listNesting--;
- }
- state.listType = oldListType;
- }
- function _produceListMarker(state) {
-
- }
- function _startNewLine(state) {
- if (state) {
- var atBeginningOfLine = lines.textOfLine(lines.length() - 1).length == 0;
- if (atBeginningOfLine && state.listType && state.listType != 'none') {
- _produceListMarker(state);
- }
- }
- lines.startNew();
- }
- cc.notifySelection = function(sel) {
- if (sel) {
- selection = sel;
- startPoint = selection.startPoint;
- endPoint = selection.endPoint;
- }
- };
- cc.collectContent = function(node, state) {
- if (!state) {
- state = {
- flags : {/* name -> nesting counter */}
- };
- }
- var isBlock = isBlockElement(node);
- var isEmpty = _isEmpty(node, state);
- if (isBlock)
- _ensureColumnZero(state);
- var startLine = lines.length() - 1;
- _reachBlockPoint(node, 0, state);
- if (dom.isNodeText(node)) {
- var txt = dom.nodeValue(node);
- var rest = '';
- var x = 0; // offset into original text
- if (txt.length == 0) {
- if (startPoint && node == startPoint.node) {
- selStart = _pointHere(0, state);
- }
- if (endPoint && node == endPoint.node) {
- selEnd = _pointHere(0, state);
- }
- }
- while (txt.length > 0) {
- var consumed = 0;
- if (!browser.firefox || state.flags.preMode) {
- var firstLine = txt.split('\n', 1)[0];
- consumed = firstLine.length + 1;
- rest = txt.substring(consumed);
- txt = firstLine;
- } else { /* will only run this loop body once */
- }
- if (startPoint && node == startPoint.node
- && startPoint.index - x <= txt.length) {
- selStart = _pointHere(startPoint.index - x, state);
- }
- if (endPoint && node == endPoint.node
- && endPoint.index - x <= txt.length) {
- selEnd = _pointHere(endPoint.index - x, state);
- }
- var txt2 = txt;
- if ((!state.flags.preMode) && /^[\r\n]*$/.exec(txt)) {
- // prevents textnodes containing just "\n" from being
- // significant
- // in safari when pasting text, now that we convert them to
- // spaces instead of removing them, because in other cases
- // removing "\n" from pasted HTML will collapse words
- // together.
- txt2 = "";
- }
- var atBeginningOfLine = lines.textOfLine(lines.length() - 1).length == 0;
- if (atBeginningOfLine) {
- // newlines in the source mustn't become spaces at beginning
- // of line box
- txt2 = txt2.replace(/^\n*/, '');
- }
- if (atBeginningOfLine && state.listType
- && state.listType != 'none') {
- _produceListMarker(state);
- }
- lines.appendText(textify(txt2));
-
- x += consumed;
- txt = rest;
- if (txt.length > 0) {
- _startNewLine(state);
- }
- }
-
- } else {
- var cls = dom.nodeProp(node, "className");
- var tname = (dom.nodeTagName(node) || "").toLowerCase();
- if (tname == "br") {
- _startNewLine(state);
- } else if (tname == "script" || tname == "style") {
- // ignore
- } else if (!isEmpty) {
- var styl = dom.nodeAttr(node, "style");
-
- var isPre = (tname == "pre");
- if ((!isPre) && browser.safari) {
- isPre = (styl && /\bwhite-space:\s*pre\b/i.exec(styl));
- }
- if (isPre)
- _incrementFlag(state, 'preMode');
- var oldListTypeOrNull = null;
-
- var nc = dom.nodeNumChildren(node);
- for ( var i = 0; i < nc; i++) {
- var c = dom.nodeChild(node, i);
- //very specific IE case where it inserts <span lang="en"> which we want to ginore.
- //to reproduce copy content from wordpad andpaste into the middle of a line in IE
- if ( browser.msie && cls.indexOf('wikiEditor') >= 0 && dom.nodeName(c) == 'SPAN' && dom.nodeAttr(c, 'lang') == "" ) {
- continue;
- }
- cc.collectContent(c, state);
- }
-
- if (isPre)
- _decrementFlag(state, 'preMode');
-
- if (oldListTypeOrNull) {
- _exitList(state, oldListTypeOrNull);
- }
- }
- }
- if (!browser.msie) {
- _reachBlockPoint(node, 1, state);
- }
- if (isBlock) {
- if (lines.length() - 1 == startLine) {
- _startNewLine(state);
- } else {
- _ensureColumnZero(state);
- }
- }
-
- if (browser.msie) {
- // in IE, a point immediately after a DIV appears on the next line
- //_reachBlockPoint(node, 1, state);
- }
- };
- // can pass a falsy value for end of doc
- cc.notifyNextNode = function(node) {
- // an "empty block" won't end a line; this addresses an issue in IE with
- // typing into a blank line at the end of the document. typed text
- // goes into the body, and the empty line div still looks clean.
- // it is incorporated as dirty by the rule that a dirty region has
- // to end a line.
- if ((!node) || (isBlockElement(node) && !_isEmpty(node))) {
- _ensureColumnZero(null);
- }
- };
- // each returns [line, char] or [-1,-1]
- var getSelectionStart = function() {
- return selStart;
- };
- var getSelectionEnd = function() {
- return selEnd;
- };
-
- // returns array of strings for lines found, last entry will be "" if
- // last line is complete (i.e. if a following span should be on a new line).
- // can be called at any point
- cc.getLines = function() {
- return lines.textLines();
- };
-
- // cc.applyHints = function(hints) {
- // if (hints.pastedLines) {
- //
- // }
- // }
-
- cc.finish = function() {
- lines.flush();
- var lineStrings = cc.getLines();
-
- if ( lineStrings.length > 0 && !lineStrings[lineStrings.length - 1] ) {
- lineStrings.length--;
- }
-
- var ss = getSelectionStart();
- var se = getSelectionEnd();
-
- function fixLongLines() {
- // design mode does not deal with with really long lines!
- var lineLimit = 2000; // chars
- var buffer = 10; // chars allowed over before wrapping
- var linesWrapped = 0;
- var numLinesAfter = 0;
- for ( var i = lineStrings.length - 1; i >= 0; i--) {
- var oldString = lineStrings[i];
- if (oldString.length > lineLimit + buffer) {
- var newStrings = [];
- while (oldString.length > lineLimit) {
- // var semiloc = oldString.lastIndexOf(';',
- // lineLimit-1);
- // var lengthToTake = (semiloc >= 0 ? (semiloc+1) :
- // lineLimit);
- lengthToTake = lineLimit;
- newStrings.push(oldString.substring(0, lengthToTake));
- oldString = oldString.substring(lengthToTake);
-
- }
- if (oldString.length > 0) {
- newStrings.push(oldString);
- }
- function fixLineNumber(lineChar) {
- if (lineChar[0] < 0)
- return;
- var n = lineChar[0];
- var c = lineChar[1];
- if (n > i) {
- n += (newStrings.length - 1);
- } else if (n == i) {
- var a = 0;
- while (c > newStrings[a].length) {
- c -= newStrings[a].length;
- a++;
- }
- n += a;
- }
- lineChar[0] = n;
- lineChar[1] = c;
- }
- fixLineNumber(ss);
- fixLineNumber(se);
- linesWrapped++;
- numLinesAfter += newStrings.length;
-
- newStrings.unshift(i, 1);
- lineStrings.splice.apply(lineStrings, newStrings);
-
- }
- }
- return {
- linesWrapped : linesWrapped,
- numLinesAfter : numLinesAfter
- };
- }
- var wrapData = fixLongLines();
-
- return {
- selStart : ss,
- selEnd : se,
- linesWrapped : wrapData.linesWrapped,
- numLinesAfter : wrapData.numLinesAfter,
- lines : lineStrings
- };
- };
-
- return cc;
-}
-
-
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.css b/extensions/WikiEditor/modules/ext.wikiEditor.css
index 30a27326..6ea7e631 100644
--- a/extensions/WikiEditor/modules/ext.wikiEditor.css
+++ b/extensions/WikiEditor/modules/ext.wikiEditor.css
@@ -2,28 +2,6 @@
* CSS for WikiEditor
*/
-form#editform {
- margin: 0;
- padding: 0;
-}
-
-#wpSummary,
-#wpSummaryLabel {
- margin-bottom: 1em;
-}
-
-.wikiEditor-ui textarea#wpTextbox1 {
- border: none;
- padding: 0;
- margin: -1px;
- line-height: 1.5em;
- resize: vertical;
-}
-
-.wikiEditor-ui .wikiEditor-ui-text > textarea#wpTextbox1 {
- margin: 0;
-}
-
/* Hide vanilla MediaWiki's "Editing help" link, as we provide it in the toolbar */
.editButtons .editHelp,
.editButtons .mw-editButtons-pipe-separator {
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.dialogs.js b/extensions/WikiEditor/modules/ext.wikiEditor.dialogs.js
index 0e0dd090..c6d327f8 100644
--- a/extensions/WikiEditor/modules/ext.wikiEditor.dialogs.js
+++ b/extensions/WikiEditor/modules/ext.wikiEditor.dialogs.js
@@ -1,15 +1,14 @@
/*
* JavaScript for WikiEditor Dialogs
*/
-
-$( document ).ready( function() {
+jQuery( document ).ready( function ( $ ) {
if ( !$.wikiEditor.isSupported( $.wikiEditor.modules.dialogs ) ) {
return;
}
-
+
// Replace icons
$.wikiEditor.modules.dialogs.config.replaceIcons( $( '#wpTextbox1' ) );
-
+
// Add dialogs module
$( '#wpTextbox1' ).wikiEditor( 'addModule', $.wikiEditor.modules.dialogs.config.getDefaultConfig() );
} );
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.highlight.js b/extensions/WikiEditor/modules/ext.wikiEditor.highlight.js
deleted file mode 100644
index a6b43851..00000000
--- a/extensions/WikiEditor/modules/ext.wikiEditor.highlight.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- * JavaScript for WikiEditor Highlighting
- */
-
-$( document ).ready( function() {
- // Add highlight module
- $( '#wpTextbox1' ).wikiEditor( 'addModule', 'highlight' );
-} );
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.js b/extensions/WikiEditor/modules/ext.wikiEditor.js
index 6056e63b..46087989 100644
--- a/extensions/WikiEditor/modules/ext.wikiEditor.js
+++ b/extensions/WikiEditor/modules/ext.wikiEditor.js
@@ -1,8 +1,7 @@
/*
* JavaScript for WikiEditor
*/
-
-$( document ).ready( function() {
+jQuery( document ).ready( function ( $ ) {
// Initialize wikiEditor
$( '#wpTextbox1' ).wikiEditor();
} );
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.preview.js b/extensions/WikiEditor/modules/ext.wikiEditor.preview.js
index 3fbca82d..cdc00f7b 100644
--- a/extensions/WikiEditor/modules/ext.wikiEditor.preview.js
+++ b/extensions/WikiEditor/modules/ext.wikiEditor.preview.js
@@ -1,8 +1,7 @@
/*
* JavaScript for WikiEditor Preview module
*/
-
-$( document ).ready( function() {
+jQuery( document ).ready( function ( $ ) {
// Add preview module
$( 'textarea#wpTextbox1' ).wikiEditor( 'addModule', 'preview' );
} );
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.previewDialog.js b/extensions/WikiEditor/modules/ext.wikiEditor.previewDialog.js
index 67f97e00..3b1acd7c 100644
--- a/extensions/WikiEditor/modules/ext.wikiEditor.previewDialog.js
+++ b/extensions/WikiEditor/modules/ext.wikiEditor.previewDialog.js
@@ -1,8 +1,7 @@
/*
* JavaScript for WikiEditor Preview Dialog
*/
-
-$( document ).ready( function() {
+jQuery( document ).ready( function ( $ ) {
// Add preview module
$( 'textarea#wpTextbox1' ).wikiEditor( 'addModule', 'previewDialog' );
} );
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.publish.js b/extensions/WikiEditor/modules/ext.wikiEditor.publish.js
index d874478c..423766d2 100644
--- a/extensions/WikiEditor/modules/ext.wikiEditor.publish.js
+++ b/extensions/WikiEditor/modules/ext.wikiEditor.publish.js
@@ -1,8 +1,7 @@
/*
* JavaScript for WikiEditor Publish module
*/
-
-$( document ).ready( function() {
+jQuery( document ).ready( function ( $ ) {
// Add publish module
$( '#wpTextbox1' ).wikiEditor( 'addModule', 'publish' );
} );
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.templateEditor.js b/extensions/WikiEditor/modules/ext.wikiEditor.templateEditor.js
deleted file mode 100644
index 8879d10d..00000000
--- a/extensions/WikiEditor/modules/ext.wikiEditor.templateEditor.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * JavaScript for WikiEditor Template Editor
- */
-
-$( document ).ready( function () {
- // Disable in template namespace
- if ( mw.config.get( 'wgNamespaceNumber' ) === 10 ) {
- return true;
- }
- // Add template editor module
- $( 'textarea#wpTextbox1' ).wikiEditor( 'addModule', 'templateEditor' );
-});
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.templates.js b/extensions/WikiEditor/modules/ext.wikiEditor.templates.js
deleted file mode 100644
index 6eae6de5..00000000
--- a/extensions/WikiEditor/modules/ext.wikiEditor.templates.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * JavaScript for WikiEditor Templates
- */
-
-$( document ).ready( function () {
- // Disable for template namespace
- if ( mw.config.get( 'wgNamespaceNumber' ) === 10 ) {
- return true;
- }
- // Add templates module
- $( '#wpTextbox1' ).wikiEditor( 'addModule', 'templates' );
-} );
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.tests.toolbar.js b/extensions/WikiEditor/modules/ext.wikiEditor.tests.toolbar.js
index d4ffe5ae..3475284b 100644
--- a/extensions/WikiEditor/modules/ext.wikiEditor.tests.toolbar.js
+++ b/extensions/WikiEditor/modules/ext.wikiEditor.tests.toolbar.js
@@ -4,7 +4,7 @@
var textareaId = '#wpTextbox1';
var wikiEditorTests = {
// Add emoticons section
- add_sections_toolbar: {
+ 'add_sections_toolbar': {
call: 'addToToolbar',
data: {
'sections': {
@@ -159,8 +159,8 @@ var wikiEditorTests = {
data: {
section: 'info',
page: 'removeme'
- },
- test: '*[rel=info].section *[rel=removeme].page',
+ },
+ test: '*[rel=info].section *[rel=removeme].page',
pre: 1,
post: 0
},
@@ -171,8 +171,8 @@ var wikiEditorTests = {
section: 'info',
page: 'emoticons',
'character': ':))'
- },
- test: '*[rel=info].section *[rel=emoticons].page *[rel=":))"]',
+ },
+ test: '*[rel=info].section *[rel=emoticons].page *[rel=":))"]',
pre: 1,
post: 0
},
@@ -190,7 +190,7 @@ var wikiEditorTests = {
}
};
-jQuery(document).ready( function ( $ ) {
+jQuery( document ).ready( function ( $ ) {
var $button = $( '<button>Run wikiEditor Tests!</button>' )
.css( {
position: 'fixed',
@@ -206,12 +206,12 @@ jQuery(document).ready( function ( $ ) {
cursor: 'pointer'
} )
.click( function () {
- if ( $(this).data( 'testDone' ) ) {
- $(this).slideUp( 'fast' );
+ if ( $( this ).data( 'testDone' ) ) {
+ $( this ).slideUp( 'fast' );
return false;
}
- var test, pre, post,
+ var test, pre, post, i,
messages = [ 'Running tests for wikiEditor API' ],
$target = $( textareaId ),
$ui = $target.data( 'wikiEditor-context' ).$ui,
@@ -234,13 +234,13 @@ jQuery(document).ready( function ( $ ) {
}
if ( window.console ) {
- for ( var i = 0; i < messages.length; i++ ) {
+ for ( i = 0; i < messages.length; i++ ) {
window.console.log( messages[i] );
}
}
- $(this)
- .attr( 'title', messages.join( " | " ) )
+ $( this )
+ .attr( 'title', messages.join( ' | ' ) )
.text( passes + ' / ' + tests + ' were successful' )
.css( 'backgroundColor', passes < tests ? 'red' : 'green' )
.data( 'testDone', 'true' )
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.toc.js b/extensions/WikiEditor/modules/ext.wikiEditor.toc.js
deleted file mode 100644
index 264e9f86..00000000
--- a/extensions/WikiEditor/modules/ext.wikiEditor.toc.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- * JavaScript for WikiEditor Table of Contents
- */
-
-$( document ).ready( function() {
- // Add table of contents module
- $( '#wpTextbox1' ).wikiEditor( 'addModule', 'toc' );
-} );
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.hideSig.js b/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.hideSig.js
index 3bc0f0b4..48d30274 100644
--- a/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.hideSig.js
+++ b/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.hideSig.js
@@ -1,7 +1,7 @@
/*
* Remove the signature button if the main namespace is edited.
*/
-$( document ).ready( function() {
+jQuery( document ).ready( function ( $ ) {
// This module is designed not to depend on ext.wikiEditor or jquery.wikiEditor.
// Removing this dependency fixed various bugs, but it does mean that we have to
// account for the situation where $.wikiEditor is not present
@@ -11,4 +11,4 @@ $( document ).ready( function() {
if ( $( 'body' ).hasClass( 'ns-0' ) ) {
$( '#wpTextbox1' ).wikiEditor( 'removeFromToolbar', { 'section': 'main', 'group': 'insert', 'tool': 'signature' } );
}
-});
+} );
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.js b/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.js
index 5cdeae57..3f30c0c4 100644
--- a/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.js
+++ b/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.js
@@ -1,8 +1,7 @@
/*
* JavaScript for WikiEditor Toolbar
*/
-
-$( document ).ready( function() {
+jQuery( document ).ready( function ( $ ) {
if ( !$.wikiEditor.isSupported( $.wikiEditor.modules.toolbar ) ) {
$( '.wikiEditor-oldToolbar' ).show();
return;
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.styles.css b/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.styles.css
new file mode 100644
index 00000000..cc80c169
--- /dev/null
+++ b/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.styles.css
@@ -0,0 +1,25 @@
+/**
+ * CSS for WikiEditor
+ */
+
+form#editform {
+ margin: 0;
+ padding: 0;
+}
+
+#wpSummary,
+#wpSummaryLabel {
+ margin-bottom: 1em;
+}
+
+#wpTextbox1 {
+ line-height: 1.5em;
+ resize: vertical;
+}
+
+/* Hide the old toolbar until the wikiEditor toolbar is deemed not supported,
+ * hide the WikiEditor toolbar until it's css has loaded */
+.wikiEditor-oldToolbar,
+.wikiEditor-ui-toolbar {
+ display: none;
+}
diff --git a/extensions/WikiEditor/modules/images/templateEditor/collapse.png b/extensions/WikiEditor/modules/images/templateEditor/collapse.png
deleted file mode 100644
index b155a180..00000000
--- a/extensions/WikiEditor/modules/images/templateEditor/collapse.png
+++ /dev/null
Binary files differ
diff --git a/extensions/WikiEditor/modules/images/templateEditor/dialog-collapsed.png b/extensions/WikiEditor/modules/images/templateEditor/dialog-collapsed.png
deleted file mode 100644
index 0cb83821..00000000
--- a/extensions/WikiEditor/modules/images/templateEditor/dialog-collapsed.png
+++ /dev/null
Binary files differ
diff --git a/extensions/WikiEditor/modules/images/templateEditor/dialog-expanded.png b/extensions/WikiEditor/modules/images/templateEditor/dialog-expanded.png
deleted file mode 100644
index 8cd3a8b3..00000000
--- a/extensions/WikiEditor/modules/images/templateEditor/dialog-expanded.png
+++ /dev/null
Binary files differ
diff --git a/extensions/WikiEditor/modules/images/templateEditor/expand.png b/extensions/WikiEditor/modules/images/templateEditor/expand.png
deleted file mode 100644
index 1db80410..00000000
--- a/extensions/WikiEditor/modules/images/templateEditor/expand.png
+++ /dev/null
Binary files differ
diff --git a/extensions/WikiEditor/modules/images/templateEditor/name-base.png b/extensions/WikiEditor/modules/images/templateEditor/name-base.png
deleted file mode 100644
index 0d1cce71..00000000
--- a/extensions/WikiEditor/modules/images/templateEditor/name-base.png
+++ /dev/null
Binary files differ
diff --git a/extensions/WikiEditor/modules/images/templateEditor/text-base.png b/extensions/WikiEditor/modules/images/templateEditor/text-base.png
deleted file mode 100644
index 8fda004a..00000000
--- a/extensions/WikiEditor/modules/images/templateEditor/text-base.png
+++ /dev/null
Binary files differ
diff --git a/extensions/WikiEditor/modules/images/templateEditor/wiki-text.png b/extensions/WikiEditor/modules/images/templateEditor/wiki-text.png
deleted file mode 100644
index 44afb4df..00000000
--- a/extensions/WikiEditor/modules/images/templateEditor/wiki-text.png
+++ /dev/null
Binary files differ
diff --git a/extensions/WikiEditor/modules/images/toc/close.png b/extensions/WikiEditor/modules/images/toc/close.png
deleted file mode 100644
index a540856f..00000000
--- a/extensions/WikiEditor/modules/images/toc/close.png
+++ /dev/null
Binary files differ
diff --git a/extensions/WikiEditor/modules/images/toc/grab.png b/extensions/WikiEditor/modules/images/toc/grab.png
deleted file mode 100644
index 6291ec86..00000000
--- a/extensions/WikiEditor/modules/images/toc/grab.png
+++ /dev/null
Binary files differ
diff --git a/extensions/WikiEditor/modules/images/toc/grip.png b/extensions/WikiEditor/modules/images/toc/grip.png
deleted file mode 100644
index 07898519..00000000
--- a/extensions/WikiEditor/modules/images/toc/grip.png
+++ /dev/null
Binary files differ
diff --git a/extensions/WikiEditor/modules/images/toc/open.png b/extensions/WikiEditor/modules/images/toc/open.png
deleted file mode 100644
index c782beb7..00000000
--- a/extensions/WikiEditor/modules/images/toc/open.png
+++ /dev/null
Binary files differ
diff --git a/extensions/WikiEditor/modules/images/toolbar/button-sprite.svg b/extensions/WikiEditor/modules/images/toolbar/button-sprite.svg
new file mode 100644
index 00000000..061ffa38
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/button-sprite.svg
@@ -0,0 +1,3038 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ version="1.1"
+ width="94"
+ height="2038"
+ id="svg3752">
+ <defs
+ id="defs3754">
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter11735">
+ <feGaussianBlur
+ stdDeviation="0.22248641"
+ id="feGaussianBlur11737" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter11711">
+ <feGaussianBlur
+ stdDeviation="0.40047554"
+ id="feGaussianBlur11713" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter3837">
+ <feGaussianBlur
+ stdDeviation="0.4021875"
+ id="feGaussianBlur3839" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter3809">
+ <feGaussianBlur
+ stdDeviation="0.30164062"
+ id="feGaussianBlur3811" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter5056">
+ <feGaussianBlur
+ id="feGaussianBlur5058"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ k2="0"
+ k3="0.6"
+ k4="0"
+ in="result5"
+ result="result4"
+ id="feComposite5064" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter3776">
+ <feGaussianBlur
+ stdDeviation="0.28441406"
+ id="feGaussianBlur3778" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter3772">
+ <feGaussianBlur
+ stdDeviation="0.380625"
+ id="feGaussianBlur3774" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter5056-3">
+ <feGaussianBlur
+ id="feGaussianBlur5058-1"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060-5"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062-0"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ k2="0"
+ k3="0.6"
+ k4="0"
+ in="result5"
+ result="result4"
+ id="feComposite5064-6" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter3886">
+ <feGaussianBlur
+ stdDeviation="0.3665625"
+ id="feGaussianBlur3888" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter3882">
+ <feGaussianBlur
+ stdDeviation="0.27492187"
+ id="feGaussianBlur3884" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter5056-4">
+ <feGaussianBlur
+ id="feGaussianBlur5058-8"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060-7"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062-5"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ k2="0"
+ k3="0.6"
+ k4="0"
+ in="result5"
+ result="result4"
+ id="feComposite5064-4" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter3912">
+ <feGaussianBlur
+ stdDeviation="0.28933594"
+ id="feGaussianBlur3914" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter3908">
+ <feGaussianBlur
+ stdDeviation="0.35953125"
+ id="feGaussianBlur3910" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter5056-6">
+ <feGaussianBlur
+ id="feGaussianBlur5058-6"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060-6"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062-3"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ k2="0"
+ k3="0.6"
+ k4="0"
+ in="result5"
+ result="result4"
+ id="feComposite5064-40" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter3973">
+ <feGaussianBlur
+ stdDeviation="0.41109375"
+ id="feGaussianBlur3975" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter3953">
+ <feGaussianBlur
+ stdDeviation="0.30832031"
+ id="feGaussianBlur3955" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter5056-0">
+ <feGaussianBlur
+ id="feGaussianBlur5058-4"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060-67"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062-1"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ k2="0"
+ k3="0.6"
+ k4="0"
+ in="result5"
+ result="result4"
+ id="feComposite5064-1" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter4022">
+ <feGaussianBlur
+ stdDeviation="0.36515625"
+ id="feGaussianBlur4024" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter4018">
+ <feGaussianBlur
+ stdDeviation="0.27"
+ id="feGaussianBlur4020" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter5056-7">
+ <feGaussianBlur
+ id="feGaussianBlur5058-7"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060-9"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062-02"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ k2="0"
+ k3="0.6"
+ k4="0"
+ in="result5"
+ result="result4"
+ id="feComposite5064-2" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter4067">
+ <feGaussianBlur
+ stdDeviation="0.40265625"
+ id="feGaussianBlur4069" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter4063">
+ <feGaussianBlur
+ stdDeviation="0.30199219"
+ id="feGaussianBlur4065" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter5056-30">
+ <feGaussianBlur
+ id="feGaussianBlur5058-85"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060-64"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062-58"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ k2="0"
+ k3="0.6"
+ k4="0"
+ in="result5"
+ result="result4"
+ id="feComposite5064-7" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter3837-2">
+ <feGaussianBlur
+ stdDeviation="0.4021875"
+ id="feGaussianBlur3839-1" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter3809-1">
+ <feGaussianBlur
+ stdDeviation="0.30164062"
+ id="feGaussianBlur3811-8" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter5056-62">
+ <feGaussianBlur
+ id="feGaussianBlur5058-9"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060-8"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062-54"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ k2="0"
+ k3="0.6"
+ k4="0"
+ in="result5"
+ result="result4"
+ id="feComposite5064-42" />
+ </filter>
+ <linearGradient
+ x1="1.1049798"
+ y1="13.152683"
+ x2="6.6379666"
+ y2="10.024924"
+ id="linearGradient3986"
+ xlink:href="#linearGradient3980"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient3195"
+ xlink:href="#linearGradient9497"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.74596729,0,0,0.94314201,-405.98488,-465.30597)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient3192"
+ xlink:href="#linearGradient9497-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.3202618,0,0,0.84666939,-733.334,-423.58754)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient3189"
+ xlink:href="#linearGradient9497-6"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.3098397,0,0,0.848111,-727.30273,-410.25386)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9520-2"
+ xlink:href="#linearGradient9497-6"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)" />
+ <linearGradient
+ id="linearGradient9497-6">
+ <stop
+ id="stop9499-0"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-1"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-3"
+ xlink:href="#linearGradient9497-6"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9520"
+ xlink:href="#linearGradient9497-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)" />
+ <linearGradient
+ id="linearGradient9497-1">
+ <stop
+ id="stop9499-6"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-7"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-1"
+ xlink:href="#linearGradient9497-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503"
+ xlink:href="#linearGradient9497"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ id="linearGradient9497">
+ <stop
+ id="stop9499"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3980">
+ <stop
+ id="stop3982"
+ style="stop-color:#fcc273;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3984"
+ style="stop-color:#fc916b;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter4112">
+ <feGaussianBlur
+ stdDeviation="0.3909375"
+ id="feGaussianBlur4114" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter4108">
+ <feGaussianBlur
+ stdDeviation="0.29320256"
+ id="feGaussianBlur4110" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter5056-68">
+ <feGaussianBlur
+ id="feGaussianBlur5058-67"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060-1"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062-6"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ k2="0"
+ k3="0.6"
+ k4="0"
+ in="result5"
+ result="result4"
+ id="feComposite5064-24" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter4184">
+ <feGaussianBlur
+ stdDeviation="0.35995908"
+ id="feGaussianBlur4186" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter4180">
+ <feGaussianBlur
+ stdDeviation="0.28407221"
+ id="feGaussianBlur4182" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter5056-1">
+ <feGaussianBlur
+ id="feGaussianBlur5058-64"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060-0"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062-8"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ k2="0"
+ k3="0.6"
+ k4="0"
+ in="result5"
+ result="result4"
+ id="feComposite5064-74" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter5879">
+ <feGaussianBlur
+ stdDeviation="0.30769604"
+ id="feGaussianBlur5881" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter5867">
+ <feGaussianBlur
+ stdDeviation="0.23529697"
+ id="feGaussianBlur5869" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter4229">
+ <feGaussianBlur
+ stdDeviation="0.4059375"
+ id="feGaussianBlur4231" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter4225">
+ <feGaussianBlur
+ stdDeviation="0.30445256"
+ id="feGaussianBlur4227" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter5056-44">
+ <feGaussianBlur
+ id="feGaussianBlur5058-76"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060-85"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062-52"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ k2="0"
+ k3="0.6"
+ k4="0"
+ in="result5"
+ result="result4"
+ id="feComposite5064-22" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter4112-0">
+ <feGaussianBlur
+ stdDeviation="0.3909375"
+ id="feGaussianBlur4114-3" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter4108-5">
+ <feGaussianBlur
+ stdDeviation="0.29320256"
+ id="feGaussianBlur4110-7" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter5056-38">
+ <feGaussianBlur
+ id="feGaussianBlur5058-47"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060-4"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062-7"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ in2="SourceGraphic"
+ operator="arithmetic"
+ k1="1"
+ k2="0"
+ k3="0.6"
+ k4="0"
+ in="result5"
+ result="result4"
+ id="feComposite5064-420" />
+ </filter>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9520-2-9"
+ xlink:href="#linearGradient9497-6-5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)" />
+ <linearGradient
+ id="linearGradient9497-6-5">
+ <stop
+ id="stop9499-0-5"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-1-1"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-3-6"
+ xlink:href="#linearGradient9497-6-5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9520-6"
+ xlink:href="#linearGradient9497-1-0"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)" />
+ <linearGradient
+ id="linearGradient9497-1-0">
+ <stop
+ id="stop9499-6-9"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-7-9"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-1-8"
+ xlink:href="#linearGradient9497-1-0"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-34"
+ xlink:href="#linearGradient9497-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ id="linearGradient9497-9">
+ <stop
+ id="stop9499-3"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-8"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter11735-4">
+ <feGaussianBlur
+ stdDeviation="0.22248641"
+ id="feGaussianBlur11737-9" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter11711-5">
+ <feGaussianBlur
+ stdDeviation="0.40047554"
+ id="feGaussianBlur11713-9" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter11735-7">
+ <feGaussianBlur
+ stdDeviation="0.22248641"
+ id="feGaussianBlur11737-4" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter11711-8">
+ <feGaussianBlur
+ stdDeviation="0.40047554"
+ id="feGaussianBlur11713-1" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter11735-9">
+ <feGaussianBlur
+ stdDeviation="0.22248641"
+ id="feGaussianBlur11737-48" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter11711-3">
+ <feGaussianBlur
+ stdDeviation="0.40047554"
+ id="feGaussianBlur11713-7" />
+ </filter>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient3195-7"
+ xlink:href="#linearGradient9497-18"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.13325,-446.76257)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient3192-9"
+ xlink:href="#linearGradient9497-1-4"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.13136,-453.81692)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient3189-5"
+ xlink:href="#linearGradient9497-6-2"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.04207,-439.75442)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9520-2-6"
+ xlink:href="#linearGradient9497-6-2"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)" />
+ <linearGradient
+ id="linearGradient9497-6-2">
+ <stop
+ id="stop9499-0-0"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-1-0"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-3-2"
+ xlink:href="#linearGradient9497-6-2"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9520-8"
+ xlink:href="#linearGradient9497-1-4"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)" />
+ <linearGradient
+ id="linearGradient9497-1-4">
+ <stop
+ id="stop9499-6-5"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-7-95"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-1-5"
+ xlink:href="#linearGradient9497-1-4"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-8"
+ xlink:href="#linearGradient9497-18"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ id="linearGradient9497-18">
+ <stop
+ id="stop9499-1"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-5"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="805.19128"
+ y1="693.05548"
+ x2="805.19128"
+ y2="702.22186"
+ id="linearGradient9194"
+ xlink:href="#linearGradient9090"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-22.749292,0.238835)" />
+ <radialGradient
+ cx="30.513159"
+ cy="16.796043"
+ r="3.140625"
+ fx="30.513159"
+ fy="16.796043"
+ id="radialGradient9190"
+ xlink:href="#linearGradient9124"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5528787,-1.1867658e-7,7.6106348e-8,0.99584878,732.27147,685.88005)" />
+ <radialGradient
+ cx="31.993927"
+ cy="9.0202503"
+ r="6.8660588"
+ fx="31.993927"
+ fy="9.0202503"
+ id="radialGradient9185"
+ xlink:href="#linearGradient9100"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5459471,-0.89508966,0.42455384,0.72967733,727.79019,718.64005)" />
+ <radialGradient
+ cx="31.993927"
+ cy="9.0202503"
+ r="6.8660588"
+ fx="31.993927"
+ fy="9.0202503"
+ id="radialGradient9163"
+ xlink:href="#linearGradient9100"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5459471,-0.89508966,0.42455384,0.72967733,750.53948,718.40122)" />
+ <radialGradient
+ cx="30.513159"
+ cy="16.796043"
+ r="3.140625"
+ fx="30.513159"
+ fy="16.796043"
+ id="radialGradient9161"
+ xlink:href="#linearGradient9124"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5528787,-1.1867658e-7,7.6106348e-8,0.99584878,755.02076,685.64122)" />
+ <linearGradient
+ x1="805.19128"
+ y1="693.05548"
+ x2="805.19128"
+ y2="702.22186"
+ id="linearGradient9159"
+ xlink:href="#linearGradient9090"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient9090">
+ <stop
+ id="stop9092"
+ style="stop-color:#766649;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9094"
+ style="stop-color:#e6a540;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9100">
+ <stop
+ id="stop9102"
+ style="stop-color:#f4f5f4;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9104"
+ style="stop-color:#f4f5f4;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9124">
+ <stop
+ id="stop9126"
+ style="stop-color:#ffedbc;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9128"
+ style="stop-color:#f7eca1;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter9873">
+ <feGaussianBlur
+ stdDeviation="0.12340545"
+ id="feGaussianBlur9875" />
+ </filter>
+ <linearGradient
+ x1="7.7878532"
+ y1="12.734541"
+ x2="17.905109"
+ y2="8.1800375"
+ id="linearGradient9784"
+ xlink:href="#linearGradient9778"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1631645,0,0,1.3512007,858.27422,629.02856)" />
+ <radialGradient
+ cx="8.1702919"
+ cy="6.458025"
+ r="5.4584503"
+ fx="8.1702919"
+ fy="6.458025"
+ id="radialGradient9772"
+ xlink:href="#linearGradient9760"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0337084,0.97885003,-0.83095482,-1.1642322,881.6209,640.19021)" />
+ <linearGradient
+ id="linearGradient9760">
+ <stop
+ id="stop9762"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9764"
+ style="stop-color:#ffffff;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9778">
+ <stop
+ id="stop9780"
+ style="stop-color:#f0a829;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9782"
+ style="stop-color:#f0ad3e;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <mask
+ id="mask3773">
+ <rect
+ width="13.657221"
+ height="13.439366"
+ x="847.49951"
+ y="705.51801"
+ id="rect3775"
+ style="fill:url(#linearGradient3777);fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ </mask>
+ <linearGradient
+ x1="843.28571"
+ y1="721.07123"
+ x2="865.29926"
+ y2="721.07123"
+ id="linearGradient3777"
+ xlink:href="#linearGradient3759"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.62040131,0,0,3.4971952,324.32395,-1809.4892)"
+ spreadMethod="pad" />
+ <linearGradient
+ x1="843.28571"
+ y1="721.07123"
+ x2="865.29926"
+ y2="721.07123"
+ id="linearGradient3765"
+ xlink:href="#linearGradient3759"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,5.6369887,0,-3352.5089)"
+ spreadMethod="pad" />
+ <linearGradient
+ id="linearGradient8229">
+ <stop
+ id="stop8231"
+ style="stop-color:#ececec;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop8233"
+ style="stop-color:#9da09f;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3759">
+ <stop
+ id="stop3761"
+ style="stop-color:#000000;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3767"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0.25" />
+ <stop
+ id="stop3769"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0.75" />
+ <stop
+ id="stop3763"
+ style="stop-color:#000000;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8229-5">
+ <stop
+ id="stop8231-2"
+ style="stop-color:#ececec;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop8233-6"
+ style="stop-color:#9da09f;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <filter
+ x="-0.13307104"
+ y="-0.085893638"
+ width="1.2661421"
+ height="1.1717873"
+ color-interpolation-filters="sRGB"
+ id="filter10491">
+ <feGaussianBlur
+ stdDeviation="0.58045312"
+ id="feGaussianBlur10493" />
+ </filter>
+ <filter
+ x="-0.083735459"
+ y="-0.13860559"
+ width="1.1674709"
+ height="1.2772112"
+ color-interpolation-filters="sRGB"
+ id="filter10487">
+ <feGaussianBlur
+ stdDeviation="0.58113281"
+ id="feGaussianBlur10489" />
+ </filter>
+ <radialGradient
+ cx="921.40735"
+ cy="698.09576"
+ r="3.38059"
+ fx="921.40735"
+ fy="698.09576"
+ id="radialGradient3875"
+ xlink:href="#linearGradient3844"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.32194816,0.22927541,-0.63390316,0.81005546,1060.6407,-75.559535)" />
+ <linearGradient
+ x1="910.96173"
+ y1="694.78741"
+ x2="921.80005"
+ y2="696.93402"
+ id="linearGradient3873"
+ xlink:href="#linearGradient8680"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-26.508294,6.8837482)" />
+ <radialGradient
+ cx="921.40735"
+ cy="698.09576"
+ r="3.38059"
+ fx="921.40735"
+ fy="698.09576"
+ id="radialGradient3865"
+ xlink:href="#linearGradient3844"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.32194816,0.22927541,-0.63390316,0.81005546,1060.6407,-75.559535)" />
+ <radialGradient
+ cx="921.40735"
+ cy="698.09576"
+ r="3.38059"
+ fx="921.40735"
+ fy="698.09576"
+ id="radialGradient3861"
+ xlink:href="#linearGradient3844"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.37329045,0.12989255,-0.3815617,0.95521397,839.37118,-91.004306)" />
+ <linearGradient
+ x1="910.96173"
+ y1="694.78741"
+ x2="921.80005"
+ y2="696.93402"
+ id="linearGradient3859"
+ xlink:href="#linearGradient8680"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-26.508294,6.8837482)" />
+ <radialGradient
+ cx="921.40735"
+ cy="698.09576"
+ r="3.38059"
+ fx="921.40735"
+ fy="698.09576"
+ id="radialGradient3850"
+ xlink:href="#linearGradient3844"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.37329045,0.12989255,-0.3815617,0.95521397,839.37118,-91.004306)" />
+ <mask
+ id="mask3836">
+ <rect
+ width="21.294643"
+ height="21.741072"
+ x="874.80103"
+ y="689.3111"
+ id="rect3838"
+ style="fill:url(#linearGradient3840);fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ </mask>
+ <linearGradient
+ x1="914.08923"
+ y1="691.73273"
+ x2="914.625"
+ y2="689.00946"
+ id="linearGradient3840"
+ xlink:href="#linearGradient3780"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-19.422226,4.7882523)" />
+ <linearGradient
+ x1="910.96173"
+ y1="694.78741"
+ x2="921.80005"
+ y2="696.93402"
+ id="linearGradient8809"
+ xlink:href="#linearGradient8680"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-26.508294,6.8837482)" />
+ <linearGradient
+ x1="12.19534"
+ y1="11.109293"
+ x2="20.350513"
+ y2="12.52982"
+ id="linearGradient8686"
+ xlink:href="#linearGradient8680"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="16.330652"
+ y1="8.7101812"
+ x2="17.635729"
+ y2="1.9547856"
+ id="linearGradient8670"
+ xlink:href="#linearGradient8662"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient7212">
+ <stop
+ id="stop7214"
+ style="stop-color:#000000;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop7216"
+ style="stop-color:#000000;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8656">
+ <stop
+ id="stop8658"
+ style="stop-color:#000000;stop-opacity:1"
+ offset="0" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8662">
+ <stop
+ id="stop8664"
+ style="stop-color:#000000;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop8666"
+ style="stop-color:#000000;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8680">
+ <stop
+ id="stop8682"
+ style="stop-color:#2e366a;stop-opacity:0.99215686"
+ offset="0" />
+ <stop
+ id="stop8688"
+ style="stop-color:#3c91de;stop-opacity:1"
+ offset="0.4154374" />
+ <stop
+ id="stop8684"
+ style="stop-color:#2e366a;stop-opacity:0.99358976"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3780">
+ <stop
+ id="stop3782"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3784"
+ style="stop-color:#000000;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3844">
+ <stop
+ id="stop3846"
+ style="stop-color:#ececec;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3848"
+ style="stop-color:#cecece;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="1.9835248"
+ y1="1.7316169"
+ x2="-3.7763"
+ y2="15.516348"
+ id="linearGradient7130"
+ xlink:href="#linearGradient7004"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="1.9835248"
+ y1="1.7316169"
+ x2="-3.7763"
+ y2="15.516348"
+ id="linearGradient7010"
+ xlink:href="#linearGradient7004"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient7004">
+ <stop
+ id="stop7006"
+ style="stop-color:#8ea8c5;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop7008"
+ style="stop-color:#365f96;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="896.22729"
+ y1="642.37769"
+ x2="884.73309"
+ y2="650.4939"
+ id="linearGradient4379"
+ xlink:href="#linearGradient4373"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.97557742,0,0,0.97557742,-0.43357327,15.714485)" />
+ <linearGradient
+ id="linearGradient4373">
+ <stop
+ id="stop4375"
+ style="stop-color:#a1a0a0;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop4377"
+ style="stop-color:#616363;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="880.47321"
+ y1="718.15826"
+ x2="880.47321"
+ y2="738.3028"
+ id="linearGradient6454"
+ xlink:href="#linearGradient6439"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-46,0)" />
+ <linearGradient
+ x1="880.47321"
+ y1="718.15826"
+ x2="880.47321"
+ y2="738.3028"
+ id="linearGradient6445"
+ xlink:href="#linearGradient6439"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-46,0)" />
+ <linearGradient
+ id="linearGradient6439">
+ <stop
+ id="stop6441"
+ style="stop-color:#e5e7e2;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop6443"
+ style="stop-color:#e5e7e2;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ <radialGradient
+ cx="6.7155318"
+ cy="4.395853"
+ r="5.4276505"
+ fx="6.7155318"
+ fy="4.395853"
+ id="radialGradient11146"
+ xlink:href="#linearGradient11111"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="814.55927"
+ y1="726.61975"
+ x2="813.53076"
+ y2="725.49475"
+ id="linearGradient11144"
+ xlink:href="#linearGradient11103"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(55.60781,8.9693543)" />
+ <linearGradient
+ x1="819.42767"
+ y1="729.21069"
+ x2="818.52716"
+ y2="728.31018"
+ id="linearGradient11142"
+ xlink:href="#linearGradient11077"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(66.373514,4.6113592)" />
+ <radialGradient
+ cx="6.7155318"
+ cy="4.395853"
+ r="5.4276505"
+ fx="6.7155318"
+ fy="4.395853"
+ id="radialGradient11119"
+ xlink:href="#linearGradient11111"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="814.55927"
+ y1="726.61975"
+ x2="813.53076"
+ y2="725.49475"
+ id="linearGradient11109"
+ xlink:href="#linearGradient11103"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(55.60781,8.9693543)" />
+ <linearGradient
+ x1="819.42767"
+ y1="729.21069"
+ x2="818.52716"
+ y2="728.31018"
+ id="linearGradient11095"
+ xlink:href="#linearGradient11077"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(66.373514,4.6113592)" />
+ <linearGradient
+ id="linearGradient11077">
+ <stop
+ id="stop11079"
+ style="stop-color:#a48757;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop11081"
+ style="stop-color:#eeeac6;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11103">
+ <stop
+ id="stop11105"
+ style="stop-color:#b8b8b7;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop11107"
+ style="stop-color:#a3a4a3;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11111">
+ <stop
+ id="stop11113"
+ style="stop-color:#e6edf5;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop11115"
+ style="stop-color:#7da2cc;stop-opacity:0.58333331"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient3195-9"
+ xlink:href="#linearGradient9497-2"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.13325,-446.76257)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient3192-4"
+ xlink:href="#linearGradient9497-1-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.13136,-453.81692)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient3189-4"
+ xlink:href="#linearGradient9497-6-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.04207,-439.75442)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9520-2-2"
+ xlink:href="#linearGradient9497-6-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)" />
+ <linearGradient
+ id="linearGradient9497-6-9">
+ <stop
+ id="stop9499-0-7"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-1-4"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-3-0"
+ xlink:href="#linearGradient9497-6-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9520-5"
+ xlink:href="#linearGradient9497-1-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)" />
+ <linearGradient
+ id="linearGradient9497-1-9">
+ <stop
+ id="stop9499-6-1"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-7-7"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-1-53"
+ xlink:href="#linearGradient9497-1-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-0"
+ xlink:href="#linearGradient9497-2"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ id="linearGradient9497-2">
+ <stop
+ id="stop9499-9"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-6"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9520-2-7"
+ xlink:href="#linearGradient9497-6-0"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)" />
+ <linearGradient
+ id="linearGradient9497-6-0">
+ <stop
+ id="stop9499-0-9"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-1-9"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-3-8"
+ xlink:href="#linearGradient9497-6-0"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9520-29"
+ xlink:href="#linearGradient9497-1-95"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)" />
+ <linearGradient
+ id="linearGradient9497-1-95">
+ <stop
+ id="stop9499-6-16"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-7-0"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-1-1"
+ xlink:href="#linearGradient9497-1-95"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-07"
+ xlink:href="#linearGradient9497-5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ id="linearGradient9497-5">
+ <stop
+ id="stop9499-2"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-67"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient4291"
+ xlink:href="#linearGradient9497-6-0"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,-646.08618,-82.674677)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient4294"
+ xlink:href="#linearGradient9497-1-95"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,-646.17547,-96.737178)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient4297"
+ xlink:href="#linearGradient9497-5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,-646.17736,-89.68283)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient4316"
+ xlink:href="#linearGradient9497-5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,-646.17736,-89.68283)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient4318"
+ xlink:href="#linearGradient9497-1-95"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,-646.17547,-96.737178)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient4320"
+ xlink:href="#linearGradient9497-6-0"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,-646.08618,-82.674677)" />
+ <linearGradient
+ x1="1.1049798"
+ y1="13.152683"
+ x2="6.6379666"
+ y2="10.024924"
+ id="linearGradient3986-8"
+ xlink:href="#linearGradient3980-1"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient3195-1"
+ xlink:href="#linearGradient9497-0"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.74596729,0,0,0.94314201,-405.98488,-465.30597)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient3192-43"
+ xlink:href="#linearGradient9497-1-47"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.3202618,0,0,0.84666939,-733.334,-423.58754)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient3189-2"
+ xlink:href="#linearGradient9497-6-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.3098397,0,0,0.848111,-727.30273,-410.25386)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9520-2-74"
+ xlink:href="#linearGradient9497-6-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)" />
+ <linearGradient
+ id="linearGradient9497-6-1">
+ <stop
+ id="stop9499-0-6"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-1-2"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-3-67"
+ xlink:href="#linearGradient9497-6-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9520-57"
+ xlink:href="#linearGradient9497-1-47"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)" />
+ <linearGradient
+ id="linearGradient9497-1-47">
+ <stop
+ id="stop9499-6-14"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-7-71"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-1-2"
+ xlink:href="#linearGradient9497-1-47"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-35"
+ xlink:href="#linearGradient9497-0"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ id="linearGradient9497-0">
+ <stop
+ id="stop9499-26"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-13"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3980-1">
+ <stop
+ id="stop3982-0"
+ style="stop-color:#fcc273;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3984-7"
+ style="stop-color:#fc916b;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="880.47321"
+ y1="718.15826"
+ x2="880.47321"
+ y2="738.3028"
+ id="linearGradient6454-9"
+ xlink:href="#linearGradient6439-6"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-46,0)" />
+ <linearGradient
+ x1="880.47321"
+ y1="718.15826"
+ x2="880.47321"
+ y2="738.3028"
+ id="linearGradient6445-1"
+ xlink:href="#linearGradient6439-6"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-46,0)" />
+ <linearGradient
+ id="linearGradient6439-6">
+ <stop
+ id="stop6441-4"
+ style="stop-color:#e5e7e2;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop6443-0"
+ style="stop-color:#e5e7e2;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ </defs>
+ <metadata
+ id="metadata3757">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-823.6913,-707.53376)"
+ id="layer1-5">
+ <text
+ x="835.85748"
+ y="718.30353"
+ id="text11171"
+ xml:space="preserve"
+ style="font-size:10.12465572px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.70751727;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="835.85748"
+ y="718.30353"
+ id="tspan11173"
+ style="font-weight:bold;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.70751727;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">+</tspan></text>
+ <text
+ x="825.39417"
+ y="725.07898"
+ id="text11693"
+ xml:space="preserve"
+ style="font-size:18.1716404px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#212222;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="825.39417"
+ y="725.07898"
+ id="tspan11695"
+ style="font-weight:normal;fill:#212222;fill-opacity:1;-inkscape-font-specification:DejaVu Serif">A</tspan></text>
+ <path
+ d="m 831.84511,710.73333 4.90625,12.71875 0.28125,0 -4.875,-12.71875 -0.3125,0 z m -1.5,1.8125 -2.59375,6.78125 0.6875,0 2.25,-5.875 -0.34375,-0.90625 z m -3,7.78125 -1.1875,3.125 0.6875,0 1,-2.625 5.6875,0 -0.1875,-0.5 -6,0 z m 0.375,3.65625 0,0.5 -3.5,0 0,0.5 4,0 0,-1 -0.5,0 z m 10.40625,0 0,0.5 -4.65625,0 0,0.5 5.15625,0 0,-1 -0.5,0 z"
+ transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)"
+ id="text11167"
+ style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter11735);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 830.51875,710.76366 -5.0625,13.21875 -1.25,0 0,1.03125 0.5,0 0,-0.5 1.25,0 5.0625,-13.25 1.3125,0 -0.1875,-0.5 -1.625,0 z m 0.8125,2.8125 -0.15625,0.40625 2.28125,5.875 -4.53125,0 -0.1875,0.5 5.21875,0 -2.625,-6.78125 z m 2.6875,7.78125 1,2.625 -1.5625,0 0,1.03125 0.5,0 0,-0.5 1.5625,0 -1.1875,-3.15625 -0.3125,0 z m -6.6875,2.625 -0.1875,0.53125 1.0625,0 0,-0.53125 -0.875,0 z m 10.1875,0 0.21875,0.53125 0.875,0 0,-0.53125 -1.09375,0 z"
+ transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)"
+ id="text11683"
+ style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.69182392;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter11711);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ <g
+ transform="translate(-523.14178,-440.08317)"
+ id="layer1-6">
+ <text
+ x="566.91028"
+ y="492.98608"
+ transform="scale(0.93034878,1.0748657)"
+ id="text5195"
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="566.91028"
+ y="492.98608"
+ id="tspan5197"
+ style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">A</tspan></text>
+ <path
+ d="m 532.75446,516.10773 -4.46875,12.65625 -1,0 0,1.125 0.5,0 0,-0.625 1,0 4.46875,-12.65625 1.625,0 -0.1875,-0.5 -1.9375,0 z m 0.4375,3.96875 -0.15625,0.46875 1.46875,4.28125 -3,0 -0.1875,0.5 3.6875,0 -1.8125,-5.25 z m 1.90625,6.375 0.8125,2.3125 -1.1875,0 0,1.125 0.5,0 0,-0.625 1.1875,0 -1,-2.8125 -0.3125,0 z m -5,2.3125 -0.1875,0.5 0.9375,0 0,-0.5 -0.75,0 z m 9.40625,0 0.1875,0.5 0.625,0 0,-0.5 -0.8125,0 z"
+ id="text3023"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3809);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 534.37946,516.10773 4.3125,12.15625 0.3125,0 -4.3125,-12.15625 -0.3125,0 z m -2.1875,2.9375 -1.875,5.28125 0.6875,0 1.53125,-4.28125 -0.34375,-1 z m -2.28125,6.40625 -1,2.8125 0.6875,0 0.8125,-2.3125 4.1875,0 -0.1875,-0.5 -4.5,0 z m 0.4375,3.3125 0,0.625 -3.0625,0 0,0.5 3.5625,0 0,-1.125 -0.5,0 z m 9.46875,0 0,0.625 -5.09375,0 0,0.5 5.59375,0 0,-1.125 -0.5,0 z"
+ id="text3027"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3837);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ <g
+ transform="translate(-523.22136,-367.94934)"
+ id="layer1-3">
+ <text
+ x="566.91028"
+ y="492.98608"
+ transform="scale(0.93034878,1.0748657)"
+ id="text5195-8"
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="566.91028"
+ y="492.98608"
+ id="tspan5197-4"
+ style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">B</tspan></text>
+ <path
+ d="m 528.19196,516.7064 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m 4.09375,0 0,4.65625 0.5,0 0,-4.15625 1.0625,0 c 0.82594,10e-6 1.44511,0.15919 1.875,0.4375 -0.0892,-0.14324 -0.18651,-0.26897 -0.3125,-0.375 -0.42665,-0.36351 -1.11857,-0.56249 -2.0625,-0.5625 l -1.0625,0 z m 6.28125,0.25 c 0.39409,0.52808 0.59374,1.22535 0.59375,2.0625 -10e-6,0.81947 -0.27463,1.45692 -0.78125,1.9375 -0.50131,0.48059 -1.22683,0.78303 -2.21875,0.90625 0.52107,0.0562 0.95953,0.16568 1.375,0.3125 0.55687,-0.16157 1.00754,-0.39644 1.34375,-0.71875 0.50662,-0.48058 0.78124,-1.11803 0.78125,-1.9375 -10e-6,-1.13984 -0.36315,-1.99564 -1.09375,-2.5625 z m -6.28125,5.5 0,5.8125 0.5,0 0,-5.3125 1.15625,0 c 0.83936,10e-6 1.48442,0.1937 1.96875,0.53125 -0.0691,-0.0954 -0.13581,-0.19985 -0.21875,-0.28125 -0.49597,-0.48674 -1.24208,-0.74999 -2.25,-0.75 l -1.15625,0 z m 6.90625,0.84375 c 0.44148,0.56299 0.68749,1.25448 0.6875,2.09375 -10e-6,1.36783 -0.44782,2.38431 -1.34375,3.03125 -0.89062,0.64694 -2.31489,0.96875 -4.21875,0.96875 l -6.125,0 0,0.5 6.625,0 c 1.90386,0 3.32813,-0.32181 4.21875,-0.96875 0.89593,-0.64694 1.34374,-1.66342 1.34375,-3.03125 -10e-6,-1.01046 -0.32881,-1.79627 -0.96875,-2.40625 -0.067,-0.0638 -0.14565,-0.12894 -0.21875,-0.1875 z"
+ id="text5199"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3772);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 528.19654,516.11548 0,1.09375 0.5,0 0,-0.59375 7.09375,0 c 1.43448,10e-6 2.51961,0.26222 3.25,0.8125 -0.13699,-0.17753 -0.2861,-0.32704 -0.46875,-0.46875 -0.73063,-0.56683 -1.82536,-0.84374 -3.28125,-0.84375 l -7.09375,0 z m 1.53125,1.59375 0,11.0625 -1.53125,0 0,1.125 0.5,0 0,-0.625 1.53125,0 0,-11.5625 -0.5,0 z m 6.5,0.4375 c 0.21673,0.34787 0.34374,0.80765 0.34375,1.375 -10e-6,0.79483 -0.24487,1.36184 -0.6875,1.75 -0.44264,0.38201 -1.11399,0.59376 -2.03125,0.59375 l -0.5625,0 0,0.5 1.0625,0 c 0.91726,10e-6 1.58861,-0.21174 2.03125,-0.59375 0.44263,-0.38816 0.68749,-0.95517 0.6875,-1.75 -10e-6,-0.80097 -0.22429,-1.38647 -0.65625,-1.75 -0.0533,-0.0454 -0.12609,-0.0852 -0.1875,-0.125 z m 1.8125,4.53125 c -0.27347,0.0794 -0.54832,0.14692 -0.875,0.1875 1.07435,0.11586 1.90579,0.43638 2.53125,0.9375 -0.0901,-0.11484 -0.17283,-0.20916 -0.28125,-0.3125 -0.36206,-0.34509 -0.83372,-0.62123 -1.375,-0.8125 z m -1.625,1.3125 c 0.34394,0.47485 0.53124,1.0853 0.53125,1.90625 -10e-6,0.97966 -0.22813,1.71924 -0.71875,2.1875 -0.49064,0.46826 -1.26266,0.6875 -2.28125,0.6875 l -0.65625,0 0,0.5 1.15625,0 c 1.01859,0 1.79061,-0.21924 2.28125,-0.6875 0.49062,-0.46826 0.71874,-1.20784 0.71875,-2.1875 -10e-6,-0.98581 -0.25404,-1.70075 -0.75,-2.1875 -0.0829,-0.0814 -0.18398,-0.15096 -0.28125,-0.21875 z"
+ id="text5217"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3776);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ <g
+ transform="translate(-522.92799,-296.1791)"
+ id="layer1-7">
+ <text
+ x="566.91028"
+ y="492.98608"
+ transform="scale(0.93034878,1.0748657)"
+ id="text5195-7"
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="566.91028"
+ y="492.98608"
+ id="tspan5197-0"
+ style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">F</tspan></text>
+ <path
+ d="m 538.34821,516.10773 0,2.75 -0.59375,0 0,0.5 1.09375,0 0,-3.25 -0.5,0 z m -10.15625,0.59375 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m 4.125,0.15625 0,4.4375 0.5,0 0,-3.9375 4.4375,0 0,-0.5 -4.9375,0 z m 4.125,3.1875 0,4.25 -0.59375,0 0,0.5 1.09375,0 0,-4.75 -0.5,0 z m -4.125,2.5 0,5.71875 0.5,0 0,-5.21875 2.53125,0 0,-0.5 -3.03125,0 z m 1.875,6.21875 0,0.625 -6,0 0,0.5 6.5,0 0,-1.125 -0.5,0 z"
+ id="text3860"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3886);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 528.19196,516.10773 0,1.09375 0.5,0 0,-0.59375 10.15625,0 0,-0.5 -10.65625,0 z m 1.53125,1.59375 0,11.0625 -1.53125,0 0,1.125 0.5,0 0,-0.625 1.53125,0 0,-11.5625 -0.5,0 z m 8.03125,0.15625 0,1.5 0.5,0 0,-1.5 -0.5,0 z m -1.90625,2.1875 0,1.75 -2.53125,0 0,0.5 3.03125,0 0,-1.75 0.59375,0 0,-0.5 -1.09375,0 z m 0,3.5 0,1.25 0.5,0 0,-1.25 -0.5,0 z m -2.53125,5.21875 0,0.5 1.375,0 0,-0.5 -1.375,0 z"
+ id="text3864"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3882);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ <g
+ transform="translate(-524.21316,-223.95587)"
+ id="layer1-8">
+ <text
+ x="566.91028"
+ y="492.98608"
+ transform="scale(0.93034878,1.0748657)"
+ id="text5195-6"
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="566.91028"
+ y="492.98608"
+ id="tspan5197-06"
+ style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">G</tspan></text>
+ <path
+ d="m 534.62946,516.45148 c -1.23726,1e-5 -2.13746,0.49527 -2.71875,1.46875 -0.57597,0.96735 -0.875,2.50505 -0.875,4.59375 0,2.07022 0.28912,3.58285 0.84375,4.5625 0.20798,0.36506 0.45502,0.67809 0.75,0.90625 -0.0944,-0.12162 -0.16884,-0.26379 -0.25,-0.40625 -0.55463,-0.97965 -0.84375,-2.49228 -0.84375,-4.5625 0,-2.0887 0.29903,-3.6264 0.875,-4.59375 0.58129,-0.97348 1.48149,-1.46874 2.71875,-1.46875 0.86746,1e-5 1.55891,0.2273 2.09375,0.625 -0.076,-0.0954 -0.13567,-0.2008 -0.21875,-0.28125 -0.55997,-0.54835 -1.35641,-0.84374 -2.375,-0.84375 z m 4.59375,0.375 0,3.09375 -0.65625,0 c 0.0425,0.16552 0.0895,0.31967 0.125,0.5 l 1.03125,0 0,-3.375 c -0.16821,-0.0805 -0.33222,-0.1465 -0.5,-0.21875 z m 0.40625,6.625 0,4.78125 c -0.89595,0.48059 -1.79157,0.82837 -2.6875,1.0625 -0.89062,0.23413 -1.81674,0.375 -2.75,0.375 -1.75604,0 -3.19957,-0.46844 -4.3125,-1.40625 1.17325,1.2754 2.76464,1.90625 4.8125,1.90625 0.93326,0 1.85938,-0.14087 2.75,-0.375 0.89593,-0.23413 1.79155,-0.58191 2.6875,-1.0625 l 0,-5.28125 -0.5,0 z m -3.8125,0.59375 0,0.5 0.9375,0 0,-0.5 -0.9375,0 z"
+ id="text3890"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3908);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 534.69196,515.85773 c -2.04786,1e-5 -3.63925,0.63086 -4.8125,1.90625 -1.16792,1.27541 -1.78125,3.02575 -1.78125,5.25 0,2.2181 0.61333,3.9746 1.78125,5.25 0.12571,0.13665 0.23925,0.25299 0.375,0.375 -1.1007,-1.26488 -1.65625,-2.97168 -1.65625,-5.125 0,-2.22425 0.58208,-3.97459 1.75,-5.25 1.17325,-1.27539 2.79589,-1.90624 4.84375,-1.90625 0.85327,1e-5 1.70463,0.0841 2.53125,0.28125 0.66053,0.15756 1.33264,0.40012 2,0.6875 l 0,-0.28125 c -0.83729,-0.40048 -1.6734,-0.70907 -2.5,-0.90625 -0.82662,-0.19715 -1.67798,-0.28124 -2.53125,-0.28125 z m 3.03125,2.21875 c 0.43644,0.5474 0.76436,1.30482 0.96875,2.34375 l 0.375,0 c -0.24482,-0.95424 -0.58532,-1.66293 -1.0625,-2.125 -0.0831,-0.0814 -0.18807,-0.14946 -0.28125,-0.21875 z m -1.90625,5.375 0,1.09375 0.5,0 0,-0.59375 3.8125,0 0,-0.5 -4.3125,0 z m 1.4375,1.59375 0,3.28125 c -0.31466,0.23413 -0.67854,0.41418 -1.0625,0.53125 -0.38398,0.11707 -0.77079,0.1875 -1.21875,0.1875 -0.71603,0 -1.32688,-0.16866 -1.8125,-0.53125 0.54902,0.6868 1.32703,1.03125 2.3125,1.03125 0.44796,0 0.83477,-0.0704 1.21875,-0.1875 0.38396,-0.11707 0.74784,-0.29712 1.0625,-0.53125 l 0,-3.78125 -0.5,0 z"
+ id="text3894"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3912);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ <g
+ transform="translate(-523.54028,-152.07265)"
+ id="layer1-9">
+ <text
+ x="566.91028"
+ y="492.98608"
+ transform="scale(0.93034878,1.0748657)"
+ id="text5195-9"
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="566.91028"
+ y="492.98608"
+ id="tspan5197-1"
+ style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">N</tspan></text>
+ <path
+ d="m 531.75446,516.10773 6.84375,9.25 0,-0.1875 -6.71875,-9.0625 -0.125,0 z m 9.5,0 0,0.59375 -1.53125,0 0,12.6875 -1.96875,0 0.375,0.5 2.09375,0 0,-12.6875 1.53125,0 0,-1.09375 -0.5,0 z m -13.125,0.59375 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m 9.4375,0 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m -7.28125,2.71875 0,8.84375 0.5,0 0,-8.15625 -0.5,-0.6875 z m 1.53125,9.34375 0,0.625 -3.6875,0 0,0.5 4.1875,0 0,-1.125 -0.5,0 z"
+ id="text3939"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3973);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 528.12946,516.10773 0,1.09375 0.5,0 0,-0.59375 3.625,0 -0.375,-0.5 -3.75,0 z m 9.4375,0 0,1.09375 0.5,0 0,-0.59375 3.6875,0 0,-0.5 -4.1875,0 z m -7.90625,1.59375 0,11.0625 -1.53125,0 0,1.125 0.5,0 0,-0.625 1.53125,0 0,-11.5625 -0.5,0 z m 9.4375,0 0,7.96875 0.5,0.6875 0,-8.65625 -0.5,0 z m -7.8125,2.71875 0,0.1875 6.84375,9.28125 0.125,0 -6.96875,-9.46875 z m 0,8.34375 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z"
+ id="text3935"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3953);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ <g
+ transform="translate(-523.04306,-80.268534)"
+ id="layer1-54">
+ <text
+ x="566.91028"
+ y="492.98608"
+ transform="scale(0.93034878,1.0748657)"
+ id="text5195-70"
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="566.91028"
+ y="492.98608"
+ id="tspan5197-2"
+ style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">P</tspan></text>
+ <path
+ d="m 528.19196,516.70148 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m 4.09375,0 0,5.875 0.5,0 0,-5.375 0.90625,0 c 0.46699,1e-5 0.88043,0.13824 1.21875,0.375 -0.0173,-0.0237 -0.0444,-0.0395 -0.0625,-0.0625 -0.41065,-0.52987 -0.95764,-0.81249 -1.65625,-0.8125 l -0.90625,0 z m 5.625,0.3125 c 0.59493,0.68939 0.93749,1.55688 0.9375,2.625 -10e-6,1.23228 -0.39823,2.19814 -1.1875,2.9375 -0.78396,0.73321 -1.83368,1.09376 -3.15625,1.09375 l -2.21875,0 0,4.59375 0.5,0 0,-4.09375 2.21875,0 c 1.32257,1e-5 2.37229,-0.36054 3.15625,-1.09375 0.78927,-0.73936 1.18749,-1.70522 1.1875,-2.9375 -10e-6,-1.2261 -0.40356,-2.21045 -1.1875,-2.9375 -0.0765,-0.0715 -0.16834,-0.12295 -0.25,-0.1875 z m -3.6875,11.75 0,0.625 -6.03125,0 0,0.5 6.53125,0 0,-1.125 -0.5,0 z"
+ id="text4000"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4022);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 528.19196,516.10773 0,1.09375 0.5,0 0,-0.59375 6.8125,0 c 1.19835,1e-5 2.15089,0.30914 2.90625,0.90625 -0.088,-0.10197 -0.14899,-0.21882 -0.25,-0.3125 -0.78396,-0.73319 -1.82835,-1.09374 -3.15625,-1.09375 l -6.8125,0 z m 1.53125,1.59375 0,11.0625 -1.53125,0 0,1.125 0.5,0 0,-0.625 1.53125,0 0,-11.5625 -0.5,0 z m 5.6875,0.375 c 0.37529,0.51597 0.56249,1.21431 0.5625,2.0625 -10e-6,0.89341 -0.20904,1.58897 -0.625,2.125 -0.41065,0.52988 -0.96297,0.81251 -1.65625,0.8125 l -0.40625,0 0,0.5 0.90625,0 c 0.69328,1e-5 1.2456,-0.28262 1.65625,-0.8125 0.41596,-0.53603 0.62499,-1.23159 0.625,-2.125 -10e-6,-0.88723 -0.21437,-1.60127 -0.625,-2.125 -0.13615,-0.17567 -0.2697,-0.32007 -0.4375,-0.4375 z m -2.125,10.6875 0,0.5 1.4375,0 0,-0.5 -1.4375,0 z"
+ id="text3996"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4018);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ <g
+ transform="translate(-523.12118,-7.8312526)"
+ id="layer1-2">
+ <text
+ x="566.91028"
+ y="492.98608"
+ transform="scale(0.93034878,1.0748657)"
+ id="text5195-94"
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="566.91028"
+ y="492.98608"
+ id="tspan5197-07"
+ style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">V</tspan></text>
+ <path
+ d="m 532.44196,516.10773 0,0.59375 -1.1875,0 3.25,9.15625 0.15625,-0.46875 -2.90625,-8.1875 1.1875,0 0,-1.09375 -0.5,0 z m 7.4375,0 0,0.59375 -1,0 -4.5,12.6875 -1.59375,0 0.1875,0.5 1.875,0 4.53125,-12.6875 1,0 0,-1.09375 -0.5,0 z m -12.5625,0.59375 0,0.5 0.8125,0 -0.1875,-0.5 -0.625,0 z m 9.5,0 0,0.5 0.75,0 0.1875,-0.5 -0.9375,0 z"
+ id="text4049"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4067);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 527.31696,516.10773 0,1.09375 0.5,0 0,-0.59375 5.125,0 0,-0.5 -5.625,0 z m 9.5,0 0,1.09375 0.5,0 0,-0.59375 3.0625,0 0,-0.5 -3.5625,0 z m -8.1875,1.59375 4.34375,12.1875 0.3125,0 -4.34375,-12.1875 -0.3125,0 z m 9.4375,0 -2.90625,8.1875 0.34375,0.96875 3.25,-9.15625 -0.6875,0 z"
+ id="text4045"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4063);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ <g
+ transform="translate(-523.20924,63.952116)"
+ id="layer1-25">
+ <text
+ x="566.91028"
+ y="492.98608"
+ transform="scale(0.93034878,1.0748657)"
+ id="text5195-3"
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="566.91028"
+ y="492.98608"
+ id="tspan5197-01"
+ style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">A</tspan></text>
+ <path
+ d="m 532.75446,516.10773 -4.46875,12.65625 -1,0 0,1.125 0.5,0 0,-0.625 1,0 4.46875,-12.65625 1.625,0 -0.1875,-0.5 -1.9375,0 z m 0.4375,3.96875 -0.15625,0.46875 1.46875,4.28125 -3,0 -0.1875,0.5 3.6875,0 -1.8125,-5.25 z m 1.90625,6.375 0.8125,2.3125 -1.1875,0 0,1.125 0.5,0 0,-0.625 1.1875,0 -1,-2.8125 -0.3125,0 z m -5,2.3125 -0.1875,0.5 0.9375,0 0,-0.5 -0.75,0 z m 9.40625,0 0.1875,0.5 0.625,0 0,-0.5 -0.8125,0 z"
+ id="text3023-0"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3809-1);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 534.37946,516.10773 4.3125,12.15625 0.3125,0 -4.3125,-12.15625 -0.3125,0 z m -2.1875,2.9375 -1.875,5.28125 0.6875,0 1.53125,-4.28125 -0.34375,-1 z m -2.28125,6.40625 -1,2.8125 0.6875,0 0.8125,-2.3125 4.1875,0 -0.1875,-0.5 -4.5,0 z m 0.4375,3.3125 0,0.625 -3.0625,0 0,0.5 3.5625,0 0,-1.125 -0.5,0 z m 9.46875,0 0,0.625 -5.09375,0 0,0.5 5.59375,0 0,-1.125 -0.5,0 z"
+ id="text3027-7"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3837-2);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ <g
+ transform="translate(-0.09178666,648.05602)"
+ id="g3372">
+ <rect
+ width="9.2080336"
+ height="2.0841758"
+ x="9.9951382"
+ y="10.467622"
+ id="rect8987"
+ style="fill:url(#linearGradient3195);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89300001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="16.296982"
+ height="1.8709884"
+ x="2.8947093"
+ y="3.5198629"
+ id="rect8987-2"
+ style="fill:url(#linearGradient3192);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89300001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="16.168335"
+ height="1.874174"
+ x="3.1143055"
+ y="17.58077"
+ id="rect8987-5"
+ style="fill:url(#linearGradient3189);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89300001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 6.1401918,11.71699 -2.6276419,1.51707 -2.6276417,1.51707 0,-3.03414 0,-3.0341389 2.6276419,1.5170699 z"
+ transform="matrix(0.90902794,0,0,0.90902794,2.2305609,0.83286798)"
+ id="path3978"
+ style="fill:url(#linearGradient3986);fill-opacity:1;fill-rule:nonzero;stroke:#e0926b;stroke-width:0.89300001;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ transform="translate(-524.03097,207.77805)"
+ id="layer1-56">
+ <text
+ x="569.04468"
+ y="493.06223"
+ transform="scale(0.93034878,1.0748657)"
+ id="text5195-65"
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="569.04468"
+ y="493.06223"
+ id="tspan5197-12"
+ style="font-style:italic;font-weight:normal;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">A</tspan></text>
+ <path
+ d="m 535.78571,516.17023 -6.40625,12.8125 -1.0625,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.0625,0 6.40625,-12.8125 0.9375,0 -0.0937,-0.5 -1.34375,0 z m 0.375,2.75 -0.3125,0.625 0.90625,5.4375 -3.625,0 -0.25,0.5 4.375,0 -1.09375,-6.5625 z m 0.8125,7.53125 0.40625,2.53125 -1.3125,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.3125,0 -0.46875,-3.03125 -0.4375,0 z m -5.84375,2.53125 -0.25,0.5 0.71875,0 0.0937,-0.5 -0.5625,0 z m 8.53125,0 0.0937,0.5 0.59375,0 0.0625,-0.5 -0.75,0 z"
+ id="text4090"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4108);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 536.72321,516.17023 2.03125,12.3125 0.40625,0 -2.03125,-12.3125 -0.40625,0 z m -1.5625,1.75 -3.28125,6.5625 0.75,0 2.71875,-5.4375 -0.1875,-1.125 z m -3.78125,7.53125 -1.5,3.03125 0.75,0 1.25,-2.53125 4.59375,0 -0.0625,-0.5 -5.03125,0 z m -0.28125,3.53125 -0.0625,0.5 -2.8125,0 -0.0625,0.5 3.375,0 0.15625,-1 -0.59375,0 z m 8.75,0 -0.0937,0.5 -3.78125,0 -0.0625,0.5 4.34375,0 0.15625,-1 -0.5625,0 z"
+ id="text4094"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4112);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ <g
+ transform="translate(-523.77923,280.07755)"
+ id="layer1-34">
+ <text
+ x="567.37231"
+ y="493.05362"
+ transform="scale(0.93034878,1.0748657)"
+ id="text5195-4"
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="567.37231"
+ y="493.05362"
+ id="tspan5197-3"
+ style="font-style:italic;font-weight:normal;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">C</tspan></text>
+ <path
+ d="m 534.56696,516.42023 c -1.06685,0.11457 -1.95956,0.64601 -2.6875,1.5625 -0.83195,1.04128 -1.43994,2.56667 -1.78125,4.59375 -0.34131,2.02093 -0.26122,3.54632 0.21875,4.59375 0.20629,0.44755 0.49066,0.80731 0.84375,1.0625 -0.12875,-0.16736 -0.24717,-0.35298 -0.34375,-0.5625 -0.47997,-1.04743 -0.56006,-2.57282 -0.21875,-4.59375 0.34131,-2.02708 0.9493,-3.55247 1.78125,-4.59375 0.83194,-1.04742 1.88166,-1.56249 3.15625,-1.5625 0.85596,1e-5 1.50789,0.15034 2,0.5 -0.0471,-0.0641 -0.10373,-0.13005 -0.15625,-0.1875 -0.50131,-0.54835 -1.27183,-0.81249 -2.34375,-0.8125 -0.15932,0 -0.31634,-0.0164 -0.46875,0 z m 4.96875,0.4375 -0.5,2.9375 -0.40625,0 c 0.0125,0.1636 0.0304,0.32199 0.0312,0.5 l 0.875,0 0.53125,-3.1875 c -0.18373,-0.0945 -0.35168,-0.16682 -0.53125,-0.25 z m -1.4375,9.46875 c -0.53603,1.0345 -1.18715,1.83323 -2,2.40625 -0.93861,0.65927 -2.04326,1 -3.3125,1 -0.77862,0 -1.48046,-0.16068 -2.09375,-0.46875 -0.28043,-0.14086 -0.54208,-0.29859 -0.78125,-0.5 0.36218,0.42621 0.79506,0.75578 1.28125,1 0.61329,0.30807 1.31513,0.46875 2.09375,0.46875 1.26924,0 2.37389,-0.34073 3.3125,-1 0.94393,-0.66543 1.67936,-1.61852 2.25,-2.90625 l -0.75,0 z"
+ id="text4162"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4184);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 535.81696,515.92023 c -1.75455,1e-5 -3.26659,0.65023 -4.5625,1.96875 -1.29058,1.31238 -2.10611,3.04335 -2.46875,5.1875 -0.18665,1.10905 -0.20649,2.11893 -0.0625,3 0.14399,0.87492 0.45753,1.65368 0.9375,2.34375 0.22577,0.32438 0.4661,0.60468 0.75,0.84375 -0.0947,-0.11143 -0.16379,-0.21989 -0.25,-0.34375 -0.47997,-0.69007 -0.79351,-1.46883 -0.9375,-2.34375 -0.14399,-0.88107 -0.12415,-1.89095 0.0625,-3 0.36264,-2.14415 1.17817,-3.87512 2.46875,-5.1875 1.29591,-1.31852 2.80795,-1.96874 4.5625,-1.96875 0.65061,1e-5 1.33262,0.0841 2.03125,0.28125 0.53784,0.15065 1.10607,0.38692 1.6875,0.65625 l 0.0312,-0.25 c -0.77863,-0.40048 -1.51481,-0.70907 -2.21875,-0.90625 -0.69863,-0.19715 -1.38064,-0.28124 -2.03125,-0.28125 z m 2.21875,2 c 0.40225,0.54813 0.62022,1.33803 0.625,2.375 l 0.4375,0 c -0.0691,-0.9005 -0.29465,-1.59857 -0.71875,-2.0625 -0.101,-0.11048 -0.21959,-0.22428 -0.34375,-0.3125 z m -0.65625,8.40625 c -0.42131,0.9735 -0.96372,1.69459 -1.625,2.1875 -0.65596,0.48675 -1.4219,0.71875 -2.3125,0.71875 -0.72676,0 -1.31284,-0.16146 -1.78125,-0.5 0.51111,0.66438 1.26314,1 2.28125,1 0.8906,0 1.65654,-0.232 2.3125,-0.71875 0.66128,-0.49291 1.20369,-1.214 1.625,-2.1875 l 0.71875,0 c 0.0864,-0.16682 0.17076,-0.32118 0.25,-0.5 l -1.46875,0 z"
+ id="text4158"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4180);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ <g
+ transform="translate(-840.97142,171.10277)"
+ id="layer1-0">
+ <g
+ transform="translate(-19.62505,-0.15625)"
+ id="g5883">
+ <text
+ x="808.40424"
+ y="762.1983"
+ transform="scale(1.0721134,0.93273715)"
+ id="text5269"
+ xml:space="preserve"
+ style="font-size:20.50770187px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#565758;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="808.40424"
+ y="762.1983"
+ id="tspan5271"
+ style="font-style:italic;font-weight:normal;fill:#565758;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">I</tspan></text>
+ <path
+ d="m 875.11609,696.97827 -0.0937,0.5 -2.03125,0 -2.6875,11.96875 0.625,0 2.53125,-11.46875 2.0625,0 0.21875,-1 -0.625,0 z m -5.75,0.5 -0.125,0.5 1.4375,0 0.125,-0.5 -1.4375,0 z m 2.84375,12.46875 -0.0937,0.46875 -5.625,0 -0.125,0.5 6.25,0 0.21875,-0.96875 -0.625,0 z"
+ id="text5273"
+ style="font-size:20.50770187px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter5879);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 869.49109,696.97827 -0.25,1 0.625,0 0.125,-0.5 5.625,0 0.125,-0.5 -6.25,0 z m 1.6875,1.5 -2.5625,11.46875 -2.03125,0 -0.21875,0.96875 0.625,0 0.0937,-0.46875 2.03125,0 2.6875,-11.96875 -0.625,0 z m 0.25,11.46875 -0.125,0.5 1.40625,0 0.125,-0.5 -1.40625,0 z"
+ id="text5282"
+ style="font-size:20.50770187px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.87735847;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter5867);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ </g>
+ <g
+ transform="translate(-523.96353,423.93775)"
+ id="layer1-21">
+ <text
+ x="567.41534"
+ y="493.06223"
+ transform="scale(0.93034878,1.0748657)"
+ id="text5195-0"
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="567.41534"
+ y="493.06223"
+ id="tspan5197-6"
+ style="font-style:italic;font-weight:normal;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">K</tspan></text>
+ <path
+ d="m 529.97321,516.17023 -0.1875,1 0.59375,0 0.0937,-0.5 4.0625,0 0.0937,-0.5 -4.65625,0 z m 6.96875,0 -0.15625,1 0.5625,0 0.0937,-0.5 3.40625,0 0.0625,-0.5 -3.96875,0 z m -5.71875,1.5 -1.90625,11.3125 -1.5,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.5,0 2,-11.8125 -0.59375,0 z m 6.3125,0 -4.78125,4.125 -0.1875,1.09375 6.03125,-5.21875 -1.0625,0 z m -5.15625,6.25 -0.0312,0.1875 4.09375,5.875 0.15625,0 -4.21875,-6.0625 z m -0.84375,5.0625 -0.0937,0.5 0.96875,0 0.0625,-0.5 -0.9375,0 z m 6.65625,0 0.34375,0.5 0.75,0 0.0937,-0.5 -1.1875,0 z"
+ id="text4207"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4225);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 534.03571,516.17023 -0.0625,0.5 -1.53125,0 -0.875,5.21875 0.6875,-0.59375 0.6875,-4.125 1.53125,0 0.15625,-1 -0.59375,0 z m 6.3125,0 -0.0937,0.5 -1.34375,0 -6,5.1875 4.625,6.625 0.15625,0 -4.28125,-6.125 6,-5.1875 1.34375,0 0.15625,-1 -0.5625,0 z m -10.46875,0.5 -0.0937,0.5 0.9375,0 0.0937,-0.5 -0.9375,0 z m 6.96875,0 -0.0625,0.5 0.25,0 0.5625,-0.5 -0.75,0 z m -5.46875,6.25 -0.9375,5.5625 0.59375,0 0.8125,-4.875 -0.46875,-0.6875 z m 0.53125,6.0625 -0.0937,0.5 -4.09375,0 -0.0625,0.5 4.65625,0 0.15625,-1 -0.5625,0 z m 6.875,0 -0.0625,0.5 -2.625,0 0.34375,0.5 2.78125,0 0.15625,-1 -0.59375,0 z"
+ id="text4211"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;filter:url(#filter4229);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ <g
+ transform="translate(-523.9635,495.85605)"
+ id="layer1-87">
+ <text
+ x="569.04468"
+ y="493.06223"
+ transform="scale(0.93034878,1.0748657)"
+ id="text5195-1"
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="569.04468"
+ y="493.06223"
+ id="tspan5197-09"
+ style="font-style:italic;font-weight:normal;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">A</tspan></text>
+ <path
+ d="m 535.78571,516.17023 -6.40625,12.8125 -1.0625,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.0625,0 6.40625,-12.8125 0.9375,0 -0.0937,-0.5 -1.34375,0 z m 0.375,2.75 -0.3125,0.625 0.90625,5.4375 -3.625,0 -0.25,0.5 4.375,0 -1.09375,-6.5625 z m 0.8125,7.53125 0.40625,2.53125 -1.3125,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.3125,0 -0.46875,-3.03125 -0.4375,0 z m -5.84375,2.53125 -0.25,0.5 0.71875,0 0.0937,-0.5 -0.5625,0 z m 8.53125,0 0.0937,0.5 0.59375,0 0.0625,-0.5 -0.75,0 z"
+ id="text4090-3"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4108-5);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 536.72321,516.17023 2.03125,12.3125 0.40625,0 -2.03125,-12.3125 -0.40625,0 z m -1.5625,1.75 -3.28125,6.5625 0.75,0 2.71875,-5.4375 -0.1875,-1.125 z m -3.78125,7.53125 -1.5,3.03125 0.75,0 1.25,-2.53125 4.59375,0 -0.0625,-0.5 -5.03125,0 z m -0.28125,3.53125 -0.0625,0.5 -2.8125,0 -0.0625,0.5 3.375,0 0.15625,-1 -0.59375,0 z m 8.75,0 -0.0937,0.5 -3.78125,0 -0.0625,0.5 4.34375,0 0.15625,-1 -0.5625,0 z"
+ id="text4094-3"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4112-0);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ <g
+ transform="translate(-550.30419,585.78061)"
+ id="layer1-51">
+ <text
+ x="551.98376"
+ y="500.20258"
+ id="text8953"
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="551.98376"
+ y="500.20258"
+ id="tspan8955"
+ style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">1</tspan></text>
+ <text
+ x="552.23047"
+ y="507.20078"
+ id="text8953-1"
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="552.23047"
+ y="507.20078"
+ id="tspan8955-5"
+ style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">2</tspan></text>
+ <text
+ x="552.19891"
+ y="514.17712"
+ id="text8953-8"
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="552.19891"
+ y="514.17712"
+ id="tspan8955-55"
+ style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">3</tspan></text>
+ <rect
+ width="11.551277"
+ height="2.0031219"
+ x="558.13318"
+ y="504.72748"
+ id="rect8987-8"
+ style="fill:url(#linearGradient9503-34);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="11.551277"
+ height="2.0031219"
+ x="558.13507"
+ y="497.67313"
+ id="rect8987-2-0"
+ style="fill:url(#linearGradient9520-6);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="11.551277"
+ height="2.0031219"
+ x="558.22443"
+ y="511.73563"
+ id="rect8987-5-2"
+ style="fill:url(#linearGradient9520-2-9);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ transform="translate(-823.84926,444.77821)"
+ id="layer1-71">
+ <text
+ x="674.32245"
+ y="890.06787"
+ transform="scale(1.2392818,0.80691899)"
+ id="text11171-0"
+ xml:space="preserve"
+ style="font-size:15.80470848px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="674.32245"
+ y="890.06787"
+ id="tspan11173-0"
+ style="font-weight:bold;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">-</tspan></text>
+ <text
+ x="825.39417"
+ y="725.07898"
+ id="text11693-2"
+ xml:space="preserve"
+ style="font-size:18.1716404px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#212222;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="825.39417"
+ y="725.07898"
+ id="tspan11695-3"
+ style="font-weight:normal;fill:#212222;fill-opacity:1;-inkscape-font-specification:DejaVu Serif">A</tspan></text>
+ <path
+ d="m 831.84511,710.73333 4.90625,12.71875 0.28125,0 -4.875,-12.71875 -0.3125,0 z m -1.5,1.8125 -2.59375,6.78125 0.6875,0 2.25,-5.875 -0.34375,-0.90625 z m -3,7.78125 -1.1875,3.125 0.6875,0 1,-2.625 5.6875,0 -0.1875,-0.5 -6,0 z m 0.375,3.65625 0,0.5 -3.5,0 0,0.5 4,0 0,-1 -0.5,0 z m 10.40625,0 0,0.5 -4.65625,0 0,0.5 5.15625,0 0,-1 -0.5,0 z"
+ transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)"
+ id="text11167-3"
+ style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter11735-4);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 830.51875,710.76366 -5.0625,13.21875 -1.25,0 0,1.03125 0.5,0 0,-0.5 1.25,0 5.0625,-13.25 1.3125,0 -0.1875,-0.5 -1.625,0 z m 0.8125,2.8125 -0.15625,0.40625 2.28125,5.875 -4.53125,0 -0.1875,0.5 5.21875,0 -2.625,-6.78125 z m 2.6875,7.78125 1,2.625 -1.5625,0 0,1.03125 0.5,0 0,-0.5 1.5625,0 -1.1875,-3.15625 -0.3125,0 z m -6.6875,2.625 -0.1875,0.53125 1.0625,0 0,-0.53125 -0.875,0 z m 10.1875,0 0.21875,0.53125 0.875,0 0,-0.53125 -1.09375,0 z"
+ transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)"
+ id="text11683-3"
+ style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.69182392;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter11711-5);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ <g
+ transform="translate(-823.58442,516.56157)"
+ id="layer1-29">
+ <text
+ x="676.90649"
+ y="897.27142"
+ transform="scale(1.2392818,0.80691898)"
+ id="text11171-3"
+ xml:space="preserve"
+ style="font-size:5.07652283px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="676.90649"
+ y="897.27142"
+ id="tspan11173-3"
+ style="font-weight:bold;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">â–¼</tspan></text>
+ <text
+ x="825.39417"
+ y="725.07898"
+ id="text11693-7"
+ xml:space="preserve"
+ style="font-size:18.1716404px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#212222;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="825.39417"
+ y="725.07898"
+ id="tspan11695-2"
+ style="font-weight:normal;fill:#212222;fill-opacity:1;-inkscape-font-specification:DejaVu Serif">A</tspan></text>
+ <path
+ d="m 831.84511,710.73333 4.90625,12.71875 0.28125,0 -4.875,-12.71875 -0.3125,0 z m -1.5,1.8125 -2.59375,6.78125 0.6875,0 2.25,-5.875 -0.34375,-0.90625 z m -3,7.78125 -1.1875,3.125 0.6875,0 1,-2.625 5.6875,0 -0.1875,-0.5 -6,0 z m 0.375,3.65625 0,0.5 -3.5,0 0,0.5 4,0 0,-1 -0.5,0 z m 10.40625,0 0,0.5 -4.65625,0 0,0.5 5.15625,0 0,-1 -0.5,0 z"
+ transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)"
+ id="text11167-8"
+ style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter11735-7);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 830.51875,710.76366 -5.0625,13.21875 -1.25,0 0,1.03125 0.5,0 0,-0.5 1.25,0 5.0625,-13.25 1.3125,0 -0.1875,-0.5 -1.625,0 z m 0.8125,2.8125 -0.15625,0.40625 2.28125,5.875 -4.53125,0 -0.1875,0.5 5.21875,0 -2.625,-6.78125 z m 2.6875,7.78125 1,2.625 -1.5625,0 0,1.03125 0.5,0 0,-0.5 1.5625,0 -1.1875,-3.15625 -0.3125,0 z m -6.6875,2.625 -0.1875,0.53125 1.0625,0 0,-0.53125 -0.875,0 z m 10.1875,0 0.21875,0.53125 0.875,0 0,-0.53125 -1.09375,0 z"
+ transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)"
+ id="text11683-2"
+ style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.69182392;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter11711-8);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ <g
+ transform="translate(-823.85428,588.68226)"
+ id="layer1-1">
+ <text
+ x="676.90649"
+ y="884.87854"
+ transform="scale(1.2392818,0.80691898)"
+ id="text11171-9"
+ xml:space="preserve"
+ style="font-size:5.07652283px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="676.90649"
+ y="884.87854"
+ id="tspan11173-30"
+ style="font-weight:bold;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">â–²</tspan></text>
+ <text
+ x="825.39417"
+ y="725.07898"
+ id="text11693-3"
+ xml:space="preserve"
+ style="font-size:18.1716404px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#212222;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="825.39417"
+ y="725.07898"
+ id="tspan11695-28"
+ style="font-weight:normal;fill:#212222;fill-opacity:1;-inkscape-font-specification:DejaVu Serif">A</tspan></text>
+ <path
+ d="m 831.84511,710.73333 4.90625,12.71875 0.28125,0 -4.875,-12.71875 -0.3125,0 z m -1.5,1.8125 -2.59375,6.78125 0.6875,0 2.25,-5.875 -0.34375,-0.90625 z m -3,7.78125 -1.1875,3.125 0.6875,0 1,-2.625 5.6875,0 -0.1875,-0.5 -6,0 z m 0.375,3.65625 0,0.5 -3.5,0 0,0.5 4,0 0,-1 -0.5,0 z m 10.40625,0 0,0.5 -4.65625,0 0,0.5 5.15625,0 0,-1 -0.5,0 z"
+ transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)"
+ id="text11167-7"
+ style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter11735-9);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ d="m 830.51875,710.76366 -5.0625,13.21875 -1.25,0 0,1.03125 0.5,0 0,-0.5 1.25,0 5.0625,-13.25 1.3125,0 -0.1875,-0.5 -1.625,0 z m 0.8125,2.8125 -0.15625,0.40625 2.28125,5.875 -4.53125,0 -0.1875,0.5 5.21875,0 -2.625,-6.78125 z m 2.6875,7.78125 1,2.625 -1.5625,0 0,1.03125 0.5,0 0,-0.5 1.5625,0 -1.1875,-3.15625 -0.3125,0 z m -6.6875,2.625 -0.1875,0.53125 1.0625,0 0,-0.53125 -0.875,0 z m 10.1875,0 0.21875,0.53125 0.875,0 0,-0.53125 -1.09375,0 z"
+ transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)"
+ id="text11683-28"
+ style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.69182392;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter11711-3);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ <g
+ transform="translate(0.23496604,1367.9407)"
+ id="g3736">
+ <rect
+ width="11.551277"
+ height="2.0031219"
+ x="7.7045889"
+ y="10.508148"
+ id="rect8987-0"
+ style="fill:url(#linearGradient3195-7);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="11.551277"
+ height="2.0031219"
+ x="7.706481"
+ y="3.4537961"
+ id="rect8987-2-9"
+ style="fill:url(#linearGradient3192-9);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="11.551277"
+ height="2.0031219"
+ x="7.7958364"
+ y="17.516296"
+ id="rect8987-5-8"
+ style="fill:url(#linearGradient3189-5);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="2.2180145"
+ height="2.2927809"
+ x="2.3276966"
+ y="3.282562"
+ id="rect3039"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="2.2180145"
+ height="2.2927809"
+ x="2.3276966"
+ y="10.337555"
+ id="rect3039-7"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="2.2180145"
+ height="2.2927809"
+ x="2.3276966"
+ y="17.345551"
+ id="rect3039-6"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ transform="translate(-771.7253,752.90558)"
+ id="layer1-13">
+ <path
+ d="m 773.33551,690.56085 0,15.03125 15.6875,0 1.6875,-1.6875 1.625,-1.59375 0,-11.75 -19,0 z"
+ id="rect8568"
+ style="fill:#f4f5f4;fill-opacity:1;fill-rule:nonzero;stroke:#979995;stroke-width:0.98371369;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="14.78293"
+ height="10.804496"
+ x="775.41565"
+ y="692.71948"
+ id="rect9088"
+ style="fill:url(#linearGradient9194);fill-opacity:1;fill-rule:nonzero;stroke:#8a8475;stroke-width:0.98447442;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:1.5;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 784.01425,702.59563 0.0601,-2.9358 -1.26032,-1.93639 -1.8605,-1.24927 1.80048,0.62463 -0.26028,-1.46793 -1.82531,-2.19755 1.32363,0.61702 0.91039,1.03764 0.35492,1.31728 0.18635,0.79469 1.17065,1.79054 2.04124,-1.92043 1.67975,-2.40736 -0.62239,2.53228 -2.32245,2.54612 0,2.97449 z"
+ id="path9114"
+ style="fill:#001700;fill-opacity:1;stroke:none" />
+ <path
+ d="m 779.6728,699.1081 c -1.73172,0 -3.125,1.39328 -3.125,3.125 0,0.1736 0.0354,0.33407 0.0625,0.5 l 6.15625,0 c 0.0271,-0.16593 0.0625,-0.3264 0.0625,-0.5 0,-1.73172 -1.42454,-3.125 -3.15625,-3.125 z"
+ id="path9118"
+ style="fill:url(#radialGradient9190);fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <path
+ d="m 775.90453,703.04526 13.73212,0 0,-0.54833 -13.7798,0 z"
+ id="path9112"
+ style="fill:#193119;fill-opacity:1;stroke:none" />
+ <path
+ d="m 789.0447,705.53374 3.32589,-3.32589 -3.32589,0 z"
+ id="path9086"
+ style="fill:#f4f5f4;fill-opacity:1;stroke:#979995;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1.5;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 775.9663,700.54201 c 0,0 1.79546,-2.81322 6.35713,-4.86346 4.34963,-1.95492 7.3609,-2.47941 7.3609,-2.47941 l -13.76583,0 z"
+ id="path9098"
+ style="opacity:0.31132076;fill:url(#radialGradient9185);fill-opacity:1;stroke:none" />
+ </g>
+ <g
+ transform="translate(-860.64588,879.10051)"
+ id="layer1-86">
+ <g
+ transform="matrix(0.96583758,-0.25914815,0.25914815,0.96583758,-155.70545,250.69009)"
+ id="g9740">
+ <rect
+ width="15.655096"
+ height="10.078743"
+ x="883.86444"
+ y="638.2356"
+ id="rect9216"
+ style="fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#88897f;stroke-width:0.92526156;stroke-opacity:1" />
+ <rect
+ width="12.767857"
+ height="7.0982141"
+ x="885.29468"
+ y="639.74615"
+ id="rect9726"
+ style="fill:#88acd3;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ </g>
+ <g
+ transform="matrix(0.94980636,0.31283842,-0.31283842,0.94980636,225.23946,-243.05113)"
+ id="g9732">
+ <rect
+ width="15.655096"
+ height="10.078743"
+ x="883.86444"
+ y="638.2356"
+ id="rect9734"
+ style="fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#88897f;stroke-width:0.92526156;stroke-opacity:1" />
+ <rect
+ width="12.767857"
+ height="7.0982141"
+ x="885.29468"
+ y="639.74615"
+ id="rect9736"
+ style="fill:#6bbe21;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ </g>
+ <rect
+ width="15.655096"
+ height="10.078743"
+ x="865.33765"
+ y="638.32489"
+ id="rect9746"
+ style="fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#88897f;stroke-width:0.92526156;stroke-opacity:1" />
+ <rect
+ width="12.698151"
+ height="7.0935974"
+ x="866.7262"
+ y="639.77606"
+ id="rect9774"
+ style="fill:url(#linearGradient9784);fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <path
+ d="m 13.872113,11.500305 a 1.5297568,1.5297568 0 1 1 -3.059514,0 1.5297568,1.5297568 0 1 1 3.059514,0 z"
+ transform="translate(860.60243,632.92984)"
+ id="path9756"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <rect
+ width="12.698151"
+ height="7.0336046"
+ x="866.75745"
+ y="639.80731"
+ id="rect9758"
+ style="opacity:0.73899369;fill:url(#radialGradient9772);fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <path
+ d="m 866.7472,646.07035 1.91945,-0.11086 0.32595,-0.96072 1.19513,-1.14548 0.97784,1.10853 1.70216,0.25865 2.60756,-0.25865 0.50702,-0.99768 1.41243,0.36951 1.05027,1.29328 1.05027,0.44342 0,0.84987 -12.71186,0 z"
+ id="path9752"
+ style="fill:#000000;fill-opacity:1;stroke:none" />
+ <path
+ d="m 6.34375,7.03125 0,7.125 12.75,0 0,-7.125 -12.75,0 z m 0.71875,0.6875 11.125,0 0,5.71875 -11.125,0 0,-5.71875 z"
+ transform="matrix(1.018707,0,0,1.0633975,860.12972,632.15392)"
+ id="rect9748"
+ style="opacity:0.45911949;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter9873)" />
+ </g>
+ <g
+ transform="translate(-843.15385,882.99624)"
+ id="layer1-76">
+ <g
+ transform="matrix(1.6118599,0,0,1.6118599,-522.76477,-435.86589)"
+ mask="url(#mask3773)"
+ id="g8544">
+ <path
+ d="m 847.87034,708.6932 c -1.78875,0 -3.22236,1.30374 -3.22236,2.89165 l 0,1.55466 c 0,1.58791 1.43361,2.89165 3.22236,2.89165 l 2.90712,0 c 1.78875,0 3.22236,-1.30374 3.22236,-2.89165 l 0,-1.55466 c 0,-1.58791 -1.43361,-2.89165 -3.22236,-2.89165 z m 0.51649,1.76812 1.7863,0 c 1.10879,0 1.69598,0.40915 1.69598,1.39344 l 0,0.99498 c 0,0.9843 -0.66558,1.28893 -1.77437,1.28893 l -1.7863,0 c -1.10879,0 -1.59148,-0.34383 -1.59148,-1.32813 l 0,-0.99498 c 0,-0.98429 0.56108,-1.35424 1.66987,-1.35424 z"
+ id="rect8508"
+ style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.69803369;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 857.87034,708.6932 c -1.78875,0 -3.22236,1.30374 -3.22236,2.89165 l 0,1.55466 c 0,1.58791 1.43361,2.89165 3.22236,2.89165 l 2.90712,0 c 1.78875,0 3.22236,-1.30374 3.22236,-2.89165 l 0,-1.55466 c 0,-1.58791 -1.43361,-2.89165 -3.22236,-2.89165 z m 0.51649,1.76812 1.7863,0 c 1.10879,0 1.69598,0.40915 1.69598,1.39344 l 0,0.99498 c 0,0.9843 -0.66558,1.28893 -1.77437,1.28893 l -1.7863,0 c -1.10879,0 -1.59148,-0.34383 -1.59148,-1.32813 l 0,-0.99498 c 0,-0.98429 0.56108,-1.35424 1.66987,-1.35424 z"
+ id="path8520"
+ style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.69803369;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 9.90625,8.3125 c 0.219379,0.2493818 0.400172,0.5353409 0.53125,0.84375 l 1.21875,0 C 11.78881,8.8397468 11.967186,8.5700989 12.1875,8.3125 l -2.28125,0 z M 6.375,9.09375 C 5.9621997,9.4039663 5.725025,9.7591417 5.71875,10.0625 l -0.03125,1.25 c -0.0151,0.72807 1.26414,2.375 3.53125,2.375 l 3.6875,0 c 2.26711,0 3.46875,-1.61553 3.46875,-2.34375 l 0,-1.28125 c 0,-0.2949291 -0.211045,-0.6348842 -0.59375,-0.9375 l -0.4375,0 c -0.63503,0 -1.1133,0.14044 -1.40625,0.4375 0.224818,0.1572379 0.34375,0.3524935 0.34375,0.53125 l 0,0.75 c 0,0.45142 -0.90722,0.78125 -2.3125,0.78125 l -2.28125,0 C 8.28222,11.625 7.75,11.29515 7.75,10.84375 l 0,-0.6875 c 0,-0.1767274 0.1306645,-0.3924485 0.375,-0.5625 -0.2943153,-0.3314596 -0.7859446,-0.5 -1.4375,-0.5 l -0.3125,0 z"
+ transform="translate(843.28571,701.36218)"
+ id="path8522"
+ style="fill:#f4f4f5;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+ <g
+ transform="translate(-843.15389,954.64464)"
+ id="layer1-72">
+ <g
+ transform="translate(-0.03819,0)"
+ id="g8544-0">
+ <path
+ d="m 847.87034,708.6932 c -1.78875,0 -3.22236,1.30374 -3.22236,2.89165 l 0,1.55466 c 0,1.58791 1.43361,2.89165 3.22236,2.89165 l 2.90712,0 c 1.78875,0 3.22236,-1.30374 3.22236,-2.89165 l 0,-1.55466 c 0,-1.58791 -1.43361,-2.89165 -3.22236,-2.89165 z m 0.51649,1.76812 1.7863,0 c 1.10879,0 1.69598,0.40915 1.69598,1.39344 l 0,0.99498 c 0,0.9843 -0.66558,1.28893 -1.77437,1.28893 l -1.7863,0 c -1.10879,0 -1.59148,-0.34383 -1.59148,-1.32813 l 0,-0.99498 c 0,-0.98429 0.56108,-1.35424 1.66987,-1.35424 z"
+ id="rect8508-4"
+ style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.69803369;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 857.87034,708.6932 c -1.78875,0 -3.22236,1.30374 -3.22236,2.89165 l 0,1.55466 c 0,1.58791 1.43361,2.89165 3.22236,2.89165 l 2.90712,0 c 1.78875,0 3.22236,-1.30374 3.22236,-2.89165 l 0,-1.55466 c 0,-1.58791 -1.43361,-2.89165 -3.22236,-2.89165 z m 0.51649,1.76812 1.7863,0 c 1.10879,0 1.69598,0.40915 1.69598,1.39344 l 0,0.99498 c 0,0.9843 -0.66558,1.28893 -1.77437,1.28893 l -1.7863,0 c -1.10879,0 -1.59148,-0.34383 -1.59148,-1.32813 l 0,-0.99498 c 0,-0.98429 0.56108,-1.35424 1.66987,-1.35424 z"
+ id="path8520-0"
+ style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.69803369;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 9.90625,8.3125 c 0.219379,0.2493818 0.400172,0.5353409 0.53125,0.84375 l 1.21875,0 C 11.78881,8.8397468 11.967186,8.5700989 12.1875,8.3125 l -2.28125,0 z M 6.375,9.09375 C 5.9621997,9.4039663 5.725025,9.7591417 5.71875,10.0625 l -0.03125,1.25 c -0.0151,0.72807 1.26414,2.375 3.53125,2.375 l 3.6875,0 c 2.26711,0 3.46875,-1.61553 3.46875,-2.34375 l 0,-1.28125 c 0,-0.2949291 -0.211045,-0.6348842 -0.59375,-0.9375 l -0.4375,0 c -0.63503,0 -1.1133,0.14044 -1.40625,0.4375 0.224818,0.1572379 0.34375,0.3524935 0.34375,0.53125 l 0,0.75 c 0,0.45142 -0.90722,0.78125 -2.3125,0.78125 l -2.28125,0 C 8.28222,11.625 7.75,11.29515 7.75,10.84375 l 0,-0.6875 c 0,-0.1767274 0.1306645,-0.3924485 0.375,-0.5625 -0.2943153,-0.3314596 -0.7859446,-0.5 -1.4375,-0.5 l -0.3125,0 z"
+ transform="translate(843.28571,701.36218)"
+ id="path8522-7"
+ style="fill:#f4f4f5;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+ <g
+ transform="translate(-364.34044,1207.5749)"
+ id="layer1-85">
+ <g
+ transform="translate(20.359375,-0.98355932)"
+ id="g10495">
+ <path
+ d="m 353.50893,536.39789 0,5.04465 -7.1875,-7.14286 7.1875,-7.1875 0,4.24107 4.28571,0 0,-6.11607 5.17857,0 0,11.20536 z"
+ id="path9915"
+ style="fill:#373736;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ d="m 361.96875,525.23718 0,10.21875 -9.46875,-0.0625 0,5.0625 1,1 0,-5.0625 9.46875,0.0625 0,-11.21875 -1,0 z m -8.46875,1.875 -1,1 0,2.25 1,0 0,-3.25 z"
+ id="path10454"
+ style="opacity:0.6;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter10491)" />
+ <path
+ d="m 357.78125,525.23718 0,6.125 -3.28125,0 0,1 4.28125,0 0,-6.125 4.1875,0 0,-1 -5.1875,0 z m -4.28125,1.875 -7.1875,7.1875 1,1 6.1875,-6.1875 0,-2 z"
+ id="path10425"
+ style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter10487)" />
+ </g>
+ </g>
+ <g
+ transform="translate(-714.38007,1098.2114)"
+ id="layer1-65">
+ <g
+ transform="translate(26.036511,-0.0978784)"
+ id="g7675">
+ <path
+ d="m 691.68161,706.63153 -1.45209,12.6269 c 0,0 3.54369,-1.49312 6.50286,-0.88388 2.14658,0.44194 3.34613,1.38896 3.34613,1.38896 0,0 2.77792,-2.39911 6.12405,-1.6415 3.34613,0.75762 2.90418,0.69448 2.90418,0.69448 l -1.19955,-12.2481"
+ id="path7155"
+ style="fill:#52394e;fill-opacity:1;stroke:#52394e;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 692.06042,707.26287 -0.82075,10.60661 c 0,0 2.39912,-1.76777 4.9245,-1.19956 2.84205,0.63945 3.47239,1.76776 3.47239,1.76776 l 0,-12.6269 c 0,0 -2.58851,-1.89404 -4.86135,-0.82075 -2.27285,1.07329 -2.71479,2.27284 -2.71479,2.27284 z"
+ id="path7151"
+ style="fill:#ffffff;fill-opacity:1;stroke:#b1b2af;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ d="m 699.63656,706.06332 c 0,0 2.27285,-2.14658 4.98763,-1.13642 2.71479,1.01015 2.65165,2.0203 2.65165,2.0203 l 1.01016,10.79601 c 0,0 -1.95717,-1.26269 -4.29315,-0.69448 -2.33598,0.56821 -3.53553,1.76776 -3.53553,1.76776 z"
+ id="path7153"
+ style="fill:#ffffff;fill-opacity:1;stroke:#b1b2af;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ d="m 699.8891,706.56839 c 0,0 -0.31573,1.12962 2.28105,5.17626 2.65428,4.13625 2.07524,6.56677 2.07524,6.56677"
+ id="path7157"
+ style="fill:none;stroke:#c04848;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+ <g
+ transform="translate(-900.39782,1187.6647)"
+ id="layer1-68">
+ <path
+ d="m 2.7162576,15.606291 c 0.014982,-0.0061 0.030116,-0.01186 0.044947,-0.01833 0.044032,-0.0192 0.097586,-0.04461 0.1391489,-0.06714 0.029295,-0.01588 0.115542,-0.06645 0.08666,-0.04983 -1.0038452,0.57765 -1.2838827,0.741183 -0.8581766,0.492994 0.037046,-0.02158 0.073951,-0.0434 0.111137,-0.06473 C 2.6300793,15.67546 3.0195615,15.45057 3.4107098,15.228603 3.5742777,15.135783 3.7473,15.057838 3.9139685,14.970667 4.171548,14.829805 4.4327254,14.695431 4.6862561,14.547333 2.5032639,15.853906 3.593205,15.175217 3.8660407,15.017504 c 0.4751945,-0.274686 0.9514185,-0.555191 1.4317232,-0.823686 0.142362,-0.0764 0.2991256,-0.120806 0.4528415,-0.168535 0.092107,-0.02377 0.1895155,-0.05226 0.2845027,-0.03273 0.1019002,0.05033 0.1453779,0.142963 0.182287,0.24448 0.042624,0.163605 0.049796,0.334568 0.06126,0.502654 0.01013,0.221059 0.018945,0.44211 0.029896,0.663161 0.016456,0.256167 0.00893,0.51265 -0.014887,0.767993 -0.02608,0.262109 -0.085432,0.519124 -0.1458886,0.774983 -0.058063,0.245373 -0.1262914,0.488199 -0.1847641,0.733455 -0.048858,0.231812 -0.099166,0.463109 -0.1648223,0.690807 -0.060983,0.207897 -0.1436609,0.408045 -0.224407,0.60874 -0.076214,0.195637 -0.1765255,0.379946 -0.2875951,0.55762 -0.1229874,0.189026 -0.2690224,0.36206 -0.4187308,0.530284 -0.1080837,0.122432 -0.2253887,0.23643 -0.3582161,0.331605 -0.9365499,0.568706 -0.9088579,0.650165 -1.6646157,0.742537 -0.1617523,0.01598 -0.3238321,0.02852 -0.4862917,0.03398 -0.1146667,-0.0056 -0.2089106,-0.0583 -0.3027264,-0.11981 C 1.9620107,20.999097 1.8715075,20.938702 1.7802895,20.879209 1.6972907,20.817586 1.653071,20.717491 1.6033139,20.62964 1.5322312,20.50861 1.4548867,20.391629 1.3913122,20.26633 c -0.07264,-0.167297 -0.077499,-0.350154 -0.075953,-0.529538 0.00745,-0.273623 0.081469,-0.538238 0.1656536,-0.796711 0.1177555,-0.330292 0.2815884,-0.640339 0.4449819,-0.949575 0.1838689,-0.336162 0.3698925,-0.67143 0.574008,-0.995796 0.1722137,-0.280536 0.3960701,-0.521103 0.6240914,-0.756187 0.2471914,-0.251128 0.5159797,-0.479759 0.7906068,-0.700066 0.313975,-0.239169 0.6487409,-0.449607 0.9828024,-0.659265 0.2562013,-0.152136 0.5076318,-0.311266 0.7522445,-0.481369 0.1960321,-0.137571 0.3878661,-0.280917 0.5829129,-0.419856 0.1499281,-0.112844 0.3077473,-0.213969 0.4533425,-0.332505 0.1496353,-0.126105 0.3009994,-0.250081 0.4379018,-0.390134 0.1195688,-0.131818 0.2271819,-0.274088 0.3189983,-0.426504 0.062814,-0.102531 0.113777,-0.2116 0.1599077,-0.322448 0.063539,-0.144198 0.1109773,-0.294886 0.1634422,-0.443344 0.064032,-0.188872 0.126562,-0.378363 0.1864819,-0.568603 0.069997,-0.218007 0.1527336,-0.431587 0.2355382,-0.644965 0.054774,-0.155522 0.1151256,-0.309556 0.1523278,-0.470447 0.026038,-0.144681 0.049854,-0.290434 0.045029,-0.4377538 C 8.3728056,9.8149502 8.2986317,9.7164754 8.2186271,9.6233765 8.1527242,9.5612044 8.0878966,9.4961292 7.9999384,9.4682539 7.8943613,9.4485021 7.7961169,9.4921617 7.7002258,9.5308343 7.672613,9.5438024 7.6443143,9.5554004 7.6173876,9.5697387 7.5876293,9.5855848 7.501067,9.6379656 7.530365,9.621284 7.854214,9.4368913 8.1754789,9.2479294 8.5010524,9.0665988 c 0.033437,-0.018623 -0.06322,0.04321 -0.093763,0.066276 C 8.3324417,9.1893972 8.3044135,9.2171152 8.2347401,9.279519 8.0586202,9.4483447 7.9233976,9.6519943 7.8010037,9.8614313 7.6446745,10.143055 7.5121438,10.43663 7.4008933,10.738685 7.2913871,11.042517 7.242477,11.362648 7.1966248,11.68095 c -0.046701,0.306129 -0.098682,0.611218 -0.1604766,0.914653 -0.069932,0.311062 -0.1303383,0.624124 -0.2053817,0.934029 -0.053132,0.217313 -0.1256675,0.428574 -0.2144463,0.633693 -0.070224,0.153442 -0.1444406,0.304866 -0.2009688,0.464022 -0.023085,0.08928 -0.044673,0.04986 -0.027236,0.02219 0.00703,-0.01116 0.023065,-0.01327 0.03568,-0.01714 0.055026,-0.01686 0.1124832,-0.02441 0.1687912,-0.03631 0.2495019,-0.05445 0.4969053,-0.117852 0.7472309,-0.168556 0.2078164,-0.04257 0.4206442,-0.04789 0.6319581,-0.05484 0.1112543,0.0017 0.222991,-0.008 0.3342245,-0.0037 0.010785,4.09e-4 0.1315998,0.01128 0.1444173,0.01242 0.085402,0.01413 0.1710335,0.02622 0.2517865,0.05899 0.069322,0.0321 0.035224,0.0175 0.1021532,0.04413 0.096055,0.03846 0.1784192,0.09809 0.2647994,0.153327 0.073649,0.04237 0.1387492,0.09149 0.1985346,0.151826 0.069801,0.07284 0.1257312,0.157748 0.1829061,0.240546 0.075399,0.100562 0.1419414,0.207061 0.2040451,0.316171 0.053096,0.100156 0.083151,0.209652 0.117392,0.317073 0.028897,0.07491 0.054643,0.150188 0.066664,0.229714 0.00421,0.07158 0.015172,0.141967 0.026594,0.212643 0.011359,0.02911 2.46e-4,0.06649 0.011714,0.09523 0.00541,0.01355 0.015129,-0.02494 0.023065,-0.03718 0.011365,-0.01752 0.025663,-0.03295 0.038495,-0.04943 -1.6473699,0.951732 -1.0951999,0.71807 -0.7535789,0.329888 0.1826495,-0.207543 0.3377825,-0.433409 0.4931041,-0.661483 0.3230555,-0.499315 0.6008615,-1.025465 0.8693005,-1.555496 0.221221,-0.454212 0.697738,-1.414258 1.360067,-1.001832 0.09569,0.09864 0.130656,0.235312 0.170828,0.363106 0.05204,0.175681 0.102576,0.351999 0.149221,0.529214 0.04699,0.18583 0.08151,0.37423 0.112944,0.563198 0.02677,0.237133 0.05235,0.47409 0.08814,0.710058 0.03428,0.212668 0.06367,0.426352 0.108012,0.637221 0.04557,0.169703 0.07868,0.34187 0.105252,0.515444 0.02396,0.171647 0.0343,0.344972 0.04747,0.517733 0.01488,0.200315 0.04953,0.398524 0.07848,0.597144 0.03496,0.229975 0.07662,0.458743 0.120696,0.687112 0.03845,0.200967 0.0777,0.401683 0.134613,0.598349 0.0354,0.13636 0.08742,0.26712 0.140805,0.39718 0.03573,0.09033 0.07249,0.179719 0.116236,0.266461 0.03868,0.06517 0.07198,0.136032 0.124362,0.191551 0.03586,0.04701 0.07495,0.09145 0.110956,0.138208 0,0 -1.101429,0.656126 -1.101429,0.656126 l 0,0 c -0.03528,-0.04495 -0.06752,-0.09205 -0.102723,-0.137022 -0.05344,-0.0685 -0.09652,-0.143971 -0.136931,-0.220759 -0.04265,-0.09072 -0.08493,-0.180839 -0.113685,-0.277246 -0.05547,-0.135393 -0.09871,-0.27549 -0.133505,-0.417596 -0.05566,-0.202218 -0.09403,-0.407487 -0.128609,-0.614261 -0.04161,-0.229361 -0.09004,-0.457466 -0.127185,-0.687658 -0.034,-0.200007 -0.06664,-0.400419 -0.09074,-0.601875 -0.01332,-0.169591 -0.02923,-0.339002 -0.04597,-0.508257 -0.02563,-0.172233 -0.05242,-0.344519 -0.09624,-0.513271 -0.04161,-0.214841 -0.06837,-0.432032 -0.102606,-0.64811 -0.03153,-0.234649 -0.06223,-0.469334 -0.09324,-0.704051 -0.03109,-0.185035 -0.07426,-0.367436 -0.112127,-0.551139 -0.04449,-0.173758 -0.09469,-0.346743 -0.151172,-0.516884 -0.02349,-0.06181 -0.04615,-0.124371 -0.07439,-0.184247 -0.0027,-0.0058 -0.02385,-0.05109 -0.03331,-0.05446 -0.0038,-0.0014 -0.0056,0.0059 -0.0083,0.0089 -0.04238,0.431954 -0.01018,0.02835 1.044188,-0.598079 0.01795,-0.01066 -0.03748,0.01977 -0.05228,0.03449 -0.08975,0.08926 -0.153018,0.24089 -0.225393,0.341311 -0.31381,0.519598 -0.596513,1.057134 -0.904591,1.580105 -0.138226,0.221515 -0.277079,0.440545 -0.431606,0.651159 -0.01081,0.01474 -0.15741,0.215292 -0.191992,0.237176 -0.3772716,0.238747 -0.7672828,0.456741 -1.1509239,0.685111 -0.02887,0.0019 -0.058438,0.0124 -0.08661,0.0058 -0.026874,-0.0063 -0.050191,-0.02451 -0.070937,-0.04271 -0.052286,-0.04588 -0.053976,-0.09572 -0.057642,-0.158149 -0.00887,-0.0718 -0.026621,-0.142245 -0.026236,-0.214908 -0.00741,-0.07405 -0.025133,-0.145375 -0.052512,-0.214763 C 8.6302021,16.171687 8.6048321,16.070436 8.5574511,15.977141 8.5005391,15.870804 8.4364921,15.768984 8.3625577,15.673459 8.3058307,15.598729 8.2492331,15.522867 8.1810749,15.458022 8.1251659,15.406392 8.061785,15.365912 7.998907,15.323277 7.921282,15.269527 7.8377632,15.225837 7.750429,15.189793 c -0.1039986,-0.04318 -0.2122199,-0.06926 -0.325112,-0.0758 -0.1533511,-0.01046 -0.3072442,-0.0072 -0.4608359,-0.0046 -0.2041835,0.0058 -0.4080615,0.02076 -0.6082629,0.06387 -0.2525206,0.05286 -0.5027377,0.115275 -0.7545027,0.171468 -0.057625,0.0097 -0.1476894,0.03013 -0.2085337,0.02141 -0.077663,-0.01112 -0.1597738,-0.07269 -0.1470492,-0.160339 0.00262,-0.01803 0.014679,-0.03336 0.022018,-0.05004 0.033638,-0.06959 0.058539,-0.142074 0.090848,-0.212291 0.040671,-0.08839 0.087761,-0.17386 0.1263158,-0.263273 0.096033,-0.201276 0.1759203,-0.40906 0.2395654,-0.622927 0.090072,-0.307158 0.1542067,-0.620475 0.2222366,-0.933056 C 6.0042224,12.823173 6.0498604,12.520549 6.102327,12.21873 6.15093,11.892267 6.2028259,11.563462 6.3082068,11.249755 6.4103983,10.945225 6.5353501,10.649404 6.6797727,10.36247 6.7961866,10.144795 6.9232919,9.9336751 7.0902422,9.75003 7.5351459,9.3040342 8.1056686,8.9955291 8.6884875,8.7620282 c 0.1256889,-0.036068 0.2543632,-0.060833 0.3757558,0.00346 0.090074,0.055422 0.1667795,0.1286976 0.2358293,0.2085297 0.094252,0.116132 0.178679,0.2377166 0.2036035,0.3889655 0.013427,0.1577518 -0.011563,0.3119029 -0.031747,0.4682589 -0.010529,0.057463 -0.016746,0.099176 -0.032934,0.1556224 -0.033401,0.1164623 -0.088218,0.2259293 -0.1246818,0.3413883 -0.08508,0.210344 -0.1722066,0.420098 -0.2404575,0.636732 -0.05771,0.189481 -0.1147613,0.379157 -0.1751629,0.567705 -0.050196,0.148813 -0.1005161,0.297497 -0.1471959,0.447455 -0.053123,0.11273 -0.089635,0.233814 -0.1582751,0.339371 -0.096677,0.159039 -0.2018903,0.312507 -0.3232974,0.454109 -0.1258605,0.151197 -0.275562,0.276538 -0.4247797,0.404024 -0.045588,0.03882 -0.089538,0.07961 -0.1363751,0.11691 -0.1032697,0.08224 -0.2199272,0.145039 -0.323707,0.226493 -0.1983624,0.149887 0.023963,-0.01524 -0.183262,0.129644 -0.1386032,0.0969 -0.2707178,0.203158 -0.4112703,0.2974 -0.2489405,0.177555 -0.5042078,0.345361 -0.7704442,0.496145 -0.3367592,0.206226 -0.6724487,0.415458 -0.991997,0.64776 -0.2723213,0.214778 -0.5364281,0.440516 -0.7857476,0.681775 -0.2271957,0.231058 -0.4562523,0.46292 -0.6347064,0.735237 -0.216352,0.317721 -0.408533,0.650929 -0.5897197,0.989826 -0.1558498,0.301637 -0.3127824,0.603033 -0.4306315,0.922183 -0.084928,0.243041 -0.1568744,0.493451 -0.1660699,0.752465 0.00113,0.158061 0.00729,0.320518 0.065694,0.469435 0.05965,0.123148 0.1362585,0.236855 0.2074265,0.353521 0.046765,0.07192 0.090011,0.149767 0.1629358,0.198684 0.08101,0.06413 0.1666965,0.122086 0.2574145,0.171736 0.088055,0.04281 0.1695465,0.06715 0.2686271,0.05993 0.1515264,-0.0012 0.3032783,-0.0066 0.4535735,-0.02736 0.1103917,-0.01631 0.2201976,-0.03396 0.3278808,-0.06409 0.4145129,-0.115996 1.0197914,-0.60846 -0.8266012,0.516908 0.1478191,-0.07849 0.2650675,-0.184499 0.3818233,-0.303699 0.151761,-0.164142 0.3038857,-0.328394 0.4326506,-0.511896 0.107296,-0.1733 0.2140082,-0.347559 0.2928106,-0.536247 0.080229,-0.199643 0.1698965,-0.395509 0.2334674,-0.601419 0.073219,-0.224178 0.1261847,-0.45457 0.1742457,-0.685327 0.054259,-0.247041 0.1255423,-0.489938 0.1861619,-0.735462 0.060901,-0.251514 0.1218702,-0.503683 0.1555321,-0.760603 0.024278,-0.248577 0.033736,-0.498072 0.014942,-0.747532 -0.012474,-0.218845 -0.024976,-0.437614 -0.035828,-0.656534 -0.013863,-0.15431 -0.027381,-0.310524 -0.064487,-0.461133 -0.019344,-0.04998 -0.042869,-0.128433 -0.1102792,-0.113455 -0.082695,0.01604 -0.1659707,0.02956 -0.2455245,0.05872 -0.1468592,0.04807 -0.2935592,0.09717 -0.4257726,0.179398 -0.1044819,0.05858 -0.061879,0.03454 -0.1701311,0.0959 -0.031925,0.0181 -0.1275071,0.07272 -0.095761,0.05431 0.3172726,-0.183974 0.6350084,-0.367149 0.9523446,-0.551014 0.037701,-0.02184 -0.075626,0.0433 -0.1134385,0.06495 -0.3883499,0.224961 -0.7766997,0.449922 -1.1650496,0.674883 -0.2573702,0.143147 -0.5166836,0.282804 -0.7769328,0.42064 -0.1266246,0.06474 -0.2537499,0.128578 -0.3794392,0.195128 -0.041511,0.02198 -0.1646218,0.09051 -0.1240878,0.06677 0.065161,-0.03815 1.3501761,-0.781852 0.8252087,-0.478022 -0.4634021,0.276695 -0.3115777,0.186742 -1.2613365,0.729481 -0.099927,0.0571 -0.208062,0.102156 -0.3188431,0.132947 0,0 1.0158165,-0.776752 1.0158165,-0.776752 z"
+ transform="translate(900.42859,684.2193)"
+ id="path7202"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <g
+ transform="translate(-0.1875,0.375)"
+ id="g3868">
+ <path
+ d="m 888.30688,690.10346 -2.60119,12.43889 5.91169,1.23434 2.57512,-12.50165"
+ transform="matrix(0.9138951,0.02916988,-0.12956575,1.1023997,194.56326,-104.29886)"
+ mask="url(#mask3836)"
+ id="path7210"
+ style="fill:url(#linearGradient3873);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.50066453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 912.90679,696.01618 0.30405,5.25331 2.08892,0.60935 2.98991,-4.27396"
+ id="path3842"
+ style="fill:url(#radialGradient3875);fill-opacity:1;stroke:#000000;stroke-width:0.45993432;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 913.18227,701.08114 0.31101,3.10057 1.90916,-2.43627"
+ id="path3852"
+ style="fill:#313131;fill-opacity:1;stroke:#000000;stroke-width:0.45736727;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+ <rect
+ width="20.883707"
+ height="17.976885"
+ x="0.58360565"
+ y="1945.7407"
+ id="rect6294"
+ style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#8c8e89;stroke-width:1.03740442;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="17.572828"
+ height="2.1966035"
+ x="2.2779477"
+ y="1947.4938"
+ id="rect6055"
+ style="fill:#a0bdd9;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <rect
+ width="3.2949049"
+ height="11.035022"
+ x="2.2779477"
+ y="1950.7856"
+ id="rect6057"
+ style="fill:#cfd0c8;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <rect
+ width="13.163168"
+ height="12.125098"
+ x="6.6600266"
+ y="1949.6956"
+ id="rect6059"
+ style="fill:#f0f2eb;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <path
+ d="m 6.1259087,1961.2303 0,-13.1952"
+ id="path6061"
+ style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.09438753;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 11.32115,1961.7717 0,-14.4152"
+ id="path6061-6"
+ style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 10.809539,1961.2225 0,-13.1952"
+ id="path6061-65"
+ style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.09830177;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 16.148779,1961.2225 0,-13.1952"
+ id="path6061-5"
+ style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.09830177;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 19.292723,1953.4289 -16.456733,0"
+ id="path6061-68"
+ style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.10716188;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 19.300499,1950.2395 -16.4734053,0"
+ id="path6061-68-8"
+ style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.09830177;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 19.292723,1956.7927 -16.456733,0"
+ id="path6061-68-84"
+ style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.10716188;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 19.292723,1961.2225 -16.456733,0"
+ id="path6061-68-9"
+ style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.10716188;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <g
+ transform="translate(-291.88242,-521.02797)"
+ id="layer1-05">
+ <g
+ transform="translate(-37.98214,-0.06250444)"
+ id="g7123">
+ <path
+ d="m 7.7678573,8.5848217 a 8.3705359,8.3705359 0 1 1 -16.7410717,0 8.3705359,8.3705359 0 1 1 16.7410717,0 z"
+ transform="matrix(1.1399776,0,0,1.1399776,413.66918,522.63818)"
+ id="path6494"
+ style="fill:url(#linearGradient7130);fill-opacity:1;fill-rule:nonzero;stroke:#1d497d;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 414.36607,528.58539 0.625,1.65179 -0.9375,0.71429 -0.89286,0.80357 0.84822,1.51785 2.00893,0.89286 0.58035,3.125 0.80358,2.00893 1.02678,-0.89286 0.80357,-2.36607 0.0446,-1.38393 0.75893,-1.07143 -1.25,-1.875 -1.25,-1.25 -1.60714,-1.38392 z"
+ id="path7012"
+ style="fill:#a2b52f;fill-opacity:1;stroke:none" />
+ <path
+ d="m 406.86607,533.58539 0.58036,2.8125 0.625,0.80358 0.75893,2.36607 0.80357,0.53571 0.58036,-2.27678 0.89285,-0.89286 0.71429,-0.89286 -1.16072,-1.16071 -0.98214,-1.25 -1.20536,-0.66965 -1.83035,-0.26785 -0.80357,-1.11607 -0.84822,-0.66965 1.875,-0.75893 0.625,-1.02678 0.9375,-0.66964 1.38393,-0.89286 0.58036,-0.98214 -2.09822,-0.40179 -0.84821,-0.80357 -1.16072,1.42857 -1.16071,1.38393 -0.3125,1.69643 -0.53571,1.02678 2.09821,1.78572 z"
+ id="path7014"
+ style="fill:#a2b52f;fill-opacity:1;stroke:none" />
+ <path
+ d="m 410.16964,524.29968 1.20536,1.875 1.20536,-0.9375 1.5625,-0.98214 -0.22322,-0.9375 -2.76785,0.0893 z"
+ id="path7016"
+ style="fill:#a2b52f;fill-opacity:1;stroke:none" />
+ <path
+ d="m 415.125,527.82647 1.42857,-0.40179 -0.0446,-1.78571 1.33929,-0.35715 1.02678,0.35715 0.89286,1.25 1.29464,1.60714 0.75893,1.83036 -0.13393,1.11607 -1.42857,1.02678 -0.98214,-1.47321 -0.89286,-1.83036 -1.33929,-0.75893 z"
+ id="path7018"
+ style="fill:#a2b52f;fill-opacity:1;stroke:none" />
+ </g>
+ </g>
+ <g
+ transform="translate(-699.478,-632.13055)"
+ id="layer1-4">
+ <text
+ x="861.17706"
+ y="650.73999"
+ transform="scale(0.90019997,1.1108643)"
+ id="text4348"
+ xml:space="preserve"
+ style="font-size:15.19591999px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient4379);fill-opacity:1;stroke:#1d201d;stroke-width:0.48778871;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
+ x="861.17706"
+ y="650.73999"
+ id="tspan4350"
+ style="font-weight:bold;fill:url(#linearGradient4379);fill-opacity:1;stroke:#1d201d;stroke-width:0.48778871;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">W</tspan></text>
+ <path
+ d="m -4.6088209,10.604217 a 10.196227,10.196227 0 1 1 -20.3924541,0 10.196227,10.196227 0 1 1 20.3924541,0 z"
+ transform="matrix(0.87014489,0,0,0.87014489,795.88291,706.29079)"
+ id="path3836"
+ style="fill:none;stroke:#c32f2f;stroke-width:2.06862092;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="M 2.6516504,8.5523442 19.571706,13.981914"
+ transform="translate(771.85712,704.2193)"
+ id="path4346"
+ style="fill:none;stroke:#c32f2f;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ transform="translate(-817.01734,-569.02475)"
+ id="layer1-12">
+ <g
+ transform="translate(65.25943,0.00449032)"
+ id="g6449">
+ <rect
+ width="16.141386"
+ height="19.087818"
+ x="824.81775"
+ y="714.24237"
+ id="rect5927"
+ style="opacity:0.87735847;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#cccdca;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="13.214286"
+ height="16.294643"
+ x="826.21429"
+ y="715.54968"
+ id="rect6437"
+ style="opacity:0.87735847;fill:url(#linearGradient6454);fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <path
+ d="m 835.61419,718.03653 c 0,0 -2.85604,2.15041 -2.88205,5.68281 -0.0434,5.8954 6.51786,6.38393 6.51786,6.38393 l 0,2.99107 5.51339,-5.51339 -5.55803,-5.55804 0,3.83929 c 0,0 -4.49554,0.91071 -4.71875,-2.39286 -0.1521,-1.68723 -0.19967,-3.02945 1.12758,-5.43281 z"
+ id="path6447"
+ style="fill:#127ea5;fill-opacity:1;stroke:#003553;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+ <g
+ transform="matrix(1.0182686,0,0,1.0182686,-766.56233,-516.75536)"
+ id="layer1-61">
+ <g
+ transform="matrix(0.87945853,0,0,0.87945853,60.516821,83.916706)"
+ id="g11129">
+ <rect
+ width="14.18633"
+ height="17.014757"
+ x="869.68085"
+ y="725.56744"
+ id="rect10538"
+ style="fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#878984;stroke-linejoin:round;stroke-opacity:1" />
+ <rect
+ width="11.048544"
+ height="14.097941"
+ x="871.19214"
+ y="726.98163"
+ id="rect11048"
+ style="fill:#eaeaea;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <rect
+ width="8.9714174"
+ height="1.1048543"
+ x="872.24414"
+ y="729.05878"
+ id="rect11050"
+ style="fill:#c6c6c5;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <rect
+ width="8.9714174"
+ height="1.1048543"
+ x="872.24414"
+ y="731.05878"
+ id="rect11052"
+ style="fill:#c6c6c5;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <rect
+ width="8.9714174"
+ height="1.1048543"
+ x="872.24414"
+ y="735.05878"
+ id="rect11054"
+ style="fill:#c6c6c5;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <g
+ id="g11125">
+ <path
+ d="m 880.00066,736.45436 9.30287,-9.43545 2.45278,2.34229 -9.30287,9.25867 -3.97748,1.67938 z"
+ id="path11075"
+ style="fill:url(#linearGradient11142);fill-opacity:1;stroke:#804f01;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:2;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 878.68802,738.78561 -1.02751,2.33124 2.37543,-1.0938 z"
+ id="path11085"
+ style="fill:#000000;fill-opacity:1;stroke:none" />
+ </g>
+ <g
+ id="g11121">
+ <path
+ d="m 870.39783,732.42847 -2.45576,2.45578 0,1.99046 1.62855,0 2.63673,-2.63672"
+ id="path11097"
+ style="fill:url(#linearGradient11144);fill-opacity:1;stroke:#878984;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 11.91033,5.9796119 a 4.9276505,4.9276505 0 1 1 -9.8553011,0 4.9276505,4.9276505 0 1 1 9.8553011,0 z"
+ transform="matrix(0.92061147,0,0,0.92061147,867.88725,724.95103)"
+ id="path11101"
+ style="fill:url(#radialGradient11146);fill-opacity:1;fill-rule:nonzero;stroke:#878984;stroke-opacity:1" />
+ </g>
+ </g>
+ </g>
+ <g
+ transform="matrix(-1,0,0,1,94.095014,288.15611)"
+ id="g4230">
+ <rect
+ width="11.551277"
+ height="2.0031219"
+ x="7.7045889"
+ y="10.508148"
+ id="rect8987-09"
+ style="fill:url(#linearGradient3195-9);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="11.551277"
+ height="2.0031219"
+ x="7.706481"
+ y="3.4537961"
+ id="rect8987-2-7"
+ style="fill:url(#linearGradient3192-4);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="11.551277"
+ height="2.0031219"
+ x="7.7958364"
+ y="17.516296"
+ id="rect8987-5-0"
+ style="fill:url(#linearGradient3189-4);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="2.2180145"
+ height="2.2927809"
+ x="2.3276966"
+ y="3.282562"
+ id="rect3039-8"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="2.2180145"
+ height="2.2927809"
+ x="2.3276966"
+ y="10.337555"
+ id="rect3039-7-6"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="2.2180145"
+ height="2.2927809"
+ x="2.3276966"
+ y="17.345551"
+ id="rect3039-6-2"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ transform="translate(-38.164291,3.0531433)"
+ id="g4305">
+ <text
+ x="126.79857"
+ y="363.06299"
+ id="text8953-2"
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="126.79857"
+ y="363.06299"
+ id="tspan8955-7"
+ style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">1</tspan></text>
+ <text
+ x="127.04527"
+ y="370.06119"
+ id="text8953-1-3"
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="127.04527"
+ y="370.06119"
+ id="tspan8955-5-4"
+ style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">2</tspan></text>
+ <text
+ x="127.01372"
+ y="377.03754"
+ id="text8953-8-8"
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
+ x="127.01372"
+ y="377.03754"
+ id="tspan8955-55-0"
+ style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">3</tspan></text>
+ <rect
+ width="11.551277"
+ height="2.0031219"
+ x="-124.33952"
+ y="367.58789"
+ transform="scale(-1,1)"
+ id="rect8987-7"
+ style="fill:url(#linearGradient4316);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="11.551277"
+ height="2.0031219"
+ x="-124.33763"
+ y="360.53354"
+ transform="scale(-1,1)"
+ id="rect8987-2-6"
+ style="fill:url(#linearGradient4318);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="11.551277"
+ height="2.0031219"
+ x="-124.24828"
+ y="374.59604"
+ transform="scale(-1,1)"
+ id="rect8987-5-81"
+ style="fill:url(#linearGradient4320);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ transform="matrix(-1,0,0,1,94.28683,432.19934)"
+ id="g4372">
+ <rect
+ width="9.2080336"
+ height="2.0841758"
+ x="9.9951382"
+ y="10.467622"
+ id="rect8987-6"
+ style="fill:url(#linearGradient3195-1);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89300001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="16.296982"
+ height="1.8709884"
+ x="2.8947093"
+ y="3.5198629"
+ id="rect8987-2-3"
+ style="fill:url(#linearGradient3192-43);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89300001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="16.168335"
+ height="1.874174"
+ x="3.1143055"
+ y="17.58077"
+ id="rect8987-5-7"
+ style="fill:url(#linearGradient3189-2);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89300001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 6.1401918,11.71699 -2.6276419,1.51707 -2.6276417,1.51707 0,-3.03414 0,-3.0341389 2.6276419,1.5170699 z"
+ transform="matrix(0.90902794,0,0,0.90902794,2.2305609,0.83286798)"
+ id="path3978-7"
+ style="fill:url(#linearGradient3986-8);fill-opacity:1;fill-rule:nonzero;stroke:#e0926b;stroke-width:0.89300001;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ transform="matrix(-1,0,0,1,982.4349,-208.7368)"
+ id="layer1-53">
+ <g
+ transform="translate(65.25943,0.00449032)"
+ id="g6449-3">
+ <rect
+ width="16.141386"
+ height="19.087818"
+ x="824.81775"
+ y="714.24237"
+ id="rect5927-5"
+ style="opacity:0.87735847;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#cccdca;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="13.214286"
+ height="16.294643"
+ x="826.21429"
+ y="715.54968"
+ id="rect6437-5"
+ style="opacity:0.87735847;fill:url(#linearGradient6454-9);fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <path
+ d="m 835.61419,718.03653 c 0,0 -2.85604,2.15041 -2.88205,5.68281 -0.0434,5.8954 6.51786,6.38393 6.51786,6.38393 l 0,2.99107 5.51339,-5.51339 -5.55803,-5.55804 0,3.83929 c 0,0 -4.49554,0.91071 -4.71875,-2.39286 -0.1521,-1.68723 -0.19967,-3.02945 1.12758,-5.43281 z"
+ id="path6447-9"
+ style="fill:#127ea5;fill-opacity:1;stroke:#003553;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-big.svg b/extensions/WikiEditor/modules/images/toolbar/format-big.svg
new file mode 100644
index 00000000..68d0193a
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-big.svg
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg11148"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-big.svg">
+ <defs
+ id="defs11150">
+ <filter
+ inkscape:collect="always"
+ id="filter11711">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.40047554"
+ id="feGaussianBlur11713" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter11735">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.22248641"
+ id="feGaussianBlur11737" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627418"
+ inkscape:cx="3.4653374"
+ inkscape:cy="10.767942"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata11153">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-823.28571,-707.07648)">
+ <text
+ xml:space="preserve"
+ style="font-size:10.12465572px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.70751727;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="835.85748"
+ y="718.30353"
+ id="text11171"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan11173"
+ x="835.85748"
+ y="718.30353"
+ style="font-weight:bold;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.70751727;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">+</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text11693"
+ y="725.07898"
+ x="825.39417"
+ style="font-size:18.17164040000000114px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#212222;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ xml:space="preserve"><tspan
+ style="font-weight:normal;fill:#212222;fill-opacity:1;-inkscape-font-specification:DejaVu Serif"
+ y="725.07898"
+ x="825.39417"
+ id="tspan11695"
+ sodipodi:role="line">A</tspan></text>
+ <path
+ style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter11735);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ d="m 831.84511,710.73333 4.90625,12.71875 0.28125,0 -4.875,-12.71875 -0.3125,0 z m -1.5,1.8125 -2.59375,6.78125 0.6875,0 2.25,-5.875 -0.34375,-0.90625 z m -3,7.78125 -1.1875,3.125 0.6875,0 1,-2.625 5.6875,0 -0.1875,-0.5 -6,0 z m 0.375,3.65625 0,0.5 -3.5,0 0,0.5 4,0 0,-1 -0.5,0 z m 10.40625,0 0,0.5 -4.65625,0 0,0.5 5.15625,0 0,-1 -0.5,0 z"
+ id="text11167"
+ inkscape:connector-curvature="0"
+ transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)" />
+ <path
+ style="font-size:19.56149483000000089px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter11711);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;opacity:0.6918239"
+ d="m 830.51875,710.76366 -5.0625,13.21875 -1.25,0 0,1.03125 0.5,0 0,-0.5 1.25,0 5.0625,-13.25 1.3125,0 -0.1875,-0.5 -1.625,0 z m 0.8125,2.8125 -0.15625,0.40625 2.28125,5.875 -4.53125,0 -0.1875,0.5 5.21875,0 -2.625,-6.78125 z m 2.6875,7.78125 1,2.625 -1.5625,0 0,1.03125 0.5,0 0,-0.5 1.5625,0 -1.1875,-3.15625 -0.3125,0 z m -6.6875,2.625 -0.1875,0.53125 1.0625,0 0,-0.53125 -0.875,0 z m 10.1875,0 0.21875,0.53125 0.875,0 0,-0.53125 -1.09375,0 z"
+ id="text11683"
+ inkscape:connector-curvature="0"
+ transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-A.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-A.svg
new file mode 100644
index 00000000..83a0cb81
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-bold-A.svg
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg4055"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-bold-a.svg">
+ <defs
+ id="defs4057">
+ <filter
+ id="filter5056"
+ inkscape:label="Diffuse light"
+ inkscape:menu="ABCs"
+ inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur5058"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ id="feComposite5064"
+ in2="SourceGraphic"
+ k1="1"
+ in="result5"
+ result="result4"
+ operator="arithmetic"
+ k2="0"
+ k3="0.6" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3809">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.30164062"
+ id="feGaussianBlur3811" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3837">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.4021875"
+ id="feGaussianBlur3839" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.4"
+ inkscape:cx="10.896612"
+ inkscape:cy="10.315032"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4060">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-523.28571,-512.07648)">
+ <text
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="566.91028"
+ y="492.98608"
+ id="text5195"
+ sodipodi:linespacing="125%"
+ transform="scale(0.93034878,1.0748657)"><tspan
+ sodipodi:role="line"
+ id="tspan5197"
+ x="566.91028"
+ y="492.98608"
+ style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">A</tspan></text>
+ <path
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3809);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ d="m 532.75446,516.10773 -4.46875,12.65625 -1,0 0,1.125 0.5,0 0,-0.625 1,0 4.46875,-12.65625 1.625,0 -0.1875,-0.5 -1.9375,0 z m 0.4375,3.96875 -0.15625,0.46875 1.46875,4.28125 -3,0 -0.1875,0.5 3.6875,0 -1.8125,-5.25 z m 1.90625,6.375 0.8125,2.3125 -1.1875,0 0,1.125 0.5,0 0,-0.625 1.1875,0 -1,-2.8125 -0.3125,0 z m -5,2.3125 -0.1875,0.5 0.9375,0 0,-0.5 -0.75,0 z m 9.40625,0 0.1875,0.5 0.625,0 0,-0.5 -0.8125,0 z"
+ id="text3023"
+ inkscape:connector-curvature="0" />
+ <path
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3837);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ d="m 534.37946,516.10773 4.3125,12.15625 0.3125,0 -4.3125,-12.15625 -0.3125,0 z m -2.1875,2.9375 -1.875,5.28125 0.6875,0 1.53125,-4.28125 -0.34375,-1 z m -2.28125,6.40625 -1,2.8125 0.6875,0 0.8125,-2.3125 4.1875,0 -0.1875,-0.5 -4.5,0 z m 0.4375,3.3125 0,0.625 -3.0625,0 0,0.5 3.5625,0 0,-1.125 -0.5,0 z m 9.46875,0 0,0.625 -5.09375,0 0,0.5 5.59375,0 0,-1.125 -0.5,0 z"
+ id="text3027"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-B.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-B.svg
new file mode 100644
index 00000000..ef04e499
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-bold-B.svg
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg4055"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-bold-b.svg">
+ <defs
+ id="defs4057">
+ <filter
+ id="filter5056"
+ inkscape:label="Diffuse light"
+ inkscape:menu="ABCs"
+ inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur5058"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ id="feComposite5064"
+ in2="SourceGraphic"
+ k1="1"
+ in="result5"
+ result="result4"
+ operator="arithmetic"
+ k2="0"
+ k3="0.6" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter5232">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.29260706"
+ id="feGaussianBlur5234" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter5240">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.35243056"
+ id="feGaussianBlur5242" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3772">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.380625"
+ id="feGaussianBlur3774" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3776">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.28441406"
+ id="feGaussianBlur3778" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.4"
+ inkscape:cx="1.9680403"
+ inkscape:cy="10.315032"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4060">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-523.28571,-512.07648)">
+ <text
+ xml:space="preserve"
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="566.91028"
+ y="492.98608"
+ id="text5195"
+ sodipodi:linespacing="125%"
+ transform="scale(0.93034878,1.0748657)"><tspan
+ sodipodi:role="line"
+ id="tspan5197"
+ x="566.91028"
+ y="492.98608"
+ style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">B</tspan></text>
+ <path
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;opacity:1;filter:url(#filter3772)"
+ d="m 528.19196,516.7064 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m 4.09375,0 0,4.65625 0.5,0 0,-4.15625 1.0625,0 c 0.82594,10e-6 1.44511,0.15919 1.875,0.4375 -0.0892,-0.14324 -0.18651,-0.26897 -0.3125,-0.375 -0.42665,-0.36351 -1.11857,-0.56249 -2.0625,-0.5625 l -1.0625,0 z m 6.28125,0.25 c 0.39409,0.52808 0.59374,1.22535 0.59375,2.0625 -10e-6,0.81947 -0.27463,1.45692 -0.78125,1.9375 -0.50131,0.48059 -1.22683,0.78303 -2.21875,0.90625 0.52107,0.0562 0.95953,0.16568 1.375,0.3125 0.55687,-0.16157 1.00754,-0.39644 1.34375,-0.71875 0.50662,-0.48058 0.78124,-1.11803 0.78125,-1.9375 -10e-6,-1.13984 -0.36315,-1.99564 -1.09375,-2.5625 z m -6.28125,5.5 0,5.8125 0.5,0 0,-5.3125 1.15625,0 c 0.83936,10e-6 1.48442,0.1937 1.96875,0.53125 -0.0691,-0.0954 -0.13581,-0.19985 -0.21875,-0.28125 -0.49597,-0.48674 -1.24208,-0.74999 -2.25,-0.75 l -1.15625,0 z m 6.90625,0.84375 c 0.44148,0.56299 0.68749,1.25448 0.6875,2.09375 -10e-6,1.36783 -0.44782,2.38431 -1.34375,3.03125 -0.89062,0.64694 -2.31489,0.96875 -4.21875,0.96875 l -6.125,0 0,0.5 6.625,0 c 1.90386,0 3.32813,-0.32181 4.21875,-0.96875 0.89593,-0.64694 1.34374,-1.66342 1.34375,-3.03125 -10e-6,-1.01046 -0.32881,-1.79627 -0.96875,-2.40625 -0.067,-0.0638 -0.14565,-0.12894 -0.21875,-0.1875 z"
+ id="text5199"
+ inkscape:connector-curvature="0" />
+ <path
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;opacity:0.8;filter:url(#filter3776)"
+ d="m 528.19654,516.11548 0,1.09375 0.5,0 0,-0.59375 7.09375,0 c 1.43448,10e-6 2.51961,0.26222 3.25,0.8125 -0.13699,-0.17753 -0.2861,-0.32704 -0.46875,-0.46875 -0.73063,-0.56683 -1.82536,-0.84374 -3.28125,-0.84375 l -7.09375,0 z m 1.53125,1.59375 0,11.0625 -1.53125,0 0,1.125 0.5,0 0,-0.625 1.53125,0 0,-11.5625 -0.5,0 z m 6.5,0.4375 c 0.21673,0.34787 0.34374,0.80765 0.34375,1.375 -10e-6,0.79483 -0.24487,1.36184 -0.6875,1.75 -0.44264,0.38201 -1.11399,0.59376 -2.03125,0.59375 l -0.5625,0 0,0.5 1.0625,0 c 0.91726,10e-6 1.58861,-0.21174 2.03125,-0.59375 0.44263,-0.38816 0.68749,-0.95517 0.6875,-1.75 -10e-6,-0.80097 -0.22429,-1.38647 -0.65625,-1.75 -0.0533,-0.0454 -0.12609,-0.0852 -0.1875,-0.125 z m 1.8125,4.53125 c -0.27347,0.0794 -0.54832,0.14692 -0.875,0.1875 1.07435,0.11586 1.90579,0.43638 2.53125,0.9375 -0.0901,-0.11484 -0.17283,-0.20916 -0.28125,-0.3125 -0.36206,-0.34509 -0.83372,-0.62123 -1.375,-0.8125 z m -1.625,1.3125 c 0.34394,0.47485 0.53124,1.0853 0.53125,1.90625 -10e-6,0.97966 -0.22813,1.71924 -0.71875,2.1875 -0.49064,0.46826 -1.26266,0.6875 -2.28125,0.6875 l -0.65625,0 0,0.5 1.15625,0 c 1.01859,0 1.79061,-0.21924 2.28125,-0.6875 0.49062,-0.46826 0.71874,-1.20784 0.71875,-2.1875 -10e-6,-0.98581 -0.25404,-1.70075 -0.75,-2.1875 -0.0829,-0.0814 -0.18398,-0.15096 -0.28125,-0.21875 z"
+ id="text5217"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-F.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-F.svg
new file mode 100644
index 00000000..8c8de992
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-bold-F.svg
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg4055"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-bold-f.svg">
+ <defs
+ id="defs4057">
+ <filter
+ id="filter5056"
+ inkscape:label="Diffuse light"
+ inkscape:menu="ABCs"
+ inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur5058"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ id="feComposite5064"
+ in2="SourceGraphic"
+ k1="1"
+ in="result5"
+ result="result4"
+ operator="arithmetic"
+ k2="0"
+ k3="0.6" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3809">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.30164062"
+ id="feGaussianBlur3811" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3837">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.4021875"
+ id="feGaussianBlur3839" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3882">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.27492187"
+ id="feGaussianBlur3884" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3886">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.3665625"
+ id="feGaussianBlur3888" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.4"
+ inkscape:cx="12.662998"
+ inkscape:cy="19.259521"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4060">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-523.28571,-512.07648)">
+ <text
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="566.91028"
+ y="492.98608"
+ id="text5195"
+ sodipodi:linespacing="125%"
+ transform="scale(0.93034878,1.0748657)"><tspan
+ sodipodi:role="line"
+ id="tspan5197"
+ x="566.91028"
+ y="492.98608"
+ style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">F</tspan></text>
+ <path
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3886);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ d="m 538.34821,516.10773 0,2.75 -0.59375,0 0,0.5 1.09375,0 0,-3.25 -0.5,0 z m -10.15625,0.59375 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m 4.125,0.15625 0,4.4375 0.5,0 0,-3.9375 4.4375,0 0,-0.5 -4.9375,0 z m 4.125,3.1875 0,4.25 -0.59375,0 0,0.5 1.09375,0 0,-4.75 -0.5,0 z m -4.125,2.5 0,5.71875 0.5,0 0,-5.21875 2.53125,0 0,-0.5 -3.03125,0 z m 1.875,6.21875 0,0.625 -6,0 0,0.5 6.5,0 0,-1.125 -0.5,0 z"
+ id="text3860"
+ inkscape:connector-curvature="0" />
+ <path
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;opacity:0.80000000000000004;filter:url(#filter3882)"
+ d="m 528.19196,516.10773 0,1.09375 0.5,0 0,-0.59375 10.15625,0 0,-0.5 -10.65625,0 z m 1.53125,1.59375 0,11.0625 -1.53125,0 0,1.125 0.5,0 0,-0.625 1.53125,0 0,-11.5625 -0.5,0 z m 8.03125,0.15625 0,1.5 0.5,0 0,-1.5 -0.5,0 z m -1.90625,2.1875 0,1.75 -2.53125,0 0,0.5 3.03125,0 0,-1.75 0.59375,0 0,-0.5 -1.09375,0 z m 0,3.5 0,1.25 0.5,0 0,-1.25 -0.5,0 z m -2.53125,5.21875 0,0.5 1.375,0 0,-0.5 -1.375,0 z"
+ id="text3864"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-G.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-G.svg
new file mode 100644
index 00000000..4c924a63
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-bold-G.svg
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg4055"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-bold-f.svg">
+ <defs
+ id="defs4057">
+ <filter
+ id="filter5056"
+ inkscape:label="Diffuse light"
+ inkscape:menu="ABCs"
+ inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur5058"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ id="feComposite5064"
+ in2="SourceGraphic"
+ k1="1"
+ in="result5"
+ result="result4"
+ operator="arithmetic"
+ k2="0"
+ k3="0.6" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3809">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.30164062"
+ id="feGaussianBlur3811" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3837">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.4021875"
+ id="feGaussianBlur3839" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3882">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.27492187"
+ id="feGaussianBlur3884" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3886">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.3665625"
+ id="feGaussianBlur3888" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3908">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.35953125"
+ id="feGaussianBlur3910" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3912">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.28933594"
+ id="feGaussianBlur3914" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.4"
+ inkscape:cx="16.234427"
+ inkscape:cy="13.902379"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4060">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-523.28571,-512.07648)">
+ <text
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="566.91028"
+ y="492.98608"
+ id="text5195"
+ sodipodi:linespacing="125%"
+ transform="scale(0.93034878,1.0748657)"><tspan
+ sodipodi:role="line"
+ id="tspan5197"
+ x="566.91028"
+ y="492.98608"
+ style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">G</tspan></text>
+ <path
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter3908)"
+ d="m 534.62946,516.45148 c -1.23726,1e-5 -2.13746,0.49527 -2.71875,1.46875 -0.57597,0.96735 -0.875,2.50505 -0.875,4.59375 0,2.07022 0.28912,3.58285 0.84375,4.5625 0.20798,0.36506 0.45502,0.67809 0.75,0.90625 -0.0944,-0.12162 -0.16884,-0.26379 -0.25,-0.40625 -0.55463,-0.97965 -0.84375,-2.49228 -0.84375,-4.5625 0,-2.0887 0.29903,-3.6264 0.875,-4.59375 0.58129,-0.97348 1.48149,-1.46874 2.71875,-1.46875 0.86746,1e-5 1.55891,0.2273 2.09375,0.625 -0.076,-0.0954 -0.13567,-0.2008 -0.21875,-0.28125 -0.55997,-0.54835 -1.35641,-0.84374 -2.375,-0.84375 z m 4.59375,0.375 0,3.09375 -0.65625,0 c 0.0425,0.16552 0.0895,0.31967 0.125,0.5 l 1.03125,0 0,-3.375 c -0.16821,-0.0805 -0.33222,-0.1465 -0.5,-0.21875 z m 0.40625,6.625 0,4.78125 c -0.89595,0.48059 -1.79157,0.82837 -2.6875,1.0625 -0.89062,0.23413 -1.81674,0.375 -2.75,0.375 -1.75604,0 -3.19957,-0.46844 -4.3125,-1.40625 1.17325,1.2754 2.76464,1.90625 4.8125,1.90625 0.93326,0 1.85938,-0.14087 2.75,-0.375 0.89593,-0.23413 1.79155,-0.58191 2.6875,-1.0625 l 0,-5.28125 -0.5,0 z m -3.8125,0.59375 0,0.5 0.9375,0 0,-0.5 -0.9375,0 z"
+ id="text3890"
+ inkscape:connector-curvature="0" />
+ <path
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter3912);opacity:0.80000000000000004"
+ d="m 534.69196,515.85773 c -2.04786,1e-5 -3.63925,0.63086 -4.8125,1.90625 -1.16792,1.27541 -1.78125,3.02575 -1.78125,5.25 0,2.2181 0.61333,3.9746 1.78125,5.25 0.12571,0.13665 0.23925,0.25299 0.375,0.375 -1.1007,-1.26488 -1.65625,-2.97168 -1.65625,-5.125 0,-2.22425 0.58208,-3.97459 1.75,-5.25 1.17325,-1.27539 2.79589,-1.90624 4.84375,-1.90625 0.85327,1e-5 1.70463,0.0841 2.53125,0.28125 0.66053,0.15756 1.33264,0.40012 2,0.6875 l 0,-0.28125 c -0.83729,-0.40048 -1.6734,-0.70907 -2.5,-0.90625 -0.82662,-0.19715 -1.67798,-0.28124 -2.53125,-0.28125 z m 3.03125,2.21875 c 0.43644,0.5474 0.76436,1.30482 0.96875,2.34375 l 0.375,0 c -0.24482,-0.95424 -0.58532,-1.66293 -1.0625,-2.125 -0.0831,-0.0814 -0.18807,-0.14946 -0.28125,-0.21875 z m -1.90625,5.375 0,1.09375 0.5,0 0,-0.59375 3.8125,0 0,-0.5 -4.3125,0 z m 1.4375,1.59375 0,3.28125 c -0.31466,0.23413 -0.67854,0.41418 -1.0625,0.53125 -0.38398,0.11707 -0.77079,0.1875 -1.21875,0.1875 -0.71603,0 -1.32688,-0.16866 -1.8125,-0.53125 0.54902,0.6868 1.32703,1.03125 2.3125,1.03125 0.44796,0 0.83477,-0.0704 1.21875,-0.1875 0.38396,-0.11707 0.74784,-0.29712 1.0625,-0.53125 l 0,-3.78125 -0.5,0 z"
+ id="text3894"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-N.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-N.svg
new file mode 100644
index 00000000..69c9c5a1
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-bold-N.svg
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg4055"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-bold-G.svg">
+ <defs
+ id="defs4057">
+ <filter
+ id="filter5056"
+ inkscape:label="Diffuse light"
+ inkscape:menu="ABCs"
+ inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur5058"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ id="feComposite5064"
+ in2="SourceGraphic"
+ k1="1"
+ in="result5"
+ result="result4"
+ operator="arithmetic"
+ k2="0"
+ k3="0.6" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3908">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.35953125"
+ id="feGaussianBlur3910" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3912">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.28933594"
+ id="feGaussianBlur3914" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3953">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.30832031"
+ id="feGaussianBlur3955" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3973">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.41109375"
+ id="feGaussianBlur3975" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.4"
+ inkscape:cx="18.020141"
+ inkscape:cy="12.116664"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4060">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-523.28571,-512.07648)">
+ <text
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="566.91028"
+ y="492.98608"
+ id="text5195"
+ sodipodi:linespacing="125%"
+ transform="scale(0.93034878,1.0748657)"><tspan
+ sodipodi:role="line"
+ id="tspan5197"
+ x="566.91028"
+ y="492.98608"
+ style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">N</tspan></text>
+ <path
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter3973)"
+ d="m 531.75446,516.10773 6.84375,9.25 0,-0.1875 -6.71875,-9.0625 -0.125,0 z m 9.5,0 0,0.59375 -1.53125,0 0,12.6875 -1.96875,0 0.375,0.5 2.09375,0 0,-12.6875 1.53125,0 0,-1.09375 -0.5,0 z m -13.125,0.59375 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m 9.4375,0 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m -7.28125,2.71875 0,8.84375 0.5,0 0,-8.15625 -0.5,-0.6875 z m 1.53125,9.34375 0,0.625 -3.6875,0 0,0.5 4.1875,0 0,-1.125 -0.5,0 z"
+ id="text3939"
+ inkscape:connector-curvature="0" />
+ <path
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter3953);opacity:0.8"
+ d="m 528.12946,516.10773 0,1.09375 0.5,0 0,-0.59375 3.625,0 -0.375,-0.5 -3.75,0 z m 9.4375,0 0,1.09375 0.5,0 0,-0.59375 3.6875,0 0,-0.5 -4.1875,0 z m -7.90625,1.59375 0,11.0625 -1.53125,0 0,1.125 0.5,0 0,-0.625 1.53125,0 0,-11.5625 -0.5,0 z m 9.4375,0 0,7.96875 0.5,0.6875 0,-8.65625 -0.5,0 z m -7.8125,2.71875 0,0.1875 6.84375,9.28125 0.125,0 -6.96875,-9.46875 z m 0,8.34375 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z"
+ id="text3935"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-P.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-P.svg
new file mode 100644
index 00000000..96d36e6d
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-bold-P.svg
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg4055"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-bold-N.svg">
+ <defs
+ id="defs4057">
+ <filter
+ id="filter5056"
+ inkscape:label="Diffuse light"
+ inkscape:menu="ABCs"
+ inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur5058"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ id="feComposite5064"
+ in2="SourceGraphic"
+ k1="1"
+ in="result5"
+ result="result4"
+ operator="arithmetic"
+ k2="0"
+ k3="0.6" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3953">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.30832031"
+ id="feGaussianBlur3955" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3973">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.41109375"
+ id="feGaussianBlur3975" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4018">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.27"
+ id="feGaussianBlur4020" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4022">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.36515625"
+ id="feGaussianBlur4024" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.4"
+ inkscape:cx="15.564784"
+ inkscape:cy="10.33095"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4060">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-523.28571,-512.07648)">
+ <text
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="566.91028"
+ y="492.98608"
+ id="text5195"
+ sodipodi:linespacing="125%"
+ transform="scale(0.93034878,1.0748657)"><tspan
+ sodipodi:role="line"
+ id="tspan5197"
+ x="566.91028"
+ y="492.98608"
+ style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">P</tspan></text>
+ <path
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter4022)"
+ d="m 528.19196,516.70148 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m 4.09375,0 0,5.875 0.5,0 0,-5.375 0.90625,0 c 0.46699,1e-5 0.88043,0.13824 1.21875,0.375 -0.0173,-0.0237 -0.0444,-0.0395 -0.0625,-0.0625 -0.41065,-0.52987 -0.95764,-0.81249 -1.65625,-0.8125 l -0.90625,0 z m 5.625,0.3125 c 0.59493,0.68939 0.93749,1.55688 0.9375,2.625 -10e-6,1.23228 -0.39823,2.19814 -1.1875,2.9375 -0.78396,0.73321 -1.83368,1.09376 -3.15625,1.09375 l -2.21875,0 0,4.59375 0.5,0 0,-4.09375 2.21875,0 c 1.32257,1e-5 2.37229,-0.36054 3.15625,-1.09375 0.78927,-0.73936 1.18749,-1.70522 1.1875,-2.9375 -10e-6,-1.2261 -0.40356,-2.21045 -1.1875,-2.9375 -0.0765,-0.0715 -0.16834,-0.12295 -0.25,-0.1875 z m -3.6875,11.75 0,0.625 -6.03125,0 0,0.5 6.53125,0 0,-1.125 -0.5,0 z"
+ id="text4000"
+ inkscape:connector-curvature="0" />
+ <path
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;opacity:0.80000000000000004;filter:url(#filter4018)"
+ d="m 528.19196,516.10773 0,1.09375 0.5,0 0,-0.59375 6.8125,0 c 1.19835,1e-5 2.15089,0.30914 2.90625,0.90625 -0.088,-0.10197 -0.14899,-0.21882 -0.25,-0.3125 -0.78396,-0.73319 -1.82835,-1.09374 -3.15625,-1.09375 l -6.8125,0 z m 1.53125,1.59375 0,11.0625 -1.53125,0 0,1.125 0.5,0 0,-0.625 1.53125,0 0,-11.5625 -0.5,0 z m 5.6875,0.375 c 0.37529,0.51597 0.56249,1.21431 0.5625,2.0625 -10e-6,0.89341 -0.20904,1.58897 -0.625,2.125 -0.41065,0.52988 -0.96297,0.81251 -1.65625,0.8125 l -0.40625,0 0,0.5 0.90625,0 c 0.69328,1e-5 1.2456,-0.28262 1.65625,-0.8125 0.41596,-0.53603 0.62499,-1.23159 0.625,-2.125 -10e-6,-0.88723 -0.21437,-1.60127 -0.625,-2.125 -0.13615,-0.17567 -0.2697,-0.32007 -0.4375,-0.4375 z m -2.125,10.6875 0,0.5 1.4375,0 0,-0.5 -1.4375,0 z"
+ id="text3996"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-V.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-V.svg
new file mode 100644
index 00000000..2ef715af
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-bold-V.svg
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg4055"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-bold-P.svg">
+ <defs
+ id="defs4057">
+ <filter
+ id="filter5056"
+ inkscape:label="Diffuse light"
+ inkscape:menu="ABCs"
+ inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur5058"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ id="feComposite5064"
+ in2="SourceGraphic"
+ k1="1"
+ in="result5"
+ result="result4"
+ operator="arithmetic"
+ k2="0"
+ k3="0.6" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4018">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.27"
+ id="feGaussianBlur4020" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4022">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.36515625"
+ id="feGaussianBlur4024" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4063">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.30199219"
+ id="feGaussianBlur4065" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4067">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.40265625"
+ id="feGaussianBlur4069" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.4"
+ inkscape:cx="14.448713"
+ inkscape:cy="13.902379"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4060">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-523.28571,-512.07648)">
+ <text
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="566.91028"
+ y="492.98608"
+ id="text5195"
+ sodipodi:linespacing="125%"
+ transform="scale(0.93034878,1.0748657)"><tspan
+ sodipodi:role="line"
+ id="tspan5197"
+ x="566.91028"
+ y="492.98608"
+ style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">V</tspan></text>
+ <path
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter4067)"
+ d="m 532.44196,516.10773 0,0.59375 -1.1875,0 3.25,9.15625 0.15625,-0.46875 -2.90625,-8.1875 1.1875,0 0,-1.09375 -0.5,0 z m 7.4375,0 0,0.59375 -1,0 -4.5,12.6875 -1.59375,0 0.1875,0.5 1.875,0 4.53125,-12.6875 1,0 0,-1.09375 -0.5,0 z m -12.5625,0.59375 0,0.5 0.8125,0 -0.1875,-0.5 -0.625,0 z m 9.5,0 0,0.5 0.75,0 0.1875,-0.5 -0.9375,0 z"
+ id="text4049"
+ inkscape:connector-curvature="0" />
+ <path
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter4063);opacity:0.8"
+ d="m 527.31696,516.10773 0,1.09375 0.5,0 0,-0.59375 5.125,0 0,-0.5 -5.625,0 z m 9.5,0 0,1.09375 0.5,0 0,-0.59375 3.0625,0 0,-0.5 -3.5625,0 z m -8.1875,1.59375 4.34375,12.1875 0.3125,0 -4.34375,-12.1875 -0.3125,0 z m 9.4375,0 -2.90625,8.1875 0.34375,0.96875 3.25,-9.15625 -0.6875,0 z"
+ id="text4045"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-hy.png b/extensions/WikiEditor/modules/images/toolbar/format-bold-hy.png
new file mode 100644
index 00000000..453a9580
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-bold-hy.png
Binary files differ
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold.svg
new file mode 100644
index 00000000..83a0cb81
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-bold.svg
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg4055"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-bold-a.svg">
+ <defs
+ id="defs4057">
+ <filter
+ id="filter5056"
+ inkscape:label="Diffuse light"
+ inkscape:menu="ABCs"
+ inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur5058"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ id="feComposite5064"
+ in2="SourceGraphic"
+ k1="1"
+ in="result5"
+ result="result4"
+ operator="arithmetic"
+ k2="0"
+ k3="0.6" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3809">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.30164062"
+ id="feGaussianBlur3811" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3837">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.4021875"
+ id="feGaussianBlur3839" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.4"
+ inkscape:cx="10.896612"
+ inkscape:cy="10.315032"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4060">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-523.28571,-512.07648)">
+ <text
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="566.91028"
+ y="492.98608"
+ id="text5195"
+ sodipodi:linespacing="125%"
+ transform="scale(0.93034878,1.0748657)"><tspan
+ sodipodi:role="line"
+ id="tspan5197"
+ x="566.91028"
+ y="492.98608"
+ style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">A</tspan></text>
+ <path
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3809);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ d="m 532.75446,516.10773 -4.46875,12.65625 -1,0 0,1.125 0.5,0 0,-0.625 1,0 4.46875,-12.65625 1.625,0 -0.1875,-0.5 -1.9375,0 z m 0.4375,3.96875 -0.15625,0.46875 1.46875,4.28125 -3,0 -0.1875,0.5 3.6875,0 -1.8125,-5.25 z m 1.90625,6.375 0.8125,2.3125 -1.1875,0 0,1.125 0.5,0 0,-0.625 1.1875,0 -1,-2.8125 -0.3125,0 z m -5,2.3125 -0.1875,0.5 0.9375,0 0,-0.5 -0.75,0 z m 9.40625,0 0.1875,0.5 0.625,0 0,-0.5 -0.8125,0 z"
+ id="text3023"
+ inkscape:connector-curvature="0" />
+ <path
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3837);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ d="m 534.37946,516.10773 4.3125,12.15625 0.3125,0 -4.3125,-12.15625 -0.3125,0 z m -2.1875,2.9375 -1.875,5.28125 0.6875,0 1.53125,-4.28125 -0.34375,-1 z m -2.28125,6.40625 -1,2.8125 0.6875,0 0.8125,-2.3125 4.1875,0 -0.1875,-0.5 -4.5,0 z m 0.4375,3.3125 0,0.625 -3.0625,0 0,0.5 3.5625,0 0,-1.125 -0.5,0 z m 9.46875,0 0,0.625 -5.09375,0 0,0.5 5.59375,0 0,-1.125 -0.5,0 z"
+ id="text3027"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-indent-rtl.png b/extensions/WikiEditor/modules/images/toolbar/format-indent-rtl.png
deleted file mode 100644
index 6dbad6d4..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-indent-rtl.png
+++ /dev/null
Binary files differ
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-indent.png b/extensions/WikiEditor/modules/images/toolbar/format-indent.png
deleted file mode 100644
index ec1ba450..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-indent.png
+++ /dev/null
Binary files differ
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-indent.svg b/extensions/WikiEditor/modules/images/toolbar/format-indent.svg
new file mode 100644
index 00000000..870274f9
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-indent.svg
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ width="22"
+ height="22"
+ id="svg8934"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-ulist.svg">
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1041"
+ id="namedview3183"
+ showgrid="false"
+ inkscape:zoom="11.313708"
+ inkscape:cx="-8.2391735"
+ inkscape:cy="10.499687"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg8934" />
+ <defs
+ id="defs8936">
+ <linearGradient
+ id="linearGradient3980">
+ <stop
+ style="stop-color:#fcc273;stop-opacity:1;"
+ offset="0"
+ id="stop3982" />
+ <stop
+ style="stop-color:#fc916b;stop-opacity:1;"
+ offset="1"
+ id="stop3984" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9497">
+ <stop
+ id="stop9499"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503"
+ xlink:href="#linearGradient9497"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-1"
+ xlink:href="#linearGradient9497-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ id="linearGradient9497-1">
+ <stop
+ id="stop9499-6"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-7"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9520"
+ xlink:href="#linearGradient9497-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-3"
+ xlink:href="#linearGradient9497-6"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ id="linearGradient9497-6">
+ <stop
+ id="stop9499-0"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-1"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9520-2"
+ xlink:href="#linearGradient9497-6"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9497-6"
+ id="linearGradient3189"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.3098397,0,0,0.848111,-727.30273,-410.25386)"
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9497-1"
+ id="linearGradient3192"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.3202618,0,0,0.84666939,-733.334,-423.58754)"
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9497"
+ id="linearGradient3195"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.74596729,0,0,0.94314201,-405.98488,-465.30597)"
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3980"
+ id="linearGradient3986"
+ x1="1.1049798"
+ y1="13.152683"
+ x2="6.6379666"
+ y2="10.024924"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <metadata
+ id="metadata8939">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <rect
+ style="fill:url(#linearGradient3195);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89300001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect8987"
+ y="10.467622"
+ x="9.9951382"
+ height="2.0841758"
+ width="9.2080336" />
+ <rect
+ style="fill:url(#linearGradient3192);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.893;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect8987-2"
+ y="3.5198629"
+ x="2.8947093"
+ height="1.8709884"
+ width="16.296982" />
+ <rect
+ style="fill:url(#linearGradient3189);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.893;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect8987-5"
+ y="17.58077"
+ x="3.1143055"
+ height="1.874174"
+ width="16.168335" />
+ <path
+ sodipodi:type="star"
+ style="fill:url(#linearGradient3986);fill-opacity:1;fill-rule:nonzero;stroke:#e0926b;stroke-width:0.89300000999999984;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="path3978"
+ sodipodi:sides="3"
+ sodipodi:cx="2.6366694"
+ sodipodi:cy="11.71699"
+ sodipodi:r1="3.5035224"
+ sodipodi:r2="1.7517612"
+ sodipodi:arg1="0"
+ sodipodi:arg2="1.0471976"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 6.1401918,11.71699 -2.6276419,1.51707 -2.6276417,1.51707 0,-3.03414 0,-3.0341389 2.6276419,1.5170699 z"
+ inkscape:transform-center-x="-0.79619997"
+ transform="matrix(0.90902794,0,0,0.90902794,2.2305609,0.83286798)" />
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-italic-A.svg b/extensions/WikiEditor/modules/images/toolbar/format-italic-A.svg
new file mode 100644
index 00000000..0e484a13
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-italic-A.svg
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg4055"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-bold-V.svg">
+ <defs
+ id="defs4057">
+ <filter
+ id="filter5056"
+ inkscape:label="Diffuse light"
+ inkscape:menu="ABCs"
+ inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur5058"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ id="feComposite5064"
+ in2="SourceGraphic"
+ k1="1"
+ in="result5"
+ result="result4"
+ operator="arithmetic"
+ k2="0"
+ k3="0.6" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4063">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.30199219"
+ id="feGaussianBlur4065" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4067">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.40265625"
+ id="feGaussianBlur4069" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4108">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.29320256"
+ id="feGaussianBlur4110" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4112">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.3909375"
+ id="feGaussianBlur4114" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.839192"
+ inkscape:cx="10.63356"
+ inkscape:cy="15.345202"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4060">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-523.28571,-512.07648)">
+ <text
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="569.04468"
+ y="493.06223"
+ id="text5195"
+ sodipodi:linespacing="125%"
+ transform="scale(0.93034878,1.0748657)"><tspan
+ sodipodi:role="line"
+ id="tspan5197"
+ x="569.04468"
+ y="493.06223"
+ style="font-style:italic;font-weight:normal;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">A</tspan></text>
+ <path
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter4108);opacity:0.8"
+ d="m 535.78571,516.17023 -6.40625,12.8125 -1.0625,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.0625,0 6.40625,-12.8125 0.9375,0 -0.0937,-0.5 -1.34375,0 z m 0.375,2.75 -0.3125,0.625 0.90625,5.4375 -3.625,0 -0.25,0.5 4.375,0 -1.09375,-6.5625 z m 0.8125,7.53125 0.40625,2.53125 -1.3125,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.3125,0 -0.46875,-3.03125 -0.4375,0 z m -5.84375,2.53125 -0.25,0.5 0.71875,0 0.0937,-0.5 -0.5625,0 z m 8.53125,0 0.0937,0.5 0.59375,0 0.0625,-0.5 -0.75,0 z"
+ id="text4090"
+ inkscape:connector-curvature="0" />
+ <path
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4112);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ d="m 536.72321,516.17023 2.03125,12.3125 0.40625,0 -2.03125,-12.3125 -0.40625,0 z m -1.5625,1.75 -3.28125,6.5625 0.75,0 2.71875,-5.4375 -0.1875,-1.125 z m -3.78125,7.53125 -1.5,3.03125 0.75,0 1.25,-2.53125 4.59375,0 -0.0625,-0.5 -5.03125,0 z m -0.28125,3.53125 -0.0625,0.5 -2.8125,0 -0.0625,0.5 3.375,0 0.15625,-1 -0.59375,0 z m 8.75,0 -0.0937,0.5 -3.78125,0 -0.0625,0.5 4.34375,0 0.15625,-1 -0.5625,0 z"
+ id="text4094"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-italic-C.svg b/extensions/WikiEditor/modules/images/toolbar/format-italic-C.svg
new file mode 100644
index 00000000..d58e1deb
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-italic-C.svg
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg4055"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-italic.svg">
+ <defs
+ id="defs4057">
+ <filter
+ id="filter5056"
+ inkscape:label="Diffuse light"
+ inkscape:menu="ABCs"
+ inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur5058"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ id="feComposite5064"
+ in2="SourceGraphic"
+ k1="1"
+ in="result5"
+ result="result4"
+ operator="arithmetic"
+ k2="0"
+ k3="0.6" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4108">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.29320256"
+ id="feGaussianBlur4110" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4112">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.3909375"
+ id="feGaussianBlur4114" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4180">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.28407221"
+ id="feGaussianBlur4182" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4184">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.35995908"
+ id="feGaussianBlur4186" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.839192"
+ inkscape:cx="30.773476"
+ inkscape:cy="10.294439"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4060">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-523.28571,-512.07648)">
+ <text
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="567.37231"
+ y="493.05362"
+ id="text5195"
+ sodipodi:linespacing="125%"
+ transform="scale(0.93034878,1.0748657)"><tspan
+ sodipodi:role="line"
+ id="tspan5197"
+ x="567.37231"
+ y="493.05362"
+ style="font-style:italic;font-weight:normal;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">C</tspan></text>
+ <path
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter4184)"
+ d="m 534.56696,516.42023 c -1.06685,0.11457 -1.95956,0.64601 -2.6875,1.5625 -0.83195,1.04128 -1.43994,2.56667 -1.78125,4.59375 -0.34131,2.02093 -0.26122,3.54632 0.21875,4.59375 0.20629,0.44755 0.49066,0.80731 0.84375,1.0625 -0.12875,-0.16736 -0.24717,-0.35298 -0.34375,-0.5625 -0.47997,-1.04743 -0.56006,-2.57282 -0.21875,-4.59375 0.34131,-2.02708 0.9493,-3.55247 1.78125,-4.59375 0.83194,-1.04742 1.88166,-1.56249 3.15625,-1.5625 0.85596,1e-5 1.50789,0.15034 2,0.5 -0.0471,-0.0641 -0.10373,-0.13005 -0.15625,-0.1875 -0.50131,-0.54835 -1.27183,-0.81249 -2.34375,-0.8125 -0.15932,0 -0.31634,-0.0164 -0.46875,0 z m 4.96875,0.4375 -0.5,2.9375 -0.40625,0 c 0.0125,0.1636 0.0304,0.32199 0.0312,0.5 l 0.875,0 0.53125,-3.1875 c -0.18373,-0.0945 -0.35168,-0.16682 -0.53125,-0.25 z m -1.4375,9.46875 c -0.53603,1.0345 -1.18715,1.83323 -2,2.40625 -0.93861,0.65927 -2.04326,1 -3.3125,1 -0.77862,0 -1.48046,-0.16068 -2.09375,-0.46875 -0.28043,-0.14086 -0.54208,-0.29859 -0.78125,-0.5 0.36218,0.42621 0.79506,0.75578 1.28125,1 0.61329,0.30807 1.31513,0.46875 2.09375,0.46875 1.26924,0 2.37389,-0.34073 3.3125,-1 0.94393,-0.66543 1.67936,-1.61852 2.25,-2.90625 l -0.75,0 z"
+ id="text4162"
+ inkscape:connector-curvature="0" />
+ <path
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter4180);opacity:0.8"
+ d="m 535.81696,515.92023 c -1.75455,1e-5 -3.26659,0.65023 -4.5625,1.96875 -1.29058,1.31238 -2.10611,3.04335 -2.46875,5.1875 -0.18665,1.10905 -0.20649,2.11893 -0.0625,3 0.14399,0.87492 0.45753,1.65368 0.9375,2.34375 0.22577,0.32438 0.4661,0.60468 0.75,0.84375 -0.0947,-0.11143 -0.16379,-0.21989 -0.25,-0.34375 -0.47997,-0.69007 -0.79351,-1.46883 -0.9375,-2.34375 -0.14399,-0.88107 -0.12415,-1.89095 0.0625,-3 0.36264,-2.14415 1.17817,-3.87512 2.46875,-5.1875 1.29591,-1.31852 2.80795,-1.96874 4.5625,-1.96875 0.65061,1e-5 1.33262,0.0841 2.03125,0.28125 0.53784,0.15065 1.10607,0.38692 1.6875,0.65625 l 0.0312,-0.25 c -0.77863,-0.40048 -1.51481,-0.70907 -2.21875,-0.90625 -0.69863,-0.19715 -1.38064,-0.28124 -2.03125,-0.28125 z m 2.21875,2 c 0.40225,0.54813 0.62022,1.33803 0.625,2.375 l 0.4375,0 c -0.0691,-0.9005 -0.29465,-1.59857 -0.71875,-2.0625 -0.101,-0.11048 -0.21959,-0.22428 -0.34375,-0.3125 z m -0.65625,8.40625 c -0.42131,0.9735 -0.96372,1.69459 -1.625,2.1875 -0.65596,0.48675 -1.4219,0.71875 -2.3125,0.71875 -0.72676,0 -1.31284,-0.16146 -1.78125,-0.5 0.51111,0.66438 1.26314,1 2.28125,1 0.8906,0 1.65654,-0.232 2.3125,-0.71875 0.66128,-0.49291 1.20369,-1.214 1.625,-2.1875 l 0.71875,0 c 0.0864,-0.16682 0.17076,-0.32118 0.25,-0.5 l -1.46875,0 z"
+ id="text4158"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-italic-K.svg b/extensions/WikiEditor/modules/images/toolbar/format-italic-K.svg
new file mode 100644
index 00000000..25f31558
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-italic-K.svg
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg4055"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-italic-C.svg">
+ <defs
+ id="defs4057">
+ <filter
+ id="filter5056"
+ inkscape:label="Diffuse light"
+ inkscape:menu="ABCs"
+ inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur5058"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ id="feComposite5064"
+ in2="SourceGraphic"
+ k1="1"
+ in="result5"
+ result="result4"
+ operator="arithmetic"
+ k2="0"
+ k3="0.6" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4180">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.28407221"
+ id="feGaussianBlur4182" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4184">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.35995908"
+ id="feGaussianBlur4186" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4225">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.30445256"
+ id="feGaussianBlur4227" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4229">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.4059375"
+ id="feGaussianBlur4231" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.839192"
+ inkscape:cx="13.095807"
+ inkscape:cy="7.7690577"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4060">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-523.28571,-512.07648)">
+ <text
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="567.41534"
+ y="493.06223"
+ id="text5195"
+ sodipodi:linespacing="125%"
+ transform="scale(0.93034878,1.0748657)"><tspan
+ sodipodi:role="line"
+ id="tspan5197"
+ x="567.41534"
+ y="493.06223"
+ style="font-style:italic;font-weight:normal;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">K</tspan></text>
+ <path
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter4225);opacity:0.8"
+ d="m 529.97321,516.17023 -0.1875,1 0.59375,0 0.0937,-0.5 4.0625,0 0.0937,-0.5 -4.65625,0 z m 6.96875,0 -0.15625,1 0.5625,0 0.0937,-0.5 3.40625,0 0.0625,-0.5 -3.96875,0 z m -5.71875,1.5 -1.90625,11.3125 -1.5,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.5,0 2,-11.8125 -0.59375,0 z m 6.3125,0 -4.78125,4.125 -0.1875,1.09375 6.03125,-5.21875 -1.0625,0 z m -5.15625,6.25 -0.0312,0.1875 4.09375,5.875 0.15625,0 -4.21875,-6.0625 z m -0.84375,5.0625 -0.0937,0.5 0.96875,0 0.0625,-0.5 -0.9375,0 z m 6.65625,0 0.34375,0.5 0.75,0 0.0937,-0.5 -1.1875,0 z"
+ id="text4207"
+ inkscape:connector-curvature="0" />
+ <path
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;filter:url(#filter4229);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ d="m 534.03571,516.17023 -0.0625,0.5 -1.53125,0 -0.875,5.21875 0.6875,-0.59375 0.6875,-4.125 1.53125,0 0.15625,-1 -0.59375,0 z m 6.3125,0 -0.0937,0.5 -1.34375,0 -6,5.1875 4.625,6.625 0.15625,0 -4.28125,-6.125 6,-5.1875 1.34375,0 0.15625,-1 -0.5625,0 z m -10.46875,0.5 -0.0937,0.5 0.9375,0 0.0937,-0.5 -0.9375,0 z m 6.96875,0 -0.0625,0.5 0.25,0 0.5625,-0.5 -0.75,0 z m -5.46875,6.25 -0.9375,5.5625 0.59375,0 0.8125,-4.875 -0.46875,-0.6875 z m 0.53125,6.0625 -0.0937,0.5 -4.09375,0 -0.0625,0.5 4.65625,0 0.15625,-1 -0.5625,0 z m 6.875,0 -0.0625,0.5 -2.625,0 0.34375,0.5 2.78125,0 0.15625,-1 -0.59375,0 z"
+ id="text4211"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-italic-hy.png b/extensions/WikiEditor/modules/images/toolbar/format-italic-hy.png
new file mode 100644
index 00000000..108bae64
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-italic-hy.png
Binary files differ
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-italic-i.svg b/extensions/WikiEditor/modules/images/toolbar/format-italic-i.svg
new file mode 100644
index 00000000..c5183082
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-italic-i.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg5250"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="Nowy dokument 15">
+ <defs
+ id="defs5252">
+ <filter
+ inkscape:collect="always"
+ id="filter5867">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.23529697"
+ id="feGaussianBlur5869" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter5879">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.30769604"
+ id="feGaussianBlur5881" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.839192"
+ inkscape:cx="13.978787"
+ inkscape:cy="12.402617"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1041"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata5255">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-840.42859,-692.79077)">
+ <g
+ id="g5883"
+ transform="translate(-19.62505,-0.15625)">
+ <text
+ transform="scale(1.0721134,0.93273715)"
+ sodipodi:linespacing="125%"
+ id="text5269"
+ y="762.1983"
+ x="808.40424"
+ style="font-size:20.50770187px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#565758;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ xml:space="preserve"><tspan
+ style="font-style:italic;font-weight:normal;fill:#565758;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic"
+ y="762.1983"
+ x="808.40424"
+ id="tspan5271"
+ sodipodi:role="line">I</tspan></text>
+ <path
+ inkscape:connector-curvature="0"
+ id="text5273"
+ d="m 875.11609,696.97827 -0.0937,0.5 -2.03125,0 -2.6875,11.96875 0.625,0 2.53125,-11.46875 2.0625,0 0.21875,-1 -0.625,0 z m -5.75,0.5 -0.125,0.5 1.4375,0 0.125,-0.5 -1.4375,0 z m 2.84375,12.46875 -0.0937,0.46875 -5.625,0 -0.125,0.5 6.25,0 0.21875,-0.96875 -0.625,0 z"
+ style="font-size:20.50770187px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter5879);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ <path
+ inkscape:connector-curvature="0"
+ id="text5282"
+ d="m 869.49109,696.97827 -0.25,1 0.625,0 0.125,-0.5 5.625,0 0.125,-0.5 -6.25,0 z m 1.6875,1.5 -2.5625,11.46875 -2.03125,0 -0.21875,0.96875 0.625,0 0.0937,-0.46875 2.03125,0 2.6875,-11.96875 -0.625,0 z m 0.25,11.46875 -0.125,0.5 1.40625,0 0.125,-0.5 -1.40625,0 z"
+ style="font-size:20.50770187px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.87735847;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter5867);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
+ </g>
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-italic.svg b/extensions/WikiEditor/modules/images/toolbar/format-italic.svg
new file mode 100644
index 00000000..23b01c9c
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-italic.svg
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg4055"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-italic-A.svg">
+ <defs
+ id="defs4057">
+ <filter
+ id="filter5056"
+ inkscape:label="Diffuse light"
+ inkscape:menu="ABCs"
+ inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur5058"
+ stdDeviation="6"
+ in="SourceGraphic"
+ result="result0" />
+ <feDiffuseLighting
+ id="feDiffuseLighting5060"
+ diffuseConstant="1"
+ surfaceScale="10"
+ result="result5">
+ <feDistantLight
+ id="feDistantLight5062"
+ elevation="25"
+ azimuth="235" />
+ </feDiffuseLighting>
+ <feComposite
+ id="feComposite5064"
+ in2="SourceGraphic"
+ k1="1"
+ in="result5"
+ result="result4"
+ operator="arithmetic"
+ k2="0"
+ k3="0.6" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4063">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.30199219"
+ id="feGaussianBlur4065" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4067">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.40265625"
+ id="feGaussianBlur4069" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4108">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.29320256"
+ id="feGaussianBlur4110" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4112">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.3909375"
+ id="feGaussianBlur4114" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.839192"
+ inkscape:cx="10.63356"
+ inkscape:cy="15.345202"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4060">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-523.28571,-512.07648)">
+ <text
+ xml:space="preserve"
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="569.04468"
+ y="493.06223"
+ id="text5195"
+ sodipodi:linespacing="125%"
+ transform="scale(0.93034878,1.0748657)"><tspan
+ sodipodi:role="line"
+ id="tspan5197"
+ x="569.04468"
+ y="493.06223"
+ style="font-style:italic;font-weight:normal;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">A</tspan></text>
+ <path
+ style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter4108);opacity:0.8"
+ d="m 535.78571,516.17023 -6.40625,12.8125 -1.0625,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.0625,0 6.40625,-12.8125 0.9375,0 -0.0937,-0.5 -1.34375,0 z m 0.375,2.75 -0.3125,0.625 0.90625,5.4375 -3.625,0 -0.25,0.5 4.375,0 -1.09375,-6.5625 z m 0.8125,7.53125 0.40625,2.53125 -1.3125,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.3125,0 -0.46875,-3.03125 -0.4375,0 z m -5.84375,2.53125 -0.25,0.5 0.71875,0 0.0937,-0.5 -0.5625,0 z m 8.53125,0 0.0937,0.5 0.59375,0 0.0625,-0.5 -0.75,0 z"
+ id="text4090"
+ inkscape:connector-curvature="0" />
+ <path
+ style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4112);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ d="m 536.72321,516.17023 2.03125,12.3125 0.40625,0 -2.03125,-12.3125 -0.40625,0 z m -1.5625,1.75 -3.28125,6.5625 0.75,0 2.71875,-5.4375 -0.1875,-1.125 z m -3.78125,7.53125 -1.5,3.03125 0.75,0 1.25,-2.53125 4.59375,0 -0.0625,-0.5 -5.03125,0 z m -0.28125,3.53125 -0.0625,0.5 -2.8125,0 -0.0625,0.5 3.375,0 0.15625,-1 -0.59375,0 z m 8.75,0 -0.0937,0.5 -3.78125,0 -0.0625,0.5 4.34375,0 0.15625,-1 -0.5625,0 z"
+ id="text4094"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-olist.svg b/extensions/WikiEditor/modules/images/toolbar/format-olist.svg
new file mode 100644
index 00000000..909cb94b
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-olist.svg
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg8934"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="Nowy dokument 47">
+ <defs
+ id="defs8936">
+ <linearGradient
+ id="linearGradient9497">
+ <stop
+ style="stop-color:#757772;stop-opacity:1;"
+ offset="0"
+ id="stop9499" />
+ <stop
+ style="stop-color:#6d6f6a;stop-opacity:1;"
+ offset="1"
+ id="stop9501" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9497"
+ id="linearGradient9503"
+ x1="557.13837"
+ y1="505.56084"
+ x2="570.48212"
+ y2="505.56084"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9497-1"
+ id="linearGradient9503-1"
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ id="linearGradient9497-1">
+ <stop
+ style="stop-color:#757772;stop-opacity:1;"
+ offset="0"
+ id="stop9499-6" />
+ <stop
+ style="stop-color:#6d6f6a;stop-opacity:1;"
+ offset="1"
+ id="stop9501-7" />
+ </linearGradient>
+ <linearGradient
+ y2="505.56085"
+ x2="570.48212"
+ y1="505.56085"
+ x1="557.13837"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient9520"
+ xlink:href="#linearGradient9497-1"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9497-6"
+ id="linearGradient9503-3"
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ id="linearGradient9497-6">
+ <stop
+ style="stop-color:#757772;stop-opacity:1;"
+ offset="0"
+ id="stop9499-0" />
+ <stop
+ style="stop-color:#6d6f6a;stop-opacity:1;"
+ offset="1"
+ id="stop9501-1" />
+ </linearGradient>
+ <linearGradient
+ y2="505.56085"
+ x2="570.48212"
+ y1="505.56085"
+ x1="557.13837"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient9520-2"
+ xlink:href="#linearGradient9497-6"
+ inkscape:collect="always" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.98994949"
+ inkscape:cx="-338.44907"
+ inkscape:cy="56.302882"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1041"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata8939">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-550.42859,-494.21933)">
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="551.98376"
+ y="500.20258"
+ id="text8953"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan8955"
+ x="551.98376"
+ y="500.20258"
+ style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="552.23047"
+ y="507.20078"
+ id="text8953-1"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan8955-5"
+ x="552.23047"
+ y="507.20078"
+ style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="552.19891"
+ y="514.17712"
+ id="text8953-8"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan8955-55"
+ x="552.19891"
+ y="514.17712"
+ style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">3</tspan></text>
+ <rect
+ style="fill:url(#linearGradient9503);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect8987"
+ width="11.551277"
+ height="2.0031219"
+ x="558.13318"
+ y="504.72748" />
+ <rect
+ style="fill:url(#linearGradient9520);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect8987-2"
+ width="11.551277"
+ height="2.0031219"
+ x="558.13507"
+ y="497.67313" />
+ <rect
+ style="fill:url(#linearGradient9520-2);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect8987-5"
+ width="11.551277"
+ height="2.0031219"
+ x="558.22443"
+ y="511.73563" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-small.svg b/extensions/WikiEditor/modules/images/toolbar/format-small.svg
new file mode 100644
index 00000000..af49cc73
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-small.svg
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg11148"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-small.svg">
+ <defs
+ id="defs11150">
+ <filter
+ inkscape:collect="always"
+ id="filter11711">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.40047554"
+ id="feGaussianBlur11713" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter11735">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.22248641"
+ id="feGaussianBlur11737" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627418"
+ inkscape:cx="9.4578669"
+ inkscape:cy="10.767942"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata11153">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-823.28571,-707.07648)">
+ <text
+ xml:space="preserve"
+ style="font-size:15.80470848000000039px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999999;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="674.32245"
+ y="890.06787"
+ id="text11171"
+ sodipodi:linespacing="125%"
+ transform="scale(1.2392818,0.80691899)"><tspan
+ sodipodi:role="line"
+ id="tspan11173"
+ x="674.32245"
+ y="890.06787"
+ style="font-weight:bold;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999999;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">-</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text11693"
+ y="725.07898"
+ x="825.39417"
+ style="font-size:18.17164040000000114px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#212222;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ xml:space="preserve"><tspan
+ style="font-weight:normal;fill:#212222;fill-opacity:1;-inkscape-font-specification:DejaVu Serif"
+ y="725.07898"
+ x="825.39417"
+ id="tspan11695"
+ sodipodi:role="line">A</tspan></text>
+ <path
+ style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter11735);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ d="m 831.84511,710.73333 4.90625,12.71875 0.28125,0 -4.875,-12.71875 -0.3125,0 z m -1.5,1.8125 -2.59375,6.78125 0.6875,0 2.25,-5.875 -0.34375,-0.90625 z m -3,7.78125 -1.1875,3.125 0.6875,0 1,-2.625 5.6875,0 -0.1875,-0.5 -6,0 z m 0.375,3.65625 0,0.5 -3.5,0 0,0.5 4,0 0,-1 -0.5,0 z m 10.40625,0 0,0.5 -4.65625,0 0,0.5 5.15625,0 0,-1 -0.5,0 z"
+ id="text11167"
+ inkscape:connector-curvature="0"
+ transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)" />
+ <path
+ style="font-size:19.56149483000000089px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter11711);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;opacity:0.6918239"
+ d="m 830.51875,710.76366 -5.0625,13.21875 -1.25,0 0,1.03125 0.5,0 0,-0.5 1.25,0 5.0625,-13.25 1.3125,0 -0.1875,-0.5 -1.625,0 z m 0.8125,2.8125 -0.15625,0.40625 2.28125,5.875 -4.53125,0 -0.1875,0.5 5.21875,0 -2.625,-6.78125 z m 2.6875,7.78125 1,2.625 -1.5625,0 0,1.03125 0.5,0 0,-0.5 1.5625,0 -1.1875,-3.15625 -0.3125,0 z m -6.6875,2.625 -0.1875,0.53125 1.0625,0 0,-0.53125 -0.875,0 z m 10.1875,0 0.21875,0.53125 0.875,0 0,-0.53125 -1.09375,0 z"
+ id="text11683"
+ inkscape:connector-curvature="0"
+ transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-subscript.svg b/extensions/WikiEditor/modules/images/toolbar/format-subscript.svg
new file mode 100644
index 00000000..f6d094da
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-subscript.svg
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg11148"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-subscript.svg">
+ <defs
+ id="defs11150">
+ <filter
+ inkscape:collect="always"
+ id="filter11711">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.40047554"
+ id="feGaussianBlur11713" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter11735">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.22248641"
+ id="feGaussianBlur11737" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627418"
+ inkscape:cx="9.4578669"
+ inkscape:cy="10.767942"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata11153">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-823.28571,-707.07648)">
+ <text
+ xml:space="preserve"
+ style="font-size:5.07652283000000004px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998000000003;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="676.90649"
+ y="897.27142"
+ id="text11171"
+ sodipodi:linespacing="125%"
+ transform="scale(1.2392818,0.80691898)"><tspan
+ sodipodi:role="line"
+ id="tspan11173"
+ x="676.90649"
+ y="897.27142"
+ style="font-weight:bold;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998000000003;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">â–¼</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text11693"
+ y="725.07898"
+ x="825.39417"
+ style="font-size:18.1716404px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#212222;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ xml:space="preserve"><tspan
+ style="font-weight:normal;fill:#212222;fill-opacity:1;-inkscape-font-specification:DejaVu Serif"
+ y="725.07898"
+ x="825.39417"
+ id="tspan11695"
+ sodipodi:role="line">A</tspan></text>
+ <path
+ style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter11735);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ d="m 831.84511,710.73333 4.90625,12.71875 0.28125,0 -4.875,-12.71875 -0.3125,0 z m -1.5,1.8125 -2.59375,6.78125 0.6875,0 2.25,-5.875 -0.34375,-0.90625 z m -3,7.78125 -1.1875,3.125 0.6875,0 1,-2.625 5.6875,0 -0.1875,-0.5 -6,0 z m 0.375,3.65625 0,0.5 -3.5,0 0,0.5 4,0 0,-1 -0.5,0 z m 10.40625,0 0,0.5 -4.65625,0 0,0.5 5.15625,0 0,-1 -0.5,0 z"
+ id="text11167"
+ inkscape:connector-curvature="0"
+ transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)" />
+ <path
+ style="font-size:19.56149483000000089px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter11711);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;opacity:0.6918239"
+ d="m 830.51875,710.76366 -5.0625,13.21875 -1.25,0 0,1.03125 0.5,0 0,-0.5 1.25,0 5.0625,-13.25 1.3125,0 -0.1875,-0.5 -1.625,0 z m 0.8125,2.8125 -0.15625,0.40625 2.28125,5.875 -4.53125,0 -0.1875,0.5 5.21875,0 -2.625,-6.78125 z m 2.6875,7.78125 1,2.625 -1.5625,0 0,1.03125 0.5,0 0,-0.5 1.5625,0 -1.1875,-3.15625 -0.3125,0 z m -6.6875,2.625 -0.1875,0.53125 1.0625,0 0,-0.53125 -0.875,0 z m 10.1875,0 0.21875,0.53125 0.875,0 0,-0.53125 -1.09375,0 z"
+ id="text11683"
+ inkscape:connector-curvature="0"
+ transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-superscript.svg b/extensions/WikiEditor/modules/images/toolbar/format-superscript.svg
new file mode 100644
index 00000000..0c94275c
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-superscript.svg
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg11148"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-subscript.svg">
+ <defs
+ id="defs11150">
+ <filter
+ inkscape:collect="always"
+ id="filter11711">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.40047554"
+ id="feGaussianBlur11713" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter11735">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.22248641"
+ id="feGaussianBlur11737" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627418"
+ inkscape:cx="9.4578669"
+ inkscape:cy="10.767942"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata11153">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-823.28571,-707.07648)">
+ <text
+ xml:space="preserve"
+ style="font-size:5.07652283px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="676.90649"
+ y="884.87854"
+ id="text11171"
+ sodipodi:linespacing="125%"
+ transform="scale(1.2392818,0.80691898)"><tspan
+ sodipodi:role="line"
+ id="tspan11173"
+ x="676.90649"
+ y="884.87854"
+ style="font-weight:bold;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">â–²</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text11693"
+ y="725.07898"
+ x="825.39417"
+ style="font-size:18.1716404px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#212222;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ xml:space="preserve"><tspan
+ style="font-weight:normal;fill:#212222;fill-opacity:1;-inkscape-font-specification:DejaVu Serif"
+ y="725.07898"
+ x="825.39417"
+ id="tspan11695"
+ sodipodi:role="line">A</tspan></text>
+ <path
+ style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter11735);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ d="m 831.84511,710.73333 4.90625,12.71875 0.28125,0 -4.875,-12.71875 -0.3125,0 z m -1.5,1.8125 -2.59375,6.78125 0.6875,0 2.25,-5.875 -0.34375,-0.90625 z m -3,7.78125 -1.1875,3.125 0.6875,0 1,-2.625 5.6875,0 -0.1875,-0.5 -6,0 z m 0.375,3.65625 0,0.5 -3.5,0 0,0.5 4,0 0,-1 -0.5,0 z m 10.40625,0 0,0.5 -4.65625,0 0,0.5 5.15625,0 0,-1 -0.5,0 z"
+ id="text11167"
+ inkscape:connector-curvature="0"
+ transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)" />
+ <path
+ style="font-size:19.56149483000000089px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter11711);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;opacity:0.6918239"
+ d="m 830.51875,710.76366 -5.0625,13.21875 -1.25,0 0,1.03125 0.5,0 0,-0.5 1.25,0 5.0625,-13.25 1.3125,0 -0.1875,-0.5 -1.625,0 z m 0.8125,2.8125 -0.15625,0.40625 2.28125,5.875 -4.53125,0 -0.1875,0.5 5.21875,0 -2.625,-6.78125 z m 2.6875,7.78125 1,2.625 -1.5625,0 0,1.03125 0.5,0 0,-0.5 1.5625,0 -1.1875,-3.15625 -0.3125,0 z m -6.6875,2.625 -0.1875,0.53125 1.0625,0 0,-0.53125 -0.875,0 z m 10.1875,0 0.21875,0.53125 0.875,0 0,-0.53125 -1.09375,0 z"
+ id="text11683"
+ inkscape:connector-curvature="0"
+ transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-ulist.svg b/extensions/WikiEditor/modules/images/toolbar/format-ulist.svg
new file mode 100644
index 00000000..21091807
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/format-ulist.svg
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ width="22"
+ height="22"
+ id="svg8934"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="format-indent.svg">
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1041"
+ id="namedview3183"
+ showgrid="false"
+ inkscape:zoom="8"
+ inkscape:cx="-21.518622"
+ inkscape:cy="4.2550987"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg8934" />
+ <defs
+ id="defs8936">
+ <linearGradient
+ id="linearGradient9497">
+ <stop
+ id="stop9499"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503"
+ xlink:href="#linearGradient9497"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-1"
+ xlink:href="#linearGradient9497-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ id="linearGradient9497-1">
+ <stop
+ id="stop9499-6"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-7"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9520"
+ xlink:href="#linearGradient9497-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)" />
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9503-3"
+ xlink:href="#linearGradient9497-6"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
+ <linearGradient
+ id="linearGradient9497-6">
+ <stop
+ id="stop9499-0"
+ style="stop-color:#757772;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop9501-1"
+ style="stop-color:#6d6f6a;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085"
+ id="linearGradient9520-2"
+ xlink:href="#linearGradient9497-6"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9497-6"
+ id="linearGradient3189"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.04207,-439.75442)"
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9497-1"
+ id="linearGradient3192"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.13136,-453.81692)"
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9497"
+ id="linearGradient3195"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.13325,-446.76257)"
+ x1="557.13837"
+ y1="505.56085"
+ x2="570.48212"
+ y2="505.56085" />
+ </defs>
+ <metadata
+ id="metadata8939">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <rect
+ style="fill:url(#linearGradient3195);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect8987"
+ y="10.508148"
+ x="7.7045889"
+ height="2.0031219"
+ width="11.551277" />
+ <rect
+ style="fill:url(#linearGradient3192);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect8987-2"
+ y="3.4537961"
+ x="7.706481"
+ height="2.0031219"
+ width="11.551277" />
+ <rect
+ style="fill:url(#linearGradient3189);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect8987-5"
+ y="17.516296"
+ x="7.7958364"
+ height="2.0031219"
+ width="11.551277" />
+ <rect
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3039"
+ y="3.282562"
+ x="2.3276966"
+ height="2.2927809"
+ width="2.2180145" />
+ <rect
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3039-7"
+ y="10.337555"
+ x="2.3276966"
+ height="2.2927809"
+ width="2.2180145" />
+ <rect
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3039-6"
+ y="17.345551"
+ x="2.3276966"
+ height="2.2927809"
+ width="2.2180145" />
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-file.svg b/extensions/WikiEditor/modules/images/toolbar/insert-file.svg
new file mode 100644
index 00000000..012ffeff
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/insert-file.svg
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg8549"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="insert-file.svg">
+ <defs
+ id="defs8551">
+ <linearGradient
+ id="linearGradient9124">
+ <stop
+ style="stop-color:#ffedbc;stop-opacity:1;"
+ offset="0"
+ id="stop9126" />
+ <stop
+ style="stop-color:#f7eca1;stop-opacity:1;"
+ offset="1"
+ id="stop9128" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient9100">
+ <stop
+ style="stop-color:#f4f5f4;stop-opacity:1;"
+ offset="0"
+ id="stop9102" />
+ <stop
+ style="stop-color:#f4f5f4;stop-opacity:0;"
+ offset="1"
+ id="stop9104" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9090">
+ <stop
+ style="stop-color:#766649;stop-opacity:1;"
+ offset="0"
+ id="stop9092" />
+ <stop
+ style="stop-color:#e6a540;stop-opacity:1;"
+ offset="1"
+ id="stop9094" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter9146">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.0990625"
+ id="feGaussianBlur9148" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9090"
+ id="linearGradient9159"
+ gradientUnits="userSpaceOnUse"
+ x1="805.19128"
+ y1="693.05548"
+ x2="805.19128"
+ y2="702.22186" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9124"
+ id="radialGradient9161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5528787,-1.1867658e-7,7.6106348e-8,0.99584878,755.02076,685.64122)"
+ cx="30.513159"
+ cy="16.796043"
+ fx="30.513159"
+ fy="16.796043"
+ r="3.140625" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9100"
+ id="radialGradient9163"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5459471,-0.89508966,0.42455384,0.72967733,750.53948,718.40122)"
+ cx="31.993927"
+ cy="9.0202503"
+ fx="31.993927"
+ fy="9.0202503"
+ r="6.866059" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9100"
+ id="radialGradient9185"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5459471,-0.89508966,0.42455384,0.72967733,727.79019,718.64005)"
+ cx="31.993927"
+ cy="9.0202503"
+ fx="31.993927"
+ fy="9.0202503"
+ r="6.866059" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9124"
+ id="radialGradient9190"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5528787,-1.1867658e-7,7.6106348e-8,0.99584878,732.27147,685.88005)"
+ cx="30.513159"
+ cy="16.796043"
+ fx="30.513159"
+ fy="16.796043"
+ r="3.140625" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9090"
+ id="linearGradient9194"
+ gradientUnits="userSpaceOnUse"
+ x1="805.19128"
+ y1="693.05548"
+ x2="805.19128"
+ y2="702.22186"
+ gradientTransform="translate(-22.749292,0.238835)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="11.000002"
+ inkscape:cy="11.000005"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1041"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata8554">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-771.85712,-687.07648)">
+ <path
+ style="fill:#f4f5f4;fill-opacity:1;fill-rule:nonzero;stroke:#979995;stroke-width:0.98371369;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 773.33551,690.56085 0,15.03125 15.6875,0 1.6875,-1.6875 1.625,-1.59375 0,-11.75 -19,0 z"
+ id="rect8568"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:url(#linearGradient9194);fill-opacity:1;fill-rule:nonzero;stroke:#8a8475;stroke-width:0.98447442;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:1.5;stroke-opacity:1;stroke-dasharray:none"
+ id="rect9088"
+ width="14.78293"
+ height="10.804496"
+ x="775.41565"
+ y="692.71948" />
+ <path
+ style="fill:#001700;fill-opacity:1;stroke:none"
+ d="m 784.01425,702.59563 0.0601,-2.9358 -1.26032,-1.93639 -1.8605,-1.24927 1.80048,0.62463 -0.26028,-1.46793 -1.82531,-2.19755 1.32363,0.61702 0.91039,1.03764 0.35492,1.31728 0.18635,0.79469 1.17065,1.79054 2.04124,-1.92043 1.67975,-2.40736 -0.62239,2.53228 -2.32245,2.54612 0,2.97449 z"
+ id="path9114"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccc" />
+ <path
+ style="fill:url(#radialGradient9190);fill-opacity:1;fill-rule:nonzero;stroke:none;"
+ d="m 779.6728,699.1081 c -1.73172,0 -3.125,1.39328 -3.125,3.125 0,0.1736 0.0354,0.33407 0.0625,0.5 l 6.15625,0 c 0.0271,-0.16593 0.0625,-0.3264 0.0625,-0.5 0,-1.73172 -1.42454,-3.125 -3.15625,-3.125 z"
+ id="path9118"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#193119;fill-opacity:1;stroke:none"
+ d="m 775.90453,703.04526 13.73212,0 0,-0.54833 -13.7798,0 z"
+ id="path9112"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#f4f5f4;fill-opacity:1;stroke:#979995;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1.5;stroke-opacity:1;stroke-dasharray:none"
+ d="m 789.0447,705.53374 3.32589,-3.32589 -3.32589,0 z"
+ id="path9086"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.31132076;fill:url(#radialGradient9185);fill-opacity:1;stroke:none"
+ d="m 775.9663,700.54201 c 0,0 1.79546,-2.81322 6.35713,-4.86346 4.34963,-1.95492 7.3609,-2.47941 7.3609,-2.47941 l -13.76583,0 z"
+ id="path9098"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csccc" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-gallery.svg b/extensions/WikiEditor/modules/images/toolbar/insert-gallery.svg
new file mode 100644
index 00000000..99d73797
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/insert-gallery.svg
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg9197"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="Nowy dokument 44">
+ <defs
+ id="defs9199">
+ <linearGradient
+ id="linearGradient9778">
+ <stop
+ style="stop-color:#f0a829;stop-opacity:1;"
+ offset="0"
+ id="stop9780" />
+ <stop
+ style="stop-color:#f0ad3e;stop-opacity:1;"
+ offset="1"
+ id="stop9782" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9760">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop9762" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop9764" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9760"
+ id="radialGradient9772"
+ cx="8.1702919"
+ cy="6.458025"
+ fx="8.1702919"
+ fy="6.458025"
+ r="5.4584503"
+ gradientTransform="matrix(-1.0337084,0.97885003,-0.83095482,-1.1642322,881.6209,640.19021)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9778"
+ id="linearGradient9784"
+ x1="7.7878532"
+ y1="12.734541"
+ x2="17.905109"
+ y2="8.1800375"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1631645,0,0,1.3512007,858.27422,629.02856)" />
+ <filter
+ inkscape:collect="always"
+ id="filter9873">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.12340545"
+ id="feGaussianBlur9875" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="14.381371"
+ inkscape:cx="7.555295"
+ inkscape:cy="18.334089"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1041"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata9202">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-860.42859,-632.79077)">
+ <g
+ id="g9740"
+ transform="matrix(0.96583758,-0.25914815,0.25914815,0.96583758,-155.70545,250.69009)">
+ <rect
+ y="638.2356"
+ x="883.86444"
+ height="10.078743"
+ width="15.655096"
+ id="rect9216"
+ style="fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#88897f;stroke-width:0.92526156;stroke-opacity:1" />
+ <rect
+ y="639.74615"
+ x="885.29468"
+ height="7.0982141"
+ width="12.767857"
+ id="rect9726"
+ style="fill:#88acd3;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ </g>
+ <g
+ id="g9732"
+ transform="matrix(0.94980636,0.31283842,-0.31283842,0.94980636,225.23946,-243.05113)">
+ <rect
+ style="fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#88897f;stroke-width:0.92526156;stroke-opacity:1"
+ id="rect9734"
+ width="15.655096"
+ height="10.078743"
+ x="883.86444"
+ y="638.2356" />
+ <rect
+ style="fill:#6bbe21;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="rect9736"
+ width="12.767857"
+ height="7.0982141"
+ x="885.29468"
+ y="639.74615" />
+ </g>
+ <rect
+ y="638.32489"
+ x="865.33765"
+ height="10.078743"
+ width="15.655096"
+ id="rect9746"
+ style="fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#88897f;stroke-width:0.92526156;stroke-opacity:1" />
+ <rect
+ y="639.77606"
+ x="866.7262"
+ height="7.0935974"
+ width="12.698151"
+ id="rect9774"
+ style="fill:url(#linearGradient9784);fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path9756"
+ sodipodi:cx="12.342356"
+ sodipodi:cy="11.500305"
+ sodipodi:rx="1.5297568"
+ sodipodi:ry="1.5297568"
+ d="m 13.872113,11.500305 a 1.5297568,1.5297568 0 1 1 -3.059514,0 1.5297568,1.5297568 0 1 1 3.059514,0 z"
+ transform="translate(860.60243,632.92984)" />
+ <rect
+ style="opacity:0.73899369;fill:url(#radialGradient9772);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="rect9758"
+ width="12.698151"
+ height="7.0336046"
+ x="866.75745"
+ y="639.80731" />
+ <path
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ d="m 866.7472,646.07035 1.91945,-0.11086 0.32595,-0.96072 1.19513,-1.14548 0.97784,1.10853 1.70216,0.25865 2.60756,-0.25865 0.50702,-0.99768 1.41243,0.36951 1.05027,1.29328 1.05027,0.44342 0,0.84987 -12.71186,0 z"
+ id="path9752"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.45911949;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter9873)"
+ d="m 6.34375,7.03125 0,7.125 12.75,0 0,-7.125 -12.75,0 z m 0.71875,0.6875 11.125,0 0,5.71875 -11.125,0 0,-5.71875 z"
+ transform="matrix(1.018707,0,0,1.0633975,860.12972,632.15392)"
+ id="rect9748"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-ilink.svg b/extensions/WikiEditor/modules/images/toolbar/insert-ilink.svg
new file mode 100644
index 00000000..58a64a6c
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/insert-ilink.svg
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg7700"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="insert-ilink.svg">
+ <defs
+ id="defs7702">
+ <linearGradient
+ id="linearGradient3759">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3761" />
+ <stop
+ id="stop3767"
+ offset="0.25"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0.75"
+ id="stop3769" />
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="1"
+ id="stop3763" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8229">
+ <stop
+ style="stop-color:#ececec;stop-opacity:1;"
+ offset="0"
+ id="stop8231" />
+ <stop
+ style="stop-color:#9da09f;stop-opacity:1;"
+ offset="1"
+ id="stop8233" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3759"
+ id="linearGradient3765"
+ x1="843.28571"
+ y1="721.07123"
+ x2="865.29926"
+ y2="721.07123"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="pad"
+ gradientTransform="matrix(1,0,0,5.6369887,0,-3352.5089)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3759"
+ id="linearGradient3777"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.62040131,0,0,3.4971952,324.32395,-1809.4892)"
+ spreadMethod="pad"
+ x1="843.28571"
+ y1="721.07123"
+ x2="865.29926"
+ y2="721.07123" />
+ <mask
+ maskUnits="userSpaceOnUse"
+ id="mask3773">
+ <rect
+ style="fill:url(#linearGradient3777);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="rect3775"
+ width="13.657221"
+ height="13.439366"
+ x="847.49951"
+ y="705.51801" />
+ </mask>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.6914316"
+ inkscape:cx="-15.694299"
+ inkscape:cy="66.481165"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7705">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-843.28571,-701.36218)">
+ <g
+ id="g8544"
+ transform="matrix(1.6118599,0,0,1.6118599,-522.76477,-435.86589)"
+ mask="url(#mask3773)">
+ <path
+ sodipodi:nodetypes="ssssssssssssssssss"
+ inkscape:connector-curvature="0"
+ id="rect8508"
+ d="m 847.87034,708.6932 c -1.78875,0 -3.22236,1.30374 -3.22236,2.89165 l 0,1.55466 c 0,1.58791 1.43361,2.89165 3.22236,2.89165 l 2.90712,0 c 1.78875,0 3.22236,-1.30374 3.22236,-2.89165 l 0,-1.55466 c 0,-1.58791 -1.43361,-2.89165 -3.22236,-2.89165 z m 0.51649,1.76812 1.7863,0 c 1.10879,0 1.69598,0.40915 1.69598,1.39344 l 0,0.99498 c 0,0.9843 -0.66558,1.28893 -1.77437,1.28893 l -1.7863,0 c -1.10879,0 -1.59148,-0.34383 -1.59148,-1.32813 l 0,-0.99498 c 0,-0.98429 0.56108,-1.35424 1.66987,-1.35424 z"
+ style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.69803369;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.69803369;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 857.87034,708.6932 c -1.78875,0 -3.22236,1.30374 -3.22236,2.89165 l 0,1.55466 c 0,1.58791 1.43361,2.89165 3.22236,2.89165 l 2.90712,0 c 1.78875,0 3.22236,-1.30374 3.22236,-2.89165 l 0,-1.55466 c 0,-1.58791 -1.43361,-2.89165 -3.22236,-2.89165 z m 0.51649,1.76812 1.7863,0 c 1.10879,0 1.69598,0.40915 1.69598,1.39344 l 0,0.99498 c 0,0.9843 -0.66558,1.28893 -1.77437,1.28893 l -1.7863,0 c -1.10879,0 -1.59148,-0.34383 -1.59148,-1.32813 l 0,-0.99498 c 0,-0.98429 0.56108,-1.35424 1.66987,-1.35424 z"
+ id="path8520"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ssssssssssssssssss" />
+ <path
+ id="path8522"
+ transform="translate(843.28571,701.36218)"
+ d="m 9.90625,8.3125 c 0.219379,0.2493818 0.400172,0.5353409 0.53125,0.84375 l 1.21875,0 C 11.78881,8.8397468 11.967186,8.5700989 12.1875,8.3125 l -2.28125,0 z M 6.375,9.09375 C 5.9621997,9.4039663 5.725025,9.7591417 5.71875,10.0625 l -0.03125,1.25 c -0.0151,0.72807 1.26414,2.375 3.53125,2.375 l 3.6875,0 c 2.26711,0 3.46875,-1.61553 3.46875,-2.34375 l 0,-1.28125 c 0,-0.2949291 -0.211045,-0.6348842 -0.59375,-0.9375 l -0.4375,0 c -0.63503,0 -1.1133,0.14044 -1.40625,0.4375 0.224818,0.1572379 0.34375,0.3524935 0.34375,0.53125 l 0,0.75 c 0,0.45142 -0.90722,0.78125 -2.3125,0.78125 l -2.28125,0 C 8.28222,11.625 7.75,11.29515 7.75,10.84375 l 0,-0.6875 c 0,-0.1767274 0.1306645,-0.3924485 0.375,-0.5625 -0.2943153,-0.3314596 -0.7859446,-0.5 -1.4375,-0.5 l -0.3125,0 z"
+ style="fill:#f4f4f5;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-link.svg b/extensions/WikiEditor/modules/images/toolbar/insert-link.svg
new file mode 100644
index 00000000..0a0f8c4a
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/insert-link.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg7700"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="insert-link.svg">
+ <defs
+ id="defs7702">
+ <linearGradient
+ id="linearGradient8229">
+ <stop
+ style="stop-color:#ececec;stop-opacity:1;"
+ offset="0"
+ id="stop8231" />
+ <stop
+ style="stop-color:#9da09f;stop-opacity:1;"
+ offset="1"
+ id="stop8233" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="38.272727"
+ inkscape:cx="11"
+ inkscape:cy="11"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1041"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7705">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-843.28571,-701.36218)">
+ <g
+ id="g8544"
+ transform="translate(-0.03819,0)">
+ <path
+ sodipodi:nodetypes="ssssssssssssssssss"
+ inkscape:connector-curvature="0"
+ id="rect8508"
+ d="m 847.87034,708.6932 c -1.78875,0 -3.22236,1.30374 -3.22236,2.89165 l 0,1.55466 c 0,1.58791 1.43361,2.89165 3.22236,2.89165 l 2.90712,0 c 1.78875,0 3.22236,-1.30374 3.22236,-2.89165 l 0,-1.55466 c 0,-1.58791 -1.43361,-2.89165 -3.22236,-2.89165 z m 0.51649,1.76812 1.7863,0 c 1.10879,0 1.69598,0.40915 1.69598,1.39344 l 0,0.99498 c 0,0.9843 -0.66558,1.28893 -1.77437,1.28893 l -1.7863,0 c -1.10879,0 -1.59148,-0.34383 -1.59148,-1.32813 l 0,-0.99498 c 0,-0.98429 0.56108,-1.35424 1.66987,-1.35424 z"
+ style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.69803369;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.69803369;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 857.87034,708.6932 c -1.78875,0 -3.22236,1.30374 -3.22236,2.89165 l 0,1.55466 c 0,1.58791 1.43361,2.89165 3.22236,2.89165 l 2.90712,0 c 1.78875,0 3.22236,-1.30374 3.22236,-2.89165 l 0,-1.55466 c 0,-1.58791 -1.43361,-2.89165 -3.22236,-2.89165 z m 0.51649,1.76812 1.7863,0 c 1.10879,0 1.69598,0.40915 1.69598,1.39344 l 0,0.99498 c 0,0.9843 -0.66558,1.28893 -1.77437,1.28893 l -1.7863,0 c -1.10879,0 -1.59148,-0.34383 -1.59148,-1.32813 l 0,-0.99498 c 0,-0.98429 0.56108,-1.35424 1.66987,-1.35424 z"
+ id="path8520"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ssssssssssssssssss" />
+ <path
+ id="path8522"
+ transform="translate(843.28571,701.36218)"
+ d="m 9.90625,8.3125 c 0.219379,0.2493818 0.400172,0.5353409 0.53125,0.84375 l 1.21875,0 C 11.78881,8.8397468 11.967186,8.5700989 12.1875,8.3125 l -2.28125,0 z M 6.375,9.09375 C 5.9621997,9.4039663 5.725025,9.7591417 5.71875,10.0625 l -0.03125,1.25 c -0.0151,0.72807 1.26414,2.375 3.53125,2.375 l 3.6875,0 c 2.26711,0 3.46875,-1.61553 3.46875,-2.34375 l 0,-1.28125 c 0,-0.2949291 -0.211045,-0.6348842 -0.59375,-0.9375 l -0.4375,0 c -0.63503,0 -1.1133,0.14044 -1.40625,0.4375 0.224818,0.1572379 0.34375,0.3524935 0.34375,0.53125 l 0,0.75 c 0,0.45142 -0.90722,0.78125 -2.3125,0.78125 l -2.28125,0 C 8.28222,11.625 7.75,11.29515 7.75,10.84375 l 0,-0.6875 c 0,-0.1767274 0.1306645,-0.3924485 0.375,-0.5625 -0.2943153,-0.3314596 -0.7859446,-0.5 -1.4375,-0.5 l -0.3125,0 z"
+ style="fill:#f4f4f5;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-newline.svg b/extensions/WikiEditor/modules/images/toolbar/insert-newline.svg
new file mode 100644
index 00000000..c7db3a8f
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/insert-newline.svg
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg9896"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="Nowy dokument 48">
+ <defs
+ id="defs9898">
+ <filter
+ inkscape:collect="always"
+ id="filter10487"
+ x="-0.08373546"
+ width="1.1674709"
+ y="-0.13860559"
+ height="1.2772112">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.58113281"
+ id="feGaussianBlur10489" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter10491"
+ x="-0.13307104"
+ width="1.2661421"
+ y="-0.085893642"
+ height="1.1717873">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.58045312"
+ id="feGaussianBlur10493" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="18.926984"
+ inkscape:cy="14.173711"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1041"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata9901">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-364,-521.36218)">
+ <g
+ id="g10495"
+ transform="translate(20.359375,-0.98355932)">
+ <path
+ sodipodi:nodetypes="cccccccccc"
+ inkscape:connector-curvature="0"
+ id="path9915"
+ d="m 353.50893,536.39789 0,5.04465 -7.1875,-7.14286 7.1875,-7.1875 0,4.24107 4.28571,0 0,-6.11607 5.17857,0 0,11.20536 z"
+ style="fill:#373736;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path10454"
+ d="m 361.96875,525.23718 0,10.21875 -9.46875,-0.0625 0,5.0625 1,1 0,-5.0625 9.46875,0.0625 0,-11.21875 -1,0 z m -8.46875,1.875 -1,1 0,2.25 1,0 0,-3.25 z"
+ style="opacity:0.6;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter10491)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path10425"
+ d="m 357.78125,525.23718 0,6.125 -3.28125,0 0,1 4.28125,0 0,-6.125 4.1875,0 0,-1 -5.1875,0 z m -4.28125,1.875 -7.1875,7.1875 1,1 6.1875,-6.1875 0,-2 z"
+ style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter10487)" />
+ </g>
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-nowiki.svg b/extensions/WikiEditor/modules/images/toolbar/insert-nowiki.svg
new file mode 100644
index 00000000..35a788d7
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/insert-nowiki.svg
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg3817"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="insert-nowiki.svg">
+ <defs
+ id="defs3819">
+ <linearGradient
+ id="linearGradient4373">
+ <stop
+ style="stop-color:#a1a0a0;stop-opacity:1;"
+ offset="0"
+ id="stop4375" />
+ <stop
+ style="stop-color:#616363;stop-opacity:1;"
+ offset="1"
+ id="stop4377" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4373"
+ id="linearGradient4379"
+ x1="896.22729"
+ y1="642.37769"
+ x2="884.73309"
+ y2="650.4939"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.97557742,0,0,0.97557742,-0.43357327,15.714485)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="21.175745"
+ inkscape:cx="9.1267246"
+ inkscape:cy="15.351238"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata3822">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-771.85712,-704.2193)">
+ <text
+ xml:space="preserve"
+ style="font-size:15.19591999px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient4379);fill-opacity:1;stroke:#1d201d;stroke-width:0.48778871;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
+ x="861.17706"
+ y="650.73999"
+ id="text4348"
+ sodipodi:linespacing="125%"
+ transform="scale(0.90019997,1.1108643)"><tspan
+ sodipodi:role="line"
+ id="tspan4350"
+ x="861.17706"
+ y="650.73999"
+ style="font-weight:bold;fill:url(#linearGradient4379);fill-opacity:1;stroke:#1d201d;stroke-width:0.48778871;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">W</tspan></text>
+ <path
+ sodipodi:type="arc"
+ style="fill:none;stroke:#c32f2f;stroke-width:2.06862101000000020;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="path3836"
+ sodipodi:cx="-14.805048"
+ sodipodi:cy="10.604217"
+ sodipodi:rx="10.196227"
+ sodipodi:ry="10.196227"
+ d="m -4.6088209,10.604217 a 10.196227,10.196227 0 1 1 -20.3924541,0 10.196227,10.196227 0 1 1 20.3924541,0 z"
+ transform="matrix(0.87014489,0,0,0.87014489,795.88291,706.29079)" />
+ <path
+ style="fill:none;stroke:#c32f2f;stroke-width:1.80000000000000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="M 2.6516504,8.5523442 19.571706,13.981914"
+ id="path4346"
+ inkscape:connector-curvature="0"
+ transform="translate(771.85712,704.2193)" />
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-redirect.svg b/extensions/WikiEditor/modules/images/toolbar/insert-redirect.svg
new file mode 100644
index 00000000..ca036928
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/insert-redirect.svg
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg5908"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="Nowy dokument 19">
+ <defs
+ id="defs5910">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient6439">
+ <stop
+ style="stop-color:#e5e7e2;stop-opacity:1;"
+ offset="0"
+ id="stop6441" />
+ <stop
+ style="stop-color:#e5e7e2;stop-opacity:0;"
+ offset="1"
+ id="stop6443" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6439"
+ id="linearGradient6445"
+ x1="880.47321"
+ y1="718.15826"
+ x2="880.47321"
+ y2="738.3028"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-46,0)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6439"
+ id="linearGradient6454"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-46,0)"
+ x1="880.47321"
+ y1="718.15826"
+ x2="880.47321"
+ y2="738.3028" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="8.8237211"
+ inkscape:cy="2.783125"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1041"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata5913">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-889,-712.79077)">
+ <g
+ id="g6449"
+ transform="translate(65.25943,0.00449032)">
+ <rect
+ y="714.24237"
+ x="824.81775"
+ height="19.087818"
+ width="16.141386"
+ id="rect5927"
+ style="opacity:0.87735847;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#cccdca;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ y="715.54968"
+ x="826.21429"
+ height="16.294643"
+ width="13.214286"
+ id="rect6437"
+ style="opacity:0.87735847;fill:url(#linearGradient6454);fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <path
+ sodipodi:nodetypes="csccccccc"
+ inkscape:connector-curvature="0"
+ id="path6447"
+ d="m 835.61419,718.03653 c 0,0 -2.85604,2.15041 -2.88205,5.68281 -0.0434,5.8954 6.51786,6.38393 6.51786,6.38393 l 0,2.99107 5.51339,-5.51339 -5.55803,-5.55804 0,3.83929 c 0,0 -4.49554,0.91071 -4.71875,-2.39286 -0.1521,-1.68723 -0.19967,-3.02945 1.12758,-5.43281 z"
+ style="fill:#127ea5;fill-opacity:1;stroke:#003553;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-reference.svg b/extensions/WikiEditor/modules/images/toolbar/insert-reference.svg
new file mode 100644
index 00000000..c404e860
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/insert-reference.svg
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg7132"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="Nowy dokument 27">
+ <defs
+ id="defs7134" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.839192"
+ inkscape:cx="-9.8129606"
+ inkscape:cy="7.4207416"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1041"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7137">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-714.71429,-701.36218)">
+ <g
+ id="g7675"
+ transform="translate(26.036511,-0.0978784)">
+ <path
+ sodipodi:nodetypes="ccscscc"
+ inkscape:connector-curvature="0"
+ id="path7155"
+ d="m 691.68161,706.63153 -1.45209,12.6269 c 0,0 3.54369,-1.49312 6.50286,-0.88388 2.14658,0.44194 3.34613,1.38896 3.34613,1.38896 0,0 2.77792,-2.39911 6.12405,-1.6415 3.34613,0.75762 2.90418,0.69448 2.90418,0.69448 l -1.19955,-12.2481"
+ style="fill:#52394e;fill-opacity:1;stroke:#52394e;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ sodipodi:nodetypes="ccsccsc"
+ inkscape:connector-curvature="0"
+ id="path7151"
+ d="m 692.06042,707.26287 -0.82075,10.60661 c 0,0 2.39912,-1.76777 4.9245,-1.19956 2.84205,0.63945 3.47239,1.76776 3.47239,1.76776 l 0,-12.6269 c 0,0 -2.58851,-1.89404 -4.86135,-0.82075 -2.27285,1.07329 -2.71479,2.27284 -2.71479,2.27284 z"
+ style="fill:#ffffff;fill-opacity:1;stroke:#b1b2af;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="csccscc"
+ inkscape:connector-curvature="0"
+ id="path7153"
+ d="m 699.63656,706.06332 c 0,0 2.27285,-2.14658 4.98763,-1.13642 2.71479,1.01015 2.65165,2.0203 2.65165,2.0203 l 1.01016,10.79601 c 0,0 -1.95717,-1.26269 -4.29315,-0.69448 -2.33598,0.56821 -3.53553,1.76776 -3.53553,1.76776 z"
+ style="fill:#ffffff;fill-opacity:1;stroke:#b1b2af;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="csc"
+ inkscape:connector-curvature="0"
+ id="path7157"
+ d="m 699.8891,706.56839 c 0,0 -0.31573,1.12962 2.28105,5.17626 2.65428,4.13625 2.07524,6.56677 2.07524,6.56677"
+ style="fill:none;stroke:#c04848;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-signature.svg b/extensions/WikiEditor/modules/images/toolbar/insert-signature.svg
new file mode 100644
index 00000000..d0fd5d89
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/insert-signature.svg
@@ -0,0 +1,274 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg6665"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="insert-signature.svg">
+ <defs
+ id="defs6667">
+ <linearGradient
+ id="linearGradient3844">
+ <stop
+ style="stop-color:#ececec;stop-opacity:1;"
+ offset="0"
+ id="stop3846" />
+ <stop
+ style="stop-color:#cecece;stop-opacity:1;"
+ offset="1"
+ id="stop3848" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3780">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3782" />
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="1"
+ id="stop3784" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8680">
+ <stop
+ style="stop-color:#2e366a;stop-opacity:0.99215686;"
+ offset="0"
+ id="stop8682" />
+ <stop
+ id="stop8688"
+ offset="0.4154374"
+ style="stop-color:#3c91de;stop-opacity:1;" />
+ <stop
+ style="stop-color:#2e366a;stop-opacity:0.99358976;"
+ offset="1"
+ id="stop8684" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8662">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop8664" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop8666" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8656"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop8658" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient7212">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop7214" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop7216" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8662"
+ id="linearGradient8670"
+ x1="16.330652"
+ y1="8.7101812"
+ x2="17.635729"
+ y2="1.9547856"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8680"
+ id="linearGradient8686"
+ x1="12.19534"
+ y1="11.109293"
+ x2="20.350513"
+ y2="12.52982"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8680"
+ id="linearGradient8809"
+ x1="910.96173"
+ y1="694.78741"
+ x2="921.80005"
+ y2="696.93402"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-26.508294,6.8837482)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3780"
+ id="linearGradient3840"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-19.422226,4.7882523)"
+ x1="914.08923"
+ y1="691.73273"
+ x2="914.625"
+ y2="689.00946" />
+ <mask
+ maskUnits="userSpaceOnUse"
+ id="mask3836">
+ <rect
+ style="fill:url(#linearGradient3840);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="rect3838"
+ width="21.294643"
+ height="21.741072"
+ x="874.80103"
+ y="689.3111" />
+ </mask>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3844"
+ id="radialGradient3850"
+ cx="921.40735"
+ cy="698.09576"
+ fx="921.40735"
+ fy="698.09576"
+ r="3.38059"
+ gradientTransform="matrix(0.37329045,0.12989255,-0.3815617,0.95521397,839.37118,-91.004306)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8680"
+ id="linearGradient3859"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-26.508294,6.8837482)"
+ x1="910.96173"
+ y1="694.78741"
+ x2="921.80005"
+ y2="696.93402" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3844"
+ id="radialGradient3861"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.37329045,0.12989255,-0.3815617,0.95521397,839.37118,-91.004306)"
+ cx="921.40735"
+ cy="698.09576"
+ fx="921.40735"
+ fy="698.09576"
+ r="3.38059" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3844"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.32194816,0.22927541,-0.63390316,0.81005546,1060.6407,-75.559535)"
+ cx="921.40735"
+ cy="698.09576"
+ fx="921.40735"
+ fy="698.09576"
+ r="3.38059" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8680"
+ id="linearGradient3873"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-26.508294,6.8837482)"
+ x1="910.96173"
+ y1="694.78741"
+ x2="921.80005"
+ y2="696.93402" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3844"
+ id="radialGradient3875"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.32194816,0.22927541,-0.63390316,0.81005546,1060.6407,-75.559535)"
+ cx="921.40735"
+ cy="698.09576"
+ fx="921.40735"
+ fy="698.09576"
+ r="3.38059" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="9.8024665"
+ inkscape:cy="9.5718478"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1014"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata6670">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-900.42859,-684.2193)">
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path7202"
+ d="m 2.7162576,15.606291 c 0.014982,-0.0061 0.030116,-0.01186 0.044947,-0.01833 0.044032,-0.0192 0.097586,-0.04461 0.1391489,-0.06714 0.029295,-0.01588 0.115542,-0.06645 0.08666,-0.04983 -1.0038452,0.57765 -1.2838827,0.741183 -0.8581766,0.492994 0.037046,-0.02158 0.073951,-0.0434 0.111137,-0.06473 0.3901054,-0.223795 0.7795876,-0.448685 1.1707359,-0.670652 0.1635679,-0.09282 0.3365902,-0.170765 0.5032587,-0.257936 0.2575795,-0.140862 0.5187569,-0.275236 0.7722876,-0.423334 -2.1829922,1.306573 -1.0930511,0.627884 -0.8202154,0.470171 0.4751945,-0.274686 0.9514185,-0.555191 1.4317232,-0.823686 0.142362,-0.0764 0.2991256,-0.120806 0.4528415,-0.168535 0.092107,-0.02377 0.1895155,-0.05226 0.2845027,-0.03273 0.1019002,0.05033 0.1453779,0.142963 0.182287,0.24448 0.042624,0.163605 0.049796,0.334568 0.06126,0.502654 0.01013,0.221059 0.018945,0.44211 0.029896,0.663161 0.016456,0.256167 0.00893,0.51265 -0.014887,0.767993 -0.02608,0.262109 -0.085432,0.519124 -0.1458886,0.774983 -0.058063,0.245373 -0.1262914,0.488199 -0.1847641,0.733455 -0.048858,0.231812 -0.099166,0.463109 -0.1648223,0.690807 -0.060983,0.207897 -0.1436609,0.408045 -0.224407,0.60874 -0.076214,0.195637 -0.1765255,0.379946 -0.2875951,0.55762 -0.1229874,0.189026 -0.2690224,0.36206 -0.4187308,0.530284 -0.1080837,0.122432 -0.2253887,0.23643 -0.3582161,0.331605 -0.9365499,0.568706 -0.9088579,0.650165 -1.6646157,0.742537 -0.1617523,0.01598 -0.3238321,0.02852 -0.4862917,0.03398 -0.1146667,-0.0056 -0.2089106,-0.0583 -0.3027264,-0.11981 C 1.9620107,20.999097 1.8715075,20.938702 1.7802895,20.879209 1.6972907,20.817586 1.653071,20.717491 1.6033139,20.62964 1.5322312,20.50861 1.4548867,20.391629 1.3913122,20.26633 c -0.07264,-0.167297 -0.077499,-0.350154 -0.075953,-0.529538 0.00745,-0.273623 0.081469,-0.538238 0.1656536,-0.796711 0.1177555,-0.330292 0.2815884,-0.640339 0.4449819,-0.949575 0.1838689,-0.336162 0.3698925,-0.67143 0.574008,-0.995796 0.1722137,-0.280536 0.3960701,-0.521103 0.6240914,-0.756187 0.2471914,-0.251128 0.5159797,-0.479759 0.7906068,-0.700066 0.313975,-0.239169 0.6487409,-0.449607 0.9828024,-0.659265 0.2562013,-0.152136 0.5076318,-0.311266 0.7522445,-0.481369 0.1960321,-0.137571 0.3878661,-0.280917 0.5829129,-0.419856 0.1499281,-0.112844 0.3077473,-0.213969 0.4533425,-0.332505 0.1496353,-0.126105 0.3009994,-0.250081 0.4379018,-0.390134 0.1195688,-0.131818 0.2271819,-0.274088 0.3189983,-0.426504 0.062814,-0.102531 0.113777,-0.2116 0.1599077,-0.322448 0.063539,-0.144198 0.1109773,-0.294886 0.1634422,-0.443344 0.064032,-0.188872 0.126562,-0.378363 0.1864819,-0.568603 0.069997,-0.218007 0.1527336,-0.431587 0.2355382,-0.644965 0.054774,-0.155522 0.1151256,-0.309556 0.1523278,-0.470447 0.026038,-0.144681 0.049854,-0.290434 0.045029,-0.4377538 C 8.3728056,9.8149502 8.2986317,9.7164754 8.2186271,9.6233765 8.1527242,9.5612044 8.0878966,9.4961292 7.9999384,9.4682539 7.8943613,9.4485021 7.7961169,9.4921617 7.7002258,9.5308343 7.672613,9.5438024 7.6443143,9.5554004 7.6173876,9.5697387 7.5876293,9.5855848 7.501067,9.6379656 7.530365,9.621284 7.854214,9.4368913 8.1754789,9.2479294 8.5010524,9.0665988 c 0.033437,-0.018623 -0.06322,0.04321 -0.093763,0.066276 C 8.3324417,9.1893972 8.3044135,9.2171152 8.2347401,9.279519 8.0586202,9.4483447 7.9233976,9.6519943 7.8010037,9.8614313 7.6446745,10.143055 7.5121438,10.43663 7.4008933,10.738685 7.2913871,11.042517 7.242477,11.362648 7.1966248,11.68095 c -0.046701,0.306129 -0.098682,0.611218 -0.1604766,0.914653 -0.069932,0.311062 -0.1303383,0.624124 -0.2053817,0.934029 -0.053132,0.217313 -0.1256675,0.428574 -0.2144463,0.633693 -0.070224,0.153442 -0.1444406,0.304866 -0.2009688,0.464022 -0.023085,0.08928 -0.044673,0.04986 -0.027236,0.02219 0.00703,-0.01116 0.023065,-0.01327 0.03568,-0.01714 0.055026,-0.01686 0.1124832,-0.02441 0.1687912,-0.03631 0.2495019,-0.05445 0.4969053,-0.117852 0.7472309,-0.168556 0.2078164,-0.04257 0.4206442,-0.04789 0.6319581,-0.05484 0.1112543,0.0017 0.222991,-0.008 0.3342245,-0.0037 0.010785,4.09e-4 0.1315998,0.01128 0.1444173,0.01242 0.085402,0.01413 0.1710335,0.02622 0.2517865,0.05899 0.069322,0.0321 0.035224,0.0175 0.1021532,0.04413 0.096055,0.03846 0.1784192,0.09809 0.2647994,0.153327 0.073649,0.04237 0.1387492,0.09149 0.1985346,0.151826 0.069801,0.07284 0.1257312,0.157748 0.1829061,0.240546 0.075399,0.100562 0.1419414,0.207061 0.2040451,0.316171 0.053096,0.100156 0.083151,0.209652 0.117392,0.317073 0.028897,0.07491 0.054643,0.150188 0.066664,0.229714 0.00421,0.07158 0.015172,0.141967 0.026594,0.212643 0.011359,0.02911 2.46e-4,0.06649 0.011714,0.09523 0.00541,0.01355 0.015129,-0.02494 0.023065,-0.03718 0.011365,-0.01752 0.025663,-0.03295 0.038495,-0.04943 -1.6473699,0.951732 -1.0951999,0.71807 -0.7535789,0.329888 0.1826495,-0.207543 0.3377825,-0.433409 0.4931041,-0.661483 0.3230554,-0.499315 0.6008614,-1.025465 0.8693004,-1.555496 0.221221,-0.454212 0.697738,-1.414258 1.360067,-1.001832 0.09569,0.09864 0.130656,0.235312 0.170828,0.363106 0.05204,0.175681 0.102576,0.351999 0.149221,0.529214 0.04699,0.18583 0.08151,0.37423 0.112944,0.563198 0.02677,0.237133 0.05235,0.47409 0.08814,0.710058 0.03428,0.212668 0.06367,0.426352 0.108012,0.637221 0.04557,0.169703 0.07868,0.34187 0.105252,0.515444 0.02396,0.171647 0.0343,0.344972 0.04747,0.517733 0.01488,0.200315 0.04953,0.398524 0.07848,0.597144 0.03496,0.229975 0.07662,0.458743 0.120696,0.687112 0.03845,0.200967 0.0777,0.401683 0.134613,0.598349 0.0354,0.13636 0.08742,0.26712 0.140805,0.39718 0.03573,0.09033 0.07249,0.179719 0.116236,0.266461 0.03868,0.06517 0.07198,0.136032 0.124362,0.191551 0.03586,0.04701 0.07495,0.09145 0.110956,0.138208 0,0 -1.101429,0.656126 -1.101429,0.656126 l 0,0 c -0.03528,-0.04495 -0.06752,-0.09205 -0.102723,-0.137022 -0.05344,-0.0685 -0.09652,-0.143971 -0.136931,-0.220759 -0.04265,-0.09072 -0.08493,-0.180839 -0.113685,-0.277246 -0.05547,-0.135393 -0.09871,-0.27549 -0.133505,-0.417596 -0.05566,-0.202218 -0.09403,-0.407487 -0.128609,-0.614261 -0.04161,-0.229361 -0.09004,-0.457466 -0.127185,-0.687658 -0.034,-0.200007 -0.06664,-0.400419 -0.09074,-0.601875 -0.01332,-0.169591 -0.02923,-0.339002 -0.04597,-0.508257 -0.02563,-0.172233 -0.05242,-0.344519 -0.09624,-0.513271 -0.04161,-0.214841 -0.06837,-0.432032 -0.102606,-0.64811 -0.03153,-0.234649 -0.06223,-0.469334 -0.09324,-0.704051 -0.03109,-0.185035 -0.07426,-0.367436 -0.112127,-0.551139 -0.04449,-0.173758 -0.09469,-0.346743 -0.151172,-0.516884 -0.02349,-0.06181 -0.04615,-0.124371 -0.07439,-0.184247 -0.0027,-0.0058 -0.02385,-0.05109 -0.03331,-0.05446 -0.0038,-0.0014 -0.0056,0.0059 -0.0083,0.0089 -0.04238,0.431954 -0.01018,0.02835 1.044188,-0.598079 0.01795,-0.01066 -0.03748,0.01977 -0.05228,0.03449 -0.08975,0.08926 -0.153018,0.24089 -0.225393,0.341311 -0.31381,0.519598 -0.596513,1.057134 -0.904591,1.580105 -0.138226,0.221515 -0.277079,0.440545 -0.431606,0.651159 -0.01081,0.01474 -0.15741,0.215292 -0.191992,0.237176 -0.3772715,0.238747 -0.7672827,0.456741 -1.1509238,0.685111 -0.02887,0.0019 -0.058438,0.0124 -0.08661,0.0058 -0.026874,-0.0063 -0.050191,-0.02451 -0.070937,-0.04271 -0.052286,-0.04588 -0.053976,-0.09572 -0.057642,-0.158149 -0.00887,-0.0718 -0.026621,-0.142245 -0.026236,-0.214908 -0.00741,-0.07405 -0.025133,-0.145375 -0.052512,-0.214763 -0.026575,-0.100553 -0.051945,-0.201804 -0.099326,-0.295099 -0.056912,-0.106337 -0.120959,-0.208157 -0.1948934,-0.303682 -0.056727,-0.07473 -0.1133246,-0.150592 -0.1814828,-0.215437 -0.055909,-0.05163 -0.1192899,-0.09211 -0.1821679,-0.134745 -0.077625,-0.05375 -0.1611438,-0.09744 -0.248478,-0.133484 -0.1039986,-0.04318 -0.2122199,-0.06926 -0.325112,-0.0758 -0.1533511,-0.01046 -0.3072442,-0.0072 -0.4608359,-0.0046 -0.2041835,0.0058 -0.4080615,0.02076 -0.6082629,0.06387 -0.2525206,0.05286 -0.5027377,0.115275 -0.7545027,0.171468 -0.057625,0.0097 -0.1476894,0.03013 -0.2085337,0.02141 -0.077663,-0.01112 -0.1597738,-0.07269 -0.1470492,-0.160339 0.00262,-0.01803 0.014679,-0.03336 0.022018,-0.05004 0.033638,-0.06959 0.058539,-0.142074 0.090848,-0.212291 0.040671,-0.08839 0.087761,-0.17386 0.1263158,-0.263273 0.096033,-0.201276 0.1759203,-0.40906 0.2395654,-0.622927 0.090072,-0.307158 0.1542067,-0.620475 0.2222366,-0.933056 0.057106,-0.301042 0.102744,-0.603666 0.1552106,-0.905485 0.048603,-0.326463 0.1004989,-0.655268 0.2058798,-0.968975 C 6.4103983,10.945225 6.5353501,10.649404 6.6797727,10.36247 6.7961866,10.144795 6.9232919,9.9336751 7.0902422,9.75003 7.5351459,9.3040342 8.1056686,8.9955291 8.6884875,8.7620282 c 0.1256889,-0.036068 0.2543632,-0.060833 0.3757558,0.00346 0.090074,0.055422 0.1667795,0.1286976 0.2358293,0.2085297 0.094252,0.116132 0.178679,0.2377166 0.2036035,0.3889655 0.013427,0.1577518 -0.011563,0.3119029 -0.031747,0.4682589 -0.010529,0.057463 -0.016746,0.099176 -0.032934,0.1556224 -0.033401,0.1164624 -0.088218,0.2259294 -0.1246818,0.3413884 -0.08508,0.210344 -0.1722066,0.420098 -0.2404575,0.636732 -0.05771,0.189481 -0.1147613,0.379157 -0.1751629,0.567705 -0.050196,0.148813 -0.1005161,0.297497 -0.1471959,0.447455 -0.053123,0.11273 -0.089635,0.233814 -0.1582751,0.339371 -0.096677,0.159039 -0.2018903,0.312507 -0.3232974,0.454109 -0.1258605,0.151197 -0.275562,0.276538 -0.4247797,0.404024 -0.045588,0.03882 -0.089538,0.07961 -0.1363751,0.11691 -0.1032697,0.08224 -0.2199272,0.145039 -0.323707,0.226493 -0.1983624,0.149887 0.023963,-0.01524 -0.183262,0.129644 -0.1386032,0.0969 -0.2707178,0.203158 -0.4112703,0.2974 -0.2489405,0.177555 -0.5042078,0.345361 -0.7704442,0.496145 -0.3367592,0.206226 -0.6724487,0.415458 -0.991997,0.64776 -0.2723213,0.214778 -0.5364281,0.440516 -0.7857476,0.681775 -0.2271957,0.231058 -0.4562523,0.46292 -0.6347064,0.735237 -0.216352,0.317721 -0.408533,0.650929 -0.5897197,0.989826 -0.1558498,0.301637 -0.3127824,0.603033 -0.4306315,0.922183 -0.084928,0.243041 -0.1568744,0.493451 -0.1660699,0.752465 0.00113,0.158061 0.00729,0.320518 0.065694,0.469435 0.05965,0.123148 0.1362585,0.236855 0.2074265,0.353521 0.046765,0.07192 0.090011,0.149767 0.1629358,0.198684 0.08101,0.06413 0.1666965,0.122086 0.2574145,0.171736 0.088055,0.04281 0.1695465,0.06715 0.2686271,0.05993 0.1515264,-0.0012 0.3032783,-0.0066 0.4535735,-0.02736 0.1103917,-0.01631 0.2201976,-0.03396 0.3278808,-0.06409 0.4145129,-0.115996 1.0197914,-0.60846 -0.8266012,0.516908 0.1478191,-0.07849 0.2650675,-0.184499 0.3818233,-0.303699 0.151761,-0.164142 0.3038857,-0.328394 0.4326506,-0.511896 0.107296,-0.1733 0.2140082,-0.347559 0.2928106,-0.536247 0.080229,-0.199643 0.1698965,-0.395509 0.2334674,-0.601419 0.073219,-0.224178 0.1261847,-0.45457 0.1742457,-0.685327 0.054259,-0.247041 0.1255423,-0.489938 0.1861619,-0.735462 0.060901,-0.251514 0.1218702,-0.503683 0.1555321,-0.760603 0.024278,-0.248577 0.033736,-0.498072 0.014942,-0.747532 -0.012474,-0.218845 -0.024976,-0.437614 -0.035828,-0.656534 -0.013863,-0.15431 -0.027381,-0.310524 -0.064487,-0.461133 -0.019344,-0.04998 -0.042869,-0.128433 -0.1102792,-0.113455 -0.082695,0.01604 -0.1659707,0.02956 -0.2455245,0.05872 -0.1468592,0.04807 -0.2935592,0.09717 -0.4257726,0.179398 -0.1044819,0.05858 -0.061879,0.03454 -0.1701311,0.0959 -0.031925,0.0181 -0.1275071,0.07272 -0.095761,0.05431 0.3172726,-0.183974 0.6350084,-0.367149 0.9523446,-0.551014 0.037701,-0.02184 -0.075626,0.0433 -0.1134385,0.06495 -0.3883499,0.224961 -0.7766997,0.449922 -1.1650496,0.674883 -0.2573702,0.143147 -0.5166836,0.282804 -0.7769328,0.42064 -0.1266246,0.06474 -0.2537499,0.128578 -0.3794392,0.195128 -0.041511,0.02198 -0.1646218,0.09051 -0.1240878,0.06677 0.065161,-0.03815 1.3501761,-0.781852 0.8252087,-0.478022 -0.4634021,0.276695 -0.3115777,0.186742 -1.2613365,0.729481 -0.099927,0.0571 -0.208062,0.102156 -0.3188431,0.132947 0,0 1.0158165,-0.776752 1.0158165,-0.776752 z"
+ inkscape:connector-curvature="0"
+ transform="translate(900.42859,684.2193)" />
+ <g
+ id="g3868"
+ transform="translate(-0.1875,0.375)">
+ <path
+ transform="matrix(0.9138951,0.02916988,-0.12956575,1.1023997,194.56326,-104.29886)"
+ mask="url(#mask3836)"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path7210"
+ d="m 888.30688,690.10346 -2.60119,12.43889 5.91169,1.23434 2.57512,-12.50165"
+ style="fill:url(#linearGradient3873);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.50066453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path3842"
+ d="m 912.90679,696.01618 0.30405,5.25331 2.08892,0.60935 2.98991,-4.27396"
+ style="fill:url(#radialGradient3875);fill-opacity:1;stroke:#000000;stroke-width:0.45993432;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path3852"
+ d="m 913.18227,701.08114 0.31101,3.10057 1.90916,-2.43627"
+ style="fill:#313131;fill-opacity:1;stroke:#000000;stroke-width:0.45736727;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-table.svg b/extensions/WikiEditor/modules/images/toolbar/insert-table.svg
new file mode 100644
index 00000000..3585edfc
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/insert-table.svg
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg4674"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="insert-table.svg">
+ <defs
+ id="defs4676" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.4"
+ inkscape:cx="14.917631"
+ inkscape:cy="9.7454912"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1041"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata4679">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-754.71429,-709.93359)">
+ <g
+ id="g6398">
+ <rect
+ transform="matrix(0.99817187,0,0,1.0178786,1.3828921,-13.085829)"
+ y="712.74176"
+ x="756.2171"
+ height="15.99255"
+ width="19.028265"
+ id="rect4693"
+ style="fill:#e6e6e6;fill-opacity:1;stroke:#8c8e89;stroke-width:1.00070357;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;filter:url(#filter6043)" />
+ <rect
+ y="713.93359"
+ x="757.71429"
+ height="2"
+ width="16"
+ id="rect6055"
+ style="fill:#a0bdd9;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <rect
+ y="716.93091"
+ x="757.71429"
+ height="10.047351"
+ width="3"
+ id="rect6057"
+ style="fill:#cfd0c8;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <rect
+ y="715.93835"
+ x="761.70416"
+ height="11.039861"
+ width="11.985021"
+ id="rect6059"
+ style="fill:#f0f2eb;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6061"
+ d="m 761.21785,726.44068 0,-12.01418"
+ style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:0.99643618;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6061-6"
+ d="m 765.9481,726.93359 0,-13.125"
+ style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6061-65"
+ d="m 765.48228,726.43359 0,-12.01418"
+ style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6061-5"
+ d="m 770.34364,726.43359 0,-12.01418"
+ style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6061-68"
+ d="m 773.20619,719.33746 -14.9838,0"
+ style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.00806725;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6061-68-8"
+ d="m 773.21327,716.43359 -14.99898,0"
+ style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6061-68-84"
+ d="m 773.20619,722.40028 -14.9838,0"
+ style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.00806725;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6061-68-9"
+ d="m 773.20619,726.43359 -14.9838,0"
+ style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.00806725;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-xlink.svg b/extensions/WikiEditor/modules/images/toolbar/insert-xlink.svg
new file mode 100644
index 00000000..c7c664b5
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/insert-xlink.svg
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg6475"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="insert-xlink.svg">
+ <defs
+ id="defs6477">
+ <linearGradient
+ id="linearGradient7004">
+ <stop
+ style="stop-color:#8ea8c5;stop-opacity:1;"
+ offset="0"
+ id="stop7006" />
+ <stop
+ style="stop-color:#365f96;stop-opacity:1;"
+ offset="1"
+ id="stop7008" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7004"
+ id="linearGradient7010"
+ x1="1.9835248"
+ y1="1.7316169"
+ x2="-3.7763"
+ y2="15.516348"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7004"
+ id="linearGradient7130"
+ gradientUnits="userSpaceOnUse"
+ x1="1.9835248"
+ y1="1.7316169"
+ x2="-3.7763"
+ y2="15.516348" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.2"
+ inkscape:cx="14.804469"
+ inkscape:cy="22.496339"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1041"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata6480">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-364,-521.36218)">
+ <g
+ id="g7123"
+ transform="translate(-37.98214,-0.06250444)">
+ <path
+ transform="matrix(1.1399776,0,0,1.1399776,413.66918,522.63818)"
+ d="m 7.7678573,8.5848217 c 0,4.6229193 -3.7476166,8.3705363 -8.3705359,8.3705363 -4.6229193,0 -8.3705358,-3.747617 -8.3705358,-8.3705363 0,-4.6229193 3.7476165,-8.37053585 8.3705358,-8.37053585 4.6229193,0 8.3705359,3.74761655 8.3705359,8.37053585 z"
+ sodipodi:ry="8.3705359"
+ sodipodi:rx="8.3705359"
+ sodipodi:cy="8.5848217"
+ sodipodi:cx="-0.6026786"
+ id="path6494"
+ style="fill:url(#linearGradient7130);fill-opacity:1;fill-rule:nonzero;stroke:#1d497d;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="arc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7012"
+ d="m 414.36607,528.58539 0.625,1.65179 -0.9375,0.71429 -0.89286,0.80357 0.84822,1.51785 2.00893,0.89286 0.58035,3.125 0.80358,2.00893 1.02678,-0.89286 0.80357,-2.36607 0.0446,-1.38393 0.75893,-1.07143 -1.25,-1.875 -1.25,-1.25 -1.60714,-1.38392 z"
+ style="fill:#a2b52f;fill-opacity:1;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7014"
+ d="m 406.86607,533.58539 0.58036,2.8125 0.625,0.80358 0.75893,2.36607 0.80357,0.53571 0.58036,-2.27678 0.89285,-0.89286 0.71429,-0.89286 -1.16072,-1.16071 -0.98214,-1.25 -1.20536,-0.66965 -1.83035,-0.26785 -0.80357,-1.11607 -0.84822,-0.66965 1.875,-0.75893 0.625,-1.02678 0.9375,-0.66964 1.38393,-0.89286 0.58036,-0.98214 -2.09822,-0.40179 -0.84821,-0.80357 -1.16072,1.42857 -1.16071,1.38393 -0.3125,1.69643 -0.53571,1.02678 2.09821,1.78572 z"
+ style="fill:#a2b52f;fill-opacity:1;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7016"
+ d="m 410.16964,524.29968 1.20536,1.875 1.20536,-0.9375 1.5625,-0.98214 -0.22322,-0.9375 -2.76785,0.0893 z"
+ style="fill:#a2b52f;fill-opacity:1;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7018"
+ d="m 415.125,527.82647 1.42857,-0.40179 -0.0446,-1.78571 1.33929,-0.35715 1.02678,0.35715 0.89286,1.25 1.29464,1.60714 0.75893,1.83036 -0.13393,1.11607 -1.42857,1.02678 -0.98214,-1.47321 -0.89286,-1.83036 -1.33929,-0.75893 z"
+ style="fill:#a2b52f;fill-opacity:1;stroke:none" />
+ </g>
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/search-replace.svg b/extensions/WikiEditor/modules/images/toolbar/search-replace.svg
new file mode 100644
index 00000000..91cb6ace
--- /dev/null
+++ b/extensions/WikiEditor/modules/images/toolbar/search-replace.svg
@@ -0,0 +1,228 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg10519"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="search-replace.svg">
+ <defs
+ id="defs10521">
+ <linearGradient
+ id="linearGradient11111">
+ <stop
+ style="stop-color:#e6edf5;stop-opacity:1;"
+ offset="0"
+ id="stop11113" />
+ <stop
+ style="stop-color:#7da2cc;stop-opacity:0.58333331;"
+ offset="1"
+ id="stop11115" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11103">
+ <stop
+ style="stop-color:#b8b8b7;stop-opacity:1;"
+ offset="0"
+ id="stop11105" />
+ <stop
+ style="stop-color:#a3a4a3;stop-opacity:1;"
+ offset="1"
+ id="stop11107" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11077">
+ <stop
+ style="stop-color:#a48757;stop-opacity:1;"
+ offset="0"
+ id="stop11079" />
+ <stop
+ style="stop-color:#eeeac6;stop-opacity:1;"
+ offset="1"
+ id="stop11081" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11077"
+ id="linearGradient11095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(66.373514,4.6113592)"
+ x1="819.42767"
+ y1="729.21069"
+ x2="818.52716"
+ y2="728.31018" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11103"
+ id="linearGradient11109"
+ x1="814.55927"
+ y1="726.61975"
+ x2="813.53076"
+ y2="725.49475"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(55.60781,8.9693543)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11111"
+ id="radialGradient11119"
+ cx="6.7155318"
+ cy="4.395853"
+ fx="6.7155318"
+ fy="4.395853"
+ r="5.4276505"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11077"
+ id="linearGradient11142"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(66.373514,4.6113592)"
+ x1="819.42767"
+ y1="729.21069"
+ x2="818.52716"
+ y2="728.31018" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11103"
+ id="linearGradient11144"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(55.60781,8.9693543)"
+ x1="814.55927"
+ y1="726.61975"
+ x2="813.53076"
+ y2="725.49475" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11111"
+ id="radialGradient11146"
+ gradientUnits="userSpaceOnUse"
+ cx="6.7155318"
+ cy="4.395853"
+ fx="6.7155318"
+ fy="4.395853"
+ r="5.4276505" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="18.387223"
+ inkscape:cy="9.028262"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1920"
+ inkscape:window-height="1041"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata10524">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-823.28571,-718.50507)">
+ <g
+ id="g11129"
+ transform="matrix(0.87945853,0,0,0.87945853,60.516821,83.916706)">
+ <rect
+ y="725.56744"
+ x="869.68085"
+ height="17.014757"
+ width="14.18633"
+ id="rect10538"
+ style="fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#878984;stroke-linejoin:round;stroke-opacity:1" />
+ <rect
+ y="726.98163"
+ x="871.19214"
+ height="14.097941"
+ width="11.048544"
+ id="rect11048"
+ style="fill:#eaeaea;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <rect
+ y="729.05878"
+ x="872.24414"
+ height="1.1048543"
+ width="8.9714174"
+ id="rect11050"
+ style="fill:#c6c6c5;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <rect
+ style="fill:#c6c6c5;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="rect11052"
+ width="8.9714174"
+ height="1.1048543"
+ x="872.24414"
+ y="731.05878" />
+ <rect
+ y="735.05878"
+ x="872.24414"
+ height="1.1048543"
+ width="8.9714174"
+ id="rect11054"
+ style="fill:#c6c6c5;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <g
+ id="g11125">
+ <path
+ style="fill:url(#linearGradient11142);fill-opacity:1;stroke:#804f01;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:2;stroke-opacity:1;stroke-dasharray:none"
+ d="m 880.00066,736.45436 9.30287,-9.43545 2.45278,2.34229 -9.30287,9.25867 -3.97748,1.67938 z"
+ id="path11075"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ d="m 878.68802,738.78561 -1.02751,2.33124 2.37543,-1.0938 z"
+ id="path11085"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <g
+ id="g11121">
+ <path
+ style="fill:url(#linearGradient11144);fill-opacity:1;stroke:#878984;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 870.39783,732.42847 -2.45576,2.45578 0,1.99046 1.62855,0 2.63673,-2.63672"
+ id="path11097"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient11146);fill-opacity:1;fill-rule:nonzero;stroke:#878984;stroke-opacity:1"
+ id="path11101"
+ sodipodi:cx="6.9826794"
+ sodipodi:cy="5.9796119"
+ sodipodi:rx="4.9276505"
+ sodipodi:ry="4.9276505"
+ d="m 11.91033,5.9796119 c 0,2.7214662 -2.2061844,4.9276501 -4.9276506,4.9276501 -2.7214662,0 -4.9276505,-2.2061839 -4.9276505,-4.9276501 0,-2.7214662 2.2061843,-4.9276505 4.9276505,-4.9276505 2.7214662,0 4.9276506,2.2061843 4.9276506,4.9276505 z"
+ transform="matrix(0.92061147,0,0,0.92061147,867.88725,724.95103)" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.css b/extensions/WikiEditor/modules/jquery.wikiEditor.css
index d8e331cc..cabe6a94 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.css
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.css
@@ -3,31 +3,27 @@
*/
.wikiEditor-ui {
- float: left;
position: relative;
clear: both;
width: 100%;
background-color: #E0EEf7;
- border: solid silver 1px;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
}
.wikiEditor-ui textarea {
width: 100%;
+ border: 0;
}
.wikiEditor-ui textarea:focus {
outline: none;
}
-.wikiEditor-ui .wikiEditor-ui-bottom {
-
+.wikiEditor-ui .wikiEditor-ui-clear {
+ clear: both;
}
-.wikiEditor-ui .wikiEditor-ui-text {
- line-height: 0;
+.wikiEditor-ui .wikiEditor-ui-view {
+ border: 1px solid silver;
}
.wikiEditor-ui .wikiEditor-ui-top {
position: relative;
- border-bottom: solid silver 1px;
+ border-bottom: 1px solid silver;
}
.wikiEditor-ui .wikiEditor-ui-left {
float: left;
@@ -46,16 +42,14 @@
float: left;
width: 100%;
background-color: white;
- margin-top: -1px;
- border-bottom: solid 1px silver;
}
.wikiEditor-ui-tabs {
float: left;
height: 2.5em;
- margin-left: -1px;
+ margin-right: -1px;
background-color: white;
- border-left: solid 1px silver;
- border-top: solid 1px silver;
+ border-left: 1px solid silver;
+ border-top: 1px solid silver;
}
.wikiEditor-ui-buttons {
float: right;
@@ -63,7 +57,7 @@
margin-right: -1px;
background-color: white;
padding-left: 1em;
- border-top: solid 1px white;
+ border-top: 1px solid white;
}
.wikiEditor-ui-buttons button {
margin-left: 0.5em;
@@ -72,11 +66,11 @@
float: left;
height: 2.5em;
background-color: #f3f3f3;
- border-right: solid 1px silver;
- border-bottom: solid 1px silver;
+ border-right: 1px solid silver;
+ border-bottom: 1px solid silver;
}
.wikiEditor-ui-tabs div.current {
- border-bottom: solid 1px white;
+ border-bottom: 1px solid white;
background-color: white;
}
.wikiEditor-ui-tabs div a {
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.css b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.css
index 39d9d50e..1cc9f5a1 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.css
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.css
@@ -129,7 +129,7 @@ body.rtl .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button {
}
.wikiEditor-template-dialog-fields .wikiEditor-template-dialog-field-wrapper {
padding: 0.75em 0.33em;
- border-bottom: dashed 1px silver;
+ border-bottom: 1px dashed silver;
clear: both;
}
.wikiEditor-template-dialog-fields .wikiEditor-template-dialog-field-wrapper:first-child {
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js
index 0d769164..8cd50a06 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js
@@ -1,8 +1,12 @@
/**
* Configuration of Dialog module for wikiEditor
*/
+/*jshint curly:false, noarg:false, quotmark:false, onevar:false */
+/*global alert */
( function ( $, mw ) {
+var hasOwn = Object.prototype.hasOwnProperty;
+
$.wikiEditor.modules.dialogs.config = {
replaceIcons: function ( $textarea ) {
@@ -124,7 +128,7 @@ $.wikiEditor.modules.dialogs.config = {
if ( typeof arguments.callee.regex === 'undefined' ) {
// Cache the regex
arguments.callee.regex =
- new RegExp( "^(" + mw.config.get( 'wgUrlProtocols' ) + "|www\\.)", 'i');
+ new RegExp( "^(" + mw.config.get( 'wgUrlProtocols' ) + "|www\\.)", 'i' );
}
return s.match( arguments.callee.regex );
}
@@ -146,8 +150,8 @@ $.wikiEditor.modules.dialogs.config = {
.addClass( 'disabled' );
} else {
$( '.ui-dialog:visible .ui-dialog-buttonpane button:first' )
- .removeAttr('disabled')
- .removeClass('disabled');
+ .removeAttr( 'disabled' )
+ .removeClass( 'disabled' );
}
}
@@ -165,7 +169,7 @@ $.wikiEditor.modules.dialogs.config = {
}
var target = $( '#wikieditor-toolbar-link-int-target' ).val();
var cache = $( '#wikieditor-toolbar-link-int-target-status' ).data( 'existencecache' );
- if ( cache[target] ) {
+ if ( hasOwn.call( cache, target ) ) {
updateWidget( cache[target] );
return;
}
@@ -202,8 +206,8 @@ $.wikiEditor.modules.dialogs.config = {
indexpageids: true
} ).done( function ( data ) {
var status;
- if ( !data.query ) {
- // This happens in some weird cases
+ if ( !data.query || !data.query.pages ) {
+ // This happens in some weird cases like interwiki links
status = false;
} else {
var page = data.query.pages[data.query.pageids[0]];
@@ -226,7 +230,7 @@ $.wikiEditor.modules.dialogs.config = {
);
}
$( '#wikieditor-toolbar-link-type-int, #wikieditor-toolbar-link-type-ext' ).click( function () {
- if ( $( '#wikieditor-toolbar-link-type-ext' ).is( ':checked' ) ) {
+ if ( $( '#wikieditor-toolbar-link-type-ext' ).prop( 'checked' ) ) {
// Abort previous request
var request = $( '#wikieditor-toolbar-link-int-target-status' ).data( 'request' );
if ( request ) {
@@ -234,15 +238,16 @@ $.wikiEditor.modules.dialogs.config = {
}
updateWidget( 'external' );
}
- if ( $( '#wikieditor-toolbar-link-type-int' ).is( ':checked' ) )
+ if ( $( '#wikieditor-toolbar-link-type-int' ).prop( 'checked' ) ) {
updateExistence( true );
- });
+ }
+ } );
// Set labels of tabs based on rel values
- $(this).find( '[rel]' ).each( function () {
- $(this).text( mw.msg( $(this).attr( 'rel' ) ) );
- });
+ $( this ).find( '[rel]' ).each( function () {
+ $( this ).text( mw.msg( $( this ).attr( 'rel' ) ) );
+ } );
// Set tabindexes on form fields
- $.wikiEditor.modules.dialogs.fn.setTabindexes( $(this).find( 'input' ).not( '[tabindex]' ) );
+ $.wikiEditor.modules.dialogs.fn.setTabindexes( $( this ).find( 'input' ).not( '[tabindex]' ) );
// Setup the tooltips in the textboxes
$( '#wikieditor-toolbar-link-int-target' )
.data( 'tooltip', mw.msg( 'wikieditor-toolbar-tool-link-int-target-tooltip' ) );
@@ -250,12 +255,12 @@ $.wikiEditor.modules.dialogs.config = {
.data( 'tooltip', mw.msg( 'wikieditor-toolbar-tool-link-int-text-tooltip' ) );
$( '#wikieditor-toolbar-link-int-target, #wikieditor-toolbar-link-int-text' )
.each( function () {
- var tooltip = mw.msg( $( this ).attr( 'id' ) + '-tooltip' );
- if ( $( this ).val() === '' )
+ if ( $( this ).val() === '' ) {
$( this )
.addClass( 'wikieditor-toolbar-dialog-hint' )
.val( $( this ).data( 'tooltip' ) )
.data( 'tooltip-mode', true );
+ }
} )
.focus( function () {
if ( $( this ).val() === $( this ).data( 'tooltip' ) ) {
@@ -264,14 +269,14 @@ $.wikiEditor.modules.dialogs.config = {
.removeClass( 'wikieditor-toolbar-dialog-hint' )
.data( 'tooltip-mode', false );
}
- })
+ } )
.bind( 'change', function () {
if ( $( this ).val() !== $( this ).data( 'tooltip' ) ) {
$( this )
.removeClass( 'wikieditor-toolbar-dialog-hint' )
.data( 'tooltip-mode', false );
}
- })
+ } )
.bind( 'blur', function () {
if ( $( this ).val() === '' ) {
$( this )
@@ -279,13 +284,13 @@ $.wikiEditor.modules.dialogs.config = {
.val( $( this ).data( 'tooltip' ) )
.data( 'tooltip-mode', true );
}
- });
+ } );
// Automatically copy the value of the internal link page title field to the link text field unless the
// user has changed the link text field - this is a convenience thing since most link texts are going to
// be the the same as the page title - Also change the internal/external radio button accordingly
$( '#wikieditor-toolbar-link-int-target' ).bind( 'change keydown paste cut', function () {
- // $(this).val() is the old value, before the keypress - Defer this until $(this).val() has
+ // $( this ).val() is the old value, before the keypress - Defer this until $( this ).val() has
// been updated
setTimeout( function () {
if ( isExternalLink( $( '#wikieditor-toolbar-link-int-target' ).val() ) ) {
@@ -295,28 +300,32 @@ $.wikiEditor.modules.dialogs.config = {
$( '#wikieditor-toolbar-link-type-int' ).prop( 'checked', true );
updateExistence();
}
- if ( $( '#wikieditor-toolbar-link-int-text' ).data( 'untouched' ) )
+ /*jshint eqeqeq:false */
+ if ( $( '#wikieditor-toolbar-link-int-text' ).data( 'untouched' ) ) {
if ( $( '#wikieditor-toolbar-link-int-target' ).val() ==
- $( '#wikieditor-toolbar-link-int-target' ).data( 'tooltip' ) ) {
- $( '#wikieditor-toolbar-link-int-text' )
- .addClass( 'wikieditor-toolbar-dialog-hint' )
- .val( $( '#wikieditor-toolbar-link-int-text' ).data( 'tooltip' ) )
- .change();
- } else {
- $( '#wikieditor-toolbar-link-int-text' )
- .val( $( '#wikieditor-toolbar-link-int-target' ).val() )
- .change();
- }
+ $( '#wikieditor-toolbar-link-int-target' ).data( 'tooltip' )
+ ) {
+ $( '#wikieditor-toolbar-link-int-text' )
+ .addClass( 'wikieditor-toolbar-dialog-hint' )
+ .val( $( '#wikieditor-toolbar-link-int-text' ).data( 'tooltip' ) )
+ .change();
+ } else {
+ $( '#wikieditor-toolbar-link-int-text' )
+ .val( $( '#wikieditor-toolbar-link-int-target' ).val() )
+ .change();
+ }
+ }
}, 0 );
- });
+ } );
$( '#wikieditor-toolbar-link-int-text' ).bind( 'change keydown paste cut', function () {
- var oldVal = $(this).val();
+ var oldVal = $( this ).val();
var that = this;
setTimeout( function () {
- if ( $(that).val() !== oldVal )
- $(that).data( 'untouched', false );
+ if ( $( that ).val() !== oldVal ) {
+ $( that ).data( 'untouched', false );
+ }
}, 0 );
- });
+ } );
// Add images to the page existence widget, which will be shown mutually exclusively to communicate if
// the page exists, does not exist or the title is invalid (like if it contains a | character)
var existsMsg = mw.msg( 'wikieditor-toolbar-tool-link-int-target-status-exists' );
@@ -360,18 +369,18 @@ $.wikiEditor.modules.dialogs.config = {
$( '#wikieditor-toolbar-link-int-target' )
.bind( 'keyup paste cut', function () {
// Cancel the running timer if applicable
- if ( typeof $(this).data( 'timerID' ) !== 'undefined' ) {
- clearTimeout( $(this).data( 'timerID' ) );
+ if ( typeof $( this ).data( 'timerID' ) !== 'undefined' ) {
+ clearTimeout( $( this ).data( 'timerID' ) );
}
// Delay fetch for a while
// FIXME: Make 120 configurable elsewhere
var timerID = setTimeout( updateExistence, 120 );
- $(this).data( 'timerID', timerID );
+ $( this ).data( 'timerID', timerID );
} )
.change( function () {
// Cancel the running timer if applicable
- if ( typeof $(this).data( 'timerID' ) !== 'undefined' ) {
- clearTimeout( $(this).data( 'timerID' ) );
+ if ( typeof $( this ).data( 'timerID' ) !== 'undefined' ) {
+ clearTimeout( $( this ).data( 'timerID' ) );
}
// Fetch right now
updateExistence();
@@ -379,18 +388,18 @@ $.wikiEditor.modules.dialogs.config = {
// Title suggestions
$( '#wikieditor-toolbar-link-int-target' ).data( 'suggcache', {} ).suggestions( {
- fetch: function ( query ) {
+ fetch: function () {
var that = this;
- var title = $(this).val();
+ var title = $( this ).val();
- if ( isExternalLink( title ) || title.indexOf( '|' ) !== -1 || title === '') {
- $(this).suggestions( 'suggestions', [] );
+ if ( isExternalLink( title ) || title.indexOf( '|' ) !== -1 || title === '' ) {
+ $( this ).suggestions( 'suggestions', [] );
return;
}
- var cache = $(this).data( 'suggcache' );
- if ( typeof cache[title] !== 'undefined' ) {
- $(this).suggestions( 'suggestions', cache[title] );
+ var cache = $( this ).data( 'suggcache' );
+ if ( hasOwn.call( cache, title ) ) {
+ $( this ).suggestions( 'suggestions', cache[title] );
return;
}
@@ -406,17 +415,17 @@ $.wikiEditor.modules.dialogs.config = {
dataType: 'json',
success: function ( data ) {
cache[title] = data[1];
- $(that).suggestions( 'suggestions', data[1] );
+ $( that ).suggestions( 'suggestions', data[1] );
}
- });
- $(this).data( 'request', request );
+ } );
+ $( this ).data( 'request', request );
},
cancel: function () {
- var request = $(this).data( 'request' );
+ var request = $( this ).data( 'request' );
if ( request )
request.abort();
}
- });
+ } );
},
dialog: {
width: 500,
@@ -470,21 +479,21 @@ $.wikiEditor.modules.dialogs.config = {
target = 'http://' + target;
// Detect if this is really an internal link in disguise
- var match = target.match( $(this).data( 'articlePathRegex' ) );
- if ( match && !$(this).data( 'ignoreLooksInternal' ) ) {
+ var match = target.match( $( this ).data( 'articlePathRegex' ) );
+ if ( match && !$( this ).data( 'ignoreLooksInternal' ) ) {
var buttons = { };
var that = this;
buttons[ mw.msg( 'wikieditor-toolbar-tool-link-lookslikeinternal-int' ) ] =
function () {
$( '#wikieditor-toolbar-link-int-target' ).val( match[1] ).change();
- $(this).dialog( 'close' );
+ $( this ).dialog( 'close' );
};
buttons[ mw.msg( 'wikieditor-toolbar-tool-link-lookslikeinternal-ext' ) ] =
function () {
- $(that).data( 'ignoreLooksInternal', true );
- $(that).closest( '.ui-dialog' ).find( 'button:first' ).click();
- $(that).data( 'ignoreLooksInternal', false );
- $(this).dialog( 'close' );
+ $( that ).data( 'ignoreLooksInternal', true );
+ $( that ).closest( '.ui-dialog' ).find( 'button:first' ).click();
+ $( that ).data( 'ignoreLooksInternal', false );
+ $( this ).dialog( 'close' );
};
$.wikiEditor.modules.dialogs.quickDialog(
mw.msg( 'wikieditor-toolbar-tool-link-lookslikeinternal', match[1] ),
@@ -507,13 +516,13 @@ $.wikiEditor.modules.dialogs.config = {
if ( whitespace ) {
insertText = whitespace[0] + insertText + whitespace[1];
}
- $(this).dialog( 'close' );
- $.wikiEditor.modules.toolbar.fn.doAction( $(this).data( 'context' ), {
+ $( this ).dialog( 'close' );
+ $.wikiEditor.modules.toolbar.fn.doAction( $( this ).data( 'context' ), {
type: 'replace',
options: {
pre: insertText
}
- }, $(this) );
+ }, $( this ) );
// Blank form
$( '#wikieditor-toolbar-link-int-target, #wikieditor-toolbar-link-int-text' ).val( '' );
@@ -522,9 +531,9 @@ $.wikiEditor.modules.dialogs.config = {
},
'wikieditor-toolbar-tool-link-cancel': function () {
// Clear any saved selection state
- var context = $(this).data( 'context' );
+ var context = $( this ).data( 'context' );
context.fn.restoreCursorAndScrollTop();
- $(this).dialog( 'close' );
+ $( this ).dialog( 'close' );
}
},
open: function () {
@@ -533,12 +542,12 @@ $.wikiEditor.modules.dialogs.config = {
// Obtain the server name without the protocol. wgServer may be protocol-relative
var serverName = mw.config.get( 'wgServer' ).replace( /^(https?:)?\/\//, '' );
// Cache the articlepath regex
- $(this).data( 'articlePathRegex', new RegExp(
+ $( this ).data( 'articlePathRegex', new RegExp(
'^https?://' + $.escapeRE( serverName + mw.config.get( 'wgArticlePath' ) )
.replace( /\\\$1/g, '(.*)' ) + '$'
) );
// Pre-fill the text fields based on the current selection
- var context = $(this).data( 'context' );
+ var context = $( this ).data( 'context' );
// Restore and immediately save selection state, needed for inserting stuff later
context.fn.restoreCursorAndScrollTop();
context.fn.saveCursorAndScrollTop();
@@ -599,27 +608,27 @@ $.wikiEditor.modules.dialogs.config = {
$( '#wikieditor-toolbar-link-int-text, #wikiedit-toolbar-link-int-target' )
.each( function () {
- if ( $(this).val() === '' )
- $(this).parent().find( 'label' ).show();
- });
+ if ( $( this ).val() === '' )
+ $( this ).parent().find( 'label' ).show();
+ } );
- if ( !$(this).data( 'dialogkeypressset' ) ) {
- $(this).data( 'dialogkeypressset', true );
+ if ( !$( this ).data( 'dialogkeypressset' ) ) {
+ $( this ).data( 'dialogkeypressset', true );
// Execute the action associated with the first button
// when the user presses Enter
- $(this).closest( '.ui-dialog' ).keypress( function ( e ) {
- if ( ( e.keyCode || e.which ) == 13 ) {
- var button = $(this).data( 'dialogaction' ) || $(this).find( 'button:first' );
+ $( this ).closest( '.ui-dialog' ).keypress( function ( e ) {
+ if ( ( e.keyCode || e.which ) === 13 ) {
+ var button = $( this ).data( 'dialogaction' ) || $( this ).find( 'button:first' );
button.click();
e.preventDefault();
}
- });
+ } );
// Make tabbing to a button and pressing
// Enter do what people expect
- $(this).closest( '.ui-dialog' ).find( 'button' ).focus( function () {
- $(this).closest( '.ui-dialog' ).data( 'dialogaction', this );
- });
+ $( this ).closest( '.ui-dialog' ).find( 'button' ).focus( function () {
+ $( this ).closest( '.ui-dialog' ).data( 'dialogaction', this );
+ } );
}
}
}
@@ -678,7 +687,7 @@ $.wikiEditor.modules.dialogs.config = {
},
open: function () {
// Pre-fill the text fields based on the current selection
- var context = $(this).data( 'context' );
+ var context = $( this ).data( 'context' );
// Restore and immediately save selection state, needed for inserting stuff later
context.fn.restoreCursorAndScrollTop();
context.fn.saveCursorAndScrollTop();
@@ -706,7 +715,7 @@ $.wikiEditor.modules.dialogs.config = {
// Execute the action associated with the first button
// when the user presses Enter
$( this ).closest( '.ui-dialog' ).keypress( function ( e ) {
- if ( ( e.keyCode || e.which ) == 13 ) {
+ if ( ( e.keyCode || e.which ) === 13 ) {
var button = $( this ).data( 'dialogaction' ) || $( this ).find( 'button:first' );
button.click();
e.preventDefault();
@@ -767,7 +776,7 @@ $.wikiEditor.modules.dialogs.config = {
.find( '[data-i18n-magic]' )
.text( function () {
return magicWordsI18N[ $( this ).attr( 'data-i18n-magic' ) ];
- })
+ } )
.removeAttr( 'data-i18n-magic' )
.end()
.find( '#wikieditor-toolbar-file-size' )
@@ -778,7 +787,7 @@ $.wikiEditor.modules.dialogs.config = {
.find( '[rel]' )
.text( function () {
return mw.msg( $( this ).attr( 'rel' ) );
- })
+ } )
.removeAttr( 'rel' )
.end();
},
@@ -790,7 +799,8 @@ $.wikiEditor.modules.dialogs.config = {
'wikieditor-toolbar-tool-file-insert': function () {
var fileName, caption, fileFloat, fileFormat, fileSize, fileTitle,
options, fileUse,
- hasPxRgx = /.+px$/;
+ hasPxRgx = /.+px$/,
+ magicWordsI18N = mw.config.get( 'wgWikiEditorMagicWords' );
fileName = $( '#wikieditor-toolbar-file-target' ).val();
caption = $( '#wikieditor-toolbar-file-caption' ).val();
fileFloat = $( '#wikieditor-toolbar-file-float' ).val();
@@ -835,10 +845,11 @@ $.wikiEditor.modules.dialogs.config = {
// Restore form state
$( ['#wikieditor-toolbar-file-target',
'#wikieditor-toolbar-file-caption',
- '#wikieditor-toolbar-file-size',
- '#wikieditor-toolbar-file-float',
- '#wikieditor-toolbar-file-format'].join( ',' )
+ '#wikieditor-toolbar-file-size'].join( ',' )
).val( '' );
+ $( '#wikieditor-toolbar-file-float' ).val( 'default' );
+ /*jshint camelcase: false */
+ $( '#wikieditor-toolbar-file-format' ).val( magicWordsI18N.img_thumbnail );
},
'wikieditor-toolbar-tool-file-cancel': function () {
$( this ).dialog( 'close' );
@@ -850,20 +861,20 @@ $.wikiEditor.modules.dialogs.config = {
$( this ).data( 'dialogkeypressset', true );
// Execute the action associated with the first button
// when the user presses Enter
- $( this ).closest( '.ui-dialog' ).keypress( function( e ) {
+ $( this ).closest( '.ui-dialog' ).keypress( function ( e ) {
if ( e.which === 13 ) {
var button = $( this ).data( 'dialogaction' ) ||
$( this ).find( 'button:first' );
button.click();
e.preventDefault();
}
- });
+ } );
// Make tabbing to a button and pressing
// Enter do what people expect
- $( this ).closest( '.ui-dialog' ).find( 'button' ).focus( function() {
+ $( this ).closest( '.ui-dialog' ).find( 'button' ).focus( function () {
$( this ).closest( '.ui-dialog' ).data( 'dialogaction', this );
- });
+ } );
}
}
}
@@ -934,17 +945,17 @@ $.wikiEditor.modules.dialogs.config = {
</div>\
</div></div>',
init: function () {
- $(this).find( '[rel]' ).each( function () {
- $(this).text( mw.msg( $(this).attr( 'rel' ) ) );
- });
+ $( this ).find( '[rel]' ).each( function () {
+ $( this ).text( mw.msg( $( this ).attr( 'rel' ) ) );
+ } );
// Set tabindexes on form fields
- $.wikiEditor.modules.dialogs.fn.setTabindexes( $(this).find( 'input' ).not( '[tabindex]' ) );
+ $.wikiEditor.modules.dialogs.fn.setTabindexes( $( this ).find( 'input' ).not( '[tabindex]' ) );
$( '#wikieditor-toolbar-table-dimensions-rows' ).val( 3 );
$( '#wikieditor-toolbar-table-dimensions-columns' ).val( 3 );
$( '#wikieditor-toolbar-table-wikitable' ).click( function () {
$( '.wikieditor-toolbar-table-preview' ).toggleClass( 'wikitable' );
- });
+ } );
// Hack for sortable preview: dynamically adding
// sortable class doesn't work, so we use a clone
@@ -957,7 +968,7 @@ $.wikiEditor.modules.dialogs.config = {
mw.loader.using( 'jquery.tablesorter', function () {
$( '#wikieditor-toolbar-table-preview2' ).tablesorter();
- });
+ } );
$( '#wikieditor-toolbar-table-sortable' ).click( function () {
// Swap the currently shown one clone with the other one
@@ -968,7 +979,7 @@ $.wikiEditor.modules.dialogs.config = {
.attr( 'id', 'wikieditor-toolbar-table-preview' )
.show();
$( '#wikieditor-toolbar-table-preview3' ).attr( 'id', 'wikieditor-toolbar-table-preview2' );
- });
+ } );
$( '#wikieditor-toolbar-table-dimensions-header' ).click( function () {
// Instead of show/hiding, switch the HTML around
@@ -978,12 +989,12 @@ $.wikiEditor.modules.dialogs.config = {
var hiddenHTML = $( '.wikieditor-toolbar-table-preview-hidden' ).html();
$( '.wikieditor-toolbar-table-preview-header' ).html( hiddenHTML );
$( '.wikieditor-toolbar-table-preview-hidden' ).html( headerHTML );
- if ( typeof jQuery.fn.tablesorter == 'function' ) {
- $( '#wikieditor-toolbar-table-preview, #wikieditor-toolbar-table-preview2' )
- .filter( '.sortable' )
- .tablesorter();
+ if ( typeof jQuery.fn.tablesorter === 'function' ) {
+ $( '#wikieditor-toolbar-table-preview, #wikieditor-toolbar-table-preview2' )
+ .filter( '.sortable' )
+ .tablesorter();
}
- });
+ } );
},
dialog: {
resizable: false,
@@ -996,7 +1007,7 @@ $.wikiEditor.modules.dialogs.config = {
var rows = parseInt( rowsVal, 10 );
var cols = parseInt( colsVal, 10 );
var header = $( '#wikieditor-toolbar-table-dimensions-header' ).prop( 'checked' ) ? 1 : 0;
- if ( isNaN( rows ) || isNaN( cols ) || String( rows ) !== rowsVal || String( cols ) !== colsVal || rowsVal < 0 || colsVal < 0 ) {
+ if ( isNaN( rows ) || isNaN( cols ) || String( rows ) !== rowsVal || String( cols ) !== colsVal || rowsVal < 0 || colsVal < 0 ) {
alert( mw.msg( 'wikieditor-toolbar-tool-table-invalidnumber' ) );
return;
}
@@ -1032,9 +1043,9 @@ $.wikiEditor.modules.dialogs.config = {
if ( $( '#wikieditor-toolbar-table-sortable' ).is( ':checked' ) )
classes.push( 'sortable' );
var classStr = classes.length > 0 ? ' class="' + classes.join( ' ' ) + '"' : '';
- $(this).dialog( 'close' );
+ $( this ).dialog( 'close' );
$.wikiEditor.modules.toolbar.fn.doAction(
- $(this).data( 'context' ),
+ $( this ).data( 'context' ),
{
type: 'replace',
options: {
@@ -1044,7 +1055,7 @@ $.wikiEditor.modules.dialogs.config = {
ownline: true
}
},
- $(this)
+ $( this )
);
// Restore form state
@@ -1060,28 +1071,28 @@ $.wikiEditor.modules.dialogs.config = {
$( '#wikieditor-toolbar-table-sortable' ).click();
},
'wikieditor-toolbar-tool-table-cancel': function () {
- $(this).dialog( 'close' );
+ $( this ).dialog( 'close' );
}
},
open: function () {
$( '#wikieditor-toolbar-table-dimensions-rows' ).focus();
- if ( !( $(this).data( 'dialogkeypressset' ) ) ) {
- $(this).data( 'dialogkeypressset', true );
+ if ( !( $( this ).data( 'dialogkeypressset' ) ) ) {
+ $( this ).data( 'dialogkeypressset', true );
// Execute the action associated with the first button
// when the user presses Enter
- $(this).closest( '.ui-dialog' ).keypress( function ( e ) {
- if ( ( e.keyCode || e.which ) == 13 ) {
- var button = $(this).data( 'dialogaction' ) || $(this).find( 'button:first' );
+ $( this ).closest( '.ui-dialog' ).keypress( function ( e ) {
+ if ( ( e.keyCode || e.which ) === 13 ) {
+ var button = $( this ).data( 'dialogaction' ) || $( this ).find( 'button:first' );
button.click();
e.preventDefault();
}
- });
+ } );
// Make tabbing to a button and pressing
// Enter do what people expect
- $(this).closest( '.ui-dialog' ).find( 'button' ).focus( function () {
- $(this).closest( '.ui-dialog' ).data( 'dialogaction', this );
- });
+ $( this ).closest( '.ui-dialog' ).find( 'button' ).focus( function () {
+ $( this ).closest( '.ui-dialog' ).data( 'dialogaction', this );
+ } );
}
}
}
@@ -1133,14 +1144,14 @@ $.wikiEditor.modules.dialogs.config = {
</div>\
</fieldset>',
init: function () {
- $(this).find( '[rel]' ).each( function () {
- $(this).text( mw.msg( $(this).attr( 'rel' ) ) );
- });
+ $( this ).find( '[rel]' ).each( function () {
+ $( this ).text( mw.msg( $( this ).attr( 'rel' ) ) );
+ } );
// Set tabindexes on form fields
- $.wikiEditor.modules.dialogs.fn.setTabindexes( $(this).find( 'input' ).not( '[tabindex]' ) );
+ $.wikiEditor.modules.dialogs.fn.setTabindexes( $( this ).find( 'input' ).not( '[tabindex]' ) );
// TODO: Find a cleaner way to share this function
- $(this).data( 'replaceCallback', function ( mode ) {
+ $( this ).data( 'replaceCallback', function ( mode ) {
var offset, textRemainder, regex, index, i,
start, end;
@@ -1180,14 +1191,14 @@ $.wikiEditor.modules.dialogs.config = {
return;
}
- var $textarea = $(this).data( 'context' ).$textarea;
+ var $textarea = $( this ).data( 'context' ).$textarea;
var text = $textarea.textSelection( 'getContents' );
var match = false;
if ( mode !== 'replaceAll' ) {
if ( mode === 'replace' ) {
- offset = $(this).data( 'matchIndex' );
+ offset = $( this ).data( 'matchIndex' );
} else {
- offset = $(this).data( 'offset' );
+ offset = $( this ).data( 'offset' );
}
textRemainder = text.substr( offset );
match = textRemainder.match( regex );
@@ -1202,7 +1213,7 @@ $.wikiEditor.modules.dialogs.config = {
if ( !match ) {
$( '#wikieditor-toolbar-replace-nomatch' ).show();
- } else if ( mode == 'replaceAll' ) {
+ } else if ( mode === 'replaceAll' ) {
// Instead of using repetitive .match() calls, we use one .match() call with /g
// and indexOf() followed by substr() to find the offsets. This is actually
// faster because our indexOf+substr loop is faster than a match loop, and the
@@ -1234,20 +1245,20 @@ $.wikiEditor.modules.dialogs.config = {
$( '#wikieditor-toolbar-replace-success' )
.text( mw.msg( 'wikieditor-toolbar-tool-replace-success', match.length ) )
.show();
- $(this).data( 'offset', 0 );
+ $( this ).data( 'offset', 0 );
} else {
- if ( mode == 'replace' ) {
+ if ( mode === 'replace' ) {
var actualReplacement;
- if (isRegex) {
+ if ( isRegex ) {
// If backreferences (like $1) are used, the actual actual replacement string will be different
actualReplacement = match[0].replace( regex, replaceStr );
} else {
actualReplacement = replaceStr;
}
- if (match) {
+ if ( match ) {
// Do the replacement
$textarea.textSelection( 'encapsulateSelection', {
'peri': actualReplacement,
@@ -1261,7 +1272,7 @@ $.wikiEditor.modules.dialogs.config = {
textRemainder = text.substr( offset );
match = textRemainder.match( regex );
- if (match) {
+ if ( match ) {
start = offset + match.index;
end = start + match[0].length;
} else {
@@ -1269,7 +1280,7 @@ $.wikiEditor.modules.dialogs.config = {
// TODO: Add a "Wrap around" option.
textRemainder = text;
match = textRemainder.match( regex );
- if (match) {
+ if ( match ) {
start = match.index;
end = start + match[0].length;
} else {
@@ -1283,7 +1294,7 @@ $.wikiEditor.modules.dialogs.config = {
end = start + match[0].length;
}
- $( this ).data( 'matchIndex', start);
+ $( this ).data( 'matchIndex', start );
$textarea.textSelection( 'setSelection', {
'start': start,
@@ -1291,12 +1302,9 @@ $.wikiEditor.modules.dialogs.config = {
} );
$textarea.textSelection( 'scrollToCaretPosition' );
$( this ).data( 'offset', end );
- var context = $( this ).data( 'context' );
- var textbox = typeof context.$iframe !== 'undefined' ?
- context.$iframe[0].contentWindow : $textarea[0];
- textbox.focus();
+ $textarea[0].focus();
}
- });
+ } );
},
dialog: {
width: 500,
@@ -1304,69 +1312,67 @@ $.wikiEditor.modules.dialogs.config = {
modal: false,
buttons: {
'wikieditor-toolbar-tool-replace-button-findnext': function ( e ) {
- $(this).closest( '.ui-dialog' ).data( 'dialogaction', e.target );
- $(this).data( 'replaceCallback' ).call( this, 'find' );
+ $( this ).closest( '.ui-dialog' ).data( 'dialogaction', e.target );
+ $( this ).data( 'replaceCallback' ).call( this, 'find' );
},
'wikieditor-toolbar-tool-replace-button-replace': function ( e ) {
- $(this).closest( '.ui-dialog' ).data( 'dialogaction', e.target );
- $(this).data( 'replaceCallback' ).call( this, 'replace' );
+ $( this ).closest( '.ui-dialog' ).data( 'dialogaction', e.target );
+ $( this ).data( 'replaceCallback' ).call( this, 'replace' );
},
'wikieditor-toolbar-tool-replace-button-replaceall': function ( e ) {
- $(this).closest( '.ui-dialog' ).data( 'dialogaction', e.target );
- $(this).data( 'replaceCallback' ).call( this, 'replaceAll' );
+ $( this ).closest( '.ui-dialog' ).data( 'dialogaction', e.target );
+ $( this ).data( 'replaceCallback' ).call( this, 'replaceAll' );
},
'wikieditor-toolbar-tool-replace-close': function () {
- $(this).dialog( 'close' );
+ $( this ).dialog( 'close' );
}
},
open: function () {
- $(this).data( 'offset', 0 );
- $(this).data( 'matchIndex', 0 );
+ $( this ).data( 'offset', 0 );
+ $( this ).data( 'matchIndex', 0 );
$( '#wikieditor-toolbar-replace-search' ).focus();
$( '#wikieditor-toolbar-replace-nomatch, #wikieditor-toolbar-replace-success, #wikieditor-toolbar-replace-emptysearch, #wikieditor-toolbar-replace-invalidregex' ).hide();
- if ( !( $(this).data( 'onetimeonlystuff' ) ) ) {
- $(this).data( 'onetimeonlystuff', true );
+ if ( !( $( this ).data( 'onetimeonlystuff' ) ) ) {
+ $( this ).data( 'onetimeonlystuff', true );
// Execute the action associated with the first button
// when the user presses Enter
- $(this).closest( '.ui-dialog' ).keypress( function ( e ) {
- if ( ( e.keyCode || e.which ) == 13 ) {
- var button = $(this).data( 'dialogaction' ) || $(this).find( 'button:first' );
+ $( this ).closest( '.ui-dialog' ).keypress( function ( e ) {
+ if ( ( e.keyCode || e.which ) === 13 ) {
+ var button = $( this ).data( 'dialogaction' ) || $( this ).find( 'button:first' );
button.click();
e.preventDefault();
}
- });
+ } );
// Make tabbing to a button and pressing
// Enter do what people expect
- $(this).closest( '.ui-dialog' ).find( 'button' ).focus( function () {
- $(this).closest( '.ui-dialog' ).data( 'dialogaction', this );
- });
+ $( this ).closest( '.ui-dialog' ).find( 'button' ).focus( function () {
+ $( this ).closest( '.ui-dialog' ).data( 'dialogaction', this );
+ } );
}
- var dialog = $(this).closest( '.ui-dialog' );
+ var dialog = $( this ).closest( '.ui-dialog' );
var that = this;
- var context = $(this).data( 'context' );
- var textbox = typeof context.$iframe !== 'undefined' ?
- context.$iframe[0].contentWindow.document : context.$textarea;
+ var context = $( this ).data( 'context' );
+ var textbox = context.$textarea;
$( textbox )
.bind( 'keypress.srdialog', function ( e ) {
- if ( e.which == 13 ) {
+ if ( e.which === 13 ) {
// Enter
var button = dialog.data( 'dialogaction' ) || dialog.find( 'button:first' );
button.click();
e.preventDefault();
- } else if ( e.which == 27 ) {
+ } else if ( e.which === 27 ) {
// Escape
- $(that).dialog( 'close' );
+ $( that ).dialog( 'close' );
}
- });
+ } );
},
close: function () {
- var context = $(this).data( 'context' );
- var textbox = typeof context.$iframe !== 'undefined' ?
- context.$iframe[0].contentWindow.document : context.$textarea;
+ var context = $( this ).data( 'context' );
+ var textbox = context.$textarea;
$( textbox ).unbind( 'keypress.srdialog' );
- $(this).closest( '.ui-dialog' ).data( 'dialogaction', false );
+ $( this ).closest( '.ui-dialog' ).data( 'dialogaction', false );
}
}
}
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.js b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.js
index f6d86d78..907b0485 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.js
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.js
@@ -42,8 +42,8 @@ $.wikiEditor.modules.dialogs = {
},
openDialog: function ( context, module ) {
if ( module in $.wikiEditor.modules.dialogs.modules ) {
- var mod = $.wikiEditor.modules.dialogs.modules[module];
- var $dialog = $( '#' + mod.id );
+ var mod = $.wikiEditor.modules.dialogs.modules[module],
+ $dialog = $( '#' + mod.id );
if ( $dialog.length === 0 ) {
$.wikiEditor.modules.dialogs.fn.reallyCreate( context, mod, module );
$dialog = $( '#' + mod.id );
@@ -77,12 +77,12 @@ $.wikiEditor.modules.dialogs = {
create: function ( context, config ) {
var mod, module, filtered, i, $existingDialog;
- // Defer building of modules, but do check whether they need the iframe rightaway
+ // Defer building of modules, unless they require immediate creation
for ( mod in config ) {
module = config[mod];
// Only create the dialog if it's supported, isn't filtered and doesn't exist yet
filtered = false;
- if ( typeof module.filters != 'undefined' ) {
+ if ( typeof module.filters !== 'undefined' ) {
for ( i = 0; i < module.filters.length; i++ ) {
if ( $( module.filters[i] ).length === 0 ) {
filtered = true;
@@ -92,17 +92,13 @@ $.wikiEditor.modules.dialogs = {
}
// If the dialog already exists, but for another textarea, simply remove it
$existingDialog = $( '#' + module.id );
- if ( $existingDialog.length > 0 && $existingDialog.data( 'context' ).$textarea != context.$textarea ) {
+ if ( $existingDialog.length > 0 && $existingDialog.data( 'context' ).$textarea !== context.$textarea ) {
$existingDialog.remove();
}
// Re-select from the DOM, we might have removed the dialog just now
$existingDialog = $( '#' + module.id );
if ( !filtered && $.wikiEditor.isSupported( module ) && $existingDialog.length === 0 ) {
$.wikiEditor.modules.dialogs.modules[mod] = module;
- // If this dialog requires the iframe, set it up
- if ( typeof context.$iframe === 'undefined' && $.wikiEditor.isRequired( module, 'iframe' ) ) {
- context.fn.setupIframe();
- }
context.$textarea.trigger( 'wikiEditor-dialogs-setup-' + mod );
// If this dialog requires immediate creation, create it now
if ( typeof module.immediateCreate !== 'undefined' && module.immediateCreate ) {
@@ -119,13 +115,13 @@ $.wikiEditor.modules.dialogs = {
* @param {String} name Dialog name (key in $.wikiEditor.modules.dialogs.modules)
*/
reallyCreate: function ( context, module, name ) {
- var msg,
+ var msg, dialogDiv,
configuration = module.dialog;
// Add some stuff to configuration
configuration.bgiframe = true;
configuration.autoOpen = false;
// By default our dialogs are modal, unless explicitely defined in their specific configuration.
- if( typeof configuration.modal == "undefined" ) {
+ if ( typeof configuration.modal === 'undefined' ) {
configuration.modal = true;
}
configuration.title = $.wikiEditor.autoMsg( module, 'title' );
@@ -138,7 +134,7 @@ $.wikiEditor.modules.dialogs = {
}
configuration.buttons = configuration.newButtons;
// Create the dialog <div>
- var dialogDiv = $( '<div>' )
+ dialogDiv = $( '<div>' )
.attr( 'id', module.id )
.html( module.html )
.data( 'context', context )
@@ -152,9 +148,9 @@ $.wikiEditor.modules.dialogs = {
dialogDiv
.bind( 'dialogopen', $.wikiEditor.modules.dialogs.fn.resize )
.find( '.ui-tabs' ).bind( 'tabsshow', function () {
- $(this).closest( '.ui-dialog-content' ).each(
+ $( this ).closest( '.ui-dialog-content' ).each(
$.wikiEditor.modules.dialogs.fn.resize );
- });
+ } );
}
dialogDiv.bind( 'dialogclose', function () {
context.fn.restoreSelection();
@@ -171,36 +167,38 @@ $.wikiEditor.modules.dialogs = {
* NOTE: This function assumes $.ui.dialog has already been loaded
*/
resize: function () {
- var wrapper = $(this).closest( '.ui-dialog' );
- var oldWidth = wrapper.width();
- // Make sure elements don't wrapped so we get an accurate idea of whether they really fit. Also temporarily show
- // hidden elements. Work around jQuery bug where <div style="display: inline;"/> inside a dialog is both
- // :visible and :hidden
- var oldHidden = $(this).find( '*' ).not( ':visible' );
+ var oldWS, thisWidth, wrapperWidth,
+ wrapper = $( this ).closest( '.ui-dialog' ),
+ oldWidth = wrapper.width(),
+ // Make sure elements don't wrapped so we get an accurate idea of whether they really fit. Also temporarily show
+ // hidden elements. Work around jQuery bug where <div style="display: inline;"/> inside a dialog is both
+ // :visible and :hidden
+ oldHidden = $( this ).find( '*' ).not( ':visible' );
+
// Save the style attributes of the hidden elements to restore them later. Calling hide() after show() messes up
// for elements hidden with a class
oldHidden.each( function () {
- $(this).data( 'oldstyle', $(this).attr( 'style' ) );
- });
+ $( this ).data( 'oldstyle', $( this ).attr( 'style' ) );
+ } );
oldHidden.show();
- var oldWS = $(this).css( 'white-space' );
- $(this).css( 'white-space', 'nowrap' );
- if ( wrapper.width() <= $(this).get(0).scrollWidth ) {
- var thisWidth = $(this).data( 'thisWidth' ) ? $(this).data( 'thisWidth' ) : 0;
- thisWidth = Math.max( $(this).get(0).width, thisWidth );
- $(this).width( thisWidth );
- $(this).data( 'thisWidth', thisWidth );
- var wrapperWidth = $(this).data( 'wrapperWidth' ) ? $(this).data( 'wrapperWidth' ) : 0;
- wrapperWidth = Math.max( wrapper.get(0).scrollWidth, wrapperWidth );
+ oldWS = $( this ).css( 'white-space' );
+ $( this ).css( 'white-space', 'nowrap' );
+ if ( wrapper.width() <= $( this ).get( 0 ).scrollWidth ) {
+ thisWidth = $( this ).data( 'thisWidth' ) ? $( this ).data( 'thisWidth' ) : 0;
+ thisWidth = Math.max( $( this ).get( 0 ).width, thisWidth );
+ $( this ).width( thisWidth );
+ $( this ).data( 'thisWidth', thisWidth );
+ wrapperWidth = $( this ).data( 'wrapperWidth' ) ? $( this ).data( 'wrapperWidth' ) : 0;
+ wrapperWidth = Math.max( wrapper.get( 0 ).scrollWidth, wrapperWidth );
wrapper.width( wrapperWidth );
- $(this).data( 'wrapperWidth', wrapperWidth );
- $(this).dialog( { 'width': wrapper.width() } );
+ $( this ).data( 'wrapperWidth', wrapperWidth );
+ $( this ).dialog( { 'width': wrapper.width() } );
wrapper.css( 'left', parseInt( wrapper.css( 'left' ), 10 ) - ( wrapper.width() - oldWidth ) / 2 );
}
- $(this).css( 'white-space', oldWS );
+ $( this ).css( 'white-space', oldWS );
oldHidden.each( function () {
- $(this).attr( 'style', $(this).data( 'oldstyle' ) );
- });
+ $( this ).attr( 'style', $( this ).data( 'oldstyle' ) );
+ } );
},
/**
* Set the right tabindexes on elements in a dialog
@@ -210,7 +208,7 @@ $.wikiEditor.modules.dialogs = {
// Get the highest tab index
var tabIndex = $( document ).lastTabIndex() + 1;
$elements.each( function () {
- $(this).attr( 'tabindex', tabIndex++ );
+ $( this ).attr( 'tabindex', tabIndex++ );
} );
}
},
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.highlight.js b/extensions/WikiEditor/modules/jquery.wikiEditor.highlight.js
deleted file mode 100644
index 9d964fa7..00000000
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.highlight.js
+++ /dev/null
@@ -1,373 +0,0 @@
-/* Highlight module for wikiEditor */
-
-( function ( $ ) {
-
-$.wikiEditor.modules.highlight = {
-
- /**
- * Core Requirements
- */
- req: [ 'iframe' ],
-
- /**
- * Configuration
- */
- cfg: {
- styleVersion: 3
- },
-
- /**
- * Internally used event handlers
- */
- evt: {
- delayedChange: function ( context, event ) {
- if ( event.data.scope == 'realchange' ) {
- $.wikiEditor.modules.highlight.fn.scan( context );
- $.wikiEditor.modules.highlight.fn.mark( context, event.data.scope );
- }
- },
- ready: function ( context, event ) {
- $.wikiEditor.modules.highlight.fn.scan( context );
- $.wikiEditor.modules.highlight.fn.mark( context, 'ready' );
- }
- },
-
- /**
- * Internally used functions
- */
- fn: {
- /**
- * Creates a highlight module within a wikiEditor
- *
- * @param config Configuration object to create module from
- */
- create: function ( context, config ) {
- context.modules.highlight.markersStr = '';
- },
- /**
- * Scans text division for tokens
- *
- * @param division
- */
- scan: function ( context, division ) {
- var tokenArray, text, module, exp,
- left, right, match;
- /*jshint eqnull: true */
-
- // Remove all existing tokens
- tokenArray = context.modules.highlight.tokenArray = [];
- // Scan text for new tokens
- text = context.fn.getContents();
- // Perform a scan for each module which provides any expressions to scan for
- // FIXME: This traverses the entire string once for every regex. Investigate
- // whether |-concatenating regexes then traversing once is faster.
- for ( module in context.modules ) {
- if ( module in $.wikiEditor.modules && 'exp' in $.wikiEditor.modules[module] ) {
- for ( exp in $.wikiEditor.modules[module].exp ) {
- // Prepare configuration
- var regex = $.wikiEditor.modules[module].exp[exp].regex;
- var label = $.wikiEditor.modules[module].exp[exp].label;
- var markAfter = $.wikiEditor.modules[module].exp[exp].markAfter || false;
- // Search for tokens
- var offset = 0;
- while ( ( match = text.substr( offset ).match( regex ) ) != null ) {
- right = ( left = offset + match.index ) + match[0].length;
- tokenArray[tokenArray.length] = {
- offset: markAfter ? right : left,
- label: label,
- tokenStart: left,
- match: match
- };
- // Move to the right of this match
- offset = right;
- }
- }
- }
- }
- // Sort by start
- tokenArray.sort( function ( a, b ) {
- return a.tokenStart - b.tokenStart;
- } );
- // Let the world know, a scan just happened!
- context.fn.trigger( 'scan' );
- },
-
- /**
- * Marks up text with HTML
- *
- * @param division
- * @param tokens
- */
- // FIXME: What do division and tokens do?
- // TODO: Document the scan() and mark() APIs somewhere
- mark: function ( context, division, tokens ) {
- var i, subtracted, oldLength, j, o;
-
- // Reset markers
- var markers = [];
-
- // Recycle markers that will be skipped in this run
- if ( context.modules.highlight.markers && division !== '' ) {
- for ( i = 0; i < context.modules.highlight.markers.length; i++ ) {
- if ( context.modules.highlight.markers[i].skipDivision == division ) {
- markers.push( context.modules.highlight.markers[i] );
- }
- }
- }
- context.modules.highlight.markers = markers;
-
- // Get all markers
- context.fn.trigger( 'mark' );
- markers.sort( function ( a, b ) {
- return a.start - b.start || a.end - b.end;
- } );
-
- // Serialize the markers array to a string and compare it with the one stored in the previous run - if they're
- // equal, there's no markers to change
- var markersStr = '';
- for ( i = 0; i < markers.length; i++ ) {
- markersStr += markers[i].start + ',' + markers[i].end + ',' + markers[i].type + ',';
- }
- if ( context.modules.highlight.markersStr == markersStr ) {
- // No change, bail out
- return;
- }
- context.modules.highlight.markersStr = markersStr;
-
- // Traverse the iframe DOM, inserting markers where they're needed - store visited markers here so we know which
- // markers should be removed
- var visited = [], v = 0;
- for ( i = 0; i < markers.length; i++ ) {
- if ( typeof markers[i].skipDivision !== 'undefined' && ( division == markers[i].skipDivision ) ) {
- continue;
- }
-
- // We want to isolate each marker, so we may need to split textNodes if a marker starts or ends halfway one.
- var start = markers[i].start;
- var s = context.fn.getOffset( start );
- if ( !s ) {
- // This shouldn't happen
- continue;
- }
- var startNode = s.node;
-
- // Don't wrap leading BRs, produces undesirable results
- // FIXME: It's also possible that the offset is a bit high because getOffset() has incremented .length to
- // fake the newline caused by startNode being in a P. In this case, prevent the textnode splitting below
- // from making startNode an empty textnode, IE barfs on that
- while ( startNode.nodeName === 'BR' || s.offset === startNode.nodeValue.length ) {
- start++;
- s = context.fn.getOffset( start );
- startNode = s.node;
- }
-
- // The next marker starts somewhere in this textNode or at this BR
- if ( s.offset > 0 && s.node.nodeName == '#text' ) {
- // Split off the prefix - this leaves the prefix in the current node and puts the rest in a new node
- // which is our start node
- var newStartNode = startNode.splitText( s.offset < s.node.nodeValue.length ?
- s.offset : s.node.nodeValue.length - 1
- );
- var oldStartNode = startNode;
- startNode = newStartNode;
- // Update offset objects. We don't need purgeOffsets(), simply manipulating the existing offset objects
- // will suffice
- // FIXME: This manipulates context.offsets directly, which is ugly, but the performance improvement vs.
- // purgeOffsets() is worth it - this code doesn't set lastTextNode to newStartNode for offset objects
- // with lastTextNode == oldStartNode, but that doesn't really matter
- subtracted = s.offset;
- oldLength = s.length;
-
- // Update offset objects referring to oldStartNode
- for ( j = start - subtracted; j < start; j++ ) {
- if ( j in context.offsets ) {
- o = context.offsets[j];
- o.node = oldStartNode;
- o.length = subtracted;
- }
- }
- // Update offset objects referring to newStartNode
- for ( j = start; j < start - subtracted + oldLength; j++ ) {
- if ( j in context.offsets ) {
- o = context.offsets[j];
- o.node = newStartNode;
- o.offset -= subtracted;
- o.length -= subtracted;
- o.lastTextNode = oldStartNode;
- }
- }
- }
- var end = markers[i].end;
- // To avoid ending up at the first char of the next node, we grab the offset for end - 1 and add one to the
- // offset
- var e = context.fn.getOffset( end - 1 );
- if ( !e ) {
- // This shouldn't happen
- continue;
- }
- var endNode = e.node;
- if ( e.offset + 1 < e.length - 1 && endNode.nodeName == '#text' ) {
- // Split off the suffix. This puts the suffix in a new node and leaves the rest in endNode
- var oldEndNode = endNode;
- var newEndNode = endNode.splitText( e.offset + 1 );
- // Update offset objects
- subtracted = e.offset + 1;
- oldLength = e.length;
-
- // Update offset objects referring to oldEndNode
- for ( j = end - subtracted; j < end; j++ ) {
- if ( j in context.offsets ) {
- o = context.offsets[j];
- o.node = oldEndNode;
- o.length = subtracted;
- }
- }
- // We have to insert this one, as it might not exist: we didn't call getOffset( end )
- context.offsets[end] = {
- 'node': newEndNode,
- 'offset': 0,
- 'length': oldLength - subtracted,
- 'lastTextNode': oldEndNode
- };
- // Update offset objects referring to newEndNode
- for ( j = end + 1; j < end - subtracted + oldLength; j++ ) {
- if ( j in context.offsets ) {
- o = context.offsets[j];
- o.node = newEndNode;
- o.offset -= subtracted;
- o.length -= subtracted;
- o.lastTextNode = oldEndNode;
- }
- }
- }
- // Don't wrap trailing BRs, doing that causes weird issues
- if ( endNode.nodeName == 'BR' ) {
- endNode = e.lastTextNode;
- }
- // If startNode and endNode have different parents, we need to pull endNode and all textnodes in between
- // into startNode's parent and replace </p><p> with <br>
- if ( startNode.parentNode !== endNode.parentNode ) {
- var startP = $( startNode ).closest( 'p' ).get( 0 );
- var t = new context.fn.rawTraverser( startNode, startP, context.$content.get( 0 ), false );
- var afterStart = startNode.nextSibling;
- var lastP = startP;
- var nextT = t.next();
- while ( nextT && t.node !== endNode ) {
- t = nextT;
- nextT = t.next();
- // If t.node has a different parent, merge t.node.parentNode with startNode.parentNode
- if ( t.node.parentNode !== startNode.parentNode ) {
- var oldParent = t.node.parentNode;
- if ( afterStart ) {
- if ( lastP !== t.inP ) {
- // We're entering a new <p>, insert a <br>
- startNode.parentNode.insertBefore(
- startNode.ownerDocument.createElement( 'br' ),
- afterStart
- );
- }
- // A <p> with just a <br> in it is an empty line, so let's not bother with unwrapping it
- if ( !( oldParent.childNodes.length == 1 && oldParent.firstChild.nodeName == 'BR' ) ) {
- // Move all children of oldParent into startNode's parent
- while ( oldParent.firstChild ) {
- startNode.parentNode.insertBefore( oldParent.firstChild, afterStart );
- }
- }
- } else {
- if ( lastP !== t.inP ) {
- // We're entering a new <p>, insert a <br>
- startNode.parentNode.appendChild(
- startNode.ownerDocument.createElement( 'br' )
- );
- }
- // A <p> with just a <br> in it is an empty line, so let's not bother with unwrapping it
- if ( !( oldParent.childNodes.length == 1 && oldParent.firstChild.nodeName == 'BR' ) ) {
- // Move all children of oldParent into startNode's parent
- while ( oldParent.firstChild ) {
- startNode.parentNode.appendChild( oldParent.firstChild );
- }
- }
- }
- // Remove oldParent, which is now empty
- oldParent.parentNode.removeChild( oldParent );
- }
- lastP = t.inP;
- }
- // Moving nodes around like this invalidates offset objects
- // TODO: Update offset objects ourselves for performance. Requires rewriting this code block to be
- // offset-based rather than traverser-based
- }
- // Now wrap everything between startNode and endNode (may be equal).
- var ca1 = startNode, ca2 = endNode;
- if ( ca1 && ca2 && ca1.parentNode ) {
- var anchor = markers[i].getAnchor( ca1, ca2 );
- if ( !anchor ) {
- var commonAncestor = ca1.parentNode;
- if ( markers[i].anchor == 'wrap') {
- // We have to store things like .parentNode and .nextSibling because appendChild() changes these
- var newNode = ca1.ownerDocument.createElement( 'span' );
- var nextNode = ca2.nextSibling;
- // Append all nodes between ca1 and ca2 (inclusive) to newNode
- var n = ca1;
- while ( n !== nextNode ) {
- var ns = n.nextSibling;
- newNode.appendChild( n );
- n = ns;
- }
- // Insert newNode in the right place
- if ( nextNode ) {
- commonAncestor.insertBefore( newNode, nextNode );
- } else {
- commonAncestor.appendChild( newNode );
- }
- anchor = newNode;
- } else if ( markers[i].anchor == 'tag' ) {
- anchor = commonAncestor;
- }
- $( anchor ).data( 'marker', markers[i] ).addClass( 'wikiEditor-highlight' );
- // Allow the module adding this marker to manipulate it
- markers[i].afterWrap( anchor, markers[i] );
-
- } else {
- // Update the marker object
- $( anchor ).data( 'marker', markers[i] );
- if ( typeof markers[i].onSkip == 'function' ) {
- markers[i].onSkip( anchor );
- }
- }
- visited[v++] = anchor;
- }
- }
- // Remove markers that were previously inserted but weren't passed to this function - visited[] contains the
- // visited elements in order and find() and each() preserve order
- j = 0;
- context.$content.find( '.wikiEditor-highlight' ).each( function () {
- if ( visited[j] == this ) {
- // This marker is legit, leave it in
- j++;
- return true;
- }
- // Remove this marker
- var marker = $(this).data( 'marker' );
- if ( marker && typeof marker.skipDivision !== 'undefined' && ( division === marker.skipDivision ) ) {
- // Don't remove these either
- return true;
- }
- if ( marker && typeof marker.beforeUnwrap === 'function' )
- marker.beforeUnwrap( this );
- if ( ( marker && marker.anchor === 'tag' ) || $(this).is( 'p' ) ) {
- // Remove all classes
- $(this).removeAttr( 'class' );
- } else {
- // Assume anchor == 'wrap'
- $(this).replaceWith( this.childNodes );
- }
- context.fn.purgeOffsets();
- });
-
- }
- }
-};
-
-}( jQuery ) );
-
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.html b/extensions/WikiEditor/modules/jquery.wikiEditor.html
index f11521a3..7a890af0 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.html
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.html
@@ -44,91 +44,6 @@
.wikiEditor-tab {
padding-left: 4em;
}
- /* WikiEditor Templates */
- .wikiEditor-templates .wikiEditor-template {
- color: silver;
- }
- /* WikiEditor TemplateEditor */
- .wikiEditor-templateEditor .wikiEditor-template-text-shrunken{
- height: 1px !important;
- width: 1px !important;
- overflow: hidden;
- float: right;
- }
- .wikiEditor-templateEditor .wikiEditor-template-text-visible{
- padding: 0.5em 4px;
- padding-top: 1.25em;
- margin-top: -0.95em;
- background: #F3F3F3 url(images/templateEditor/text-base.png) repeat-x scroll center top;
- display: block;
- width: 100%;
- border-bottom: solid 1px #cccccc;
- }
- .wikiEditor-templateEditor .wikiEditor-template {
- display: inline-block;
- font-size: 12px;
- }
- .wikiEditor-templateEditor .wikiEditor-template-name {
- cursor: pointer;
- vertical-align: -2px;
- display: inline-block;
- height: 16px;
- margin-bottom: -1px;
- margin-right: 2px;
- overflow: hidden;
- background: url(images/templateEditor/name-base.png) 0 0 repeat-x #e8e8e8;
- color: #000000;
- font-family: monospace;
- text-decoration: none;
- padding-left: 0.33em;
- line-height: 16px;
- }
- .wikiEditor-templateEditor .wikiEditor-template-expand {
- cursor: pointer;
- vertical-align: -2px;
- display: inline-block;
- margin-left: 2px;
- height: 16px;
- margin-bottom: -1px;
- line-height: 16px;
- overflow: hidden;
- width: 13px;
- background-position: 50%;
- }
- .wikiEditor-templateEditor .wikiEditor-template-dialog {
- cursor: pointer;
- vertical-align: -18%;
- display: inline-block;
- height: 16px;
- overflow: hidden;
- width: 22px;
- background-position: 50%;
- }
- .wikiEditor-templateEditor .wikiEditor-template-name:hover {
- text-decoration: underline;
- }
- .wikiEditor-templateEditor .wikiEditor-template-expanded .wikiEditor-template-expand {
- background-image: url(images/templateEditor/collapse.png);
- }
- .wikiEditor-templateEditor .wikiEditor-template-expanded .wikiEditor-template-dialog {
- background-image: url(images/templateEditor/dialog-expanded.png);
- }
- .wikiEditor-templateEditor .wikiEditor-template-collapsed .wikiEditor-template-expand {
- background-image: url(images/templateEditor/expand.png);
- }
- .wikiEditor-templateEditor .wikiEditor-template-collapsed .wikiEditor-template-dialog {
- background-image: url(images/templateEditor/dialog-collapsed.png);
- }
- .wikiEditor-templateEditor .wikiEditor-template-expanded {
- display: block;
- }
- .wikiEditor-templateEditor .wikiEditor-template .wikiEditor-template-text {
-
- }
- .wikiEditor-templateEditor .wikiEditor-template-end, .wikiEditor-template-start {
- color: blue;
- cursor: pointer;
- }
</style>
</head>
<body></body>
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.iframe.js b/extensions/WikiEditor/modules/jquery.wikiEditor.iframe.js
deleted file mode 100644
index 4d425012..00000000
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.iframe.js
+++ /dev/null
@@ -1,1387 +0,0 @@
-/* IFrame extension for wikiEditor */
-
-( function( $ ) { $.wikiEditor.extensions.iframe = function( context ) {
-
-/*
- * Event Handlers
- *
- * These act as filters returning false if the event should be ignored or returning true if it should be passed
- * on to all modules. This is also where we can attach some extra information to the events.
- */
-context.evt = $.extend( context.evt, {
- /**
- * Filters change events, which occur when the user interacts with the contents of the iframe. The goal of this
- * function is to both classify the scope of changes as 'division' or 'character' and to prevent further
- * processing of events which did not actually change the content of the iframe.
- */
- 'keydown': function( event ) {
- switch ( event.which ) {
- case 90: // z
- case 89: // y
- if ( event.which == 89 && !$.browser.msie ) {
- // only handle y events for IE
- return true;
- } else if ( ( event.ctrlKey || event.metaKey ) && context.history.length ) {
- // HistoryPosition is a negative number between -1 and -context.history.length, in other words
- // it's the number of steps backwards from the latest state.
- var newPosition;
- if ( event.shiftKey || event.which == 89 ) {
- // Redo
- newPosition = context.historyPosition + 1;
- } else {
- // Undo
- newPosition = context.historyPosition - 1;
- }
- // Only act if we are switching to a valid state
- if ( newPosition >= ( context.history.length * -1 ) && newPosition < 0 ) {
- // Make sure we run the history storing code before we make this change
- context.fn.updateHistory( context.oldDelayedHTML != context.$content.html() );
- context.oldDelayedHistoryPosition = context.historyPosition;
- context.historyPosition = newPosition;
- // Change state
- // FIXME: Destroys event handlers, will be a problem with template folding
- context.$content.html(
- context.history[context.history.length + context.historyPosition].html
- );
- context.fn.purgeOffsets();
- if( context.history[context.history.length + context.historyPosition].sel ) {
- context.fn.setSelection( {
- start: context.history[context.history.length + context.historyPosition].sel[0],
- end: context.history[context.history.length + context.historyPosition].sel[1]
- } );
- }
- }
- // Prevent the browser from jumping in and doing its stuff
- return false;
- }
- break;
- // Intercept all tab events to provide consisten behavior across browsers
- // Webkit browsers insert tab characters by default into the iframe rather than changing input focus
- case 9: //tab
- // if any modifier keys are pressed, allow the browser to do it's thing
- if ( event.ctrlKey || event.altKey || event.shiftKey ) {
- return true;
- } else {
- var $tabindexList = $( '[tabindex]:visible' ).sort( function( a, b ) {
- return a.tabIndex - b.tabIndex;
- } );
- for( var i=0; i < $tabindexList.length; i++ ) {
- if( $tabindexList.eq( i ).attr( 'id' ) == context.$iframe.attr( 'id' ) ) {
- $tabindexList.get( i + 1 ).focus();
- break;
- }
- }
- return false;
- }
- break;
- case 86: //v
- if ( event.ctrlKey && $.browser.msie && 'paste' in context.evt ) {
- //paste, intercepted for IE
- context.evt.paste( event );
- }
- break;
- }
- return true;
- },
- 'change': function( event ) {
- event.data.scope = 'division';
- var newHTML = context.$content.html();
- if ( context.oldHTML != newHTML ) {
- context.fn.purgeOffsets();
- context.oldHTML = newHTML;
- event.data.scope = 'realchange';
- }
- // Never let the body be totally empty
- if ( context.$content.children().length == 0 ) {
- context.$content.append( '<p></p>' );
- }
- return true;
- },
- 'delayedChange': function( event ) {
- event.data.scope = 'division';
- var newHTML = context.$content.html();
- if ( context.oldDelayedHTML != newHTML ) {
- context.oldDelayedHTML = newHTML;
- event.data.scope = 'realchange';
- // Surround by <p> if it does not already have it
- var cursorPos = context.fn.getCaretPosition();
- var t = context.fn.getOffset( cursorPos[0] );
- if ( ! $.browser.msie && t && t.node.nodeName == '#text' && t.node.parentNode.nodeName.toLowerCase() == 'body' ) {
- $( t.node ).wrap( "<p></p>" );
- context.fn.purgeOffsets();
- context.fn.setSelection( { start: cursorPos[0], end: cursorPos[1] } );
- }
- }
- context.fn.updateHistory( event.data.scope == 'realchange' );
- return true;
- },
- 'cut': function( event ) {
- setTimeout( function() {
- context.$content.find( 'br' ).each( function() {
- if ( $(this).parent().is( 'body' ) ) {
- $(this).wrap( $( '<p></p>' ) );
- }
- } );
- }, 100 );
- return true;
- },
- 'paste': function( event ) {
- // Save the cursor position to restore it after all this voodoo
- var cursorPos = context.fn.getCaretPosition();
- var oldLength = context.fn.getContents().length;
- var positionFromEnd = oldLength - cursorPos[1];
-
- //give everything the wikiEditor class so that we can easily pick out things without that class as pasted
- context.$content.find( '*' ).addClass( 'wikiEditor' );
- if ( $.layout.name !== 'webkit' ) {
- context.$content.addClass( 'pasting' );
- }
-
- setTimeout( function() {
- // Kill stuff we know we don't want
- context.$content.find( 'script,style,img,input,select,textarea,hr,button,link,meta' ).remove();
- var nodeToDelete = [];
- var pastedContent = [];
- var firstDirtyNode;
- var $lastDirtyNode;
- var elementAtCursor;
- if ( $.browser.msie && !context.offsets ) {
- elementAtCursor = null;
- } else {
- elementAtCursor = context.fn.getOffset( cursorPos[0] );
- }
- if ( elementAtCursor == null || elementAtCursor.node == null ) {
- context.$content.prepend( '<p class = wikiEditor></p>' );
- firstDirtyNode = context.$content.children()[0];
- } else {
- firstDirtyNode = elementAtCursor.node;
- }
-
- //this is ugly but seems like the best way to handle the case where we select and replace all editor contents
- try {
- firstDirtyNode.parentNode;
- } catch ( err ) {
- context.$content.prepend( '<p class = wikiEditor></p>' );
- firstDirtyNode = context.$content.children()[0];
- }
-
- while ( firstDirtyNode != null ) {
- //we're going to replace the contents of the entire parent node.
- while ( firstDirtyNode.parentNode && firstDirtyNode.parentNode.nodeName != 'BODY'
- && ! $( firstDirtyNode ).hasClass( 'wikiEditor' )
- ) {
- firstDirtyNode = firstDirtyNode.parentNode;
- }
- //go back till we find the first pasted node
- while ( firstDirtyNode.previousSibling != null
- && ! $( firstDirtyNode.previousSibling ).hasClass( 'wikiEditor' )
- ) {
-
- if ( $( firstDirtyNode.previousSibling ).hasClass( '#comment' ) ) {
- $( firstDirtyNode ).remove();
- } else {
- firstDirtyNode = firstDirtyNode.previousSibling;
- }
- }
-
- if ( firstDirtyNode.previousSibling != null ) {
- $lastDirtyNode = $( firstDirtyNode.previousSibling );
- } else {
- $lastDirtyNode = $( firstDirtyNode );
- }
-
- var cc = makeContentCollector( $.browser, null );
- while ( firstDirtyNode != null ) {
- cc.collectContent(firstDirtyNode);
- cc.notifyNextNode(firstDirtyNode.nextSibling);
-
- nodeToDelete.push( firstDirtyNode );
-
- firstDirtyNode = firstDirtyNode.nextSibling;
- if ( $( firstDirtyNode ).hasClass( 'wikiEditor' ) ) {
- break;
- }
- }
-
- var ccData = cc.finish();
- pastedContent = ccData.lines;
- var pastedPretty = '';
- for ( var i = 0; i < pastedContent.length; i++ ) {
- //escape html
- pastedPretty = pastedContent[i].replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\r?\n/g, '\\n');
- //replace leading white spaces with &nbsp;
- match = pastedContent[i].match(/^[\s]+[^\s]/);
- if ( match != null && match.length > 0 ) {
- index = match[0].length;
- leadingSpace = match[0].replace(/[\s]/g, '&nbsp;');
- pastedPretty = leadingSpace + pastedPretty.substring(index, pastedPretty.length);
- }
-
-
- if( !pastedPretty && $.browser.msie && i == 0 ) {
- continue;
- }
- $newElement = $( '<p class="wikiEditor pasted" ></p>' );
- if ( pastedPretty ) {
- $newElement.html( pastedPretty );
- } else {
- $newElement.html( '<br class="wikiEditor">' );
- }
- $newElement.insertAfter( $lastDirtyNode );
-
- $lastDirtyNode = $newElement;
-
- }
-
- //now delete all the original nodes that we prettified already
- while ( nodeToDelete.length > 0 ) {
- $deleteNode = $( nodeToDelete.pop() );
- $deleteNode.remove();
- }
-
- //anything without wikiEditor class was pasted.
- $selection = context.$content.find( ':not(.wikiEditor)' );
- if ( $selection.length == 0 ) {
- break;
- } else {
- firstDirtyNode = $selection.eq( 0 )[0];
- }
- }
- context.$content.find( '.wikiEditor' ).removeClass( 'wikiEditor' );
-
- //now place the cursor at the end of pasted content
- var newLength = context.fn.getContents().length;
- var newPos = newLength - positionFromEnd;
-
- context.fn.purgeOffsets();
- context.fn.setSelection( { start: newPos, end: newPos } );
-
- context.fn.scrollToCaretPosition();
- }, 0 );
- return true;
- },
- 'ready': function( event ) {
- // Initialize our history queue
- if ( context.$content ) {
- context.history.push( { 'html': context.$content.html(), 'sel': context.fn.getCaretPosition() } );
- } else {
- context.history.push( { 'html': '', 'sel': context.fn.getCaretPosition() } );
- }
- return true;
- }
-} );
-
-/**
- * Internally used functions
- */
-context.fn = $.extend( context.fn, {
- 'highlightLine': function( $element, mode ) {
- if ( !$element.is( 'p' ) ) {
- $element = $element.closest( 'p' );
- }
- $element.css( 'backgroundColor', '#AACCFF' );
- setTimeout( function() { $element.animate( { 'backgroundColor': 'white' }, 'slow' ); }, 100 );
- setTimeout( function() { $element.css( 'backgroundColor', 'white' ); }, 1000 );
- },
- 'htmlToText': function( html ) {
- // This function is slow for large inputs, so aggressively cache input/output pairs
- if ( html in context.htmlToTextMap ) {
- return context.htmlToTextMap[html];
- }
- var origHTML = html;
-
- // We use this elaborate trickery for cross-browser compatibility
- // IE does overzealous whitespace collapsing for $( '<pre />' ).html( html );
- // We also do <br> and easy cases for <p> conversion here, complicated cases are handled later
- html = html
- .replace( /\r?\n/g, "" ) // IE7 inserts newlines before block elements
- .replace( /&nbsp;/g, " " ) // We inserted these to prevent IE from collapsing spaces
- .replace( /\<br[^\>]*\>\<\/p\>/gi, '</p>' ) // Remove trailing <br> from <p>
- .replace( /\<\/p\>\s*\<p[^\>]*\>/gi, "\n" ) // Easy case for <p> conversion
- .replace( /\<br[^\>]*\>/gi, "\n" ) // <br> conversion
- .replace( /\<\/p\>(\n*)\<p[^\>]*\>/gi, "$1\n" )
- // Un-nest <p> tags
- .replace( /\<p[^\>]*\><p[^\>]*\>/gi, '<p>' )
- .replace( /\<\/p\><\/p\>/gi, '</p>' );
- // Save leading and trailing whitespace now and restore it later. IE eats it all, and even Firefox
- // won't leave everything alone
- var leading = html.match( /^\s*/ )[0];
- var trailing = html.match( /\s*$/ )[0];
- html = html.substr( leading.length, html.length - leading.length - trailing.length );
- var $pre = $( '<pre>' + html + '</pre>' );
- $pre.find( '.wikiEditor-noinclude' ).each( function() { $( this ).remove(); } );
- // Convert tabs, <p>s and <br>s back
- $pre.find( '.wikiEditor-tab' ).each( function() { $( this ).text( "\t" ); } );
- $pre.find( 'br' ).each( function() { $( this ).replaceWith( "\n" ); } );
- // Converting <p>s is wrong if there's nothing before them, so check that.
- // .find( '* + p' ) isn't good enough because textnodes aren't considered
- $pre.find( 'p' ).each( function() {
- var text = $( this ).text();
- // If this <p> is preceded by some text, add a \n at the beginning, and if
- // it's followed by a textnode, add a \n at the end
- // We need the traverser because there can be other weird stuff in between
-
- // Check for preceding text
- var t = new context.fn.rawTraverser( this.firstChild, this, $pre.get( 0 ), true ).prev();
- while ( t && t.node.nodeName != '#text' && t.node.nodeName != 'BR' && t.node.nodeName != 'P' ) {
- t = t.prev();
- }
- if ( t ) {
- text = "\n" + text;
- }
-
- // Check for following text
- t = new context.fn.rawTraverser( this.lastChild, this, $pre.get( 0 ), true ).next();
- while ( t && t.node.nodeName != '#text' && t.node.nodeName != 'BR' && t.node.nodeName != 'P' ) {
- t = t.next();
- }
- if ( t && !t.inP && t.node.nodeName == '#text' && t.node.nodeValue.charAt( 0 ) != '\n'
- && t.node.nodeValue.charAt( 0 ) != '\r' ) {
- text += "\n";
- }
- $( this ).text( text );
- } );
- var retval;
- if ( $.browser.msie ) {
- // IE aggressively collapses whitespace in .text() after having done DOM manipulation,
- // but for some crazy reason this does work. Also convert \r back to \n
- retval = $( '<pre>' + $pre.html() + '</pre>' ).text().replace( /\r/g, '\n' );
- } else {
- retval = $pre.text();
- }
- return context.htmlToTextMap[origHTML] = leading + retval + trailing;
- },
- /**
- * Get the first element before the selection that's in a certain class
- * @param classname Class to match. Defaults to '', meaning any class
- * @param strict If true, the element the selection starts in cannot match (default: false)
- * @return jQuery object or null if unknown
- */
- 'beforeSelection': function( classname, strict ) {
- if ( typeof classname == 'undefined' ) {
- classname = '';
- }
- var e = null, offset = null;
- if ( $.browser.msie && !context.$iframe[0].contentWindow.document.body ) {
- return null;
- }
- if ( context.$iframe[0].contentWindow.getSelection ) {
- // Firefox and Opera
- var selection = context.$iframe[0].contentWindow.getSelection();
- // On load, webkit seems to not have a valid selection
- if ( selection.baseNode !== null ) {
- // Start at the selection's start and traverse the DOM backwards
- // This is done by traversing an element's children first, then the element itself, then its parent
- e = selection.getRangeAt( 0 ).startContainer;
- offset = selection.getRangeAt( 0 ).startOffset;
- } else {
- return null;
- }
-
- // When the cursor is on an empty line, Opera gives us a bogus range object with
- // startContainer=endContainer=body and startOffset=endOffset=1
- var body = context.$iframe[0].contentWindow.document.body;
- if ( $.browser.opera && e == body && offset == 1 ) {
- return null;
- }
- }
- if ( !e && context.$iframe[0].contentWindow.document.selection ) {
- // IE
- // Because there's nothing like range.startContainer in IE, we need to do a DOM traversal
- // to find the element the start of the selection is in
- var range = context.$iframe[0].contentWindow.document.selection.createRange();
- // Set range2 to the text before the selection
- var range2 = context.$iframe[0].contentWindow.document.body.createTextRange();
- // For some reason this call throws errors in certain cases, e.g. when the selection is
- // not in the iframe
- try {
- range2.setEndPoint( 'EndToStart', range );
- } catch ( ex ) {
- return null;
- }
- var seekPos = context.fn.htmlToText( range2.htmlText ).length;
- var offset = context.fn.getOffset( seekPos );
- e = offset ? offset.node : null;
- offset = offset ? offset.offset : null;
- if ( !e ) {
- return null;
- }
- }
- if ( e.nodeName != '#text' ) {
- // The selection is not in a textnode, but between two non-text nodes
- // (usually inside the <body> between two <br>s). Go to the rightmost
- // child of the node just before the selection
- var newE = e.firstChild;
- for ( var i = 0; i < offset - 1 && newE; i++ ) {
- newE = newE.nextSibling;
- }
- while ( newE && newE.lastChild ) {
- newE = newE.lastChild;
- }
- e = newE || e;
- }
-
- // We'd normally use if( $( e ).hasClass( class ) in the while loop, but running the jQuery
- // constructor thousands of times is very inefficient
- var classStr = ' ' + classname + ' ';
- while ( e ) {
- if ( !strict && ( !classname || ( ' ' + e.className + ' ' ).indexOf( classStr ) != -1 ) ) {
- return $( e );
- }
- var next = e.previousSibling;
- while ( next && next.lastChild ) {
- next = next.lastChild;
- }
- e = next || e.parentNode;
- strict = false;
- }
- return $( [] );
- },
- /**
- * Object used by traverser(). Don't use this unless you know what you're doing
- */
- 'rawTraverser': function( node, inP, ancestor, skipNoinclude ) {
- this.node = node;
- this.inP = inP;
- this.ancestor = ancestor;
- this.skipNoinclude = skipNoinclude;
- this.next = function() {
- var p = this.node;
- var nextInP = this.inP;
- while ( p && !p.nextSibling ) {
- p = p.parentNode;
- if ( p == this.ancestor ) {
- // We're back at the ancestor, stop here
- p = null;
- }
- if ( p && p.nodeName == "P" ) {
- nextInP = null;
- }
- }
- p = p ? p.nextSibling : null;
- if ( p && p.nodeName == "P" ) {
- nextInP = p;
- }
- do {
- // Filter nodes with the wikiEditor-noinclude class
- // Don't use $( p ).hasClass( 'wikiEditor-noinclude' ) because
- // $() is slow in a tight loop
- if ( this.skipNoinclude ) {
- while ( p && ( ' ' + p.className + ' ' ).indexOf( ' wikiEditor-noinclude ' ) != -1 ) {
- p = p.nextSibling;
- }
- }
- if ( p && p.firstChild ) {
- p = p.firstChild;
- if ( p.nodeName == "P" ) {
- nextInP = p;
- }
- }
- } while ( p && p.firstChild );
- // Instead of calling the rawTraverser constructor, inline it. This avoids function call overhead
- return p ? { 'node': p, 'inP': nextInP, 'ancestor': this.ancestor,
- 'skipNoinclude': this.skipNoinclude, 'next': this.next, 'prev': this.prev } : null;
- };
- this.prev = function() {
- var p = this.node;
- var prevInP = this.inP;
- while ( p && !p.previousSibling ) {
- p = p.parentNode;
- if ( p == this.ancestor ) {
- // We're back at the ancestor, stop here
- p = null;
- }
- if ( p && p.nodeName == "P" ) {
- prevInP = null;
- }
- }
- p = p ? p.previousSibling : null;
- if ( p && p.nodeName == "P" ) {
- prevInP = p;
- }
- do {
- // Filter nodes with the wikiEditor-noinclude class
- // Don't use $( p ).hasClass( 'wikiEditor-noinclude' ) because
- // $() is slow in a tight loop
- if ( this.skipNoinclude ) {
- while ( p && ( ' ' + p.className + ' ' ).indexOf( ' wikiEditor-noinclude ' ) != -1 ) {
- p = p.previousSibling;
- }
- }
- if ( p && p.lastChild ) {
- p = p.lastChild;
- if ( p.nodeName == "P" ) {
- prevInP = p;
- }
- }
- } while ( p && p.lastChild );
- // Instead of calling the rawTraverser constructor, inline it. This avoids function call overhead
- return p ? { 'node': p, 'inP': prevInP, 'ancestor': this.ancestor,
- 'skipNoinclude': this.skipNoinclude, 'next': this.next, 'prev': this.prev } : null;
- };
- },
- /**
- * Get an object used to traverse the leaf nodes in the iframe DOM. This traversal skips leaf nodes
- * inside an element with the wikiEditor-noinclude class. This basically wraps rawTraverser
- *
- * @param start Node to start at
- * @return Traverser object, use .next() or .prev() to get a traverser object referring to the
- * previous/next node
- */
- 'traverser': function( start ) {
- // Find the leftmost leaf node in the tree
- var startNode = start.jquery ? start.get( 0 ) : start;
- var node = startNode;
- var inP = node.nodeName == "P" ? node : null;
- do {
- // Filter nodes with the wikiEditor-noinclude class
- // Don't use $( p ).hasClass( 'wikiEditor-noinclude' ) because
- // $() is slow in a tight loop
- while ( node && ( ' ' + node.className + ' ' ).indexOf( ' wikiEditor-noinclude ' ) != -1 ) {
- node = node.nextSibling;
- }
- if ( node && node.firstChild ) {
- node = node.firstChild;
- if ( node.nodeName == "P" ) {
- inP = node;
- }
- }
- } while ( node && node.firstChild );
- return new context.fn.rawTraverser( node, inP, startNode, true );
- },
- 'getOffset': function( offset ) {
- if ( !context.offsets ) {
- context.fn.refreshOffsets();
- }
- if ( offset in context.offsets ) {
- return context.offsets[offset];
- }
- // Our offset is not pre-cached. Find the highest offset below it and interpolate
- // We need to traverse the entire object because for() doesn't traverse in order
- // We don't do in-order traversal because the object is sparse
- var lowerBound = -1;
- for ( var o in context.offsets ) {
- var realO = parseInt( o );
- if ( realO < offset && realO > lowerBound) {
- lowerBound = realO;
- }
- }
- if ( !( lowerBound in context.offsets ) ) {
- // Weird edge case: either offset is too large or the document is empty
- return null;
- }
- var base = context.offsets[lowerBound];
- return context.offsets[offset] = {
- 'node': base.node,
- 'offset': base.offset + offset - lowerBound,
- 'length': base.length,
- 'lastTextNode': base.lastTextNode
- };
- },
- 'purgeOffsets': function() {
- context.offsets = null;
- },
- 'refreshOffsets': function() {
- context.offsets = [ ];
- var t = context.fn.traverser( context.$content );
- var pos = 0, lastTextNode = null;
- while ( t ) {
- if ( t.node.nodeName != '#text' && t.node.nodeName != 'BR' ) {
- t = t.next();
- continue;
- }
- var nextPos = t.node.nodeName == '#text' ? pos + t.node.nodeValue.length : pos + 1;
- var nextT = t.next();
- var leavingP = t.node.nodeName == '#text' && t.inP && nextT && ( !nextT.inP || nextT.inP != t.inP );
- context.offsets[pos] = {
- 'node': t.node,
- 'offset': 0,
- 'length': nextPos - pos + ( leavingP ? 1 : 0 ),
- 'lastTextNode': lastTextNode
- };
- if ( leavingP ) {
- // <p>Foo</p> looks like "Foo\n", make it quack like it too
- // Basically we're faking the \n character much like we're treating <br>s
- context.offsets[nextPos] = {
- 'node': t.node,
- 'offset': nextPos - pos,
- 'length': nextPos - pos + 1,
- 'lastTextNode': lastTextNode
- };
- }
- pos = nextPos + ( leavingP ? 1 : 0 );
- if ( t.node.nodeName == '#text' ) {
- lastTextNode = t.node;
- }
- t = nextT;
- }
- },
- 'saveCursorAndScrollTop': function() {
- // Stub out textarea behavior
- return;
- },
- 'restoreCursorAndScrollTop': function() {
- // Stub out textarea behavior
- return;
- },
- 'saveSelection': function() {
- if ( $.client.profile().name === 'msie' ) {
- context.$iframe[0].contentWindow.focus();
- context.savedSelection = context.$iframe[0].contentWindow.document.selection.createRange();
- }
- },
- 'restoreSelection': function() {
- if ( $.client.profile().name === 'msie' && context.savedSelection !== null ) {
- context.$iframe[0].contentWindow.focus();
- context.savedSelection.select();
- context.savedSelection = null;
- }
- },
- /**
- * Update the history queue
- *
- * @param htmlChange pass true or false to inidicate if there was a text change that should potentially
- * be given a new history state.
- */
- 'updateHistory': function( htmlChange ) {
- var newHTML = context.$content.html();
- var newSel = context.fn.getCaretPosition();
- // Was text changed? Was it because of a REDO or UNDO action?
- if (
- context.history.length == 0 ||
- ( htmlChange && context.oldDelayedHistoryPosition == context.historyPosition )
- ) {
- context.oldDelayedSel = newSel;
- // Do we need to trim extras from our history?
- // FIXME: this should really be happing on change, not on the delay
- if ( context.historyPosition < -1 ) {
- //clear out the extras
- context.history.splice( context.history.length + context.historyPosition + 1 );
- context.historyPosition = -1;
- }
- context.history.push( { 'html': newHTML, 'sel': newSel } );
- // If the history has grown longer than 10 items, remove the earliest one
- while ( context.history.length > 10 ) {
- context.history.shift();
- }
- } else if ( context.oldDelayedSel != newSel ) {
- // If only the selection was changed, update it
- context.oldDelayedSel = newSel;
- context.history[context.history.length + context.historyPosition].sel = newSel;
- }
- // synch our old delayed history position until the next undo/redo action
- context.oldDelayedHistoryPosition = context.historyPosition;
- },
- /**
- * Sets up the iframe in place of the textarea to allow more advanced operations
- */
- 'setupIframe': function() {
- context.$iframe = $( '<iframe></iframe>' )
- .attr( {
- 'frameBorder': 0,
- 'border': 0,
- 'tabindex': 1,
- 'src': mw.config.get( 'wgExtensionAssetsPath' ) + '/WikiEditor/modules/jquery.wikiEditor.html?' +
- 'instance=' + context.instance + '&ts=' + ( new Date() ).getTime() + '&is=content',
- 'id': 'wikiEditor-iframe-' + context.instance
- } )
- .css( {
- 'backgroundColor': 'white',
- 'width': '100%',
- 'height': context.$textarea.height(),
- 'display': 'none',
- 'overflow-y': 'scroll',
- 'overflow-x': 'hidden'
- } )
- .insertAfter( context.$textarea )
- .load( function() {
- // Internet Explorer will reload the iframe once we turn on design mode, so we need to only turn it
- // on during the first run, and then bail
- if ( !this.isSecondRun ) {
- // Turn the document's design mode on
- context.$iframe[0].contentWindow.document.designMode = 'on';
- // Let the rest of this function happen next time around
- if ( $.browser.msie ) {
- this.isSecondRun = true;
- return;
- }
- }
- // Get a reference to the content area of the iframe
- context.$content = $( context.$iframe[0].contentWindow.document.body );
- // Add classes to the body to influence the styles based on what's enabled
- for ( module in context.modules ) {
- context.$content.addClass( 'wikiEditor-' + module );
- }
- // If we just do "context.$content.text( context.$textarea.val() )", Internet Explorer will strip
- // out the whitespace charcters, specifically "\n" - so we must manually encode text and append it
- // TODO: Refactor this into a textToHtml() function
- var html = context.$textarea.val()
- // We're gonna use &esc; as an escape sequence
- .replace( /&esc;/g, '&esc;esc;' )
- // Escape existing uses of <p>, </p>, &nbsp; and <span class="wikiEditor-tab"></span>
- .replace( /\<p\>/g, '&esc;&lt;p&gt;' )
- .replace( /\<\/p\>/g, '&esc;&lt;/p&gt;' )
- .replace(
- /\<span class="wikiEditor-tab"\>\<\/span\>/g,
- '&esc;&lt;span&nbsp;class=&quot;wikiEditor-tab&quot;&gt;&lt;/span&gt;'
- )
- .replace( /&nbsp;/g, '&esc;&amp;nbsp;' );
- // We must do some extra processing on IE to avoid dirty diffs, specifically IE will collapse
- // leading spaces - browser sniffing is not ideal, but executing this code on a non-broken browser
- // doesn't cause harm
- if ( $.browser.msie ) {
- html = html.replace( /\t/g, '<span class="wikiEditor-tab"></span>' );
- if ( $.browser.versionNumber <= 7 ) {
- // Replace all spaces matching &nbsp; - IE <= 7 needs this because of its overzealous
- // whitespace collapsing
- html = html.replace( / /g, "&nbsp;" );
- } else {
- // IE8 is happy if we just convert the first leading space to &nbsp;
- html = html.replace( /(^|\n) /g, "$1&nbsp;" );
- }
- }
- // Use a dummy div to escape all entities
- // This'll also escape <br>, <span> and &nbsp; , so we unescape those after
- // We also need to unescape the doubly-escaped things mentioned above
- html = $( '<div />' ).text( '<p>' + html.replace( /\r?\n/g, '</p><p>' ) + '</p>' ).html()
- .replace( /&amp;nbsp;/g, '&nbsp;' )
- // Allow <p> tags to survive encoding
- .replace( /&lt;p&gt;/g, '<p>' )
- .replace( /&lt;\/p&gt;/g, '</p>' )
- // And <span class="wikiEditor-tab"></span> too
- .replace(
- /&lt;span( |&nbsp;)class=("|&quot;)wikiEditor-tab("|&quot;)&gt;&lt;\/span&gt;/g,
- '<span class="wikiEditor-tab"></span>'
- )
- // Empty <p> tags need <br> tags in them
- .replace( /<p><\/p>/g, '<p><br></p>' )
- // Unescape &esc; stuff
- .replace( /&amp;esc;&amp;amp;nbsp;/g, '&amp;nbsp;' )
- .replace( /&amp;esc;&amp;lt;p&amp;gt;/g, '&lt;p&gt;' )
- .replace( /&amp;esc;&amp;lt;\/p&amp;gt;/g, '&lt;/p&gt;' )
- .replace(
- /&amp;esc;&amp;lt;span&amp;nbsp;class=&amp;quot;wikiEditor-tab&amp;quot;&amp;gt;&amp;lt;\/span&amp;gt;/g,
- '&lt;span class="wikiEditor-tab"&gt;&lt;\/span&gt;'
- )
- .replace( /&amp;esc;esc;/g, '&amp;esc;' );
- context.$content.html( html );
-
- // Reflect direction of parent frame into child
- if ( $( 'body' ).is( '.rtl' ) ) {
- context.$content.addClass( 'rtl' ).attr( 'dir', 'rtl' );
- }
- // Activate the iframe, encoding the content of the textarea and copying it to the content of iframe
- context.$textarea.attr( 'disabled', true );
- context.$textarea.hide();
- context.$iframe.show();
- // Let modules know we're ready to start working with the content
- context.fn.trigger( 'ready' );
- // Only save HTML now: ready handlers may have modified it
- context.oldHTML = context.oldDelayedHTML = context.$content.html();
- //remove our temporary loading
- /* Disaling our loading div for now
- $( '.wikiEditor-ui-loading' ).fadeOut( 'fast', function() {
- $( this ).remove();
- } );
- */
- // Setup event handling on the iframe
- $( context.$iframe[0].contentWindow.document )
- .bind( 'keydown', function( event ) {
- event.jQueryNode = context.fn.getElementAtCursor();
- return context.fn.trigger( 'keydown', event );
-
- } )
- .bind( 'keyup', function( event ) {
- event.jQueryNode = context.fn.getElementAtCursor();
- return context.fn.trigger( 'keyup', event );
- } )
- .bind( 'keypress', function( event ) {
- event.jQueryNode = context.fn.getElementAtCursor();
- return context.fn.trigger( 'keypress', event );
- } )
- .bind( 'paste', function( event ) {
- return context.fn.trigger( 'paste', event );
- } )
- .bind( 'cut', function( event ) {
- return context.fn.trigger( 'cut', event );
- } )
- .bind( 'keyup paste mouseup cut encapsulateSelection', function( event ) {
- return context.fn.trigger( 'change', event );
- } )
- .delayedBind( 250, 'keyup paste mouseup cut encapsulateSelection', function( event ) {
- context.fn.trigger( 'delayedChange', event );
- } );
- } );
- // Attach a submit handler to the form so that when the form is submitted the content of the iframe gets
- // decoded and copied over to the textarea
- context.$textarea.closest( 'form' ).submit( function() {
- context.$textarea.attr( 'disabled', false );
- context.$textarea.val( context.$textarea.textSelection( 'getContents' ) );
- } );
- /* FIXME: This was taken from EditWarning.js - maybe we could do a jquery plugin for this? */
- // Attach our own handler for onbeforeunload which respects the current one
- context.fallbackWindowOnBeforeUnload = window.onbeforeunload;
- window.onbeforeunload = function() {
- context.$textarea.val( context.$textarea.textSelection( 'getContents' ) );
- if ( context.fallbackWindowOnBeforeUnload ) {
- return context.fallbackWindowOnBeforeUnload();
- }
- };
- },
-
- /**
- * Compatibility with the $.textSelection jQuery plug-in. When the iframe is in use, these functions provide
- * equivilant functionality to the otherwise textarea-based functionality.
- */
-
- 'getElementAtCursor': function() {
- if ( context.$iframe[0].contentWindow.getSelection ) {
- // Firefox and Opera
- var selection = context.$iframe[0].contentWindow.getSelection();
- if ( selection.rangeCount == 0 ) {
- // We don't know where the cursor is
- return $( [] );
- }
- var sc = selection.getRangeAt( 0 ).startContainer;
- if ( sc.nodeName == "#text" ) sc = sc.parentNode;
- return $( sc );
- } else if ( context.$iframe[0].contentWindow.document.selection ) { // should come last; Opera!
- // IE
- var selection = context.$iframe[0].contentWindow.document.selection.createRange();
- return $( selection.parentElement() );
- }
- },
-
- /**
- * Gets the complete contents of the iframe (in plain text, not HTML)
- */
- 'getContents': function() {
- // For <p></p>, .html() returns <p>&nbsp;</p> in IE
- // This seems to convince IE while not affecting display
- if ( !context.$content ) {
- return '';
- }
- var html;
- if ( $.browser.msie ) {
- // Don't manipulate the iframe DOM itself, causes cursor jumping issues
- var $c = $( context.$content.get( 0 ).cloneNode( true ) );
- $c.find( 'p' ).each( function() {
- if ( $(this).html() == '' ) {
- $(this).replaceWith( '<p></p>' );
- }
- } );
- html = $c.html();
- } else {
- html = context.$content.html();
- }
- return context.fn.htmlToText( html );
- },
- /**
- * Gets the currently selected text in the content
- * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead
- */
- 'getSelection': function() {
- var retval;
- if ( context.$iframe[0].contentWindow.getSelection ) {
- // Firefox and Opera
- retval = context.$iframe[0].contentWindow.getSelection();
- if ( $.browser.opera ) {
- // Opera strips newlines in getSelection(), so we need something more sophisticated
- if ( retval.rangeCount > 0 ) {
- retval = context.fn.htmlToText( $( '<pre />' )
- .append( retval.getRangeAt( 0 ).cloneContents() )
- .html()
- );
- } else {
- retval = '';
- }
- }
- } else if ( context.$iframe[0].contentWindow.document.selection ) { // should come last; Opera!
- // IE
- retval = context.$iframe[0].contentWindow.document.selection.createRange();
- }
- if ( typeof retval.text != 'undefined' ) {
- // In IE8, retval.text is stripped of newlines, so we need to process retval.htmlText
- // to get a reliable answer. IE7 does get this right though
- // Run this fix for all IE versions anyway, it doesn't hurt
- retval = context.fn.htmlToText( retval.htmlText );
- } else if ( typeof retval.toString != 'undefined' ) {
- retval = retval.toString();
- }
- return retval;
- },
- /**
- * Inserts text at the begining and end of a text selection, optionally inserting text at the caret when
- * selection is empty.
- * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead
- */
- 'encapsulateSelection': function( options ) {
- var selText = $(this).textSelection( 'getSelection' );
- var selTextArr;
- var collapseToEnd = false;
- var selectAfter = false;
- var setSelectionTo = null;
- var pre = options.pre, post = options.post;
- if ( !selText ) {
- selText = options.peri;
- selectAfter = true;
- } else if ( options.peri == selText.replace( /\s+$/, '' ) ) {
- // Probably a successive button press
- // strip any extra white space from selText
- selText = selText.replace( /\s+$/, '' );
- // set the collapseToEnd flag to ensure our selection is collapsed to the end before any insertion is done
- collapseToEnd = true;
- // set selectAfter to true since we know we'll be populating with our default text
- selectAfter = true;
- } else if ( options.replace ) {
- selText = options.peri;
- } else if ( selText.charAt( selText.length - 1 ) == ' ' ) {
- // Exclude ending space char
- // FIXME: Why?
- selText = selText.substring( 0, selText.length - 1 );
- post += ' ';
- }
- if ( options.splitlines ) {
- selTextArr = selText.split( /\n/ );
- }
-
- if ( context.$iframe[0].contentWindow.getSelection ) {
- // Firefox and Opera
- var range = context.$iframe[0].contentWindow.getSelection().getRangeAt( 0 );
- // if our test above indicated that this was a sucessive button press, we need to collapse the
- // selection to the end to avoid replacing text
- if ( collapseToEnd ) {
- // Make sure we're not collapsing ourselves into a BR tag
- if ( range.endContainer.nodeName == 'BR' ) {
- range.setEndBefore( range.endContainer );
- }
- range.collapse( false );
- }
- if ( options.ownline ) {
- // We need to figure out if the cursor is at the start or end of a line
- var atStart = false, atEnd = false;
- var body = context.$content.get( 0 );
- if ( range.startOffset == 0 ) {
- // Start of a line
- // FIXME: Not necessarily the case with syntax highlighting or
- // template collapsing
- atStart = true;
- } else if ( range.startContainer == body ) {
- // Look up the node just before the start of the selection
- // If it's a <BR>, we're at the start of a line that starts with a
- // block element; if not, we're at the end of a line
- var n = body.firstChild;
- for ( var i = 0; i < range.startOffset - 1 && n; i++ ) {
- n = n.nextSibling;
- }
- if ( n && n.nodeName == 'BR' ) {
- atStart = true;
- } else {
- atEnd = true;
- }
- }
- if ( ( range.endOffset == 0 && range.endContainer.nodeValue == null ) ||
- ( range.endContainer.nodeName == '#text' &&
- range.endOffset == range.endContainer.nodeValue.length ) ||
- ( range.endContainer.nodeName == 'P' && range.endContainer.nodeValue == null ) ) {
- atEnd = true;
- }
- if ( !atStart ) {
- pre = "\n" + options.pre;
- }
- if ( !atEnd ) {
- post += "\n";
- }
- }
- var insertText = "";
- if ( options.splitlines ) {
- for( var j = 0; j < selTextArr.length; j++ ) {
- insertText = insertText + pre + selTextArr[j] + post;
- if( j != selTextArr.length - 1 ) {
- insertText += "\n";
- }
- }
- } else {
- insertText = pre + selText + post;
- }
- var insertLines = insertText.split( "\n" );
- range.extractContents();
- // Insert the contents one line at a time - insertNode() inserts at the beginning, so this has to happen
- // in reverse order
- // Track the first and last inserted node, and if we need to also track where the text we need to select
- // afterwards starts and ends
- var firstNode = null, lastNode = null;
- var selSC = null, selEC = null, selSO = null, selEO = null, offset = 0;
- for ( var i = insertLines.length - 1; i >= 0; i-- ) {
- firstNode = context.$iframe[0].contentWindow.document.createTextNode( insertLines[i] );
- range.insertNode( firstNode );
- lastNode = lastNode || firstNode;
- var newOffset = offset + insertLines[i].length;
- if ( !selEC && post.length <= newOffset ) {
- selEC = firstNode;
- selEO = selEC.nodeValue.length - ( post.length - offset );
- }
- if ( selEC && !selSC && pre.length >= insertText.length - newOffset ) {
- selSC = firstNode;
- selSO = pre.length - ( insertText.length - newOffset );
- }
- offset = newOffset;
- if ( i > 0 ) {
- firstNode = context.$iframe[0].contentWindow.document.createElement( 'br' );
- range.insertNode( firstNode );
- newOffset = offset + 1;
- if ( !selEC && post.length <= newOffset ) {
- selEC = firstNode;
- selEO = 1 - ( post.length - offset );
- }
- if ( selEC && !selSC && pre.length >= insertText.length - newOffset ) {
- selSC = firstNode;
- selSO = pre.length - ( insertText.length - newOffset );
- }
- offset = newOffset;
- }
- }
- if ( firstNode ) {
- context.fn.scrollToTop( $( firstNode.parentNode ) );
- }
- if ( selectAfter ) {
- setSelectionTo = {
- startContainer: selSC,
- endContainer: selEC,
- start: selSO,
- end: selEO
- };
- } else if ( lastNode ) {
- setSelectionTo = {
- startContainer: lastNode,
- endContainer: lastNode,
- start: lastNode.nodeValue.length,
- end: lastNode.nodeValue.length
- };
- }
- } else if ( context.$iframe[0].contentWindow.document.selection ) {
- // IE
- context.$iframe[0].contentWindow.focus();
- var range = context.$iframe[0].contentWindow.document.selection.createRange();
- if ( options.ownline && range.moveStart ) {
- // Check if we're at the start of a line
- // If not, prepend a newline
- var range2 = context.$iframe[0].contentWindow.document.selection.createRange();
- range2.collapse();
- range2.moveStart( 'character', -1 );
- // FIXME: Which check is correct?
- if ( range2.text != "\r" && range2.text != "\n" && range2.text != "" ) {
- pre = "\n" + pre;
- }
-
- // Check if we're at the end of a line
- // If not, append a newline
- var range3 = context.$iframe[0].contentWindow.document.selection.createRange();
- range3.collapse( false );
- range3.moveEnd( 'character', 1 );
- if ( range3.text != "\r" && range3.text != "\n" && range3.text != "" ) {
- post += "\n";
- }
- }
- // if our test above indicated that this was a sucessive button press, we need to collapse the
- // selection to the end to avoid replacing text
- if ( collapseToEnd ) {
- range.collapse( false );
- }
- // TODO: Clean this up. Duplicate code due to the pre-existing browser specific structure of this
- // function
- var insertText = "";
- if ( options.splitlines ) {
- for( var j = 0; j < selTextArr.length; j++ ) {
- insertText = insertText + pre + selTextArr[j] + post;
- if( j != selTextArr.length - 1 ) {
- insertText += "\n";
- }
- }
- } else {
- insertText = pre + selText + post;
- }
- // TODO: Maybe find a more elegant way of doing this like the Firefox code above?
- range.pasteHTML( insertText
- .replace( /\</g, '&lt;' )
- .replace( />/g, '&gt;' )
- .replace( /\r?\n/g, '<br />' )
- );
- if ( selectAfter ) {
- range.moveStart( 'character', -post.length - selText.length );
- range.moveEnd( 'character', -post.length );
- range.select();
- }
- }
-
- if ( setSelectionTo ) {
- context.fn.setSelection( setSelectionTo );
- }
- // Trigger the encapsulateSelection event (this might need to get named something else/done differently)
- $( context.$iframe[0].contentWindow.document ).trigger(
- 'encapsulateSelection', [ pre, options.peri, post, options.ownline, options.replace ]
- );
- return context.$textarea;
- },
- /**
- * Gets the position (in resolution of bytes not nessecarily characters) in a textarea
- * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead
- */
- 'getCaretPosition': function( options ) {
- var startPos = null, endPos = null;
- if ( context.$iframe[0].contentWindow.getSelection ) {
- var selection = context.$iframe[0].contentWindow.getSelection();
- if ( selection.rangeCount == 0 ) {
- // We don't know where the cursor is
- return [ 0, 0 ];
- }
- var sc = selection.getRangeAt( 0 ).startContainer, ec = selection.getRangeAt( 0 ).endContainer;
- var so = selection.getRangeAt( 0 ).startOffset, eo = selection.getRangeAt( 0 ).endOffset;
- if ( sc.nodeName == 'BODY' ) {
- // Grab the node just before the start of the selection
- var n = sc.firstChild;
- for ( var i = 0; i < so - 1 && n; i++ ) {
- n = n.nextSibling;
- }
- sc = n;
- so = 0;
- }
- if ( ec.nodeName == 'BODY' ) {
- var n = ec.firstChild;
- for ( var i = 0; i < eo - 1 && n; i++ ) {
- n = n.nextSibling;
- }
- ec = n;
- eo = 0;
- }
-
- // Make sure sc and ec are leaf nodes
- while ( sc.firstChild ) {
- sc = sc.firstChild;
- }
- while ( ec.firstChild ) {
- ec = ec.firstChild;
- }
- // Make sure the offsets are regenerated if necessary
- context.fn.getOffset( 0 );
- var o;
- for ( o in context.offsets ) {
- if ( startPos === null && context.offsets[o].node == sc ) {
- // For some wicked reason o is a string, even though
- // we put it in as an integer. Use ~~ to coerce it too an int
- startPos = ~~o + so - context.offsets[o].offset;
- }
- if ( startPos !== null && context.offsets[o].node == ec ) {
- endPos = ~~o + eo - context.offsets[o].offset;
- break;
- }
- }
- } else if ( context.$iframe[0].contentWindow.document.selection ) {
- // IE
- // FIXME: This is mostly copypasted from the textSelection plugin
- var d = context.$iframe[0].contentWindow.document;
- var postFinished = false;
- var periFinished = false;
- var postFinished = false;
- var preText, rawPreText, periText;
- var rawPeriText, postText, rawPostText;
- // Depending on the document state, and if the cursor has ever been manually placed within the document
- // the following call such as setEndPoint can result in nasty errors. These cases are always cases
- // in which the start and end points can safely be assumed to be 0, so we will just try our best to do
- // the full process but fall back to 0.
- try {
- // Create range containing text in the selection
- var periRange = d.selection.createRange().duplicate();
- // Create range containing text before the selection
- var preRange = d.body.createTextRange();
- // Move the end where we need it
- preRange.setEndPoint( "EndToStart", periRange );
- // Create range containing text after the selection
- var postRange = d.body.createTextRange();
- // Move the start where we need it
- postRange.setEndPoint( "StartToEnd", periRange );
- // Load the text values we need to compare
- preText = rawPreText = preRange.text;
- periText = rawPeriText = periRange.text;
- postText = rawPostText = postRange.text;
- /*
- * Check each range for trimmed newlines by shrinking the range by 1
- * character and seeing if the text property has changed. If it has
- * not changed then we know that IE has trimmed a \r\n from the end.
- */
- do {
- if ( !postFinished ) {
- if ( preRange.compareEndPoints( "StartToEnd", preRange ) == 0 ) {
- postFinished = true;
- } else {
- preRange.moveEnd( "character", -1 );
- if ( preRange.text == preText ) {
- rawPreText += "\r\n";
- } else {
- postFinished = true;
- }
- }
- }
- if ( !periFinished ) {
- if ( periRange.compareEndPoints( "StartToEnd", periRange ) == 0 ) {
- periFinished = true;
- } else {
- periRange.moveEnd( "character", -1 );
- if ( periRange.text == periText ) {
- rawPeriText += "\r\n";
- } else {
- periFinished = true;
- }
- }
- }
- if ( !postFinished ) {
- if ( postRange.compareEndPoints("StartToEnd", postRange) == 0 ) {
- postFinished = true;
- } else {
- postRange.moveEnd( "character", -1 );
- if ( postRange.text == postText ) {
- rawPostText += "\r\n";
- } else {
- postFinished = true;
- }
- }
- }
- } while ( ( !postFinished || !periFinished || !postFinished ) );
- startPos = rawPreText.replace( /\r\n/g, "\n" ).length;
- endPos = startPos + rawPeriText.replace( /\r\n/g, "\n" ).length;
- } catch( e ) {
- startPos = endPos = 0;
- }
- }
- return [ startPos, endPos ];
- },
- /**
- * Sets the selection of the content
- * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead
- *
- * @param start Character offset of selection start
- * @param end Character offset of selection end
- * @param startContainer Element in iframe to start selection in. If not set, start is a character offset
- * @param endContainer Element in iframe to end selection in. If not set, end is a character offset
- */
- 'setSelection': function( options ) {
- var sc = options.startContainer, ec = options.endContainer;
- sc = sc && sc.jquery ? sc[0] : sc;
- ec = ec && ec.jquery ? ec[0] : ec;
- if ( context.$iframe[0].contentWindow.getSelection ) {
- // Firefox and Opera
- var start = options.start, end = options.end;
- if ( !sc || !ec ) {
- var s = context.fn.getOffset( start );
- var e = context.fn.getOffset( end );
- sc = s ? s.node : null;
- ec = e ? e.node : null;
- start = s ? s.offset : null;
- end = e ? e.offset : null;
- // Don't try to set the selection past the end of a node, causes errors
- // Just put the selection at the end of the node in this case
- if ( sc != null && sc.nodeName == '#text' && start > sc.nodeValue.length ) {
- start = sc.nodeValue.length - 1;
- }
- if ( ec != null && ec.nodeName == '#text' && end > ec.nodeValue.length ) {
- end = ec.nodeValue.length - 1;
- }
- }
- if ( !sc || !ec ) {
- // The requested offset isn't in the offsets array
- // Give up
- return context.$textarea;
- }
-
- var sel = context.$iframe[0].contentWindow.getSelection();
- while ( sc.firstChild && sc.nodeName != '#text' ) {
- sc = sc.firstChild;
- }
- while ( ec.firstChild && ec.nodeName != '#text' ) {
- ec = ec.firstChild;
- }
- var range = context.$iframe[0].contentWindow.document.createRange();
- range.setStart( sc, start );
- range.setEnd( ec, end );
- sel.removeAllRanges();
- sel.addRange( range );
- context.$iframe[0].contentWindow.focus();
- } else if ( context.$iframe[0].contentWindow.document.body.createTextRange ) {
- // IE
- var range = context.$iframe[0].contentWindow.document.body.createTextRange();
- if ( sc ) {
- range.moveToElementText( sc );
- }
- range.collapse();
- range.moveEnd( 'character', options.start );
-
- var range2 = context.$iframe[0].contentWindow.document.body.createTextRange();
- if ( ec ) {
- range2.moveToElementText( ec );
- }
- range2.collapse();
- range2.moveEnd( 'character', options.end );
-
- // IE does newline emulation for <p>s: <p>foo</p><p>bar</p> becomes foo\nbar just fine
- // but <p>foo</p><br><br><p>bar</p> becomes foo\n\n\n\nbar , one \n too many
- // Correct for this
- var matches, counted = 0;
- // while ( matches = range.htmlText.match( regex ) && matches.length <= counted ) doesn't work
- // because the assignment side effect hasn't happened yet when the second term is evaluated
- while ( matches = range.htmlText.match( /\<\/p\>(\<br[^\>]*\>)+\<p\>/gi ) ) {
- if ( matches.length <= counted )
- break;
- range.moveEnd( 'character', matches.length );
- counted += matches.length;
- }
- range2.moveEnd( 'character', counted );
- while ( matches = range2.htmlText.match( /\<\/p\>(\<br[^\>]*\>)+\<p\>/gi ) ) {
- if ( matches.length <= counted )
- break;
- range2.moveEnd( 'character', matches.length );
- counted += matches.length;
- }
-
- range2.setEndPoint( 'StartToEnd', range );
- range2.select();
- }
- return context.$textarea;
- },
- /**
- * Scroll a textarea to the current cursor position. You can set the cursor position with setSelection()
- * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead
- */
- 'scrollToCaretPosition': function( options ) {
- context.fn.scrollToTop( context.fn.getElementAtCursor(), true );
- },
- /**
- * Scroll an element to the top of the iframe
- * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead
- *
- * @param $element jQuery object containing an element in the iframe
- * @param force If true, scroll the element even if it's already visible
- */
- 'scrollToTop': function( $element, force ) {
- var html = context.$content.closest( 'html' ),
- body = context.$content.closest( 'body' ),
- parentHtml = $( 'html' ),
- parentBody = $( 'body' );
- var y = $element.offset().top;
- if ( !$.browser.msie && ! $element.is( 'body' ) ) {
- y = parentHtml.scrollTop() > 0 ? y + html.scrollTop() - parentHtml.scrollTop() : y;
- y = parentBody.scrollTop() > 0 ? y + body.scrollTop() - parentBody.scrollTop() : y;
- }
- var topBound = html.scrollTop() > body.scrollTop() ? html.scrollTop() : body.scrollTop(),
- bottomBound = topBound + context.$iframe.height();
- if ( force || y < topBound || y > bottomBound ) {
- html.scrollTop( y );
- body.scrollTop( y );
- }
- $element.trigger( 'scrollToTop' );
- }
-} );
-
-/* Setup the IFrame */
-context.fn.setupIframe();
-
-} } )( jQuery );
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.js b/extensions/WikiEditor/modules/jquery.wikiEditor.js
index def8b69e..e5d34aa9 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.js
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.js
@@ -8,7 +8,8 @@
* $( 'textarea#wpTextbox1' ).wikiEditor( 'addModule', 'toolbar', { ... config ... } );
*
*/
-( function ( $ ) {
+/*jshint onevar:false, boss:true */
+( function ( $, mw ) {
/**
* Global static object for wikiEditor that provides generally useful functionality to all modules and contexts.
@@ -47,15 +48,15 @@ $.wikiEditor = {
msie: [['>=', 7]],
// Layout issues in FF < 2
firefox: [['>=', 2]],
- // Text selection bugs galore - this may be a different situation with the new iframe-based solution
+ // Text selection bugs galore
opera: [['>=', 9.6]],
// jQuery minimums
safari: [['>=', 3]],
chrome: [['>=', 3]],
netscape: [['>=', 9]],
blackberry: false,
- ipod: false,
- iphone: false
+ ipod: [['>=', 6]],
+ iphone: [['>=', 6]]
},
// Right-to-left languages
rtl: {
@@ -63,15 +64,15 @@ $.wikiEditor = {
msie: [['>=', 8]],
// Layout issues in FF < 2
firefox: [['>=', 2]],
- // Text selection bugs galore - this may be a different situation with the new iframe-based solution
+ // Text selection bugs galore
opera: [['>=', 9.6]],
// jQuery minimums
safari: [['>=', 3]],
chrome: [['>=', 3]],
netscape: [['>=', 9]],
blackberry: false,
- ipod: false,
- iphone: false
+ ipod: [['>=', 6]],
+ iphone: [['>=', 6]]
}
},
@@ -113,7 +114,7 @@ $.wikiEditor = {
isRequired: function ( module, requirement ) {
if ( typeof module.req !== 'undefined' ) {
for ( var req in module.req ) {
- if ( module.req[req] == requirement ) {
+ if ( module.req[req] === requirement ) {
return true;
}
}
@@ -132,9 +133,10 @@ $.wikiEditor = {
* with the key 'bar'.
*/
autoMsg: function ( object, property ) {
+ var i, p;
// Accept array of possible properties, of which the first one found will be used
- if ( typeof property == 'object' ) {
- for ( var i in property ) {
+ if ( typeof property === 'object' ) {
+ for ( i in property ) {
if ( property[i] in object || property[i] + 'Msg' in object ) {
property = property[i];
break;
@@ -144,11 +146,11 @@ $.wikiEditor = {
if ( property in object ) {
return object[property];
} else if ( property + 'Msg' in object ) {
- var p = object[property + 'Msg'];
+ p = object[property + 'Msg'];
if ( $.isArray( p ) && p.length >= 2 ) {
- return mediaWiki.message.apply( mediaWiki.message, p ).plain();
+ return mw.message.apply( mw.message, p ).plain();
} else {
- return mediaWiki.message( p ).plain();
+ return mw.message( p ).plain();
}
} else {
return '';
@@ -181,10 +183,10 @@ $.wikiEditor = {
var src = $.wikiEditor.autoLang( icon, lang );
path = path || $.wikiEditor.imgPath;
// Prepend path if src is not absolute
- if ( src.substr( 0, 7 ) != 'http://' && src.substr( 0, 8 ) != 'https://' && src[0] != '/' ) {
+ if ( src.substr( 0, 7 ) !== 'http://' && src.substr( 0, 8 ) !== 'https://' && src[0] !== '/' ) {
src = path + src;
}
- return src + '?' + mw.loader.version( 'jquery.wikiEditor' );
+ return src + '?' + mw.loader.getVersion( 'jquery.wikiEditor' );
},
/**
@@ -197,9 +199,9 @@ $.wikiEditor = {
*/
autoIconOrOffset: function ( icon, offset, path, lang ) {
lang = lang || mw.config.get( 'wgUserLanguage' );
- if ( typeof offset == 'object' && lang in offset ) {
+ if ( typeof offset === 'object' && lang in offset ) {
return offset[lang];
- } else if ( typeof icon == 'object' && lang in icon ) {
+ } else if ( typeof icon === 'object' && lang in icon ) {
return $.wikiEditor.autoIcon( icon, undefined, lang );
} else {
return $.wikiEditor.autoLang( offset, lang );
@@ -214,21 +216,21 @@ $.fn.wikiEditor = function () {
// Skip any further work when running in browsers that are unsupported
if ( !$.wikiEditor.isSupported() ) {
- return $(this);
+ return $( this );
}
/* Initialization */
// The wikiEditor context is stored in the element's data, so when this function gets called again we can pick up right
// where we left off
-var context = $(this).data( 'wikiEditor-context' );
+var context = $( this ).data( 'wikiEditor-context' );
// On first call, we need to set things up, but on all following calls we can skip right to the API handling
-if ( !context || typeof context == 'undefined' ) {
+if ( !context || typeof context === 'undefined' ) {
// Star filling the context with useful data - any jQuery selections, as usual should be named with a preceding $
context = {
// Reference to the textarea element which the wikiEditor is being built around
- '$textarea': $(this),
+ '$textarea': $( this ),
// Container for any number of mutually exclusive views that are accessible by tabs
'views': {},
// Container for any number of module-specific data - only including data for modules in use on this context
@@ -236,25 +238,9 @@ if ( !context || typeof context == 'undefined' ) {
// General place to shouve bits of data into
'data': {},
// Unique numeric ID of this instance used both for looking up and differentiating instances of wikiEditor
- 'instance': $.wikiEditor.instances.push( $(this) ) - 1,
- // Array mapping elements in the textarea to character offsets
- 'offsets': null,
- // Cache for context.fn.htmlToText()
- 'htmlToTextMap': {},
- // The previous HTML of the iframe, stored to detect whether something really changed.
- 'oldHTML': null,
- // Same for delayedChange()
- 'oldDelayedHTML': null,
- // The previous selection of the iframe, stored to detect whether the selection has changed
- 'oldDelayedSel': null,
- // Saved selection state for IE
+ 'instance': $.wikiEditor.instances.push( $( this ) ) - 1,
+ // Saved selection state for old IE (<=10)
'savedSelection': null,
- // Stack of states in { html: [string] } form
- 'history': [],
- // Current history state position - this is number of steps backwards, so it's always -1 or less
- 'historyPosition': -1,
- /// The previous historyPosition, stored to detect if change events were due to an undo or redo action
- 'oldDelayedHistoryPosition': -1,
// List of extensions active on this context
'extensions': []
};
@@ -262,7 +248,7 @@ if ( !context || typeof context == 'undefined' ) {
/**
* Externally Accessible API
*
- * These are available using calls to $(selection).wikiEditor( call, data ) where selection is a jQuery selection
+ * These are available using calls to $( selection ).wikiEditor( call, data ) where selection is a jQuery selection
* of the textarea that the wikiEditor instance was built around.
*/
@@ -276,14 +262,14 @@ if ( !context || typeof context == 'undefined' ) {
'addModule': function ( context, data ) {
var module, call,
modules = {};
- if ( typeof data == 'string' ) {
+ if ( typeof data === 'string' ) {
modules[data] = {};
- } else if ( typeof data == 'object' ) {
+ } else if ( typeof data === 'object' ) {
modules = data;
}
for ( module in modules ) {
// Check for the existance of an available / supported module with a matching name and a create function
- if ( typeof module == 'string' && typeof $.wikiEditor.modules[module] !== 'undefined' &&
+ if ( typeof module === 'string' && typeof $.wikiEditor.modules[module] !== 'undefined' &&
$.wikiEditor.isSupported( $.wikiEditor.modules[module] ) )
{
// Extend the context's core API with this module's own API calls
@@ -326,11 +312,11 @@ if ( !context || typeof context == 'undefined' ) {
*/
trigger: function ( name, event ) {
// Event is an optional argument, but from here on out, at least the type field should be dependable
- if ( typeof event == 'undefined' ) {
+ if ( typeof event === 'undefined' ) {
event = { 'type': 'custom' };
}
// Ensure there's a place for extra information to live
- if ( typeof event.data == 'undefined' ) {
+ if ( typeof event.data === 'undefined' ) {
event.data = {};
}
@@ -350,9 +336,9 @@ if ( !context || typeof context == 'undefined' ) {
name in $.wikiEditor.modules[module].evt
) {
var ret = $.wikiEditor.modules[module].evt[name]( context, event );
- if (ret !== null) {
+ if ( ret !== null ) {
//if 1 returns false, the end result is false
- if( returnFromModules === null ) {
+ if ( returnFromModules === null ) {
returnFromModules = ret;
} else {
returnFromModules = returnFromModules && ret;
@@ -393,7 +379,7 @@ if ( !context || typeof context == 'undefined' ) {
// Return the newly appended tab
return $( '<div>' )
.attr( 'rel', 'wikiEditor-ui-view-' + options.name )
- .addClass( context.view == options.name ? 'current' : null )
+ .addClass( context.view === options.name ? 'current' : null )
.append( $( '<a>' )
.attr( 'href', '#' )
.mousedown( function () {
@@ -402,11 +388,11 @@ if ( !context || typeof context == 'undefined' ) {
} )
.click( function ( event ) {
context.$ui.find( '.wikiEditor-ui-view' ).hide();
- context.$ui.find( '.' + $(this).parent().attr( 'rel' ) ).show();
+ context.$ui.find( '.' + $( this ).parent().attr( 'rel' ) ).show();
context.$tabs.find( 'div' ).removeClass( 'current' );
- $(this).parent().addClass( 'current' );
- $(this).blur();
- if ( 'init' in options && typeof options.init == 'function' ) {
+ $( this ).parent().addClass( 'current' );
+ $( this ).blur();
+ if ( 'init' in options && typeof options.init === 'function' ) {
options.init( context );
}
event.preventDefault();
@@ -457,17 +443,17 @@ if ( !context || typeof context == 'undefined' ) {
},
/**
- * Save text selection for IE
+ * Save text selection for old IE (<=10)
*/
saveSelection: function () {
- if ( $.client.profile().name === 'msie' ) {
+ if ( $.client.profile().name === 'msie' && document.selection && document.selection.createRange ) {
context.$textarea.focus();
context.savedSelection = document.selection.createRange();
}
},
/**
- * Restore text selection for IE
+ * Restore text selection for old IE (<=10)
*/
restoreSelection: function () {
if ( $.client.profile().name === 'msie' && context.savedSelection !== null ) {
@@ -479,6 +465,13 @@ if ( !context || typeof context == 'undefined' ) {
};
/**
+ * Workaround for a scrolling bug in IE8 (bug 61908)
+ */
+ if ( $.client.profile().name === 'msie' ) {
+ context.$textarea.css( 'height', context.$textarea.height() );
+ }
+
+ /**
* Base UI Construction
*
* The UI is built from several containers, the outer-most being a div classed as "wikiEditor-ui". These containers
@@ -493,6 +486,9 @@ if ( !context || typeof context == 'undefined' ) {
.append( $( '<span>' + mediaWiki.msg( 'wikieditor-loading' ) + '</span>' )
.css( 'marginTop', context.$textarea.height() / 2 ) );
*/
+ /* Preserving cursor and focus state, which will get lost due to wrapAll */
+ var hasFocus = context.$textarea.is( ':focus' ),
+ cursorPos = context.$textarea.textSelection( 'getCaretPosition', { startAndEnd: true } );
// Encapsulate the textarea with some containers for layout
context.$textarea
/* Disabling our loading div for now
@@ -504,6 +500,14 @@ if ( !context || typeof context == 'undefined' ) {
.wrapAll( $( '<div>' ).addClass( 'wikiEditor-ui-left' ) )
.wrapAll( $( '<div>' ).addClass( 'wikiEditor-ui-bottom' ) )
.wrapAll( $( '<div>' ).addClass( 'wikiEditor-ui-text' ) );
+ // Restore scroll position after this wrapAll (tracked by mediawiki.action.edit)
+ context.$textarea.prop( 'scrollTop', $( '#wpScrolltop' ).val() );
+ // Restore focus and cursor if needed
+ if ( hasFocus ) {
+ context.$textarea.focus();
+ context.$textarea.textSelection( 'setSelection', { start: cursorPos[0], end: cursorPos[1] } );
+ }
+
// Get references to some of the newly created containers
context.$ui = context.$textarea.parent().parent().parent().parent().parent();
context.$wikitext = context.$textarea.parent().parent().parent().parent();
@@ -514,15 +518,16 @@ if ( !context || typeof context == 'undefined' ) {
.append( $( '<div>' ).addClass( 'wikiEditor-ui-tabs' ).hide() )
.append( $( '<div>' ).addClass( 'wikiEditor-ui-buttons' ) )
)
- .before( $( '<div style="clear: both;"></div>' ) );
+ .before( $( '<div>' ).addClass( 'wikiEditor-ui-clear' ) );
// Get references to some of the newly created containers
context.$controls = context.$ui.find( '.wikiEditor-ui-buttons' ).hide();
context.$buttons = context.$ui.find( '.wikiEditor-ui-buttons' );
context.$tabs = context.$ui.find( '.wikiEditor-ui-tabs' );
// Clear all floating after the UI
- context.$ui.after( $( '<div style="clear: both;"></div>' ) );
+ context.$ui.after( $( '<div>' ).addClass( 'wikiEditor-ui-clear' ) );
// Attach a right container
context.$wikitext.append( $( '<div>' ).addClass( 'wikiEditor-ui-right' ) );
+ context.$wikitext.append( $( '<div>' ).addClass( 'wikiEditor-ui-clear' ) );
// Attach a top container to the left pane
context.$wikitext.find( '.wikiEditor-ui-left' ).prepend( $( '<div>' ).addClass( 'wikiEditor-ui-top' ) );
// Setup the intial view
@@ -539,9 +544,9 @@ if ( !context || typeof context == 'undefined' ) {
var args = $.makeArray( arguments );
// Dynamically setup core extensions for modules that are required
-if ( args[0] == 'addModule' && typeof args[1] !== 'undefined' ) {
+if ( args[0] === 'addModule' && typeof args[1] !== 'undefined' ) {
var modules = args[1];
- if ( typeof modules !== "object" ) {
+ if ( typeof modules !== 'object' ) {
modules = {};
modules[args[1]] = '';
}
@@ -573,8 +578,8 @@ if ( args.length > 0 ) {
}
// Store the context for next time, and support chaining
-return $(this).data( 'wikiEditor-context', context );
+return $( this ).data( 'wikiEditor-context', context );
};
-}( jQuery ) );
+}( jQuery, mediaWiki ) );
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.preview.js b/extensions/WikiEditor/modules/jquery.wikiEditor.preview.js
index 39907364..f0665220 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.preview.js
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.preview.js
@@ -1,6 +1,6 @@
/* Preview module for wikiEditor */
( function ( $, mw ) {
-
+/*jshint onevar:false */
$.wikiEditor.modules.preview = {
/**
@@ -32,7 +32,7 @@ fn: {
* @param context Context object of editor to create module in
* @param config Configuration object to create module from
*/
- create: function ( context, config ) {
+ create: function ( context ) {
if ( 'initialized' in context.modules.preview ) {
return;
}
@@ -53,32 +53,37 @@ fn: {
}
context.modules.preview.$preview.find( '.wikiEditor-preview-contents' ).empty();
context.modules.preview.$preview.find( '.wikiEditor-preview-loading' ).show();
- $.post(
- mw.util.wikiScript( 'api' ),
- {
+ $.ajax( {
+ url: mw.util.wikiScript( 'api' ),
+ type: 'POST',
+ dataType: 'json',
+ data: {
format: 'json',
action: 'parse',
title: mw.config.get( 'wgPageName' ),
text: wikitext,
- prop: 'text',
+ prop: 'text|modules',
pst: ''
- },
- function ( data ) {
- if (
- typeof data.parse == 'undefined' ||
- typeof data.parse.text == 'undefined' ||
- typeof data.parse.text['*'] == 'undefined'
- ) {
- return;
- }
- context.modules.preview.previewText = wikitext;
- context.modules.preview.$preview.find( '.wikiEditor-preview-loading' ).hide();
- context.modules.preview.$preview.find( '.wikiEditor-preview-contents' )
- .html( data.parse.text['*'] )
- .find( 'a:not([href^=#])' ).click( false );
- },
- 'json'
- );
+ }
+ } ).done( function ( data ) {
+ if ( !data.parse || !data.parse.text || data.parse.text['*'] === undefined ) {
+ return;
+ }
+
+ context.modules.preview.previewText = wikitext;
+ context.modules.preview.$preview.find( '.wikiEditor-preview-loading' ).hide();
+ context.modules.preview.$preview.find( '.wikiEditor-preview-contents' )
+ .html( data.parse.text['*'] )
+ .find( 'a:not([href^=#])' )
+ .click( false );
+
+ var loadmodules = data.parse.modules.concat(
+ data.parse.modulescripts,
+ data.parse.modulestyles,
+ data.parse.modulemessages
+ );
+ mw.loader.load( loadmodules );
+ } );
}
} );
@@ -89,21 +94,25 @@ fn: {
// Gets the latest copy of the wikitext
var wikitext = context.$textarea.textSelection( 'getContents' );
// Aborts when nothing has changed since the last time
- if ( context.modules.preview.changesText == wikitext ) {
+ if ( context.modules.preview.changesText === wikitext ) {
return;
}
context.$changesTab.find( 'table.diff tbody' ).empty();
context.$changesTab.find( '.wikiEditor-preview-loading' ).show();
// Call the API. First PST the input, then diff it
- var postdata = {
- format: 'json',
- action: 'parse',
- onlypst: '',
- text: wikitext
- };
-
- $.post( mw.util.wikiScript( 'api' ), postdata, function ( data ) {
+ $.ajax( {
+ url: mw.util.wikiScript( 'api' ),
+ type: 'POST',
+ dataType: 'json',
+ data: {
+ format: 'json',
+ action: 'parse',
+ title: mw.config.get( 'wgPageName' ),
+ onlypst: '',
+ text: wikitext
+ }
+ } ).done( function ( data ) {
try {
var postdata2 = {
format: 'json',
@@ -115,25 +124,33 @@ fn: {
rvprop: ''
};
var section = $( '[name="wpSection"]' ).val();
- if ( section !== '' )
+ if ( section !== '' ) {
postdata2.rvsection = section;
+ }
+
+ $.ajax( {
+ url: mw.util.wikiScript( 'api' ),
+ type: 'POST',
+ dataType: 'json',
+ data: postdata2
+ } ).done( function ( data ) {
+ // Add diff CSS
+ mw.loader.load( 'mediawiki.action.history.diff' );
+ try {
+ var diff = data.query.pages[data.query.pageids[0]]
+ .revisions[0].diff['*'];
- $.post( mw.util.wikiScript( 'api' ), postdata2, function ( data ) {
- // Add diff CSS
- mw.loader.load( 'mediawiki.action.history.diff' );
- try {
- var diff = data.query.pages[data.query.pageids[0]]
- .revisions[0].diff['*'];
- context.$changesTab.find( 'table.diff tbody' )
- .html( diff );
- context.$changesTab
- .find( '.wikiEditor-preview-loading' ).hide();
- context.modules.preview.changesText = wikitext;
- } catch ( e ) { } // "blah is undefined" error, ignore
- }, 'json'
- );
- } catch ( e ) { } // "blah is undefined" error, ignore
- }, 'json' );
+ context.$changesTab.find( 'table.diff tbody' ).html( diff );
+ context.modules.preview.changesText = wikitext;
+ } catch ( e ) {
+ // "data.blah is undefined" error, ignore
+ }
+ context.$changesTab.find( '.wikiEditor-preview-loading' ).hide();
+ } );
+ } catch ( e ) {
+ // "data.blah is undefined" error, ignore
+ }
+ } );
}
} );
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.js b/extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.js
index ca88c79a..34f38e30 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.js
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.js
@@ -1,5 +1,6 @@
/* Publish module for wikiEditor */
-( function( $ ) { $.wikiEditor.modules.previewDialog = {
+/*jshint onevar:false */
+( function ( $, mw ) { $.wikiEditor.modules.previewDialog = {
/**
* Compatability map
@@ -29,7 +30,7 @@ fn: {
* @param context Context object of editor to create module in
* @param config Configuration object to create module from
*/
- create: function( context, config ) {
+ create: function ( context ) {
// Build the dialog behind the Publish button
var dialogID = 'wikiEditor-' + context.instance + '-preview-dialog';
$.wikiEditor.modules.dialogs.fn.create(
@@ -42,11 +43,11 @@ fn: {
<div class="wikiEditor-ui-loading"><span></span></div>\
<div class="wikiEditor-preview-dialog-contents"></div>\
',
- init: function() {
+ init: function () {
},
dialog: {
buttons: {
- 'wikieditor-publish-dialog-publish': function() {
+ 'wikieditor-publish-dialog-publish': function () {
var minorChecked = $( '#wikiEditor-' + context.instance +
'-dialog-minor' ).is( ':checked' ) ?
'checked' : '';
@@ -59,15 +60,15 @@ fn: {
'-dialog-summary' ).val() );
$( '#editform' ).submit();
},
- 'wikieditor-publish-dialog-goback': function() {
- $(this).dialog( 'close' );
+ 'wikieditor-publish-dialog-goback': function () {
+ $( this ).dialog( 'close' );
}
},
resizable: false,
height: $( 'body' ).height() - 100,
width: $( 'body' ).width() - 300,
position: ['center', 'top'],
- open: function() {
+ open: function () {
// Gets the latest copy of the wikitext
var wikitext = context.fn.getContents();
var $dialog = $( '#' + dialogID );
@@ -78,7 +79,7 @@ fn: {
.css( 'top', '25px' );
// $dialog.dialog( 'option', 'width', $( 'body' ).width() - 300 );
// Aborts when nothing has changed since the last preview
- if ( context.modules.preview.previewText == wikitext ) {
+ if ( context.modules.preview.previewText === wikitext ) {
return;
}
@@ -94,11 +95,11 @@ fn: {
'pst': '',
'format': 'json'
},
- function( data ) {
+ function ( data ) {
if (
- typeof data.parse == 'undefined' ||
- typeof data.parse.text == 'undefined' ||
- typeof data.parse.text['*'] == 'undefined'
+ typeof data.parse === 'undefined' ||
+ typeof data.parse.text === 'undefined' ||
+ typeof data.parse.text['*'] === 'undefined'
) {
return;
}
@@ -108,7 +109,7 @@ fn: {
.html( '<h1 class="firstHeading" id="firstHeading">' +
mw.config.get( 'wgTitle' ) + '</h1>' +
data.parse.text['*'] )
- .find( 'a:not([href^=#])' ).click( function() { return false; } );
+ .find( 'a:not([href^=#])' ).click( function () { return false; } );
},
'json'
);
@@ -120,12 +121,12 @@ fn: {
);
context.fn.addButton( {
'captionMsg': 'wikieditor-preview-tab',
- 'action': function() {
- context.$textarea.wikiEditor( 'openDialog', 'preview');
+ 'action': function () {
+ context.$textarea.wikiEditor( 'openDialog', 'preview' );
return false;
}
} );
}
}
-}; } )( jQuery );
+}; } )( jQuery, mediaWiki );
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.publish.js b/extensions/WikiEditor/modules/jquery.wikiEditor.publish.js
index b61140dc..c7360006 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.publish.js
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.publish.js
@@ -1,4 +1,5 @@
/* Publish module for wikiEditor */
+/*jshint onevar:false */
( function ( $ ) {
$.wikiEditor.modules.publish = {
@@ -31,7 +32,7 @@ fn: {
* @param context Context object of editor to create module in
* @param config Configuration object to create module from
*/
- create: function ( context, config ) {
+ create: function ( context ) {
// Build the dialog behind the Publish button
var dialogID = 'wikiEditor-' + context.instance + '-dialog';
$.wikiEditor.modules.dialogs.fn.create(
@@ -66,9 +67,9 @@ fn: {
init: function () {
var i;
- $(this).find( '[rel]' ).each( function () {
- $(this).text( mediaWiki.msg( $(this).attr( 'rel' ) ) );
- });
+ $( this ).find( '[rel]' ).each( function () {
+ $( this ).text( mediaWiki.msg( $( this ).attr( 'rel' ) ) );
+ } );
/* REALLY DIRTY HACK! */
// Reformat the copyright warning stuff
@@ -84,26 +85,28 @@ fn: {
}
newCopyWarnHTML += '</ul>';
// No list if there's only one element
- $(this).find( '.wikiEditor-publish-dialog-copywarn' ).html(
+ $( this ).find( '.wikiEditor-publish-dialog-copywarn' ).html(
copyWarnStatements.length > 1 ? newCopyWarnHTML : copyWarnHTML
);
/* END OF REALLY DIRTY HACK */
- if ( $( '#wpMinoredit' ).length === 0 )
+ if ( $( '#wpMinoredit' ).length === 0 ) {
$( '#wikiEditor-' + context.instance + '-dialog-minor' ).hide();
- else if ( $( '#wpMinoredit' ).is( ':checked' ) )
+ } else if ( $( '#wpMinoredit' ).prop( 'checked' ) ) {
$( '#wikiEditor-' + context.instance + '-dialog-minor' )
.prop( 'checked', true );
- if ( $( '#wpWatchthis' ).length === 0 )
+ }
+ if ( $( '#wpWatchthis' ).length === 0 ) {
$( '#wikiEditor-' + context.instance + '-dialog-watch' ).hide();
- else if ( $( '#wpWatchthis' ).is( ':checked' ) )
+ } else if ( $( '#wpWatchthis' ).prop( 'checked' ) ) {
$( '#wikiEditor-' + context.instance + '-dialog-watch' )
.prop( 'checked', true );
+ }
- $(this).find( 'form' ).submit( function ( e ) {
- $(this).closest( '.ui-dialog' ).find( 'button:first' ).click();
+ $( this ).find( 'form' ).submit( function ( e ) {
+ $( this ).closest( '.ui-dialog' ).find( 'button:first' ).click();
e.preventDefault();
- });
+ } );
},
immediateCreate: true,
dialog: {
@@ -122,7 +125,7 @@ fn: {
$( '#editform' ).submit();
},
'wikieditor-publish-dialog-goback': function () {
- $(this).dialog( 'close' );
+ $( this ).dialog( 'close' );
}
},
open: function () {
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.templateEditor.js b/extensions/WikiEditor/modules/jquery.wikiEditor.templateEditor.js
deleted file mode 100644
index bd00325f..00000000
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.templateEditor.js
+++ /dev/null
@@ -1,865 +0,0 @@
-/* TemplateEditor module for wikiEditor */
-( function( $ ) { $.wikiEditor.modules.templateEditor = {
-/**
- * Name mappings, dirty hack which will be removed once "TemplateInfo" extension is more fully supported
- */
-'nameMappings': { //keep these all lowercase to navigate web of redirects
- "infobox skyscraper": "building_name",
- "infobox settlement": "official_name"
-},
-
-
-/**
- * Compatability map
- */
-'browsers': {
- // Left-to-right languages
- 'ltr': {
- 'msie': [['>=', 8]],
- 'firefox': [['>=', 3]],
- 'opera': [['>=', 10]],
- 'safari': [['>=', 4]]
- },
- // Right-to-left languages
- 'rtl': {
- 'msie': false,
- 'firefox': [['>=', 3]],
- 'opera': [['>=', 10]],
- 'safari': [['>=', 4]]
- }
-},
-/**
- * Core Requirements
- */
-'req': [ 'iframe' ],
-/**
- * Event handlers
- */
-evt: {
-
- mark: function( context, event ) {
- // The markers returned by this function are skipped on realchange, so don't regenerate them in that case
- if ( context.modules.highlight.currentScope == 'realchange' ) {
- return;
- }
-
- // Get references to the markers and tokens from the current context
- var markers = context.modules.highlight.markers;
- var tokenArray = context.modules.highlight.tokenArray;
- // Collect matching level 0 template call boundaries from the tokenArray
- var level = 0;
- var tokenIndex = 0;
- while ( tokenIndex < tokenArray.length ){
- while ( tokenIndex < tokenArray.length && tokenArray[tokenIndex].label != 'TEMPLATE_BEGIN' ) {
- tokenIndex++;
- }
- //open template
- if ( tokenIndex < tokenArray.length ) {
- var beginIndex = tokenIndex;
- var endIndex = -1; //no match found
- var openTemplates = 1;
- var templatesMatched = false;
- while ( tokenIndex < tokenArray.length - 1 && endIndex == -1 ) {
- tokenIndex++;
- if ( tokenArray[tokenIndex].label == 'TEMPLATE_BEGIN' ) {
- openTemplates++;
- } else if ( tokenArray[tokenIndex].label == 'TEMPLATE_END' ) {
- openTemplates--;
- if ( openTemplates == 0 ) {
- endIndex = tokenIndex;
- } //we can stop looping
- }
- }//while finding template ending
- if ( endIndex != -1 ) {
- markers.push( {
- start: tokenArray[beginIndex].offset,
- end: tokenArray[endIndex].offset,
- type: 'template',
- anchor: 'wrap',
- afterWrap: function( node ) {
- // Generate model
- var model = $.wikiEditor.modules.templateEditor.fn.updateModel( $( node ) );
- if ( model.isCollapsible() ) {
- $.wikiEditor.modules.templateEditor.fn.wrapTemplate( $( node ) );
- $.wikiEditor.modules.templateEditor.fn.bindTemplateEvents( $( node ) );
- } else {
- $( node ).addClass( 'wikiEditor-template-text' );
- }
- },
- beforeUnwrap: function( node ) {
- if ( $( node ).parent().hasClass( 'wikiEditor-template' ) ) {
- $.wikiEditor.modules.templateEditor.fn.unwrapTemplate( $( node ) );
- }
- },
- onSkip: function( node ) {
- if ( $( node ).html() == $( node ).data( 'oldHTML' ) ) {
- // No change
- return;
- }
-
- // Text changed, regenerate model
- var model = $.wikiEditor.modules.templateEditor.fn.updateModel( $( node ) );
-
- // Update template name if needed
- if ( $( node ).parent().hasClass( 'wikiEditor-template' ) ) {
- var $label = $( node ).parent().find( '.wikiEditor-template-label' );
- var displayName = $.wikiEditor.modules.templateEditor.fn.getTemplateDisplayName( model );
- if ( $label.text() != displayName ) {
- $label.text( displayName );
- }
- }
-
- // Wrap or unwrap the template if needed
- if ( $( node ).parent().hasClass( 'wikiEditor-template' ) &&
- !model.isCollapsible() ) {
- $.wikiEditor.modules.templateEditor.fn.unwrapTemplate( $( node ) );
- } else if ( !$( node ).parent().hasClass( 'wikiEditor-template' ) &&
- model.isCollapsible() ) {
- $.wikiEditor.modules.templateEditor.fn.wrapTemplate( $( node ) );
- $.wikiEditor.modules.templateEditor.fn.bindTemplateEvents( $( node ) );
- }
- },
- getAnchor: function( ca1, ca2 ) {
- return $( ca1.parentNode ).is( 'span.wikiEditor-template-text' ) ?
- ca1.parentNode : null;
- },
- context: context,
- skipDivision: 'realchange'
- } );
- } else { //else this was an unmatched opening
- tokenArray[beginIndex].label = 'TEMPLATE_FALSE_BEGIN';
- tokenIndex = beginIndex;
- }
- }//if opentemplates
- }
- }, //mark
-
- keydown: function( context, event ) {
- // Reset our ignoreKeypress variable if it's set to true
- if ( context.$iframe.data( 'ignoreKeypress' ) ) {
- context.$iframe.data( 'ignoreKeypress', false );
- }
- var $evtElem = event.jQueryNode;
- if ( $evtElem.hasClass( 'wikiEditor-template-label' ) ) {
- // Allow anything if the command or control key are depressed
- if ( event.ctrlKey || event.metaKey ) return true;
- switch ( event.which ) {
- case 13: // Enter
- $evtElem.click();
- event.preventDefault();
- return false;
- case 32: // Space
- $evtElem.parent().siblings( '.wikiEditor-template-expand' ).click();
- event.preventDefault();
- return false;
- case 37:// Left
- case 38:// Up
- case 39:// Right
- case 40: //Down
- return true;
- default:
- // Set the ignroreKeypress variable so we don't allow typing if the key is held
- context.$iframe.data( 'ignoreKeypress', true );
- // Can't type in a template name
- event.preventDefault();
- return false;
- }
- } else if ( $evtElem.hasClass( 'wikiEditor-template-text' ) ) {
- switch ( event.which ) {
- case 13: // Enter
- // Ensure that the user can't break this by holding in the enter key
- context.$iframe.data( 'ignoreKeypress', true );
- // FIXME: May be a more elegant way to do this, but this works too
- context.fn.encapsulateSelection( { 'pre': '\n', 'peri': '', 'post': '' } );
- event.preventDefault();
- return false;
- default: return true;
- }
- }
- },
- keyup: function( context, event ) {
- // Rest our ignoreKeypress variable if it's set to true
- if ( context.$iframe.data( 'ignoreKeypress' ) ) {
- context.$iframe.data( 'ignoreKeypress', false );
- }
- return true;
- },
- keypress: function( context, event ) {
- // If this event is from a keydown event which we want to block, ignore it
- return ( context.$iframe.data( 'ignoreKeypress' ) ? false : true );
- }
-},
-/**
- * Regular expressions that produce tokens
- */
-exp: [
- { 'regex': /{{/, 'label': "TEMPLATE_BEGIN" },
- { 'regex': /}}/, 'label': "TEMPLATE_END", 'markAfter': true }
-],
-/**
- * Configuration
- */
-cfg: {
-},
-/**
- * Internally used functions
- */
-fn: {
- /**
- * Creates template form module within wikieditor
- * @param context Context object of editor to create module in
- * @param config Configuration object to create module from
- */
- create: function( context, config ) {
- // Initialize module within the context
- context.modules.templateEditor = {};
- },
- /**
- * Turns a simple template wrapper (really just a <span>) into a complex one
- * @param $wrapper Wrapping <span>
- */
- wrapTemplate: function( $wrapper ) {
- var model = $wrapper.data( 'model' );
- var context = $wrapper.data( 'marker' ).context;
- var $template = $wrapper
- .wrap( '<span class="wikiEditor-template"></span>' )
- .addClass( 'wikiEditor-template-text wikiEditor-template-text-shrunken' )
- .parent()
- .addClass( 'wikiEditor-template-collapsed' )
- .prepend(
- '<span class="wikiEditor-template-expand wikiEditor-noinclude"></span>' +
- '<span class="wikiEditor-template-name wikiEditor-noinclude">' +
- '<span class="wikiEditor-template-label wikiEditor-noinclude">' +
- $.wikiEditor.modules.templateEditor.fn.getTemplateDisplayName( model ) + '</span>' +
- '<span class="wikiEditor-template-dialog wikiEditor-noinclude"></span>' +
- '</span>'
- );
- },
- /**
- * Turn a complex template wrapper back into a simple one
- * @param $wrapper Wrapping <span>
- */
- unwrapTemplate: function( $wrapper ) {
- $wrapper.parent().replaceWith( $wrapper );
- },
- /**
- * Bind events to a template
- * @param $wrapper Original wrapper for the template to bind events to
- */
- bindTemplateEvents: function( $wrapper ) {
- var $template = $wrapper.parent( '.wikiEditor-template' );
-
- if ( typeof ( opera ) == "undefined" ) {
- $template.parent().attr('contentEditable', 'false');
- }
-
- $template.click( function(event) {event.preventDefault(); return false;} );
-
- $template.find( '.wikiEditor-template-name' )
- .click( function( event ) {
- $.wikiEditor.modules.templateEditor.fn.createDialog( $wrapper );
- event.stopPropagation();
- return false;
- } )
- .mousedown( function( event ) { event.stopPropagation(); return false; } );
- $template.find( '.wikiEditor-template-expand' )
- .click( function( event ) {
- $.wikiEditor.modules.templateEditor.fn.toggleWikiTextEditor( $wrapper );
- event.stopPropagation();
- return false;
- } )
- .mousedown( function( event ) { event.stopPropagation(); return false; } );
- },
- /**
- * Toggle the visisbilty of the wikitext for a given template
- * @param $wrapper The origianl wrapper we want expand/collapse
- */
- toggleWikiTextEditor: function( $wrapper ) {
- var context = $wrapper.data( 'marker' ).context;
- var $template = $wrapper.parent( '.wikiEditor-template' );
- context.fn.purgeOffsets();
- $template
- .toggleClass( 'wikiEditor-template-expanded' )
- .toggleClass( 'wikiEditor-template-collapsed' ) ;
-
- var $templateText = $template.find( '.wikiEditor-template-text' );
- $templateText.toggleClass( 'wikiEditor-template-text-shrunken' );
- $templateText.toggleClass( 'wikiEditor-template-text-visible' );
- if( $templateText.hasClass('wikiEditor-template-text-shrunken') ){
- //we just closed the template
-
- // Update the model if we need to
- if ( $templateText.html() != $templateText.data( 'oldHTML' ) ) {
- var templateModel = $.wikiEditor.modules.templateEditor.fn.updateModel( $templateText );
-
- //this is the only place the template name can be changed; keep the template name in sync
- var $tLabel = $template.find( '.wikiEditor-template-label' );
- $tLabel.text( $.wikiEditor.modules.templateEditor.fn.getTemplateDisplayName( templateModel ) );
- }
-
- }
- },
- /**
- * Create a dialog for editing a given template and open it
- * @param $wrapper The origianl wrapper for which to create the dialog
- */
- createDialog: function( $wrapper ) {
- var context = $wrapper.data( 'marker' ).context;
- var $template = $wrapper.parent( '.wikiEditor-template' );
- var dialog = {
- 'titleMsg': 'wikieditor-template-editor-dialog-title',
- 'id': 'wikiEditor-template-dialog',
- 'html': '\
- <fieldset>\
- <div class="wikiEditor-template-dialog-title" />\
- <div class="wikiEditor-template-dialog-fields" />\
- </fieldset>',
- init: function() {
- $(this).find( '[rel]' ).each( function() {
- $(this).text( mediaWiki.msg( $(this).attr( 'rel' ) ) );
- } );
- },
- immediateCreate: true,
- dialog: {
- width: 600,
- height: 400,
- dialogClass: 'wikiEditor-toolbar-dialog',
- buttons: {
- 'wikieditor-template-editor-dialog-submit': function() {
- // More user feedback
- var $templateDiv = $( this ).data( 'templateDiv' );
- context.fn.highlightLine( $templateDiv );
-
- var $templateText = $templateDiv.children( '.wikiEditor-template-text' );
- var templateModel = $templateText.data( 'model' );
- $( this ).find( '.wikiEditor-template-dialog-field-wrapper textarea' ).each( function() {
- // Update the value
- templateModel.setValue( $( this ).data( 'name' ), $( this ).val() );
- });
- //keep text consistent
- $.wikiEditor.modules.templateEditor.fn.updateModel( $templateText, templateModel );
-
- $( this ).dialog( 'close' );
- },
- 'wikieditor-template-editor-dialog-cancel': function() {
- $(this).dialog( 'close' );
- }
- },
- open: function() {
- var $templateDiv = $( this ).data( 'templateDiv' );
- var $templateText = $templateDiv.children( '.wikiEditor-template-text' );
- var templateModel = $templateText.data( 'model' );
- // Update the model if we need to
- if ( $templateText.html() != $templateText.data( 'oldHTML' ) ) {
- templateModel = $.wikiEditor.modules.templateEditor.fn.updateModel( $templateText );
- }
-
- // Build the table
- // TODO: Be smart and recycle existing table
- var params = templateModel.getAllInitialParams();
- var $fields = $( this ).find( '.wikiEditor-template-dialog-fields' );
- // Do some bookkeeping so we can recycle existing rows
- var $rows = $fields.find( '.wikiEditor-template-dialog-field-wrapper' );
- for ( var paramIndex in params ) {
- var param = params[paramIndex];
- if ( typeof param.name == 'undefined' ) {
- // param is the template name, skip it
- continue;
- }
- var paramText = typeof param == 'string' ?
- param.name.replace( /[\_\-]/g, ' ' ) :
- param.name;
- var paramVal = templateModel.getValue( param.name );
- if ( $rows.length > 0 ) {
- // We have another row to recycle
- var $row = $rows.eq( 0 );
- $row.children( 'label' ).text( paramText );
- $row.children( 'textarea' )
- .data( 'name', param.name )
- .val( paramVal )
- .each( function() {
- $(this).css( 'height', $(this).val().length > 24 ? '4.5em' : '1.5em' );
- } );
- $rows = $rows.not( $row );
- } else {
- // Create a new row
- var $paramRow = $( '<div />' )
- .addClass( 'wikiEditor-template-dialog-field-wrapper' );
- $( '<label />' )
- .text( paramText )
- .appendTo( $paramRow );
- $( '<textarea />' )
- .data( 'name', param.name )
- .val( paramVal )
- .each( function() {
- $(this).css( 'height', $(this).val().length > 24 ? '4.5em' : '1.5em' );
- } )
- .data( 'expanded', false )
- .bind( 'cut paste keypress click change', function( e ) {
- // If this was fired by a tab keypress, let it go
- if ( e.keyCode == '9' ) return true;
- var $this = $( this );
- setTimeout( function() {
- var expanded = $this.data( 'expanded' );
- if ( $this.val().indexOf( '\n' ) != -1 || $this.val().length > 24 ) {
- if ( !expanded ) {
- $this.animate( { 'height': '4.5em' }, 'fast' );
- $this.data( 'expanded', true );
- }
- } else {
- if ( expanded ) {
- $this.animate( { 'height': '1.5em' }, 'fast' );
- $this.data( 'expanded', false );
- }
- }
- }, 0 );
- } )
- .appendTo( $paramRow );
- $paramRow
- .append( '<div style="clear: both;"></div>' )
- .appendTo( $fields );
- }
- }
-
- // Remove any leftover rows
- $rows.remove();
- $fields.find( 'label' ).autoEllipsis();
- // Ensure our close button doesn't recieve the ui-state-focus class
- $( this ).parent( '.ui-dialog' ).find( '.ui-dialog-titlebar-close' )
- .removeClass( 'ui-state-focus' );
-
- // Set tabindexes on form fields if needed
- // First unset the tabindexes on the buttons and existing form fields
- // so the order doesn't get messed up
- var $needTabindex = $( this ).closest( '.ui-dialog' ).find( 'button, textarea' );
- if ( $needTabindex.not( '[tabindex]' ).length ) {
- // Only do this if there actually are elements missing a tabindex
- $needTabindex.removeAttr( 'tabindex' );
- $.wikiEditor.modules.dialogs.fn.setTabindexes( $needTabindex );
- }
- }
- }
- };
- // Lazy-create the dialog at this time
- context.$textarea.wikiEditor( 'addDialog', { 'templateEditor': dialog } );
- $( '#' + dialog.id )
- .data( 'templateDiv', $template )
- .dialog( 'open' );
- },
- /**
- * Update a template's model and HTML
- * @param $templateText Wrapper <span> containing the template text
- * @param model Template model to use, will be generated if not set
- * @return model object
- */
- updateModel: function( $templateText, model ) {
- var context = $templateText.data( 'marker' ).context;
- var text;
- if ( typeof model == 'undefined' ) {
- text = context.fn.htmlToText( $templateText.html() );
- } else {
- text = model.getText();
- }
- // To keep stuff simple but not break it, we need to do encode newlines as <br>s
- $templateText.text( text );
- $templateText.html( $templateText.html().replace( /\n/g, '<br />' ) );
- $templateText.data( 'oldHTML', $templateText.html() );
- if ( typeof model == 'undefined' ) {
- model = new $.wikiEditor.modules.templateEditor.fn.model( text );
- $templateText.data( 'model', model );
- }
- return model;
- },
-
- /**
- * Gets template display name
- */
- getTemplateDisplayName: function ( model ) {
- var tName = model.getName();
- if( model.getValue( 'name' ) != '' ) {
- return tName + ': ' + model.getValue( 'name' );
- } else if( model.getValue( 'Name' ) != '' ) {
- return tName + ': ' + model.getValue( 'Name' );
- } else if( tName.toLowerCase() in $.wikiEditor.modules.templateEditor.nameMappings ) {
- return tName + ': ' + model.getValue( $.wikiEditor.modules.templateEditor.nameMappings[tName.toLowerCase()] );
- }
- return tName;
- },
-
- /**
- * Builds a template model from given wikitext representation, allowing object-oriented manipulation of the contents
- * of the template while preserving whitespace and formatting.
- *
- * @param wikitext String of wikitext content
- */
- model: function( wikitext ) {
-
- /* Private members */
-
- var collapsible = true;
-
- /* Private Functions */
-
- /**
- * Builds a Param object.
- *
- * @param name
- * @param value
- * @param number
- * @param nameIndex
- * @param equalsIndex
- * @param valueIndex
- */
- function Param( name, value, number, nameIndex, equalsIndex, valueIndex ) {
- this.name = name;
- this.value = value;
- this.number = number;
- this.nameIndex = nameIndex;
- this.equalsIndex = equalsIndex;
- this.valueIndex = valueIndex;
- }
- /**
- * Builds a Range object.
- *
- * @param begin
- * @param end
- */
- function Range( begin, end ) {
- this.begin = begin;
- this.end = end;
- }
- /**
- * Set 'original' to true if you want the original value irrespective of whether the model's been changed
- *
- * @param name
- * @param value
- * @param original
- */
- function getSetValue( name, value, original ) {
- var valueRange;
- var rangeIndex;
- var retVal;
- if ( isNaN( name ) ) {
- // It's a string!
- if ( typeof paramsByName[name] == 'undefined' ) {
- // Does not exist
- return "";
- }
- rangeIndex = paramsByName[name];
- } else {
- // It's a number!
- rangeIndex = parseInt( name );
- }
- if ( typeof params[rangeIndex] == 'undefined' ) {
- // Does not exist
- return "";
- }
- valueRange = ranges[params[rangeIndex].valueIndex];
- if ( typeof valueRange.newVal == 'undefined' || original ) {
- // Value unchanged, return original wikitext
- retVal = wikitext.substring( valueRange.begin, valueRange.end );
- } else {
- // New value exists, return new value
- retVal = valueRange.newVal;
- }
- if ( value != null ) {
- ranges[params[rangeIndex].valueIndex].newVal = value;
- }
- return retVal;
- }
-
- /* Public Functions */
-
- /**
- * Get template name
- */
- this.getName = function() {
- if( typeof ranges[templateNameIndex].newVal == 'undefined' ) {
- return wikitext.substring( ranges[templateNameIndex].begin, ranges[templateNameIndex].end );
- } else {
- return ranges[templateNameIndex].newVal;
- }
- };
- /**
- * Set template name (if we want to support this)
- *
- * @param name
- */
- this.setName = function( name ) {
- ranges[templateNameIndex].newVal = name;
- };
- /**
- * Set value for a given param name / number
- *
- * @param name
- * @param value
- */
- this.setValue = function( name, value ) {
- return getSetValue( name, value, false );
- };
- /**
- * Get value for a given param name / number
- *
- * @param name
- */
- this.getValue = function( name ) {
- return getSetValue( name, null, false );
- };
- /**
- * Get original value of a param
- *
- * @param name
- */
- this.getOriginalValue = function( name ) {
- return getSetValue( name, null, true );
- };
- /**
- * Get a list of all param names (numbers for the anonymous ones)
- */
- this.getAllParamNames = function() {
- return paramsByName;
- };
- /**
- * Get the initial params
- */
- this.getAllInitialParams = function(){
- return params;
- };
- /**
- * Get original template text
- */
- this.getOriginalText = function() {
- return wikitext;
- };
- /**
- * Get modified template text
- */
- this.getText = function() {
- newText = "";
- for ( i = 0 ; i < ranges.length; i++ ) {
- if( typeof ranges[i].newVal == 'undefined' ) {
- newText += wikitext.substring( ranges[i].begin, ranges[i].end );
- } else {
- newText += ranges[i].newVal;
- }
- }
- return newText;
- };
-
- this.isCollapsible = function() {
- return collapsible;
- };
-
- /**
- * Update ranges if there's been a change in one or more 'segments' of the template.
- * Removes adjustment function so adjustment is only made once ever.
- */
-
- this.updateRanges = function() {
- var adjustment = 0;
- for (var i = 0 ; i < ranges.length; i++ ) {
- ranges[i].begin += adjustment;
- if( typeof ranges[i].adjust != 'undefined' ) {
- adjustment += ranges[i].adjust();
- // NOTE: adjust should be a function that has the information necessary to calculate the length of
- // this 'segment'
- delete ranges[i].adjust;
- }
- ranges[i].end += adjustment;
- }
- };
-
- // Whitespace* {{ whitespace* nonwhitespace:
- if ( wikitext.match( /\s*{{\s*[^\s|]*:/ ) ) {
- collapsible = false; // is a parser function
- }
- /*
- * Take all template-specific characters that are not particular to the template we're looking at, namely {|=},
- * and convert them into something harmless, in this case 'X'
- */
- // Get rid of first {{ with whitespace
- var sanatizedStr = wikitext.replace( /{{/, " " );
- // Replace end
- endBraces = sanatizedStr.match( /}}\s*$/ );
- if ( endBraces ) {
- sanatizedStr = sanatizedStr.substring( 0, endBraces.index ) + " " +
- sanatizedStr.substring( endBraces.index + 2 );
- }
-
-
- //treat HTML comments like whitespace
- while ( sanatizedStr.indexOf( '<!' ) != -1 ) {
- startIndex = sanatizedStr.indexOf( '<!' );
- endIndex = sanatizedStr.indexOf('-->') + 3;
- if( endIndex < 3 ){
- break;
- }
- sanatizedSegment = sanatizedStr.substring( startIndex,endIndex ).replace( /\S/g , ' ' );
- sanatizedStr =
- sanatizedStr.substring( 0, startIndex ) + sanatizedSegment + sanatizedStr.substring( endIndex );
- }
-
- // Match the open braces we just found with equivalent closing braces note, works for any level of braces
- while ( sanatizedStr.indexOf( '{{' ) != -1 ) {
- startIndex = sanatizedStr.indexOf( '{{' ) + 1;
- openBraces = 2;
- endIndex = startIndex;
- while ( (openBraces > 0) && (endIndex < sanatizedStr.length) ) {
- var brace = sanatizedStr[++endIndex];
- openBraces += brace == '}' ? -1 : brace == '{' ? 1 : 0;
- }
- sanatizedSegment = sanatizedStr.substring( startIndex,endIndex ).replace( /[{}|=]/g , 'X' );
- sanatizedStr =
- sanatizedStr.substring( 0, startIndex ) + sanatizedSegment + sanatizedStr.substring( endIndex );
- }
- //links, images, etc, which also can nest
- while ( sanatizedStr.indexOf( '[[' ) != -1 ) {
- startIndex = sanatizedStr.indexOf( '[[' ) + 1;
- openBraces = 2;
- endIndex = startIndex;
- while ( (openBraces > 0) && (endIndex < sanatizedStr.length) ) {
- var brace = sanatizedStr[++endIndex];
- openBraces += brace == ']' ? -1 : brace == '[' ? 1 : 0;
- }
- sanatizedSegment = sanatizedStr.substring( startIndex,endIndex ).replace( /[\[\]|=]/g , 'X' );
- sanatizedStr =
- sanatizedStr.substring( 0, startIndex ) + sanatizedSegment + sanatizedStr.substring( endIndex );
- }
-
- /*
- * Parse 1 param at a time
- */
- var ranges = [];
- var params = [];
- var templateNameIndex = 0;
- var doneParsing = false;
- oldDivider = 0;
- divider = sanatizedStr.indexOf( '|', oldDivider );
- if ( divider == -1 ) {
- divider = sanatizedStr.length;
- doneParsing = true;
- collapsible = false; //zero params
- }
- nameMatch = sanatizedStr.substring( 0, divider ).match( /[^\s]/ );
- if ( nameMatch != null ) {
- ranges.push( new Range( 0 ,nameMatch.index ) ); //whitespace and squiggles upto the name
- nameEndMatch = sanatizedStr.substring( 0 , divider ).match( /[^\s]\s*$/ ); //last nonwhitespace character
- templateNameIndex = ranges.push( new Range( nameMatch.index,
- nameEndMatch.index + 1 ) );
- templateNameIndex--; //push returns 1 less than the array
- ranges[templateNameIndex].old = wikitext.substring( ranges[templateNameIndex].begin,
- ranges[templateNameIndex].end );
- } else {
- ranges.push(new Range(0,0));
- ranges[templateNameIndex].old = "";
- }
- params.push( ranges[templateNameIndex].old ); //put something in params (0)
- /*
- * Start looping over params
- */
- var currentParamNumber = 0;
- var valueEndIndex = ranges[templateNameIndex].end;
- var paramsByName = [];
- while ( !doneParsing ) {
- currentParamNumber++;
- oldDivider = divider;
- divider = sanatizedStr.indexOf( '|', oldDivider + 1 );
- if ( divider == -1 ) {
- divider = sanatizedStr.length;
- doneParsing = true;
- }
- currentField = sanatizedStr.substring( oldDivider+1, divider );
- if ( currentField.indexOf( '=' ) == -1 ) {
- // anonymous field, gets a number
-
- //default values, since we'll allow empty values
- valueBeginIndex = oldDivider + 1;
- valueEndIndex = oldDivider + 1;
-
- valueBegin = currentField.match( /\S+/ ); //first nonwhitespace character
- if( valueBegin != null ){
- valueBeginIndex = valueBegin.index + oldDivider+1;
- valueEnd = currentField.match( /[^\s]\s*$/ ); //last nonwhitespace character
- if( valueEnd == null ){ //ie
- continue;
- }
- valueEndIndex = valueEnd.index + oldDivider + 2;
- }
- ranges.push( new Range( ranges[ranges.length-1].end,
- valueBeginIndex ) ); //all the chars upto now
- nameIndex = ranges.push( new Range( valueBeginIndex, valueBeginIndex ) ) - 1;
- equalsIndex = ranges.push( new Range( valueBeginIndex, valueBeginIndex ) ) - 1;
- valueIndex = ranges.push( new Range( valueBeginIndex, valueEndIndex ) ) - 1;
- params.push( new Param(
- currentParamNumber,
- wikitext.substring( ranges[valueIndex].begin, ranges[valueIndex].end ),
- currentParamNumber,
- nameIndex,
- equalsIndex,
- valueIndex
- ) );
- paramsByName[currentParamNumber] = currentParamNumber;
- } else {
- // There's an equals, could be comment or a value pair
- currentName = currentField.substring( 0, currentField.indexOf( '=' ) );
- // Still offset by oldDivider - first nonwhitespace character
- nameBegin = currentName.match( /\S+/ );
- if ( nameBegin == null ) {
- // This is a comment inside a template call / parser abuse. let's not encourage it
- currentParamNumber--;
- continue;
- }
- nameBeginIndex = nameBegin.index + oldDivider + 1;
- // Last nonwhitespace and non } character
- nameEnd = currentName.match( /[^\s]\s*$/ );
- if( nameEnd == null ){ //ie
- continue;
- }
- nameEndIndex = nameEnd.index + oldDivider + 2;
- // All the chars upto now
- ranges.push( new Range( ranges[ranges.length-1].end, nameBeginIndex ) );
- nameIndex = ranges.push( new Range( nameBeginIndex, nameEndIndex ) ) - 1;
- currentValue = currentField.substring( currentField.indexOf( '=' ) + 1);
- oldDivider += currentField.indexOf( '=' ) + 1;
-
- //default values, since we'll allow empty values
- valueBeginIndex = oldDivider + 1;
- valueEndIndex = oldDivider + 1;
-
- // First nonwhitespace character
- valueBegin = currentValue.match( /\S+/ );
- if( valueBegin != null ){
- valueBeginIndex = valueBegin.index + oldDivider + 1;
- // Last nonwhitespace and non } character
- valueEnd = currentValue.match( /[^\s]\s*$/ );
- if( valueEnd == null ){ //ie
- continue;
- }
- valueEndIndex = valueEnd.index + oldDivider + 2;
- }
- // All the chars upto now
- equalsIndex = ranges.push( new Range( ranges[ranges.length-1].end, valueBeginIndex) ) - 1;
- valueIndex = ranges.push( new Range( valueBeginIndex, valueEndIndex ) ) - 1;
- params.push( new Param(
- wikitext.substring( nameBeginIndex, nameEndIndex ),
- wikitext.substring( valueBeginIndex, valueEndIndex ),
- currentParamNumber,
- nameIndex,
- equalsIndex,
- valueIndex
- ) );
- paramsByName[wikitext.substring( nameBeginIndex, nameEndIndex )] = currentParamNumber;
- }
- }
- // The rest of the string
- ranges.push( new Range( valueEndIndex, wikitext.length ) );
-
- // Save vars
- this.ranges = ranges;
- this.wikitext = wikitext;
- this.params = params;
- this.paramsByName = paramsByName;
- this.templateNameIndex = templateNameIndex;
- } //model
-}
-}; } )( jQuery );
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.templates.js b/extensions/WikiEditor/modules/jquery.wikiEditor.templates.js
deleted file mode 100644
index b303e3fa..00000000
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.templates.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Templates Module for wikiEditor */
-( function( $ ) { $.wikiEditor.modules.templates = {
-
-/**
- * Core Requirements
- */
-'req': [ 'iframe' ],
-/**
- * Object Templates
- */
-'tpl': {
- 'marker': {
- 'type': 'template',
- 'anchor': 'wrap',
- 'skipDivision': 'realchange',
- 'afterWrap': function( node ) {
- $( node ).addClass( 'wikiEditor-template' );
- },
- 'getAnchor': function( ca1, ca2 ) {
- return $( ca1.parentNode ).is( '.wikiEditor-template' ) ? ca1.parentNode : null;
- }
- }
-},
-/**
- * Event handlers
- */
-'evt': {
- 'mark': function( context, event ) {
- // The markers returned by this function are skipped on realchange, so don't regenerate them in that case
- if ( context.modules.highlight.currentScope == 'realchange' ) {
- return;
- }
- // Get references to the markers and tokens from the current context
- var markers = context.modules.highlight.markers;
- var tokens = context.modules.highlight.tokenArray;
- // Use depth-tracking to extract top-level templates from tokens
- var depth = 0, bias, start;
- for ( var i in tokens ) {
- depth += ( bias = tokens[i].label == 'TEMPLATE_BEGIN' ? 1 : ( tokens[i].label == 'TEMPLATE_END' ? -1 : 0 ) );
- if ( bias > 0 && depth == 1 ) {
- // Top-level opening - use offset as start
- start = tokens[i].offset;
- } else if ( bias < 0 && depth == 0 ) {
- // Top-level closing - use offset as end
- markers[markers.length] = $.extend(
- { 'context': context, 'start': start, 'end': tokens[i].offset },
- $.wikiEditor.modules.templates.tpl.marker
- );
- }
- if ( depth < 0 ) {
- depth = 0;
- }
- }
- }
-},
-'exp': [
- { 'regex': /{{/, 'label': "TEMPLATE_BEGIN" },
- { 'regex': /}}/, 'label': "TEMPLATE_END", 'markAfter': true }
-],
-/**
- * Internally used functions
- */
-'fn': {
- 'create': function( context, config ) {
- // Do some stuff here...
- }
-}
-
-}; } ) ( jQuery );
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.toc.css b/extensions/WikiEditor/modules/jquery.wikiEditor.toc.css
deleted file mode 100644
index d870e3ed..00000000
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.toc.css
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * CSS for WikiEditor Table of Contents jQuery plugin
- */
-
-.wikiEditor-ui-toc {
- /* height and width are set dynamically */
- /*float: right;*/
- padding: 0;
- overflow: auto;
- overflow-x: hidden;
-}
-
-.wikiEditor-ui-toc {
- border-left: solid silver 1px;
-}
-
-.wikiEditor-ui-toc ul {
- padding: 0;
- margin: 0;
- list-style: none;
- /* IE needs to be told in great detail how to act, or it misbehaves */
- list-style-image: none;
- list-style-position: outside;
- list-style-type: none;
- width: 100%;
-}
-
-.tab-toc {
- /* Should match the toolbar */
- /* @embed */
- background-image: url(images/toolbar/base.png);
- background-position: left top;
- background-repeat: repeat-x;
- height: 26px;
- padding: 3px 0;
- line-height: 26px;
- padding-left: 1em;
- border-bottom: solid 1px silver;
- white-space: nowrap;
- overflow: hidden;
-}
-
-.tab-toc a {
- outline: none;
-}
-
-.wikiEditor-ui-toc li {
- padding: 0;
- margin: 0;
-}
-
-.wikiEditor-ui-toc ul ul {
- padding: 0;
- margin: 0;
- margin-bottom: 0 !important;
- margin-top: 0 !important;
- list-style: none;
- background-image: none;
-}
-
-.wikiEditor-ui-toc ul li div {
- display: block;
- font-size: 0.9em;
- cursor: pointer;
- color: #0645ad;
-}
-
-.wikiEditor-ui-toc ul li div {
- padding: 0.125em;
- padding-left: 1em;
-}
-
-.wikiEditor-ui-toc ul ul li div {
- padding-left: 2em;
-}
-
-.wikiEditor-ui-toc ul ul ul li div {
- padding-left: 3em;
-}
-
-.wikiEditor-ui-toc ul ul ul ul li div {
- padding-left: 4em;
-}
-
-.wikiEditor-ui-toc ul ul ul ul ul li div {
- padding-left: 5em;
-}
-
-.wikiEditor-ui-toc ul ul ul ul ul ul li div {
- padding-left: 6em;
-}
-
-.wikiEditor-ui-toc ul li div.current {
- background-color: #FAFAFA;
- color: #333333;
-}
-
-.wikiEditor-ui-toc ul li div.section-0 {
- font-size: 1em;
- padding-top: 0.5em;
- padding-bottom: 0.5em;
- border-bottom: solid 1px #DDDDDD;
-}
-/* Collapsing changes */
-.wikiEditor-ui-toc {
- overflow-y: hidden;
- position: relative;
-}
-
-.wikiEditor-ui-toc ul {
- overflow-y: auto;
- overflow-x: hidden;
- height: 100%;
- margin-bottom: 0 !important;
-}
-
-.wikiEditor-ui-toc ul ul {
- float: none;
- height: auto;
-}
-#wikiEditor-ui-toc-collapse {
- height: 100%;
- width: 18px;
- position: absolute;
- top: 0;
- left: 0;
-}
-
-.wikiEditor-ui-toc-collapse-open {
- /* @embed */
- background: #f3f3f3 url(images/toc/close.png) 4px 50% no-repeat;
- border-left: 1px solid #DDDDDD;
-}
-
-.wikiEditor-ui-toc-collapse-closed {
- /* @embed */
- background: #f3f3f3 url(images/toc/open.png) 4px 50% no-repeat;
-}
-
-/* Resizing Changes */
-.wikiEditor-ui-toc-resize-vertical,
-.ui-resizable-w {
- width: 4px;
- position: absolute;
- top: 0;
- left: 0;
- height: 100%;
- cursor: ew-resize;
-}
-
-.wikiEditor-ui .wikiEditor-ui-right {
- overflow: visible;
-}
-
-.wikiEditor-ui-right .ui-resizable-w {
- left: 0 !important;
- z-index: 0;
-}
-
-.wikiEditor-ui-right .wikiEditor-ui-toc-resize-grip {
- width: 5px;
- height: 12px;
- padding: 3px;
- position: absolute;
- top: 7px;
- left: -12px !important;
- cursor: ew-resize;
- /* @embed */
- background: url(images/toc/grip.png) 50% 50% no-repeat;
- z-index: 0;
-}
-
-.wikiEditor-ui-toolbar .tab-toc {
- float: right;
- margin: 3px 16px 3px 3px;
- line-height: 26px;
-}
-
-.wikiEditor-ui-toc-expandControl {
- position: absolute;
- z-index: 2;
- top: 0;
- right: 10px;
- height: 26px;
- padding: 3px 0;
- line-height: 26px;
- padding-right: 1em;
- white-space: nowrap;
- overflow: hidden;
-}
-
-.wikiEditor-ui-text textarea {
- resize: none;
-}
-
-.wikiEditor-ui-text textarea:focus {
- outline: none;
-}
-
-/* Self Clearing for the wikiText view */
-.wikiEditor-ui-view-wikiText {
- overflow: auto;
- width: 100%;
-}
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.toc.js b/extensions/WikiEditor/modules/jquery.wikiEditor.toc.js
deleted file mode 100644
index 54b8a863..00000000
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.toc.js
+++ /dev/null
@@ -1,676 +0,0 @@
-/* TOC Module for wikiEditor */
-( function( $ ) { $.wikiEditor.modules.toc = {
-
-/**
- * Compatability map
- */
-'browsers': {
- // Left-to-right languages
- 'ltr': {
- 'msie': [['>=', 7]],
- 'firefox': [['>=', 3]],
- 'opera': [['>=', 10]],
- 'safari': [['>=', 4]],
- 'chrome': [['>=', 4]]
- },
- // Right-to-left languages
- 'rtl': {
- 'msie': [['>=', 8]],
- 'firefox': [['>=', 3]],
- 'opera': [['>=', 10]],
- 'safari': [['>=', 4]],
- 'chrome': [['>=', 4]]
- }
-},
-/**
- * Core Requirements
- */
-'req': [ 'iframe' ],
-/**
- * Configuration
- */
-cfg: {
- // Default width of table of contents
- defaultWidth: '166px',
- // Minimum width to allow resizing to before collapsing the table of contents - used when resizing and collapsing
- minimumWidth: '70px',
- // Minimum width of the wikiText area
- textMinimumWidth: '450px',
- // The style property to be used for positioning the flexible module in regular mode
- flexProperty: 'marginRight',
- // Boolean var indicating text direction
- rtl: false
-},
-/**
- * API accessible functions
- */
-api: {
- //
-},
-/**
- * Event handlers
- */
-evt: {
- change: function( context, event ) {
- $.wikiEditor.modules.toc.fn.update( context );
- },
- ready: function( context, event ) {
- // Add the TOC to the document
- $.wikiEditor.modules.toc.fn.build( context );
- if ( !context.$content ) {
- return;
- }
- context.$content.parent()
- .blur( function() {
- var context = event.data.context;
- $.wikiEditor.modules.toc.fn.unhighlight( context );
- });
- $.wikiEditor.modules.toc.fn.improveUI();
- $.wikiEditor.modules.toc.evt.resize( context );
- },
- resize: function( context, event ) {
- var availableWidth = context.$wikitext.width() - parseFloat( $.wikiEditor.modules.toc.cfg.textMinimumWidth ),
- totalMinWidth = parseFloat( $.wikiEditor.modules.toc.cfg.minimumWidth ) +
- parseFloat( $.wikiEditor.modules.toc.cfg.textMinimumWidth );
- context.$ui.find( '.wikiEditor-ui-right' )
- .resizable( 'option', 'maxWidth', availableWidth );
- if ( context.modules.toc.$toc.data( 'positionMode' ) != 'disabled' &&
- context.$wikitext.width() < totalMinWidth ) {
- $.wikiEditor.modules.toc.fn.disable( context );
- } else if ( context.modules.toc.$toc.data( 'positionMode' ) == 'disabled' &&
- context.$wikitext.width() > totalMinWidth ) {
- $.wikiEditor.modules.toc.fn.enable( context );
- } else if ( context.modules.toc.$toc.data( 'positionMode' ) == 'regular' &&
- context.$ui.find( '.wikiEditor-ui-right' ).width() > availableWidth ) {
- //switch mode
- $.wikiEditor.modules.toc.fn.switchLayout( context );
- } else if ( context.modules.toc.$toc.data( 'positionMode' ) == 'goofy' &&
- context.modules.toc.$toc.data( 'previousWidth' ) < context.$wikitext.width() ) {
- //switch mode
- $.wikiEditor.modules.toc.fn.switchLayout( context );
- }
- if ( context.modules.toc.$toc.data( 'positionMode' ) == 'goofy' ) {
- context.modules.toc.$toc.find( 'div' ).autoEllipsis(
- { 'position': 'right', 'tooltip': true, 'restoreText': true }
- );
- }
- // reset the height of the TOC
- if ( !context.modules.toc.$toc.data( 'collapsed' ) ){
- context.modules.toc.$toc.height(
- context.$ui.find( '.wikiEditor-ui-left' ).height() -
- context.$ui.find( '.tab-toc' ).outerHeight()
- );
- }
-
- // store the width of the view for comparison on next resize
- context.modules.toc.$toc.data( 'previousWidth', context.$wikitext.width() );
- },
- mark: function( context, event ) {
- var hash = '';
- var markers = context.modules.highlight.markers;
- var tokenArray = context.modules.highlight.tokenArray;
- var outline = context.data.outline = [];
- var h = 0;
- for ( var i = 0; i < tokenArray.length; i++ ) {
- if ( tokenArray[i].label != 'TOC_HEADER' ) {
- continue;
- }
- h++;
- markers.push( {
- index: h,
- start: tokenArray[i].tokenStart,
- end: tokenArray[i].offset,
- type: 'toc',
- anchor: 'tag',
- afterWrap: function( node ) {
- var marker = $( node ).data( 'marker' );
- $( node ).addClass( 'wikiEditor-toc-header' )
- .addClass( 'wikiEditor-toc-section-' + marker.index )
- .data( 'section', marker.index );
- },
- beforeUnwrap: function( node ) {
- $( node ).removeClass( 'wikiEditor-toc-header' )
- .removeClass( 'wikiEditor-toc-section-' + $( node ).data( 'section' ) );
- },
- onSkip: function( node ) {
- var marker = $( node ).data( 'marker' );
- if ( $( node ).data( 'section' ) != marker.index ) {
- $( node )
- .removeClass( 'wikiEditor-toc-section-' + $( node ).data( 'section' ) )
- .addClass( 'wikiEditor-toc-section-' + marker.index )
- .data( 'section', marker.index );
- }
- },
- getAnchor: function( ca1, ca2 ) {
- return $( ca1.parentNode ).is( '.wikiEditor-toc-header' ) ?
- ca1.parentNode : null;
- }
- } );
- hash += tokenArray[i].match[2] + '\n';
- outline.push ( {
- 'text': tokenArray[i].match[2],
- 'level': tokenArray[i].match[1].length,
- 'index': h
- } );
- }
- // Only update the TOC if it's been changed - we do this by comparing a hash of the headings this time to last
- if ( typeof context.modules.toc.lastHash == 'undefined' || context.modules.toc.lastHash !== hash ) {
- $.wikiEditor.modules.toc.fn.build( context );
- $.wikiEditor.modules.toc.fn.update( context );
- // Remember the changed version
- context.modules.toc.lastHash = hash;
- }
- }
-},
-exp: [
- { 'regex': /^(={1,6})([^\r\n]+?)\1\s*$/m, 'label': 'TOC_HEADER', 'markAfter': true }
-],
-/**
- * Internally used functions
- */
-fn: {
- /**
- * Creates a table of contents module within a wikiEditor
- *
- * @param {Object} context Context object of editor to create module in
- * @param {Object} config Configuration object to create module from
- */
- create: function( context, config ) {
- if ( '$toc' in context.modules.toc ) {
- return;
- }
- $.wikiEditor.modules.toc.cfg.rtl = $( 'body' ).is( '.rtl' );
- $.wikiEditor.modules.toc.cfg.flexProperty = $.wikiEditor.modules.toc.cfg.rtl ? 'marginLeft' : 'marginRight';
- var height = context.$ui.find( '.wikiEditor-ui-left' ).height();
- context.modules.toc.$toc = $( '<div>' )
- .addClass( 'wikiEditor-ui-toc' )
- .data( 'context', context )
- .data( 'positionMode', 'regular' )
- .data( 'collapsed', false );
- context.$ui.find( '.wikiEditor-ui-right' )
- .append( context.modules.toc.$toc );
- context.modules.toc.$toc.height(
- context.$ui.find( '.wikiEditor-ui-left' ).height()
- );
- $.wikiEditor.modules.toc.fn.redraw( context, $.wikiEditor.modules.toc.cfg.defaultWidth );
- },
- redraw: function( context, fixedWidth ) {
- fixedWidth = parseFloat( fixedWidth );
- if( context.modules.toc.$toc.data( 'positionMode' ) == 'regular' ) {
- context.$ui.find( '.wikiEditor-ui-right' )
- .css( 'width', fixedWidth + 'px' );
- context.$ui.find( '.wikiEditor-ui-left' )
- .css( $.wikiEditor.modules.toc.cfg.flexProperty, ( -1 * fixedWidth ) + 'px' )
- .children()
- .css( $.wikiEditor.modules.toc.cfg.flexProperty, fixedWidth + 'px' );
- } else if( context.modules.toc.$toc.data( 'positionMode' ) == 'goofy' ) {
- context.$ui.find( '.wikiEditor-ui-left' )
- .css( 'width', fixedWidth );
- context.$ui.find( '.wikiEditor-ui-right' )
- .css( $.wikiEditor.modules.toc.cfg.rtl ? 'right': 'left', fixedWidth );
- context.$wikitext.css( 'height', context.$ui.find( '.wikiEditor-ui-right' ).height() );
- }
- },
- switchLayout: function( context ) {
- var width,
- height = context.$ui.find( '.wikiEditor-ui-right' ).height();
- if ( context.modules.toc.$toc.data( 'positionMode' ) == 'regular'
- && !context.modules.toc.$toc.data( 'collapsed' )
- ) {
- // store position mode
- context.modules.toc.$toc.data( 'positionMode', 'goofy' );
- // store the width of the TOC, to ensure we dont allow it to be larger than this when switching back
- context.modules.toc.$toc.data( 'positionModeChangeAt',
- context.$ui.find( '.wikiEditor-ui-right' ).width() );
- width = $.wikiEditor.modules.toc.cfg.textMinimumWidth;
- // set our styles for goofy mode
- context.$ui.find( '.wikiEditor-ui-left' )
- .css( $.wikiEditor.modules.toc.cfg.flexProperty, '')
- .css( { 'position': 'absolute', 'float': 'none',
- 'left': $.wikiEditor.modules.toc.cfg.rtl ? 'auto': 0,
- 'right' : $.wikiEditor.modules.toc.cfg.rtl ? 0 : 'auto' } )
- .children()
- .css( $.wikiEditor.modules.toc.cfg.flexProperty, '' );
- context.$ui.find( '.wikiEditor-ui-right' )
- .css( { 'width': 'auto', 'position': 'absolute', 'float': 'none',
- 'right': $.wikiEditor.modules.toc.cfg.rtl ? 'auto': 0,
- 'left' : $.wikiEditor.modules.toc.cfg.rtl ? 0 : 'auto' } );
- context.$wikitext
- .css( 'position', 'relative' );
- } else if ( context.modules.toc.$toc.data( 'positionMode' ) == 'goofy' ) {
- // store position mode
- context.modules.toc.$toc.data( 'positionMode', 'regular' );
- // set width
- width = context.$wikitext.width() - context.$ui.find( '.wikiEditor-ui-left' ).width();
- if ( width > context.modules.toc.$toc.data( 'positionModeChangeAt' ) ) {
- width = context.modules.toc.$toc.data( 'positionModeChangeAt' );
- }
- // set our styles for regular mode
- context.$wikitext
- .css( { 'position': '', 'height': '' } );
- context.$ui.find( '.wikiEditor-ui-right' )
- .css( $.wikiEditor.modules.toc.cfg.flexProperty, '' )
- .css( { 'position': '', 'left': '', 'right': '', 'float': '', 'top': '', 'height': '' } );
- context.$ui.find( '.wikiEditor-ui-left' )
- .css( { 'width': '', 'position': '', 'left': '', 'float': '', 'right': '' } );
- }
- $.wikiEditor.modules.toc.fn.redraw( context, width );
- },
- disable: function( context ) {
- if ( context.modules.toc.$toc.data( 'collapsed' ) ) {
- context.$ui.find( '.wikiEditor-ui-toc-expandControl' ).hide();
- } else {
- if( context.modules.toc.$toc.data( 'positionMode' ) == 'goofy' ) {
- $.wikiEditor.modules.toc.fn.switchLayout( context );
- }
- context.$ui.find( '.wikiEditor-ui-right' ).hide();
- context.$ui.find( '.wikiEditor-ui-left' )
- .css( $.wikiEditor.modules.toc.cfg.flexProperty, '' )
- .children()
- .css( $.wikiEditor.modules.toc.cfg.flexProperty, '' );
- }
- context.modules.toc.$toc.data( 'positionMode', 'disabled' );
- },
- enable: function( context ) {
- context.modules.toc.$toc.data( 'positionMode', 'regular' );
- if ( context.modules.toc.$toc.data( 'collapsed' ) ) {
- context.$ui.find( '.wikiEditor-ui-toc-expandControl' ).show();
- } else {
- context.$ui.find( '.wikiEditor-ui-right' ).show();
- $.wikiEditor.modules.toc.fn.redraw( context, $.wikiEditor.modules.toc.cfg.minimumWidth );
- context.modules.toc.$toc.find( 'div' ).autoEllipsis(
- { 'position': 'right', 'tooltip': true, 'restoreText': true }
- );
- }
- },
- unhighlight: function( context ) {
- // FIXME: For some reason, IE calls this function twice, the first time with context undefined
- // Investigate this when you have time please! In the meantime, the user interaction is working just
- // fine because the second call is valid
- if ( context ) {
- context.modules.toc.$toc.find( 'div' ).removeClass( 'current' );
- }
- },
- /**
- * Highlight the section the cursor is currently within
- *
- * @param {Object} context
- */
- update: function( context ) {
- //temporarily commenting this out because it is causing all kinds of cursor
- //and text jumping issues in IE. WIll get back to this --pdhanda
- /*
- var div = context.fn.beforeSelection( 'wikiEditor-toc-header' );
- if ( div === null ) {
- // beforeSelection couldn't figure it out, keep the old highlight state
- return;
- }
-
- $.wikiEditor.modules.toc.fn.unhighlight( context );
- var section = div.data( 'section' ) || 0;
- if ( context.data.outline.length > 0 ) {
- var sectionLink = context.modules.toc.$toc.find( 'div.section-' + section );
- sectionLink.addClass( 'current' );
-
- // Scroll the highlighted link into view if necessary
- var relTop = sectionLink.offset().top - context.modules.toc.$toc.offset().top;
-
- var scrollTop = context.modules.toc.$toc.scrollTop();
- var divHeight = context.modules.toc.$toc.height();
- var sectionHeight = sectionLink.height();
- if ( relTop < 0 )
- // Scroll up
- context.modules.toc.$toc.scrollTop( scrollTop + relTop );
- else if ( relTop + sectionHeight > divHeight )
- // Scroll down
- context.modules.toc.$toc.scrollTop( scrollTop + relTop + sectionHeight - divHeight );
- }
- */
- },
-
- /**
- * Collapse the contents module
- *
- * @param {Object} event Event object with context as data
- */
- collapse: function( event ) {
- var $this = $( this ),
- context = $this.data( 'context' );
- if( context.modules.toc.$toc.data( 'positionMode' ) == 'goofy' ) {
- $.wikiEditor.modules.toc.fn.switchLayout( context );
- }
- var pT = $this.parent().position().top - 1;
- context.modules.toc.$toc.data( 'collapsed', true );
- var leftParam = {}, leftChildParam = {};
- leftParam[ $.wikiEditor.modules.toc.cfg.flexProperty ] = '-1px';
- leftChildParam[ $.wikiEditor.modules.toc.cfg.flexProperty ] = '1px';
- context.$ui.find( '.wikiEditor-ui-left' )
- .animate( leftParam, 'fast', function() {
- $( this ).css( $.wikiEditor.modules.toc.cfg.flexProperty, 0 );
- } )
- .children()
- .animate( leftChildParam, 'fast', function() {
- $( this ).css( $.wikiEditor.modules.toc.cfg.flexProperty, 0 );
- } );
- context.$ui.find( '.wikiEditor-ui-right' )
- .css( {
- 'marginTop' : '1px',
- 'position' : 'absolute',
- 'left' : $.wikiEditor.modules.toc.cfg.rtl ? 0 : 'auto',
- 'right' : $.wikiEditor.modules.toc.cfg.rtl ? 'auto' : 0,
- 'top' : pT } )
- .fadeOut( 'fast', function() {
- $( this ).hide()
- .css( { 'marginTop': '0', 'width': '1px' } );
- context.$ui.find( '.wikiEditor-ui-toc-expandControl' ).fadeIn( 'fast' );
- // Let the UI know things have moved around
- context.fn.trigger( 'tocCollapse' );
- context.fn.trigger( 'resize' );
- } );
-
- $.cookie( 'wikiEditor-' + context.instance + '-toc-width', 0 );
- return false;
- },
-
- /**
- * Expand the contents module
- *
- * @param {Object} event Event object with context as data
- */
- expand: function( event ) {
- var $this = $( this ),
- context = $this.data( 'context' ),
- openWidth = parseFloat( context.modules.toc.$toc.data( 'openWidth' ) ),
- availableSpace = context.$wikitext.width() - parseFloat( $.wikiEditor.modules.toc.cfg.textMinimumWidth );
- if ( availableSpace < $.wikiEditor.modules.toc.cfg.textMinmumWidth ) return false;
- context.modules.toc.$toc.data( 'collapsed', false );
- // check if we've got enough room to open to our stored width
- if ( availableSpace < openWidth ) openWidth = availableSpace;
- context.$ui.find( '.wikiEditor-ui-toc-expandControl' ).hide();
- var leftParam = {}, leftChildParam = {};
- leftParam[ $.wikiEditor.modules.toc.cfg.flexProperty ] = parseFloat( openWidth ) * -1;
- leftChildParam[ $.wikiEditor.modules.toc.cfg.flexProperty ] = openWidth;
- context.$ui.find( '.wikiEditor-ui-left' )
- .animate( leftParam, 'fast' )
- .children()
- .animate( leftChildParam, 'fast' );
- context.$ui.find( '.wikiEditor-ui-right' )
- .show()
- .css( 'marginTop', '1px' )
- .animate( { 'width' : openWidth }, 'fast', function() {
- context.$content.trigger( 'mouseup' );
- $( this ).css( {
- 'marginTop' : '0',
- 'position' : 'relative',
- 'right' : 'auto',
- 'left' : 'auto',
- 'top': 'auto' } );
- context.fn.trigger( 'tocExpand' );
- context.fn.trigger( 'resize' );
- } );
- $.cookie( 'wikiEditor-' + context.instance + '-toc-width',
- context.modules.toc.$toc.data( 'openWidth' ) );
- return false;
- },
- /**
- * Builds table of contents
- *
- * @param {Object} context
- */
- build: function( context ) {
- /**
- * Builds a structured outline from flat outline
- *
- * @param {Object} outline Array of objects with level fields
- */
- function buildStructure( outline, offset, level ) {
- if ( offset === undefined ) {
- offset = 0;
- }
- if ( level === undefined ) {
- level = 1;
- }
- var sections = [];
- for ( var i = offset; i < outline.length; i++ ) {
- if ( outline[i].nLevel == level ) {
- var sub = buildStructure( outline, i + 1, level + 1 );
- if ( sub.length ) {
- outline[i].sections = sub;
- }
- sections[sections.length] = outline[i];
- } else if ( outline[i].nLevel < level ) {
- break;
- }
- }
- return sections;
- }
- /**
- * Builds unordered list HTML object from structured outline
- *
- * @param {Object} structure Structured outline
- */
- function buildList( structure ) {
- var list = $( '<ul>' );
- for ( var i = 0; i < structure.length; i++ ) {
- var div = $( '<div>' )
- .addClass( 'section-' + structure[i].index )
- .data( 'index', structure[i].index )
- .mousedown( function() {
- // No dragging!
- return false;
- } )
- .click( function( event ) {
- var wrapper = context.$content.find(
- '.wikiEditor-toc-section-' + $( this ).data( 'index' ) );
- if ( wrapper.length === 0 )
- wrapper = context.$content;
- context.fn.scrollToTop( wrapper, true );
- context.$textarea.textSelection( 'setSelection', {
- 'start': 0,
- 'startContainer': wrapper
- } );
- // Bring user's eyes to the point we've now jumped to
- context.fn.highlightLine( $( wrapper ) );
- // Highlight the clicked link
- //remove highlighting of toc after a second. Temporary hack till the highlight works --pdhanda
- //$.wikiEditor.modules.toc.fn.unhighlight( context );
- $( this ).addClass( 'current' );
- //$( this ).removeClass( 'current' );
- setTimeout( function() { $.wikiEditor.modules.toc.fn.unhighlight( context ); }, 1000 );
-
- event.preventDefault();
- } )
- .text( structure[i].text );
- if ( structure[i].text === '' )
- div.html( '&nbsp;' );
- var item = $( '<li>' ).append( div );
- if ( structure[i].sections !== undefined ) {
- item.append( buildList( structure[i].sections ) );
- }
- list.append( item );
- }
- return list;
- }
- /**
- * Builds controls for collapsing and expanding the TOC
- *
- */
- function buildCollapseControls( ) {
- var $collapseControl = $( '<div>' ), $expandControl = $( '<div>' );
- $collapseControl
- .addClass( 'tab' )
- .addClass( 'tab-toc' )
- .append( '<a href="#"></a>' )
- .mousedown( function( e ) {
- // No dragging!
- e.preventDefault();
- return false;
- } )
- .bind( 'click.wikiEditor-toc', function( e ) {
- context.modules.toc.$toc.trigger( 'collapse.wikiEditor-toc' );
- // No dragging!
- e.preventDefault();
- return false;
- } )
- .find( 'a' )
- .text( mediaWiki.msg( 'wikieditor-toc-hide' ) );
- $expandControl
- .addClass( 'wikiEditor-ui-toc-expandControl' )
- .append( '<a href="#"></a>' )
- .mousedown( function( e ) {
- // No dragging!
- e.preventDefault();
- return false;
- } )
- .bind( 'click.wikiEditor-toc', function( e ) {
- context.modules.toc.$toc.trigger( 'expand.wikiEditor-toc' );
- // No dragging!
- e.preventDefault();
- return false;
- } )
- .hide()
- .find( 'a' )
- .text( mediaWiki.msg( 'wikieditor-toc-show' ) );
- $collapseControl.insertBefore( context.modules.toc.$toc );
- context.$ui.find( '.wikiEditor-ui-left .wikiEditor-ui-top' ).append( $expandControl );
- }
- /**
- * Initializes resizing controls on the TOC and sets the width of
- * the TOC based on it's previous state
- *
- */
- function buildResizeControls( ) {
- context.$ui
- .data( 'resizableDone', true )
- .find( '.wikiEditor-ui-right' )
- .data( 'wikiEditor-ui-left', context.$ui.find( '.wikiEditor-ui-left' ) )
- .resizable( { handles: 'w,e', preventPositionLeftChange: true,
- minWidth: parseFloat( $.wikiEditor.modules.toc.cfg.minimumWidth ),
- start: function( e, ui ) {
- var $this = $( this );
- // Toss a transparent cover over our iframe
- $( '<div>' )
- .addClass( 'wikiEditor-ui-resize-mask' )
- .css( {
- 'position': 'absolute',
- 'z-index': 2,
- 'left': 0,
- 'top': 0,
- 'bottom': 0,
- 'right': 0
- } )
- .appendTo( context.$ui.find( '.wikiEditor-ui-left' ) );
- $this.resizable( 'option', 'maxWidth', $this.parent().width() -
- parseFloat( $.wikiEditor.modules.toc.cfg.textMinimumWidth ) );
- if(context.modules.toc.$toc.data( 'positionMode' ) == 'goofy' ) {
- $.wikiEditor.modules.toc.fn.switchLayout( context );
- }
- },
- resize: function( e, ui ) {
- // for some odd reason, ui.size.width seems a step ahead of what the *actual* width of
- // the resizable is
- $( this ).css( { 'width': ui.size.width, 'top': 'auto', 'height': 'auto' } )
- .data( 'wikiEditor-ui-left' )
- .css( $.wikiEditor.modules.toc.cfg.flexProperty, ( -1 * ui.size.width ) )
- .children().css( $.wikiEditor.modules.toc.cfg.flexProperty, ui.size.width );
- // Let the UI know things have moved around
- context.fn.trigger( 'resize' );
- },
- stop: function ( e, ui ) {
- context.$ui.find( '.wikiEditor-ui-resize-mask' ).remove();
- context.$content.trigger( 'mouseup' );
- if( ui.size.width <= parseFloat( $.wikiEditor.modules.toc.cfg.minimumWidth ) ) {
- context.modules.toc.$toc.trigger( 'collapse.wikiEditor-toc' );
- } else {
- context.modules.toc.$toc.find( 'div' ).autoEllipsis(
- { 'position': 'right', 'tooltip': true, 'restoreText': true }
- );
- context.modules.toc.$toc.data( 'openWidth', ui.size.width );
- $.cookie( 'wikiEditor-' + context.instance + '-toc-width', ui.size.width );
- }
- // Let the UI know things have moved around
- context.fn.trigger( 'resize' );
- }
- });
- // Convert our east resize handle into a secondary west resize handle
- var handle = $.wikiEditor.modules.toc.cfg.rtl ? 'w' : 'e';
- context.$ui.find( '.ui-resizable-' + handle )
- .removeClass( 'ui-resizable-' + handle )
- .addClass( 'ui-resizable-' + ( handle == 'w' ? 'e' : 'w' ) )
- .addClass( 'wikiEditor-ui-toc-resize-grip' );
- // Bind collapse and expand event handlers to the TOC
- context.modules.toc.$toc
- .bind( 'collapse.wikiEditor-toc', $.wikiEditor.modules.toc.fn.collapse )
- .bind( 'expand.wikiEditor-toc', $.wikiEditor.modules.toc.fn.expand );
- context.modules.toc.$toc.data( 'openWidth', $.wikiEditor.modules.toc.cfg.defaultWidth );
- // If the toc-width cookie is set, reset the widths based upon that
- if ( $.cookie( 'wikiEditor-' + context.instance + '-toc-width' ) == 0 ) {
- context.modules.toc.$toc.trigger( 'collapse.wikiEditor-toc', { data: context } );
- } else if ( $.cookie( 'wikiEditor-' + context.instance + '-toc-width' ) > 0 ) {
- var initialWidth = $.cookie( 'wikiEditor-' + context.instance + '-toc-width' );
- if( initialWidth < parseFloat( $.wikiEditor.modules.toc.cfg.minimumWidth ) )
- initialWidth = parseFloat( $.wikiEditor.modules.toc.cfg.minimumWidth ) + 1;
- context.modules.toc.$toc.data( 'openWidth', initialWidth + 'px' );
- $.wikiEditor.modules.toc.fn.redraw( context, initialWidth );
- }
- }
-
- // Normalize heading levels for list creation
- // This is based on Linker::generateTOC(), so it should behave like the
- // TOC on rendered articles does - which is considdered to be correct
- // at this point in time.
- if ( context.data.outline ) {
- var outline = context.data.outline;
- var lastLevel = 0;
- var nLevel = 0;
- for ( var i = 0; i < outline.length; i++ ) {
- if ( outline[i].level > lastLevel ) {
- nLevel++;
- }
- else if ( outline[i].level < lastLevel ) {
- nLevel -= Math.max( 1, lastLevel - outline[i].level );
- }
- if ( nLevel <= 0 ) {
- nLevel = 1;
- }
- outline[i].nLevel = nLevel;
- lastLevel = outline[i].level;
- }
- // Recursively build the structure and add special item for
- // section 0, if needed
- var structure = buildStructure( outline );
- if ( $( 'input[name="wpSection"]' ).val() === '' ) {
- structure.unshift( {
- 'text': mw.config.get( 'wgPageName' ).replace( /_/g, ' ' ),
- 'level': 1,
- 'index': 0
- } );
- }
- context.modules.toc.$toc.html( buildList( structure ) );
-
- if ( !context.$ui.data( 'resizableDone' ) ) {
- buildResizeControls();
- buildCollapseControls();
- }
- context.modules.toc.$toc.find( 'div' ).autoEllipsis( {
- 'position': 'right',
- 'tooltip': true,
- 'restoreText': true
- } );
- }
- },
- improveUI: function() {
- /*
- * Extending resizable to allow west resizing without altering the left position attribute
- */
- $.ui.plugin.add( 'resizable', 'preventPositionLeftChange', {
- resize: function( event, ui ) {
- $( this ).data( 'resizable' ).position.left = 0;
- }
- } );
- }
-}
-
-};
-
-} ) ( jQuery );
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js
index d3f7a9d5..17a219af 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js
@@ -1,9 +1,10 @@
/**
* Configuration of Toolbar module for wikiEditor
*/
-( function( $ ) { $.wikiEditor.modules.toolbar.config = {
+/*jshint camelcase:false, quotmark:false */
+( function ( $, mw ) { $.wikiEditor.modules.toolbar.config = {
-getDefaultConfig: function() {
+getDefaultConfig: function () {
var fileNamespace = mw.config.get( 'wgFormattedNamespaces' )[6];
return { 'toolbar': {
// Main section
@@ -43,6 +44,7 @@ getDefaultConfig: function() {
'eu': 'format-bold-L.png',
'he': 'format-bold-B.png',
'hu': 'format-bold-F.png',
+ 'hy': 'format-bold-hy.png',
'it': 'format-bold-G.png',
'ka': 'format-bold-ka.png',
'ky': 'format-bold-ru.png',
@@ -98,6 +100,7 @@ getDefaultConfig: function() {
'eu': 'format-italic-E.png',
'he': 'format-italic-I.png',
'hu': 'format-italic-D.png',
+ 'hy': 'format-italic-hy.png',
'it': 'format-italic-C.png',
'ka': 'format-italic-ka.png',
'ky': 'format-italic-K.png',
@@ -313,28 +316,6 @@ getDefaultConfig: function() {
}
}
},
- 'indent': {
- 'labelMsg': 'wikieditor-toolbar-tool-indent',
- 'type': 'button',
- 'icon': {
- 'default': 'format-indent.png',
- 'default-rtl': 'format-indent-rtl.png'
- },
- 'offset': {
- 'default': [2, -646],
- 'default-rtl': [-70, -430]
- },
- 'action': {
- 'type': 'encapsulate',
- 'options': {
- 'pre': ":",
- 'periMsg': 'wikieditor-toolbar-tool-indent-example',
- 'post': "",
- 'ownline': true,
- 'splitlines': true
- }
- }
- },
'nowiki': {
'labelMsg': 'wikieditor-toolbar-tool-nowiki',
'type': 'button',
@@ -1452,4 +1433,4 @@ getDefaultConfig: function() {
} };
}
-}; } ) ( jQuery );
+}; } ) ( jQuery, mediaWiki );
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.css b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.css
index 6b3fc625..2dad74ab 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.css
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.css
@@ -4,8 +4,13 @@
.wikiEditor-ui-toolbar {
position: relative;
- width: 100%;
+ display: block;
+}
+
+.wikiEditor-ui-toolbar .empty {
+ display: none;
}
+
/* Expandable Sections */
.wikiEditor-ui-toolbar .sections {
float: left;
@@ -14,12 +19,16 @@
height: 0;
}
.wikiEditor-ui-toolbar .sections .section {
- display: none;
float: left;
width: 100%;
- border-top: solid 1px #DDDDDD;
+ border-top: 1px solid #DDDDDD;
background-color: #E0EEf7;
}
+
+.wikiEditor-ui-toolbar .sections .section-hidden {
+ display: none;
+}
+
.wikiEditor-ui-toolbar {
/* @embed */
background-image: url(images/toolbar/base.png);
@@ -47,14 +56,15 @@
.wikiEditor-ui-toolbar .section-main {
position: relative;
float: left;
- height: 26px;
+ min-height: 26px;
+ height: 100%;
}
/* Groups */
.wikiEditor-ui-toolbar .group {
float: left;
height: 26px;
padding-right: 6px;
- border-right: solid 1px #DDDDDD;
+ border-right: 1px solid #DDDDDD;
margin: 3px;
}
.wikiEditor-ui-toolbar .group-search {
@@ -68,8 +78,14 @@
}
/* Sprited Buttons */
.wikiEditor-toolbar-spritedButton {
+ background-image: url('images/toolbar/button-sprite.png');
/* @embed */
- background: url(images/toolbar/button-sprite.png) 0 0 no-repeat;
+ background-image: -webkit-linear-gradient(transparent, transparent), url('images/toolbar/button-sprite.svg');
+ /* @embed */
+ background-image: linear-gradient(transparent, transparent), url('images/toolbar/button-sprite.svg');
+
+ background-position: 0 0;
+ background-repeat: no-repeat;
display: block;
float: left;
height: 22px;
@@ -141,7 +157,7 @@
margin: 2px;
height: 22px;
cursor: pointer;
- border: solid 1px silver;
+ border: 1px solid silver;
padding: 0;
margin-right: 0;
cursor: pointer;
@@ -166,7 +182,7 @@
display: none;
margin-left: -1px;
margin-top: 22px;
- border: solid 1px silver;
+ border: 1px solid silver;
background-color: #ffffff;
}
.wikiEditor-ui-toolbar .group .tool-select .options .option {
@@ -231,7 +247,7 @@
}
.wikiEditor-ui-toolbar .page-table td {
color: black;
- border-top: solid 1px #EEEEEE;
+ border-top: 1px solid #EEEEEE;
}
.wikiEditor-ui-toolbar .page-table th,
.wikiEditor-ui-toolbar .page-table td {
@@ -239,6 +255,9 @@
padding: 5px;
margin: 0;
}
+.wikiEditor-ui-toolbar .section-help .page-table .cell {
+ vertical-align: top;
+}
.wikiEditor-ui-toolbar .section-help .page-table td.cell-syntax,
.wikiEditor-ui-toolbar .section-help .page-table td.syntax {
font-family: monospace, "Courier New";
@@ -255,7 +274,7 @@
}
/* Characters Pages */
.wikiEditor-ui-toolbar .page-characters div span {
- border: solid 1px #DDDDDD;
+ border: 1px solid #DDDDDD;
padding: 5px;
padding-left: 8px;
padding-right: 8px;
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js
index e1bc6f15..454b42a0 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js
@@ -1,13 +1,14 @@
/**
* Toolbar module for wikiEditor
*/
+/*jshint onevar:false */
( function ( mw, $ ) { $.wikiEditor.modules.toolbar = {
/**
* API accessible functions
*/
api : {
- addToToolbar : function( context, data ) {
+ addToToolbar : function ( context, data ) {
var smooth = true, type, i;
@@ -17,7 +18,7 @@ api : {
var $sections = context.modules.toolbar.$toolbar.find( 'div.sections' ),
$tabs = context.modules.toolbar.$toolbar.find( 'div.tabs' );
for ( var section in data[type] ) {
- if ( section == 'main' ) {
+ if ( section === 'main' ) {
// Section
context.modules.toolbar.$toolbar.prepend(
$.wikiEditor.modules.toolbar.fn.buildSection(
@@ -37,7 +38,7 @@ api : {
}
break;
case 'groups':
- if ( ! ( 'section' in data ) ) {
+ if ( !( 'section' in data ) ) {
continue;
}
var $section = context.modules.toolbar.$toolbar.find( 'div[rel="' + data.section + '"].section' );
@@ -50,7 +51,7 @@ api : {
smooth = false;
break;
case 'tools':
- if ( ! ( 'section' in data && 'group' in data ) ) {
+ if ( !( 'section' in data && 'group' in data ) ) {
continue;
}
var $group = context.modules.toolbar.$toolbar.find(
@@ -61,12 +62,12 @@ api : {
$group.append( $.wikiEditor.modules.toolbar.fn.buildTool( context, tool, data[type][tool] ) );
}
if ( $group.children().length ) {
- $group.show();
+ $group.removeClass( 'empty' );
}
smooth = false;
break;
case 'pages':
- if ( ! ( 'section' in data ) ) {
+ if ( !( 'section' in data ) ) {
continue;
}
var $pages = context.modules.toolbar.$toolbar.find(
@@ -87,7 +88,7 @@ api : {
smooth = false;
break;
case 'rows':
- if ( ! ( 'section' in data && 'page' in data ) ) {
+ if ( !( 'section' in data && 'page' in data ) ) {
continue;
}
var $table = context.modules.toolbar.$toolbar.find(
@@ -100,7 +101,7 @@ api : {
smooth = false;
break;
case 'characters':
- if ( ! ( 'section' in data && 'page' in data ) ) {
+ if ( !( 'section' in data && 'page' in data ) ) {
continue;
}
var $characters = context.modules.toolbar.$toolbar.find(
@@ -112,15 +113,15 @@ api : {
$characters
.append(
$( $.wikiEditor.modules.toolbar.fn.buildCharacter( data.characters[i], actions ) )
- .mousedown( function( e ) {
+ .mousedown( function ( e ) {
context.fn.saveCursorAndScrollTop();
// No dragging!
e.preventDefault();
return false;
} )
- .click( function( e ) {
- $.wikiEditor.modules.toolbar.fn.doAction( $(this).parent().data( 'context' ),
- $(this).parent().data( 'actions' )[$(this).attr( 'rel' )] );
+ .click( function ( e ) {
+ $.wikiEditor.modules.toolbar.fn.doAction( $( this ).parent().data( 'context' ),
+ $( this ).parent().data( 'actions' )[$( this ).attr( 'rel' )] );
e.preventDefault();
return false;
} )
@@ -135,7 +136,7 @@ api : {
// Fix div.section size after adding things; if smooth is true uses a smooth
// animation, otherwise just change height (breaking any ongoing animation)
var $divSections = context.modules.toolbar.$toolbar.find( 'div.sections' );
- var $visibleSection = $divSections.find( '.section:visible' );
+ var $visibleSection = $divSections.find( '.section-visible' );
if ( $visibleSection.size() ) {
if ( smooth ) {
$divSections.animate( { 'height': $visibleSection.outerHeight() }, 'fast' );
@@ -144,29 +145,29 @@ api : {
}
}
},
- removeFromToolbar : function( context, data ) {
- if ( typeof data.section == 'string' ) {
+ removeFromToolbar : function ( context, data ) {
+ if ( typeof data.section === 'string' ) {
// Section
var tab = 'div.tabs span[rel="' + data.section + '"].tab';
var target = 'div[rel="' + data.section + '"].section';
var group = null;
- if ( typeof data.group == 'string' ) {
+ if ( typeof data.group === 'string' ) {
// Toolbar group
target += ' div[rel="' + data.group + '"].group';
- if ( typeof data.tool == 'string' ) {
+ if ( typeof data.tool === 'string' ) {
// Save for later checking if empty
group = target;
// Tool
- target += ' a[rel="' + data.tool + '"].tool';
+ target = target + ' a[rel="' + data.tool + '"].tool, ' + target + ' img[rel="' + data.tool + '"].tool';
}
- } else if ( typeof data.page == 'string' ) {
+ } else if ( typeof data.page === 'string' ) {
// Booklet page
var index = target + ' div.index div[rel="' + data.page + '"]';
target += ' div.pages div[rel="' + data.page + '"].page';
- if ( typeof data.character == 'string' ) {
+ if ( typeof data.character === 'string' ) {
// Character
target += ' span[rel="' + data.character + '"]';
- } else if ( typeof data.row == 'number' ) {
+ } else if ( typeof data.row === 'number' ) {
// Table row
target += ' table tr:not(:has(th)):eq(' + data.row + ')';
} else {
@@ -188,7 +189,7 @@ api : {
if ( group ) {
var $group = context.modules.toolbar.$toolbar.find( group );
if ( $group.children().length === 0 ) {
- $group.hide();
+ $group.addClass( 'empty' );
}
}
}
@@ -198,14 +199,12 @@ api : {
* Event handlers
*/
evt: {
- resize: function( context, event ) {
+ /**
+ * @param context
+ * @param event
+ */
+ resize: function ( context ) {
context.$ui.find( '.sections' ).height( context.$ui.find( '.sections .section-visible' ).outerHeight() );
- },
- tocCollapse: function( context, event ) {
- $.wikiEditor.modules.toolbar.evt.resize( context, event );
- },
- tocExpand: function( context, event ) {
- $.wikiEditor.modules.toolbar.evt.resize( context, event );
}
},
/**
@@ -218,11 +217,11 @@ fn: {
* @param {Object} context Context object of editor to create module in
* @param {Object} config Configuration object to create module from
*/
- create : function( context, config ) {
+ create : function ( context, config ) {
if ( '$toolbar' in context.modules.toolbar ) {
return;
}
- context.modules.toolbar.$toolbar = $( '<div/>' )
+ context.modules.toolbar.$toolbar = $( '<div>' )
.addClass( 'wikiEditor-ui-toolbar' )
.attr( 'id', 'wikiEditor-ui-toolbar' );
$.wikiEditor.modules.toolbar.fn.build( context, config );
@@ -235,7 +234,7 @@ fn: {
* @param {Object} action
* @param {Object} source
*/
- doAction : function( context, action, source ) {
+ doAction : function ( context, action ) {
switch ( action.type ) {
case 'replace':
case 'encapsulate':
@@ -244,7 +243,7 @@ fn: {
'peri' : $.wikiEditor.autoMsg( action.options, 'peri' ),
'post' : $.wikiEditor.autoMsg( action.options, 'post' )
};
- var replace = action.type == 'replace';
+ var replace = action.type === 'replace';
if ( 'regex' in action.options && 'regexReplace' in action.options ) {
var selection = context.$textarea.textSelection( 'getSelection' );
if ( selection !== '' && selection.match( action.options.regex ) ) {
@@ -258,12 +257,9 @@ fn: {
'encapsulateSelection',
$.extend( {}, action.options, parts, { 'replace': replace } )
);
- if ( context.$iframe !== undefined ) {
- context.$iframe[0].contentWindow.focus();
- }
break;
case 'callback':
- if ( typeof action.execute == 'function' ) {
+ if ( typeof action.execute === 'function' ) {
action.execute( context );
}
break;
@@ -274,30 +270,33 @@ fn: {
default: break;
}
},
- buildGroup : function( context, id, group ) {
- var $group = $( '<div/>' ).attr( { 'class' : 'group group-' + id, 'rel' : id } );
+ buildGroup : function ( context, id, group ) {
+ var $group = $( '<div>' ).attr( { 'class' : 'group group-' + id, 'rel' : id } );
var label = $.wikiEditor.autoMsg( group, 'label' );
if ( label ) {
- $group.append( '<span class="label">' + label + '</div>' );
+ var $label = $( '<span />' )
+ .addClass( 'label' )
+ .html( label );
+ $group.append( $label );
}
var empty = true;
if ( 'tools' in group ) {
for ( var tool in group.tools ) {
- tool = $.wikiEditor.modules.toolbar.fn.buildTool( context, tool, group.tools[tool] );
+ tool = $.wikiEditor.modules.toolbar.fn.buildTool( context, tool, group.tools[tool] );
if ( tool ) {
// Consider a group with only hidden tools empty as well
// .is( ':visible' ) always returns false because tool is not attached to the DOM yet
- empty = empty && tool.css( 'display' ) == 'none';
+ empty = empty && tool.css( 'display' ) === 'none';
$group.append( tool );
}
}
}
if ( empty ) {
- $group.hide();
+ $group.addClass( 'empty' );
}
return $group;
},
- buildTool : function( context, id, tool ) {
+ buildTool : function ( context, id, tool ) {
if ( 'filters' in tool ) {
for ( var i = 0; i < tool.filters.length; i++ ) {
if ( $( tool.filters[i] ).size() === 0 ) {
@@ -315,7 +314,7 @@ fn: {
$.wikiEditor.imgPath + 'toolbar/'
);
if ( typeof offsetOrIcon === 'object' ) {
- $button = $( '<a/>' )
+ $button = $( '<a>' )
.attr( {
'href' : '#',
'title' : label,
@@ -328,7 +327,7 @@ fn: {
}
}
if ( !$button ) {
- $button = $( '<img/>' )
+ $button = $( '<img>' )
.attr( {
'src' : src,
'width' : 22,
@@ -344,15 +343,15 @@ fn: {
$button
.data( 'action', tool.action )
.data( 'context', context )
- .mousedown( function( e ) {
+ .mousedown( function ( e ) {
context.fn.saveCursorAndScrollTop();
// No dragging!
e.preventDefault();
return false;
} )
- .click( function( e ) {
+ .click( function ( e ) {
$.wikiEditor.modules.toolbar.fn.doAction(
- $(this).data( 'context' ), $(this).data( 'action' ), $(this)
+ $( this ).data( 'context' ), $( this ).data( 'action' ), $( this )
);
e.preventDefault();
return false;
@@ -360,31 +359,31 @@ fn: {
}
return $button;
case 'select':
- var $select = $( '<div/>' )
+ var $select = $( '<div>' )
.attr( { 'rel' : id, 'class' : 'tool tool-select' } );
- var $options = $( '<div/>' ).addClass( 'options' );
+ var $options = $( '<div>' ).addClass( 'options' );
if ( 'list' in tool ) {
for ( var option in tool.list ) {
var optionLabel = $.wikiEditor.autoMsg( tool.list[option], 'label' );
$options.append(
- $( '<a/>' )
+ $( '<a>' )
.data( 'action', tool.list[option].action )
.data( 'context', context )
- .mousedown( function( e ) {
+ .mousedown( function ( e ) {
context.fn.saveCursorAndScrollTop();
// No dragging!
e.preventDefault();
return false;
} )
- .click( function( e ) {
+ .click( function ( e ) {
$.wikiEditor.modules.toolbar.fn.doAction(
- $(this).data( 'context' ), $(this).data( 'action' ), $(this)
+ $( this ).data( 'context' ), $( this ).data( 'action' ), $( this )
);
// Hide the dropdown
// Sanity check: if this somehow gets called while the dropdown
// is hidden, don't show it
- if ( $(this).parent().is( ':visible' ) ) {
- $(this).parent().animate( { 'opacity': 'toggle' }, 'fast' );
+ if ( $( this ).parent().is( ':visible' ) ) {
+ $( this ).parent().animate( { 'opacity': 'toggle' }, 'fast' );
}
e.preventDefault();
return false;
@@ -395,19 +394,19 @@ fn: {
);
}
}
- $select.append( $( '<div/>' ).addClass( 'menu' ).append( $options ) );
- $select.append( $( '<a/>' )
+ $select.append( $( '<div>' ).addClass( 'menu' ).append( $options ) );
+ $select.append( $( '<a>' )
.addClass( 'label' )
.text( label )
.data( 'options', $options )
.attr( 'href', '#' )
- .mousedown( function( e ) {
+ .mousedown( function ( e ) {
// No dragging!
e.preventDefault();
return false;
} )
- .click( function( e ) {
- $(this).data( 'options' ).animate( { 'opacity': 'toggle' }, 'fast' );
+ .click( function ( e ) {
+ $( this ).data( 'options' ).animate( { 'opacity': 'toggle' }, 'fast' );
e.preventDefault();
return false;
} )
@@ -417,27 +416,27 @@ fn: {
return null;
}
},
- buildBookmark : function( context, id, page ) {
+ buildBookmark : function ( context, id, page ) {
var label = $.wikiEditor.autoMsg( page, 'label' );
- return $( '<div/>' )
+ return $( '<div>' )
.text( label )
.attr( 'rel', id )
.data( 'context', context )
- .mousedown( function( e ) {
+ .mousedown( function ( e ) {
context.fn.saveCursorAndScrollTop();
// No dragging!
e.preventDefault();
return false;
} )
- .click( function( event ) {
- $(this).parent().parent().find( '.page' ).hide();
- $(this).parent().parent().find( '.page-' + $(this).attr( 'rel' ) ).show();
- $(this).siblings().removeClass( 'current' );
- $(this).addClass( 'current' );
- var section = $(this).parent().parent().attr( 'rel' );
+ .click( function ( event ) {
+ $( this ).parent().parent().find( '.page' ).hide();
+ $( this ).parent().parent().find( '.page-' + $( this ).attr( 'rel' ) ).show();
+ $( this ).siblings().removeClass( 'current' );
+ $( this ).addClass( 'current' );
+ var section = $( this ).parent().parent().attr( 'rel' );
$.cookie(
- 'wikiEditor-' + $(this).data( 'context' ).instance + '-booklet-' + section + '-page',
- $(this).attr( 'rel' ),
+ 'wikiEditor-' + $( this ).data( 'context' ).instance + '-booklet-' + section + '-page',
+ $( this ).attr( 'rel' ),
{ expires: 30, path: '/' }
);
context.fn.restoreCursorAndScrollTop();
@@ -446,9 +445,9 @@ fn: {
return false;
} );
},
- buildPage : function( context, id, page ) {
- var html;
- var $page = $( '<div/>' ).attr( {
+ buildPage : function ( context, id, page ) {
+ var html, i;
+ var $page = $( '<div>' ).attr( {
'class' : 'page page-' + id,
'rel' : id
} );
@@ -461,15 +460,15 @@ fn: {
html += $.wikiEditor.modules.toolbar.fn.buildHeading( context, page.headings );
}
if ( 'rows' in page ) {
- for ( var i = 0; i < page.rows.length; i++ ) {
+ for ( i = 0; i < page.rows.length; i++ ) {
html += $.wikiEditor.modules.toolbar.fn.buildRow( context, page.rows[i] );
}
}
- $page.html( html + '</table>');
+ $page.html( html + '</table>' );
break;
case 'characters':
$page.addClass( 'page-characters' );
- var $characters = $( '<div/>' ).data( 'context', context ).data( 'actions', {} );
+ var $characters = $( '<div>' ).data( 'context', context ).data( 'actions', {} );
var actions = $characters.data( 'actions' );
if ( 'language' in page ) {
$characters.attr( 'lang', page.language );
@@ -484,23 +483,23 @@ fn: {
}
if ( 'characters' in page ) {
html = '';
- for ( var i = 0; i < page.characters.length; i++ ) {
+ for ( i = 0; i < page.characters.length; i++ ) {
html += $.wikiEditor.modules.toolbar.fn.buildCharacter( page.characters[i], actions );
}
$characters
.html( html )
.children()
- .mousedown( function( e ) {
+ .mousedown( function ( e ) {
context.fn.saveCursorAndScrollTop();
// No dragging!
e.preventDefault();
return false;
} )
- .click( function( e ) {
+ .click( function ( e ) {
$.wikiEditor.modules.toolbar.fn.doAction(
- $(this).parent().data( 'context' ),
- $(this).parent().data( 'actions' )[$(this).attr( 'rel' )],
- $(this)
+ $( this ).parent().data( 'context' ),
+ $( this ).parent().data( 'actions' )[$( this ).attr( 'rel' )],
+ $( this )
);
e.preventDefault();
return false;
@@ -511,23 +510,23 @@ fn: {
}
return $page;
},
- buildHeading : function( context, headings ) {
+ buildHeading : function ( context, headings ) {
var html = '<tr>';
for ( var i = 0; i< headings.length; i++ ) {
html += '<th>' + $.wikiEditor.autoMsg( headings[i], ['html', 'text'] ) + '</th>';
}
return html + '</tr>';
},
- buildRow : function( context, row ) {
+ buildRow : function ( context, row ) {
var html = '<tr>';
for ( var cell in row ) {
- html += '<td class="cell cell-' + cell + '" valign="top"><span>' +
+ html += '<td class="cell cell-' + cell + '"><span>' +
$.wikiEditor.autoMsg( row[cell], ['html', 'text'] ) + '</span></td>';
}
return html + '</tr>';
},
- buildCharacter : function( character, actions ) {
- if ( typeof character == 'string' ) {
+ buildCharacter : function ( character, actions ) {
+ if ( typeof character === 'string' ) {
character = {
'label' : character,
'action' : {
@@ -564,18 +563,19 @@ fn: {
return mw.html.element( 'span', { 'rel': character.label }, character.label );
}
}
- mw.log( "A character for the toolbar was undefined. This is not supposed to happen. Double check the config." );
- return ""; // bug 31673; also an additional fix for bug 24208...
+ mw.log( 'A character for the toolbar was undefined. This is not supposed to happen. Double check the config.' );
+ // bug 31673; also an additional fix for bug 24208...
+ return '';
},
- buildTab : function( context, id, section ) {
+ buildTab : function ( context, id, section ) {
var selected = $.cookie( 'wikiEditor-' + context.instance + '-toolbar-section' );
// Re-save cookie
if ( selected !== null ) {
$.cookie( 'wikiEditor-' + context.instance + '-toolbar-section', selected, { expires: 30, path: '/' } );
}
var $link =
- $( '<a/>' )
- .addClass( selected == id ? 'current' : null )
+ $( '<a>' )
+ .addClass( selected === id ? 'current' : null )
.attr( {
href: '#',
role: 'button',
@@ -584,96 +584,101 @@ fn: {
} )
.text( $.wikiEditor.autoMsg( section, 'label' ) )
.data( 'context', context )
- .mouseup( function( e ) {
- $(this).blur();
+ .mouseup( function () {
+ $( this ).blur();
} )
- .mousedown( function( e ) {
+ .mousedown( function ( e ) {
// No dragging!
e.preventDefault();
return false;
} )
- .click( function( e ) {
+ .click( function ( e ) {
// We have to set aria-pressed over here, as NVDA wont recognize it
// if we do it in the below .each as it seems
- $(this).attr( 'aria-pressed', 'true' );
- $( '.tab > a' ).each( function( i, elem ) {
+ $( this ).attr( 'aria-pressed', 'true' );
+ $( '.tab > a' ).each( function ( i, elem ) {
if ( elem !== e.target ) {
$( elem ).attr( 'aria-pressed', 'false' );
}
} );
- var $sections = $(this).data( 'context' ).$ui.find( '.sections' );
+ var $sections = $( this ).data( 'context' ).$ui.find( '.sections' );
var $section =
- $(this).data( 'context' ).$ui.find( '.section-' + $(this).parent().attr( 'rel' ) );
- var show = $section.css( 'display' ) == 'none';
+ $( this ).data( 'context' ).$ui.find( '.section-' + $( this ).parent().attr( 'rel' ) );
+ var show = !$section.hasClass( 'section-visible' );
$section.parent().find( '.section-visible' )
.css( 'position', 'absolute' )
.attr( 'aria-expanded', 'false' )
.removeClass( 'section-visible' )
- .fadeOut( 'fast', function() { $(this).css( 'position', 'static' ); } );
- $(this).parent().parent().find( 'a' ).removeClass( 'current' );
+ .animate( { opacity: 0 }, 'fast', 'linear', function () {
+ $( this ).addClass( 'section-hidden' ).css( 'position', 'static' );
+ } );
+
+ $( this ).parent().parent().find( 'a' ).removeClass( 'current' );
$sections.css( 'overflow', 'hidden' );
- var animate = function( $that ) {
+ var animate = function ( $that ) {
$sections
- .css( 'display', 'block' )
- .animate( { 'height': $section.outerHeight() }, $section.outerHeight() * 2, function() {
+ .animate( { 'height': $section.outerHeight() }, $section.outerHeight() * 2, function () {
$that.css( 'overflow', 'visible' ).css( 'height', 'auto' );
context.fn.trigger( 'resize' );
} );
};
if ( show ) {
- $section.addClass( 'section-visible' )
+ $section.removeClass( 'section-hidden' )
.attr( 'aria-expanded', 'true' )
- .fadeIn( 'fast' );
+ .animate( {opacity: 100.0}, 'fast', 'linear', function () {
+ $(this).addClass( 'section-visible' );
+ } );
+
if ( $section.hasClass( 'loading' ) ) {
// Loading of this section was deferred, load it now
- var $that = $(this);
+ var $that = $( this );
$that.addClass( 'current loading' );
- setTimeout( function() {
+ setTimeout( function () {
$section.trigger( 'loadSection' );
animate( $that );
$that.removeClass( 'loading' );
}, 1000 );
} else {
- animate( $(this) );
- $(this).addClass( 'current' );
+ animate( $( this ) );
+ $( this ).addClass( 'current' );
}
} else {
$sections
.css( 'height', $section.outerHeight() )
- .animate( { 'height': 'hide' }, $section.outerHeight() * 2, function() {
- $(this).css( { 'overflow': 'visible', 'height': 0 } );
+ .animate( { 'height': 0 }, $section.outerHeight() * 2, function () {
+ $( this ).css( { 'overflow': 'visible' } );
context.fn.trigger( 'resize' );
} );
}
// Save the currently visible section
$.cookie(
- 'wikiEditor-' + $(this).data( 'context' ).instance + '-toolbar-section',
+ 'wikiEditor-' + $( this ).data( 'context' ).instance + '-toolbar-section',
show ? $section.attr( 'rel' ) : null,
{ expires: 30, path: '/' }
);
e.preventDefault();
return false;
- });
- return $( '<span/>' )
- .attr({
+ } );
+ return $( '<span>' )
+ .attr( {
'class' : 'tab tab-' + id,
'rel' : id
- })
+ } )
.append( $link );
},
- buildSection: function( context, id, section ) {
- var $section = $( '<div/>' ).attr( {
+ buildSection: function ( context, id, section ) {
+ var $section = $( '<div>' ).attr( {
'class': section.type + ' section section-' + id,
'rel': id,
id: 'wikiEditor-section-' + id
} );
var selected = $.cookie( 'wikiEditor-' + context.instance + '-toolbar-section' );
- var show = selected == id;
+ var show = selected === id;
if ( section.deferLoad !== undefined && section.deferLoad && id !== 'main' && !show ) {
// This class shows the spinner and serves as a marker for the click handler in buildTab()
- $section.addClass( 'loading' ).append( $( '<div/>' ).addClass( 'spinner' ) );
- $section.bind( 'loadSection', function() {
+ $section.addClass( 'loading' ).append( $( '<div>' ).addClass( 'spinner' ) );
+ $section.bind( 'loadSection', function () {
$.wikiEditor.modules.toolbar.fn.reallyBuildSection( context, id, section, $section );
$section.removeClass( 'loading' );
} );
@@ -683,17 +688,17 @@ fn: {
// Show or hide section
if ( id !== 'main' ) {
- $section
- .css( 'display', show ? 'block' : 'none' )
- .attr( 'aria-expanded', show ? 'true' : 'false' );
+ $section.attr( 'aria-expanded', show ? 'true' : 'false' );
if ( show ) {
$section.addClass( 'section-visible' );
+ } else {
+ $section.addClass( 'section-hidden' );
}
}
return $section;
},
- reallyBuildSection: function( context, id, section, $section ) {
+ reallyBuildSection: function ( context, id, section, $section ) {
context.$textarea.trigger( 'wikiEditor-toolbar-buildSection-' + $section.attr( 'rel' ), [section] );
switch ( section.type ) {
case 'toolbar':
@@ -706,8 +711,8 @@ fn: {
}
break;
case 'booklet':
- var $pages = $( '<div/>' ).addClass( 'pages' );
- var $index = $( '<div/>' ).addClass( 'index' );
+ var $pages = $( '<div>' ).addClass( 'pages' );
+ var $index = $( '<div>' ).addClass( 'index' );
if ( 'pages' in section ) {
for ( var page in section.pages ) {
$pages.append(
@@ -723,7 +728,8 @@ fn: {
break;
}
},
- updateBookletSelection : function( context, id, $pages, $index ) {
+ updateBookletSelection : function ( context, id, $pages, $index ) {
+ /*jshint eqnull:true */
var cookie = 'wikiEditor-' + context.instance + '-booklet-' + id + '-page';
var selected = $.cookie( cookie );
// Re-save cookie
@@ -741,13 +747,13 @@ fn: {
$index.children().removeClass( 'current' );
$selectedIndex.addClass( 'current' );
},
- build : function( context, config ) {
- var $tabs = $( '<div/>' ).addClass( 'tabs' ).appendTo( context.modules.toolbar.$toolbar );
- var $sections = $( '<div/>' ).addClass( 'sections' ).appendTo( context.modules.toolbar.$toolbar );
- context.modules.toolbar.$toolbar.append( $( '<div/>' ).css( 'clear', 'both' ) );
+ build : function ( context, config ) {
+ var $tabs = $( '<div>' ).addClass( 'tabs' ).appendTo( context.modules.toolbar.$toolbar );
+ var $sections = $( '<div>' ).addClass( 'sections' ).appendTo( context.modules.toolbar.$toolbar );
+ context.modules.toolbar.$toolbar.append( $( '<div>' ).css( 'clear', 'both' ) );
var sectionQueue = [];
for ( var section in config ) {
- if ( section == 'main' ) {
+ if ( section === 'main' ) {
context.modules.toolbar.$toolbar.prepend(
$.wikiEditor.modules.toolbar.fn.buildSection( context, section, config[section] )
);
@@ -763,7 +769,7 @@ fn: {
}
$.eachAsync( sectionQueue, {
'bulk' : 0,
- 'end' : function() {
+ 'end' : function () {
// HACK: Opera doesn't seem to want to redraw after these bits
// are added to the DOM, so we can just FORCE it!
var oldValue = $( 'body' ).css( 'position' );
@@ -772,11 +778,11 @@ fn: {
context.$textarea.trigger( 'wikiEditor-toolbar-doneInitialSections' );
},
- 'loop' : function( i, s ) {
+ 'loop' : function ( i, s ) {
s.$sections.append( $.wikiEditor.modules.toolbar.fn.buildSection( s.context, s.id, s.config ) );
- var $section = s.$sections.find( '.section:visible' );
+ var $section = s.$sections.find( '.section-visible' );
if ( $section.size() ) {
- $sections.animate( { 'height': $section.outerHeight() }, $section.outerHeight() * 2, function( ) {
+ $sections.animate( { 'height': $section.outerHeight() }, $section.outerHeight() * 2, function ( ) {
context.fn.trigger( 'resize' );
} );
}