joosy 1.2.0.alpha.73 → 1.2.0.beta.1

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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/Gruntfile.coffee +56 -18
  3. data/bower.json +1 -1
  4. data/build/joosy/form.js +1 -0
  5. data/build/joosy/resources.js +1 -0
  6. data/build/joosy.js +2 -2774
  7. data/package.json +5 -4
  8. data/source/joosy/application.coffee +9 -7
  9. data/source/joosy/{extensions/resources-form/form.coffee → form.coffee} +58 -51
  10. data/source/joosy/helpers/form.coffee +241 -0
  11. data/source/joosy/helpers/index.coffee +3 -0
  12. data/source/joosy/helpers/routes.coffee +3 -1
  13. data/source/joosy/helpers/view.coffee +9 -9
  14. data/source/joosy/joosy.coffee +3 -5
  15. data/source/joosy/module.coffee +9 -4
  16. data/source/joosy/modules/dom.coffee +33 -31
  17. data/source/joosy/modules/events.coffee +24 -20
  18. data/source/joosy/modules/filters.coffee +38 -35
  19. data/source/joosy/modules/page/title.coffee +3 -3
  20. data/source/joosy/modules/renderer.coffee +23 -18
  21. data/source/joosy/modules/resources/identity_map.coffee +45 -0
  22. data/source/joosy/modules/resources/model.coffee +146 -0
  23. data/source/joosy/modules/widgets_manager.coffee +8 -8
  24. data/source/joosy/resources/array.coffee +0 -5
  25. data/source/joosy/resources/hash.coffee +8 -13
  26. data/source/joosy/resources/index.coffee +2 -0
  27. data/source/joosy/{extensions/resources → resources}/rest.coffee +48 -19
  28. data/source/joosy/resources/scalar.coffee +8 -10
  29. data/source/joosy/router.coffee +13 -12
  30. data/source/joosy/templaters/jst.coffee +3 -2
  31. data/source/joosy/widget.coffee +17 -15
  32. data/source/joosy.coffee +2 -0
  33. data/source/vendor/es5-shim.js +1316 -0
  34. data/source/vendor/inflections.js +598 -0
  35. data/source/vendor/metamorph.js +457 -0
  36. data/spec/helpers/matchers.coffee +4 -4
  37. data/spec/joosy/core/application_spec.coffee +1 -1
  38. data/spec/joosy/core/helpers/view_spec.coffee +2 -2
  39. data/spec/joosy/core/joosy_spec.coffee +8 -4
  40. data/spec/joosy/core/modules/dom_spec.coffee +7 -7
  41. data/spec/joosy/core/modules/events_spec.coffee +2 -2
  42. data/spec/joosy/core/modules/filters_spec.coffee +7 -8
  43. data/spec/joosy/core/modules/module_spec.coffee +5 -5
  44. data/spec/joosy/core/router_spec.coffee +3 -3
  45. data/spec/joosy/core/widget_spec.coffee +6 -6
  46. data/spec/joosy/environments/amd_spec.coffee +4 -2
  47. data/spec/joosy/environments/global_spec.coffee +1 -1
  48. data/spec/joosy/{extensions/form → form}/form_spec.coffee +9 -16
  49. data/spec/joosy/{extensions/form → form}/helpers/forms_spec.coffee +5 -5
  50. data/spec/joosy/{core/resources → resources}/array_spec.coffee +2 -2
  51. data/spec/joosy/{core/resources → resources}/hash_spec.coffee +0 -8
  52. data/spec/joosy/{core/modules/resources → resources/modules}/cacher_spec.coffee +0 -0
  53. data/spec/joosy/resources/modules/identity_map_spec.coffee +47 -0
  54. data/spec/joosy/{extensions/resources/base_spec.coffee → resources/modules/model_spec.coffee} +28 -48
  55. data/spec/joosy/{extensions/resources → resources}/rest_spec.coffee +29 -22
  56. data/spec/joosy/{core/resources → resources}/scalar_spec.coffee +8 -8
  57. data/templates/application/application.coffee.tt +0 -2
  58. data/templates/environment/app/haml/index.haml +2 -2
  59. data/templates/environment/package.json +1 -1
  60. metadata +23 -19
  61. data/build/joosy/extensions/resources-form.js +0 -590
  62. data/build/joosy/extensions/resources.js +0 -561
  63. data/source/joosy/extensions/resources/base.coffee +0 -282
  64. data/source/joosy/extensions/resources/index.coffee +0 -1
  65. data/source/joosy/extensions/resources-form/helpers/form.coffee +0 -104
  66. data/source/joosy/extensions/resources-form/index.coffee +0 -1
  67. data/source/metamorph.coffee +0 -410
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: joosy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0.alpha.73
4
+ version: 1.2.0.beta.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Boris Staal
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-09-04 00:00:00.000000000 Z
13
+ date: 2013-09-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: sprockets
@@ -53,19 +53,16 @@ files:
53
53
  - README.md
54
54
  - bower.json
55
55
  - build/joosy.js
56
- - build/joosy/extensions/resources-form.js
57
- - build/joosy/extensions/resources.js
56
+ - build/joosy/form.js
57
+ - build/joosy/resources.js
58
58
  - joosy.gemspec
59
59
  - lib/joosy.rb
60
60
  - package.json
61
61
  - source/joosy.coffee
62
62
  - source/joosy/application.coffee
63
- - source/joosy/extensions/resources-form/form.coffee
64
- - source/joosy/extensions/resources-form/helpers/form.coffee
65
- - source/joosy/extensions/resources-form/index.coffee
66
- - source/joosy/extensions/resources/base.coffee
67
- - source/joosy/extensions/resources/index.coffee
68
- - source/joosy/extensions/resources/rest.coffee
63
+ - source/joosy/form.coffee
64
+ - source/joosy/helpers/form.coffee
65
+ - source/joosy/helpers/index.coffee
69
66
  - source/joosy/helpers/routes.coffee
70
67
  - source/joosy/helpers/view.coffee
71
68
  - source/joosy/helpers/widgets.coffee
@@ -82,16 +79,22 @@ files:
82
79
  - source/joosy/modules/renderer.coffee
83
80
  - source/joosy/modules/resources.coffee
84
81
  - source/joosy/modules/resources/cacher.coffee
82
+ - source/joosy/modules/resources/identity_map.coffee
83
+ - source/joosy/modules/resources/model.coffee
85
84
  - source/joosy/modules/time_manager.coffee
86
85
  - source/joosy/modules/widgets_manager.coffee
87
86
  - source/joosy/page.coffee
88
87
  - source/joosy/resources/array.coffee
89
88
  - source/joosy/resources/hash.coffee
89
+ - source/joosy/resources/index.coffee
90
+ - source/joosy/resources/rest.coffee
90
91
  - source/joosy/resources/scalar.coffee
91
92
  - source/joosy/router.coffee
92
93
  - source/joosy/templaters/jst.coffee
93
94
  - source/joosy/widget.coffee
94
- - source/metamorph.coffee
95
+ - source/vendor/es5-shim.js
96
+ - source/vendor/inflections.js
97
+ - source/vendor/metamorph.js
95
98
  - spec/helpers/ground.coffee
96
99
  - spec/helpers/matchers.coffee
97
100
  - spec/joosy/core/application_spec.coffee
@@ -106,21 +109,22 @@ files:
106
109
  - spec/joosy/core/modules/log_spec.coffee
107
110
  - spec/joosy/core/modules/module_spec.coffee
108
111
  - spec/joosy/core/modules/renderer_spec.coffee
109
- - spec/joosy/core/modules/resources/cacher_spec.coffee
110
112
  - spec/joosy/core/modules/time_manager_spec.coffee
111
113
  - spec/joosy/core/page_spec.coffee
112
- - spec/joosy/core/resources/array_spec.coffee
113
- - spec/joosy/core/resources/hash_spec.coffee
114
- - spec/joosy/core/resources/scalar_spec.coffee
115
114
  - spec/joosy/core/router_spec.coffee
116
115
  - spec/joosy/core/templaters/jst_spec.coffee
117
116
  - spec/joosy/core/widget_spec.coffee
118
117
  - spec/joosy/environments/amd_spec.coffee
119
118
  - spec/joosy/environments/global_spec.coffee
120
- - spec/joosy/extensions/form/form_spec.coffee
121
- - spec/joosy/extensions/form/helpers/forms_spec.coffee
122
- - spec/joosy/extensions/resources/base_spec.coffee
123
- - spec/joosy/extensions/resources/rest_spec.coffee
119
+ - spec/joosy/form/form_spec.coffee
120
+ - spec/joosy/form/helpers/forms_spec.coffee
121
+ - spec/joosy/resources/array_spec.coffee
122
+ - spec/joosy/resources/hash_spec.coffee
123
+ - spec/joosy/resources/modules/cacher_spec.coffee
124
+ - spec/joosy/resources/modules/identity_map_spec.coffee
125
+ - spec/joosy/resources/modules/model_spec.coffee
126
+ - spec/joosy/resources/rest_spec.coffee
127
+ - spec/joosy/resources/scalar_spec.coffee
124
128
  - spec/support/test.js
125
129
  - tasks/joosy.coffee
126
130
  - templates/application/application.coffee.tt
@@ -1,590 +0,0 @@
1
- (function() {
2
- var __hasProp = {}.hasOwnProperty,
3
- __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
4
-
5
- Joosy.Form = (function(_super) {
6
- __extends(Form, _super);
7
-
8
- Form.include(Joosy.Modules.DOM);
9
-
10
- Form.include(Joosy.Modules.Log);
11
-
12
- Form.include(Joosy.Modules.Events);
13
-
14
- Form.prototype.invalidationClass = 'field_with_errors';
15
-
16
- Form.prototype.substitutions = {};
17
-
18
- Form.mapElements({
19
- 'fields': 'input,select,textarea'
20
- });
21
-
22
- Form.submit = function(form, options) {
23
- if (options == null) {
24
- options = {};
25
- }
26
- form = new this(form, options);
27
- form.$container.submit();
28
- form.unbind();
29
- return null;
30
- };
31
-
32
- Form.attach = function() {
33
- return (function(func, args, ctor) {
34
- ctor.prototype = func.prototype;
35
- var child = new ctor, result = func.apply(child, args);
36
- return Object(result) === result ? result : child;
37
- })(Joosy.Form, arguments, function(){});
38
- };
39
-
40
- function Form(form, options) {
41
- var method, _ref,
42
- _this = this;
43
- if (options == null) {
44
- options = {};
45
- }
46
- if (Object.isFunction(options)) {
47
- this.success = options;
48
- } else {
49
- Object.each(options, function(key, value) {
50
- return _this[key] = value;
51
- });
52
- }
53
- this.$container = $(form);
54
- if (this.$container.length === 0) {
55
- return;
56
- }
57
- this.__assignElements();
58
- this.__delegateEvents();
59
- method = (_ref = this.$container.get(0).getAttribute('method')) != null ? _ref.toLowerCase() : void 0;
60
- if (method && !['get', 'post'].any(method)) {
61
- this.__markMethod(method);
62
- this.$container.attr('method', 'POST');
63
- }
64
- this.$container.ajaxForm({
65
- dataType: 'json',
66
- beforeSend: function() {
67
- if (_this.__debounce.apply(_this, arguments)) {
68
- return false;
69
- }
70
- _this.__before.apply(_this, arguments);
71
- _this.__pending_request = true;
72
- _this.debugAs(_this, 'beforeSend: pending_request = true');
73
- return true;
74
- },
75
- success: function() {
76
- _this.__pending_request = false;
77
- _this.debugAs(_this, 'success: pending_request = false');
78
- return _this.__success.apply(_this, arguments);
79
- },
80
- error: function() {
81
- _this.__pending_request = false;
82
- _this.debugAs(_this, 'error: pending_request = false');
83
- return _this.__error.apply(_this, arguments);
84
- },
85
- xhr: function() {
86
- var xhr;
87
- xhr = $.ajaxSettings.xhr();
88
- if ((xhr.upload != null) && _this.progress) {
89
- xhr.upload.onprogress = function(event) {
90
- if (event.lengthComputable) {
91
- return _this.progress((event.position / event.total * 100).round(2));
92
- }
93
- };
94
- }
95
- return xhr;
96
- }
97
- });
98
- if (this.resource != null) {
99
- this.fill(this.resource, options);
100
- delete this.resource;
101
- }
102
- if (this.action != null) {
103
- this.$container.attr('action', this.action);
104
- this.$container.attr('method', 'POST');
105
- }
106
- if (this.method != null) {
107
- this.__markMethod(this.method);
108
- }
109
- }
110
-
111
- Form.prototype.unbind = function() {
112
- return this.$container.unbind('submit').find('input:submit,input:image,button:submit').unbind('click');
113
- };
114
-
115
- Form.prototype.fill = function(resource, options) {
116
- var data, filler, url,
117
- _this = this;
118
- if (Object.isFunction(resource.build)) {
119
- resource = resource.build();
120
- }
121
- this.__resource = resource;
122
- if ((options != null ? options.decorator : void 0) != null) {
123
- data = options.decorator(resource.data);
124
- } else {
125
- data = resource.data;
126
- }
127
- filler = function(data, scope) {
128
- if (data.__joosy_form_filler_lock) {
129
- return;
130
- }
131
- data.__joosy_form_filler_lock = true;
132
- Object.each(data, function(property, val) {
133
- var entity, i, input, key, _i, _len, _results;
134
- key = _this.concatFieldName(scope, property);
135
- input = _this.$fields().filter("[name='" + key + "']:not(:file),[name='" + (key.underscore()) + "']:not(:file),[name='" + (key.camelize(false)) + "']:not(:file)");
136
- if (input.length > 0) {
137
- if (input.is(':checkbox')) {
138
- if (val) {
139
- input.attr('checked', 'checked');
140
- } else {
141
- input.removeAttr('checked');
142
- }
143
- } else if (input.is(':radio')) {
144
- input.filter("[value='" + val + "']").attr('checked', 'checked');
145
- } else {
146
- input.val(val);
147
- }
148
- }
149
- if (val instanceof Joosy.Resources.Array) {
150
- _results = [];
151
- for (i = _i = 0, _len = val.length; _i < _len; i = ++_i) {
152
- entity = val[i];
153
- _results.push(filler(entity.data, _this.concatFieldName(scope, "[" + property + "_attributes][" + i + "]")));
154
- }
155
- return _results;
156
- } else if (val instanceof Joosy.Resources.REST) {
157
- return filler(val.data, _this.concatFieldName(scope, "[" + property + "_attributes]"));
158
- } else if (Object.isObject(val) || Object.isArray(val)) {
159
- return filler(val, key);
160
- } else {
161
-
162
- }
163
- });
164
- return delete data.__joosy_form_filler_lock;
165
- };
166
- filler(data, resource.__entityName || options.resourceName);
167
- $('input[name=_method]', this.$container).remove();
168
- if (resource.id()) {
169
- this.__markMethod((options != null ? options.method : void 0) || 'PUT');
170
- }
171
- url = (options != null ? options.action : void 0) || (resource.id() != null ? resource.memberPath() : resource.collectionPath());
172
- this.$container.attr('action', url);
173
- return this.$container.attr('method', 'POST');
174
- };
175
-
176
- Form.prototype.submit = function() {
177
- return this.$container.submit();
178
- };
179
-
180
- Form.prototype.serialize = function(skipMethod) {
181
- var data;
182
- if (skipMethod == null) {
183
- skipMethod = true;
184
- }
185
- data = this.$container.serialize();
186
- if (skipMethod) {
187
- data = data.replace(/\&?\_method\=put/i, '');
188
- }
189
- return data;
190
- };
191
-
192
- Form.prototype.__success = function(response, status, xhr) {
193
- var _ref;
194
- if (xhr) {
195
- return typeof this.success === "function" ? this.success(response) : void 0;
196
- } else if ((200 <= (_ref = response.status) && _ref < 300)) {
197
- return this.success(response.json);
198
- } else {
199
- return this.__error(response.json);
200
- }
201
- };
202
-
203
- Form.prototype.__before = function(xhr, settings) {
204
- if ((this.before == null) || this.before.apply(this, arguments) === true) {
205
- return this.$fields().removeClass(this.invalidationClass);
206
- }
207
- };
208
-
209
- Form.prototype.__error = function(data) {
210
- var error, errors,
211
- _this = this;
212
- errors = (function() {
213
- if (data.responseText) {
214
- try {
215
- return data = jQuery.parseJSON(data.responseText);
216
- } catch (_error) {
217
- error = _error;
218
- return {};
219
- }
220
- } else {
221
- return data;
222
- }
223
- })();
224
- if ((this.error == null) || this.error(errors) === true) {
225
- errors = this.__stringifyErrors(errors);
226
- Object.each(errors, function(field, notifications) {
227
- var input;
228
- input = _this.findField(field).addClass(_this.invalidationClass);
229
- return typeof _this.notification === "function" ? _this.notification(input, notifications) : void 0;
230
- });
231
- return errors;
232
- }
233
- return false;
234
- };
235
-
236
- Form.prototype.__debounce = function(xhr) {
237
- this.debugAs(this, "debounce: pending_request == " + this.__pending_request);
238
- if (this.__pending_request && this.debounce !== false) {
239
- if (this.debounce || Joosy.Form.debounceForms) {
240
- xhr.abort();
241
- this.debugAs(this, "debounce: xhr aborted");
242
- return true;
243
- }
244
- }
245
- return false;
246
- };
247
-
248
- Form.prototype.findField = function(field) {
249
- return this.$fields().filter("[name='" + field + "']");
250
- };
251
-
252
- Form.prototype.__markMethod = function(method) {
253
- if (method == null) {
254
- method = 'PUT';
255
- }
256
- method = $('<input/>', {
257
- type: 'hidden',
258
- name: '_method',
259
- value: method
260
- });
261
- return this.$container.append(method);
262
- };
263
-
264
- Form.prototype.__stringifyErrors = function(errors) {
265
- var result,
266
- _this = this;
267
- result = {};
268
- if (Object.isObject(errors != null ? errors.errors : void 0)) {
269
- errors = errors.errors;
270
- }
271
- Object.each(errors, function(field, notifications) {
272
- var f, name, splited, _i, _len;
273
- if (_this.substitutions[field] != null) {
274
- field = _this.substitutions[field];
275
- }
276
- if (Object.isObject(notifications) || _this.isArrayOfObjects(notifications)) {
277
- return Object.each(_this.__foldInlineEntities(notifications), function(key, value) {
278
- return result[field + key] = value;
279
- });
280
- } else {
281
- if (field.indexOf(".") !== -1) {
282
- splited = field.split('.');
283
- field = splited.shift();
284
- if (_this.resourceName || _this.__resource) {
285
- name = _this.resourceName || _this.__resource.__entityName;
286
- field = name + ("[" + field + "]");
287
- }
288
- for (_i = 0, _len = splited.length; _i < _len; _i++) {
289
- f = splited[_i];
290
- field += "[" + f + "]";
291
- }
292
- } else if (_this.resourceName || _this.__resource) {
293
- name = _this.resourceName || _this.__resource.__entityName;
294
- field = name + ("[" + field + "]");
295
- }
296
- return result[field] = notifications;
297
- }
298
- });
299
- return result;
300
- };
301
-
302
- Form.prototype.__foldInlineEntities = function(hash, scope, result) {
303
- var _this = this;
304
- if (scope == null) {
305
- scope = "";
306
- }
307
- if (result == null) {
308
- result = {};
309
- }
310
- Object.each(hash, function(key, value) {
311
- if (Object.isObject(value) || _this.isArrayOfObjects(value)) {
312
- return _this.__foldInlineEntities(value, "" + scope + "[" + key + "]", result);
313
- } else {
314
- return result["" + scope + "[" + key + "]"] = value;
315
- }
316
- });
317
- return result;
318
- };
319
-
320
- Form.prototype.concatFieldName = function(wrapper, name) {
321
- var items;
322
- items = this.splitFieldName(wrapper).concat(this.splitFieldName(name));
323
- return "" + items[0] + "[" + (items.slice(1).join('][')) + "]";
324
- };
325
-
326
- Form.prototype.splitFieldName = function(name) {
327
- var first, items;
328
- items = name.split('][');
329
- first = items[0].split('[');
330
- if (first.length === 2) {
331
- if (first[0].isBlank()) {
332
- items.splice(0, 1, first[1]);
333
- } else {
334
- items.splice(0, 1, first[0], first[1]);
335
- }
336
- items[items.length - 1] = items[items.length - 1].split(']')[0];
337
- }
338
- return items;
339
- };
340
-
341
- Form.prototype.isArrayOfObjects = function(array) {
342
- return Object.isArray(array) && array.every(function(elem) {
343
- return Object.isObject(elem);
344
- });
345
- };
346
-
347
- return Form;
348
-
349
- })(Joosy.Module);
350
-
351
- }).call(this);
352
- (function() {
353
- Joosy.helpers('Application', function() {
354
- var Form, description, input,
355
- _this = this;
356
- description = function(resource, method, extendIds, idSuffix) {
357
- var id;
358
- if (Joosy.Module.hasAncestor(resource.constructor, Joosy.Resources.Base)) {
359
- id = resource.id();
360
- resource = resource.__entityName;
361
- }
362
- return {
363
- name: resource + ("" + (method.match(/^\[.*\]$/) ? method : "[" + method + "]")),
364
- id: resource + (id && extendIds ? '_' + id : '') + ("_" + (method.parameterize().underscore())) + (idSuffix ? '_' + idSuffix : '')
365
- };
366
- };
367
- input = function(type, resource, method, options) {
368
- var d;
369
- if (options == null) {
370
- options = {};
371
- }
372
- d = description(resource, method, options.extendIds, options.idSuffix);
373
- delete options.extendIds;
374
- delete options.idSuffix;
375
- return _this.tag('input', Joosy.Module.merge({
376
- type: type,
377
- name: d.name,
378
- id: d.id
379
- }, options));
380
- };
381
- Form = (function() {
382
- function Form(context, resource, options) {
383
- this.context = context;
384
- this.resource = resource;
385
- this.options = options;
386
- }
387
-
388
- Form.prototype.label = function(method, options, content) {
389
- if (options == null) {
390
- options = {};
391
- }
392
- if (content == null) {
393
- content = '';
394
- }
395
- if (!Object.isObject(options)) {
396
- content = options;
397
- options = {};
398
- }
399
- return this.context.label(this.resource, method, Joosy.Module.merge({
400
- extendIds: this.options.extendIds
401
- }, options), content);
402
- };
403
-
404
- Form.prototype.radioButton = function(method, tagValue, options) {
405
- if (options == null) {
406
- options = {};
407
- }
408
- return this.context.radioButton(this.resource, method, tagValue, Joosy.Module.merge({
409
- extendIds: this.options.extendIds
410
- }, options));
411
- };
412
-
413
- Form.prototype.textArea = function(method, options) {
414
- if (options == null) {
415
- options = {};
416
- }
417
- return this.context.textArea(this.resource, method, Joosy.Module.merge({
418
- extendIds: this.options.extendIds
419
- }, options));
420
- };
421
-
422
- Form.prototype.checkBox = function(method, options, checkedValue, uncheckedValue) {
423
- if (options == null) {
424
- options = {};
425
- }
426
- if (checkedValue == null) {
427
- checkedValue = 1;
428
- }
429
- if (uncheckedValue == null) {
430
- uncheckedValue = 0;
431
- }
432
- return this.context.checkBox(this.resource, method, Joosy.Module.merge({
433
- extendIds: this.options.extendIds
434
- }, options), checkedValue, uncheckedValue);
435
- };
436
-
437
- Form.prototype.select = function(method, options, htmlOptions) {
438
- if (options == null) {
439
- options = {};
440
- }
441
- if (htmlOptions == null) {
442
- htmlOptions = {};
443
- }
444
- return this.context.select(this.resource, method, options, Joosy.Module.merge({
445
- extendIds: this.options.extendIds
446
- }, htmlOptions));
447
- };
448
-
449
- return Form;
450
-
451
- })();
452
- ['text', 'file', 'hidden', 'password'].each(function(type) {
453
- return Form.prototype[type + 'Field'] = function(method, options) {
454
- if (options == null) {
455
- options = {};
456
- }
457
- return this.context[type + 'Field'](this.resource, method, Joosy.Module.merge({
458
- extendIds: this.options.extendIds
459
- }, options));
460
- };
461
- });
462
- this.formFor = function(resource, options, block) {
463
- var form, uuid;
464
- if (options == null) {
465
- options = {};
466
- }
467
- if (Object.isFunction(options)) {
468
- block = options;
469
- options = {};
470
- }
471
- uuid = Joosy.uuid();
472
- form = this.tag('form', Joosy.Module.merge(options.html || {}, {
473
- id: uuid
474
- }), block != null ? block.call(this, new Form(this, resource, options)) : void 0);
475
- if (typeof this.onRefresh === "function") {
476
- this.onRefresh(function() {
477
- return Joosy.Form.attach('#' + uuid, Joosy.Module.merge(options, {
478
- resource: resource
479
- }));
480
- });
481
- }
482
- return form;
483
- };
484
- this.label = function(resource, method, options, content) {
485
- var d;
486
- if (options == null) {
487
- options = {};
488
- }
489
- if (content == null) {
490
- content = '';
491
- }
492
- if (!Object.isObject(options)) {
493
- content = options;
494
- options = {};
495
- }
496
- d = description(resource, method, options.extendIds);
497
- delete options.extendIds;
498
- return this.contentTag('label', content, Joosy.Module.merge(options, {
499
- "for": d.id
500
- }));
501
- };
502
- ['text', 'file', 'hidden', 'password'].each(function(type) {
503
- return _this[type + 'Field'] = function(resource, method, options) {
504
- if (options == null) {
505
- options = {};
506
- }
507
- return input(type, resource, method, options);
508
- };
509
- });
510
- this.radioButton = function(resource, method, tagValue, options) {
511
- if (options == null) {
512
- options = {};
513
- }
514
- return input('radio', resource, method, Joosy.Module.merge({
515
- value: tagValue,
516
- idSuffix: tagValue
517
- }, options));
518
- };
519
- this.checkBox = function(resource, method, options, checkedValue, uncheckedValue) {
520
- var box, spy;
521
- if (options == null) {
522
- options = {};
523
- }
524
- if (checkedValue == null) {
525
- checkedValue = 1;
526
- }
527
- if (uncheckedValue == null) {
528
- uncheckedValue = 0;
529
- }
530
- spy = this.tag('input', Joosy.Module.merge({
531
- name: description(resource, method).name,
532
- value: uncheckedValue,
533
- type: 'hidden'
534
- }));
535
- box = input('checkbox', resource, method, Joosy.Module.merge({
536
- value: checkedValue
537
- }, options));
538
- return spy + box;
539
- };
540
- this.select = function(resource, method, options, htmlOptions) {
541
- var extendIds, key, opts, val,
542
- _this = this;
543
- if (Object.isObject(options)) {
544
- opts = [];
545
- for (key in options) {
546
- val = options[key];
547
- opts.push([val, key]);
548
- }
549
- } else {
550
- opts = options;
551
- }
552
- if (htmlOptions.includeBlank) {
553
- delete htmlOptions.includeBlank;
554
- opts.unshift(['', '']);
555
- }
556
- opts = opts.reduce(function(str, vals) {
557
- var params;
558
- params = Object.isArray(vals) ? [
559
- 'option', vals[0], {
560
- value: vals[1]
561
- }
562
- ] : ['option', vals, {}];
563
- if (htmlOptions.value === (Object.isArray(vals) ? vals[1] : vals)) {
564
- params[2].selected = 'selected';
565
- }
566
- return str += _this.contentTag.apply(_this, params);
567
- }, '');
568
- extendIds = htmlOptions.extendIds;
569
- delete htmlOptions.value;
570
- delete htmlOptions.extendIds;
571
- return this.contentTag('select', opts, Joosy.Module.merge(description(resource, method, extendIds), htmlOptions));
572
- };
573
- return this.textArea = function(resource, method, options) {
574
- var extendIds, value;
575
- if (options == null) {
576
- options = {};
577
- }
578
- value = options.value;
579
- extendIds = options.extendIds;
580
- delete options.value;
581
- delete options.extendIds;
582
- return this.contentTag('textarea', value, Joosy.Module.merge(description(resource, method, extendIds), options));
583
- };
584
- });
585
-
586
- }).call(this);
587
- (function() {
588
-
589
-
590
- }).call(this);