Compatibility for Closure Compiler. (#1240)

This commit is contained in:
Neil Fraser
2017-07-31 17:07:41 +01:00
committed by RoboErikG
parent 022010d722
commit fc8d4c90b4
10 changed files with 31 additions and 61 deletions

View File

@@ -377,31 +377,6 @@ class Gen_compressed(threading.Thread):
code = HEADER + "\n" + json_data["compiledCode"]
code = code.replace(remove, "")
# Trim down Google's Apache licences.
# The Closure Compiler used to preserve these until August 2015.
# Delete this in a few months if the licences don't return.
LICENSE = re.compile("""/\\*
[\w ]+
(Copyright \\d+ Google Inc.)
https://developers.google.com/blockly/
Licensed under the Apache License, Version 2.0 \(the "License"\);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
\\*/""")
code = re.sub(LICENSE, r"\n// \1 Apache License 2.0", code)
stats = json_data["statistics"]
original_b = stats["originalSize"]
compressed_b = stats["compressedSize"]

View File

@@ -901,10 +901,8 @@ Blockly.BlockSvg.disposeUiStep_ = function(clone, rtl, start, workspaceScale) {
var scale = (1 - percent) * workspaceScale;
clone.setAttribute('transform', 'translate(' + x + ',' + y + ')' +
' scale(' + scale + ')');
var closure = function() {
Blockly.BlockSvg.disposeUiStep_(clone, rtl, start, workspaceScale);
};
setTimeout(closure, 10);
setTimeout(Blockly.BlockSvg.disposeUiStep_, 10, clone, rtl, start,
workspaceScale);
}
};
@@ -949,10 +947,8 @@ Blockly.BlockSvg.connectionUiStep_ = function(ripple, start, workspaceScale) {
} else {
ripple.setAttribute('r', percent * 25 * workspaceScale);
ripple.style.opacity = 1 - percent;
var closure = function() {
Blockly.BlockSvg.connectionUiStep_(ripple, start, workspaceScale);
};
Blockly.BlockSvg.disconnectUiStop_.pid_ = setTimeout(closure, 10);
Blockly.BlockSvg.disconnectUiStop_.pid_ = setTimeout(
Blockly.BlockSvg.connectionUiStep_, 10, ripple, start, workspaceScale);
}
};
@@ -996,11 +992,10 @@ Blockly.BlockSvg.disconnectUiStep_ = function(group, magnitude, start) {
var skew = Math.round(Math.sin(percent * Math.PI * WIGGLES) *
(1 - percent) * magnitude);
group.skew_ = 'skewX(' + skew + ')';
var closure = function() {
Blockly.BlockSvg.disconnectUiStep_(group, magnitude, start);
};
Blockly.BlockSvg.disconnectUiStop_.group = group;
Blockly.BlockSvg.disconnectUiStop_.pid = setTimeout(closure, 10);
Blockly.BlockSvg.disconnectUiStop_.pid =
setTimeout(Blockly.BlockSvg.disconnectUiStep_, 10, group, magnitude,
start);
}
group.setAttribute('transform', group.translate_ + group.skew_);
};

View File

@@ -55,7 +55,7 @@ Blockly.Extensions.MUTATOR_PROPERTIES_ =
* handlers and mutators. These are applied using Block.applyExtension(), or
* the JSON "extensions" array attribute.
* @param {string} name The name of this extension.
* @param {function} initFn The function to initialize an extended block.
* @param {Function} initFn The function to initialize an extended block.
* @throws {Error} if the extension name is empty, the extension is already
* registered, or extensionFn is not a function.
*/
@@ -92,7 +92,7 @@ Blockly.Extensions.registerMixin = function(name, mixinObj) {
* decompose are defined on the mixin.
* @param {string} name The name of this mutator extension.
* @param {!Object} mixinObj The values to mix in.
* @param {function()=} opt_helperFn An optional function to apply after mixing
* @param {(function())=} opt_helperFn An optional function to apply after mixing
* in the object.
* @param {Array.<string>=} opt_blockList A list of blocks to appear in the
* flyout of the mutator dialog.
@@ -103,8 +103,10 @@ Blockly.Extensions.registerMutator = function(name, mixinObj, opt_helperFn,
var errorPrefix = 'Error when registering mutator "' + name + '": ';
// Sanity check the mixin object before registering it.
Blockly.Extensions.checkHasFunction_(errorPrefix, mixinObj, 'domToMutation');
Blockly.Extensions.checkHasFunction_(errorPrefix, mixinObj, 'mutationToDom');
Blockly.Extensions.checkHasFunction_(errorPrefix, mixinObj.domToMutation,
'domToMutation');
Blockly.Extensions.checkHasFunction_(errorPrefix, mixinObj.mutationToDom,
'mutationToDom');
var hasMutatorDialog = Blockly.Extensions.checkMutatorDialog_(mixinObj,
errorPrefix);
@@ -162,20 +164,19 @@ Blockly.Extensions.apply = function(name, block, isMutator) {
};
/**
* Check that the given object has a property with the given name, and that the
* property is a function.
* Check that the given value is a function.
* @param {string} errorPrefix The string to prepend to any error message.
* @param {!Object} object The object to check.
* @param {*} func Function to check.
* @param {string} propertyName Which property to check.
* @throws {Error} if the property does not exist or is not a function.
* @private
*/
Blockly.Extensions.checkHasFunction_ = function(errorPrefix, object,
Blockly.Extensions.checkHasFunction_ = function(errorPrefix, func,
propertyName) {
if (!object.hasOwnProperty(propertyName)) {
if (!func) {
throw new Error(errorPrefix +
'missing required property "' + propertyName + '"');
} else if (typeof object[propertyName] !== "function") {
} else if (typeof func != 'function') {
throw new Error(errorPrefix +
'" required property "' + propertyName + '" must be a function');
}
@@ -442,5 +443,3 @@ Blockly.Extensions.extensionParentTooltip_ = function() {
};
Blockly.Extensions.register('parent_tooltip_when_inline',
Blockly.Extensions.extensionParentTooltip_);

View File

@@ -38,7 +38,7 @@ goog.require('goog.userAgent');
* @param {number} width Width of the image.
* @param {number} height Height of the image.
* @param {string=} opt_alt Optional alt text for when block is collapsed.
* @param {function=} opt_onClick Optional function to be called when image is clicked
* @param {Function=} opt_onClick Optional function to be called when image is clicked
* @extends {Blockly.Field}
* @constructor
*/

View File

@@ -166,8 +166,9 @@ Blockly.Trashcan.prototype.createDom = function() {
*/
this.svgGroup_ = Blockly.utils.createSvgElement('g',
{'class': 'blocklyTrash'}, null);
var clip;
var rnd = String(Math.random()).substring(2);
var clip = Blockly.utils.createSvgElement('clipPath',
clip = Blockly.utils.createSvgElement('clipPath',
{'id': 'blocklyTrashBodyClipPath' + rnd},
this.svgGroup_);
Blockly.utils.createSvgElement('rect',
@@ -182,7 +183,7 @@ Blockly.Trashcan.prototype.createDom = function() {
body.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href',
this.workspace_.options.pathToMedia + Blockly.SPRITE.url);
var clip = Blockly.utils.createSvgElement('clipPath',
clip = Blockly.utils.createSvgElement('clipPath',
{'id': 'blocklyTrashLidClipPath' + rnd},
this.svgGroup_);
Blockly.utils.createSvgElement('rect',

View File

@@ -197,7 +197,7 @@ Blockly.utils.getInjectionDivXY_ = function(element) {
var scale = 1;
while (element) {
var xy = Blockly.utils.getRelativeXY(element);
var scale = Blockly.utils.getScale_(element);
scale = Blockly.utils.getScale_(element);
x = (x * scale) + xy.x;
y = (y * scale) + xy.y;
var classes = element.getAttribute('class') || '';

View File

@@ -1777,7 +1777,6 @@ Blockly.WorkspaceSvg.prototype.cancelCurrentGesture = function() {
/**
* Get the audio manager for this workspace.
* @return {Blockly.WorkspaceAudio} The audio manager for this workspace.
* @package
*/
Blockly.WorkspaceSvg.prototype.getAudioManager = function() {
return this.audioManager_;

View File

@@ -395,7 +395,7 @@ Blockly.Xml.appendDomToWorkspace = function(xml, workspace) {
var savetab = Blockly.BlockSvg.TAB_WIDTH;
try {
Blockly.BlockSvg.TAB_WIDTH = 0;
var bbox = workspace.getBlocksBoundingBox();
bbox = workspace.getBlocksBoundingBox();
} finally {
Blockly.BlockSvg.TAB_WIDTH = savetab;
}

View File

@@ -115,9 +115,10 @@ Blockly.ZoomControls.prototype.createDom = function() {
*/
this.svgGroup_ = Blockly.utils.createSvgElement('g',
{'class': 'blocklyZoom'}, null);
var clip;
var rnd = String(Math.random()).substring(2);
var clip = Blockly.utils.createSvgElement('clipPath',
clip = Blockly.utils.createSvgElement('clipPath',
{'id': 'blocklyZoomoutClipPath' + rnd},
this.svgGroup_);
Blockly.utils.createSvgElement('rect',
@@ -132,7 +133,7 @@ Blockly.ZoomControls.prototype.createDom = function() {
zoomoutSvg.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href',
workspace.options.pathToMedia + Blockly.SPRITE.url);
var clip = Blockly.utils.createSvgElement('clipPath',
clip = Blockly.utils.createSvgElement('clipPath',
{'id': 'blocklyZoominClipPath' + rnd},
this.svgGroup_);
Blockly.utils.createSvgElement('rect',
@@ -148,7 +149,7 @@ Blockly.ZoomControls.prototype.createDom = function() {
zoominSvg.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href',
workspace.options.pathToMedia + Blockly.SPRITE.url);
var clip = Blockly.utils.createSvgElement('clipPath',
clip = Blockly.utils.createSvgElement('clipPath',
{'id': 'blocklyZoomresetClipPath' + rnd},
this.svgGroup_);
Blockly.utils.createSvgElement('rect',

View File

@@ -34,7 +34,7 @@ def string_is_ascii(s):
return True
except UnicodeEncodeError:
return False
def load_constants(filename):
"""Read in constants file, which must be output in every language."""
constant_defs = read_json_file(filename);
@@ -42,7 +42,7 @@ def load_constants(filename):
for key in constant_defs:
value = constant_defs[key]
value = value.replace('"', '\\"')
constants_text += '\nBlockly.Msg.{0} = \"{1}\";'.format(key, value)
constants_text += '\nBlockly.Msg["{0}"] = "{1}";'.format(key, value)
return constants_text
def main():
@@ -139,7 +139,7 @@ goog.require('Blockly.Msg');
value = source_defs[key]
comment = ' // untranslated'
value = value.replace('"', '\\"')
outfile.write(u'Blockly.Msg.{0} = "{1}";{2}\n'.format(
outfile.write(u'Blockly.Msg["{0}"] = "{1}";{2}\n'.format(
key, value, comment))
# Announce any keys defined only for target language.