webshims-rails 1.10.3 → 1.10.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +8 -8
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +96 -73
  4. data/vendor/assets/javascripts/webshims/shims/color-picker.js +2415 -0
  5. data/vendor/assets/javascripts/webshims/shims/combos/1.js +248 -745
  6. data/vendor/assets/javascripts/webshims/shims/combos/10.js +771 -1206
  7. data/vendor/assets/javascripts/webshims/shims/combos/11.js +679 -1201
  8. data/vendor/assets/javascripts/webshims/shims/combos/12.js +46 -65
  9. data/vendor/assets/javascripts/webshims/shims/combos/13.js +45 -64
  10. data/vendor/assets/javascripts/webshims/shims/combos/14.js +94 -7
  11. data/vendor/assets/javascripts/webshims/shims/combos/15.js +557 -1189
  12. data/vendor/assets/javascripts/webshims/shims/combos/16.js +598 -1249
  13. data/vendor/assets/javascripts/webshims/shims/combos/17.js +697 -1208
  14. data/vendor/assets/javascripts/webshims/shims/combos/18.js +697 -1208
  15. data/vendor/assets/javascripts/webshims/shims/combos/19.js +145 -78
  16. data/vendor/assets/javascripts/webshims/shims/combos/2.js +472 -1280
  17. data/vendor/assets/javascripts/webshims/shims/combos/20.js +144 -77
  18. data/vendor/assets/javascripts/webshims/shims/combos/21.js +14 -15
  19. data/vendor/assets/javascripts/webshims/shims/combos/22.js +2 -2
  20. data/vendor/assets/javascripts/webshims/shims/combos/23.js +45 -64
  21. data/vendor/assets/javascripts/webshims/shims/combos/24.js +848 -0
  22. data/vendor/assets/javascripts/webshims/shims/combos/25.js +4373 -0
  23. data/vendor/assets/javascripts/webshims/shims/combos/26.js +1516 -0
  24. data/vendor/assets/javascripts/webshims/shims/combos/27.js +884 -0
  25. data/vendor/assets/javascripts/webshims/shims/combos/28.js +2067 -0
  26. data/vendor/assets/javascripts/webshims/shims/combos/29.js +1156 -0
  27. data/vendor/assets/javascripts/webshims/shims/combos/3.js +313 -700
  28. data/vendor/assets/javascripts/webshims/shims/combos/30.js +1868 -0
  29. data/vendor/assets/javascripts/webshims/shims/combos/31.js +1663 -0
  30. data/vendor/assets/javascripts/webshims/shims/combos/4.js +111 -20
  31. data/vendor/assets/javascripts/webshims/shims/combos/5.js +747 -1321
  32. data/vendor/assets/javascripts/webshims/shims/combos/6.js +837 -1809
  33. data/vendor/assets/javascripts/webshims/shims/combos/7.js +435 -1239
  34. data/vendor/assets/javascripts/webshims/shims/combos/8.js +360 -766
  35. data/vendor/assets/javascripts/webshims/shims/combos/9.js +843 -1676
  36. data/vendor/assets/javascripts/webshims/shims/details.js +1 -1
  37. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +90 -3
  38. data/vendor/assets/javascripts/webshims/shims/filereader.js +386 -0
  39. data/vendor/assets/javascripts/webshims/shims/form-core.js +201 -680
  40. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +418 -0
  41. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +69 -467
  42. data/vendor/assets/javascripts/webshims/shims/form-message.js +21 -17
  43. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +19 -82
  44. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +17 -6
  45. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +570 -1185
  46. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +181 -28
  47. data/vendor/assets/javascripts/webshims/shims/form-validation.js +599 -0
  48. data/vendor/assets/javascripts/webshims/{extras/custom-validity.js → shims/form-validators.js} +33 -38
  49. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +865 -0
  50. data/vendor/assets/javascripts/webshims/shims/geolocation.js +2 -2
  51. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-de.txt +37 -34
  52. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-en.txt +88 -48
  53. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-lt.js +74 -0
  54. data/vendor/assets/javascripts/webshims/shims/jpicker/ChangeLog.txt +121 -0
  55. data/vendor/assets/javascripts/webshims/shims/jpicker/ReadMe.txt +47 -0
  56. data/vendor/assets/javascripts/webshims/shims/jpicker/images/AlphaBar.png +0 -0
  57. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Bars.png +0 -0
  58. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Maps.png +0 -0
  59. data/vendor/assets/javascripts/webshims/shims/jpicker/images/NoColor.png +0 -0
  60. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Thumbs.db +0 -0
  61. data/vendor/assets/javascripts/webshims/shims/jpicker/images/bar-opacity.png +0 -0
  62. data/vendor/assets/javascripts/webshims/shims/jpicker/images/map-opacity.png +0 -0
  63. data/vendor/assets/javascripts/webshims/shims/jpicker/images/mappoint.gif +0 -0
  64. data/vendor/assets/javascripts/webshims/shims/jpicker/images/picker.gif +0 -0
  65. data/vendor/assets/javascripts/webshims/shims/jpicker/images/preview-opacity.png +0 -0
  66. data/vendor/assets/javascripts/webshims/shims/jpicker/images/rangearrows.gif +0 -0
  67. data/vendor/assets/javascripts/webshims/shims/jpicker/jpicker.css +257 -0
  68. data/vendor/assets/javascripts/webshims/shims/json-storage.js +4 -4
  69. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +44 -63
  70. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +10 -11
  71. data/vendor/assets/javascripts/webshims/shims/mediaelement-native-fix.js +2 -1
  72. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +5 -3
  73. data/vendor/assets/javascripts/webshims/shims/range-ui.js +110 -17
  74. data/vendor/assets/javascripts/webshims/shims/styles/forms.png +0 -0
  75. data/vendor/assets/javascripts/webshims/shims/styles/range-track.png +0 -0
  76. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +104 -21
  77. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +90 -16
  78. data/vendor/assets/javascripts/webshims/shims/styles/vertical-range.png +0 -0
  79. data/vendor/assets/javascripts/webshims/shims/swf/filereader.swf +0 -0
  80. data/vendor/assets/javascripts/webshims/shims/swfmini.js +1 -1
  81. data/vendor/assets/javascripts/webshims/shims/track-ui.js +35 -3
  82. data/vendor/assets/javascripts/webshims/shims/track.js +1 -1
  83. metadata +33 -3
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NGRiMmNkODMyYmQ5YTVkYjRkZmFmNzAxMjRmMzE0YzVlYmIzYzhjZg==
4
+ ZjdlMzZkNjM4YTFjNWVmNWZiNmQ1ZWQ4M2YyOGIyYTljMzMwZjU2Mg==
5
5
  data.tar.gz: !binary |-
6
- ZGNkYWRmOGM5YjU0OGI0M2QwNjhjNTdlMmQ2NmU0NzE1OTQ2ZmM3Yw==
6
+ OWIxZDJmNjQ0ZTcyYzY5Mjg0NWQxZjg1NGVkOTY1Yzg0ODM4ZmQwMQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- Y2M0MzZmYTA3MmU0YzBlYmY3YmUwZDVjZWMwODY1Mjk4N2Q1MWI5NmY0MjMx
10
- YzQ2N2E2MTQ0NGZlZGYxNWI4YzlhNDE2ZDIyMzdiMTNlNzQ1ZTVkYTU2NDM0
11
- ZmU4YmNhODg4OTBhYTE3YzdlM2RjMDFmNDNhOGVjOTllMjRhMGQ=
9
+ MGQ4ZjgyMjJhNjNkNzg2ZDk4ZmRhYTg1YmQ4ZmUzYWYxZTI4YmNmYmVlNzQz
10
+ MTgxZjI3MDRiNWJmNjk1NjhjYWRiOWI2YzNjMTg2ZjQ3ODdiNWNlMjNlMmRh
11
+ M2IyYzNlZTQ2MWZmZDlmNzc5N2M1NWYwZWJkYzVmMWY4YWFlM2I=
12
12
  data.tar.gz: !binary |-
13
- YzMwZDVlNjgwMGY3ZGNmMjZkNzI3NzQwNzJmOWVkZWZmNDU1YzAxMWIwYzU2
14
- YzE5MzQ2YzYwY2M0OGVlOGNkYmExOGVkNTk3ZGJjMTgyZjA2Y2EwNWJlNTA3
15
- OTA5MWU3NTgzMWExZWU4MzdmMDFmZGJhYjFjZDA5MzRkYjEzNDI=
13
+ NGRmZGY2ZGI2YTk3ZTY5ZjlhYWExMDU2MzVhMGVkOTlkZTExNTY4MmVhM2Yy
14
+ YzVkYmMwMTI4ZjY2MTc1MDBmMDE2ZTg4NzRiNTM4ZDVlYTAzZDMxYzczYzM2
15
+ NTFhOTllMjQ4Yjc2MDk4ZDAwMDg4ZjM5ZmFiNmI4Y2NjYjJhMDI=
@@ -1,6 +1,6 @@
1
1
  module Webshims
2
2
  module Rails
3
- VERSION = "1.10.3"
4
- WEBSHIMS_VERSION = "1.10.3"
3
+ VERSION = "1.10.6"
4
+ WEBSHIMS_VERSION = "1.10.6"
5
5
  end
6
6
  end
@@ -21,12 +21,16 @@
21
21
 
22
22
  Modernizr.advancedObjectProperties = Modernizr.objectAccessor = Modernizr.ES5 = !!('create' in Object && 'seal' in Object);
23
23
 
24
+ if(Modernizr.ES5 && !('toJSON' in Date.prototype)){
25
+ Modernizr.ES5 = false;
26
+ }
27
+
24
28
  if(!$.event.customEvent){
25
29
  $.event.customEvent = {};
26
30
  }
27
31
 
28
32
  var webshims = {
29
- version: '1.10.3',
33
+ version: '1.10.6',
30
34
  cfg: {
31
35
  useImportantStyles: true,
32
36
  //addCacheBuster: false,
@@ -63,7 +67,6 @@
63
67
  var feature = cfg.f || name;
64
68
  if (!webshimsFeatures[feature]) {
65
69
  webshimsFeatures[feature] = [];
66
- webshimsFeatures[feature].delayReady = 0;
67
70
  webshims.featureList.push(feature);
68
71
  webCFG[feature] = {};
69
72
  }
@@ -95,22 +98,19 @@
95
98
  },
96
99
  polyfill: (function(){
97
100
  var loaded = {};
98
- var called;
99
101
  return function(features){
100
102
  if(!features){
101
103
  features = webshims.featureList;
104
+ webshims.info('loading all features without specifing might be bad for performance');
102
105
  }
103
106
 
104
107
  if (typeof features == 'string') {
105
108
  features = features.split(' ');
106
109
  }
107
- if(called){
108
- webshims.warn('polyfill already called, you might want to use updatePolyfill instead? see: bit.ly/12BtXX3. polyfill should be called only once.');
109
- }
110
- called = true;
110
+
111
111
  for(var i = 0; i < features.length; i++){
112
- if(features[i] in loaded){
113
- webshims.warn(features[i] +' already loaded, you might want to use updatePolyfill instead? see: bit.ly/12BtXX3');
112
+ if(loaded[features[i]]){
113
+ webshims.error(features[i] +' already loaded, you might want to use updatePolyfill instead? see: bit.ly/12BtXX3');
114
114
  }
115
115
  loaded[features[i]] = true;
116
116
  }
@@ -203,7 +203,6 @@
203
203
  */
204
204
  reTest: (function(){
205
205
  var resList;
206
- var noDelayReady;
207
206
  var reTest = function(i, name){
208
207
  var module = modules[name];
209
208
  var readyName = name+'Ready';
@@ -213,18 +212,11 @@
213
212
  delete special[readyName];
214
213
  }
215
214
  feature = webshimsFeatures[module.f];
216
- if(feature && !noDelayReady){
217
- feature.delayReady++;
218
- onReady(name, function(){
219
- feature.delayReady--;
220
- isReady(module.f, feature.callReady);
221
- });
222
- }
215
+
223
216
  resList.push(name);
224
217
  }
225
218
  };
226
- return function(moduleNames, _noDelay){
227
- noDelayReady = _noDelay;
219
+ return function(moduleNames){
228
220
  if(typeof moduleNames == 'string'){
229
221
  moduleNames = moduleNames.split(' ');
230
222
  }
@@ -234,12 +226,7 @@
234
226
  };
235
227
  })(),
236
228
  isReady: function(name, _set){
237
- if(webshimsFeatures[name] && webshimsFeatures[name].delayReady > 0){
238
- if(_set){
239
- webshimsFeatures[name].callReady = true;
240
- }
241
- return false;
242
- }
229
+
243
230
  name = name + 'Ready';
244
231
  if (_set) {
245
232
  if (special[name] && special[name].add) {
@@ -630,10 +617,14 @@
630
617
  };
631
618
  })();
632
619
 
620
+ webshims.errorLog = [];
633
621
  $.each(['log', 'error', 'warn', 'info'], function(i, fn){
634
622
  webshims[fn] = function(message){
635
- if(( (importantLogs[fn] && webshims.debug !== false) || webshims.debug) && window.console && console.log){
636
- return console[(console[fn]) ? fn : 'log'](message);
623
+ if( (importantLogs[fn] && webshims.debug !== false) || webshims.debug){
624
+ webshims.errorLog.push(message);
625
+ if(window.console && console.log){
626
+ console[(console[fn]) ? fn : 'log'](message);
627
+ }
637
628
  }
638
629
  };
639
630
  });
@@ -666,7 +657,9 @@
666
657
 
667
658
  $(window).load(function(){
668
659
  onReady();
669
- isReady('WINDOWLOAD', true);
660
+ setTimeout(function(){
661
+ isReady('WINDOWLOAD', true);
662
+ }, 9);
670
663
  });
671
664
  })();
672
665
 
@@ -686,6 +679,11 @@
686
679
 
687
680
  (function(){
688
681
  var readyFns = [];
682
+ var eachTrigger = function(){
683
+ if(this.nodeType == 1){
684
+ webshims.triggerDomUpdate(this);
685
+ }
686
+ };
689
687
  $.extend(webshims, {
690
688
  addReady: function(fn){
691
689
  var readyFn = function(context, elem){
@@ -715,11 +713,7 @@
715
713
  $.fn.htmlPolyfill = function(a){
716
714
  var ret = $.fn.html.call(this, a);
717
715
  if(ret === this && $.isDOMReady){
718
- this.each(function(){
719
- if(this.nodeType == 1){
720
- webshims.triggerDomUpdate(this);
721
- }
722
- });
716
+ this.each(eachTrigger);
723
717
  }
724
718
  return ret;
725
719
  };
@@ -733,11 +727,7 @@
733
727
  a = $(a);
734
728
  $.fn[name].call(this, a);
735
729
  if($.isDOMReady){
736
- a.each(function(){
737
- if (this.nodeType == 1) {
738
- webshims.triggerDomUpdate(this);
739
- }
740
- });
730
+ a.each(eachTrigger);
741
731
  }
742
732
  return this;
743
733
  };
@@ -839,7 +829,7 @@
839
829
  }
840
830
  return ('swfmini' in window);
841
831
  },
842
- c: [16, 7, 2, 8, 1, 12, 19, 23]
832
+ c: [16, 7, 2, 8, 1, 12, 19, 25, 23, 27]
843
833
  });
844
834
  modules.swfmini.test();
845
835
 
@@ -850,14 +840,14 @@
850
840
  // webshims lib uses a of http://github.com/kriskowal/es5-shim/ to implement
851
841
  addPolyfill('es5', {
852
842
  test: !!(Modernizr.ES5 && Function.prototype.bind),
853
- c: [14, 18, 19, 20]
843
+ c: [14, 18, 19, 25, 20]
854
844
  });
855
845
 
856
846
  addPolyfill('dom-extend', {
857
847
  f: DOMSUPPORT,
858
848
  noAutoCallback: true,
859
849
  d: ['es5'],
860
- c: [16, 7, 2, 15, 3, 8, 4, 9, 10, 14, 19, 20]
850
+ c: [16, 7, 2, 15, 30, 3, 8, 4, 9, 10, 14, 25, 19, 20, 26, 28, 31]
861
851
  });
862
852
 
863
853
 
@@ -948,38 +938,47 @@
948
938
 
949
939
  //<forms
950
940
  (function(){
941
+ var formExtend, formOptions, formExtras;
951
942
  var modernizrInputAttrs = Modernizr.input;
952
943
  var modernizrInputTypes = Modernizr.inputtypes;
953
944
  var formvalidation = 'formvalidation';
945
+ var fNuAPI = 'form-number-date-api';
954
946
  var select = $('<select required="" name="a"><option disabled="" /></select>')[0];
955
947
  var bustedValidity = false;
956
- var formExtend, formOptions;
957
948
 
958
949
  var initialFormTest = function(){
959
950
  if(!initialFormTest.run){
960
951
  addTest(formvalidation, function(){
961
952
  return !!(modernizrInputAttrs.required && modernizrInputAttrs.pattern);
962
953
  });
954
+
963
955
  addTest('fieldsetdisabled', function(){
964
956
  var fieldset = $('<fieldset />')[0];
965
957
  return 'elements' in fieldset && 'disabled' in fieldset;
966
958
  });
967
959
 
960
+ if(modernizrInputTypes){
961
+ addTest('styleableinputrange', function(){
962
+ return modernizrInputTypes.range && !window.opera;
963
+ });
964
+ }
965
+
968
966
  if(Modernizr[formvalidation]){
969
- bugs.bustedValidity = bustedValidity = Modernizr.formattribute === false || !Modernizr.fieldsetdisabled || !('value' in document.createElement('progress')) || !('value' in document.createElement('output')) || !($('<input type="date" value="1488-12-11" />')[0].validity || {valid: true}).valid || !('required' in select) || (select.validity || {}).valid;
967
+ bugs.bustedValidity = bustedValidity = !modernizrInputAttrs.list || window.opera || Modernizr.formattribute === false || !Modernizr.fieldsetdisabled || !('value' in document.createElement('progress')) || !('value' in document.createElement('output')) || !($('<input type="date" value="1488-12-11" />')[0].validity || {valid: true}).valid || !('required' in select) || (select.validity || {}).valid;
970
968
  }
971
969
 
972
970
  formExtend = Modernizr[formvalidation] && !bustedValidity ? 'form-native-extend' : 'form-shim-extend';
973
971
 
974
- addTest('styleableinputrange', function(){
975
- return modernizrInputTypes.range && !window.opera;
976
- });
977
972
  }
978
973
  initialFormTest.run = true;
979
974
  return false;
980
975
  };
981
976
 
982
-
977
+ if(modernizrInputAttrs && modernizrInputTypes){
978
+ initialFormTest();
979
+ }
980
+ document.createElement('datalist');
981
+
983
982
  webshims.formcfg = [];
984
983
  webshims.validationMessages = webshims.validityMessages = [];
985
984
  webshims.inputTypes = {};
@@ -995,13 +994,21 @@
995
994
  datalistPopover: {
996
995
  constrainWidth: true
997
996
  },
998
- availabeLangs: ['ar', 'ch-ZN', 'el', 'es', 'fr', 'he', 'hi', 'hu', 'it', 'ja', 'nl', 'pt-PT', 'ru', 'sv'] //en and de are directly implemented in core
997
+ iVal: {
998
+ handleBubble: true,
999
+ sel: '.ws-instantvalidation',
1000
+ recheckDelay: 400
1001
+ // ,hideBubble: undefined,
1002
+ // ,fieldWrapper: undefined
1003
+ // ,fx: 'slide'
1004
+ },
1005
+ availabeLangs: ['ar', 'ch-ZN', 'el', 'es', 'fr', 'he', 'hi', 'hu', 'it', 'ja', 'lt', 'nl', 'pt-PT', 'ru', 'sv'] //en and de are directly implemented in core
999
1006
  // ,customMessages: false,
1000
- // overrideMessages: false,
1007
+ // overridePlaceholder: false, // might be good for IE10
1001
1008
  // replaceValidationUI: false
1002
1009
  },
1003
1010
  methodNames: ['setCustomValidity','checkValidity'],
1004
- c: [16, 7, 2, 8, 1, 15, 3],
1011
+ c: [16, 7, 2, 8, 1, 15, 30, 3, 31],
1005
1012
  nM: 'input'
1006
1013
  });
1007
1014
 
@@ -1010,8 +1017,7 @@
1010
1017
  addPolyfill('form-native-extend', {
1011
1018
  f: 'forms',
1012
1019
  test: function(toLoad){
1013
- initialFormTest();
1014
- return (!Modernizr[formvalidation] || bustedValidity) || ((modules['form-number-date-api'].test() || $.inArray('form-number-date-api', toLoad || []) == -1) && !formOptions.overrideMessages );
1020
+ return !Modernizr[formvalidation] || bustedValidity || $.inArray(fNuAPI, toLoad || []) == -1 || modules[fNuAPI].test();
1015
1021
  },
1016
1022
  d: ['form-core', DOMSUPPORT, 'form-message'],
1017
1023
  c: [6, 5]
@@ -1020,7 +1026,6 @@
1020
1026
  addPolyfill('form-shim-extend', {
1021
1027
  f: 'forms',
1022
1028
  test: function(){
1023
- initialFormTest();
1024
1029
  return Modernizr[formvalidation] && !bustedValidity;
1025
1030
  },
1026
1031
  d: ['form-core', DOMSUPPORT],
@@ -1030,29 +1035,36 @@
1030
1035
  addPolyfill('form-message', {
1031
1036
  f: 'forms',
1032
1037
  test: function(toLoad){
1033
- initialFormTest();
1034
- return !( formOptions.customMessages || !Modernizr[formvalidation] || bugs.validationMessage || bustedValidity || !modules[formExtend].test(toLoad) );
1038
+ return !( formOptions.customMessages || !Modernizr[formvalidation] || bustedValidity || !modules[formExtend].test(toLoad) );
1035
1039
  },
1036
1040
  d: [DOMSUPPORT],
1037
- c: [16, 7, 15, 3, 8, 4]
1041
+ c: [16, 7, 15, 30, 3, 8, 4]
1038
1042
  });
1039
1043
 
1040
- addPolyfill('form-number-date-api', {
1044
+ formExtras = {
1045
+ noAutoCallback: true,
1046
+ options: formOptions,
1047
+ c: [24]
1048
+ };
1049
+ addModule('form-validation', $.extend({d: ['form-message']}, formExtras));
1050
+
1051
+ addModule('form-validators', $.extend({}, formExtras));
1052
+
1053
+ addPolyfill(fNuAPI, {
1041
1054
  f: 'forms-ext',
1042
1055
  options: {
1043
1056
  types: 'range date time number month'
1044
1057
  },
1045
- test: function(toLoad){
1058
+ test: function(){
1046
1059
  var ret = true;
1047
- var types = this.options.types;
1048
- if(typeof types != 'string'){
1049
- webshims.warn("types should be a whitespace seperated string");
1050
- } else {
1051
- types = types.split(' ');
1060
+ var o = this.options;
1061
+ if(!o._types){
1062
+ o._types = o.types.split(' ');
1052
1063
  }
1064
+
1053
1065
  initialFormTest();
1054
- $.each(types, function(i, name){
1055
- if(!modernizrInputTypes[name]){
1066
+ $.each(o._types, function(i, name){
1067
+ if((name in modernizrInputTypes) && !modernizrInputTypes[name]){
1056
1068
  ret = false;
1057
1069
  return false;
1058
1070
  }
@@ -1065,7 +1077,7 @@
1065
1077
  nM: 'input inputtypes'
1066
1078
  });
1067
1079
 
1068
- $.webshims.loader.addModule('range-ui', {
1080
+ addModule('range-ui', {
1069
1081
  options: {},
1070
1082
  noAutoCallback: true,
1071
1083
  test: function(){
@@ -1079,9 +1091,9 @@
1079
1091
  f: 'forms-ext',
1080
1092
  test: function(){
1081
1093
  initialFormTest();
1082
- return !this.options.replaceUI && modules['form-number-date-api'].test();
1094
+ return !this.options.replaceUI && modules[fNuAPI].test();
1083
1095
  },
1084
- d: ['forms', DOMSUPPORT, 'form-number-date-api', 'range-ui'],
1096
+ d: ['forms', DOMSUPPORT, fNuAPI, 'range-ui'],
1085
1097
  options: {
1086
1098
 
1087
1099
  widgets: {
@@ -1101,11 +1113,18 @@
1101
1113
  return modernizrInputAttrs.list && !formOptions.customDatalist;
1102
1114
  },
1103
1115
  d: ['form-core', DOMSUPPORT],
1104
- c: [16, 7, 6, 2, 9, 15]
1116
+ c: [16, 7, 6, 2, 9, 15, 30, 31]
1105
1117
  });
1106
1118
  })();
1107
1119
  //>
1108
1120
 
1121
+ addPolyfill('filereader', {
1122
+ test: 'FileReader' in window,
1123
+ d: ['swfmini', DOMSUPPORT],
1124
+ c: [25, 26, 27]
1125
+ // ,nM: 'filereader'
1126
+ });
1127
+
1109
1128
  //<details
1110
1129
  if(!('details' in Modernizr)){
1111
1130
  addTest('details', function(){
@@ -1140,7 +1159,7 @@
1140
1159
  },
1141
1160
  methodNames: ['play', 'pause', 'canPlayType', 'mediaLoad:load'],
1142
1161
  d: ['swfmini'],
1143
- c: [16, 7, 2, 8, 1, 12, 13, 19, 20, 23],
1162
+ c: [16, 7, 2, 8, 1, 12, 13, 19, 25, 20, 23],
1144
1163
  nM: 'audio video texttrackapi'
1145
1164
  });
1146
1165
 
@@ -1159,7 +1178,7 @@
1159
1178
  }
1160
1179
  return !( options.preferFlash && window.swfmini.hasFlashPlayerVersion('9.0.115') );
1161
1180
  },
1162
- c: [21, 19, 20]
1181
+ c: [21, 19, 25, 20, 28]
1163
1182
  });
1164
1183
 
1165
1184
  bugs.track = (Modernizr.track && (!Modernizr.texttrackapi || typeof (document.createElement('track').track || {}).mode != 'string'));
@@ -1174,12 +1193,13 @@
1174
1193
  },
1175
1194
  d: ['mediaelement', DOMSUPPORT],
1176
1195
  methodNames: ['addTextTrack'],
1177
- c: [21, 12, 13, 22],
1196
+ c: [21, 12, 13, 22, 29],
1178
1197
  nM: 'texttrackapi'
1179
1198
  });
1180
1199
 
1181
1200
  addModule('track-ui', {
1182
- d: ['track']
1201
+ d: ['track', DOMSUPPORT],
1202
+ c: [29]
1183
1203
  });
1184
1204
  })();
1185
1205
  //>
@@ -1192,6 +1212,9 @@
1192
1212
  c: removeCombos
1193
1213
  });
1194
1214
 
1215
+ webshims.$ = $;
1216
+ webshims.M = Modernizr;
1217
+ window.webshims = webshims;
1195
1218
 
1196
1219
  jScripts
1197
1220
  .filter('[data-polyfill-cfg]')
@@ -0,0 +1,2415 @@
1
+ /**
2
+ * jPicker 1.1.6 modified for webshims
3
+ *
4
+ * jQuery Plugin for Photoshop style color picker
5
+ *
6
+ * Copyright (c) 2010 Christopher T. Tillman
7
+ * Digital Magic Productions, Inc. (http://www.digitalmagicpro.com/)
8
+ * MIT style license, FREE to use, alter, copy, sell, and especially ENHANCE
9
+ *
10
+ * Painstakingly ported from John Dyers' excellent work on his own color picker based on the Prototype framework.
11
+ *
12
+ * John Dyers' website: (http://johndyer.name)
13
+ * Color Picker page: (http://johndyer.name/post/2007/09/PhotoShop-like-JavaScript-Color-Picker.aspx)
14
+ *
15
+ */
16
+ (function ($, version) {
17
+ "use strict";
18
+ if(!window.Modernizr || !('opacity' in Modernizr) || !('csstransitions' in Modernizr)){
19
+ $('html').addClass(('opacity' in document.documentElement.style) ? 'opacity' : 'no-opacity');
20
+ }
21
+ var mPrecision = function (value, precision) {
22
+ if (precision === undefined) precision = 0;
23
+ return Math.round(value * Math.pow(10, precision)) / Math.pow(10, precision);
24
+ };
25
+ var elemExtend = function (deep, elem, data) {
26
+ var ex = elem;
27
+ if (elem.nodeType) {
28
+ ex = $.data(elem, 'wsjPicker') || $.data(elem, 'wsjPicker', {});
29
+ }
30
+ if(deep){
31
+ $.extend(true, ex, data);
32
+ } else {
33
+ $.extend(ex, data);
34
+ }
35
+ };
36
+ var Slider = // encapsulate slider functionality for the ColorMap and ColorBar - could be useful to use a jQuery UI draggable for this with certain extensions
37
+
38
+ function (bar, options) {
39
+ var $this = this, // private properties, methods, and events - keep these variables and classes invisible to outside code
40
+ arrow = bar.find('img').eq(0), // the arrow image to drag
41
+ minX = 0,
42
+ maxX = 100,
43
+ rangeX = 100,
44
+ minY = 0,
45
+ maxY = 100,
46
+ rangeY = 100,
47
+ x = 0,
48
+ y = 0,
49
+ offset,
50
+ timeout,
51
+ changeEvents = new Array(),
52
+ fireChangeEvents = function (context) {
53
+ for (var i = 0; i < changeEvents.length; i++) changeEvents[i].call($this, $this, context);
54
+ },
55
+ mouseDown = // bind the mousedown to the bar not the arrow for quick snapping to the clicked location
56
+
57
+ function (e) {
58
+ var off = bar.offset();
59
+ offset = {
60
+ l: off.left | 0,
61
+ t: off.top | 0
62
+ };
63
+ clearTimeout(timeout);
64
+ timeout = setTimeout( // using setTimeout for visual updates - once the style is updated the browser will re-render internally allowing the next Javascript to run
65
+
66
+ function () {
67
+ setValuesFromMousePosition.call($this, e);
68
+ }, 0);
69
+ // Bind mousemove and mouseup event to the document so it responds when dragged of of the bar - we will unbind these when on mouseup to save processing
70
+ $(document).bind('mousemove', mouseMove).bind('mouseup', mouseUp);
71
+ e.preventDefault(); // don't try to select anything or drag the image to the desktop
72
+ },
73
+ mouseMove = // set the values as the mouse moves
74
+
75
+ function (e) {
76
+ clearTimeout(timeout);
77
+ timeout = setTimeout(function () {
78
+ setValuesFromMousePosition.call($this, e);
79
+ }, 0);
80
+ e.stopPropagation();
81
+ e.preventDefault();
82
+ return false;
83
+ },
84
+ mouseUp = // unbind the document events - they aren't needed when not dragging
85
+
86
+ function (e) {
87
+ $(document).unbind('mouseup', mouseUp).unbind('mousemove', mouseMove);
88
+ e.stopPropagation();
89
+ e.preventDefault();
90
+ return false;
91
+ },
92
+ setValuesFromMousePosition = // calculate mouse position and set value within the current range
93
+
94
+ function (e) {
95
+ var locX = e.pageX - offset.l,
96
+ locY = e.pageY - offset.t,
97
+ barW = bar.w, // local copies for YUI compressor
98
+ barH = bar.h;
99
+ // keep the arrow within the bounds of the bar
100
+ if (locX < 0) locX = 0;
101
+ else if (locX > barW) locX = barW;
102
+ if (locY < 0) locY = 0;
103
+ else if (locY > barH) locY = barH;
104
+ val.call($this, 'xy', {
105
+ x: ((locX / barW) * rangeX) + minX,
106
+ y: ((locY / barH) * rangeY) + minY
107
+ });
108
+ },
109
+ drawTimeout,
110
+ draw = function () {
111
+ var arrowOffsetX = 0,
112
+ arrowOffsetY = 0,
113
+ barW = bar.w,
114
+ barH = bar.h,
115
+ arrowW = arrow.w,
116
+ arrowH = arrow.h;
117
+ clearTimeout(drawTimeout);
118
+ drawTimeout = setTimeout(function () {
119
+ if (rangeX > 0) // range is greater than zero
120
+ {
121
+ // constrain to bounds
122
+ if (x == maxX) arrowOffsetX = barW;
123
+ else arrowOffsetX = ((x / rangeX) * barW) | 0;
124
+ }
125
+ if (rangeY > 0) // range is greater than zero
126
+ {
127
+ // constrain to bounds
128
+ if (y == maxY) arrowOffsetY = barH;
129
+ else arrowOffsetY = ((y / rangeY) * barH) | 0;
130
+ }
131
+ // if arrow width is greater than bar width, center arrow and prevent horizontal dragging
132
+ if (arrowW >= barW) arrowOffsetX = (barW >> 1) - (arrowW >> 1); // number >> 1 - superfast bitwise divide by two and truncate (move bits over one bit discarding lowest)
133
+ else arrowOffsetX -= arrowW >> 1;
134
+ // if arrow height is greater than bar height, center arrow and prevent vertical dragging
135
+ if (arrowH >= barH) arrowOffsetY = (barH >> 1) - (arrowH >> 1);
136
+ else arrowOffsetY -= arrowH >> 1;
137
+ // set the arrow position based on these offsets
138
+ arrow.css({
139
+ left: arrowOffsetX + 'px',
140
+ top: arrowOffsetY + 'px'
141
+ });
142
+ }, 0);
143
+ },
144
+ val = function (name, value, context) {
145
+ var set = value !== undefined;
146
+ if (!set) {
147
+ if (name === undefined || name == null) name = 'xy';
148
+ switch (name.toLowerCase()) {
149
+ case 'x':
150
+ return x;
151
+ case 'y':
152
+ return y;
153
+ case 'xy':
154
+ default:
155
+ return {
156
+ x: x,
157
+ y: y
158
+ };
159
+ }
160
+ }
161
+ if (context != null && context == $this) return;
162
+ var changed = false,
163
+ newX,
164
+ newY;
165
+ if (name == null) name = 'xy';
166
+ switch (name.toLowerCase()) {
167
+ case 'x':
168
+ newX = value && (value.x && value.x | 0 || value | 0) || 0;
169
+ break;
170
+ case 'y':
171
+ newY = value && (value.y && value.y | 0 || value | 0) || 0;
172
+ break;
173
+ case 'xy':
174
+ default:
175
+ newX = value && value.x && value.x | 0 || 0;
176
+ newY = value && value.y && value.y | 0 || 0;
177
+ break;
178
+ }
179
+ if (newX != null) {
180
+ if (newX < minX) newX = minX;
181
+ else if (newX > maxX) newX = maxX;
182
+ if (x != newX) {
183
+ x = newX;
184
+ changed = true;
185
+ }
186
+ }
187
+ if (newY != null) {
188
+ if (newY < minY) newY = minY;
189
+ else if (newY > maxY) newY = maxY;
190
+ if (y != newY) {
191
+ y = newY;
192
+ changed = true;
193
+ }
194
+ }
195
+ changed && fireChangeEvents.call($this, context || $this);
196
+ },
197
+ range = function (name, value) {
198
+ var set = value !== undefined;
199
+ if (!set) {
200
+ if (name === undefined || name == null) name = 'all';
201
+ switch (name.toLowerCase()) {
202
+ case 'minx':
203
+ return minX;
204
+ case 'maxx':
205
+ return maxX;
206
+ case 'rangex':
207
+ return {
208
+ minX: minX,
209
+ maxX: maxX,
210
+ rangeX: rangeX
211
+ };
212
+ case 'miny':
213
+ return minY;
214
+ case 'maxy':
215
+ return maxY;
216
+ case 'rangey':
217
+ return {
218
+ minY: minY,
219
+ maxY: maxY,
220
+ rangeY: rangeY
221
+ };
222
+ case 'all':
223
+ default:
224
+ return {
225
+ minX: minX,
226
+ maxX: maxX,
227
+ rangeX: rangeX,
228
+ minY: minY,
229
+ maxY: maxY,
230
+ rangeY: rangeY
231
+ };
232
+ }
233
+ }
234
+ var changed = false,
235
+ newMinX,
236
+ newMaxX,
237
+ newMinY,
238
+ newMaxY;
239
+ if (name == null) name = 'all';
240
+ switch (name.toLowerCase()) {
241
+ case 'minx':
242
+ newMinX = value && (value.minX && value.minX | 0 || value | 0) || 0;
243
+ break;
244
+ case 'maxx':
245
+ newMaxX = value && (value.maxX && value.maxX | 0 || value | 0) || 0;
246
+ break;
247
+ case 'rangex':
248
+ newMinX = value && value.minX && value.minX | 0 || 0;
249
+ newMaxX = value && value.maxX && value.maxX | 0 || 0;
250
+ break;
251
+ case 'miny':
252
+ newMinY = value && (value.minY && value.minY | 0 || value | 0) || 0;
253
+ break;
254
+ case 'maxy':
255
+ newMaxY = value && (value.maxY && value.maxY | 0 || value | 0) || 0;
256
+ break;
257
+ case 'rangey':
258
+ newMinY = value && value.minY && value.minY | 0 || 0;
259
+ newMaxY = value && value.maxY && value.maxY | 0 || 0;
260
+ break;
261
+ case 'all':
262
+ default:
263
+ newMinX = value && value.minX && value.minX | 0 || 0;
264
+ newMaxX = value && value.maxX && value.maxX | 0 || 0;
265
+ newMinY = value && value.minY && value.minY | 0 || 0;
266
+ newMaxY = value && value.maxY && value.maxY | 0 || 0;
267
+ break;
268
+ }
269
+ if (newMinX != null && minX != newMinX) {
270
+ minX = newMinX;
271
+ rangeX = maxX - minX;
272
+ }
273
+ if (newMaxX != null && maxX != newMaxX) {
274
+ maxX = newMaxX;
275
+ rangeX = maxX - minX;
276
+ }
277
+ if (newMinY != null && minY != newMinY) {
278
+ minY = newMinY;
279
+ rangeY = maxY - minY;
280
+ }
281
+ if (newMaxY != null && maxY != newMaxY) {
282
+ maxY = newMaxY;
283
+ rangeY = maxY - minY;
284
+ }
285
+ },
286
+ bind = function (callback) {
287
+ if ($.isFunction(callback)) changeEvents.push(callback);
288
+ },
289
+ unbind = function (callback) {
290
+ if (!$.isFunction(callback)) return;
291
+ var i;
292
+ while ((i = $.inArray(callback, changeEvents)) != -1) changeEvents.splice(i, 1);
293
+ },
294
+ destroy = function () {
295
+ // unbind all possible events and null objects
296
+ $(document).unbind('mouseup', mouseUp).unbind('mousemove', mouseMove);
297
+ bar.unbind('mousedown', mouseDown);
298
+ bar = null;
299
+ arrow = null;
300
+ changeEvents = null;
301
+ };
302
+
303
+ $.extend(true, $this, // public properties, methods, and event bindings - these we need to access from other controls
304
+ {
305
+ val: val,
306
+ range: range,
307
+ bind: bind,
308
+ unbind: unbind,
309
+ destroy: destroy
310
+ });
311
+ // initialize this control
312
+ arrow.src = options.arrow && options.arrow.image;
313
+ arrow.w = options.arrow && options.arrow.width || arrow.width();
314
+ arrow.h = options.arrow && options.arrow.height || arrow.height();
315
+ bar.w = options.map && options.map.width || bar.width();
316
+ bar.h = options.map && options.map.height || bar.height();
317
+ // bind mousedown event
318
+ bar.bind('mousedown', mouseDown);
319
+ bind.call($this, draw);
320
+ },
321
+ ColorValuePicker = // controls for all the input elements for the typing in color values
322
+
323
+ function (picker, color, bindedHex, alphaPrecision) {
324
+ var $this = this, // private properties and methods
325
+ inputs = picker.find('td.Text input'),
326
+ red = inputs.eq(3),
327
+ green = inputs.eq(4),
328
+ blue = inputs.eq(5),
329
+ alpha = inputs.length > 7 ? inputs.eq(6) : null,
330
+ hue = inputs.eq(0),
331
+ saturation = inputs.eq(1),
332
+ value = inputs.eq(2),
333
+ hex = inputs.eq(inputs.length > 7 ? 7 : 6),
334
+ ahex = inputs.length > 7 ? inputs.eq(8) : null,
335
+ keyDown = // input box key down - use arrows to alter color
336
+
337
+ function (e) {
338
+ if (e.target.value == '' && e.target != hex.get(0) && (bindedHex != null && e.target != bindedHex.get(0) || bindedHex == null)) return;
339
+ if (!validateKey(e)) return e;
340
+ switch (e.target) {
341
+ case red.get(0):
342
+ switch (e.keyCode) {
343
+ case 38:
344
+ red.val(setValueInRange.call($this, (red.val() << 0) + 1, 0, 255));
345
+ color.val('r', red.val(), e.target);
346
+ return false;
347
+ case 40:
348
+ red.val(setValueInRange.call($this, (red.val() << 0) - 1, 0, 255));
349
+ color.val('r', red.val(), e.target);
350
+ return false;
351
+ }
352
+ break;
353
+ case green.get(0):
354
+ switch (e.keyCode) {
355
+ case 38:
356
+ green.val(setValueInRange.call($this, (green.val() << 0) + 1, 0, 255));
357
+ color.val('g', green.val(), e.target);
358
+ return false;
359
+ case 40:
360
+ green.val(setValueInRange.call($this, (green.val() << 0) - 1, 0, 255));
361
+ color.val('g', green.val(), e.target);
362
+ return false;
363
+ }
364
+ break;
365
+ case blue.get(0):
366
+ switch (e.keyCode) {
367
+ case 38:
368
+ blue.val(setValueInRange.call($this, (blue.val() << 0) + 1, 0, 255));
369
+ color.val('b', blue.val(), e.target);
370
+ return false;
371
+ case 40:
372
+ blue.val(setValueInRange.call($this, (blue.val() << 0) - 1, 0, 255));
373
+ color.val('b', blue.val(), e.target);
374
+ return false;
375
+ }
376
+ break;
377
+ case alpha && alpha.get(0):
378
+ switch (e.keyCode) {
379
+ case 38:
380
+ alpha.val(setValueInRange.call($this, parseFloat(alpha.val()) + 1, 0, 100));
381
+ color.val('a', mPrecision((alpha.val() * 255) / 100, alphaPrecision), e.target);
382
+ return false;
383
+ case 40:
384
+ alpha.val(setValueInRange.call($this, parseFloat(alpha.val()) - 1, 0, 100));
385
+ color.val('a', mPrecision((alpha.val() * 255) / 100, alphaPrecision), e.target);
386
+ return false;
387
+ }
388
+ break;
389
+ case hue.get(0):
390
+ switch (e.keyCode) {
391
+ case 38:
392
+ hue.val(setValueInRange.call($this, (hue.val() << 0) + 1, 0, 360));
393
+ color.val('h', hue.val(), e.target);
394
+ return false;
395
+ case 40:
396
+ hue.val(setValueInRange.call($this, (hue.val() << 0) - 1, 0, 360));
397
+ color.val('h', hue.val(), e.target);
398
+ return false;
399
+ }
400
+ break;
401
+ case saturation.get(0):
402
+ switch (e.keyCode) {
403
+ case 38:
404
+ saturation.val(setValueInRange.call($this, (saturation.val() << 0) + 1, 0, 100));
405
+ color.val('s', saturation.val(), e.target);
406
+ return false;
407
+ case 40:
408
+ saturation.val(setValueInRange.call($this, (saturation.val() << 0) - 1, 0, 100));
409
+ color.val('s', saturation.val(), e.target);
410
+ return false;
411
+ }
412
+ break;
413
+ case value.get(0):
414
+ switch (e.keyCode) {
415
+ case 38:
416
+ value.val(setValueInRange.call($this, (value.val() << 0) + 1, 0, 100));
417
+ color.val('v', value.val(), e.target);
418
+ return false;
419
+ case 40:
420
+ value.val(setValueInRange.call($this, (value.val() << 0) - 1, 0, 100));
421
+ color.val('v', value.val(), e.target);
422
+ return false;
423
+ }
424
+ break;
425
+ }
426
+ },
427
+ keyUp = // input box key up - validate value and set color
428
+
429
+ function (e) {
430
+ if (e.target.value == '' && e.target != hex.get(0) && (bindedHex != null && e.target != bindedHex.get(0) || bindedHex == null)) return;
431
+ if (!validateKey(e)) return e;
432
+ switch (e.target) {
433
+ case red.get(0):
434
+ red.val(setValueInRange.call($this, red.val(), 0, 255));
435
+ color.val('r', red.val(), e.target);
436
+ break;
437
+ case green.get(0):
438
+ green.val(setValueInRange.call($this, green.val(), 0, 255));
439
+ color.val('g', green.val(), e.target);
440
+ break;
441
+ case blue.get(0):
442
+ blue.val(setValueInRange.call($this, blue.val(), 0, 255));
443
+ color.val('b', blue.val(), e.target);
444
+ break;
445
+ case alpha && alpha.get(0):
446
+ alpha.val(setValueInRange.call($this, alpha.val(), 0, 100));
447
+ color.val('a', mPrecision((alpha.val() * 255) / 100, alphaPrecision), e.target);
448
+ break;
449
+ case hue.get(0):
450
+ hue.val(setValueInRange.call($this, hue.val(), 0, 360));
451
+ color.val('h', hue.val(), e.target);
452
+ break;
453
+ case saturation.get(0):
454
+ saturation.val(setValueInRange.call($this, saturation.val(), 0, 100));
455
+ color.val('s', saturation.val(), e.target);
456
+ break;
457
+ case value.get(0):
458
+ value.val(setValueInRange.call($this, value.val(), 0, 100));
459
+ color.val('v', value.val(), e.target);
460
+ break;
461
+ case hex.get(0):
462
+ hex.val(hex.val().replace(/[^a-fA-F0-9]/g, '').toLowerCase().substring(0, 6));
463
+ bindedHex && bindedHex.val(hex.val());
464
+ color.val('hex', hex.val() != '' ? hex.val() : null, e.target);
465
+ break;
466
+ case bindedHex && bindedHex.get(0):
467
+ bindedHex.val(bindedHex.val().replace(/[^a-fA-F0-9]/g, '').toLowerCase().substring(0, 6));
468
+ hex.val(bindedHex.val());
469
+ color.val('hex', bindedHex.val() != '' ? bindedHex.val() : null, e.target);
470
+ break;
471
+ case ahex && ahex.get(0):
472
+ ahex.val(ahex.val().replace(/[^a-fA-F0-9]/g, '').toLowerCase().substring(0, 2));
473
+ color.val('a', ahex.val() != null ? parseInt(ahex.val(), 16) : null, e.target);
474
+ break;
475
+ }
476
+ },
477
+ blur = // input box blur - reset to original if value empty
478
+
479
+ function (e) {
480
+ if (color.val() != null) {
481
+ switch (e.target) {
482
+ case red.get(0):
483
+ red.val(color.val('r'));
484
+ break;
485
+ case green.get(0):
486
+ green.val(color.val('g'));
487
+ break;
488
+ case blue.get(0):
489
+ blue.val(color.val('b'));
490
+ break;
491
+ case alpha && alpha.get(0):
492
+ alpha.val(mPrecision((color.val('a') * 100) / 255, alphaPrecision));
493
+ break;
494
+ case hue.get(0):
495
+ hue.val(color.val('h'));
496
+ break;
497
+ case saturation.get(0):
498
+ saturation.val(color.val('s'));
499
+ break;
500
+ case value.get(0):
501
+ value.val(color.val('v'));
502
+ break;
503
+ case hex.get(0):
504
+ case bindedHex && bindedHex.get(0):
505
+ hex.val(color.val('hex'));
506
+ bindedHex && bindedHex.val(color.val('hex'));
507
+ break;
508
+ case ahex && ahex.get(0):
509
+ ahex.val(color.val('ahex').substring(6));
510
+ break;
511
+ }
512
+ }
513
+ },
514
+ validateKey = // validate key
515
+
516
+ function (e) {
517
+ switch (e.keyCode) {
518
+ case 9:
519
+ case 16:
520
+ case 29:
521
+ case 37:
522
+ case 39:
523
+ return false;
524
+ case 'c'.charCodeAt():
525
+ case 'v'.charCodeAt():
526
+ if (e.ctrlKey) return false;
527
+ }
528
+ return true;
529
+ },
530
+ setValueInRange = // constrain value within range
531
+
532
+ function (value, min, max) {
533
+ if (value == '' || isNaN(value)) return min;
534
+ if (value > max) return max;
535
+ if (value < min) return min;
536
+ return value;
537
+ },
538
+ colorChanged = function (ui, context) {
539
+ var all = ui.val('all');
540
+ if (context != red.get(0)) red.val(all != null ? all.r : '');
541
+ if (context != green.get(0)) green.val(all != null ? all.g : '');
542
+ if (context != blue.get(0)) blue.val(all != null ? all.b : '');
543
+ if (alpha && context != alpha.get(0)) alpha.val(all != null ? mPrecision((all.a * 100) / 255, alphaPrecision) : '');
544
+ if (context != hue.get(0)) hue.val(all != null ? all.h : '');
545
+ if (context != saturation.get(0)) saturation.val(all != null ? all.s : '');
546
+ if (context != value.get(0)) value.val(all != null ? all.v : '');
547
+ if (context != hex.get(0) && (bindedHex && context != bindedHex.get(0) || !bindedHex)) hex.val(all != null ? all.hex : '');
548
+ if (bindedHex && context != bindedHex.get(0) && context != hex.get(0)) bindedHex.val(all != null ? all.hex : '');
549
+ if (ahex && context != ahex.get(0)) ahex.val(all != null ? all.ahex.substring(6) : '');
550
+ },
551
+ destroy = function () {
552
+ // unbind all events and null objects
553
+ red.add(green).add(blue).add(alpha).add(hue).add(saturation).add(value).add(hex).add(bindedHex).add(ahex).unbind('keyup', keyUp).unbind('blur', blur);
554
+ red.add(green).add(blue).add(alpha).add(hue).add(saturation).add(value).unbind('keydown', keyDown);
555
+ color.unbind(colorChanged);
556
+ red = null;
557
+ green = null;
558
+ blue = null;
559
+ alpha = null;
560
+ hue = null;
561
+ saturation = null;
562
+ value = null;
563
+ hex = null;
564
+ ahex = null;
565
+ };
566
+ elemExtend(true, $this, // public properties and methods
567
+ {
568
+ destroy: destroy
569
+ });
570
+ red.add(green).add(blue).add(alpha).add(hue).add(saturation).add(value).add(hex).add(bindedHex).add(ahex).bind('keyup', keyUp).bind('blur', blur);
571
+ red.add(green).add(blue).add(alpha).add(hue).add(saturation).add(value).bind('keydown', keyDown);
572
+ color.bind(colorChanged);
573
+ };
574
+ $.wsjPicker = {
575
+ List: [], // array holding references to each active instance of the control
576
+ Color: // color object - we will be able to assign by any color space type or retrieve any color space info
577
+ // we want this public so we can optionally assign new color objects to initial values using inputs other than a string hex value (also supported)
578
+
579
+ function (init) {
580
+ var $this = this,
581
+ r,
582
+ g,
583
+ b,
584
+ a,
585
+ h,
586
+ s,
587
+ v,
588
+ changeEvents = new Array(),
589
+ fireChangeEvents = function (context) {
590
+ for (var i = 0; i < changeEvents.length; i++) changeEvents[i].call($this, $this, context);
591
+ },
592
+ val = function (name, value, context) {
593
+ var set = value !== undefined;
594
+ if (!set) {
595
+ if (name === undefined || name == null || name == '') name = 'all';
596
+ if (r == null) return null;
597
+ switch (name.toLowerCase()) {
598
+ case 'ahex':
599
+ return ColorMethods.rgbaToHex({
600
+ r: r,
601
+ g: g,
602
+ b: b,
603
+ a: a
604
+ });
605
+ case 'hex':
606
+ return val('ahex').substring(0, 6);
607
+ case 'all':
608
+ return {
609
+ r: r,
610
+ g: g,
611
+ b: b,
612
+ a: a,
613
+ h: h,
614
+ s: s,
615
+ v: v,
616
+ hex: val.call($this, 'hex'),
617
+ ahex: val.call($this, 'ahex')
618
+ };
619
+ default:
620
+ var ret = {};
621
+ for (var i = 0; i < name.length; i++) {
622
+ switch (name.charAt(i)) {
623
+ case 'r':
624
+ if (name.length == 1) ret = r;
625
+ else ret.r = r;
626
+ break;
627
+ case 'g':
628
+ if (name.length == 1) ret = g;
629
+ else ret.g = g;
630
+ break;
631
+ case 'b':
632
+ if (name.length == 1) ret = b;
633
+ else ret.b = b;
634
+ break;
635
+ case 'a':
636
+ if (name.length == 1) ret = a;
637
+ else ret.a = a;
638
+ break;
639
+ case 'h':
640
+ if (name.length == 1) ret = h;
641
+ else ret.h = h;
642
+ break;
643
+ case 's':
644
+ if (name.length == 1) ret = s;
645
+ else ret.s = s;
646
+ break;
647
+ case 'v':
648
+ if (name.length == 1) ret = v;
649
+ else ret.v = v;
650
+ break;
651
+ }
652
+ }
653
+ return ret == {} ? val.call($this, 'all') : ret;
654
+ break;
655
+ }
656
+ }
657
+ if (context != null && context == $this) return;
658
+ var changed = false;
659
+ if (name == null) name = '';
660
+ if (value == null) {
661
+ if (r != null) {
662
+ r = null;
663
+ changed = true;
664
+ }
665
+ if (g != null) {
666
+ g = null;
667
+ changed = true;
668
+ }
669
+ if (b != null) {
670
+ b = null;
671
+ changed = true;
672
+ }
673
+ if (a != null) {
674
+ a = null;
675
+ changed = true;
676
+ }
677
+ if (h != null) {
678
+ h = null;
679
+ changed = true;
680
+ }
681
+ if (s != null) {
682
+ s = null;
683
+ changed = true;
684
+ }
685
+ if (v != null) {
686
+ v = null;
687
+ changed = true;
688
+ }
689
+ changed && fireChangeEvents.call($this, context || $this);
690
+ return;
691
+ }
692
+ switch (name.toLowerCase()) {
693
+ case 'ahex':
694
+ case 'hex':
695
+ var ret = ColorMethods.hexToRgba(value && (value.ahex || value.hex) || value || '00000000');
696
+ val.call($this, 'rgba', {
697
+ r: ret.r,
698
+ g: ret.g,
699
+ b: ret.b,
700
+ a: name == 'ahex' ? ret.a : a != null ? a : 255
701
+ }, context);
702
+ break;
703
+ default:
704
+ if (value && (value.ahex != null || value.hex != null)) {
705
+ val.call($this, 'ahex', value.ahex || value.hex || '00000000', context);
706
+ return;
707
+ }
708
+ var newV = {}, rgb = false,
709
+ hsv = false;
710
+ if (value.r !== undefined && !name.indexOf('r') == -1) name += 'r';
711
+ if (value.g !== undefined && !name.indexOf('g') == -1) name += 'g';
712
+ if (value.b !== undefined && !name.indexOf('b') == -1) name += 'b';
713
+ if (value.a !== undefined && !name.indexOf('a') == -1) name += 'a';
714
+ if (value.h !== undefined && !name.indexOf('h') == -1) name += 'h';
715
+ if (value.s !== undefined && !name.indexOf('s') == -1) name += 's';
716
+ if (value.v !== undefined && !name.indexOf('v') == -1) name += 'v';
717
+ for (var i = 0; i < name.length; i++) {
718
+ switch (name.charAt(i)) {
719
+ case 'r':
720
+ if (hsv) continue;
721
+ rgb = true;
722
+ newV.r = value && value.r && value.r | 0 || value && value | 0 || 0;
723
+ if (newV.r < 0) newV.r = 0;
724
+ else if (newV.r > 255) newV.r = 255;
725
+ if (r != newV.r) {
726
+ r = newV.r;
727
+ changed = true;
728
+ }
729
+ break;
730
+ case 'g':
731
+ if (hsv) continue;
732
+ rgb = true;
733
+ newV.g = value && value.g && value.g | 0 || value && value | 0 || 0;
734
+ if (newV.g < 0) newV.g = 0;
735
+ else if (newV.g > 255) newV.g = 255;
736
+ if (g != newV.g) {
737
+ g = newV.g;
738
+ changed = true;
739
+ }
740
+ break;
741
+ case 'b':
742
+ if (hsv) continue;
743
+ rgb = true;
744
+ newV.b = value && value.b && value.b | 0 || value && value | 0 || 0;
745
+ if (newV.b < 0) newV.b = 0;
746
+ else if (newV.b > 255) newV.b = 255;
747
+ if (b != newV.b) {
748
+ b = newV.b;
749
+ changed = true;
750
+ }
751
+ break;
752
+ case 'a':
753
+ newV.a = value && value.a != null ? value.a | 0 : value != null ? value | 0 : 255;
754
+ if (newV.a < 0) newV.a = 0;
755
+ else if (newV.a > 255) newV.a = 255;
756
+ if (a != newV.a) {
757
+ a = newV.a;
758
+ changed = true;
759
+ }
760
+ break;
761
+ case 'h':
762
+ if (rgb) continue;
763
+ hsv = true;
764
+ newV.h = value && value.h && value.h | 0 || value && value | 0 || 0;
765
+ if (newV.h < 0) newV.h = 0;
766
+ else if (newV.h > 360) newV.h = 360;
767
+ if (h != newV.h) {
768
+ h = newV.h;
769
+ changed = true;
770
+ }
771
+ break;
772
+ case 's':
773
+ if (rgb) continue;
774
+ hsv = true;
775
+ newV.s = value && value.s != null ? value.s | 0 : value != null ? value | 0 : 100;
776
+ if (newV.s < 0) newV.s = 0;
777
+ else if (newV.s > 100) newV.s = 100;
778
+ if (s != newV.s) {
779
+ s = newV.s;
780
+ changed = true;
781
+ }
782
+ break;
783
+ case 'v':
784
+ if (rgb) continue;
785
+ hsv = true;
786
+ newV.v = value && value.v != null ? value.v | 0 : value != null ? value | 0 : 100;
787
+ if (newV.v < 0) newV.v = 0;
788
+ else if (newV.v > 100) newV.v = 100;
789
+ if (v != newV.v) {
790
+ v = newV.v;
791
+ changed = true;
792
+ }
793
+ break;
794
+ }
795
+ }
796
+ if (changed) {
797
+ if (rgb) {
798
+ r = r || 0;
799
+ g = g || 0;
800
+ b = b || 0;
801
+ var ret = ColorMethods.rgbToHsv({
802
+ r: r,
803
+ g: g,
804
+ b: b
805
+ });
806
+ h = ret.h;
807
+ s = ret.s;
808
+ v = ret.v;
809
+ } else if (hsv) {
810
+ h = h || 0;
811
+ s = s != null ? s : 100;
812
+ v = v != null ? v : 100;
813
+ var ret = ColorMethods.hsvToRgb({
814
+ h: h,
815
+ s: s,
816
+ v: v
817
+ });
818
+ r = ret.r;
819
+ g = ret.g;
820
+ b = ret.b;
821
+ }
822
+ a = a != null ? a : 255;
823
+ fireChangeEvents.call($this, context || $this);
824
+ }
825
+ break;
826
+ }
827
+ },
828
+ bind = function (callback) {
829
+ if ($.isFunction(callback)) changeEvents.push(callback);
830
+ },
831
+ unbind = function (callback) {
832
+ if (!$.isFunction(callback)) return;
833
+ var i;
834
+ while ((i = $.inArray(callback, changeEvents)) != -1) changeEvents.splice(i, 1);
835
+ },
836
+ destroy = function () {
837
+ changeEvents = null;
838
+ }
839
+ elemExtend(true, $this, // public properties and methods
840
+ {
841
+ val: val,
842
+ bind: bind,
843
+ unbind: unbind,
844
+ destroy: destroy
845
+ });
846
+ if (init) {
847
+ if (init.ahex != null) val('ahex', init);
848
+ else if (init.hex != null) val((init.a != null ? 'a' : '') + 'hex', init.a != null ? {
849
+ ahex: init.hex + ColorMethods.intToHex(init.a)
850
+ } : init);
851
+ else if (init.r != null && init.g != null && init.b != null) val('rgb' + (init.a != null ? 'a' : ''), init);
852
+ else if (init.h != null && init.s != null && init.v != null) val('hsv' + (init.a != null ? 'a' : ''), init);
853
+ }
854
+ },
855
+ ColorMethods: // color conversion methods - make public to give use to external scripts
856
+ {
857
+ hexToRgba: function (hex) {
858
+ hex = this.validateHex(hex);
859
+ if (hex == '') return {
860
+ r: null,
861
+ g: null,
862
+ b: null,
863
+ a: null
864
+ };
865
+ var r = '00',
866
+ g = '00',
867
+ b = '00',
868
+ a = '255';
869
+ if (hex.length == 6) hex += 'ff';
870
+ if (hex.length > 6) {
871
+ r = hex.substring(0, 2);
872
+ g = hex.substring(2, 4);
873
+ b = hex.substring(4, 6);
874
+ a = hex.substring(6, hex.length);
875
+ } else {
876
+ if (hex.length > 4) {
877
+ r = hex.substring(4, hex.length);
878
+ hex = hex.substring(0, 4);
879
+ }
880
+ if (hex.length > 2) {
881
+ g = hex.substring(2, hex.length);
882
+ hex = hex.substring(0, 2);
883
+ }
884
+ if (hex.length > 0) b = hex.substring(0, hex.length);
885
+ }
886
+ return {
887
+ r: this.hexToInt(r),
888
+ g: this.hexToInt(g),
889
+ b: this.hexToInt(b),
890
+ a: this.hexToInt(a)
891
+ };
892
+ },
893
+ validateHex: function (hex) {
894
+ hex = hex.toLowerCase().replace(/[^a-f0-9]/g, '');
895
+ if (hex.length > 8) hex = hex.substring(0, 8);
896
+ return hex;
897
+ },
898
+ rgbaToHex: function (rgba) {
899
+ return this.intToHex(rgba.r) + this.intToHex(rgba.g) + this.intToHex(rgba.b) + this.intToHex(rgba.a);
900
+ },
901
+ intToHex: function (dec) {
902
+ var result = (dec | 0).toString(16);
903
+ if (result.length == 1) result = ('0' + result);
904
+ return result.toLowerCase();
905
+ },
906
+ hexToInt: function (hex) {
907
+ return parseInt(hex, 16);
908
+ },
909
+ rgbToHsv: function (rgb) {
910
+ var r = rgb.r / 255,
911
+ g = rgb.g / 255,
912
+ b = rgb.b / 255,
913
+ hsv = {
914
+ h: 0,
915
+ s: 0,
916
+ v: 0
917
+ }, min = 0,
918
+ max = 0,
919
+ delta;
920
+ if (r >= g && r >= b) {
921
+ max = r;
922
+ min = g > b ? b : g;
923
+ } else if (g >= b && g >= r) {
924
+ max = g;
925
+ min = r > b ? b : r;
926
+ } else {
927
+ max = b;
928
+ min = g > r ? r : g;
929
+ }
930
+ hsv.v = max;
931
+ hsv.s = max ? (max - min) / max : 0;
932
+ if (!hsv.s) hsv.h = 0;
933
+ else {
934
+ delta = max - min;
935
+ if (r == max) hsv.h = (g - b) / delta;
936
+ else if (g == max) hsv.h = 2 + (b - r) / delta;
937
+ else hsv.h = 4 + (r - g) / delta;
938
+ hsv.h = parseInt(hsv.h * 60);
939
+ if (hsv.h < 0) hsv.h += 360;
940
+ }
941
+ hsv.s = (hsv.s * 100) | 0;
942
+ hsv.v = (hsv.v * 100) | 0;
943
+ return hsv;
944
+ },
945
+ hsvToRgb: function (hsv) {
946
+ var rgb = {
947
+ r: 0,
948
+ g: 0,
949
+ b: 0,
950
+ a: 100
951
+ }, h = hsv.h,
952
+ s = hsv.s,
953
+ v = hsv.v;
954
+ if (s == 0) {
955
+ if (v == 0) rgb.r = rgb.g = rgb.b = 0;
956
+ else rgb.r = rgb.g = rgb.b = (v * 255 / 100) | 0;
957
+ } else {
958
+ if (h == 360) h = 0;
959
+ h /= 60;
960
+ s = s / 100;
961
+ v = v / 100;
962
+ var i = h | 0,
963
+ f = h - i,
964
+ p = v * (1 - s),
965
+ q = v * (1 - (s * f)),
966
+ t = v * (1 - (s * (1 - f)));
967
+ switch (i) {
968
+ case 0:
969
+ rgb.r = v;
970
+ rgb.g = t;
971
+ rgb.b = p;
972
+ break;
973
+ case 1:
974
+ rgb.r = q;
975
+ rgb.g = v;
976
+ rgb.b = p;
977
+ break;
978
+ case 2:
979
+ rgb.r = p;
980
+ rgb.g = v;
981
+ rgb.b = t;
982
+ break;
983
+ case 3:
984
+ rgb.r = p;
985
+ rgb.g = q;
986
+ rgb.b = v;
987
+ break;
988
+ case 4:
989
+ rgb.r = t;
990
+ rgb.g = p;
991
+ rgb.b = v;
992
+ break;
993
+ case 5:
994
+ rgb.r = v;
995
+ rgb.g = p;
996
+ rgb.b = q;
997
+ break;
998
+ }
999
+ rgb.r = (rgb.r * 255) | 0;
1000
+ rgb.g = (rgb.g * 255) | 0;
1001
+ rgb.b = (rgb.b * 255) | 0;
1002
+ }
1003
+ return rgb;
1004
+ }
1005
+ }
1006
+ };
1007
+ var Color = $.wsjPicker.Color,
1008
+ List = $.wsjPicker.List,
1009
+ ColorMethods = $.wsjPicker.ColorMethods; // local copies for YUI compressor
1010
+ $.fn.wsjPicker = function (options) {
1011
+ var $arguments = arguments;
1012
+ return this.each(function () {
1013
+ var $this = this,
1014
+ settings = $.extend(true, {}, $.fn.wsjPicker.defaults, options); // local copies for YUI compressor
1015
+
1016
+ settings.window.liveUpdate = false; // Basic control binding for inline use - You will need to override the liveCallback or commitCallback function to retrieve results
1017
+ var container = null,
1018
+ colorMapDiv = null,
1019
+ colorBarDiv = null,
1020
+ colorMapL1 = null, // different layers of colorMap and colorBar
1021
+ colorMapL2 = null,
1022
+ colorMapL3 = null,
1023
+ colorBarL1 = null,
1024
+ colorBarL2 = null,
1025
+ colorBarL3 = null,
1026
+ colorBarL4 = null,
1027
+ colorBarL5 = null,
1028
+ colorBarL6 = null,
1029
+ colorMap = null, // color maps
1030
+ colorBar = null,
1031
+ colorPicker = null,
1032
+ elementStartX = null, // Used to record the starting css positions for dragging the control
1033
+ elementStartY = null,
1034
+ pageStartX = null, // Used to record the mousedown coordinates for dragging the control
1035
+ pageStartY = null,
1036
+ activePreview = null, // color boxes above the radio buttons
1037
+ currentPreview = null,
1038
+ okButton = null,
1039
+ cancelButton = null,
1040
+ grid = null, // preset colors grid
1041
+ moveBar = null, // drag bar
1042
+ setColorMode = // set color mode and update visuals for the new color mode
1043
+
1044
+ function (colorMode) {
1045
+ var active = color.active, // local copies for YUI compressor
1046
+ clientPath = images.clientPath,
1047
+ hex = active.val('hex'),
1048
+ rgbMap,
1049
+ rgbBar;
1050
+ settings.color.mode = colorMode;
1051
+ switch (colorMode) {
1052
+ case 'h':
1053
+ setTimeout(function () {
1054
+ setBG.call($this, colorMapDiv, 'transparent');
1055
+ setImgLoc.call($this, colorMapL1, 0);
1056
+ setAlpha.call($this, colorMapL1, 100);
1057
+ setImgLoc.call($this, colorMapL2, 260);
1058
+ setAlpha.call($this, colorMapL2, 100);
1059
+ setBG.call($this, colorBarDiv, 'transparent');
1060
+ setImgLoc.call($this, colorBarL1, 0);
1061
+ setAlpha.call($this, colorBarL1, 100);
1062
+ setImgLoc.call($this, colorBarL2, 260);
1063
+ setAlpha.call($this, colorBarL2, 100);
1064
+ setImgLoc.call($this, colorBarL3, 260);
1065
+ setAlpha.call($this, colorBarL3, 100);
1066
+ setImgLoc.call($this, colorBarL4, 260);
1067
+ setAlpha.call($this, colorBarL4, 100);
1068
+ setImgLoc.call($this, colorBarL6, 260);
1069
+ setAlpha.call($this, colorBarL6, 100);
1070
+ }, 0);
1071
+ colorMap.range('all', {
1072
+ minX: 0,
1073
+ maxX: 100,
1074
+ minY: 0,
1075
+ maxY: 100
1076
+ });
1077
+ colorBar.range('rangeY', {
1078
+ minY: 0,
1079
+ maxY: 360
1080
+ });
1081
+ if (active.val('ahex') == null) break;
1082
+ colorMap.val('xy', {
1083
+ x: active.val('s'),
1084
+ y: 100 - active.val('v')
1085
+ }, colorMap);
1086
+ colorBar.val('y', 360 - active.val('h'), colorBar);
1087
+ break;
1088
+ case 's':
1089
+ setTimeout(function () {
1090
+ setBG.call($this, colorMapDiv, 'transparent');
1091
+ setImgLoc.call($this, colorMapL1, -260);
1092
+ setImgLoc.call($this, colorMapL2, -520);
1093
+ setImgLoc.call($this, colorBarL1, -260);
1094
+ setImgLoc.call($this, colorBarL2, -520);
1095
+ setImgLoc.call($this, colorBarL6, 260);
1096
+ setAlpha.call($this, colorBarL6, 100);
1097
+ }, 0);
1098
+ colorMap.range('all', {
1099
+ minX: 0,
1100
+ maxX: 360,
1101
+ minY: 0,
1102
+ maxY: 100
1103
+ });
1104
+ colorBar.range('rangeY', {
1105
+ minY: 0,
1106
+ maxY: 100
1107
+ });
1108
+ if (active.val('ahex') == null) break;
1109
+ colorMap.val('xy', {
1110
+ x: active.val('h'),
1111
+ y: 100 - active.val('v')
1112
+ }, colorMap);
1113
+ colorBar.val('y', 100 - active.val('s'), colorBar);
1114
+ break;
1115
+ case 'v':
1116
+ setTimeout(function () {
1117
+ setBG.call($this, colorMapDiv, '000000');
1118
+ setImgLoc.call($this, colorMapL1, -780);
1119
+ setImgLoc.call($this, colorMapL2, 260);
1120
+ setBG.call($this, colorBarDiv, hex);
1121
+ setImgLoc.call($this, colorBarL1, -520);
1122
+ setImgLoc.call($this, colorBarL2, 260);
1123
+ setAlpha.call($this, colorBarL2, 100);
1124
+ setImgLoc.call($this, colorBarL6, 260);
1125
+ setAlpha.call($this, colorBarL6, 100);
1126
+ }, 0);
1127
+ colorMap.range('all', {
1128
+ minX: 0,
1129
+ maxX: 360,
1130
+ minY: 0,
1131
+ maxY: 100
1132
+ });
1133
+ colorBar.range('rangeY', {
1134
+ minY: 0,
1135
+ maxY: 100
1136
+ });
1137
+ if (active.val('ahex') == null) break;
1138
+ colorMap.val('xy', {
1139
+ x: active.val('h'),
1140
+ y: 100 - active.val('s')
1141
+ }, colorMap);
1142
+ colorBar.val('y', 100 - active.val('v'), colorBar);
1143
+ break;
1144
+ case 'r':
1145
+ rgbMap = -1040;
1146
+ rgbBar = -780;
1147
+ colorMap.range('all', {
1148
+ minX: 0,
1149
+ maxX: 255,
1150
+ minY: 0,
1151
+ maxY: 255
1152
+ });
1153
+ colorBar.range('rangeY', {
1154
+ minY: 0,
1155
+ maxY: 255
1156
+ });
1157
+ if (active.val('ahex') == null) break;
1158
+ colorMap.val('xy', {
1159
+ x: active.val('b'),
1160
+ y: 255 - active.val('g')
1161
+ }, colorMap);
1162
+ colorBar.val('y', 255 - active.val('r'), colorBar);
1163
+ break;
1164
+ case 'g':
1165
+ rgbMap = -1560;
1166
+ rgbBar = -1820;
1167
+ colorMap.range('all', {
1168
+ minX: 0,
1169
+ maxX: 255,
1170
+ minY: 0,
1171
+ maxY: 255
1172
+ });
1173
+ colorBar.range('rangeY', {
1174
+ minY: 0,
1175
+ maxY: 255
1176
+ });
1177
+ if (active.val('ahex') == null) break;
1178
+ colorMap.val('xy', {
1179
+ x: active.val('b'),
1180
+ y: 255 - active.val('r')
1181
+ }, colorMap);
1182
+ colorBar.val('y', 255 - active.val('g'), colorBar);
1183
+ break;
1184
+ case 'b':
1185
+ rgbMap = -2080;
1186
+ rgbBar = -2860;
1187
+ colorMap.range('all', {
1188
+ minX: 0,
1189
+ maxX: 255,
1190
+ minY: 0,
1191
+ maxY: 255
1192
+ });
1193
+ colorBar.range('rangeY', {
1194
+ minY: 0,
1195
+ maxY: 255
1196
+ });
1197
+ if (active.val('ahex') == null) break;
1198
+ colorMap.val('xy', {
1199
+ x: active.val('r'),
1200
+ y: 255 - active.val('g')
1201
+ }, colorMap);
1202
+ colorBar.val('y', 255 - active.val('b'), colorBar);
1203
+ break;
1204
+ case 'a':
1205
+ setTimeout(function () {
1206
+ setBG.call($this, colorMapDiv, 'transparent');
1207
+ setImgLoc.call($this, colorMapL1, -260);
1208
+ setImgLoc.call($this, colorMapL2, -520);
1209
+ setImgLoc.call($this, colorBarL1, 260);
1210
+ setImgLoc.call($this, colorBarL2, 260);
1211
+ setAlpha.call($this, colorBarL2, 100);
1212
+ setImgLoc.call($this, colorBarL6, 0);
1213
+ setAlpha.call($this, colorBarL6, 100);
1214
+ }, 0);
1215
+ colorMap.range('all', {
1216
+ minX: 0,
1217
+ maxX: 360,
1218
+ minY: 0,
1219
+ maxY: 100
1220
+ });
1221
+ colorBar.range('rangeY', {
1222
+ minY: 0,
1223
+ maxY: 255
1224
+ });
1225
+ if (active.val('ahex') == null) break;
1226
+ colorMap.val('xy', {
1227
+ x: active.val('h'),
1228
+ y: 100 - active.val('v')
1229
+ }, colorMap);
1230
+ colorBar.val('y', 255 - active.val('a'), colorBar);
1231
+ break;
1232
+ default:
1233
+ throw ('Invalid Mode');
1234
+ break;
1235
+ }
1236
+ switch (colorMode) {
1237
+ case 'h':
1238
+ break;
1239
+ case 's':
1240
+ case 'v':
1241
+ case 'a':
1242
+ setTimeout(function () {
1243
+ setAlpha.call($this, colorMapL1, 100);
1244
+ setAlpha.call($this, colorBarL1, 100);
1245
+ setImgLoc.call($this, colorBarL3, 260);
1246
+ setAlpha.call($this, colorBarL3, 100);
1247
+ setImgLoc.call($this, colorBarL4, 260);
1248
+ setAlpha.call($this, colorBarL4, 100);
1249
+ }, 0);
1250
+ break;
1251
+ case 'r':
1252
+ case 'g':
1253
+ case 'b':
1254
+ setTimeout(function () {
1255
+ setBG.call($this, colorMapDiv, 'transparent');
1256
+ setBG.call($this, colorBarDiv, 'transparent');
1257
+ setAlpha.call($this, colorBarL1, 100);
1258
+ setAlpha.call($this, colorMapL1, 100);
1259
+ setImgLoc.call($this, colorMapL1, rgbMap);
1260
+ setImgLoc.call($this, colorMapL2, rgbMap - 260);
1261
+ setImgLoc.call($this, colorBarL1, rgbBar - 780);
1262
+ setImgLoc.call($this, colorBarL2, rgbBar - 520);
1263
+ setImgLoc.call($this, colorBarL3, rgbBar);
1264
+ setImgLoc.call($this, colorBarL4, rgbBar - 260);
1265
+ setImgLoc.call($this, colorBarL6, 260);
1266
+ setAlpha.call($this, colorBarL6, 100);
1267
+ }, 0);
1268
+ break;
1269
+ }
1270
+ if (active.val('ahex') == null) return;
1271
+ activeColorChanged.call($this, active);
1272
+ },
1273
+ activeColorChanged = // Update color when user changes text values
1274
+
1275
+ function (ui, context) {
1276
+ if (context == null || (context != colorBar && context != colorMap)) positionMapAndBarArrows.call($this, ui, context);
1277
+ setTimeout(function () {
1278
+ updatePreview.call($this, ui);
1279
+ updateMapVisuals.call($this, ui);
1280
+ updateBarVisuals.call($this, ui);
1281
+ }, 0);
1282
+ },
1283
+ mapValueChanged = // user has dragged the ColorMap pointer
1284
+
1285
+ function (ui, context) {
1286
+ var active = color.active;
1287
+ if (context != colorMap && active.val() == null) return;
1288
+ var xy = ui.val('all');
1289
+ switch (settings.color.mode) {
1290
+ case 'h':
1291
+ active.val('sv', {
1292
+ s: xy.x,
1293
+ v: 100 - xy.y
1294
+ }, context);
1295
+ break;
1296
+ case 's':
1297
+ case 'a':
1298
+ active.val('hv', {
1299
+ h: xy.x,
1300
+ v: 100 - xy.y
1301
+ }, context);
1302
+ break;
1303
+ case 'v':
1304
+ active.val('hs', {
1305
+ h: xy.x,
1306
+ s: 100 - xy.y
1307
+ }, context);
1308
+ break;
1309
+ case 'r':
1310
+ active.val('gb', {
1311
+ g: 255 - xy.y,
1312
+ b: xy.x
1313
+ }, context);
1314
+ break;
1315
+ case 'g':
1316
+ active.val('rb', {
1317
+ r: 255 - xy.y,
1318
+ b: xy.x
1319
+ }, context);
1320
+ break;
1321
+ case 'b':
1322
+ active.val('rg', {
1323
+ r: xy.x,
1324
+ g: 255 - xy.y
1325
+ }, context);
1326
+ break;
1327
+ }
1328
+ },
1329
+ colorBarValueChanged = // user has dragged the ColorBar slider
1330
+
1331
+ function (ui, context) {
1332
+ var active = color.active;
1333
+ if (context != colorBar && active.val() == null) return;
1334
+ switch (settings.color.mode) {
1335
+ case 'h':
1336
+ active.val('h', {
1337
+ h: 360 - ui.val('y')
1338
+ }, context);
1339
+ break;
1340
+ case 's':
1341
+ active.val('s', {
1342
+ s: 100 - ui.val('y')
1343
+ }, context);
1344
+ break;
1345
+ case 'v':
1346
+ active.val('v', {
1347
+ v: 100 - ui.val('y')
1348
+ }, context);
1349
+ break;
1350
+ case 'r':
1351
+ active.val('r', {
1352
+ r: 255 - ui.val('y')
1353
+ }, context);
1354
+ break;
1355
+ case 'g':
1356
+ active.val('g', {
1357
+ g: 255 - ui.val('y')
1358
+ }, context);
1359
+ break;
1360
+ case 'b':
1361
+ active.val('b', {
1362
+ b: 255 - ui.val('y')
1363
+ }, context);
1364
+ break;
1365
+ case 'a':
1366
+ active.val('a', 255 - ui.val('y'), context);
1367
+ break;
1368
+ }
1369
+ },
1370
+ positionMapAndBarArrows = // position map and bar arrows to match current color
1371
+
1372
+ function (ui, context) {
1373
+ if (context != colorMap) {
1374
+ switch (settings.color.mode) {
1375
+ case 'h':
1376
+ var sv = ui.val('sv');
1377
+ colorMap.val('xy', {
1378
+ x: sv != null ? sv.s : 100,
1379
+ y: 100 - (sv != null ? sv.v : 100)
1380
+ }, context);
1381
+ break;
1382
+ case 's':
1383
+ case 'a':
1384
+ var hv = ui.val('hv');
1385
+ colorMap.val('xy', {
1386
+ x: hv && hv.h || 0,
1387
+ y: 100 - (hv != null ? hv.v : 100)
1388
+ }, context);
1389
+ break;
1390
+ case 'v':
1391
+ var hs = ui.val('hs');
1392
+ colorMap.val('xy', {
1393
+ x: hs && hs.h || 0,
1394
+ y: 100 - (hs != null ? hs.s : 100)
1395
+ }, context);
1396
+ break;
1397
+ case 'r':
1398
+ var bg = ui.val('bg');
1399
+ colorMap.val('xy', {
1400
+ x: bg && bg.b || 0,
1401
+ y: 255 - (bg && bg.g || 0)
1402
+ }, context);
1403
+ break;
1404
+ case 'g':
1405
+ var br = ui.val('br');
1406
+ colorMap.val('xy', {
1407
+ x: br && br.b || 0,
1408
+ y: 255 - (br && br.r || 0)
1409
+ }, context);
1410
+ break;
1411
+ case 'b':
1412
+ var rg = ui.val('rg');
1413
+ colorMap.val('xy', {
1414
+ x: rg && rg.r || 0,
1415
+ y: 255 - (rg && rg.g || 0)
1416
+ }, context);
1417
+ break;
1418
+ }
1419
+ }
1420
+ if (context != colorBar) {
1421
+ switch (settings.color.mode) {
1422
+ case 'h':
1423
+ colorBar.val('y', 360 - (ui.val('h') || 0), context);
1424
+ break;
1425
+ case 's':
1426
+ var s = ui.val('s');
1427
+ colorBar.val('y', 100 - (s != null ? s : 100), context);
1428
+ break;
1429
+ case 'v':
1430
+ var v = ui.val('v');
1431
+ colorBar.val('y', 100 - (v != null ? v : 100), context);
1432
+ break;
1433
+ case 'r':
1434
+ colorBar.val('y', 255 - (ui.val('r') || 0), context);
1435
+ break;
1436
+ case 'g':
1437
+ colorBar.val('y', 255 - (ui.val('g') || 0), context);
1438
+ break;
1439
+ case 'b':
1440
+ colorBar.val('y', 255 - (ui.val('b') || 0), context);
1441
+ break;
1442
+ case 'a':
1443
+ var a = ui.val('a');
1444
+ colorBar.val('y', 255 - (a != null ? a : 255), context);
1445
+ break;
1446
+ }
1447
+ }
1448
+ },
1449
+ updatePreview = function (ui) {
1450
+ try {
1451
+ var all = ui.val('all');
1452
+ activePreview.css({
1453
+ backgroundColor: all && '#' + all.hex || 'transparent'
1454
+ });
1455
+ setAlpha.call($this, activePreview, all && mPrecision((all.a * 100) / 255, 4) || 0);
1456
+ } catch (e) {}
1457
+ },
1458
+ updateMapVisuals = function (ui) {
1459
+ switch (settings.color.mode) {
1460
+ case 'h':
1461
+ setBG.call($this, colorMapDiv, new Color({
1462
+ h: ui.val('h') || 0,
1463
+ s: 100,
1464
+ v: 100
1465
+ }).val('hex'));
1466
+ break;
1467
+ case 's':
1468
+ case 'a':
1469
+ var s = ui.val('s');
1470
+ setAlpha.call($this, colorMapL2, 100 - (s != null ? s : 100));
1471
+ break;
1472
+ case 'v':
1473
+ var v = ui.val('v');
1474
+ setAlpha.call($this, colorMapL1, v != null ? v : 100);
1475
+ break;
1476
+ case 'r':
1477
+ setAlpha.call($this, colorMapL2, mPrecision((ui.val('r') || 0) / 255 * 100, 4));
1478
+ break;
1479
+ case 'g':
1480
+ setAlpha.call($this, colorMapL2, mPrecision((ui.val('g') || 0) / 255 * 100, 4));
1481
+ break;
1482
+ case 'b':
1483
+ setAlpha.call($this, colorMapL2, mPrecision((ui.val('b') || 0) / 255 * 100));
1484
+ break;
1485
+ }
1486
+ var a = ui.val('a');
1487
+ setAlpha.call($this, colorMapL3, mPrecision(((255 - (a || 0)) * 100) / 255, 4));
1488
+ },
1489
+ updateBarVisuals = function (ui) {
1490
+ switch (settings.color.mode) {
1491
+ case 'h':
1492
+ var a = ui.val('a');
1493
+ setAlpha.call($this, colorBarL5, mPrecision(((255 - (a || 0)) * 100) / 255, 4));
1494
+ break;
1495
+ case 's':
1496
+ var hva = ui.val('hva'),
1497
+ saturatedColor = new Color({
1498
+ h: hva && hva.h || 0,
1499
+ s: 100,
1500
+ v: hva != null ? hva.v : 100
1501
+ });
1502
+ setBG.call($this, colorBarDiv, saturatedColor.val('hex'));
1503
+ setAlpha.call($this, colorBarL2, 100 - (hva != null ? hva.v : 100));
1504
+ setAlpha.call($this, colorBarL5, mPrecision(((255 - (hva && hva.a || 0)) * 100) / 255, 4));
1505
+ break;
1506
+ case 'v':
1507
+ var hsa = ui.val('hsa'),
1508
+ valueColor = new Color({
1509
+ h: hsa && hsa.h || 0,
1510
+ s: hsa != null ? hsa.s : 100,
1511
+ v: 100
1512
+ });
1513
+ setBG.call($this, colorBarDiv, valueColor.val('hex'));
1514
+ setAlpha.call($this, colorBarL5, mPrecision(((255 - (hsa && hsa.a || 0)) * 100) / 255, 4));
1515
+ break;
1516
+ case 'r':
1517
+ case 'g':
1518
+ case 'b':
1519
+ var hValue = 0,
1520
+ vValue = 0,
1521
+ rgba = ui.val('rgba');
1522
+ if (settings.color.mode == 'r') {
1523
+ hValue = rgba && rgba.b || 0;
1524
+ vValue = rgba && rgba.g || 0;
1525
+ } else if (settings.color.mode == 'g') {
1526
+ hValue = rgba && rgba.b || 0;
1527
+ vValue = rgba && rgba.r || 0;
1528
+ } else if (settings.color.mode == 'b') {
1529
+ hValue = rgba && rgba.r || 0;
1530
+ vValue = rgba && rgba.g || 0;
1531
+ }
1532
+ var middle = vValue > hValue ? hValue : vValue;
1533
+ setAlpha.call($this, colorBarL2, hValue > vValue ? mPrecision(((hValue - vValue) / (255 - vValue)) * 100, 4) : 0);
1534
+ setAlpha.call($this, colorBarL3, vValue > hValue ? mPrecision(((vValue - hValue) / (255 - hValue)) * 100, 4) : 0);
1535
+ setAlpha.call($this, colorBarL4, mPrecision((middle / 255) * 100, 4));
1536
+ setAlpha.call($this, colorBarL5, mPrecision(((255 - (rgba && rgba.a || 0)) * 100) / 255, 4));
1537
+ break;
1538
+ case 'a':
1539
+ var a = ui.val('a');
1540
+ setBG.call($this, colorBarDiv, ui.val('hex') || '000000');
1541
+ setAlpha.call($this, colorBarL5, a != null ? 0 : 100);
1542
+ setAlpha.call($this, colorBarL6, a != null ? 100 : 0);
1543
+ break;
1544
+ }
1545
+ },
1546
+ setBG = function (el, c) {
1547
+ el.css({
1548
+ backgroundColor: c && c.length == 6 && '#' + c || 'transparent'
1549
+ });
1550
+ },
1551
+ setImg = function (img, src) {
1552
+ img.css({
1553
+ backgroundImage: 'url(\'' + src + '\')'
1554
+ });
1555
+ },
1556
+ setImgLoc = function (img, y) {
1557
+ img.css({
1558
+ top: y + 'px'
1559
+ });
1560
+ },
1561
+ setAlpha = function (obj, alpha) {
1562
+ obj.css({
1563
+ visibility: alpha > 0 ? 'visible' : 'hidden'
1564
+ });
1565
+ if (alpha > 0 && alpha < 100) {
1566
+ obj.css({
1567
+ opacity: mPrecision(alpha / 100, 4)
1568
+ });
1569
+ } else if (alpha == 0 || alpha == 100) {
1570
+ obj.css({
1571
+ opacity: ''
1572
+ });
1573
+ }
1574
+ },
1575
+ revertColor = // revert color to original color when opened
1576
+
1577
+ function () {
1578
+ color.active.val('ahex', color.current.val('ahex'));
1579
+ },
1580
+ commitColor = // commit the color changes
1581
+
1582
+ function () {
1583
+ color.current.val('ahex', color.active.val('ahex'));
1584
+ },
1585
+ radioClicked = function (e) {
1586
+ container.find('input[type="radio"][value!="' + e.target.value + '"]').prop('checked', false);
1587
+ setColorMode.call($this, e.target.value);
1588
+ },
1589
+ currentClicked = function () {
1590
+ revertColor.call($this);
1591
+ },
1592
+ cancelClicked = function () {
1593
+ revertColor.call($this);
1594
+ $.isFunction(cancelCallback) && cancelCallback.call($this, color.active, cancelButton);
1595
+ },
1596
+ okClicked = function () {
1597
+ commitColor.call($this);
1598
+ $.isFunction(commitCallback) && commitCallback.call($this, color.active, okButton);
1599
+ },
1600
+ currentColorChanged = function (ui, context) {
1601
+ var hex = ui.val('hex');
1602
+ currentPreview.css({
1603
+ backgroundColor: hex && '#' + hex || 'transparent'
1604
+ });
1605
+ setAlpha.call($this, currentPreview, mPrecision(((ui.val('a') || 0) * 100) / 255, 4));
1606
+ },
1607
+ moveBarMouseDown = function (e) {
1608
+ elementStartX = parseInt(container.css('left'), 10) || 0;
1609
+ elementStartY = parseInt(container.css('top'), 10) || 0;
1610
+ pageStartX = e.pageX;
1611
+ pageStartY = e.pageY;
1612
+ // bind events to document to move window - we will unbind these on mouseup
1613
+ $(document).bind('mousemove', documentMouseMove).bind('mouseup', documentMouseUp);
1614
+ e.preventDefault(); // prevent attempted dragging of the column
1615
+ },
1616
+ documentMouseMove = function (e) {
1617
+ container.css({
1618
+ left: elementStartX - (pageStartX - e.pageX) + 'px',
1619
+ top: elementStartY - (pageStartY - e.pageY) + 'px'
1620
+ });
1621
+
1622
+
1623
+ return false;
1624
+ },
1625
+ documentMouseUp = function (e) {
1626
+ $(document).unbind('mousemove', documentMouseMove).unbind('mouseup', documentMouseUp);
1627
+
1628
+ return false;
1629
+ },
1630
+ quickPickClicked = function (e) {
1631
+
1632
+ color.active.val('ahex', $(this).attr('title') || null, e.target);
1633
+ return false;
1634
+ },
1635
+ commitCallback = $.isFunction($arguments[1]) && $arguments[1] || null,
1636
+ liveCallback = $.isFunction($arguments[2]) && $arguments[2] || null,
1637
+ cancelCallback = $.isFunction($arguments[3]) && $arguments[3] || null,
1638
+ show = function () {
1639
+ color.current.val('ahex', color.active.val('ahex'));
1640
+ },
1641
+ hide = function () {
1642
+
1643
+ },
1644
+ initialize = function () {
1645
+ var win = settings.window,
1646
+ popup = null;
1647
+ container = $($this);
1648
+ container.addClass('jPicker Container');
1649
+
1650
+ container.get(0).onselectstart = function (event) {
1651
+ if (event.target.nodeName.toLowerCase() !== 'input') return false;
1652
+ };
1653
+ // inject html source code - we are using a single table for this control - I know tables are considered bad, but it takes care of equal height columns and
1654
+ // this control really is tabular data, so I believe it is the right move
1655
+ var all = color.active.val('all');
1656
+ if (win.alphaPrecision < 0) win.alphaPrecision = 0;
1657
+ else if (win.alphaPrecision > 2) win.alphaPrecision = 2;
1658
+ var controlHtml = '<table class="jPicker" cellpadding="0" cellspacing="0"><tbody><tr><td rowspan="9"><div class="Map"><span class="Map1">&nbsp;</span><span class="Map2">&nbsp;</span><span class="Map3">&nbsp;</span><img src="' + images.clientPath + images.colorMap.arrow.file + '" class="Arrow"/></div></td><td rowspan="9"><div class="Bar"><span class="Map1">&nbsp;</span><span class="Map2">&nbsp;</span><span class="Map3">&nbsp;</span><span class="Map4">&nbsp;</span><span class="Map5">&nbsp;</span><span class="Map6">&nbsp;</span><img src="' + images.clientPath + images.colorBar.arrow.file + '" class="Arrow"/></div></td><td colspan="2" class="Preview">' + localization.text.newColor + '<div><span class="Active" title="' + localization.tooltips.colors.newColor + '">&nbsp;</span><span class="Current" title="' + localization.tooltips.colors.currentColor + '">&nbsp;</span></div>' + localization.text.currentColor + '</td><td rowspan="9" class="Button"><input type="button" class="Ok" value="' + localization.text.ok + '" title="' + localization.tooltips.buttons.ok + '"/><input type="button" class="Cancel" value="' + localization.text.cancel + '" title="' + localization.tooltips.buttons.cancel + '"/><hr/><div class="Grid">&nbsp;</div></td></tr><tr class="Hue"><td class="Radio"><label><input type="radio" aria-label="' + localization.tooltips.hue.radio + '" class="hue-radio" value="h"' + (settings.color.mode == 'h' ? ' checked="checked"' : '') + '/>H:</label></td><td class="Text"><input type="text" maxlength="3" value="' + (all != null ? all.h : '') + '" title="' + localization.tooltips.hue.textbox + '"/>&nbsp;&deg;</td></tr><tr class="Saturation"><td class="Radio"><label><input type="radio" aria-label="' + localization.tooltips.saturation.radio + '" value="s"' + (settings.color.mode == 's' ? ' checked="checked"' : '') + '/>S:</label></td><td class="Text"><input type="text" maxlength="3" value="' + (all != null ? all.s : '') + '" title="' + localization.tooltips.saturation.textbox + '"/>&nbsp;%</td></tr><tr class="Value"><td class="Radio"><label><input type="radio" aria-label="' + localization.tooltips.value.radio + '" value="v"' + (settings.color.mode == 'v' ? ' checked="checked"' : '') + '/>V:</label><br/><br/></td><td class="Text"><input type="text" maxlength="3" value="' + (all != null ? all.v : '') + '" title="' + localization.tooltips.value.textbox + '"/>&nbsp;%<br/><br/></td></tr><tr class="Red"><td class="Radio"><label><input type="radio" aria-label="' + localization.tooltips.red.radio + '" value="r"' + (settings.color.mode == 'r' ? ' checked="checked"' : '') + '/>R:</label></td><td class="Text"><input type="text" maxlength="3" value="' + (all != null ? all.r : '') + '" title="' + localization.tooltips.red.textbox + '"/></td></tr><tr class="Green"><td class="Radio"><label><input type="radio" title="' + localization.tooltips.green.radio + '" value="g"' + (settings.color.mode == 'g' ? ' checked="checked"' : '') + '/>G:</label></td><td class="Text"><input type="text" maxlength="3" value="' + (all != null ? all.g : '') + '" title="' + localization.tooltips.green.textbox + '"/></td></tr><tr class="Blue"><td class="Radio"><label><input type="radio" aria-label="' + localization.tooltips.blue.radio + '" value="b"' + (settings.color.mode == 'b' ? ' checked="checked"' : '') + '/>B:</label></td><td class="Text"><input type="text" maxlength="3" value="' + (all != null ? all.b : '') + '" title="' + localization.tooltips.blue.textbox + '"/></td></tr><tr class="Alpha"><td class="Radio"><label><input aria-label="' + localization.tooltips.alpha.radio + '" class="alpha-radio" type="radio" value="a"' + (settings.color.mode == 'a' ? ' checked="checked"' : '') + '/>A:</label></td><td class="Text"><input type="text" maxlength="' + (3 + win.alphaPrecision) + '" value="' + (all != null ? mPrecision((all.a * 100) / 255, win.alphaPrecision) : '') + '" title="' + localization.tooltips.alpha.textbox + '"/>&nbsp;%</td></tr><tr class="Hex"><td colspan="2" class="Text"><label>#:<input aria-label="' + localization.tooltips.hex.textbox + '" type="text" maxlength="6" class="Hex" value="' + (all != null ? all.hex : '') + '"/></label><input type="text" maxlength="2" class="AHex" value="' + (all != null ? all.ahex.substring(6) : '') + '" title="' + localization.tooltips.hex.alpha + '"/></td></tr></tbody></table>';
1659
+ container = $($this);
1660
+ container.html(controlHtml);
1661
+ // initialize the objects to the source code just injected
1662
+ var tbody = container.find('tbody').eq(0);
1663
+ colorMapDiv = tbody.find('div.Map').eq(0);
1664
+ colorBarDiv = tbody.find('div.Bar').eq(0);
1665
+ var MapMaps = colorMapDiv.find('span'),
1666
+ BarMaps = colorBarDiv.find('span');
1667
+ colorMapL1 = MapMaps.filter('.Map1').eq(0);
1668
+ colorMapL2 = MapMaps.filter('.Map2').eq(0);
1669
+ colorMapL3 = MapMaps.filter('.Map3').eq(0);
1670
+ colorBarL1 = BarMaps.filter('.Map1').eq(0);
1671
+ colorBarL2 = BarMaps.filter('.Map2').eq(0);
1672
+ colorBarL3 = BarMaps.filter('.Map3').eq(0);
1673
+ colorBarL4 = BarMaps.filter('.Map4').eq(0);
1674
+ colorBarL5 = BarMaps.filter('.Map5').eq(0);
1675
+ colorBarL6 = BarMaps.filter('.Map6').eq(0);
1676
+ // create color pickers and maps
1677
+ colorMap = new Slider(colorMapDiv, {
1678
+ map: {
1679
+ width: images.colorMap.width,
1680
+ height: images.colorMap.height
1681
+ },
1682
+ arrow: {
1683
+ image: images.clientPath + images.colorMap.arrow.file,
1684
+ width: images.colorMap.arrow.width,
1685
+ height: images.colorMap.arrow.height
1686
+ }
1687
+ });
1688
+ colorMap.bind(mapValueChanged);
1689
+ colorBar = new Slider(colorBarDiv, {
1690
+ map: {
1691
+ width: images.colorBar.width,
1692
+ height: images.colorBar.height
1693
+ },
1694
+ arrow: {
1695
+ image: images.clientPath + images.colorBar.arrow.file,
1696
+ width: images.colorBar.arrow.width,
1697
+ height: images.colorBar.arrow.height
1698
+ }
1699
+ });
1700
+ colorBar.bind(colorBarValueChanged);
1701
+ colorPicker = new ColorValuePicker(tbody, color.active, null, win.alphaPrecision);
1702
+ var hex = all != null ? all.hex : null,
1703
+ preview = tbody.find('.Preview'),
1704
+ button = tbody.find('.Button');
1705
+ activePreview = preview.find('.Active:first').css({
1706
+ backgroundColor: hex && '#' + hex || 'transparent'
1707
+ });
1708
+ currentPreview = preview.find('.Current:first').css({
1709
+ backgroundColor: hex && '#' + hex || 'transparent'
1710
+ }).bind('click', currentClicked);
1711
+ setAlpha.call($this, currentPreview, mPrecision(color.current.val('a') * 100) / 255, 4);
1712
+ okButton = button.find('.Ok:first').bind('click', okClicked);
1713
+ cancelButton = button.find('.Cancel:first').bind('click', cancelClicked);
1714
+ grid = button.find('.Grid:first');
1715
+ setTimeout(function () {
1716
+ setImg.call($this, colorMapL1, images.clientPath + 'Maps.png');
1717
+ setImg.call($this, colorMapL2, images.clientPath + 'Maps.png');
1718
+ setImg.call($this, colorMapL3, images.clientPath + 'map-opacity.png');
1719
+ setImg.call($this, colorBarL1, images.clientPath + 'Bars.png');
1720
+ setImg.call($this, colorBarL2, images.clientPath + 'Bars.png');
1721
+ setImg.call($this, colorBarL3, images.clientPath + 'Bars.png');
1722
+ setImg.call($this, colorBarL4, images.clientPath + 'Bars.png');
1723
+ setImg.call($this, colorBarL5, images.clientPath + 'bar-opacity.png');
1724
+ setImg.call($this, colorBarL6, images.clientPath + 'AlphaBar.png');
1725
+ setImg.call($this, preview.find('div').eq(0), images.clientPath + 'preview-opacity.png');
1726
+ }, 0);
1727
+ tbody.find('td.Radio input').bind('click', radioClicked);
1728
+ // initialize quick list
1729
+ if (color.quickList && color.quickList.length > 0) {
1730
+ var html = '', i;
1731
+ for (i = 0; i < color.quickList.length; i++) {
1732
+ /* if default colors are hex strings, change them to color objects */
1733
+ if ((typeof (color.quickList[i])).toString().toLowerCase() == 'string') color.quickList[i] = new Color({
1734
+ hex: color.quickList[i]
1735
+ });
1736
+ var alpha = color.quickList[i].val('a');
1737
+ var ahex = color.quickList[i].val('ahex');
1738
+ if (!win.alphaSupport && ahex) ahex = ahex.substring(0, 6) + 'ff';
1739
+ var quickHex = color.quickList[i].val('hex');
1740
+ html += '<span class="QuickColor"' + (ahex && ' title="#' + ahex + '"' || '') + ' style="background-color:' + (quickHex && '#' + quickHex || '') + ';' + (quickHex ? '' : 'background-image:url(' + images.clientPath + 'NoColor.png)') + (win.alphaSupport && alpha && alpha < 255 ? ';opacity:' + mPrecision(alpha / 255, 4) + ';filter:Alpha(opacity=' + mPrecision(alpha / 2.55, 4) + ')' : '') + '">&nbsp;</span>';
1741
+ }
1742
+ setImg.call($this, grid, images.clientPath + 'bar-opacity.png');
1743
+ grid.html(html);
1744
+ grid.find('.QuickColor').click(quickPickClicked);
1745
+ }
1746
+ setColorMode.call($this, settings.color.mode);
1747
+ color.active.bind(activeColorChanged);
1748
+ $.isFunction(liveCallback) && color.active.bind(liveCallback);
1749
+ color.current.bind(currentColorChanged);
1750
+ show.call($this);
1751
+ },
1752
+ destroy = function () {
1753
+ var elemData = $.data($this, 'wsjPicker') || $this;
1754
+ container.find('td.Radio input').unbind('click', radioClicked);
1755
+ currentPreview.unbind('click', currentClicked);
1756
+ cancelButton.unbind('click', cancelClicked);
1757
+ okButton.unbind('click', okClicked);
1758
+ container.find('.QuickColor').unbind('click', quickPickClicked);
1759
+ colorMapDiv = null;
1760
+ colorBarDiv = null;
1761
+ colorMapL1 = null;
1762
+ colorMapL2 = null;
1763
+ colorMapL3 = null;
1764
+ colorBarL1 = null;
1765
+ colorBarL2 = null;
1766
+ colorBarL3 = null;
1767
+ colorBarL4 = null;
1768
+ colorBarL5 = null;
1769
+ colorBarL6 = null;
1770
+ colorMap.destroy();
1771
+ colorMap = null;
1772
+ colorBar.destroy();
1773
+ colorBar = null;
1774
+ colorPicker.destroy();
1775
+ colorPicker = null;
1776
+ activePreview = null;
1777
+ currentPreview = null;
1778
+ okButton = null;
1779
+ cancelButton = null;
1780
+ grid = null;
1781
+ commitCallback = null;
1782
+ cancelCallback = null;
1783
+ liveCallback = null;
1784
+ container.html('');
1785
+
1786
+ for (i = 0; i < List.length; i++) {
1787
+ if (List[i] == elemData) {
1788
+ List.splice(i, 1);
1789
+ break;
1790
+ }
1791
+ }
1792
+ },
1793
+ images = settings.images, // local copies for YUI compressor
1794
+ localization = settings.localization,
1795
+ color = {
1796
+ active: (typeof (settings.color.active)).toString().toLowerCase() == 'string' ? new Color({
1797
+ ahex: !settings.window.alphaSupport && settings.color.active ? settings.color.active.substring(0, 6) + 'ff' : settings.color.active
1798
+ }) : new Color({
1799
+ ahex: !settings.window.alphaSupport && settings.color.active.val('ahex') ? settings.color.active.val('ahex').substring(0, 6) + 'ff' : settings.color.active.val('ahex')
1800
+ }),
1801
+ current: (typeof (settings.color.active)).toString().toLowerCase() == 'string' ? new Color({
1802
+ ahex: !settings.window.alphaSupport && settings.color.active ? settings.color.active.substring(0, 6) + 'ff' : settings.color.active
1803
+ }) : new Color({
1804
+ ahex: !settings.window.alphaSupport && settings.color.active.val('ahex') ? settings.color.active.val('ahex').substring(0, 6) + 'ff' : settings.color.active.val('ahex')
1805
+ }),
1806
+ quickList: settings.color.quickList
1807
+ };
1808
+ elemExtend(false, $this, // public properties, methods, and callbacks
1809
+ {
1810
+ commitCallback: commitCallback, // commitCallback function can be overridden to return the selected color to a method you specify when the user clicks "OK"
1811
+ liveCallback: liveCallback, // liveCallback function can be overridden to return the selected color to a method you specify in live mode (continuous update)
1812
+ cancelCallback: cancelCallback, // cancelCallback function can be overridden to a method you specify when the user clicks "Cancel"
1813
+ color: color,
1814
+ setColorMode: function(val){
1815
+ $('input[type="radio"][value="'+val+'"]', container).prop('checked', true).triggerHandler('click');
1816
+ },
1817
+ settings: settings,
1818
+ show: show,
1819
+ hide: hide,
1820
+ destroy: destroy // destroys this control entirely, removing all events and objects, and removing itself from the List
1821
+ });
1822
+ List.push($.data($this, 'wsjPicker') || $this);
1823
+ setTimeout(function () {
1824
+ initialize.call($this);
1825
+ }, 0);
1826
+ });
1827
+ };
1828
+ $.fn.wsjPicker.defaults = /* jPicker defaults - you can change anything in this section (such as the clientPath to your images) without fear of breaking the program */ {
1829
+ window: {
1830
+ liveUpdate: true,
1831
+ /* set false if you want the user to have to click "OK" before the binded input box updates values (always "true" for expandable picker) */
1832
+ alphaSupport: false,
1833
+ /* set to true to enable alpha picking */
1834
+ alphaPrecision: 0
1835
+ /* set decimal precision for alpha percentage display - hex codes do not map directly to percentage integers - range 0-2 */
1836
+ },
1837
+ color: {
1838
+ mode: 'h',
1839
+ /* acceptabled values "h" (hue), "s" (saturation), "v" (value), "r" (red), "g" (green), "b" (blue), "a" (alpha) */
1840
+ active: new Color({ahex: '#000000ff'}),
1841
+ /* acceptable values are any declared $.jPicker.Color object or string HEX value (e.g. #ffc000) WITH OR WITHOUT the "#" prefix */
1842
+ quickList: /* the quick pick color list */ [
1843
+ new Color({
1844
+ h: 360,
1845
+ s: 33,
1846
+ v: 100
1847
+ }), /* acceptable values are any declared $.jPicker.Color object or string HEX value (e.g. #ffc000) WITH OR WITHOUT the "#" prefix */
1848
+ new Color({
1849
+ h: 360,
1850
+ s: 66,
1851
+ v: 100
1852
+ }),
1853
+ new Color({
1854
+ h: 360,
1855
+ s: 100,
1856
+ v: 100
1857
+ }),
1858
+ new Color({
1859
+ h: 360,
1860
+ s: 100,
1861
+ v: 75
1862
+ }),
1863
+ new Color({
1864
+ h: 360,
1865
+ s: 100,
1866
+ v: 50
1867
+ }),
1868
+ new Color({
1869
+ h: 180,
1870
+ s: 0,
1871
+ v: 100
1872
+ }),
1873
+ new Color({
1874
+ h: 30,
1875
+ s: 33,
1876
+ v: 100
1877
+ }),
1878
+ new Color({
1879
+ h: 30,
1880
+ s: 66,
1881
+ v: 100
1882
+ }),
1883
+ new Color({
1884
+ h: 30,
1885
+ s: 100,
1886
+ v: 100
1887
+ }),
1888
+ new Color({
1889
+ h: 30,
1890
+ s: 100,
1891
+ v: 75
1892
+ }),
1893
+ new Color({
1894
+ h: 30,
1895
+ s: 100,
1896
+ v: 50
1897
+ }),
1898
+ new Color({
1899
+ h: 180,
1900
+ s: 0,
1901
+ v: 90
1902
+ }),
1903
+ new Color({
1904
+ h: 60,
1905
+ s: 33,
1906
+ v: 100
1907
+ }),
1908
+ new Color({
1909
+ h: 60,
1910
+ s: 66,
1911
+ v: 100
1912
+ }),
1913
+ new Color({
1914
+ h: 60,
1915
+ s: 100,
1916
+ v: 100
1917
+ }),
1918
+ new Color({
1919
+ h: 60,
1920
+ s: 100,
1921
+ v: 75
1922
+ }),
1923
+ new Color({
1924
+ h: 60,
1925
+ s: 100,
1926
+ v: 50
1927
+ }),
1928
+ new Color({
1929
+ h: 180,
1930
+ s: 0,
1931
+ v: 80
1932
+ }),
1933
+ new Color({
1934
+ h: 90,
1935
+ s: 33,
1936
+ v: 100
1937
+ }),
1938
+ new Color({
1939
+ h: 90,
1940
+ s: 66,
1941
+ v: 100
1942
+ }),
1943
+ new Color({
1944
+ h: 90,
1945
+ s: 100,
1946
+ v: 100
1947
+ }),
1948
+ new Color({
1949
+ h: 90,
1950
+ s: 100,
1951
+ v: 75
1952
+ }),
1953
+ new Color({
1954
+ h: 90,
1955
+ s: 100,
1956
+ v: 50
1957
+ }),
1958
+ new Color({
1959
+ h: 180,
1960
+ s: 0,
1961
+ v: 70
1962
+ }),
1963
+ new Color({
1964
+ h: 120,
1965
+ s: 33,
1966
+ v: 100
1967
+ }),
1968
+ new Color({
1969
+ h: 120,
1970
+ s: 66,
1971
+ v: 100
1972
+ }),
1973
+ new Color({
1974
+ h: 120,
1975
+ s: 100,
1976
+ v: 100
1977
+ }),
1978
+ new Color({
1979
+ h: 120,
1980
+ s: 100,
1981
+ v: 75
1982
+ }),
1983
+ new Color({
1984
+ h: 120,
1985
+ s: 100,
1986
+ v: 50
1987
+ }),
1988
+ new Color({
1989
+ h: 180,
1990
+ s: 0,
1991
+ v: 60
1992
+ }),
1993
+ new Color({
1994
+ h: 150,
1995
+ s: 33,
1996
+ v: 100
1997
+ }),
1998
+ new Color({
1999
+ h: 150,
2000
+ s: 66,
2001
+ v: 100
2002
+ }),
2003
+ new Color({
2004
+ h: 150,
2005
+ s: 100,
2006
+ v: 100
2007
+ }),
2008
+ new Color({
2009
+ h: 150,
2010
+ s: 100,
2011
+ v: 75
2012
+ }),
2013
+ new Color({
2014
+ h: 150,
2015
+ s: 100,
2016
+ v: 50
2017
+ }),
2018
+ new Color({
2019
+ h: 180,
2020
+ s: 0,
2021
+ v: 50
2022
+ }),
2023
+ new Color({
2024
+ h: 180,
2025
+ s: 33,
2026
+ v: 100
2027
+ }),
2028
+ new Color({
2029
+ h: 180,
2030
+ s: 66,
2031
+ v: 100
2032
+ }),
2033
+ new Color({
2034
+ h: 180,
2035
+ s: 100,
2036
+ v: 100
2037
+ }),
2038
+ new Color({
2039
+ h: 180,
2040
+ s: 100,
2041
+ v: 75
2042
+ }),
2043
+ new Color({
2044
+ h: 180,
2045
+ s: 100,
2046
+ v: 50
2047
+ }),
2048
+ new Color({
2049
+ h: 180,
2050
+ s: 0,
2051
+ v: 40
2052
+ }),
2053
+ new Color({
2054
+ h: 210,
2055
+ s: 33,
2056
+ v: 100
2057
+ }),
2058
+ new Color({
2059
+ h: 210,
2060
+ s: 66,
2061
+ v: 100
2062
+ }),
2063
+ new Color({
2064
+ h: 210,
2065
+ s: 100,
2066
+ v: 100
2067
+ }),
2068
+ new Color({
2069
+ h: 210,
2070
+ s: 100,
2071
+ v: 75
2072
+ }),
2073
+ new Color({
2074
+ h: 210,
2075
+ s: 100,
2076
+ v: 50
2077
+ }),
2078
+ new Color({
2079
+ h: 180,
2080
+ s: 0,
2081
+ v: 30
2082
+ }),
2083
+ new Color({
2084
+ h: 240,
2085
+ s: 33,
2086
+ v: 100
2087
+ }),
2088
+ new Color({
2089
+ h: 240,
2090
+ s: 66,
2091
+ v: 100
2092
+ }),
2093
+ new Color({
2094
+ h: 240,
2095
+ s: 100,
2096
+ v: 100
2097
+ }),
2098
+ new Color({
2099
+ h: 240,
2100
+ s: 100,
2101
+ v: 75
2102
+ }),
2103
+ new Color({
2104
+ h: 240,
2105
+ s: 100,
2106
+ v: 50
2107
+ }),
2108
+ new Color({
2109
+ h: 180,
2110
+ s: 0,
2111
+ v: 20
2112
+ }),
2113
+ new Color({
2114
+ h: 270,
2115
+ s: 33,
2116
+ v: 100
2117
+ }),
2118
+ new Color({
2119
+ h: 270,
2120
+ s: 66,
2121
+ v: 100
2122
+ }),
2123
+ new Color({
2124
+ h: 270,
2125
+ s: 100,
2126
+ v: 100
2127
+ }),
2128
+ new Color({
2129
+ h: 270,
2130
+ s: 100,
2131
+ v: 75
2132
+ }),
2133
+ new Color({
2134
+ h: 270,
2135
+ s: 100,
2136
+ v: 50
2137
+ }),
2138
+ new Color({
2139
+ h: 180,
2140
+ s: 0,
2141
+ v: 10
2142
+ }),
2143
+ new Color({
2144
+ h: 300,
2145
+ s: 33,
2146
+ v: 100
2147
+ }),
2148
+ new Color({
2149
+ h: 300,
2150
+ s: 66,
2151
+ v: 100
2152
+ }),
2153
+ new Color({
2154
+ h: 300,
2155
+ s: 100,
2156
+ v: 100
2157
+ }),
2158
+ new Color({
2159
+ h: 300,
2160
+ s: 100,
2161
+ v: 75
2162
+ }),
2163
+ new Color({
2164
+ h: 300,
2165
+ s: 100,
2166
+ v: 50
2167
+ }),
2168
+ new Color({
2169
+ h: 180,
2170
+ s: 0,
2171
+ v: 0
2172
+ }),
2173
+ new Color({
2174
+ h: 330,
2175
+ s: 33,
2176
+ v: 100
2177
+ }),
2178
+ new Color({
2179
+ h: 330,
2180
+ s: 66,
2181
+ v: 100
2182
+ }),
2183
+ new Color({
2184
+ h: 330,
2185
+ s: 100,
2186
+ v: 100
2187
+ }),
2188
+ new Color({
2189
+ h: 330,
2190
+ s: 100,
2191
+ v: 75
2192
+ }),
2193
+ new Color({
2194
+ h: 330,
2195
+ s: 100,
2196
+ v: 50
2197
+ }),
2198
+ new Color({
2199
+ h: 180,
2200
+ s: 0,
2201
+ v: 0
2202
+ })
2203
+ ]
2204
+ },
2205
+ images: {
2206
+ clientPath: '/jPicker/images/',
2207
+ /* Path to image files */
2208
+ colorMap: {
2209
+ width: 256,
2210
+ height: 256,
2211
+ arrow: {
2212
+ file: 'mappoint.gif',
2213
+ /* ColorMap arrow icon */
2214
+ width: 15,
2215
+ height: 15
2216
+ }
2217
+ },
2218
+ colorBar: {
2219
+ width: 20,
2220
+ height: 256,
2221
+ arrow: {
2222
+ file: 'rangearrows.gif',
2223
+ /* ColorBar arrow icon */
2224
+ width: 20,
2225
+ height: 7
2226
+ }
2227
+ }
2228
+ },
2229
+ localization: /* alter these to change the text presented by the picker (e.g. different language) */ {
2230
+ text: {
2231
+ title: 'Drag Markers To Pick A Color',
2232
+ newColor: 'new',
2233
+ currentColor: 'current',
2234
+ ok: 'OK',
2235
+ cancel: 'Cancel'
2236
+ },
2237
+ tooltips: {
2238
+ colors: {
2239
+ newColor: 'New Color - Press &ldquo;OK&rdquo; To Commit',
2240
+ currentColor: 'Click To Revert To Original Color'
2241
+ },
2242
+ buttons: {
2243
+ ok: 'Commit To This Color Selection',
2244
+ cancel: 'Cancel And Revert To Original Color'
2245
+ },
2246
+ hue: {
2247
+ radio: 'Set To &ldquo;Hue&rdquo; Color Mode',
2248
+ textbox: 'Enter A &ldquo;Hue&rdquo; Value (0-360&deg;)'
2249
+ },
2250
+ saturation: {
2251
+ radio: 'Set To &ldquo;Saturation&rdquo; Color Mode',
2252
+ textbox: 'Enter A &ldquo;Saturation&rdquo; Value (0-100%)'
2253
+ },
2254
+ value: {
2255
+ radio: 'Set To &ldquo;Value&rdquo; Color Mode',
2256
+ textbox: 'Enter A &ldquo;Value&rdquo; Value (0-100%)'
2257
+ },
2258
+ red: {
2259
+ radio: 'Set To &ldquo;Red&rdquo; Color Mode',
2260
+ textbox: 'Enter A &ldquo;Red&rdquo; Value (0-255)'
2261
+ },
2262
+ green: {
2263
+ radio: 'Set To &ldquo;Green&rdquo; Color Mode',
2264
+ textbox: 'Enter A &ldquo;Green&rdquo; Value (0-255)'
2265
+ },
2266
+ blue: {
2267
+ radio: 'Set To &ldquo;Blue&rdquo; Color Mode',
2268
+ textbox: 'Enter A &ldquo;Blue&rdquo; Value (0-255)'
2269
+ },
2270
+ alpha: {
2271
+ radio: 'Set To &ldquo;Alpha&rdquo; Color Mode',
2272
+ textbox: 'Enter A &ldquo;Alpha&rdquo; Value (0-100)'
2273
+ },
2274
+ hex: {
2275
+ textbox: 'Enter A &ldquo;Hex&rdquo; Color Value (#000000-#ffffff)',
2276
+ alpha: 'Enter A &ldquo;Alpha&rdquo; Value (#00-#ff)'
2277
+ }
2278
+ }
2279
+ }
2280
+ };
2281
+ })(jQuery, '1.1.6wsmod');
2282
+
2283
+ webshims.register('color-picker', function($, webshims, window, document, undefined, options){
2284
+ "use strict";
2285
+ var picker = webshims.picker;
2286
+
2287
+ picker.commonColorInit = function(data){
2288
+ var popover = data.popover;
2289
+ popover.element.on({
2290
+ wspopovershow: function(){
2291
+ data.element.triggerHandler('wsupdatevalue');
2292
+ picker._genericSetFocus.call(data, $('input.Hex', popover.element));
2293
+ }
2294
+ });
2295
+ };
2296
+
2297
+ picker.color.showPickerContent = (function(){
2298
+ var _init, curData;
2299
+ var jpicker = $('<div class="ws-jpicker" />');
2300
+ $.fn.wsjPicker.defaults.images.clientPath = webshims.cfg.basePath + 'jpicker/images/';
2301
+ var jPickerApi;
2302
+
2303
+ var fns = {
2304
+ setPicker: function(data){
2305
+
2306
+
2307
+ var mode = $(data.orig).data('colormode') || 'h';
2308
+ if(!data.alpha.length){
2309
+ jpicker.addClass('no-alpha-picker');
2310
+ if(mode == 'a'){
2311
+ mode = 'h';
2312
+ }
2313
+ } else {
2314
+ jpicker.removeClass('no-alpha-picker');
2315
+ }
2316
+
2317
+ if(mode != jPickerApi.settings.color.mode){
2318
+ jPickerApi.setColorMode(mode);
2319
+ }
2320
+
2321
+ },
2322
+ setInputColor: function(data){
2323
+ var oldAlpha;
2324
+ var colorData = jPickerApi.color.active.val();
2325
+ var value = '#'+colorData.hex;
2326
+ if(data.alpha.length){
2327
+ oldAlpha = data.alpha.prop('value');
2328
+ data.alpha.prop('value', colorData.a / (255 / (data.alpha.prop('max') || 1)));
2329
+ }
2330
+ $(data.orig).data('colormode', jPickerApi.settings.color.mode);
2331
+ picker._actions.changeInput(value, data.popover, data);
2332
+ if(data.alpha.length && oldAlpha != data.alpha.prop('value')){
2333
+ data.alpha.trigger('input').trigger('change');
2334
+ }
2335
+ return value;
2336
+ }
2337
+ // ,
2338
+ // triggerInputColor: function(data){
2339
+ // var oldAlpha;
2340
+ // var colorData = jPickerApi.color.active.val();
2341
+ // var value = '#'+colorData.hex;
2342
+ // if(data.alpha.length){
2343
+ // oldAlpha = data.alpha.prop('value');
2344
+ // data.alpha.prop('value', colorData.a / (255 / (data.alpha.prop('max') || 1)));
2345
+ // }
2346
+ // data.setInput(value);
2347
+ // if(data.alpha.length && oldAlpha != data.alpha.prop('value')){
2348
+ // data.alpha.triggerHandler('input');
2349
+ // }
2350
+ // return value;
2351
+ // }
2352
+ };
2353
+ var pickerSet = function(fn, data, value){
2354
+ if(data == curData && fns[fn]){
2355
+ fns[fn](data);
2356
+ }
2357
+ };
2358
+ var createPicker = function(data){
2359
+
2360
+ jPickerApi = jpicker.data('wsjPicker');
2361
+
2362
+ if(!jPickerApi){
2363
+ jpicker.empty().wsjPicker(
2364
+ {},
2365
+ function(color){
2366
+ if(curData){
2367
+ pickerSet('setInputColor', curData);
2368
+ }
2369
+ },
2370
+ false,
2371
+ function(color){
2372
+ if(curData){
2373
+ picker._actions.cancel('#' + color.val().hex, curData.popover, curData);
2374
+ }
2375
+ }
2376
+ );
2377
+ jPickerApi = jpicker.data('wsjPicker');
2378
+ }
2379
+ };
2380
+
2381
+ var implementPickerFor = function(data){
2382
+ createPicker();
2383
+ if( data != curData){
2384
+ if(curData){
2385
+ curData.popover.hide();
2386
+ }
2387
+ curData = data;
2388
+ data.popover.contentElement.html(jpicker);
2389
+ pickerSet('setPicker', data);
2390
+ }
2391
+ };
2392
+
2393
+ return function(data){
2394
+ if(!data._popoverinit){
2395
+ picker.commonInit(data, data.popover);
2396
+ picker.commonColorInit(data);
2397
+ }
2398
+
2399
+ var value = data.parseValue();
2400
+ implementPickerFor(data);
2401
+
2402
+ value += (data.alpha.length) ?
2403
+ $.wsjPicker.ColorMethods.intToHex( (data.alpha.prop('value') || 1) * (255 / (data.alpha.prop('max') || 1)) ) :
2404
+ 'ff'
2405
+ ;
2406
+ jPickerApi.color.active.val('ahex', value);
2407
+ jPickerApi.color.current.val('ahex', value);
2408
+
2409
+ data._popoverinit = true;
2410
+ };
2411
+ })();
2412
+ if(options && options._types && $.inArray('color', options._types) == -1){
2413
+ webshims.error('[type="color"] used without adding it to the types config.');
2414
+ }
2415
+ });