xooie 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/vendor/assets/javascripts/xooie/stylesheet.js +10 -2
- metadata +54 -44
- checksums.yaml +0 -15
- data/vendor/assets/javascripts/xooie/event_handler.js +0 -83
- data/vendor/assets/javascripts/xooie/helpers.js +0 -61
- data/vendor/assets/javascripts/xooie/keyboard_navigation.js +0 -216
- data/vendor/assets/javascripts/xooie/shared.js +0 -193
- data/vendor/assets/javascripts/xooie/widgets/accordion.js +0 -32
- data/vendor/assets/javascripts/xooie/widgets/base.js +0 -628
- data/vendor/assets/javascripts/xooie/widgets/carousel.js +0 -769
- data/vendor/assets/javascripts/xooie/widgets/dialog.js +0 -132
- data/vendor/assets/javascripts/xooie/widgets/dropdown.js +0 -283
- data/vendor/assets/javascripts/xooie/widgets/tab.js +0 -355
- data/vendor/assets/javascripts/xooie/xooie.js +0 -282
@@ -32,7 +32,15 @@ define('xooie/stylesheet', ['jquery'], function($) {
|
|
32
32
|
|
33
33
|
if (document.styleSheets) {
|
34
34
|
for (i = 0; i < document.styleSheets.length; i += 1){
|
35
|
-
if (document.styleSheets[i].ownerNode.getAttribute('id') === name) {
|
35
|
+
if (document.styleSheets[i].ownerNode && document.styleSheets[i].ownerNode.getAttribute('id') === name) {
|
36
|
+
this._index = i;
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
if (typeof this._index === 'undefined') {
|
42
|
+
for (i = 0; i < document.styleSheets.length; i += 1){
|
43
|
+
if (document.styleSheets[i].id === name) {
|
36
44
|
this._index = i;
|
37
45
|
}
|
38
46
|
}
|
@@ -111,4 +119,4 @@ define('xooie/stylesheet', ['jquery'], function($) {
|
|
111
119
|
|
112
120
|
return Stylesheet;
|
113
121
|
|
114
|
-
});
|
122
|
+
});
|
metadata
CHANGED
@@ -1,35 +1,46 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: xooie
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 25
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
5
11
|
platform: ruby
|
6
|
-
authors:
|
12
|
+
authors:
|
7
13
|
- Andrew Larkin
|
8
14
|
autorequire:
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
17
|
+
|
18
|
+
date: 2013-11-21 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
14
21
|
name: railties
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '3.1'
|
20
|
-
type: :runtime
|
21
22
|
prerelease: false
|
22
|
-
|
23
|
-
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
24
26
|
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 5
|
29
|
+
segments:
|
30
|
+
- 3
|
31
|
+
- 1
|
32
|
+
version: "3.1"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
27
35
|
description: A highly modular, extensible JavaScript UI framework.
|
28
36
|
email: andrewlarkin2@gmail.com
|
29
37
|
executables: []
|
38
|
+
|
30
39
|
extensions: []
|
40
|
+
|
31
41
|
extra_rdoc_files: []
|
32
|
-
|
42
|
+
|
43
|
+
files:
|
33
44
|
- vendor/assets/javascripts/xooie.js
|
34
45
|
- vendor/assets/javascripts/xooie/addons/base.js
|
35
46
|
- vendor/assets/javascripts/xooie/addons/carousel_lentils.js
|
@@ -41,44 +52,43 @@ files:
|
|
41
52
|
- vendor/assets/javascripts/xooie/carousel.js
|
42
53
|
- vendor/assets/javascripts/xooie/dialog.js
|
43
54
|
- vendor/assets/javascripts/xooie/dropdown.js
|
44
|
-
- vendor/assets/javascripts/xooie/event_handler.js
|
45
|
-
- vendor/assets/javascripts/xooie/helpers.js
|
46
|
-
- vendor/assets/javascripts/xooie/keyboard_navigation.js
|
47
|
-
- vendor/assets/javascripts/xooie/shared.js
|
48
55
|
- vendor/assets/javascripts/xooie/stylesheet.js
|
49
56
|
- vendor/assets/javascripts/xooie/tab.js
|
50
|
-
- vendor/assets/javascripts/xooie/widgets/accordion.js
|
51
|
-
- vendor/assets/javascripts/xooie/widgets/base.js
|
52
|
-
- vendor/assets/javascripts/xooie/widgets/carousel.js
|
53
|
-
- vendor/assets/javascripts/xooie/widgets/dialog.js
|
54
|
-
- vendor/assets/javascripts/xooie/widgets/dropdown.js
|
55
|
-
- vendor/assets/javascripts/xooie/widgets/tab.js
|
56
|
-
- vendor/assets/javascripts/xooie/xooie.js
|
57
57
|
- lib/xooie.rb
|
58
58
|
- README.md
|
59
59
|
- License.txt
|
60
60
|
homepage: http://github.com/Comcast/Xooie
|
61
|
-
licenses:
|
61
|
+
licenses:
|
62
62
|
- Apache
|
63
|
-
metadata: {}
|
64
63
|
post_install_message:
|
65
64
|
rdoc_options: []
|
66
|
-
|
65
|
+
|
66
|
+
require_paths:
|
67
67
|
- lib
|
68
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
68
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
hash: 3
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
version: "0"
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
none: false
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
hash: 3
|
83
|
+
segments:
|
84
|
+
- 0
|
85
|
+
version: "0"
|
78
86
|
requirements: []
|
87
|
+
|
79
88
|
rubyforge_project:
|
80
|
-
rubygems_version:
|
89
|
+
rubygems_version: 1.8.24
|
81
90
|
signing_key:
|
82
|
-
specification_version:
|
91
|
+
specification_version: 3
|
83
92
|
summary: A highly modular, extensible JavaScript UI framework.
|
84
93
|
test_files: []
|
94
|
+
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
ZjU5YmQyYzFiMWZjYjExMmE1MTU2YmE2MzJiYTYxMzRmZDBkNjdjYQ==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MTc0ZGNiYTFlMThmMjkzMTQ0YzZiNjBjYjk4YjQwMzJmNGJkZmZkMA==
|
7
|
-
!binary "U0hBNTEy":
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
M2M2Yjg2OWVlYjYxOTRiZDhjMzdmMGFlMmRhYjAzNzY3ZDYzNzA0MzYxMDA0
|
10
|
-
YmNjYWMyOWQ1MDUyZDc4M2RiOGFhNzYyZWZiMzY2Njg5YTMxNzg3OTMxYjVl
|
11
|
-
YWQ5MjcwMTNhYTI5MGE4MmViNDUxOWFiZDk0NWM5Y2ZjNzFiM2Y=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NmJkYTZiMWIxMWQzNDYwZDUwNTBlOGYzNWNkY2VjMjgzYjNkMzQwNjY0NmM2
|
14
|
-
YjYxN2U3NjljNDE0NTlhOTRiNjdmMWEyNGUwYjhjMGYzOTcwNzFiNzMzYzMy
|
15
|
-
Mjg1OTY4NzVkM2YyNWEzNjcyNmM1MWNlODQwNjlmN2FhOTI4ZmQ=
|
@@ -1,83 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Copyright 2012 Comcast
|
3
|
-
*
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
* you may not use this file except in compliance with the License.
|
6
|
-
* You may obtain a copy of the License at
|
7
|
-
*
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
*
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
-
* See the License for the specific language governing permissions and
|
14
|
-
* limitations under the License.
|
15
|
-
*/
|
16
|
-
|
17
|
-
define('xooie/event_handler', ['jquery', 'xooie/helpers'], function($, helpers) {
|
18
|
-
|
19
|
-
var EventHandler = function(namespace) {
|
20
|
-
this.namespace = namespace;
|
21
|
-
|
22
|
-
this.handlers = {};
|
23
|
-
|
24
|
-
this._callbacks = {};
|
25
|
-
};
|
26
|
-
|
27
|
-
function format(type, namespace) {
|
28
|
-
if (!namespace) {
|
29
|
-
return type;
|
30
|
-
} else {
|
31
|
-
return type + '.' + namespace;
|
32
|
-
}
|
33
|
-
}
|
34
|
-
|
35
|
-
EventHandler.prototype.add = function(type, method) {
|
36
|
-
var self = this,
|
37
|
-
formattedType, t;
|
38
|
-
|
39
|
-
if (helpers.isObject(type) && helpers.isUndefined(method)) {
|
40
|
-
for(t in type) {
|
41
|
-
if (helpers.isFunction(type[t])) {
|
42
|
-
this.add(t, type[t]);
|
43
|
-
}
|
44
|
-
}
|
45
|
-
|
46
|
-
return;
|
47
|
-
}
|
48
|
-
|
49
|
-
formattedType = format(type, this.namespace);
|
50
|
-
|
51
|
-
if (helpers.isUndefined(this.handlers[formattedType])) {
|
52
|
-
this.handlers[formattedType] = function(e) {
|
53
|
-
self.fire(e, this, arguments);
|
54
|
-
};
|
55
|
-
}
|
56
|
-
|
57
|
-
if (helpers.isUndefined(this._callbacks[type])) {
|
58
|
-
this._callbacks[type] = $.Callbacks('unique');
|
59
|
-
}
|
60
|
-
|
61
|
-
this._callbacks[type].add(method);
|
62
|
-
};
|
63
|
-
|
64
|
-
EventHandler.prototype.clear = function(type) {
|
65
|
-
delete(this.handlers[format(type, this.namespace)]);
|
66
|
-
|
67
|
-
if (!helpers.isUndefined(this._callbacks[type])) {
|
68
|
-
this._callbacks[type].empty();
|
69
|
-
}
|
70
|
-
};
|
71
|
-
|
72
|
-
EventHandler.prototype.fire = function(event, context, args) {
|
73
|
-
if (event.namespace && event.namespace !== this.namespace) {
|
74
|
-
return;
|
75
|
-
}
|
76
|
-
|
77
|
-
if (!helpers.isUndefined(this._callbacks[event.type])) {
|
78
|
-
this._callbacks[event.type].fireWith(context, args);
|
79
|
-
}
|
80
|
-
};
|
81
|
-
|
82
|
-
return EventHandler;
|
83
|
-
});
|
@@ -1,61 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Copyright 2012 Comcast
|
3
|
-
*
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
* you may not use this file except in compliance with the License.
|
6
|
-
* You may obtain a copy of the License at
|
7
|
-
*
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
*
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
-
* See the License for the specific language governing permissions and
|
14
|
-
* limitations under the License.
|
15
|
-
*/
|
16
|
-
|
17
|
-
/**
|
18
|
-
* class Xooie.helpers
|
19
|
-
*
|
20
|
-
* A collection of helper methods used by Xooie modules.
|
21
|
-
**/
|
22
|
-
|
23
|
-
define('xooie/helpers', ['jquery'], function($){
|
24
|
-
var helpers = {};
|
25
|
-
/**
|
26
|
-
* Xooie.helpers.toAry(str) -> Array
|
27
|
-
* - str (String | Array): The string to be converted to an array, or an array.
|
28
|
-
*
|
29
|
-
* Converts a string to an array, or returns the passed argument if it is already an array. Used
|
30
|
-
* when parsing data attributes that can be either a space-delineated string or an array.
|
31
|
-
**/
|
32
|
-
helpers.toAry = function(str) {
|
33
|
-
if (typeof str === 'string') {
|
34
|
-
return str.split(/\s+/);
|
35
|
-
} else if (str instanceof Array) {
|
36
|
-
return str;
|
37
|
-
}
|
38
|
-
};
|
39
|
-
|
40
|
-
helpers.toInt = function(int) {
|
41
|
-
return parseInt(int, 10);
|
42
|
-
};
|
43
|
-
|
44
|
-
helpers.isArray = Array.isArray || function(ary) {
|
45
|
-
return Array.prototype.toString(ary) === '[object Array]';
|
46
|
-
};
|
47
|
-
|
48
|
-
helpers.isObject = function(obj) {
|
49
|
-
return Object.prototype.toString(obj) === '[object Object]';
|
50
|
-
};
|
51
|
-
|
52
|
-
helpers.isUndefined = function(obj) {
|
53
|
-
return obj === void 0;
|
54
|
-
};
|
55
|
-
|
56
|
-
helpers.isFunction = function(func) {
|
57
|
-
return typeof func === 'function';
|
58
|
-
};
|
59
|
-
|
60
|
-
return helpers;
|
61
|
-
});
|
@@ -1,216 +0,0 @@
|
|
1
|
-
define('xooie/keyboard_navigation', ['jquery', 'xooie/helpers'], function($, helpers){
|
2
|
-
var selectors, keyboardNavigation, keybindings;
|
3
|
-
|
4
|
-
|
5
|
-
keybindings = {
|
6
|
-
37: function(event) {
|
7
|
-
moveFocus($(event.target), -1);
|
8
|
-
|
9
|
-
event.preventDefault();
|
10
|
-
},
|
11
|
-
|
12
|
-
38: function() {
|
13
|
-
|
14
|
-
},
|
15
|
-
|
16
|
-
39: function(event) {
|
17
|
-
moveFocus($(event.target), 1);
|
18
|
-
|
19
|
-
event.preventDefault();
|
20
|
-
},
|
21
|
-
|
22
|
-
40: function() {
|
23
|
-
|
24
|
-
}
|
25
|
-
};
|
26
|
-
|
27
|
-
/** internal
|
28
|
-
* Xooie.Widget._moveFocus(direction)
|
29
|
-
* - direction (Integer): Determines whether or not to increment or decrement the index. Can be 1 or -1.
|
30
|
-
*
|
31
|
-
* Moves focus to either the next or previous focusable item, if available. Focus order follows the
|
32
|
-
* tab order of the page (items without tabindex or tabindex=0 will be focused before tabindex=1). Focusable
|
33
|
-
* items with a tabindex=-1 will not be focused.
|
34
|
-
**/
|
35
|
-
function moveFocus(current, direction) {
|
36
|
-
// TODO: Clean this up. It's a mess
|
37
|
-
// TODO: Write tests.
|
38
|
-
// TODO: Add detection of new contexts
|
39
|
-
// TODO: Add recollection of last focused item
|
40
|
-
|
41
|
-
var selector, selectors, tabindex, index, target;
|
42
|
-
|
43
|
-
var tabIndicies= [];
|
44
|
-
|
45
|
-
selectors = {
|
46
|
-
unindexed: ['[data-widget-type] a[href]:visible:not(:disabled):not([tabindex])',
|
47
|
-
'[data-widget-type] button:visible:not(:disabled):not([tabindex])',
|
48
|
-
'[data-widget-type] input:visible:not(:disabled):not([tabindex])',
|
49
|
-
'[data-widget-type] select:visible:not(:disabled):not([tabindex])',
|
50
|
-
'[data-widget-type] textarea:visible:not(:disabled):not([tabindex])',
|
51
|
-
'[data-widget-type] [tabindex=0]:visible:not(:disabled)'].join(','),
|
52
|
-
indexed: function(t) {
|
53
|
-
if (t > 0) {
|
54
|
-
return '[data-widget-type] [tabindex=' + t + ']:visible:not(:disabled)';
|
55
|
-
}
|
56
|
-
},
|
57
|
-
allIndexed: '[data-widget-type] [tabindex]:visible:not(:disabled)'
|
58
|
-
};
|
59
|
-
|
60
|
-
// jquery select the current item
|
61
|
-
current = $(current);
|
62
|
-
|
63
|
-
// we may not be focused on anything. If that's the case, focus on the first focusable item
|
64
|
-
if (!current.is(selectors.unindexed) && !current.is(selectors.allIndexed)) {
|
65
|
-
// get the lowest tabindex
|
66
|
-
$(selectors.allIndexed).each(function(){
|
67
|
-
var i = helpers.toInt($(this).attr('tabindex'));
|
68
|
-
|
69
|
-
if (tabIndicies.indexOf(i) === -1 && i > 0) {
|
70
|
-
tabIndicies.push(i);
|
71
|
-
}
|
72
|
-
});
|
73
|
-
|
74
|
-
if (tabIndicies.length > 0) {
|
75
|
-
tabIndicies.sort(function(a,b) { return a-b; });
|
76
|
-
|
77
|
-
target = $(selectors.indexed(tabIndicies[0])).first();
|
78
|
-
} else {
|
79
|
-
target = $(selectors.unindexed).first();
|
80
|
-
}
|
81
|
-
|
82
|
-
if (target.length > 0) {
|
83
|
-
target.focus();
|
84
|
-
|
85
|
-
return;
|
86
|
-
}
|
87
|
-
}
|
88
|
-
|
89
|
-
// get the current tabindex
|
90
|
-
tabindex = helpers.toInt(current.attr('tabindex'));
|
91
|
-
|
92
|
-
// check if tabindex is a number and not 0...
|
93
|
-
if (!tabindex) {
|
94
|
-
// if it is not, assume we're on an element that has no tab index and select other such elements
|
95
|
-
selector = selectors.unindexed;
|
96
|
-
} else {
|
97
|
-
// otherwise, select all items that are of the same tabindex
|
98
|
-
selector = selectors.indexed(tabindex);
|
99
|
-
}
|
100
|
-
|
101
|
-
// find the index of the current item
|
102
|
-
index = current.index(selector);
|
103
|
-
|
104
|
-
if (index + direction >= 0) {
|
105
|
-
// get the next/previous item
|
106
|
-
target = $(selector).eq(index + direction);
|
107
|
-
|
108
|
-
// Check to see if we have a valid target...
|
109
|
-
if (target.length > 0) {
|
110
|
-
// if it is, focus the target and return
|
111
|
-
target.focus();
|
112
|
-
|
113
|
-
return;
|
114
|
-
}
|
115
|
-
}
|
116
|
-
|
117
|
-
// if it is not, then we have several possibilities:
|
118
|
-
|
119
|
-
// If the direction is 1 and tabindex is not a number or 0, then we are at the end of the tab order. Do nothing.
|
120
|
-
if (direction === 1 && !tabindex) {
|
121
|
-
return;
|
122
|
-
// If the direction is 1 and the tabindex is a number, then we need to check for the presence of the next tabindex
|
123
|
-
} else if (direction === 1 && !isNaN(tabindex)) {
|
124
|
-
// Loop through all elements with a tab index
|
125
|
-
$(selectors.allIndexed).each(function() {
|
126
|
-
// Build a collection of all tab indicies greater than the current tab index:
|
127
|
-
var i = helpers.toInt($(this).attr('tabindex'));
|
128
|
-
|
129
|
-
if (i > tabindex && tabIndicies.indexOf(i) === -1 && i > 0) {
|
130
|
-
tabIndicies.push(i);
|
131
|
-
}
|
132
|
-
});
|
133
|
-
|
134
|
-
// If there are tab indicies that are greater than the current one...
|
135
|
-
if (tabIndicies.length > 0) {
|
136
|
-
// sort our tab indicies ascending
|
137
|
-
tabIndicies.sort(function(a, b) { return a-b; });
|
138
|
-
|
139
|
-
// we now have our new tab index
|
140
|
-
tabindex = tabIndicies[0];
|
141
|
-
|
142
|
-
// Get the first item of the new tab index
|
143
|
-
target = $(selectors.indexed(tabindex)).first();
|
144
|
-
} else {
|
145
|
-
// Otherwise, select the first unindexed item
|
146
|
-
target = $(selectors.unindexed).first();
|
147
|
-
}
|
148
|
-
|
149
|
-
} else if (direction === -1 && isNaN(tabindex)) {
|
150
|
-
// In this case, we are at the first non-indexed focusable item. We need to find the last indexed item.
|
151
|
-
// Loop through all elements with a tab index
|
152
|
-
$(selectors.allIndexed).each(function() {
|
153
|
-
var i = helpers.toInt($(this).attr('tabindex'));
|
154
|
-
// Build a collection of all tab indicies
|
155
|
-
if (tabIndicies.indexOf(i) === -1) {
|
156
|
-
tabIndicies.push(i);
|
157
|
-
}
|
158
|
-
});
|
159
|
-
|
160
|
-
if (tabIndicies.length > 0) {
|
161
|
-
// sort our tab indicies descending
|
162
|
-
tabIndicies.sort(function(a, b) { return b-a; });
|
163
|
-
|
164
|
-
// we now have our new tab index
|
165
|
-
tabindex = tabIndicies[0];
|
166
|
-
|
167
|
-
// Select the last indexed item
|
168
|
-
target = $(selectors.indexed(tabindex)).last();
|
169
|
-
}
|
170
|
-
} else if (direction === -1 && !isNaN(tabindex) && tabindex > 0) {
|
171
|
-
$(selectors.allIndexed).each(function(){
|
172
|
-
var i = helpers.toInt($(this).attr('tabindex'));
|
173
|
-
|
174
|
-
if (i < tabindex && tabIndicies.indexOf(i) === -1 && i > 0) {
|
175
|
-
tabIndicies.push(i);
|
176
|
-
}
|
177
|
-
});
|
178
|
-
|
179
|
-
if (tabIndicies.length > 0) {
|
180
|
-
// sort our tab indicies asceding
|
181
|
-
tabIndicies.sort(function(a, b) { return a-b; });
|
182
|
-
|
183
|
-
// we now have our new tab index
|
184
|
-
tabindex = tabIndicies[0];
|
185
|
-
|
186
|
-
// Select the last indexed item
|
187
|
-
target = $(selectors.indexed(tabindex)).last();
|
188
|
-
}
|
189
|
-
}
|
190
|
-
|
191
|
-
if (!helpers.isUndefined(target)) {
|
192
|
-
// assuming we have a target, focus it.
|
193
|
-
target.focus();
|
194
|
-
}
|
195
|
-
|
196
|
-
}
|
197
|
-
|
198
|
-
var instantiated;
|
199
|
-
|
200
|
-
keyboardNavigation = function(){
|
201
|
-
if (instantiated) {
|
202
|
-
return instantiated;
|
203
|
-
}
|
204
|
-
|
205
|
-
$(document).on('keyup', function(event) {
|
206
|
-
if (helpers.isFunction(keybindings[event.which])) {
|
207
|
-
keybindings[event.which](event);
|
208
|
-
}
|
209
|
-
});
|
210
|
-
|
211
|
-
instantiated = this;
|
212
|
-
};
|
213
|
-
|
214
|
-
return keyboardNavigation;
|
215
|
-
|
216
|
-
});
|