From bb2260fd91c92e2fd8026e6549373c7b30a9d19c Mon Sep 17 00:00:00 2001 From: Beka Westberg Date: Thu, 24 Jan 2019 19:32:48 -0800 Subject: [PATCH] Added a Finished Loading event. --- core/events.js | 5 +++ core/workspace_events.js | 92 ++++++++++++++++++++++++++++++++++++++++ core/xml.js | 1 + 3 files changed, 98 insertions(+) create mode 100644 core/workspace_events.js diff --git a/core/events.js b/core/events.js index 8fac89902..4dd4158ee 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 000000000..eb4a007aa --- /dev/null +++ b/core/workspace_events.js @@ -0,0 +1,92 @@ +/** + * @license + * Visual Blocks Editor + * + * TODO: 2019 instead of 2018??? + * Copyright 2018 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.Ui.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.Ui.prototype.fromJson = function(json) { + this.workspaceId = json['workspaceId']; + this.group = json['group']; +}; diff --git a/core/xml.js b/core/xml.js index 6a8ba6e15..da4a6db3c 100644 --- a/core/xml.js +++ b/core/xml.js @@ -467,6 +467,7 @@ Blockly.Xml.domToWorkspace = function(xml, workspace) { if (workspace.setResizesEnabled) { workspace.setResizesEnabled(true); } + Blockly.Events.fire(new Blockly.Events.FinishedLoading(workspace)); return newBlockIds; };