From 706080c7ae49f6ccc6e3de68afe42d7ceabf8834 Mon Sep 17 00:00:00 2001 From: Neil Fraser Date: Sun, 22 Mar 2015 01:53:17 -0700 Subject: [PATCH 1/7] Prevent 'c?a:b' block from performing type violations. --- blocks/logic.js | 31 +++++++++++++++++++++++++++++++ blocks_compressed.js | 3 ++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/blocks/logic.js b/blocks/logic.js index 8846b7141..245589513 100644 --- a/blocks/logic.js +++ b/blocks/logic.js @@ -427,5 +427,36 @@ Blockly.Blocks['logic_ternary'] = { .appendField(Blockly.Msg.LOGIC_TERNARY_IF_FALSE); this.setOutput(true); this.setTooltip(Blockly.Msg.LOGIC_TERNARY_TOOLTIP); + this.prevParentConnection_ = null; + }, + /** + * Called whenever anything on the workspace changes. + * Prevent mismatched types. + * @this Blockly.Block + */ + onchange: function() { + if (!this.workspace) { + // Block has been deleted. + return; + } + var blockA = this.getInputTargetBlock('THEN'); + var blockB = this.getInputTargetBlock('ELSE'); + var parentConnection = this.outputConnection.targetConnection; + // Kick blocks that existed prior to this change if they don't match. + if ((blockA || blockB) && parentConnection) { + for (var i = 0; i < 2; i++) { + var block = (i == 1) ? blockA : blockB; + if (block && !block.outputConnection.checkType_(parentConnection)) { + if (parentConnection === this.prevParentConnection_) { + this.setParent(null); + parentConnection.sourceBlock_.bumpNeighbours_(); + } else { + block.setParent(null); + block.bumpNeighbours_(); + } + } + } + } + this.prevParentConnection_ = parentConnection; } }; diff --git a/blocks_compressed.js b/blocks_compressed.js index cb161591c..05ae113ab 100644 --- a/blocks_compressed.js +++ b/blocks_compressed.js @@ -53,7 +53,8 @@ Blockly.Blocks.logic_operation={init:function(){var a=[[Blockly.Msg.LOGIC_OPERAT OR:Blockly.Msg.LOGIC_OPERATION_TOOLTIP_OR}[a]})}};Blockly.Blocks.logic_negate={init:function(){this.setHelpUrl(Blockly.Msg.LOGIC_NEGATE_HELPURL);this.setColour(Blockly.Blocks.logic.HUE);this.setOutput(!0,"Boolean");this.interpolateMsg(Blockly.Msg.LOGIC_NEGATE_TITLE,["BOOL","Boolean",Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);this.setTooltip(Blockly.Msg.LOGIC_NEGATE_TOOLTIP)}}; Blockly.Blocks.logic_boolean={init:function(){var a=[[Blockly.Msg.LOGIC_BOOLEAN_TRUE,"TRUE"],[Blockly.Msg.LOGIC_BOOLEAN_FALSE,"FALSE"]];this.setHelpUrl(Blockly.Msg.LOGIC_BOOLEAN_HELPURL);this.setColour(Blockly.Blocks.logic.HUE);this.setOutput(!0,"Boolean");this.appendDummyInput().appendField(new Blockly.FieldDropdown(a),"BOOL");this.setTooltip(Blockly.Msg.LOGIC_BOOLEAN_TOOLTIP)}}; Blockly.Blocks.logic_null={init:function(){this.setHelpUrl(Blockly.Msg.LOGIC_NULL_HELPURL);this.setColour(Blockly.Blocks.logic.HUE);this.setOutput(!0);this.appendDummyInput().appendField(Blockly.Msg.LOGIC_NULL);this.setTooltip(Blockly.Msg.LOGIC_NULL_TOOLTIP)}}; -Blockly.Blocks.logic_ternary={init:function(){this.setHelpUrl(Blockly.Msg.LOGIC_TERNARY_HELPURL);this.setColour(Blockly.Blocks.logic.HUE);this.appendValueInput("IF").setCheck("Boolean").appendField(Blockly.Msg.LOGIC_TERNARY_CONDITION);this.appendValueInput("THEN").appendField(Blockly.Msg.LOGIC_TERNARY_IF_TRUE);this.appendValueInput("ELSE").appendField(Blockly.Msg.LOGIC_TERNARY_IF_FALSE);this.setOutput(!0);this.setTooltip(Blockly.Msg.LOGIC_TERNARY_TOOLTIP)}}; +Blockly.Blocks.logic_ternary={init:function(){this.setHelpUrl(Blockly.Msg.LOGIC_TERNARY_HELPURL);this.setColour(Blockly.Blocks.logic.HUE);this.appendValueInput("IF").setCheck("Boolean").appendField(Blockly.Msg.LOGIC_TERNARY_CONDITION);this.appendValueInput("THEN").appendField(Blockly.Msg.LOGIC_TERNARY_IF_TRUE);this.appendValueInput("ELSE").appendField(Blockly.Msg.LOGIC_TERNARY_IF_FALSE);this.setOutput(!0);this.setTooltip(Blockly.Msg.LOGIC_TERNARY_TOOLTIP);this.prevParentConnection_=null},onchange:function(){if(this.workspace){var a= +this.getInputTargetBlock("THEN"),b=this.getInputTargetBlock("ELSE"),c=this.outputConnection.targetConnection;if((a||b)&&c)for(var d=0;2>d;d++){var e=1==d?a:b;e&&!e.outputConnection.checkType_(c)&&(c===this.prevParentConnection_?(this.setParent(null),c.sourceBlock_.bumpNeighbours_()):(e.setParent(null),e.bumpNeighbours_()))}this.prevParentConnection_=c}}}; // Copyright 2012 Google Inc. Apache License 2.0 Blockly.Blocks.loops={};Blockly.Blocks.loops.HUE=120; Blockly.Blocks.controls_repeat={init:function(){this.setHelpUrl(Blockly.Msg.CONTROLS_REPEAT_HELPURL);this.setColour(Blockly.Blocks.loops.HUE);this.appendDummyInput().appendField(Blockly.Msg.CONTROLS_REPEAT_TITLE_REPEAT).appendField(new Blockly.FieldTextInput("10",Blockly.FieldTextInput.nonnegativeIntegerValidator),"TIMES").appendField(Blockly.Msg.CONTROLS_REPEAT_TITLE_TIMES);this.appendStatementInput("DO").appendField(Blockly.Msg.CONTROLS_REPEAT_INPUT_DO);this.setPreviousStatement(!0);this.setNextStatement(!0); From 3e12c1ea5e53a6b7dbc7e1ec2c15cfc84f0c16e8 Mon Sep 17 00:00:00 2001 From: Neil Fraser Date: Mon, 23 Mar 2015 23:55:13 -0700 Subject: [PATCH 2/7] Render sprites from vectors. Remove blurry shadow from trash. --- core/blockly.js | 2 +- core/inject.js | 19 ---------- core/trashcan.js | 7 ++-- media/sprites.png | Bin 1044 -> 4498 bytes media/sprites.svg | 93 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 97 insertions(+), 24 deletions(-) create mode 100644 media/sprites.svg diff --git a/core/blockly.js b/core/blockly.js index 3d5e89d64..e31fed091 100644 --- a/core/blockly.js +++ b/core/blockly.js @@ -86,7 +86,7 @@ Blockly.HSV_VALUE = 0.65; * Sprited icons and images. */ Blockly.SPRITE = { - width: 64, + width: 84, height: 92, url: 'sprites.png' }; diff --git a/core/inject.js b/core/inject.js index c201ad0d6..ee3afebb8 100644 --- a/core/inject.js +++ b/core/inject.js @@ -243,25 +243,6 @@ Blockly.createDom_ = function(container) { Blockly.createSvgElement('feComposite', {'in': 'SourceGraphic', 'in2': 'specOut', 'operator': 'arithmetic', 'k1': 0, 'k2': 1, 'k3': 1, 'k4': 0}, filter); - /* - - - - - - - - - */ - filter = Blockly.createSvgElement('filter', - {'id': 'blocklyTrashcanShadowFilter'}, defs); - Blockly.createSvgElement('feGaussianBlur', - {'in': 'SourceAlpha', 'stdDeviation': 2, 'result': 'blur'}, filter); - Blockly.createSvgElement('feOffset', - {'in': 'blur', 'dx': 1, 'dy': 1, 'result': 'offsetBlur'}, filter); - feMerge = Blockly.createSvgElement('feMerge', {}, filter); - Blockly.createSvgElement('feMergeNode', {'in': 'offsetBlur'}, feMerge); - Blockly.createSvgElement('feMergeNode', {'in': 'SourceGraphic'}, feMerge); /* diff --git a/core/trashcan.js b/core/trashcan.js index dbc3f46c3..4b88fedfa 100644 --- a/core/trashcan.js +++ b/core/trashcan.js @@ -151,7 +151,7 @@ Blockly.Trashcan.prototype.top_ = 0; */ Blockly.Trashcan.prototype.createDom = function() { /* - + @@ -160,8 +160,7 @@ Blockly.Trashcan.prototype.createDom = function() { */ - this.svgGroup_ = Blockly.createSvgElement('g', - {'filter': 'url(#blocklyTrashcanShadowFilter)'}, null); + this.svgGroup_ = Blockly.createSvgElement('g', {}, null); var clip = Blockly.createSvgElement('clipPath', {'id': 'blocklyTrashBodyClipPath'}, @@ -278,7 +277,7 @@ Blockly.Trashcan.prototype.animateLid_ = function() { (Blockly.RTL ? -lidAngle : lidAngle) + ', ' + (Blockly.RTL ? 4 : this.WIDTH_ - 4) + ', ' + (this.LID_HEIGHT_ - 2) + ')'); - var opacity = goog.math.lerp(0.2, 0.4, this.lidOpen_); + var opacity = goog.math.lerp(0.4, 0.8, this.lidOpen_); this.svgGroup_.style.opacity = opacity; if (this.lidOpen_ > 0 && this.lidOpen_ < 1) { this.lidTask_ = goog.Timer.callOnce(this.animateLid_, 20, this); diff --git a/media/sprites.png b/media/sprites.png index 6e1f4d2b96ddfb31d73f56bc8ed6a6354f6666f5..bb5ceeed0ff3d3cf5658df6c32634530c25004a0 100644 GIT binary patch literal 4498 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 + + + + + + + + ? + + + + ? + + + + ! + + + + ! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 1916f2351d6356ea30c39eb11e0b288085deec26 Mon Sep 17 00:00:00 2001 From: Neil Fraser Date: Wed, 25 Mar 2015 17:24:28 -0700 Subject: [PATCH 3/7] Remove failed attempt at spriting icons. --- blockly_compressed.js | 17 +++++++------- core/blockly.js | 2 +- core/trashcan.js | 10 +++++--- media/sprites.png | Bin 4498 -> 1129 bytes media/sprites.svg | 53 ++---------------------------------------- 5 files changed, 18 insertions(+), 64 deletions(-) diff --git a/blockly_compressed.js b/blockly_compressed.js index ddef7852d..2b48444d3 100644 --- a/blockly_compressed.js +++ b/blockly_compressed.js @@ -963,12 +963,12 @@ Blockly.Scrollbar.insertAfter_=function(a,b){var c=b.nextSibling,d=b.parentNode; // Copyright 2011 Google Inc. Apache License 2.0 Blockly.Trashcan=function(a){this.workspace_=a};Blockly.Trashcan.prototype.SPRITE_URL_="media/sprites.png";Blockly.Trashcan.prototype.LID_URL_="media/trashlid.png";Blockly.Trashcan.prototype.WIDTH_=47;Blockly.Trashcan.prototype.BODY_HEIGHT_=45;Blockly.Trashcan.prototype.LID_HEIGHT_=15;Blockly.Trashcan.prototype.MARGIN_BOTTOM_=35;Blockly.Trashcan.prototype.MARGIN_SIDE_=35;Blockly.Trashcan.prototype.MARGIN_HOTSPOT_=25;Blockly.Trashcan.prototype.isOpen=!1;Blockly.Trashcan.prototype.svgGroup_=null; Blockly.Trashcan.prototype.svgLid_=null;Blockly.Trashcan.prototype.lidTask_=0;Blockly.Trashcan.prototype.lidOpen_=0;Blockly.Trashcan.prototype.left_=0;Blockly.Trashcan.prototype.top_=0; -Blockly.Trashcan.prototype.createDom=function(){this.svgGroup_=Blockly.createSvgElement("g",{filter:"url(#blocklyTrashcanShadowFilter)"},null);var a=Blockly.createSvgElement("clipPath",{id:"blocklyTrashBodyClipPath"},this.svgGroup_);Blockly.createSvgElement("rect",{width:this.WIDTH_,height:this.BODY_HEIGHT_,y:this.LID_HEIGHT_},a);Blockly.createSvgElement("image",{width:Blockly.SPRITE.width,height:Blockly.SPRITE.height,y:-32,"clip-path":"url(#blocklyTrashBodyClipPath)"},this.svgGroup_).setAttributeNS("http://www.w3.org/1999/xlink", -"xlink:href",Blockly.pathToMedia+Blockly.SPRITE.url);a=Blockly.createSvgElement("clipPath",{id:"blocklyTrashLidClipPath"},this.svgGroup_);Blockly.createSvgElement("rect",{width:this.WIDTH_,height:this.LID_HEIGHT_},a);this.svgLid_=Blockly.createSvgElement("image",{width:Blockly.SPRITE.width,height:Blockly.SPRITE.height,y:-32,"clip-path":"url(#blocklyTrashLidClipPath)"},this.svgGroup_);this.svgLid_.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",Blockly.pathToMedia+Blockly.SPRITE.url);this.animateLid_(); +Blockly.Trashcan.prototype.createDom=function(){this.svgGroup_=Blockly.createSvgElement("g",{},null);var a=Blockly.createSvgElement("clipPath",{id:"blocklyTrashBodyClipPath"},this.svgGroup_);Blockly.createSvgElement("rect",{width:this.WIDTH_,height:this.BODY_HEIGHT_,y:this.LID_HEIGHT_},a);Blockly.createSvgElement("image",{width:Blockly.SPRITE.width,height:Blockly.SPRITE.height,y:-32,"clip-path":"url(#blocklyTrashBodyClipPath)"},this.svgGroup_).setAttributeNS("http://www.w3.org/1999/xlink","xlink:href", +Blockly.pathToMedia+Blockly.SPRITE.url);a=Blockly.createSvgElement("clipPath",{id:"blocklyTrashLidClipPath"},this.svgGroup_);Blockly.createSvgElement("rect",{width:this.WIDTH_,height:this.LID_HEIGHT_},a);this.svgLid_=Blockly.createSvgElement("image",{width:Blockly.SPRITE.width,height:Blockly.SPRITE.height,y:-32,"clip-path":"url(#blocklyTrashLidClipPath)"},this.svgGroup_);this.svgLid_.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",Blockly.pathToMedia+Blockly.SPRITE.url);this.animateLid_(); return this.svgGroup_};Blockly.Trashcan.prototype.init=function(){this.setOpen_(!1);this.position_();Blockly.bindEvent_(window,"resize",this,this.position_)};Blockly.Trashcan.prototype.dispose=function(){this.svgGroup_&&(goog.dom.removeNode(this.svgGroup_),this.svgGroup_=null);this.workspace_=this.svgLid_=null;goog.Timer.clear(this.lidTask_)}; Blockly.Trashcan.prototype.position_=function(){var a=this.workspace_.getMetrics();a&&(this.left_=Blockly.RTL?this.MARGIN_SIDE_:a.viewWidth+a.absoluteLeft-this.WIDTH_-this.MARGIN_SIDE_,this.top_=a.viewHeight+a.absoluteTop-(this.BODY_HEIGHT_+this.LID_HEIGHT_)-this.MARGIN_BOTTOM_,this.svgGroup_.setAttribute("transform","translate("+this.left_+","+this.top_+")"))}; Blockly.Trashcan.prototype.getRect=function(){var a=Blockly.getSvgXY_(this.svgGroup_);return new goog.math.Rect(a.x-this.MARGIN_HOTSPOT_,a.y-this.MARGIN_HOTSPOT_,this.WIDTH_+2*this.MARGIN_HOTSPOT_,this.BODY_HEIGHT_+this.LID_HEIGHT_+2*this.MARGIN_HOTSPOT_)};Blockly.Trashcan.prototype.setOpen_=function(a){this.isOpen!=a&&(goog.Timer.clear(this.lidTask_),this.isOpen=a,this.animateLid_())}; -Blockly.Trashcan.prototype.animateLid_=function(){this.lidOpen_+=this.isOpen?.2:-.2;this.lidOpen_=goog.math.clamp(this.lidOpen_,0,1);var a=45*this.lidOpen_;this.svgLid_.setAttribute("transform","rotate("+(Blockly.RTL?-a:a)+", "+(Blockly.RTL?4:this.WIDTH_-4)+", "+(this.LID_HEIGHT_-2)+")");a=goog.math.lerp(.2,.4,this.lidOpen_);this.svgGroup_.style.opacity=a;0this.lidOpen_&&(this.lidTask_=goog.Timer.callOnce(this.animateLid_,20,this))};Blockly.Trashcan.prototype.close=function(){this.setOpen_(!1)}; +Blockly.Trashcan.prototype.animateLid_=function(){this.lidOpen_+=this.isOpen?.2:-.2;this.lidOpen_=goog.math.clamp(this.lidOpen_,0,1);var a=45*this.lidOpen_;this.svgLid_.setAttribute("transform","rotate("+(Blockly.RTL?-a:a)+", "+(Blockly.RTL?4:this.WIDTH_-4)+", "+(this.LID_HEIGHT_-2)+")");a=goog.math.lerp(.4,.8,this.lidOpen_);this.svgGroup_.style.opacity=a;0this.lidOpen_&&(this.lidTask_=goog.Timer.callOnce(this.animateLid_,20,this))};Blockly.Trashcan.prototype.close=function(){this.setOpen_(!1)}; // Copyright 2012 Google Inc. Apache License 2.0 Blockly.Xml={};Blockly.Xml.workspaceToDom=function(a){var b;Blockly.RTL&&(b=a.getWidth());var c=goog.dom.createDom("xml");a=a.getTopBlocks(!0);for(var d=0,e;e=a[d];d++){var f=Blockly.Xml.blockToDom_(e);e=e.getRelativeToSurfaceXY();f.setAttribute("x",Blockly.RTL?b-e.x:e.x);f.setAttribute("y",e.y);c.appendChild(f)}return c}; Blockly.Xml.blockToDom_=function(a){var b=goog.dom.createDom("block");b.setAttribute("type",a.type);b.setAttribute("id",a.id);if(a.mutationToDom){var c=a.mutationToDom();c&&b.appendChild(c)}for(var c=0,d;d=a.inputList[c];c++)for(var e=0,f;f=d.fieldRow[e];e++)if(f.name&&f.EDITABLE){var g=goog.dom.createDom("field",null,f.getValue());g.setAttribute("name",f.name);b.appendChild(g)}if(c=a.getCommentText())c=goog.dom.createDom("comment",null,c),"object"==typeof a.comment&&(c.setAttribute("pinned",a.comment.isVisible()), @@ -1317,12 +1317,11 @@ m.length=m.length?parseFloat(m.length):1;m.snap=!!m.snap;var p=!!a.realtime,n=p? n}; Blockly.createDom_=function(a){a.setAttribute("dir","LTR");goog.ui.Component.setDefaultRightToLeft(Blockly.RTL);Blockly.Css.inject();var b=Blockly.createSvgElement("svg",{xmlns:"http://www.w3.org/2000/svg","xmlns:html":"http://www.w3.org/1999/xhtml","xmlns:xlink":"http://www.w3.org/1999/xlink",version:"1.1","class":"blocklySvg"},null),c=Blockly.createSvgElement("defs",{},b),d,e;d=Blockly.createSvgElement("filter",{id:"blocklyEmboss"},c);Blockly.createSvgElement("feGaussianBlur",{"in":"SourceAlpha",stdDeviation:1, result:"blur"},d);e=Blockly.createSvgElement("feSpecularLighting",{"in":"blur",surfaceScale:1,specularConstant:.5,specularExponent:10,"lighting-color":"white",result:"specOut"},d);Blockly.createSvgElement("fePointLight",{x:-5E3,y:-1E4,z:2E4},e);Blockly.createSvgElement("feComposite",{"in":"specOut",in2:"SourceAlpha",operator:"in",result:"specOut"},d);Blockly.createSvgElement("feComposite",{"in":"SourceGraphic",in2:"specOut",operator:"arithmetic",k1:0,k2:1,k3:1,k4:0},d);d=Blockly.createSvgElement("filter", -{id:"blocklyTrashcanShadowFilter"},c);Blockly.createSvgElement("feGaussianBlur",{"in":"SourceAlpha",stdDeviation:2,result:"blur"},d);Blockly.createSvgElement("feOffset",{"in":"blur",dx:1,dy:1,result:"offsetBlur"},d);d=Blockly.createSvgElement("feMerge",{},d);Blockly.createSvgElement("feMergeNode",{"in":"offsetBlur"},d);Blockly.createSvgElement("feMergeNode",{"in":"SourceGraphic"},d);d=Blockly.createSvgElement("filter",{id:"blocklyShadowFilter"},c);Blockly.createSvgElement("feGaussianBlur",{stdDeviation:2}, -d);d=Blockly.createSvgElement("pattern",{id:"blocklyDisabledPattern",patternUnits:"userSpaceOnUse",width:10,height:10},c);Blockly.createSvgElement("rect",{width:10,height:10,fill:"#aaa"},d);Blockly.createSvgElement("path",{d:"M 0 0 L 10 10 M 10 0 L 0 10",stroke:"#cc0"},d);d=Blockly.createSvgElement("pattern",{id:"blocklyGridPattern",patternUnits:"userSpaceOnUse",width:Blockly.gridOptions.spacing,height:Blockly.gridOptions.spacing},c);if(0a.viewHeight+c||a.contentLeft<(Blockly.RTL?a.viewLeft:b)||a.contentLeft+ -a.contentWidth>(Blockly.RTL?a.viewWidth:a.viewWidth+b))for(var d=Blockly.mainWorkspace.getTopBlocks(!1),e=0,f;f=d[e];e++){var p=f.getRelativeToSurfaceXY(),n=f.getHeightWidth(),r=c+25-n.height-p.y;0r&&f.moveBy(0,r);r=25+b-p.x-(Blockly.RTL?0:n.width);0r&&f.moveBy(r,0)}}}));b.appendChild(Blockly.Tooltip.createDom());a.appendChild(b);Blockly.svg=b;Blockly.svgResize();Blockly.WidgetDiv.DIV=goog.dom.createDom("div", -"blocklyWidgetDiv");Blockly.WidgetDiv.DIV.style.direction=Blockly.RTL?"rtl":"ltr";document.body.appendChild(Blockly.WidgetDiv.DIV)}; +{id:"blocklyShadowFilter"},c);Blockly.createSvgElement("feGaussianBlur",{stdDeviation:2},d);d=Blockly.createSvgElement("pattern",{id:"blocklyDisabledPattern",patternUnits:"userSpaceOnUse",width:10,height:10},c);Blockly.createSvgElement("rect",{width:10,height:10,fill:"#aaa"},d);Blockly.createSvgElement("path",{d:"M 0 0 L 10 10 M 10 0 L 0 10",stroke:"#cc0"},d);d=Blockly.createSvgElement("pattern",{id:"blocklyGridPattern",patternUnits:"userSpaceOnUse",width:Blockly.gridOptions.spacing,height:Blockly.gridOptions.spacing}, +c);if(0 +a.viewHeight+c||a.contentLeft<(Blockly.RTL?a.viewLeft:b)||a.contentLeft+a.contentWidth>(Blockly.RTL?a.viewWidth:a.viewWidth+b))for(var d=Blockly.mainWorkspace.getTopBlocks(!1),e=0,f;f=d[e];e++){var p=f.getRelativeToSurfaceXY(),n=f.getHeightWidth(),r=c+25-n.height-p.y;0r&&f.moveBy(0,r);r=25+b-p.x-(Blockly.RTL?0:n.width);0r&&f.moveBy(r,0)}}}));b.appendChild(Blockly.Tooltip.createDom());a.appendChild(b); +Blockly.svg=b;Blockly.svgResize();Blockly.WidgetDiv.DIV=goog.dom.createDom("div","blocklyWidgetDiv");Blockly.WidgetDiv.DIV.style.direction=Blockly.RTL?"rtl":"ltr";document.body.appendChild(Blockly.WidgetDiv.DIV)}; Blockly.init_=function(){Blockly.bindEvent_(Blockly.svg,"mousedown",null,Blockly.onMouseDown_);Blockly.bindEvent_(Blockly.svg,"contextmenu",null,Blockly.onContextMenu_);Blockly.bindEvent_(Blockly.WidgetDiv.DIV,"contextmenu",null,Blockly.onContextMenu_);Blockly.bindEvent_(Blockly.svg,"touchstart",null,function(a){Blockly.longStart_(a,null)});Blockly.documentEventsBound_||(Blockly.bindEvent_(window,"resize",document,Blockly.svgResize),Blockly.bindEvent_(document,"keydown",null,Blockly.onKeyDown_),Blockly.bindEvent_(document, "touchend",null,Blockly.longStop_),Blockly.bindEvent_(document,"touchcancel",null,Blockly.longStop_),document.addEventListener("mouseup",Blockly.onMouseUp_,!1),goog.userAgent.IPAD&&Blockly.bindEvent_(window,"orientationchange",document,function(){Blockly.fireUiEvent(window,"resize")}),Blockly.documentEventsBound_=!0);if(Blockly.languageTree)if(Blockly.mainWorkspace.toolbox_)Blockly.mainWorkspace.toolbox_.init(Blockly.mainWorkspace);else if(Blockly.mainWorkspace.flyout_){Blockly.mainWorkspace.flyout_.init(Blockly.mainWorkspace); Blockly.mainWorkspace.flyout_.show(Blockly.languageTree.childNodes);Blockly.mainWorkspace.scrollX=Blockly.mainWorkspace.flyout_.width_;Blockly.RTL&&(Blockly.mainWorkspace.scrollX*=-1);var a="translate("+Blockly.mainWorkspace.scrollX+", 0)";Blockly.mainWorkspace.getCanvas().setAttribute("transform",a);Blockly.mainWorkspace.getBubbleCanvas().setAttribute("transform",a)}Blockly.hasScrollbars&&(Blockly.mainWorkspace.scrollbar=new Blockly.ScrollbarPair(Blockly.mainWorkspace),Blockly.mainWorkspace.scrollbar.resize()); diff --git a/core/blockly.js b/core/blockly.js index e31fed091..3d5e89d64 100644 --- a/core/blockly.js +++ b/core/blockly.js @@ -86,7 +86,7 @@ Blockly.HSV_VALUE = 0.65; * Sprited icons and images. */ Blockly.SPRITE = { - width: 84, + width: 64, height: 92, url: 'sprites.png' }; diff --git a/core/trashcan.js b/core/trashcan.js index 4b88fedfa..4802d28cc 100644 --- a/core/trashcan.js +++ b/core/trashcan.js @@ -150,14 +150,18 @@ Blockly.Trashcan.prototype.top_ = 0; * @return {!Element} The trash can's SVG group. */ Blockly.Trashcan.prototype.createDom = function() { - /* + /* Here's the markup that will be generated: - - + + + + */ this.svgGroup_ = Blockly.createSvgElement('g', {}, null); diff --git a/media/sprites.png b/media/sprites.png index bb5ceeed0ff3d3cf5658df6c32634530c25004a0..9505e627970ef6f9663acd20cd7a5b3acf9f759f 100644 GIT binary patch delta 1070 zcmbQF{E|blGr-TCmrII^fq{Y7)59eQNIL*=3{OzuS8E{W?1jm(O?i zm%KYB!;r@iExT?buMShYRZP9|tjGsC8~8FxL@eFXdYJliPp$v<<4^PhqYcaVny5Wy z`OtD+SmSZn$sMa6ryZ3!T6n%;azpkUPnFLH_6j-LF@O8~GB&6*XF~3Bqg6@M8rDlc z6LI0+!Ie{WBt(*-V4<4df%Ee!;_rwRNdG8WbS7&CqaU+Alh6mr4blQ`R^DD9{fCvu=6OBSy{%iq)J^U(CCg1YV#C#8e4EMjS>tXw!%`VmyC=u; zg}w$bTG1o-K`4TGA4iYmd3)2=fO(dWydM^) zJZm+Yy0l>84E|{|FJ3%)r?Z81lGSeC-E(%=8&2Z$*rm8~b6vxdT+i-F%bqK0WQJXe z^n5K9X!LBx65ZC#v1MC}pWpY|rL%JF^#?MMqLpe|UY9sM{kvXiAG_CO@BkPruJb&t zG*^1sC-8r;E?~bQDx#PfcWJNIS5d>?Q+IpY*ZcozWnk9&&1hN}Jt@z->!-vo#tQzL=;=RtmRz0`$D;DUIAQyeRR0%UHovV> zay{3pepS8tl{u}^z9GJ*IqEID#q+G+jOTXh{bpoutX;g{e`0NO3|C*+VciL{pF4U+ zlZw@p5XcBYm7&L{Q{Mbp`IK6Hgu;%|ME(SS-Rqu(+Z_^>MxfrG4*u(+Ys}} zmrIeohV{)Hg=^Y*eiN5&SW-Nx={Mu7V?jGQlF9Ii342uf)8`GJobWX#qL delta 4465 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 - + - - - - - - ? - - - - ? - - - - ! - - - - ! - - - - - - - - - - + From e2af14c32ffd058c4ff2fd841c292cdc7ae9081b Mon Sep 17 00:00:00 2001 From: Neil Fraser Date: Wed, 25 Mar 2015 23:58:58 -0700 Subject: [PATCH 4/7] Replace drawn icons with images (issue 45). --- blockly_compressed.js | 66 +++++++++++++++++++++---------------------- core/comment.js | 29 ++++--------------- core/css.js | 10 ++----- core/icon.js | 42 ++++++++++++++++++--------- core/mutator.js | 37 ++++++------------------ core/warning.js | 29 ++++--------------- media/icons.svg | 40 ++++++++++++++++++++++++++ 7 files changed, 124 insertions(+), 129 deletions(-) create mode 100644 media/icons.svg diff --git a/blockly_compressed.js b/blockly_compressed.js index 2b48444d3..61bd9454a 100644 --- a/blockly_compressed.js +++ b/blockly_compressed.js @@ -868,14 +868,15 @@ Blockly.Bubble.prototype.renderArrow_=function(){var a=[],b=this.width_/2,c=this q*e,q=b+h*l,m=c+h*k,b=b-h*l,c=c-h*k,k=g+this.arrow_radians_;k>2*Math.PI&&(k-=2*Math.PI);g=Math.sin(k)*f/Blockly.Bubble.ARROW_BEND;f=Math.cos(k)*f/Blockly.Bubble.ARROW_BEND;a.push("M"+q+","+m);a.push("C"+(q+f)+","+(m+g)+" "+d+","+e+" "+d+","+e);a.push("C"+d+","+e+" "+(b+f)+","+(c+g)+" "+b+","+c)}a.push("z");this.bubbleArrow_.setAttribute("d",a.join(" "))};Blockly.Bubble.prototype.setColour=function(a){this.bubbleBack_.setAttribute("fill",a);this.bubbleArrow_.setAttribute("fill",a)}; Blockly.Bubble.prototype.dispose=function(){Blockly.Bubble.unbindDragEvents_();goog.dom.removeNode(this.bubbleGroup_);this.shape_=this.content_=this.workspace_=this.bubbleGroup_=null}; // Copyright 2013 Google Inc. Apache License 2.0 -Blockly.Icon=function(a){this.block_=a};Blockly.Icon.RADIUS=8;Blockly.Icon.prototype.bubble_=null;Blockly.Icon.prototype.iconX_=0;Blockly.Icon.prototype.iconY_=0;Blockly.Icon.prototype.createIcon_=function(){this.iconGroup_||(this.iconGroup_=Blockly.createSvgElement("g",{},null),this.block_.getSvgRoot().appendChild(this.iconGroup_),Blockly.bindEvent_(this.iconGroup_,"mouseup",this,this.iconClick_),this.updateEditable())}; -Blockly.Icon.prototype.dispose=function(){goog.dom.removeNode(this.iconGroup_);this.iconGroup_=null;this.setVisible(!1);this.block_=null};Blockly.Icon.prototype.updateEditable=function(){this.block_.isInFlyout?Blockly.removeClass_(this.iconGroup_,"blocklyIconGroup"):Blockly.addClass_(this.iconGroup_,"blocklyIconGroup")};Blockly.Icon.prototype.isVisible=function(){return!!this.bubble_};Blockly.Icon.prototype.iconClick_=function(a){this.block_.isInFlyout||this.setVisible(!this.isVisible())}; -Blockly.Icon.prototype.updateColour=function(){if(this.isVisible()){var a=Blockly.makeColour(this.block_.getColour());this.bubble_.setColour(a)}}; -Blockly.Icon.prototype.renderIcon=function(a){if(this.block_.isCollapsed())return this.iconGroup_.setAttribute("display","none"),a;this.iconGroup_.setAttribute("display","block");var b=2*Blockly.Icon.RADIUS;Blockly.RTL&&(a-=b);this.iconGroup_.setAttribute("transform","translate("+a+", 5)");this.computeIconLocation();return a=Blockly.RTL?a-Blockly.BlockSvg.SEP_SPACE_X:a+(b+Blockly.BlockSvg.SEP_SPACE_X)}; -Blockly.Icon.prototype.setIconLocation=function(a,b){this.iconX_=a;this.iconY_=b;this.isVisible()&&this.bubble_.setAnchorLocation(a,b)};Blockly.Icon.prototype.computeIconLocation=function(){var a=this.block_.getRelativeToSurfaceXY(),b=Blockly.getRelativeXY_(this.iconGroup_),c=a.x+b.x+Blockly.Icon.RADIUS,a=a.y+b.y+Blockly.Icon.RADIUS;c===this.iconX_&&a===this.iconY_||this.setIconLocation(c,a)};Blockly.Icon.prototype.getIconLocation=function(){return{x:this.iconX_,y:this.iconY_}}; +Blockly.Icon=function(a){this.block_=a};Blockly.Icon.prototype.png_="";Blockly.Icon.prototype.SIZE=17;Blockly.Icon.prototype.bubble_=null;Blockly.Icon.prototype.iconX_=0;Blockly.Icon.prototype.iconY_=0; +Blockly.Icon.prototype.createIcon=function(){this.iconGroup_||(this.iconGroup_=Blockly.createSvgElement("g",{"class":"blocklyIconGroup"},null),Blockly.createSvgElement("image",{width:this.SIZE,height:this.SIZE},this.iconGroup_).setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",this.png_),this.block_.getSvgRoot().appendChild(this.iconGroup_),Blockly.bindEvent_(this.iconGroup_,"mouseup",this,this.iconClick_),this.updateEditable())}; +Blockly.Icon.prototype.dispose=function(){goog.dom.removeNode(this.iconGroup_);this.iconGroup_=null;this.setVisible(!1);this.block_=null};Blockly.Icon.prototype.updateEditable=function(){this.block_.isInFlyout||!this.block_.isEditable()?Blockly.addClass_(this.iconGroup_,"blocklyIconGroupReadonly"):Blockly.removeClass_(this.iconGroup_,"blocklyIconGroupReadonly")};Blockly.Icon.prototype.isVisible=function(){return!!this.bubble_}; +Blockly.Icon.prototype.iconClick_=function(a){this.block_.isInFlyout||this.setVisible(!this.isVisible())};Blockly.Icon.prototype.updateColour=function(){if(this.isVisible()){var a=Blockly.makeColour(this.block_.getColour());this.bubble_.setColour(a)}}; +Blockly.Icon.prototype.renderIcon=function(a){if(this.block_.isCollapsed())return this.iconGroup_.setAttribute("display","none"),a;this.iconGroup_.setAttribute("display","block");var b=this.SIZE;Blockly.RTL&&(a-=b);this.iconGroup_.setAttribute("transform","translate("+a+", 5)");this.computeIconLocation();return a=Blockly.RTL?a-Blockly.BlockSvg.SEP_SPACE_X:a+(b+Blockly.BlockSvg.SEP_SPACE_X)}; +Blockly.Icon.prototype.setIconLocation=function(a,b){this.iconX_=a;this.iconY_=b;this.isVisible()&&this.bubble_.setAnchorLocation(a,b)};Blockly.Icon.prototype.computeIconLocation=function(){var a=this.block_.getRelativeToSurfaceXY(),b=Blockly.getRelativeXY_(this.iconGroup_),c=a.x+b.x+this.SIZE/2,a=a.y+b.y+this.SIZE/2;c===this.iconX_&&a===this.iconY_||this.setIconLocation(c,a)};Blockly.Icon.prototype.getIconLocation=function(){return{x:this.iconX_,y:this.iconY_}}; // Copyright 2011 Google Inc. Apache License 2.0 -Blockly.Comment=function(a){Blockly.Comment.superClass_.constructor.call(this,a);this.createIcon_()};goog.inherits(Blockly.Comment,Blockly.Icon);Blockly.Comment.prototype.text_="";Blockly.Comment.prototype.width_=160;Blockly.Comment.prototype.height_=80; -Blockly.Comment.prototype.createIcon_=function(){Blockly.Icon.prototype.createIcon_.call(this);Blockly.createSvgElement("circle",{"class":"blocklyIconShield",r:Blockly.Icon.RADIUS,cx:Blockly.Icon.RADIUS,cy:Blockly.Icon.RADIUS},this.iconGroup_);this.iconMark_=Blockly.createSvgElement("text",{"class":"blocklyIconMark",x:Blockly.Icon.RADIUS,y:2*Blockly.Icon.RADIUS-3},this.iconGroup_);this.iconMark_.appendChild(document.createTextNode("?"))}; +Blockly.Comment=function(a){Blockly.Comment.superClass_.constructor.call(this,a);this.createIcon()};goog.inherits(Blockly.Comment,Blockly.Icon);Blockly.Comment.prototype.png_="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAANyAAADcgBffIlqAAAAAd0SU1FB98DGgAnBf0Xj5sAAAIBSURBVDjLjZO9SxxRFMXPrFkWl2UFYSOIRtF210YtAiH/gGATRNZFgo19IBaB9Ipgk3SiEoKQgI19JIVgGaOIgpWJEAV1kZk3b1ad0V+KRYIzk5ALh1ecc88978tRSgHPg0Bjvq/BbFalMNR5oaBv+bzWHMfZjOudWPOg6+pDva6elRXlt7fVcnYmPX4sDQ3pdmpKQXu7frS16aXjON8T06OIMWOwtRp3jgNSEpkMTE5y5/v4UcSLePxnroutVNKb4xgYANfFAk/vDbLG8Gtk5P8M7jE6CsZwDDwSMLm5iYmLlpbg4ABOTmBjA4aHk0ZbWxigposLvlarScH5OSwvw9oaABwdJTW1GtTrfJHnUe/uTgqKxeZaKEAUgTEQP/CeHvA8LhRFhLlc+r6zWVhfbyaZn0/yuRxEEaGCAK9USjdZWGgarK5CS0uS7+gAa3EzjYaOy2WlludJi4vSzIx0e5vky2Xp6ko/M4WCPleruk4zsVa6vJSur9OHTEzoqljUJwEdQYDf25uMe3jY3E5fX5Lr7wdr8YGSJCkIeL23h9/a+lA4Pg7T039u6h75POzv4wcBrx5Ec11Wd3bwOzv//VK7umB3F991+Zj2/R1reWstdnaWm3L5YXOlAnNz3FiLbTR4Azj6WwFPjOG953EahoT1On4YEnoep8bwDuiO9/wG1sM4kG8A4fUAAAAASUVORK5CYII="; +Blockly.Comment.prototype.text_="";Blockly.Comment.prototype.width_=160;Blockly.Comment.prototype.height_=80; Blockly.Comment.prototype.createEditor_=function(){this.foreignObject_=Blockly.createSvgElement("foreignObject",{x:Blockly.Bubble.BORDER_WIDTH,y:Blockly.Bubble.BORDER_WIDTH},null);var a=document.createElementNS(Blockly.HTML_NS,"body");a.setAttribute("xmlns",Blockly.HTML_NS);a.className="blocklyMinimalBody";this.textarea_=document.createElementNS(Blockly.HTML_NS,"textarea");this.textarea_.className="blocklyCommentTextarea";this.textarea_.setAttribute("dir",Blockly.RTL?"RTL":"LTR");a.appendChild(this.textarea_); this.foreignObject_.appendChild(a);Blockly.bindEvent_(this.textarea_,"mouseup",this,this.textareaFocus_);return this.foreignObject_};Blockly.Comment.prototype.updateEditable=function(){this.isVisible()&&(this.setVisible(!1),this.setVisible(!0));Blockly.Icon.prototype.updateEditable.call(this)}; Blockly.Comment.prototype.resizeBubble_=function(){var a=this.bubble_.getBubbleSize(),b=2*Blockly.Bubble.BORDER_WIDTH;this.foreignObject_.setAttribute("width",a.width-b);this.foreignObject_.setAttribute("height",a.height-b);this.textarea_.style.width=a.width-b-4+"px";this.textarea_.style.height=a.height-b-4+"px"}; @@ -998,11 +999,10 @@ a)}b.select()}};Blockly.WorkspaceSvg.prototype.recordDeleteAreas=function(){this Blockly.WorkspaceSvg.prototype.isDeleteArea=function(a){a=Blockly.mouseToSvg(a);a=new goog.math.Coordinate(a.x,a.y);if(this.deleteAreaTrash_){if(this.deleteAreaTrash_.contains(a))return this.trashcan.setOpen_(!0),Blockly.Css.setCursor(Blockly.Css.Cursor.DELETE),!0;this.trashcan.setOpen_(!1)}if(this.deleteAreaToolbox_&&this.deleteAreaToolbox_.contains(a))return Blockly.Css.setCursor(Blockly.Css.Cursor.DELETE),!0;Blockly.Css.setCursor(Blockly.Css.Cursor.CLOSED);return!1}; Blockly.WorkspaceSvg.prototype.clear=Blockly.WorkspaceSvg.prototype.clear; // Copyright 2012 Google Inc. Apache License 2.0 -Blockly.Mutator=function(a){Blockly.Mutator.superClass_.constructor.call(this,null);this.quarkNames_=a};goog.inherits(Blockly.Mutator,Blockly.Icon);Blockly.Mutator.prototype.workspaceWidth_=0;Blockly.Mutator.prototype.workspaceHeight_=0; -Blockly.Mutator.prototype.createIcon=function(){if(!this.iconMark_){Blockly.Icon.prototype.createIcon_.call(this);var a=Blockly.Icon.RADIUS/2;Blockly.createSvgElement("rect",{"class":"blocklyIconShield",width:4*a,height:4*a,rx:a,ry:a},this.iconGroup_);this.iconMark_=Blockly.createSvgElement("text",{"class":"blocklyIconMark",x:Blockly.Icon.RADIUS,y:2*Blockly.Icon.RADIUS-4},this.iconGroup_);this.iconMark_.appendChild(document.createTextNode("\u2605"))}}; -Blockly.Mutator.prototype.iconClick_=function(a){this.block_.isEditable()&&Blockly.Icon.prototype.iconClick_.call(this,a)}; +Blockly.Mutator=function(a){Blockly.Mutator.superClass_.constructor.call(this,null);this.quarkNames_=a};goog.inherits(Blockly.Mutator,Blockly.Icon);Blockly.Mutator.prototype.png_="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAANyAAADcgBffIlqAAAAAd0SU1FB98DGgUkCK5AYg4AAAGlSURBVDjLnZS9SiRBFIVLunt+9gUU1EmFaSfQ0GCeRcTAwEDERHYTQUZ8l6F9Ad9gMzcVfwaxdzpxuHRVZNVncHfAnt5ply0oqjj33FP3FqfKGGMM8K0suRZhGgKehhECXoSpc1wBXTMXEOHXeIzr9yGKwJjlM4ogTSHLcCLcAV1TllyPx7imxGUzy3DWMjIiTPv9OiGOYXVV92tr0GrVOWkKIuQmBPxiC1EEz8/w8ADn53B/D6+vkCR1Xgh4A9XAygrs7IBfuF7vYW9PK/zMB6iIJIlW8P4O1sLZmSaenkJZqlCeQ7vdILKxAS8vGjg5qZ54fKz4ZAKbmw0ixsDFhQZ2d6v4YKD45eUX7ayvw+OjBo6OquTDQ8WfnrTipSLtNhQFhACzGRwcwNYW7O/D25viRQGdzhfttFowHGrCgt0ZDut+AfirT5JET5xMYDTStSjqPonjPz4RYZqmdTd2OtDr6b7Xq7bw+bJFyI1zXGXZ/72d21tKa/lugK4Idzc3uO3tf3vFg4EKzGb8BOL5d9C1lpEIv70nNP0n3hNEyK3lx1zgA46lEkSYoMBCAAAAAElFTkSuQmCC"; +Blockly.Mutator.prototype.workspaceWidth_=0;Blockly.Mutator.prototype.workspaceHeight_=0;Blockly.Mutator.prototype.iconClick_=function(a){this.block_.isEditable()&&Blockly.Icon.prototype.iconClick_.call(this,a)}; Blockly.Mutator.prototype.createEditor_=function(){this.svgDialog_=Blockly.createSvgElement("svg",{x:Blockly.Bubble.BORDER_WIDTH,y:Blockly.Bubble.BORDER_WIDTH},null);Blockly.createSvgElement("rect",{"class":"blocklyMutatorBackground",height:"100%",width:"100%"},this.svgDialog_);var a=this;this.workspace_=new Blockly.WorkspaceSvg(function(){return a.getFlyoutMetrics_()},null);this.svgDialog_.appendChild(this.workspace_.createDom("blocklyMutatorBackground"));this.workspace_.addFlyout();return this.svgDialog_}; -Blockly.Mutator.prototype.updateEditable=function(){this.block_.isEditable()?Blockly.Icon.prototype.updateEditable.call(this):(this.setVisible(!1),this.iconGroup_&&Blockly.removeClass_(this.iconGroup_,"blocklyIconGroup"))}; +Blockly.Mutator.prototype.updateEditable=function(){this.block_.isEditable()?Blockly.Icon.prototype.updateEditable.call(this):(this.setVisible(!1),this.iconGroup_&&Blockly.addClass_(this.iconGroup_,"blocklyIconGroupReadonly"))}; Blockly.Mutator.prototype.resizeBubble_=function(){var a=2*Blockly.Bubble.BORDER_WIDTH,b=this.workspace_.getCanvas().getBBox(),c=this.workspace_.flyout_.getMetrics_(),d;d=Blockly.RTL?-b.x:b.width+b.x;b=Math.max(b.height+3*a,c.contentHeight+20);d+=3*a;if(Math.abs(this.workspaceWidth_-d)>a||Math.abs(this.workspaceHeight_-b)>a)this.workspaceWidth_=d,this.workspaceHeight_=b,this.bubble_.setBubbleSize(d+a,b+a),this.svgDialog_.setAttribute("width",this.workspaceWidth_),this.svgDialog_.setAttribute("height", this.workspaceHeight_);Blockly.RTL&&(a="translate("+this.workspaceWidth_+",0)",this.workspace_.getCanvas().setAttribute("transform",a))}; Blockly.Mutator.prototype.setVisible=function(a){if(a!=this.isVisible())if(a){this.bubble_=new Blockly.Bubble(this.block_.workspace,this.createEditor_(),this.block_.svgPath_,this.iconX_,this.iconY_,null,null);var b=this;this.workspace_.flyout_.init(this.workspace_);var c=[];a=0;for(var d;d=this.quarkNames_[a];a++)c[a]=goog.dom.createDom("block",{type:d});this.workspace_.flyout_.show(c);this.rootBlock_=this.block_.decompose(this.workspace_);c=this.rootBlock_.getDescendants();for(a=0;d=c[a];a++)d.render(); @@ -1011,8 +1011,8 @@ this.block_,function(){b.workspaceChanged_()});this.updateColour()}else this.svg Blockly.Mutator.prototype.workspaceChanged_=function(){if(0==Blockly.dragMode_)for(var a=this.workspace_.getTopBlocks(!1),b=0,c;c=a[b];b++){var d=c.getRelativeToSurfaceXY(),e=c.getHeightWidth();20>d.y+e.height&&c.moveBy(0,20-e.height-d.y)}this.rootBlock_.workspace==this.workspace_&&(a=this.block_.rendered,this.block_.rendered=!1,this.block_.compose(this.rootBlock_),this.block_.rendered=a,this.block_.initSvg(),this.block_.rendered&&this.block_.render(),this.resizeBubble_(),this.block_.workspace.fireChangeEvent(), goog.Timer.callOnce(this.block_.bumpNeighbours_,Blockly.BUMP_DELAY,this.block_))};Blockly.Mutator.prototype.getFlyoutMetrics_=function(){var a=0;Blockly.RTL&&(a+=this.workspaceWidth_);return{viewHeight:this.workspaceHeight_,viewWidth:0,absoluteTop:0,absoluteLeft:a}};Blockly.Mutator.prototype.dispose=function(){this.block_.mutator=null;Blockly.Icon.prototype.dispose.call(this)}; // Copyright 2012 Google Inc. Apache License 2.0 -Blockly.Warning=function(a){Blockly.Warning.superClass_.constructor.call(this,a);this.createIcon_()};goog.inherits(Blockly.Warning,Blockly.Icon);Blockly.Warning.textToDom_=function(a){var b=Blockly.createSvgElement("text",{"class":"blocklyText blocklyBubbleText",y:Blockly.Bubble.BORDER_WIDTH},null);a=a.split("\n");for(var c=0;c.blocklyPath {"," stroke: #fc3;"," stroke-width: 3px;","}",".blocklySelected>.blocklyPathLight {"," display: none;","}",".blocklyDragging>.blocklyPath,",".blocklyDragging>.blocklyPathLight {"," fill-opacity: .8;"," stroke-opacity: .8;","}",".blocklyDragging>.blocklyPathDark {"," display: none;","}",".blocklyDisabled>.blocklyPath {"," fill-opacity: .5;"," stroke-opacity: .5;","}",".blocklyDisabled>.blocklyPathLight,", ".blocklyDisabled>.blocklyPathDark {"," display: none;","}",".blocklyText {"," cursor: default;"," fill: #fff;"," font-family: sans-serif;"," font-size: 11pt;","}",".blocklyNonEditableText>text {"," pointer-events: none;","}",".blocklyNonEditableText>rect,",".blocklyEditableText>rect {"," fill: #fff;"," fill-opacity: .6;","}",".blocklyNonEditableText>text,",".blocklyEditableText>text {"," fill: #000;","}",".blocklyEditableText:hover>rect {"," stroke: #fff;"," stroke-width: 2;","}",".blocklyBubbleText {", " fill: #000;","}",".blocklySvg text {"," user-select: none;"," -moz-user-select: none;"," -webkit-user-select: none;"," cursor: inherit;","}",".blocklyHidden {"," display: none;","}",".blocklyFieldDropdown:not(.blocklyHidden) {"," display: block;","}",".blocklyTooltipBackground {"," fill: #ffffc7;"," stroke: #d8d8d8;"," stroke-width: 1px;","}",".blocklyTooltipShadow,",".blocklyDropdownMenuShadow {"," fill: #bbb;"," filter: url(#blocklyShadowFilter);","}",".blocklyTooltipText {"," fill: #000;", -" font-family: sans-serif;"," font-size: 9pt;","}",".blocklyIconShield {"," cursor: default;"," fill: #00c;"," stroke: #ccc;"," stroke-width: 1px;","}",".blocklyIconGroup:hover>.blocklyIconShield {"," fill: #00f;"," stroke: #fff;","}",".blocklyIconGroup:hover>.blocklyIconMark {"," fill: #fff;","}",".blocklyIconMark {"," cursor: default !important;"," fill: #ccc;"," font-family: sans-serif;"," font-size: 9pt;"," font-weight: bold;"," text-anchor: middle;","}",".blocklyWarningBody {", -"}",".blocklyMinimalBody {"," margin: 0;"," padding: 0;","}",".blocklyCommentTextarea {"," background-color: #ffc;"," border: 0;"," margin: 0;"," padding: 2px;"," resize: none;","}",".blocklyHtmlInput {"," border: none;"," font-family: sans-serif;"," font-size: 11pt;"," outline: none;"," width: 100%","}",".blocklyMainBackground {"," fill: url(#blocklyGridPattern);","}",".blocklyMutatorBackground {"," fill: #fff;"," stroke: #ddd;"," stroke-width: 1;","}",".blocklyFlyoutBackground {", -" fill: #ddd;"," fill-opacity: .8;","}",".blocklyColourBackground {"," fill: #666;","}",".blocklyScrollbarBackground {"," fill: #fff;"," stroke: #e4e4e4;"," stroke-width: 1;","}",".blocklyScrollbarKnob {"," fill: #ccc;","}",".blocklyScrollbarBackground:hover+.blocklyScrollbarKnob,",".blocklyScrollbarKnob:hover {"," fill: #bbb;","}",".blocklyInvalidInput {"," background: #faa;","}",".blocklyAngleCircle {"," stroke: #444;"," stroke-width: 1;"," fill: #ddd;"," fill-opacity: .8;","}",".blocklyAngleMarks {", -" stroke: #444;"," stroke-width: 1;","}",".blocklyAngleGauge {"," fill: #f88;"," fill-opacity: .8; ","}",".blocklyAngleLine {"," stroke: #f00;"," stroke-width: 2;"," stroke-linecap: round;","}",".blocklyContextMenu {"," border-radius: 4px;","}",".blocklyDropdownMenu {"," padding: 0 !important;","}",".blocklyWidgetDiv .goog-option-selected .goog-menuitem-checkbox,",".blocklyWidgetDiv .goog-option-selected .goog-menuitem-icon {"," background: url(<<>>/sprites.png) no-repeat -48px -16px !important;", -"}",".blocklyToolboxDiv {"," background-color: #ddd;"," display: none;"," overflow-x: visible;"," overflow-y: auto;"," position: absolute;","}",".blocklyTreeRoot {"," padding: 4px 0;","}",".blocklyTreeRoot:focus {"," outline: none;","}",".blocklyTreeRow {"," line-height: 22px;"," height: 22px;"," padding-right: 1em;"," white-space: nowrap;","}",'.blocklyToolboxDiv[dir="RTL"] .blocklyTreeRow {'," padding-right: 0;"," padding-left: 1em !important;","}",".blocklyTreeRow:hover {"," background-color: #e4e4e4;", -"}",".blocklyTreeSeparator {"," border-bottom: solid #e5e5e5 1px;"," height: 0px;"," margin: 5px 0;","}",".blocklyTreeIcon {"," background-image: url(<<>>/sprites.png);"," height: 16px;"," vertical-align: middle;"," width: 16px;","}",".blocklyTreeIconClosedLtr {"," background-position: -32px -1px;","}",".blocklyTreeIconClosedRtl {"," background-position: 0px -1px;","}",".blocklyTreeIconOpen {"," background-position: -16px -1px;","}",".blocklyTreeSelected>.blocklyTreeIconClosedLtr {", -" background-position: -32px -17px;","}",".blocklyTreeSelected>.blocklyTreeIconClosedRtl {"," background-position: 0px -17px;","}",".blocklyTreeSelected>.blocklyTreeIconOpen {"," background-position: -16px -17px;","}",".blocklyTreeIconNone,",".blocklyTreeSelected>.blocklyTreeIconNone {"," background-position: -48px -1px;","}",".blocklyTreeLabel {"," cursor: default;"," font-family: sans-serif;"," font-size: 16px;"," padding: 0 3px;"," vertical-align: middle;","}",".blocklyTreeSelected {", -" background-color: #57e !important;","}",".blocklyTreeSelected .blocklyTreeLabel {"," color: #fff;","}",".blocklyWidgetDiv .goog-palette {"," outline: none;"," cursor: default;","}",".blocklyWidgetDiv .goog-palette-table {"," border: 1px solid #666;"," border-collapse: collapse;","}",".blocklyWidgetDiv .goog-palette-cell {"," height: 13px;"," width: 15px;"," margin: 0;"," border: 0;"," text-align: center;"," vertical-align: middle;"," border-right: 1px solid #666;"," font-size: 1px;", -"}",".blocklyWidgetDiv .goog-palette-colorswatch {"," position: relative;"," height: 13px;"," width: 15px;"," border: 1px solid #666;","}",".blocklyWidgetDiv .goog-palette-cell-hover .goog-palette-colorswatch {"," border: 1px solid #FFF;","}",".blocklyWidgetDiv .goog-palette-cell-selected .goog-palette-colorswatch {"," border: 1px solid #000;"," color: #fff;","}",".blocklyWidgetDiv .goog-date-picker,",".blocklyWidgetDiv .goog-date-picker th,",".blocklyWidgetDiv .goog-date-picker td {"," font: 13px Arial, sans-serif;", -"}",".blocklyWidgetDiv .goog-date-picker {"," -moz-user-focus: normal;"," -moz-user-select: none;"," position: relative;"," border: 1px solid #000;"," float: left;"," padding: 2px;"," color: #000;"," background: #c3d9ff;"," cursor: default;","}",".blocklyWidgetDiv .goog-date-picker th {"," text-align: center;","}",".blocklyWidgetDiv .goog-date-picker td {"," text-align: center;"," vertical-align: middle;"," padding: 1px 3px;","}",".blocklyWidgetDiv .goog-date-picker-menu {"," position: absolute;", -" background: threedface;"," border: 1px solid gray;"," -moz-user-focus: normal;"," z-index: 1;"," outline: none;","}",".blocklyWidgetDiv .goog-date-picker-menu ul {"," list-style: none;"," margin: 0px;"," padding: 0px;","}",".blocklyWidgetDiv .goog-date-picker-menu ul li {"," cursor: default;","}",".blocklyWidgetDiv .goog-date-picker-menu-selected {"," background: #ccf;","}",".blocklyWidgetDiv .goog-date-picker th {"," font-size: .9em;","}",".blocklyWidgetDiv .goog-date-picker td div {", -" float: left;","}",".blocklyWidgetDiv .goog-date-picker button {"," padding: 0px;"," margin: 1px 0;"," border: 0;"," color: #20c;"," font-weight: bold;"," background: transparent;","}",".blocklyWidgetDiv .goog-date-picker-date {"," background: #fff;","}",".blocklyWidgetDiv .goog-date-picker-week,",".blocklyWidgetDiv .goog-date-picker-wday {"," padding: 1px 3px;"," border: 0;"," border-color: #a2bbdd;"," border-style: solid;","}",".blocklyWidgetDiv .goog-date-picker-week {"," border-right-width: 1px;", -"}",".blocklyWidgetDiv .goog-date-picker-wday {"," border-bottom-width: 1px;","}",".blocklyWidgetDiv .goog-date-picker-head td {"," text-align: center;","}",".blocklyWidgetDiv td.goog-date-picker-today-cont {"," text-align: center;","}",".blocklyWidgetDiv td.goog-date-picker-none-cont {"," text-align: center;","}",".blocklyWidgetDiv .goog-date-picker-month {"," min-width: 11ex;"," white-space: nowrap;","}",".blocklyWidgetDiv .goog-date-picker-year {"," min-width: 6ex;"," white-space: nowrap;", -"}",".blocklyWidgetDiv .goog-date-picker-monthyear {"," white-space: nowrap;","}",".blocklyWidgetDiv .goog-date-picker table {"," border-collapse: collapse;","}",".blocklyWidgetDiv .goog-date-picker-other-month {"," color: #888;","}",".blocklyWidgetDiv .goog-date-picker-wkend-start,",".blocklyWidgetDiv .goog-date-picker-wkend-end {"," background: #eee;","}",".blocklyWidgetDiv td.goog-date-picker-selected {"," background: #c3d9ff;","}",".blocklyWidgetDiv .goog-date-picker-today {"," background: #9ab;", -" font-weight: bold !important;"," border-color: #246 #9bd #9bd #246;"," color: #fff;","}",".blocklyWidgetDiv .goog-menu {"," background: #fff;"," border-color: #ccc #666 #666 #ccc;"," border-style: solid;"," border-width: 1px;"," cursor: default;"," font: normal 13px Arial, sans-serif;"," margin: 0;"," outline: none;"," padding: 4px 0;"," position: absolute;"," z-index: 20000;","}",".blocklyWidgetDiv .goog-menuitem {"," color: #000;"," font: normal 13px Arial, sans-serif;"," list-style: none;", -" margin: 0;"," padding: 4px 7em 4px 28px;"," white-space: nowrap;","}",".blocklyWidgetDiv .goog-menuitem.goog-menuitem-rtl {"," padding-left: 7em;"," padding-right: 28px;","}",".blocklyWidgetDiv .goog-menu-nocheckbox .goog-menuitem,",".blocklyWidgetDiv .goog-menu-noicon .goog-menuitem {"," padding-left: 12px;","}",".blocklyWidgetDiv .goog-menu-noaccel .goog-menuitem {"," padding-right: 20px;","}",".blocklyWidgetDiv .goog-menuitem-content {"," color: #000;"," font: normal 13px Arial, sans-serif;", -"}",".blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-accel,",".blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-content {"," color: #ccc !important;","}",".blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-icon {"," opacity: 0.3;"," -moz-opacity: 0.3;"," filter: alpha(opacity=30);","}",".blocklyWidgetDiv .goog-menuitem-highlight,",".blocklyWidgetDiv .goog-menuitem-hover {"," background-color: #d6e9f8;"," border-color: #d6e9f8;"," border-style: dotted;"," border-width: 1px 0;", -" padding-bottom: 3px;"," padding-top: 3px;","}",".blocklyWidgetDiv .goog-menuitem-checkbox,",".blocklyWidgetDiv .goog-menuitem-icon {"," background-repeat: no-repeat;"," height: 16px;"," left: 6px;"," position: absolute;"," right: auto;"," vertical-align: middle;"," width: 16px;","}",".blocklyWidgetDiv .goog-menuitem-rtl .goog-menuitem-checkbox,",".blocklyWidgetDiv .goog-menuitem-rtl .goog-menuitem-icon {"," left: auto;"," right: 6px;","}",".blocklyWidgetDiv .goog-option-selected .goog-menuitem-checkbox,", -".blocklyWidgetDiv .goog-option-selected .goog-menuitem-icon {"," background: url(//ssl.gstatic.com/editor/editortoolbar.png) no-repeat -512px 0;","}",".blocklyWidgetDiv .goog-menuitem-accel {"," color: #999;"," direction: ltr;"," left: auto;"," padding: 0 6px;"," position: absolute;"," right: 0;"," text-align: right;","}",".blocklyWidgetDiv .goog-menuitem-rtl .goog-menuitem-accel {"," left: 0;"," right: auto;"," text-align: left;","}",".blocklyWidgetDiv .goog-menuitem-mnemonic-hint {", -" text-decoration: underline;","}",".blocklyWidgetDiv .goog-menuitem-mnemonic-separator {"," color: #999;"," font-size: 12px;"," padding-left: 4px;","}",".blocklyWidgetDiv .goog-menuseparator {"," border-top: 1px solid #ccc;"," margin: 4px 0;"," padding: 0;","}",""]; +" font-family: sans-serif;"," font-size: 9pt;","}",".blocklyIconShield {"," cursor: default;"," fill: #00c;"," stroke: #ccc;"," stroke-width: 1px;","}",".blocklyIconGroup:not(:hover),",".blocklyIconGroupReadonly {"," opacity: .6;","}",".blocklyIconMark {"," cursor: default !important;"," fill: #ccc;"," font-family: sans-serif;"," font-size: 9pt;"," font-weight: bold;"," text-anchor: middle;","}",".blocklyWarningBody {","}",".blocklyMinimalBody {"," margin: 0;"," padding: 0;","}",".blocklyCommentTextarea {", +" background-color: #ffc;"," border: 0;"," margin: 0;"," padding: 2px;"," resize: none;","}",".blocklyHtmlInput {"," border: none;"," font-family: sans-serif;"," font-size: 11pt;"," outline: none;"," width: 100%","}",".blocklyMainBackground {"," fill: url(#blocklyGridPattern);","}",".blocklyMutatorBackground {"," fill: #fff;"," stroke: #ddd;"," stroke-width: 1;","}",".blocklyFlyoutBackground {"," fill: #ddd;"," fill-opacity: .8;","}",".blocklyColourBackground {"," fill: #666;","}", +".blocklyScrollbarBackground {"," fill: #fff;"," stroke: #e4e4e4;"," stroke-width: 1;","}",".blocklyScrollbarKnob {"," fill: #ccc;","}",".blocklyScrollbarBackground:hover+.blocklyScrollbarKnob,",".blocklyScrollbarKnob:hover {"," fill: #bbb;","}",".blocklyInvalidInput {"," background: #faa;","}",".blocklyAngleCircle {"," stroke: #444;"," stroke-width: 1;"," fill: #ddd;"," fill-opacity: .8;","}",".blocklyAngleMarks {"," stroke: #444;"," stroke-width: 1;","}",".blocklyAngleGauge {"," fill: #f88;", +" fill-opacity: .8; ","}",".blocklyAngleLine {"," stroke: #f00;"," stroke-width: 2;"," stroke-linecap: round;","}",".blocklyContextMenu {"," border-radius: 4px;","}",".blocklyDropdownMenu {"," padding: 0 !important;","}",".blocklyWidgetDiv .goog-option-selected .goog-menuitem-checkbox,",".blocklyWidgetDiv .goog-option-selected .goog-menuitem-icon {"," background: url(<<>>/sprites.png) no-repeat -48px -16px !important;","}",".blocklyToolboxDiv {"," background-color: #ddd;"," display: none;", +" overflow-x: visible;"," overflow-y: auto;"," position: absolute;","}",".blocklyTreeRoot {"," padding: 4px 0;","}",".blocklyTreeRoot:focus {"," outline: none;","}",".blocklyTreeRow {"," line-height: 22px;"," height: 22px;"," padding-right: 1em;"," white-space: nowrap;","}",'.blocklyToolboxDiv[dir="RTL"] .blocklyTreeRow {'," padding-right: 0;"," padding-left: 1em !important;","}",".blocklyTreeRow:hover {"," background-color: #e4e4e4;","}",".blocklyTreeSeparator {"," border-bottom: solid #e5e5e5 1px;", +" height: 0px;"," margin: 5px 0;","}",".blocklyTreeIcon {"," background-image: url(<<>>/sprites.png);"," height: 16px;"," vertical-align: middle;"," width: 16px;","}",".blocklyTreeIconClosedLtr {"," background-position: -32px -1px;","}",".blocklyTreeIconClosedRtl {"," background-position: 0px -1px;","}",".blocklyTreeIconOpen {"," background-position: -16px -1px;","}",".blocklyTreeSelected>.blocklyTreeIconClosedLtr {"," background-position: -32px -17px;","}",".blocklyTreeSelected>.blocklyTreeIconClosedRtl {", +" background-position: 0px -17px;","}",".blocklyTreeSelected>.blocklyTreeIconOpen {"," background-position: -16px -17px;","}",".blocklyTreeIconNone,",".blocklyTreeSelected>.blocklyTreeIconNone {"," background-position: -48px -1px;","}",".blocklyTreeLabel {"," cursor: default;"," font-family: sans-serif;"," font-size: 16px;"," padding: 0 3px;"," vertical-align: middle;","}",".blocklyTreeSelected {"," background-color: #57e !important;","}",".blocklyTreeSelected .blocklyTreeLabel {"," color: #fff;", +"}",".blocklyWidgetDiv .goog-palette {"," outline: none;"," cursor: default;","}",".blocklyWidgetDiv .goog-palette-table {"," border: 1px solid #666;"," border-collapse: collapse;","}",".blocklyWidgetDiv .goog-palette-cell {"," height: 13px;"," width: 15px;"," margin: 0;"," border: 0;"," text-align: center;"," vertical-align: middle;"," border-right: 1px solid #666;"," font-size: 1px;","}",".blocklyWidgetDiv .goog-palette-colorswatch {"," position: relative;"," height: 13px;"," width: 15px;", +" border: 1px solid #666;","}",".blocklyWidgetDiv .goog-palette-cell-hover .goog-palette-colorswatch {"," border: 1px solid #FFF;","}",".blocklyWidgetDiv .goog-palette-cell-selected .goog-palette-colorswatch {"," border: 1px solid #000;"," color: #fff;","}",".blocklyWidgetDiv .goog-date-picker,",".blocklyWidgetDiv .goog-date-picker th,",".blocklyWidgetDiv .goog-date-picker td {"," font: 13px Arial, sans-serif;","}",".blocklyWidgetDiv .goog-date-picker {"," -moz-user-focus: normal;"," -moz-user-select: none;", +" position: relative;"," border: 1px solid #000;"," float: left;"," padding: 2px;"," color: #000;"," background: #c3d9ff;"," cursor: default;","}",".blocklyWidgetDiv .goog-date-picker th {"," text-align: center;","}",".blocklyWidgetDiv .goog-date-picker td {"," text-align: center;"," vertical-align: middle;"," padding: 1px 3px;","}",".blocklyWidgetDiv .goog-date-picker-menu {"," position: absolute;"," background: threedface;"," border: 1px solid gray;"," -moz-user-focus: normal;"," z-index: 1;", +" outline: none;","}",".blocklyWidgetDiv .goog-date-picker-menu ul {"," list-style: none;"," margin: 0px;"," padding: 0px;","}",".blocklyWidgetDiv .goog-date-picker-menu ul li {"," cursor: default;","}",".blocklyWidgetDiv .goog-date-picker-menu-selected {"," background: #ccf;","}",".blocklyWidgetDiv .goog-date-picker th {"," font-size: .9em;","}",".blocklyWidgetDiv .goog-date-picker td div {"," float: left;","}",".blocklyWidgetDiv .goog-date-picker button {"," padding: 0px;"," margin: 1px 0;", +" border: 0;"," color: #20c;"," font-weight: bold;"," background: transparent;","}",".blocklyWidgetDiv .goog-date-picker-date {"," background: #fff;","}",".blocklyWidgetDiv .goog-date-picker-week,",".blocklyWidgetDiv .goog-date-picker-wday {"," padding: 1px 3px;"," border: 0;"," border-color: #a2bbdd;"," border-style: solid;","}",".blocklyWidgetDiv .goog-date-picker-week {"," border-right-width: 1px;","}",".blocklyWidgetDiv .goog-date-picker-wday {"," border-bottom-width: 1px;","}",".blocklyWidgetDiv .goog-date-picker-head td {", +" text-align: center;","}",".blocklyWidgetDiv td.goog-date-picker-today-cont {"," text-align: center;","}",".blocklyWidgetDiv td.goog-date-picker-none-cont {"," text-align: center;","}",".blocklyWidgetDiv .goog-date-picker-month {"," min-width: 11ex;"," white-space: nowrap;","}",".blocklyWidgetDiv .goog-date-picker-year {"," min-width: 6ex;"," white-space: nowrap;","}",".blocklyWidgetDiv .goog-date-picker-monthyear {"," white-space: nowrap;","}",".blocklyWidgetDiv .goog-date-picker table {", +" border-collapse: collapse;","}",".blocklyWidgetDiv .goog-date-picker-other-month {"," color: #888;","}",".blocklyWidgetDiv .goog-date-picker-wkend-start,",".blocklyWidgetDiv .goog-date-picker-wkend-end {"," background: #eee;","}",".blocklyWidgetDiv td.goog-date-picker-selected {"," background: #c3d9ff;","}",".blocklyWidgetDiv .goog-date-picker-today {"," background: #9ab;"," font-weight: bold !important;"," border-color: #246 #9bd #9bd #246;"," color: #fff;","}",".blocklyWidgetDiv .goog-menu {", +" background: #fff;"," border-color: #ccc #666 #666 #ccc;"," border-style: solid;"," border-width: 1px;"," cursor: default;"," font: normal 13px Arial, sans-serif;"," margin: 0;"," outline: none;"," padding: 4px 0;"," position: absolute;"," z-index: 20000;","}",".blocklyWidgetDiv .goog-menuitem {"," color: #000;"," font: normal 13px Arial, sans-serif;"," list-style: none;"," margin: 0;"," padding: 4px 7em 4px 28px;"," white-space: nowrap;","}",".blocklyWidgetDiv .goog-menuitem.goog-menuitem-rtl {", +" padding-left: 7em;"," padding-right: 28px;","}",".blocklyWidgetDiv .goog-menu-nocheckbox .goog-menuitem,",".blocklyWidgetDiv .goog-menu-noicon .goog-menuitem {"," padding-left: 12px;","}",".blocklyWidgetDiv .goog-menu-noaccel .goog-menuitem {"," padding-right: 20px;","}",".blocklyWidgetDiv .goog-menuitem-content {"," color: #000;"," font: normal 13px Arial, sans-serif;","}",".blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-accel,",".blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-content {", +" color: #ccc !important;","}",".blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-icon {"," opacity: 0.3;"," -moz-opacity: 0.3;"," filter: alpha(opacity=30);","}",".blocklyWidgetDiv .goog-menuitem-highlight,",".blocklyWidgetDiv .goog-menuitem-hover {"," background-color: #d6e9f8;"," border-color: #d6e9f8;"," border-style: dotted;"," border-width: 1px 0;"," padding-bottom: 3px;"," padding-top: 3px;","}",".blocklyWidgetDiv .goog-menuitem-checkbox,",".blocklyWidgetDiv .goog-menuitem-icon {", +" background-repeat: no-repeat;"," height: 16px;"," left: 6px;"," position: absolute;"," right: auto;"," vertical-align: middle;"," width: 16px;","}",".blocklyWidgetDiv .goog-menuitem-rtl .goog-menuitem-checkbox,",".blocklyWidgetDiv .goog-menuitem-rtl .goog-menuitem-icon {"," left: auto;"," right: 6px;","}",".blocklyWidgetDiv .goog-option-selected .goog-menuitem-checkbox,",".blocklyWidgetDiv .goog-option-selected .goog-menuitem-icon {"," background: url(//ssl.gstatic.com/editor/editortoolbar.png) no-repeat -512px 0;", +"}",".blocklyWidgetDiv .goog-menuitem-accel {"," color: #999;"," direction: ltr;"," left: auto;"," padding: 0 6px;"," position: absolute;"," right: 0;"," text-align: right;","}",".blocklyWidgetDiv .goog-menuitem-rtl .goog-menuitem-accel {"," left: 0;"," right: auto;"," text-align: left;","}",".blocklyWidgetDiv .goog-menuitem-mnemonic-hint {"," text-decoration: underline;","}",".blocklyWidgetDiv .goog-menuitem-mnemonic-separator {"," color: #999;"," font-size: 12px;"," padding-left: 4px;", +"}",".blocklyWidgetDiv .goog-menuseparator {"," border-top: 1px solid #ccc;"," margin: 4px 0;"," padding: 0;","}",""]; // Copyright 2013 Google Inc. Apache License 2.0 Blockly.WidgetDiv={};Blockly.WidgetDiv.DIV=null;Blockly.WidgetDiv.owner_=null;Blockly.WidgetDiv.dispose_=null;Blockly.WidgetDiv.show=function(a,b){Blockly.WidgetDiv.hide();Blockly.WidgetDiv.owner_=a;Blockly.WidgetDiv.dispose_=b;Blockly.WidgetDiv.DIV.style.display="block"};Blockly.WidgetDiv.hide=function(){Blockly.WidgetDiv.owner_&&(Blockly.WidgetDiv.DIV.style.display="none",Blockly.WidgetDiv.dispose_&&Blockly.WidgetDiv.dispose_(),Blockly.WidgetDiv.owner_=null,Blockly.WidgetDiv.dispose_=null,goog.dom.removeChildren(Blockly.WidgetDiv.DIV))}; Blockly.WidgetDiv.isVisible=function(){return!!Blockly.WidgetDiv.owner_};Blockly.WidgetDiv.hideIfOwner=function(a){Blockly.WidgetDiv.owner_==a&&Blockly.WidgetDiv.hide()};Blockly.WidgetDiv.position=function(a,b,c,d){bc.width+d.x&&(a=c.width+d.x):a - ? - */ - var iconShield = Blockly.createSvgElement('circle', - {'class': 'blocklyIconShield', - 'r': Blockly.Icon.RADIUS, - 'cx': Blockly.Icon.RADIUS, - 'cy': Blockly.Icon.RADIUS}, this.iconGroup_); - this.iconMark_ = Blockly.createSvgElement('text', - {'class': 'blocklyIconMark', - 'x': Blockly.Icon.RADIUS, - 'y': 2 * Blockly.Icon.RADIUS - 3}, this.iconGroup_); - this.iconMark_.appendChild(document.createTextNode('?')); -}; - /** * Create the editor for the comment's bubble. * @return {!Element} The top-level node of the editor. diff --git a/core/css.js b/core/css.js index c3321ff20..d8b8ebffd 100644 --- a/core/css.js +++ b/core/css.js @@ -272,13 +272,9 @@ Blockly.Css.CONTENT = [ ' stroke-width: 1px;', '}', - '.blocklyIconGroup:hover>.blocklyIconShield {', - ' fill: #00f;', - ' stroke: #fff;', - '}', - - '.blocklyIconGroup:hover>.blocklyIconMark {', - ' fill: #fff;', + '.blocklyIconGroup:not(:hover),', + '.blocklyIconGroupReadonly {', + ' opacity: .6;', '}', '.blocklyIconMark {', diff --git a/core/icon.js b/core/icon.js index db51b559d..7788e23d8 100644 --- a/core/icon.js +++ b/core/icon.js @@ -39,9 +39,15 @@ Blockly.Icon = function(block) { }; /** - * Radius of icons. + * Icon in base64 format. + * @private */ -Blockly.Icon.RADIUS = 8; +Blockly.Icon.prototype.png_ = ''; + +/** + * Height and width of icons. + */ +Blockly.Icon.prototype.SIZE = 17; /** * Bubble UI (if visible). @@ -64,17 +70,25 @@ Blockly.Icon.prototype.iconY_ = 0; /** * Create the icon on the block. - * @private */ -Blockly.Icon.prototype.createIcon_ = function() { +Blockly.Icon.prototype.createIcon = function() { if (this.iconGroup_) { // Icon already exists. return; } /* Here's the markup that will be generated: - + + + */ - this.iconGroup_ = Blockly.createSvgElement('g', {}, null); + this.iconGroup_ = Blockly.createSvgElement('g', + {'class': 'blocklyIconGroup'}, null); + var img = Blockly.createSvgElement('image', + {'width': this.SIZE, 'height': this.SIZE}, + this.iconGroup_); + img.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', this.png_); + this.block_.getSvgRoot().appendChild(this.iconGroup_); Blockly.bindEvent_(this.iconGroup_, 'mouseup', this, this.iconClick_); this.updateEditable(); @@ -96,12 +110,12 @@ Blockly.Icon.prototype.dispose = function() { * Add or remove the UI indicating if this icon may be clicked or not. */ Blockly.Icon.prototype.updateEditable = function() { - if (!this.block_.isInFlyout) { + if (this.block_.isInFlyout || !this.block_.isEditable()) { Blockly.addClass_(/** @type {!Element} */ (this.iconGroup_), - 'blocklyIconGroup'); + 'blocklyIconGroupReadonly'); } else { Blockly.removeClass_(/** @type {!Element} */ (this.iconGroup_), - 'blocklyIconGroup'); + 'blocklyIconGroupReadonly'); } }; @@ -147,9 +161,9 @@ Blockly.Icon.prototype.renderIcon = function(cursorX) { this.iconGroup_.setAttribute('display', 'block'); var TOP_MARGIN = 5; - var diameter = 2 * Blockly.Icon.RADIUS; + var width = this.SIZE; if (Blockly.RTL) { - cursorX -= diameter; + cursorX -= width; } this.iconGroup_.setAttribute('transform', 'translate(' + cursorX + ', ' + TOP_MARGIN + ')'); @@ -157,7 +171,7 @@ Blockly.Icon.prototype.renderIcon = function(cursorX) { if (Blockly.RTL) { cursorX -= Blockly.BlockSvg.SEP_SPACE_X; } else { - cursorX += diameter + Blockly.BlockSvg.SEP_SPACE_X; + cursorX += width + Blockly.BlockSvg.SEP_SPACE_X; } return cursorX; }; @@ -183,8 +197,8 @@ Blockly.Icon.prototype.computeIconLocation = function() { // Find coordinates for the centre of the icon and update the arrow. var blockXY = this.block_.getRelativeToSurfaceXY(); var iconXY = Blockly.getRelativeXY_(this.iconGroup_); - var newX = blockXY.x + iconXY.x + Blockly.Icon.RADIUS; - var newY = blockXY.y + iconXY.y + Blockly.Icon.RADIUS; + var newX = blockXY.x + iconXY.x + this.SIZE / 2; + var newY = blockXY.y + iconXY.y + this.SIZE / 2; if (newX !== this.iconX_ || newY !== this.iconY_) { this.setIconLocation(newX, newY); } diff --git a/core/mutator.js b/core/mutator.js index 19b2f1d55..e17569d04 100644 --- a/core/mutator.js +++ b/core/mutator.js @@ -46,6 +46,12 @@ Blockly.Mutator = function(quarkNames) { }; goog.inherits(Blockly.Mutator, Blockly.Icon); +/** + * Icon in base64 format. + * @private + */ +Blockly.Mutator.prototype.png_ = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAANyAAADcgBffIlqAAAAAd0SU1FB98DGgUkCK5AYg4AAAGlSURBVDjLnZS9SiRBFIVLunt+9gUU1EmFaSfQ0GCeRcTAwEDERHYTQUZ8l6F9Ad9gMzcVfwaxdzpxuHRVZNVncHfAnt5ply0oqjj33FP3FqfKGGMM8K0suRZhGgKehhECXoSpc1wBXTMXEOHXeIzr9yGKwJjlM4ogTSHLcCLcAV1TllyPx7imxGUzy3DWMjIiTPv9OiGOYXVV92tr0GrVOWkKIuQmBPxiC1EEz8/w8ADn53B/D6+vkCR1Xgh4A9XAygrs7IBfuF7vYW9PK/zMB6iIJIlW8P4O1sLZmSaenkJZqlCeQ7vdILKxAS8vGjg5qZ54fKz4ZAKbmw0ixsDFhQZ2d6v4YKD45eUX7ayvw+OjBo6OquTDQ8WfnrTipSLtNhQFhACzGRwcwNYW7O/D25viRQGdzhfttFowHGrCgt0ZDut+AfirT5JET5xMYDTStSjqPonjPz4RYZqmdTd2OtDr6b7Xq7bw+bJFyI1zXGXZ/72d21tKa/lugK4Idzc3uO3tf3vFg4EKzGb8BOL5d9C1lpEIv70nNP0n3hNEyK3lx1zgA46lEkSYoMBCAAAAAElFTkSuQmCC'; + /** * Width of workspace. * @private @@ -58,33 +64,6 @@ Blockly.Mutator.prototype.workspaceWidth_ = 0; */ Blockly.Mutator.prototype.workspaceHeight_ = 0; -/** - * Create the icon on the block. - */ -Blockly.Mutator.prototype.createIcon = function() { - if (this.iconMark_) { - // Icon already exists. - return; - } - Blockly.Icon.prototype.createIcon_.call(this); - /* Here's the markup that will be generated: - - ★ - */ - var quantum = Blockly.Icon.RADIUS / 2; - var iconShield = Blockly.createSvgElement('rect', - {'class': 'blocklyIconShield', - 'width': 4 * quantum, - 'height': 4 * quantum, - 'rx': quantum, - 'ry': quantum}, this.iconGroup_); - this.iconMark_ = Blockly.createSvgElement('text', - {'class': 'blocklyIconMark', - 'x': Blockly.Icon.RADIUS, - 'y': 2 * Blockly.Icon.RADIUS - 4}, this.iconGroup_); - this.iconMark_.appendChild(document.createTextNode('\u2605')); -}; - /** * Clicking on the icon toggles if the mutator bubble is visible. * Disable if block is uneditable. @@ -136,8 +115,8 @@ Blockly.Mutator.prototype.updateEditable = function() { // Close any mutator bubble. Icon is not clickable. this.setVisible(false); if (this.iconGroup_) { - Blockly.removeClass_(/** @type {!Element} */ (this.iconGroup_), - 'blocklyIconGroup'); + Blockly.addClass_(/** @type {!Element} */ (this.iconGroup_), + 'blocklyIconGroupReadonly'); } } }; diff --git a/core/warning.js b/core/warning.js index 00f4a151f..a10ff15e9 100644 --- a/core/warning.js +++ b/core/warning.js @@ -38,10 +38,15 @@ goog.require('Blockly.Icon'); */ Blockly.Warning = function(block) { Blockly.Warning.superClass_.constructor.call(this, block); - this.createIcon_(); + this.createIcon(); }; goog.inherits(Blockly.Warning, Blockly.Icon); +/** + * Icon in base64 format. + * @private + */ +Blockly.Warning.prototype.png_ = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAANyAAADcgBffIlqAAAAAd0SU1FB98DGgApDBpIGrEAAAGfSURBVDjLnZM9S2NREIbfc2P8AF27BXshpIzK5g9ssUj8C2tnYyUoiBGSyk4sbCLs1vkRgoW1jYWFICwsMV2Se3JPboLe+FhcNCZcjXFgOMzHeec9M2ekDwTIAEUgo68IsOQczdNTIudoAksTg/g+5+UyDxKUyzz4PueTsvhZr+NmZkCC6Wmo1QiAX58FmLKWf4VCDPCiGxtgLf+B9FiQXo+9y0ucBIUCnJ3B+noMdHGBC0P2xrH4HoYEmUx8qVQCgMPD2F5ehjDEjTbZe2s4p5NKRenb2+Qid3dSpaK0tTp+j8VKq0VncXHQh2IxZrK/P/AtLECjQQf4McQEMNbq786O5qwdANfr8Xl/P/AFgbS7qzlr9Qcwr4EoYvPmBud5wxPJ5+HqCtbWhv3GwPU1Lor4/fKMeedo5vPDiRKsrsLWFuRyybFOhxbwTd0upWqVcDQpaTqjWq0SdruU5PvUkiol/ZNRzeXA96mp3aaRzSYnjdNsFtptGiYI2PY8HaVSmu33xWf3K5WS6ffVe3rSgXnzT+YlpSfY00djjJOkZ/wpr41bQMIsAAAAAElFTkSuQmCC'; /** * Create the text for the warning's bubble. @@ -71,28 +76,6 @@ Blockly.Warning.textToDom_ = function(text) { */ Blockly.Warning.prototype.text_ = ''; -/** - * Create the icon on the block. - * @private - */ -Blockly.Warning.prototype.createIcon_ = function() { - Blockly.Icon.prototype.createIcon_.call(this); - /* Here's the markup that will be generated: - - ! - */ - var iconShield = Blockly.createSvgElement('path', - {'class': 'blocklyIconShield', - 'd': 'M 2,15 Q -1,15 0.5,12 L 6.5,1.7 Q 8,-1 9.5,1.7 L 15.5,12 ' + - 'Q 17,15 14,15 z'}, - this.iconGroup_); - this.iconMark_ = Blockly.createSvgElement('text', - {'class': 'blocklyIconMark', - 'x': Blockly.Icon.RADIUS, - 'y': 2 * Blockly.Icon.RADIUS - 3}, this.iconGroup_); - this.iconMark_.appendChild(document.createTextNode('!')); -}; - /** * Show or hide the warning bubble. * @param {boolean} visible True if the bubble should be visible. diff --git a/media/icons.svg b/media/icons.svg new file mode 100644 index 000000000..c066376b6 --- /dev/null +++ b/media/icons.svg @@ -0,0 +1,40 @@ + + + + + + + + + ? + + + + + + + + ! + + + From 0d376386f2948dfc3c7e831cec9cb98998c2f2d6 Mon Sep 17 00:00:00 2001 From: Neil Fraser Date: Thu, 26 Mar 2015 14:21:14 -0700 Subject: [PATCH 5/7] Replace 8-tooth gear with 6-tooth gear for mutator icon. --- blockly_compressed.js | 2 +- core/mutator.js | 2 +- media/icons.svg | 17 +++++++++++------ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/blockly_compressed.js b/blockly_compressed.js index 61bd9454a..914ee48ce 100644 --- a/blockly_compressed.js +++ b/blockly_compressed.js @@ -999,7 +999,7 @@ a)}b.select()}};Blockly.WorkspaceSvg.prototype.recordDeleteAreas=function(){this Blockly.WorkspaceSvg.prototype.isDeleteArea=function(a){a=Blockly.mouseToSvg(a);a=new goog.math.Coordinate(a.x,a.y);if(this.deleteAreaTrash_){if(this.deleteAreaTrash_.contains(a))return this.trashcan.setOpen_(!0),Blockly.Css.setCursor(Blockly.Css.Cursor.DELETE),!0;this.trashcan.setOpen_(!1)}if(this.deleteAreaToolbox_&&this.deleteAreaToolbox_.contains(a))return Blockly.Css.setCursor(Blockly.Css.Cursor.DELETE),!0;Blockly.Css.setCursor(Blockly.Css.Cursor.CLOSED);return!1}; Blockly.WorkspaceSvg.prototype.clear=Blockly.WorkspaceSvg.prototype.clear; // Copyright 2012 Google Inc. Apache License 2.0 -Blockly.Mutator=function(a){Blockly.Mutator.superClass_.constructor.call(this,null);this.quarkNames_=a};goog.inherits(Blockly.Mutator,Blockly.Icon);Blockly.Mutator.prototype.png_="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAANyAAADcgBffIlqAAAAAd0SU1FB98DGgUkCK5AYg4AAAGlSURBVDjLnZS9SiRBFIVLunt+9gUU1EmFaSfQ0GCeRcTAwEDERHYTQUZ8l6F9Ad9gMzcVfwaxdzpxuHRVZNVncHfAnt5ply0oqjj33FP3FqfKGGMM8K0suRZhGgKehhECXoSpc1wBXTMXEOHXeIzr9yGKwJjlM4ogTSHLcCLcAV1TllyPx7imxGUzy3DWMjIiTPv9OiGOYXVV92tr0GrVOWkKIuQmBPxiC1EEz8/w8ADn53B/D6+vkCR1Xgh4A9XAygrs7IBfuF7vYW9PK/zMB6iIJIlW8P4O1sLZmSaenkJZqlCeQ7vdILKxAS8vGjg5qZ54fKz4ZAKbmw0ixsDFhQZ2d6v4YKD45eUX7ayvw+OjBo6OquTDQ8WfnrTipSLtNhQFhACzGRwcwNYW7O/D25viRQGdzhfttFowHGrCgt0ZDut+AfirT5JET5xMYDTStSjqPonjPz4RYZqmdTd2OtDr6b7Xq7bw+bJFyI1zXGXZ/72d21tKa/lugK4Idzc3uO3tf3vFg4EKzGb8BOL5d9C1lpEIv70nNP0n3hNEyK3lx1zgA46lEkSYoMBCAAAAAElFTkSuQmCC"; +Blockly.Mutator=function(a){Blockly.Mutator.superClass_.constructor.call(this,null);this.quarkNames_=a};goog.inherits(Blockly.Mutator,Blockly.Icon);Blockly.Mutator.prototype.png_="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAANyAAADcgBffIlqAAAAAd0SU1FB98DGhULOIajyb8AAAHMSURBVDjLnZS9SiRBFIXP/CQ9iIHgPoGBTo8vIAaivoKaKJr6DLuxYqKYKIqRgSCMrblmIxqsICgOmAriziIiRXWjYPdnUDvT2+PMsOyBoop7qk71vedWS5KAkrWsGUMjSYjpgSQhNoZGFLEKeGoKGMNttUpULkOhAFL3USiA70MQEBnDDeDJWtaqVaJeB7uNICAKQ1ZkDI1yufOm+XnY2YHl5c6874MxPClJiDulkMvBxYWrw/095POdU0sS4hxALqcWtreloSGpVJLGxtL49bX0+Ci9vUkzM2kcXGFbypUKxHHLBXZ3YW4ONjfh4yN1aGIiPQOQEenrg6MjR+zvZz99Y8PFT09hYCArktdfsFY6PHTr83NlUKu5+eREennJchmR/n5pYcGtJyezG6em3Dw7Kw0OZrlMOr6f1gTg4ACWlmBvz9WoifHxbDpf3Flfd+54njQ9ncYvL6WHB+n9XVpcbHOnW59IUKu5m+p11zftfLHo+qRorZ6Hh/Xt7k5fsLUl1evS1dWfG9swMiJZq9+KIlaD4P/eztkZNgz5LsAzhpvjY6JK5d9e8eioE3h95SdQbDrkhSErxvArjkl6/U/imMQYnsKQH02BT7vbZZfVOiWhAAAAAElFTkSuQmCC"; Blockly.Mutator.prototype.workspaceWidth_=0;Blockly.Mutator.prototype.workspaceHeight_=0;Blockly.Mutator.prototype.iconClick_=function(a){this.block_.isEditable()&&Blockly.Icon.prototype.iconClick_.call(this,a)}; Blockly.Mutator.prototype.createEditor_=function(){this.svgDialog_=Blockly.createSvgElement("svg",{x:Blockly.Bubble.BORDER_WIDTH,y:Blockly.Bubble.BORDER_WIDTH},null);Blockly.createSvgElement("rect",{"class":"blocklyMutatorBackground",height:"100%",width:"100%"},this.svgDialog_);var a=this;this.workspace_=new Blockly.WorkspaceSvg(function(){return a.getFlyoutMetrics_()},null);this.svgDialog_.appendChild(this.workspace_.createDom("blocklyMutatorBackground"));this.workspace_.addFlyout();return this.svgDialog_}; Blockly.Mutator.prototype.updateEditable=function(){this.block_.isEditable()?Blockly.Icon.prototype.updateEditable.call(this):(this.setVisible(!1),this.iconGroup_&&Blockly.addClass_(this.iconGroup_,"blocklyIconGroupReadonly"))}; diff --git a/core/mutator.js b/core/mutator.js index e17569d04..04ed0781f 100644 --- a/core/mutator.js +++ b/core/mutator.js @@ -50,7 +50,7 @@ goog.inherits(Blockly.Mutator, Blockly.Icon); * Icon in base64 format. * @private */ -Blockly.Mutator.prototype.png_ = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAANyAAADcgBffIlqAAAAAd0SU1FB98DGgUkCK5AYg4AAAGlSURBVDjLnZS9SiRBFIVLunt+9gUU1EmFaSfQ0GCeRcTAwEDERHYTQUZ8l6F9Ad9gMzcVfwaxdzpxuHRVZNVncHfAnt5ply0oqjj33FP3FqfKGGMM8K0suRZhGgKehhECXoSpc1wBXTMXEOHXeIzr9yGKwJjlM4ogTSHLcCLcAV1TllyPx7imxGUzy3DWMjIiTPv9OiGOYXVV92tr0GrVOWkKIuQmBPxiC1EEz8/w8ADn53B/D6+vkCR1Xgh4A9XAygrs7IBfuF7vYW9PK/zMB6iIJIlW8P4O1sLZmSaenkJZqlCeQ7vdILKxAS8vGjg5qZ54fKz4ZAKbmw0ixsDFhQZ2d6v4YKD45eUX7ayvw+OjBo6OquTDQ8WfnrTipSLtNhQFhACzGRwcwNYW7O/D25viRQGdzhfttFowHGrCgt0ZDut+AfirT5JET5xMYDTStSjqPonjPz4RYZqmdTd2OtDr6b7Xq7bw+bJFyI1zXGXZ/72d21tKa/lugK4Idzc3uO3tf3vFg4EKzGb8BOL5d9C1lpEIv70nNP0n3hNEyK3lx1zgA46lEkSYoMBCAAAAAElFTkSuQmCC'; +Blockly.Mutator.prototype.png_ = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAANyAAADcgBffIlqAAAAAd0SU1FB98DGhULOIajyb8AAAHMSURBVDjLnZS9SiRBFIXP/CQ9iIHgPoGBTo8vIAaivoKaKJr6DLuxYqKYKIqRgSCMrblmIxqsICgOmAriziIiRXWjYPdnUDvT2+PMsOyBoop7qk71vedWS5KAkrWsGUMjSYjpgSQhNoZGFLEKeGoKGMNttUpULkOhAFL3USiA70MQEBnDDeDJWtaqVaJeB7uNICAKQ1ZkDI1yufOm+XnY2YHl5c6874MxPClJiDulkMvBxYWrw/095POdU0sS4hxALqcWtreloSGpVJLGxtL49bX0+Ci9vUkzM2kcXGFbypUKxHHLBXZ3YW4ONjfh4yN1aGIiPQOQEenrg6MjR+zvZz99Y8PFT09hYCArktdfsFY6PHTr83NlUKu5+eREennJchmR/n5pYcGtJyezG6em3Dw7Kw0OZrlMOr6f1gTg4ACWlmBvz9WoifHxbDpf3Flfd+54njQ9ncYvL6WHB+n9XVpcbHOnW59IUKu5m+p11zftfLHo+qRorZ6Hh/Xt7k5fsLUl1evS1dWfG9swMiJZq9+KIlaD4P/eztkZNgz5LsAzhpvjY6JK5d9e8eioE3h95SdQbDrkhSErxvArjkl6/U/imMQYnsKQH02BT7vbZZfVOiWhAAAAAElFTkSuQmCC'; /** * Width of workspace. diff --git a/media/icons.svg b/media/icons.svg index c066376b6..ba4e269af 100644 --- a/media/icons.svg +++ b/media/icons.svg @@ -1,5 +1,5 @@ - + - + ? - + - + - + ! From 2c7618597e5637aaf064376200bde508ec486ad3 Mon Sep 17 00:00:00 2001 From: Neil Fraser Date: Thu, 26 Mar 2015 15:08:36 -0700 Subject: [PATCH 6/7] Fix comments' cursor in Chrome. --- blockly_compressed.js | 2 +- blockly_uncompressed.js | 429 ++++++++++++++++++++-------------------- core/blockly.js | 5 +- 3 files changed, 224 insertions(+), 212 deletions(-) diff --git a/blockly_compressed.js b/blockly_compressed.js index 914ee48ce..1092ddc40 100644 --- a/blockly_compressed.js +++ b/blockly_compressed.js @@ -1354,7 +1354,7 @@ Blockly.onKeyDown_=function(a){if(!Blockly.isTargetInput_(a))if(27==a.keyCode)Bl Blockly.longStop_=function(){Blockly.longPid_&&(clearTimeout(Blockly.longPid_),Blockly.longPid_=0)};Blockly.copy_=function(a){var b=Blockly.Xml.blockToDom_(a);Blockly.Xml.deleteNext(b);a=a.getRelativeToSurfaceXY();b.setAttribute("x",Blockly.RTL?-a.x:a.x);b.setAttribute("y",a.y);Blockly.clipboard_=b}; Blockly.showContextMenu_=function(a){if(!Blockly.readOnly){var b=[];if(Blockly.collapse){for(var c=!1,d=!1,e=Blockly.mainWorkspace.getTopBlocks(!1),f=0;f Date: Thu, 26 Mar 2015 20:47:36 -0700 Subject: [PATCH 7/7] Lint warning cleanup. --- blockly_compressed.js | 4 ++-- core/toolbox.js | 4 ++-- core/workspace_svg.js | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/blockly_compressed.js b/blockly_compressed.js index 1092ddc40..dfa77e1b8 100644 --- a/blockly_compressed.js +++ b/blockly_compressed.js @@ -1275,7 +1275,7 @@ b.blocks=[];a(Blockly.languageTree,this.tree_);if(b.blocks.length)throw"Toolbox Blockly.Toolbox.TreeControl=function(a,b){this.toolbox_=a;goog.ui.tree.TreeControl.call(this,goog.html.SafeHtml.EMPTY,b)};goog.inherits(Blockly.Toolbox.TreeControl,goog.ui.tree.TreeControl);Blockly.Toolbox.TreeControl.prototype.enterDocument=function(){Blockly.Toolbox.TreeControl.superClass_.enterDocument.call(this);if(goog.events.BrowserFeature.TOUCH_ENABLED){var a=this.getElement();Blockly.bindEvent_(a,goog.events.EventType.TOUCHSTART,this,this.handleTouchEvent_)}}; Blockly.Toolbox.TreeControl.prototype.handleTouchEvent_=function(a){a.preventDefault();var b=this.getNodeFromEvent_(a);b&&a.type===goog.events.EventType.TOUCHSTART&&setTimeout(function(){b.onMouseDown(a)},1)};Blockly.Toolbox.TreeControl.prototype.createNode=function(a){return new Blockly.Toolbox.TreeNode(this.toolbox_,a?goog.html.SafeHtml.htmlEscape(a):goog.html.SafeHtml.EMPTY,this.getConfig(),this.getDomHelper())}; Blockly.Toolbox.TreeControl.prototype.setSelectedItem=function(a){Blockly.removeAllRanges();if(this.selectedItem_!=a){goog.ui.tree.TreeControl.prototype.setSelectedItem.call(this,a);var b=this.toolbox_;a&&a.blocks&&a.blocks.length?(b.flyout_.show(a.blocks),b.lastCategory_!=a.blocks&&(b.flyout_.scrollToTop(),b.lastCategory_=a.blocks)):b.flyout_.hide()}}; -Blockly.Toolbox.TreeNode=function(a,b,c,d){goog.ui.tree.TreeNode.call(this,b,c,d);a&&(b=function(){Blockly.fireUiEvent(window,"resize")},goog.events.listen(a.tree_,goog.ui.tree.BaseNode.EventType.EXPAND,b),goog.events.listen(a.tree_,goog.ui.tree.BaseNode.EventType.COLLAPSE,b))};goog.inherits(Blockly.Toolbox.TreeNode,goog.ui.tree.TreeNode);goog.ui.tree.BaseNode.prototype.getExpandIconSafeHtml=function(){return goog.html.SafeHtml.create("span")}; +Blockly.Toolbox.TreeNode=function(a,b,c,d){goog.ui.tree.TreeNode.call(this,b,c,d);a&&(b=function(){Blockly.fireUiEvent(window,"resize")},goog.events.listen(a.tree_,goog.ui.tree.BaseNode.EventType.EXPAND,b),goog.events.listen(a.tree_,goog.ui.tree.BaseNode.EventType.COLLAPSE,b))};goog.inherits(Blockly.Toolbox.TreeNode,goog.ui.tree.TreeNode);Blockly.Toolbox.TreeNode.prototype.getExpandIconSafeHtml=function(){return goog.html.SafeHtml.create("span")}; Blockly.Toolbox.TreeNode.prototype.onMouseDown=function(a){this.hasChildren()&&this.isUserCollapsible_?(this.toggle(),this.select()):this.isSelected()?this.getTree().setSelectedItem(null):this.select();this.updateRow()};Blockly.Toolbox.TreeNode.prototype.onDoubleClick_=function(a){};Blockly.Toolbox.TreeSeparator=function(){Blockly.Toolbox.TreeNode.call(this,null,"",Blockly.Toolbox.TreeSeparator.CONFIG_)};goog.inherits(Blockly.Toolbox.TreeSeparator,Blockly.Toolbox.TreeNode); Blockly.Toolbox.TreeSeparator.CONFIG_={cssTreeRow:"blocklyTreeSeparator"}; // Copyright 2013 Google Inc. Apache License 2.0 @@ -1354,7 +1354,7 @@ Blockly.onKeyDown_=function(a){if(!Blockly.isTargetInput_(a))if(27==a.keyCode)Bl Blockly.longStop_=function(){Blockly.longPid_&&(clearTimeout(Blockly.longPid_),Blockly.longPid_=0)};Blockly.copy_=function(a){var b=Blockly.Xml.blockToDom_(a);Blockly.Xml.deleteNext(b);a=a.getRelativeToSurfaceXY();b.setAttribute("x",Blockly.RTL?-a.x:a.x);b.setAttribute("y",a.y);Blockly.clipboard_=b}; Blockly.showContextMenu_=function(a){if(!Blockly.readOnly){var b=[];if(Blockly.collapse){for(var c=!1,d=!1,e=Blockly.mainWorkspace.getTopBlocks(!1),f=0;f