ende 0.3.13 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/component.json +7 -0
  3. data/lib/assets/javascripts/aura/extensions/devise.js.coffee +2 -2
  4. data/lib/assets/javascripts/aura/extensions/loader.js.coffee +13 -11
  5. data/lib/assets/javascripts/aura/extensions/mask.js.coffee +54 -40
  6. data/lib/assets/javascripts/aura/extensions/mediator.js +5 -3
  7. data/lib/assets/javascripts/aura/extensions/models.js.coffee.erb +2 -2
  8. data/lib/assets/javascripts/aura/extensions/rivets/accounting.js.coffee +7 -1
  9. data/lib/assets/javascripts/aura/extensions/rivets/formatters.js.coffee +5 -1
  10. data/lib/assets/javascripts/aura/extensions/rivets.js.coffee +47 -29
  11. data/lib/assets/javascripts/aura/extensions/routes.js.coffee +10 -5
  12. data/lib/assets/javascripts/aura/extensions/states.js.coffee +2 -2
  13. data/lib/assets/javascripts/aura/extensions/widget/eventable.js.coffee +18 -19
  14. data/lib/assets/javascripts/aura/extensions/widget/lifecycleable.js.coffee +15 -10
  15. data/lib/assets/javascripts/config/initializers/jquery.js.coffee +2 -1
  16. data/lib/assets/javascripts/config/initializers/requirejs.js.coffee +3 -4
  17. data/lib/assets/javascripts/config/initializers.js.coffee +3 -0
  18. data/lib/assets/javascripts/config/load_components.js.coffee +106 -83
  19. data/lib/assets/javascripts/ende.js.coffee +13 -4
  20. data/lib/assets/javascripts/widgets/authenticator/presenter.js.coffee +3 -2
  21. data/lib/assets/javascripts/widgets/dialog/main.js.coffee +7 -3
  22. data/lib/assets/javascripts/widgets/support/main.js.coffee +3 -4
  23. data/lib/assets/javascripts/widgets/viewer/main.js.coffee +35 -103
  24. data/lib/assets/javascripts/widgets/viewer/presenters/default.js.coffee +2 -4
  25. data/lib/ende/version.rb +1 -1
  26. data/vendor/assets/components/build.js +30877 -0
  27. data/vendor/assets/components/ende_build.js +2487 -148
  28. data/vendor/assets/components/indemma_with_none.js +30553 -0
  29. data/vendor/assets/javascripts/spin/spin.js +349 -0
  30. data/vendor/components/indefinido-indemma/.gitignore +3 -0
  31. data/vendor/components/indefinido-indemma/.ruby-gemset +1 -1
  32. data/vendor/components/indefinido-indemma/.ruby-version +1 -1
  33. data/vendor/components/indefinido-indemma/build/development.js +17 -14
  34. data/vendor/components/indefinido-indemma/build/release.js +213 -148
  35. data/vendor/components/indefinido-indemma/build/test.js +213 -148
  36. data/vendor/components/indefinido-indemma/component.json +3 -1
  37. data/vendor/components/indefinido-indemma/karma.conf.js +50 -60
  38. data/vendor/components/indefinido-indemma/lib/record/associable.js +17 -17
  39. data/vendor/components/indefinido-indemma/lib/record/persistable.js +8 -1
  40. data/vendor/components/indefinido-indemma/lib/record/queryable.js +3 -0
  41. data/vendor/components/indefinido-indemma/lib/record/resource.js +25 -45
  42. data/vendor/components/indefinido-indemma/lib/record/restfulable.js +82 -28
  43. data/vendor/components/indefinido-indemma/lib/record/scopable.js +28 -2
  44. data/vendor/components/indefinido-indemma/lib/record/storable.js +1 -1
  45. data/vendor/components/indefinido-indemma/lib/record/validatable.js +15 -23
  46. data/vendor/components/indefinido-indemma/lib/record/validations/associated.js +3 -5
  47. data/vendor/components/indefinido-indemma/lib/record/validations/confirmation.js +3 -5
  48. data/vendor/components/indefinido-indemma/lib/record/validations/cpf.js +5 -7
  49. data/vendor/components/indefinido-indemma/lib/record/validations/presence.js +3 -5
  50. data/vendor/components/indefinido-indemma/lib/record/validations/remote.js +3 -7
  51. data/vendor/components/indefinido-indemma/lib/record/validations/type.js +2 -2
  52. data/vendor/components/indefinido-indemma/lib/record/validations/validatorable.js +12 -0
  53. data/vendor/components/indefinido-indemma/package.json +9 -0
  54. data/vendor/components/indefinido-indemma/spec/record/restfulable_spec.js +12 -0
  55. data/vendor/components/indefinido-indemma/spec/record/validatable_spec.js +4 -4
  56. data/vendor/components/indefinido-indemma/spec/record/validations/associated_spec.js +2 -2
  57. data/vendor/components/indefinido-indemma/src/lib/record/associable.coffee +44 -20
  58. data/vendor/components/indefinido-indemma/src/lib/record/persistable.coffee +7 -2
  59. data/vendor/components/indefinido-indemma/src/lib/record/queryable.coffee +1 -0
  60. data/vendor/components/indefinido-indemma/src/lib/record/resource.coffee +32 -32
  61. data/vendor/components/indefinido-indemma/src/lib/record/restfulable.coffee +79 -22
  62. data/vendor/components/indefinido-indemma/src/lib/record/scopable.coffee +27 -8
  63. data/vendor/components/indefinido-indemma/src/lib/record/storable.coffee +1 -1
  64. data/vendor/components/indefinido-indemma/src/lib/record/validatable.coffee +20 -19
  65. data/vendor/components/indefinido-indemma/src/lib/record/validations/associated.coffee +3 -5
  66. data/vendor/components/indefinido-indemma/src/lib/record/validations/confirmation.coffee +2 -4
  67. data/vendor/components/indefinido-indemma/src/lib/record/validations/cpf.coffee +4 -5
  68. data/vendor/components/indefinido-indemma/src/lib/record/validations/presence.coffee +2 -5
  69. data/vendor/components/indefinido-indemma/src/lib/record/validations/remote.coffee +3 -7
  70. data/vendor/components/indefinido-indemma/src/lib/record/validations/type.coffee +2 -3
  71. data/vendor/components/indefinido-indemma/src/lib/record/validations/validatorable.coffee +5 -0
  72. data/vendor/components/indefinido-indemma/src/spec/record/restfulable_spec.coffee +8 -0
  73. data/vendor/components/indefinido-indemma/src/spec/record/validatable_spec.coffee +4 -4
  74. data/vendor/components/indefinido-indemma/src/spec/record/validations/associated_spec.coffee +2 -2
  75. metadata +9 -3
  76. data/lib/assets/javascripts/aura/extensions/rivets/formatters.js.coffee~ +0 -0
@@ -18625,26 +18625,22 @@ singular = {
18625
18625
  subscribers = {
18626
18626
  belongs_to: {
18627
18627
  foreign_key: function(resource_id) {
18628
- var associated, association_name, current_resource_id, resource, _ref;
18628
+ var association_name, current_resource_id, resource, _ref;
18629
18629
 
18630
18630
  association_name = this.resource.toString();
18631
- if (resource_id === null || resource_id === void 0) {
18631
+ if (!resource_id) {
18632
18632
  this.dirty = true;
18633
18633
  this.owner[association_name] = resource_id;
18634
18634
  return resource_id;
18635
18635
  }
18636
- current_resource_id = (_ref = this.owner[association_name]) != null ? _ref._id : void 0;
18636
+ current_resource_id = (_ref = this.owner.observed[association_name]) != null ? _ref._id : void 0;
18637
18637
  if (resource_id !== current_resource_id) {
18638
18638
  resource = model[association_name];
18639
18639
  if (!resource) {
18640
18640
  console.warn("subscribers.belongs_to.foreign_key: associated factory not found for model: " + association_name);
18641
18641
  return resource_id;
18642
18642
  }
18643
- associated = resource.find(resource_id);
18644
- associated || (associated = resource({
18645
- _id: resource_id
18646
- }));
18647
- this.owner.observed[association_name] = associated;
18643
+ this.owner.observed[association_name] = null;
18648
18644
  }
18649
18645
  return resource_id;
18650
18646
  },
@@ -18682,10 +18678,12 @@ modifiers = {
18682
18678
  return associated;
18683
18679
  }
18684
18680
  associated = resource.find(associated_id || associated._id);
18681
+ if (associated) {
18682
+ return _this.owner.observed[association_name] = associated;
18683
+ }
18685
18684
  associated || (associated = resource({
18686
18685
  _id: associated_id
18687
18686
  }));
18688
- resource.storage.store(associated._id, associated);
18689
18687
  associated.reload();
18690
18688
  return _this.owner.observed[association_name] = associated;
18691
18689
  },
@@ -18707,8 +18705,8 @@ callbacks = {
18707
18705
  for (_i = 0, _len = association_names.length; _i < _len; _i++) {
18708
18706
  association_name = association_names[_i];
18709
18707
  associations_attributes = this["" + association_name + "_attributes"];
18708
+ association = this[model.pluralize(association_name)];
18710
18709
  if (associations_attributes && associations_attributes.length) {
18711
- association = this[model.pluralize(association_name)];
18712
18710
  if (!association) {
18713
18711
  message = "has_many.nest_attributes: Association not found for " + association_name + ". \n";
18714
18712
  message += "did you set it on model declaration? \n has_many: " + association_name + " ";
@@ -18798,7 +18796,7 @@ associable = {
18798
18796
  return true;
18799
18797
  },
18800
18798
  create_after_hooks: function(definition) {
18801
- var association_name, association_proxy, old_resource_id, options, resource, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results;
18799
+ var association_attributes, association_name, association_proxy, old_dirty, old_resource_id, options, resource, _i, _j, _k, _len, _len1, _len2, _name, _ref, _ref1, _ref2, _results;
18802
18800
 
18803
18801
  options = model[this.resource.name || this.resource.toString()];
18804
18802
  if (options.has_many) {
@@ -18811,6 +18809,11 @@ associable = {
18811
18809
  parent: this
18812
18810
  };
18813
18811
  association_name = model.pluralize(resource);
18812
+ association_attributes = this[association_name] || [];
18813
+ this[_name = "" + association_name + "_attributes"] || (this[_name] = []);
18814
+ if (association_attributes.length) {
18815
+ this["" + association_name + "_attributes"] = this["" + association_name + "_attributes"].concat(association_attributes);
18816
+ }
18814
18817
  this[association_name] = $.extend(association_proxy, plural);
18815
18818
  }
18816
18819
  this.after('saved', callbacks.has_many.update_association);
@@ -18846,15 +18849,12 @@ associable = {
18846
18849
  this["build_" + resource] = $.proxy(singular.build, association_proxy);
18847
18850
  this["create_" + resource] = $.proxy(singular.create, association_proxy);
18848
18851
  old_resource_id = this["" + resource + "_id"];
18852
+ old_dirty = this.dirty;
18849
18853
  this["" + resource + "_id"] = null;
18850
18854
  this.subscribe("" + resource + "_id", $.proxy(subscribers.belongs_to.foreign_key, association_proxy));
18851
18855
  this.subscribe(resource.toString(), $.proxy(subscribers.belongs_to.associated_changed, association_proxy));
18852
- this.resource_id = old_resource_id;
18853
- if (this["" + resource + "_id"] && !this[resource]) {
18854
- _results.push(this.publish("" + resource + "_id", this["" + resource + "_id"]));
18855
- } else {
18856
- _results.push(void 0);
18857
- }
18856
+ this["" + resource + "_id"] = old_resource_id;
18857
+ _results.push(this.dirty = old_dirty);
18858
18858
  }
18859
18859
  return _results;
18860
18860
  }
@@ -18929,7 +18929,14 @@ handlers = {
18929
18929
  persistable = {
18930
18930
  record: {
18931
18931
  after_initialize: function() {
18932
- return this.after('saved', handlers.store_after_saved);
18932
+ var storage;
18933
+
18934
+ if (this._id) {
18935
+ storage = model[this.resource.toString()].storage;
18936
+ return storage.store(this._id, this);
18937
+ } else {
18938
+ return this.after('saved', handlers.store_after_saved);
18939
+ }
18933
18940
  }
18934
18941
  }
18935
18942
  };
@@ -18971,7 +18978,7 @@ storable = stampit({
18971
18978
  return collection[key];
18972
18979
  } else {
18973
18980
  this.writes++;
18974
- value.sustained = true;
18981
+ value.sustained || (value.sustained = true);
18975
18982
  return collection[key] = value;
18976
18983
  }
18977
18984
  },
@@ -19008,6 +19015,9 @@ stampit = require('../../vendor/stampit');
19008
19015
  queryable = {
19009
19016
  storage: storable(),
19010
19017
  find: function(key) {
19018
+ if (!key) {
19019
+ throw new TypeError("InvalidFind: resource.find was called with a falsey value");
19020
+ }
19011
19021
  return this.storage.store(key);
19012
19022
  },
19013
19023
  all: function() {
@@ -19032,7 +19042,7 @@ model.mix(function(modelable) {
19032
19042
 
19033
19043
  });
19034
19044
  require.register("indefinido-indemma/lib/record/resource.js", function(exports, require, module){
19035
- var model, resource, resourceable, stampit;
19045
+ var descriptors, model, resource, resourceable, stampit;
19036
19046
 
19037
19047
  stampit = require('../../vendor/stampit');
19038
19048
 
@@ -19059,34 +19069,11 @@ resource = stampit({
19059
19069
  return this;
19060
19070
  });
19061
19071
 
19062
- resourceable = {
19063
- pluralize: function(word, count, plural) {
19064
- if (!(word && word.length)) {
19065
- throw new TypeError("Invalid string passed to pluralize '" + word + "'");
19066
- }
19067
- if (word.indexOf('s') !== word.length - 1) {
19068
- return owl.pluralize(word, count, plural);
19069
- } else {
19070
- return word;
19071
- }
19072
- },
19073
- singularize: function(word) {
19074
- if (!(word && word.length)) {
19075
- throw new TypeError("Invalid string passed to singularize '" + word + "'");
19076
- }
19077
- if (word.lastIndexOf('s') === word.length - 1) {
19078
- return word.substring(0, word.length - 1);
19079
- } else {
19080
- return word;
19081
- }
19082
- },
19072
+ descriptors = {
19083
19073
  route: {
19084
19074
  get: function() {
19085
19075
  var route;
19086
19076
 
19087
- if (this.initial_route != null) {
19088
- return this.initial_route;
19089
- }
19090
19077
  if (typeof this.resource === 'string') {
19091
19078
  this.resource = {
19092
19079
  name: this.resource
@@ -19100,33 +19087,36 @@ resourceable = {
19100
19087
  route += this.resource.scope + '/';
19101
19088
  }
19102
19089
  route += this.resource.singular ? this.resource.name : model.pluralize(this.resource.name);
19103
- this.initial_route = route;
19104
- return route;
19090
+ return this.route = route;
19105
19091
  },
19106
- set: function(value) {
19107
- return this.initial_route = value;
19092
+ configurable: true
19093
+ }
19094
+ };
19095
+
19096
+ resourceable = {
19097
+ pluralize: function(word, count, plural) {
19098
+ if (!(word && word.length)) {
19099
+ throw new TypeError("Invalid string passed to pluralize '" + word + "'");
19100
+ }
19101
+ if (word.indexOf('s') !== word.length - 1) {
19102
+ return owl.pluralize(word, count, plural);
19103
+ } else {
19104
+ return word;
19108
19105
  }
19109
19106
  },
19110
- parent_id: {
19111
- get: function() {
19112
- if (this[this.parent_resource]) {
19113
- return this[this.parent_resource]._id;
19114
- }
19115
- },
19116
- set: function() {
19117
- return console.error('Warning changing associations throught parent_id not allowed for security and style guide purposes');
19107
+ singularize: function(word) {
19108
+ if (!(word && word.length)) {
19109
+ throw new TypeError("Invalid string passed to singularize '" + word + "'");
19110
+ }
19111
+ if (word.lastIndexOf('s') === word.length - 1) {
19112
+ return word.substring(0, word.length - 1);
19113
+ } else {
19114
+ return word;
19118
19115
  }
19119
19116
  },
19120
19117
  initialize: function() {
19121
19118
  var resource_definition, _ref;
19122
19119
 
19123
- if (this.parent_resource) {
19124
- Object.defineProperty(this, "" + this.parent_resource + "_id", {
19125
- value: resourceable.parent_id,
19126
- configurable: true,
19127
- enumerable: true
19128
- });
19129
- }
19130
19120
  resource_definition = {};
19131
19121
  if (typeof this.resource === 'string') {
19132
19122
  resource_definition = {
@@ -19139,7 +19129,7 @@ resourceable = {
19139
19129
  }
19140
19130
  resource_definition.parent = this.parent_resource;
19141
19131
  this.resource = resource(resource_definition);
19142
- return (_ref = this.route) != null ? _ref : Object.defineProperty(this, 'route', resourceable.route);
19132
+ return (_ref = this.route) != null ? _ref : Object.defineProperty(this, 'route', descriptors.route);
19143
19133
  }
19144
19134
  };
19145
19135
 
@@ -19198,7 +19188,7 @@ request = function(method, url, data) {
19198
19188
 
19199
19189
  });
19200
19190
  require.register("indefinido-indemma/lib/record/restfulable.js", function(exports, require, module){
19201
- var $, merge, model, observable, record, rest, restful, type, util,
19191
+ var $, merge, model, observable, record, rest, restful, root, type, util,
19202
19192
  __slice = [].slice;
19203
19193
 
19204
19194
  merge = require('assimilate').withStrategy('deep');
@@ -19211,15 +19201,17 @@ $ = require('jquery');
19211
19201
 
19212
19202
  rest = require('./rest.js');
19213
19203
 
19204
+ root = typeof exports !== "undefined" && exports !== null ? exports : this;
19205
+
19214
19206
  util = {
19215
19207
  model: {
19216
- map: function(models) {
19217
- var model, _i, _len, _results;
19208
+ map: function(records) {
19209
+ var record, _i, _len, _results;
19218
19210
 
19219
19211
  _results = [];
19220
- for (_i = 0, _len = models.length; _i < _len; _i++) {
19221
- model = models[_i];
19222
- _results.push(this(model));
19212
+ for (_i = 0, _len = records.length; _i < _len; _i++) {
19213
+ record = records[_i];
19214
+ _results.push(this(record));
19223
19215
  }
19224
19216
  return _results;
19225
19217
  }
@@ -19251,15 +19243,15 @@ restful = {
19251
19243
  }
19252
19244
  return $.when.apply($, savings);
19253
19245
  },
19254
- all: function(conditions, callback) {
19246
+ all: function(conditions, doned, failed) {
19255
19247
  if (conditions == null) {
19256
19248
  conditions = {};
19257
19249
  }
19258
19250
  if (typeof conditions === 'function') {
19259
- callback = conditions;
19251
+ doned = conditions;
19260
19252
  conditions = {};
19261
19253
  }
19262
- return $.when(rest.get.call(this, conditions)).then(util.model.map).done(callback);
19254
+ return $.when(rest.get.call(this, conditions)).then(util.model.map).done(doned).fail(failed);
19263
19255
  },
19264
19256
  first: function(conditions, callback) {
19265
19257
  var namespaced;
@@ -19277,15 +19269,21 @@ restful = {
19277
19269
  return this.all(conditions, callback);
19278
19270
  },
19279
19271
  get: function(action, data) {
19280
- var old_route, payload, promise, resource, route;
19272
+ var default_route, old_route, payload, promise, resource;
19281
19273
 
19282
19274
  if (data == null) {
19283
19275
  data = {};
19284
19276
  }
19285
19277
  old_route = this.route;
19286
- this.route = "/" + (model.pluralize(this.resource.name));
19278
+ default_route = "/" + (model.pluralize(this.resource.name));
19279
+ if (default_route !== this.route) {
19280
+ this.route = default_route;
19281
+ }
19287
19282
  if (action) {
19288
- this.route += "/" + action;
19283
+ Object.defineProperty(this, 'route', {
19284
+ value: "" + default_route + "/" + action,
19285
+ configurable: true
19286
+ });
19289
19287
  }
19290
19288
  resource = data.resource;
19291
19289
  if (data && data.json) {
@@ -19297,13 +19295,19 @@ restful = {
19297
19295
  data[resource] = payload;
19298
19296
  }
19299
19297
  promise = rest.get.call(this, data);
19300
- route = old_route;
19298
+ Object.defineProperty(this, 'route', {
19299
+ value: old_route,
19300
+ configurable: true
19301
+ });
19301
19302
  return promise;
19302
19303
  },
19303
19304
  put: rest.put,
19304
19305
  "delete": rest["delete"]
19305
19306
  },
19306
19307
  record: {
19308
+ ready: function(callback) {
19309
+ return callback.call(this);
19310
+ },
19307
19311
  reload: function() {
19308
19312
  var data, param, params, promise, _i, _len;
19309
19313
 
@@ -19315,6 +19319,11 @@ restful = {
19315
19319
  promise = rest.get.call(this, data || {});
19316
19320
  promise.done(this.assign_attributes);
19317
19321
  promise.fail(this.failed);
19322
+ this.reloading = promise;
19323
+ this.ready = function() {
19324
+ console.warn("resource.ready was deprecated, please use resource.reloading.done");
19325
+ return promise.done.apply(promise, arguments);
19326
+ };
19318
19327
  for (_i = 0, _len = params.length; _i < _len; _i++) {
19319
19328
  param = params[_i];
19320
19329
  promise.done(param);
@@ -19322,7 +19331,7 @@ restful = {
19322
19331
  return promise;
19323
19332
  },
19324
19333
  assign_attributes: function(attributes) {
19325
- var association, association_attributes, association_name, associations_attributes, attribute, message, singular_resource, _i, _j, _k, _l, _len, _len1, _len2, _len3, _ref, _ref1, _ref2, _results;
19334
+ var association, association_attributes, association_name, associations_attributes, attribute, message, name, singular_resource, _i, _j, _k, _l, _len, _len1, _len2, _len3, _ref, _ref1, _ref2, _results;
19326
19335
 
19327
19336
  _ref = model[this.resource.toString()].has_many;
19328
19337
  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
@@ -19367,9 +19376,18 @@ restful = {
19367
19376
  }
19368
19377
  }
19369
19378
  _results = [];
19370
- for (attribute in attributes) {
19371
- if (attribute !== this[attribute]) {
19372
- _results.push(this[attribute] = attributes[attribute]);
19379
+ for (name in attributes) {
19380
+ attribute = attributes[name];
19381
+ if (attribute !== this[name]) {
19382
+ if (type(attribute) === 'object') {
19383
+ if (JSON.stringify(attribute) !== JSON.stringify(this[name])) {
19384
+ _results.push(this[name] = attributes[name]);
19385
+ } else {
19386
+ _results.push(void 0);
19387
+ }
19388
+ } else {
19389
+ _results.push(this[name] = attributes[name]);
19390
+ }
19373
19391
  }
19374
19392
  }
19375
19393
  return _results;
@@ -19390,18 +19408,23 @@ restful = {
19390
19408
  saving: false,
19391
19409
  salvation: null,
19392
19410
  save: function(doned, failed, data) {
19393
- var salvation;
19411
+ var lock, salvation;
19394
19412
 
19413
+ lock = JSON.stringify(this.json());
19395
19414
  if (this.saving) {
19396
- return this.salvation;
19415
+ if (this.lock === lock) {
19416
+ return this.salvation;
19417
+ } else {
19418
+ this.salvation.abort();
19419
+ }
19397
19420
  }
19398
- this.lock = JSON.stringify(this.json());
19421
+ this.lock = lock;
19399
19422
  if (!this.dirty) {
19400
19423
  salvation = $.Deferred().resolveWith(this, null);
19401
19424
  }
19425
+ this.saving = true;
19402
19426
  salvation || (salvation = rest[this._id ? 'put' : 'post'].call(this, data));
19403
19427
  this.salvation = salvation;
19404
- this.saving = true;
19405
19428
  salvation.done(this.saved);
19406
19429
  salvation.fail(this.failed);
19407
19430
  salvation.always(function() {
@@ -19417,8 +19440,6 @@ restful = {
19417
19440
  if (this.lock === JSON.stringify(this.json())) {
19418
19441
  this.dirty = false;
19419
19442
  delete this.lock;
19420
- } else {
19421
- return this.save();
19422
19443
  }
19423
19444
  if (data != null) {
19424
19445
  this.assign_attributes(data);
@@ -19444,8 +19465,21 @@ restful = {
19444
19465
  }
19445
19466
  payload || (payload = xhr.responseText);
19446
19467
  switch (xhr.status) {
19468
+ case 0:
19469
+ message = status || xhr.statusText;
19470
+ switch (message) {
19471
+ case 'abort':
19472
+ console.info("salvation probably aborted");
19473
+ break;
19474
+ case 'error':
19475
+ console.info("server probably unreachable");
19476
+ break;
19477
+ default:
19478
+ throw new Error('Unhandled status code for xhr');
19479
+ }
19480
+ break;
19447
19481
  case 422:
19448
- definition = model[this.resource];
19482
+ definition = model[this.resource.toString()];
19449
19483
  _ref = payload.errors;
19450
19484
  for (attribute_name in _ref) {
19451
19485
  messages = _ref[attribute_name];
@@ -19470,8 +19504,9 @@ restful = {
19470
19504
  default:
19471
19505
  message = "Fail in " + this.resource + ".save:\n";
19472
19506
  message += "Record: " + this + "\n";
19473
- message += "Status: " + status + " (" + (payload.status || xhr.status) + ")\n";
19507
+ message += "Status: " + status + " (" + (payload || xhr).status + ")\n";
19474
19508
  message += "Error : " + (payload.error || payload.message || payload);
19509
+ console.log(message);
19475
19510
  }
19476
19511
  return this.saving = false;
19477
19512
  },
@@ -19483,20 +19518,27 @@ restful = {
19483
19518
  return JSON.stringify(serialized);
19484
19519
  },
19485
19520
  json: function(methods) {
19486
- var attribute, json, name, value, _i, _len, _ref;
19521
+ var attribute, definition, json, name, value, _i, _len, _ref;
19487
19522
 
19488
19523
  if (methods == null) {
19489
19524
  methods = {};
19490
19525
  }
19491
19526
  json = {};
19527
+ definition = model[this.resource.toString()];
19492
19528
  for (name in this) {
19493
- value = this[name];
19494
- if (!(type(value) !== 'function')) {
19529
+ if (!(type(value))) {
19530
+ continue;
19531
+ }
19532
+ if (definition.belongs_to.indexOf(name) !== -1 && this.nested_attributes.indexOf(name) === -1) {
19495
19533
  continue;
19496
19534
  }
19535
+ value = this[name];
19497
19536
  if (value == null) {
19498
19537
  continue;
19499
19538
  }
19539
+ if (type(value) === 'function') {
19540
+ continue;
19541
+ }
19500
19542
  if (type(value) === 'object') {
19501
19543
  if (value.toJSON != null) {
19502
19544
  json[name] = value.toJSON(methods[name]);
@@ -19522,6 +19564,8 @@ restful = {
19522
19564
  delete json.before_initialize;
19523
19565
  delete json.parent_resource;
19524
19566
  delete json.nested_attributes;
19567
+ delete json.reloading;
19568
+ delete json.ready;
19525
19569
  delete json.saving;
19526
19570
  delete json.salvation;
19527
19571
  delete json.sustained;
@@ -19568,7 +19612,7 @@ model.associable && model.associable.mix(function(singular_association, plural_a
19568
19612
 
19569
19613
  });
19570
19614
  require.register("indefinido-indemma/lib/record/scopable.js", function(exports, require, module){
19571
- var $, builders, defaults, extend, merge, model, record, rest, scopable, stampit,
19615
+ var $, builders, defaults, extend, merge, model, observable, record, rest, scopable, stampit, util,
19572
19616
  __slice = [].slice;
19573
19617
 
19574
19618
  require('./restfulable');
@@ -19579,12 +19623,29 @@ stampit = require('../../vendor/stampit');
19579
19623
 
19580
19624
  extend = require('assimilate');
19581
19625
 
19626
+ observable = require('observable').mixin;
19627
+
19582
19628
  merge = extend.withStrategy('deep');
19583
19629
 
19584
19630
  $ = require('jquery');
19585
19631
 
19586
19632
  rest = require('./rest');
19587
19633
 
19634
+ util = {
19635
+ model: {
19636
+ map: function(records) {
19637
+ var index, record, _i, _len, _results;
19638
+
19639
+ _results = [];
19640
+ for (index = _i = 0, _len = records.length; _i < _len; index = ++_i) {
19641
+ record = records[index];
19642
+ _results.push((this.build || this).call(this, record));
19643
+ }
19644
+ return _results;
19645
+ }
19646
+ }
19647
+ };
19648
+
19588
19649
  scopable = {
19589
19650
  builder: stampit().enclose(function() {
19590
19651
  return stampit.mixIn(function(name, type) {
@@ -19615,14 +19676,19 @@ scopable = {
19615
19676
  fetch: function(data, done, fail) {
19616
19677
  var deferred, scope;
19617
19678
 
19679
+ if (typeof data === 'function') {
19680
+ done = data;
19681
+ data = {};
19682
+ }
19618
19683
  scope = extend({}, this.scope.data);
19684
+ observable.unobserve(scope);
19619
19685
  if (scope.noned != null) {
19620
19686
  deferred = $.Deferred();
19621
19687
  deferred.resolveWith(this, [[]]);
19622
19688
  } else {
19623
19689
  deferred = rest.get.call(this, extend(scope, data));
19624
19690
  }
19625
- deferred.done(this.scope.then.concat(done)).fail([this.scope.fail, fail]);
19691
+ deferred.then(util.model.map).done(this.scope.then.concat([done])).fail(this.scope.fail.concat([fail]));
19626
19692
  this.scope.clear();
19627
19693
  return deferred;
19628
19694
  },
@@ -19665,6 +19731,10 @@ scopable = {
19665
19731
  return this;
19666
19732
  },
19667
19733
  fetch: function(data, done, fail) {
19734
+ if (typeof data === 'function') {
19735
+ done = data;
19736
+ data = null;
19737
+ }
19668
19738
  return this.scope.fetch.call(this, data, done, fail);
19669
19739
  },
19670
19740
  forward_scopes_to_associations: function() {
@@ -19921,10 +19991,23 @@ model.mix(function(modelable) {
19921
19991
  });
19922
19992
 
19923
19993
  });
19924
- require.register("indefinido-indemma/lib/record/validations/confirmation.js", function(exports, require, module){
19925
- var composed, confirmationable, stampit, validations;
19994
+ require.register("indefinido-indemma/lib/record/validations/validatorable.js", function(exports, require, module){
19995
+ var stampit;
19926
19996
 
19927
- validations = require('../validatable');
19997
+ stampit = require('../../../vendor/stampit');
19998
+
19999
+ module.exports = stampit({
20000
+ validate: function() {
20001
+ throw new Error('Composed factory must override the validate method');
20002
+ },
20003
+ validate_each: function() {
20004
+ throw new Error('Composed factory must override the validate each method');
20005
+ }
20006
+ });
20007
+
20008
+ });
20009
+ require.register("indefinido-indemma/lib/record/validations/confirmation.js", function(exports, require, module){
20010
+ var composed, confirmationable, stampit;
19928
20011
 
19929
20012
  stampit = require('../../../vendor/stampit');
19930
20013
 
@@ -19936,17 +20019,15 @@ confirmationable = stampit({
19936
20019
  }
19937
20020
  });
19938
20021
 
19939
- composed = stampit.compose(validations.validatable, confirmationable);
20022
+ composed = stampit.compose(require('./validatorable'), confirmationable);
19940
20023
 
19941
20024
  composed.definition_key = 'validates_confirmation_of';
19942
20025
 
19943
- validations.manager.validators.confirmation = composed;
20026
+ module.exports = composed;
19944
20027
 
19945
20028
  });
19946
20029
  require.register("indefinido-indemma/lib/record/validations/associated.js", function(exports, require, module){
19947
- var associationable, composed, stampit, validations;
19948
-
19949
- validations = require('../validatable');
20030
+ var associationable, composed, stampit;
19950
20031
 
19951
20032
  stampit = require('../../../vendor/stampit');
19952
20033
 
@@ -19969,17 +20050,15 @@ associationable = stampit({
19969
20050
  }
19970
20051
  });
19971
20052
 
19972
- composed = stampit.compose(validations.validatable, associationable);
20053
+ composed = stampit.compose(require('./validatorable'), associationable);
19973
20054
 
19974
20055
  composed.definition_key = 'validates_associated';
19975
20056
 
19976
- validations.manager.validators.association = composed;
20057
+ module.exports = composed;
19977
20058
 
19978
20059
  });
19979
20060
  require.register("indefinido-indemma/lib/record/validations/presence.js", function(exports, require, module){
19980
- var composed, presenceable, stampit, validations;
19981
-
19982
- validations = require('../validatable');
20061
+ var composed, presenceable, stampit;
19983
20062
 
19984
20063
  stampit = require('../../../vendor/stampit');
19985
20064
 
@@ -19991,19 +20070,15 @@ presenceable = stampit({
19991
20070
  }
19992
20071
  });
19993
20072
 
19994
- composed = stampit.compose(validations.validatable, presenceable);
20073
+ composed = stampit.compose(require('./validatorable'), presenceable);
19995
20074
 
19996
20075
  composed.definition_key = 'validates_presence_of';
19997
20076
 
19998
- validations.manager.validators.presence = composed;
20077
+ module.exports = composed;
19999
20078
 
20000
20079
  });
20001
20080
  require.register("indefinido-indemma/lib/record/validations/remote.js", function(exports, require, module){
20002
- var composed, remoteable, rest, root, stampit, validations;
20003
-
20004
- root = typeof exports !== "undefined" && exports !== null ? exports : window;
20005
-
20006
- validations = require('../validatable');
20081
+ var composed, remoteable, rest, stampit;
20007
20082
 
20008
20083
  rest = require('../rest');
20009
20084
 
@@ -20066,11 +20141,11 @@ remoteable = stampit({
20066
20141
  return this;
20067
20142
  });
20068
20143
 
20069
- composed = stampit.compose(validations.validatable, remoteable);
20144
+ composed = stampit.compose(require('./validatorable'), remoteable);
20070
20145
 
20071
20146
  composed.definition_key = 'validates_remotely';
20072
20147
 
20073
- validations.manager.validators.remote = composed;
20148
+ module.exports = composed;
20074
20149
 
20075
20150
  });
20076
20151
  require.register("indefinido-indemma/lib/record/validations/type.js", function(exports, require, module){
@@ -20098,17 +20173,15 @@ typeable = stampit({
20098
20173
  }
20099
20174
  });
20100
20175
 
20101
- composed = stampit.compose(validations.validatable, typeable);
20176
+ composed = stampit.compose(require('./validatorable'), typeable);
20102
20177
 
20103
20178
  composed.definition_key = 'validates_type_of';
20104
20179
 
20105
- validations.manager.validators.type = composed;
20180
+ module.exports = composed;
20106
20181
 
20107
20182
  });
20108
20183
  require.register("indefinido-indemma/lib/record/validations/cpf.js", function(exports, require, module){
20109
- var composed, cpfable, stampit, validations;
20110
-
20111
- validations = require('../validatable');
20184
+ var composed, cpfable, stampit;
20112
20185
 
20113
20186
  stampit = require('../../../vendor/stampit');
20114
20187
 
@@ -20128,7 +20201,7 @@ cpfable = stampit({
20128
20201
  d1 = 0;
20129
20202
  v = false;
20130
20203
  i = 0;
20131
- for (i = _i = 1; _i <= 9; i = ++_i) {
20204
+ for (i = _i = 0; _i <= 9; i = ++_i) {
20132
20205
  d1 += c.charAt(i) * (10 - i);
20133
20206
  }
20134
20207
  if (d1 === 0) {
@@ -20142,7 +20215,7 @@ cpfable = stampit({
20142
20215
  return false;
20143
20216
  }
20144
20217
  d1 *= 2;
20145
- for (i = _j = 1; _j <= 9; i = ++_j) {
20218
+ for (i = _j = 0; _j <= 9; i = ++_j) {
20146
20219
  d1 += c.charAt(i) * (11 - i);
20147
20220
  }
20148
20221
  d1 = 11 - (d1 % 11);
@@ -20161,19 +20234,19 @@ cpfable = stampit({
20161
20234
  }
20162
20235
  });
20163
20236
 
20164
- composed = stampit.compose(validations.validatable, cpfable);
20237
+ composed = stampit.compose(require('./validatorable'), cpfable);
20165
20238
 
20166
20239
  composed.definition_key = 'validates_cpf_format';
20167
20240
 
20168
- validations.manager.validators.cpf = composed;
20241
+ module.exports = composed;
20169
20242
 
20170
20243
  });
20171
20244
  require.register("indefinido-indemma/lib/record/validatable.js", function(exports, require, module){
20172
- var errorsable, extensions, initializers, manager, messages, observable, root, stampit, type, validatable;
20245
+ var errorsable, extensions, initializers, manager, messages, observable, root, stampit, type;
20173
20246
 
20174
20247
  require('./translationable');
20175
20248
 
20176
- root = typeof exports !== "undefined" && exports !== null ? exports : window;
20249
+ root = typeof exports !== "undefined" && exports !== null ? exports : this;
20177
20250
 
20178
20251
  stampit = require('../../vendor/stampit');
20179
20252
 
@@ -20264,7 +20337,7 @@ initializers = {
20264
20337
  });
20265
20338
  this.validated = false;
20266
20339
  this.subscribe('dirty', function(value) {
20267
- return this.validated = false;
20340
+ return value && (this.validated = false);
20268
20341
  });
20269
20342
  return Object.defineProperty(this, 'valid', {
20270
20343
  get: function() {
@@ -20358,7 +20431,12 @@ extensions = {
20358
20431
  this.validation.done(doned);
20359
20432
  this.validation.fail(failed);
20360
20433
  this.validation.then(function(record) {
20361
- return record.validated = true;
20434
+ var old_dirty;
20435
+
20436
+ old_dirty = record.dirty;
20437
+ record.dirty = null;
20438
+ record.validated || (record.validated = true);
20439
+ return record.dirty = old_dirty;
20362
20440
  });
20363
20441
  return this.validation;
20364
20442
  }
@@ -20369,15 +20447,6 @@ manager = {
20369
20447
  validators: {}
20370
20448
  };
20371
20449
 
20372
- validatable = stampit({
20373
- validate: function() {
20374
- throw new Error('Composed factory must override the validate method');
20375
- },
20376
- validate_each: function() {
20377
- throw new Error('Composed factory must override the validate each method');
20378
- }
20379
- });
20380
-
20381
20450
  model.mix(function(modelable) {
20382
20451
  jQuery.extend(modelable, extensions.model);
20383
20452
  jQuery.extend(modelable.record, extensions.record);
@@ -20386,21 +20455,17 @@ model.mix(function(modelable) {
20386
20455
  return model.validators = manager.validators;
20387
20456
  });
20388
20457
 
20389
- root.validatable = validatable;
20458
+ manager.validators.confirmation = require('./validations/confirmation');
20390
20459
 
20391
- root.manager = manager;
20460
+ manager.validators.associated = require('./validations/associated');
20392
20461
 
20393
- require('./validations/confirmation');
20462
+ manager.validators.presence = require('./validations/presence');
20394
20463
 
20395
- require('./validations/associated');
20464
+ manager.validators.remote = require('./validations/remote');
20396
20465
 
20397
- require('./validations/presence');
20466
+ manager.validators.type = require('./validations/type');
20398
20467
 
20399
- require('./validations/remote');
20400
-
20401
- require('./validations/type');
20402
-
20403
- require('./validations/cpf');
20468
+ manager.validators.cpf = require('./validations/cpf');
20404
20469
 
20405
20470
  });
20406
20471
  require.register("indefinido-indemma/lib/extensions/rivets.js", function(exports, require, module){
@@ -28011,6 +28076,358 @@ var forIn = require('./forIn');
28011
28076
  });
28012
28077
  ;
28013
28078
 
28079
+ });
28080
+ require.register("ened/vendor/assets/javascripts/spin/spin.js", function(exports, require, module){
28081
+ //fgnass.github.com/spin.js#v1.3
28082
+
28083
+ /**
28084
+ * Copyright (c) 2011-2013 Felix Gnass
28085
+ * Licensed under the MIT license
28086
+ */
28087
+ (function(root, factory) {
28088
+
28089
+ /* CommonJS */
28090
+ if (typeof exports == 'object') module.exports = factory()
28091
+
28092
+ /* AMD module */
28093
+ else if (typeof define == 'function' && define.amd) define(factory)
28094
+
28095
+ /* Browser global */
28096
+ else root.Spinner = factory()
28097
+ }
28098
+ (this, function() {
28099
+ "use strict";
28100
+
28101
+ var prefixes = ['webkit', 'Moz', 'ms', 'O'] /* Vendor prefixes */
28102
+ , animations = {} /* Animation rules keyed by their name */
28103
+ , useCssAnimations /* Whether to use CSS animations or setTimeout */
28104
+
28105
+ /**
28106
+ * Utility function to create elements. If no tag name is given,
28107
+ * a DIV is created. Optionally properties can be passed.
28108
+ */
28109
+ function createEl(tag, prop) {
28110
+ var el = document.createElement(tag || 'div')
28111
+ , n
28112
+
28113
+ for(n in prop) el[n] = prop[n]
28114
+ return el
28115
+ }
28116
+
28117
+ /**
28118
+ * Appends children and returns the parent.
28119
+ */
28120
+ function ins(parent /* child1, child2, ...*/) {
28121
+ for (var i=1, n=arguments.length; i<n; i++)
28122
+ parent.appendChild(arguments[i])
28123
+
28124
+ return parent
28125
+ }
28126
+
28127
+ /**
28128
+ * Insert a new stylesheet to hold the @keyframe or VML rules.
28129
+ */
28130
+ var sheet = (function() {
28131
+ var el = createEl('style', {type : 'text/css'})
28132
+ ins(document.getElementsByTagName('head')[0], el)
28133
+ return el.sheet || el.styleSheet
28134
+ }())
28135
+
28136
+ /**
28137
+ * Creates an opacity keyframe animation rule and returns its name.
28138
+ * Since most mobile Webkits have timing issues with animation-delay,
28139
+ * we create separate rules for each line/segment.
28140
+ */
28141
+ function addAnimation(alpha, trail, i, lines) {
28142
+ var name = ['opacity', trail, ~~(alpha*100), i, lines].join('-')
28143
+ , start = 0.01 + i/lines * 100
28144
+ , z = Math.max(1 - (1-alpha) / trail * (100-start), alpha)
28145
+ , prefix = useCssAnimations.substring(0, useCssAnimations.indexOf('Animation')).toLowerCase()
28146
+ , pre = prefix && '-' + prefix + '-' || ''
28147
+
28148
+ if (!animations[name]) {
28149
+ sheet.insertRule(
28150
+ '@' + pre + 'keyframes ' + name + '{' +
28151
+ '0%{opacity:' + z + '}' +
28152
+ start + '%{opacity:' + alpha + '}' +
28153
+ (start+0.01) + '%{opacity:1}' +
28154
+ (start+trail) % 100 + '%{opacity:' + alpha + '}' +
28155
+ '100%{opacity:' + z + '}' +
28156
+ '}', sheet.cssRules.length)
28157
+
28158
+ animations[name] = 1
28159
+ }
28160
+
28161
+ return name
28162
+ }
28163
+
28164
+ /**
28165
+ * Tries various vendor prefixes and returns the first supported property.
28166
+ */
28167
+ function vendor(el, prop) {
28168
+ var s = el.style
28169
+ , pp
28170
+ , i
28171
+
28172
+ if(s[prop] !== undefined) return prop
28173
+ prop = prop.charAt(0).toUpperCase() + prop.slice(1)
28174
+ for(i=0; i<prefixes.length; i++) {
28175
+ pp = prefixes[i]+prop
28176
+ if(s[pp] !== undefined) return pp
28177
+ }
28178
+ }
28179
+
28180
+ /**
28181
+ * Sets multiple style properties at once.
28182
+ */
28183
+ function css(el, prop) {
28184
+ for (var n in prop)
28185
+ el.style[vendor(el, n)||n] = prop[n]
28186
+
28187
+ return el
28188
+ }
28189
+
28190
+ /**
28191
+ * Fills in default values.
28192
+ */
28193
+ function merge(obj) {
28194
+ for (var i=1; i < arguments.length; i++) {
28195
+ var def = arguments[i]
28196
+ for (var n in def)
28197
+ if (obj[n] === undefined) obj[n] = def[n]
28198
+ }
28199
+ return obj
28200
+ }
28201
+
28202
+ /**
28203
+ * Returns the absolute page-offset of the given element.
28204
+ */
28205
+ function pos(el) {
28206
+ var o = { x:el.offsetLeft, y:el.offsetTop }
28207
+ while((el = el.offsetParent))
28208
+ o.x+=el.offsetLeft, o.y+=el.offsetTop
28209
+
28210
+ return o
28211
+ }
28212
+
28213
+ // Built-in defaults
28214
+
28215
+ var defaults = {
28216
+ lines: 12, // The number of lines to draw
28217
+ length: 7, // The length of each line
28218
+ width: 5, // The line thickness
28219
+ radius: 10, // The radius of the inner circle
28220
+ rotate: 0, // Rotation offset
28221
+ corners: 1, // Roundness (0..1)
28222
+ color: '#000', // #rgb or #rrggbb
28223
+ direction: 1, // 1: clockwise, -1: counterclockwise
28224
+ speed: 1, // Rounds per second
28225
+ trail: 100, // Afterglow percentage
28226
+ opacity: 1/4, // Opacity of the lines
28227
+ fps: 20, // Frames per second when using setTimeout()
28228
+ zIndex: 2e9, // Use a high z-index by default
28229
+ className: 'spinner', // CSS class to assign to the element
28230
+ top: 'auto', // center vertically
28231
+ left: 'auto', // center horizontally
28232
+ position: 'relative' // element position
28233
+ }
28234
+
28235
+ /** The constructor */
28236
+ function Spinner(o) {
28237
+ if (typeof this == 'undefined') return new Spinner(o)
28238
+ this.opts = merge(o || {}, Spinner.defaults, defaults)
28239
+ }
28240
+
28241
+ // Global defaults that override the built-ins:
28242
+ Spinner.defaults = {}
28243
+
28244
+ merge(Spinner.prototype, {
28245
+
28246
+ /**
28247
+ * Adds the spinner to the given target element. If this instance is already
28248
+ * spinning, it is automatically removed from its previous target b calling
28249
+ * stop() internally.
28250
+ */
28251
+ spin: function(target) {
28252
+ this.stop()
28253
+
28254
+ var self = this
28255
+ , o = self.opts
28256
+ , el = self.el = css(createEl(0, {className: o.className}), {position: o.position, width: 0, zIndex: o.zIndex})
28257
+ , mid = o.radius+o.length+o.width
28258
+ , ep // element position
28259
+ , tp // target position
28260
+
28261
+ if (target) {
28262
+ target.insertBefore(el, target.firstChild||null)
28263
+ tp = pos(target)
28264
+ ep = pos(el)
28265
+ css(el, {
28266
+ left: (o.left == 'auto' ? tp.x-ep.x + (target.offsetWidth >> 1) : parseInt(o.left, 10) + mid) + 'px',
28267
+ top: (o.top == 'auto' ? tp.y-ep.y + (target.offsetHeight >> 1) : parseInt(o.top, 10) + mid) + 'px'
28268
+ })
28269
+ }
28270
+
28271
+ el.setAttribute('role', 'progressbar')
28272
+ self.lines(el, self.opts)
28273
+
28274
+ if (!useCssAnimations) {
28275
+ // No CSS animation support, use setTimeout() instead
28276
+ var i = 0
28277
+ , start = (o.lines - 1) * (1 - o.direction) / 2
28278
+ , alpha
28279
+ , fps = o.fps
28280
+ , f = fps/o.speed
28281
+ , ostep = (1-o.opacity) / (f*o.trail / 100)
28282
+ , astep = f/o.lines
28283
+
28284
+ ;(function anim() {
28285
+ i++;
28286
+ for (var j = 0; j < o.lines; j++) {
28287
+ alpha = Math.max(1 - (i + (o.lines - j) * astep) % f * ostep, o.opacity)
28288
+
28289
+ self.opacity(el, j * o.direction + start, alpha, o)
28290
+ }
28291
+ self.timeout = self.el && setTimeout(anim, ~~(1000/fps))
28292
+ })()
28293
+ }
28294
+ return self
28295
+ },
28296
+
28297
+ /**
28298
+ * Stops and removes the Spinner.
28299
+ */
28300
+ stop: function() {
28301
+ var el = this.el
28302
+ if (el) {
28303
+ clearTimeout(this.timeout)
28304
+ if (el.parentNode) el.parentNode.removeChild(el)
28305
+ this.el = undefined
28306
+ }
28307
+ return this
28308
+ },
28309
+
28310
+ /**
28311
+ * Internal method that draws the individual lines. Will be overwritten
28312
+ * in VML fallback mode below.
28313
+ */
28314
+ lines: function(el, o) {
28315
+ var i = 0
28316
+ , start = (o.lines - 1) * (1 - o.direction) / 2
28317
+ , seg
28318
+
28319
+ function fill(color, shadow) {
28320
+ return css(createEl(), {
28321
+ position: 'absolute',
28322
+ width: (o.length+o.width) + 'px',
28323
+ height: o.width + 'px',
28324
+ background: color,
28325
+ boxShadow: shadow,
28326
+ transformOrigin: 'left',
28327
+ transform: 'rotate(' + ~~(360/o.lines*i+o.rotate) + 'deg) translate(' + o.radius+'px' +',0)',
28328
+ borderRadius: (o.corners * o.width>>1) + 'px'
28329
+ })
28330
+ }
28331
+
28332
+ for (; i < o.lines; i++) {
28333
+ seg = css(createEl(), {
28334
+ position: 'absolute',
28335
+ top: 1+~(o.width/2) + 'px',
28336
+ transform: o.hwaccel ? 'translate3d(0,0,0)' : '',
28337
+ opacity: o.opacity,
28338
+ animation: useCssAnimations && addAnimation(o.opacity, o.trail, start + i * o.direction, o.lines) + ' ' + 1/o.speed + 's linear infinite'
28339
+ })
28340
+
28341
+ if (o.shadow) ins(seg, css(fill('#000', '0 0 4px ' + '#000'), {top: 2+'px'}))
28342
+
28343
+ ins(el, ins(seg, fill(o.color, '0 0 1px rgba(0,0,0,.1)')))
28344
+ }
28345
+ return el
28346
+ },
28347
+
28348
+ /**
28349
+ * Internal method that adjusts the opacity of a single line.
28350
+ * Will be overwritten in VML fallback mode below.
28351
+ */
28352
+ opacity: function(el, i, val) {
28353
+ if (i < el.childNodes.length) el.childNodes[i].style.opacity = val
28354
+ }
28355
+
28356
+ })
28357
+
28358
+
28359
+ function initVML() {
28360
+
28361
+ /* Utility function to create a VML tag */
28362
+ function vml(tag, attr) {
28363
+ return createEl('<' + tag + ' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">', attr)
28364
+ }
28365
+
28366
+ // No CSS transforms but VML support, add a CSS rule for VML elements:
28367
+ sheet.addRule('.spin-vml', 'behavior:url(#default#VML)')
28368
+
28369
+ Spinner.prototype.lines = function(el, o) {
28370
+ var r = o.length+o.width
28371
+ , s = 2*r
28372
+
28373
+ function grp() {
28374
+ return css(
28375
+ vml('group', {
28376
+ coordsize: s + ' ' + s,
28377
+ coordorigin: -r + ' ' + -r
28378
+ }),
28379
+ { width: s, height: s }
28380
+ )
28381
+ }
28382
+
28383
+ var margin = -(o.width+o.length)*2 + 'px'
28384
+ , g = css(grp(), {position: 'absolute', top: margin, left: margin})
28385
+ , i
28386
+
28387
+ function seg(i, dx, filter) {
28388
+ ins(g,
28389
+ ins(css(grp(), {rotation: 360 / o.lines * i + 'deg', left: ~~dx}),
28390
+ ins(css(vml('roundrect', {arcsize: o.corners}), {
28391
+ width: r,
28392
+ height: o.width,
28393
+ left: o.radius,
28394
+ top: -o.width>>1,
28395
+ filter: filter
28396
+ }),
28397
+ vml('fill', {color: o.color, opacity: o.opacity}),
28398
+ vml('stroke', {opacity: 0}) // transparent stroke to fix color bleeding upon opacity change
28399
+ )
28400
+ )
28401
+ )
28402
+ }
28403
+
28404
+ if (o.shadow)
28405
+ for (i = 1; i <= o.lines; i++)
28406
+ seg(i, -2, 'progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)')
28407
+
28408
+ for (i = 1; i <= o.lines; i++) seg(i)
28409
+ return ins(el, g)
28410
+ }
28411
+
28412
+ Spinner.prototype.opacity = function(el, i, val, o) {
28413
+ var c = el.firstChild
28414
+ o = o.shadow && o.lines || 0
28415
+ if (c && i+o < c.childNodes.length) {
28416
+ c = c.childNodes[i+o]; c = c && c.firstChild; c = c && c.firstChild
28417
+ if (c) c.opacity = val
28418
+ }
28419
+ }
28420
+ }
28421
+
28422
+ var probe = css(createEl('group'), {behavior: 'url(#default#VML)'})
28423
+
28424
+ if (!vendor(probe, 'transform') && probe.adj) initVML()
28425
+ else useCssAnimations = vendor(probe, 'animation')
28426
+
28427
+ return Spinner
28428
+
28429
+ }));
28430
+
28014
28431
  });
28015
28432
  require.register("ened/vendor/assets/javascripts/jquery/inview.js", function(exports, require, module){
28016
28433
  /**
@@ -28139,6 +28556,1926 @@ require.register("ened/vendor/assets/javascripts/jquery/inview.js", function(exp
28139
28556
  setInterval(checkInView, 250);
28140
28557
  })(jQuery);
28141
28558
  });
28559
+ <<<<<<< HEAD
28560
+ require.register("ened/vendor/assets/javascripts/jquery/inputmask.js", function(exports, require, module){
28561
+ /**
28562
+ * @license Input Mask plugin for jquery
28563
+ * http://github.com/RobinHerbots/jquery.inputmask
28564
+ * Copyright (c) 2010 - 2014 Robin Herbots
28565
+ * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
28566
+ * Version: 0.0.0
28567
+ */
28568
+
28569
+ (function ($) {
28570
+ if ($.fn.inputmask === undefined) {
28571
+ //helper functions
28572
+ function isInputEventSupported(eventName) {
28573
+ var el = document.createElement('input'),
28574
+ eventName = 'on' + eventName,
28575
+ isSupported = (eventName in el);
28576
+ if (!isSupported) {
28577
+ el.setAttribute(eventName, 'return;');
28578
+ isSupported = typeof el[eventName] == 'function';
28579
+ }
28580
+ el = null;
28581
+ return isSupported;
28582
+ }
28583
+
28584
+ function resolveAlias(aliasStr, options, opts) {
28585
+ var aliasDefinition = opts.aliases[aliasStr];
28586
+ if (aliasDefinition) {
28587
+ if (aliasDefinition.alias) resolveAlias(aliasDefinition.alias, undefined, opts); //alias is another alias
28588
+ $.extend(true, opts, aliasDefinition); //merge alias definition in the options
28589
+ $.extend(true, opts, options); //reapply extra given options
28590
+ return true;
28591
+ }
28592
+ return false;
28593
+ }
28594
+
28595
+
28596
+ function generateMaskSets(opts) {
28597
+ var ms = [];
28598
+ var genmasks = []; //used to keep track of the masks that where processed, to avoid duplicates
28599
+ function getMaskTemplate(mask) {
28600
+ if (opts.numericInput) {
28601
+ mask = mask.split('').reverse().join('');
28602
+ }
28603
+ var escaped = false, outCount = 0, greedy = opts.greedy, repeat = opts.repeat;
28604
+ if (repeat == "*") greedy = false;
28605
+ //if (greedy == true && opts.placeholder == "") opts.placeholder = " ";
28606
+ if (mask.length == 1 && greedy == false && repeat != 0) { opts.placeholder = ""; } //hide placeholder with single non-greedy mask
28607
+ var singleMask = $.map(mask.split(""), function (element, index) {
28608
+ var outElem = [];
28609
+ if (element == opts.escapeChar) {
28610
+ escaped = true;
28611
+ }
28612
+ else if ((element != opts.optionalmarker.start && element != opts.optionalmarker.end) || escaped) {
28613
+ var maskdef = opts.definitions[element];
28614
+ if (maskdef && !escaped) {
28615
+ for (var i = 0; i < maskdef.cardinality; i++) {
28616
+ outElem.push(opts.placeholder.charAt((outCount + i) % opts.placeholder.length));
28617
+ }
28618
+ } else {
28619
+ outElem.push(element);
28620
+ escaped = false;
28621
+ }
28622
+ outCount += outElem.length;
28623
+ return outElem;
28624
+ }
28625
+ });
28626
+
28627
+ //allocate repetitions
28628
+ var repeatedMask = singleMask.slice();
28629
+ for (var i = 1; i < repeat && greedy; i++) {
28630
+ repeatedMask = repeatedMask.concat(singleMask.slice());
28631
+ }
28632
+
28633
+ return { "mask": repeatedMask, "repeat": repeat, "greedy": greedy };
28634
+ }
28635
+ //test definition => {fn: RegExp/function, cardinality: int, optionality: bool, newBlockMarker: bool, offset: int, casing: null/upper/lower, def: definitionSymbol}
28636
+ function getTestingChain(mask) {
28637
+ if (opts.numericInput) {
28638
+ mask = mask.split('').reverse().join('');
28639
+ }
28640
+ var isOptional = false, escaped = false;
28641
+ var newBlockMarker = false; //indicates wheter the begin/ending of a block should be indicated
28642
+
28643
+ return $.map(mask.split(""), function (element, index) {
28644
+ var outElem = [];
28645
+
28646
+ if (element == opts.escapeChar) {
28647
+ escaped = true;
28648
+ } else if (element == opts.optionalmarker.start && !escaped) {
28649
+ isOptional = true;
28650
+ newBlockMarker = true;
28651
+ }
28652
+ else if (element == opts.optionalmarker.end && !escaped) {
28653
+ isOptional = false;
28654
+ newBlockMarker = true;
28655
+ }
28656
+ else {
28657
+ var maskdef = opts.definitions[element];
28658
+ if (maskdef && !escaped) {
28659
+ var prevalidators = maskdef["prevalidator"], prevalidatorsL = prevalidators ? prevalidators.length : 0;
28660
+ for (var i = 1; i < maskdef.cardinality; i++) {
28661
+ var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator["validator"], cardinality = prevalidator["cardinality"];
28662
+ outElem.push({ fn: validator ? typeof validator == 'string' ? new RegExp(validator) : new function () { this.test = validator; } : new RegExp("."), cardinality: cardinality ? cardinality : 1, optionality: isOptional, newBlockMarker: isOptional == true ? newBlockMarker : false, offset: 0, casing: maskdef["casing"], def: maskdef["definitionSymbol"] || element });
28663
+ if (isOptional == true) //reset newBlockMarker
28664
+ newBlockMarker = false;
28665
+ }
28666
+ outElem.push({ fn: maskdef.validator ? typeof maskdef.validator == 'string' ? new RegExp(maskdef.validator) : new function () { this.test = maskdef.validator; } : new RegExp("."), cardinality: maskdef.cardinality, optionality: isOptional, newBlockMarker: newBlockMarker, offset: 0, casing: maskdef["casing"], def: maskdef["definitionSymbol"] || element });
28667
+ } else {
28668
+ outElem.push({ fn: null, cardinality: 0, optionality: isOptional, newBlockMarker: newBlockMarker, offset: 0, casing: null, def: element });
28669
+ escaped = false;
28670
+ }
28671
+ //reset newBlockMarker
28672
+ newBlockMarker = false;
28673
+ return outElem;
28674
+ }
28675
+ });
28676
+ }
28677
+ function markOptional(maskPart) { //needed for the clearOptionalTail functionality
28678
+ return opts.optionalmarker.start + maskPart + opts.optionalmarker.end;
28679
+ }
28680
+ function splitFirstOptionalEndPart(maskPart) {
28681
+ var optionalStartMarkers = 0, optionalEndMarkers = 0, mpl = maskPart.length;
28682
+ for (var i = 0; i < mpl; i++) {
28683
+ if (maskPart.charAt(i) == opts.optionalmarker.start) {
28684
+ optionalStartMarkers++;
28685
+ }
28686
+ if (maskPart.charAt(i) == opts.optionalmarker.end) {
28687
+ optionalEndMarkers++;
28688
+ }
28689
+ if (optionalStartMarkers > 0 && optionalStartMarkers == optionalEndMarkers)
28690
+ break;
28691
+ }
28692
+ var maskParts = [maskPart.substring(0, i)];
28693
+ if (i < mpl) {
28694
+ maskParts.push(maskPart.substring(i + 1, mpl));
28695
+ }
28696
+ return maskParts;
28697
+ }
28698
+ function splitFirstOptionalStartPart(maskPart) {
28699
+ var mpl = maskPart.length;
28700
+ for (var i = 0; i < mpl; i++) {
28701
+ if (maskPart.charAt(i) == opts.optionalmarker.start) {
28702
+ break;
28703
+ }
28704
+ }
28705
+ var maskParts = [maskPart.substring(0, i)];
28706
+ if (i < mpl) {
28707
+ maskParts.push(maskPart.substring(i + 1, mpl));
28708
+ }
28709
+ return maskParts;
28710
+ }
28711
+ function generateMask(maskPrefix, maskPart, metadata) {
28712
+ var maskParts = splitFirstOptionalEndPart(maskPart);
28713
+ var newMask, maskTemplate;
28714
+
28715
+ var masks = splitFirstOptionalStartPart(maskParts[0]);
28716
+ if (masks.length > 1) {
28717
+ newMask = maskPrefix + masks[0] + markOptional(masks[1]) + (maskParts.length > 1 ? maskParts[1] : "");
28718
+ if ($.inArray(newMask, genmasks) == -1 && newMask != "") {
28719
+ genmasks.push(newMask);
28720
+ maskTemplate = getMaskTemplate(newMask);
28721
+ ms.push({
28722
+ "mask": newMask,
28723
+ "_buffer": maskTemplate["mask"],
28724
+ "buffer": maskTemplate["mask"].slice(),
28725
+ "tests": getTestingChain(newMask),
28726
+ "lastValidPosition": -1,
28727
+ "greedy": maskTemplate["greedy"],
28728
+ "repeat": maskTemplate["repeat"],
28729
+ "metadata": metadata
28730
+ });
28731
+ }
28732
+ newMask = maskPrefix + masks[0] + (maskParts.length > 1 ? maskParts[1] : "");
28733
+ if ($.inArray(newMask, genmasks) == -1 && newMask != "") {
28734
+ genmasks.push(newMask);
28735
+ maskTemplate = getMaskTemplate(newMask);
28736
+ ms.push({
28737
+ "mask": newMask,
28738
+ "_buffer": maskTemplate["mask"],
28739
+ "buffer": maskTemplate["mask"].slice(),
28740
+ "tests": getTestingChain(newMask),
28741
+ "lastValidPosition": -1,
28742
+ "greedy": maskTemplate["greedy"],
28743
+ "repeat": maskTemplate["repeat"],
28744
+ "metadata": metadata
28745
+ });
28746
+ }
28747
+ if (splitFirstOptionalStartPart(masks[1]).length > 1) { //optional contains another optional
28748
+ generateMask(maskPrefix + masks[0], masks[1] + maskParts[1], metadata);
28749
+ }
28750
+ if (maskParts.length > 1 && splitFirstOptionalStartPart(maskParts[1]).length > 1) {
28751
+ generateMask(maskPrefix + masks[0] + markOptional(masks[1]), maskParts[1], metadata);
28752
+ generateMask(maskPrefix + masks[0], maskParts[1], metadata);
28753
+ }
28754
+ }
28755
+ else {
28756
+ newMask = maskPrefix + maskParts;
28757
+ if ($.inArray(newMask, genmasks) == -1 && newMask != "") {
28758
+ genmasks.push(newMask);
28759
+ maskTemplate = getMaskTemplate(newMask);
28760
+ ms.push({
28761
+ "mask": newMask,
28762
+ "_buffer": maskTemplate["mask"],
28763
+ "buffer": maskTemplate["mask"].slice(),
28764
+ "tests": getTestingChain(newMask),
28765
+ "lastValidPosition": -1,
28766
+ "greedy": maskTemplate["greedy"],
28767
+ "repeat": maskTemplate["repeat"],
28768
+ "metadata": metadata
28769
+ });
28770
+ }
28771
+ }
28772
+
28773
+ }
28774
+
28775
+ if ($.isFunction(opts.mask)) { //allow mask to be a preprocessing fn - should return a valid mask
28776
+ opts.mask = opts.mask.call(this, opts);
28777
+ }
28778
+ if ($.isArray(opts.mask)) {
28779
+ $.each(opts.mask, function (ndx, msk) {
28780
+ if (msk["mask"] != undefined) {
28781
+ generateMask("", msk["mask"].toString(), msk);
28782
+ } else
28783
+ generateMask("", msk.toString());
28784
+ });
28785
+ } else generateMask("", opts.mask.toString());
28786
+
28787
+ return opts.greedy ? ms : ms.sort(function (a, b) { return a["mask"].length - b["mask"].length; });
28788
+ }
28789
+
28790
+
28791
+ var msie10 = navigator.userAgent.match(new RegExp("msie 10", "i")) !== null,
28792
+ iphone = navigator.userAgent.match(new RegExp("iphone", "i")) !== null,
28793
+ android = navigator.userAgent.match(new RegExp("android.*safari.*", "i")) !== null,
28794
+ androidchrome = navigator.userAgent.match(new RegExp("android.*chrome.*", "i")) !== null,
28795
+ pasteEvent = isInputEventSupported('paste') && !msie10 ? 'paste' : isInputEventSupported('input') ? 'input' : "propertychange";
28796
+
28797
+
28798
+ //masking scope
28799
+
28800
+ function maskScope(masksets, activeMasksetIndex, opts) {
28801
+ var isRTL = false,
28802
+ valueOnFocus = getActiveBuffer().join(''),
28803
+ $el, chromeValueOnInput;
28804
+
28805
+ //maskset helperfunctions
28806
+
28807
+ function getActiveMaskSet() {
28808
+ return masksets[activeMasksetIndex];
28809
+ }
28810
+
28811
+ function getActiveTests() {
28812
+ return getActiveMaskSet()['tests'];
28813
+ }
28814
+
28815
+ function getActiveBufferTemplate() {
28816
+ return getActiveMaskSet()['_buffer'];
28817
+ }
28818
+
28819
+ function getActiveBuffer() {
28820
+ return getActiveMaskSet()['buffer'];
28821
+ }
28822
+
28823
+ function isValid(pos, c, strict) { //strict true ~ no correction or autofill
28824
+ strict = strict === true; //always set a value to strict to prevent possible strange behavior in the extensions
28825
+
28826
+ function _isValid(position, activeMaskset, c, strict) {
28827
+ var testPos = determineTestPosition(position), loopend = c ? 1 : 0, chrs = '', buffer = activeMaskset["buffer"];
28828
+ for (var i = activeMaskset['tests'][testPos].cardinality; i > loopend; i--) {
28829
+ chrs += getBufferElement(buffer, testPos - (i - 1));
28830
+ }
28831
+
28832
+ if (c) {
28833
+ chrs += c;
28834
+ }
28835
+
28836
+ //return is false or a json object => { pos: ??, c: ??} or true
28837
+ return activeMaskset['tests'][testPos].fn != null ?
28838
+ activeMaskset['tests'][testPos].fn.test(chrs, buffer, position, strict, opts)
28839
+ : (c == getBufferElement(activeMaskset['_buffer'], position, true) || c == opts.skipOptionalPartCharacter) ?
28840
+ { "refresh": true, c: getBufferElement(activeMaskset['_buffer'], position, true), pos: position }
28841
+ : false;
28842
+ }
28843
+
28844
+ function PostProcessResults(maskForwards, results) {
28845
+ var hasValidActual = false;
28846
+ $.each(results, function (ndx, rslt) {
28847
+ hasValidActual = $.inArray(rslt["activeMasksetIndex"], maskForwards) == -1 && rslt["result"] !== false;
28848
+ if (hasValidActual) return false;
28849
+ });
28850
+ if (hasValidActual) { //strip maskforwards
28851
+ results = $.map(results, function (rslt, ndx) {
28852
+ if ($.inArray(rslt["activeMasksetIndex"], maskForwards) == -1) {
28853
+ return rslt;
28854
+ } else {
28855
+ masksets[rslt["activeMasksetIndex"]]["lastValidPosition"] = actualLVP;
28856
+ }
28857
+ });
28858
+ } else { //keep maskforwards with the least forward
28859
+ var lowestPos = -1, lowestIndex = -1, rsltValid;
28860
+ $.each(results, function (ndx, rslt) {
28861
+ if ($.inArray(rslt["activeMasksetIndex"], maskForwards) != -1 && rslt["result"] !== false & (lowestPos == -1 || lowestPos > rslt["result"]["pos"])) {
28862
+ lowestPos = rslt["result"]["pos"];
28863
+ lowestIndex = rslt["activeMasksetIndex"];
28864
+ }
28865
+ });
28866
+ results = $.map(results, function (rslt, ndx) {
28867
+ if ($.inArray(rslt["activeMasksetIndex"], maskForwards) != -1) {
28868
+ if (rslt["result"]["pos"] == lowestPos) {
28869
+ return rslt;
28870
+ } else if (rslt["result"] !== false) {
28871
+ for (var i = pos; i < lowestPos; i++) {
28872
+ rsltValid = _isValid(i, masksets[rslt["activeMasksetIndex"]], masksets[lowestIndex]["buffer"][i], true);
28873
+ if (rsltValid === false) {
28874
+ masksets[rslt["activeMasksetIndex"]]["lastValidPosition"] = lowestPos - 1;
28875
+ break;
28876
+ } else {
28877
+ setBufferElement(masksets[rslt["activeMasksetIndex"]]["buffer"], i, masksets[lowestIndex]["buffer"][i], true);
28878
+ masksets[rslt["activeMasksetIndex"]]["lastValidPosition"] = i;
28879
+ }
28880
+ }
28881
+ //also check check for the lowestpos with the new input
28882
+ rsltValid = _isValid(lowestPos, masksets[rslt["activeMasksetIndex"]], c, true);
28883
+ if (rsltValid !== false) {
28884
+ setBufferElement(masksets[rslt["activeMasksetIndex"]]["buffer"], lowestPos, c, true);
28885
+ masksets[rslt["activeMasksetIndex"]]["lastValidPosition"] = lowestPos;
28886
+ }
28887
+ //console.log("ndx " + rslt["activeMasksetIndex"] + " validate " + masksets[rslt["activeMasksetIndex"]]["buffer"].join('') + " lv " + masksets[rslt["activeMasksetIndex"]]['lastValidPosition']);
28888
+ return rslt;
28889
+ }
28890
+ }
28891
+ });
28892
+ }
28893
+ return results;
28894
+ }
28895
+
28896
+ if (strict) {
28897
+ var result = _isValid(pos, getActiveMaskSet(), c, strict); //only check validity in current mask when validating strict
28898
+ if (result === true) {
28899
+ result = { "pos": pos }; //always take a possible corrected maskposition into account
28900
+ }
28901
+ return result;
28902
+ }
28903
+
28904
+ var results = [], result = false, currentActiveMasksetIndex = activeMasksetIndex,
28905
+ actualBuffer = getActiveBuffer().slice(), actualLVP = getActiveMaskSet()["lastValidPosition"],
28906
+ actualPrevious = seekPrevious(pos),
28907
+ maskForwards = [];
28908
+ $.each(masksets, function (index, value) {
28909
+ if (typeof (value) == "object") {
28910
+ activeMasksetIndex = index;
28911
+
28912
+ var maskPos = pos;
28913
+ var lvp = getActiveMaskSet()['lastValidPosition'],
28914
+ rsltValid;
28915
+ if (lvp == actualLVP) {
28916
+ if ((maskPos - actualLVP) > 1) {
28917
+ for (var i = lvp == -1 ? 0 : lvp; i < maskPos; i++) {
28918
+ rsltValid = _isValid(i, getActiveMaskSet(), actualBuffer[i], true);
28919
+ if (rsltValid === false) {
28920
+ break;
28921
+ } else {
28922
+ setBufferElement(getActiveBuffer(), i, actualBuffer[i], true);
28923
+ if (rsltValid === true) {
28924
+ rsltValid = { "pos": i }; //always take a possible corrected maskposition into account
28925
+ }
28926
+ var newValidPosition = rsltValid.pos || i;
28927
+ if (getActiveMaskSet()['lastValidPosition'] < newValidPosition)
28928
+ getActiveMaskSet()['lastValidPosition'] = newValidPosition; //set new position from isValid
28929
+ }
28930
+ }
28931
+ }
28932
+ //does the input match on a further position?
28933
+ if (!isMask(maskPos) && !_isValid(maskPos, getActiveMaskSet(), c, strict)) {
28934
+ var maxForward = seekNext(maskPos) - maskPos;
28935
+ for (var fw = 0; fw < maxForward; fw++) {
28936
+ if (_isValid(++maskPos, getActiveMaskSet(), c, strict) !== false)
28937
+ break;
28938
+ }
28939
+ maskForwards.push(activeMasksetIndex);
28940
+ //console.log('maskforward ' + activeMasksetIndex + " pos " + pos + " maskPos " + maskPos);
28941
+ }
28942
+ }
28943
+
28944
+ if (getActiveMaskSet()['lastValidPosition'] >= actualLVP || activeMasksetIndex == currentActiveMasksetIndex) {
28945
+ if (maskPos >= 0 && maskPos < getMaskLength()) {
28946
+ result = _isValid(maskPos, getActiveMaskSet(), c, strict);
28947
+ if (result !== false) {
28948
+ if (result === true) {
28949
+ result = { "pos": maskPos }; //always take a possible corrected maskposition into account
28950
+ }
28951
+ var newValidPosition = result.pos || maskPos;
28952
+ if (getActiveMaskSet()['lastValidPosition'] < newValidPosition)
28953
+ getActiveMaskSet()['lastValidPosition'] = newValidPosition; //set new position from isValid
28954
+ }
28955
+ //console.log("pos " + pos + " ndx " + activeMasksetIndex + " validate " + getActiveBuffer().join('') + " lv " + getActiveMaskSet()['lastValidPosition']);
28956
+ results.push({ "activeMasksetIndex": index, "result": result });
28957
+ }
28958
+ }
28959
+ }
28960
+ });
28961
+ activeMasksetIndex = currentActiveMasksetIndex; //reset activeMasksetIndex
28962
+
28963
+ return PostProcessResults(maskForwards, results); //return results of the multiple mask validations
28964
+ }
28965
+
28966
+ function determineActiveMasksetIndex() {
28967
+ var currentMasksetIndex = activeMasksetIndex,
28968
+ highestValid = { "activeMasksetIndex": 0, "lastValidPosition": -1, "next": -1 };
28969
+ $.each(masksets, function (index, value) {
28970
+ if (typeof (value) == "object") {
28971
+ activeMasksetIndex = index;
28972
+ if (getActiveMaskSet()['lastValidPosition'] > highestValid['lastValidPosition']) {
28973
+ highestValid["activeMasksetIndex"] = index;
28974
+ highestValid["lastValidPosition"] = getActiveMaskSet()['lastValidPosition'];
28975
+ highestValid["next"] = seekNext(getActiveMaskSet()['lastValidPosition']);
28976
+ } else if (getActiveMaskSet()['lastValidPosition'] == highestValid['lastValidPosition'] &&
28977
+ (highestValid['next'] == -1 || highestValid['next'] > seekNext(getActiveMaskSet()['lastValidPosition']))) {
28978
+ highestValid["activeMasksetIndex"] = index;
28979
+ highestValid["lastValidPosition"] = getActiveMaskSet()['lastValidPosition'];
28980
+ highestValid["next"] = seekNext(getActiveMaskSet()['lastValidPosition']);
28981
+ }
28982
+ }
28983
+ });
28984
+
28985
+ activeMasksetIndex = highestValid["lastValidPosition"] != -1 && masksets[currentMasksetIndex]["lastValidPosition"] == highestValid["lastValidPosition"] ? currentMasksetIndex : highestValid["activeMasksetIndex"];
28986
+ if (currentMasksetIndex != activeMasksetIndex) {
28987
+ clearBuffer(getActiveBuffer(), seekNext(highestValid["lastValidPosition"]), getMaskLength());
28988
+ getActiveMaskSet()["writeOutBuffer"] = true;
28989
+ }
28990
+ $el.data('_inputmask')['activeMasksetIndex'] = activeMasksetIndex; //store the activeMasksetIndex
28991
+ }
28992
+
28993
+ function isMask(pos) {
28994
+ var testPos = determineTestPosition(pos);
28995
+ var test = getActiveTests()[testPos];
28996
+
28997
+ return test != undefined ? test.fn : false;
28998
+ }
28999
+
29000
+ function determineTestPosition(pos) {
29001
+ return pos % getActiveTests().length;
29002
+ }
29003
+
29004
+ function getMaskLength() {
29005
+ return opts.getMaskLength(getActiveBufferTemplate(), getActiveMaskSet()['greedy'], getActiveMaskSet()['repeat'], getActiveBuffer(), opts);
29006
+ }
29007
+
29008
+ //pos: from position
29009
+
29010
+ function seekNext(pos) {
29011
+ var maskL = getMaskLength();
29012
+ if (pos >= maskL) return maskL;
29013
+ var position = pos;
29014
+ while (++position < maskL && !isMask(position)) {
29015
+ }
29016
+ return position;
29017
+ }
29018
+
29019
+ //pos: from position
29020
+
29021
+ function seekPrevious(pos) {
29022
+ var position = pos;
29023
+ if (position <= 0) return 0;
29024
+
29025
+ while (--position > 0 && !isMask(position)) {
29026
+ }
29027
+ ;
29028
+ return position;
29029
+ }
29030
+
29031
+ function setBufferElement(buffer, position, element, autoPrepare) {
29032
+ if (autoPrepare) position = prepareBuffer(buffer, position);
29033
+
29034
+ var test = getActiveTests()[determineTestPosition(position)];
29035
+ var elem = element;
29036
+ if (elem != undefined && test != undefined) {
29037
+ switch (test.casing) {
29038
+ case "upper":
29039
+ elem = element.toUpperCase();
29040
+ break;
29041
+ case "lower":
29042
+ elem = element.toLowerCase();
29043
+ break;
29044
+ }
29045
+ }
29046
+
29047
+ buffer[position] = elem;
29048
+ }
29049
+
29050
+ function getBufferElement(buffer, position, autoPrepare) {
29051
+ if (autoPrepare) position = prepareBuffer(buffer, position);
29052
+ return buffer[position];
29053
+ }
29054
+
29055
+ //needed to handle the non-greedy mask repetitions
29056
+
29057
+ function prepareBuffer(buffer, position) {
29058
+ var j;
29059
+ while (buffer[position] == undefined && buffer.length < getMaskLength()) {
29060
+ j = 0;
29061
+ while (getActiveBufferTemplate()[j] !== undefined) { //add a new buffer
29062
+ buffer.push(getActiveBufferTemplate()[j++]);
29063
+ }
29064
+ }
29065
+
29066
+ return position;
29067
+ }
29068
+
29069
+ function writeBuffer(input, buffer, caretPos) {
29070
+ input._valueSet(buffer.join(''));
29071
+ if (caretPos != undefined) {
29072
+ caret(input, caretPos);
29073
+ }
29074
+ }
29075
+
29076
+ function clearBuffer(buffer, start, end, stripNomasks) {
29077
+ for (var i = start, maskL = getMaskLength() ; i < end && i < maskL; i++) {
29078
+ if (stripNomasks === true) {
29079
+ if (!isMask(i))
29080
+ setBufferElement(buffer, i, "");
29081
+ } else
29082
+ setBufferElement(buffer, i, getBufferElement(getActiveBufferTemplate().slice(), i, true));
29083
+ }
29084
+ }
29085
+
29086
+ function setReTargetPlaceHolder(buffer, pos) {
29087
+ var testPos = determineTestPosition(pos);
29088
+ setBufferElement(buffer, pos, getBufferElement(getActiveBufferTemplate(), testPos));
29089
+ }
29090
+
29091
+ function getPlaceHolder(pos) {
29092
+ return opts.placeholder.charAt(pos % opts.placeholder.length);
29093
+ }
29094
+
29095
+ function checkVal(input, writeOut, strict, nptvl, intelliCheck) {
29096
+ var inputValue = nptvl != undefined ? nptvl.slice() : truncateInput(input._valueGet()).split('');
29097
+
29098
+ $.each(masksets, function (ndx, ms) {
29099
+ if (typeof (ms) == "object") {
29100
+ ms["buffer"] = ms["_buffer"].slice();
29101
+ ms["lastValidPosition"] = -1;
29102
+ ms["p"] = -1;
29103
+ }
29104
+ });
29105
+ if (strict !== true) activeMasksetIndex = 0;
29106
+ if (writeOut) input._valueSet(""); //initial clear
29107
+ var ml = getMaskLength();
29108
+ $.each(inputValue, function (ndx, charCode) {
29109
+ if (intelliCheck === true) {
29110
+ var p = getActiveMaskSet()["p"], lvp = p == -1 ? p : seekPrevious(p),
29111
+ pos = lvp == -1 ? ndx : seekNext(lvp);
29112
+ if ($.inArray(charCode, getActiveBufferTemplate().slice(lvp + 1, pos)) == -1) {
29113
+ $(input).trigger("_keypress", [true, charCode.charCodeAt(0), writeOut, strict, ndx]);
29114
+ }
29115
+ } else {
29116
+ $(input).trigger("_keypress", [true, charCode.charCodeAt(0), writeOut, strict, ndx]);
29117
+ }
29118
+ });
29119
+
29120
+ if (strict === true && getActiveMaskSet()["p"] != -1) {
29121
+ getActiveMaskSet()["lastValidPosition"] = seekPrevious(getActiveMaskSet()["p"]);
29122
+ }
29123
+ }
29124
+
29125
+ function escapeRegex(str) {
29126
+ return $.inputmask.escapeRegex.call(this, str);
29127
+ }
29128
+
29129
+ function truncateInput(inputValue) {
29130
+ return inputValue.replace(new RegExp("(" + escapeRegex(getActiveBufferTemplate().join('')) + ")*$"), "");
29131
+ }
29132
+
29133
+ function clearOptionalTail(input) {
29134
+ var buffer = getActiveBuffer(), tmpBuffer = buffer.slice(), testPos, pos;
29135
+ for (var pos = tmpBuffer.length - 1; pos >= 0; pos--) {
29136
+ var testPos = determineTestPosition(pos);
29137
+ if (getActiveTests()[testPos].optionality) {
29138
+ if (!isMask(pos) || !isValid(pos, buffer[pos], true))
29139
+ tmpBuffer.pop();
29140
+ else break;
29141
+ } else break;
29142
+ }
29143
+ writeBuffer(input, tmpBuffer);
29144
+ }
29145
+
29146
+ function unmaskedvalue($input, skipDatepickerCheck) {
29147
+ if (getActiveTests() && (skipDatepickerCheck === true || !$input.hasClass('hasDatepicker'))) {
29148
+ //checkVal(input, false, true);
29149
+ var umValue = $.map(getActiveBuffer(), function (element, index) {
29150
+ return isMask(index) && isValid(index, element, true) ? element : null;
29151
+ });
29152
+ var unmaskedValue = (isRTL ? umValue.reverse() : umValue).join('');
29153
+ return opts.onUnMask != undefined ? opts.onUnMask.call(this, getActiveBuffer().join(''), unmaskedValue) : unmaskedValue;
29154
+ } else {
29155
+ return $input[0]._valueGet();
29156
+ }
29157
+ }
29158
+
29159
+ function TranslatePosition(pos) {
29160
+ if (isRTL && typeof pos == 'number' && (!opts.greedy || opts.placeholder != "")) {
29161
+ var bffrLght = getActiveBuffer().length;
29162
+ pos = bffrLght - pos;
29163
+ }
29164
+ return pos;
29165
+ }
29166
+
29167
+ function caret(input, begin, end) {
29168
+ var npt = input.jquery && input.length > 0 ? input[0] : input, range;
29169
+ if (typeof begin == 'number') {
29170
+ begin = TranslatePosition(begin);
29171
+ end = TranslatePosition(end);
29172
+ if (!$(input).is(':visible')) {
29173
+ return;
29174
+ }
29175
+ end = (typeof end == 'number') ? end : begin;
29176
+ npt.scrollLeft = npt.scrollWidth;
29177
+ if (opts.insertMode == false && begin == end) end++; //set visualization for insert/overwrite mode
29178
+ if (npt.setSelectionRange) {
29179
+ npt.selectionStart = begin;
29180
+ npt.selectionEnd = android ? begin : end;
29181
+
29182
+ } else if (npt.createTextRange) {
29183
+ range = npt.createTextRange();
29184
+ range.collapse(true);
29185
+ range.moveEnd('character', end);
29186
+ range.moveStart('character', begin);
29187
+ range.select();
29188
+ }
29189
+ } else {
29190
+ if (!$(input).is(':visible')) {
29191
+ return { "begin": 0, "end": 0 };
29192
+ }
29193
+ if (npt.setSelectionRange) {
29194
+ begin = npt.selectionStart;
29195
+ end = npt.selectionEnd;
29196
+ } else if (document.selection && document.selection.createRange) {
29197
+ range = document.selection.createRange();
29198
+ begin = 0 - range.duplicate().moveStart('character', -100000);
29199
+ end = begin + range.text.length;
29200
+ }
29201
+ begin = TranslatePosition(begin);
29202
+ end = TranslatePosition(end);
29203
+ return { "begin": begin, "end": end };
29204
+ }
29205
+ }
29206
+
29207
+ function isComplete(buffer) { //return true / false / undefined (repeat *)
29208
+ if (opts.repeat == "*") return undefined;
29209
+ var complete = false, highestValidPosition = 0, currentActiveMasksetIndex = activeMasksetIndex;
29210
+ $.each(masksets, function (ndx, ms) {
29211
+ if (typeof (ms) == "object") {
29212
+ activeMasksetIndex = ndx;
29213
+ var aml = seekPrevious(getMaskLength());
29214
+ if (ms["lastValidPosition"] >= highestValidPosition && ms["lastValidPosition"] == aml) {
29215
+ var msComplete = true;
29216
+ for (var i = 0; i <= aml; i++) {
29217
+ var mask = isMask(i), testPos = determineTestPosition(i);
29218
+ if ((mask && (buffer[i] == undefined || buffer[i] == getPlaceHolder(i))) || (!mask && buffer[i] != getActiveBufferTemplate()[testPos])) {
29219
+ msComplete = false;
29220
+ break;
29221
+ }
29222
+ }
29223
+ complete = complete || msComplete;
29224
+ if (complete) //break loop
29225
+ return false;
29226
+ }
29227
+ highestValidPosition = ms["lastValidPosition"];
29228
+ }
29229
+ });
29230
+ activeMasksetIndex = currentActiveMasksetIndex; //reset activeMaskset
29231
+ return complete;
29232
+ }
29233
+
29234
+ function isSelection(begin, end) {
29235
+ return isRTL ? (begin - end) > 1 || ((begin - end) == 1 && opts.insertMode) :
29236
+ (end - begin) > 1 || ((end - begin) == 1 && opts.insertMode);
29237
+ }
29238
+
29239
+ function mask(el) {
29240
+ $el = $(el);
29241
+ if (!$el.is(":input")) return;
29242
+
29243
+ //store tests & original buffer in the input element - used to get the unmasked value
29244
+ $el.data('_inputmask', {
29245
+ 'masksets': masksets,
29246
+ 'activeMasksetIndex': activeMasksetIndex,
29247
+ 'opts': opts,
29248
+ 'isRTL': false
29249
+ });
29250
+
29251
+ //show tooltip
29252
+ if (opts.showTooltip) {
29253
+ $el.prop("title", getActiveMaskSet()["mask"]);
29254
+ }
29255
+
29256
+ //correct greedy setting if needed
29257
+ getActiveMaskSet()['greedy'] = getActiveMaskSet()['greedy'] ? getActiveMaskSet()['greedy'] : getActiveMaskSet()['repeat'] == 0;
29258
+
29259
+ //handle maxlength attribute
29260
+ if ($el.attr("maxLength") != null) //only when the attribute is set
29261
+ {
29262
+ var maxLength = $el.prop('maxLength');
29263
+ if (maxLength > -1) { //handle *-repeat
29264
+ $.each(masksets, function (ndx, ms) {
29265
+ if (typeof (ms) == "object") {
29266
+ if (ms["repeat"] == "*") {
29267
+ ms["repeat"] = maxLength;
29268
+ }
29269
+ }
29270
+ });
29271
+ }
29272
+ if (getMaskLength() >= maxLength && maxLength > -1) { //FF sets no defined max length to -1
29273
+ if (maxLength < getActiveBufferTemplate().length) getActiveBufferTemplate().length = maxLength;
29274
+ if (getActiveMaskSet()['greedy'] == false) {
29275
+ getActiveMaskSet()['repeat'] = Math.round(maxLength / getActiveBufferTemplate().length);
29276
+ }
29277
+ $el.prop('maxLength', getMaskLength() * 2);
29278
+ }
29279
+ }
29280
+
29281
+ patchValueProperty(el);
29282
+
29283
+ //init vars
29284
+ var skipKeyPressEvent = false, //Safari 5.1.x - modal dialog fires keypress twice workaround
29285
+ skipInputEvent = false, //skip when triggered from within inputmask
29286
+ ignorable = false;
29287
+
29288
+ if (opts.numericInput) opts.isNumeric = opts.numericInput;
29289
+ if (el.dir == "rtl" || (opts.numericInput && opts.rightAlignNumerics) || (opts.isNumeric && opts.rightAlignNumerics))
29290
+ $el.css("text-align", "right");
29291
+
29292
+ if (el.dir == "rtl" || opts.numericInput) {
29293
+ el.dir = "ltr";
29294
+ $el.removeAttr("dir");
29295
+ var inputData = $el.data('_inputmask');
29296
+ inputData['isRTL'] = true;
29297
+ $el.data('_inputmask', inputData);
29298
+ isRTL = true;
29299
+ }
29300
+
29301
+ //unbind all events - to make sure that no other mask will interfere when re-masking
29302
+ $el.unbind(".inputmask");
29303
+ $el.removeClass('focus.inputmask');
29304
+ //bind events
29305
+ $el.closest('form').bind("submit", function () { //trigger change on submit if any
29306
+ if (valueOnFocus != getActiveBuffer().join('')) {
29307
+ $el.change();
29308
+ }
29309
+ }).bind('reset', function () {
29310
+ setTimeout(function () {
29311
+ $el.trigger("setvalue");
29312
+ }, 0);
29313
+ });
29314
+ $el.bind("mouseenter.inputmask", function () {
29315
+ var $input = $(this), input = this;
29316
+ if (!$input.hasClass('focus.inputmask') && opts.showMaskOnHover) {
29317
+ if (input._valueGet() != getActiveBuffer().join('')) {
29318
+ writeBuffer(input, getActiveBuffer());
29319
+ }
29320
+ }
29321
+ }).bind("blur.inputmask", function () {
29322
+ var $input = $(this), input = this, nptValue = input._valueGet(), buffer = getActiveBuffer();
29323
+ $input.removeClass('focus.inputmask');
29324
+ if (valueOnFocus != getActiveBuffer().join('')) {
29325
+ $input.change();
29326
+ }
29327
+ if (opts.clearMaskOnLostFocus && nptValue != '') {
29328
+ if (nptValue == getActiveBufferTemplate().join(''))
29329
+ input._valueSet('');
29330
+ else { //clearout optional tail of the mask
29331
+ clearOptionalTail(input);
29332
+ }
29333
+ }
29334
+ if (isComplete(buffer) === false) {
29335
+ $input.trigger("incomplete");
29336
+ if (opts.clearIncomplete) {
29337
+ $.each(masksets, function (ndx, ms) {
29338
+ if (typeof (ms) == "object") {
29339
+ ms["buffer"] = ms["_buffer"].slice();
29340
+ ms["lastValidPosition"] = -1;
29341
+ }
29342
+ });
29343
+ activeMasksetIndex = 0;
29344
+ if (opts.clearMaskOnLostFocus)
29345
+ input._valueSet('');
29346
+ else {
29347
+ buffer = getActiveBufferTemplate().slice();
29348
+ writeBuffer(input, buffer);
29349
+ }
29350
+ }
29351
+ }
29352
+ }).bind("focus.inputmask", function () {
29353
+ var $input = $(this), input = this, nptValue = input._valueGet();
29354
+ if (opts.showMaskOnFocus && !$input.hasClass('focus.inputmask') && (!opts.showMaskOnHover || (opts.showMaskOnHover && nptValue == ''))) {
29355
+ if (input._valueGet() != getActiveBuffer().join('')) {
29356
+ writeBuffer(input, getActiveBuffer(), seekNext(getActiveMaskSet()["lastValidPosition"]));
29357
+ }
29358
+ }
29359
+ $input.addClass('focus.inputmask');
29360
+ valueOnFocus = getActiveBuffer().join('');
29361
+ }).bind("mouseleave.inputmask", function () {
29362
+ var $input = $(this), input = this;
29363
+ if (opts.clearMaskOnLostFocus) {
29364
+ if (!$input.hasClass('focus.inputmask') && input._valueGet() != $input.attr("placeholder")) {
29365
+ if (input._valueGet() == getActiveBufferTemplate().join('') || input._valueGet() == '')
29366
+ input._valueSet('');
29367
+ else { //clearout optional tail of the mask
29368
+ clearOptionalTail(input);
29369
+ }
29370
+ }
29371
+ }
29372
+ }).bind("click.inputmask", function () {
29373
+ var input = this;
29374
+ setTimeout(function () {
29375
+ var selectedCaret = caret(input), buffer = getActiveBuffer();
29376
+ if (selectedCaret.begin == selectedCaret.end) {
29377
+ var clickPosition = opts.isRTL ? TranslatePosition(selectedCaret.begin) : selectedCaret.begin,
29378
+ lvp = getActiveMaskSet()["lastValidPosition"],
29379
+ lastPosition;
29380
+ if (opts.isNumeric) {
29381
+ lastPosition = opts.skipRadixDance === false && opts.radixPoint != "" && $.inArray(opts.radixPoint, buffer) != -1 ?
29382
+ (opts.numericInput ? seekNext($.inArray(opts.radixPoint, buffer)) : $.inArray(opts.radixPoint, buffer)) :
29383
+ seekNext(lvp);
29384
+ } else {
29385
+ lastPosition = seekNext(lvp);
29386
+ }
29387
+ if (clickPosition < lastPosition) {
29388
+ if (isMask(clickPosition))
29389
+ caret(input, clickPosition);
29390
+ else caret(input, seekNext(clickPosition));
29391
+ } else
29392
+ caret(input, lastPosition);
29393
+ }
29394
+ }, 0);
29395
+ }).bind('dblclick.inputmask', function () {
29396
+ var input = this;
29397
+ setTimeout(function () {
29398
+ caret(input, 0, seekNext(getActiveMaskSet()["lastValidPosition"]));
29399
+ }, 0);
29400
+ }).bind(pasteEvent + ".inputmask dragdrop.inputmask drop.inputmask", function (e) {
29401
+ if (skipInputEvent === true) {
29402
+ skipInputEvent = false;
29403
+ return true;
29404
+ }
29405
+ var input = this, $input = $(input);
29406
+
29407
+ //paste event for IE8 and lower I guess ;-)
29408
+ if (e.type == "propertychange" && input._valueGet().length <= getMaskLength()) {
29409
+ return true;
29410
+ }
29411
+ setTimeout(function () {
29412
+ var pasteValue = opts.onBeforePaste != undefined ? opts.onBeforePaste.call(this, input._valueGet()) : input._valueGet();
29413
+ checkVal(input, true, false, pasteValue.split(''), true);
29414
+ if (isComplete(getActiveBuffer()) === true)
29415
+ $input.trigger("complete");
29416
+ $input.click();
29417
+ }, 0);
29418
+ }).bind('setvalue.inputmask', function () {
29419
+ var input = this;
29420
+ checkVal(input, true);
29421
+ valueOnFocus = getActiveBuffer().join('');
29422
+ if (input._valueGet() == getActiveBufferTemplate().join(''))
29423
+ input._valueSet('');
29424
+ }).bind("_keypress.inputmask", keypressEvent //will be skipped be the eventruler
29425
+ ).bind('complete.inputmask', opts.oncomplete
29426
+ ).bind('incomplete.inputmask', opts.onincomplete
29427
+ ).bind('cleared.inputmask', opts.oncleared
29428
+ ).bind("keyup.inputmask", keyupEvent);
29429
+
29430
+ if (androidchrome) {
29431
+ $el.bind("input.inputmask", function (e) {
29432
+ if (skipInputEvent === true) {
29433
+ skipInputEvent = false;
29434
+ return true;
29435
+ }
29436
+ var input = this, $input = $(input);
29437
+
29438
+ chromeValueOnInput = getActiveBuffer().join('');
29439
+ checkVal(input, false, false);
29440
+ writeBuffer(input, getActiveBuffer());
29441
+ if (isComplete(getActiveBuffer()) === true)
29442
+ $input.trigger("complete");
29443
+ $input.click();
29444
+ });
29445
+ } else {
29446
+ $el.bind("keydown.inputmask", keydownEvent
29447
+ ).bind("keypress.inputmask", keypressEvent);
29448
+ }
29449
+
29450
+ //apply mask
29451
+ checkVal(el, true, false);
29452
+ valueOnFocus = getActiveBuffer().join('');
29453
+ // Wrap document.activeElement in a try/catch block since IE9 throw "Unspecified error" if document.activeElement is undefined when we are in an IFrame.
29454
+ var activeElement;
29455
+ try {
29456
+ activeElement = document.activeElement;
29457
+ } catch (e) {
29458
+ }
29459
+ if (activeElement === el) { //position the caret when in focus
29460
+ $el.addClass('focus.inputmask');
29461
+ caret(el, seekNext(getActiveMaskSet()["lastValidPosition"]));
29462
+ } else if (opts.clearMaskOnLostFocus) {
29463
+ if (getActiveBuffer().join('') == getActiveBufferTemplate().join('')) {
29464
+ el._valueSet('');
29465
+ } else {
29466
+ clearOptionalTail(el);
29467
+ }
29468
+ } else {
29469
+ writeBuffer(el, getActiveBuffer());
29470
+ }
29471
+
29472
+ installEventRuler(el);
29473
+
29474
+ //private functions
29475
+
29476
+ function installEventRuler(npt) {
29477
+ var events = $._data(npt).events;
29478
+
29479
+ $.each(events, function (eventType, eventHandlers) {
29480
+ $.each(eventHandlers, function (ndx, eventHandler) {
29481
+ if (eventHandler.namespace == "inputmask") {
29482
+ if (eventHandler.type != "setvalue" && eventHandler.type != "_keypress") {
29483
+ var handler = eventHandler.handler;
29484
+ eventHandler.handler = function (e) {
29485
+ if (this.readOnly || this.disabled)
29486
+ e.preventDefault;
29487
+ else
29488
+ return handler.apply(this, arguments);
29489
+ };
29490
+ }
29491
+ }
29492
+ });
29493
+ });
29494
+ }
29495
+
29496
+ function patchValueProperty(npt) {
29497
+ var valueProperty;
29498
+ if (Object.getOwnPropertyDescriptor)
29499
+ valueProperty = Object.getOwnPropertyDescriptor(npt, "value");
29500
+ if (valueProperty && valueProperty.get) {
29501
+ if (!npt._valueGet) {
29502
+ var valueGet = valueProperty.get;
29503
+ var valueSet = valueProperty.set;
29504
+ npt._valueGet = function () {
29505
+ return isRTL ? valueGet.call(this).split('').reverse().join('') : valueGet.call(this);
29506
+ };
29507
+ npt._valueSet = function (value) {
29508
+ valueSet.call(this, isRTL ? value.split('').reverse().join('') : value);
29509
+ };
29510
+
29511
+ Object.defineProperty(npt, "value", {
29512
+ get: function () {
29513
+ var $self = $(this), inputData = $(this).data('_inputmask'), masksets = inputData['masksets'],
29514
+ activeMasksetIndex = inputData['activeMasksetIndex'];
29515
+ return inputData && inputData['opts'].autoUnmask ? $self.inputmask('unmaskedvalue') : valueGet.call(this) != masksets[activeMasksetIndex]['_buffer'].join('') ? valueGet.call(this) : '';
29516
+ },
29517
+ set: function (value) {
29518
+ valueSet.call(this, value);
29519
+ $(this).triggerHandler('setvalue.inputmask');
29520
+ }
29521
+ });
29522
+ }
29523
+ } else if (document.__lookupGetter__ && npt.__lookupGetter__("value")) {
29524
+ if (!npt._valueGet) {
29525
+ var valueGet = npt.__lookupGetter__("value");
29526
+ var valueSet = npt.__lookupSetter__("value");
29527
+ npt._valueGet = function () {
29528
+ return isRTL ? valueGet.call(this).split('').reverse().join('') : valueGet.call(this);
29529
+ };
29530
+ npt._valueSet = function (value) {
29531
+ valueSet.call(this, isRTL ? value.split('').reverse().join('') : value);
29532
+ };
29533
+
29534
+ npt.__defineGetter__("value", function () {
29535
+ var $self = $(this), inputData = $(this).data('_inputmask'), masksets = inputData['masksets'],
29536
+ activeMasksetIndex = inputData['activeMasksetIndex'];
29537
+ return inputData && inputData['opts'].autoUnmask ? $self.inputmask('unmaskedvalue') : valueGet.call(this) != masksets[activeMasksetIndex]['_buffer'].join('') ? valueGet.call(this) : '';
29538
+ });
29539
+ npt.__defineSetter__("value", function (value) {
29540
+ valueSet.call(this, value);
29541
+ $(this).triggerHandler('setvalue.inputmask');
29542
+ });
29543
+ }
29544
+ } else {
29545
+ if (!npt._valueGet) {
29546
+ npt._valueGet = function () { return isRTL ? this.value.split('').reverse().join('') : this.value; };
29547
+ npt._valueSet = function (value) { this.value = isRTL ? value.split('').reverse().join('') : value; };
29548
+ }
29549
+ if ($.valHooks.text == undefined || $.valHooks.text.inputmaskpatch != true) {
29550
+ var valueGet = $.valHooks.text && $.valHooks.text.get ? $.valHooks.text.get : function (elem) { return elem.value; };
29551
+ var valueSet = $.valHooks.text && $.valHooks.text.set ? $.valHooks.text.set : function (elem, value) {
29552
+ elem.value = value;
29553
+ return elem;
29554
+ };
29555
+
29556
+ jQuery.extend($.valHooks, {
29557
+ text: {
29558
+ get: function (elem) {
29559
+ var $elem = $(elem);
29560
+ if ($elem.data('_inputmask')) {
29561
+ if ($elem.data('_inputmask')['opts'].autoUnmask)
29562
+ return $elem.inputmask('unmaskedvalue');
29563
+ else {
29564
+ var result = valueGet(elem),
29565
+ inputData = $elem.data('_inputmask'), masksets = inputData['masksets'],
29566
+ activeMasksetIndex = inputData['activeMasksetIndex'];
29567
+ return result != masksets[activeMasksetIndex]['_buffer'].join('') ? result : '';
29568
+ }
29569
+ } else return valueGet(elem);
29570
+ },
29571
+ set: function (elem, value) {
29572
+ var $elem = $(elem);
29573
+ var result = valueSet(elem, value);
29574
+ if ($elem.data('_inputmask')) $elem.triggerHandler('setvalue.inputmask');
29575
+ return result;
29576
+ },
29577
+ inputmaskpatch: true
29578
+ }
29579
+ });
29580
+ }
29581
+ }
29582
+ }
29583
+
29584
+ //shift chars to left from start to end and put c at end position if defined
29585
+
29586
+ function shiftL(start, end, c, maskJumps) {
29587
+ var buffer = getActiveBuffer();
29588
+ if (maskJumps !== false) //jumping over nonmask position
29589
+ while (!isMask(start) && start - 1 >= 0) start--;
29590
+ for (var i = start; i < end && i < getMaskLength() ; i++) {
29591
+ if (isMask(i)) {
29592
+ setReTargetPlaceHolder(buffer, i);
29593
+ var j = seekNext(i);
29594
+ var p = getBufferElement(buffer, j);
29595
+ if (p != getPlaceHolder(j)) {
29596
+ if (j < getMaskLength() && isValid(i, p, true) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) {
29597
+ setBufferElement(buffer, i, p, true);
29598
+ } else {
29599
+ if (isMask(i))
29600
+ break;
29601
+ }
29602
+ }
29603
+ } else {
29604
+ setReTargetPlaceHolder(buffer, i);
29605
+ }
29606
+ }
29607
+ if (c != undefined)
29608
+ setBufferElement(buffer, seekPrevious(end), c);
29609
+
29610
+ if (getActiveMaskSet()["greedy"] == false) {
29611
+ var trbuffer = truncateInput(buffer.join('')).split('');
29612
+ buffer.length = trbuffer.length;
29613
+ for (var i = 0, bl = buffer.length; i < bl; i++) {
29614
+ buffer[i] = trbuffer[i];
29615
+ }
29616
+ if (buffer.length == 0) getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice();
29617
+ }
29618
+ return start; //return the used start position
29619
+ }
29620
+
29621
+ function shiftR(start, end, c) {
29622
+ var buffer = getActiveBuffer();
29623
+ if (getBufferElement(buffer, start, true) != getPlaceHolder(start)) {
29624
+ for (var i = seekPrevious(end) ; i > start && i >= 0; i--) {
29625
+ if (isMask(i)) {
29626
+ var j = seekPrevious(i);
29627
+ var t = getBufferElement(buffer, j);
29628
+ if (t != getPlaceHolder(j)) {
29629
+ if (isValid(j, t, true) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) {
29630
+ setBufferElement(buffer, i, t, true);
29631
+ setReTargetPlaceHolder(buffer, j);
29632
+ } //else break;
29633
+ }
29634
+ } else
29635
+ setReTargetPlaceHolder(buffer, i);
29636
+ }
29637
+ }
29638
+ if (c != undefined && getBufferElement(buffer, start) == getPlaceHolder(start))
29639
+ setBufferElement(buffer, start, c);
29640
+ var lengthBefore = buffer.length;
29641
+ if (getActiveMaskSet()["greedy"] == false) {
29642
+ var trbuffer = truncateInput(buffer.join('')).split('');
29643
+ buffer.length = trbuffer.length;
29644
+ for (var i = 0, bl = buffer.length; i < bl; i++) {
29645
+ buffer[i] = trbuffer[i];
29646
+ }
29647
+ if (buffer.length == 0) getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice();
29648
+ }
29649
+ return end - (lengthBefore - buffer.length); //return new start position
29650
+ }
29651
+
29652
+ ;
29653
+
29654
+
29655
+ function HandleRemove(input, k, pos) {
29656
+ if (opts.numericInput || isRTL) {
29657
+ switch (k) {
29658
+ case opts.keyCode.BACKSPACE:
29659
+ k = opts.keyCode.DELETE;
29660
+ break;
29661
+ case opts.keyCode.DELETE:
29662
+ k = opts.keyCode.BACKSPACE;
29663
+ break;
29664
+ }
29665
+ if (isRTL) {
29666
+ var pend = pos.end;
29667
+ pos.end = pos.begin;
29668
+ pos.begin = pend;
29669
+ }
29670
+ }
29671
+
29672
+ var isSelection = true;
29673
+ if (pos.begin == pos.end) {
29674
+ var posBegin = k == opts.keyCode.BACKSPACE ? pos.begin - 1 : pos.begin;
29675
+ if (opts.isNumeric && opts.radixPoint != "" && getActiveBuffer()[posBegin] == opts.radixPoint) {
29676
+ pos.begin = (getActiveBuffer().length - 1 == posBegin) /* radixPoint is latest? delete it */ ? pos.begin : k == opts.keyCode.BACKSPACE ? posBegin : seekNext(posBegin);
29677
+ pos.end = pos.begin;
29678
+ }
29679
+ isSelection = false;
29680
+ if (k == opts.keyCode.BACKSPACE)
29681
+ pos.begin--;
29682
+ else if (k == opts.keyCode.DELETE)
29683
+ pos.end++;
29684
+ } else if (pos.end - pos.begin == 1 && !opts.insertMode) {
29685
+ isSelection = false;
29686
+ if (k == opts.keyCode.BACKSPACE)
29687
+ pos.begin--;
29688
+ }
29689
+
29690
+ clearBuffer(getActiveBuffer(), pos.begin, pos.end);
29691
+
29692
+ var ml = getMaskLength();
29693
+ if (opts.greedy == false) {
29694
+ shiftL(pos.begin, ml, undefined, !isRTL && (k == opts.keyCode.BACKSPACE && !isSelection));
29695
+ } else {
29696
+ var newpos = pos.begin;
29697
+ for (var i = pos.begin; i < pos.end; i++) { //seeknext to skip placeholders at start in selection
29698
+ if (isMask(i) || !isSelection)
29699
+ newpos = shiftL(pos.begin, ml, undefined, !isRTL && (k == opts.keyCode.BACKSPACE && !isSelection));
29700
+ }
29701
+ if (!isSelection) pos.begin = newpos;
29702
+ }
29703
+ var firstMaskPos = seekNext(-1);
29704
+ clearBuffer(getActiveBuffer(), pos.begin, pos.end, true);
29705
+ checkVal(input, false, masksets[1] == undefined || firstMaskPos >= pos.end, getActiveBuffer());
29706
+ if (getActiveMaskSet()['lastValidPosition'] < firstMaskPos) {
29707
+ getActiveMaskSet()["lastValidPosition"] = -1;
29708
+ getActiveMaskSet()["p"] = firstMaskPos;
29709
+ } else {
29710
+ getActiveMaskSet()["p"] = pos.begin;
29711
+ }
29712
+ }
29713
+
29714
+ function keydownEvent(e) {
29715
+ //Safari 5.1.x - modal dialog fires keypress twice workaround
29716
+ skipKeyPressEvent = false;
29717
+ var input = this, $input = $(input), k = e.keyCode, pos = caret(input);
29718
+
29719
+ //backspace, delete, and escape get special treatment
29720
+ if (k == opts.keyCode.BACKSPACE || k == opts.keyCode.DELETE || (iphone && k == 127) || e.ctrlKey && k == 88) { //backspace/delete
29721
+ e.preventDefault(); //stop default action but allow propagation
29722
+ if (k == 88) valueOnFocus = getActiveBuffer().join('');
29723
+ HandleRemove(input, k, pos);
29724
+ determineActiveMasksetIndex();
29725
+ writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]);
29726
+ if (input._valueGet() == getActiveBufferTemplate().join(''))
29727
+ $input.trigger('cleared');
29728
+
29729
+ if (opts.showTooltip) { //update tooltip
29730
+ $input.prop("title", getActiveMaskSet()["mask"]);
29731
+ }
29732
+ } else if (k == opts.keyCode.END || k == opts.keyCode.PAGE_DOWN) { //when END or PAGE_DOWN pressed set position at lastmatch
29733
+ setTimeout(function () {
29734
+ var caretPos = seekNext(getActiveMaskSet()["lastValidPosition"]);
29735
+ if (!opts.insertMode && caretPos == getMaskLength() && !e.shiftKey) caretPos--;
29736
+ caret(input, e.shiftKey ? pos.begin : caretPos, caretPos);
29737
+ }, 0);
29738
+ } else if ((k == opts.keyCode.HOME && !e.shiftKey) || k == opts.keyCode.PAGE_UP) { //Home or page_up
29739
+ caret(input, 0, e.shiftKey ? pos.begin : 0);
29740
+ } else if (k == opts.keyCode.ESCAPE || (k == 90 && e.ctrlKey)) { //escape && undo
29741
+ checkVal(input, true, false, valueOnFocus.split(''));
29742
+ $input.click();
29743
+ } else if (k == opts.keyCode.INSERT && !(e.shiftKey || e.ctrlKey)) { //insert
29744
+ opts.insertMode = !opts.insertMode;
29745
+ caret(input, !opts.insertMode && pos.begin == getMaskLength() ? pos.begin - 1 : pos.begin);
29746
+ } else if (opts.insertMode == false && !e.shiftKey) {
29747
+ if (k == opts.keyCode.RIGHT) {
29748
+ setTimeout(function () {
29749
+ var caretPos = caret(input);
29750
+ caret(input, caretPos.begin);
29751
+ }, 0);
29752
+ } else if (k == opts.keyCode.LEFT) {
29753
+ setTimeout(function () {
29754
+ var caretPos = caret(input);
29755
+ caret(input, caretPos.begin - 1);
29756
+ }, 0);
29757
+ }
29758
+ }
29759
+
29760
+ var currentCaretPos = caret(input);
29761
+ if (opts.onKeyDown.call(this, e, getActiveBuffer(), opts) === true) //extra stuff to execute on keydown
29762
+ caret(input, currentCaretPos.begin, currentCaretPos.end);
29763
+ ignorable = $.inArray(k, opts.ignorables) != -1;
29764
+ }
29765
+
29766
+
29767
+ function keypressEvent(e, checkval, k, writeOut, strict, ndx) {
29768
+ //Safari 5.1.x - modal dialog fires keypress twice workaround
29769
+ if (k == undefined && skipKeyPressEvent) return false;
29770
+ skipKeyPressEvent = true;
29771
+
29772
+ var input = this, $input = $(input);
29773
+
29774
+ e = e || window.event;
29775
+ var k = k || e.which || e.charCode || e.keyCode;
29776
+
29777
+ if ((!(e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) && checkval !== true) {
29778
+ return true;
29779
+ } else {
29780
+ if (k) {
29781
+ //special treat the decimal separator
29782
+ if (checkval !== true && k == 46 && e.shiftKey == false && opts.radixPoint == ",") k = 44;
29783
+
29784
+ var pos, results, result, c = String.fromCharCode(k);
29785
+ if (checkval) {
29786
+ var pcaret = strict ? ndx : getActiveMaskSet()["lastValidPosition"] + 1;
29787
+ pos = { begin: pcaret, end: pcaret };
29788
+ } else {
29789
+ pos = caret(input);
29790
+ }
29791
+
29792
+ //should we clear a possible selection??
29793
+ var isSlctn = isSelection(pos.begin, pos.end), redetermineLVP = false,
29794
+ initialIndex = activeMasksetIndex;
29795
+ if (isSlctn) {
29796
+ activeMasksetIndex = initialIndex;
29797
+ $.each(masksets, function (ndx, lmnt) { //init undobuffer for recovery when not valid
29798
+ if (typeof (lmnt) == "object") {
29799
+ activeMasksetIndex = ndx;
29800
+ getActiveMaskSet()["undoBuffer"] = getActiveBuffer().join('');
29801
+ }
29802
+ });
29803
+ HandleRemove(input, opts.keyCode.DELETE, pos);
29804
+ if (!opts.insertMode) { //preserve some space
29805
+ $.each(masksets, function (ndx, lmnt) {
29806
+ if (typeof (lmnt) == "object") {
29807
+ activeMasksetIndex = ndx;
29808
+ shiftR(pos.begin, getMaskLength());
29809
+ getActiveMaskSet()["lastValidPosition"] = seekNext(getActiveMaskSet()["lastValidPosition"]);
29810
+ }
29811
+ });
29812
+ }
29813
+ activeMasksetIndex = initialIndex; //restore index
29814
+ }
29815
+
29816
+ var radixPosition = getActiveBuffer().join('').indexOf(opts.radixPoint);
29817
+ if (opts.isNumeric && checkval !== true && radixPosition != -1) {
29818
+ if (opts.greedy && pos.begin <= radixPosition) {
29819
+ pos.begin = seekPrevious(pos.begin);
29820
+ pos.end = pos.begin;
29821
+ } else if (c == opts.radixPoint) {
29822
+ pos.begin = radixPosition;
29823
+ pos.end = pos.begin;
29824
+ }
29825
+ }
29826
+
29827
+
29828
+ var p = pos.begin;
29829
+ results = isValid(p, c, strict);
29830
+ if (strict === true) results = [{ "activeMasksetIndex": activeMasksetIndex, "result": results }];
29831
+ var minimalForwardPosition = -1;
29832
+ $.each(results, function (index, result) {
29833
+ activeMasksetIndex = result["activeMasksetIndex"];
29834
+ getActiveMaskSet()["writeOutBuffer"] = true;
29835
+ var np = result["result"];
29836
+ if (np !== false) {
29837
+ var refresh = false, buffer = getActiveBuffer();
29838
+ if (np !== true) {
29839
+ refresh = np["refresh"]; //only rewrite buffer from isValid
29840
+ p = np.pos != undefined ? np.pos : p; //set new position from isValid
29841
+ c = np.c != undefined ? np.c : c; //set new char from isValid
29842
+ }
29843
+ if (refresh !== true) {
29844
+ if (opts.insertMode == true) {
29845
+ var lastUnmaskedPosition = getMaskLength();
29846
+ var bfrClone = buffer.slice();
29847
+ while (getBufferElement(bfrClone, lastUnmaskedPosition, true) != getPlaceHolder(lastUnmaskedPosition) && lastUnmaskedPosition >= p) {
29848
+ lastUnmaskedPosition = lastUnmaskedPosition == 0 ? -1 : seekPrevious(lastUnmaskedPosition);
29849
+ }
29850
+ if (lastUnmaskedPosition >= p) {
29851
+ shiftR(p, getMaskLength(), c);
29852
+ //shift the lvp if needed
29853
+ var lvp = getActiveMaskSet()["lastValidPosition"], nlvp = seekNext(lvp);
29854
+ if (nlvp != getMaskLength() && lvp >= p && (getBufferElement(getActiveBuffer(), nlvp, true) != getPlaceHolder(nlvp))) {
29855
+ getActiveMaskSet()["lastValidPosition"] = nlvp;
29856
+ }
29857
+ } else getActiveMaskSet()["writeOutBuffer"] = false;
29858
+ } else setBufferElement(buffer, p, c, true);
29859
+ if (minimalForwardPosition == -1 || minimalForwardPosition > seekNext(p)) {
29860
+ minimalForwardPosition = seekNext(p);
29861
+ }
29862
+ } else if (!strict) {
29863
+ var nextPos = p < getMaskLength() ? p + 1 : p;
29864
+ if (minimalForwardPosition == -1 || minimalForwardPosition > nextPos) {
29865
+ minimalForwardPosition = nextPos;
29866
+ }
29867
+ }
29868
+ if (minimalForwardPosition > getActiveMaskSet()["p"])
29869
+ getActiveMaskSet()["p"] = minimalForwardPosition; //needed for checkval strict
29870
+ }
29871
+ });
29872
+
29873
+ if (strict !== true) {
29874
+ activeMasksetIndex = initialIndex;
29875
+ determineActiveMasksetIndex();
29876
+ }
29877
+ if (writeOut !== false) {
29878
+ $.each(results, function (ndx, rslt) {
29879
+ if (rslt["activeMasksetIndex"] == activeMasksetIndex) {
29880
+ result = rslt;
29881
+ return false;
29882
+ }
29883
+ });
29884
+ if (result != undefined) {
29885
+ var self = this;
29886
+ setTimeout(function () { opts.onKeyValidation.call(self, result["result"], opts); }, 0);
29887
+ if (getActiveMaskSet()["writeOutBuffer"] && result["result"] !== false) {
29888
+ var buffer = getActiveBuffer();
29889
+
29890
+ var newCaretPosition;
29891
+ if (checkval) {
29892
+ newCaretPosition = undefined;
29893
+ } else if (opts.numericInput) {
29894
+ if (p > radixPosition) {
29895
+ newCaretPosition = seekPrevious(minimalForwardPosition);
29896
+ } else if (c == opts.radixPoint) {
29897
+ newCaretPosition = minimalForwardPosition - 1;
29898
+ } else newCaretPosition = seekPrevious(minimalForwardPosition - 1);
29899
+ } else {
29900
+ newCaretPosition = minimalForwardPosition;
29901
+ }
29902
+
29903
+ writeBuffer(input, buffer, newCaretPosition);
29904
+ if (checkval !== true) {
29905
+ setTimeout(function () { //timeout needed for IE
29906
+ if (isComplete(buffer) === true)
29907
+ $input.trigger("complete");
29908
+ skipInputEvent = true;
29909
+ $input.trigger("input");
29910
+ }, 0);
29911
+ }
29912
+ } else if (isSlctn) {
29913
+ getActiveMaskSet()["buffer"] = getActiveMaskSet()["undoBuffer"].split('');
29914
+ }
29915
+ }
29916
+ }
29917
+
29918
+ if (opts.showTooltip) { //update tooltip
29919
+ $input.prop("title", getActiveMaskSet()["mask"]);
29920
+ }
29921
+ e.preventDefault();
29922
+ }
29923
+ }
29924
+ }
29925
+
29926
+ function keyupEvent(e) {
29927
+ var $input = $(this), input = this, k = e.keyCode, buffer = getActiveBuffer();
29928
+
29929
+ if (androidchrome && k == opts.keyCode.BACKSPACE) {
29930
+ if (chromeValueOnInput == input._valueGet())
29931
+ keydownEvent.call(this, e);
29932
+ }
29933
+
29934
+ opts.onKeyUp.call(this, e, buffer, opts); //extra stuff to execute on keyup
29935
+ if (k == opts.keyCode.TAB && opts.showMaskOnFocus) {
29936
+ if ($input.hasClass('focus.inputmask') && input._valueGet().length == 0) {
29937
+ buffer = getActiveBufferTemplate().slice();
29938
+ writeBuffer(input, buffer);
29939
+ caret(input, 0);
29940
+ valueOnFocus = getActiveBuffer().join('');
29941
+ } else {
29942
+ writeBuffer(input, buffer);
29943
+ if (buffer.join('') == getActiveBufferTemplate().join('') && $.inArray(opts.radixPoint, buffer) != -1) {
29944
+ caret(input, TranslatePosition(0));
29945
+ $input.click();
29946
+ } else
29947
+ caret(input, TranslatePosition(0), TranslatePosition(getMaskLength()));
29948
+ }
29949
+ }
29950
+ }
29951
+ }
29952
+
29953
+ return {
29954
+ isComplete: function (buffer) {
29955
+ return isComplete(buffer);
29956
+ },
29957
+ unmaskedvalue: function ($input, skipDatepickerCheck) {
29958
+ isRTL = $input.data('_inputmask')['isRTL'];
29959
+ return unmaskedvalue($input, skipDatepickerCheck);
29960
+ },
29961
+ mask: function (el) {
29962
+ mask(el);
29963
+ }
29964
+ };
29965
+ };
29966
+
29967
+ $.inputmask = {
29968
+ //options default
29969
+ defaults: {
29970
+ placeholder: "_",
29971
+ optionalmarker: { start: "[", end: "]" },
29972
+ quantifiermarker: { start: "{", end: "}" },
29973
+ groupmarker: { start: "(", end: ")" },
29974
+ escapeChar: "\\",
29975
+ mask: null,
29976
+ oncomplete: $.noop, //executes when the mask is complete
29977
+ onincomplete: $.noop, //executes when the mask is incomplete and focus is lost
29978
+ oncleared: $.noop, //executes when the mask is cleared
29979
+ repeat: 0, //repetitions of the mask: * ~ forever, otherwise specify an integer
29980
+ greedy: true, //true: allocated buffer for the mask and repetitions - false: allocate only if needed
29981
+ autoUnmask: false, //automatically unmask when retrieving the value with $.fn.val or value if the browser supports __lookupGetter__ or getOwnPropertyDescriptor
29982
+ clearMaskOnLostFocus: true,
29983
+ insertMode: true, //insert the input or overwrite the input
29984
+ clearIncomplete: false, //clear the incomplete input on blur
29985
+ aliases: {}, //aliases definitions => see jquery.inputmask.extensions.js
29986
+ onKeyUp: $.noop, //override to implement autocomplete on certain keys for example
29987
+ onKeyDown: $.noop, //override to implement autocomplete on certain keys for example
29988
+ onBeforePaste: undefined, //executes before masking the pasted value to allow preprocessing of the pasted value. args => pastedValue => return processedValue
29989
+ onUnMask: undefined, //executes after unmasking to allow postprocessing of the unmaskedvalue. args => maskedValue, unmaskedValue
29990
+ showMaskOnFocus: true, //show the mask-placeholder when the input has focus
29991
+ showMaskOnHover: true, //show the mask-placeholder when hovering the empty input
29992
+ onKeyValidation: $.noop, //executes on every key-press with the result of isValid. Params: result, opts
29993
+ skipOptionalPartCharacter: " ", //a character which can be used to skip an optional part of a mask
29994
+ showTooltip: false, //show the activemask as tooltip
29995
+ numericInput: false, //numericInput input direction style (input shifts to the left while holding the caret position)
29996
+ //numeric basic properties
29997
+ isNumeric: false, //enable numeric features
29998
+ radixPoint: "", //".", // | ","
29999
+ skipRadixDance: false, //disable radixpoint caret positioning
30000
+ rightAlignNumerics: true, //align numerics to the right
30001
+ //numeric basic properties
30002
+ definitions: {
30003
+ '9': {
30004
+ validator: "[0-9]",
30005
+ cardinality: 1
30006
+ },
30007
+ 'a': {
30008
+ validator: "[A-Za-z\u0410-\u044F\u0401\u0451]",
30009
+ cardinality: 1
30010
+ },
30011
+ '*': {
30012
+ validator: "[A-Za-z\u0410-\u044F\u0401\u04510-9]",
30013
+ cardinality: 1
30014
+ }
30015
+ },
30016
+ keyCode: {
30017
+ ALT: 18, BACKSPACE: 8, CAPS_LOCK: 20, COMMA: 188, COMMAND: 91, COMMAND_LEFT: 91, COMMAND_RIGHT: 93, CONTROL: 17, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, INSERT: 45, LEFT: 37, MENU: 93, NUMPAD_ADD: 107, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, NUMPAD_ENTER: 108,
30018
+ NUMPAD_MULTIPLY: 106, NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SHIFT: 16, SPACE: 32, TAB: 9, UP: 38, WINDOWS: 91
30019
+ },
30020
+ //specify keycodes which should not be considered in the keypress event, otherwise the preventDefault will stop their default behavior especially in FF
30021
+ ignorables: [8, 9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123],
30022
+ getMaskLength: function (buffer, greedy, repeat, currentBuffer, opts) {
30023
+ var calculatedLength = buffer.length;
30024
+ if (!greedy) {
30025
+ if (repeat == "*") {
30026
+ calculatedLength = currentBuffer.length + 1;
30027
+ } else if (repeat > 1) {
30028
+ calculatedLength += (buffer.length * (repeat - 1));
30029
+ }
30030
+ }
30031
+ return calculatedLength;
30032
+ }
30033
+ },
30034
+ escapeRegex: function (str) {
30035
+ var specials = ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'];
30036
+ return str.replace(new RegExp('(\\' + specials.join('|\\') + ')', 'gim'), '\\$1');
30037
+ },
30038
+ format: function (value, opts) {
30039
+
30040
+ }
30041
+ };
30042
+
30043
+ $.fn.inputmask = function (fn, options) {
30044
+ var opts = $.extend(true, {}, $.inputmask.defaults, options),
30045
+ masksets,
30046
+ activeMasksetIndex = 0;
30047
+
30048
+ if (typeof fn === "string") {
30049
+ switch (fn) {
30050
+ case "mask":
30051
+ //resolve possible aliases given by options
30052
+ resolveAlias(opts.alias, options, opts);
30053
+ masksets = generateMaskSets(opts);
30054
+ if (masksets.length == 0) { return this; }
30055
+
30056
+ return this.each(function () {
30057
+ maskScope($.extend(true, {}, masksets), 0, opts).mask(this);
30058
+ });
30059
+ case "unmaskedvalue":
30060
+ var $input = $(this), input = this;
30061
+ if ($input.data('_inputmask')) {
30062
+ masksets = $input.data('_inputmask')['masksets'];
30063
+ activeMasksetIndex = $input.data('_inputmask')['activeMasksetIndex'];
30064
+ opts = $input.data('_inputmask')['opts'];
30065
+ return maskScope(masksets, activeMasksetIndex, opts).unmaskedvalue($input);
30066
+ } else return $input.val();
30067
+ case "remove":
30068
+ return this.each(function () {
30069
+ var $input = $(this), input = this;
30070
+ if ($input.data('_inputmask')) {
30071
+ masksets = $input.data('_inputmask')['masksets'];
30072
+ activeMasksetIndex = $input.data('_inputmask')['activeMasksetIndex'];
30073
+ opts = $input.data('_inputmask')['opts'];
30074
+ //writeout the unmaskedvalue
30075
+ input._valueSet(maskScope(masksets, activeMasksetIndex, opts).unmaskedvalue($input, true));
30076
+ //clear data
30077
+ $input.removeData('_inputmask');
30078
+ //unbind all events
30079
+ $input.unbind(".inputmask");
30080
+ $input.removeClass('focus.inputmask');
30081
+ //restore the value property
30082
+ var valueProperty;
30083
+ if (Object.getOwnPropertyDescriptor)
30084
+ valueProperty = Object.getOwnPropertyDescriptor(input, "value");
30085
+ if (valueProperty && valueProperty.get) {
30086
+ if (input._valueGet) {
30087
+ Object.defineProperty(input, "value", {
30088
+ get: input._valueGet,
30089
+ set: input._valueSet
30090
+ });
30091
+ }
30092
+ } else if (document.__lookupGetter__ && input.__lookupGetter__("value")) {
30093
+ if (input._valueGet) {
30094
+ input.__defineGetter__("value", input._valueGet);
30095
+ input.__defineSetter__("value", input._valueSet);
30096
+ }
30097
+ }
30098
+ try { //try catch needed for IE7 as it does not supports deleting fns
30099
+ delete input._valueGet;
30100
+ delete input._valueSet;
30101
+ } catch (e) {
30102
+ input._valueGet = undefined;
30103
+ input._valueSet = undefined;
30104
+
30105
+ }
30106
+ }
30107
+ });
30108
+ break;
30109
+ case "getemptymask": //return the default (empty) mask value, usefull for setting the default value in validation
30110
+ if (this.data('_inputmask')) {
30111
+ masksets = this.data('_inputmask')['masksets'];
30112
+ activeMasksetIndex = this.data('_inputmask')['activeMasksetIndex'];
30113
+ return masksets[activeMasksetIndex]['_buffer'].join('');
30114
+ }
30115
+ else return "";
30116
+ case "hasMaskedValue": //check wheter the returned value is masked or not; currently only works reliable when using jquery.val fn to retrieve the value
30117
+ return this.data('_inputmask') ? !this.data('_inputmask')['opts'].autoUnmask : false;
30118
+ case "isComplete":
30119
+ masksets = this.data('_inputmask')['masksets'];
30120
+ activeMasksetIndex = this.data('_inputmask')['activeMasksetIndex'];
30121
+ opts = this.data('_inputmask')['opts'];
30122
+ return maskScope(masksets, activeMasksetIndex, opts).isComplete(this[0]._valueGet().split(''));
30123
+ case "getmetadata": //return mask metadata if exists
30124
+ if (this.data('_inputmask')) {
30125
+ masksets = this.data('_inputmask')['masksets'];
30126
+ activeMasksetIndex = this.data('_inputmask')['activeMasksetIndex'];
30127
+ return masksets[activeMasksetIndex]['metadata'];
30128
+ }
30129
+ else return undefined;
30130
+ default:
30131
+ //check if the fn is an alias
30132
+ if (!resolveAlias(fn, options, opts)) {
30133
+ //maybe fn is a mask so we try
30134
+ //set mask
30135
+ opts.mask = fn;
30136
+ }
30137
+ masksets = generateMaskSets(opts);
30138
+ if (masksets.length == 0) { return this; }
30139
+ return this.each(function () {
30140
+ maskScope($.extend(true, {}, masksets), activeMasksetIndex, opts).mask(this);
30141
+ });
30142
+
30143
+ break;
30144
+ }
30145
+ } else if (typeof fn == "object") {
30146
+ opts = $.extend(true, {}, $.inputmask.defaults, fn);
30147
+
30148
+ resolveAlias(opts.alias, fn, opts); //resolve aliases
30149
+ masksets = generateMaskSets(opts);
30150
+ if (masksets.length == 0) { return this; }
30151
+ return this.each(function () {
30152
+ maskScope($.extend(true, {}, masksets), activeMasksetIndex, opts).mask(this);
30153
+ });
30154
+ } else if (fn == undefined) {
30155
+ //look for data-inputmask atribute - the attribute should only contain optipns
30156
+ return this.each(function () {
30157
+ var attrOptions = $(this).attr("data-inputmask");
30158
+ if (attrOptions && attrOptions != "") {
30159
+ try {
30160
+ attrOptions = attrOptions.replace(new RegExp("'", "g"), '"');
30161
+ var dataoptions = $.parseJSON("{" + attrOptions + "}");
30162
+ $.extend(true, dataoptions, options);
30163
+ opts = $.extend(true, {}, $.inputmask.defaults, dataoptions);
30164
+ resolveAlias(opts.alias, dataoptions, opts);
30165
+ opts.alias = undefined;
30166
+ $(this).inputmask(opts);
30167
+ } catch (ex) { } //need a more relax parseJSON
30168
+ }
30169
+ });
30170
+ }
30171
+ };
30172
+ }
30173
+ })(jQuery);
30174
+
30175
+ });
30176
+ require.register("ened/vendor/assets/javascripts/jquery/inputmask.extensions.js", function(exports, require, module){
30177
+ /*
30178
+ Input Mask plugin extensions
30179
+ http://github.com/RobinHerbots/jquery.inputmask
30180
+ Copyright (c) 2010 - 2014 Robin Herbots
30181
+ Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
30182
+ Version: 0.0.0
30183
+
30184
+ Optional extensions on the jquery.inputmask base
30185
+ */
30186
+ (function ($) {
30187
+ //extra definitions
30188
+ $.extend($.inputmask.defaults.definitions, {
30189
+ 'A': {
30190
+ validator: "[A-Za-z]",
30191
+ cardinality: 1,
30192
+ casing: "upper" //auto uppercasing
30193
+ },
30194
+ '#': {
30195
+ validator: "[A-Za-z\u0410-\u044F\u0401\u04510-9]",
30196
+ cardinality: 1,
30197
+ casing: "upper"
30198
+ }
30199
+ });
30200
+ $.extend($.inputmask.defaults.aliases, {
30201
+ 'url': {
30202
+ mask: "ir",
30203
+ placeholder: "",
30204
+ separator: "",
30205
+ defaultPrefix: "http://",
30206
+ regex: {
30207
+ urlpre1: new RegExp("[fh]"),
30208
+ urlpre2: new RegExp("(ft|ht)"),
30209
+ urlpre3: new RegExp("(ftp|htt)"),
30210
+ urlpre4: new RegExp("(ftp:|http|ftps)"),
30211
+ urlpre5: new RegExp("(ftp:/|ftps:|http:|https)"),
30212
+ urlpre6: new RegExp("(ftp://|ftps:/|http:/|https:)"),
30213
+ urlpre7: new RegExp("(ftp://|ftps://|http://|https:/)"),
30214
+ urlpre8: new RegExp("(ftp://|ftps://|http://|https://)")
30215
+ },
30216
+ definitions: {
30217
+ 'i': {
30218
+ validator: function (chrs, buffer, pos, strict, opts) {
30219
+ return true;
30220
+ },
30221
+ cardinality: 8,
30222
+ prevalidator: (function () {
30223
+ var result = [], prefixLimit = 8;
30224
+ for (var i = 0; i < prefixLimit; i++) {
30225
+ result[i] = (function () {
30226
+ var j = i;
30227
+ return {
30228
+ validator: function (chrs, buffer, pos, strict, opts) {
30229
+ if (opts.regex["urlpre" + (j + 1)]) {
30230
+ var tmp = chrs, k;
30231
+ if (((j + 1) - chrs.length) > 0) {
30232
+ tmp = buffer.join('').substring(0, ((j + 1) - chrs.length)) + "" + tmp;
30233
+ }
30234
+ var isValid = opts.regex["urlpre" + (j + 1)].test(tmp);
30235
+ if (!strict && !isValid) {
30236
+ pos = pos - j;
30237
+ for (k = 0; k < opts.defaultPrefix.length; k++) {
30238
+ buffer[pos] = opts.defaultPrefix[k]; pos++;
30239
+ }
30240
+ for (k = 0; k < tmp.length - 1; k++) {
30241
+ buffer[pos] = tmp[k]; pos++;
30242
+ }
30243
+ return { "pos": pos };
30244
+ }
30245
+ return isValid;
30246
+ } else {
30247
+ return false;
30248
+ }
30249
+ }, cardinality: j
30250
+ };
30251
+ })();
30252
+ }
30253
+ return result;
30254
+ })()
30255
+ },
30256
+ "r": {
30257
+ validator: ".",
30258
+ cardinality: 50
30259
+ }
30260
+ },
30261
+ insertMode: false,
30262
+ autoUnmask: false
30263
+ },
30264
+ "ip": { //ip-address mask
30265
+ mask: ["[[x]y]z.[[x]y]z.[[x]y]z.x[yz]", "[[x]y]z.[[x]y]z.[[x]y]z.[[x]y][z]"],
30266
+ definitions: {
30267
+ 'x': {
30268
+ validator: "[012]",
30269
+ cardinality: 1,
30270
+ definitionSymbol: "i"
30271
+ },
30272
+ 'y': {
30273
+ validator: function (chrs, buffer, pos, strict, opts) {
30274
+ if (pos - 1 > -1 && buffer[pos - 1] != ".")
30275
+ chrs = buffer[pos - 1] + chrs;
30276
+ else chrs = "0" + chrs;
30277
+ return new RegExp("2[0-5]|[01][0-9]").test(chrs);
30278
+ },
30279
+ cardinality: 1,
30280
+ definitionSymbol: "i"
30281
+ },
30282
+ 'z': {
30283
+ validator: function (chrs, buffer, pos, strict, opts) {
30284
+ if (pos - 1 > -1 && buffer[pos - 1] != ".") {
30285
+ chrs = buffer[pos - 1] + chrs;
30286
+ if (pos - 2 > -1 && buffer[pos - 2] != ".") {
30287
+ chrs = buffer[pos - 2] + chrs;
30288
+ } else chrs = "0" + chrs;
30289
+ } else chrs = "00" + chrs;
30290
+ return new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]").test(chrs);
30291
+ },
30292
+ cardinality: 1,
30293
+ definitionSymbol: "i"
30294
+ }
30295
+ }
30296
+ }
30297
+ });
30298
+ })(jQuery);
30299
+ });
30300
+ require.register("ened/vendor/assets/javascripts/jquery/inputmask.numeric.extensions.js", function(exports, require, module){
30301
+ /*
30302
+ Input Mask plugin extensions
30303
+ http://github.com/RobinHerbots/jquery.inputmask
30304
+ Copyright (c) 2010 - 2014 Robin Herbots
30305
+ Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
30306
+ Version: 0.0.0
30307
+
30308
+ Optional extensions on the jquery.inputmask base
30309
+ */
30310
+ (function ($) {
30311
+ //number aliases
30312
+ $.extend($.inputmask.defaults.aliases, {
30313
+ 'decimal': {
30314
+ mask: "~",
30315
+ placeholder: "",
30316
+ repeat: "*",
30317
+ greedy: false,
30318
+ numericInput: false,
30319
+ isNumeric: true,
30320
+ digits: "*", //number of fractionalDigits
30321
+ groupSeparator: "",//",", // | "."
30322
+ radixPoint: ".",
30323
+ groupSize: 3,
30324
+ autoGroup: false,
30325
+ allowPlus: true,
30326
+ allowMinus: true,
30327
+ //todo
30328
+ integerDigits: "*", //number of integerDigits
30329
+ defaultValue: "",
30330
+ prefix: "",
30331
+ suffix: "",
30332
+
30333
+ //todo
30334
+ getMaskLength: function (buffer, greedy, repeat, currentBuffer, opts) { //custom getMaskLength to take the groupSeparator into account
30335
+ var calculatedLength = buffer.length;
30336
+
30337
+ if (!greedy) {
30338
+ if (repeat == "*") {
30339
+ calculatedLength = currentBuffer.length + 1;
30340
+ } else if (repeat > 1) {
30341
+ calculatedLength += (buffer.length * (repeat - 1));
30342
+ }
30343
+ }
30344
+
30345
+ var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, opts.groupSeparator);
30346
+ var escapedRadixPoint = $.inputmask.escapeRegex.call(this, opts.radixPoint);
30347
+ var currentBufferStr = currentBuffer.join(''), strippedBufferStr = currentBufferStr.replace(new RegExp(escapedGroupSeparator, "g"), "").replace(new RegExp(escapedRadixPoint), ""),
30348
+ groupOffset = currentBufferStr.length - strippedBufferStr.length;
30349
+ return calculatedLength + groupOffset;
30350
+ },
30351
+ postFormat: function (buffer, pos, reformatOnly, opts) {
30352
+ if (opts.groupSeparator == "") return pos;
30353
+ var cbuf = buffer.slice(),
30354
+ radixPos = $.inArray(opts.radixPoint, buffer);
30355
+ if (!reformatOnly) {
30356
+ cbuf.splice(pos, 0, "?"); //set position indicator
30357
+ }
30358
+ var bufVal = cbuf.join('');
30359
+ if (opts.autoGroup || (reformatOnly && bufVal.indexOf(opts.groupSeparator) != -1)) {
30360
+ var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, opts.groupSeparator);
30361
+ bufVal = bufVal.replace(new RegExp(escapedGroupSeparator, "g"), '');
30362
+ var radixSplit = bufVal.split(opts.radixPoint);
30363
+ bufVal = radixSplit[0];
30364
+ var reg = new RegExp('([-\+]?[\\d\?]+)([\\d\?]{' + opts.groupSize + '})');
30365
+ while (reg.test(bufVal)) {
30366
+ bufVal = bufVal.replace(reg, '$1' + opts.groupSeparator + '$2');
30367
+ bufVal = bufVal.replace(opts.groupSeparator + opts.groupSeparator, opts.groupSeparator);
30368
+ }
30369
+ if (radixSplit.length > 1)
30370
+ bufVal += opts.radixPoint + radixSplit[1];
30371
+ }
30372
+ buffer.length = bufVal.length; //align the length
30373
+ for (var i = 0, l = bufVal.length; i < l; i++) {
30374
+ buffer[i] = bufVal.charAt(i);
30375
+ }
30376
+ var newPos = $.inArray("?", buffer);
30377
+ if (!reformatOnly) buffer.splice(newPos, 1);
30378
+
30379
+ return reformatOnly ? pos : newPos;
30380
+ },
30381
+ regex: {
30382
+ number: function (opts) {
30383
+ var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, opts.groupSeparator);
30384
+ var escapedRadixPoint = $.inputmask.escapeRegex.call(this, opts.radixPoint);
30385
+ var digitExpression = isNaN(opts.digits) ? opts.digits : '{0,' + opts.digits + '}';
30386
+ var signedExpression = opts.allowPlus || opts.allowMinus ? "[" + (opts.allowPlus ? "\+" : "") + (opts.allowMinus ? "-" : "") + "]?" : "";
30387
+ return new RegExp("^" + signedExpression + "(\\d+|\\d{1," + opts.groupSize + "}((" + escapedGroupSeparator + "\\d{" + opts.groupSize + "})?)+)(" + escapedRadixPoint + "\\d" + digitExpression + ")?$");
30388
+ }
30389
+ },
30390
+ onKeyDown: function (e, buffer, opts) {
30391
+ var $input = $(this), input = this;
30392
+ if (e.keyCode == opts.keyCode.TAB) {
30393
+ var radixPosition = $.inArray(opts.radixPoint, buffer);
30394
+ if (radixPosition != -1) {
30395
+ var masksets = $input.data('_inputmask')['masksets'];
30396
+ var activeMasksetIndex = $input.data('_inputmask')['activeMasksetIndex'];
30397
+ for (var i = 1; i <= opts.digits && i < opts.getMaskLength(masksets[activeMasksetIndex]["_buffer"], masksets[activeMasksetIndex]["greedy"], masksets[activeMasksetIndex]["repeat"], buffer, opts) ; i++) {
30398
+ if (buffer[radixPosition + i] == undefined || buffer[radixPosition + i] == "") buffer[radixPosition + i] = "0";
30399
+ }
30400
+ input._valueSet(buffer.join(''));
30401
+ }
30402
+ } else if (e.keyCode == opts.keyCode.DELETE || e.keyCode == opts.keyCode.BACKSPACE) {
30403
+ opts.postFormat(buffer, 0, true, opts);
30404
+ input._valueSet(buffer.join(''));
30405
+ return true;
30406
+ }
30407
+ },
30408
+ definitions: {
30409
+ '~': { //real number
30410
+ validator: function (chrs, buffer, pos, strict, opts) {
30411
+ if (chrs == "") return false;
30412
+ if (!strict && pos <= 1 && buffer[0] === '0' && new RegExp("[\\d-]").test(chrs) && buffer.join('').length == 1) { //handle first char
30413
+ buffer[0] = "";
30414
+ return { "pos": 0 };
30415
+ }
30416
+
30417
+ var cbuf = strict ? buffer.slice(0, pos) : buffer.slice();
30418
+
30419
+ cbuf.splice(pos, 0, chrs);
30420
+ var bufferStr = cbuf.join('');
30421
+
30422
+ //strip groupseparator
30423
+ var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, opts.groupSeparator);
30424
+ bufferStr = bufferStr.replace(new RegExp(escapedGroupSeparator, "g"), '');
30425
+
30426
+ var isValid = opts.regex.number(opts).test(bufferStr);
30427
+ if (!isValid) {
30428
+ //let's help the regex a bit
30429
+ bufferStr += "0";
30430
+ isValid = opts.regex.number(opts).test(bufferStr);
30431
+ if (!isValid) {
30432
+ //make a valid group
30433
+ var lastGroupSeparator = bufferStr.lastIndexOf(opts.groupSeparator);
30434
+ for (var i = bufferStr.length - lastGroupSeparator; i <= 3; i++) {
30435
+ bufferStr += "0";
30436
+ }
30437
+
30438
+ isValid = opts.regex.number(opts).test(bufferStr);
30439
+ if (!isValid && !strict) {
30440
+ if (chrs == opts.radixPoint) {
30441
+ isValid = opts.regex.number(opts).test("0" + bufferStr + "0");
30442
+ if (isValid) {
30443
+ buffer[pos] = "0";
30444
+ pos++;
30445
+ return { "pos": pos };
30446
+ }
30447
+ }
30448
+ }
30449
+ }
30450
+ }
30451
+
30452
+ if (isValid != false && !strict && chrs != opts.radixPoint) {
30453
+ var newPos = opts.postFormat(buffer, pos, false, opts);
30454
+ return { "pos": newPos };
30455
+ }
30456
+
30457
+ return isValid;
30458
+ },
30459
+ cardinality: 1,
30460
+ prevalidator: null
30461
+ }
30462
+ },
30463
+ insertMode: true,
30464
+ autoUnmask: false
30465
+ },
30466
+ 'integer': {
30467
+ regex: {
30468
+ number: function (opts) {
30469
+ var escapedGroupSeparator = $.inputmask.escapeRegex.call(this, opts.groupSeparator);
30470
+ var signedExpression = opts.allowPlus || opts.allowMinus ? "[" + (opts.allowPlus ? "\+" : "") + (opts.allowMinus ? "-" : "") + "]?" : "";
30471
+ return new RegExp("^" + signedExpression + "(\\d+|\\d{1," + opts.groupSize + "}((" + escapedGroupSeparator + "\\d{" + opts.groupSize + "})?)+)$");
30472
+ }
30473
+ },
30474
+ alias: "decimal"
30475
+ }
30476
+ });
30477
+ })(jQuery);
30478
+ =======
28142
30479
  require.register("ened/vendor/assets/javascripts/shims/es6-map-shim.js", function(exports, require, module){
28143
30480
  /**
28144
30481
  * Copyright 2012 Eric Wendelin - MIT License
@@ -28396,6 +30733,7 @@ require.register("ened/vendor/assets/javascripts/shims/es6-map-shim.js", functio
28396
30733
  window.Map = module.Map = window.Map || Map;
28397
30734
  }.call(this, window));
28398
30735
 
30736
+ >>>>>>> master
28399
30737
  });
28400
30738
  require.alias("mikeric-rivets/dist/rivets.js", "ened/deps/rivets/dist/rivets.js");
28401
30739
  require.alias("mikeric-rivets/dist/rivets.js", "ened/deps/rivets/index.js");
@@ -28448,6 +30786,7 @@ require.alias("indefinido-indemma/lib/record/restfulable.js", "ened/deps/indemma
28448
30786
  require.alias("indefinido-indemma/lib/record/scopable.js", "ened/deps/indemma/lib/record/scopable.js");
28449
30787
  require.alias("indefinido-indemma/lib/record/maid.js", "ened/deps/indemma/lib/record/maid.js");
28450
30788
  require.alias("indefinido-indemma/lib/record/translationable.js", "ened/deps/indemma/lib/record/translationable.js");
30789
+ require.alias("indefinido-indemma/lib/record/validations/validatorable.js", "ened/deps/indemma/lib/record/validations/validatorable.js");
28451
30790
  require.alias("indefinido-indemma/lib/record/validations/confirmation.js", "ened/deps/indemma/lib/record/validations/confirmation.js");
28452
30791
  require.alias("indefinido-indemma/lib/record/validations/associated.js", "ened/deps/indemma/lib/record/validations/associated.js");
28453
30792
  require.alias("indefinido-indemma/lib/record/validations/presence.js", "ened/deps/indemma/lib/record/validations/presence.js");