Feature #14936
openUse a stable and modifiable data structure for jsToolbar elements
0%
Description
The elements of the jsToolbar are currently stored in a javascript {}
(see source:/trunk/public/javascripts/jstoolbar/jstoolbar.js@12152#L153) and are read in the hopes they will come out in the same order they have been put in (see source:/trunk/public/javascripts/jstoolbar/jstoolbar.js@12152#L213). This however is not a specified behavior of javascript, it just happens to work in most browsers (Chrome being the exception here in certain cases (sorry for the weird anchor of the link, the enclosing section has none)). The specification explicitly states:
The […] order of enumerating the properties […] is not specified.
(see ECMA-262 12.6.4)
We (Planio) haven't seen any bugs with the current implementation but find it lacking in that we cannot add a button at a specific position in the toolbar without adding it to core js files (which has become more difficult since the jstoolbar-textile.min.js
is shipped with core without any apparent clues how it is generated, but that's not the point here).
Would the Redmine team be open to switching the aforementioned jsToolBar.prototype.elements
to a data structure with a guaranteed ordering and the ability to add elements at a specified absolute ("at position X") or relative ("after button X") place?
Related issues
Updated by Felix Schäfer over 11 years ago
Updated by Toshi MARUYAMA about 11 years ago
- Related to Feature #14937: Code highlighting toolbar button added
Updated by Mischa The Evil about 11 years ago
Felix Schäfer wrote:
[...] but find it lacking in that we cannot add a button at a specific position in the toolbar without adding it to core js files [...]
I agree on that.
[...] switching the aforementioned
jsToolBar.prototype.elements
to a data structure with a guaranteed ordering and the ability to add elements at a specified absolute ("at position X") or relative ("after button X") place?
To me this sounds like a good idea. This will give plugin developers (thinking about custom macros, custom syntax, etc.; like the often used WikiNG plugin) the control they need.
Updated by Yukinari TOYOTA about 11 years ago
I have an experience of similar problem.
In that case, I want to add a special image button after the original image button.
I solved this problem by modifying/replacing `jsToolBar.prototype.elements` at runtime.
However, it is not straightforward so new API is welcome.
see: https://github.com/t-yuki/clipboard_image_paste/commit/122a9134165ecc3c6a056fdab788efd2d95bfbb3