Number() is a bit less forgiving than parseFloat() and is more likely to generate NaN rather than some random number. An audit of each case shows nowhere that parseFloat()’s features are needed.
This is a squash and merge of a large set of changes by @BeksOmega
* Added functionality to scrolling, dragging, and zooming.
* Fixed incorrect changes to workspaceChanged function.
* Fixed comment.
* Fixed typo.
* Removed scrollbar.set calls from workspace_svg.
* Removed scrollbar.resize() call.
* Added move options to playground.
* Fixed scroll_ calls that replaced scrollbar.set calls.
* Removed this.scrollbar checks.
* Changed zoom so that it always zooms towards the coordinates. Changed isContentBounded_ to be separate from isMovable_ (b/c of the previous change zoomControls had to be added to the bounded check). Fixed scroll_() calls... again.
* Changed procedures so the Highlight definition option is only available if the workspace is moveable.
* Fixed scrollCenter so that it works with flyout toolboxes.
* Fixed zoomToFit so that it works with horizontal flyout toolboxes.
* Fixed Typo.
* Fixed bumping blocks when the workspace is not movable.
* Fixed bumping not working with left and top toolbox positions.
* Re-Added not allowing scrollCenter if the workspace is not movable. Disabled scrollCenter button for this case.
* Cleaned up formatting.
* Fixed bumping... again. Reformatted workspaceChanged a bit.
* Changed blocks to be completely bumped into the workspace.
* Reorganized metrics-getting for workspaceChanged.
* Added bumping workspace comments. Moved event checking.
* Renamed workspaceChanged to bumpObjects.
* Added a bumpObjects developer reminder.
* Added warning to zoomToFit.
* Cleaned up some text.
* Added better inline documentation.
* Fixed up inline docs.
* Cleaned up comments.
* Fixed zoomCenter not actually zooming towards the center.
* Fixed zoomControls error on unmovable bottom-toolbox workspaces
* Fixed programatically placing blocks in an unmovable workspace.
* Removed unnecessary translate call in inject.
* Reversed removal of translate. (apparently it was necessary)
* Cleaned up code in response to first round of reviews.
* Added unit comments to the zoom function.
* Removed bumpObjectsEventChecker. Added BUMP_EVENTS list to Blockly.Events.
* Changed getWorkspaceObjectMetrics call to getBoundingRectangle().
* Fixed utils.mouseToSvg (was causing problems with zoom on wheel if the page was scrolled).
* Fixed zoom when page is scrolled (actually this time). Reverted changes to utils.mouseToSvg.
* Fixed centerOnBlock.
* Added unit docs to translate. Moved setting the grid position to the translate function.
* Added TODO's.
* Added Max Instances property to Blocks
* eslint cleanup
* eslint cleanup 2
* Moved maxInstances property from block to workspace (as a map of block type to max instances). isDuplicate() changed to correctly handle siblings/branches.
* eslint cleanup
* Changed checking types to map. Added hasBlockLimits. Fixed Nits.
* Added limit_instances test block. eslint fixes.
* fixup! Added limit_instances test block. eslint fixes.
* Changed sorting objects to a private static function of the workspace. Fixed nits. Undeleted .eslintrc
* Reverted .gitignore file.
* Added getBlockTypeCounts() to utils. Added isCapacityAvailable() to workspace. Changed clipboard to save typeCountsMap rather than object.