tag_field 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/tag_field/tagField.js +107 -0
- data/lib/tag_field/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b67a8f20f5f0e5d663956206da40ee56c7977bcd
|
4
|
+
data.tar.gz: f30e52de9d73a35ab7119133a3a00794c5b8eb39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28f440ca982c0fb0fea8ad59848a909b8e815c1a4a82bdfb069104483cebbc17d9a21edad6e5c5f08783f4aa9db58ecc5e66bf08da45288f65abf5e7168d86cb
|
7
|
+
data.tar.gz: cd0d19bf293865ec06232b815001b6220f8f51f9b9776f1998f83240748bc7b59a535a84cef791dec83a287c90894e7cd9370d7179e91723d743737e1dac5b5b
|
@@ -0,0 +1,107 @@
|
|
1
|
+
$('document').ready(function() {
|
2
|
+
$("textarea[data-is-tag-field], input[data-is-tag-field]").tagField()
|
3
|
+
})
|
4
|
+
|
5
|
+
(function( $ ){
|
6
|
+
|
7
|
+
$.fn.tagField = function(options) {
|
8
|
+
var settings = $.extend( {
|
9
|
+
'remote' : '/tickers/search',
|
10
|
+
'searchFieldClass' : 'ticker search'
|
11
|
+
}, options);
|
12
|
+
|
13
|
+
function fieldDisplay(item) {
|
14
|
+
var selectString;
|
15
|
+
if (item.private) {
|
16
|
+
selectString = item.symbol
|
17
|
+
} else {
|
18
|
+
selectString = "[" + item.symbol + "] " + item.name
|
19
|
+
}
|
20
|
+
return selectString
|
21
|
+
}
|
22
|
+
|
23
|
+
|
24
|
+
this.each(function() {
|
25
|
+
var originalField = $(this)
|
26
|
+
|
27
|
+
var originalValue = originalField.val()
|
28
|
+
|
29
|
+
|
30
|
+
originalField.addClass('original')
|
31
|
+
|
32
|
+
|
33
|
+
originalField.wrap(function() {
|
34
|
+
return '<div class="ticker-canvas '+ settings['searchFieldClass']+'" />';
|
35
|
+
});
|
36
|
+
var canvas = originalField.closest('.ticker-canvas')
|
37
|
+
originalField.hide()
|
38
|
+
originalField.after("<input class='string optional ticker search' type='text'>")
|
39
|
+
var ghostSearch = originalField.next('input.ticker.search')
|
40
|
+
ghostSearch
|
41
|
+
.css("outline", "none")
|
42
|
+
.css("border", "none")
|
43
|
+
.css("width", "auto")
|
44
|
+
|
45
|
+
var originalValues = originalValue.split(', ')
|
46
|
+
window.test = originalValues
|
47
|
+
for (value in originalValues) {
|
48
|
+
|
49
|
+
if (originalValues[value] != "" && (typeof originalValues[value]) == "string" )
|
50
|
+
ghostSearch.before("<span class='label label-info'><div class='value'>" + originalValues[value] + "</div><a href='#' class='delete'>x</a></span>")
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
ghostSearch.keydown(function(e){
|
56
|
+
if (e.keyCode == 8 && ghostSearch.val() == "") {
|
57
|
+
ghostSearch.siblings('.label').last().remove()
|
58
|
+
originalField.val( originalField.siblings('.label').map(function() {
|
59
|
+
return $(this).find('.value').html()
|
60
|
+
}).get().join(', ') )
|
61
|
+
}
|
62
|
+
|
63
|
+
if (e.keyCode == 13) {
|
64
|
+
e.preventDefault()
|
65
|
+
}
|
66
|
+
})
|
67
|
+
|
68
|
+
$('.ticker-canvas a.delete').live('click', function(e) {
|
69
|
+
$(this).closest('span').remove()
|
70
|
+
originalField.val( originalField.siblings('.label').map(function(){
|
71
|
+
return $(this).find('.value').html()
|
72
|
+
}).get().join(', ') )
|
73
|
+
})
|
74
|
+
|
75
|
+
ghostSearch.autocomplete({
|
76
|
+
minLength: 1,
|
77
|
+
source: function(request, response) {
|
78
|
+
lastXhr = $.getJSON(settings['remote'], request, function(data, status, xhr) {
|
79
|
+
if (xhr === lastXhr)
|
80
|
+
response(data);
|
81
|
+
})
|
82
|
+
},
|
83
|
+
select: function(event, ui) {
|
84
|
+
if ( -1 == $.inArray(ui.item.symbol, originalField.val().split(', ')) ) {
|
85
|
+
ghostSearch.before("<span class='label label-info'><div class='value'>" + fieldDisplay(ui.item) + "</div><a href='#' class='delete'>x</a></span>")
|
86
|
+
var originalFieldValues = []
|
87
|
+
originalField.siblings('.label').each(function(index, sibling){
|
88
|
+
var siblingVal = $(this).find('.value').html()
|
89
|
+
if ( -1 == $.inArray(siblingVal, originalFieldValues) ) {
|
90
|
+
originalFieldValues.push(siblingVal)
|
91
|
+
}
|
92
|
+
})
|
93
|
+
originalField.val( originalFieldValues.join(', ') )
|
94
|
+
}
|
95
|
+
ghostSearch.val('')
|
96
|
+
return false;
|
97
|
+
}
|
98
|
+
}).data('autocomplete')._renderItem = function( ul, item ) {
|
99
|
+
return $( "<li></li>" )
|
100
|
+
.data("item.autocomplete", item )
|
101
|
+
.append( "<a href='#'>" + fieldDisplay(item) + "</a>" )
|
102
|
+
.appendTo( ul );
|
103
|
+
};
|
104
|
+
});
|
105
|
+
|
106
|
+
};
|
107
|
+
})( jQuery );
|
data/lib/tag_field/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tag_field
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Jaeger
|
@@ -45,6 +45,7 @@ executables: []
|
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
|
+
- app/assets/javascripts/tag_field/tagField.js
|
48
49
|
- lib/tag_field/version.rb
|
49
50
|
- lib/tag_field.rb
|
50
51
|
- lib/tasks/tag_field_tasks.rake
|