diff --git a/blockly_uncompressed.js b/blockly_uncompressed.js index 9e02bac48c1..01dae3b7184 100644 --- a/blockly_uncompressed.js +++ b/blockly_uncompressed.js @@ -111,6 +111,7 @@ goog.addDependency("../../../" + dir + "/core/workspace_comment_render_svg.js", goog.addDependency("../../../" + dir + "/core/workspace_comment_svg.js", ['Blockly.WorkspaceCommentSvg'], ['Blockly.Events.CommentCreate', 'Blockly.Events.CommentDelete', 'Blockly.Events.CommentMove', 'Blockly.utils', 'Blockly.WorkspaceComment', 'goog.math.Coordinate']); goog.addDependency("../../../" + dir + "/core/workspace_drag_surface_svg.js", ['Blockly.WorkspaceDragSurfaceSvg'], ['Blockly.utils']); goog.addDependency("../../../" + dir + "/core/workspace_dragger.js", ['Blockly.WorkspaceDragger'], ['goog.math.Coordinate']); +goog.addDependency("../../../" + dir + "/core/workspace_events.js", ['Blockly.Events.FinishedLoading'], ['Blockly.Events', 'Blockly.Events.Abstract']); goog.addDependency("../../../" + dir + "/core/workspace_svg.js", ['Blockly.WorkspaceSvg'], ['Blockly.ConnectionDB', 'Blockly.constants', 'Blockly.Events.BlockCreate', 'Blockly.Gesture', 'Blockly.Grid', 'Blockly.Options', 'Blockly.ScrollbarPair', 'Blockly.Touch', 'Blockly.TouchGesture', 'Blockly.Trashcan', 'Blockly.utils', 'Blockly.VariablesDynamic', 'Blockly.Workspace', 'Blockly.WorkspaceAudio', 'Blockly.WorkspaceComment', 'Blockly.WorkspaceCommentSvg', 'Blockly.WorkspaceCommentSvg.render', 'Blockly.WorkspaceDragSurfaceSvg', 'Blockly.Xml', 'Blockly.ZoomControls', 'goog.dom', 'goog.math.Coordinate']); goog.addDependency("../../../" + dir + "/core/ws_comment_events.js", ['Blockly.Events.CommentBase', 'Blockly.Events.CommentChange', 'Blockly.Events.CommentCreate', 'Blockly.Events.CommentDelete', 'Blockly.Events.CommentMove'], ['Blockly.Events', 'Blockly.Events.Abstract', 'Blockly.Xml', 'Blockly.Xml.utils', 'goog.math.Coordinate']); goog.addDependency("../../../" + dir + "/core/xml.js", ['Blockly.Xml'], ['Blockly.Events.BlockCreate', 'Blockly.Events.VarCreate', 'Blockly.Xml.utils']); @@ -1764,6 +1765,7 @@ goog.require('Blockly.Events.CommentDelete'); goog.require('Blockly.Events.CommentMove'); goog.require('Blockly.Events.Create'); goog.require('Blockly.Events.Delete'); +goog.require('Blockly.Events.FinishedLoading'); goog.require('Blockly.Events.Move'); goog.require('Blockly.Events.Ui'); goog.require('Blockly.Events.VarBase'); diff --git a/core/events.js b/core/events.js index 8fac899025c..4dd4158ee7f 100644 --- a/core/events.js +++ b/core/events.js @@ -149,6 +149,11 @@ Blockly.Events.COMMENT_CHANGE = 'comment_change'; */ Blockly.Events.COMMENT_MOVE = 'comment_move'; +/** + * Name of event that records a workspace load. + */ +Blockly.Events.FINISHED_LOADING = 'finished_loading'; + /** * List of events queued for firing. * @private diff --git a/core/workspace_events.js b/core/workspace_events.js new file mode 100644 index 00000000000..b4c78e2defc --- /dev/null +++ b/core/workspace_events.js @@ -0,0 +1,91 @@ +/** + * @license + * Visual Blocks Editor + * + * Copyright 2019 Google Inc. + * https://developers.google.com/blockly/ + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Class for a finished loading workspace event. + * @author BeksOmega + */ +'use strict'; + +goog.provide('Blockly.Events.FinishedLoading'); + +goog.require('Blockly.Events'); +goog.require('Blockly.Events.Abstract'); + +/** + * Class for a finished loading event. + * Used to notify the developer when the workspace has finished loading (i.e + * domToWorkspace). + * Finished loading events do not record undo or redo. + * @param {!Blockly.Workspace} workspace The workspace that has finished + * loading. + * @constructor + */ +Blockly.Events.FinishedLoading = function(workspace) { + /** + * The workspace identifier for this event. + * @type {string} + */ + this.workspaceId = workspace.id; + + /** + * The event group id for the group this event belongs to. Groups define + * events that should be treated as an single action from the user's + * perspective, and should be undone together. + * @type {string} + */ + this.group = Blockly.Events.group_; + + // Workspace events do not undo or redo. + this.recordUndo = false; +}; +goog.inherits(Blockly.Events.FinishedLoading, Blockly.Events.Abstract); + +/** + * Type of this event. + * @type {string} + */ +Blockly.Events.FinishedLoading.prototype.type = Blockly.Events.FINISHED_LOADING; + +/** + * Encode the event as JSON. + * @return {!Object} JSON representation. + */ +Blockly.Events.FinishedLoading.prototype.toJson = function() { + var json = { + 'type': this.type, + }; + if (this.group) { + json['group'] = this.group; + } + if (this.workspaceId) { + json['workspaceId'] = this.workspaceId; + } + return json; +}; + +/** + * Decode the JSON event. + * @param {!Object} json JSON representation. + */ +Blockly.Events.FinishedLoading.prototype.fromJson = function(json) { + this.workspaceId = json['workspaceId']; + this.group = json['group']; +}; diff --git a/core/xml.js b/core/xml.js index 6a8ba6e158b..9941ddbebd6 100644 --- a/core/xml.js +++ b/core/xml.js @@ -31,6 +31,7 @@ goog.provide('Blockly.Xml'); goog.require('Blockly.Events.BlockCreate'); +goog.require('Blockly.Events.FinishedLoading'); goog.require('Blockly.Events.VarCreate'); goog.require('Blockly.Xml.utils'); @@ -467,6 +468,7 @@ Blockly.Xml.domToWorkspace = function(xml, workspace) { if (workspace.setResizesEnabled) { workspace.setResizesEnabled(true); } + Blockly.Events.fire(new Blockly.Events.FinishedLoading(workspace)); return newBlockIds; };