abracadabra 1.1.4 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +17 -3
- data/app/assets/javascripts/abracadabra.js +236 -222
- data/lib/abracadabra/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce1d95226cb46bbaea1c88bf845f2eebf5f12259
|
4
|
+
data.tar.gz: e1fa8fc9ca8fcfe6e234ffe4e3e84371b1ddc097
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02d2c22dea7363db85fb422b9d6d07623354d2ff47ba8d3248920c569f6d243490c87122f2bbae055f72593440d2d0366efff608312d04134efe4b63640b57e2
|
7
|
+
data.tar.gz: 1242c42a402cf3d3fe94f2df519535b35ff0fff89a9a061d929224ff3ac3e4a6d36f48393ea1ec9f9a09bb76ac95f1116191077b521b42285e2b67be399bcc2a
|
data/README.md
CHANGED
@@ -31,7 +31,13 @@ In your `application.css`, AFTER Bootstrap, include the css file:
|
|
31
31
|
*= require abracadabra
|
32
32
|
```
|
33
33
|
|
34
|
-
|
34
|
+
OR if you're using SASS/SCSS:
|
35
|
+
|
36
|
+
```sass
|
37
|
+
@import "abracadabra-scss";
|
38
|
+
```
|
39
|
+
|
40
|
+
In your `application.js`, AFTER JQuery (required), include the javascript file:
|
35
41
|
|
36
42
|
```js
|
37
43
|
//= require abracadabra
|
@@ -59,7 +65,7 @@ It accepts the following parameters:
|
|
59
65
|
- `attribute: :name` - Specifies what attribute your text field will be updating.
|
60
66
|
|
61
67
|
#### OPTIONAL
|
62
|
-
- `class: "my-class"` - Class(es) to be added to the abracadabra link. The class "abracadabra" is added
|
68
|
+
- `class: "my-class"` - Class(es) to be added to the abracadabra link. The class "abracadabra" is added either way. [*Default:* `"abracadabra"`]
|
63
69
|
|
64
70
|
- `id: "my-id"` - ID to be added to the abracadabra link. [*Default:* `nil`]
|
65
71
|
|
@@ -67,7 +73,7 @@ It accepts the following parameters:
|
|
67
73
|
|
68
74
|
- `method: "patch"` - HTTP REST method to use. Use anything but "get". [*Default:* `"patch"`]
|
69
75
|
|
70
|
-
- `buttonless: true` - Removes submit and cancel buttons
|
76
|
+
- `buttonless: true` - Removes submit and cancel buttons. Submission and cancellation is then done through the Enter/Tab and Escape keys, respectively. [*Default:* `false`]
|
71
77
|
|
72
78
|
- `remote: true` - Same as link_to's `remote: true`, form submits via AJAX. [*Default:* `true`]
|
73
79
|
|
@@ -107,6 +113,14 @@ click_to_edit @friend,
|
|
107
113
|
submit_on_blur: true
|
108
114
|
```
|
109
115
|
|
116
|
+
#### REBINDING
|
117
|
+
|
118
|
+
Simply call abracadabra's jQuery function:
|
119
|
+
|
120
|
+
```javascript
|
121
|
+
$.abracadabra();
|
122
|
+
```
|
123
|
+
|
110
124
|
## Configuration
|
111
125
|
|
112
126
|
Abracadabra allows some customization. If you would like to change what icon classes are used for the `submit`, `cancel`, and `delete` icons, you can change them globally.
|
@@ -1,233 +1,247 @@
|
|
1
1
|
$(function() {
|
2
|
-
abracadabraSubmissionInProgress = false;
|
3
|
-
abracadabraButtonMousedown = false;
|
4
|
-
abracadabraEscapeKeydown = false;
|
5
|
-
|
6
|
-
function closeAbracadabra(element, destroy, valueChanged) {
|
7
|
-
$element = $(element);
|
8
|
-
if($element.hasClass("abracadabra-container")) {
|
9
|
-
container = $element;
|
10
|
-
} else {
|
11
|
-
container = $element.parents(".abracadabra-container");
|
12
|
-
}
|
13
|
-
|
14
|
-
if(destroy) {
|
15
|
-
container.siblings(".abracadabra").remove();
|
16
|
-
} else {
|
17
|
-
if(valueChanged == true) {
|
18
|
-
value = container.find(".abracadabra-input").val();
|
19
|
-
} else {
|
20
|
-
value = container.find(".abracadabra-input").data("original-value");
|
21
|
-
}
|
22
|
-
container.siblings(".abracadabra").text(value).show();
|
23
|
-
}
|
24
|
-
|
25
|
-
try {
|
26
|
-
container.remove();
|
27
|
-
} catch (error) {}
|
28
|
-
}
|
29
|
-
|
30
|
-
function tabToNextAbracadabra(element, selector) {
|
31
|
-
if(selector != undefined) {
|
32
|
-
nextAbracadabra = $(selector);
|
33
2
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
3
|
+
$.extend({
|
4
|
+
abracadabra: function() {
|
5
|
+
abracadabraSubmissionInProgress = false;
|
6
|
+
abracadabraButtonMousedown = false;
|
7
|
+
abracadabraEscapeKeydown = false;
|
8
|
+
|
9
|
+
function closeAbracadabra(element, destroy, valueChanged) {
|
10
|
+
$element = $(element);
|
11
|
+
if($element.hasClass("abracadabra-container")) {
|
12
|
+
container = $element;
|
13
|
+
} else {
|
14
|
+
container = $element.parents(".abracadabra-container");
|
15
|
+
}
|
16
|
+
|
17
|
+
if(destroy) {
|
18
|
+
container.siblings(".abracadabra").remove();
|
19
|
+
} else {
|
20
|
+
if(valueChanged == true) {
|
21
|
+
value = container.find(".abracadabra-input").val();
|
22
|
+
} else {
|
23
|
+
value = container.find(".abracadabra-input").data("original-value");
|
24
|
+
}
|
25
|
+
container.siblings(".abracadabra").text(value).show();
|
26
|
+
}
|
27
|
+
|
28
|
+
try {
|
29
|
+
container.remove();
|
30
|
+
} catch (error) {}
|
39
31
|
}
|
40
|
-
/* /If selector isn't an ID, find the element with the class AFTER the current element */
|
41
|
-
|
42
|
-
closeAbracadabra(element, false, true);
|
43
|
-
nextAbracadabra.click();
|
44
|
-
} else {
|
45
|
-
closeAbracadabra(element, false, true);
|
46
|
-
}
|
47
|
-
}
|
48
|
-
|
49
|
-
$("body").on("submit", ".abracadabra-form", function(e) {
|
50
|
-
if(abracadabraSubmissionInProgress == true || abracadabraEscapeKeydown == true) {
|
51
|
-
e.preventDefault();
|
52
|
-
return false;
|
53
|
-
}
|
54
|
-
abracadabraSubmissionInProgress = true;
|
55
|
-
});
|
56
|
-
|
57
|
-
$("body").on("ajax:before", ".abracadabra-delete", function() {
|
58
|
-
if(abracadabraSubmissionInProgress == true) {
|
59
|
-
e.preventDefault();
|
60
|
-
return false;
|
61
|
-
}
|
62
|
-
abracadabraSubmissionInProgress = true;
|
63
|
-
});
|
64
|
-
|
65
|
-
$("body").on("mousedown", ".abracadabra-delete, .abracadabra-submit, .abracadabra-cancel", function() {
|
66
|
-
abracadabraButtonMousedown = true;
|
67
|
-
});
|
68
|
-
|
69
|
-
$("body").on("ajax:success", ".abracadabra-form", function(e) {
|
70
|
-
target = $(e.target);
|
71
|
-
abracadabraButtonMousedown = false;
|
72
|
-
|
73
|
-
/* If form is a DELETE, remove abracadabra instance, if not, call tabToNextSelector */
|
74
|
-
if(target.hasClass("abracadabra-delete")) {
|
75
|
-
closeAbracadabra(target, true, true);
|
76
|
-
} else {
|
77
|
-
input = $(target).find(".abracadabra-input");
|
78
|
-
tabToNextSelector = input.data("tab-to-next-selector");
|
79
|
-
tabToNextAbracadabra(target, tabToNextSelector);
|
80
|
-
}
|
81
|
-
/* /If form is a DELETE, remove abracadabra instance, if not, call tabToNextSelector */
|
82
32
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
33
|
+
function tabToNextAbracadabra(element, selector) {
|
34
|
+
if(selector != undefined) {
|
35
|
+
nextAbracadabra = $(selector);
|
36
|
+
|
37
|
+
/* If selector isn't an ID, find the element with the class AFTER the current element */
|
38
|
+
if (selector.indexOf("#") == -1) {
|
39
|
+
abracadabra = $(element).parents(".abracadabra-container").siblings(".abracadabra");
|
40
|
+
indexOfAbracadabra = $(selector).index(abracadabra);
|
41
|
+
nextAbracadabra = $($(selector)[indexOfAbracadabra + 1]);
|
42
|
+
}
|
43
|
+
/* /If selector isn't an ID, find the element with the class AFTER the current element */
|
44
|
+
|
45
|
+
closeAbracadabra(element, false, true);
|
46
|
+
nextAbracadabra.click();
|
47
|
+
} else {
|
48
|
+
closeAbracadabra(element, false, true);
|
49
|
+
}
|
98
50
|
}
|
99
|
-
}
|
100
|
-
});
|
101
51
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
52
|
+
$("body").unbind(".abracadabra-binding")
|
53
|
+
|
54
|
+
$("body").on("submit.abracadabra-binding", ".abracadabra-form", function(e) {
|
55
|
+
if(abracadabraSubmissionInProgress == true || abracadabraEscapeKeydown == true) {
|
56
|
+
e.preventDefault();
|
57
|
+
return false;
|
58
|
+
}
|
59
|
+
abracadabraSubmissionInProgress = true;
|
60
|
+
});
|
61
|
+
|
62
|
+
$("body").on("ajax:before.abracadabra-binding", ".abracadabra-delete", function() {
|
63
|
+
if(abracadabraSubmissionInProgress == true) {
|
64
|
+
e.preventDefault();
|
65
|
+
return false;
|
66
|
+
}
|
67
|
+
abracadabraSubmissionInProgress = true;
|
68
|
+
});
|
69
|
+
|
70
|
+
$("body").on("mousedown.abracadabra-binding", ".abracadabra-delete, .abracadabra-submit, .abracadabra-cancel", function() {
|
71
|
+
abracadabraButtonMousedown = true;
|
72
|
+
});
|
73
|
+
|
74
|
+
$("body").on("ajax:success.abracadabra-binding", ".abracadabra-form", function(e) {
|
75
|
+
target = $(e.target);
|
76
|
+
abracadabraButtonMousedown = false;
|
77
|
+
|
78
|
+
/* If form is a DELETE, remove abracadabra instance, if not, call tabToNextSelector */
|
79
|
+
if(target.hasClass("abracadabra-delete")) {
|
80
|
+
closeAbracadabra(target, true, true);
|
81
|
+
} else {
|
82
|
+
input = $(target).find(".abracadabra-input");
|
83
|
+
tabToNextSelector = input.data("tab-to-next-selector");
|
84
|
+
tabToNextAbracadabra(target, tabToNextSelector);
|
85
|
+
}
|
86
|
+
/* /If form is a DELETE, remove abracadabra instance, if not, call tabToNextSelector */
|
87
|
+
|
88
|
+
abracadabraSubmissionInProgress = false;
|
89
|
+
});
|
90
|
+
|
91
|
+
$("body").on("ajax:error.abracadabra-binding", ".abracadabra-form", function() {
|
119
92
|
closeAbracadabra(this, false, false);
|
120
|
-
|
121
|
-
}
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
93
|
+
$.abracadabra();
|
94
|
+
});
|
95
|
+
|
96
|
+
$("body").on("click.abracadabra-binding", ".abracadabra-cancel", function() {
|
97
|
+
if(abracadabraSubmissionInProgress == false) {
|
98
|
+
closeAbracadabra(this, false, false);
|
99
|
+
}
|
100
|
+
});
|
101
|
+
|
102
|
+
$("body").on("blur.abracadabra-binding", ".abracadabra-input", function() {
|
103
|
+
if(abracadabraSubmissionInProgress == false && abracadabraButtonMousedown == false) {
|
104
|
+
if($(this).data("submit-on-blur") == true) {
|
105
|
+
$(this.form).submit();
|
106
|
+
} else {
|
107
|
+
closeAbracadabra(this, false, false);
|
108
|
+
}
|
109
|
+
}
|
110
|
+
});
|
111
|
+
|
112
|
+
$("body").on("keydown.abracadabra-binding", ".abracadabra-input", function(e) {
|
113
|
+
/* Press Tab to submit (same function as Enter key) */
|
114
|
+
if (e.keyCode == 9)
|
115
|
+
{
|
116
|
+
e.preventDefault();
|
117
|
+
if(abracadabraSubmissionInProgress == false) {
|
118
|
+
$(this.form).submit();
|
119
|
+
}
|
120
|
+
}
|
121
|
+
/* /Press Tab to submit (same function as Enter key) */
|
122
|
+
|
123
|
+
/* Press Escape to cancel */
|
124
|
+
if (e.keyCode == 27)
|
125
|
+
{
|
126
|
+
abracadabraEscapeKeydown = true;
|
127
|
+
e.preventDefault();
|
128
|
+
if(abracadabraSubmissionInProgress == false) {
|
129
|
+
closeAbracadabra(this, false, false);
|
130
|
+
abracadabraEscapeKeydown = false;
|
131
|
+
}
|
132
|
+
}
|
133
|
+
/* /Press Escape to cancel */
|
134
|
+
});
|
135
|
+
|
136
|
+
|
137
|
+
$("body").on("confirm:complete.abracadabra-binding", ".abracadabra-delete", function(e, response) {
|
138
|
+
/* If cancel is clicked in the deletable_confirm dialog, focus on the input */
|
139
|
+
if(response == false) {
|
140
|
+
input = $(this).parents(".abracadabra-delete-container").siblings();
|
141
|
+
inputValue = input.val();
|
142
|
+
input.focus().val("").val(inputValue);
|
143
|
+
}
|
144
|
+
/* /If cancel is clicked in the deletable_confirm dialog, focus on the input */
|
145
|
+
});
|
146
|
+
|
147
|
+
$(".abracadabra").on("click", function() {
|
148
|
+
if($(".abracadabra-container:visible").length) {
|
149
|
+
return false;
|
150
|
+
}
|
151
|
+
|
152
|
+
link = $(this);
|
153
|
+
link.hide();
|
154
|
+
path = link.data("path");
|
155
|
+
attribute = link.data("attribute");
|
156
|
+
formMethod = link.data("method");
|
157
|
+
remote = ((link.data("remote") == true) ? " data-remote=\"true\"" : "");
|
158
|
+
|
159
|
+
/* Check if button classes have been manually overridden elsewhere */
|
160
|
+
if(typeof abracadabraSubmitIcon == "undefined") {
|
161
|
+
abracadabraSubmitIcon = "fa fa-check";
|
162
|
+
}
|
163
|
+
|
164
|
+
if(typeof abracadabraCancelIcon == "undefined") {
|
165
|
+
abracadabraCancelIcon = "fa fa-times";
|
166
|
+
}
|
167
|
+
|
168
|
+
if(typeof abracadabraDeleteIcon == "undefined") {
|
169
|
+
abracadabraDeleteIcon = "fa fa-times-circle-o";
|
170
|
+
}
|
171
|
+
/* /Check if button classes have been manually overridden elsewhere */
|
172
|
+
|
173
|
+
/* AJAX? */
|
174
|
+
if(remote == "") {
|
175
|
+
authToken = "<input name=\"authenticity_token\" type=\"hidden\" value=\"" + $("meta[name=\"csrf-token\"]").attr("content") + "\">";
|
176
|
+
type = "";
|
177
|
+
deletableType = "";
|
178
|
+
} else {
|
179
|
+
authToken = "";
|
180
|
+
type = " data-type=\"" + link.data("type") + "\"";
|
181
|
+
deletableType = " data-type=\"" + link.data("deletable-type") + "\"";
|
182
|
+
}
|
183
|
+
/* /AJAX? */
|
184
|
+
|
185
|
+
/* Deletable? */
|
186
|
+
if(link.data("deletable") !== false) {
|
187
|
+
deletablePath = link.data("deletable-path");
|
188
|
+
deletableConfirm = link.data("deletable");
|
189
|
+
if(deletableConfirm === true) {
|
190
|
+
deletableConfirm = "";
|
191
|
+
} else {
|
192
|
+
deletableConfirm = " data-confirm=\"" + deletableConfirm + "\"";
|
193
|
+
}
|
194
|
+
deletable = "<span class=\"abracadabra-delete-container\"><a href=\"" + deletablePath + "\" class=\"abracadabra-delete\" data-method=\"delete\"" + deletableConfirm + remote + deletableType + " rel=\"nofollow\"><i class=\"" + abracadabraDeleteIcon + "\"></i></a></span>";
|
195
|
+
} else {
|
196
|
+
deletable = "";
|
197
|
+
}
|
198
|
+
/* /Deletable? */
|
199
|
+
|
200
|
+
/* Tab to next? */
|
201
|
+
tabToNextSelector = link.data("tab-to-next");
|
202
|
+
if(tabToNextSelector !== false) {
|
203
|
+
tabToNextSelector = link.data("tab-to-next");
|
204
|
+
tabToNextSelector = " data-tab-to-next-selector=\"" + tabToNextSelector + "\"";
|
205
|
+
} else {
|
206
|
+
tabToNextSelector = "";
|
207
|
+
}
|
208
|
+
/* /Tab to next? */
|
209
|
+
|
210
|
+
/* Submit on blur? */
|
211
|
+
submitOnBlur = link.data("submit-on-blur");
|
212
|
+
if(submitOnBlur == true) {
|
213
|
+
submitOnBlur = " data-submit-on-blur=\"true\"";
|
214
|
+
} else {
|
215
|
+
submitOnBlur = "";
|
216
|
+
}
|
217
|
+
/* /Submit on blur? */
|
218
|
+
|
219
|
+
/* Show buttons? */
|
220
|
+
if(link.data("buttonless") == true) {
|
221
|
+
buttons = "";
|
222
|
+
} else {
|
223
|
+
buttons = "<button type=\"submit\" class=\"btn btn-primary abracadabra-submit\"><i class=\"" + abracadabraSubmitIcon + "\"></i></button><button type=\"button\" class=\"btn abracadabra-cancel\"><i class=\"" + abracadabraCancelIcon + "\"></i></button>";
|
224
|
+
}
|
225
|
+
/* /Show buttons? */
|
226
|
+
|
227
|
+
instanceClass = link.data("class");
|
228
|
+
inputValue = link.text().replace(/"|\\"/g, """);
|
229
|
+
inputId = instanceClass + "_" + attribute;
|
230
|
+
inputName = instanceClass + "[" + attribute + "]";
|
231
|
+
|
232
|
+
openFormTag = "<form accept-charset=\"UTF-8\" action=\"" + path + "\"" + remote + type + " class=\"form-inline abracadabra-form\" method=\"post\">";
|
233
|
+
hiddenMethodTags = "<div style=\"display:none;\"><input name=\"utf8\" type=\"hidden\" value=\"✓\"><input name=\"_method\" type=\"hidden\" value=\"" + formMethod + "\">" + authToken + "</div>";
|
234
|
+
input = "<input type=\"text\" class=\"form-control abracadabra-input\" id=\"" + inputId + "\" name=\"" + inputName + "\" value=\"" + inputValue + "\" data-original-value=\"" + inputValue + "\"" + tabToNextSelector + submitOnBlur + ">";
|
235
|
+
|
236
|
+
html = "<span class=\"abracadabra-container\">" + openFormTag + hiddenMethodTags;
|
237
|
+
html += "<div class=\"control-group\"><div class=\"abracadabra-input-and-button-wrapper\"><div class=\"abracadabra-input-container\">" + input + deletable + "</div>";
|
238
|
+
html += "<div class=\"abracadabra-buttons\">" + buttons + "</div></div></form></span>";
|
239
|
+
|
240
|
+
link.after(html);
|
241
|
+
link.siblings(".abracadabra-container").find(".abracadabra-input").focus().val("").val(inputValue);
|
242
|
+
});
|
133
243
|
}
|
134
|
-
/* /If cancel is clicked in the deletable_confirm dialog, focus on the input */
|
135
244
|
});
|
136
|
-
|
137
|
-
$(".abracadabra").on("click", function() {
|
138
|
-
if($(".abracadabra-container:visible").length) {
|
139
|
-
return false;
|
140
|
-
}
|
141
|
-
|
142
|
-
link = $(this);
|
143
|
-
link.hide();
|
144
|
-
path = link.data("path");
|
145
|
-
attribute = link.data("attribute");
|
146
|
-
formMethod = link.data("method");
|
147
|
-
remote = ((link.data("remote") == true) ? " data-remote=\"true\"" : "");
|
148
|
-
|
149
|
-
/* Check if button classes have been manually overridden elsewhere */
|
150
|
-
if(typeof abracadabraSubmitIcon == "undefined") {
|
151
|
-
abracadabraSubmitIcon = "fa fa-check";
|
152
|
-
}
|
153
|
-
|
154
|
-
if(typeof abracadabraCancelIcon == "undefined") {
|
155
|
-
abracadabraCancelIcon = "fa fa-times";
|
156
|
-
}
|
157
|
-
|
158
|
-
if(typeof abracadabraDeleteIcon == "undefined") {
|
159
|
-
abracadabraDeleteIcon = "fa fa-times-circle-o";
|
160
|
-
}
|
161
|
-
/* /Check if button classes have been manually overridden elsewhere */
|
162
|
-
|
163
|
-
/* AJAX? */
|
164
|
-
if(remote == "") {
|
165
|
-
authToken = "<input name=\"authenticity_token\" type=\"hidden\" value=\"" + $("meta[name=\"csrf-token\"]").attr("content") + "\">";
|
166
|
-
type = "";
|
167
|
-
deletableType = "";
|
168
|
-
} else {
|
169
|
-
authToken = "";
|
170
|
-
type = " data-type=\"" + link.data("type") + "\"";
|
171
|
-
deletableType = " data-type=\"" + link.data("deletable-type") + "\"";
|
172
|
-
}
|
173
|
-
/* /AJAX? */
|
174
|
-
|
175
|
-
/* Deletable? */
|
176
|
-
if(link.data("deletable") !== false) {
|
177
|
-
deletablePath = link.data("deletable-path");
|
178
|
-
deletableConfirm = link.data("deletable");
|
179
|
-
if(deletableConfirm === true) {
|
180
|
-
deletableConfirm = "";
|
181
|
-
} else {
|
182
|
-
deletableConfirm = " data-confirm=\"" + deletableConfirm + "\"";
|
183
|
-
}
|
184
|
-
deletable = "<span class=\"abracadabra-delete-container\"><a href=\"" + deletablePath + "\" class=\"abracadabra-delete\" data-method=\"delete\"" + deletableConfirm + remote + deletableType + " rel=\"nofollow\"><i class=\"" + abracadabraDeleteIcon + "\"></i></a></span>";
|
185
|
-
} else {
|
186
|
-
deletable = "";
|
187
|
-
}
|
188
|
-
/* /Deletable? */
|
189
|
-
|
190
|
-
/* Tab to next? */
|
191
|
-
tabToNextSelector = link.data("tab-to-next");
|
192
|
-
if(tabToNextSelector !== false) {
|
193
|
-
tabToNextSelector = link.data("tab-to-next");
|
194
|
-
tabToNextSelector = " data-tab-to-next-selector=\"" + tabToNextSelector + "\"";
|
195
|
-
} else {
|
196
|
-
tabToNextSelector = "";
|
197
|
-
}
|
198
|
-
/* /Tab to next? */
|
199
|
-
|
200
|
-
/* Submit on blur? */
|
201
|
-
submitOnBlur = link.data("submit-on-blur");
|
202
|
-
if(submitOnBlur == true) {
|
203
|
-
submitOnBlur = " data-submit-on-blur=\"true\"";
|
204
|
-
} else {
|
205
|
-
submitOnBlur = "";
|
206
|
-
}
|
207
|
-
/* /Submit on blur? */
|
208
245
|
|
209
|
-
|
210
|
-
if(link.data("buttonless") == true) {
|
211
|
-
buttons = "";
|
212
|
-
} else {
|
213
|
-
buttons = "<button type=\"submit\" class=\"btn btn-primary abracadabra-submit\"><i class=\"" + abracadabraSubmitIcon + "\"></i></button><button type=\"button\" class=\"btn abracadabra-cancel\"><i class=\"" + abracadabraCancelIcon + "\"></i></button>";
|
214
|
-
}
|
215
|
-
/* /Show buttons? */
|
216
|
-
|
217
|
-
instanceClass = link.data("class");
|
218
|
-
inputValue = link.text().replace(/"|\\"/g, """);
|
219
|
-
inputId = instanceClass + "_" + attribute;
|
220
|
-
inputName = instanceClass + "[" + attribute + "]";
|
221
|
-
|
222
|
-
openFormTag = "<form accept-charset=\"UTF-8\" action=\"" + path + "\"" + remote + type + " class=\"form-inline abracadabra-form\" method=\"post\">";
|
223
|
-
hiddenMethodTags = "<div style=\"display:none;\"><input name=\"utf8\" type=\"hidden\" value=\"✓\"><input name=\"_method\" type=\"hidden\" value=\"" + formMethod + "\">" + authToken + "</div>";
|
224
|
-
input = "<input type=\"text\" class=\"form-control abracadabra-input\" id=\"" + inputId + "\" name=\"" + inputName + "\" value=\"" + inputValue + "\" data-original-value=\"" + inputValue + "\"" + tabToNextSelector + submitOnBlur + ">";
|
225
|
-
|
226
|
-
html = "<span class=\"abracadabra-container\">" + openFormTag + hiddenMethodTags;
|
227
|
-
html += "<div class=\"control-group\"><div class=\"abracadabra-input-and-button-wrapper\"><div class=\"abracadabra-input-container\">" + input + deletable + "</div>";
|
228
|
-
html += "<div class=\"abracadabra-buttons\">" + buttons + "</div></div></form></span>";
|
229
|
-
|
230
|
-
link.after(html);
|
231
|
-
link.siblings(".abracadabra-container").find(".abracadabra-input").focus().val("").val(inputValue);
|
232
|
-
});
|
246
|
+
$.abracadabra();
|
233
247
|
});
|
data/lib/abracadabra/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: abracadabra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Trevor Hinesley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|