abracadabra 1.1.4 → 1.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 +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
|