luca 0.9.6 → 0.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
@@ -18,11 +18,13 @@
|
|
18
18
|
};
|
19
19
|
|
20
20
|
_.extend(Luca, {
|
21
|
-
VERSION: "0.9.
|
21
|
+
VERSION: "0.9.7",
|
22
22
|
core: {},
|
23
|
+
collections: {},
|
23
24
|
containers: {},
|
24
25
|
components: {},
|
25
|
-
|
26
|
+
models: {},
|
27
|
+
concerns: {},
|
26
28
|
util: {},
|
27
29
|
fields: {},
|
28
30
|
registry: {},
|
@@ -32,6 +34,12 @@
|
|
32
34
|
|
33
35
|
_.extend(Luca, Backbone.Events);
|
34
36
|
|
37
|
+
Luca.config.maintainStyleHierarchy = true;
|
38
|
+
|
39
|
+
Luca.config.maintainClassHierarchy = true;
|
40
|
+
|
41
|
+
Luca.config.autoApplyClassHierarchyAsCssClasses = true;
|
42
|
+
|
35
43
|
Luca.autoRegister = Luca.config.autoRegister = true;
|
36
44
|
|
37
45
|
Luca.developmentMode = Luca.config.developmentMode = false;
|
@@ -105,36 +113,29 @@
|
|
105
113
|
};
|
106
114
|
|
107
115
|
Luca.inheritanceChain = function(obj) {
|
108
|
-
return
|
109
|
-
return Luca.util.resolve(className);
|
110
|
-
});
|
116
|
+
return Luca.parentClasses(obj);
|
111
117
|
};
|
112
118
|
|
113
119
|
Luca.parentClasses = function(obj) {
|
114
|
-
var
|
120
|
+
var list, metaData, _base;
|
115
121
|
list = [];
|
116
122
|
if (_.isString(obj)) obj = Luca.util.resolve(obj);
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
_results = [];
|
121
|
-
while (!!(Luca.parentClass(obj) != null)) {
|
122
|
-
_results.push(obj = Luca.parentClass(obj));
|
123
|
-
}
|
124
|
-
return _results;
|
125
|
-
})();
|
126
|
-
list = list.concat(classes);
|
127
|
-
return _.uniq(list);
|
123
|
+
metaData = typeof obj.componentMetaData === "function" ? obj.componentMetaData() : void 0;
|
124
|
+
metaData || (metaData = typeof (_base = obj.prototype).componentMetaData === "function" ? _base.componentMetaData() : void 0);
|
125
|
+
return list = (metaData != null ? metaData.classHierarchy() : void 0) || [obj.displayName || obj.prototype.displayName];
|
128
126
|
};
|
129
127
|
|
130
|
-
Luca.parentClass = function(obj) {
|
131
|
-
var
|
132
|
-
|
128
|
+
Luca.parentClass = function(obj, resolve) {
|
129
|
+
var parent, _base, _ref, _ref2, _ref3;
|
130
|
+
if (resolve == null) resolve = true;
|
133
131
|
if (_.isString(obj)) obj = Luca.util.resolve(obj);
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
132
|
+
parent = typeof obj.componentMetaData === "function" ? (_ref = obj.componentMetaData()) != null ? _ref.meta["super class name"] : void 0 : void 0;
|
133
|
+
parent || (parent = typeof (_base = obj.prototype).componentMetaData === "function" ? (_ref2 = _base.componentMetaData()) != null ? _ref2.meta["super class name"] : void 0 : void 0);
|
134
|
+
parent || obj.displayName || ((_ref3 = obj.prototype) != null ? _ref3.displayName : void 0);
|
135
|
+
if (resolve) {
|
136
|
+
return Luca.util.resolve(parent);
|
137
|
+
} else {
|
138
|
+
return parent;
|
138
139
|
}
|
139
140
|
};
|
140
141
|
|
@@ -374,6 +375,25 @@
|
|
374
375
|
return fn = prefix + parts.join('');
|
375
376
|
};
|
376
377
|
|
378
|
+
Luca.util.toCssClass = function() {
|
379
|
+
var componentName, exclusions, part, parts, transformed;
|
380
|
+
componentName = arguments[0], exclusions = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
381
|
+
parts = componentName.split('.');
|
382
|
+
transformed = (function() {
|
383
|
+
var _i, _len, _results;
|
384
|
+
_results = [];
|
385
|
+
for (_i = 0, _len = parts.length; _i < _len; _i++) {
|
386
|
+
part = parts[_i];
|
387
|
+
if (!(_(exclusions).indexOf(part) === -1)) continue;
|
388
|
+
part = _.str.underscored(part);
|
389
|
+
part = part.replace(/_/g, '-');
|
390
|
+
_results.push(part);
|
391
|
+
}
|
392
|
+
return _results;
|
393
|
+
})();
|
394
|
+
return transformed.join('-');
|
395
|
+
};
|
396
|
+
|
377
397
|
Luca.util.isIE = function() {
|
378
398
|
try {
|
379
399
|
Object.defineProperty({}, '', {});
|
@@ -468,6 +488,48 @@
|
|
468
488
|
}, contents);
|
469
489
|
};
|
470
490
|
|
491
|
+
Luca.util.setupHooks = function(set) {
|
492
|
+
var _this = this;
|
493
|
+
set || (set = this.hooks);
|
494
|
+
return _(set).each(function(eventId) {
|
495
|
+
var callback, fn;
|
496
|
+
fn = Luca.util.hook(eventId);
|
497
|
+
callback = function() {
|
498
|
+
var _ref;
|
499
|
+
return (_ref = this[fn]) != null ? _ref.apply(this, arguments) : void 0;
|
500
|
+
};
|
501
|
+
if (eventId != null ? eventId.match(/once:/) : void 0) {
|
502
|
+
callback = _.once(callback);
|
503
|
+
}
|
504
|
+
return _this.on(eventId, callback, _this);
|
505
|
+
});
|
506
|
+
};
|
507
|
+
|
508
|
+
Luca.util.setupHooksAdvanced = function(set) {
|
509
|
+
var _this = this;
|
510
|
+
set || (set = this.hooks);
|
511
|
+
return _(set).each(function(eventId) {
|
512
|
+
var callback, entry, fn, hookSetup, _i, _len, _results;
|
513
|
+
hookSetup = _this[Luca.util.hook(eventId)];
|
514
|
+
if (!_.isArray(hookSetup)) hookSetup = [hookSetup];
|
515
|
+
_results = [];
|
516
|
+
for (_i = 0, _len = hookSetup.length; _i < _len; _i++) {
|
517
|
+
entry = hookSetup[_i];
|
518
|
+
fn = _.isString(entry) ? _this[entry] : void 0;
|
519
|
+
if (_.isFunction(entry)) fn = entry;
|
520
|
+
callback = function() {
|
521
|
+
var _ref;
|
522
|
+
return (_ref = this[fn]) != null ? _ref.apply(this, arguments) : void 0;
|
523
|
+
};
|
524
|
+
if (eventId != null ? eventId.match(/once:/) : void 0) {
|
525
|
+
callback = _.once(callback);
|
526
|
+
}
|
527
|
+
_results.push(_this.on(eventId, callback, _this));
|
528
|
+
}
|
529
|
+
return _results;
|
530
|
+
});
|
531
|
+
};
|
532
|
+
|
471
533
|
}).call(this);
|
472
534
|
(function() {
|
473
535
|
|
@@ -624,6 +686,92 @@
|
|
624
686
|
}
|
625
687
|
};
|
626
688
|
|
689
|
+
}).call(this);
|
690
|
+
(function() {
|
691
|
+
|
692
|
+
Luca.concern = function(mixinName) {
|
693
|
+
var namespace, resolved;
|
694
|
+
namespace = _(Luca.concern.namespaces).detect(function(space) {
|
695
|
+
var _ref;
|
696
|
+
return ((_ref = Luca.util.resolve(space)) != null ? _ref[mixinName] : void 0) != null;
|
697
|
+
});
|
698
|
+
namespace || (namespace = "Luca.concerns");
|
699
|
+
resolved = Luca.util.resolve(namespace)[mixinName];
|
700
|
+
if (resolved == null) {
|
701
|
+
console.log("Could not find " + mixinName + " in ", Luca.concern.namespaces);
|
702
|
+
}
|
703
|
+
return resolved;
|
704
|
+
};
|
705
|
+
|
706
|
+
Luca.concern.namespaces = ["Luca.concerns"];
|
707
|
+
|
708
|
+
Luca.concern.namespace = function(namespace) {
|
709
|
+
Luca.concern.namespaces.push(namespace);
|
710
|
+
return Luca.concern.namespaces = _(Luca.concern.namespaces).uniq();
|
711
|
+
};
|
712
|
+
|
713
|
+
Luca.concern.setup = function() {
|
714
|
+
var module, _i, _len, _ref, _ref2, _ref3, _ref4, _results;
|
715
|
+
if (((_ref = this.concerns) != null ? _ref.length : void 0) > 0) {
|
716
|
+
_ref2 = this.concerns;
|
717
|
+
_results = [];
|
718
|
+
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
719
|
+
module = _ref2[_i];
|
720
|
+
_results.push((_ref3 = Luca.concern(module)) != null ? (_ref4 = _ref3.__initializer) != null ? _ref4.call(this, this, module) : void 0 : void 0);
|
721
|
+
}
|
722
|
+
return _results;
|
723
|
+
}
|
724
|
+
};
|
725
|
+
|
726
|
+
Luca.decorate = function(target) {
|
727
|
+
var componentClass, componentName, componentPrototype;
|
728
|
+
try {
|
729
|
+
if (_.isString(target)) {
|
730
|
+
componentName = target;
|
731
|
+
componentClass = Luca.util.resolve(componentName);
|
732
|
+
}
|
733
|
+
if (_.isFunction(target)) componentClass = target;
|
734
|
+
componentPrototype = componentClass.prototype;
|
735
|
+
componentName = componentName || componentClass.displayName;
|
736
|
+
componentName || (componentName = componentPrototype.displayName);
|
737
|
+
} catch (e) {
|
738
|
+
console.log(e.message);
|
739
|
+
console.log(e.stack);
|
740
|
+
console.log("Error calling Luca.decorate on ", componentClass, componentPrototype, componentName);
|
741
|
+
throw e;
|
742
|
+
}
|
743
|
+
return {
|
744
|
+
"with": function(mixinName) {
|
745
|
+
var fn, method, mixinDefinition, mixinPrivates, sanitized, superclassMixins, _ref;
|
746
|
+
mixinDefinition = Luca.concern(mixinName);
|
747
|
+
mixinDefinition.__displayName || (mixinDefinition.__displayName = mixinName);
|
748
|
+
mixinPrivates = _(mixinDefinition).chain().keys().select(function(key) {
|
749
|
+
return ("" + key).match(/^__/) || key === "classMethods";
|
750
|
+
});
|
751
|
+
sanitized = _(mixinDefinition).omit(mixinPrivates.value());
|
752
|
+
_.extend(componentPrototype, sanitized);
|
753
|
+
if (mixinDefinition.classMethods != null) {
|
754
|
+
_ref = mixinDefinition.classMethods;
|
755
|
+
for (method in _ref) {
|
756
|
+
fn = _ref[method];
|
757
|
+
componentClass[method] = _.bind(fn, componentClass);
|
758
|
+
}
|
759
|
+
}
|
760
|
+
if (mixinDefinition != null) {
|
761
|
+
if (typeof mixinDefinition.__included === "function") {
|
762
|
+
mixinDefinition.__included(componentName, componentClass, mixinDefinition);
|
763
|
+
}
|
764
|
+
}
|
765
|
+
superclassMixins = componentPrototype._superClass().prototype.concerns;
|
766
|
+
componentPrototype.concerns || (componentPrototype.concerns = []);
|
767
|
+
componentPrototype.concerns.push(mixinName);
|
768
|
+
componentPrototype.concerns = componentPrototype.concerns.concat(superclassMixins);
|
769
|
+
componentPrototype.concerns = _(componentPrototype.concerns).chain().uniq().compact().value();
|
770
|
+
return componentPrototype;
|
771
|
+
}
|
772
|
+
};
|
773
|
+
};
|
774
|
+
|
627
775
|
}).call(this);
|
628
776
|
(function() {
|
629
777
|
var DefineProxy,
|
@@ -632,7 +780,8 @@
|
|
632
780
|
_.mixin({
|
633
781
|
def: Luca.component = Luca.define = Luca.register = function(componentName) {
|
634
782
|
return new DefineProxy(componentName);
|
635
|
-
}
|
783
|
+
},
|
784
|
+
register: Luca.register
|
636
785
|
});
|
637
786
|
|
638
787
|
DefineProxy = (function() {
|
@@ -642,6 +791,7 @@
|
|
642
791
|
this.namespace = Luca.util.namespace();
|
643
792
|
this.componentId = this.componentName = componentName;
|
644
793
|
this.superClassName = 'Luca.View';
|
794
|
+
this.properties || (this.properties = {});
|
645
795
|
if (componentName.match(/\./)) {
|
646
796
|
this.namespaced = true;
|
647
797
|
parts = componentName.split('.');
|
@@ -651,6 +801,16 @@
|
|
651
801
|
}
|
652
802
|
}
|
653
803
|
|
804
|
+
DefineProxy.prototype.meta = function(key, value) {
|
805
|
+
var data, metaKey;
|
806
|
+
metaKey = this.namespace + '.' + this.componentId;
|
807
|
+
metaKey = metaKey.replace(/^\./, '');
|
808
|
+
data = Luca.registry.addMetaData(metaKey, key, value);
|
809
|
+
return this.properties.componentMetaData = function() {
|
810
|
+
return Luca.registry.getMetaDataFor(metaKey);
|
811
|
+
};
|
812
|
+
};
|
813
|
+
|
654
814
|
DefineProxy.prototype["in"] = function(namespace) {
|
655
815
|
this.namespace = namespace;
|
656
816
|
return this;
|
@@ -682,6 +842,7 @@
|
|
682
842
|
this.properties.hooks.push(hook);
|
683
843
|
}
|
684
844
|
this.properties.hooks = _.uniq(this.properties.hooks);
|
845
|
+
this.meta("hooks", this.properties.hooks);
|
685
846
|
return this;
|
686
847
|
};
|
687
848
|
|
@@ -696,25 +857,51 @@
|
|
696
857
|
this.properties.include.push(include);
|
697
858
|
}
|
698
859
|
this.properties.include = _.uniq(this.properties.include);
|
860
|
+
this.meta("includes", this.properties.include);
|
699
861
|
return this;
|
700
862
|
};
|
701
863
|
|
702
864
|
DefineProxy.prototype.mixesIn = function() {
|
703
|
-
var
|
704
|
-
|
865
|
+
var concern, concerns, _i, _len;
|
866
|
+
concerns = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
|
705
867
|
_.defaults(this.properties || (this.properties = {}), {
|
706
|
-
|
868
|
+
concerns: []
|
707
869
|
});
|
708
|
-
for (_i = 0, _len =
|
709
|
-
|
710
|
-
this.properties.
|
870
|
+
for (_i = 0, _len = concerns.length; _i < _len; _i++) {
|
871
|
+
concern = concerns[_i];
|
872
|
+
this.properties.concerns.push(concern);
|
711
873
|
}
|
712
|
-
this.properties.
|
874
|
+
this.properties.concerns = _.uniq(this.properties.concerns);
|
875
|
+
this.meta("concerns", this.properties.concerns);
|
713
876
|
return this;
|
714
877
|
};
|
715
878
|
|
716
|
-
DefineProxy.prototype.
|
717
|
-
|
879
|
+
DefineProxy.prototype.publicConfiguration = function(properties) {
|
880
|
+
if (properties == null) properties = {};
|
881
|
+
this.meta("public configuration", _.keys(properties));
|
882
|
+
return _.defaults((this.properties || (this.properties = {})), properties);
|
883
|
+
};
|
884
|
+
|
885
|
+
DefineProxy.prototype.privateConfiguration = function(properties) {
|
886
|
+
if (properties == null) properties = {};
|
887
|
+
this.meta("private configuration", _.keys(properties));
|
888
|
+
return _.defaults((this.properties || (this.properties = {})), properties);
|
889
|
+
};
|
890
|
+
|
891
|
+
DefineProxy.prototype.publicInterface = function(properties) {
|
892
|
+
if (properties == null) properties = {};
|
893
|
+
this.meta("public interface", _.keys(properties));
|
894
|
+
return _.defaults((this.properties || (this.properties = {})), properties);
|
895
|
+
};
|
896
|
+
|
897
|
+
DefineProxy.prototype.privateInterface = function(properties) {
|
898
|
+
if (properties == null) properties = {};
|
899
|
+
this.meta("private interface", _.keys(properties));
|
900
|
+
return _.defaults((this.properties || (this.properties = {})), properties);
|
901
|
+
};
|
902
|
+
|
903
|
+
DefineProxy.prototype.definePrototype = function(properties) {
|
904
|
+
var at, componentType, definition, _base;
|
718
905
|
if (properties == null) properties = {};
|
719
906
|
_.defaults((this.properties || (this.properties = {})), properties);
|
720
907
|
at = this.namespaced ? Luca.util.resolve(this.namespace, window || global) : window || global;
|
@@ -722,35 +909,40 @@
|
|
722
909
|
eval("(window||global)." + this.namespace + " = {}");
|
723
910
|
at = Luca.util.resolve(this.namespace, window || global);
|
724
911
|
}
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
912
|
+
this.meta("super class name", this.superClassName);
|
913
|
+
this.meta("display name", this.componentName);
|
914
|
+
this.properties.displayName = this.componentName;
|
915
|
+
this.properties.componentMetaData = function() {
|
916
|
+
return Luca.registry.getMetaDataFor(this.displayName);
|
917
|
+
};
|
918
|
+
definition = at[this.componentId] = Luca.extend(this.superClassName, this.componentName, this.properties);
|
919
|
+
if (Luca.config.autoRegister === true) {
|
920
|
+
if (Luca.isViewPrototype(definition)) componentType = "view";
|
921
|
+
if (Luca.isCollectionPrototype(definition)) {
|
729
922
|
(_base = Luca.Collection).namespaces || (_base.namespaces = []);
|
730
923
|
Luca.Collection.namespaces.push(this.namespace);
|
731
924
|
componentType = "collection";
|
732
925
|
}
|
733
|
-
if (Luca.isModelPrototype(
|
926
|
+
if (Luca.isModelPrototype(definition)) componentType = "model";
|
734
927
|
Luca.registerComponent(_.string.underscored(this.componentId), this.componentName, componentType);
|
735
928
|
}
|
736
|
-
return
|
929
|
+
return definition;
|
737
930
|
};
|
738
931
|
|
739
932
|
return DefineProxy;
|
740
933
|
|
741
934
|
})();
|
742
935
|
|
743
|
-
DefineProxy.prototype.behavesAs = DefineProxy.prototype.uses = DefineProxy.prototype.mixesIn;
|
936
|
+
DefineProxy.prototype.concerns = DefineProxy.prototype.behavesAs = DefineProxy.prototype.uses = DefineProxy.prototype.mixesIn;
|
744
937
|
|
745
|
-
DefineProxy.prototype.defines = DefineProxy.prototype.defaults = DefineProxy.prototype.exports = DefineProxy.prototype.defaultProperties;
|
938
|
+
DefineProxy.prototype.defines = DefineProxy.prototype.defaults = DefineProxy.prototype.exports = DefineProxy.prototype.defaultProperties = DefineProxy.prototype.definePrototype;
|
746
939
|
|
747
|
-
DefineProxy.prototype.defaultsTo = DefineProxy.prototype.enhance = DefineProxy.prototype["with"] = DefineProxy.prototype.
|
940
|
+
DefineProxy.prototype.defaultsTo = DefineProxy.prototype.enhance = DefineProxy.prototype["with"] = DefineProxy.prototype.definePrototype;
|
748
941
|
|
749
942
|
Luca.extend = function(superClassName, childName, properties) {
|
750
943
|
var definition, include, superClass, _i, _len, _ref;
|
751
944
|
if (properties == null) properties = {};
|
752
945
|
superClass = Luca.util.resolve(superClassName, window || global);
|
753
|
-
superClass.__initializers || (superClass.__initializers = []);
|
754
946
|
if (!_.isFunction(superClass != null ? superClass.extend : void 0)) {
|
755
947
|
throw "Error defining " + childName + ". " + superClassName + " is not a valid component to extend from";
|
756
948
|
}
|
@@ -777,59 +969,10 @@
|
|
777
969
|
return definition;
|
778
970
|
};
|
779
971
|
|
780
|
-
Luca.mixin = function(mixinName) {
|
781
|
-
var namespace, resolved;
|
782
|
-
namespace = _(Luca.mixin.namespaces).detect(function(space) {
|
783
|
-
var _ref;
|
784
|
-
return ((_ref = Luca.util.resolve(space)) != null ? _ref[mixinName] : void 0) != null;
|
785
|
-
});
|
786
|
-
namespace || (namespace = "Luca.modules");
|
787
|
-
resolved = Luca.util.resolve(namespace)[mixinName];
|
788
|
-
if (resolved == null) {
|
789
|
-
console.log("Could not find " + mixinName + " in ", Luca.mixin.namespaces);
|
790
|
-
}
|
791
|
-
return resolved;
|
792
|
-
};
|
793
|
-
|
794
|
-
Luca.mixin.namespaces = ["Luca.modules"];
|
795
|
-
|
796
|
-
Luca.mixin.namespace = function(namespace) {
|
797
|
-
Luca.mixin.namespaces.push(namespace);
|
798
|
-
return Luca.mixin.namespaces = _(Luca.mixin.namespaces).uniq();
|
799
|
-
};
|
800
|
-
|
801
|
-
Luca.decorate = function(componentPrototype) {
|
802
|
-
if (_.isString(componentPrototype)) {
|
803
|
-
componentPrototype = Luca.util.resolve(componentPrototype).prototype;
|
804
|
-
}
|
805
|
-
return {
|
806
|
-
"with": function(mixin) {
|
807
|
-
var mixinDefinition, mixinPrivates, sanitized, superclassMixins, _ref;
|
808
|
-
mixinDefinition = Luca.mixin(mixin);
|
809
|
-
mixinPrivates = _(mixinDefinition).chain().keys().select(function(key) {
|
810
|
-
return ("" + key).match(/^__/);
|
811
|
-
});
|
812
|
-
sanitized = _(mixinDefinition).omit(mixinPrivates.value());
|
813
|
-
_.extend(componentPrototype, sanitized);
|
814
|
-
if (mixinDefinition != null) {
|
815
|
-
if ((_ref = mixinDefinition.__included) != null) {
|
816
|
-
_ref.call(mixinDefinition, mixin);
|
817
|
-
}
|
818
|
-
}
|
819
|
-
superclassMixins = componentPrototype._superClass().prototype.mixins;
|
820
|
-
componentPrototype.mixins || (componentPrototype.mixins = []);
|
821
|
-
componentPrototype.mixins.push(mixin);
|
822
|
-
componentPrototype.mixins = componentPrototype.mixins.concat(superclassMixins);
|
823
|
-
componentPrototype.mixins = _(componentPrototype.mixins).chain().uniq().compact().value();
|
824
|
-
return componentPrototype;
|
825
|
-
}
|
826
|
-
};
|
827
|
-
};
|
828
|
-
|
829
972
|
}).call(this);
|
830
973
|
(function() {
|
831
974
|
|
832
|
-
Luca.
|
975
|
+
Luca.concerns.ApplicationEventBindings = {
|
833
976
|
__initializer: function() {
|
834
977
|
var app, eventTrigger, handler, _len, _ref, _ref2, _results;
|
835
978
|
if (_.isEmpty(this.applicationEvents)) return;
|
@@ -857,7 +1000,7 @@
|
|
857
1000
|
}).call(this);
|
858
1001
|
(function() {
|
859
1002
|
|
860
|
-
Luca.
|
1003
|
+
Luca.concerns.CollectionEventBindings = {
|
861
1004
|
__initializer: function() {
|
862
1005
|
var collection, eventTrigger, handler, key, manager, signature, _ref, _ref2, _results;
|
863
1006
|
if (_.isEmpty(this.collectionEvents)) return;
|
@@ -885,7 +1028,7 @@
|
|
885
1028
|
}).call(this);
|
886
1029
|
(function() {
|
887
1030
|
|
888
|
-
Luca.
|
1031
|
+
Luca.concerns.Deferrable = {
|
889
1032
|
configure_collection: function(setAsDeferrable) {
|
890
1033
|
var collectionManager, _ref, _ref2;
|
891
1034
|
if (setAsDeferrable == null) setAsDeferrable = true;
|
@@ -906,9 +1049,9 @@
|
|
906
1049
|
}).call(this);
|
907
1050
|
(function() {
|
908
1051
|
|
909
|
-
Luca.
|
1052
|
+
Luca.concerns.DomHelpers = {
|
910
1053
|
__initializer: function() {
|
911
|
-
var additional, additionalClasses, _i, _len, _results;
|
1054
|
+
var additional, additionalClasses, classes, cssClass, _i, _j, _len, _len2, _ref, _results;
|
912
1055
|
additionalClasses = _(this.additionalClassNames || []).clone();
|
913
1056
|
if (this.wrapperClass != null) this.$wrap(this.wrapperClass);
|
914
1057
|
if (_.isString(additionalClasses)) {
|
@@ -919,21 +1062,34 @@
|
|
919
1062
|
if (this.gridRowFluid) additionalClasses.push("row-fluid");
|
920
1063
|
if (this.gridRow) additionalClasses.push("row");
|
921
1064
|
if (additionalClasses == null) return;
|
922
|
-
_results = [];
|
923
1065
|
for (_i = 0, _len = additionalClasses.length; _i < _len; _i++) {
|
924
1066
|
additional = additionalClasses[_i];
|
925
|
-
|
1067
|
+
this.$el.addClass(additional);
|
1068
|
+
}
|
1069
|
+
if (Luca.config.autoApplyClassHierarchyAsCssClasses === true) {
|
1070
|
+
classes = (typeof this.componentMetaData === "function" ? (_ref = this.componentMetaData()) != null ? _ref.styleHierarchy() : void 0 : void 0) || [];
|
1071
|
+
_results = [];
|
1072
|
+
for (_j = 0, _len2 = classes.length; _j < _len2; _j++) {
|
1073
|
+
cssClass = classes[_j];
|
1074
|
+
if (cssClass !== "luca-view" && cssClass !== "backbone-view") {
|
1075
|
+
_results.push(this.$el.addClass(cssClass));
|
1076
|
+
}
|
1077
|
+
}
|
1078
|
+
return _results;
|
926
1079
|
}
|
927
|
-
return _results;
|
928
1080
|
},
|
929
1081
|
$wrap: function(wrapper) {
|
930
1082
|
if (_.isString(wrapper) && !wrapper.match(/[<>]/)) {
|
931
1083
|
wrapper = this.make("div", {
|
932
|
-
"class": wrapper
|
1084
|
+
"class": wrapper,
|
1085
|
+
"data-wrapper": true
|
933
1086
|
});
|
934
1087
|
}
|
935
1088
|
return this.$el.wrap(wrapper);
|
936
1089
|
},
|
1090
|
+
$wrapper: function() {
|
1091
|
+
return this.$el.parent('[data-wrapper="true"]');
|
1092
|
+
},
|
937
1093
|
$template: function(template, variables) {
|
938
1094
|
if (variables == null) variables = {};
|
939
1095
|
return this.$el.html(Luca.template(template, variables));
|
@@ -958,7 +1114,7 @@
|
|
958
1114
|
}).call(this);
|
959
1115
|
(function() {
|
960
1116
|
|
961
|
-
Luca.
|
1117
|
+
Luca.concerns.EnhancedProperties = {
|
962
1118
|
__initializer: function() {
|
963
1119
|
if (Luca.config.enhancedViewProperties !== true) return;
|
964
1120
|
if (_.isString(this.collection) && Luca.CollectionManager.get()) {
|
@@ -977,50 +1133,56 @@
|
|
977
1133
|
__hasProp = Object.prototype.hasOwnProperty,
|
978
1134
|
__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; };
|
979
1135
|
|
980
|
-
Luca.
|
1136
|
+
Luca.concerns.Filterable = {
|
981
1137
|
__included: function(component, module) {
|
982
1138
|
return _.extend(Luca.Collection.prototype, {
|
983
1139
|
__filters: {}
|
984
1140
|
});
|
985
1141
|
},
|
986
1142
|
__initializer: function(component, module) {
|
987
|
-
var filter,
|
1143
|
+
var filter, _base, _ref,
|
988
1144
|
_this = this;
|
989
|
-
if (this.filterable === false
|
1145
|
+
if (this.filterable === false) return;
|
1146
|
+
if (!Luca.isBackboneCollection(this.collection)) {
|
1147
|
+
this.collection = typeof (_base = Luca.CollectionManager).get === "function" ? (_ref = _base.get()) != null ? _ref.getOrCreate(this.collection) : void 0 : void 0;
|
1148
|
+
}
|
1149
|
+
if (!Luca.isBackboneCollection(this.collection)) {
|
1150
|
+
this.debug("Skipping Filterable due to no collection being present on " + (this.name || this.cid));
|
1151
|
+
this.debug("Collection", this.collection);
|
990
1152
|
return;
|
991
1153
|
}
|
992
1154
|
this.getCollection || (this.getCollection = function() {
|
993
1155
|
return this.collection;
|
994
1156
|
});
|
995
1157
|
filter = this.getFilterState();
|
996
|
-
|
997
|
-
|
998
|
-
|
1158
|
+
this.querySources || (this.querySources = []);
|
1159
|
+
this.optionsSources || (this.optionsSources = []);
|
1160
|
+
this.query || (this.query = {});
|
1161
|
+
this.queryOptions || (this.queryOptions = {});
|
1162
|
+
this.querySources.push((function() {
|
1163
|
+
return filter.toQuery();
|
1164
|
+
}));
|
1165
|
+
this.optionsSources.push((function() {
|
1166
|
+
return filter.toOptions();
|
1167
|
+
}));
|
1168
|
+
if (this.debugMode === true) {
|
1169
|
+
console.log("Filterable");
|
1170
|
+
console.log(this.querySources);
|
1171
|
+
console.log(this.optionsSources);
|
1172
|
+
}
|
1173
|
+
filter.on("change", function() {
|
1174
|
+
var merged;
|
1175
|
+
if (_this.isRemote()) {
|
1176
|
+
merged = _.extend(_this.getQuery(), _this.getQueryOptions());
|
1177
|
+
return _this.collection.applyFilter(merged, _this.getQueryOptions());
|
1178
|
+
} else {
|
1179
|
+
return _this.trigger("refresh");
|
1180
|
+
}
|
999
1181
|
});
|
1000
|
-
|
1001
|
-
|
1002
|
-
|
1003
|
-
|
1004
|
-
obj = _.clone(query);
|
1005
|
-
return _.extend(obj, filter.toQuery());
|
1006
|
-
});
|
1007
|
-
} else {
|
1008
|
-
this.getQuery = function() {
|
1009
|
-
return filter.toQuery();
|
1010
|
-
};
|
1011
|
-
}
|
1012
|
-
if (this.getQueryOptions != null) {
|
1013
|
-
return this.getQueryOptions = _.compose(this.getQueryOptions, function(options) {
|
1014
|
-
var obj;
|
1015
|
-
if (options == null) options = {};
|
1016
|
-
obj = _.clone(options);
|
1017
|
-
return _.extend(obj, filter.toOptions());
|
1018
|
-
});
|
1019
|
-
} else {
|
1020
|
-
return this.getQueryOptions = function() {
|
1021
|
-
return filter.toOptions();
|
1022
|
-
};
|
1023
|
-
}
|
1182
|
+
return module;
|
1183
|
+
},
|
1184
|
+
isRemote: function() {
|
1185
|
+
return this.getQueryOptions().remote === true;
|
1024
1186
|
},
|
1025
1187
|
getFilterState: function() {
|
1026
1188
|
var _base, _name;
|
@@ -1031,18 +1193,14 @@
|
|
1031
1193
|
return this.getFilterState().setOption('sortBy', sortBy, options);
|
1032
1194
|
},
|
1033
1195
|
applyFilter: function(query, options) {
|
1034
|
-
var silent;
|
1035
1196
|
if (query == null) query = {};
|
1036
1197
|
if (options == null) options = {};
|
1037
1198
|
options = _.defaults(options, this.getQueryOptions());
|
1038
1199
|
query = _.defaults(query, this.getQuery());
|
1039
|
-
silent = _(options)["delete"]('silent') === true;
|
1040
1200
|
return this.getFilterState().set({
|
1041
1201
|
query: query,
|
1042
1202
|
options: options
|
1043
|
-
},
|
1044
|
-
silent: silent
|
1045
|
-
});
|
1203
|
+
}, options);
|
1046
1204
|
}
|
1047
1205
|
};
|
1048
1206
|
|
@@ -1054,6 +1212,11 @@
|
|
1054
1212
|
FilterModel.__super__.constructor.apply(this, arguments);
|
1055
1213
|
}
|
1056
1214
|
|
1215
|
+
FilterModel.prototype.defaults = {
|
1216
|
+
options: {},
|
1217
|
+
query: {}
|
1218
|
+
};
|
1219
|
+
|
1057
1220
|
FilterModel.prototype.setOption = function(option, value, options) {
|
1058
1221
|
var payload;
|
1059
1222
|
payload = {};
|
@@ -1076,6 +1239,16 @@
|
|
1076
1239
|
return this.toJSON().query;
|
1077
1240
|
};
|
1078
1241
|
|
1242
|
+
FilterModel.prototype.toRemote = function() {
|
1243
|
+
var options;
|
1244
|
+
options = this.toOptions();
|
1245
|
+
return _.extend(this.toQuery(), {
|
1246
|
+
limit: options.limit,
|
1247
|
+
page: options.page,
|
1248
|
+
sortBy: options.sortBy
|
1249
|
+
});
|
1250
|
+
};
|
1251
|
+
|
1079
1252
|
return FilterModel;
|
1080
1253
|
|
1081
1254
|
})(Backbone.Model);
|
@@ -1083,7 +1256,7 @@
|
|
1083
1256
|
}).call(this);
|
1084
1257
|
(function() {
|
1085
1258
|
|
1086
|
-
Luca.
|
1259
|
+
Luca.concerns.GridLayout = {
|
1087
1260
|
_initializer: function() {
|
1088
1261
|
if (this.gridSpan) this.$el.addClass("span" + this.gridSpan);
|
1089
1262
|
if (this.gridOffset) this.$el.addClass("offset" + this.gridOffset);
|
@@ -1095,7 +1268,7 @@
|
|
1095
1268
|
}).call(this);
|
1096
1269
|
(function() {
|
1097
1270
|
|
1098
|
-
Luca.
|
1271
|
+
Luca.concerns.LoadMaskable = {
|
1099
1272
|
__initializer: function() {
|
1100
1273
|
var _this = this;
|
1101
1274
|
if (this.loadMask !== true) return;
|
@@ -1242,7 +1415,7 @@
|
|
1242
1415
|
(function() {
|
1243
1416
|
var applyModalConfig;
|
1244
1417
|
|
1245
|
-
Luca.
|
1418
|
+
Luca.concerns.ModalView = {
|
1246
1419
|
closeOnEscape: true,
|
1247
1420
|
showOnInitialize: false,
|
1248
1421
|
backdrop: false,
|
@@ -1280,7 +1453,38 @@
|
|
1280
1453
|
}).call(this);
|
1281
1454
|
(function() {
|
1282
1455
|
|
1283
|
-
Luca.
|
1456
|
+
Luca.concerns.ModelPresenter = {
|
1457
|
+
classMethods: {
|
1458
|
+
getPresenter: function(format) {
|
1459
|
+
var _ref;
|
1460
|
+
return (_ref = this.presenters) != null ? _ref[format] : void 0;
|
1461
|
+
},
|
1462
|
+
registerPresenter: function(format, config) {
|
1463
|
+
this.presenters || (this.presenters = {});
|
1464
|
+
return this.presenters[format] = config;
|
1465
|
+
}
|
1466
|
+
},
|
1467
|
+
presentAs: function(format) {
|
1468
|
+
var attributeList,
|
1469
|
+
_this = this;
|
1470
|
+
try {
|
1471
|
+
attributeList = this.componentMetaData().componentDefinition().getPresenter(format);
|
1472
|
+
if (attributeList == null) return this.toJSON();
|
1473
|
+
return _(attributeList).reduce(function(memo, attribute) {
|
1474
|
+
memo[attribute] = _this.read(attribute);
|
1475
|
+
return memo;
|
1476
|
+
}, {});
|
1477
|
+
} catch (e) {
|
1478
|
+
console.log("Error presentAs", e.stack, e.message);
|
1479
|
+
return this.toJSON();
|
1480
|
+
}
|
1481
|
+
}
|
1482
|
+
};
|
1483
|
+
|
1484
|
+
}).call(this);
|
1485
|
+
(function() {
|
1486
|
+
|
1487
|
+
Luca.concerns.Paginatable = {
|
1284
1488
|
paginatorViewClass: 'Luca.components.PaginationControl',
|
1285
1489
|
paginationSelector: ".toolbar.bottom",
|
1286
1490
|
__included: function() {
|
@@ -1289,38 +1493,54 @@
|
|
1289
1493
|
});
|
1290
1494
|
},
|
1291
1495
|
__initializer: function() {
|
1292
|
-
var collection,
|
1496
|
+
var collection, paginationState, _base, _ref,
|
1293
1497
|
_this = this;
|
1294
|
-
if (this.paginatable === false
|
1498
|
+
if (this.paginatable === false) return;
|
1499
|
+
if (!Luca.isBackboneCollection(this.collection)) {
|
1500
|
+
this.collection = typeof (_base = Luca.CollectionManager).get === "function" ? (_ref = _base.get()) != null ? _ref.getOrCreate(this.collection) : void 0 : void 0;
|
1501
|
+
}
|
1502
|
+
if (!Luca.isBackboneCollection(this.collection)) {
|
1503
|
+
this.debug("Skipping Paginatable due to no collection being present on " + (this.name || this.cid));
|
1504
|
+
this.debug("collection", this.collection);
|
1295
1505
|
return;
|
1296
1506
|
}
|
1297
|
-
_.bindAll(this, "paginationControl");
|
1507
|
+
_.bindAll(this, "paginationControl", "pager");
|
1298
1508
|
this.getCollection || (this.getCollection = function() {
|
1299
1509
|
return this.collection;
|
1300
1510
|
});
|
1301
1511
|
collection = this.getCollection();
|
1302
1512
|
paginationState = this.getPaginationState();
|
1303
|
-
|
1304
|
-
|
1305
|
-
|
1306
|
-
|
1307
|
-
|
1308
|
-
return _.
|
1309
|
-
|
1513
|
+
this.optionsSources || (this.optionsSources = []);
|
1514
|
+
this.queryOptions || (this.queryOptions = {});
|
1515
|
+
this.optionsSources.push(function() {
|
1516
|
+
var options;
|
1517
|
+
options = _(paginationState.toJSON()).pick('limit', 'page', 'sortBy');
|
1518
|
+
return _.extend(options, {
|
1519
|
+
pager: _this.pager
|
1310
1520
|
});
|
1311
1521
|
});
|
1312
|
-
|
1313
|
-
|
1522
|
+
paginationState.on("change:page", function(state) {
|
1523
|
+
var filter;
|
1524
|
+
if (_this.isRemote()) {
|
1525
|
+
filter = _.extend(_this.toQuery(), _this.toQueryOptions());
|
1526
|
+
return _this.collection.applyFilter(filter, {
|
1527
|
+
remote: true
|
1528
|
+
});
|
1529
|
+
} else {
|
1530
|
+
return _this.trigger("refresh");
|
1531
|
+
}
|
1314
1532
|
});
|
1315
|
-
|
1316
|
-
|
1317
|
-
|
1318
|
-
|
1319
|
-
|
1320
|
-
|
1321
|
-
|
1322
|
-
|
1323
|
-
|
1533
|
+
return this.on("before:render", this.renderPaginationControl, this);
|
1534
|
+
},
|
1535
|
+
pager: function(numberOfPages, models) {
|
1536
|
+
this.getPaginationState().set({
|
1537
|
+
numberOfPages: numberOfPages,
|
1538
|
+
itemCount: models.length
|
1539
|
+
});
|
1540
|
+
return this.paginationControl().updateWithPageCount(numberOfPages, models);
|
1541
|
+
},
|
1542
|
+
isRemote: function() {
|
1543
|
+
return this.getQueryOptions().remote === true;
|
1324
1544
|
},
|
1325
1545
|
getPaginationState: function() {
|
1326
1546
|
var _base, _name;
|
@@ -1334,32 +1554,16 @@
|
|
1334
1554
|
if (options == null) options = {};
|
1335
1555
|
return this.getPaginationState().set('page', page, options);
|
1336
1556
|
},
|
1557
|
+
setPage: function(page, options) {
|
1558
|
+
if (page == null) page = 1;
|
1559
|
+
if (options == null) options = {};
|
1560
|
+
return this.getPaginationState().set('page', page, options);
|
1561
|
+
},
|
1337
1562
|
setLimit: function(limit, options) {
|
1338
1563
|
if (limit == null) limit = 0;
|
1339
1564
|
if (options == null) options = {};
|
1340
1565
|
return this.getPaginationState().set('limit', limit, options);
|
1341
1566
|
},
|
1342
|
-
updatePagination: function(models, query, options) {
|
1343
|
-
var itemCount, paginator, totalCount, _ref;
|
1344
|
-
if (models == null) models = [];
|
1345
|
-
if (query == null) query = {};
|
1346
|
-
if (options == null) options = {};
|
1347
|
-
_.defaults(options, this.getQueryOptions(), {
|
1348
|
-
limit: 0
|
1349
|
-
});
|
1350
|
-
paginator = this.paginationControl();
|
1351
|
-
itemCount = (models != null ? models.length : void 0) || 0;
|
1352
|
-
totalCount = (_ref = this.getCollection()) != null ? _ref.length : void 0;
|
1353
|
-
if (itemCount === 0 || totalCount <= options.limit) {
|
1354
|
-
paginator.$el.hide();
|
1355
|
-
} else {
|
1356
|
-
paginator.$el.show();
|
1357
|
-
}
|
1358
|
-
return paginator.state.set({
|
1359
|
-
page: options.page,
|
1360
|
-
limit: options.limit
|
1361
|
-
});
|
1362
|
-
},
|
1363
1567
|
paginationControl: function() {
|
1364
1568
|
if (this.paginator != null) return this.paginator;
|
1365
1569
|
_.defaults(this.paginatable || (this.paginatable = {}), {
|
@@ -1369,20 +1573,24 @@
|
|
1369
1573
|
this.paginator = Luca.util.lazyComponent({
|
1370
1574
|
type: "pagination_control",
|
1371
1575
|
collection: this.getCollection(),
|
1372
|
-
defaultState: this.paginatable
|
1576
|
+
defaultState: this.paginatable,
|
1577
|
+
parent: this.name || this.cid,
|
1578
|
+
debugMode: this.debugMode
|
1373
1579
|
});
|
1374
1580
|
return this.paginator;
|
1375
1581
|
},
|
1376
1582
|
renderPaginationControl: function() {
|
1377
|
-
|
1378
|
-
|
1583
|
+
var control;
|
1584
|
+
control = this.paginationControl();
|
1585
|
+
this.paginationContainer().append(control.render().$el);
|
1586
|
+
return control;
|
1379
1587
|
}
|
1380
1588
|
};
|
1381
1589
|
|
1382
1590
|
}).call(this);
|
1383
1591
|
(function() {
|
1384
1592
|
|
1385
|
-
Luca.
|
1593
|
+
Luca.concerns.StateModel = {
|
1386
1594
|
__initializer: function() {
|
1387
1595
|
var _this = this;
|
1388
1596
|
if (this.stateful !== true) return;
|
@@ -1412,7 +1620,7 @@
|
|
1412
1620
|
}).call(this);
|
1413
1621
|
(function() {
|
1414
1622
|
|
1415
|
-
Luca.
|
1623
|
+
Luca.concerns.Templating = {
|
1416
1624
|
__initializer: function() {
|
1417
1625
|
var template, templateContent, templateVars;
|
1418
1626
|
templateVars = Luca.util.read.call(this, this.bodyTemplateVars) || {};
|
@@ -1563,6 +1771,61 @@
|
|
1563
1771
|
return componentCacheStore.cid_index[lookup_id];
|
1564
1772
|
};
|
1565
1773
|
|
1774
|
+
}).call(this);
|
1775
|
+
(function() {
|
1776
|
+
var MetaDataProxy;
|
1777
|
+
|
1778
|
+
Luca.registry.componentMetaData = {};
|
1779
|
+
|
1780
|
+
Luca.registry.getMetaDataFor = function(componentName) {
|
1781
|
+
return new MetaDataProxy(Luca.registry.componentMetaData[componentName]);
|
1782
|
+
};
|
1783
|
+
|
1784
|
+
Luca.registry.addMetaData = function(componentName, key, value) {
|
1785
|
+
var data, _base;
|
1786
|
+
data = (_base = Luca.registry.componentMetaData)[componentName] || (_base[componentName] = {});
|
1787
|
+
data[key] = _(value).clone();
|
1788
|
+
return data;
|
1789
|
+
};
|
1790
|
+
|
1791
|
+
MetaDataProxy = (function() {
|
1792
|
+
|
1793
|
+
function MetaDataProxy(meta) {
|
1794
|
+
this.meta = meta != null ? meta : {};
|
1795
|
+
this;
|
1796
|
+
}
|
1797
|
+
|
1798
|
+
MetaDataProxy.prototype.superClass = function() {
|
1799
|
+
return Luca.util.resolve(this.meta["super class name"]);
|
1800
|
+
};
|
1801
|
+
|
1802
|
+
MetaDataProxy.prototype.componentDefinition = function() {
|
1803
|
+
return Luca.util.resolve(this.meta["display name"]);
|
1804
|
+
};
|
1805
|
+
|
1806
|
+
MetaDataProxy.prototype.styleHierarchy = function() {
|
1807
|
+
var list;
|
1808
|
+
list = _(this.classHierarchy()).map(function(cls) {
|
1809
|
+
return Luca.util.toCssClass(cls, 'views', 'components', 'core', 'fields', 'containers');
|
1810
|
+
});
|
1811
|
+
return _(list).without('backbone-view', 'luca-view');
|
1812
|
+
};
|
1813
|
+
|
1814
|
+
MetaDataProxy.prototype.classHierarchy = function() {
|
1815
|
+
var list, proxy, _ref, _ref2, _ref3, _ref4;
|
1816
|
+
list = [this.meta["display name"], this.meta["super class name"]];
|
1817
|
+
proxy = (_ref = this.superClass()) != null ? (_ref2 = _ref.prototype) != null ? typeof _ref2.componentMetaData === "function" ? _ref2.componentMetaData() : void 0 : void 0 : void 0;
|
1818
|
+
while (!!proxy) {
|
1819
|
+
list = list.concat(proxy != null ? proxy.classHierarchy() : void 0);
|
1820
|
+
proxy = (_ref3 = proxy.superClass()) != null ? (_ref4 = _ref3.prototype) != null ? typeof _ref4.componentMetaData === "function" ? _ref4.componentMetaData() : void 0 : void 0 : void 0;
|
1821
|
+
}
|
1822
|
+
return _(list).uniq();
|
1823
|
+
};
|
1824
|
+
|
1825
|
+
return MetaDataProxy;
|
1826
|
+
|
1827
|
+
})();
|
1828
|
+
|
1566
1829
|
}).call(this);
|
1567
1830
|
(function() {
|
1568
1831
|
var __slice = Array.prototype.slice;
|
@@ -1606,13 +1869,14 @@
|
|
1606
1869
|
|
1607
1870
|
}).call(this);
|
1608
1871
|
(function() {
|
1609
|
-
var bindAllEventHandlers, bindEventHandlers, view
|
1872
|
+
var bindAllEventHandlers, bindEventHandlers, view,
|
1873
|
+
__slice = Array.prototype.slice;
|
1610
1874
|
|
1611
1875
|
view = Luca.register("Luca.View");
|
1612
1876
|
|
1613
1877
|
view["extends"]("Backbone.View");
|
1614
1878
|
|
1615
|
-
view.includes("Luca.Events", "Luca.
|
1879
|
+
view.includes("Luca.Events", "Luca.concerns.DomHelpers");
|
1616
1880
|
|
1617
1881
|
view.mixesIn("DomHelpers", "Templating", "EnhancedProperties", "CollectionEventBindings", "ApplicationEventBindings", "StateModel");
|
1618
1882
|
|
@@ -1620,7 +1884,6 @@
|
|
1620
1884
|
|
1621
1885
|
view.defines({
|
1622
1886
|
initialize: function(options) {
|
1623
|
-
var module, _i, _len, _ref, _ref2, _ref3, _ref4;
|
1624
1887
|
this.options = options != null ? options : {};
|
1625
1888
|
this.trigger("before:initialize", this, this.options);
|
1626
1889
|
_.extend(this, this.options);
|
@@ -1631,36 +1894,11 @@
|
|
1631
1894
|
this.$el.attr("data-luca-id", this.name || this.cid);
|
1632
1895
|
Luca.cacheInstance(this.cid, this);
|
1633
1896
|
this.setupHooks(_(Luca.View.prototype.hooks.concat(this.hooks)).uniq());
|
1634
|
-
|
1635
|
-
_ref2 = this.mixins;
|
1636
|
-
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
1637
|
-
module = _ref2[_i];
|
1638
|
-
if ((_ref3 = Luca.mixin(module)) != null) {
|
1639
|
-
if ((_ref4 = _ref3.__initializer) != null) {
|
1640
|
-
_ref4.call(this, this, module);
|
1641
|
-
}
|
1642
|
-
}
|
1643
|
-
}
|
1644
|
-
}
|
1897
|
+
Luca.concern.setup.call(this);
|
1645
1898
|
this.delegateEvents();
|
1646
1899
|
return this.trigger("after:initialize", this);
|
1647
1900
|
},
|
1648
|
-
setupHooks:
|
1649
|
-
var _this = this;
|
1650
|
-
set || (set = this.hooks);
|
1651
|
-
return _(set).each(function(eventId) {
|
1652
|
-
var callback, fn;
|
1653
|
-
fn = Luca.util.hook(eventId);
|
1654
|
-
callback = function() {
|
1655
|
-
var _ref;
|
1656
|
-
return (_ref = this[fn]) != null ? _ref.apply(this, arguments) : void 0;
|
1657
|
-
};
|
1658
|
-
if (eventId != null ? eventId.match(/once:/) : void 0) {
|
1659
|
-
callback = _.once(callback);
|
1660
|
-
}
|
1661
|
-
return _this.on(eventId, callback, _this);
|
1662
|
-
});
|
1663
|
-
},
|
1901
|
+
setupHooks: Luca.util.setupHooks,
|
1664
1902
|
registerEvent: function(selector, handler) {
|
1665
1903
|
this.events || (this.events = {});
|
1666
1904
|
this.events[selector] = handler;
|
@@ -1680,14 +1918,10 @@
|
|
1680
1918
|
return Luca.util.selectProperties(Luca.isBackboneView, this);
|
1681
1919
|
},
|
1682
1920
|
debug: function() {
|
1683
|
-
var
|
1921
|
+
var args;
|
1922
|
+
args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
|
1684
1923
|
if (!(this.debugMode || (window.LucaDebugMode != null))) return;
|
1685
|
-
|
1686
|
-
for (_i = 0, _len = arguments.length; _i < _len; _i++) {
|
1687
|
-
message = arguments[_i];
|
1688
|
-
_results.push(console.log([this.name || this.cid, message]));
|
1689
|
-
}
|
1690
|
-
return _results;
|
1924
|
+
return console.log([this.name || this.cid].concat(__slice.call(args)));
|
1691
1925
|
},
|
1692
1926
|
trigger: function() {
|
1693
1927
|
if (Luca.enableGlobalObserver) {
|
@@ -1772,21 +2006,26 @@
|
|
1772
2006
|
return _results;
|
1773
2007
|
};
|
1774
2008
|
|
2009
|
+
Luca.View.deferrableEvent = "reset";
|
2010
|
+
|
1775
2011
|
Luca.View.extend = function(definition) {
|
1776
|
-
var module, _i, _len, _ref;
|
2012
|
+
var componentClass, module, _i, _len, _ref;
|
2013
|
+
if (definition == null) definition = {};
|
1777
2014
|
definition = Luca.View.renderWrapper(definition);
|
1778
|
-
if (
|
1779
|
-
|
2015
|
+
if (definition.concerns != null) {
|
2016
|
+
definition.concerns || (definition.concerns = definition.concerns);
|
2017
|
+
}
|
2018
|
+
componentClass = Luca.View._originalExtend.call(this, definition);
|
2019
|
+
if ((definition.concerns != null) && _.isArray(definition.concerns)) {
|
2020
|
+
_ref = definition.concerns;
|
1780
2021
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
1781
2022
|
module = _ref[_i];
|
1782
|
-
Luca.decorate(
|
2023
|
+
Luca.decorate(componentClass)["with"](module);
|
1783
2024
|
}
|
1784
2025
|
}
|
1785
|
-
return
|
2026
|
+
return componentClass;
|
1786
2027
|
};
|
1787
2028
|
|
1788
|
-
Luca.View.deferrableEvent = "reset";
|
1789
|
-
|
1790
2029
|
}).call(this);
|
1791
2030
|
(function() {
|
1792
2031
|
var model, setupComputedProperties;
|
@@ -1800,13 +2039,14 @@
|
|
1800
2039
|
model.defines({
|
1801
2040
|
initialize: function() {
|
1802
2041
|
Backbone.Model.prototype.initialize(this, arguments);
|
1803
|
-
|
2042
|
+
setupComputedProperties.call(this);
|
2043
|
+
return Luca.concern.setup.call(this);
|
1804
2044
|
},
|
1805
2045
|
read: function(attr) {
|
1806
2046
|
if (_.isFunction(this[attr])) {
|
1807
2047
|
return this[attr].call(this);
|
1808
2048
|
} else {
|
1809
|
-
return this.get(attr);
|
2049
|
+
return this.get(attr) || this[attr];
|
1810
2050
|
}
|
1811
2051
|
},
|
1812
2052
|
get: function(attr) {
|
@@ -1842,6 +2082,25 @@
|
|
1842
2082
|
return _results;
|
1843
2083
|
};
|
1844
2084
|
|
2085
|
+
Luca.Model._originalExtend = Backbone.Model.extend;
|
2086
|
+
|
2087
|
+
Luca.Model.extend = function(definition) {
|
2088
|
+
var componentClass, module, _i, _len, _ref;
|
2089
|
+
if (definition == null) definition = {};
|
2090
|
+
if (definition.concerns != null) {
|
2091
|
+
definition.concerns || (definition.concerns = definition.concerns);
|
2092
|
+
}
|
2093
|
+
componentClass = Luca.Model._originalExtend.call(this, definition);
|
2094
|
+
if ((definition.concerns != null) && _.isArray(definition.concerns)) {
|
2095
|
+
_ref = definition.concerns;
|
2096
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
2097
|
+
module = _ref[_i];
|
2098
|
+
Luca.decorate(componentClass)["with"](module);
|
2099
|
+
}
|
2100
|
+
}
|
2101
|
+
return componentClass;
|
2102
|
+
};
|
2103
|
+
|
1845
2104
|
}).call(this);
|
1846
2105
|
(function() {
|
1847
2106
|
var collection;
|
@@ -1906,6 +2165,7 @@
|
|
1906
2165
|
parse: options != null ? options.parse : void 0
|
1907
2166
|
});
|
1908
2167
|
}
|
2168
|
+
Luca.concern.setup.call(this);
|
1909
2169
|
return this.trigger("after:initialize");
|
1910
2170
|
},
|
1911
2171
|
__wrapUrl: function() {
|
@@ -2001,7 +2261,9 @@
|
|
2001
2261
|
if (options == null) options = {};
|
2002
2262
|
this.trigger("before:fetch", this);
|
2003
2263
|
if (this.memoryCollection === true) return this.reset(this.data);
|
2004
|
-
if (this.cached_models().length && !options.refresh
|
2264
|
+
if (this.cached_models().length && !(options.refresh === true || options.remote === true)) {
|
2265
|
+
return this.bootstrap();
|
2266
|
+
}
|
2005
2267
|
url = _.isFunction(this.url) ? this.url() : this.url;
|
2006
2268
|
if (!((url && url.length > 1) || this.localStorage)) return true;
|
2007
2269
|
this.fetching = true;
|
@@ -2150,6 +2412,25 @@
|
|
2150
2412
|
}
|
2151
2413
|
});
|
2152
2414
|
|
2415
|
+
Luca.Collection._originalExtend = Backbone.Collection.extend;
|
2416
|
+
|
2417
|
+
Luca.Collection.extend = function(definition) {
|
2418
|
+
var componentClass, module, _i, _len, _ref;
|
2419
|
+
if (definition == null) definition = {};
|
2420
|
+
if (definition.concerns != null) {
|
2421
|
+
definition.concerns || (definition.concerns = definition.concerns);
|
2422
|
+
}
|
2423
|
+
componentClass = Luca.Collection._originalExtend.call(this, definition);
|
2424
|
+
if ((definition.concerns != null) && _.isArray(definition.concerns)) {
|
2425
|
+
_ref = definition.concerns;
|
2426
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
2427
|
+
module = _ref[_i];
|
2428
|
+
Luca.decorate(componentClass)["with"](module);
|
2429
|
+
}
|
2430
|
+
}
|
2431
|
+
return componentClass;
|
2432
|
+
};
|
2433
|
+
|
2153
2434
|
Luca.Collection.baseParams = function(obj) {
|
2154
2435
|
if (obj) return Luca.Collection._baseParams = obj;
|
2155
2436
|
if (_.isFunction(Luca.Collection._baseParams)) {
|
@@ -2298,40 +2579,21 @@
|
|
2298
2579
|
|
2299
2580
|
}).call(this);
|
2300
2581
|
(function() {
|
2582
|
+
var field;
|
2301
2583
|
|
2302
|
-
|
2303
|
-
|
2304
|
-
|
2305
|
-
|
2584
|
+
field = Luca.register("Luca.core.Field");
|
2585
|
+
|
2586
|
+
field["extends"]("Luca.View");
|
2587
|
+
|
2588
|
+
field.triggers("before:validation", "after:validation", "on:change");
|
2589
|
+
|
2590
|
+
field.publicConfiguration({
|
2306
2591
|
labelAlign: 'top',
|
2307
|
-
|
2308
|
-
statuses: ["warning", "error", "success"]
|
2309
|
-
|
2310
|
-
|
2311
|
-
|
2312
|
-
_.extend(this, this.options);
|
2313
|
-
this.input_id || (this.input_id = _.uniqueId('field'));
|
2314
|
-
this.input_name || (this.input_name = this.name);
|
2315
|
-
this.input_class || (this.input_class = "");
|
2316
|
-
this.input_type || (this.input_type = "");
|
2317
|
-
this.helperText || (this.helperText = "");
|
2318
|
-
if (this.required && !((_ref = this.label) != null ? _ref.match(/^\*/) : void 0)) {
|
2319
|
-
this.label || (this.label = "*" + this.label);
|
2320
|
-
}
|
2321
|
-
this.inputStyles || (this.inputStyles = "");
|
2322
|
-
this.input_value || (this.input_value = this.value || "");
|
2323
|
-
if (this.disabled) this.disable();
|
2324
|
-
this.updateState(this.state);
|
2325
|
-
this.placeHolder || (this.placeHolder = "");
|
2326
|
-
return Luca.View.prototype.initialize.apply(this, arguments);
|
2327
|
-
},
|
2328
|
-
beforeRender: function() {
|
2329
|
-
if (Luca.enableBootstrap) this.$el.addClass('control-group');
|
2330
|
-
if (this.required) return this.$el.addClass('required');
|
2331
|
-
},
|
2332
|
-
change_handler: function(e) {
|
2333
|
-
return this.trigger("on:change", this, e);
|
2334
|
-
},
|
2592
|
+
className: 'luca-ui-text-field luca-ui-field',
|
2593
|
+
statuses: ["warning", "error", "success"]
|
2594
|
+
});
|
2595
|
+
|
2596
|
+
field.publicInterface({
|
2335
2597
|
disable: function() {
|
2336
2598
|
return this.getInputElement().attr('disabled', true);
|
2337
2599
|
},
|
@@ -2357,9 +2619,6 @@
|
|
2357
2619
|
var _ref;
|
2358
2620
|
return (_ref = this.getInputElement()) != null ? _ref.attr('value', value) : void 0;
|
2359
2621
|
},
|
2360
|
-
getInputElement: function() {
|
2361
|
-
return this.input || (this.input = this.$('input').eq(0));
|
2362
|
-
},
|
2363
2622
|
updateState: function(state) {
|
2364
2623
|
var _this = this;
|
2365
2624
|
return _(this.statuses).each(function(cls) {
|
@@ -2369,6 +2628,44 @@
|
|
2369
2628
|
}
|
2370
2629
|
});
|
2371
2630
|
|
2631
|
+
field.privateConfiguration({
|
2632
|
+
isField: true,
|
2633
|
+
template: 'fields/text_field'
|
2634
|
+
});
|
2635
|
+
|
2636
|
+
field.defines({
|
2637
|
+
initialize: function(options) {
|
2638
|
+
var _ref;
|
2639
|
+
this.options = options != null ? options : {};
|
2640
|
+
_.extend(this, this.options);
|
2641
|
+
this.input_id || (this.input_id = _.uniqueId('field'));
|
2642
|
+
this.input_name || (this.input_name = this.name);
|
2643
|
+
this.input_class || (this.input_class = "");
|
2644
|
+
this.input_type || (this.input_type = "");
|
2645
|
+
this.helperText || (this.helperText = "");
|
2646
|
+
if (!(this.label != null) || this.label.length === 0) this.label = this.name;
|
2647
|
+
if (this.required && !((_ref = this.label) != null ? _ref.match(/^\*/) : void 0)) {
|
2648
|
+
this.label || (this.label = "*" + this.label);
|
2649
|
+
}
|
2650
|
+
this.inputStyles || (this.inputStyles = "");
|
2651
|
+
this.input_value || (this.input_value = this.value || "");
|
2652
|
+
if (this.disabled) this.disable();
|
2653
|
+
this.updateState(this.state);
|
2654
|
+
this.placeHolder || (this.placeHolder = "");
|
2655
|
+
return Luca.View.prototype.initialize.apply(this, arguments);
|
2656
|
+
},
|
2657
|
+
beforeRender: function() {
|
2658
|
+
if (Luca.enableBootstrap) this.$el.addClass('control-group');
|
2659
|
+
if (this.required) return this.$el.addClass('required');
|
2660
|
+
},
|
2661
|
+
change_handler: function(e) {
|
2662
|
+
return this.trigger("on:change", this, e);
|
2663
|
+
},
|
2664
|
+
getInputElement: function() {
|
2665
|
+
return this.input || (this.input = this.$('input').eq(0));
|
2666
|
+
}
|
2667
|
+
});
|
2668
|
+
|
2372
2669
|
}).call(this);
|
2373
2670
|
(function() {
|
2374
2671
|
var applyDOMConfig, container, createGetterMethods, createMethodsToGetComponentsByRole, doComponents, doLayout, indexComponent, validateContainerConfiguration;
|
@@ -2413,6 +2710,7 @@
|
|
2413
2710
|
prepareComponents: function() {
|
2414
2711
|
var component, _i, _len, _ref,
|
2415
2712
|
_this = this;
|
2713
|
+
container = this;
|
2416
2714
|
_ref = this.components;
|
2417
2715
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
2418
2716
|
component = _ref[_i];
|
@@ -2423,13 +2721,24 @@
|
|
2423
2721
|
}
|
2424
2722
|
}
|
2425
2723
|
return _(this.components).each(function(component, index) {
|
2426
|
-
var ce, componentContainerElement, panel, _ref2;
|
2724
|
+
var ce, componentContainerElement, componentExtension, panel, _ref2, _ref3;
|
2427
2725
|
ce = componentContainerElement = (_ref2 = _this.componentContainers) != null ? _ref2[index] : void 0;
|
2428
2726
|
ce["class"] = ce["class"] || ce.className || ce.classes;
|
2429
2727
|
if (_this.generateComponentElements) {
|
2430
2728
|
panel = _this.make(_this.componentTag, componentContainerElement, '');
|
2431
2729
|
_this.$append(panel);
|
2432
2730
|
}
|
2731
|
+
if (container.defaults != null) {
|
2732
|
+
component = _.defaults(component, container.defaults || {});
|
2733
|
+
}
|
2734
|
+
if (_.isArray(container.extensions) && _.isObject((_ref3 = container.extensions) != null ? _ref3[index] : void 0)) {
|
2735
|
+
componentExtension = container.extensions[index];
|
2736
|
+
component = _.extend(component, componentExtension);
|
2737
|
+
}
|
2738
|
+
if ((component.role != null) && _.isObject(container.extensions) && _.isObject(container.extensions[component.role])) {
|
2739
|
+
componentExtension = container.extensions[component.role];
|
2740
|
+
component = _.extend(component, componentExtension);
|
2741
|
+
}
|
2433
2742
|
if (component.container == null) {
|
2434
2743
|
if (_this.generateComponentElements) {
|
2435
2744
|
component.container = "#" + componentContainerElement.id;
|
@@ -2449,11 +2758,15 @@
|
|
2449
2758
|
};
|
2450
2759
|
container = this;
|
2451
2760
|
this.components = _(this.components).map(function(object, index) {
|
2452
|
-
var component, created;
|
2453
|
-
component = Luca.
|
2454
|
-
if (!component.container && component.options.container) {
|
2761
|
+
var component, created, _ref;
|
2762
|
+
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));
|
2763
|
+
if (!component.container && ((_ref = component.options) != null ? _ref.container : void 0)) {
|
2455
2764
|
component.container = component.options.container;
|
2456
2765
|
}
|
2766
|
+
if (!(component.container != null)) {
|
2767
|
+
console.log(component, index, _this);
|
2768
|
+
console.error("could not assign container property to component on container " + (_this.name || _this.cid));
|
2769
|
+
}
|
2457
2770
|
indexComponent(component).at(index)["in"](_this.componentIndex);
|
2458
2771
|
return component;
|
2459
2772
|
});
|
@@ -2469,7 +2782,7 @@
|
|
2469
2782
|
return container;
|
2470
2783
|
};
|
2471
2784
|
try {
|
2472
|
-
|
2785
|
+
this.$(component.container).eq(0).append(component.el);
|
2473
2786
|
return component.render();
|
2474
2787
|
} catch (e) {
|
2475
2788
|
console.log("Error Rendering Component " + (component.name || component.cid), component);
|
@@ -2517,11 +2830,11 @@
|
|
2517
2830
|
map: function(fn) {
|
2518
2831
|
return this._().map(fn);
|
2519
2832
|
},
|
2520
|
-
registerComponentEvents: function() {
|
2833
|
+
registerComponentEvents: function(eventList) {
|
2521
2834
|
var component, componentNameOrRole, eventId, handler, listener, _ref, _ref2, _results,
|
2522
2835
|
_this = this;
|
2523
2836
|
container = this;
|
2524
|
-
_ref = this.componentEvents || {};
|
2837
|
+
_ref = eventList || this.componentEvents || {};
|
2525
2838
|
_results = [];
|
2526
2839
|
for (listener in _ref) {
|
2527
2840
|
handler = _ref[listener];
|
@@ -2557,10 +2870,10 @@
|
|
2557
2870
|
var children, grandchildren;
|
2558
2871
|
children = this.components;
|
2559
2872
|
grandchildren = _(this.subContainers()).invoke('allChildren');
|
2560
|
-
return
|
2873
|
+
return _([children, grandchildren]).chain().compact().flatten().value();
|
2561
2874
|
},
|
2562
2875
|
findComponentForEventBinding: function(nameRoleOrGetter, deep) {
|
2563
|
-
if (deep == null) deep =
|
2876
|
+
if (deep == null) deep = true;
|
2564
2877
|
return this.findComponentByName(nameRoleOrGetter, deep) || this.findComponentByGetter(nameRoleOrGetter, deep) || this.findComponentByRole(nameRoleOrGetter, deep);
|
2565
2878
|
},
|
2566
2879
|
findComponentByGetter: function(getter, deep) {
|
@@ -2572,7 +2885,7 @@
|
|
2572
2885
|
findComponentByRole: function(role, deep) {
|
2573
2886
|
if (deep == null) deep = false;
|
2574
2887
|
return _(this.allChildren()).detect(function(component) {
|
2575
|
-
return component.role === role;
|
2888
|
+
return component.role === role || component.type === role || component.ctype === role;
|
2576
2889
|
});
|
2577
2890
|
},
|
2578
2891
|
findComponentByName: function(name, deep) {
|
@@ -2702,7 +3015,6 @@
|
|
2702
3015
|
return _(childrenWithGetter).each(function(component) {
|
2703
3016
|
var _name;
|
2704
3017
|
return container[_name = component.getter] || (container[_name] = function() {
|
2705
|
-
console.log("getter is being deprecated in favor of role");
|
2706
3018
|
console.log(component.getter, component, container);
|
2707
3019
|
return component;
|
2708
3020
|
});
|
@@ -2731,8 +3043,10 @@
|
|
2731
3043
|
this.trigger("before:render:components", this, this.components);
|
2732
3044
|
this.renderComponents();
|
2733
3045
|
this.trigger("after:components", this, this.components);
|
2734
|
-
|
2735
|
-
|
3046
|
+
if (this.skipGetterMethods !== true) {
|
3047
|
+
createGetterMethods.call(this);
|
3048
|
+
createMethodsToGetComponentsByRole.call(this);
|
3049
|
+
}
|
2736
3050
|
return this.registerComponentEvents();
|
2737
3051
|
};
|
2738
3052
|
|
@@ -3415,16 +3729,27 @@
|
|
3415
3729
|
|
3416
3730
|
}).call(this);
|
3417
3731
|
(function() {
|
3732
|
+
var tabView;
|
3733
|
+
|
3734
|
+
_.def('Luca.containers.TabView')["extends"]('Luca.containers.CardView')["with"];
|
3735
|
+
|
3736
|
+
tabView = Luca.register("Luca.containers.TabView");
|
3737
|
+
|
3738
|
+
tabView.triggers("before:select", "after:select");
|
3418
3739
|
|
3419
|
-
|
3420
|
-
hooks: ["before:select", "after:select"],
|
3421
|
-
componentType: 'tab_view',
|
3422
|
-
className: 'luca-ui-tab-view tabbable',
|
3740
|
+
tabView.publicConfiguration({
|
3423
3741
|
tab_position: 'top',
|
3424
|
-
tabVerticalOffset: '50px'
|
3742
|
+
tabVerticalOffset: '50px'
|
3743
|
+
});
|
3744
|
+
|
3745
|
+
tabView.privateConfiguration({
|
3746
|
+
additionalClassNames: 'tabbable',
|
3425
3747
|
navClass: "nav-tabs",
|
3426
3748
|
bodyTemplate: "containers/tab_view",
|
3427
|
-
bodyEl: "div.tab-content"
|
3749
|
+
bodyEl: "div.tab-content"
|
3750
|
+
});
|
3751
|
+
|
3752
|
+
tabView.defines({
|
3428
3753
|
initialize: function(options) {
|
3429
3754
|
this.options = options != null ? options : {};
|
3430
3755
|
if (this.navStyle === "list") this.navClass = "nav-list";
|
@@ -3456,7 +3781,6 @@
|
|
3456
3781
|
}
|
3457
3782
|
},
|
3458
3783
|
createTabSelectors: function() {
|
3459
|
-
var tabView;
|
3460
3784
|
tabView = this;
|
3461
3785
|
return this.each(function(component, index) {
|
3462
3786
|
var icon, link, selector, _ref;
|
@@ -3606,13 +3930,13 @@
|
|
3606
3930
|
|
3607
3931
|
}).call(this);
|
3608
3932
|
(function() {
|
3609
|
-
var
|
3933
|
+
var application;
|
3610
3934
|
|
3611
|
-
|
3612
|
-
return Backbone.history.start();
|
3613
|
-
};
|
3935
|
+
application = Luca.register("Luca.Application");
|
3614
3936
|
|
3615
|
-
|
3937
|
+
application["extends"]("Luca.containers.Viewport");
|
3938
|
+
|
3939
|
+
application.defines({
|
3616
3940
|
name: "MyApp",
|
3617
3941
|
defaultState: {},
|
3618
3942
|
autoBoot: false,
|
@@ -3810,7 +4134,7 @@
|
|
3810
4134
|
if (this.autoStartHistory === true) {
|
3811
4135
|
this.autoStartHistory = "before:render";
|
3812
4136
|
}
|
3813
|
-
return this.defer(startHistory, false).until(this, this.autoStartHistory);
|
4137
|
+
return this.defer(Luca.util.startHistory, false).until(this, this.autoStartHistory);
|
3814
4138
|
}
|
3815
4139
|
},
|
3816
4140
|
setupKeyHandler: function() {
|
@@ -3831,16 +4155,23 @@
|
|
3831
4155
|
}
|
3832
4156
|
});
|
3833
4157
|
|
4158
|
+
Luca.util.startHistory = function() {
|
4159
|
+
return Backbone.history.start();
|
4160
|
+
};
|
4161
|
+
|
3834
4162
|
}).call(this);
|
3835
4163
|
(function() {
|
4164
|
+
var toolbar;
|
4165
|
+
|
4166
|
+
_.def('Luca.components.Toolbar')["extends"]('Luca.core.Container')["with"];
|
4167
|
+
|
4168
|
+
toolbar = Luca.register("Luca.components.Toolbar");
|
3836
4169
|
|
3837
|
-
|
4170
|
+
toolbar["extends"]("Luca.core.Container");
|
4171
|
+
|
4172
|
+
toolbar.defines({
|
3838
4173
|
className: 'luca-ui-toolbar toolbar',
|
3839
4174
|
position: 'bottom',
|
3840
|
-
initialize: function(options) {
|
3841
|
-
this.options = options != null ? options : {};
|
3842
|
-
return Luca.core.Container.prototype.initialize.apply(this, arguments);
|
3843
|
-
},
|
3844
4175
|
prepareComponents: function() {
|
3845
4176
|
var _this = this;
|
3846
4177
|
return _(this.components).each(function(component) {
|
@@ -3848,14 +4179,20 @@
|
|
3848
4179
|
});
|
3849
4180
|
},
|
3850
4181
|
render: function() {
|
3851
|
-
|
4182
|
+
$(this.container).append(this.el);
|
4183
|
+
return this;
|
3852
4184
|
}
|
3853
4185
|
});
|
3854
4186
|
|
3855
4187
|
}).call(this);
|
3856
4188
|
(function() {
|
4189
|
+
var loaderView;
|
4190
|
+
|
4191
|
+
loaderView = Luca.register("Luca.components.CollectionLoaderView");
|
4192
|
+
|
4193
|
+
loaderView["extends"]("Luca.View");
|
3857
4194
|
|
3858
|
-
|
4195
|
+
loaderView.defines({
|
3859
4196
|
className: 'luca-ui-collection-loader-view',
|
3860
4197
|
template: "components/collection_loader_view",
|
3861
4198
|
initialize: function(options) {
|
@@ -3892,15 +4229,15 @@
|
|
3892
4229
|
(function() {
|
3893
4230
|
var collectionView, make;
|
3894
4231
|
|
3895
|
-
collectionView = Luca.
|
4232
|
+
collectionView = Luca.register("Luca.components.CollectionView");
|
3896
4233
|
|
3897
4234
|
collectionView["extends"]("Luca.components.Panel");
|
3898
4235
|
|
3899
|
-
collectionView.
|
4236
|
+
collectionView.mixesIn("LoadMaskable", "Filterable", "Paginatable");
|
3900
4237
|
|
3901
4238
|
collectionView.triggers("before:refresh", "after:refresh", "refresh", "empty:results");
|
3902
4239
|
|
3903
|
-
collectionView.
|
4240
|
+
collectionView.defines({
|
3904
4241
|
tagName: "ol",
|
3905
4242
|
className: "luca-ui-collection-view",
|
3906
4243
|
bodyClassName: "collection-ui-panel",
|
@@ -3920,11 +4257,15 @@
|
|
3920
4257
|
if (!((this.itemTemplate != null) || (this.itemRenderer != null) || (this.itemProperty != null))) {
|
3921
4258
|
throw "Collection Views must specify an item template or item renderer function";
|
3922
4259
|
}
|
3923
|
-
|
3924
|
-
|
3925
|
-
|
4260
|
+
if (_.isString(this.collection)) {
|
4261
|
+
if (Luca.CollectionManager.get()) {
|
4262
|
+
this.collection = Luca.CollectionManager.get().getOrCreate(this.collection);
|
4263
|
+
} else {
|
4264
|
+
console.log("String Collection but no collection manager");
|
4265
|
+
}
|
3926
4266
|
}
|
3927
4267
|
if (!Luca.isBackboneCollection(this.collection)) {
|
4268
|
+
console.log("Missing Collection on " + (this.name || this.cid), this, this.collection);
|
3928
4269
|
throw "Collection Views must have a valid backbone collection";
|
3929
4270
|
this.collection.on("before:fetch", function() {
|
3930
4271
|
return _this.trigger("enable:loadmask");
|
@@ -3943,12 +4284,13 @@
|
|
3943
4284
|
this.collection.on("change", this.refreshModel, this);
|
3944
4285
|
}
|
3945
4286
|
}
|
4287
|
+
Luca.components.Panel.prototype.initialize.apply(this, arguments);
|
3946
4288
|
if (this.autoRefreshOnModelsPresent !== false) {
|
3947
4289
|
this.defer(function() {
|
3948
4290
|
if (_this.collection.length > 0) return _this.refresh();
|
3949
4291
|
}).until("after:render");
|
3950
4292
|
}
|
3951
|
-
return this.on("
|
4293
|
+
return this.on("refresh", this.refresh, this);
|
3952
4294
|
},
|
3953
4295
|
attributesForItem: function(item, model) {
|
3954
4296
|
return _.extend({}, {
|
@@ -3988,11 +4330,39 @@
|
|
3988
4330
|
getCollection: function() {
|
3989
4331
|
return this.collection;
|
3990
4332
|
},
|
4333
|
+
loadModels: function(models, options) {
|
4334
|
+
var _ref;
|
4335
|
+
if (models == null) models = [];
|
4336
|
+
if (options == null) options = {};
|
4337
|
+
return (_ref = this.getCollection()) != null ? _ref.reset(models, options) : void 0;
|
4338
|
+
},
|
4339
|
+
applyQuery: function(query, queryOptions) {
|
4340
|
+
if (query == null) query = {};
|
4341
|
+
if (queryOptions == null) queryOptions = {};
|
4342
|
+
this.query = query;
|
4343
|
+
this.queryOptions = queryOptions;
|
4344
|
+
this.refresh();
|
4345
|
+
return this;
|
4346
|
+
},
|
3991
4347
|
getQuery: function() {
|
3992
|
-
|
4348
|
+
var query, querySource, _i, _len, _ref;
|
4349
|
+
query = this.query || (this.query = {});
|
4350
|
+
_ref = _(this.querySources || []).compact();
|
4351
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
4352
|
+
querySource = _ref[_i];
|
4353
|
+
query = _.extend(query, querySource() || {});
|
4354
|
+
}
|
4355
|
+
return query;
|
3993
4356
|
},
|
3994
4357
|
getQueryOptions: function() {
|
3995
|
-
|
4358
|
+
var optionSource, options, _i, _len, _ref;
|
4359
|
+
options = this.queryOptions || (this.queryOptions = {});
|
4360
|
+
_ref = _(this.optionsSources || []).compact();
|
4361
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
4362
|
+
optionSource = _ref[_i];
|
4363
|
+
options = _.extend(options, optionSource() || {});
|
4364
|
+
}
|
4365
|
+
return options;
|
3996
4366
|
},
|
3997
4367
|
getModels: function(query, options) {
|
3998
4368
|
var _ref;
|
@@ -4016,12 +4386,12 @@
|
|
4016
4386
|
}, model));
|
4017
4387
|
return this.trigger("model:refreshed", index, model);
|
4018
4388
|
},
|
4019
|
-
refresh: function(query, options) {
|
4020
|
-
var index, model,
|
4389
|
+
refresh: function(query, options, models) {
|
4390
|
+
var index, model, _i, _len;
|
4021
4391
|
query || (query = this.getQuery());
|
4022
4392
|
options || (options = this.getQueryOptions());
|
4393
|
+
models || (models = this.getModels(query, options));
|
4023
4394
|
this.$bodyEl().empty();
|
4024
|
-
models = this.getModels(query, options);
|
4025
4395
|
this.trigger("before:refresh", models, query, options);
|
4026
4396
|
if (models.length === 0) this.trigger("empty:results");
|
4027
4397
|
index = 0;
|
@@ -4052,8 +4422,13 @@
|
|
4052
4422
|
|
4053
4423
|
}).call(this);
|
4054
4424
|
(function() {
|
4425
|
+
var controller;
|
4426
|
+
|
4427
|
+
controller = Luca.register("Luca.components.Controller");
|
4428
|
+
|
4429
|
+
controller["extends"]("Luca.containers.CardView");
|
4055
4430
|
|
4056
|
-
|
4431
|
+
controller.defines({
|
4057
4432
|
additionalClassNames: ['luca-ui-controller'],
|
4058
4433
|
activeAttribute: "active-section",
|
4059
4434
|
initialize: function(options) {
|
@@ -4113,15 +4488,31 @@
|
|
4113
4488
|
|
4114
4489
|
}).call(this);
|
4115
4490
|
(function() {
|
4491
|
+
var buttonField;
|
4116
4492
|
|
4117
|
-
|
4493
|
+
buttonField = Luca.register("Luca.fields.ButtonField");
|
4494
|
+
|
4495
|
+
buttonField["extends"]("Luca.core.Field");
|
4496
|
+
|
4497
|
+
buttonField.triggers("button:click");
|
4498
|
+
|
4499
|
+
buttonField.publicConfiguration({
|
4118
4500
|
readOnly: true,
|
4501
|
+
input_value: void 0,
|
4502
|
+
input_type: "button",
|
4503
|
+
icon_class: void 0,
|
4504
|
+
input_name: void 0,
|
4505
|
+
white: void 0
|
4506
|
+
});
|
4507
|
+
|
4508
|
+
buttonField.privateConfiguration({
|
4509
|
+
template: "fields/button_field",
|
4119
4510
|
events: {
|
4120
4511
|
"click input": "click_handler"
|
4121
|
-
}
|
4122
|
-
|
4123
|
-
|
4124
|
-
|
4512
|
+
}
|
4513
|
+
});
|
4514
|
+
|
4515
|
+
buttonField.privateInterface({
|
4125
4516
|
click_handler: function(e) {
|
4126
4517
|
var me, my;
|
4127
4518
|
me = my = $(e.currentTarget);
|
@@ -4141,7 +4532,6 @@
|
|
4141
4532
|
this.input_id || (this.input_id = _.uniqueId('button'));
|
4142
4533
|
this.input_name || (this.input_name = this.name || (this.name = this.input_id));
|
4143
4534
|
this.input_value || (this.input_value = this.label || (this.label = this.text));
|
4144
|
-
this.input_type || (this.input_type = "button");
|
4145
4535
|
this.input_class || (this.input_class = this["class"]);
|
4146
4536
|
this.icon_class || (this.icon_class = "");
|
4147
4537
|
if (this.icon_class.length && !this.icon_class.match(/^icon-/)) {
|
@@ -4154,13 +4544,21 @@
|
|
4154
4544
|
}
|
4155
4545
|
});
|
4156
4546
|
|
4547
|
+
buttonField.defines({
|
4548
|
+
version: 1
|
4549
|
+
});
|
4550
|
+
|
4157
4551
|
}).call(this);
|
4158
4552
|
(function() {
|
4159
|
-
var make;
|
4553
|
+
var checkboxArray, make;
|
4160
4554
|
|
4161
4555
|
make = Luca.View.prototype.make;
|
4162
4556
|
|
4163
|
-
|
4557
|
+
checkboxArray = Luca.register("Luca.fields.CheckboxArray");
|
4558
|
+
|
4559
|
+
checkboxArray["extends"]("Luca.core.Field");
|
4560
|
+
|
4561
|
+
checkboxArray.defines({
|
4164
4562
|
version: 2,
|
4165
4563
|
template: "fields/checkbox_array",
|
4166
4564
|
className: "luca-ui-checkbox-array",
|
@@ -4171,7 +4569,7 @@
|
|
4171
4569
|
initialize: function(options) {
|
4172
4570
|
this.options = options != null ? options : {};
|
4173
4571
|
_.extend(this, this.options);
|
4174
|
-
_.extend(this, Luca.
|
4572
|
+
_.extend(this, Luca.concerns.Deferrable);
|
4175
4573
|
_.bindAll(this, "renderCheckboxes", "clickHandler", "checkSelected");
|
4176
4574
|
Luca.core.Field.prototype.initialize.apply(this, arguments);
|
4177
4575
|
this.input_id || (this.input_id = _.uniqueId('field'));
|
@@ -4189,6 +4587,9 @@
|
|
4189
4587
|
console.log("Error Configuring Collection", this, e.message);
|
4190
4588
|
}
|
4191
4589
|
cbArray = this;
|
4590
|
+
if (!Luca.isBackboneCollection(this.collection)) {
|
4591
|
+
throw "Checkbox Array Fields must specify a @collection property";
|
4592
|
+
}
|
4192
4593
|
if (this.collection.length > 0) {
|
4193
4594
|
return this.renderCheckboxes();
|
4194
4595
|
} else {
|
@@ -4284,15 +4685,27 @@
|
|
4284
4685
|
|
4285
4686
|
}).call(this);
|
4286
4687
|
(function() {
|
4688
|
+
var checkboxField;
|
4689
|
+
|
4690
|
+
checkboxField = Luca.register("Luca.fields.CheckboxField");
|
4691
|
+
|
4692
|
+
checkboxField["extends"]("Luca.core.Field");
|
4693
|
+
|
4694
|
+
checkboxField.triggers("checked", "unchecked");
|
4695
|
+
|
4696
|
+
checkboxField.publicConfiguration({
|
4697
|
+
send_blanks: true,
|
4698
|
+
input_value: 1
|
4699
|
+
});
|
4287
4700
|
|
4288
|
-
|
4701
|
+
checkboxField.privateConfiguration({
|
4702
|
+
template: 'fields/checkbox_field',
|
4289
4703
|
events: {
|
4290
4704
|
"change input": "change_handler"
|
4291
|
-
}
|
4292
|
-
|
4293
|
-
|
4294
|
-
|
4295
|
-
send_blanks: true,
|
4705
|
+
}
|
4706
|
+
});
|
4707
|
+
|
4708
|
+
checkboxField.privateInterface({
|
4296
4709
|
change_handler: function(e) {
|
4297
4710
|
var me, my;
|
4298
4711
|
me = my = $(e.target);
|
@@ -4307,14 +4720,14 @@
|
|
4307
4720
|
this.options = options != null ? options : {};
|
4308
4721
|
_.extend(this, this.options);
|
4309
4722
|
_.bindAll(this, "change_handler");
|
4310
|
-
|
4311
|
-
},
|
4312
|
-
afterInitialize: function() {
|
4723
|
+
Luca.core.Field.prototype.initialize.apply(this, arguments);
|
4313
4724
|
this.input_id || (this.input_id = _.uniqueId('field'));
|
4314
4725
|
this.input_name || (this.input_name = this.name);
|
4315
|
-
this.input_value || (this.input_value = 1);
|
4316
4726
|
return this.label || (this.label = this.name);
|
4317
|
-
}
|
4727
|
+
}
|
4728
|
+
});
|
4729
|
+
|
4730
|
+
checkboxField.publicInterface({
|
4318
4731
|
setValue: function(checked) {
|
4319
4732
|
return this.getInputElement().attr('checked', checked);
|
4320
4733
|
},
|
@@ -4323,10 +4736,20 @@
|
|
4323
4736
|
}
|
4324
4737
|
});
|
4325
4738
|
|
4739
|
+
checkboxField.defines({
|
4740
|
+
version: 1
|
4741
|
+
});
|
4742
|
+
|
4326
4743
|
}).call(this);
|
4327
4744
|
(function() {
|
4745
|
+
var fileUpload;
|
4746
|
+
|
4747
|
+
fileUpload = Luca.register("Luca.fields.FileUploadField");
|
4328
4748
|
|
4329
|
-
|
4749
|
+
fileUpload["extends"]("Luca.core.Field");
|
4750
|
+
|
4751
|
+
fileUpload.defines({
|
4752
|
+
version: 1,
|
4330
4753
|
template: 'fields/file_upload_field',
|
4331
4754
|
afterInitialize: function() {
|
4332
4755
|
this.input_id || (this.input_id = _.uniqueId('field'));
|
@@ -4338,8 +4761,13 @@
|
|
4338
4761
|
|
4339
4762
|
}).call(this);
|
4340
4763
|
(function() {
|
4764
|
+
var hiddenField;
|
4765
|
+
|
4766
|
+
hiddenField = Luca.register("Luca.fields.HiddenField");
|
4767
|
+
|
4768
|
+
hiddenField["extends"]("Luca.core.Field");
|
4341
4769
|
|
4342
|
-
|
4770
|
+
hiddenField.defines({
|
4343
4771
|
template: 'fields/hidden_field',
|
4344
4772
|
afterInitialize: function() {
|
4345
4773
|
this.input_id || (this.input_id = _.uniqueId('field'));
|
@@ -4351,9 +4779,13 @@
|
|
4351
4779
|
|
4352
4780
|
}).call(this);
|
4353
4781
|
(function() {
|
4782
|
+
var labelField;
|
4354
4783
|
|
4355
|
-
|
4356
|
-
|
4784
|
+
labelField = Luca.register("Luca.components.LabelField");
|
4785
|
+
|
4786
|
+
labelField["extends"]("Luca.core.Field");
|
4787
|
+
|
4788
|
+
labelField.defines({
|
4357
4789
|
formatter: function(value) {
|
4358
4790
|
value || (value = this.getValue());
|
4359
4791
|
return _.str.titleize(value);
|
@@ -4367,13 +4799,18 @@
|
|
4367
4799
|
|
4368
4800
|
}).call(this);
|
4369
4801
|
(function() {
|
4802
|
+
var selectField;
|
4803
|
+
|
4804
|
+
selectField = Luca.register("Luca.fields.SelectField");
|
4805
|
+
|
4806
|
+
selectField["extends"]("Luca.core.Field");
|
4370
4807
|
|
4371
|
-
|
4808
|
+
selectField.triggers("after:select");
|
4809
|
+
|
4810
|
+
selectField.defines({
|
4372
4811
|
events: {
|
4373
4812
|
"change select": "change_handler"
|
4374
4813
|
},
|
4375
|
-
hooks: ["after:select"],
|
4376
|
-
className: 'luca-ui-select-field luca-ui-field',
|
4377
4814
|
template: "fields/select_field",
|
4378
4815
|
includeBlank: true,
|
4379
4816
|
blankValue: '',
|
@@ -4381,7 +4818,7 @@
|
|
4381
4818
|
initialize: function(options) {
|
4382
4819
|
this.options = options != null ? options : {};
|
4383
4820
|
_.extend(this, this.options);
|
4384
|
-
_.extend(this, Luca.
|
4821
|
+
_.extend(this, Luca.concerns.Deferrable);
|
4385
4822
|
_.bindAll(this, "change_handler", "populateOptions", "beforeFetch");
|
4386
4823
|
Luca.core.Field.prototype.initialize.apply(this, arguments);
|
4387
4824
|
this.input_id || (this.input_id = _.uniqueId('field'));
|
@@ -4509,8 +4946,13 @@
|
|
4509
4946
|
|
4510
4947
|
}).call(this);
|
4511
4948
|
(function() {
|
4949
|
+
var textField;
|
4950
|
+
|
4951
|
+
textField = Luca.register('Luca.fields.TextField');
|
4512
4952
|
|
4513
|
-
|
4953
|
+
textField["extends"]('Luca.core.Field');
|
4954
|
+
|
4955
|
+
textField.defines({
|
4514
4956
|
events: {
|
4515
4957
|
"blur input": "blur_handler",
|
4516
4958
|
"focus input": "focus_handler",
|
@@ -4554,9 +4996,13 @@
|
|
4554
4996
|
|
4555
4997
|
}).call(this);
|
4556
4998
|
(function() {
|
4999
|
+
var typeAheadField;
|
5000
|
+
|
5001
|
+
typeAheadField = Luca.register("Luca.fields.TypeAheadField");
|
4557
5002
|
|
4558
|
-
|
4559
|
-
|
5003
|
+
typeAheadField["extends"]("Luca.fields.TextField");
|
5004
|
+
|
5005
|
+
typeAheadField.defines({
|
4560
5006
|
getSource: function() {
|
4561
5007
|
return Luca.util.read(this.source) || [];
|
4562
5008
|
},
|
@@ -4578,13 +5024,19 @@
|
|
4578
5024
|
|
4579
5025
|
}).call(this);
|
4580
5026
|
(function() {
|
5027
|
+
var toolbar;
|
5028
|
+
|
5029
|
+
toolbar = Luca.register("Luca.components.FormButtonToolbar");
|
4581
5030
|
|
4582
|
-
|
5031
|
+
toolbar["extends"]("Luca.components.Toolbar");
|
5032
|
+
|
5033
|
+
toolbar.defines({
|
4583
5034
|
className: 'luca-ui-form-toolbar form-actions',
|
4584
5035
|
position: 'bottom',
|
4585
5036
|
includeReset: false,
|
4586
5037
|
render: function() {
|
4587
|
-
|
5038
|
+
$(this.container).append(this.el);
|
5039
|
+
return this;
|
4588
5040
|
},
|
4589
5041
|
initialize: function(options) {
|
4590
5042
|
this.options = options != null ? options : {};
|
@@ -4608,32 +5060,17 @@
|
|
4608
5060
|
|
4609
5061
|
}).call(this);
|
4610
5062
|
(function() {
|
4611
|
-
var
|
5063
|
+
var formView;
|
4612
5064
|
|
4613
|
-
|
4614
|
-
|
4615
|
-
|
4616
|
-
|
4617
|
-
|
4618
|
-
eventId: "click:reset",
|
4619
|
-
className: "reset-button",
|
4620
|
-
align: 'right'
|
4621
|
-
}, {
|
4622
|
-
icon: "ok-sign",
|
4623
|
-
white: true,
|
4624
|
-
label: "Save Changes",
|
4625
|
-
eventId: "click:submit",
|
4626
|
-
color: "success",
|
4627
|
-
className: 'submit-button',
|
4628
|
-
align: 'right'
|
4629
|
-
}
|
4630
|
-
]
|
4631
|
-
};
|
5065
|
+
formView = Luca.register("Luca.components.FormView");
|
5066
|
+
|
5067
|
+
formView["extends"]("Luca.core.Container");
|
5068
|
+
|
5069
|
+
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");
|
4632
5070
|
|
4633
|
-
|
5071
|
+
formView.defines({
|
4634
5072
|
tagName: 'form',
|
4635
5073
|
className: 'luca-ui-form-view',
|
4636
|
-
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"],
|
4637
5074
|
events: {
|
4638
5075
|
"click .submit-button": "submitHandler",
|
4639
5076
|
"click .reset-button": "resetHandler"
|
@@ -4641,13 +5078,13 @@
|
|
4641
5078
|
toolbar: true,
|
4642
5079
|
legend: "",
|
4643
5080
|
bodyClassName: "form-view-body",
|
4644
|
-
version:
|
5081
|
+
version: 1,
|
4645
5082
|
initialize: function(options) {
|
4646
5083
|
this.options = options != null ? options : {};
|
4647
5084
|
if (this.loadMask == null) this.loadMask = Luca.enableBootstrap;
|
4648
5085
|
Luca.core.Container.prototype.initialize.apply(this, arguments);
|
4649
5086
|
this.components || (this.components = this.fields);
|
4650
|
-
_.bindAll(this, "submitHandler", "resetHandler", "renderToolbars"
|
5087
|
+
_.bindAll(this, "submitHandler", "resetHandler", "renderToolbars");
|
4651
5088
|
this.state || (this.state = new Backbone.Model);
|
4652
5089
|
this.setupHooks(this.hooks);
|
4653
5090
|
this.applyStyleClasses();
|
@@ -4661,7 +5098,7 @@
|
|
4661
5098
|
}
|
4662
5099
|
},
|
4663
5100
|
getDefaultToolbar: function() {
|
4664
|
-
return
|
5101
|
+
return Luca.components.FormView.defaultFormViewToolbar;
|
4665
5102
|
},
|
4666
5103
|
applyStyleClasses: function() {
|
4667
5104
|
if (Luca.enableBootstrap) this.applyBootstrapStyleClasses();
|
@@ -4875,6 +5312,26 @@
|
|
4875
5312
|
}
|
4876
5313
|
});
|
4877
5314
|
|
5315
|
+
Luca.components.FormView.defaultFormViewToolbar = {
|
5316
|
+
buttons: [
|
5317
|
+
{
|
5318
|
+
icon: "remove-sign",
|
5319
|
+
label: "Reset",
|
5320
|
+
eventId: "click:reset",
|
5321
|
+
className: "reset-button",
|
5322
|
+
align: 'right'
|
5323
|
+
}, {
|
5324
|
+
icon: "ok-sign",
|
5325
|
+
white: true,
|
5326
|
+
label: "Save Changes",
|
5327
|
+
eventId: "click:submit",
|
5328
|
+
color: "success",
|
5329
|
+
className: 'submit-button',
|
5330
|
+
align: 'right'
|
5331
|
+
}
|
5332
|
+
]
|
5333
|
+
};
|
5334
|
+
|
4878
5335
|
}).call(this);
|
4879
5336
|
(function() {
|
4880
5337
|
|
@@ -4901,7 +5358,7 @@
|
|
4901
5358
|
var _this = this;
|
4902
5359
|
this.options = options != null ? options : {};
|
4903
5360
|
_.extend(this, this.options);
|
4904
|
-
_.extend(this, Luca.
|
5361
|
+
_.extend(this, Luca.concerns.Deferrable);
|
4905
5362
|
if (this.loadMask == null) this.loadMask = Luca.enableBootstrap;
|
4906
5363
|
if (this.loadMask === true) {
|
4907
5364
|
this.loadMaskEl || (this.loadMaskEl = ".luca-ui-g-view-body");
|
@@ -5127,13 +5584,13 @@
|
|
5127
5584
|
|
5128
5585
|
}).call(this);
|
5129
5586
|
(function() {
|
5130
|
-
var
|
5587
|
+
var multiView, propagateCollectionComponents, validateComponent;
|
5131
5588
|
|
5132
|
-
multiView = Luca.
|
5589
|
+
multiView = Luca.register("Luca.components.MultiCollectionView");
|
5133
5590
|
|
5134
5591
|
multiView["extends"]("Luca.containers.CardView");
|
5135
5592
|
|
5136
|
-
multiView.
|
5593
|
+
multiView.mixesIn("LoadMaskable", "Filterable", "Paginatable");
|
5137
5594
|
|
5138
5595
|
multiView.triggers("before:refresh", "after:refresh", "refresh", "empty:results");
|
5139
5596
|
|
@@ -5153,51 +5610,73 @@
|
|
5153
5610
|
view = _ref[_i];
|
5154
5611
|
validateComponent(view);
|
5155
5612
|
}
|
5156
|
-
this.on("
|
5613
|
+
this.on("refresh", this.refresh, this);
|
5157
5614
|
this.on("after:card:switch", this.refresh, this);
|
5158
|
-
this.on("
|
5159
|
-
this.
|
5615
|
+
this.on("after:components", propagateCollectionComponents, this);
|
5616
|
+
this.debug("multi collection , proto initialize");
|
5160
5617
|
return Luca.containers.CardView.prototype.initialize.apply(this, arguments);
|
5161
5618
|
},
|
5619
|
+
relayAfterRefresh: function(models, query, options) {
|
5620
|
+
return this.trigger("after:refresh", models, query, options);
|
5621
|
+
},
|
5162
5622
|
refresh: function() {
|
5163
5623
|
var _ref;
|
5164
5624
|
return (_ref = this.activeComponent()) != null ? _ref.trigger("refresh") : void 0;
|
5165
5625
|
},
|
5166
|
-
|
5167
|
-
|
5168
|
-
|
5169
|
-
|
5170
|
-
|
5171
|
-
|
5172
|
-
|
5173
|
-
|
5174
|
-
|
5175
|
-
|
5176
|
-
|
5177
|
-
|
5626
|
+
getCollection: function() {
|
5627
|
+
return this.collection;
|
5628
|
+
},
|
5629
|
+
applyQuery: function(query, queryOptions) {
|
5630
|
+
if (query == null) query = {};
|
5631
|
+
if (queryOptions == null) queryOptions = {};
|
5632
|
+
this.query = query;
|
5633
|
+
this.queryOptions = queryOptions;
|
5634
|
+
return this;
|
5635
|
+
},
|
5636
|
+
getQuery: function() {
|
5637
|
+
var query, querySource, _i, _len, _ref;
|
5638
|
+
this.debug("Get Query");
|
5639
|
+
query = this.query || (this.query = {});
|
5640
|
+
_ref = this.querySources;
|
5178
5641
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
5179
|
-
|
5180
|
-
|
5181
|
-
if (component === container.activeComponent()) {
|
5182
|
-
return container.trigger(eventId);
|
5183
|
-
}
|
5184
|
-
}));
|
5642
|
+
querySource = _ref[_i];
|
5643
|
+
query = _.extend(query, querySource() || {});
|
5185
5644
|
}
|
5186
|
-
return
|
5187
|
-
}
|
5188
|
-
|
5645
|
+
return query;
|
5646
|
+
},
|
5647
|
+
getQueryOptions: function() {
|
5648
|
+
var optionSource, options, _i, _len, _ref;
|
5649
|
+
this.debug("Get Query Options");
|
5650
|
+
options = this.queryOptions || (this.queryOptions = {});
|
5651
|
+
_ref = this.optionsSources;
|
5652
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
5653
|
+
optionSource = _ref[_i];
|
5654
|
+
options = _.extend(options, optionSource() || {});
|
5655
|
+
}
|
5656
|
+
return options;
|
5657
|
+
}
|
5658
|
+
});
|
5189
5659
|
|
5190
5660
|
propagateCollectionComponents = function() {
|
5191
|
-
var component, container, _i, _len, _ref, _results
|
5661
|
+
var component, container, _i, _len, _ref, _results,
|
5662
|
+
_this = this;
|
5192
5663
|
container = this;
|
5193
5664
|
_ref = this.components;
|
5194
5665
|
_results = [];
|
5195
5666
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
5196
5667
|
component = _ref[_i];
|
5668
|
+
component.on("after:refresh", function(models, query, options) {
|
5669
|
+
_this.debug("collection member after refresh");
|
5670
|
+
return _this.trigger("after:refresh", models, query, options);
|
5671
|
+
});
|
5197
5672
|
_results.push(_.extend(component, {
|
5198
|
-
collection:
|
5199
|
-
getQuery:
|
5200
|
-
|
5673
|
+
collection: container.getCollection(),
|
5674
|
+
getQuery: function() {
|
5675
|
+
return container.getQuery.call(container);
|
5676
|
+
},
|
5677
|
+
getQueryOptions: function() {
|
5678
|
+
return container.getQueryOptions.call(container);
|
5679
|
+
}
|
5201
5680
|
}));
|
5202
5681
|
}
|
5203
5682
|
return _results;
|
@@ -5264,8 +5743,12 @@
|
|
5264
5743
|
"click a.prev": "previousPage"
|
5265
5744
|
},
|
5266
5745
|
afterInitialize: function() {
|
5267
|
-
|
5268
|
-
|
5746
|
+
var _ref,
|
5747
|
+
_this = this;
|
5748
|
+
_.bindAll(this, "updateWithPageCount");
|
5749
|
+
return (_ref = this.state) != null ? _ref.on("change", function(state, numberOfPages) {
|
5750
|
+
return _this.updateWithPageCount(state.get('numberOfPages'));
|
5751
|
+
}) : void 0;
|
5269
5752
|
},
|
5270
5753
|
limit: function() {
|
5271
5754
|
var _ref;
|
@@ -5318,16 +5801,22 @@
|
|
5318
5801
|
pageButtons: function() {
|
5319
5802
|
return this.$('a[data-page-number]', this.pageButtonContainer());
|
5320
5803
|
},
|
5321
|
-
|
5322
|
-
var
|
5804
|
+
updateWithPageCount: function(pageCount, models) {
|
5805
|
+
var modelCount,
|
5806
|
+
_this = this;
|
5807
|
+
this.pageCount = pageCount;
|
5808
|
+
if (models == null) models = [];
|
5809
|
+
modelCount = models.length;
|
5323
5810
|
this.pageButtonContainer().empty();
|
5324
|
-
|
5325
|
-
button
|
5811
|
+
_(this.pageCount).times(function(index) {
|
5812
|
+
var button, page;
|
5813
|
+
page = index + 1;
|
5814
|
+
button = _this.make("a", {
|
5326
5815
|
"data-page-number": page,
|
5327
5816
|
"class": "page"
|
5328
5817
|
}, page);
|
5329
|
-
|
5330
|
-
}
|
5818
|
+
return _this.pageButtonContainer().append(button);
|
5819
|
+
});
|
5331
5820
|
this.toggleNavigationButtons();
|
5332
5821
|
this.selectActivePageButton();
|
5333
5822
|
return this;
|
@@ -5346,7 +5835,7 @@
|
|
5346
5835
|
return this.pageButtons().filter("[data-page-number='" + (this.page()) + "']");
|
5347
5836
|
},
|
5348
5837
|
totalPages: function() {
|
5349
|
-
return
|
5838
|
+
return this.pageCount;
|
5350
5839
|
},
|
5351
5840
|
totalItems: function() {
|
5352
5841
|
var _ref;
|