refactored main controls out of testing + ui cleanup and tweaking...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2016-11-09 04:53:42 +03:00
parent 9ea06bffdb
commit 2c650da183
7 changed files with 131 additions and 53 deletions

View File

@ -307,6 +307,13 @@ button:hover {
//z-index: 9999; //z-index: 9999;
} }
.light .buttons {
opacity: 0.5;
}
.dark .buttons {
opacity: 0.2;
}
.buttons:hover { .buttons:hover {
opacity: 1; opacity: 1;
} }
@ -316,9 +323,14 @@ button:hover {
display: inline-block; display: inline-block;
color: silver; color: silver;
width: 40px; box-sizing: border-box;
min-width: 40px;
height: 40px; height: 40px;
padding-left: 5px;
padding-right: 5px;
text-align: center; text-align: center;
line-height: 40px; line-height: 40px;
} }

View File

@ -286,7 +286,10 @@ module.FullScreenControlls = core.ImageGridFeatures.Feature({
tag: 'ui-fullscreen-controls', tag: 'ui-fullscreen-controls',
depends: [ depends: [
'ui-app-control', 'ui-app-control',
'ui-status', ],
suggested: [
// needed for reporting info in .makeButtonControls(..)
'ui-status-bar',
], ],
actions: FullScreenControllsActions, actions: FullScreenControllsActions,

View File

@ -266,9 +266,15 @@ module.GLOBAL_KEYBOARD = {
'#8':'fitImage: 8 -- Fit 8 images', '#8':'fitImage: 8 -- Fit 8 images',
'#9': 'fitImage: 9 -- Fit 9 images', '#9': 'fitImage: 9 -- Fit 9 images',
'+': 'zoomIn', '+': {
default: 'zoomIn',
ctrl: 'lighterTheme!',
},
'=': '+', '=': '+',
'-': 'zoomOut', '-': {
default: 'zoomOut',
ctrl: 'darkerTheme!',
},
F2: { F2: {
default: 'cropRibbon', default: 'cropRibbon',
@ -305,6 +311,8 @@ module.GLOBAL_KEYBOARD = {
B: { B: {
default: 'toggleBookmark', default: 'toggleBookmark',
ctrl: 'toggleTheme!', ctrl: 'toggleTheme!',
'ctrl+shift': 'toggleTheme!: "prev"',
alt: 'browseActions: "/Bookmark/" -- Show bookmark menu', alt: 'browseActions: "/Bookmark/" -- Show bookmark menu',
// XXX not sure if this is the right way to go... // XXX not sure if this is the right way to go...

View File

@ -81,6 +81,7 @@ core.ImageGridFeatures.Feature('viewer-testing', [
'external-editor', 'external-editor',
// chrome... // chrome...
'ui-main-controls',
'ui-progress', 'ui-progress',
'ui-status-log', 'ui-status-log',
'ui-scale', 'ui-scale',

View File

@ -53,10 +53,12 @@ function(context, cls, data){
var info = t.attr('info') || t.parents('[info]').attr('info') || '' var info = t.attr('info') || t.parents('[info]').attr('info') || ''
context.showStatusBarInfo(info) context.showStatusBarInfo
&& context.showStatusBarInfo(info)
}) })
.on('mouseout', function(){ .on('mouseout', function(){
context.showStatusBarInfo() context.showStatusBarInfo
&& context.showStatusBarInfo()
}) })
// make buttons... // make buttons...
@ -1061,20 +1063,78 @@ module.ContextActionMenu = core.ImageGridFeatures.Feature({
//--------------------------------------------------------------------- //---------------------------------------------------------------------
// XXX make this not applicable to production...
var MainControlsActions = actions.Actions({
var WidgetTestActions = actions.Actions({
config: { config: {
'main-controls-state': 'on', 'main-controls-state': 'on',
'main-controls': { 'main-controls': {
'&#x2630;': ['menu', '&#x2630;': ['menu',
'browseActions -- Show action menu...'], 'browseActions -- Action menu...'],
//'Crop<sub/>': ['crop',
'C<sub/>': ['crop', 'C<sub/>': ['crop',
'browseActions: "Crop/" -- Show crop menu...'], 'browseActions: "Crop/" -- Crop menu...'],
/*
//'Mark': ['marks',
'M': ['marks',
'browseActions: "Mark/" -- Mark menu...'],
//*/
}, },
}, },
toggleMainControls: ['Interface/',
toggler.Toggler(null,
function(){
return this.ribbons.viewer.find('.main-controls').length > 0 ? 'on' : 'off' },
['off', 'on'],
function(state){
if(state == 'on'){
var config = this.config['main-controls']
config
&& makeButtonControls(this, 'main-controls', config)
} else {
this.ribbons.viewer.find('.main-controls').remove()
}
})],
})
var BrowseActions =
module.BrowseActions = core.ImageGridFeatures.Feature({
title: '',
doc: '',
tag: 'ui-main-controls',
depends: [
'ui',
],
suggested: [
// needed for reporting info in .makeButtonControls(..)
'ui-status-bar',
],
actions: MainControlsActions,
handlers: [
// main controls stuff...
['start',
function(){
this.toggleMainControls(this.config['main-controls-state'] || 'on') }],
['load reload',
function(){
// update crop button status...
$('.main-controls.buttons .crop.button sub')
.text(this.crop_stack ? this.crop_stack.length : '') }]
],
})
//---------------------------------------------------------------------
// XXX make this not applicable to production...
var WidgetTestActions = actions.Actions({
testAction: ['- Test/', testAction: ['- Test/',
function(){ function(){
console.log('>>>', [].slice.call(arguments)) console.log('>>>', [].slice.call(arguments))
@ -1225,25 +1285,6 @@ var WidgetTestActions = actions.Actions({
setTimeout(step, 1000) setTimeout(step, 1000)
}], }],
// XXX move this out...
// XXX also see handlers....
toggleMainControls: ['Interface/',
toggler.Toggler(null,
function(){
return this.ribbons.viewer.find('.main-controls').length > 0 ? 'on' : 'off' },
['off', 'on'],
function(state){
if(state == 'on'){
var config = this.config['main-controls']
config
&& makeButtonControls(this, 'main-controls', config)
} else {
this.ribbons.viewer.find('.main-controls').remove()
}
})],
// XXX make this a toggler.... // XXX make this a toggler....
partitionByMonth: ['Test/', partitionByMonth: ['Test/',
function(){ function(){
@ -1449,18 +1490,6 @@ module.WidgetTest = core.ImageGridFeatures.Feature({
], ],
actions: WidgetTestActions, actions: WidgetTestActions,
handlers: [
// main controls stuff...
['start',
function(){
this.toggleMainControls(this.config['main-controls-state'] || 'on') }],
['load reload',
function(){
// update crop button status...
$('.main-controls.buttons .crop.button sub')
.text(this.crop_stack ? this.crop_stack.length : '') }]
],
}) })

View File

@ -162,8 +162,8 @@ module.ViewerActions = actions.Actions({
// Supported themes... // Supported themes...
'themes': [ 'themes': [
'gray',
'dark', 'dark',
'gray',
'light', 'light',
], ],
@ -384,12 +384,25 @@ module.ViewerActions = actions.Actions({
function(){ return this.ribbons.viewer }, function(){ return this.ribbons.viewer },
function(){ return this.config.themes }, function(){ return this.config.themes },
function(state){ this.config.theme = state }) ], function(state){ this.config.theme = state }) ],
lighterTheme: ['Interface/Theme/Lighter',
function(){
var themes = this.config.themes
var i = themes.indexOf(this.toggleTheme('?'))
this.toggleTheme(Math.min(i+1, themes.length-1))
}],
darkerTheme: ['Interface/Theme/Darker',
function(){
var themes = this.config.themes
var i = themes.indexOf(this.toggleTheme('?'))
this.toggleTheme(Math.max(0, i-1))
}],
toggleRibbonTheme: ['Interface/Theme/Toggle ribbon theme', toggleRibbonTheme: ['Interface/Theme/Toggle ribbon theme',
toggler.CSSClassToggler( toggler.CSSClassToggler(
function(){ return this.ribbons.viewer }, function(){ return this.ribbons.viewer },
function(){ return this.config['ribbon-themes'] }, function(){ return this.config['ribbon-themes'] },
function(state){ this.config['ribbon-theme'] = state }) ], function(state){ this.config['ribbon-theme'] = state }) ],
/* /*
setEmptyMsg: ['- Interface/Set message to be displayed when nothing is loaded.', setEmptyMsg: ['- Interface/Set message to be displayed when nothing is loaded.',
function(msg, help){ this.ribbons function(msg, help){ this.ribbons

View File

@ -31,6 +31,8 @@
// - <index> : 0 for 'off' and 1 for 'on' (see below) // - <index> : 0 for 'off' and 1 for 'on' (see below)
// - 'on' : switch mode on -- add class // - 'on' : switch mode on -- add class
// - 'off' : switch mode off -- remove class // - 'off' : switch mode off -- remove class
// - 'next' : switch to next state (default)
// - 'prev' : switch to previous state
// - '!' : reload current state, same as toggler(toggler('?')) // - '!' : reload current state, same as toggler(toggler('?'))
// - '?' : return current state ('on'|'off') // - '?' : return current state ('on'|'off')
// - '??' : return a list of supported states // - '??' : return a list of supported states
@ -38,6 +40,8 @@
// In forms 2 and 3, if class_list is a list of strings, the <action> can be: // In forms 2 and 3, if class_list is a list of strings, the <action> can be:
// - <index> : explicitly set the state to index in class_list // - <index> : explicitly set the state to index in class_list
// - <class-name> : explicitly set a class from the list // - <class-name> : explicitly set a class from the list
// - 'next' : switch to next state (default)
// - 'prev' : switch to previous state
// - '!' : reload current state, same as toggler(toggler('?')) // - '!' : reload current state, same as toggler(toggler('?'))
// - '?' : return current state ('on'|'off') // - '?' : return current state ('on'|'off')
// - '??' : return a list of supported states // - '??' : return a list of supported states
@ -49,9 +53,6 @@
// action argument given is invalid. // action argument given is invalid.
// //
// NOTE: action '?' is handled internally and not passed to the callbacks. // NOTE: action '?' is handled internally and not passed to the callbacks.
// NOTE: there is a special action 'next', passing it will have the same
// effect as not passing any action -- we will change to the next
// state.
// NOTE: if it is needed to apply this to an explicit target but with // NOTE: if it is needed to apply this to an explicit target but with
// no explicit action, just pass 'next' as the second argument. // no explicit action, just pass 'next' as the second argument.
// NOTE: a special class name 'none' means no class is set, if it is present // NOTE: a special class name 'none' means no class is set, if it is present
@ -168,7 +169,7 @@ function(elem, state_accessor, states, callback_a, callback_b){
if(typeof(states_getter) == typeof(function(){})){ if(typeof(states_getter) == typeof(function(){})){
// get the states... // get the states...
var states = states_getter.call(this) var states = states_getter.call(this)
var states = typeof(states) == typeof('str') ? states = typeof(states) == typeof('str') ?
['none', states] ['none', states]
: states : states
} }
@ -195,7 +196,10 @@ function(elem, state_accessor, states, callback_a, callback_b){
return states return states
// we need to get the current state... // we need to get the current state...
} else if(action == null || action == '?' || action == '!'){ } else if(action == null
|| action == 'prev'
|| action == '?'
|| action == '!'){
// get current state... // get current state...
var cur = state_accessor.call(this, e) var cur = state_accessor.call(this, e)
@ -225,10 +229,18 @@ function(elem, state_accessor, states, callback_a, callback_b){
var state = bool_action ? states[action == 'off' ? 0 : 1] : action var state = bool_action ? states[action == 'off' ? 0 : 1] : action
// get the right class... // get the right class...
if(action == null){ if(action == null || action == 'prev'){
if(action == 'prev'){
var i = states.indexOf(cur)-1
i = i <= -1 ? states.length-1 : i
} else {
var i = states.indexOf(cur)+1 var i = states.indexOf(cur)+1
i = i == -1 ? 0 : i //i = i == -1 ? 0 : i
i = i == states.length ? 0 : i i = i == states.length ? 0 : i
}
state = states[i] state = states[i]
if(bool_action){ if(bool_action){