Trevor Parscal has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/79951


Change subject: Don't change config during toolbar setup
......................................................................

Don't change config during toolbar setup

Problem: When the toolbar is created twice with the same config object, the 
second time around the tools are still bound to the old surface

Reason: The tool config is overwritten such that symbolic names of tools are 
replaced with instances of tools, bound to a specific surface. The second time 
around, the creation fails (silently in a try-catch) and then the already 
translated list of tools is used to create a new toolbar filled with old tools 
still bound to the wrong surface.

Solution: Leave the config object alone, and instead build a new list of tool 
instances while iterating through tool names.

Change-Id: Ic43ec29173e556592bb3db9399ff83787e0a6857
Bonus: Don't fail silently. Using a try-catch to detect whether a requested 
tool is supported masks other errors, and is evil. Instead, just do a lookup 
and skip tools in which the lookup's result is falsey.
---
M modules/ve/ui/ve.ui.Toolbar.js
1 file changed, 7 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/51/79951/1

diff --git a/modules/ve/ui/ve.ui.Toolbar.js b/modules/ve/ui/ve.ui.Toolbar.js
index 9b7be98..fe70b32 100644
--- a/modules/ve/ui/ve.ui.Toolbar.js
+++ b/modules/ve/ui/ve.ui.Toolbar.js
@@ -67,17 +67,18 @@
  * @param {Object[]} config List of tool group configurations
  */
 ve.ui.Toolbar.prototype.setup = function ( config ) {
-       var i, j, group, tools;
+       var i, j, group, items, tools;
 
        for ( i = 0; i < config.length; i++ ) {
-               tools = config[i].items;
+               items = config[i].items;
+               tools = [];
                group = new ve.ui.ToolGroup( this, { '$$': this.$$ } );
 
                // Add tools
-               for ( j = 0; j < tools.length; j++ ) {
-                       try {
-                               tools[j] = ve.ui.toolFactory.create( tools[j], 
this );
-                       } catch( e ) {}
+               for ( j = 0; j < items.length; j++ ) {
+                       if ( ve.ui.toolFactory.lookup( items[j] ) ) {
+                               tools.push( ve.ui.toolFactory.create( items[j], 
this ) );
+                       }
                }
                group.addItems( tools );
 

-- 
To view, visit https://gerrit.wikimedia.org/r/79951
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic43ec29173e556592bb3db9399ff83787e0a6857
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Trevor Parscal <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to