Lucas Werkmeister (WMDE) has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/385995 )

Change subject: Improve code samples for several languages
......................................................................

Improve code samples for several languages

Use heredocs/nowdocs for PHP and Ruby, triple-quoted strings for Python,
and concatenate multiple string literals for Java and JavaScript.

Change-Id: I60c12c835836241b13070d82b356ec0f80289838
---
M wikibase/queryService/api/CodeSamples.js
1 file changed, 58 insertions(+), 13 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/wikidata/query/gui 
refs/changes/95/385995/1

diff --git a/wikibase/queryService/api/CodeSamples.js 
b/wikibase/queryService/api/CodeSamples.js
index 1267afe..ba9cee7 100644
--- a/wikibase/queryService/api/CodeSamples.js
+++ b/wikibase/queryService/api/CodeSamples.js
@@ -40,6 +40,18 @@
                        },
                        PHP: {
                                escape: function( query ) {
+                                       // try nowdoc first
+                                       var identifiers = [ 'SPARQL', 'QUERY', 
'EOF' ];
+                                       for ( var index in identifiers ) {
+                                               var identifier = identifiers[ 
index ];
+                                               if ( !( new RegExp( '^' + 
identifier + '$', 'm' ).test( query ) ) ) {
+                                                       return "<<< '" + 
identifier + "'\n"
+                                                               + query + '\n'
+                                                               + identifier;
+                                               }
+                                       }
+
+                                       // fall back to double quoted
                                        var escapedQuery = query
                                                .replace( /\\/g, '\\\\' )
                                                .replace( /"/g, '\\"' )
@@ -50,11 +62,22 @@
                        },
                        'JavaScript (jQuery)': {
                                escape: function( query ) {
-                                       var escapedQuery = query
-                                               .replace( /\\/g, '\\\\' )
-                                               .replace( /"/g, '\\"' )
-                                               .replace( /\n/g, '\\n' );
-                                       return '"' + escapedQuery + '"';
+                                       var code = '';
+                                       var lines = query.split( '\n' );
+                                       for ( var index in lines ) {
+                                               var line = lines[ index ];
+                                               var escapedLine = line
+                                                       .replace( /\\/g, '\\\\' 
)
+                                                       .replace( /"/g, '\\"' );
+                                               if ( index > 0 ) {
+                                                       code += '\\n" +\n       
 ';
+                                               }
+                                               code += '"' + escapedLine;
+                                       }
+                                       if ( index > 0 ) {
+                                               code += '"';
+                                       }
+                                       return code;
                                },
                                mimetype: 'application/javascript'
                        },
@@ -70,24 +93,46 @@
                        },
                        Java: {
                                escape: function( query ) {
-                                       var escapedQuery = query
-                                               .replace( /\\/g, '\\\\' )
-                                               .replace( /"/g, '\\"' )
-                                               .replace( /\n/g, '\\n' );
-                                       return '"' + escapedQuery + '"';
+                                       var code = '';
+                                       var lines = query.split( '\n' );
+                                       for ( var index in lines ) {
+                                               var line = lines[ index ];
+                                               var escapedLine = line
+                                                       .replace( /\\/g, '\\\\' 
)
+                                                       .replace( /"/g, '\\"' );
+                                               if ( index > 0 ) {
+                                                       code += '\\n" +\n       
         ';
+                                               }
+                                               code += '"' + escapedLine;
+                                       }
+                                       if ( index > 0 ) {
+                                               code += '"';
+                                       }
+                                       return code;
                                }
                        },
                        Python: {
                                escape: function( query ) {
                                        var escapedQuery = query
                                                .replace( /\\/g, '\\\\' )
-                                               .replace( /"/g, '\\"' )
-                                               .replace( /\n/g, '\\n' );
-                                       return '"' + escapedQuery + '"';
+                                               .replace( /"""/g, '""\\"' );
+                                       return '"""' + escapedQuery + '"""';
                                }
                        },
                        Ruby: {
                                escape: function( query ) {
+                                       // try heredoc first
+                                       var identifiers = [ 'SPARQL', 'QUERY', 
'EOF' ];
+                                       for ( var index in identifiers ) {
+                                               var identifier = identifiers[ 
index ];
+                                               if ( !( new RegExp( '^' + 
identifier + '$', 'm' ).test( query ) ) ) {
+                                                       return "<<'" + 
identifier + "'.chop\n" // .chop removes the trailing newline
+                                                               + query + '\n'
+                                                               + identifier;
+                                               }
+                                       }
+
+                                       // fall back to double quoted
                                        var escapedQuery = query
                                                .replace( /\\/g, '\\\\' )
                                                .replace( /"/g, '\\"' )

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I60c12c835836241b13070d82b356ec0f80289838
Gerrit-PatchSet: 1
Gerrit-Project: wikidata/query/gui
Gerrit-Branch: master
Gerrit-Owner: Lucas Werkmeister (WMDE) <lucas.werkmeis...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to