http://www.mediawiki.org/wiki/Special:Code/MediaWiki/88866

Revision: 88866
Author:   tparscal
Date:     2011-05-25 23:44:32 +0000 (Wed, 25 May 2011)
Log Message:
-----------
Added basic context, transclusion and parameter functionality.

Modified Paths:
--------------
    trunk/parsers/wikidom/lib/wiki.HtmlRenderer.js
    trunk/parsers/wikidom/lib/wiki.WikitextRenderer.js
    trunk/parsers/wikidom/lib/wiki.js
    trunk/parsers/wikidom/tests/wiki.test.js

Added Paths:
-----------
    trunk/parsers/wikidom/lib/wiki.Context.js

Added: trunk/parsers/wikidom/lib/wiki.Context.js
===================================================================
--- trunk/parsers/wikidom/lib/wiki.Context.js                           (rev 0)
+++ trunk/parsers/wikidom/lib/wiki.Context.js   2011-05-25 23:44:32 UTC (rev 
88866)
@@ -0,0 +1,24 @@
+wiki.Context = function() {
+
+       /* Private Members */
+
+       var params = {};
+
+       /* Methods */
+
+       this.pageExists = function( namespace, title ) {
+               return false;
+       };
+
+       this.getPageDom = function( namespace, title ) {
+               return '';
+       };
+
+       this.setParam = function( name, document ) {
+               params[name] = document;
+       };
+
+       this.getParam = function( name ) {
+               return name in params ? params[name] : null;
+       };
+};


Property changes on: trunk/parsers/wikidom/lib/wiki.Context.js
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native

Modified: trunk/parsers/wikidom/lib/wiki.HtmlRenderer.js
===================================================================
--- trunk/parsers/wikidom/lib/wiki.HtmlRenderer.js      2011-05-25 23:34:20 UTC 
(rev 88865)
+++ trunk/parsers/wikidom/lib/wiki.HtmlRenderer.js      2011-05-25 23:44:32 UTC 
(rev 88866)
@@ -1,7 +1,7 @@
 /**
  * Serializes a WikiDom into HTML.
  */
-wiki.HtmlRenderer = function() {
+wiki.HtmlRenderer = function( context ) {
 
        /* Private Members */
 
@@ -12,7 +12,9 @@
                'heading': renderHeading,
                'paragraph': renderParagraph,
                'list': renderList,
-               'table': renderTable
+               'table': renderTable,
+               'transclusion': renderTransclusion,
+               'parameter': renderParameter
        };
 
        /* Private Methods */
@@ -96,6 +98,20 @@
                return out.join( '\n' );
        }
 
+       function renderTransclusion( transclusion ) {
+               var title = [];
+               if ( transclusion.namespace !== 'Main' ) {
+                       title.push( transclusion.namespace )
+               }
+               title.push( transclusion.title );
+               title = title.join( ':' );
+               return wiki.util.xml.tag( 'a', { 'href': '/wiki/' + title }, 
title );
+       }
+
+       function renderParameter( parameter ) {
+               return '{{{' + parameter.name + '}}}';
+       }
+
        function renderItem( item ) {
                if ( 'lists' in item && item.lists.length ) {
                        var out = [];

Modified: trunk/parsers/wikidom/lib/wiki.WikitextRenderer.js
===================================================================
--- trunk/parsers/wikidom/lib/wiki.WikitextRenderer.js  2011-05-25 23:34:20 UTC 
(rev 88865)
+++ trunk/parsers/wikidom/lib/wiki.WikitextRenderer.js  2011-05-25 23:44:32 UTC 
(rev 88866)
@@ -1,7 +1,7 @@
 /**
  * Serializes a WikiDom into Wikitext.
  */
-wiki.WikitextRenderer = function() {
+wiki.WikitextRenderer = function( context ) {
 
        /* Private Members */
 
@@ -12,7 +12,9 @@
                'heading': renderHeading,
                'paragraph': renderParagraph,
                'list': renderList,
-               'table': renderTable
+               'table': renderTable,
+               'transclusion': renderTransclusion,
+               'parameter': renderParameter
        };
 
        /* Private Methods */
@@ -99,6 +101,21 @@
                return out.join( '\n' );
        }
 
+       function renderTransclusion( transclusion ) {
+               var title = [];
+               if ( transclusion.namespace === 'Main' ) {
+                       title.push( '' );
+               } else if ( transclusion.namespace !== 'Template' ) {
+                       title.push( transclusion.namespace )
+               }
+               title.push( transclusion.title );
+               return '{{' + title.join( ':' ) + '}}';
+       }
+
+       function renderParameter( parameter ) {
+               return '{{{' + parameter.name + '}}}';
+       }
+
        function renderItem( item, path ) {
                if ( 'lists' in item && item.lists.length ) {
                        var out = [];

Modified: trunk/parsers/wikidom/lib/wiki.js
===================================================================
--- trunk/parsers/wikidom/lib/wiki.js   2011-05-25 23:34:20 UTC (rev 88865)
+++ trunk/parsers/wikidom/lib/wiki.js   2011-05-25 23:44:32 UTC (rev 88866)
@@ -21,6 +21,13 @@
  * table
  *   rows: Array of arrays of cell objects
  *   attributes: Plain object
+ * transclusion
+ *   namespace: String
+ *   title: String
+ *   parameters: Array of documents
+ * parameter
+ *   name: String or integer
+ *   default: Document object
  * 
  * // Components
  * 

Modified: trunk/parsers/wikidom/tests/wiki.test.js
===================================================================
--- trunk/parsers/wikidom/tests/wiki.test.js    2011-05-25 23:34:20 UTC (rev 
88865)
+++ trunk/parsers/wikidom/tests/wiki.test.js    2011-05-25 23:44:32 UTC (rev 
88866)
@@ -119,7 +119,7 @@
                                                {
                                                        'type': 'ilink',
                                                        'range': { 'offset': 
15, 'length': 4 },
-                                                       'data': { 'title': 
'Main_Page' }
+                                                       'data': { 'namespace': 
'Main', 'title': 'Main_Page' }
                                                }
                                        ]
                                }
@@ -306,3 +306,32 @@
                }
        ] );
 } );
+
+test( 'Transclusion', function() {
+       assertSerializations( [
+               {
+                       'subject': 'transclusion',
+                       'dom': { 'blocks': [ {
+                               'type': 'transclusion',
+                               'namespace': 'Template',
+                               'title': 'Test'
+                       } ] },
+                       'html': '<a 
href="/wiki/Template:Test">Template:Test</a>',
+                       'wikitext': '{{Test}}'
+               }
+       ] );
+} );
+
+test( 'Parameter', function() {
+       assertSerializations( [
+               {
+                       'subject': 'transclusion',
+                       'dom': { 'blocks': [ {
+                               'type': 'parameter',
+                               'name': '1'
+                       } ] },
+                       'html': '{{{1}}}',
+                       'wikitext': '{{{1}}}'
+               }
+       ] );
+} );


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

Reply via email to