Alex Monk has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/197357

Change subject: WIP - Load all of WikiEditor's special characters
......................................................................

WIP - Load all of WikiEditor's special characters

Bug: T91618
Change-Id: I3fafc561ceae969e4ecc12881154cd8a3568bebb
---
A ResourceLoaderSpecialCharacterDataModule.php
M VisualEditor.php
M extension.json
M modules/ve-mw/init/ve.init.mw.Platform.js
M modules/ve-mw/init/ve.init.mw.Target.js
A modules/ve-mw/specialcharacters.json
A modules/ve-mw/ui/dialogs/ve.ui.MWSpecialCharacterDialog.js
A modules/ve-mw/ui/tools/ve.ui.MWSpecialCharacterDialogTool.js
M modules/ve-mw/ui/ve.ui.MWCommandRegistry.js
9 files changed, 227 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/57/197357/1

diff --git a/ResourceLoaderSpecialCharacterDataModule.php 
b/ResourceLoaderSpecialCharacterDataModule.php
new file mode 100644
index 0000000..e3a11ee
--- /dev/null
+++ b/ResourceLoaderSpecialCharacterDataModule.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * Resource loader module for populating special characters data for some
+ * editing extensions to use.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Resource loader module for populating special characters data for some
+ * editing extensions to use.
+ */
+class ResourceLoaderSpecialCharacterDataModule extends ResourceLoaderModule {
+/* The following JS was used to genrate the file, on a Extension:WikiEditor 
page.
+var result = {},
+       characterGroups = 
$.wikiEditor.modules.toolbar.config.getDefaultConfig().toolbar.characters.pages;
+$.each( characterGroups, function ( groupId, characterGroup ) {
+       var groupResult = [];
+       $.each( characterGroup.characters, function ( index, character ) {
+               if ( typeof character === 'string' ) {
+                       groupResult.push( character );
+               }
+       } );
+       result[groupId] = groupResult;
+} );
+JSON.stringify( result );
+*/
+       private $path = 
"extensions/VisualEditor/modules/ve-mw/specialcharacters.json";
+       protected $targets = array( 'desktop', 'mobile' );
+
+       /**
+        * Get all the dynamic data.
+        *
+        * @return array
+        */
+       protected function getData() {
+               return json_decode( file_get_contents( $this->path ) );
+       }
+
+       /**
+        * @param ResourceLoaderContext $context
+        * @return string JavaScript code
+        */
+       public function getScript( ResourceLoaderContext $context ) {
+               return Xml::encodeJsCall(
+                       've.init.platform.setSpecialCharacters',
+                       array(
+                               $this->getData()
+                       ),
+                       ResourceLoader::inDebugMode()
+               );
+       }
+
+       /**
+        * @param ResourceLoaderContext $context
+        * @return int UNIX timestamp
+        */
+       public function getModifiedTime( ResourceLoaderContext $context ) {
+               return static::safeFilemtime( $this->path );
+       }
+
+       /**
+        * @param ResourceLoaderContext $context
+        * @return string Hash
+        */
+       public function getModifiedHash( ResourceLoaderContext $context ) {
+               return md5( serialize( $this->getData() ) );
+       }
+
+       /**
+        * @return array
+        */
+       public function getDependencies() {
+               return array( 'ext.visualEditor.mediawiki' );
+       }
+}
diff --git a/VisualEditor.php b/VisualEditor.php
index 00f1e7b..33c88a8 100644
--- a/VisualEditor.php
+++ b/VisualEditor.php
@@ -46,6 +46,8 @@
 $wgAutoloadClasses['VisualEditorDataModule'] = $dir . 
'VisualEditorDataModule.php';
 $wgAutoloadClasses['VisualEditorViewPageTargetInitModule'] =
        $dir . 'VisualEditorViewPageTargetInitModule.php';
+$wgAutoloadClasses['ResourceLoaderSpecialCharacterDataModule'] =
+       $dir . 'ResourceLoaderSpecialCharacterDataModule.php';
 $wgMessagesDirs['VisualEditor'] = array(
        __DIR__ . '/lib/ve/i18n',
        __DIR__ . '/modules/ve-mw/i18n',
@@ -863,9 +865,11 @@
                        'modules/ve-mw/ui/dialogs/ve.ui.MWCommandHelpDialog.js',
                        
'modules/ve-mw/ui/dialogs/ve.ui.MWCancelConfirmDialog.js',
                        
'modules/ve-mw/ui/dialogs/ve.ui.MWWikitextSwitchConfirmDialog.js',
+                       
'modules/ve-mw/ui/dialogs/ve.ui.MWSpecialCharacterDialog.js',
 
                        'modules/ve-mw/ui/tools/ve.ui.MWEditModeTool.js',
                        'modules/ve-mw/ui/tools/ve.ui.MWPopupTool.js',
+                       
'modules/ve-mw/ui/tools/ve.ui.MWSpecialCharacterDialogTool.js',
 
                        
'modules/ve-mw/ui/inspectors/ve.ui.MWExtensionInspector.js',
                        
'modules/ve-mw/ui/inspectors/ve.ui.MWLiveExtensionInspector.js',
@@ -891,6 +895,7 @@
                        'jquery.autoEllipsis',
                        'jquery.byteLimit',
                        'mediawiki.skinning.content.parsoid',
+                       'ext.visualEditor.specialCharacters',
                ),
                'messages' => array(
                        'visualeditor-beta-label',
@@ -949,6 +954,27 @@
 
                        // Mentioned in another message
                        'ooui-dialog-process-continue',
+
+                       // temp, do not commit
+                       'wikieditor-toolbar-characters-page-latin',
+                       'wikieditor-toolbar-characters-page-latinextended',
+                       'wikieditor-toolbar-characters-page-ipa',
+                       'wikieditor-toolbar-characters-page-symbols',
+                       'wikieditor-toolbar-characters-page-greek',
+                       'wikieditor-toolbar-characters-page-cyrillic',
+                       'wikieditor-toolbar-characters-page-arabic',
+                       'wikieditor-toolbar-characters-page-arabicextended',
+                       'wikieditor-toolbar-characters-page-persian',
+                       'wikieditor-toolbar-characters-page-hebrew',
+                       'wikieditor-toolbar-characters-page-bangla',
+                       'wikieditor-toolbar-characters-page-tamil',
+                       'wikieditor-toolbar-characters-page-telugu',
+                       'wikieditor-toolbar-characters-page-sinhala',
+                       'wikieditor-toolbar-characters-page-devanagari',
+                       'wikieditor-toolbar-characters-page-gujarati',
+                       'wikieditor-toolbar-characters-page-thai',
+                       'wikieditor-toolbar-characters-page-lao',
+                       'wikieditor-toolbar-characters-page-khmer',
 
                        // Used by the TOC widget (currently experimental)
                        'toc',
@@ -1535,6 +1561,10 @@
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
+
+       'ext.visualEditor.specialCharacters' => array(
+               'class' => 'ResourceLoaderSpecialCharacterDataModule'
+       ),
 );
 
 /* Extend MediaWiki configuration */
diff --git a/extension.json b/extension.json
index 96bfb4a..513e0ba 100644
--- a/extension.json
+++ b/extension.json
@@ -905,8 +905,10 @@
                                
"modules/ve-mw/ui/dialogs/ve.ui.MWCommandHelpDialog.js",
                                
"modules/ve-mw/ui/dialogs/ve.ui.MWCancelConfirmDialog.js",
                                
"modules/ve-mw/ui/dialogs/ve.ui.MWWikitextSwitchConfirmDialog.js",
+                               
"modules/ve-mw/ui/dialogs/ve.ui.MWSpecialCharacterDialog.js",
                                
"modules/ve-mw/ui/tools/ve.ui.MWEditModeTool.js",
                                "modules/ve-mw/ui/tools/ve.ui.MWPopupTool.js",
+                               
"modules/ve-mw/ui/tools/ve.ui.MWSpecialCharacterDialogTool.js",
                                
"modules/ve-mw/ui/inspectors/ve.ui.MWExtensionInspector.js",
                                
"modules/ve-mw/ui/inspectors/ve.ui.MWLiveExtensionInspector.js",
                                "modules/ve-mw/ui/actions/ve.ui.MWLinkAction.js"
@@ -928,7 +930,8 @@
                                "mediawiki.jqueryMsg",
                                "jquery.autoEllipsis",
                                "jquery.byteLimit",
-                               "mediawiki.skinning.content.parsoid"
+                               "mediawiki.skinning.content.parsoid",
+                               "ext.visualEditor.specialCharacters"
                        ],
                        "messages": [
                                "visualeditor-beta-label",
@@ -1565,6 +1568,9 @@
                                "desktop",
                                "mobile"
                        ]
+               },
+               "ext.visualEditor.specialCharacters": {
+                       "class": "ResourceLoaderSpecialCharacterDataModule"
                }
        },
        "ResourceFileModulePaths": {
@@ -1586,7 +1592,8 @@
                "ApiVisualEditorEdit": "ApiVisualEditorEdit.php",
                "VisualEditorHooks": "VisualEditor.hooks.php",
                "VisualEditorDataModule": "VisualEditorDataModule.php",
-               "VisualEditorViewPageTargetInitModule": 
"VisualEditorViewPageTargetInitModule.php"
+               "VisualEditorViewPageTargetInitModule": 
"VisualEditorViewPageTargetInitModule.php",
+               "ResourceLoaderSpecialCharacterDataModule": 
"ResourceLoaderSpecialCharacterDataModule.php"
        },
        "ConfigRegistry": {
                "visualeditor": "GlobalVarConfig::newInstance"
diff --git a/modules/ve-mw/init/ve.init.mw.Platform.js 
b/modules/ve-mw/init/ve.init.mw.Platform.js
index 736ccc9..ec87831 100644
--- a/modules/ve-mw/init/ve.init.mw.Platform.js
+++ b/modules/ve-mw/init/ve.init.mw.Platform.js
@@ -24,6 +24,7 @@
        this.parsedMessages = {};
        this.linkCache = new ve.init.mw.LinkCache();
        this.imageInfoCache = new ve.init.mw.ImageInfoCache();
+       this.specialCharacters = {};
 };
 
 /* Inheritance */
@@ -109,6 +110,13 @@
        return mw.language.getFallbackLanguageChain();
 };
 
+/**
+ * TODO: docs
+ */
+ve.init.mw.Platform.prototype.setSpecialCharacters = function ( data ) {
+       this.specialCharacters = data;
+};
+
 /* Initialization */
 
 ve.init.platform = new ve.init.mw.Platform();
diff --git a/modules/ve-mw/init/ve.init.mw.Target.js 
b/modules/ve-mw/init/ve.init.mw.Target.js
index 111fe6f..214f3bf 100644
--- a/modules/ve-mw/init/ve.init.mw.Target.js
+++ b/modules/ve-mw/init/ve.init.mw.Target.js
@@ -225,7 +225,7 @@
                demote: [ 'deleteTable' ]
        },
        // SpecialCharacter
-       { include: [ 'specialCharacter' ] }
+       { include: [ 'mwSpecialCharacter' ] }
 ];
 
 ve.init.mw.Target.static.importRules = {
diff --git a/modules/ve-mw/specialcharacters.json 
b/modules/ve-mw/specialcharacters.json
new file mode 100644
index 0000000..0a98ac5
--- /dev/null
+++ b/modules/ve-mw/specialcharacters.json
@@ -0,0 +1 @@
+{"latin":["Á","á","À","à","Â","â","Ä","ä","Ã","ã","Ǎ","ǎ","Ā","ā","Ă","ă","Ą","ą","Å","å","Ć","ć","Ĉ","ĉ","Ç","ç","Č","č","Ċ","ċ","Đ","đ","Ď","ď","É","é","È","è","Ê","ê","Ë","ë","Ě","ě","Ē","ē","Ĕ","ĕ","Ė","ė","Ę","ę","Ĝ","ĝ","Ģ","ģ","Ğ","ğ","Ġ","ġ","Ĥ","ĥ","Ħ","ħ","Í","í","Ì","ì","Î","î","Ï","ï","Ĩ","ĩ","Ǐ","ǐ","Ī","ī","Ĭ","ĭ","İ","ı","Į","į","Ĵ","ĵ","Ķ","ķ","Ĺ","ĺ","Ļ","ļ","Ľ","ľ","Ł","ł","Ń","ń","Ñ","ñ","Ņ","ņ","Ň","ň","Ó","ó","Ò","ò","Ô","ô","Ö","ö","Õ","õ","Ǒ","ǒ","Ō","ō","Ŏ","ŏ","Ǫ","ǫ","Ő","ő","Ŕ","ŕ","Ŗ","ŗ","Ř","ř","Ś","ś","Ŝ","ŝ","Ş","ş","Š","š","Ș","ș","Ț","ț","Ť","ť","Ú","ú","Ù","ù","Û","û","Ü","ü","Ũ","ũ","Ů","ů","Ǔ","ǔ","Ū","ū","ǖ","ǘ","ǚ","ǜ","Ŭ","ŭ","Ų","ų","Ű","ű","Ŵ","ŵ","Ý","ý","Ŷ","ŷ","Ÿ","ÿ","Ȳ","ȳ","Ź","ź","Ž","ž","Ż","ż","Æ","æ","Ǣ","ǣ","Ø","ø","Œ","œ","ß","Ð","ð","Þ","þ","Ə","ə"],"latinextended":["Ḁ","ḁ","ẚ","Ạ","ạ","Ả","ả","Ấ","ấ","Ầ","ầ","Ẩ","ẩ","Ẫ","ẫ","Ậ","ậ","Ắ","ắ","Ằ","ằ","Ẳ","ẳ","Ẵ","ẵ","Ặ","ặ","Ḃ","ḃ","Ḅ","ḅ","Ḇ","ḇ","Ḉ","ḉ","Ḋ","ḋ","Ḍ","ḍ","Ḏ","ḏ","Ḑ","ḑ","Ḓ","ḓ","Ḕ","ḕ","Ḗ","ḗ","Ḙ","ḙ","Ḛ","ḛ","Ḝ","ḝ","Ẹ","ẹ","Ẻ","ẻ","Ẽ","ẽ","Ế","ế","Ề","ề","Ể","ể","Ễ","ễ","Ệ","ệ","Ḟ","ḟ","Ḡ","ḡ","Ḣ","ḣ","Ḥ","ḥ","Ḧ","ḧ","Ḩ","ḩ","Ḫ","ḫ","ẖ","Ḭ","ḭ","Ḯ","ḯ","Ỉ","ỉ","Ị","ị","Ḱ","ḱ","Ḳ","ḳ","Ḵ","ḵ","Ḷ","ḷ","Ḹ","ḹ","Ḻ","ḻ","Ḽ","ḽ","Ỻ","ỻ","Ḿ","ḿ","Ṁ","ṁ","Ṃ","ṃ","Ṅ","ṅ","Ṇ","ṇ","Ṉ","ṉ","Ṋ","ṋ","Ṍ","ṍ","Ṏ","ṏ","Ṑ","ṑ","Ṓ","ṓ","Ọ","ọ","Ỏ","ỏ","Ố","ố","Ồ","ồ","Ổ","ổ","Ỗ","ỗ","Ộ","ộ","Ớ","ớ","Ờ","ờ","Ở","ở","Ỡ","ỡ","Ợ","ợ","Ǿ","ǿ","Ơ","ơ","Ṕ","ṕ","Ṗ","ṗ","Ṙ","ṙ","Ṛ","ṛ","Ṝ","ṝ","Ṟ","ṟ","Ṡ","ṡ","ẛ","Ṣ","ṣ","Ṥ","ṥ","Ṧ","ṧ","Ṩ","ṩ","ẜ","ẝ","Ṫ","ṫ","Ṭ","ṭ","Ṯ","ṯ","Ṱ","ṱ","ẗ","Ṳ","ṳ","Ṵ","ṵ","Ṷ","ṷ","Ṹ","ṹ","Ṻ","ṻ","Ụ","ụ","Ủ","ủ","Ứ","ứ","Ừ","ừ","Ử","ử","Ữ","ữ","Ự","ự","Ư","ư","Ǖ","Ǘ","Ǚ","Ǜ","Ṽ","ṽ","Ṿ","ṿ","Ỽ","ỽ","Ẁ","ẁ","Ẃ","ẃ","Ẅ","ẅ","Ẇ","ẇ","Ẉ","ẉ","ẘ","Ẋ","ẋ","Ẍ","ẍ","Ẏ","ẏ","ẙ","Ỳ","ỳ","Ỵ","ỵ","Ỷ","ỷ","Ỹ","ỹ","Ỿ","ỿ","Ẑ","ẑ","Ẓ","ẓ","Ẕ","ẕ","Ǽ","ǽ","ẞ","ẟ"],"ipa":["p","t̪","t","ʈ","c","k","q","ʡ","ʔ","b","d̪","d","ɖ","ɟ","ɡ","ɢ","ɓ","ɗ","ʄ","ɠ","ʛ","t͡s","t͡ʃ","t͡ɕ","d͡z","d͡ʒ","d͡ʑ","ɸ","f","θ","s","ʃ","ʅ","ʆ","ʂ","ɕ","ç","ɧ","x","χ","ħ","ʜ","h","β","v","ʍ","ð","z","ʒ","ʓ","ʐ","ʑ","ʝ","ɣ","ʁ","ʕ","ʖ","ʢ","ɦ","ɬ","ɮ","m","m̩","ɱ","ɱ̩","ɱ̍","n̪","n̪̍","n","n̩","ɳ","ɳ̩","ɲ","ɲ̩","ŋ","ŋ̍","ŋ̩","ɴ","ɴ̩","ʙ","ʙ̩","r","r̩","ʀ","ʀ̩","ɾ","ɽ","ɿ","ɺ","l̪","l̪̩","l","l̩","ɫ","ɫ̩","ɭ","ɭ̩","ʎ","ʎ̩","ʟ","ʟ̩","w","ɥ","ʋ","ɹ","ɻ","j","ɰ","ʘ","ǂ","ǀ","!","ǁ","ʰ","ʱ","ʷ","ʸ","ʲ","ʳ","ⁿ","ˡ","ʴ","ʵ","ˢ","ˣ","ˠ","ʶ","ˤ","ˁ","ˀ","ʼ","i","i̯","ĩ","y","y̯","ỹ","ɪ","ɪ̯","ɪ̃","ʏ","ʏ̯","ʏ̃","ɨ","ɨ̯","ɨ̃","ʉ","ʉ̯","ʉ̃","ɯ","ɯ̯","ɯ̃","u","u̯","ũ","ʊ","ʊ̯","ʊ̃","e","e̯","ẽ","ø","ø̯","ø̃","ɘ","ɘ̯","ɘ̃","ɵ","ɵ̯","ɵ̃","ɤ","ɤ̯","ɤ̃","o","o̯","õ","ɛ","ɛ̯","ɛ̃","œ","œ̯","œ̃","ɜ","ɜ̯","ɜ̃","ə","ə̯","ə̃","ɞ","ɞ̯","ɞ̃","ʌ","ʌ̯","ʌ̃","ɔ","ɔ̯","ɔ̃","æ","æ̯","æ̃","ɶ","ɶ̯","ɶ̃","a","a̯","ã","ɐ","ɐ̯","ɐ̃","ɑ","ɑ̯","ɑ̃","ɒ","ɒ̯","ɒ̃","ˈ","ˌ","ː","ˑ","˘",".","‿","|","‖","ɚ","ɝ"],"symbols":["~","|","¡","¿","†","‡","↔","↑","↓","•","¶","#","½","⅓","⅔","¼","¾","⅛","⅜","⅝","⅞","∞","‘","’","¤","₳","฿","₵","¢","₡","₢","$","₫","₯","€","₠","₣","ƒ","₴","₭","₤","ℳ","₥","₦","№","₧","₰","£","៛","₨","₪","৳","₮","₩","¥","♠","♣","♥","♦","m²","m³","…","‘","’","“","”","°","′","″","≈","≠","≤","≥","±","×","÷","←","→","·","§","‽"],"greek":["Α","Ά","α","ά","Β","β","Γ","γ","Δ","δ","Ε","Έ","ε","έ","Ζ","ζ","Η","Ή","η","ή","Θ","θ","Ι","Ί","ι","ί","Κ","κ","Λ","λ","Μ","μ","Ν","ν","Ξ","ξ","Ο","Ό","ο","ό","Π","π","Ρ","ρ","Σ","σ","ς","Τ","τ","Υ","Ύ","υ","ύ","Φ","φ","Χ","χ","Ψ","ψ","Ω","Ώ","ω","ώ"],"cyrillic":["А","а","Ӑ","ӑ","Ӓ","ӓ","Ә","ә","Ӛ","ӛ","Б","б","В","в","Г","г","Ґ","ґ","Ӷ","ӷ","Ѓ","ѓ","Ӻ","ӻ","Ғ","ғ","Ҕ","ҕ","Д","д","Ԁ","ԁ","Ԃ","ԃ","Ђ","ђ","Е","е","Ѐ","ѐ","Є","є","Ё","ё","Ӗ","ӗ","Ҽ","ҽ","Ҿ","ҿ","Ж","ж","Җ","җ","Ӂ","ӂ","Ӝ","ӝ","З","з","Ҙ","ҙ","Ӟ","ӟ","Ԑ","ԑ","Ӡ","ӡ","Ѕ","ѕ","Ԅ","ԅ","Ԇ","ԇ","И","и","І","і","Ї","ї","Й","й","Ӣ","ӣ","Ѝ","ѝ","Ҋ","ҋ","Ӥ","ӥ","Ј","ј","К","к","Ќ","ќ","Қ","қ","Ҝ","ҝ","Ҟ","ҟ","Ҡ","ҡ","Ӄ","ӄ","Ԛ","ԛ","Л","л","Љ","љ","Ԉ","ԉ","Ԓ","ԓ","Ӆ","ӆ","М","м","Ӎ","ӎ","Н","н","Њ","њ","Ң","ң","Ҥ","ҥ","Ӈ","ӈ","Ԋ","ԋ","Ӊ","ӊ","О","о","Ҩ","ҩ","Ӧ","ӧ","Ө","ө","Ӫ","ӫ","П","п","Ԥ","ԥ","Ҧ","ҧ","Р","р","Ҏ","ҏ","С","с","Ҫ","ҫ","Т","т","Ћ","ћ","Ԍ","ԍ","Ҭ","ҭ","Ԏ","ԏ","У","у","Ў","ў","Ӯ","ӯ","Ӱ","ӱ","Ӳ","ӳ","Ү","ү","Ұ","ұ","Ф","ф","Х","х","Ҳ","ҳ","Ӽ","ӽ","Ӿ","ӿ","Һ","һ","Ц","ц","Ч","ч","Ҵ","ҵ","Ҷ","ҷ","Ҹ","ҹ","Ӌ","ӌ","Ӵ","ӵ","Џ","џ","Ш","ш","Щ","щ","Ъ","ъ","Ы","ы","Ӹ","ӹ","Ь","ь","Ҍ","ҍ","Э","э","Ӭ","ӭ","Ю","ю","Я","я","Ԝ","ԝ","Ѡ","ѡ","Ѣ","ѣ","Ѥ","ѥ","Ѧ","ѧ","Ѩ","ѩ","Ѫ","ѫ","Ѭ","ѭ","Ѯ","ѯ","Ѱ","ѱ","Ѳ","ѳ","Ѵ","ѵ","Ѷ","ѷ","Ѹ","ѹ","Ѻ","ѻ","Ѽ","ѽ","Ѿ","ѿ","Ҁ","ҁ"],"arabic":["ا","ب","ت","ث","ج","ح","خ","د","ذ","ر","ز","س","ش","ص","ض","ط","ظ","ع","غ","ف","ق","ك","ل","م","ن","ه","و","ي","ء","آ","أ","إ","ٱ","ؤ","ئ","ى","ة","َ","ُ","ِ","ً","ٌ","ٍ","ّ","ْ","ٰ","،","؛","؟","ـ","٠","١","٢","٣","٤","٥","٦","٧","٨","٩","٪","٫","٬","٭"],"arabicextended":["ٲ","ٳ","ٴ","ٵ","ݳ","ݴ","ٮ","ٻ","پ","ڀ","ݐ","ݑ","ݒ","ݓ","ݔ","ݕ","ݖ","ٹ","ٺ","ټ","ٽ","ٿ","ځ","ڂ","ڃ","ڄ","څ","چ","ڇ","ڿ","ݗ","ݘ","ݮ","ݯ","ݲ","ݼ","ڈ","ډ","ڊ","ڋ","ڌ","ڍ","ڎ","ڏ","ڐ","ۮ","ݙ","ݚ","ڑ","ڒ","ړ","ڔ","ڕ","ږ","ڗ","ژ","ڙ","ۯ","ݛ","ݫ","ݬ","ݱ","ښ","ڛ","ڜ","ݽ","ۺ","ݜ","ݭ","ݰ","ݾ","ڝ","ڞ","ۻ","ڟ","ڠ","ݝ","ݞ","ݟ","ۼ","ڡ","ڢ","ڣ","ڤ","ڥ","ڦ","ݠ","ݡ","ٯ","ڧ","ڨ","ػ","ؼ","ک","ڪ","ګ","ڬ","ڭ","ڮ","گ","ڰ","ڱ","ڲ","ڳ","ڴ","ݢ","ݣ","ݤ","ݿ","ڵ","ڶ","ڷ","ڸ","ݪ","ݥ","ݦ","ڹ","ں","ڻ","ڼ","ڽ","ݧ","ݨ","ݩ","ھ","ۀ","ہ","ۂ","ۃ","ە","ۿ","ٶ","ٷ","ۄ","ۅ","ۆ","ۇ","ۈ","ۉ","ۊ","ۋ","ۏ","ݸ","ݹ","ؠ","ؽ","ؾ","ؿ","ٸ","ی","ۍ","ێ","ې","ۑ","ے","ۓ","ݵ","ݶ","ݷ","ݺ","ݻ","ٖ","ٗ","٘","ٙ","ٚ","ٛ","ٜ","ٝ","ٞ","ٟ","۔","۽","۾","۰","۱","۲","۳","۴","۵","۶","۷","۸","۹"],"hebrew":["א","ב","ג","ד","ה","ו","ז","ח","ט","י","כ","ך","ל","מ","ם","נ","ן","ס","ע","פ","ף","צ","ץ","ק","ר","ש","ת","װ","ױ","ײ","׳","״","־","–"],"bangla":["অ","আ","ই","ঈ","উ","ঊ","ঋ","এ","ঐ","ও","ঔ","া","ি","ী","ু","ূ","ৃ","ে","ৈ","ো","ৌ","ক","খ","গ","ঘ","ঙ","চ","ছ","জ","ঝ","ঞ","ট","ঠ","ড","ঢ","ণ","ত","থ","দ","ধ","ন","প","ফ","ব","ভ","ম","য","র","ল","শ","ষ","স","হ","ড়","ঢ়","য়","ৎ","ং","ঃ","ঁ","্","১","২","৩","৪","৫","৬","৭","৮","৯","০"],"tamil":["௦","௧","௨","௩","௪","௫","௬","௭","௮","௯","௰","௱","௲","௳","௴","௵","௶","௷","௸","௹","௺","ௐ"],"telugu":["ఁ","ం","ః","అ","ఆ","ఇ","ఈ","ఉ","ఊ","ఋ","ౠ","ఌ","ౡ","ఎ","ఏ","ఐ","ఒ","ఓ","ఔ","క","ఖ","గ","ఘ","ఙ","చ","ఛ","జ","ఝ","ఞ","ట","ఠ","డ","ఢ","ణ","త","థ","ద","ధ","న","ప","ఫ","బ","భ","మ","య","ర","ఱ","ల","ళ","వ","శ","ష","స","హ","ా","ి","ీ","ు","ూ","ృ","ౄ","ె","ే","ై","ొ","ో","ౌ","్","ౢ","ౣ","ౘ","ౙ","౦","౧","౨","౩","౪","౫","౬","౭","౮","౯","ఽ","౸","౹","౺","౻","౼","౽","౾","౿"],"sinhala":["අ","ආ","ඇ","ඈ","ඉ","ඊ","උ","ඌ","ඍ","ඎ","ඏ","ඐ","එ","ඒ","ඓ","ඔ","ඕ","ඖ","ක","ඛ","ග","ඝ","ඞ","ඟ","ච","ඡ","ජ","ඣ","ඤ","ඥ","ඦ","ට","ඨ","ඩ","ඪ","ණ","ඬ","ත","ථ","ද","ධ","න","ඳ","ප","ඵ","බ","භ","ම","ඹ","ය","ර","ල","ව","ශ","ෂ","ස","හ","ළ","ෆ"],"devanagari":["ऀ","ँ","ं","ः","ऄ","अ","आ","इ","ई","उ","ऊ","ऋ","ऌ","ऍ","ऎ","ए","ऐ","ऑ","ऒ","ओ","औ","क","ख","ग","घ","ङ","च","छ","ज","झ","ञ","ट","ठ","ड","ढ","ण","त","थ","द","ध","न","ऩ","प","फ","ब","भ","म","य","र","ऱ","ल","ळ","ऴ","व","श","ष","स","ह","ऺ","ऻ","़","ऽ","ा","ि","ी","ु","ू","ृ","ॄ","ॅ","ॆ","े","ै","ॉ","ॊ","ो","ौ","्","ॎ","ॏ","ॐ","॑","॒","॓","॔","ॕ","ॖ","ॗ","क़","ख़","ग़","ज़","ड़","ढ़","फ़","य़","ॠ","ॡ","ॢ","ॣ","।","॥","०","१","२","३","४","५","६","७","८","९","॰","ॱ","ॲ","ॳ","ॴ","ॵ","ॶ","ॷ","ॹ","ॺ","ॻ","ॼ","ॽ","ॾ","ॿ"],"gujarati":["ૐ","ઁ","ં","ઃ","અ","આ","ઇ","ઈ","ઉ","ઊ","એ","ઐ","ઓ","ઔ","અં","ઋ","ઍ","ઑ","ઌ","ૠ","ૡ","ક","ખ","ગ","ઘ","ઙ","ચ","છ","જ","ઝ","ઞ","ટ","ઠ","ડ","ઢ","ણ","ત","થ","દ","ધ","ન","પ","ફ","બ","ભ","મ","ય","ર","લ","ળ","વ","શ","ષ","સ","હ","ક્ષ","જ્ઞ","ઽ","ા","િ","ી","ી","ુ","ૂ","ૃ","ૄ","ૅ","ે","ૈ","ૉ","ો","ૌ","ૢ","ૣ","્","૦","૧","૨","૩","૪","૫","૬","૭","૮","૯","૱"],"thai":["ก","ข","ฃ","ค","ฅ","ฆ","ง","จ","ฉ","ช","ซ","ฌ","ญ","ฎ","ฏ","ฐ","ฑ","ฒ","ณ","ด","ต","ถ","ท","ธ","น","บ","ป","ผ","ฝ","พ","ฟ","ภ","ม","ย","ร","ฤ","ล","ฦ","ว","ศ","ษ","ส","ห","ฬ","อ","ฮ","ะ","ั","า","ๅ","ำ","ิ","ี","ึ","ื","ุ","ู","เ","แ","โ","ใ","ไ","็","่","้","๊","๋","์","ํ","ฺ","๎","๐","๑","๒","๓","๔","๕","๖","๗","๘","๙","฿","ๆ","ฯ","๚","๏","๛"],"lao":["ກ","ຂ","ຄ","ງ","ຈ","ສ","ຊ","ຍ","ດ","ຕ","ຖ","ທ","ນ","ບ","ປ","ຜ","ຝ","ພ","ຟ","ມ","ຢ","ລ","ວ","ຫ","ອ","ຮ","ຣ","ໜ","ໝ","ຼ","ຽ","ະ","ັ","າ","ຳ","ິ","ີ","ຶ","ື","ຸ","ູ","ົ","ເ","ແ","ໂ","ໃ","ໄ","່","້","໊","໋","໌","ໍ","໐","໑","໒","໓","໔","໕","໖","໗","໘","໙","₭","ໆ","ຯ"],"khmer":["ក","ខ","គ","ឃ","ង","ច","ឆ","ជ","ឈ","ញ","ដ","ឋ","ឌ","ឍ","ណ","ត","ថ","ទ","ធ","ន","ប","ផ","ព","ភ","ម","យ","រ","ល","វ","ស","ហ","ឡ","អ","ឣ","ឤ","ឥ","ឦ","ឧ","ឨ","ឩ","ឪ","ឫ","ឬ","ឭ","ឮ","ឯ","ឰ","ឱ","ឲ","ឳ","្","឴","឵","ា","ិ","ី","ឹ","ឺ","ុ","ូ","ួ","ើ","ឿ","ៀ","េ","ែ","ៃ","ោ","ៅ","ំ","ះ","ៈ","៉","៊","់","៌","៍","៎","៏","័","៑","៓","៝","ៜ","០","១","២","៣","៤","៥","៦","៧","៨","៩","៛","។","៕","៖","ៗ","៘","៙","៚","៰","៱","៲","៳","៴","៵","៶","៷","៸","៹","᧠","᧡","᧢","᧣","᧤","᧥","᧦","᧧","᧨","᧩","᧪","᧫","᧬","᧭","᧮","᧯","᧰","᧱","᧲","᧳","᧴","᧵","᧶","᧷","᧸","᧹","᧺","᧻","᧼","᧽","᧾","᧿"]}
\ No newline at end of file
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWSpecialCharacterDialog.js 
b/modules/ve-mw/ui/dialogs/ve.ui.MWSpecialCharacterDialog.js
new file mode 100644
index 0000000..c8acac9
--- /dev/null
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWSpecialCharacterDialog.js
@@ -0,0 +1,57 @@
+/*!
+ * VisualEditor user interface MWSpecialCharacterDialog class.
+ *
+ * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+/**
+ * Dialog for inserting special characters.
+ *
+ * @class
+ * @extends ve.ui.SpecialCharacterDialog
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+ve.ui.MWSpecialCharacterDialog = function VeUiMWSpecialCharacterDialog( config 
) {
+       // Parent constructor
+       ve.ui.MWSpecialCharacterDialog.super.call( this, config );
+};
+
+/* Inheritance */
+
+OO.inheritClass( ve.ui.MWSpecialCharacterDialog, ve.ui.SpecialCharacterDialog 
);
+
+/* Static properties */
+
+ve.ui.SpecialCharacterDialog.static.name = 'mwSpecialCharacter';
+
+/* Methods */
+
+/**
+ * Fetch the special character list object
+ *
+ * Returns a promise which resolves when this.characters has been populated
+ *
+ * @returns {jQuery.Promise}
+ */
+ve.ui.MWSpecialCharacterDialog.prototype.fetchCharList = function () {
+       var dialog = this,
+               groupObject;
+       dialog.characters = {};
+       $.each( ve.init.platform.specialCharacters, function ( groupName, 
groupCharacters ) {
+               groupObject = {};
+               $.each( groupCharacters, function ( charKey, charVal ) {
+                       groupObject[charVal] = charVal;
+               } );
+               dialog.characters[mw.msg( 'wikieditor-toolbar-characters-page-' 
+ groupName )] = groupObject;
+       } );
+
+       // This implementation always resolves instantly
+       return $.Deferred().resolve().promise();
+};
+
+/* Registration */
+
+ve.ui.windowFactory.register( ve.ui.MWSpecialCharacterDialog );
diff --git a/modules/ve-mw/ui/tools/ve.ui.MWSpecialCharacterDialogTool.js 
b/modules/ve-mw/ui/tools/ve.ui.MWSpecialCharacterDialogTool.js
new file mode 100644
index 0000000..d2af9bc
--- /dev/null
+++ b/modules/ve-mw/ui/tools/ve.ui.MWSpecialCharacterDialogTool.js
@@ -0,0 +1,24 @@
+/*!
+ * VisualEditor UserInterface MediaWiki SpecialCharacterDialogTool classes.
+ *
+ * @copyright 2011-2015 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+/**
+ * Special character tool.
+ *
+ * @class
+ * @extends ve.ui.SpecialCharacterDialogTool
+ * @constructor
+ * @param {OO.ui.ToolGroup} toolGroup
+ * @param {Object} [config] Configuration options
+ */
+ve.ui.MWSpecialCharacterDialogTool = function VeUiSpecialCharacterDialogTool() 
{
+       ve.ui.MWSpecialCharacterDialogTool.super.apply( this, arguments );
+};
+OO.inheritClass( ve.ui.MWSpecialCharacterDialogTool, 
ve.ui.SpecialCharacterDialogTool );
+ve.ui.MWSpecialCharacterDialogTool.static.name = 'mwSpecialCharacter';
+ve.ui.MWSpecialCharacterDialogTool.static.commandName = 'mwSpecialCharacter';
+ve.ui.MWSpecialCharacterDialogTool.static.activeWindow = 'mwSpecialCharacter';
+ve.ui.toolFactory.register( ve.ui.MWSpecialCharacterDialogTool );
diff --git a/modules/ve-mw/ui/ve.ui.MWCommandRegistry.js 
b/modules/ve-mw/ui/ve.ui.MWCommandRegistry.js
index 71bc6fe..4d6d21e 100644
--- a/modules/ve-mw/ui/ve.ui.MWCommandRegistry.js
+++ b/modules/ve-mw/ui/ve.ui.MWCommandRegistry.js
@@ -134,3 +134,9 @@
                }
        )
 );
+ve.ui.commandRegistry.register(
+       new ve.ui.Command(
+               'mwSpecialCharacter', 'window', 'toggle',
+               { args: ['mwSpecialCharacter'], supportedSelections: ['linear'] 
}
+       )
+);
\ No newline at end of file

-- 
To view, visit https://gerrit.wikimedia.org/r/197357
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3fafc561ceae969e4ecc12881154cd8a3568bebb
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Alex Monk <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to