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