mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 10:20:08 +00:00
started refactoring .browseActions(..) for better testability...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
b5517eac85
commit
d4d49d95d0
@ -1880,6 +1880,163 @@ var BrowseActionsActions = actions.Actions({
|
|||||||
this.menu(showDoc.bind(this))
|
this.menu(showDoc.bind(this))
|
||||||
}) })],
|
}) })],
|
||||||
|
|
||||||
|
// XXX might be a good idea to split out the lister out of .browseActions(..)
|
||||||
|
// ...this would simplify debugging of actions...
|
||||||
|
listActions: ['- System/',
|
||||||
|
function(path, options){
|
||||||
|
var actions = this
|
||||||
|
options = options || {}
|
||||||
|
|
||||||
|
var PRIORITY = /^(-?[0-9]+)\s*:\s*/
|
||||||
|
var MARKER = RegExp(this.config['browse-actions-shortcut-marker'], 'g')
|
||||||
|
MARKER = MARKER || RegExp(MARKER, 'g')
|
||||||
|
|
||||||
|
// prepare the config...
|
||||||
|
var cfg = {
|
||||||
|
cls: 'browse-actions',
|
||||||
|
|
||||||
|
path: path,
|
||||||
|
|
||||||
|
flat: false,
|
||||||
|
traversable: true,
|
||||||
|
pathPrefix: '/',
|
||||||
|
fullPathEdit: true,
|
||||||
|
|
||||||
|
item_shortcut_marker: MARKER,
|
||||||
|
}
|
||||||
|
cfg.__proto__ = this.config['browse-actions-settings']
|
||||||
|
|
||||||
|
// Get item from tree level taking into account additional
|
||||||
|
// syntax like prioority...
|
||||||
|
// returns:
|
||||||
|
// [<existing-text>, <new-level>]
|
||||||
|
//
|
||||||
|
// XXX this may mess up the ordering of items when using
|
||||||
|
// item patterns...
|
||||||
|
var getItem = function(level, text){
|
||||||
|
// direct match...
|
||||||
|
if(text in level){
|
||||||
|
return [text, level[text]]
|
||||||
|
|
||||||
|
// check if it's a priority path or a pattern...
|
||||||
|
} else {
|
||||||
|
var t = text.replace(PRIORITY, '')
|
||||||
|
t = (MARKER ? t.replace(MARKER, '$1') : t).trim()
|
||||||
|
|
||||||
|
for(var e in level){
|
||||||
|
var n = e.replace(PRIORITY, '')
|
||||||
|
n = (MARKER ? n.replace(MARKER, '$1') : n).trim()
|
||||||
|
|
||||||
|
if(n == t){
|
||||||
|
return [e, level[e]]
|
||||||
|
}
|
||||||
|
|
||||||
|
// check pattern...
|
||||||
|
var p = /\.\*/.test(n) ? new RegExp('^'+ n +'$', 'i') : null
|
||||||
|
|
||||||
|
if(p && p.test(t)){
|
||||||
|
// override item priority from pattern...
|
||||||
|
var pr = PRIORITY.exec(e)
|
||||||
|
pr = pr ? pr.pop() + ':' : ''
|
||||||
|
|
||||||
|
return [pr + text.replace(PRIORITY, ''), level[e]]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tree builder...
|
||||||
|
// XXX normalize actions -- whitespace, '!', args...
|
||||||
|
var buildTree = function(path, leaf, action, mode, tree){
|
||||||
|
path = path.slice()
|
||||||
|
// build leaf...
|
||||||
|
if(path.length == 0){
|
||||||
|
// handle "|" in leavs...
|
||||||
|
leaf.split(/\|/g)
|
||||||
|
.forEach(function(leaf){
|
||||||
|
var l = getItem(tree, leaf)[0]
|
||||||
|
tree[l || leaf] = action != null ? [action, mode] : action
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// build alternative paths...
|
||||||
|
var p = path.shift() || ''
|
||||||
|
p.split(/\|/g)
|
||||||
|
.forEach(function(e){
|
||||||
|
// build branch element...
|
||||||
|
var branch = getItem(tree, e)
|
||||||
|
branch = tree[branch[0] || e] = branch[1] || {}
|
||||||
|
|
||||||
|
// build sub-branch...
|
||||||
|
buildTree(path, leaf, action, mode, branch)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Action tree...
|
||||||
|
//
|
||||||
|
// Format:
|
||||||
|
// {
|
||||||
|
// <name>: <tree>,
|
||||||
|
//
|
||||||
|
// <name>: [
|
||||||
|
// <action-name>,
|
||||||
|
// // mode...
|
||||||
|
// 'disabled' | 'hidden',
|
||||||
|
// ],
|
||||||
|
//
|
||||||
|
// ...
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// NOTE: this is created once per call, so to refresh the
|
||||||
|
// actions tree we'll need to re-open the dialog...
|
||||||
|
var tree = {}
|
||||||
|
|
||||||
|
// pre-order the main categories...
|
||||||
|
// NOTE: pre_order can be a list of long paths...
|
||||||
|
var s = ''
|
||||||
|
var pre_order = (this.config['action-category-order'] || [])
|
||||||
|
.map(function(p, i){
|
||||||
|
// make all separators unique...
|
||||||
|
// ...this will prevent us from losing or merging them.
|
||||||
|
if(p.trimRight().endsWith('---')){
|
||||||
|
s += '-'
|
||||||
|
p = p.trimRight() + s
|
||||||
|
}
|
||||||
|
return p
|
||||||
|
})
|
||||||
|
pre_order.forEach(function(key){
|
||||||
|
var path = key.split(/[\\\/]/g)
|
||||||
|
var leaf = path.pop()
|
||||||
|
|
||||||
|
buildTree(path, leaf, null, null, tree)
|
||||||
|
})
|
||||||
|
|
||||||
|
// build the tree...
|
||||||
|
var paths = this.getPath()
|
||||||
|
Object.keys(paths).forEach(function(key){
|
||||||
|
// handle mode flag...
|
||||||
|
var action = paths[key][0]
|
||||||
|
var mode = key.split(/^-\s*/)
|
||||||
|
var path = mode.pop()
|
||||||
|
mode = mode.length > 0 ? 'hidden' : null
|
||||||
|
|
||||||
|
path = path.split(/[\\\/]/g)
|
||||||
|
var leaf = path.pop()
|
||||||
|
|
||||||
|
buildTree(path, leaf, action, mode, tree)
|
||||||
|
})
|
||||||
|
|
||||||
|
if(path == 'raw'){
|
||||||
|
return tree
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX get sub-path...
|
||||||
|
// XXX
|
||||||
|
|
||||||
|
return tree
|
||||||
|
}],
|
||||||
|
|
||||||
toggleBrowseActionKeys: ['Interface/Show keys in menu',
|
toggleBrowseActionKeys: ['Interface/Show keys in menu',
|
||||||
core.makeConfigToggler(
|
core.makeConfigToggler(
|
||||||
'browse-actions-keys',
|
'browse-actions-keys',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user