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