jenkins-bot has submitted this change and it was merged.

Change subject: makeStaticLoader: Implement --write-file option
......................................................................


makeStaticLoader: Implement --write-file option

Takes a path as input, reads it in and replaces the
"Generated by" sections and writes it back to disk.
:
Change-Id: Idd68032ba5b621958a353582ea994acd0c4cfbd3
---
M demos/ve/index.php
M maintenance/makeStaticLoader.php
M modules/ve/test/index.php
3 files changed, 142 insertions(+), 46 deletions(-)

Approvals:
  Catrope: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/demos/ve/index.php b/demos/ve/index.php
index 52f4767..e06b73f 100644
--- a/demos/ve/index.php
+++ b/demos/ve/index.php
@@ -164,13 +164,7 @@
                <script 
src="../../modules/ve/dm/nodes/ve.dm.TextNode.js"></script>
                <script 
src="../../modules/ve/dm/nodes/ve.dm.MWEntityNode.js"></script>
                <script 
src="../../modules/ve/dm/nodes/ve.dm.MWHeadingNode.js"></script>
-               <script 
src="../../modules/ve/dm/nodes/ve.dm.MWInlineImageNode.js"></script>
-               <script 
src="../../modules/ve/dm/nodes/ve.dm.MWBlockImageNode.js"></script>
-               <script 
src="../../modules/ve/dm/nodes/ve.dm.MWImageCaptionNode.js"></script>
                <script 
src="../../modules/ve/dm/nodes/ve.dm.MWPreformattedNode.js"></script>
-               <script 
src="../../modules/ve/dm/nodes/ve.dm.MWReferenceListNode.js"></script>
-               <script 
src="../../modules/ve/dm/nodes/ve.dm.MWReferenceNode.js"></script>
-               <script 
src="../../modules/ve/dm/nodes/ve.dm.MWTemplateNode.js"></script>
                <script 
src="../../modules/ve/dm/annotations/ve.dm.LinkAnnotation.js"></script>
                <script 
src="../../modules/ve/dm/annotations/ve.dm.MWExternalLinkAnnotation.js"></script>
                <script 
src="../../modules/ve/dm/annotations/ve.dm.MWInternalLinkAnnotation.js"></script>
@@ -219,13 +213,7 @@
                <script 
src="../../modules/ve/ce/nodes/ve.ce.TextNode.js"></script>
                <script 
src="../../modules/ve/ce/nodes/ve.ce.MWEntityNode.js"></script>
                <script 
src="../../modules/ve/ce/nodes/ve.ce.MWHeadingNode.js"></script>
-               <script 
src="../../modules/ve/ce/nodes/ve.ce.MWInlineImageNode.js"></script>
-               <script 
src="../../modules/ve/ce/nodes/ve.ce.MWBlockImageNode.js"></script>
-               <script 
src="../../modules/ve/ce/nodes/ve.ce.MWImageCaptionNode.js"></script>
                <script 
src="../../modules/ve/ce/nodes/ve.ce.MWPreformattedNode.js"></script>
-               <script 
src="../../modules/ve/ce/nodes/ve.ce.MWReferenceListNode.js"></script>
-               <script 
src="../../modules/ve/ce/nodes/ve.ce.MWReferenceNode.js"></script>
-               <script 
src="../../modules/ve/ce/nodes/ve.ce.MWTemplateNode.js"></script>
                <script 
src="../../modules/ve/ce/annotations/ve.ce.LinkAnnotation.js"></script>
                <script 
src="../../modules/ve/ce/annotations/ve.ce.MWExternalLinkAnnotation.js"></script>
                <script 
src="../../modules/ve/ce/annotations/ve.ce.MWInternalLinkAnnotation.js"></script>
@@ -296,6 +284,19 @@
                <script 
src="../../modules/ve/ui/tools/dropdowns/ve.ui.MWFormatDropdownTool.js"></script>
                <script 
src="../../modules/ve/ui/inspectors/ve.ui.LinkInspector.js"></script>
                <script 
src="../../modules/ve/ui/inspectors/ve.ui.MWLinkInspector.js"></script>
+               <!-- ext.visualEditor.experimental -->
+               <script 
src="../../modules/ve/dm/nodes/ve.dm.MWInlineImageNode.js"></script>
+               <script 
src="../../modules/ve/dm/nodes/ve.dm.MWBlockImageNode.js"></script>
+               <script 
src="../../modules/ve/dm/nodes/ve.dm.MWImageCaptionNode.js"></script>
+               <script 
src="../../modules/ve/dm/nodes/ve.dm.MWTemplateNode.js"></script>
+               <script 
src="../../modules/ve/dm/nodes/ve.dm.MWReferenceListNode.js"></script>
+               <script 
src="../../modules/ve/dm/nodes/ve.dm.MWReferenceNode.js"></script>
+               <script 
src="../../modules/ve/ce/nodes/ve.ce.MWInlineImageNode.js"></script>
+               <script 
src="../../modules/ve/ce/nodes/ve.ce.MWBlockImageNode.js"></script>
+               <script 
src="../../modules/ve/ce/nodes/ve.ce.MWImageCaptionNode.js"></script>
+               <script 
src="../../modules/ve/ce/nodes/ve.ce.MWTemplateNode.js"></script>
+               <script 
src="../../modules/ve/ce/nodes/ve.ce.MWReferenceListNode.js"></script>
+               <script 
src="../../modules/ve/ce/nodes/ve.ce.MWReferenceNode.js"></script>
 
                <!-- demo -->
                <script>
diff --git a/maintenance/makeStaticLoader.php b/maintenance/makeStaticLoader.php
index e959c25..8ec6b6c 100644
--- a/maintenance/makeStaticLoader.php
+++ b/maintenance/makeStaticLoader.php
@@ -5,17 +5,30 @@
 }
 require_once( $IP . '/maintenance/Maintenance.php' );
 
+/**
+ * A generator for creating a static HTML loading sequence
+ * for VisualEditor.
+ *
+ * Example usage:
+ *
+ *     # Update our static files
+ *     $ php maintenance/makeStaticLoader.php --target demo --write-file 
demos/ve/index.php
+ *     $ php maintenance/makeStaticLoader.php --target test --write-file 
modules/ve/test/index.php
+ *
+ * @author Timo Tijhof, 2013
+ */
 class MakeStaticLoader extends Maintenance {
 
        public function __construct() {
                parent::__construct();
 
-                       $this->addOption( 'target', 'Which target to use 
("demo" or "test"). Default: false', false, true );
-                       $this->addOption( 'indent', 'Indentation prefix to use 
(number of tabs or a string)', false, true );
-                       $this->addOption( 've-path', 'Override path to 
"VisualEditor/modules" (no trailing slash). Default by --target', false, true );
-                       $this->addOption( 'fixdir', 'Embed the absolute path in 
require() statements. Defaults to relative path. '
-                               . '(use this if you evaluate the resulting 
script in php-STDIN instead of from a file)', false, true );
-                       $this->addOption( 'section', 'head, body or both', 
false, true );
+               $this->addOption( 'target', 'Which target to use ("demo" or 
"test"). Default: demo', false, true );
+               $this->addOption( 'indent', 'Indentation prefix to use (number 
of tabs or a string)', false, true );
+               $this->addOption( 've-path', 'Override path to 
"VisualEditor/modules" (no trailing slash). Default by --target', false, true );
+               $this->addOption( 'write-file', 'Automatically replace the 
"Generated by" sections in this file. Default: false', false, true );
+               $this->addOption( 'fixdir', 'Embed the absolute path in 
require() statements. Defaults to relative path. '
+                       . '(use this if you evaluate the resulting script in 
php-STDIN instead of from a file)', false, true );
+               $this->addOption( 'section', 'head, body or both', false, true 
);
        }
 
        public function execute() {
@@ -27,9 +40,12 @@
                $section = $this->getOption( 'section', 'both' );
                $target = $this->getOption( 'target', 'demo' );
                $indent = $this->getOption( 'indent', 2 );
+               $writeFile = $this->getOption( 'write-file', false );
+
                if ( is_numeric( $indent ) ) {
                        $indent = str_repeat( "\t", $indent );
                }
+
                // Path to /modules/
                $vePath = $this->getOption( 've-path',
                        $target === 'demo'
@@ -90,7 +106,7 @@
 
                $self = isset( $_SERVER['PHP_SELF'] ) ? $_SERVER['PHP_SELF'] :  
( lcfirst( __CLASS__ ) . '.php' );
 
-               $head = $body = "";
+               $head = $body = '';
 
                $modules = array(
                        'Dependencies',
@@ -98,6 +114,7 @@
                        'ext.visualEditor.core',
                        'ext.visualEditor.experimental',
                );
+
                foreach ( $modules as $module ) {
                        if ( !isset( $wgResourceModules[$module] ) ) {
                                echo "\nError: File group $module\n not 
found!\n";
@@ -136,20 +153,86 @@
                                $body .= "$indent<!-- $module -->\n$bodyAdd";
                        }
                }
-               if ( $head ) {
-                       if ( $section === 'both' ) {
-                               echo "<head>\n\n$indent<!-- Generated by $self 
-->\n$head\n\n</head>";
-                       } elseif ( $section === 'head' ) {
-                               echo $head;
+
+               $head = rtrim( $head );
+               $body = rtrim( $body );
+
+               // Output
+
+               if ( $writeFile ) {
+                       $contents = is_readable( $writeFile ) ? 
file_get_contents( $writeFile ) : false;
+                       if ( !$contents ) {
+                               echo "\nError: Write file not readable or 
empty!\n";
+                               exit( 1 );
+                       }
+                       $lines = explode( "\n", $contents . "\n" );
+                       $inHead = $inBody = $inGenerated = false;
+                       foreach ( $lines as $i => &$line ) {
+                               $text = trim( $line );
+                               if ( $text === '<head>' ) {
+                                       $inHead = true;
+                                       $inBody = false;
+                                       $inGenerated = false;
+                               } elseif ( $text === '<body>' ) {
+                                       $inHead = false;
+                                       $inBody = true;
+                                       $inGenerated = false;
+                               } elseif ( strpos( $text, '<!-- Generated by' ) 
=== 0 ) {
+                                       // Only set $inGenerated if we're in a 
generated section
+                                       // that we want to replace 
(--section=body, don't replace head).
+                                       if ( $inHead ) {
+                                               if ( $section === 'both' || 
$section === 'head' ) {
+                                                       $inGenerated = true;
+                                                       if ( !$head ) {
+                                                               $line = '';
+                                                       } else {
+                                                               $line = 
"$indent<!-- Generated by $self -->\n$head";
+                                                       }
+                                               }
+                                       } elseif ( $inBody ) {
+                                               if ( $section === 'both' || 
$section === 'body' ) {
+                                                       $inGenerated = true;
+                                                       if ( !$body ) {
+                                                               $line = '';
+                                                       } else {
+                                                               $line = 
"$indent<!-- Generated by $self -->\n$body";
+                                                       }
+                                               }
+                                       }
+
+                               } elseif ( $text === '' ) {
+                                       $inGenerated = false;
+                               } else {
+                                       // Strip the lines directly connected 
to the "<!-- Generated by"
+                                       if ( $inGenerated ) {
+                                               unset( $lines[$i] );
+                                       }
+                               }
+                       }
+                       if ( !file_put_contents( $writeFile, trim( implode( 
"\n", $lines ) ) . "\n" ) ) {
+                               echo "\nError: Write to file failed!\n";
+                               exit( 1 );
+                       }
+                       echo "Done!\n";
+
+               } else {
+
+                       if ( $head ) {
+                               if ( $section === 'both' ) {
+                                       echo "<head>\n\n$indent<!-- Generated 
by $self -->\n$head\n\n</head>";
+                               } elseif ( $section === 'head' ) {
+                                       echo $head;
+                               }
+                       }
+                       if ( $body ) {
+                               if ( $section === 'both' ) {
+                                       echo "<body>\n\n$indent<!-- Generated 
by $self -->\n$body\n\n</body>\n";
+                               } elseif ( $section === 'body' ) {
+                                       echo $body;
+                               }
                        }
                }
-               if ( $body ) {
-                       if ( $section === 'both' ) {
-                               echo "<body>\n\n$indent<!-- Generated by $self 
-->\n$body\n\n</body>\n";
-                       } elseif ( $section === 'body' ) {
-                               echo $body;
-                       }
-               }
+
        }
 }
 
diff --git a/modules/ve/test/index.php b/modules/ve/test/index.php
index fd6d15b..6f33de2 100644
--- a/modules/ve/test/index.php
+++ b/modules/ve/test/index.php
@@ -9,6 +9,18 @@
                <script src="../../qunit/qunit.js"></script>
 
                <!-- Generated by maintenance/makeStaticLoader.php -->
+               <!-- ext.visualEditor.base#standalone-init -->
+               <script>
+                       if ( window.devicePixelRatio > 1 ) {
+                               document.write( '<link rel="stylesheet" 
href="../../ve/ui/styles/ve.ui.Icons-vector.css">' );
+                       } else {
+                               document.write( '<link rel="stylesheet" 
href="../../ve/ui/styles/ve.ui.Icons-raster.css">' );
+                       }
+               </script>
+
+       </head>
+       <body>
+               <!-- Generated by maintenance/makeStaticLoader.php -->
                <!-- Dependencies -->
                <script src="../../jquery/jquery.js"></script>
                <script src="../../jquery/jquery.client.js"></script>
@@ -33,7 +45,7 @@
                                require( '../../../VisualEditor.i18n.php' );
                                echo 've.init.platform.addMessages( ' . 
json_encode( $messages['en'] ) . ');' . "\n";
                        ?>
-                       ve.init.platform.setModulesUrl( '../../' );
+                       ve.init.platform.setModulesUrl( '../..' );
                </script>
                <!-- ext.visualEditor.core -->
                <script src="../../ve/ve.Registry.js"></script>
@@ -107,13 +119,7 @@
                <script src="../../ve/dm/nodes/ve.dm.TextNode.js"></script>
                <script src="../../ve/dm/nodes/ve.dm.MWEntityNode.js"></script>
                <script src="../../ve/dm/nodes/ve.dm.MWHeadingNode.js"></script>
-               <script 
src="../../ve/dm/nodes/ve.dm.MWInlineImageNode.js"></script>
-               <script 
src="../../ve/dm/nodes/ve.dm.MWBlockImageNode.js"></script>
-               <script 
src="../../ve/dm/nodes/ve.dm.MWImageCaptionNode.js"></script>
                <script 
src="../../ve/dm/nodes/ve.dm.MWPreformattedNode.js"></script>
-               <script 
src="../../ve/dm/nodes/ve.dm.MWReferenceListNode.js"></script>
-               <script 
src="../../ve/dm/nodes/ve.dm.MWReferenceNode.js"></script>
-               <script 
src="../../ve/dm/nodes/ve.dm.MWTemplateNode.js"></script>
                <script 
src="../../ve/dm/annotations/ve.dm.LinkAnnotation.js"></script>
                <script 
src="../../ve/dm/annotations/ve.dm.MWExternalLinkAnnotation.js"></script>
                <script 
src="../../ve/dm/annotations/ve.dm.MWInternalLinkAnnotation.js"></script>
@@ -162,13 +168,7 @@
                <script src="../../ve/ce/nodes/ve.ce.TextNode.js"></script>
                <script src="../../ve/ce/nodes/ve.ce.MWEntityNode.js"></script>
                <script src="../../ve/ce/nodes/ve.ce.MWHeadingNode.js"></script>
-               <script 
src="../../ve/ce/nodes/ve.ce.MWInlineImageNode.js"></script>
-               <script 
src="../../ve/ce/nodes/ve.ce.MWBlockImageNode.js"></script>
-               <script 
src="../../ve/ce/nodes/ve.ce.MWImageCaptionNode.js"></script>
                <script 
src="../../ve/ce/nodes/ve.ce.MWPreformattedNode.js"></script>
-               <script 
src="../../ve/ce/nodes/ve.ce.MWReferenceListNode.js"></script>
-               <script 
src="../../ve/ce/nodes/ve.ce.MWReferenceNode.js"></script>
-               <script 
src="../../ve/ce/nodes/ve.ce.MWTemplateNode.js"></script>
                <script 
src="../../ve/ce/annotations/ve.ce.LinkAnnotation.js"></script>
                <script 
src="../../ve/ce/annotations/ve.ce.MWExternalLinkAnnotation.js"></script>
                <script 
src="../../ve/ce/annotations/ve.ce.MWInternalLinkAnnotation.js"></script>
@@ -239,6 +239,19 @@
                <script 
src="../../ve/ui/tools/dropdowns/ve.ui.MWFormatDropdownTool.js"></script>
                <script 
src="../../ve/ui/inspectors/ve.ui.LinkInspector.js"></script>
                <script 
src="../../ve/ui/inspectors/ve.ui.MWLinkInspector.js"></script>
+               <!-- ext.visualEditor.experimental -->
+               <script 
src="../../ve/dm/nodes/ve.dm.MWInlineImageNode.js"></script>
+               <script 
src="../../ve/dm/nodes/ve.dm.MWBlockImageNode.js"></script>
+               <script 
src="../../ve/dm/nodes/ve.dm.MWImageCaptionNode.js"></script>
+               <script 
src="../../ve/dm/nodes/ve.dm.MWTemplateNode.js"></script>
+               <script 
src="../../ve/dm/nodes/ve.dm.MWReferenceListNode.js"></script>
+               <script 
src="../../ve/dm/nodes/ve.dm.MWReferenceNode.js"></script>
+               <script 
src="../../ve/ce/nodes/ve.ce.MWInlineImageNode.js"></script>
+               <script 
src="../../ve/ce/nodes/ve.ce.MWBlockImageNode.js"></script>
+               <script 
src="../../ve/ce/nodes/ve.ce.MWImageCaptionNode.js"></script>
+               <script 
src="../../ve/ce/nodes/ve.ce.MWTemplateNode.js"></script>
+               <script 
src="../../ve/ce/nodes/ve.ce.MWReferenceListNode.js"></script>
+               <script 
src="../../ve/ce/nodes/ve.ce.MWReferenceNode.js"></script>
 
                <!-- Load plugins for test framework -->
                <script src="ve.qunit.js"></script>
@@ -284,8 +297,7 @@
                <script src="ce/ve.ce.LeafNode.test.js"></script>
                <script src="ce/nodes/ve.ce.TextNode.test.js"></script>
                <script src="init/ve.init.Platform.test.js"></script>
-       </head>
-       <body>
+
                <div id="qunit"></div>
                <div id="qunit-fixture">test markup</div>
        </body>

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Idd68032ba5b621958a353582ea994acd0c4cfbd3
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Krinkle <[email protected]>
Gerrit-Reviewer: Catrope <[email protected]>
Gerrit-Reviewer: jenkins-bot

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

Reply via email to