less-rails-semantic_ui 1.12.3.0 → 2.0.0.0
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.
- checksums.yaml +4 -4
- data/assets/javascripts/semantic_ui/definitions/behaviors/api.js +394 -188
- data/assets/javascripts/semantic_ui/definitions/behaviors/colorize.js +4 -2
- data/assets/javascripts/semantic_ui/definitions/behaviors/form.js +263 -125
- data/assets/javascripts/semantic_ui/definitions/behaviors/state.js +3 -3
- data/assets/javascripts/semantic_ui/definitions/behaviors/visibility.js +213 -96
- data/assets/javascripts/semantic_ui/definitions/behaviors/visit.js +6 -4
- data/assets/javascripts/semantic_ui/definitions/globals/site.js +4 -4
- data/assets/javascripts/semantic_ui/definitions/modules/accordion.js +66 -52
- data/assets/javascripts/semantic_ui/definitions/modules/checkbox.js +309 -112
- data/assets/javascripts/semantic_ui/definitions/modules/dimmer.js +24 -26
- data/assets/javascripts/semantic_ui/definitions/modules/dropdown.js +2005 -590
- data/assets/javascripts/semantic_ui/definitions/modules/embed.js +662 -0
- data/assets/javascripts/semantic_ui/definitions/modules/modal.js +106 -79
- data/assets/javascripts/semantic_ui/definitions/modules/nag.js +7 -8
- data/assets/javascripts/semantic_ui/definitions/modules/popup.js +323 -194
- data/assets/javascripts/semantic_ui/definitions/modules/progress.js +111 -103
- data/assets/javascripts/semantic_ui/definitions/modules/rating.js +78 -54
- data/assets/javascripts/semantic_ui/definitions/modules/search.js +304 -122
- data/assets/javascripts/semantic_ui/definitions/modules/shape.js +93 -47
- data/assets/javascripts/semantic_ui/definitions/modules/sidebar.js +83 -149
- data/assets/javascripts/semantic_ui/definitions/modules/sticky.js +99 -29
- data/assets/javascripts/semantic_ui/definitions/modules/tab.js +219 -124
- data/assets/javascripts/semantic_ui/definitions/modules/transition.js +202 -171
- data/assets/stylesheets/semantic_ui/definitions/collections/breadcrumb.less +2 -1
- data/assets/stylesheets/semantic_ui/definitions/collections/form.less +135 -58
- data/assets/stylesheets/semantic_ui/definitions/collections/grid.less +366 -383
- data/assets/stylesheets/semantic_ui/definitions/collections/menu.less +838 -631
- data/assets/stylesheets/semantic_ui/definitions/collections/message.less +89 -71
- data/assets/stylesheets/semantic_ui/definitions/collections/table.less +183 -131
- data/assets/stylesheets/semantic_ui/definitions/elements/button.less +1097 -300
- data/assets/stylesheets/semantic_ui/definitions/elements/container.less +135 -0
- data/assets/stylesheets/semantic_ui/definitions/elements/divider.less +31 -30
- data/assets/stylesheets/semantic_ui/definitions/elements/flag.less +1 -1
- data/assets/stylesheets/semantic_ui/definitions/elements/header.less +209 -121
- data/assets/stylesheets/semantic_ui/definitions/elements/icon.less +201 -96
- data/assets/stylesheets/semantic_ui/definitions/elements/image.less +26 -11
- data/assets/stylesheets/semantic_ui/definitions/elements/input.less +49 -14
- data/assets/stylesheets/semantic_ui/definitions/elements/label.less +391 -221
- data/assets/stylesheets/semantic_ui/definitions/elements/list.less +107 -68
- data/assets/stylesheets/semantic_ui/definitions/elements/loader.less +3 -1
- data/assets/stylesheets/semantic_ui/definitions/elements/rail.less +34 -25
- data/assets/stylesheets/semantic_ui/definitions/elements/reveal.less +25 -10
- data/assets/stylesheets/semantic_ui/definitions/elements/segment.less +261 -173
- data/assets/stylesheets/semantic_ui/definitions/elements/step.less +169 -70
- data/assets/stylesheets/semantic_ui/definitions/globals/reset.less +1 -1
- data/assets/stylesheets/semantic_ui/definitions/globals/site.less +3 -1
- data/assets/stylesheets/semantic_ui/definitions/modules/accordion.less +1 -2
- data/assets/stylesheets/semantic_ui/definitions/modules/checkbox.less +175 -103
- data/assets/stylesheets/semantic_ui/definitions/modules/dimmer.less +26 -15
- data/assets/stylesheets/semantic_ui/definitions/modules/dropdown.less +349 -80
- data/assets/stylesheets/semantic_ui/definitions/modules/embed.less +174 -0
- data/assets/stylesheets/semantic_ui/definitions/modules/modal.less +83 -36
- data/assets/stylesheets/semantic_ui/definitions/modules/nag.less +1 -1
- data/assets/stylesheets/semantic_ui/definitions/modules/popup.less +48 -7
- data/assets/stylesheets/semantic_ui/definitions/modules/progress.less +160 -107
- data/assets/stylesheets/semantic_ui/definitions/modules/rating.less +57 -54
- data/assets/stylesheets/semantic_ui/definitions/modules/search.less +55 -10
- data/assets/stylesheets/semantic_ui/definitions/modules/shape.less +5 -6
- data/assets/stylesheets/semantic_ui/definitions/modules/sidebar.less +9 -5
- data/assets/stylesheets/semantic_ui/definitions/modules/sticky.less +1 -1
- data/assets/stylesheets/semantic_ui/definitions/modules/tab.less +1 -1
- data/assets/stylesheets/semantic_ui/definitions/modules/transition.less +3 -4
- data/assets/stylesheets/semantic_ui/definitions/views/card.less +240 -130
- data/assets/stylesheets/semantic_ui/definitions/views/comment.less +1 -1
- data/assets/stylesheets/semantic_ui/definitions/views/feed.less +15 -8
- data/assets/stylesheets/semantic_ui/definitions/views/item.less +13 -13
- data/assets/stylesheets/semantic_ui/definitions/views/statistic.less +230 -86
- data/assets/stylesheets/semantic_ui/theme.less +22 -15
- data/assets/stylesheets/semantic_ui/themes/amazon/elements/button.overrides +5 -5
- data/assets/stylesheets/semantic_ui/themes/amazon/elements/button.variables +5 -4
- data/assets/stylesheets/semantic_ui/themes/basic/collections/table.variables +1 -0
- data/assets/stylesheets/semantic_ui/themes/basic/views/card.variables +6 -4
- data/assets/stylesheets/semantic_ui/themes/bookish/elements/header.variables +4 -4
- data/assets/stylesheets/semantic_ui/themes/bootstrap3/elements/button.variables +1 -1
- data/assets/stylesheets/semantic_ui/themes/chubby/collections/form.overrides +8 -0
- data/assets/stylesheets/semantic_ui/themes/chubby/collections/menu.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/chubby/collections/menu.variables +40 -0
- data/assets/stylesheets/semantic_ui/themes/classic/modules/progress.variables +1 -0
- data/assets/stylesheets/semantic_ui/themes/classic/views/card.overrides +1 -1
- data/assets/stylesheets/semantic_ui/themes/colored/modules/checkbox.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/colored/modules/checkbox.variables +17 -0
- data/assets/stylesheets/semantic_ui/themes/default/collections/breadcrumb.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/collections/breadcrumb.variables +5 -15
- data/assets/stylesheets/semantic_ui/themes/default/collections/form.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/collections/form.variables +31 -35
- data/assets/stylesheets/semantic_ui/themes/default/collections/grid.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/collections/grid.variables +34 -28
- data/assets/stylesheets/semantic_ui/themes/default/collections/menu.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/collections/menu.variables +259 -163
- data/assets/stylesheets/semantic_ui/themes/default/collections/message.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/collections/message.variables +42 -19
- data/assets/stylesheets/semantic_ui/themes/default/collections/table.overrides +0 -3
- data/assets/stylesheets/semantic_ui/themes/default/collections/table.variables +63 -59
- data/assets/stylesheets/semantic_ui/themes/default/elements/button.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/elements/button.variables +90 -50
- data/assets/stylesheets/semantic_ui/themes/default/elements/container.overrides +3 -0
- data/assets/stylesheets/semantic_ui/themes/default/elements/container.variables +45 -0
- data/assets/stylesheets/semantic_ui/themes/default/elements/divider.overrides +15 -0
- data/assets/stylesheets/semantic_ui/themes/default/elements/divider.variables +3 -4
- data/assets/stylesheets/semantic_ui/themes/default/elements/flag.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/elements/header.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/elements/header.variables +40 -36
- data/assets/stylesheets/semantic_ui/themes/default/elements/icon.overrides +4 -3
- data/assets/stylesheets/semantic_ui/themes/default/elements/icon.variables +29 -12
- data/assets/stylesheets/semantic_ui/themes/default/elements/image.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/elements/image.variables +5 -3
- data/assets/stylesheets/semantic_ui/themes/default/elements/input.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/elements/input.variables +10 -24
- data/assets/stylesheets/semantic_ui/themes/default/elements/label.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/elements/label.variables +88 -35
- data/assets/stylesheets/semantic_ui/themes/default/elements/list.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/elements/list.variables +53 -34
- data/assets/stylesheets/semantic_ui/themes/default/elements/loader.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/elements/loader.variables +9 -10
- data/assets/stylesheets/semantic_ui/themes/default/elements/rail.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/elements/rail.variables +13 -5
- data/assets/stylesheets/semantic_ui/themes/default/elements/reveal.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/elements/reveal.variables +6 -4
- data/assets/stylesheets/semantic_ui/themes/default/elements/segment.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/elements/segment.variables +66 -28
- data/assets/stylesheets/semantic_ui/themes/default/elements/step.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/elements/step.variables +60 -31
- data/assets/stylesheets/semantic_ui/themes/default/globals/reset.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/globals/site.variables +477 -303
- data/assets/stylesheets/semantic_ui/themes/default/modules/accordion.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/modules/accordion.variables +6 -7
- data/assets/stylesheets/semantic_ui/themes/default/modules/chatroom.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/modules/checkbox.overrides +19 -16
- data/assets/stylesheets/semantic_ui/themes/default/modules/checkbox.variables +71 -43
- data/assets/stylesheets/semantic_ui/themes/default/modules/dimmer.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/modules/dimmer.variables +12 -9
- data/assets/stylesheets/semantic_ui/themes/default/modules/dropdown.overrides +0 -5
- data/assets/stylesheets/semantic_ui/themes/default/modules/dropdown.variables +146 -64
- data/assets/stylesheets/semantic_ui/themes/default/modules/{video.overrides → embed.overrides} +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/modules/embed.variables +53 -0
- data/assets/stylesheets/semantic_ui/themes/default/modules/modal.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/modules/modal.variables +24 -18
- data/assets/stylesheets/semantic_ui/themes/default/modules/nag.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/modules/popup.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/modules/popup.variables +3 -9
- data/assets/stylesheets/semantic_ui/themes/default/modules/progress.variables +13 -7
- data/assets/stylesheets/semantic_ui/themes/default/modules/rating.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/modules/rating.variables +71 -33
- data/assets/stylesheets/semantic_ui/themes/default/modules/search.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/modules/search.variables +36 -34
- data/assets/stylesheets/semantic_ui/themes/default/modules/shape.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/modules/shape.variables +7 -2
- data/assets/stylesheets/semantic_ui/themes/default/modules/sidebar.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/modules/sidebar.variables +2 -5
- data/assets/stylesheets/semantic_ui/themes/default/modules/sticky.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/modules/sticky.variables +2 -7
- data/assets/stylesheets/semantic_ui/themes/default/modules/tab.variables +1 -3
- data/assets/stylesheets/semantic_ui/themes/default/modules/transition.overrides +8 -9
- data/assets/stylesheets/semantic_ui/themes/default/views/ad.variables +2 -2
- data/assets/stylesheets/semantic_ui/themes/default/views/card.variables +33 -23
- data/assets/stylesheets/semantic_ui/themes/default/views/comment.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/views/feed.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/views/feed.variables +15 -23
- data/assets/stylesheets/semantic_ui/themes/default/views/item.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/views/item.variables +12 -11
- data/assets/stylesheets/semantic_ui/themes/default/views/statistic.overrides +0 -0
- data/assets/stylesheets/semantic_ui/themes/default/views/statistic.variables +25 -24
- data/assets/stylesheets/semantic_ui/themes/flat/collections/form.overrides +4 -0
- data/assets/stylesheets/semantic_ui/themes/flat/collections/form.variables +1 -2
- data/assets/stylesheets/semantic_ui/themes/flat/globals/site.variables +1 -0
- data/assets/stylesheets/semantic_ui/themes/github/collections/form.variables +1 -1
- data/assets/stylesheets/semantic_ui/themes/github/collections/menu.variables +10 -15
- data/assets/stylesheets/semantic_ui/themes/github/elements/button.variables +2 -2
- data/assets/stylesheets/semantic_ui/themes/github/elements/step.variables +2 -2
- data/assets/stylesheets/semantic_ui/themes/instagram/views/card.overrides +12 -0
- data/assets/stylesheets/semantic_ui/themes/instagram/views/card.variables +23 -0
- data/assets/stylesheets/semantic_ui/themes/material/collections/menu.overrides +1 -0
- data/assets/stylesheets/semantic_ui/themes/material/collections/menu.variables +10 -0
- data/assets/stylesheets/semantic_ui/themes/material/elements/button.overrides +1 -0
- data/assets/stylesheets/semantic_ui/themes/material/elements/button.variables +14 -6
- data/assets/stylesheets/semantic_ui/themes/material/globals/site.variables +3 -2
- data/assets/stylesheets/semantic_ui/themes/material/modules/dropdown.overrides +5 -0
- data/assets/stylesheets/semantic_ui/themes/material/modules/dropdown.variables +20 -0
- data/assets/stylesheets/semantic_ui/themes/raised/elements/button.variables +5 -5
- data/assets/stylesheets/semantic_ui/themes/round/elements/button.variables +1 -1
- data/assets/stylesheets/semantic_ui/themes/timeline/views/feed.overrides +4 -12
- data/assets/stylesheets/semantic_ui/themes/timeline/views/feed.variables +3 -7
- data/lib/generators/semantic_ui/install/templates/config/elements/container.overrides +3 -0
- data/lib/generators/semantic_ui/install/templates/config/elements/container.variables +3 -0
- data/lib/generators/semantic_ui/install/templates/config/modules/embed.overrides +3 -0
- data/lib/generators/semantic_ui/install/templates/config/modules/embed.variables +0 -0
- data/lib/generators/semantic_ui/install/templates/semantic_ui.css +2 -1
- data/lib/generators/semantic_ui/install/templates/semantic_ui.js +1 -1
- data/lib/generators/semantic_ui/install/templates/theme.config +5 -3
- data/lib/less/rails/semantic_ui/version.rb +1 -1
- data/tasks/update.rake +21 -6
- metadata +23 -7
- data/assets/fonts/semantic_ui/themes/default/assets/fonts/icons.otf +0 -0
- data/assets/javascripts/semantic_ui/definitions/modules/video.js +0 -540
- data/assets/stylesheets/semantic_ui/definitions/modules/video.less +0 -135
- data/assets/stylesheets/semantic_ui/themes/default/modules/video.variables +0 -16
@@ -3,7 +3,7 @@
|
|
3
3
|
* http://github.com/semantic-org/semantic-ui/
|
4
4
|
*
|
5
5
|
*
|
6
|
-
* Copyright
|
6
|
+
* Copyright 2015 Contributors
|
7
7
|
* Released under the MIT license
|
8
8
|
* http://opensource.org/licenses/MIT
|
9
9
|
*
|
@@ -29,7 +29,9 @@ $.fn.search = function(parameters) {
|
|
29
29
|
$(this)
|
30
30
|
.each(function() {
|
31
31
|
var
|
32
|
-
settings
|
32
|
+
settings = ( $.isPlainObject(parameters) )
|
33
|
+
? $.extend(true, {}, $.fn.search.settings, parameters)
|
34
|
+
: $.extend({}, $.fn.search.settings),
|
33
35
|
|
34
36
|
className = settings.className,
|
35
37
|
metadata = settings.metadata,
|
@@ -53,37 +55,15 @@ $.fn.search = function(parameters) {
|
|
53
55
|
|
54
56
|
module
|
55
57
|
;
|
58
|
+
|
56
59
|
module = {
|
57
60
|
|
58
61
|
initialize: function() {
|
59
62
|
module.verbose('Initializing module');
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
: (prompt !== undefined && prompt.onpropertychange !== undefined)
|
65
|
-
? 'propertychange'
|
66
|
-
: 'keyup'
|
67
|
-
;
|
68
|
-
if(settings.automatic) {
|
69
|
-
$prompt
|
70
|
-
.on(inputEvent + eventNamespace, module.throttle)
|
71
|
-
.attr('autocomplete', 'off')
|
72
|
-
;
|
73
|
-
}
|
74
|
-
$prompt
|
75
|
-
.on('focus' + eventNamespace, module.event.focus)
|
76
|
-
.on('blur' + eventNamespace, module.event.blur)
|
77
|
-
.on('keydown' + eventNamespace, module.handleKeyboard)
|
78
|
-
;
|
79
|
-
$searchButton
|
80
|
-
.on('click' + eventNamespace, module.query)
|
81
|
-
;
|
82
|
-
$results
|
83
|
-
.on('mousedown' + eventNamespace, module.event.result.mousedown)
|
84
|
-
.on('mouseup' + eventNamespace, module.event.result.mouseup)
|
85
|
-
.on('click' + eventNamespace, selector.result, module.event.result.click)
|
86
|
-
;
|
63
|
+
module.determine.searchFields();
|
64
|
+
module.bind.events();
|
65
|
+
module.set.type();
|
66
|
+
module.create.results();
|
87
67
|
module.instantiate();
|
88
68
|
},
|
89
69
|
instantiate: function() {
|
@@ -96,24 +76,56 @@ $.fn.search = function(parameters) {
|
|
96
76
|
destroy: function() {
|
97
77
|
module.verbose('Destroying instance');
|
98
78
|
$module
|
99
|
-
.removeData(moduleNamespace)
|
100
|
-
;
|
101
|
-
$prompt
|
102
|
-
.off(eventNamespace)
|
103
|
-
;
|
104
|
-
$searchButton
|
105
|
-
.off(eventNamespace)
|
106
|
-
;
|
107
|
-
$results
|
108
79
|
.off(eventNamespace)
|
80
|
+
.removeData(moduleNamespace)
|
109
81
|
;
|
110
82
|
},
|
83
|
+
|
84
|
+
bind: {
|
85
|
+
events: function() {
|
86
|
+
module.verbose('Binding events to search');
|
87
|
+
if(settings.automatic) {
|
88
|
+
$module
|
89
|
+
.on(module.get.inputEvent() + eventNamespace, selector.prompt, module.event.input)
|
90
|
+
;
|
91
|
+
$prompt
|
92
|
+
.attr('autocomplete', 'off')
|
93
|
+
;
|
94
|
+
}
|
95
|
+
$module
|
96
|
+
// prompt
|
97
|
+
.on('focus' + eventNamespace, selector.prompt, module.event.focus)
|
98
|
+
.on('blur' + eventNamespace, selector.prompt, module.event.blur)
|
99
|
+
.on('keydown' + eventNamespace, selector.prompt, module.handleKeyboard)
|
100
|
+
// search button
|
101
|
+
.on('click' + eventNamespace, selector.searchButton, module.query)
|
102
|
+
// results
|
103
|
+
.on('mousedown' + eventNamespace, selector.results, module.event.result.mousedown)
|
104
|
+
.on('mouseup' + eventNamespace, selector.results, module.event.result.mouseup)
|
105
|
+
.on('click' + eventNamespace, selector.result, module.event.result.click)
|
106
|
+
;
|
107
|
+
}
|
108
|
+
},
|
109
|
+
|
110
|
+
determine: {
|
111
|
+
searchFields: function() {
|
112
|
+
// this makes sure $.extend does not add specified search fields to default fields
|
113
|
+
// this is the only setting which should not extend defaults
|
114
|
+
if(parameters && parameters.searchFields !== undefined) {
|
115
|
+
settings.searchFields = parameters.searchFields;
|
116
|
+
}
|
117
|
+
}
|
118
|
+
},
|
119
|
+
|
111
120
|
event: {
|
121
|
+
input: function() {
|
122
|
+
clearTimeout(module.timer);
|
123
|
+
module.timer = setTimeout(module.query, settings.searchDelay);
|
124
|
+
},
|
112
125
|
focus: function() {
|
113
126
|
module.set.focus();
|
114
|
-
clearTimeout(module.timer);
|
115
|
-
module.throttle();
|
116
127
|
if( module.has.minimumCharacters() ) {
|
128
|
+
module.query();
|
117
129
|
module.showResults();
|
118
130
|
}
|
119
131
|
},
|
@@ -143,11 +155,12 @@ $.fn.search = function(parameters) {
|
|
143
155
|
href = $link.attr('href') || false,
|
144
156
|
target = $link.attr('target') || false,
|
145
157
|
title = $title.html(),
|
146
|
-
|
158
|
+
// title is used for result lookup
|
159
|
+
value = ($title.length > 0)
|
147
160
|
? $title.text()
|
148
161
|
: false,
|
149
162
|
results = module.get.results(),
|
150
|
-
result = module.get.result(
|
163
|
+
result = $result.data(metadata.result) || module.get.result(value, results),
|
151
164
|
returnedValue
|
152
165
|
;
|
153
166
|
if( $.isFunction(settings.onSelect) ) {
|
@@ -157,8 +170,8 @@ $.fn.search = function(parameters) {
|
|
157
170
|
}
|
158
171
|
}
|
159
172
|
module.hideResults();
|
160
|
-
if(
|
161
|
-
module.set.value(
|
173
|
+
if(value) {
|
174
|
+
module.set.value(value);
|
162
175
|
}
|
163
176
|
if(href) {
|
164
177
|
module.verbose('Opening search link found in result', $link);
|
@@ -258,9 +271,11 @@ $.fn.search = function(parameters) {
|
|
258
271
|
api: function() {
|
259
272
|
var
|
260
273
|
apiSettings = {
|
274
|
+
debug : settings.debug,
|
261
275
|
on : false,
|
276
|
+
cache : 'local',
|
262
277
|
action : 'search',
|
263
|
-
|
278
|
+
onError : module.error
|
264
279
|
},
|
265
280
|
searchHTML
|
266
281
|
;
|
@@ -291,6 +306,17 @@ $.fn.search = function(parameters) {
|
|
291
306
|
},
|
292
307
|
|
293
308
|
get: {
|
309
|
+
inputEvent: function() {
|
310
|
+
var
|
311
|
+
prompt = $prompt[0],
|
312
|
+
inputEvent = (prompt !== undefined && prompt.oninput !== undefined)
|
313
|
+
? 'input'
|
314
|
+
: (prompt !== undefined && prompt.onpropertychange !== undefined)
|
315
|
+
? 'propertychange'
|
316
|
+
: 'keyup'
|
317
|
+
;
|
318
|
+
return inputEvent;
|
319
|
+
},
|
294
320
|
value: function() {
|
295
321
|
return $prompt.val();
|
296
322
|
},
|
@@ -302,26 +328,34 @@ $.fn.search = function(parameters) {
|
|
302
328
|
},
|
303
329
|
result: function(value, results) {
|
304
330
|
var
|
305
|
-
|
331
|
+
lookupFields = ['title', 'id'],
|
332
|
+
result = false
|
333
|
+
;
|
334
|
+
value = (value !== undefined)
|
335
|
+
? value
|
336
|
+
: module.get.value()
|
337
|
+
;
|
338
|
+
results = (results !== undefined)
|
339
|
+
? results
|
340
|
+
: module.get.results()
|
306
341
|
;
|
307
|
-
value = value || module.get.value();
|
308
|
-
results = results || module.get.results();
|
309
342
|
if(settings.type === 'category') {
|
310
343
|
module.debug('Finding result that matches', value);
|
311
344
|
$.each(results, function(index, category) {
|
312
345
|
if($.isArray(category.results)) {
|
313
|
-
result = module.search.object(value, category.results)[0];
|
314
|
-
if
|
315
|
-
|
346
|
+
result = module.search.object(value, category.results, lookupFields)[0];
|
347
|
+
// dont continue searching if a result is found
|
348
|
+
if(result) {
|
349
|
+
return false;
|
316
350
|
}
|
317
351
|
}
|
318
352
|
});
|
319
353
|
}
|
320
354
|
else {
|
321
355
|
module.debug('Finding result in results object', value);
|
322
|
-
result = module.search.object(value, results)[0];
|
356
|
+
result = module.search.object(value, results, lookupFields)[0];
|
323
357
|
}
|
324
|
-
return result;
|
358
|
+
return result || false;
|
325
359
|
},
|
326
360
|
},
|
327
361
|
|
@@ -334,8 +368,15 @@ $.fn.search = function(parameters) {
|
|
334
368
|
},
|
335
369
|
value: function(value) {
|
336
370
|
module.verbose('Setting search input value', value);
|
337
|
-
$prompt
|
338
|
-
|
371
|
+
$prompt
|
372
|
+
.val(value)
|
373
|
+
;
|
374
|
+
},
|
375
|
+
type: function(type) {
|
376
|
+
type = type || settings.type;
|
377
|
+
if(settings.type == 'category') {
|
378
|
+
$module.addClass(settings.type);
|
379
|
+
}
|
339
380
|
},
|
340
381
|
buttonPressed: function() {
|
341
382
|
$searchButton.addClass(className.pressed);
|
@@ -359,55 +400,52 @@ $.fn.search = function(parameters) {
|
|
359
400
|
searchTerm = module.get.value(),
|
360
401
|
cache = module.read.cache(searchTerm)
|
361
402
|
;
|
362
|
-
if(
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
module.debug('Querying for ' + searchTerm);
|
369
|
-
if($.isPlainObject(settings.source) || $.isArray(settings.source)) {
|
370
|
-
module.search.local(searchTerm);
|
403
|
+
if( module.has.minimumCharacters() ) {
|
404
|
+
if(cache) {
|
405
|
+
module.debug('Reading result from cache', searchTerm);
|
406
|
+
module.save.results(cache.results);
|
407
|
+
module.addResults(cache.html);
|
408
|
+
module.inject.id(cache.results);
|
371
409
|
}
|
372
|
-
else
|
373
|
-
|
374
|
-
|
375
|
-
module.search.
|
410
|
+
else {
|
411
|
+
module.debug('Querying for', searchTerm);
|
412
|
+
if($.isPlainObject(settings.source) || $.isArray(settings.source)) {
|
413
|
+
module.search.local(searchTerm);
|
376
414
|
}
|
377
|
-
else if(
|
378
|
-
module.debug('Searching with default search API endpoint');
|
415
|
+
else if( module.can.useAPI() ) {
|
379
416
|
module.search.remote(searchTerm);
|
380
417
|
}
|
381
418
|
else {
|
382
|
-
module.error(error.
|
419
|
+
module.error(error.source);
|
383
420
|
}
|
421
|
+
settings.onSearchQuery.call(element, searchTerm);
|
384
422
|
}
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
settings.onSearchQuery.call(element, searchTerm);
|
423
|
+
}
|
424
|
+
else {
|
425
|
+
module.hideResults();
|
389
426
|
}
|
390
427
|
},
|
391
428
|
|
392
429
|
search: {
|
393
430
|
local: function(searchTerm) {
|
394
431
|
var
|
395
|
-
|
432
|
+
results = module.search.object(searchTerm, settings.content),
|
396
433
|
searchHTML
|
397
434
|
;
|
398
435
|
module.set.loading();
|
399
|
-
module.save.results(
|
400
|
-
module.debug('Returned local search results',
|
436
|
+
module.save.results(results);
|
437
|
+
module.debug('Returned local search results', results);
|
401
438
|
|
402
439
|
searchHTML = module.generateResults({
|
403
|
-
results:
|
440
|
+
results: results
|
404
441
|
});
|
405
442
|
module.remove.loading();
|
443
|
+
module.addResults(searchHTML);
|
444
|
+
module.inject.id(results);
|
406
445
|
module.write.cache(searchTerm, {
|
407
446
|
html : searchHTML,
|
408
|
-
results :
|
447
|
+
results : results
|
409
448
|
});
|
410
|
-
module.addResults(searchHTML);
|
411
449
|
},
|
412
450
|
remote: function(searchTerm) {
|
413
451
|
var
|
@@ -415,6 +453,9 @@ $.fn.search = function(parameters) {
|
|
415
453
|
onSuccess : function(response) {
|
416
454
|
module.parse.response.call(element, response, searchTerm);
|
417
455
|
},
|
456
|
+
onFailure: function() {
|
457
|
+
module.displayMessage(error.serverError);
|
458
|
+
},
|
418
459
|
urlData: {
|
419
460
|
query: searchTerm
|
420
461
|
}
|
@@ -431,43 +472,60 @@ $.fn.search = function(parameters) {
|
|
431
472
|
.api('query')
|
432
473
|
;
|
433
474
|
},
|
434
|
-
object: function(searchTerm, source) {
|
475
|
+
object: function(searchTerm, source, searchFields) {
|
435
476
|
var
|
436
|
-
results
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
: [settings.searchFields],
|
441
|
-
searchExp = searchTerm.replace(regExp.escape, '\\$&'),
|
442
|
-
searchRegExp = new RegExp(regExp.exact + searchExp, 'i')
|
443
|
-
;
|
477
|
+
results = [],
|
478
|
+
fuzzyResults = [],
|
479
|
+
searchExp = searchTerm.toString().replace(regExp.escape, '\\$&'),
|
480
|
+
matchRegExp = new RegExp(regExp.beginsWith + searchExp, 'i'),
|
444
481
|
|
482
|
+
// avoid duplicates when pushing results
|
483
|
+
addResult = function(array, result) {
|
484
|
+
var
|
485
|
+
notResult = ($.inArray(result, results) == -1),
|
486
|
+
notFuzzyResult = ($.inArray(result, fuzzyResults) == -1)
|
487
|
+
;
|
488
|
+
if(notResult && notFuzzyResult) {
|
489
|
+
array.push(result);
|
490
|
+
}
|
491
|
+
}
|
492
|
+
;
|
445
493
|
source = source || settings.source;
|
494
|
+
searchFields = (searchFields !== undefined)
|
495
|
+
? searchFields
|
496
|
+
: settings.searchFields
|
497
|
+
;
|
498
|
+
|
499
|
+
// search fields should be array to loop correctly
|
500
|
+
if(!$.isArray(searchFields)) {
|
501
|
+
searchFields = [searchFields];
|
502
|
+
}
|
446
503
|
|
447
|
-
// exit conditions
|
448
|
-
if(source === undefined) {
|
504
|
+
// exit conditions if no source
|
505
|
+
if(source === undefined || source === false) {
|
449
506
|
module.error(error.source);
|
450
507
|
return [];
|
451
508
|
}
|
452
509
|
|
453
|
-
// iterate through search fields
|
510
|
+
// iterate through search fields looking for matches
|
454
511
|
$.each(searchFields, function(index, field) {
|
455
512
|
$.each(source, function(label, content) {
|
456
513
|
var
|
457
|
-
fieldExists = (typeof content[field] == 'string')
|
458
|
-
notAlreadyResult = ($.inArray(content, results) == -1 && $.inArray(content, fullTextResults) == -1)
|
514
|
+
fieldExists = (typeof content[field] == 'string')
|
459
515
|
;
|
460
|
-
if(fieldExists
|
461
|
-
if( content[field].
|
462
|
-
results
|
516
|
+
if(fieldExists) {
|
517
|
+
if( content[field].search(matchRegExp) !== -1) {
|
518
|
+
// content starts with value (first in results)
|
519
|
+
addResult(results, content);
|
463
520
|
}
|
464
521
|
else if(settings.searchFullText && module.fuzzySearch(searchTerm, content[field]) ) {
|
465
|
-
|
522
|
+
// content fuzzy matches (last in results)
|
523
|
+
addResult(fuzzyResults, content);
|
466
524
|
}
|
467
525
|
}
|
468
526
|
});
|
469
527
|
});
|
470
|
-
return $.merge(results,
|
528
|
+
return $.merge(results, fuzzyResults);
|
471
529
|
}
|
472
530
|
},
|
473
531
|
|
@@ -476,6 +534,9 @@ $.fn.search = function(parameters) {
|
|
476
534
|
termLength = term.length,
|
477
535
|
queryLength = query.length
|
478
536
|
;
|
537
|
+
if(typeof query !== 'string') {
|
538
|
+
return false;
|
539
|
+
}
|
479
540
|
query = query.toLowerCase();
|
480
541
|
term = term.toLowerCase();
|
481
542
|
if(queryLength > termLength) {
|
@@ -506,27 +567,18 @@ $.fn.search = function(parameters) {
|
|
506
567
|
module.verbose('Parsing server response', response);
|
507
568
|
if(response !== undefined) {
|
508
569
|
if(searchTerm !== undefined && response.results !== undefined) {
|
570
|
+
module.addResults(searchHTML);
|
571
|
+
module.inject.id(response.results);
|
509
572
|
module.write.cache(searchTerm, {
|
510
573
|
html : searchHTML,
|
511
574
|
results : response.results
|
512
575
|
});
|
513
576
|
module.save.results(response.results);
|
514
|
-
module.addResults(searchHTML);
|
515
577
|
}
|
516
578
|
}
|
517
579
|
}
|
518
580
|
},
|
519
581
|
|
520
|
-
throttle: function() {
|
521
|
-
clearTimeout(module.timer);
|
522
|
-
if(module.has.minimumCharacters()) {
|
523
|
-
module.timer = setTimeout(module.query, settings.searchDelay);
|
524
|
-
}
|
525
|
-
else {
|
526
|
-
module.hideResults();
|
527
|
-
}
|
528
|
-
},
|
529
|
-
|
530
582
|
cancel: {
|
531
583
|
query: function() {
|
532
584
|
if( module.can.useAPI() ) {
|
@@ -545,6 +597,23 @@ $.fn.search = function(parameters) {
|
|
545
597
|
}
|
546
598
|
},
|
547
599
|
|
600
|
+
clear: {
|
601
|
+
cache: function(value) {
|
602
|
+
var
|
603
|
+
cache = $module.data(metadata.cache)
|
604
|
+
;
|
605
|
+
if(!value) {
|
606
|
+
module.debug('Clearing cache', value);
|
607
|
+
$module.removeData(metadata.cache);
|
608
|
+
}
|
609
|
+
else if(value && cache && cache[value]) {
|
610
|
+
module.debug('Removing value from cache', value);
|
611
|
+
delete cache[value];
|
612
|
+
$module.data(metadata.cache, cache);
|
613
|
+
}
|
614
|
+
}
|
615
|
+
},
|
616
|
+
|
548
617
|
read: {
|
549
618
|
cache: function(name) {
|
550
619
|
var
|
@@ -561,6 +630,94 @@ $.fn.search = function(parameters) {
|
|
561
630
|
}
|
562
631
|
},
|
563
632
|
|
633
|
+
create: {
|
634
|
+
id: function(resultIndex, categoryIndex) {
|
635
|
+
var
|
636
|
+
resultID = (resultIndex + 1), // not zero indexed
|
637
|
+
categoryID = (categoryIndex + 1),
|
638
|
+
firstCharCode,
|
639
|
+
letterID,
|
640
|
+
id
|
641
|
+
;
|
642
|
+
if(categoryIndex !== undefined) {
|
643
|
+
// start char code for "A"
|
644
|
+
letterID = String.fromCharCode(97 + categoryIndex);
|
645
|
+
id = letterID + resultID;
|
646
|
+
module.verbose('Creating category result id', id);
|
647
|
+
}
|
648
|
+
else {
|
649
|
+
id = resultID;
|
650
|
+
module.verbose('Creating result id', id);
|
651
|
+
}
|
652
|
+
return id;
|
653
|
+
},
|
654
|
+
results: function() {
|
655
|
+
if($results.length === 0) {
|
656
|
+
$results = $('<div />')
|
657
|
+
.addClass(className.results)
|
658
|
+
.appendTo($module)
|
659
|
+
;
|
660
|
+
}
|
661
|
+
}
|
662
|
+
},
|
663
|
+
|
664
|
+
inject: {
|
665
|
+
result: function(result, resultIndex, categoryIndex) {
|
666
|
+
module.verbose('Injecting result into results');
|
667
|
+
var
|
668
|
+
$selectedResult = (categoryIndex !== undefined)
|
669
|
+
? $results
|
670
|
+
.children().eq(categoryIndex)
|
671
|
+
.children(selector.result).eq(resultIndex)
|
672
|
+
: $results
|
673
|
+
.children(selector.result).eq(resultIndex)
|
674
|
+
;
|
675
|
+
module.verbose('Injecting results metadata', $selectedResult);
|
676
|
+
$selectedResult
|
677
|
+
.data(metadata.result, result)
|
678
|
+
;
|
679
|
+
},
|
680
|
+
id: function(results) {
|
681
|
+
module.debug('Injecting unique ids into results');
|
682
|
+
var
|
683
|
+
// since results may be object, we must use counters
|
684
|
+
categoryIndex = 0,
|
685
|
+
resultIndex = 0
|
686
|
+
;
|
687
|
+
if(settings.type === 'category') {
|
688
|
+
// iterate through each category result
|
689
|
+
$.each(results, function(index, category) {
|
690
|
+
resultIndex = 0;
|
691
|
+
$.each(category.results, function(index, value) {
|
692
|
+
var
|
693
|
+
result = category.results[index]
|
694
|
+
;
|
695
|
+
if(result.id === undefined) {
|
696
|
+
result.id = module.create.id(resultIndex, categoryIndex);
|
697
|
+
}
|
698
|
+
module.inject.result(result, resultIndex, categoryIndex);
|
699
|
+
resultIndex++;
|
700
|
+
});
|
701
|
+
categoryIndex++;
|
702
|
+
});
|
703
|
+
}
|
704
|
+
else {
|
705
|
+
// top level
|
706
|
+
$.each(results, function(index, value) {
|
707
|
+
var
|
708
|
+
result = results[index]
|
709
|
+
;
|
710
|
+
if(result.id === undefined) {
|
711
|
+
result.id = module.create.id(resultIndex);
|
712
|
+
}
|
713
|
+
module.inject.result(result, resultIndex);
|
714
|
+
resultIndex++;
|
715
|
+
});
|
716
|
+
}
|
717
|
+
return results;
|
718
|
+
}
|
719
|
+
},
|
720
|
+
|
564
721
|
save: {
|
565
722
|
results: function(results) {
|
566
723
|
module.verbose('Saving current search results to metadata', results);
|
@@ -605,6 +762,8 @@ $.fn.search = function(parameters) {
|
|
605
762
|
$results
|
606
763
|
.transition({
|
607
764
|
animation : settings.transition + ' in',
|
765
|
+
debug : settings.debug,
|
766
|
+
verbose : settings.verbose,
|
608
767
|
duration : settings.duration,
|
609
768
|
queue : true
|
610
769
|
})
|
@@ -627,6 +786,8 @@ $.fn.search = function(parameters) {
|
|
627
786
|
$results
|
628
787
|
.transition({
|
629
788
|
animation : settings.transition + ' out',
|
789
|
+
debug : settings.debug,
|
790
|
+
verbose : settings.verbose,
|
630
791
|
duration : settings.duration,
|
631
792
|
queue : true
|
632
793
|
})
|
@@ -751,7 +912,7 @@ $.fn.search = function(parameters) {
|
|
751
912
|
});
|
752
913
|
}
|
753
914
|
clearTimeout(module.performance.timer);
|
754
|
-
module.performance.timer = setTimeout(module.performance.display,
|
915
|
+
module.performance.timer = setTimeout(module.performance.display, 500);
|
755
916
|
},
|
756
917
|
display: function() {
|
757
918
|
var
|
@@ -863,36 +1024,55 @@ $.fn.search = function(parameters) {
|
|
863
1024
|
|
864
1025
|
$.fn.search.settings = {
|
865
1026
|
|
866
|
-
name : 'Search
|
1027
|
+
name : 'Search',
|
867
1028
|
namespace : 'search',
|
868
1029
|
|
869
1030
|
debug : false,
|
870
|
-
verbose :
|
1031
|
+
verbose : false,
|
871
1032
|
performance : true,
|
872
1033
|
|
873
1034
|
type : 'standard',
|
1035
|
+
// template to use (specified in settings.templates)
|
1036
|
+
|
874
1037
|
minCharacters : 1,
|
1038
|
+
// minimum characters required to search
|
875
1039
|
|
876
|
-
// api config
|
877
1040
|
apiSettings : false,
|
1041
|
+
// API config
|
878
1042
|
|
879
1043
|
source : false,
|
1044
|
+
// object to search
|
1045
|
+
|
880
1046
|
searchFields : [
|
881
1047
|
'title',
|
882
1048
|
'description'
|
883
1049
|
],
|
1050
|
+
// fields to search
|
1051
|
+
|
884
1052
|
searchFullText : true,
|
1053
|
+
// whether to include fuzzy results in local search
|
1054
|
+
|
1055
|
+
automatic : true,
|
1056
|
+
// whether to add events to prompt automatically
|
885
1057
|
|
886
|
-
automatic : 'true',
|
887
1058
|
hideDelay : 0,
|
888
|
-
|
1059
|
+
// delay before hiding menu after blur
|
1060
|
+
|
1061
|
+
searchDelay : 200,
|
1062
|
+
// delay before searching
|
1063
|
+
|
889
1064
|
maxResults : 7,
|
1065
|
+
// maximum results returned from local
|
1066
|
+
|
890
1067
|
cache : true,
|
1068
|
+
// whether to store lookups in local cache
|
891
1069
|
|
1070
|
+
// transition settings
|
892
1071
|
transition : 'scale',
|
893
|
-
duration :
|
1072
|
+
duration : 200,
|
894
1073
|
easing : 'easeOutExpo',
|
895
1074
|
|
1075
|
+
// callbacks
|
896
1076
|
onSelect : false,
|
897
1077
|
onResultsAdd : false,
|
898
1078
|
|
@@ -907,6 +1087,7 @@ $.fn.search.settings = {
|
|
907
1087
|
empty : 'empty',
|
908
1088
|
focus : 'focus',
|
909
1089
|
loading : 'loading',
|
1090
|
+
results : 'results',
|
910
1091
|
pressed : 'down'
|
911
1092
|
},
|
912
1093
|
|
@@ -916,19 +1097,20 @@ $.fn.search.settings = {
|
|
916
1097
|
logging : 'Error in debug logging, exiting.',
|
917
1098
|
noEndpoint : 'No search endpoint was specified',
|
918
1099
|
noTemplate : 'A valid template name was not specified.',
|
919
|
-
serverError : 'There was an issue
|
1100
|
+
serverError : 'There was an issue querying the server.',
|
920
1101
|
maxResults : 'Results must be an array to use maxResults setting',
|
921
1102
|
method : 'The method you called is not defined.'
|
922
1103
|
},
|
923
1104
|
|
924
1105
|
metadata: {
|
925
1106
|
cache : 'cache',
|
926
|
-
results : 'results'
|
1107
|
+
results : 'results',
|
1108
|
+
result : 'result'
|
927
1109
|
},
|
928
1110
|
|
929
1111
|
regExp: {
|
930
|
-
escape
|
931
|
-
|
1112
|
+
escape : /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,
|
1113
|
+
beginsWith : '(?:\s|^)'
|
932
1114
|
},
|
933
1115
|
|
934
1116
|
selector : {
|