diff --git a/blockly_compressed.js b/blockly_compressed.js index d6a5478ff..c0484801c 100644 --- a/blockly_compressed.js +++ b/blockly_compressed.js @@ -999,7 +999,7 @@ Blockly.WorkspaceSvg.prototype.isDeleteArea=function(a){a=Blockly.mouseToSvg(a,B Blockly.WorkspaceSvg.prototype.onMouseDown_=function(a){this.markFocused();Blockly.isTargetInput_(a)||(Blockly.svgResize(this),Blockly.terminateDrag_(),Blockly.hideChaff(),a.target&&a.target.nodeName&&("svg"==a.target.nodeName.toLowerCase()||a.target==this.svgBackground_)&&Blockly.selected&&!this.options.readOnly&&Blockly.selected.unselect(),Blockly.isRightButton(a)?this.showContextMenu_(a):this.scrollbar&&(Blockly.removeAllRanges(),this.isScrolling=!0,this.startDragMouseX=a.clientX,this.startDragMouseY= a.clientY,this.startDragMetrics=this.getMetrics(),this.startScrollX=this.scrollX,this.startScrollY=this.scrollY,"mouseup"in Blockly.bindEvent_.TOUCH_MAP&&(Blockly.onTouchUpWrapper_=Blockly.bindEvent_(document,"mouseup",null,Blockly.onMouseUp_)),Blockly.onMouseMoveWrapper_=Blockly.bindEvent_(document,"mousemove",null,Blockly.onMouseMove_)),a.stopPropagation())}; Blockly.WorkspaceSvg.prototype.startDrag=function(a,b,c){a=Blockly.mouseToSvg(a,this.options.svg);a.x/=this.scale;a.y/=this.scale;this.dragDeltaX_=b-a.x;this.dragDeltaY_=c-a.y};Blockly.WorkspaceSvg.prototype.moveDrag=function(a){a=Blockly.mouseToSvg(a,this.options.svg);a.x/=this.scale;a.y/=this.scale;return new goog.math.Coordinate(this.dragDeltaX_+a.x,this.dragDeltaY_+a.y)}; -Blockly.WorkspaceSvg.prototype.onMouseWheel_=function(a){Blockly.terminateDrag_();var b=0>>/g,Blockly.Css.mediaPath_),d=document.createElement("style");document.head.appendChild(d);c=document.createTextNode(c);d.appendChild(c);Blockly.Css.styleSheet_=d.sheet;Blockly.Css.setCursor(Blockly.Css.Cursor.OPEN)}}; Blockly.Css.setCursor=function(a){if(Blockly.Css.currentCursor_!=a){Blockly.Css.currentCursor_=a;var b="url("+Blockly.Css.mediaPath_+"/"+a+".cur), auto",c=".blocklyDraggable {\n cursor: "+b+";\n}\n";Blockly.Css.styleSheet_.deleteRule(0);Blockly.Css.styleSheet_.insertRule(c,0);for(var c=document.getElementsByClassName("blocklyToolboxDiv"),d=0,e;e=c[d];d++)e.style.cursor=a==Blockly.Css.Cursor.DELETE?b:"";document.body.parentNode.style.cursor=a==Blockly.Css.Cursor.OPEN?"":b}}; -Blockly.Css.CONTENT=[".blocklySvg {"," background-color: #fff;"," outline: none;"," overflow: hidden;","}",".blocklyWidgetDiv {"," display: none;"," position: absolute;"," z-index: 999;","}",".blocklyTooltipDiv {"," background-color: #ffffc7;"," border: 1px solid #ddc;"," box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15);"," color: #000;"," display: none;"," font-family: sans-serif;"," font-size: 9pt;"," opacity: 0.9;"," padding: 2px;"," position: absolute;"," z-index: 1000;","}",".blocklyResizeSE {", -" cursor: se-resize;"," fill: #aaa;","}",".blocklyResizeSW {"," cursor: sw-resize;"," fill: #aaa;","}",".blocklyResizeLine {"," stroke: #888;"," stroke-width: 1;","}",".blocklyHighlightedConnectionPath {"," fill: none;"," stroke: #fc3;"," stroke-width: 4px;","}",".blocklyPathLight {"," fill: none;"," stroke-linecap: round;"," stroke-width: 1;","}",".blocklySelected>.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;","}",".blocklyIconGroup {"," cursor: default;","}",".blocklyIconGroup:not(:hover),",".blocklyIconGroupReadonly {"," opacity: .6;","}",".blocklyMinimalBody {"," margin: 0;"," padding: 0;","}",".blocklyCommentTextarea {"," background-color: #ffc;"," border: 0;"," margin: 0;"," padding: 2px;"," resize: none;","}",".blocklyHtmlInput {"," border: none;"," border-radius: 4px;"," font-family: sans-serif;"," height: 100%;", -" margin: 0;"," outline: none;"," padding: 0 1px;"," width: 100%","}",".blocklyMainBackground {"," stroke-width: 1;"," stroke: #c6c6c6;","}",".blocklyMutatorBackground {"," fill: #fff;"," stroke: #ddd;"," stroke-width: 1;","}",".blocklyFlyoutBackground {"," fill: #ddd;"," fill-opacity: .8;","}",".blocklyScrollbarBackground {"," opacity: 0;","}",".blocklyScrollbarKnob {"," fill: #ccc;","}",".blocklyScrollbarBackground:hover+.blocklyScrollbarKnob,",".blocklyScrollbarKnob:hover {"," fill: #bbb;", -"}",".blocklyZoom>image {"," opacity: .4;","}",".blocklyZoom>image:hover {"," opacity: .6;","}",".blocklyZoom>image:active {"," opacity: .8;","}",".blocklyFlyout .blocklyScrollbarKnob {"," fill: #bbb;","}",".blocklyFlyout .blocklyScrollbarBackground:hover+.blocklyScrollbarKnob,",".blocklyFlyout .blocklyScrollbarKnob:hover {"," fill: #aaa;","}",".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;"," 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-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;"," overflow-y: auto;"," overflow-x: hidden;"," max-height: 100%;"," 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;","}",""];Blockly.WidgetDiv={};Blockly.WidgetDiv.DIV=null;Blockly.WidgetDiv.owner_=null;Blockly.WidgetDiv.dispose_=null;Blockly.WidgetDiv.createDom=function(){Blockly.WidgetDiv.DIV||(Blockly.WidgetDiv.DIV=goog.dom.createDom("div","blocklyWidgetDiv"),document.body.appendChild(Blockly.WidgetDiv.DIV))}; +Blockly.Css.CONTENT=[".blocklySvg {","background-color: #fff;","outline: none;","overflow: hidden;","}",".blocklyWidgetDiv {","display: none;","position: absolute;","z-index: 999;","}",".blocklyTooltipDiv {","background-color: #ffffc7;","border: 1px solid #ddc;","box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15);","color: #000;","display: none;","font-family: sans-serif;","font-size: 9pt;","opacity: 0.9;","padding: 2px;","position: absolute;","z-index: 1000;","}",".blocklyResizeSE {","cursor: se-resize;", +"fill: #aaa;","}",".blocklyResizeSW {","cursor: sw-resize;","fill: #aaa;","}",".blocklyResizeLine {","stroke: #888;","stroke-width: 1;","}",".blocklyHighlightedConnectionPath {","fill: none;","stroke: #fc3;","stroke-width: 4px;","}",".blocklyPathLight {","fill: none;","stroke-linecap: round;","stroke-width: 1;","}",".blocklySelected>.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;","}",".blocklyIconGroup {","cursor: default;", +"}",".blocklyIconGroup:not(:hover),",".blocklyIconGroupReadonly {","opacity: .6;","}",".blocklyMinimalBody {","margin: 0;","padding: 0;","}",".blocklyCommentTextarea {","background-color: #ffc;","border: 0;","margin: 0;","padding: 2px;","resize: none;","}",".blocklyHtmlInput {","border: none;","border-radius: 4px;","font-family: sans-serif;","height: 100%;","margin: 0;","outline: none;","padding: 0 1px;","width: 100%","}",".blocklyMainBackground {","stroke-width: 1;","stroke: #c6c6c6;","}",".blocklyMutatorBackground {", +"fill: #fff;","stroke: #ddd;","stroke-width: 1;","}",".blocklyFlyoutBackground {","fill: #ddd;","fill-opacity: .8;","}",".blocklyScrollbarBackground {","opacity: 0;","}",".blocklyScrollbarKnob {","fill: #ccc;","}",".blocklyScrollbarBackground:hover+.blocklyScrollbarKnob,",".blocklyScrollbarKnob:hover {","fill: #bbb;","}",".blocklyZoom>image {","opacity: .4;","}",".blocklyZoom>image:hover {","opacity: .6;","}",".blocklyZoom>image:active {","opacity: .8;","}",".blocklyFlyout .blocklyScrollbarKnob {", +"fill: #bbb;","}",".blocklyFlyout .blocklyScrollbarBackground:hover+.blocklyScrollbarKnob,",".blocklyFlyout .blocklyScrollbarKnob:hover {","fill: #aaa;","}",".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;","overflow-x: visible;","overflow-y: auto;","position: absolute;","}",".blocklyTreeRoot {","padding: 4px 0;","}",".blocklyTreeRoot:focus {", +"outline: none;","}",".blocklyTreeRow {","height: 22px;","line-height: 22px;","margin-bottom: 3px;","padding-right: 8px;","white-space: nowrap;","}",'.blocklyToolboxDiv[dir="RTL"] .blocklyTreeRow {',"padding-right: 0;","padding-left: 8px !important;","}",".blocklyTreeRow:not(.blocklyTreeSelected):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 .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-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;","overflow-y: auto;","overflow-x: hidden;","max-height: 100%;","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;","}",""];Blockly.WidgetDiv={};Blockly.WidgetDiv.DIV=null;Blockly.WidgetDiv.owner_=null;Blockly.WidgetDiv.dispose_=null;Blockly.WidgetDiv.createDom=function(){Blockly.WidgetDiv.DIV||(Blockly.WidgetDiv.DIV=goog.dom.createDom("div","blocklyWidgetDiv"),document.body.appendChild(Blockly.WidgetDiv.DIV))}; Blockly.WidgetDiv.show=function(a,b,c){Blockly.WidgetDiv.hide();Blockly.WidgetDiv.owner_=a;Blockly.WidgetDiv.dispose_=c;a=goog.style.getViewportPageOffset(document);Blockly.WidgetDiv.DIV.style.top=a.y+"px";Blockly.WidgetDiv.DIV.style.direction=b?"rtl":"ltr";Blockly.WidgetDiv.DIV.style.display="block"}; Blockly.WidgetDiv.hide=function(){Blockly.WidgetDiv.owner_&&(Blockly.WidgetDiv.DIV.style.display="none",Blockly.WidgetDiv.DIV.style.left="",Blockly.WidgetDiv.DIV.style.top="",Blockly.WidgetDiv.DIV.style.height="",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,e){bc.width+d.x&&(a=c.width+d.x):a.blocklyPath {', - ' stroke: #fc3;', - ' stroke-width: 3px;', + 'stroke: #fc3;', + 'stroke-width: 3px;', '}', '.blocklySelected>.blocklyPathLight {', - ' display: none;', + 'display: none;', '}', '.blocklyDragging>.blocklyPath,', '.blocklyDragging>.blocklyPathLight {', - ' fill-opacity: .8;', - ' stroke-opacity: .8;', + 'fill-opacity: .8;', + 'stroke-opacity: .8;', '}', '.blocklyDragging>.blocklyPathDark {', - ' display: none;', + 'display: none;', '}', '.blocklyDisabled>.blocklyPath {', - ' fill-opacity: .5;', - ' stroke-opacity: .5;', + 'fill-opacity: .5;', + 'stroke-opacity: .5;', '}', '.blocklyDisabled>.blocklyPathLight,', '.blocklyDisabled>.blocklyPathDark {', - ' display: none;', + 'display: none;', '}', '.blocklyText {', - ' cursor: default;', - ' fill: #fff;', - ' font-family: sans-serif;', - ' font-size: 11pt;', + 'cursor: default;', + 'fill: #fff;', + 'font-family: sans-serif;', + 'font-size: 11pt;', '}', '.blocklyNonEditableText>text {', - ' pointer-events: none;', + 'pointer-events: none;', '}', '.blocklyNonEditableText>rect,', '.blocklyEditableText>rect {', - ' fill: #fff;', - ' fill-opacity: .6;', + 'fill: #fff;', + 'fill-opacity: .6;', '}', '.blocklyNonEditableText>text,', '.blocklyEditableText>text {', - ' fill: #000;', + 'fill: #000;', '}', '.blocklyEditableText:hover>rect {', - ' stroke: #fff;', - ' stroke-width: 2;', + 'stroke: #fff;', + 'stroke-width: 2;', '}', '.blocklyBubbleText {', - ' fill: #000;', + 'fill: #000;', '}', /* @@ -249,234 +249,231 @@ Blockly.Css.CONTENT = [ drag a block and selected text moves instead. */ '.blocklySvg text {', - ' user-select: none;', - ' -moz-user-select: none;', - ' -webkit-user-select: none;', - ' cursor: inherit;', + 'user-select: none;', + '-moz-user-select: none;', + '-webkit-user-select: none;', + 'cursor: inherit;', '}', '.blocklyHidden {', - ' display: none;', + 'display: none;', '}', '.blocklyFieldDropdown:not(.blocklyHidden) {', - ' display: block;', + 'display: block;', '}', '.blocklyIconGroup {', - ' cursor: default;', + 'cursor: default;', '}', '.blocklyIconGroup:not(:hover),', '.blocklyIconGroupReadonly {', - ' opacity: .6;', + 'opacity: .6;', '}', '.blocklyMinimalBody {', - ' margin: 0;', - ' padding: 0;', + 'margin: 0;', + 'padding: 0;', '}', '.blocklyCommentTextarea {', - ' background-color: #ffc;', - ' border: 0;', - ' margin: 0;', - ' padding: 2px;', - ' resize: none;', + 'background-color: #ffc;', + 'border: 0;', + 'margin: 0;', + 'padding: 2px;', + 'resize: none;', '}', '.blocklyHtmlInput {', - ' border: none;', - ' border-radius: 4px;', - ' font-family: sans-serif;', - ' height: 100%;', - ' margin: 0;', - ' outline: none;', - ' padding: 0 1px;', - ' width: 100%', + 'border: none;', + 'border-radius: 4px;', + 'font-family: sans-serif;', + 'height: 100%;', + 'margin: 0;', + 'outline: none;', + 'padding: 0 1px;', + 'width: 100%', '}', '.blocklyMainBackground {', - ' stroke-width: 1;', - ' stroke: #c6c6c6;', /* Equates to #ddd due to border being off-pixel. */ + 'stroke-width: 1;', + 'stroke: #c6c6c6;', /* Equates to #ddd due to border being off-pixel. */ '}', '.blocklyMutatorBackground {', - ' fill: #fff;', - ' stroke: #ddd;', - ' stroke-width: 1;', + 'fill: #fff;', + 'stroke: #ddd;', + 'stroke-width: 1;', '}', '.blocklyFlyoutBackground {', - ' fill: #ddd;', - ' fill-opacity: .8;', + 'fill: #ddd;', + 'fill-opacity: .8;', '}', '.blocklyScrollbarBackground {', - ' opacity: 0;', + 'opacity: 0;', '}', '.blocklyScrollbarKnob {', - ' fill: #ccc;', + 'fill: #ccc;', '}', '.blocklyScrollbarBackground:hover+.blocklyScrollbarKnob,', '.blocklyScrollbarKnob:hover {', - ' fill: #bbb;', + 'fill: #bbb;', '}', '.blocklyZoom>image {', - ' opacity: .4;', + 'opacity: .4;', '}', '.blocklyZoom>image:hover {', - ' opacity: .6;', + 'opacity: .6;', '}', '.blocklyZoom>image:active {', - ' opacity: .8;', + 'opacity: .8;', '}', /* Darken flyout scrollbars due to being on a grey background. */ /* By contrast, workspace scrollbars are on a white background. */ '.blocklyFlyout .blocklyScrollbarKnob {', - ' fill: #bbb;', + 'fill: #bbb;', '}', '.blocklyFlyout .blocklyScrollbarBackground:hover+.blocklyScrollbarKnob,', '.blocklyFlyout .blocklyScrollbarKnob:hover {', - ' fill: #aaa;', + 'fill: #aaa;', '}', '.blocklyInvalidInput {', - ' background: #faa;', + 'background: #faa;', '}', '.blocklyAngleCircle {', - ' stroke: #444;', - ' stroke-width: 1;', - ' fill: #ddd;', - ' fill-opacity: .8;', + 'stroke: #444;', + 'stroke-width: 1;', + 'fill: #ddd;', + 'fill-opacity: .8;', '}', '.blocklyAngleMarks {', - ' stroke: #444;', - ' stroke-width: 1;', + 'stroke: #444;', + 'stroke-width: 1;', '}', '.blocklyAngleGauge {', - ' fill: #f88;', - ' fill-opacity: .8; ', + 'fill: #f88;', + 'fill-opacity: .8; ', '}', '.blocklyAngleLine {', - ' stroke: #f00;', - ' stroke-width: 2;', - ' stroke-linecap: round;', + 'stroke: #f00;', + 'stroke-width: 2;', + 'stroke-linecap: round;', '}', '.blocklyContextMenu {', - ' border-radius: 4px;', + 'border-radius: 4px;', '}', '.blocklyDropdownMenu {', - ' padding: 0 !important;', + 'padding: 0 !important;', '}', /* Override the default Closure URL. */ '.blocklyWidgetDiv .goog-option-selected .goog-menuitem-checkbox,', '.blocklyWidgetDiv .goog-option-selected .goog-menuitem-icon {', - ' background: url(<<>>/sprites.png) no-repeat -48px -16px !important;', + 'background: url(<<>>/sprites.png) no-repeat -48px -16px !important;', '}', /* Category tree in Toolbox. */ '.blocklyToolboxDiv {', - ' background-color: #ddd;', - ' overflow-x: visible;', - ' overflow-y: auto;', - ' position: absolute;', + 'background-color: #ddd;', + 'overflow-x: visible;', + 'overflow-y: auto;', + 'position: absolute;', '}', '.blocklyTreeRoot {', - ' padding: 4px 0;', + 'padding: 4px 0;', '}', '.blocklyTreeRoot:focus {', - ' outline: none;', + 'outline: none;', '}', '.blocklyTreeRow {', - ' line-height: 22px;', - ' height: 22px;', - ' padding-right: 1em;', - ' white-space: nowrap;', + 'height: 22px;', + 'line-height: 22px;', + 'margin-bottom: 3px;', + 'padding-right: 8px;', + 'white-space: nowrap;', '}', '.blocklyToolboxDiv[dir="RTL"] .blocklyTreeRow {', - ' padding-right: 0;', - ' padding-left: 1em !important;', + 'padding-right: 0;', + 'padding-left: 8px !important;', '}', - '.blocklyTreeRow:hover {', - ' background-color: #e4e4e4;', + '.blocklyTreeRow:not(.blocklyTreeSelected):hover {', + 'background-color: #e4e4e4;', '}', '.blocklyTreeSeparator {', - ' border-bottom: solid #e5e5e5 1px;', - ' height: 0px;', - ' margin: 5px 0;', + 'border-bottom: solid #e5e5e5 1px;', + 'height: 0px;', + 'margin: 5px 0;', '}', '.blocklyTreeIcon {', - ' background-image: url(<<>>/sprites.png);', - ' height: 16px;', - ' vertical-align: middle;', - ' width: 16px;', + 'background-image: url(<<>>/sprites.png);', + 'height: 16px;', + 'vertical-align: middle;', + 'width: 16px;', '}', '.blocklyTreeIconClosedLtr {', - ' background-position: -32px -1px;', + 'background-position: -32px -1px;', '}', '.blocklyTreeIconClosedRtl {', - ' background-position: 0px -1px;', + 'background-position: 0px -1px;', '}', '.blocklyTreeIconOpen {', - ' background-position: -16px -1px;', + 'background-position: -16px -1px;', '}', '.blocklyTreeSelected>.blocklyTreeIconClosedLtr {', - ' background-position: -32px -17px;', + 'background-position: -32px -17px;', '}', '.blocklyTreeSelected>.blocklyTreeIconClosedRtl {', - ' background-position: 0px -17px;', + 'background-position: 0px -17px;', '}', '.blocklyTreeSelected>.blocklyTreeIconOpen {', - ' background-position: -16px -17px;', + 'background-position: -16px -17px;', '}', '.blocklyTreeIconNone,', '.blocklyTreeSelected>.blocklyTreeIconNone {', - ' background-position: -48px -1px;', + '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;', + 'cursor: default;', + 'font-family: sans-serif;', + 'font-size: 16px;', + 'padding: 0 3px;', + 'vertical-align: middle;', '}', '.blocklyTreeSelected .blocklyTreeLabel {', - ' color: #fff;', + 'color: #fff;', '}', /* Copied from: goog/css/colorpicker-simplegrid.css */ @@ -494,40 +491,40 @@ Blockly.Css.CONTENT = [ NOTE: without CSS scoping this will override styles defined in palette.css */ '.blocklyWidgetDiv .goog-palette {', - ' outline: none;', - ' cursor: default;', + 'outline: none;', + 'cursor: default;', '}', '.blocklyWidgetDiv .goog-palette-table {', - ' border: 1px solid #666;', - ' border-collapse: collapse;', + '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;', + '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;', + 'position: relative;', + 'height: 13px;', + 'width: 15px;', + 'border: 1px solid #666;', '}', '.blocklyWidgetDiv .goog-palette-cell-hover .goog-palette-colorswatch {', - ' border: 1px solid #FFF;', + 'border: 1px solid #FFF;', '}', '.blocklyWidgetDiv .goog-palette-cell-selected .goog-palette-colorswatch {', - ' border: 1px solid #000;', - ' color: #fff;', + 'border: 1px solid #000;', + 'color: #fff;', '}', /* Copied from: goog/css/menu.css */ @@ -545,20 +542,20 @@ Blockly.Css.CONTENT = [ */ '.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;', - ' overflow-y: auto;', - ' overflow-x: hidden;', - ' max-height: 100%;', - ' z-index: 20000;', /* Arbitrary, but some apps depend on it... */ + '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;', + 'overflow-y: auto;', + 'overflow-x: hidden;', + 'max-height: 100%;', + 'z-index: 20000;', /* Arbitrary, but some apps depend on it... */ '}', /* Copied from: goog/css/menuitem.css */ @@ -591,27 +588,27 @@ Blockly.Css.CONTENT = [ * #noflip to .goog-menuitem. */ '.blocklyWidgetDiv .goog-menuitem {', - ' color: #000;', - ' font: normal 13px Arial, sans-serif;', - ' list-style: none;', - ' margin: 0;', + 'color: #000;', + 'font: normal 13px Arial, sans-serif;', + 'list-style: none;', + 'margin: 0;', /* 28px on the left for icon or checkbox; 7em on the right for shortcut. */ - ' padding: 4px 7em 4px 28px;', - ' white-space: nowrap;', + 'padding: 4px 7em 4px 28px;', + 'white-space: nowrap;', '}', /* BiDi override for the resting state. */ /* #noflip */ '.blocklyWidgetDiv .goog-menuitem.goog-menuitem-rtl {', /* Flip left/right padding for BiDi. */ - ' padding-left: 7em;', - ' padding-right: 28px;', + 'padding-left: 7em;', + 'padding-right: 28px;', '}', /* If a menu doesn't have checkable items or items with icons, remove padding. */ '.blocklyWidgetDiv .goog-menu-nocheckbox .goog-menuitem,', '.blocklyWidgetDiv .goog-menu-noicon .goog-menuitem {', - ' padding-left: 12px;', + 'padding-left: 12px;', '}', /* @@ -619,49 +616,49 @@ Blockly.Css.CONTENT = [ * submenu arrows, if they are rendered. */ '.blocklyWidgetDiv .goog-menu-noaccel .goog-menuitem {', - ' padding-right: 20px;', + 'padding-right: 20px;', '}', '.blocklyWidgetDiv .goog-menuitem-content {', - ' color: #000;', - ' font: normal 13px Arial, sans-serif;', + 'color: #000;', + 'font: normal 13px Arial, sans-serif;', '}', /* State: disabled. */ '.blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-accel,', '.blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-content {', - ' color: #ccc !important;', + 'color: #ccc !important;', '}', '.blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-icon {', - ' opacity: 0.3;', - ' -moz-opacity: 0.3;', - ' filter: alpha(opacity=30);', + 'opacity: 0.3;', + '-moz-opacity: 0.3;', + 'filter: alpha(opacity=30);', '}', /* State: hover. */ '.blocklyWidgetDiv .goog-menuitem-highlight,', '.blocklyWidgetDiv .goog-menuitem-hover {', - ' background-color: #d6e9f8;', + 'background-color: #d6e9f8;', /* Use an explicit top and bottom border so that the selection is visible', * in high contrast mode. */ - ' border-color: #d6e9f8;', - ' border-style: dotted;', - ' border-width: 1px 0;', - ' padding-bottom: 3px;', - ' padding-top: 3px;', + 'border-color: #d6e9f8;', + 'border-style: dotted;', + 'border-width: 1px 0;', + 'padding-bottom: 3px;', + 'padding-top: 3px;', '}', /* State: selected/checked. */ '.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;', + 'background-repeat: no-repeat;', + 'height: 16px;', + 'left: 6px;', + 'position: absolute;', + 'right: auto;', + 'vertical-align: middle;', + 'width: 16px;', '}', /* BiDi override for the selected/checked state. */ @@ -669,47 +666,47 @@ Blockly.Css.CONTENT = [ '.blocklyWidgetDiv .goog-menuitem-rtl .goog-menuitem-checkbox,', '.blocklyWidgetDiv .goog-menuitem-rtl .goog-menuitem-icon {', /* Flip left/right positioning. */ - ' left: auto;', - ' right: 6px;', + 'left: auto;', + 'right: 6px;', '}', '.blocklyWidgetDiv .goog-option-selected .goog-menuitem-checkbox,', '.blocklyWidgetDiv .goog-option-selected .goog-menuitem-icon {', /* Client apps may override the URL at which they serve the sprite. */ - ' background: url(//ssl.gstatic.com/editor/editortoolbar.png) no-repeat -512px 0;', + 'background: url(//ssl.gstatic.com/editor/editortoolbar.png) no-repeat -512px 0;', '}', /* Keyboard shortcut ("accelerator") style. */ '.blocklyWidgetDiv .goog-menuitem-accel {', - ' color: #999;', + 'color: #999;', /* Keyboard shortcuts are untranslated; always left-to-right. */ /* #noflip */ - ' direction: ltr;', - ' left: auto;', - ' padding: 0 6px;', - ' position: absolute;', - ' right: 0;', - ' text-align: right;', + 'direction: ltr;', + 'left: auto;', + 'padding: 0 6px;', + 'position: absolute;', + 'right: 0;', + 'text-align: right;', '}', /* BiDi override for shortcut style. */ /* #noflip */ '.blocklyWidgetDiv .goog-menuitem-rtl .goog-menuitem-accel {', /* Flip left/right positioning and text alignment. */ - ' left: 0;', - ' right: auto;', - ' text-align: left;', + 'left: 0;', + 'right: auto;', + 'text-align: left;', '}', /* Mnemonic styles. */ '.blocklyWidgetDiv .goog-menuitem-mnemonic-hint {', - ' text-decoration: underline;', + 'text-decoration: underline;', '}', '.blocklyWidgetDiv .goog-menuitem-mnemonic-separator {', - ' color: #999;', - ' font-size: 12px;', - ' padding-left: 4px;', + 'color: #999;', + 'font-size: 12px;', + 'padding-left: 4px;', '}', /* Copied from: goog/css/menuseparator.css */ @@ -727,9 +724,9 @@ Blockly.Css.CONTENT = [ */ '.blocklyWidgetDiv .goog-menuseparator {', - ' border-top: 1px solid #ccc;', - ' margin: 4px 0;', - ' padding: 0;', + 'border-top: 1px solid #ccc;', + 'margin: 4px 0;', + 'padding: 0;', '}', '' diff --git a/core/toolbox.js b/core/toolbox.js index 327a0d9e5..0b0566ea4 100644 --- a/core/toolbox.js +++ b/core/toolbox.js @@ -137,6 +137,7 @@ Blockly.Toolbox.prototype.init = function() { tree.setSelectedItem(null); this.populate_(workspace.options.languageTree); tree.render(this.HtmlDiv); + this.addColour_(tree); this.position(); }; @@ -206,6 +207,9 @@ Blockly.Toolbox.prototype.populate_ = function(newTree) { } else { syncTrees(childIn, childOut); } + var hue = childIn.getAttribute('colour'); + childOut.hexColour = goog.isString(hue) ? + Blockly.makeColour(hue) : ''; if (childIn.getAttribute('expanded') == 'true') { if (childOut.blocks.length) { rootOut.setSelectedItem(childOut); @@ -232,6 +236,24 @@ Blockly.Toolbox.prototype.populate_ = function(newTree) { Blockly.fireUiEvent(window, 'resize'); }; +/** + * Recursively add colours to this toolbox. + * @param {!Blockly.Toolbox.TreeNode} + * @private + */ +Blockly.Toolbox.prototype.addColour_ = function(tree) { + var children = tree.getChildren(); + for (var i = 0, child; child = children[i]; i++) { + var border = '8px solid ' + (child.hexColour || '#ddd'); + if (this.workspace_.RTL) { + child.getElement().style.borderLeft = border; + } else { + child.getElement().style.borderRight = border; + } + this.addColour_(child); + } +}; + /** * Unhighlight any previously specified option. */ @@ -325,11 +347,18 @@ Blockly.Toolbox.TreeControl.prototype.createNode = function(opt_html) { */ Blockly.Toolbox.TreeControl.prototype.setSelectedItem = function(node) { Blockly.removeAllRanges(); - if (this.selectedItem_ == node) { + var toolbox = this.toolbox_; + if (node == this.selectedItem_ || node == toolbox.tree_) { return; } + if (toolbox.lastCategory_) { + toolbox.lastCategory_.getElement().style.backgroundColor = ''; + } + if (node) { + var hexColour = node.hexColour || '#57e'; + node.getElement().style.backgroundColor = hexColour; + } goog.ui.tree.TreeControl.prototype.setSelectedItem.call(this, node); - var toolbox = this.toolbox_; if (node && node.blocks && node.blocks.length) { toolbox.flyout_.show(node.blocks); // Scroll the flyout to the top if the category has changed. diff --git a/tests/playground.html b/tests/playground.html index 849725b3e..278db90a9 100644 --- a/tests/playground.html +++ b/tests/playground.html @@ -221,7 +221,7 @@ h1 {

Blockly Playground