textext-rails 0.1.0 → 0.2.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 +7 -0
- data/README.md +2 -2
- data/Rakefile +6 -7
- data/lib/textext/rails/version.rb +1 -1
- data/textext-rails.gemspec +3 -6
- data/vendor/assets/javascripts/textext.core.js +14 -10
- data/vendor/assets/javascripts/textext.plugin.ajax.js +2 -2
- data/vendor/assets/javascripts/textext.plugin.arrow.js +2 -2
- data/vendor/assets/javascripts/textext.plugin.autocomplete.js +65 -12
- data/vendor/assets/javascripts/textext.plugin.clear.js +116 -0
- data/vendor/assets/javascripts/textext.plugin.filter.js +2 -2
- data/vendor/assets/javascripts/textext.plugin.focus.js +2 -2
- data/vendor/assets/javascripts/textext.plugin.prompt.js +25 -8
- data/vendor/assets/javascripts/textext.plugin.suggestions.js +2 -2
- data/vendor/assets/javascripts/textext.plugin.tags.js +73 -21
- data/vendor/assets/stylesheets/textext.core.css +1 -1
- data/vendor/assets/stylesheets/textext.plugin.clear.css +13 -0
- metadata +25 -12
- data/latest.tar.gz +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9bf427f9b010f127657982b974ba154a7f8f7046
|
4
|
+
data.tar.gz: 52c147ab5b6cc38ea7b966bfe3b9e5c3f89df628
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8c287ae462ef33b98dda7b4924dcea22767676a9f94e85c183e46b9412d370ba833a96d42bdffd22e07029cbfdd3eca59f6c792634867581871bc3cda187dc60
|
7
|
+
data.tar.gz: b2af79ea006a889282bd5bfabcbe57770444ed372add48ee24537aa4d0367c8edbc5bb0b7e480982f7741fae302da3d57e9f090110a5709765ef9a1a3ad7b81c
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Textext Rails
|
2
2
|
|
3
|
-
Brings the [jQuery TextExt plugin](http://textextjs.com/) into the Rails asset pipeline. The TextExt asset files are from the TextExt [1.
|
3
|
+
Brings the [jQuery TextExt plugin](http://textextjs.com/) into the Rails asset pipeline. The TextExt asset files are from the TextExt [1.3.1 release](https://github.com/alexgorbatchev/jquery-textext/tree/1.3.1).
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -28,4 +28,4 @@ That's it! Please see the [TextExt manual](http://textextjs.com/manual/index.ht
|
|
28
28
|
|
29
29
|
## License
|
30
30
|
|
31
|
-
MIT licensed. Please see the LICENSE file for more information.
|
31
|
+
MIT licensed. Please see the LICENSE file for more information.
|
data/Rakefile
CHANGED
@@ -1,21 +1,20 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
DOWNLOAD_URL = DOWNLOAD_FOLDER + LATEST_VERSION
|
3
|
+
LATEST_VERSION = '1.3.1'
|
4
|
+
DOWNLOAD_URL = "https://github.com/alexgorbatchev/jquery-textext/archive/#{LATEST_VERSION}.tar.gz"
|
6
5
|
|
7
6
|
desc "Sync the files from the upstream release"
|
8
7
|
task :sync do
|
9
8
|
sh 'mkdir -p sync'
|
10
9
|
sh 'mkdir -p vendor/assets'
|
11
|
-
sh "curl -0 #{DOWNLOAD_URL} > sync/latest.tar.gz"
|
12
|
-
sh 'cd sync && tar -
|
10
|
+
sh "curl -0 -L #{DOWNLOAD_URL} > sync/latest.tar.gz"
|
11
|
+
sh 'cd sync && tar -xzf latest.tar.gz'
|
13
12
|
|
14
|
-
release_folder = `ls sync | grep
|
13
|
+
release_folder = `ls sync | grep jquery-textext`.chomp
|
15
14
|
|
16
15
|
sh 'rm -rf vendor/assets/stylesheets'
|
17
16
|
sh 'rm -rf vendor/assets/javascripts'
|
18
17
|
sh "mv sync/#{release_folder}/src/css vendor/assets/stylesheets"
|
19
18
|
sh "mv sync/#{release_folder}/src/js vendor/assets/javascripts"
|
20
19
|
sh 'rm -rf sync'
|
21
|
-
end
|
20
|
+
end
|
data/textext-rails.gemspec
CHANGED
@@ -7,18 +7,15 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = Textext::Rails::VERSION
|
8
8
|
s.authors = ["Jeff Pollard"]
|
9
9
|
s.email = ["jeff.pollard@gmail.com"]
|
10
|
-
s.homepage = ""
|
10
|
+
s.homepage = "https://github.com/Fluxx/textext-rails"
|
11
11
|
s.summary = %q{Adds the jQuery TextExt plugin to the Rails 3.1 asset pipeline}
|
12
12
|
s.description = %q{Adds the jQuery TextExt plugin to the Rails 3.1 asset pipeline}
|
13
13
|
|
14
14
|
s.rubyforge_project = "textext-rails"
|
15
15
|
|
16
16
|
s.files = `git ls-files`.split("\n")
|
17
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
17
|
s.require_paths = ["lib"]
|
20
18
|
|
21
|
-
# specify any dependencies here
|
22
|
-
|
23
|
-
# s.add_runtime_dependency "rest-client"
|
19
|
+
# specify any dependencies here
|
20
|
+
s.add_development_dependency "rake"
|
24
21
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
/**
|
2
2
|
* jQuery TextExt Plugin
|
3
|
-
* http://
|
3
|
+
* http://textextjs.com
|
4
4
|
*
|
5
|
-
* @version 1.
|
5
|
+
* @version 1.3.1
|
6
6
|
* @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.
|
7
7
|
* @license MIT License
|
8
8
|
*/
|
@@ -71,7 +71,7 @@
|
|
71
71
|
|
72
72
|
var stringify = (JSON || {}).stringify,
|
73
73
|
slice = Array.prototype.slice,
|
74
|
-
|
74
|
+
p,
|
75
75
|
UNDEFINED = 'undefined',
|
76
76
|
|
77
77
|
/**
|
@@ -802,7 +802,9 @@
|
|
802
802
|
if(plugin)
|
803
803
|
{
|
804
804
|
self._plugins[name] = plugin = new plugin();
|
805
|
-
self[name] = function() {
|
805
|
+
self[name] = (function(plugin) {
|
806
|
+
return function(){ return plugin; }
|
807
|
+
})(plugin);
|
806
808
|
initList.push(plugin);
|
807
809
|
$.extend(true, plugin, self.opts(OPT_EXT + '.*'), self.opts(OPT_EXT + '.' + name));
|
808
810
|
}
|
@@ -968,17 +970,19 @@
|
|
968
970
|
input = self.input(),
|
969
971
|
wrap = self.wrapElement(),
|
970
972
|
container = wrap.parent(),
|
971
|
-
width = self.originalWidth,
|
973
|
+
width = self.originalWidth + 'px',
|
972
974
|
height
|
973
975
|
;
|
974
976
|
|
975
977
|
self.trigger(EVENT_PRE_INVALIDATE);
|
976
978
|
|
977
|
-
height = input.outerHeight();
|
979
|
+
height = input.outerHeight() + 'px';
|
978
980
|
|
979
|
-
|
980
|
-
|
981
|
-
|
981
|
+
// using css() method instead of width() and height() here because they don't seem to do the right thing in jQuery 1.8.x
|
982
|
+
// https://github.com/alexgorbatchev/jquery-textext/issues/74
|
983
|
+
input.css({ 'width' : width });
|
984
|
+
wrap.css({ 'width' : width, 'height' : height });
|
985
|
+
container.css({ 'height' : height });
|
982
986
|
|
983
987
|
self.trigger(EVENT_POST_INVALIDATE);
|
984
988
|
};
|
@@ -1076,7 +1080,7 @@
|
|
1076
1080
|
p.getFormData = function(keyCode)
|
1077
1081
|
{
|
1078
1082
|
var self = this,
|
1079
|
-
data = self.getWeightedEventResponse(EVENT_GET_FORM_DATA, keyCode)
|
1083
|
+
data = self.getWeightedEventResponse(EVENT_GET_FORM_DATA, keyCode || 0)
|
1080
1084
|
;
|
1081
1085
|
|
1082
1086
|
self.trigger(EVENT_SET_FORM_DATA , data['form']);
|
@@ -1,15 +1,15 @@
|
|
1
1
|
/**
|
2
2
|
* jQuery TextExt Plugin
|
3
|
-
* http://
|
3
|
+
* http://textextjs.com
|
4
4
|
*
|
5
|
-
* @version 1.
|
5
|
+
* @version 1.3.1
|
6
6
|
* @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.
|
7
7
|
* @license MIT License
|
8
8
|
*/
|
9
9
|
(function($)
|
10
10
|
{
|
11
11
|
/**
|
12
|
-
* Autocomplete plugin brings the classic autocomplete functionality to the TextExt
|
12
|
+
* Autocomplete plugin brings the classic autocomplete functionality to the TextExt ecosystem.
|
13
13
|
* The gist of functionality is when user starts typing in, for example a term or a tag, a
|
14
14
|
* dropdown would be presented with possible suggestions to complete the input quicker.
|
15
15
|
*
|
@@ -29,6 +29,8 @@
|
|
29
29
|
CSS_DOT_SELECTED = CSS_DOT + CSS_SELECTED,
|
30
30
|
CSS_SUGGESTION = 'text-suggestion',
|
31
31
|
CSS_DOT_SUGGESTION = CSS_DOT + CSS_SUGGESTION,
|
32
|
+
CSS_LABEL = 'text-label',
|
33
|
+
CSS_DOT_LABEL = CSS_DOT + CSS_LABEL,
|
32
34
|
|
33
35
|
/**
|
34
36
|
* Autocomplete plugin options are grouped under `autocomplete` when passed to the
|
@@ -226,6 +228,8 @@
|
|
226
228
|
|
227
229
|
POSITION_ABOVE = 'above',
|
228
230
|
POSITION_BELOW = 'below',
|
231
|
+
|
232
|
+
DATA_MOUSEDOWN_ON_AUTOCOMPLETE = 'mousedownOnAutocomplete',
|
229
233
|
|
230
234
|
DEFAULT_OPTS = {
|
231
235
|
autocomplete : {
|
@@ -291,6 +295,7 @@
|
|
291
295
|
|
292
296
|
self.on(container, {
|
293
297
|
mouseover : self.onMouseOver,
|
298
|
+
mousedown : self.onMouseDown,
|
294
299
|
click : self.onClick
|
295
300
|
});
|
296
301
|
|
@@ -300,6 +305,12 @@
|
|
300
305
|
;
|
301
306
|
|
302
307
|
$(self).data('container', container);
|
308
|
+
|
309
|
+
$(document.body).click(function(e)
|
310
|
+
{
|
311
|
+
if (self.isDropdownVisible() && !self.withinWrapElement(e.target))
|
312
|
+
self.trigger(EVENT_HIDE_DROPDOWN);
|
313
|
+
});
|
303
314
|
|
304
315
|
self.positionDropdown();
|
305
316
|
}
|
@@ -345,7 +356,23 @@
|
|
345
356
|
target.addClass(CSS_SELECTED);
|
346
357
|
}
|
347
358
|
};
|
348
|
-
|
359
|
+
|
360
|
+
/**
|
361
|
+
* Reacts to the `mouseDown` event triggered by the TextExt core.
|
362
|
+
*
|
363
|
+
* @signature TextExtAutocomplete.onMouseDown(e)
|
364
|
+
*
|
365
|
+
* @param e {Object} jQuery event.
|
366
|
+
*
|
367
|
+
* @author adamayres
|
368
|
+
* @date 2012/01/13
|
369
|
+
* @id TextExtAutocomplete.onMouseDown
|
370
|
+
*/
|
371
|
+
p.onMouseDown = function(e)
|
372
|
+
{
|
373
|
+
this.containerElement().data(DATA_MOUSEDOWN_ON_AUTOCOMPLETE, true);
|
374
|
+
};
|
375
|
+
|
349
376
|
/**
|
350
377
|
* Reacts to the `click` event triggered by the TextExt core.
|
351
378
|
*
|
@@ -363,8 +390,11 @@
|
|
363
390
|
target = $(e.target)
|
364
391
|
;
|
365
392
|
|
366
|
-
if(target.is(CSS_DOT_SUGGESTION))
|
367
|
-
self.
|
393
|
+
if(target.is(CSS_DOT_SUGGESTION) || target.is(CSS_DOT_LABEL))
|
394
|
+
self.trigger('enterKeyPress');
|
395
|
+
|
396
|
+
if (self.core().hasPlugin('tags'))
|
397
|
+
self.val('');
|
368
398
|
};
|
369
399
|
|
370
400
|
/**
|
@@ -380,12 +410,18 @@
|
|
380
410
|
*/
|
381
411
|
p.onBlur = function(e)
|
382
412
|
{
|
383
|
-
var self
|
413
|
+
var self = this,
|
414
|
+
container = self.containerElement(),
|
415
|
+
isBlurByMousedown = container.data(DATA_MOUSEDOWN_ON_AUTOCOMPLETE) === true
|
416
|
+
;
|
384
417
|
|
385
|
-
//
|
386
|
-
//
|
418
|
+
// only trigger a close event if the blur event was
|
419
|
+
// not triggered by a mousedown event on the autocomplete
|
420
|
+
// otherwise set focus back back on the input
|
387
421
|
if(self.isDropdownVisible())
|
388
|
-
|
422
|
+
isBlurByMousedown ? self.core().focusInput() : self.trigger(EVENT_HIDE_DROPDOWN);
|
423
|
+
|
424
|
+
container.removeData(DATA_MOUSEDOWN_ON_AUTOCOMPLETE);
|
389
425
|
};
|
390
426
|
|
391
427
|
/**
|
@@ -684,7 +720,7 @@
|
|
684
720
|
* @author agorbatchev
|
685
721
|
* @date 2011/12/27
|
686
722
|
* @id TextExtAutocomplete.onToggleDropdown
|
687
|
-
* @version 1.1
|
723
|
+
* @version 1.1.0
|
688
724
|
*/
|
689
725
|
p.onToggleDropdown = function(e)
|
690
726
|
{
|
@@ -1049,9 +1085,26 @@
|
|
1049
1085
|
if(suggestion)
|
1050
1086
|
{
|
1051
1087
|
self.val(self.itemManager().itemToString(suggestion));
|
1052
|
-
self.core().getFormData();
|
1088
|
+
self.core().getFormData();
|
1053
1089
|
}
|
1054
1090
|
|
1055
1091
|
self.trigger(EVENT_HIDE_DROPDOWN);
|
1056
1092
|
};
|
1093
|
+
|
1094
|
+
/**
|
1095
|
+
* Determines if the specified HTML element is within the TextExt core wrap HTML element.
|
1096
|
+
*
|
1097
|
+
* @signature TextExtAutocomplete.withinWrapElement(element)
|
1098
|
+
*
|
1099
|
+
* @param element {HTMLElement} element to check if contained by wrap element
|
1100
|
+
*
|
1101
|
+
* @author adamayres
|
1102
|
+
* @version 1.3.0
|
1103
|
+
* @date 2012/01/15
|
1104
|
+
* @id TextExtAutocomplete.withinWrapElement
|
1105
|
+
*/
|
1106
|
+
p.withinWrapElement = function(element)
|
1107
|
+
{
|
1108
|
+
return this.core().wrapElement().find(element).size() > 0;
|
1109
|
+
}
|
1057
1110
|
})(jQuery);
|
@@ -0,0 +1,116 @@
|
|
1
|
+
/**
|
2
|
+
* jQuery TextExt Plugin
|
3
|
+
* http://alexgorbatchev.com/textext
|
4
|
+
*
|
5
|
+
* @version 1.3.1
|
6
|
+
* @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.
|
7
|
+
* @license MIT License
|
8
|
+
*/
|
9
|
+
(function($)
|
10
|
+
{
|
11
|
+
/**
|
12
|
+
* Displays a clear search button.
|
13
|
+
*
|
14
|
+
* @author mreinstein
|
15
|
+
* @date 2012/02/19
|
16
|
+
* @id TextExtClear
|
17
|
+
*/
|
18
|
+
function TextExtClear() {};
|
19
|
+
|
20
|
+
$.fn.textext.TextExtClear = TextExtClear;
|
21
|
+
$.fn.textext.addPlugin('clear', TextExtClear);
|
22
|
+
|
23
|
+
var p = TextExtClear.prototype,
|
24
|
+
/**
|
25
|
+
* Clear plugin only has one option and that is its HTML template. It could be
|
26
|
+
* changed when passed to the `$().textext()` function. For example:
|
27
|
+
*
|
28
|
+
* $('textarea').textext({
|
29
|
+
* plugins: 'clear',
|
30
|
+
* html: {
|
31
|
+
* clear: "<span/>"
|
32
|
+
* }
|
33
|
+
* })
|
34
|
+
*
|
35
|
+
* @author mreinstein
|
36
|
+
* @date 2012/02/19
|
37
|
+
* @id TextExtClear.options
|
38
|
+
*/
|
39
|
+
|
40
|
+
/**
|
41
|
+
* HTML source that is used to generate markup required for the clear.
|
42
|
+
*
|
43
|
+
* @name html.clear
|
44
|
+
* @default '<div class="text-clear"/>'
|
45
|
+
* @author mreinstein
|
46
|
+
* @date 2012/02/19
|
47
|
+
* @id TextExtClear.options.html.clear
|
48
|
+
*/
|
49
|
+
OPT_HTML_CLEAR = 'html.clear',
|
50
|
+
|
51
|
+
DEFAULT_OPTS = {
|
52
|
+
html : {
|
53
|
+
clear : '<div class="text-clear"/>'
|
54
|
+
}
|
55
|
+
};
|
56
|
+
|
57
|
+
/**
|
58
|
+
* Initialization method called by the core during plugin instantiation.
|
59
|
+
*
|
60
|
+
* @signature TextExtClear.init(core)
|
61
|
+
*
|
62
|
+
* @param core {TextExt} Instance of the TextExt core class.
|
63
|
+
*
|
64
|
+
* @author agorbatchev
|
65
|
+
* @date 2011/12/27
|
66
|
+
* @id TextExtClear.init
|
67
|
+
*/
|
68
|
+
p.init = function(core)
|
69
|
+
{
|
70
|
+
var self = this,
|
71
|
+
clear
|
72
|
+
;
|
73
|
+
|
74
|
+
self.baseInit(core, DEFAULT_OPTS);
|
75
|
+
|
76
|
+
self._clear = clear = $(self.opts(OPT_HTML_CLEAR));
|
77
|
+
self.core().wrapElement().append(clear);
|
78
|
+
clear.bind('click', function(e) { self.onClearClick(e); });
|
79
|
+
};
|
80
|
+
|
81
|
+
//--------------------------------------------------------------------------------
|
82
|
+
// Event handlers
|
83
|
+
|
84
|
+
/**
|
85
|
+
* Reacts to the `click` event whenever user clicks the clear.
|
86
|
+
*
|
87
|
+
* @signature TextExtClear.onClearClick(e)
|
88
|
+
*
|
89
|
+
* @param e {Object} jQuery event.
|
90
|
+
* @author agorbatchev
|
91
|
+
* @date 2011/12/27
|
92
|
+
* @id TextExtClear.onClearClick
|
93
|
+
*/
|
94
|
+
p.onClearClick = function(e)
|
95
|
+
{
|
96
|
+
var self = this;
|
97
|
+
|
98
|
+
// check if the tags plugin is present
|
99
|
+
if(typeof self.core()._plugins.tags != 'undefined')
|
100
|
+
{
|
101
|
+
// it is! remove all tags
|
102
|
+
var elems = self.core()._plugins.tags.tagElements();
|
103
|
+
for(var i =0; i < elems.length;i++)
|
104
|
+
{
|
105
|
+
self.core()._plugins.tags.removeTag($(elems[i]));
|
106
|
+
}
|
107
|
+
}
|
108
|
+
// clear the text from the search area
|
109
|
+
self.val('');
|
110
|
+
self.core().getFormData();
|
111
|
+
};
|
112
|
+
|
113
|
+
//--------------------------------------------------------------------------------
|
114
|
+
// Core functionality
|
115
|
+
|
116
|
+
})(jQuery);
|
@@ -1,8 +1,8 @@
|
|
1
1
|
/**
|
2
2
|
* jQuery TextExt Plugin
|
3
|
-
* http://
|
3
|
+
* http://textextjs.com
|
4
4
|
*
|
5
|
-
* @version 1.
|
5
|
+
* @version 1.3.1
|
6
6
|
* @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.
|
7
7
|
* @license MIT License
|
8
8
|
*/
|
@@ -109,8 +109,10 @@
|
|
109
109
|
*/
|
110
110
|
p.init = function(core)
|
111
111
|
{
|
112
|
-
var self
|
113
|
-
|
112
|
+
var self = this,
|
113
|
+
placeholderKey = 'placeholder',
|
114
|
+
container,
|
115
|
+
prompt
|
114
116
|
;
|
115
117
|
|
116
118
|
self.baseInit(core, DEFAULT_OPTS);
|
@@ -121,7 +123,18 @@
|
|
121
123
|
self.core().wrapElement().append(container);
|
122
124
|
self.setPrompt(self.opts(OPT_PROMPT));
|
123
125
|
|
124
|
-
|
126
|
+
prompt = core.input().attr(placeholderKey);
|
127
|
+
|
128
|
+
if(!prompt)
|
129
|
+
prompt = self.opts(OPT_PROMPT);
|
130
|
+
|
131
|
+
// clear placeholder attribute if set
|
132
|
+
core.input().attr(placeholderKey, '');
|
133
|
+
|
134
|
+
if(prompt)
|
135
|
+
self.setPrompt(prompt);
|
136
|
+
|
137
|
+
if($.trim(self.val()).length > 0)
|
125
138
|
self.hidePrompt();
|
126
139
|
|
127
140
|
self.on({
|
@@ -208,8 +221,7 @@
|
|
208
221
|
|
209
222
|
self.startTimer('prompt', 0.1, function()
|
210
223
|
{
|
211
|
-
|
212
|
-
self.showPrompt();
|
224
|
+
self.showPrompt();
|
213
225
|
});
|
214
226
|
};
|
215
227
|
|
@@ -224,7 +236,12 @@
|
|
224
236
|
*/
|
225
237
|
p.showPrompt = function()
|
226
238
|
{
|
227
|
-
this
|
239
|
+
var self = this,
|
240
|
+
input = self.input()
|
241
|
+
;
|
242
|
+
|
243
|
+
if($.trim(self.val()).length === 0 && !input.is(':focus'))
|
244
|
+
self.containerElement().removeClass(CSS_HIDE_PROMPT);
|
228
245
|
};
|
229
246
|
|
230
247
|
/**
|
@@ -1,17 +1,17 @@
|
|
1
1
|
/**
|
2
2
|
* jQuery TextExt Plugin
|
3
|
-
* http://
|
3
|
+
* http://textextjs.com
|
4
4
|
*
|
5
|
-
* @version 1.
|
5
|
+
* @version 1.3.1
|
6
6
|
* @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.
|
7
7
|
* @license MIT License
|
8
8
|
*/
|
9
9
|
(function($)
|
10
10
|
{
|
11
11
|
/**
|
12
|
-
* Tags plugin brings in the traditional tag functionality where user can assemble and
|
12
|
+
* Tags plugin brings in the traditional tag functionality where user can assemble and
|
13
13
|
* edit list of tags. Tags plugin works especially well together with Autocomplete, Filter,
|
14
|
-
* Suggestions and Ajax plugins to provide full spectrum of features. It can also work on
|
14
|
+
* Suggestions and Ajax plugins to provide full spectrum of features. It can also work on
|
15
15
|
* its own and just do one thing -- tags.
|
16
16
|
*
|
17
17
|
* @author agorbatchev
|
@@ -32,9 +32,13 @@
|
|
32
32
|
CSS_DOT_TAG = CSS_DOT + CSS_TAG,
|
33
33
|
CSS_TAGS = 'text-tags',
|
34
34
|
CSS_DOT_TAGS = CSS_DOT + CSS_TAGS,
|
35
|
+
CSS_LABEL = 'text-label',
|
36
|
+
CSS_DOT_LABEL = CSS_DOT + CSS_LABEL,
|
37
|
+
CSS_REMOVE = 'text-remove',
|
38
|
+
CSS_DOT_REMOVE = CSS_DOT + CSS_REMOVE,
|
35
39
|
|
36
40
|
/**
|
37
|
-
* Tags plugin options are grouped under `tags` when passed to the
|
41
|
+
* Tags plugin options are grouped under `tags` when passed to the
|
38
42
|
* `$().textext()` function. For example:
|
39
43
|
*
|
40
44
|
* $('textarea').textext({
|
@@ -73,7 +77,7 @@
|
|
73
77
|
* @id TextExtTags.options.tags.items
|
74
78
|
*/
|
75
79
|
OPT_ITEMS = 'tags.items',
|
76
|
-
|
80
|
+
|
77
81
|
/**
|
78
82
|
* HTML source that is used to generate a single tag.
|
79
83
|
*
|
@@ -84,7 +88,7 @@
|
|
84
88
|
* @id TextExtTags.options.html.tag
|
85
89
|
*/
|
86
90
|
OPT_HTML_TAG = 'html.tag',
|
87
|
-
|
91
|
+
|
88
92
|
/**
|
89
93
|
* HTML source that is used to generate container for the tags.
|
90
94
|
*
|
@@ -124,6 +128,35 @@
|
|
124
128
|
*/
|
125
129
|
EVENT_IS_TAG_ALLOWED = 'isTagAllowed',
|
126
130
|
|
131
|
+
/**
|
132
|
+
* Tags plugin triggers the `tagClick` event when user clicks on one of the tags. This allows to process
|
133
|
+
* the click and potentially change the value of the tag (for example in case of user feedback).
|
134
|
+
*
|
135
|
+
* $('textarea').textext({...}).bind('tagClick', function(e, tag, value, callback)
|
136
|
+
* {
|
137
|
+
* var newValue = window.prompt('New value', value);
|
138
|
+
|
139
|
+
* if(newValue)
|
140
|
+
* callback(newValue, true);
|
141
|
+
* })
|
142
|
+
*
|
143
|
+
* Callback argument has the following signature:
|
144
|
+
*
|
145
|
+
* function(newValue, refocus)
|
146
|
+
* {
|
147
|
+
* ...
|
148
|
+
* }
|
149
|
+
*
|
150
|
+
* Please check out [example](/manual/examples/tags-changing.html).
|
151
|
+
*
|
152
|
+
* @name tagClick
|
153
|
+
* @version 1.3.0
|
154
|
+
* @author s.stok
|
155
|
+
* @date 2011/01/23
|
156
|
+
* @id TextExtTags.events.tagClick
|
157
|
+
*/
|
158
|
+
EVENT_TAG_CLICK = 'tagClick',
|
159
|
+
|
127
160
|
DEFAULT_OPTS = {
|
128
161
|
tags : {
|
129
162
|
enabled : true,
|
@@ -151,7 +184,6 @@
|
|
151
184
|
p.init = function(core)
|
152
185
|
{
|
153
186
|
this.baseInit(core, DEFAULT_OPTS);
|
154
|
-
|
155
187
|
var self = this,
|
156
188
|
input = self.input(),
|
157
189
|
container
|
@@ -182,7 +214,7 @@
|
|
182
214
|
});
|
183
215
|
}
|
184
216
|
|
185
|
-
self._originalPadding = {
|
217
|
+
self._originalPadding = {
|
186
218
|
left : parseInt(input.css('paddingLeft') || 0),
|
187
219
|
top : parseInt(input.css('paddingTop') || 0)
|
188
220
|
};
|
@@ -211,7 +243,7 @@
|
|
211
243
|
|
212
244
|
//--------------------------------------------------------------------------------
|
213
245
|
// Event handlers
|
214
|
-
|
246
|
+
|
215
247
|
/**
|
216
248
|
* Reacts to the `postInit` event triggered by the core and sets default tags
|
217
249
|
* if any were specified.
|
@@ -232,7 +264,7 @@
|
|
232
264
|
|
233
265
|
/**
|
234
266
|
* Reacts to the [`getFormData`][1] event triggered by the core. Returns data with the
|
235
|
-
* weight of 200 to be *greater than the Autocomplete plugin* data weight. The weights
|
267
|
+
* weight of 200 to be *greater than the Autocomplete plugin* data weight. The weights
|
236
268
|
* system is covered in greater detail in the [`getFormData`][1] event documentation.
|
237
269
|
*
|
238
270
|
* [1]: /manual/textext.html#getformdata
|
@@ -312,7 +344,7 @@
|
|
312
344
|
};
|
313
345
|
|
314
346
|
/**
|
315
|
-
* Reacts to the `backspaceKeyDown` event. When backspace key is pressed in an empty text field,
|
347
|
+
* Reacts to the `backspaceKeyDown` event. When backspace key is pressed in an empty text field,
|
316
348
|
* deletes last tag from the list.
|
317
349
|
*
|
318
350
|
* @signature TextExtTags.onBackspaceKeyDown(e)
|
@@ -336,7 +368,7 @@
|
|
336
368
|
/**
|
337
369
|
* Reacts to the `preInvalidate` event and updates the input box to look like the tags are
|
338
370
|
* positioned inside it.
|
339
|
-
*
|
371
|
+
*
|
340
372
|
* @signature TextExtTags.onPreInvalidate(e)
|
341
373
|
*
|
342
374
|
* @param e {Object} jQuery event.
|
@@ -351,7 +383,7 @@
|
|
351
383
|
lastTag = self.tagElements().last(),
|
352
384
|
pos = lastTag.position()
|
353
385
|
;
|
354
|
-
|
386
|
+
|
355
387
|
if(lastTag.length > 0)
|
356
388
|
pos.left += lastTag.innerWidth();
|
357
389
|
else
|
@@ -379,22 +411,42 @@
|
|
379
411
|
p.onClick = function(e)
|
380
412
|
{
|
381
413
|
var self = this,
|
414
|
+
core = self.core(),
|
382
415
|
source = $(e.target),
|
383
|
-
focus = 0
|
416
|
+
focus = 0,
|
417
|
+
tag
|
384
418
|
;
|
385
419
|
|
386
420
|
if(source.is(CSS_DOT_TAGS))
|
387
421
|
{
|
388
422
|
focus = 1;
|
389
423
|
}
|
390
|
-
else if(source.is(
|
424
|
+
else if(source.is(CSS_DOT_REMOVE))
|
391
425
|
{
|
392
426
|
self.removeTag(source.parents(CSS_DOT_TAG + ':first'));
|
393
427
|
focus = 1;
|
394
428
|
}
|
429
|
+
else if(source.is(CSS_DOT_LABEL))
|
430
|
+
{
|
431
|
+
tag = source.parents(CSS_DOT_TAG + ':first');
|
432
|
+
self.trigger(EVENT_TAG_CLICK, tag, tag.data(CSS_TAG), tagClickCallback);
|
433
|
+
}
|
434
|
+
|
435
|
+
function tagClickCallback(newValue, refocus)
|
436
|
+
{
|
437
|
+
tag.data(CSS_TAG, newValue);
|
438
|
+
tag.find(CSS_DOT_LABEL).text(self.itemManager().itemToString(newValue));
|
439
|
+
|
440
|
+
self.updateFormCache();
|
441
|
+
core.getFormData();
|
442
|
+
core.invalidateBounds();
|
443
|
+
|
444
|
+
if(refocus)
|
445
|
+
core.focusInput();
|
446
|
+
}
|
395
447
|
|
396
448
|
if(focus)
|
397
|
-
|
449
|
+
core.focusInput();
|
398
450
|
};
|
399
451
|
|
400
452
|
/**
|
@@ -458,7 +510,7 @@
|
|
458
510
|
* any of the tags, the tags container is sent under the text area. If cursor
|
459
511
|
* is over any of the tags, the tag container is brought to be over the text
|
460
512
|
* area.
|
461
|
-
*
|
513
|
+
*
|
462
514
|
* @signature TextExtTags.toggleZIndex(e)
|
463
515
|
*
|
464
516
|
* @param e {Object} jQuery event.
|
@@ -559,7 +611,7 @@
|
|
559
611
|
*
|
560
612
|
* @signature TextExtTags.getTagElement(tag)
|
561
613
|
*
|
562
|
-
* @param tag {Object} Tag object in the format that current `ItemManager` can understand.
|
614
|
+
* @param tag {Object} Tag object in the format that current `ItemManager` can understand.
|
563
615
|
* Default is `String`.
|
564
616
|
|
565
617
|
* @author agorbatchev
|
@@ -583,7 +635,7 @@
|
|
583
635
|
*
|
584
636
|
* @signature TextExtTags.removeTag(tag)
|
585
637
|
*
|
586
|
-
* @param tag {Object} Tag object in the format that current `ItemManager` can understand.
|
638
|
+
* @param tag {Object} Tag object in the format that current `ItemManager` can understand.
|
587
639
|
* Default is `String`.
|
588
640
|
*
|
589
641
|
* @author agorbatchev
|
@@ -618,7 +670,7 @@
|
|
618
670
|
*
|
619
671
|
* @signature TextExtTags.renderTag(tag)
|
620
672
|
*
|
621
|
-
* @param tag {Object} Tag object in the format that current `ItemManager` can understand.
|
673
|
+
* @param tag {Object} Tag object in the format that current `ItemManager` can understand.
|
622
674
|
* Default is `String`.
|
623
675
|
*
|
624
676
|
* @author agorbatchev
|
@@ -0,0 +1,13 @@
|
|
1
|
+
.text-core .text-wrap .text-clear {
|
2
|
+
-webkit-box-sizing: border-box;
|
3
|
+
-moz-box-sizing: border-box;
|
4
|
+
box-sizing: border-box;
|
5
|
+
position: absolute;
|
6
|
+
top: 0;
|
7
|
+
right: 14px;
|
8
|
+
width: 22px;
|
9
|
+
height: 22px;
|
10
|
+
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAYUlEQVR42mP4////P1IwA5RBNIBr+Pj5+/9Tlx78v373OYoCkBgIY2gACWr7tP63CO8BanoBlmyfuQssBsIYGtAVLNpwEsMADA0gAFMIw+hOpEwDSU4i2dMkByvJEUcsAABHaALCQIZDrAAAAABJRU5ErkJggg==") 50% 50% no-repeat;
|
11
|
+
cursor: pointer;
|
12
|
+
z-index: 2;
|
13
|
+
}
|
metadata
CHANGED
@@ -1,16 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: textext-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Jeff Pollard
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
dependencies:
|
11
|
+
date: 2014-01-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
14
27
|
description: Adds the jQuery TextExt plugin to the Rails 3.1 asset pipeline
|
15
28
|
email:
|
16
29
|
- jeff.pollard@gmail.com
|
@@ -23,7 +36,6 @@ files:
|
|
23
36
|
- LICENSE
|
24
37
|
- README.md
|
25
38
|
- Rakefile
|
26
|
-
- latest.tar.gz
|
27
39
|
- lib/textext-rails.rb
|
28
40
|
- lib/textext/rails.rb
|
29
41
|
- lib/textext/rails/engine.rb
|
@@ -33,6 +45,7 @@ files:
|
|
33
45
|
- vendor/assets/javascripts/textext.plugin.ajax.js
|
34
46
|
- vendor/assets/javascripts/textext.plugin.arrow.js
|
35
47
|
- vendor/assets/javascripts/textext.plugin.autocomplete.js
|
48
|
+
- vendor/assets/javascripts/textext.plugin.clear.js
|
36
49
|
- vendor/assets/javascripts/textext.plugin.filter.js
|
37
50
|
- vendor/assets/javascripts/textext.plugin.focus.js
|
38
51
|
- vendor/assets/javascripts/textext.plugin.prompt.js
|
@@ -43,31 +56,31 @@ files:
|
|
43
56
|
- vendor/assets/stylesheets/textext.core.css
|
44
57
|
- vendor/assets/stylesheets/textext.plugin.arrow.css
|
45
58
|
- vendor/assets/stylesheets/textext.plugin.autocomplete.css
|
59
|
+
- vendor/assets/stylesheets/textext.plugin.clear.css
|
46
60
|
- vendor/assets/stylesheets/textext.plugin.focus.css
|
47
61
|
- vendor/assets/stylesheets/textext.plugin.prompt.css
|
48
62
|
- vendor/assets/stylesheets/textext.plugin.tags.css
|
49
|
-
homepage:
|
63
|
+
homepage: https://github.com/Fluxx/textext-rails
|
50
64
|
licenses: []
|
65
|
+
metadata: {}
|
51
66
|
post_install_message:
|
52
67
|
rdoc_options: []
|
53
68
|
require_paths:
|
54
69
|
- lib
|
55
70
|
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
-
none: false
|
57
71
|
requirements:
|
58
|
-
- -
|
72
|
+
- - '>='
|
59
73
|
- !ruby/object:Gem::Version
|
60
74
|
version: '0'
|
61
75
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
-
none: false
|
63
76
|
requirements:
|
64
|
-
- -
|
77
|
+
- - '>='
|
65
78
|
- !ruby/object:Gem::Version
|
66
79
|
version: '0'
|
67
80
|
requirements: []
|
68
81
|
rubyforge_project: textext-rails
|
69
|
-
rubygems_version:
|
82
|
+
rubygems_version: 2.0.3
|
70
83
|
signing_key:
|
71
|
-
specification_version:
|
84
|
+
specification_version: 4
|
72
85
|
summary: Adds the jQuery TextExt plugin to the Rails 3.1 asset pipeline
|
73
86
|
test_files: []
|
data/latest.tar.gz
DELETED
Binary file
|