mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-30 19:00:09 +00:00
reworking the action browser...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
25d5fcfc60
commit
2e0f8d0cb4
@ -692,6 +692,215 @@ var BrowseActionsActions = actions.Actions({
|
|||||||
},
|
},
|
||||||
|
|
||||||
browseActions: ['Interface/Browse actions...',
|
browseActions: ['Interface/Browse actions...',
|
||||||
|
makeUIDialog(function(path){
|
||||||
|
var actions = this
|
||||||
|
|
||||||
|
// Action tree...
|
||||||
|
//
|
||||||
|
// Format:
|
||||||
|
// {
|
||||||
|
// <name>: <tree>,
|
||||||
|
//
|
||||||
|
// <name>: [
|
||||||
|
// <action-name>,
|
||||||
|
// <disabled>,
|
||||||
|
// ],
|
||||||
|
//
|
||||||
|
// ...
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// 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 pre_order = this.config['action-category-order'] || []
|
||||||
|
pre_order.forEach(function(k){
|
||||||
|
var p = tree
|
||||||
|
k = k.split(/[\\\/]/g).filter(function(e){ return e.trim() != '' })
|
||||||
|
k.slice(0, -1).forEach(function(e){
|
||||||
|
p = p[e] = {}
|
||||||
|
})
|
||||||
|
p[k.pop()] = null
|
||||||
|
})
|
||||||
|
|
||||||
|
// buld the tree...
|
||||||
|
var _build = function(path, leaf, action, disabled, tree){
|
||||||
|
path = path.slice()
|
||||||
|
// build alternative paths...
|
||||||
|
path.shift().split(/\|/g)
|
||||||
|
.forEach(function(e){
|
||||||
|
// build branch element...
|
||||||
|
var branch = tree[e] = tree[e] || {}
|
||||||
|
|
||||||
|
// continue building sub-tree...
|
||||||
|
if(path.length > 0){
|
||||||
|
_build(path, leaf, action, disabled, branch)
|
||||||
|
|
||||||
|
// build leaf...
|
||||||
|
} else {
|
||||||
|
branch[leaf] = [action, disabled]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
var paths = this.getPath()
|
||||||
|
Object.keys(paths).forEach(function(key){
|
||||||
|
// handle disabled flag...
|
||||||
|
var disabled = key.split(/^- /)
|
||||||
|
var path = disabled.pop()
|
||||||
|
disabled = disabled.length > 0
|
||||||
|
|
||||||
|
path = path.split(/[\\\/]/g)
|
||||||
|
var leaf = path.pop()
|
||||||
|
|
||||||
|
// start the build...
|
||||||
|
_build(path, leaf, paths[key][0], disabled, tree)
|
||||||
|
})
|
||||||
|
|
||||||
|
//console.log('!!!!!', tree)
|
||||||
|
|
||||||
|
var dialog = browse.makeLister(null, function(path, make){
|
||||||
|
var that = this
|
||||||
|
var cur = tree
|
||||||
|
|
||||||
|
// get level...
|
||||||
|
// NOTE: we need to get the level till first '*'...
|
||||||
|
// XXX account for NN:<text>
|
||||||
|
var rest = path.slice()
|
||||||
|
while(rest.length > 0 && !('*' in cur)){
|
||||||
|
cur = cur[rest.shift()] || {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// render a level...
|
||||||
|
|
||||||
|
// toggler states...
|
||||||
|
// XXX can cur be an array in any other case???
|
||||||
|
if(cur instanceof Array
|
||||||
|
&& actions.isToggler && actions.isToggler(cur[0])){
|
||||||
|
var action = cur[0]
|
||||||
|
var disabled = cur[1]
|
||||||
|
|
||||||
|
var cur_state = actions[action]('?')
|
||||||
|
var states = actions[action]('??')
|
||||||
|
|
||||||
|
// handle on/off togglers...
|
||||||
|
// XXX should these directly return 'on'/'off'???
|
||||||
|
if(states.length == 2
|
||||||
|
&& states.indexOf('none') >= 0
|
||||||
|
&& (cur_state == 'on' || cur_state == 'off')){
|
||||||
|
states = ['on', 'off']
|
||||||
|
}
|
||||||
|
|
||||||
|
states.forEach(function(state){
|
||||||
|
make(state, { disabled: disabled })
|
||||||
|
.addClass(state == cur_state ? 'selected highlighted' : '')
|
||||||
|
.on('open', function(){
|
||||||
|
actions[action](state)
|
||||||
|
that.pop()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
// lister...
|
||||||
|
} else if('*' in cur){
|
||||||
|
actions[cur['*'][0]](path, make)
|
||||||
|
|
||||||
|
// normal action...
|
||||||
|
} else {
|
||||||
|
var level = Object.keys(cur)
|
||||||
|
level
|
||||||
|
.slice()
|
||||||
|
// sort according to pattern: 'NN: <text>'
|
||||||
|
// NN > 0 - is sorted above the non-prioritized
|
||||||
|
// elements, the greater the number
|
||||||
|
// the higher the element
|
||||||
|
// NN < 0 - is sorted below the non-prioritized
|
||||||
|
// elements, the lower the number
|
||||||
|
// the lower the element
|
||||||
|
.sort(function(a, b){
|
||||||
|
var ai = /^(-?[0-9]+):/.exec(a)
|
||||||
|
ai = ai ? ai.pop()*1 : null
|
||||||
|
ai = ai > 0 ? -ai
|
||||||
|
: ai < 0 ? -ai + level.length
|
||||||
|
: level.indexOf(a)
|
||||||
|
|
||||||
|
var bi = /^(-?[0-9]+):/.exec(b)
|
||||||
|
bi = bi ? bi.pop()*1 : null
|
||||||
|
bi = bi > 0 ? -bi
|
||||||
|
: bi < 0 ? -bi + level.length
|
||||||
|
: level.indexOf(b)
|
||||||
|
|
||||||
|
return ai - bi
|
||||||
|
})
|
||||||
|
.forEach(function(key){
|
||||||
|
// remove the order...
|
||||||
|
var text = key.replace(/^(-?[0-9]+):/, '').trim()
|
||||||
|
|
||||||
|
if(cur[key] instanceof Array){
|
||||||
|
var action = cur[key][0]
|
||||||
|
var disabled = cur[key][1]
|
||||||
|
|
||||||
|
// toggler action...
|
||||||
|
if(actions.isToggler && actions.isToggler(action)){
|
||||||
|
make(text + '/', {
|
||||||
|
disabled: disabled,
|
||||||
|
buttons: [
|
||||||
|
[actions[action]('?'),
|
||||||
|
function(){
|
||||||
|
actions[action]()
|
||||||
|
that.update()
|
||||||
|
that.select('"'+ text +'"')
|
||||||
|
}]
|
||||||
|
]})
|
||||||
|
.on('open', function(){
|
||||||
|
actions[action]()
|
||||||
|
that.update()
|
||||||
|
that.select('"'+ text +'"')
|
||||||
|
})
|
||||||
|
|
||||||
|
// normal action...
|
||||||
|
} else {
|
||||||
|
make(text, { disabled: disabled })
|
||||||
|
.on('open', function(){
|
||||||
|
var res = actions[action]()
|
||||||
|
|
||||||
|
// XXX check if res wants to handle closing...
|
||||||
|
// XXX
|
||||||
|
|
||||||
|
// XXX do we close the dialog here???
|
||||||
|
that.parent.close()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// dir...
|
||||||
|
// XXX should we render empty dirs???
|
||||||
|
//} else if(Object.keys(cur[key]).length > 0){
|
||||||
|
} else {
|
||||||
|
make(text + '/')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
path: path,
|
||||||
|
|
||||||
|
flat: false,
|
||||||
|
traversable: true,
|
||||||
|
pathPrefix: '/',
|
||||||
|
fullPathEdit: true,
|
||||||
|
|
||||||
|
showDisabled: actions.config['browse-actions-settings'].showDisabled,
|
||||||
|
})
|
||||||
|
// save show disabled state to .config...
|
||||||
|
.on('close', function(){
|
||||||
|
var config = actions.config['browse-actions-settings']
|
||||||
|
|
||||||
|
config.showDisabled = dialog.options.showDisabled
|
||||||
|
})
|
||||||
|
|
||||||
|
return dialog
|
||||||
|
})],
|
||||||
|
|
||||||
|
_browseActions: ['- Interface/Browse actions (old)...',
|
||||||
makeActionLister(browse.makePathList, true)],
|
makeActionLister(browse.makePathList, true)],
|
||||||
listActions:['Interface/List actions...',
|
listActions:['Interface/List actions...',
|
||||||
makeActionLister(browse.makeList,
|
makeActionLister(browse.makeList,
|
||||||
@ -702,7 +911,6 @@ var BrowseActionsActions = actions.Actions({
|
|||||||
var a = l.pop()
|
var a = l.pop()
|
||||||
return a +' ('+ l.join(', ') +')'
|
return a +' ('+ l.join(', ') +')'
|
||||||
})],
|
})],
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
var BrowseActions =
|
var BrowseActions =
|
||||||
@ -781,7 +989,7 @@ var WidgetTestActions = actions.Actions({
|
|||||||
// .testDrawer('Overlay', 'Header', 'paragraph')
|
// .testDrawer('Overlay', 'Header', 'paragraph')
|
||||||
// - show html in overlay with
|
// - show html in overlay with
|
||||||
// custom text...
|
// custom text...
|
||||||
testDrawer: ['Test/Drawer widget test...',
|
testDrawer: ['Test/99: Drawer widget test...',
|
||||||
makeUIDialog('Drawer',
|
makeUIDialog('Drawer',
|
||||||
function(h, txt){
|
function(h, txt){
|
||||||
return $('<div>')
|
return $('<div>')
|
||||||
@ -801,7 +1009,7 @@ var WidgetTestActions = actions.Actions({
|
|||||||
background: 'white',
|
background: 'white',
|
||||||
focusable: true,
|
focusable: true,
|
||||||
})],
|
})],
|
||||||
testBrowse: ['Test/Demo new style dialog...',
|
testBrowse: ['Test/-99: Demo new style dialog...',
|
||||||
makeUIDialog(function(){
|
makeUIDialog(function(){
|
||||||
var actions = this
|
var actions = this
|
||||||
|
|
||||||
@ -881,13 +1089,13 @@ var WidgetTestActions = actions.Actions({
|
|||||||
|
|
||||||
|
|
||||||
// XXX this is just a test...
|
// XXX this is just a test...
|
||||||
embededListerTest: ['Test/Lister test (embeded)/*',
|
embededListerTest: ['Test/50: Lister test (embeded)/*',
|
||||||
function(path, make){
|
function(path, make){
|
||||||
make('a/')
|
make('a/')
|
||||||
make('b/')
|
make('b/')
|
||||||
make('c/')
|
make('c/')
|
||||||
}],
|
}],
|
||||||
floatingListerTest: ['Test/Lister test (floating)...',
|
floatingListerTest: ['Test/50:Lister test (floating)...',
|
||||||
function(path){
|
function(path){
|
||||||
// we got an argument and can exit...
|
// we got an argument and can exit...
|
||||||
if(path){
|
if(path){
|
||||||
|
|||||||
@ -1870,6 +1870,18 @@ var ControlActions = actions.Actions({
|
|||||||
// do the actual move...
|
// do the actual move...
|
||||||
d.setOffset(this, data.left + (g.deltaX / s))
|
d.setOffset(this, data.left + (g.deltaX / s))
|
||||||
|
|
||||||
|
/* XXX this seems to offer no speed advantages
|
||||||
|
* vs. .setOffset(..) but does not play
|
||||||
|
* well with .updateRibbon(..)
|
||||||
|
$(this)
|
||||||
|
.velocity('stop')
|
||||||
|
.velocity({
|
||||||
|
translateX: data.left + (g.deltaX / s),
|
||||||
|
translateY: 0,
|
||||||
|
translateZ: 0,
|
||||||
|
}, 0)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
// update ribbon when "pulling" with two fingers...
|
// update ribbon when "pulling" with two fingers...
|
||||||
//
|
//
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user