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