mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 10:20:08 +00:00
added .options.focusDisabled and most of support...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
3e40a31673
commit
69aafbf131
@ -522,15 +522,19 @@ function(event, {handler, action, default_item, filter, options={}, getter='sear
|
|||||||
return filter ?
|
return filter ?
|
||||||
items.filter(filter)
|
items.filter(filter)
|
||||||
: items }
|
: items }
|
||||||
options = Object.assign(
|
// options constructor...
|
||||||
{
|
var makeOptions = function(){
|
||||||
// NOTE: we need to be able to pass item objects, so we can not
|
return Object.assign(
|
||||||
// use queries at the same time as there is not way to
|
{
|
||||||
// distinguish one from the other...
|
// NOTE: we need to be able to pass item objects, so we can not
|
||||||
noQueryCheck: true,
|
// use queries at the same time as there is not way to
|
||||||
skipDisabled: true,
|
// distinguish one from the other...
|
||||||
},
|
noQueryCheck: true,
|
||||||
options)
|
skipDisabled: true,
|
||||||
|
},
|
||||||
|
options instanceof Function ?
|
||||||
|
options.call(this)
|
||||||
|
: options) }
|
||||||
// base event method...
|
// base event method...
|
||||||
// NOTE: this is not returned directly as we need to query the items
|
// NOTE: this is not returned directly as we need to query the items
|
||||||
// and pass those on to the handlers rather than the arguments
|
// and pass those on to the handlers rather than the arguments
|
||||||
@ -547,10 +551,20 @@ function(event, {handler, action, default_item, filter, options={}, getter='sear
|
|||||||
callItemEventHandlers(item, event, evt, ...args) }) },
|
callItemEventHandlers(item, event, evt, ...args) }) },
|
||||||
...(action ? [action] : []),
|
...(action ? [action] : []),
|
||||||
false)
|
false)
|
||||||
|
|
||||||
|
// build the options statically if we can...
|
||||||
|
options = options instanceof Function ?
|
||||||
|
options
|
||||||
|
: makeOptions()
|
||||||
|
|
||||||
return Object.assign(
|
return Object.assign(
|
||||||
// the actual method we return...
|
// the actual method we return...
|
||||||
function(item, ...args){
|
function(item, ...args){
|
||||||
var that = this
|
var that = this
|
||||||
|
// build the options dynamically if needed...
|
||||||
|
var opts = options instanceof Function ?
|
||||||
|
makeOptions.call(this)
|
||||||
|
: options
|
||||||
return base.call(this,
|
return base.call(this,
|
||||||
// event handler...
|
// event handler...
|
||||||
item instanceof Function ?
|
item instanceof Function ?
|
||||||
@ -559,12 +573,12 @@ function(event, {handler, action, default_item, filter, options={}, getter='sear
|
|||||||
: item instanceof Array ?
|
: item instanceof Array ?
|
||||||
filterItems(item
|
filterItems(item
|
||||||
.map(function(e){
|
.map(function(e){
|
||||||
return that.search(e, options) })
|
return that.search(e, opts) })
|
||||||
.flat()
|
.flat()
|
||||||
.unique())
|
.unique())
|
||||||
// explicit item or query...
|
// explicit item or query...
|
||||||
: item != null ?
|
: item != null ?
|
||||||
filterItems(this[getter](item, options))
|
filterItems(this[getter](item, opts))
|
||||||
// item is undefined -- get default...
|
// item is undefined -- get default...
|
||||||
: item !== null && default_item instanceof Function ?
|
: item !== null && default_item instanceof Function ?
|
||||||
[default_item.call(that) || []].flat()
|
[default_item.call(that) || []].flat()
|
||||||
@ -769,6 +783,8 @@ var BaseBrowserClassPrototype = {
|
|||||||
var BaseBrowserPrototype = {
|
var BaseBrowserPrototype = {
|
||||||
// XXX should we mix item/list options or separate them into sub-objects???
|
// XXX should we mix item/list options or separate them into sub-objects???
|
||||||
options: {
|
options: {
|
||||||
|
focusDisabled: false,
|
||||||
|
|
||||||
// If true item keys must be unique...
|
// If true item keys must be unique...
|
||||||
uniqueKeys: false,
|
uniqueKeys: false,
|
||||||
|
|
||||||
@ -2843,10 +2859,10 @@ var BaseBrowserPrototype = {
|
|||||||
&& this.reveal(item)
|
&& this.reveal(item)
|
||||||
&& (item.focused = true) },
|
&& (item.focused = true) },
|
||||||
default_item: function(){ return this.get(0) },
|
default_item: function(){ return this.get(0) },
|
||||||
options: {
|
options: function(){
|
||||||
// XXX get this from options...
|
return {
|
||||||
skipDisabled: true,
|
skipDisabled: !(this.options || {}).focusDisabled,
|
||||||
},
|
} },
|
||||||
getter: 'get' }),
|
getter: 'get' }),
|
||||||
blur: makeItemEventMethod('blur', {
|
blur: makeItemEventMethod('blur', {
|
||||||
handler: function(evt, items){
|
handler: function(evt, items){
|
||||||
@ -2885,7 +2901,9 @@ var BaseBrowserPrototype = {
|
|||||||
{iterateCollapsed: true}),
|
{iterateCollapsed: true}),
|
||||||
// item state events...
|
// item state events...
|
||||||
disable: makeItemOptionOnEventMethod('disable', 'disabled',
|
disable: makeItemOptionOnEventMethod('disable', 'disabled',
|
||||||
{ handler: function(item){ this.blur(item) }, }),
|
{ handler: function(item){
|
||||||
|
(this.options || {}).focusDisabled
|
||||||
|
|| this.blur(item) }, }),
|
||||||
enable: makeItemOptionOffEventMethod('enable', 'disabled',
|
enable: makeItemOptionOffEventMethod('enable', 'disabled',
|
||||||
{ options: {skipDisabled: false}, }),
|
{ options: {skipDisabled: false}, }),
|
||||||
toggleDisabled: makeItemEventToggler(
|
toggleDisabled: makeItemEventToggler(
|
||||||
@ -3172,8 +3190,8 @@ var focusItem = function(direction){
|
|||||||
var threashold = this.options.focusOffsetWhileScrolling || 0
|
var threashold = this.options.focusOffsetWhileScrolling || 0
|
||||||
|
|
||||||
var focused = this.focused
|
var focused = this.focused
|
||||||
var first = this.get('first', {skipDisabled: true})
|
var first = this.get('first', {skipDisabled: !(this.options || {}).focusDisabled})
|
||||||
var last = this.get('last', {skipDisabled: true})
|
var last = this.get('last', {skipDisabled: !(this.options || {}).focusDisabled})
|
||||||
|
|
||||||
// center the first/last elements to reveal hidden items before/after...
|
// center the first/last elements to reveal hidden items before/after...
|
||||||
;(focused === last || focused === first) ?
|
;(focused === last || focused === first) ?
|
||||||
@ -3208,11 +3226,12 @@ var focusPage = function(direction){
|
|||||||
var focused = this.focused
|
var focused = this.focused
|
||||||
|
|
||||||
// reveal diabled elements above the top focusable...
|
// reveal diabled elements above the top focusable...
|
||||||
target === this.get(t, {skipDisabled: true}) && target === focused ?
|
;(target === this.get(t, {skipDisabled: !(this.options || {}).focusDisabled})
|
||||||
|
&& target === focused) ?
|
||||||
this.scrollTo(target, 'center')
|
this.scrollTo(target, 'center')
|
||||||
// scroll one page and focus...
|
// scroll one page and focus...
|
||||||
: target === focused ?
|
: target === focused ?
|
||||||
this.focus(this.get(d, 1))
|
this.focus(this.get(d, 1, {skipDisabled: !(this.options || {}).focusDisabled}))
|
||||||
// focus top/bottom of current page...
|
// focus top/bottom of current page...
|
||||||
: this.focus(target)
|
: this.focus(target)
|
||||||
|
|
||||||
@ -3475,7 +3494,7 @@ var HTMLBrowserPrototype = {
|
|||||||
reverse: pos == 'bottom' ?
|
reverse: pos == 'bottom' ?
|
||||||
'flat'
|
'flat'
|
||||||
: false,
|
: false,
|
||||||
skipDisabled: true,
|
skipDisabled: !(this.options || {}).focusDisabled,
|
||||||
})
|
})
|
||||||
.run(function(){
|
.run(function(){
|
||||||
return this instanceof Array ?
|
return this instanceof Array ?
|
||||||
@ -3788,6 +3807,9 @@ var HTMLBrowserPrototype = {
|
|||||||
// ...can a disabled item be focused?
|
// ...can a disabled item be focused?
|
||||||
// ...how do we collapse/expand a disabled root?
|
// ...how do we collapse/expand a disabled root?
|
||||||
// ...what do we focus when toggleing disabled?
|
// ...what do we focus when toggleing disabled?
|
||||||
|
// XXX handle .options.focusDisabled correctly...
|
||||||
|
// - tabindex
|
||||||
|
// - ...
|
||||||
renderItem: function(item, i, context){
|
renderItem: function(item, i, context){
|
||||||
var that = this
|
var that = this
|
||||||
var options = context.options || this.options || {}
|
var options = context.options || this.options || {}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user