Pastakhov has uploaded a new change for review.

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

Change subject: refactor css style, move it to own definition (v 2.1.0)
......................................................................

refactor css style, move it to own definition (v 2.1.0)

*add highlighting list and indenting
*add tags: <noinclude>, <includeonly>, <onlyinclude>
*modify highlighting template variable

Change-Id: If6ae7d127766c32bc7e3c10b226a74ec97a0848f
---
M CodeMirror.php
M resources/ext.CodeMirror.js
M resources/lib/codemirror/lib/codemirror.css
M resources/mode/mediawiki/mediawiki.css
M resources/mode/mediawiki/mediawiki.js
5 files changed, 127 insertions(+), 60 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/CodeMirror 
refs/changes/06/159306/1

diff --git a/CodeMirror.php b/CodeMirror.php
index 4b7ae74..c6673d6 100644
--- a/CodeMirror.php
+++ b/CodeMirror.php
@@ -15,7 +15,7 @@
        die( 'This file is an extension to MediaWiki and thus not a valid entry 
point.' );
 }
 
-const EXT_CODEMIRROR_VERSION = '2.0.1';
+const EXT_CODEMIRROR_VERSION = '2.1.0';
 
 // Register this extension on Special:Version
 $wgExtensionCredits['parserhook'][] = array(
diff --git a/resources/ext.CodeMirror.js b/resources/ext.CodeMirror.js
index aadb9b5..3b33edd 100644
--- a/resources/ext.CodeMirror.js
+++ b/resources/ext.CodeMirror.js
@@ -14,6 +14,11 @@
                        //autoCloseBrackets: true,
                        mode: 'text/mediawiki'
                } );
+
+       if ( !codeMirror ) {
+               return;
+       }
+
        codeMirror.setSize( null, textbox1.height() );
 
        // Replace jquery.textSelection.js
diff --git a/resources/lib/codemirror/lib/codemirror.css 
b/resources/lib/codemirror/lib/codemirror.css
index beaad4b..43e819d 100644
--- a/resources/lib/codemirror/lib/codemirror.css
+++ b/resources/lib/codemirror/lib/codemirror.css
@@ -5,7 +5,7 @@
   font-family: monospace;
   height: 300px;
   border: 1px solid #CCC;
-  font-size: 1.1em;
+  font-size: 1.16em;
 }
 .CodeMirror-scroll {
   /* Set scrolling behaviour here */
diff --git a/resources/mode/mediawiki/mediawiki.css 
b/resources/mode/mediawiki/mediawiki.css
index 6e534a4..60c9bf1 100644
--- a/resources/mode/mediawiki/mediawiki.css
+++ b/resources/mode/mediawiki/mediawiki.css
@@ -2,6 +2,45 @@
        text-decoration: underline;
 }
 
-.cm-mw-skipformatting {
+.cm-s-default .cm-mw-skipformatting {
        background-color: #CCC;
 }
+.cm-s-default .cm-mw-list {font-weight: bold; background-color: #eee;}
+.cm-s-default .cm-mw-indenting {font-weight: bold; background-color: #ddd;}
+.cm-s-default .cm-mw-mnemonic {color: #040;}
+.cm-s-default .cm-mw-comment {color: #aaa;}
+
+.cm-s-default .cm-mw-templatepage {color: #a11;}
+.cm-s-default .cm-mw-templatepage-name {color: #a11; font-weight: bold; 
text-decoration: underline;}
+.cm-s-default .cm-mw-templatepage-name-mnemonic {text-decoration: underline;}
+.cm-s-default .cm-mw-templatepage-argument-name {color: #a11; font-weight: 
bold;}
+.cm-s-default .cm-mw-templatepage-delimiter {color: #a11; font-weight: bold;}
+.cm-s-default .cm-mw-templatepage-bracket {color: #a11; font-weight: bold;}
+
+.cm-s-default .cm-mw-templatevariable {color: #f50;}
+.cm-s-default .cm-mw-templatevariable-name {color: #f50; font-weight: bold;}
+.cm-s-default .cm-mw-templatevariable-bracket {color: #f50;}
+.cm-s-default .cm-mw-templatevariable-delimiter {color: #f50; font-weight: 
bold;}
+
+.cm-s-default .cm-mw-parserfunction {color: #e0e;}
+.cm-s-default .cm-mw-parserfunction-name {color: #70a; font-weight: bold;}
+.cm-s-default .cm-mw-parserfunction-bracket {color: #70a; font-weight: bold;}
+.cm-s-default .cm-mw-parserfunction-delimiter {color: #70a; font-weight: bold;}
+
+.cm-s-default .cm-mw-tagext {color: #e0e;}
+.cm-s-default .cm-mw-tagext-name {color: #70a; font-weight: bold;}
+.cm-s-default .cm-mw-tagext-bracket {color: #70a;}
+
+.cm-s-default .cm-mw-tag-name {color: #170; font-weight: bold;}
+.cm-s-default .cm-mw-tag-bracket {color: #170;}
+.cm-s-default .cm-mw-tag-attribute {color: #170; }
+.cm-s-default .cm-mw-tag-pre {color: #444;}
+.cm-s-default .cm-mw-tag-nowiki {color: #e0e;}
+
+.cm-s-default .cm-mw-link-pagename {color: #219; font-weight: bold;}
+.cm-s-default .cm-mw-link-tosection {color: #219;}
+.cm-s-default .cm-mw-link-bracket {color: #219;}
+.cm-s-default .cm-mw-link-delimiter {color: #219; font-weight: bold;}
+
+.cm-s-default .cm-mw-extlink {color: #219;}
+.cm-s-default .cm-mw-extlink-bracket {color: #219; font-weight: bold;}
diff --git a/resources/mode/mediawiki/mediawiki.js 
b/resources/mode/mediawiki/mediawiki.js
index a4d348d..48b6b74 100644
--- a/resources/mode/mediawiki/mediawiki.js
+++ b/resources/mode/mediawiki/mediawiki.js
@@ -18,7 +18,8 @@
                                'strike', 'strong', 'tt', 'var', 'div', 
'center',
                                'blockquote', 'ol', 'ul', 'dl', 'table', 
'caption', 'pre',
                                'ruby', 'rb', 'rp', 'rt', 'rtc', 'p', 'span', 
'abbr', 'dfn',
-                               'kbd', 'samp', 'data', 'time', 'mark', 'br', 
'wbr', 'hr', 'li', 'dt', 'dd', 'td', 'th', 'tr'];
+                               'kbd', 'samp', 'data', 'time', 'mark', 'br', 
'wbr', 'hr', 'li', 'dt', 'dd', 'td', 'th', 'tr',
+                               'noinclude', 'includeonly', 'onlyinclude'];
 
        function inWikitext( stream, state ) {
                function chain( parser ) {
@@ -40,21 +41,21 @@
                                        state.ImInBlock.pop(); //FIXME: it is 
wrong Link
                                        return null;
                                } else if ( stream.eatWhile( 
/[^#\s\u00a0\|\]\{\}\&]/ ) ) { //FIXME '{{' brokes Link, sample [[z{{page]]
-                                       return 'attribute mw-underline';
+                                       return 'mw-link-pagename mw-underline';
                                } else if ( stream.peek() === '&' ) { // check 
for character entity references
-                                       style = ['attribute', 'mw-underline'];
+                                       style = ['mw-link', 'mw-underline'];
                                        mnemonicStyle = ['mw-underline'];
                                } else if ( stream.eat( '#' ) ) {
                                        state.ImInBlock.push( 'LinkToSection' );
-                                       return 'attribute strong';
+                                       return 'mw-link';
                                } else if ( stream.eat( '|' ) ) {
                                        stream.eatSpace();
                                        state.ImInBlock.pop();
                                        state.ImInBlock.push( 'LinkText' );
-                                       return 'attribute strong';
+                                       return 'mw-link-delimiter';
                                } else if ( stream.eatSpace() ) {
                                        if ( /[^#\|\]]/.test( stream.peek() ) ) 
{
-                                               return 'attribute mw-underline 
strong';
+                                               return 'mw-link-pagename 
mw-underline';
                                        }
                                        return null;
                                } else if ( stream.match( ']]' ) ) {
@@ -62,7 +63,7 @@
 //                                     if ( !stream.eatSpace() ) {
 //                                             state.ImInBlock.push( 
'LinkTrail' );
 //                                     }
-                                       return 'attribute';
+                                       return 'mw-link-bracket';
                                }
                                break;
                        case 'LinkToSection':
@@ -73,12 +74,12 @@
                                }
                                if ( stream.eatWhile( /[^\|\]\{\}\&]/ ) ) { 
//FIXME '{{' brokes Link, sample [[z{{page]]
                                        mustEat = false;
-                                       style = ['attribute'];
+                                       style = ['mw-link-tosection'];
                                } else if ( stream.peek() === '&' ) {
-                                       style = ['attribute'];
+                                       style = ['mw-link-tosection'];
                                } else {
                                        state.ImInBlock.pop();
-                                       return 'attribute';
+                                       return 'mw-link-tosection';
                                }
                                break;
                        case 'LinkText':
@@ -88,7 +89,7 @@
 //                                     if ( !stream.eatSpace() ) {
 //                                             state.ImInBlock.push( 
'LinkTrail' );
 //                                     }
-                                       return 'attribute';
+                                       return 'mw-link-bracket';
                                }
 
                                if ( stream.eatWhile( /[^\]\s\u00a0\&\}\[\]\{]/ 
) ) {
@@ -108,91 +109,99 @@
 //                             break;
                        case 'TemplatePageName':
                                if ( stream.match( 
/[\s\u00a0]*[^\s\u00a0\}\|<\{\&]/ ) ) {
-                                       return 'attribute strong mw-underline';
+                                       return 'mw-templatepage-name';
                                }
                                if ( stream.eat( '|' ) ) {
                                        state.ImInBlock.pop();
                                        state.ImInBlock.push( 
'TemplateArgument' );
                                        state.bTempArgName = true;
                                        stream.eatSpace();
-                                       return 'attribute strong';
+                                       return 'mw-templatepage-delimiter';
                                }
                                if ( stream.match( '}}' ) ) {
                                        state.ImInBlock.pop();
-                                       return 'attribute';
+                                       return 'mw-templatepage-bracket';
                                }
                                if ( stream.peek() === '&' ) {
-                                       style = ['attribute', 'strong', 
'mw-underline'];
-                                       mnemonicStyle = ['mw-underline'];
+                                       style = ['mw-templatepage-name'];
+                                       mnemonicStyle = 
['mw-templatepage-name-mnemonic'];
                                } else if ( stream.match( /[\s\u00a0]*&/ ) ) { 
// {{ PAGE & NAME }}
                                        stream.backUp(1);
-                                       return 'attribute strong mw-underline';
+                                       return 'mw-templatepage-name';
                                }
                                break;
                        case 'TemplateArgument':
                                if ( state.bTempArgName && stream.eatWhile( 
/[^=\[\]\}\|<\{\&]/ ) ) {
                                        state.bTempArgName = false;
                                        if ( stream.eat( '=' ) ) {
-                                               return 'string strong';
+                                               return 
'mw-templatepage-argument-name';
                                        }
-                                       return 'string';
+                                       return 'mw-templatepage';
                                } else if ( stream.eatWhile( /[^\[\]\}\|<\{\&]/ 
) ) {
-                                       return 'string';
+                                       return 'mw-templatepage';
                                } else if ( stream.eat( '|' ) ) {
                                        state.bTempArgName = true;
-                                       return 'attribute strong';
+                                       return 'mw-templatepage-delimiter';
                                } else if ( stream.match( '}}' ) ) {
                                        state.ImInBlock.pop();
-                                       return 'attribute';
+                                       return 'mw-templatepage-bracket';
                                }
-                               style.push( 'string' );
+                               style.push( 'mw-templatepage' );
                                break;
                        case 'TemplateVariable':
                                if ( stream.eatWhile( /[^\}\[\]<\{\|\&]/ ) ) {
-                                       return 'variable-2';
+                                       return 'mw-templatevariable-name';
                                }
+                               if ( stream.eat('|') ) {
+                                       state.ImInBlock.pop();
+                                       state.ImInBlock.push( 
'TemplateVariableDefault' );
+                                       return 'mw-templatevariable-delimiter';
+                               }
+                               // break is not necessary here
+                               /*falls through*/
+                       case 'TemplateVariableDefault':
                                if ( stream.match( '}}}' ) ) {
                                        state.ImInBlock.pop();
-                                       return 'variable-2';
+                                       return 'mw-templatevariable-bracket';
                                }
-                               style = ['variable-2'];
+                               style = ['mw-templatevariable'];
                                break;
                        case 'ParserFunctionName':
                                if ( stream.match( 
/#?[^\s\u00a0\}\[\]<\{\'\|\&\:]+/ ) ) { // FIXME: {{#name}} and and {{uc}} are 
wrong, must have ':'
-                                       return 'keyword strong';
+                                       return 'mw-parserfunction-name';
                                }
                                if ( stream.eat( ':' ) ) {
                                        state.ImInBlock.pop();
                                        state.ImInBlock.push( 
'ParserFunctionArgument' );
-                                       return 'keyword strong';
+                                       return 'mw-parserfunction-delimiter';
                                }
                                if ( stream.match( /[\s\u00a0]*\}\}/ ) ) {
                                        state.ImInBlock.pop();
-                                       return 'keyword';
+                                       return 'mw-parserfunction-bracket';
                                }
-                               style = ['keyword'];
+                               style = ['mw-parserfunction'];
                                break;
                        case 'ParserFunctionArgument':
                                if ( stream.eatWhile( /[^\[\]\}\|<\{\&]/ ) ) {
-                                       return 'string-2';
+                                       return 'mw-parserfunction';
                                } else if ( stream.eat( '|' ) ) {
-                                       return 'keyword strong';
+                                       return 'mw-parserfunction-delimiter';
                                } else if ( stream.match( '}}' ) ) {
                                        state.ImInBlock.pop();
-                                       return 'keyword';
+                                       return 'mw-parserfunction-bracket';
                                }
-                               style.push( 'string-2' );
+                               style.push( 'mw-parserfunction' );
                                break;
                        case 'TagName':
-                               name = stream.match( /[^>\/\s\u00a0]*/ 
)[0].toLowerCase();
+                               name = stream.match( /[^>\/\|\s\u00a0]*/ 
)[0].toLowerCase();
                                state.ImInBlock.pop();
                                state.ImInBlock.push( 'TagAttribute' );
                                if ( config.mwextTags.indexOf( name ) >= 0 ) {
                                        state.ImInTag.push( name );
-                                       return 'keyword';
+                                       return 'mw-tagext-name';
                                }
                                state.ImInTag.push( null );
-                               return 'tag';
+                               return 'mw-tag-name';
                        case 'TagAttribute':
                                var attributName = stream.eatWhile( 
/[^>\/\s\u00a0<\{\&]/ );
                                if ( attributName ) {
@@ -200,19 +209,21 @@
 //                                     if ( stream.eat( '=' ) ) {
 //                                             //state.tokenize = 
inTagAttributeValue( attributName );
 //                                     }
-                                       return 'attribute';
+                                       return 'mw-tag-attribute';
                                }
                                if ( stream.match( '/>') ) {
                                        state.ImInBlock.pop();
-                                       return 'tag bracket';
+                                       return 'mw-tag-bracket';
                                }
                                if ( stream.eat( '>' ) ) {
                                        state.ImInBlock.pop();
                                        if ( state.ImInTag[ 
state.ImInTag.length - 1 ] ) {
                                                state.ImInBlock.push( 
'InsideTag' );
+                                               return 'mw-tagext-bracket';
                                        }
-                                       return 'tag bracket';
+                                       return 'mw-tag-bracket';
                                }
+                               style = ['mw-tag-attribute'];
                                break;
                        case 'TagClose':
                                state.ImInBlock.pop();
@@ -223,20 +234,22 @@
                                        if ( /[>]/.test( stream.peek() ) ) {
                                                state.ImInBlock.push( 
'TagCloseEnd' );
                                        }
-                                       return config.mwextTags.indexOf( name ) 
>= 0 ? 'keyword' : 'tag';
+                                       return config.mwextTags.indexOf( name ) 
>= 0 ? 'mw-tagext-name' : 'mw-tag-name';
                                }
                                break;
                        case 'TagCloseEnd':
                                if ( stream.eat( '>' ) ) {
                                        state.ImInBlock.pop();
-                                       state.ImInTag.pop();
-                                       return 'tag bracket';
+                                       if ( state.ImInTag.pop() ) {
+                                               return 'mw-tagext-bracket';
+                                       }
+                                       return 'mw-tag-bracket';
                                }
                                return 'error';
                        case 'InsideTag':
                                var tag = state.ImInTag[ state.ImInTag.length - 
1 ];
                                if ( tag === 'pre' || tag === 'nowiki' ) {
-                                       var st = tag === 'pre' ? 'qualifier' : 
'';
+                                       var st = tag === 'pre' ? 'mw-tag-pre' : 
'mw-tag-nowiki';
                                        if ( stream.eatWhile( /[^&<]/ ) ) {
                                                return st;
                                        } else if ( stream.peek() === '&' ) {
@@ -254,7 +267,7 @@
                                        }
                                } else {
                                        if ( stream.eatWhile( /[^<]/ ) ) {
-                                               return 'string-2';
+                                               return 'mw-tagext';
                                        } else {
                                                re = new RegExp( '</' + tag + 
'\\s*>', 'i' );
                                                mt = stream.match( re );
@@ -263,7 +276,7 @@
                                                        state.ImInBlock.pop();
                                                } else {
                                                        stream.next();
-                                                       return 'string-2';
+                                                       return 'mw-tagext';
                                                }
                                        }
                                }
@@ -274,6 +287,12 @@
                                        state.isItalic = false;
                                        if ( stream.eat( ' ' ) ) {
                                                return 'mw-skipformatting';
+                                       }
+                                       if ( stream.match( /[\*#]+:*/ ) ) {
+                                               return 'mw-list';
+                                       }
+                                       if ( stream.match( /:+[\*#]*/ ) ) {
+                                               return 'mw-indenting';
                                        }
                                }
                                if ( stream.peek() === '\'' ) {
@@ -307,7 +326,7 @@
                                ok = stream.eatWhile( /[\w\.\-:]/ ) && 
stream.eat( ';' );
                        }
                        if ( ok ) {
-                               mnemonicStyle.push( 'atom' );
+                               mnemonicStyle.push( 'mw-mnemonic' );
                                return mnemonicStyle.join(' ');
                        }
                } else {
@@ -317,11 +336,11 @@
                                        if ( stream.match( '{{' ) ) { // 
Variable
                                                stream.eatSpace();
                                                state.ImInBlock.push( 
'TemplateVariable' );
-                                               return 'variable-2';
+                                               return 
'mw-templatevariable-bracket';
                                        } else if ( stream.match( 
/\{[\s\u00a0]*/ ) ) {
                                                if ( stream.peek() === '#' ) { 
// Parser function
                                                        state.ImInBlock.push( 
'ParserFunctionName' );
-                                                       return 'keyword';
+                                                       return 
'mw-parserfunction-bracket';
                                                }
                                                // Check for parser function 
without '#'
                                                name = stream.match( 
/([^\s\u00a0\}\[\]<\{\'\|\&\:]+)(\:|[\s\u00a0]*)(\}\}?)?(.)?/ );
@@ -329,12 +348,12 @@
                                                        stream.backUp( 
name[0].length );
                                                        if ( (name[2] === ':' 
|| name[4] === undefined || name[3] === '}}') && (name[1].toLowerCase() in 
config.mwextFunctionSynonyms[0] || name[1] in config.mwextFunctionSynonyms[1]) 
) {
                                                                
state.ImInBlock.push( 'ParserFunctionName' );
-                                                               return 
'keyword';
+                                                               return 
'mw-parserfunction-bracket';
                                                        }
                                                }
                                                // Template
                                                state.ImInBlock.push( 
'TemplatePageName' );
-                                               return 'attribute';
+                                               return 
'mw-templatepage-bracket';
                                        }
                                        break;
                                case '[':
@@ -342,22 +361,26 @@
                                                stream.eatSpace();
                                                if ( /[^\]\|\[\{]/.test( 
stream.peek() ) ) {
                                                        state.ImInBlock.push( 
'Link' );
-                                                       return 'attribute';
+                                                       return 
'mw-link-bracket';
                                                }
                                        }
                                        break;
                                case '<':
-                                       if ( stream.match( '!--' ) ) {
-                                               return chain( inBlock( 
'comment', '-->' ) );
+                                       if ( stream.match( '!--' ) ) { // coment
+                                               return chain( inBlock( 
'mw-comment', '-->' ) );
                                        }
                                        tmp = stream.eat( '/' ) ? 'TagClose' : 
'TagName';
                                        name = stream.match( /[^>\/\s\u00a0]*/ 
);
                                        if ( name ) {
                                                stream.backUp( name[0].length );
                                                name = name[0].toLowerCase();
-                                               if ( config.mwextTags.indexOf( 
name ) >= 0 || permittedHtmlTags.indexOf( name ) >= 0 ) {
+                                               if ( config.mwextTags.indexOf( 
name ) >= 0 ) { // Parser function
                                                        state.ImInBlock.push( 
tmp );
-                                                       return 'tag bracket';
+                                                       return 
'mw-tagext-bracket';
+                                               }
+                                               if ( permittedHtmlTags.indexOf( 
name ) >= 0 ) { // Html tag
+                                                       state.ImInBlock.push( 
tmp );
+                                                       return 'mw-tag-bracket';
                                                }
                                        }
                                        break;
@@ -366,7 +389,7 @@
                                        if ( name ) {
                                                name = '_' + name[0];
                                                if ( name.toLowerCase() in 
config.mwextDoubleUnderscore[0] || name in config.mwextDoubleUnderscore[1] ) {
-                                                       return 'keyword strong';
+                                                       return 
'mw-parserfunction-name';
                                                }
                                        }
                                        break;

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: If6ae7d127766c32bc7e3c10b226a74ec97a0848f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/CodeMirror
Gerrit-Branch: master
Gerrit-Owner: Pastakhov <[email protected]>

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

Reply via email to