luca 0.9.6 → 0.9.7
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +37 -14
- data/lib/luca/rails/version.rb +1 -1
- data/spec/components/collection_view_spec.coffee +24 -2
- data/spec/components/pagination_control_spec.coffee +0 -0
- data/spec/concerns/dom_helpers_spec.coffee +16 -0
- data/spec/concerns/filterable_spec.coffee +25 -0
- data/spec/concerns/model_presenter_spec.coffee +31 -0
- data/spec/concerns/paginatable_spec.coffee +0 -0
- data/spec/concerns/state_model_spec.coffee +0 -0
- data/spec/concerns_spec.coffee +88 -0
- data/spec/core/container_spec.coffee +74 -12
- data/spec/core/model_spec.coffee +6 -1
- data/spec/define_spec.coffee +0 -6
- data/spec/util_spec.coffee +24 -0
- data/src/components/application.coffee +32 -30
- data/src/components/base_toolbar.coffee +6 -4
- data/src/components/collection_loader_view.coffee +3 -1
- data/src/components/collection_view.coffee +42 -21
- data/src/components/controller.coffee +3 -1
- data/src/components/fields/button_field.coffee +19 -12
- data/src/components/fields/checkbox_array.coffee +8 -2
- data/src/components/fields/checkbox_field.coffee +18 -9
- data/src/components/fields/file_upload_field.coffee +5 -1
- data/src/components/fields/hidden_field.coffee +3 -1
- data/src/components/fields/label_field.coffee +4 -3
- data/src/components/fields/select_field.coffee +7 -8
- data/src/components/fields/text_field.coffee +3 -1
- data/src/components/fields/type_ahead_field.coffee +4 -2
- data/src/components/form_button_toolbar.coffee +4 -1
- data/src/components/form_view.coffee +49 -44
- data/src/components/grid_view.coffee +1 -1
- data/src/components/multi_collection_view.coffee +49 -22
- data/src/components/pagination_control.coffee +17 -13
- data/src/{modules → concerns}/application_event_bindings.coffee +1 -1
- data/src/{modules → concerns}/collection_event_bindings.coffee +1 -1
- data/src/{modules → concerns}/deferrable.coffee +1 -1
- data/src/{modules → concerns}/dom_helpers.coffee +11 -2
- data/src/{modules → concerns}/enhanced_properties.coffee +1 -1
- data/src/concerns/filterable.coffee +82 -0
- data/src/{modules → concerns}/grid_layout.coffee +1 -1
- data/src/{modules → concerns}/loadmaskable.coffee +1 -1
- data/src/{modules → concerns}/local_storage.coffee +0 -0
- data/src/{modules → concerns}/modal_view.coffee +1 -1
- data/src/concerns/model_presenter.coffee +23 -0
- data/src/concerns/paginatable.coffee +87 -0
- data/src/{modules → concerns}/state_model.coffee +1 -1
- data/src/{modules → concerns}/templating.coffee +1 -1
- data/src/concerns.coffee +70 -0
- data/src/containers/tab_view.coffee +7 -10
- data/src/core/collection.coffee +17 -1
- data/src/core/container.coffee +56 -31
- data/src/core/field.coffee +39 -38
- data/src/core/meta_data.coffee +37 -0
- data/src/core/model.coffee +18 -1
- data/src/core/view.coffee +25 -29
- data/src/define.coffee +54 -66
- data/src/framework.coffee +23 -18
- data/src/index.coffee +3 -1
- data/src/stylesheets/components/checkbox_array.scss +1 -1
- data/src/stylesheets/components/form_view.scss +5 -5
- data/src/stylesheets/components/viewport.scss +2 -1
- data/src/stylesheets/containers/container.scss +0 -5
- data/src/stylesheets/containers/tab_view.scss +5 -5
- data/src/tools/console.coffee +5 -5
- data/src/util.coffee +47 -0
- data/vendor/assets/javascripts/luca-ui-development-tools.js +5 -5
- data/vendor/assets/javascripts/luca-ui-development-tools.min.js +1 -1
- data/vendor/assets/javascripts/luca-ui-full.js +905 -416
- data/vendor/assets/javascripts/luca-ui-full.min.js +5 -5
- data/vendor/assets/javascripts/luca-ui.js +905 -416
- data/vendor/assets/javascripts/luca-ui.min.js +5 -4
- data/vendor/assets/stylesheets/luca-ui.css +15 -15
- metadata +27 -17
- data/spec/mixin_spec.coffee +0 -49
- data/src/modules/filterable.coffee +0 -60
- data/src/modules/paginatable.coffee +0 -79
@@ -95,11 +95,13 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
95
95
|
};
|
96
96
|
|
97
97
|
_.extend(Luca, {
|
98
|
-
VERSION: "0.9.
|
98
|
+
VERSION: "0.9.7",
|
99
99
|
core: {},
|
100
|
+
collections: {},
|
100
101
|
containers: {},
|
101
102
|
components: {},
|
102
|
-
|
103
|
+
models: {},
|
104
|
+
concerns: {},
|
103
105
|
util: {},
|
104
106
|
fields: {},
|
105
107
|
registry: {},
|
@@ -109,6 +111,12 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
109
111
|
|
110
112
|
_.extend(Luca, Backbone.Events);
|
111
113
|
|
114
|
+
Luca.config.maintainStyleHierarchy = true;
|
115
|
+
|
116
|
+
Luca.config.maintainClassHierarchy = true;
|
117
|
+
|
118
|
+
Luca.config.autoApplyClassHierarchyAsCssClasses = true;
|
119
|
+
|
112
120
|
Luca.autoRegister = Luca.config.autoRegister = true;
|
113
121
|
|
114
122
|
Luca.developmentMode = Luca.config.developmentMode = false;
|
@@ -182,36 +190,29 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
182
190
|
};
|
183
191
|
|
184
192
|
Luca.inheritanceChain = function(obj) {
|
185
|
-
return
|
186
|
-
return Luca.util.resolve(className);
|
187
|
-
});
|
193
|
+
return Luca.parentClasses(obj);
|
188
194
|
};
|
189
195
|
|
190
196
|
Luca.parentClasses = function(obj) {
|
191
|
-
var
|
197
|
+
var list, metaData, _base;
|
192
198
|
list = [];
|
193
199
|
if (_.isString(obj)) obj = Luca.util.resolve(obj);
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
_results = [];
|
198
|
-
while (!!(Luca.parentClass(obj) != null)) {
|
199
|
-
_results.push(obj = Luca.parentClass(obj));
|
200
|
-
}
|
201
|
-
return _results;
|
202
|
-
})();
|
203
|
-
list = list.concat(classes);
|
204
|
-
return _.uniq(list);
|
200
|
+
metaData = typeof obj.componentMetaData === "function" ? obj.componentMetaData() : void 0;
|
201
|
+
metaData || (metaData = typeof (_base = obj.prototype).componentMetaData === "function" ? _base.componentMetaData() : void 0);
|
202
|
+
return list = (metaData != null ? metaData.classHierarchy() : void 0) || [obj.displayName || obj.prototype.displayName];
|
205
203
|
};
|
206
204
|
|
207
|
-
Luca.parentClass = function(obj) {
|
208
|
-
var
|
209
|
-
|
205
|
+
Luca.parentClass = function(obj, resolve) {
|
206
|
+
var parent, _base, _ref, _ref2, _ref3;
|
207
|
+
if (resolve == null) resolve = true;
|
210
208
|
if (_.isString(obj)) obj = Luca.util.resolve(obj);
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
209
|
+
parent = typeof obj.componentMetaData === "function" ? (_ref = obj.componentMetaData()) != null ? _ref.meta["super class name"] : void 0 : void 0;
|
210
|
+
parent || (parent = typeof (_base = obj.prototype).componentMetaData === "function" ? (_ref2 = _base.componentMetaData()) != null ? _ref2.meta["super class name"] : void 0 : void 0);
|
211
|
+
parent || obj.displayName || ((_ref3 = obj.prototype) != null ? _ref3.displayName : void 0);
|
212
|
+
if (resolve) {
|
213
|
+
return Luca.util.resolve(parent);
|
214
|
+
} else {
|
215
|
+
return parent;
|
215
216
|
}
|
216
217
|
};
|
217
218
|
|
@@ -451,6 +452,25 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
451
452
|
return fn = prefix + parts.join('');
|
452
453
|
};
|
453
454
|
|
455
|
+
Luca.util.toCssClass = function() {
|
456
|
+
var componentName, exclusions, part, parts, transformed;
|
457
|
+
componentName = arguments[0], exclusions = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
458
|
+
parts = componentName.split('.');
|
459
|
+
transformed = (function() {
|
460
|
+
var _i, _len, _results;
|
461
|
+
_results = [];
|
462
|
+
for (_i = 0, _len = parts.length; _i < _len; _i++) {
|
463
|
+
part = parts[_i];
|
464
|
+
if (!(_(exclusions).indexOf(part) === -1)) continue;
|
465
|
+
part = _.str.underscored(part);
|
466
|
+
part = part.replace(/_/g, '-');
|
467
|
+
_results.push(part);
|
468
|
+
}
|
469
|
+
return _results;
|
470
|
+
})();
|
471
|
+
return transformed.join('-');
|
472
|
+
};
|
473
|
+
|
454
474
|
Luca.util.isIE = function() {
|
455
475
|
try {
|
456
476
|
Object.defineProperty({}, '', {});
|
@@ -545,6 +565,48 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
545
565
|
}, contents);
|
546
566
|
};
|
547
567
|
|
568
|
+
Luca.util.setupHooks = function(set) {
|
569
|
+
var _this = this;
|
570
|
+
set || (set = this.hooks);
|
571
|
+
return _(set).each(function(eventId) {
|
572
|
+
var callback, fn;
|
573
|
+
fn = Luca.util.hook(eventId);
|
574
|
+
callback = function() {
|
575
|
+
var _ref;
|
576
|
+
return (_ref = this[fn]) != null ? _ref.apply(this, arguments) : void 0;
|
577
|
+
};
|
578
|
+
if (eventId != null ? eventId.match(/once:/) : void 0) {
|
579
|
+
callback = _.once(callback);
|
580
|
+
}
|
581
|
+
return _this.on(eventId, callback, _this);
|
582
|
+
});
|
583
|
+
};
|
584
|
+
|
585
|
+
Luca.util.setupHooksAdvanced = function(set) {
|
586
|
+
var _this = this;
|
587
|
+
set || (set = this.hooks);
|
588
|
+
return _(set).each(function(eventId) {
|
589
|
+
var callback, entry, fn, hookSetup, _i, _len, _results;
|
590
|
+
hookSetup = _this[Luca.util.hook(eventId)];
|
591
|
+
if (!_.isArray(hookSetup)) hookSetup = [hookSetup];
|
592
|
+
_results = [];
|
593
|
+
for (_i = 0, _len = hookSetup.length; _i < _len; _i++) {
|
594
|
+
entry = hookSetup[_i];
|
595
|
+
fn = _.isString(entry) ? _this[entry] : void 0;
|
596
|
+
if (_.isFunction(entry)) fn = entry;
|
597
|
+
callback = function() {
|
598
|
+
var _ref;
|
599
|
+
return (_ref = this[fn]) != null ? _ref.apply(this, arguments) : void 0;
|
600
|
+
};
|
601
|
+
if (eventId != null ? eventId.match(/once:/) : void 0) {
|
602
|
+
callback = _.once(callback);
|
603
|
+
}
|
604
|
+
_results.push(_this.on(eventId, callback, _this));
|
605
|
+
}
|
606
|
+
return _results;
|
607
|
+
});
|
608
|
+
};
|
609
|
+
|
548
610
|
}).call(this);
|
549
611
|
(function() {
|
550
612
|
|
@@ -701,6 +763,92 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
701
763
|
}
|
702
764
|
};
|
703
765
|
|
766
|
+
}).call(this);
|
767
|
+
(function() {
|
768
|
+
|
769
|
+
Luca.concern = function(mixinName) {
|
770
|
+
var namespace, resolved;
|
771
|
+
namespace = _(Luca.concern.namespaces).detect(function(space) {
|
772
|
+
var _ref;
|
773
|
+
return ((_ref = Luca.util.resolve(space)) != null ? _ref[mixinName] : void 0) != null;
|
774
|
+
});
|
775
|
+
namespace || (namespace = "Luca.concerns");
|
776
|
+
resolved = Luca.util.resolve(namespace)[mixinName];
|
777
|
+
if (resolved == null) {
|
778
|
+
console.log("Could not find " + mixinName + " in ", Luca.concern.namespaces);
|
779
|
+
}
|
780
|
+
return resolved;
|
781
|
+
};
|
782
|
+
|
783
|
+
Luca.concern.namespaces = ["Luca.concerns"];
|
784
|
+
|
785
|
+
Luca.concern.namespace = function(namespace) {
|
786
|
+
Luca.concern.namespaces.push(namespace);
|
787
|
+
return Luca.concern.namespaces = _(Luca.concern.namespaces).uniq();
|
788
|
+
};
|
789
|
+
|
790
|
+
Luca.concern.setup = function() {
|
791
|
+
var module, _i, _len, _ref, _ref2, _ref3, _ref4, _results;
|
792
|
+
if (((_ref = this.concerns) != null ? _ref.length : void 0) > 0) {
|
793
|
+
_ref2 = this.concerns;
|
794
|
+
_results = [];
|
795
|
+
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
796
|
+
module = _ref2[_i];
|
797
|
+
_results.push((_ref3 = Luca.concern(module)) != null ? (_ref4 = _ref3.__initializer) != null ? _ref4.call(this, this, module) : void 0 : void 0);
|
798
|
+
}
|
799
|
+
return _results;
|
800
|
+
}
|
801
|
+
};
|
802
|
+
|
803
|
+
Luca.decorate = function(target) {
|
804
|
+
var componentClass, componentName, componentPrototype;
|
805
|
+
try {
|
806
|
+
if (_.isString(target)) {
|
807
|
+
componentName = target;
|
808
|
+
componentClass = Luca.util.resolve(componentName);
|
809
|
+
}
|
810
|
+
if (_.isFunction(target)) componentClass = target;
|
811
|
+
componentPrototype = componentClass.prototype;
|
812
|
+
componentName = componentName || componentClass.displayName;
|
813
|
+
componentName || (componentName = componentPrototype.displayName);
|
814
|
+
} catch (e) {
|
815
|
+
console.log(e.message);
|
816
|
+
console.log(e.stack);
|
817
|
+
console.log("Error calling Luca.decorate on ", componentClass, componentPrototype, componentName);
|
818
|
+
throw e;
|
819
|
+
}
|
820
|
+
return {
|
821
|
+
"with": function(mixinName) {
|
822
|
+
var fn, method, mixinDefinition, mixinPrivates, sanitized, superclassMixins, _ref;
|
823
|
+
mixinDefinition = Luca.concern(mixinName);
|
824
|
+
mixinDefinition.__displayName || (mixinDefinition.__displayName = mixinName);
|
825
|
+
mixinPrivates = _(mixinDefinition).chain().keys().select(function(key) {
|
826
|
+
return ("" + key).match(/^__/) || key === "classMethods";
|
827
|
+
});
|
828
|
+
sanitized = _(mixinDefinition).omit(mixinPrivates.value());
|
829
|
+
_.extend(componentPrototype, sanitized);
|
830
|
+
if (mixinDefinition.classMethods != null) {
|
831
|
+
_ref = mixinDefinition.classMethods;
|
832
|
+
for (method in _ref) {
|
833
|
+
fn = _ref[method];
|
834
|
+
componentClass[method] = _.bind(fn, componentClass);
|
835
|
+
}
|
836
|
+
}
|
837
|
+
if (mixinDefinition != null) {
|
838
|
+
if (typeof mixinDefinition.__included === "function") {
|
839
|
+
mixinDefinition.__included(componentName, componentClass, mixinDefinition);
|
840
|
+
}
|
841
|
+
}
|
842
|
+
superclassMixins = componentPrototype._superClass().prototype.concerns;
|
843
|
+
componentPrototype.concerns || (componentPrototype.concerns = []);
|
844
|
+
componentPrototype.concerns.push(mixinName);
|
845
|
+
componentPrototype.concerns = componentPrototype.concerns.concat(superclassMixins);
|
846
|
+
componentPrototype.concerns = _(componentPrototype.concerns).chain().uniq().compact().value();
|
847
|
+
return componentPrototype;
|
848
|
+
}
|
849
|
+
};
|
850
|
+
};
|
851
|
+
|
704
852
|
}).call(this);
|
705
853
|
(function() {
|
706
854
|
var DefineProxy,
|
@@ -709,7 +857,8 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
709
857
|
_.mixin({
|
710
858
|
def: Luca.component = Luca.define = Luca.register = function(componentName) {
|
711
859
|
return new DefineProxy(componentName);
|
712
|
-
}
|
860
|
+
},
|
861
|
+
register: Luca.register
|
713
862
|
});
|
714
863
|
|
715
864
|
DefineProxy = (function() {
|
@@ -719,6 +868,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
719
868
|
this.namespace = Luca.util.namespace();
|
720
869
|
this.componentId = this.componentName = componentName;
|
721
870
|
this.superClassName = 'Luca.View';
|
871
|
+
this.properties || (this.properties = {});
|
722
872
|
if (componentName.match(/\./)) {
|
723
873
|
this.namespaced = true;
|
724
874
|
parts = componentName.split('.');
|
@@ -728,6 +878,16 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
728
878
|
}
|
729
879
|
}
|
730
880
|
|
881
|
+
DefineProxy.prototype.meta = function(key, value) {
|
882
|
+
var data, metaKey;
|
883
|
+
metaKey = this.namespace + '.' + this.componentId;
|
884
|
+
metaKey = metaKey.replace(/^\./, '');
|
885
|
+
data = Luca.registry.addMetaData(metaKey, key, value);
|
886
|
+
return this.properties.componentMetaData = function() {
|
887
|
+
return Luca.registry.getMetaDataFor(metaKey);
|
888
|
+
};
|
889
|
+
};
|
890
|
+
|
731
891
|
DefineProxy.prototype["in"] = function(namespace) {
|
732
892
|
this.namespace = namespace;
|
733
893
|
return this;
|
@@ -759,6 +919,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
759
919
|
this.properties.hooks.push(hook);
|
760
920
|
}
|
761
921
|
this.properties.hooks = _.uniq(this.properties.hooks);
|
922
|
+
this.meta("hooks", this.properties.hooks);
|
762
923
|
return this;
|
763
924
|
};
|
764
925
|
|
@@ -773,25 +934,51 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
773
934
|
this.properties.include.push(include);
|
774
935
|
}
|
775
936
|
this.properties.include = _.uniq(this.properties.include);
|
937
|
+
this.meta("includes", this.properties.include);
|
776
938
|
return this;
|
777
939
|
};
|
778
940
|
|
779
941
|
DefineProxy.prototype.mixesIn = function() {
|
780
|
-
var
|
781
|
-
|
942
|
+
var concern, concerns, _i, _len;
|
943
|
+
concerns = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
|
782
944
|
_.defaults(this.properties || (this.properties = {}), {
|
783
|
-
|
945
|
+
concerns: []
|
784
946
|
});
|
785
|
-
for (_i = 0, _len =
|
786
|
-
|
787
|
-
this.properties.
|
947
|
+
for (_i = 0, _len = concerns.length; _i < _len; _i++) {
|
948
|
+
concern = concerns[_i];
|
949
|
+
this.properties.concerns.push(concern);
|
788
950
|
}
|
789
|
-
this.properties.
|
951
|
+
this.properties.concerns = _.uniq(this.properties.concerns);
|
952
|
+
this.meta("concerns", this.properties.concerns);
|
790
953
|
return this;
|
791
954
|
};
|
792
955
|
|
793
|
-
DefineProxy.prototype.
|
794
|
-
|
956
|
+
DefineProxy.prototype.publicConfiguration = function(properties) {
|
957
|
+
if (properties == null) properties = {};
|
958
|
+
this.meta("public configuration", _.keys(properties));
|
959
|
+
return _.defaults((this.properties || (this.properties = {})), properties);
|
960
|
+
};
|
961
|
+
|
962
|
+
DefineProxy.prototype.privateConfiguration = function(properties) {
|
963
|
+
if (properties == null) properties = {};
|
964
|
+
this.meta("private configuration", _.keys(properties));
|
965
|
+
return _.defaults((this.properties || (this.properties = {})), properties);
|
966
|
+
};
|
967
|
+
|
968
|
+
DefineProxy.prototype.publicInterface = function(properties) {
|
969
|
+
if (properties == null) properties = {};
|
970
|
+
this.meta("public interface", _.keys(properties));
|
971
|
+
return _.defaults((this.properties || (this.properties = {})), properties);
|
972
|
+
};
|
973
|
+
|
974
|
+
DefineProxy.prototype.privateInterface = function(properties) {
|
975
|
+
if (properties == null) properties = {};
|
976
|
+
this.meta("private interface", _.keys(properties));
|
977
|
+
return _.defaults((this.properties || (this.properties = {})), properties);
|
978
|
+
};
|
979
|
+
|
980
|
+
DefineProxy.prototype.definePrototype = function(properties) {
|
981
|
+
var at, componentType, definition, _base;
|
795
982
|
if (properties == null) properties = {};
|
796
983
|
_.defaults((this.properties || (this.properties = {})), properties);
|
797
984
|
at = this.namespaced ? Luca.util.resolve(this.namespace, window || global) : window || global;
|
@@ -799,35 +986,40 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
799
986
|
eval("(window||global)." + this.namespace + " = {}");
|
800
987
|
at = Luca.util.resolve(this.namespace, window || global);
|
801
988
|
}
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
989
|
+
this.meta("super class name", this.superClassName);
|
990
|
+
this.meta("display name", this.componentName);
|
991
|
+
this.properties.displayName = this.componentName;
|
992
|
+
this.properties.componentMetaData = function() {
|
993
|
+
return Luca.registry.getMetaDataFor(this.displayName);
|
994
|
+
};
|
995
|
+
definition = at[this.componentId] = Luca.extend(this.superClassName, this.componentName, this.properties);
|
996
|
+
if (Luca.config.autoRegister === true) {
|
997
|
+
if (Luca.isViewPrototype(definition)) componentType = "view";
|
998
|
+
if (Luca.isCollectionPrototype(definition)) {
|
806
999
|
(_base = Luca.Collection).namespaces || (_base.namespaces = []);
|
807
1000
|
Luca.Collection.namespaces.push(this.namespace);
|
808
1001
|
componentType = "collection";
|
809
1002
|
}
|
810
|
-
if (Luca.isModelPrototype(
|
1003
|
+
if (Luca.isModelPrototype(definition)) componentType = "model";
|
811
1004
|
Luca.registerComponent(_.string.underscored(this.componentId), this.componentName, componentType);
|
812
1005
|
}
|
813
|
-
return
|
1006
|
+
return definition;
|
814
1007
|
};
|
815
1008
|
|
816
1009
|
return DefineProxy;
|
817
1010
|
|
818
1011
|
})();
|
819
1012
|
|
820
|
-
DefineProxy.prototype.behavesAs = DefineProxy.prototype.uses = DefineProxy.prototype.mixesIn;
|
1013
|
+
DefineProxy.prototype.concerns = DefineProxy.prototype.behavesAs = DefineProxy.prototype.uses = DefineProxy.prototype.mixesIn;
|
821
1014
|
|
822
|
-
DefineProxy.prototype.defines = DefineProxy.prototype.defaults = DefineProxy.prototype.exports = DefineProxy.prototype.defaultProperties;
|
1015
|
+
DefineProxy.prototype.defines = DefineProxy.prototype.defaults = DefineProxy.prototype.exports = DefineProxy.prototype.defaultProperties = DefineProxy.prototype.definePrototype;
|
823
1016
|
|
824
|
-
DefineProxy.prototype.defaultsTo = DefineProxy.prototype.enhance = DefineProxy.prototype["with"] = DefineProxy.prototype.
|
1017
|
+
DefineProxy.prototype.defaultsTo = DefineProxy.prototype.enhance = DefineProxy.prototype["with"] = DefineProxy.prototype.definePrototype;
|
825
1018
|
|
826
1019
|
Luca.extend = function(superClassName, childName, properties) {
|
827
1020
|
var definition, include, superClass, _i, _len, _ref;
|
828
1021
|
if (properties == null) properties = {};
|
829
1022
|
superClass = Luca.util.resolve(superClassName, window || global);
|
830
|
-
superClass.__initializers || (superClass.__initializers = []);
|
831
1023
|
if (!_.isFunction(superClass != null ? superClass.extend : void 0)) {
|
832
1024
|
throw "Error defining " + childName + ". " + superClassName + " is not a valid component to extend from";
|
833
1025
|
}
|
@@ -854,59 +1046,10 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
854
1046
|
return definition;
|
855
1047
|
};
|
856
1048
|
|
857
|
-
Luca.mixin = function(mixinName) {
|
858
|
-
var namespace, resolved;
|
859
|
-
namespace = _(Luca.mixin.namespaces).detect(function(space) {
|
860
|
-
var _ref;
|
861
|
-
return ((_ref = Luca.util.resolve(space)) != null ? _ref[mixinName] : void 0) != null;
|
862
|
-
});
|
863
|
-
namespace || (namespace = "Luca.modules");
|
864
|
-
resolved = Luca.util.resolve(namespace)[mixinName];
|
865
|
-
if (resolved == null) {
|
866
|
-
console.log("Could not find " + mixinName + " in ", Luca.mixin.namespaces);
|
867
|
-
}
|
868
|
-
return resolved;
|
869
|
-
};
|
870
|
-
|
871
|
-
Luca.mixin.namespaces = ["Luca.modules"];
|
872
|
-
|
873
|
-
Luca.mixin.namespace = function(namespace) {
|
874
|
-
Luca.mixin.namespaces.push(namespace);
|
875
|
-
return Luca.mixin.namespaces = _(Luca.mixin.namespaces).uniq();
|
876
|
-
};
|
877
|
-
|
878
|
-
Luca.decorate = function(componentPrototype) {
|
879
|
-
if (_.isString(componentPrototype)) {
|
880
|
-
componentPrototype = Luca.util.resolve(componentPrototype).prototype;
|
881
|
-
}
|
882
|
-
return {
|
883
|
-
"with": function(mixin) {
|
884
|
-
var mixinDefinition, mixinPrivates, sanitized, superclassMixins, _ref;
|
885
|
-
mixinDefinition = Luca.mixin(mixin);
|
886
|
-
mixinPrivates = _(mixinDefinition).chain().keys().select(function(key) {
|
887
|
-
return ("" + key).match(/^__/);
|
888
|
-
});
|
889
|
-
sanitized = _(mixinDefinition).omit(mixinPrivates.value());
|
890
|
-
_.extend(componentPrototype, sanitized);
|
891
|
-
if (mixinDefinition != null) {
|
892
|
-
if ((_ref = mixinDefinition.__included) != null) {
|
893
|
-
_ref.call(mixinDefinition, mixin);
|
894
|
-
}
|
895
|
-
}
|
896
|
-
superclassMixins = componentPrototype._superClass().prototype.mixins;
|
897
|
-
componentPrototype.mixins || (componentPrototype.mixins = []);
|
898
|
-
componentPrototype.mixins.push(mixin);
|
899
|
-
componentPrototype.mixins = componentPrototype.mixins.concat(superclassMixins);
|
900
|
-
componentPrototype.mixins = _(componentPrototype.mixins).chain().uniq().compact().value();
|
901
|
-
return componentPrototype;
|
902
|
-
}
|
903
|
-
};
|
904
|
-
};
|
905
|
-
|
906
1049
|
}).call(this);
|
907
1050
|
(function() {
|
908
1051
|
|
909
|
-
Luca.
|
1052
|
+
Luca.concerns.ApplicationEventBindings = {
|
910
1053
|
__initializer: function() {
|
911
1054
|
var app, eventTrigger, handler, _len, _ref, _ref2, _results;
|
912
1055
|
if (_.isEmpty(this.applicationEvents)) return;
|
@@ -934,7 +1077,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
934
1077
|
}).call(this);
|
935
1078
|
(function() {
|
936
1079
|
|
937
|
-
Luca.
|
1080
|
+
Luca.concerns.CollectionEventBindings = {
|
938
1081
|
__initializer: function() {
|
939
1082
|
var collection, eventTrigger, handler, key, manager, signature, _ref, _ref2, _results;
|
940
1083
|
if (_.isEmpty(this.collectionEvents)) return;
|
@@ -962,7 +1105,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
962
1105
|
}).call(this);
|
963
1106
|
(function() {
|
964
1107
|
|
965
|
-
Luca.
|
1108
|
+
Luca.concerns.Deferrable = {
|
966
1109
|
configure_collection: function(setAsDeferrable) {
|
967
1110
|
var collectionManager, _ref, _ref2;
|
968
1111
|
if (setAsDeferrable == null) setAsDeferrable = true;
|
@@ -983,9 +1126,9 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
983
1126
|
}).call(this);
|
984
1127
|
(function() {
|
985
1128
|
|
986
|
-
Luca.
|
1129
|
+
Luca.concerns.DomHelpers = {
|
987
1130
|
__initializer: function() {
|
988
|
-
var additional, additionalClasses, _i, _len, _results;
|
1131
|
+
var additional, additionalClasses, classes, cssClass, _i, _j, _len, _len2, _ref, _results;
|
989
1132
|
additionalClasses = _(this.additionalClassNames || []).clone();
|
990
1133
|
if (this.wrapperClass != null) this.$wrap(this.wrapperClass);
|
991
1134
|
if (_.isString(additionalClasses)) {
|
@@ -996,21 +1139,34 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
996
1139
|
if (this.gridRowFluid) additionalClasses.push("row-fluid");
|
997
1140
|
if (this.gridRow) additionalClasses.push("row");
|
998
1141
|
if (additionalClasses == null) return;
|
999
|
-
_results = [];
|
1000
1142
|
for (_i = 0, _len = additionalClasses.length; _i < _len; _i++) {
|
1001
1143
|
additional = additionalClasses[_i];
|
1002
|
-
|
1144
|
+
this.$el.addClass(additional);
|
1145
|
+
}
|
1146
|
+
if (Luca.config.autoApplyClassHierarchyAsCssClasses === true) {
|
1147
|
+
classes = (typeof this.componentMetaData === "function" ? (_ref = this.componentMetaData()) != null ? _ref.styleHierarchy() : void 0 : void 0) || [];
|
1148
|
+
_results = [];
|
1149
|
+
for (_j = 0, _len2 = classes.length; _j < _len2; _j++) {
|
1150
|
+
cssClass = classes[_j];
|
1151
|
+
if (cssClass !== "luca-view" && cssClass !== "backbone-view") {
|
1152
|
+
_results.push(this.$el.addClass(cssClass));
|
1153
|
+
}
|
1154
|
+
}
|
1155
|
+
return _results;
|
1003
1156
|
}
|
1004
|
-
return _results;
|
1005
1157
|
},
|
1006
1158
|
$wrap: function(wrapper) {
|
1007
1159
|
if (_.isString(wrapper) && !wrapper.match(/[<>]/)) {
|
1008
1160
|
wrapper = this.make("div", {
|
1009
|
-
"class": wrapper
|
1161
|
+
"class": wrapper,
|
1162
|
+
"data-wrapper": true
|
1010
1163
|
});
|
1011
1164
|
}
|
1012
1165
|
return this.$el.wrap(wrapper);
|
1013
1166
|
},
|
1167
|
+
$wrapper: function() {
|
1168
|
+
return this.$el.parent('[data-wrapper="true"]');
|
1169
|
+
},
|
1014
1170
|
$template: function(template, variables) {
|
1015
1171
|
if (variables == null) variables = {};
|
1016
1172
|
return this.$el.html(Luca.template(template, variables));
|
@@ -1035,7 +1191,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1035
1191
|
}).call(this);
|
1036
1192
|
(function() {
|
1037
1193
|
|
1038
|
-
Luca.
|
1194
|
+
Luca.concerns.EnhancedProperties = {
|
1039
1195
|
__initializer: function() {
|
1040
1196
|
if (Luca.config.enhancedViewProperties !== true) return;
|
1041
1197
|
if (_.isString(this.collection) && Luca.CollectionManager.get()) {
|
@@ -1054,50 +1210,56 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1054
1210
|
__hasProp = Object.prototype.hasOwnProperty,
|
1055
1211
|
__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; };
|
1056
1212
|
|
1057
|
-
Luca.
|
1213
|
+
Luca.concerns.Filterable = {
|
1058
1214
|
__included: function(component, module) {
|
1059
1215
|
return _.extend(Luca.Collection.prototype, {
|
1060
1216
|
__filters: {}
|
1061
1217
|
});
|
1062
1218
|
},
|
1063
1219
|
__initializer: function(component, module) {
|
1064
|
-
var filter,
|
1220
|
+
var filter, _base, _ref,
|
1065
1221
|
_this = this;
|
1066
|
-
if (this.filterable === false
|
1222
|
+
if (this.filterable === false) return;
|
1223
|
+
if (!Luca.isBackboneCollection(this.collection)) {
|
1224
|
+
this.collection = typeof (_base = Luca.CollectionManager).get === "function" ? (_ref = _base.get()) != null ? _ref.getOrCreate(this.collection) : void 0 : void 0;
|
1225
|
+
}
|
1226
|
+
if (!Luca.isBackboneCollection(this.collection)) {
|
1227
|
+
this.debug("Skipping Filterable due to no collection being present on " + (this.name || this.cid));
|
1228
|
+
this.debug("Collection", this.collection);
|
1067
1229
|
return;
|
1068
1230
|
}
|
1069
1231
|
this.getCollection || (this.getCollection = function() {
|
1070
1232
|
return this.collection;
|
1071
1233
|
});
|
1072
1234
|
filter = this.getFilterState();
|
1073
|
-
|
1074
|
-
|
1075
|
-
|
1235
|
+
this.querySources || (this.querySources = []);
|
1236
|
+
this.optionsSources || (this.optionsSources = []);
|
1237
|
+
this.query || (this.query = {});
|
1238
|
+
this.queryOptions || (this.queryOptions = {});
|
1239
|
+
this.querySources.push((function() {
|
1240
|
+
return filter.toQuery();
|
1241
|
+
}));
|
1242
|
+
this.optionsSources.push((function() {
|
1243
|
+
return filter.toOptions();
|
1244
|
+
}));
|
1245
|
+
if (this.debugMode === true) {
|
1246
|
+
console.log("Filterable");
|
1247
|
+
console.log(this.querySources);
|
1248
|
+
console.log(this.optionsSources);
|
1249
|
+
}
|
1250
|
+
filter.on("change", function() {
|
1251
|
+
var merged;
|
1252
|
+
if (_this.isRemote()) {
|
1253
|
+
merged = _.extend(_this.getQuery(), _this.getQueryOptions());
|
1254
|
+
return _this.collection.applyFilter(merged, _this.getQueryOptions());
|
1255
|
+
} else {
|
1256
|
+
return _this.trigger("refresh");
|
1257
|
+
}
|
1076
1258
|
});
|
1077
|
-
|
1078
|
-
|
1079
|
-
|
1080
|
-
|
1081
|
-
obj = _.clone(query);
|
1082
|
-
return _.extend(obj, filter.toQuery());
|
1083
|
-
});
|
1084
|
-
} else {
|
1085
|
-
this.getQuery = function() {
|
1086
|
-
return filter.toQuery();
|
1087
|
-
};
|
1088
|
-
}
|
1089
|
-
if (this.getQueryOptions != null) {
|
1090
|
-
return this.getQueryOptions = _.compose(this.getQueryOptions, function(options) {
|
1091
|
-
var obj;
|
1092
|
-
if (options == null) options = {};
|
1093
|
-
obj = _.clone(options);
|
1094
|
-
return _.extend(obj, filter.toOptions());
|
1095
|
-
});
|
1096
|
-
} else {
|
1097
|
-
return this.getQueryOptions = function() {
|
1098
|
-
return filter.toOptions();
|
1099
|
-
};
|
1100
|
-
}
|
1259
|
+
return module;
|
1260
|
+
},
|
1261
|
+
isRemote: function() {
|
1262
|
+
return this.getQueryOptions().remote === true;
|
1101
1263
|
},
|
1102
1264
|
getFilterState: function() {
|
1103
1265
|
var _base, _name;
|
@@ -1108,18 +1270,14 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1108
1270
|
return this.getFilterState().setOption('sortBy', sortBy, options);
|
1109
1271
|
},
|
1110
1272
|
applyFilter: function(query, options) {
|
1111
|
-
var silent;
|
1112
1273
|
if (query == null) query = {};
|
1113
1274
|
if (options == null) options = {};
|
1114
1275
|
options = _.defaults(options, this.getQueryOptions());
|
1115
1276
|
query = _.defaults(query, this.getQuery());
|
1116
|
-
silent = _(options)["delete"]('silent') === true;
|
1117
1277
|
return this.getFilterState().set({
|
1118
1278
|
query: query,
|
1119
1279
|
options: options
|
1120
|
-
},
|
1121
|
-
silent: silent
|
1122
|
-
});
|
1280
|
+
}, options);
|
1123
1281
|
}
|
1124
1282
|
};
|
1125
1283
|
|
@@ -1131,6 +1289,11 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1131
1289
|
FilterModel.__super__.constructor.apply(this, arguments);
|
1132
1290
|
}
|
1133
1291
|
|
1292
|
+
FilterModel.prototype.defaults = {
|
1293
|
+
options: {},
|
1294
|
+
query: {}
|
1295
|
+
};
|
1296
|
+
|
1134
1297
|
FilterModel.prototype.setOption = function(option, value, options) {
|
1135
1298
|
var payload;
|
1136
1299
|
payload = {};
|
@@ -1153,6 +1316,16 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1153
1316
|
return this.toJSON().query;
|
1154
1317
|
};
|
1155
1318
|
|
1319
|
+
FilterModel.prototype.toRemote = function() {
|
1320
|
+
var options;
|
1321
|
+
options = this.toOptions();
|
1322
|
+
return _.extend(this.toQuery(), {
|
1323
|
+
limit: options.limit,
|
1324
|
+
page: options.page,
|
1325
|
+
sortBy: options.sortBy
|
1326
|
+
});
|
1327
|
+
};
|
1328
|
+
|
1156
1329
|
return FilterModel;
|
1157
1330
|
|
1158
1331
|
})(Backbone.Model);
|
@@ -1160,7 +1333,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1160
1333
|
}).call(this);
|
1161
1334
|
(function() {
|
1162
1335
|
|
1163
|
-
Luca.
|
1336
|
+
Luca.concerns.GridLayout = {
|
1164
1337
|
_initializer: function() {
|
1165
1338
|
if (this.gridSpan) this.$el.addClass("span" + this.gridSpan);
|
1166
1339
|
if (this.gridOffset) this.$el.addClass("offset" + this.gridOffset);
|
@@ -1172,7 +1345,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1172
1345
|
}).call(this);
|
1173
1346
|
(function() {
|
1174
1347
|
|
1175
|
-
Luca.
|
1348
|
+
Luca.concerns.LoadMaskable = {
|
1176
1349
|
__initializer: function() {
|
1177
1350
|
var _this = this;
|
1178
1351
|
if (this.loadMask !== true) return;
|
@@ -1319,7 +1492,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1319
1492
|
(function() {
|
1320
1493
|
var applyModalConfig;
|
1321
1494
|
|
1322
|
-
Luca.
|
1495
|
+
Luca.concerns.ModalView = {
|
1323
1496
|
closeOnEscape: true,
|
1324
1497
|
showOnInitialize: false,
|
1325
1498
|
backdrop: false,
|
@@ -1357,7 +1530,38 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1357
1530
|
}).call(this);
|
1358
1531
|
(function() {
|
1359
1532
|
|
1360
|
-
Luca.
|
1533
|
+
Luca.concerns.ModelPresenter = {
|
1534
|
+
classMethods: {
|
1535
|
+
getPresenter: function(format) {
|
1536
|
+
var _ref;
|
1537
|
+
return (_ref = this.presenters) != null ? _ref[format] : void 0;
|
1538
|
+
},
|
1539
|
+
registerPresenter: function(format, config) {
|
1540
|
+
this.presenters || (this.presenters = {});
|
1541
|
+
return this.presenters[format] = config;
|
1542
|
+
}
|
1543
|
+
},
|
1544
|
+
presentAs: function(format) {
|
1545
|
+
var attributeList,
|
1546
|
+
_this = this;
|
1547
|
+
try {
|
1548
|
+
attributeList = this.componentMetaData().componentDefinition().getPresenter(format);
|
1549
|
+
if (attributeList == null) return this.toJSON();
|
1550
|
+
return _(attributeList).reduce(function(memo, attribute) {
|
1551
|
+
memo[attribute] = _this.read(attribute);
|
1552
|
+
return memo;
|
1553
|
+
}, {});
|
1554
|
+
} catch (e) {
|
1555
|
+
console.log("Error presentAs", e.stack, e.message);
|
1556
|
+
return this.toJSON();
|
1557
|
+
}
|
1558
|
+
}
|
1559
|
+
};
|
1560
|
+
|
1561
|
+
}).call(this);
|
1562
|
+
(function() {
|
1563
|
+
|
1564
|
+
Luca.concerns.Paginatable = {
|
1361
1565
|
paginatorViewClass: 'Luca.components.PaginationControl',
|
1362
1566
|
paginationSelector: ".toolbar.bottom",
|
1363
1567
|
__included: function() {
|
@@ -1366,38 +1570,54 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1366
1570
|
});
|
1367
1571
|
},
|
1368
1572
|
__initializer: function() {
|
1369
|
-
var collection,
|
1573
|
+
var collection, paginationState, _base, _ref,
|
1370
1574
|
_this = this;
|
1371
|
-
if (this.paginatable === false
|
1575
|
+
if (this.paginatable === false) return;
|
1576
|
+
if (!Luca.isBackboneCollection(this.collection)) {
|
1577
|
+
this.collection = typeof (_base = Luca.CollectionManager).get === "function" ? (_ref = _base.get()) != null ? _ref.getOrCreate(this.collection) : void 0 : void 0;
|
1578
|
+
}
|
1579
|
+
if (!Luca.isBackboneCollection(this.collection)) {
|
1580
|
+
this.debug("Skipping Paginatable due to no collection being present on " + (this.name || this.cid));
|
1581
|
+
this.debug("collection", this.collection);
|
1372
1582
|
return;
|
1373
1583
|
}
|
1374
|
-
_.bindAll(this, "paginationControl");
|
1584
|
+
_.bindAll(this, "paginationControl", "pager");
|
1375
1585
|
this.getCollection || (this.getCollection = function() {
|
1376
1586
|
return this.collection;
|
1377
1587
|
});
|
1378
1588
|
collection = this.getCollection();
|
1379
1589
|
paginationState = this.getPaginationState();
|
1380
|
-
|
1381
|
-
|
1382
|
-
|
1383
|
-
|
1384
|
-
|
1385
|
-
return _.
|
1386
|
-
|
1590
|
+
this.optionsSources || (this.optionsSources = []);
|
1591
|
+
this.queryOptions || (this.queryOptions = {});
|
1592
|
+
this.optionsSources.push(function() {
|
1593
|
+
var options;
|
1594
|
+
options = _(paginationState.toJSON()).pick('limit', 'page', 'sortBy');
|
1595
|
+
return _.extend(options, {
|
1596
|
+
pager: _this.pager
|
1387
1597
|
});
|
1388
1598
|
});
|
1389
|
-
|
1390
|
-
|
1599
|
+
paginationState.on("change:page", function(state) {
|
1600
|
+
var filter;
|
1601
|
+
if (_this.isRemote()) {
|
1602
|
+
filter = _.extend(_this.toQuery(), _this.toQueryOptions());
|
1603
|
+
return _this.collection.applyFilter(filter, {
|
1604
|
+
remote: true
|
1605
|
+
});
|
1606
|
+
} else {
|
1607
|
+
return _this.trigger("refresh");
|
1608
|
+
}
|
1391
1609
|
});
|
1392
|
-
|
1393
|
-
|
1394
|
-
|
1395
|
-
|
1396
|
-
|
1397
|
-
|
1398
|
-
|
1399
|
-
|
1400
|
-
|
1610
|
+
return this.on("before:render", this.renderPaginationControl, this);
|
1611
|
+
},
|
1612
|
+
pager: function(numberOfPages, models) {
|
1613
|
+
this.getPaginationState().set({
|
1614
|
+
numberOfPages: numberOfPages,
|
1615
|
+
itemCount: models.length
|
1616
|
+
});
|
1617
|
+
return this.paginationControl().updateWithPageCount(numberOfPages, models);
|
1618
|
+
},
|
1619
|
+
isRemote: function() {
|
1620
|
+
return this.getQueryOptions().remote === true;
|
1401
1621
|
},
|
1402
1622
|
getPaginationState: function() {
|
1403
1623
|
var _base, _name;
|
@@ -1411,32 +1631,16 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1411
1631
|
if (options == null) options = {};
|
1412
1632
|
return this.getPaginationState().set('page', page, options);
|
1413
1633
|
},
|
1634
|
+
setPage: function(page, options) {
|
1635
|
+
if (page == null) page = 1;
|
1636
|
+
if (options == null) options = {};
|
1637
|
+
return this.getPaginationState().set('page', page, options);
|
1638
|
+
},
|
1414
1639
|
setLimit: function(limit, options) {
|
1415
1640
|
if (limit == null) limit = 0;
|
1416
1641
|
if (options == null) options = {};
|
1417
1642
|
return this.getPaginationState().set('limit', limit, options);
|
1418
1643
|
},
|
1419
|
-
updatePagination: function(models, query, options) {
|
1420
|
-
var itemCount, paginator, totalCount, _ref;
|
1421
|
-
if (models == null) models = [];
|
1422
|
-
if (query == null) query = {};
|
1423
|
-
if (options == null) options = {};
|
1424
|
-
_.defaults(options, this.getQueryOptions(), {
|
1425
|
-
limit: 0
|
1426
|
-
});
|
1427
|
-
paginator = this.paginationControl();
|
1428
|
-
itemCount = (models != null ? models.length : void 0) || 0;
|
1429
|
-
totalCount = (_ref = this.getCollection()) != null ? _ref.length : void 0;
|
1430
|
-
if (itemCount === 0 || totalCount <= options.limit) {
|
1431
|
-
paginator.$el.hide();
|
1432
|
-
} else {
|
1433
|
-
paginator.$el.show();
|
1434
|
-
}
|
1435
|
-
return paginator.state.set({
|
1436
|
-
page: options.page,
|
1437
|
-
limit: options.limit
|
1438
|
-
});
|
1439
|
-
},
|
1440
1644
|
paginationControl: function() {
|
1441
1645
|
if (this.paginator != null) return this.paginator;
|
1442
1646
|
_.defaults(this.paginatable || (this.paginatable = {}), {
|
@@ -1446,20 +1650,24 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1446
1650
|
this.paginator = Luca.util.lazyComponent({
|
1447
1651
|
type: "pagination_control",
|
1448
1652
|
collection: this.getCollection(),
|
1449
|
-
defaultState: this.paginatable
|
1653
|
+
defaultState: this.paginatable,
|
1654
|
+
parent: this.name || this.cid,
|
1655
|
+
debugMode: this.debugMode
|
1450
1656
|
});
|
1451
1657
|
return this.paginator;
|
1452
1658
|
},
|
1453
1659
|
renderPaginationControl: function() {
|
1454
|
-
|
1455
|
-
|
1660
|
+
var control;
|
1661
|
+
control = this.paginationControl();
|
1662
|
+
this.paginationContainer().append(control.render().$el);
|
1663
|
+
return control;
|
1456
1664
|
}
|
1457
1665
|
};
|
1458
1666
|
|
1459
1667
|
}).call(this);
|
1460
1668
|
(function() {
|
1461
1669
|
|
1462
|
-
Luca.
|
1670
|
+
Luca.concerns.StateModel = {
|
1463
1671
|
__initializer: function() {
|
1464
1672
|
var _this = this;
|
1465
1673
|
if (this.stateful !== true) return;
|
@@ -1489,7 +1697,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1489
1697
|
}).call(this);
|
1490
1698
|
(function() {
|
1491
1699
|
|
1492
|
-
Luca.
|
1700
|
+
Luca.concerns.Templating = {
|
1493
1701
|
__initializer: function() {
|
1494
1702
|
var template, templateContent, templateVars;
|
1495
1703
|
templateVars = Luca.util.read.call(this, this.bodyTemplateVars) || {};
|
@@ -1640,6 +1848,61 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1640
1848
|
return componentCacheStore.cid_index[lookup_id];
|
1641
1849
|
};
|
1642
1850
|
|
1851
|
+
}).call(this);
|
1852
|
+
(function() {
|
1853
|
+
var MetaDataProxy;
|
1854
|
+
|
1855
|
+
Luca.registry.componentMetaData = {};
|
1856
|
+
|
1857
|
+
Luca.registry.getMetaDataFor = function(componentName) {
|
1858
|
+
return new MetaDataProxy(Luca.registry.componentMetaData[componentName]);
|
1859
|
+
};
|
1860
|
+
|
1861
|
+
Luca.registry.addMetaData = function(componentName, key, value) {
|
1862
|
+
var data, _base;
|
1863
|
+
data = (_base = Luca.registry.componentMetaData)[componentName] || (_base[componentName] = {});
|
1864
|
+
data[key] = _(value).clone();
|
1865
|
+
return data;
|
1866
|
+
};
|
1867
|
+
|
1868
|
+
MetaDataProxy = (function() {
|
1869
|
+
|
1870
|
+
function MetaDataProxy(meta) {
|
1871
|
+
this.meta = meta != null ? meta : {};
|
1872
|
+
this;
|
1873
|
+
}
|
1874
|
+
|
1875
|
+
MetaDataProxy.prototype.superClass = function() {
|
1876
|
+
return Luca.util.resolve(this.meta["super class name"]);
|
1877
|
+
};
|
1878
|
+
|
1879
|
+
MetaDataProxy.prototype.componentDefinition = function() {
|
1880
|
+
return Luca.util.resolve(this.meta["display name"]);
|
1881
|
+
};
|
1882
|
+
|
1883
|
+
MetaDataProxy.prototype.styleHierarchy = function() {
|
1884
|
+
var list;
|
1885
|
+
list = _(this.classHierarchy()).map(function(cls) {
|
1886
|
+
return Luca.util.toCssClass(cls, 'views', 'components', 'core', 'fields', 'containers');
|
1887
|
+
});
|
1888
|
+
return _(list).without('backbone-view', 'luca-view');
|
1889
|
+
};
|
1890
|
+
|
1891
|
+
MetaDataProxy.prototype.classHierarchy = function() {
|
1892
|
+
var list, proxy, _ref, _ref2, _ref3, _ref4;
|
1893
|
+
list = [this.meta["display name"], this.meta["super class name"]];
|
1894
|
+
proxy = (_ref = this.superClass()) != null ? (_ref2 = _ref.prototype) != null ? typeof _ref2.componentMetaData === "function" ? _ref2.componentMetaData() : void 0 : void 0 : void 0;
|
1895
|
+
while (!!proxy) {
|
1896
|
+
list = list.concat(proxy != null ? proxy.classHierarchy() : void 0);
|
1897
|
+
proxy = (_ref3 = proxy.superClass()) != null ? (_ref4 = _ref3.prototype) != null ? typeof _ref4.componentMetaData === "function" ? _ref4.componentMetaData() : void 0 : void 0 : void 0;
|
1898
|
+
}
|
1899
|
+
return _(list).uniq();
|
1900
|
+
};
|
1901
|
+
|
1902
|
+
return MetaDataProxy;
|
1903
|
+
|
1904
|
+
})();
|
1905
|
+
|
1643
1906
|
}).call(this);
|
1644
1907
|
(function() {
|
1645
1908
|
var __slice = Array.prototype.slice;
|
@@ -1683,13 +1946,14 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1683
1946
|
|
1684
1947
|
}).call(this);
|
1685
1948
|
(function() {
|
1686
|
-
var bindAllEventHandlers, bindEventHandlers, view
|
1949
|
+
var bindAllEventHandlers, bindEventHandlers, view,
|
1950
|
+
__slice = Array.prototype.slice;
|
1687
1951
|
|
1688
1952
|
view = Luca.register("Luca.View");
|
1689
1953
|
|
1690
1954
|
view["extends"]("Backbone.View");
|
1691
1955
|
|
1692
|
-
view.includes("Luca.Events", "Luca.
|
1956
|
+
view.includes("Luca.Events", "Luca.concerns.DomHelpers");
|
1693
1957
|
|
1694
1958
|
view.mixesIn("DomHelpers", "Templating", "EnhancedProperties", "CollectionEventBindings", "ApplicationEventBindings", "StateModel");
|
1695
1959
|
|
@@ -1697,7 +1961,6 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1697
1961
|
|
1698
1962
|
view.defines({
|
1699
1963
|
initialize: function(options) {
|
1700
|
-
var module, _i, _len, _ref, _ref2, _ref3, _ref4;
|
1701
1964
|
this.options = options != null ? options : {};
|
1702
1965
|
this.trigger("before:initialize", this, this.options);
|
1703
1966
|
_.extend(this, this.options);
|
@@ -1708,36 +1971,11 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1708
1971
|
this.$el.attr("data-luca-id", this.name || this.cid);
|
1709
1972
|
Luca.cacheInstance(this.cid, this);
|
1710
1973
|
this.setupHooks(_(Luca.View.prototype.hooks.concat(this.hooks)).uniq());
|
1711
|
-
|
1712
|
-
_ref2 = this.mixins;
|
1713
|
-
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
1714
|
-
module = _ref2[_i];
|
1715
|
-
if ((_ref3 = Luca.mixin(module)) != null) {
|
1716
|
-
if ((_ref4 = _ref3.__initializer) != null) {
|
1717
|
-
_ref4.call(this, this, module);
|
1718
|
-
}
|
1719
|
-
}
|
1720
|
-
}
|
1721
|
-
}
|
1974
|
+
Luca.concern.setup.call(this);
|
1722
1975
|
this.delegateEvents();
|
1723
1976
|
return this.trigger("after:initialize", this);
|
1724
1977
|
},
|
1725
|
-
setupHooks:
|
1726
|
-
var _this = this;
|
1727
|
-
set || (set = this.hooks);
|
1728
|
-
return _(set).each(function(eventId) {
|
1729
|
-
var callback, fn;
|
1730
|
-
fn = Luca.util.hook(eventId);
|
1731
|
-
callback = function() {
|
1732
|
-
var _ref;
|
1733
|
-
return (_ref = this[fn]) != null ? _ref.apply(this, arguments) : void 0;
|
1734
|
-
};
|
1735
|
-
if (eventId != null ? eventId.match(/once:/) : void 0) {
|
1736
|
-
callback = _.once(callback);
|
1737
|
-
}
|
1738
|
-
return _this.on(eventId, callback, _this);
|
1739
|
-
});
|
1740
|
-
},
|
1978
|
+
setupHooks: Luca.util.setupHooks,
|
1741
1979
|
registerEvent: function(selector, handler) {
|
1742
1980
|
this.events || (this.events = {});
|
1743
1981
|
this.events[selector] = handler;
|
@@ -1757,14 +1995,10 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1757
1995
|
return Luca.util.selectProperties(Luca.isBackboneView, this);
|
1758
1996
|
},
|
1759
1997
|
debug: function() {
|
1760
|
-
var
|
1998
|
+
var args;
|
1999
|
+
args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
|
1761
2000
|
if (!(this.debugMode || (window.LucaDebugMode != null))) return;
|
1762
|
-
|
1763
|
-
for (_i = 0, _len = arguments.length; _i < _len; _i++) {
|
1764
|
-
message = arguments[_i];
|
1765
|
-
_results.push(console.log([this.name || this.cid, message]));
|
1766
|
-
}
|
1767
|
-
return _results;
|
2001
|
+
return console.log([this.name || this.cid].concat(__slice.call(args)));
|
1768
2002
|
},
|
1769
2003
|
trigger: function() {
|
1770
2004
|
if (Luca.enableGlobalObserver) {
|
@@ -1849,21 +2083,26 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1849
2083
|
return _results;
|
1850
2084
|
};
|
1851
2085
|
|
2086
|
+
Luca.View.deferrableEvent = "reset";
|
2087
|
+
|
1852
2088
|
Luca.View.extend = function(definition) {
|
1853
|
-
var module, _i, _len, _ref;
|
2089
|
+
var componentClass, module, _i, _len, _ref;
|
2090
|
+
if (definition == null) definition = {};
|
1854
2091
|
definition = Luca.View.renderWrapper(definition);
|
1855
|
-
if (
|
1856
|
-
|
2092
|
+
if (definition.concerns != null) {
|
2093
|
+
definition.concerns || (definition.concerns = definition.concerns);
|
2094
|
+
}
|
2095
|
+
componentClass = Luca.View._originalExtend.call(this, definition);
|
2096
|
+
if ((definition.concerns != null) && _.isArray(definition.concerns)) {
|
2097
|
+
_ref = definition.concerns;
|
1857
2098
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
1858
2099
|
module = _ref[_i];
|
1859
|
-
Luca.decorate(
|
2100
|
+
Luca.decorate(componentClass)["with"](module);
|
1860
2101
|
}
|
1861
2102
|
}
|
1862
|
-
return
|
2103
|
+
return componentClass;
|
1863
2104
|
};
|
1864
2105
|
|
1865
|
-
Luca.View.deferrableEvent = "reset";
|
1866
|
-
|
1867
2106
|
}).call(this);
|
1868
2107
|
(function() {
|
1869
2108
|
var model, setupComputedProperties;
|
@@ -1877,13 +2116,14 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1877
2116
|
model.defines({
|
1878
2117
|
initialize: function() {
|
1879
2118
|
Backbone.Model.prototype.initialize(this, arguments);
|
1880
|
-
|
2119
|
+
setupComputedProperties.call(this);
|
2120
|
+
return Luca.concern.setup.call(this);
|
1881
2121
|
},
|
1882
2122
|
read: function(attr) {
|
1883
2123
|
if (_.isFunction(this[attr])) {
|
1884
2124
|
return this[attr].call(this);
|
1885
2125
|
} else {
|
1886
|
-
return this.get(attr);
|
2126
|
+
return this.get(attr) || this[attr];
|
1887
2127
|
}
|
1888
2128
|
},
|
1889
2129
|
get: function(attr) {
|
@@ -1919,6 +2159,25 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1919
2159
|
return _results;
|
1920
2160
|
};
|
1921
2161
|
|
2162
|
+
Luca.Model._originalExtend = Backbone.Model.extend;
|
2163
|
+
|
2164
|
+
Luca.Model.extend = function(definition) {
|
2165
|
+
var componentClass, module, _i, _len, _ref;
|
2166
|
+
if (definition == null) definition = {};
|
2167
|
+
if (definition.concerns != null) {
|
2168
|
+
definition.concerns || (definition.concerns = definition.concerns);
|
2169
|
+
}
|
2170
|
+
componentClass = Luca.Model._originalExtend.call(this, definition);
|
2171
|
+
if ((definition.concerns != null) && _.isArray(definition.concerns)) {
|
2172
|
+
_ref = definition.concerns;
|
2173
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
2174
|
+
module = _ref[_i];
|
2175
|
+
Luca.decorate(componentClass)["with"](module);
|
2176
|
+
}
|
2177
|
+
}
|
2178
|
+
return componentClass;
|
2179
|
+
};
|
2180
|
+
|
1922
2181
|
}).call(this);
|
1923
2182
|
(function() {
|
1924
2183
|
var collection;
|
@@ -1983,6 +2242,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
1983
2242
|
parse: options != null ? options.parse : void 0
|
1984
2243
|
});
|
1985
2244
|
}
|
2245
|
+
Luca.concern.setup.call(this);
|
1986
2246
|
return this.trigger("after:initialize");
|
1987
2247
|
},
|
1988
2248
|
__wrapUrl: function() {
|
@@ -2078,7 +2338,9 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
2078
2338
|
if (options == null) options = {};
|
2079
2339
|
this.trigger("before:fetch", this);
|
2080
2340
|
if (this.memoryCollection === true) return this.reset(this.data);
|
2081
|
-
if (this.cached_models().length && !options.refresh
|
2341
|
+
if (this.cached_models().length && !(options.refresh === true || options.remote === true)) {
|
2342
|
+
return this.bootstrap();
|
2343
|
+
}
|
2082
2344
|
url = _.isFunction(this.url) ? this.url() : this.url;
|
2083
2345
|
if (!((url && url.length > 1) || this.localStorage)) return true;
|
2084
2346
|
this.fetching = true;
|
@@ -2227,6 +2489,25 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
2227
2489
|
}
|
2228
2490
|
});
|
2229
2491
|
|
2492
|
+
Luca.Collection._originalExtend = Backbone.Collection.extend;
|
2493
|
+
|
2494
|
+
Luca.Collection.extend = function(definition) {
|
2495
|
+
var componentClass, module, _i, _len, _ref;
|
2496
|
+
if (definition == null) definition = {};
|
2497
|
+
if (definition.concerns != null) {
|
2498
|
+
definition.concerns || (definition.concerns = definition.concerns);
|
2499
|
+
}
|
2500
|
+
componentClass = Luca.Collection._originalExtend.call(this, definition);
|
2501
|
+
if ((definition.concerns != null) && _.isArray(definition.concerns)) {
|
2502
|
+
_ref = definition.concerns;
|
2503
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
2504
|
+
module = _ref[_i];
|
2505
|
+
Luca.decorate(componentClass)["with"](module);
|
2506
|
+
}
|
2507
|
+
}
|
2508
|
+
return componentClass;
|
2509
|
+
};
|
2510
|
+
|
2230
2511
|
Luca.Collection.baseParams = function(obj) {
|
2231
2512
|
if (obj) return Luca.Collection._baseParams = obj;
|
2232
2513
|
if (_.isFunction(Luca.Collection._baseParams)) {
|
@@ -2375,40 +2656,21 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
2375
2656
|
|
2376
2657
|
}).call(this);
|
2377
2658
|
(function() {
|
2659
|
+
var field;
|
2378
2660
|
|
2379
|
-
|
2380
|
-
|
2381
|
-
|
2382
|
-
|
2661
|
+
field = Luca.register("Luca.core.Field");
|
2662
|
+
|
2663
|
+
field["extends"]("Luca.View");
|
2664
|
+
|
2665
|
+
field.triggers("before:validation", "after:validation", "on:change");
|
2666
|
+
|
2667
|
+
field.publicConfiguration({
|
2383
2668
|
labelAlign: 'top',
|
2384
|
-
|
2385
|
-
statuses: ["warning", "error", "success"]
|
2386
|
-
|
2387
|
-
|
2388
|
-
|
2389
|
-
_.extend(this, this.options);
|
2390
|
-
this.input_id || (this.input_id = _.uniqueId('field'));
|
2391
|
-
this.input_name || (this.input_name = this.name);
|
2392
|
-
this.input_class || (this.input_class = "");
|
2393
|
-
this.input_type || (this.input_type = "");
|
2394
|
-
this.helperText || (this.helperText = "");
|
2395
|
-
if (this.required && !((_ref = this.label) != null ? _ref.match(/^\*/) : void 0)) {
|
2396
|
-
this.label || (this.label = "*" + this.label);
|
2397
|
-
}
|
2398
|
-
this.inputStyles || (this.inputStyles = "");
|
2399
|
-
this.input_value || (this.input_value = this.value || "");
|
2400
|
-
if (this.disabled) this.disable();
|
2401
|
-
this.updateState(this.state);
|
2402
|
-
this.placeHolder || (this.placeHolder = "");
|
2403
|
-
return Luca.View.prototype.initialize.apply(this, arguments);
|
2404
|
-
},
|
2405
|
-
beforeRender: function() {
|
2406
|
-
if (Luca.enableBootstrap) this.$el.addClass('control-group');
|
2407
|
-
if (this.required) return this.$el.addClass('required');
|
2408
|
-
},
|
2409
|
-
change_handler: function(e) {
|
2410
|
-
return this.trigger("on:change", this, e);
|
2411
|
-
},
|
2669
|
+
className: 'luca-ui-text-field luca-ui-field',
|
2670
|
+
statuses: ["warning", "error", "success"]
|
2671
|
+
});
|
2672
|
+
|
2673
|
+
field.publicInterface({
|
2412
2674
|
disable: function() {
|
2413
2675
|
return this.getInputElement().attr('disabled', true);
|
2414
2676
|
},
|
@@ -2434,9 +2696,6 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
2434
2696
|
var _ref;
|
2435
2697
|
return (_ref = this.getInputElement()) != null ? _ref.attr('value', value) : void 0;
|
2436
2698
|
},
|
2437
|
-
getInputElement: function() {
|
2438
|
-
return this.input || (this.input = this.$('input').eq(0));
|
2439
|
-
},
|
2440
2699
|
updateState: function(state) {
|
2441
2700
|
var _this = this;
|
2442
2701
|
return _(this.statuses).each(function(cls) {
|
@@ -2446,6 +2705,44 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
2446
2705
|
}
|
2447
2706
|
});
|
2448
2707
|
|
2708
|
+
field.privateConfiguration({
|
2709
|
+
isField: true,
|
2710
|
+
template: 'fields/text_field'
|
2711
|
+
});
|
2712
|
+
|
2713
|
+
field.defines({
|
2714
|
+
initialize: function(options) {
|
2715
|
+
var _ref;
|
2716
|
+
this.options = options != null ? options : {};
|
2717
|
+
_.extend(this, this.options);
|
2718
|
+
this.input_id || (this.input_id = _.uniqueId('field'));
|
2719
|
+
this.input_name || (this.input_name = this.name);
|
2720
|
+
this.input_class || (this.input_class = "");
|
2721
|
+
this.input_type || (this.input_type = "");
|
2722
|
+
this.helperText || (this.helperText = "");
|
2723
|
+
if (!(this.label != null) || this.label.length === 0) this.label = this.name;
|
2724
|
+
if (this.required && !((_ref = this.label) != null ? _ref.match(/^\*/) : void 0)) {
|
2725
|
+
this.label || (this.label = "*" + this.label);
|
2726
|
+
}
|
2727
|
+
this.inputStyles || (this.inputStyles = "");
|
2728
|
+
this.input_value || (this.input_value = this.value || "");
|
2729
|
+
if (this.disabled) this.disable();
|
2730
|
+
this.updateState(this.state);
|
2731
|
+
this.placeHolder || (this.placeHolder = "");
|
2732
|
+
return Luca.View.prototype.initialize.apply(this, arguments);
|
2733
|
+
},
|
2734
|
+
beforeRender: function() {
|
2735
|
+
if (Luca.enableBootstrap) this.$el.addClass('control-group');
|
2736
|
+
if (this.required) return this.$el.addClass('required');
|
2737
|
+
},
|
2738
|
+
change_handler: function(e) {
|
2739
|
+
return this.trigger("on:change", this, e);
|
2740
|
+
},
|
2741
|
+
getInputElement: function() {
|
2742
|
+
return this.input || (this.input = this.$('input').eq(0));
|
2743
|
+
}
|
2744
|
+
});
|
2745
|
+
|
2449
2746
|
}).call(this);
|
2450
2747
|
(function() {
|
2451
2748
|
var applyDOMConfig, container, createGetterMethods, createMethodsToGetComponentsByRole, doComponents, doLayout, indexComponent, validateContainerConfiguration;
|
@@ -2490,6 +2787,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
2490
2787
|
prepareComponents: function() {
|
2491
2788
|
var component, _i, _len, _ref,
|
2492
2789
|
_this = this;
|
2790
|
+
container = this;
|
2493
2791
|
_ref = this.components;
|
2494
2792
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
2495
2793
|
component = _ref[_i];
|
@@ -2500,13 +2798,24 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
2500
2798
|
}
|
2501
2799
|
}
|
2502
2800
|
return _(this.components).each(function(component, index) {
|
2503
|
-
var ce, componentContainerElement, panel, _ref2;
|
2801
|
+
var ce, componentContainerElement, componentExtension, panel, _ref2, _ref3;
|
2504
2802
|
ce = componentContainerElement = (_ref2 = _this.componentContainers) != null ? _ref2[index] : void 0;
|
2505
2803
|
ce["class"] = ce["class"] || ce.className || ce.classes;
|
2506
2804
|
if (_this.generateComponentElements) {
|
2507
2805
|
panel = _this.make(_this.componentTag, componentContainerElement, '');
|
2508
2806
|
_this.$append(panel);
|
2509
2807
|
}
|
2808
|
+
if (container.defaults != null) {
|
2809
|
+
component = _.defaults(component, container.defaults || {});
|
2810
|
+
}
|
2811
|
+
if (_.isArray(container.extensions) && _.isObject((_ref3 = container.extensions) != null ? _ref3[index] : void 0)) {
|
2812
|
+
componentExtension = container.extensions[index];
|
2813
|
+
component = _.extend(component, componentExtension);
|
2814
|
+
}
|
2815
|
+
if ((component.role != null) && _.isObject(container.extensions) && _.isObject(container.extensions[component.role])) {
|
2816
|
+
componentExtension = container.extensions[component.role];
|
2817
|
+
component = _.extend(component, componentExtension);
|
2818
|
+
}
|
2510
2819
|
if (component.container == null) {
|
2511
2820
|
if (_this.generateComponentElements) {
|
2512
2821
|
component.container = "#" + componentContainerElement.id;
|
@@ -2526,11 +2835,15 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
2526
2835
|
};
|
2527
2836
|
container = this;
|
2528
2837
|
this.components = _(this.components).map(function(object, index) {
|
2529
|
-
var component, created;
|
2530
|
-
component = Luca.
|
2531
|
-
if (!component.container && component.options.container) {
|
2838
|
+
var component, created, _ref;
|
2839
|
+
component = Luca.isComponent(object) ? object : (object.type || (object.type = object.ctype), !(object.type != null) ? object.components != null ? object.type = object.ctype = 'container' : object.type = object.ctype = Luca.defaultComponentType : void 0, created = Luca.util.lazyComponent(object));
|
2840
|
+
if (!component.container && ((_ref = component.options) != null ? _ref.container : void 0)) {
|
2532
2841
|
component.container = component.options.container;
|
2533
2842
|
}
|
2843
|
+
if (!(component.container != null)) {
|
2844
|
+
console.log(component, index, _this);
|
2845
|
+
console.error("could not assign container property to component on container " + (_this.name || _this.cid));
|
2846
|
+
}
|
2534
2847
|
indexComponent(component).at(index)["in"](_this.componentIndex);
|
2535
2848
|
return component;
|
2536
2849
|
});
|
@@ -2546,7 +2859,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
2546
2859
|
return container;
|
2547
2860
|
};
|
2548
2861
|
try {
|
2549
|
-
|
2862
|
+
this.$(component.container).eq(0).append(component.el);
|
2550
2863
|
return component.render();
|
2551
2864
|
} catch (e) {
|
2552
2865
|
console.log("Error Rendering Component " + (component.name || component.cid), component);
|
@@ -2594,11 +2907,11 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
2594
2907
|
map: function(fn) {
|
2595
2908
|
return this._().map(fn);
|
2596
2909
|
},
|
2597
|
-
registerComponentEvents: function() {
|
2910
|
+
registerComponentEvents: function(eventList) {
|
2598
2911
|
var component, componentNameOrRole, eventId, handler, listener, _ref, _ref2, _results,
|
2599
2912
|
_this = this;
|
2600
2913
|
container = this;
|
2601
|
-
_ref = this.componentEvents || {};
|
2914
|
+
_ref = eventList || this.componentEvents || {};
|
2602
2915
|
_results = [];
|
2603
2916
|
for (listener in _ref) {
|
2604
2917
|
handler = _ref[listener];
|
@@ -2634,10 +2947,10 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
2634
2947
|
var children, grandchildren;
|
2635
2948
|
children = this.components;
|
2636
2949
|
grandchildren = _(this.subContainers()).invoke('allChildren');
|
2637
|
-
return
|
2950
|
+
return _([children, grandchildren]).chain().compact().flatten().value();
|
2638
2951
|
},
|
2639
2952
|
findComponentForEventBinding: function(nameRoleOrGetter, deep) {
|
2640
|
-
if (deep == null) deep =
|
2953
|
+
if (deep == null) deep = true;
|
2641
2954
|
return this.findComponentByName(nameRoleOrGetter, deep) || this.findComponentByGetter(nameRoleOrGetter, deep) || this.findComponentByRole(nameRoleOrGetter, deep);
|
2642
2955
|
},
|
2643
2956
|
findComponentByGetter: function(getter, deep) {
|
@@ -2649,7 +2962,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
2649
2962
|
findComponentByRole: function(role, deep) {
|
2650
2963
|
if (deep == null) deep = false;
|
2651
2964
|
return _(this.allChildren()).detect(function(component) {
|
2652
|
-
return component.role === role;
|
2965
|
+
return component.role === role || component.type === role || component.ctype === role;
|
2653
2966
|
});
|
2654
2967
|
},
|
2655
2968
|
findComponentByName: function(name, deep) {
|
@@ -2779,7 +3092,6 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
2779
3092
|
return _(childrenWithGetter).each(function(component) {
|
2780
3093
|
var _name;
|
2781
3094
|
return container[_name = component.getter] || (container[_name] = function() {
|
2782
|
-
console.log("getter is being deprecated in favor of role");
|
2783
3095
|
console.log(component.getter, component, container);
|
2784
3096
|
return component;
|
2785
3097
|
});
|
@@ -2808,8 +3120,10 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
2808
3120
|
this.trigger("before:render:components", this, this.components);
|
2809
3121
|
this.renderComponents();
|
2810
3122
|
this.trigger("after:components", this, this.components);
|
2811
|
-
|
2812
|
-
|
3123
|
+
if (this.skipGetterMethods !== true) {
|
3124
|
+
createGetterMethods.call(this);
|
3125
|
+
createMethodsToGetComponentsByRole.call(this);
|
3126
|
+
}
|
2813
3127
|
return this.registerComponentEvents();
|
2814
3128
|
};
|
2815
3129
|
|
@@ -3492,16 +3806,27 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
3492
3806
|
|
3493
3807
|
}).call(this);
|
3494
3808
|
(function() {
|
3809
|
+
var tabView;
|
3810
|
+
|
3811
|
+
_.def('Luca.containers.TabView')["extends"]('Luca.containers.CardView')["with"];
|
3812
|
+
|
3813
|
+
tabView = Luca.register("Luca.containers.TabView");
|
3814
|
+
|
3815
|
+
tabView.triggers("before:select", "after:select");
|
3495
3816
|
|
3496
|
-
|
3497
|
-
hooks: ["before:select", "after:select"],
|
3498
|
-
componentType: 'tab_view',
|
3499
|
-
className: 'luca-ui-tab-view tabbable',
|
3817
|
+
tabView.publicConfiguration({
|
3500
3818
|
tab_position: 'top',
|
3501
|
-
tabVerticalOffset: '50px'
|
3819
|
+
tabVerticalOffset: '50px'
|
3820
|
+
});
|
3821
|
+
|
3822
|
+
tabView.privateConfiguration({
|
3823
|
+
additionalClassNames: 'tabbable',
|
3502
3824
|
navClass: "nav-tabs",
|
3503
3825
|
bodyTemplate: "containers/tab_view",
|
3504
|
-
bodyEl: "div.tab-content"
|
3826
|
+
bodyEl: "div.tab-content"
|
3827
|
+
});
|
3828
|
+
|
3829
|
+
tabView.defines({
|
3505
3830
|
initialize: function(options) {
|
3506
3831
|
this.options = options != null ? options : {};
|
3507
3832
|
if (this.navStyle === "list") this.navClass = "nav-list";
|
@@ -3533,7 +3858,6 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
3533
3858
|
}
|
3534
3859
|
},
|
3535
3860
|
createTabSelectors: function() {
|
3536
|
-
var tabView;
|
3537
3861
|
tabView = this;
|
3538
3862
|
return this.each(function(component, index) {
|
3539
3863
|
var icon, link, selector, _ref;
|
@@ -3683,13 +4007,13 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
3683
4007
|
|
3684
4008
|
}).call(this);
|
3685
4009
|
(function() {
|
3686
|
-
var
|
4010
|
+
var application;
|
3687
4011
|
|
3688
|
-
|
3689
|
-
return Backbone.history.start();
|
3690
|
-
};
|
4012
|
+
application = Luca.register("Luca.Application");
|
3691
4013
|
|
3692
|
-
|
4014
|
+
application["extends"]("Luca.containers.Viewport");
|
4015
|
+
|
4016
|
+
application.defines({
|
3693
4017
|
name: "MyApp",
|
3694
4018
|
defaultState: {},
|
3695
4019
|
autoBoot: false,
|
@@ -3887,7 +4211,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
3887
4211
|
if (this.autoStartHistory === true) {
|
3888
4212
|
this.autoStartHistory = "before:render";
|
3889
4213
|
}
|
3890
|
-
return this.defer(startHistory, false).until(this, this.autoStartHistory);
|
4214
|
+
return this.defer(Luca.util.startHistory, false).until(this, this.autoStartHistory);
|
3891
4215
|
}
|
3892
4216
|
},
|
3893
4217
|
setupKeyHandler: function() {
|
@@ -3908,16 +4232,23 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
3908
4232
|
}
|
3909
4233
|
});
|
3910
4234
|
|
4235
|
+
Luca.util.startHistory = function() {
|
4236
|
+
return Backbone.history.start();
|
4237
|
+
};
|
4238
|
+
|
3911
4239
|
}).call(this);
|
3912
4240
|
(function() {
|
4241
|
+
var toolbar;
|
4242
|
+
|
4243
|
+
_.def('Luca.components.Toolbar')["extends"]('Luca.core.Container')["with"];
|
4244
|
+
|
4245
|
+
toolbar = Luca.register("Luca.components.Toolbar");
|
3913
4246
|
|
3914
|
-
|
4247
|
+
toolbar["extends"]("Luca.core.Container");
|
4248
|
+
|
4249
|
+
toolbar.defines({
|
3915
4250
|
className: 'luca-ui-toolbar toolbar',
|
3916
4251
|
position: 'bottom',
|
3917
|
-
initialize: function(options) {
|
3918
|
-
this.options = options != null ? options : {};
|
3919
|
-
return Luca.core.Container.prototype.initialize.apply(this, arguments);
|
3920
|
-
},
|
3921
4252
|
prepareComponents: function() {
|
3922
4253
|
var _this = this;
|
3923
4254
|
return _(this.components).each(function(component) {
|
@@ -3925,14 +4256,20 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
3925
4256
|
});
|
3926
4257
|
},
|
3927
4258
|
render: function() {
|
3928
|
-
|
4259
|
+
$(this.container).append(this.el);
|
4260
|
+
return this;
|
3929
4261
|
}
|
3930
4262
|
});
|
3931
4263
|
|
3932
4264
|
}).call(this);
|
3933
4265
|
(function() {
|
4266
|
+
var loaderView;
|
4267
|
+
|
4268
|
+
loaderView = Luca.register("Luca.components.CollectionLoaderView");
|
4269
|
+
|
4270
|
+
loaderView["extends"]("Luca.View");
|
3934
4271
|
|
3935
|
-
|
4272
|
+
loaderView.defines({
|
3936
4273
|
className: 'luca-ui-collection-loader-view',
|
3937
4274
|
template: "components/collection_loader_view",
|
3938
4275
|
initialize: function(options) {
|
@@ -3969,15 +4306,15 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
3969
4306
|
(function() {
|
3970
4307
|
var collectionView, make;
|
3971
4308
|
|
3972
|
-
collectionView = Luca.
|
4309
|
+
collectionView = Luca.register("Luca.components.CollectionView");
|
3973
4310
|
|
3974
4311
|
collectionView["extends"]("Luca.components.Panel");
|
3975
4312
|
|
3976
|
-
collectionView.
|
4313
|
+
collectionView.mixesIn("LoadMaskable", "Filterable", "Paginatable");
|
3977
4314
|
|
3978
4315
|
collectionView.triggers("before:refresh", "after:refresh", "refresh", "empty:results");
|
3979
4316
|
|
3980
|
-
collectionView.
|
4317
|
+
collectionView.defines({
|
3981
4318
|
tagName: "ol",
|
3982
4319
|
className: "luca-ui-collection-view",
|
3983
4320
|
bodyClassName: "collection-ui-panel",
|
@@ -3997,11 +4334,15 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
3997
4334
|
if (!((this.itemTemplate != null) || (this.itemRenderer != null) || (this.itemProperty != null))) {
|
3998
4335
|
throw "Collection Views must specify an item template or item renderer function";
|
3999
4336
|
}
|
4000
|
-
|
4001
|
-
|
4002
|
-
|
4337
|
+
if (_.isString(this.collection)) {
|
4338
|
+
if (Luca.CollectionManager.get()) {
|
4339
|
+
this.collection = Luca.CollectionManager.get().getOrCreate(this.collection);
|
4340
|
+
} else {
|
4341
|
+
console.log("String Collection but no collection manager");
|
4342
|
+
}
|
4003
4343
|
}
|
4004
4344
|
if (!Luca.isBackboneCollection(this.collection)) {
|
4345
|
+
console.log("Missing Collection on " + (this.name || this.cid), this, this.collection);
|
4005
4346
|
throw "Collection Views must have a valid backbone collection";
|
4006
4347
|
this.collection.on("before:fetch", function() {
|
4007
4348
|
return _this.trigger("enable:loadmask");
|
@@ -4020,12 +4361,13 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4020
4361
|
this.collection.on("change", this.refreshModel, this);
|
4021
4362
|
}
|
4022
4363
|
}
|
4364
|
+
Luca.components.Panel.prototype.initialize.apply(this, arguments);
|
4023
4365
|
if (this.autoRefreshOnModelsPresent !== false) {
|
4024
4366
|
this.defer(function() {
|
4025
4367
|
if (_this.collection.length > 0) return _this.refresh();
|
4026
4368
|
}).until("after:render");
|
4027
4369
|
}
|
4028
|
-
return this.on("
|
4370
|
+
return this.on("refresh", this.refresh, this);
|
4029
4371
|
},
|
4030
4372
|
attributesForItem: function(item, model) {
|
4031
4373
|
return _.extend({}, {
|
@@ -4065,11 +4407,39 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4065
4407
|
getCollection: function() {
|
4066
4408
|
return this.collection;
|
4067
4409
|
},
|
4410
|
+
loadModels: function(models, options) {
|
4411
|
+
var _ref;
|
4412
|
+
if (models == null) models = [];
|
4413
|
+
if (options == null) options = {};
|
4414
|
+
return (_ref = this.getCollection()) != null ? _ref.reset(models, options) : void 0;
|
4415
|
+
},
|
4416
|
+
applyQuery: function(query, queryOptions) {
|
4417
|
+
if (query == null) query = {};
|
4418
|
+
if (queryOptions == null) queryOptions = {};
|
4419
|
+
this.query = query;
|
4420
|
+
this.queryOptions = queryOptions;
|
4421
|
+
this.refresh();
|
4422
|
+
return this;
|
4423
|
+
},
|
4068
4424
|
getQuery: function() {
|
4069
|
-
|
4425
|
+
var query, querySource, _i, _len, _ref;
|
4426
|
+
query = this.query || (this.query = {});
|
4427
|
+
_ref = _(this.querySources || []).compact();
|
4428
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
4429
|
+
querySource = _ref[_i];
|
4430
|
+
query = _.extend(query, querySource() || {});
|
4431
|
+
}
|
4432
|
+
return query;
|
4070
4433
|
},
|
4071
4434
|
getQueryOptions: function() {
|
4072
|
-
|
4435
|
+
var optionSource, options, _i, _len, _ref;
|
4436
|
+
options = this.queryOptions || (this.queryOptions = {});
|
4437
|
+
_ref = _(this.optionsSources || []).compact();
|
4438
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
4439
|
+
optionSource = _ref[_i];
|
4440
|
+
options = _.extend(options, optionSource() || {});
|
4441
|
+
}
|
4442
|
+
return options;
|
4073
4443
|
},
|
4074
4444
|
getModels: function(query, options) {
|
4075
4445
|
var _ref;
|
@@ -4093,12 +4463,12 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4093
4463
|
}, model));
|
4094
4464
|
return this.trigger("model:refreshed", index, model);
|
4095
4465
|
},
|
4096
|
-
refresh: function(query, options) {
|
4097
|
-
var index, model,
|
4466
|
+
refresh: function(query, options, models) {
|
4467
|
+
var index, model, _i, _len;
|
4098
4468
|
query || (query = this.getQuery());
|
4099
4469
|
options || (options = this.getQueryOptions());
|
4470
|
+
models || (models = this.getModels(query, options));
|
4100
4471
|
this.$bodyEl().empty();
|
4101
|
-
models = this.getModels(query, options);
|
4102
4472
|
this.trigger("before:refresh", models, query, options);
|
4103
4473
|
if (models.length === 0) this.trigger("empty:results");
|
4104
4474
|
index = 0;
|
@@ -4129,8 +4499,13 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4129
4499
|
|
4130
4500
|
}).call(this);
|
4131
4501
|
(function() {
|
4502
|
+
var controller;
|
4503
|
+
|
4504
|
+
controller = Luca.register("Luca.components.Controller");
|
4505
|
+
|
4506
|
+
controller["extends"]("Luca.containers.CardView");
|
4132
4507
|
|
4133
|
-
|
4508
|
+
controller.defines({
|
4134
4509
|
additionalClassNames: ['luca-ui-controller'],
|
4135
4510
|
activeAttribute: "active-section",
|
4136
4511
|
initialize: function(options) {
|
@@ -4190,15 +4565,31 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4190
4565
|
|
4191
4566
|
}).call(this);
|
4192
4567
|
(function() {
|
4568
|
+
var buttonField;
|
4193
4569
|
|
4194
|
-
|
4570
|
+
buttonField = Luca.register("Luca.fields.ButtonField");
|
4571
|
+
|
4572
|
+
buttonField["extends"]("Luca.core.Field");
|
4573
|
+
|
4574
|
+
buttonField.triggers("button:click");
|
4575
|
+
|
4576
|
+
buttonField.publicConfiguration({
|
4195
4577
|
readOnly: true,
|
4578
|
+
input_value: void 0,
|
4579
|
+
input_type: "button",
|
4580
|
+
icon_class: void 0,
|
4581
|
+
input_name: void 0,
|
4582
|
+
white: void 0
|
4583
|
+
});
|
4584
|
+
|
4585
|
+
buttonField.privateConfiguration({
|
4586
|
+
template: "fields/button_field",
|
4196
4587
|
events: {
|
4197
4588
|
"click input": "click_handler"
|
4198
|
-
}
|
4199
|
-
|
4200
|
-
|
4201
|
-
|
4589
|
+
}
|
4590
|
+
});
|
4591
|
+
|
4592
|
+
buttonField.privateInterface({
|
4202
4593
|
click_handler: function(e) {
|
4203
4594
|
var me, my;
|
4204
4595
|
me = my = $(e.currentTarget);
|
@@ -4218,7 +4609,6 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4218
4609
|
this.input_id || (this.input_id = _.uniqueId('button'));
|
4219
4610
|
this.input_name || (this.input_name = this.name || (this.name = this.input_id));
|
4220
4611
|
this.input_value || (this.input_value = this.label || (this.label = this.text));
|
4221
|
-
this.input_type || (this.input_type = "button");
|
4222
4612
|
this.input_class || (this.input_class = this["class"]);
|
4223
4613
|
this.icon_class || (this.icon_class = "");
|
4224
4614
|
if (this.icon_class.length && !this.icon_class.match(/^icon-/)) {
|
@@ -4231,13 +4621,21 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4231
4621
|
}
|
4232
4622
|
});
|
4233
4623
|
|
4624
|
+
buttonField.defines({
|
4625
|
+
version: 1
|
4626
|
+
});
|
4627
|
+
|
4234
4628
|
}).call(this);
|
4235
4629
|
(function() {
|
4236
|
-
var make;
|
4630
|
+
var checkboxArray, make;
|
4237
4631
|
|
4238
4632
|
make = Luca.View.prototype.make;
|
4239
4633
|
|
4240
|
-
|
4634
|
+
checkboxArray = Luca.register("Luca.fields.CheckboxArray");
|
4635
|
+
|
4636
|
+
checkboxArray["extends"]("Luca.core.Field");
|
4637
|
+
|
4638
|
+
checkboxArray.defines({
|
4241
4639
|
version: 2,
|
4242
4640
|
template: "fields/checkbox_array",
|
4243
4641
|
className: "luca-ui-checkbox-array",
|
@@ -4248,7 +4646,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4248
4646
|
initialize: function(options) {
|
4249
4647
|
this.options = options != null ? options : {};
|
4250
4648
|
_.extend(this, this.options);
|
4251
|
-
_.extend(this, Luca.
|
4649
|
+
_.extend(this, Luca.concerns.Deferrable);
|
4252
4650
|
_.bindAll(this, "renderCheckboxes", "clickHandler", "checkSelected");
|
4253
4651
|
Luca.core.Field.prototype.initialize.apply(this, arguments);
|
4254
4652
|
this.input_id || (this.input_id = _.uniqueId('field'));
|
@@ -4266,6 +4664,9 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4266
4664
|
console.log("Error Configuring Collection", this, e.message);
|
4267
4665
|
}
|
4268
4666
|
cbArray = this;
|
4667
|
+
if (!Luca.isBackboneCollection(this.collection)) {
|
4668
|
+
throw "Checkbox Array Fields must specify a @collection property";
|
4669
|
+
}
|
4269
4670
|
if (this.collection.length > 0) {
|
4270
4671
|
return this.renderCheckboxes();
|
4271
4672
|
} else {
|
@@ -4361,15 +4762,27 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4361
4762
|
|
4362
4763
|
}).call(this);
|
4363
4764
|
(function() {
|
4765
|
+
var checkboxField;
|
4766
|
+
|
4767
|
+
checkboxField = Luca.register("Luca.fields.CheckboxField");
|
4768
|
+
|
4769
|
+
checkboxField["extends"]("Luca.core.Field");
|
4770
|
+
|
4771
|
+
checkboxField.triggers("checked", "unchecked");
|
4772
|
+
|
4773
|
+
checkboxField.publicConfiguration({
|
4774
|
+
send_blanks: true,
|
4775
|
+
input_value: 1
|
4776
|
+
});
|
4364
4777
|
|
4365
|
-
|
4778
|
+
checkboxField.privateConfiguration({
|
4779
|
+
template: 'fields/checkbox_field',
|
4366
4780
|
events: {
|
4367
4781
|
"change input": "change_handler"
|
4368
|
-
}
|
4369
|
-
|
4370
|
-
|
4371
|
-
|
4372
|
-
send_blanks: true,
|
4782
|
+
}
|
4783
|
+
});
|
4784
|
+
|
4785
|
+
checkboxField.privateInterface({
|
4373
4786
|
change_handler: function(e) {
|
4374
4787
|
var me, my;
|
4375
4788
|
me = my = $(e.target);
|
@@ -4384,14 +4797,14 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4384
4797
|
this.options = options != null ? options : {};
|
4385
4798
|
_.extend(this, this.options);
|
4386
4799
|
_.bindAll(this, "change_handler");
|
4387
|
-
|
4388
|
-
},
|
4389
|
-
afterInitialize: function() {
|
4800
|
+
Luca.core.Field.prototype.initialize.apply(this, arguments);
|
4390
4801
|
this.input_id || (this.input_id = _.uniqueId('field'));
|
4391
4802
|
this.input_name || (this.input_name = this.name);
|
4392
|
-
this.input_value || (this.input_value = 1);
|
4393
4803
|
return this.label || (this.label = this.name);
|
4394
|
-
}
|
4804
|
+
}
|
4805
|
+
});
|
4806
|
+
|
4807
|
+
checkboxField.publicInterface({
|
4395
4808
|
setValue: function(checked) {
|
4396
4809
|
return this.getInputElement().attr('checked', checked);
|
4397
4810
|
},
|
@@ -4400,10 +4813,20 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4400
4813
|
}
|
4401
4814
|
});
|
4402
4815
|
|
4816
|
+
checkboxField.defines({
|
4817
|
+
version: 1
|
4818
|
+
});
|
4819
|
+
|
4403
4820
|
}).call(this);
|
4404
4821
|
(function() {
|
4822
|
+
var fileUpload;
|
4823
|
+
|
4824
|
+
fileUpload = Luca.register("Luca.fields.FileUploadField");
|
4405
4825
|
|
4406
|
-
|
4826
|
+
fileUpload["extends"]("Luca.core.Field");
|
4827
|
+
|
4828
|
+
fileUpload.defines({
|
4829
|
+
version: 1,
|
4407
4830
|
template: 'fields/file_upload_field',
|
4408
4831
|
afterInitialize: function() {
|
4409
4832
|
this.input_id || (this.input_id = _.uniqueId('field'));
|
@@ -4415,8 +4838,13 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4415
4838
|
|
4416
4839
|
}).call(this);
|
4417
4840
|
(function() {
|
4841
|
+
var hiddenField;
|
4842
|
+
|
4843
|
+
hiddenField = Luca.register("Luca.fields.HiddenField");
|
4844
|
+
|
4845
|
+
hiddenField["extends"]("Luca.core.Field");
|
4418
4846
|
|
4419
|
-
|
4847
|
+
hiddenField.defines({
|
4420
4848
|
template: 'fields/hidden_field',
|
4421
4849
|
afterInitialize: function() {
|
4422
4850
|
this.input_id || (this.input_id = _.uniqueId('field'));
|
@@ -4428,9 +4856,13 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4428
4856
|
|
4429
4857
|
}).call(this);
|
4430
4858
|
(function() {
|
4859
|
+
var labelField;
|
4431
4860
|
|
4432
|
-
|
4433
|
-
|
4861
|
+
labelField = Luca.register("Luca.components.LabelField");
|
4862
|
+
|
4863
|
+
labelField["extends"]("Luca.core.Field");
|
4864
|
+
|
4865
|
+
labelField.defines({
|
4434
4866
|
formatter: function(value) {
|
4435
4867
|
value || (value = this.getValue());
|
4436
4868
|
return _.str.titleize(value);
|
@@ -4444,13 +4876,18 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4444
4876
|
|
4445
4877
|
}).call(this);
|
4446
4878
|
(function() {
|
4879
|
+
var selectField;
|
4880
|
+
|
4881
|
+
selectField = Luca.register("Luca.fields.SelectField");
|
4882
|
+
|
4883
|
+
selectField["extends"]("Luca.core.Field");
|
4447
4884
|
|
4448
|
-
|
4885
|
+
selectField.triggers("after:select");
|
4886
|
+
|
4887
|
+
selectField.defines({
|
4449
4888
|
events: {
|
4450
4889
|
"change select": "change_handler"
|
4451
4890
|
},
|
4452
|
-
hooks: ["after:select"],
|
4453
|
-
className: 'luca-ui-select-field luca-ui-field',
|
4454
4891
|
template: "fields/select_field",
|
4455
4892
|
includeBlank: true,
|
4456
4893
|
blankValue: '',
|
@@ -4458,7 +4895,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4458
4895
|
initialize: function(options) {
|
4459
4896
|
this.options = options != null ? options : {};
|
4460
4897
|
_.extend(this, this.options);
|
4461
|
-
_.extend(this, Luca.
|
4898
|
+
_.extend(this, Luca.concerns.Deferrable);
|
4462
4899
|
_.bindAll(this, "change_handler", "populateOptions", "beforeFetch");
|
4463
4900
|
Luca.core.Field.prototype.initialize.apply(this, arguments);
|
4464
4901
|
this.input_id || (this.input_id = _.uniqueId('field'));
|
@@ -4586,8 +5023,13 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4586
5023
|
|
4587
5024
|
}).call(this);
|
4588
5025
|
(function() {
|
5026
|
+
var textField;
|
5027
|
+
|
5028
|
+
textField = Luca.register('Luca.fields.TextField');
|
4589
5029
|
|
4590
|
-
|
5030
|
+
textField["extends"]('Luca.core.Field');
|
5031
|
+
|
5032
|
+
textField.defines({
|
4591
5033
|
events: {
|
4592
5034
|
"blur input": "blur_handler",
|
4593
5035
|
"focus input": "focus_handler",
|
@@ -4631,9 +5073,13 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4631
5073
|
|
4632
5074
|
}).call(this);
|
4633
5075
|
(function() {
|
5076
|
+
var typeAheadField;
|
5077
|
+
|
5078
|
+
typeAheadField = Luca.register("Luca.fields.TypeAheadField");
|
4634
5079
|
|
4635
|
-
|
4636
|
-
|
5080
|
+
typeAheadField["extends"]("Luca.fields.TextField");
|
5081
|
+
|
5082
|
+
typeAheadField.defines({
|
4637
5083
|
getSource: function() {
|
4638
5084
|
return Luca.util.read(this.source) || [];
|
4639
5085
|
},
|
@@ -4655,13 +5101,19 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4655
5101
|
|
4656
5102
|
}).call(this);
|
4657
5103
|
(function() {
|
5104
|
+
var toolbar;
|
5105
|
+
|
5106
|
+
toolbar = Luca.register("Luca.components.FormButtonToolbar");
|
4658
5107
|
|
4659
|
-
|
5108
|
+
toolbar["extends"]("Luca.components.Toolbar");
|
5109
|
+
|
5110
|
+
toolbar.defines({
|
4660
5111
|
className: 'luca-ui-form-toolbar form-actions',
|
4661
5112
|
position: 'bottom',
|
4662
5113
|
includeReset: false,
|
4663
5114
|
render: function() {
|
4664
|
-
|
5115
|
+
$(this.container).append(this.el);
|
5116
|
+
return this;
|
4665
5117
|
},
|
4666
5118
|
initialize: function(options) {
|
4667
5119
|
this.options = options != null ? options : {};
|
@@ -4685,32 +5137,17 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4685
5137
|
|
4686
5138
|
}).call(this);
|
4687
5139
|
(function() {
|
4688
|
-
var
|
5140
|
+
var formView;
|
4689
5141
|
|
4690
|
-
|
4691
|
-
|
4692
|
-
|
4693
|
-
|
4694
|
-
|
4695
|
-
eventId: "click:reset",
|
4696
|
-
className: "reset-button",
|
4697
|
-
align: 'right'
|
4698
|
-
}, {
|
4699
|
-
icon: "ok-sign",
|
4700
|
-
white: true,
|
4701
|
-
label: "Save Changes",
|
4702
|
-
eventId: "click:submit",
|
4703
|
-
color: "success",
|
4704
|
-
className: 'submit-button',
|
4705
|
-
align: 'right'
|
4706
|
-
}
|
4707
|
-
]
|
4708
|
-
};
|
5142
|
+
formView = Luca.register("Luca.components.FormView");
|
5143
|
+
|
5144
|
+
formView["extends"]("Luca.core.Container");
|
5145
|
+
|
5146
|
+
formView.triggers("before:submit", "before:reset", "before:load", "before:load:new", "before:load:existing", "after:submit", "after:reset", "after:load", "after:load:new", "after:load:existing", "after:submit:success", "after:submit:fatal_error", "after:submit:error");
|
4709
5147
|
|
4710
|
-
|
5148
|
+
formView.defines({
|
4711
5149
|
tagName: 'form',
|
4712
5150
|
className: 'luca-ui-form-view',
|
4713
|
-
hooks: ["before:submit", "before:reset", "before:load", "before:load:new", "before:load:existing", "after:submit", "after:reset", "after:load", "after:load:new", "after:load:existing", "after:submit:success", "after:submit:fatal_error", "after:submit:error"],
|
4714
5151
|
events: {
|
4715
5152
|
"click .submit-button": "submitHandler",
|
4716
5153
|
"click .reset-button": "resetHandler"
|
@@ -4718,13 +5155,13 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4718
5155
|
toolbar: true,
|
4719
5156
|
legend: "",
|
4720
5157
|
bodyClassName: "form-view-body",
|
4721
|
-
version:
|
5158
|
+
version: 1,
|
4722
5159
|
initialize: function(options) {
|
4723
5160
|
this.options = options != null ? options : {};
|
4724
5161
|
if (this.loadMask == null) this.loadMask = Luca.enableBootstrap;
|
4725
5162
|
Luca.core.Container.prototype.initialize.apply(this, arguments);
|
4726
5163
|
this.components || (this.components = this.fields);
|
4727
|
-
_.bindAll(this, "submitHandler", "resetHandler", "renderToolbars"
|
5164
|
+
_.bindAll(this, "submitHandler", "resetHandler", "renderToolbars");
|
4728
5165
|
this.state || (this.state = new Backbone.Model);
|
4729
5166
|
this.setupHooks(this.hooks);
|
4730
5167
|
this.applyStyleClasses();
|
@@ -4738,7 +5175,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4738
5175
|
}
|
4739
5176
|
},
|
4740
5177
|
getDefaultToolbar: function() {
|
4741
|
-
return
|
5178
|
+
return Luca.components.FormView.defaultFormViewToolbar;
|
4742
5179
|
},
|
4743
5180
|
applyStyleClasses: function() {
|
4744
5181
|
if (Luca.enableBootstrap) this.applyBootstrapStyleClasses();
|
@@ -4952,6 +5389,26 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4952
5389
|
}
|
4953
5390
|
});
|
4954
5391
|
|
5392
|
+
Luca.components.FormView.defaultFormViewToolbar = {
|
5393
|
+
buttons: [
|
5394
|
+
{
|
5395
|
+
icon: "remove-sign",
|
5396
|
+
label: "Reset",
|
5397
|
+
eventId: "click:reset",
|
5398
|
+
className: "reset-button",
|
5399
|
+
align: 'right'
|
5400
|
+
}, {
|
5401
|
+
icon: "ok-sign",
|
5402
|
+
white: true,
|
5403
|
+
label: "Save Changes",
|
5404
|
+
eventId: "click:submit",
|
5405
|
+
color: "success",
|
5406
|
+
className: 'submit-button',
|
5407
|
+
align: 'right'
|
5408
|
+
}
|
5409
|
+
]
|
5410
|
+
};
|
5411
|
+
|
4955
5412
|
}).call(this);
|
4956
5413
|
(function() {
|
4957
5414
|
|
@@ -4978,7 +5435,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
4978
5435
|
var _this = this;
|
4979
5436
|
this.options = options != null ? options : {};
|
4980
5437
|
_.extend(this, this.options);
|
4981
|
-
_.extend(this, Luca.
|
5438
|
+
_.extend(this, Luca.concerns.Deferrable);
|
4982
5439
|
if (this.loadMask == null) this.loadMask = Luca.enableBootstrap;
|
4983
5440
|
if (this.loadMask === true) {
|
4984
5441
|
this.loadMaskEl || (this.loadMaskEl = ".luca-ui-g-view-body");
|
@@ -5204,13 +5661,13 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
5204
5661
|
|
5205
5662
|
}).call(this);
|
5206
5663
|
(function() {
|
5207
|
-
var
|
5664
|
+
var multiView, propagateCollectionComponents, validateComponent;
|
5208
5665
|
|
5209
|
-
multiView = Luca.
|
5666
|
+
multiView = Luca.register("Luca.components.MultiCollectionView");
|
5210
5667
|
|
5211
5668
|
multiView["extends"]("Luca.containers.CardView");
|
5212
5669
|
|
5213
|
-
multiView.
|
5670
|
+
multiView.mixesIn("LoadMaskable", "Filterable", "Paginatable");
|
5214
5671
|
|
5215
5672
|
multiView.triggers("before:refresh", "after:refresh", "refresh", "empty:results");
|
5216
5673
|
|
@@ -5230,51 +5687,73 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
5230
5687
|
view = _ref[_i];
|
5231
5688
|
validateComponent(view);
|
5232
5689
|
}
|
5233
|
-
this.on("
|
5690
|
+
this.on("refresh", this.refresh, this);
|
5234
5691
|
this.on("after:card:switch", this.refresh, this);
|
5235
|
-
this.on("
|
5236
|
-
this.
|
5692
|
+
this.on("after:components", propagateCollectionComponents, this);
|
5693
|
+
this.debug("multi collection , proto initialize");
|
5237
5694
|
return Luca.containers.CardView.prototype.initialize.apply(this, arguments);
|
5238
5695
|
},
|
5696
|
+
relayAfterRefresh: function(models, query, options) {
|
5697
|
+
return this.trigger("after:refresh", models, query, options);
|
5698
|
+
},
|
5239
5699
|
refresh: function() {
|
5240
5700
|
var _ref;
|
5241
5701
|
return (_ref = this.activeComponent()) != null ? _ref.trigger("refresh") : void 0;
|
5242
5702
|
},
|
5243
|
-
|
5244
|
-
|
5245
|
-
|
5246
|
-
|
5247
|
-
|
5248
|
-
|
5249
|
-
|
5250
|
-
|
5251
|
-
|
5252
|
-
|
5253
|
-
|
5254
|
-
|
5703
|
+
getCollection: function() {
|
5704
|
+
return this.collection;
|
5705
|
+
},
|
5706
|
+
applyQuery: function(query, queryOptions) {
|
5707
|
+
if (query == null) query = {};
|
5708
|
+
if (queryOptions == null) queryOptions = {};
|
5709
|
+
this.query = query;
|
5710
|
+
this.queryOptions = queryOptions;
|
5711
|
+
return this;
|
5712
|
+
},
|
5713
|
+
getQuery: function() {
|
5714
|
+
var query, querySource, _i, _len, _ref;
|
5715
|
+
this.debug("Get Query");
|
5716
|
+
query = this.query || (this.query = {});
|
5717
|
+
_ref = this.querySources;
|
5255
5718
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
5256
|
-
|
5257
|
-
|
5258
|
-
if (component === container.activeComponent()) {
|
5259
|
-
return container.trigger(eventId);
|
5260
|
-
}
|
5261
|
-
}));
|
5719
|
+
querySource = _ref[_i];
|
5720
|
+
query = _.extend(query, querySource() || {});
|
5262
5721
|
}
|
5263
|
-
return
|
5264
|
-
}
|
5265
|
-
|
5722
|
+
return query;
|
5723
|
+
},
|
5724
|
+
getQueryOptions: function() {
|
5725
|
+
var optionSource, options, _i, _len, _ref;
|
5726
|
+
this.debug("Get Query Options");
|
5727
|
+
options = this.queryOptions || (this.queryOptions = {});
|
5728
|
+
_ref = this.optionsSources;
|
5729
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
5730
|
+
optionSource = _ref[_i];
|
5731
|
+
options = _.extend(options, optionSource() || {});
|
5732
|
+
}
|
5733
|
+
return options;
|
5734
|
+
}
|
5735
|
+
});
|
5266
5736
|
|
5267
5737
|
propagateCollectionComponents = function() {
|
5268
|
-
var component, container, _i, _len, _ref, _results
|
5738
|
+
var component, container, _i, _len, _ref, _results,
|
5739
|
+
_this = this;
|
5269
5740
|
container = this;
|
5270
5741
|
_ref = this.components;
|
5271
5742
|
_results = [];
|
5272
5743
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
5273
5744
|
component = _ref[_i];
|
5745
|
+
component.on("after:refresh", function(models, query, options) {
|
5746
|
+
_this.debug("collection member after refresh");
|
5747
|
+
return _this.trigger("after:refresh", models, query, options);
|
5748
|
+
});
|
5274
5749
|
_results.push(_.extend(component, {
|
5275
|
-
collection:
|
5276
|
-
getQuery:
|
5277
|
-
|
5750
|
+
collection: container.getCollection(),
|
5751
|
+
getQuery: function() {
|
5752
|
+
return container.getQuery.call(container);
|
5753
|
+
},
|
5754
|
+
getQueryOptions: function() {
|
5755
|
+
return container.getQueryOptions.call(container);
|
5756
|
+
}
|
5278
5757
|
}));
|
5279
5758
|
}
|
5280
5759
|
return _results;
|
@@ -5341,8 +5820,12 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
5341
5820
|
"click a.prev": "previousPage"
|
5342
5821
|
},
|
5343
5822
|
afterInitialize: function() {
|
5344
|
-
|
5345
|
-
|
5823
|
+
var _ref,
|
5824
|
+
_this = this;
|
5825
|
+
_.bindAll(this, "updateWithPageCount");
|
5826
|
+
return (_ref = this.state) != null ? _ref.on("change", function(state, numberOfPages) {
|
5827
|
+
return _this.updateWithPageCount(state.get('numberOfPages'));
|
5828
|
+
}) : void 0;
|
5346
5829
|
},
|
5347
5830
|
limit: function() {
|
5348
5831
|
var _ref;
|
@@ -5395,16 +5878,22 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
5395
5878
|
pageButtons: function() {
|
5396
5879
|
return this.$('a[data-page-number]', this.pageButtonContainer());
|
5397
5880
|
},
|
5398
|
-
|
5399
|
-
var
|
5881
|
+
updateWithPageCount: function(pageCount, models) {
|
5882
|
+
var modelCount,
|
5883
|
+
_this = this;
|
5884
|
+
this.pageCount = pageCount;
|
5885
|
+
if (models == null) models = [];
|
5886
|
+
modelCount = models.length;
|
5400
5887
|
this.pageButtonContainer().empty();
|
5401
|
-
|
5402
|
-
button
|
5888
|
+
_(this.pageCount).times(function(index) {
|
5889
|
+
var button, page;
|
5890
|
+
page = index + 1;
|
5891
|
+
button = _this.make("a", {
|
5403
5892
|
"data-page-number": page,
|
5404
5893
|
"class": "page"
|
5405
5894
|
}, page);
|
5406
|
-
|
5407
|
-
}
|
5895
|
+
return _this.pageButtonContainer().append(button);
|
5896
|
+
});
|
5408
5897
|
this.toggleNavigationButtons();
|
5409
5898
|
this.selectActivePageButton();
|
5410
5899
|
return this;
|
@@ -5423,7 +5912,7 @@ null:f.isFunction(a[b])?a[b]():a[b]},o=function(){throw Error('A "url" property
|
|
5423
5912
|
return this.pageButtons().filter("[data-page-number='" + (this.page()) + "']");
|
5424
5913
|
},
|
5425
5914
|
totalPages: function() {
|
5426
|
-
return
|
5915
|
+
return this.pageCount;
|
5427
5916
|
},
|
5428
5917
|
totalItems: function() {
|
5429
5918
|
var _ref;
|