WooCommerce Checkout Manager - Version 4.4.6

Version Description

  • Fix: woocommerce checkout undefined class
  • Improvement: woocommerce checkout color field rebuilt
  • Improvement: removed unnecessary scripts
Download this release

Release Info

Developer quadlayers
Plugin Icon 128x128 WooCommerce Checkout Manager
Version 4.4.6
Comparing to
See all releases

Code changes from version 4.4.5 to 4.4.6

Files changed (89) hide show
  1. assets/css/wooccm.css.map +1 -0
  2. assets/js/wooccm-checkout.js +39 -33
  3. assets/js/wooccm-checkout.min.js +1 -1
  4. {includes/pickers/css → assets/old}/backend_css.css +0 -0
  5. {includes/templates/js → assets/old}/billing_script_wccs.js +0 -0
  6. {includes/templates/admin → assets/old}/edit-order-uploads-button_style.css +0 -0
  7. {includes/templates/admin → assets/old}/edit-order-uploads-file_editing_table.css +0 -0
  8. {includes/templates/js → assets/old}/script_wccs.js +0 -0
  9. {includes/templates/js → assets/old}/shipping_script_wccs.js +0 -0
  10. {includes/templates/admin → assets/old}/woocheckout-export.css +0 -0
  11. {includes/pickers → assets/timepicker}/i18n/i18n.html +0 -0
  12. {includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-cs.js +0 -0
  13. {includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-de.js +0 -0
  14. {includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-es.js +0 -0
  15. {includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-fr.js +0 -0
  16. {includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-hr.js +0 -0
  17. {includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-it.js +0 -0
  18. {includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-ja.js +0 -0
  19. {includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-nl.js +0 -0
  20. {includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-pl.js +0 -0
  21. {includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-pt.js +0 -0
  22. {includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-sl.js +0 -0
  23. {includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-sv.js +0 -0
  24. {includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-tr.js +0 -0
  25. {includes/pickers → assets/timepicker}/jquery.ui.timepicker.css +0 -0
  26. {includes/pickers → assets/timepicker}/jquery.ui.timepicker.js +0 -0
  27. changelog.txt +0 -25
  28. includes/admin.php +5 -5
  29. includes/pickers/caman/.codoopts +0 -5
  30. includes/pickers/caman/.npmignore +0 -5
  31. includes/pickers/caman/.travis.yml +0 -8
  32. includes/pickers/caman/Cakefile +0 -203
  33. includes/pickers/caman/LICENSE +0 -10
  34. includes/pickers/caman/README.md +0 -115
  35. includes/pickers/caman/adapters/jquery.js +0 -10
  36. includes/pickers/caman/api/LICENSE.html +0 -145
  37. includes/pickers/caman/api/README.md.html +0 -155
  38. includes/pickers/caman/api/assets/codo.css +0 -1
  39. includes/pickers/caman/api/assets/codo.js +0 -21
  40. includes/pickers/caman/api/assets/search_data.js +0 -1
  41. includes/pickers/caman/api/class_index.html +0 -432
  42. includes/pickers/caman/api/class_list.html +0 -142
  43. includes/pickers/caman/api/classes/Caman.html +0 -1509
  44. includes/pickers/caman/api/classes/Caman/Analyze.html +0 -197
  45. includes/pickers/caman/api/classes/Caman/Blender.html +0 -236
  46. includes/pickers/caman/api/classes/Caman/Calculate.html +0 -475
  47. includes/pickers/caman/api/classes/Caman/Convert.html +0 -1002
  48. includes/pickers/caman/api/classes/Caman/Event.html +0 -288
  49. includes/pickers/caman/api/classes/Caman/Filter.html +0 -186
  50. includes/pickers/caman/api/classes/Caman/IO.html +0 -378
  51. includes/pickers/caman/api/classes/Caman/Layer.html +0 -318
  52. includes/pickers/caman/api/classes/Caman/Logger.html +0 -165
  53. includes/pickers/caman/api/classes/Caman/Pixel.html +0 -379
  54. includes/pickers/caman/api/classes/Caman/Plugin.html +0 -181
  55. includes/pickers/caman/api/classes/Caman/Renderer.html +0 -385
  56. includes/pickers/caman/api/classes/Caman/Store.html +0 -233
  57. includes/pickers/caman/api/classes/CamanParser.html +0 -243
  58. includes/pickers/caman/api/classes/Module.html +0 -265
  59. includes/pickers/caman/api/classes/Util.html +0 -217
  60. includes/pickers/caman/api/extra_list.html +0 -33
  61. includes/pickers/caman/api/file_list.html +0 -126
  62. includes/pickers/caman/api/files/core/analyze.coffee.html +0 -135
  63. includes/pickers/caman/api/files/core/autoload.coffee.html +0 -162
  64. includes/pickers/caman/api/files/core/blender.coffee.html +0 -135
  65. includes/pickers/caman/api/files/core/calculate.coffee.html +0 -135
  66. includes/pickers/caman/api/files/core/caman.coffee.html +0 -135
  67. includes/pickers/caman/api/files/core/convert.coffee.html +0 -135
  68. includes/pickers/caman/api/files/core/event.coffee.html +0 -135
  69. includes/pickers/caman/api/files/core/filter.coffee.html +0 -135
  70. includes/pickers/caman/api/files/core/io.coffee.html +0 -245
  71. includes/pickers/caman/api/files/core/layer.coffee.html +0 -135
  72. includes/pickers/caman/api/files/core/pixel.coffee.html +0 -135
  73. includes/pickers/caman/api/files/core/plugin.coffee.html +0 -135
  74. includes/pickers/caman/api/files/core/renderer.coffee.html +0 -135
  75. includes/pickers/caman/api/files/core/store.coffee.html +0 -135
  76. includes/pickers/caman/api/files/core/util.coffee.html +0 -162
  77. includes/pickers/caman/api/index.html +0 -14
  78. includes/pickers/caman/api/method_list.html +0 -1035
  79. includes/pickers/caman/api/mixin_list.html +0 -28
  80. includes/pickers/caman/bower.json +0 -14
  81. includes/pickers/caman/dist/caman.css +0 -223
  82. includes/pickers/caman/dist/caman.full.js +0 -3676
  83. includes/pickers/caman/dist/caman.full.map +0 -1
  84. includes/pickers/caman/dist/caman.full.min.js +0 -251
  85. includes/pickers/caman/dist/caman.full.pack.js +0 -1
  86. includes/pickers/caman/dist/caman.js +0 -2578
  87. includes/pickers/caman/dist/caman.map +0 -1
  88. includes/pickers/caman/dist/caman.min.js +0 -205
  89. includes/pickers/caman/dist/caman.pack.js +0 -1
assets/css/wooccm.css.map ADDED
@@ -0,0 +1 @@
 
1
+ {"version":3,"sources":["../less/wooccm.less"],"names":[],"mappings":"AAAA;EACE,WAAA;;AACA,gBAAC;AACC,gBAAC;EACD,SAAQ,EAAR;EACA,cAAA;;AAEF,gBAAC;EACC,WAAA;;AAMF,OAAC;EACC,kBAAA;EACA,0BAAA;;AAFF,OAAC,iBAIC;EACE,kBAAA;EACA,MAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,YAAW,kBAAX;EACA,gBAAA;EACA,cAAA;EACA,eAAA;;AAMN;EACE,cAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;EACA,sBAAA;;AANF,kBAQE;EACE,aAAA;EACA,uBAAA;EACA,oBAAA;EACA,sBAAA;EACA,uBAAA;EACA,UAAA;EAEA,kBAAA;;AAhBJ,kBAQE,mBAWE;EACE,UAAA;EACA,kBAAA;EACA,QAAA;EACA,WAAA;EACA,WAAA;EACA,YAAA;EACA,sBAAA;EACA,cAAA;EACA,iBAAA;EACA,kBAAA;EACA,cAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,eAAA;EACA,iBAAA;;AAnCN,kBAQE,mBA8BE;EACE,WAAA;EACA,gBAAA;;AAxCN,kBAQE,mBAmCE;EACE,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,gBAAA;EACA,WAAA;EACA,iBAAA;EACA,kBAAA;EACA,gBAAA;;AAnDN,kBAQE,mBAmCE,mCAUE;EACE,gBAAA;EACA,iBAAA;EACA,kBAAA;EACA,QAAA;EACA,YAAA;EACA,WAAA;EACA,YAAA;;AAEA,kBAtDN,mBAmCE,mCAUE,MASG;EACC,MAAA;EACA,SAAA;EACA,OAAA;EACA,QAAA;EAEA,gBAAA;EACA,YAAA;EACA,WAAA","file":"wooccm.css"}
assets/js/wooccm-checkout.js CHANGED
@@ -17,12 +17,10 @@
17
  var unblock = function ($node) {
18
  $node.removeClass('processing').unblock();
19
  };
20
-
21
  var append_image = function (list, i, source, name, filetype) {
22
 
23
  var $field_list = $(list),
24
  source_class;
25
-
26
  if (filetype.match('image.*')) {
27
  source_class = 'image';
28
  } else if (filetype.match('application/ms.*')) {
@@ -55,26 +53,21 @@
55
  </span>\n\
56
  </span>\n\
57
  </span>';
58
-
59
  $field_list.append(html).fadeIn();
60
-
61
  }
62
 
63
 
64
- // Field
65
- // ---------------------------------------------------------------------------
66
 
67
  var fileList = [];
68
-
69
  $('.wooccmupload-field').each(function (i, field) {
70
 
71
  var $field = $(field),
72
  $button_file = $field.find('[type=file]'),
73
  $button_click = $field.find('.wooccmupload_button'),
74
  $field_list = $field.find('.wooccmupload_list');
75
-
76
  fileList[$field.attr('id')] = [];
77
-
78
  // Simulate click
79
  // -------------------------------------------------------------------------
80
 
@@ -82,21 +75,18 @@
82
  e.preventDefault();
83
  $button_file.trigger('click');
84
  });
85
-
86
  // Delete images
87
  // ---------------------------------------------------------------------------
88
 
89
  $field_list.on('click', '.wooccmupload_file_delete', function (e) {
90
  $(this).closest('.wooccmupload_file').remove();
91
  });
92
-
93
  // Append images
94
  // -------------------------------------------------------------------------
95
 
96
  $button_file.on('change', function (e) {
97
 
98
  var files = $(this)[0].files;
99
-
100
  if (files.length) {
101
 
102
  if (window.FileReader) {
@@ -104,7 +94,6 @@
104
  $.each(files, function (i, file) {
105
 
106
  var count = $field_list.find('span[data-file_id]').length + i;
107
-
108
  if (count >= wooccm.limit.max_files) {
109
  alert('Exeeds max files limit of ' + wooccm.limit.max_files);
110
  return false;
@@ -116,27 +105,21 @@
116
  }
117
 
118
  reader = new FileReader();
119
-
120
  reader.onload = (function (theFile) {
121
  return function (e) {
122
 
123
  setTimeout(function () {
124
  append_image($field_list, fileList[$field.attr('id')].push(file) - 1, e.target.result, theFile.name, theFile.type);
125
  }, 200);
126
-
127
-
128
  };
129
  })(file);
130
-
131
  console.log(file.name);
132
  reader.readAsDataURL(file);
133
-
134
  });
135
  }
136
  }
137
  });
138
  });
139
-
140
  // Add class on place order reload if upload field exists
141
  // ---------------------------------------------------------------------------
142
 
@@ -146,31 +129,27 @@
146
  $place_order = $order_review.find('#place_order'),
147
  $fields = $('.wooccmupload-field'),
148
  fields = $fields.length;
149
-
150
  if (fields) {
151
  $place_order.addClass('wooccm-upload-process');
152
  }
153
 
154
  });
155
-
156
  // Upload files
157
  // ---------------------------------------------------------------------------
158
 
159
  $(document).on('click', '#place_order.wooccm-upload-process', function (e) {
160
 
161
  e.preventDefault();
162
-
163
  var $form = $('form.checkout'),
164
  $place_order = $(this),
165
  $results = $('#wooccm_checkout_attachment_results'),
166
  $fields = $('.wooccmupload-field'),
167
  fields = $fields.length;
168
-
169
  $fields.each(function (i, field) {
170
 
171
  var $field = $(field),
172
  $attachment_ids = $field.find('.wooccmupload_field'),
173
- $field_list = $field.find('.wooccmupload_list');//,
174
 
175
  if (window.FormData && fileList[$field.attr('id')].length) {
176
 
@@ -180,11 +159,9 @@
180
  }
181
 
182
  var data = new FormData();
183
-
184
  $field_list.find('span[data-file_id]').each(function (i, file) {
185
 
186
  var file_id = $(file).data('file_id');
187
-
188
  if (i > wooccm.limit.max_files) {
189
  console.log('Exeeds max files limit of ' + wooccm.limit.max_files);
190
  return false;
@@ -201,16 +178,12 @@
201
  }
202
 
203
  console.log('We\'re ready to upload ' + fileList[$field.attr('id')][file_id].name);
204
-
205
  data.append('wooccm_checkout_attachment_upload[]', fileList[$field.attr('id')][file_id]);
206
-
207
  });
208
-
209
  //return;
210
 
211
  data.append('action', 'wooccm_checkout_attachment_upload');
212
  data.append('nonce', wooccm.nonce);
213
-
214
  $.ajax({
215
  async: false,
216
  url: wooccm.ajaxurl,
@@ -238,7 +211,6 @@
238
  //console.log('ajax: fields = ' + fields);
239
  }
240
  });
241
-
242
  } else {
243
  fields = fields - 1;
244
  //console.log('no ajax: fields = ' + fields);
@@ -257,13 +229,47 @@
257
  //return false;
258
  //}
259
  });
260
-
261
-
262
  // Update checkout fees
263
  // ---------------------------------------------------------------------------
264
 
265
  $(document).on('change', '.wooccm-add-checkout-fees', function (e) {
266
  $('body').trigger('update_checkout');
267
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
268
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
269
  })(jQuery);
17
  var unblock = function ($node) {
18
  $node.removeClass('processing').unblock();
19
  };
 
20
  var append_image = function (list, i, source, name, filetype) {
21
 
22
  var $field_list = $(list),
23
  source_class;
 
24
  if (filetype.match('image.*')) {
25
  source_class = 'image';
26
  } else if (filetype.match('application/ms.*')) {
53
  </span>\n\
54
  </span>\n\
55
  </span>';
 
56
  $field_list.append(html).fadeIn();
 
57
  }
58
 
59
 
60
+ // Field
61
+ // ---------------------------------------------------------------------------
62
 
63
  var fileList = [];
 
64
  $('.wooccmupload-field').each(function (i, field) {
65
 
66
  var $field = $(field),
67
  $button_file = $field.find('[type=file]'),
68
  $button_click = $field.find('.wooccmupload_button'),
69
  $field_list = $field.find('.wooccmupload_list');
 
70
  fileList[$field.attr('id')] = [];
 
71
  // Simulate click
72
  // -------------------------------------------------------------------------
73
 
75
  e.preventDefault();
76
  $button_file.trigger('click');
77
  });
 
78
  // Delete images
79
  // ---------------------------------------------------------------------------
80
 
81
  $field_list.on('click', '.wooccmupload_file_delete', function (e) {
82
  $(this).closest('.wooccmupload_file').remove();
83
  });
 
84
  // Append images
85
  // -------------------------------------------------------------------------
86
 
87
  $button_file.on('change', function (e) {
88
 
89
  var files = $(this)[0].files;
 
90
  if (files.length) {
91
 
92
  if (window.FileReader) {
94
  $.each(files, function (i, file) {
95
 
96
  var count = $field_list.find('span[data-file_id]').length + i;
 
97
  if (count >= wooccm.limit.max_files) {
98
  alert('Exeeds max files limit of ' + wooccm.limit.max_files);
99
  return false;
105
  }
106
 
107
  reader = new FileReader();
 
108
  reader.onload = (function (theFile) {
109
  return function (e) {
110
 
111
  setTimeout(function () {
112
  append_image($field_list, fileList[$field.attr('id')].push(file) - 1, e.target.result, theFile.name, theFile.type);
113
  }, 200);
 
 
114
  };
115
  })(file);
 
116
  console.log(file.name);
117
  reader.readAsDataURL(file);
 
118
  });
119
  }
120
  }
121
  });
122
  });
 
123
  // Add class on place order reload if upload field exists
124
  // ---------------------------------------------------------------------------
125
 
129
  $place_order = $order_review.find('#place_order'),
130
  $fields = $('.wooccmupload-field'),
131
  fields = $fields.length;
 
132
  if (fields) {
133
  $place_order.addClass('wooccm-upload-process');
134
  }
135
 
136
  });
 
137
  // Upload files
138
  // ---------------------------------------------------------------------------
139
 
140
  $(document).on('click', '#place_order.wooccm-upload-process', function (e) {
141
 
142
  e.preventDefault();
 
143
  var $form = $('form.checkout'),
144
  $place_order = $(this),
145
  $results = $('#wooccm_checkout_attachment_results'),
146
  $fields = $('.wooccmupload-field'),
147
  fields = $fields.length;
 
148
  $fields.each(function (i, field) {
149
 
150
  var $field = $(field),
151
  $attachment_ids = $field.find('.wooccmupload_field'),
152
+ $field_list = $field.find('.wooccmupload_list'); //,
153
 
154
  if (window.FormData && fileList[$field.attr('id')].length) {
155
 
159
  }
160
 
161
  var data = new FormData();
 
162
  $field_list.find('span[data-file_id]').each(function (i, file) {
163
 
164
  var file_id = $(file).data('file_id');
 
165
  if (i > wooccm.limit.max_files) {
166
  console.log('Exeeds max files limit of ' + wooccm.limit.max_files);
167
  return false;
178
  }
179
 
180
  console.log('We\'re ready to upload ' + fileList[$field.attr('id')][file_id].name);
 
181
  data.append('wooccm_checkout_attachment_upload[]', fileList[$field.attr('id')][file_id]);
 
182
  });
 
183
  //return;
184
 
185
  data.append('action', 'wooccm_checkout_attachment_upload');
186
  data.append('nonce', wooccm.nonce);
 
187
  $.ajax({
188
  async: false,
189
  url: wooccm.ajaxurl,
211
  //console.log('ajax: fields = ' + fields);
212
  }
213
  });
 
214
  } else {
215
  fields = fields - 1;
216
  //console.log('no ajax: fields = ' + fields);
229
  //return false;
230
  //}
231
  });
 
 
232
  // Update checkout fees
233
  // ---------------------------------------------------------------------------
234
 
235
  $(document).on('change', '.wooccm-add-checkout-fees', function (e) {
236
  $('body').trigger('update_checkout');
237
  });
238
+ // Color fields
239
+ // ---------------------------------------------------------------------------
240
+
241
+ $('.wooccm-colorpicker-farbtastic').each(function (i, field) {
242
+
243
+ var $field = $(field),
244
+ $input = $field.find('input[type=text]'),
245
+ $container = $field.find('.wooccmcolorpicker_container');
246
+ $input.hide();
247
+ if ($.isFunction($.fn.farbtastic)) {
248
+ $container.farbtastic('#' + $input.attr('id'));
249
+ $container.on('click', function (e) {
250
+ $input.fadeIn();
251
+ });
252
+ }
253
+
254
+ });
255
+ $('.wooccm-colorpicker-iris').each(function (i, field) {
256
 
257
+ var $field = $(field),
258
+ $input = $field.find('input[type=text]'),
259
+ $container = $field.find('.wooccmcolorpicker_container');
260
+
261
+ $input.css('color', '#fff').css('background', $input.val()).hide();
262
+
263
+ $input.iris({
264
+ wccmclass: $input.attr('id'),
265
+ palettes: true,
266
+ color: '',
267
+ hide: false,
268
+ change: function (event, ui) {
269
+ $input.css('color', '#000').css('background', ui.color.toString()).fadeIn();
270
+ }
271
+ });
272
+
273
+ //$input.wpColorPicker();
274
+ });
275
  })(jQuery);
assets/js/wooccm-checkout.min.js CHANGED
@@ -1 +1 @@
1
- (function(d){var e=function(g){return g.is(".processing")||g.parents(".processing").length};var f=function(g){if(!e(g)){g.addClass("processing").block({message:null,overlayCSS:{background:"#fff",opacity:0.6}})}};var a=function(g){g.removeClass("processing").unblock()};var c=function(m,k,l,g,j){var n=d(m),o;if(j.match("image.*")){o="image"}else{if(j.match("application/ms.*")){l=wooccm.icons.spreadsheet;o="spreadsheet"}else{if(j.match("application/x.*")){l=wooccm.icons.archive;o="application"}else{if(j.match("audio.*")){l=wooccm.icons.audio;o="audio"}else{if(j.match("text.*")){l=wooccm.icons.text;o="text"}else{if(j.match("video.*")){l=wooccm.icons.video;o="video"}else{l=wooccm.icons.interactive;o="interactive"}}}}}}var h='<span data-file_id="'+k+'" title="'+g+'" class="wooccmupload_file">\n <span class="wooccmupload_file_container">\n <a title="'+g+'" class="wooccmupload_file_delete" class="wooccm_dele wooccm-btn wooccm-btn-danger">×</a>\n <span class="wooccmupload_file_image_container">\n <img class="'+o+'" alt="'+g+'" src="'+l+'"/>\n </span>\n </span>\n </span>';n.append(h).fadeIn()};var b=[];d(".wooccmupload-field").each(function(h,l){var j=d(l),k=j.find("[type=file]"),g=j.find(".wooccmupload_button"),m=j.find(".wooccmupload_list");b[j.attr("id")]=[];g.on("click",function(i){i.preventDefault();k.trigger("click")});m.on("click",".wooccmupload_file_delete",function(i){d(this).closest(".wooccmupload_file").remove()});k.on("change",function(n){var i=d(this)[0].files;if(i.length){if(window.FileReader){d.each(i,function(p,o){var q=m.find("span[data-file_id]").length+p;if(q>=wooccm.limit.max_files){alert("Exeeds max files limit of "+wooccm.limit.max_files);return false}if(o.size>wooccm.limit.max_file_size){alert("Exeeds max file size of "+wooccm.limit.max_file_size);return true}reader=new FileReader();reader.onload=(function(r){return function(s){setTimeout(function(){c(m,b[j.attr("id")].push(o)-1,s.target.result,r.name,r.type)},200)}})(o);console.log(o.name);reader.readAsDataURL(o)})}}})});d("#order_review").on("ajaxSuccess",function(k){var j=d(k.target),i=j.find("#place_order"),h=d(".wooccmupload-field"),g=h.length;if(g){i.addClass("wooccm-upload-process")}});d(document).on("click","#place_order.wooccm-upload-process",function(l){l.preventDefault();var i=d("form.checkout"),k=d(this),h=d("#wooccm_checkout_attachment_results"),j=d(".wooccmupload-field"),g=j.length;j.each(function(m,p){var n=d(p),r=n.find(".wooccmupload_field"),q=n.find(".wooccmupload_list");if(window.FormData&&b[n.attr("id")].length){if(!e(i)){k.html(wooccm.uploading);f(i)}var o=new FormData();q.find("span[data-file_id]").each(function(t,s){var u=d(s).data("file_id");if(t>wooccm.limit.max_files){console.log("Exeeds max files limit of "+wooccm.limit.max_files);return false}if(b[n.attr("id")][u]===undefined){console.log("Undefined "+u);return true}if(b[n.attr("id")][u].size>wooccm.limit.max_file_size){console.log("Exeeds max file size of "+wooccm.limit.max_files);return true}console.log("We're ready to upload "+b[n.attr("id")][u].name);o.append("wooccm_checkout_attachment_upload[]",b[n.attr("id")][u])});o.append("action","wooccm_checkout_attachment_upload");o.append("nonce",wooccm.nonce);d.ajax({async:false,url:wooccm.ajaxurl,type:"POST",cache:false,data:o,processData:false,contentType:false,beforeSend:function(s){},success:function(s){h.removeClass("woocommerce-message");if(s.success){r.val(s.data)}else{d("body").trigger("update_checkout")}},complete:function(s){g=g-1}})}else{g=g-1}if(g==0){a(i);k.removeClass("wooccm-upload-process").trigger("click")}})});d(document).on("change",".wooccm-add-checkout-fees",function(g){d("body").trigger("update_checkout")})})(jQuery);
1
+ (function(d){var e=function(g){return g.is(".processing")||g.parents(".processing").length};var f=function(g){if(!e(g)){g.addClass("processing").block({message:null,overlayCSS:{background:"#fff",opacity:0.6}})}};var a=function(g){g.removeClass("processing").unblock()};var c=function(m,k,l,g,j){var n=d(m),o;if(j.match("image.*")){o="image"}else{if(j.match("application/ms.*")){l=wooccm.icons.spreadsheet;o="spreadsheet"}else{if(j.match("application/x.*")){l=wooccm.icons.archive;o="application"}else{if(j.match("audio.*")){l=wooccm.icons.audio;o="audio"}else{if(j.match("text.*")){l=wooccm.icons.text;o="text"}else{if(j.match("video.*")){l=wooccm.icons.video;o="video"}else{l=wooccm.icons.interactive;o="interactive"}}}}}}var h='<span data-file_id="'+k+'" title="'+g+'" class="wooccmupload_file">\n <span class="wooccmupload_file_container">\n <a title="'+g+'" class="wooccmupload_file_delete" class="wooccm_dele wooccm-btn wooccm-btn-danger">×</a>\n <span class="wooccmupload_file_image_container">\n <img class="'+o+'" alt="'+g+'" src="'+l+'"/>\n </span>\n </span>\n </span>';n.append(h).fadeIn()};var b=[];d(".wooccmupload-field").each(function(h,l){var j=d(l),k=j.find("[type=file]"),g=j.find(".wooccmupload_button"),m=j.find(".wooccmupload_list");b[j.attr("id")]=[];g.on("click",function(i){i.preventDefault();k.trigger("click")});m.on("click",".wooccmupload_file_delete",function(i){d(this).closest(".wooccmupload_file").remove()});k.on("change",function(n){var i=d(this)[0].files;if(i.length){if(window.FileReader){d.each(i,function(p,o){var q=m.find("span[data-file_id]").length+p;if(q>=wooccm.limit.max_files){alert("Exeeds max files limit of "+wooccm.limit.max_files);return false}if(o.size>wooccm.limit.max_file_size){alert("Exeeds max file size of "+wooccm.limit.max_file_size);return true}reader=new FileReader();reader.onload=(function(r){return function(s){setTimeout(function(){c(m,b[j.attr("id")].push(o)-1,s.target.result,r.name,r.type)},200)}})(o);console.log(o.name);reader.readAsDataURL(o)})}}})});d("#order_review").on("ajaxSuccess",function(k){var j=d(k.target),i=j.find("#place_order"),h=d(".wooccmupload-field"),g=h.length;if(g){i.addClass("wooccm-upload-process")}});d(document).on("click","#place_order.wooccm-upload-process",function(l){l.preventDefault();var i=d("form.checkout"),k=d(this),h=d("#wooccm_checkout_attachment_results"),j=d(".wooccmupload-field"),g=j.length;j.each(function(m,p){var n=d(p),r=n.find(".wooccmupload_field"),q=n.find(".wooccmupload_list");if(window.FormData&&b[n.attr("id")].length){if(!e(i)){k.html(wooccm.uploading);f(i)}var o=new FormData();q.find("span[data-file_id]").each(function(t,s){var u=d(s).data("file_id");if(t>wooccm.limit.max_files){console.log("Exeeds max files limit of "+wooccm.limit.max_files);return false}if(b[n.attr("id")][u]===undefined){console.log("Undefined "+u);return true}if(b[n.attr("id")][u].size>wooccm.limit.max_file_size){console.log("Exeeds max file size of "+wooccm.limit.max_files);return true}console.log("We're ready to upload "+b[n.attr("id")][u].name);o.append("wooccm_checkout_attachment_upload[]",b[n.attr("id")][u])});o.append("action","wooccm_checkout_attachment_upload");o.append("nonce",wooccm.nonce);d.ajax({async:false,url:wooccm.ajaxurl,type:"POST",cache:false,data:o,processData:false,contentType:false,beforeSend:function(s){},success:function(s){h.removeClass("woocommerce-message");if(s.success){r.val(s.data)}else{d("body").trigger("update_checkout")}},complete:function(s){g=g-1}})}else{g=g-1}if(g==0){a(i);k.removeClass("wooccm-upload-process").trigger("click")}})});d(document).on("change",".wooccm-add-checkout-fees",function(g){d("body").trigger("update_checkout")});d(".wooccm-colorpicker-farbtastic").each(function(g,j){var h=d(j),l=h.find("input[type=text]"),k=h.find(".wooccmcolorpicker_container");l.hide();if(d.isFunction(d.fn.farbtastic)){k.farbtastic("#"+l.attr("id"));k.on("click",function(i){l.fadeIn()})}});d(".wooccm-colorpicker-iris").each(function(g,j){var h=d(j),l=h.find("input[type=text]"),k=h.find(".wooccmcolorpicker_container");l.css("color","#fff").css("background",l.val()).hide();l.iris({wccmclass:l.attr("id"),palettes:true,color:"",hide:false,change:function(i,m){l.css("color","#000").css("background",m.color.toString()).fadeIn()}})})})(jQuery);
{includes/pickers/css → assets/old}/backend_css.css RENAMED
File without changes
{includes/templates/js → assets/old}/billing_script_wccs.js RENAMED
File without changes
{includes/templates/admin → assets/old}/edit-order-uploads-button_style.css RENAMED
File without changes
{includes/templates/admin → assets/old}/edit-order-uploads-file_editing_table.css RENAMED
File without changes
{includes/templates/js → assets/old}/script_wccs.js RENAMED
File without changes
{includes/templates/js → assets/old}/shipping_script_wccs.js RENAMED
File without changes
{includes/templates/admin → assets/old}/woocheckout-export.css RENAMED
File without changes
{includes/pickers → assets/timepicker}/i18n/i18n.html RENAMED
File without changes
{includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-cs.js RENAMED
File without changes
{includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-de.js RENAMED
File without changes
{includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-es.js RENAMED
File without changes
{includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-fr.js RENAMED
File without changes
{includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-hr.js RENAMED
File without changes
{includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-it.js RENAMED
File without changes
{includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-ja.js RENAMED
File without changes
{includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-nl.js RENAMED
File without changes
{includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-pl.js RENAMED
File without changes
{includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-pt.js RENAMED
File without changes
{includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-sl.js RENAMED
File without changes
{includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-sv.js RENAMED
File without changes
{includes/pickers → assets/timepicker}/i18n/jquery.ui.timepicker-tr.js RENAMED
File without changes
{includes/pickers → assets/timepicker}/jquery.ui.timepicker.css RENAMED
File without changes
{includes/pickers → assets/timepicker}/jquery.ui.timepicker.js RENAMED
File without changes
changelog.txt DELETED
@@ -1,25 +0,0 @@
1
- Fifteen ( 15 ) fields types included: Text Input, Text Area, Password, Radio Button, Check Box, Select Options, Date Picker, Time Picker, Color Picker, Heading, Multi-Select, Multi-Checkbox, Country, State, File Picker.
2
-
3
- Compatible with WPML, WooCommerce Print Invoice & Delivery Note, Store Exporter Deluxe, WooCommerce Order/Customer CSV Export.
4
-
5
- Sort Orders by Field Name.
6
- Export Orders by Field Name.
7
-
8
- Create fields to remove tax
9
- Create fields to add additional amount
10
- Display Payment Method and Shipping Method used by customer.
11
- Disable any added field from Checkout details page and Order Receipt.
12
-
13
- DatePicker: Change the default format (dd-mm-yy), Set Minimum Date and Maximum Date, Disable days in the week (Sun – Sat).
14
- TimePicker: Includes restriction of both start and end hours, set the minutes interval and manually input labels.
15
- Display Order Time.
16
-
17
- Re-position the added fields: Before Shipping Form, After Shipping Form, Before Billing Form, After Billing Form or After Order Notes
18
-
19
- = 4.4.0 Beta =
20
- * Improvement: woocommerce order upload rebuilt
21
- * Improvement: woocommerce checkout upload rebuilt
22
- * Improvement: woocommerce order admin upload rebuilt
23
- * Improvement: woocommerce register fields rebuilt
24
- * Improvement: woocommerce register fields rebuilt
25
- * Fix: woocommerce checkout additional fields required
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/admin.php CHANGED
@@ -90,15 +90,15 @@ function wooccm_admin_enqueue_scripts($hook_suffix) {
90
  wp_enqueue_style('farbtastic');
91
  // @mod - We need to check that farbtastic exists
92
  wp_enqueue_script('farbtastic', site_url('/wp-admin/js/farbtastic.js'));
93
- wp_enqueue_style('wooccm-backend-css', plugins_url('includes/pickers/css/backend_css.css', WOOCCM_PLUGIN_FILE));
94
- wp_enqueue_script('script_wccs', plugins_url('includes/templates/js/script_wccs.js', WOOCCM_PLUGIN_FILE), array('jquery'), '1.2');
95
- wp_enqueue_script('billing_script_wccs', plugins_url('includes/templates/js/billing_script_wccs.js', WOOCCM_PLUGIN_FILE), array('jquery'), '1.2');
96
- wp_enqueue_script('shipping_script_wccs', plugins_url('includes/templates/js/shipping_script_wccs.js', WOOCCM_PLUGIN_FILE), array('jquery'), '1.2');
97
  if (wp_script_is('jquery-ui-sortable', 'queue') == false)
98
  wp_enqueue_script('jquery-ui-sortable');
99
  }
100
  if ($hook_suffix === 'woocheckout_page_wooccm-advance-export') {
101
- wp_enqueue_style('export', plugins_url('includes/templates/admin/woocheckout-export.css', WOOCCM_PLUGIN_FILE));
102
  }
103
  }
104
 
90
  wp_enqueue_style('farbtastic');
91
  // @mod - We need to check that farbtastic exists
92
  wp_enqueue_script('farbtastic', site_url('/wp-admin/js/farbtastic.js'));
93
+ wp_enqueue_style('wooccm-backend-css', plugins_url('assets/old/backend_css.css', WOOCCM_PLUGIN_FILE));
94
+ wp_enqueue_script('script_wccs', plugins_url('assets/old/script_wccs.js', WOOCCM_PLUGIN_FILE), array('jquery'), '1.2');
95
+ wp_enqueue_script('billing_script_wccs', plugins_url('assets/old/billing_script_wccs.js', WOOCCM_PLUGIN_FILE), array('jquery'), '1.2');
96
+ wp_enqueue_script('shipping_script_wccs', plugins_url('assets/old/shipping_script_wccs.js', WOOCCM_PLUGIN_FILE), array('jquery'), '1.2');
97
  if (wp_script_is('jquery-ui-sortable', 'queue') == false)
98
  wp_enqueue_script('jquery-ui-sortable');
99
  }
100
  if ($hook_suffix === 'woocheckout_page_wooccm-advance-export') {
101
+ wp_enqueue_style('export', plugins_url('assets/old/woocheckout-export.css', WOOCCM_PLUGIN_FILE));
102
  }
103
  }
104
 
includes/pickers/caman/.codoopts DELETED
@@ -1,5 +0,0 @@
1
- --name "CamanJS"
2
- --readme README.md
3
- --title "CamanJS Documentation"
4
- --output-dir ./api
5
- ./src
 
 
 
 
 
includes/pickers/caman/.npmignore DELETED
@@ -1,5 +0,0 @@
1
- adapters/
2
- docs/
3
- examples/
4
- src/
5
- test/
 
 
 
 
 
includes/pickers/caman/.travis.yml DELETED
@@ -1,8 +0,0 @@
1
- language: node_js
2
- env: TRAVISCI=true
3
- node_js:
4
- - "0.10"
5
- - "0.8"
6
- before_script:
7
- - export DISPLAY=:99.0
8
- - sh -e /etc/init.d/xvfb start
 
 
 
 
 
 
 
 
includes/pickers/caman/Cakefile DELETED
@@ -1,203 +0,0 @@
1
- fs = require 'fs'
2
- {exec} = require 'child_process'
3
- util = require 'util'
4
- {jsmin} = require 'jsmin'
5
-
6
- try
7
- packer = require 'packer'
8
- catch err
9
- packer = null
10
-
11
- targetName = "caman"
12
-
13
- ###
14
- CoffeeScript Options
15
- ###
16
- csSrcDir = "src"
17
- csTargetDir = "dist"
18
-
19
- targetCoffee = "#{csTargetDir}/caman"
20
-
21
- targetCoreJS = "#{csTargetDir}/#{targetName}.js"
22
- targetCoreMinJS = "#{csTargetDir}/#{targetName}.min.js"
23
- targetCorePackJS = "#{csTargetDir}/#{targetName}.pack.js"
24
- coffeeCoreOpts = "-j #{targetName}.js -o #{csTargetDir}"
25
-
26
- targetFullJS = "#{csTargetDir}/#{targetName}.full.js"
27
- targetFullMinJS = "#{csTargetDir}/#{targetName}.full.min.js"
28
- targetFullPackJS = "#{csTargetDir}/#{targetName}.full.pack.js"
29
- coffeeFullOpts = "-j #{targetName}.full.js -o #{csTargetDir}"
30
-
31
- # All source files listed in include order
32
- coffeeFiles = [
33
- "core/module"
34
- "core/util"
35
-
36
- # Core library
37
- "core/caman"
38
-
39
- # Everything else
40
- "core/analyze"
41
- "core/autoload"
42
- "core/blender"
43
- "core/calculate"
44
- "core/convert"
45
- "core/event"
46
- "core/filter"
47
- "core/io"
48
- "core/layer"
49
- "core/logger"
50
- "core/pixel"
51
- "core/plugin"
52
- "core/renderer"
53
- "core/store"
54
-
55
- # Non-core files
56
- "lib/blenders"
57
- "lib/filters"
58
- "lib/size"
59
- ]
60
-
61
- pluginsFolder = "src/plugins/src"
62
-
63
- ###
64
- Event System
65
- ###
66
- finishedCallback = {}
67
- finished = (type) ->
68
- finishedCallback[type]() if finishedCallback[type]?
69
-
70
- finishListener = (type, cb) ->
71
- finishedCallback[type] = cb
72
-
73
- getPlugins = ->
74
- content = ""
75
-
76
- util.log "Gathering plugin files in #{pluginsFolder}"
77
- pluginFiles = fs.readdirSync pluginsFolder
78
-
79
- util.log "Discovered #{pluginFiles.length} plugins"
80
- for plugin in pluginFiles
81
- continue if fs.statSync("#{pluginsFolder}/#{plugin}").isDirectory()
82
- content += fs.readFileSync("#{pluginsFolder}/#{plugin}", "utf8") + "\n\n"
83
-
84
- return content
85
-
86
- ###
87
- Tasks
88
- ###
89
- task 'docs', 'Generates documentation for the coffee files', ->
90
- util.log 'Invoking docco on the source files'
91
-
92
- files = []
93
- files[i] = "src/#{coffeeFiles[i]}.coffee" for i in [0...coffeeFiles.length]
94
-
95
- pluginFiles = fs.readdirSync pluginsFolder
96
- for plugin in pluginFiles
97
- continue if fs.statSync("#{pluginsFolder}/#{plugin}").isDirectory()
98
- files.push "#{pluginsFolder}/#{plugin}"
99
-
100
- exec "node_modules/docco/bin/docco -l parallel #{files.join(' ')}", (err, stdout, stderr) ->
101
- util.log err if err
102
- util.log "Documentation built into the docs/ folder."
103
-
104
- util.log 'Invoking codo on the source files'
105
- exec "node_modules/codo/bin/codo", (err, stdout, stderr) ->
106
- util.log err if err
107
- util.log "API reference built into the api/ folder."
108
- console.log stdout
109
-
110
- option '-d', '--docs', 'Automatically recompile documentation (used with watch)'
111
- task 'watch', 'Automatically recompile the CoffeeScript files when updated', (options) ->
112
- util.log "Watching for changes in #{csSrcDir}"
113
- util.log "Automatically recompiling documentation!" if options.docs
114
-
115
- for jsFile in coffeeFiles then do (jsFile) ->
116
- fs.watchFile "#{csSrcDir}/#{jsFile}.coffee", (curr, prev) ->
117
- if +curr.mtime isnt +prev.mtime
118
- util.log "#{csSrcDir}/#{jsFile}.coffee updated"
119
- invoke 'build'
120
- invoke 'docs' if options.docs
121
-
122
- task 'build', 'Compile and minify all CoffeeScript source files', ->
123
- finishListener 'js', -> invoke 'minify'
124
- invoke 'compile'
125
-
126
- option '-m', '--map', 'Compile with source maps'
127
- task 'compile', 'Compile all CoffeeScript source files', (options) ->
128
- util.log "Building #{targetCoreJS} and #{targetFullJS}"
129
- contents = []
130
- remaining = coffeeFiles.length
131
-
132
- util.log "Appending #{coffeeFiles.length} files to #{targetCoffee}.coffee"
133
-
134
- for file, index in coffeeFiles then do (file, index) ->
135
- fs.readFile "#{csSrcDir}/#{file}.coffee", "utf8", (err, fileContents) ->
136
- util.log err if err
137
-
138
- contents[index] = fileContents
139
- util.log "[#{index + 1}] #{file}.coffee"
140
- process() if --remaining is 0
141
-
142
- process = ->
143
- core = contents.join("\n\n")
144
- full = core + "\n\n" + getPlugins()
145
-
146
- if options.map
147
- util.log "Source map support enabled"
148
- coreOpts = "#{coffeeCoreOpts} -m #{targetCoffee}.coffee"
149
- fullOpts = "#{coffeeFullOpts} -m #{targetCoffee}.full.coffee"
150
- else
151
- coreOpts = "#{coffeeCoreOpts} -c #{targetCoffee}.coffee"
152
- fullOpts = "#{coffeeFullOpts} -c #{targetCoffee}.full.coffee"
153
-
154
- fs.writeFile "#{targetCoffee}.coffee", core, "utf8", (err) ->
155
- util.log err if err
156
-
157
- exec "coffee #{coreOpts}", (err, stdout, stderr) ->
158
- util.log err if err
159
- util.log "Compiled #{targetCoreJS}"
160
-
161
- if options.map
162
- map = JSON.parse fs.readFileSync("#{targetCoffee}.map")
163
- map.sources = ["caman.coffee"]
164
- fs.writeFileSync "#{targetCoffee}.map", JSON.stringify(map)
165
-
166
- fs.writeFile "#{targetCoffee}.full.coffee", full, "utf8", (err) ->
167
- util.log err if err
168
-
169
- exec "coffee #{fullOpts}", (err, stdout, stderr) ->
170
- util.log err if err
171
- util.log "Compiled #{targetFullJS}"
172
-
173
- if options.map
174
- map = JSON.parse fs.readFileSync("#{targetCoffee}.full.map")
175
- map.sources = ["caman.full.coffee"]
176
- fs.writeFileSync "#{targetCoffee}.full.map", JSON.stringify(map)
177
-
178
- # if not err
179
- # fs.unlink "#{targetCoffee}.full.coffee", (err) -> util.log err if err
180
-
181
- finished('js')
182
-
183
-
184
- task 'minify', 'Minify the CoffeeScript files', ->
185
- util.log "Minifying #{targetCoreJS}"
186
- fs.readFile targetCoreJS, "utf8", (err, contents) ->
187
- fs.writeFile targetCoreMinJS, jsmin(contents), "utf8", (err) ->
188
- util.log err if err
189
-
190
- if packer
191
- util.log "Packing #{targetCoreJS}"
192
- fs.writeFile targetCorePackJS, packer.pack(contents, true), "utf8", (err) ->
193
- util.log err if err
194
-
195
- util.log "Minifying #{targetFullJS}"
196
- fs.readFile targetFullJS, "utf8", (err, contents) ->
197
- fs.writeFile targetFullMinJS, jsmin(contents), "utf8", (err) ->
198
- util.log err if err
199
-
200
- if packer
201
- util.log "Packing #{targetFullJS}"
202
- fs.writeFile targetFullPackJS, packer.pack(contents, true), "utf8", (err) ->
203
- util.log err if err
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/LICENSE DELETED
@@ -1,10 +0,0 @@
1
- Copyright (c) 2010-2014, Ryan LeFevre
2
- All rights reserved.
3
-
4
- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
5
-
6
- * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7
- * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8
- * Neither the name of Ryan LeFevre nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9
-
10
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/README.md DELETED
@@ -1,115 +0,0 @@
1
- # About the Project
2
-
3
- [![Build Status](https://secure.travis-ci.org/meltingice/CamanJS.png)](http://travis-ci.org/meltingice/CamanJS)
4
-
5
- The main focus of CamanJS is manipulating images using the HTML5 canvas and Javascript. It's a combination of a simple-to-use interface with advanced and efficient image/canvas editing techniques. It is also completely library independent and can be safely used next to jQuery, YUI, Scriptaculous, MooTools, etc.
6
-
7
- CamanJS is very easy to extend with new filters and plugins, and it comes with a wide array of image editing functionality, which is only growing as the community makes more plugins. All features that are not a part of the core CamanJS library are in a [separate plugins repository](https://github.com/meltingice/CamanJS-Plugins).
8
-
9
- For more information, I highly recommend taking a look at the [official website](http://camanjs.com) where there is more comprehensive documentation and interactive demos. You can also [read the wiki](https://github.com/meltingice/CamanJS/wiki) for some basic information about the project and how to use it.
10
-
11
- CamanJS is written in [Coffeescript](http://coffeescript.org) as of version 3.0. **It works both in-browser and in NodeJS.**
12
-
13
- CamanJS is a project that I work on in purely my own spare time. If you would like to pitch in a beer or donate to say thanks, my Bitcoin address is: 1EVNQ7FiWDaqpfYXRLCtgMe5RBcz3kEuAG
14
-
15
- ## Usage
16
-
17
- Include one of the versions in the `dist/` folder, then you can run:
18
-
19
- ```js
20
- Caman("#image-id", function () {
21
- this.brightness(10);
22
- this.contrast(20);
23
- this.render(function () {
24
- alert("Done!");
25
- });
26
- });
27
- ```
28
-
29
- Caman also supports modifying images via the `data-caman` HTML attribute. Simply separate each instruction with a space. Images with the `data-caman` attribute will automatically be modified at page load.
30
-
31
- ```html
32
- <img data-caman="saturation(-10) brightness(20) vignette('10%')" src="path/to/image.jpg">
33
- ```
34
-
35
- ### HiDPI Support
36
-
37
- Version 4 introduces better support for HiDPI (Retina) displays. It allows you to specify a higher resolution replacement using HTML data attributes. Keep in mind, however, that higher resolution images take longer to render.
38
-
39
- **HTML data attributes**
40
-
41
- * `data-caman-hidpi`: URL to the high resolution replacement image
42
- * `data-caman-hidpi-disabled`: HiDPI support is enabled by default, so add this attribute if you wish to force disable it
43
-
44
- ## Upgrading to Version 4
45
-
46
- There is only 1 breaking change that occured with the version 4 release. When you initialize CamanJS with a canvas and an image, the parameter order has changed. It is now:
47
-
48
- ``` javascript
49
- Caman("#canvas-id", "/path/to/image.png", function() {});
50
- ```
51
-
52
- This is in order to be more consistent with initialization, such that the "initialization object" is always the first parameter. Update your code accordingly.
53
-
54
- ## Development
55
-
56
- If you are a developer who is contributing directly to the project, there are some tools to help you out.
57
-
58
- ### Building
59
-
60
- To install all dependencies required for development, run `npm install -d`.
61
-
62
- Because all plugins are in a separate repository, make sure you run:
63
-
64
- ```
65
- git submodule init && git submodule update
66
- ```
67
-
68
- To build, simply run `cake build`. The resulting files will be placed in the dist/ folder. Plugins will be automatically discovered and added to caman.full.js after the core library. You can also auto-compile when a file changes by using `cake watch`.
69
-
70
- If you add any files to the core library, you will need to add them to the `coffeeFiles` array in the Cakefile. The point of this is so that order is preserved when generating the file JS file. Plugins do not need to be added to the Cakefile.
71
-
72
- You will probably want to generate documentation if you make any changes. In addition to the normal requirements, you will also need the Python library Pygments.
73
-
74
- To generate the documentation, run `cake docs`.
75
-
76
- ## CDN JS Hosting
77
-
78
- CamanJS is hosted on CDN JS if you're looking for a CDN hosting solution. It is the full and minified version of the library, which means all plugins are included. Simply load CamanJS directly from [this URL](http://cdnjs.cloudflare.com/ajax/libs/camanjs/3.3.0/caman.full.min.js) for usage on your site.
79
-
80
- ## NodeJS Compatibility
81
-
82
- CamanJS is fully compatible with NodeJS. The easiest way to install it is:
83
-
84
- ```
85
- npm install caman
86
- ```
87
-
88
- **Saving from NodeJS**
89
-
90
- To save your modified image in NodeJS, simply call the save() function **after** rendering is finished by passing a callback function to `render()`. Trying to save before rendering is finished will cause issues.
91
-
92
- ``` javascript
93
- Caman = require('caman').Caman;
94
-
95
- Caman("./path/to/file.jpg", function () {
96
- this.brightness(40);
97
- this.render(function () {
98
- this.save("./output.png");
99
- });
100
- });
101
- ```
102
-
103
- ## Testing
104
-
105
- Tests for CamanJS run both in NodeJS and the browser.
106
-
107
- ### NodeJS
108
-
109
- The NodeJS tests use mocha as the test runner. The simplest way to run the test suite is by running `npm test`.
110
-
111
- ### Browser
112
-
113
- The browser tests are run by Karma. It will start up Chrome, Firefox, and Safari (if running OSX) in the background. You can minimize each of these browsers if desired. It will automatically run tests after CamanJS is recompiled by the Cakefile as well.
114
-
115
- You can run Karma by running `karma start`, or you can do a single run with the NodeJS tests by running `npm test`.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/adapters/jquery.js DELETED
@@ -1,10 +0,0 @@
1
- /*
2
- * jQuery plugin adapter for CamanJS
3
- */
4
- if (window.jQuery) {
5
- window.jQuery.fn.caman = function (callback) {
6
- return this.each(function () {
7
- Caman(this, callback);
8
- });
9
- };
10
- }
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/LICENSE.html DELETED
@@ -1,145 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='assets/codo.css' type='text/css'>
7
- <script src='assets/codo.js'></script>
8
- <script src='assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path=''></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>LICENSE</span>
19
- <nav>
20
- <ul>
21
- <li class='noframes'>
22
- (<a class='noframes' href='#'>no frames</a>)
23
- </li>
24
- </ul>
25
- </nav>
26
- <div id='search'>
27
- <a id='class_list_link' href='class_list.html'>Classes</a>
28
- <a id='file_list_link' href='file_list.html'>Files</a>
29
- <a id='method_list_link' href='method_list.html'>Methods</a>
30
- <a id='extra_list_link' href='extra_list.html'>Extras</a>
31
- </div>
32
- </div>
33
- <iframe id='search_frame'></iframe>
34
- <div id='fuzzySearch'>
35
- <input type='text'>
36
- <ol></ol>
37
- </div>
38
- <div id='help'>
39
- <p>
40
- Quickly fuzzy find classes, mixins, methods, file:
41
- </p>
42
- <ul>
43
- <li>
44
- <span>Ctrl-T</span>
45
- Open fuzzy finder dialog
46
- </li>
47
- </ul>
48
- <p>
49
- In frame mode you can toggle the list naviation frame on the left side:
50
- </p>
51
- <ul>
52
- <li>
53
- <span>Ctrl-L</span>
54
- Toggle list view
55
- </li>
56
- </ul>
57
- <p>
58
- You can focus a list in frame mode or toggle a tab in frameless mode:
59
- </p>
60
- <ul>
61
- <li>
62
- <span>Ctrl-C</span>
63
- Class list
64
- </li>
65
- <li>
66
- <span>Ctrl-I</span>
67
- Mixin list
68
- </li>
69
- <li>
70
- <span>Ctrl-F</span>
71
- File list
72
- </li>
73
- <li>
74
- <span>Ctrl-M</span>
75
- Method list
76
- </li>
77
- <li>
78
- <span>Ctrl-E</span>
79
- Extras list
80
- </li>
81
- </ul>
82
- <p>
83
- You can focus and blur the search input:
84
- </p>
85
- <ul>
86
- <li>
87
- <span>Ctrl-S</span>
88
- Focus search input
89
- </li>
90
- <li>
91
- <span>Esc</span>
92
- Blur search input
93
- </li>
94
- </ul>
95
- <p>
96
- In frameless mode you can close the list tab:
97
- </p>
98
- <ul>
99
- <li>
100
- <span>Esc</span>
101
- Close list tab
102
- </li>
103
- </ul>
104
- </div>
105
- </div>
106
- <div id='content'>
107
- <nav class='toc'>
108
- <p class='title'>
109
- <a class='hide_toc' href='#'>
110
- <strong>Table of Contents</strong>
111
- </a>
112
- <small>
113
- (<a class='float_toc' href='#'>left</a>)
114
- </small>
115
- </p>
116
- </nav>
117
- <div id='filecontents'>
118
- Copyright (c) 2010, Ryan LeFevre
119
- All rights reserved.
120
-
121
- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
122
-
123
- * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
124
- * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
125
- * Neither the name of Ryan LeFevre nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
126
-
127
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
128
- </div>
129
- </div>
130
- <div id='footer'>
131
- Generated on
132
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
133
- by
134
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
135
- v1.7.0
136
- (Node.js v0.10.21).
137
- &#10034;
138
- Press Ctrl-h to see the keyboard shortcuts
139
- &#10034;
140
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
141
- &#10034;
142
- <a href='https://mksoft.ch'>mksoft.ch</a>
143
- </div>
144
- </body>
145
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/README.md.html DELETED
@@ -1,155 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='assets/codo.css' type='text/css'>
7
- <script src='assets/codo.js'></script>
8
- <script src='assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path=''></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>README.md</span>
19
- <nav>
20
- <ul>
21
- <li class='noframes'>
22
- (<a class='noframes' href='#'>no frames</a>)
23
- </li>
24
- </ul>
25
- </nav>
26
- <div id='search'>
27
- <a id='class_list_link' href='class_list.html'>Classes</a>
28
- <a id='file_list_link' href='file_list.html'>Files</a>
29
- <a id='method_list_link' href='method_list.html'>Methods</a>
30
- <a id='extra_list_link' href='extra_list.html'>Extras</a>
31
- </div>
32
- </div>
33
- <iframe id='search_frame'></iframe>
34
- <div id='fuzzySearch'>
35
- <input type='text'>
36
- <ol></ol>
37
- </div>
38
- <div id='help'>
39
- <p>
40
- Quickly fuzzy find classes, mixins, methods, file:
41
- </p>
42
- <ul>
43
- <li>
44
- <span>Ctrl-T</span>
45
- Open fuzzy finder dialog
46
- </li>
47
- </ul>
48
- <p>
49
- In frame mode you can toggle the list naviation frame on the left side:
50
- </p>
51
- <ul>
52
- <li>
53
- <span>Ctrl-L</span>
54
- Toggle list view
55
- </li>
56
- </ul>
57
- <p>
58
- You can focus a list in frame mode or toggle a tab in frameless mode:
59
- </p>
60
- <ul>
61
- <li>
62
- <span>Ctrl-C</span>
63
- Class list
64
- </li>
65
- <li>
66
- <span>Ctrl-I</span>
67
- Mixin list
68
- </li>
69
- <li>
70
- <span>Ctrl-F</span>
71
- File list
72
- </li>
73
- <li>
74
- <span>Ctrl-M</span>
75
- Method list
76
- </li>
77
- <li>
78
- <span>Ctrl-E</span>
79
- Extras list
80
- </li>
81
- </ul>
82
- <p>
83
- You can focus and blur the search input:
84
- </p>
85
- <ul>
86
- <li>
87
- <span>Ctrl-S</span>
88
- Focus search input
89
- </li>
90
- <li>
91
- <span>Esc</span>
92
- Blur search input
93
- </li>
94
- </ul>
95
- <p>
96
- In frameless mode you can close the list tab:
97
- </p>
98
- <ul>
99
- <li>
100
- <span>Esc</span>
101
- Close list tab
102
- </li>
103
- </ul>
104
- </div>
105
- </div>
106
- <div id='content'>
107
- <nav class='toc'>
108
- <p class='title'>
109
- <a class='hide_toc' href='#'>
110
- <strong>Table of Contents</strong>
111
- </a>
112
- <small>
113
- (<a class='float_toc' href='#'>left</a>)
114
- </small>
115
- </p>
116
- </nav>
117
- <div id='filecontents'>
118
- <h1>About the Project</h1><p><a href="http://travis-ci.org/meltingice/CamanJS"><img src="https://secure.travis-ci.org/meltingice/CamanJS.png" alt="Build Status"></a></p><p>The main focus of CamanJS is manipulating images using the HTML5 canvas and Javascript. It&#39;s a combination of a simple-to-use interface with advanced and efficient image/canvas editing techniques. It is also completely library independent and can be safely used next to jQuery, YUI, Scriptaculous, MooTools, etc.</p><p>CamanJS is very easy to extend with new filters and plugins, and it comes with a wide array of image editing functionality, which is only growing as the community makes more plugins. All features that are not a part of the core CamanJS library are in a <a href="https://github.com/meltingice/CamanJS-Plugins">separate plugins repository</a>.</p><p>For more information, I highly recommend taking a look at the <a href="http://camanjs.com">official website</a> where there is more comprehensive documentation and interactive demos. You can also <a href="https://github.com/meltingice/CamanJS/wiki">read the wiki</a> for some basic information about the project and how to use it.</p><p>CamanJS is written in <a href="http://coffeescript.org">Coffeescript</a> as of version 3.0. <strong>It works both in-browser and in NodeJS.</strong></p><h2>Usage</h2><p>Include one of the versions in the <code>dist/</code> folder, then you can run:</p><pre><code class="lang-js">Caman(&quot;#image-id&quot;, function () {
119
- this.brightness(10);
120
- this.contrast(20);
121
- this.render(function () {
122
- alert(&quot;Done!&quot;);
123
- });
124
- });</code></pre><p>Caman also supports modifying images via the <code>data-caman</code> HTML attribute. Simply separate each instruction with a space. Images with the <code>data-caman</code> attribute will automatically be modified at page load.</p><pre><code class="lang-html">&lt;img data-caman=&quot;saturation(-10) brightness(20) vignette(&#39;10%&#39;)&quot; src=&quot;path/to/image.jpg&quot;&gt;</code></pre>
125
- <h3>HiDPI Support</h3><p>Version 4 introduces better support for HiDPI (Retina) displays. It allows you to specify a higher resolution replacement using HTML data attributes. Keep in mind, however, that higher resolution images take longer to render.</p><p><strong>HTML data attributes</strong></p><ul>
126
- <li><code>data-caman-hidpi</code>: URL to the high resolution replacement image</li>
127
- <li><code>data-caman-hidpi-disabled</code>: HiDPI support is enabled by default, so add this attribute if you wish to force disable it</li>
128
- </ul>
129
- <h2>Upgrading to Version 4</h2><p>There is only 1 breaking change that occured with the version 4 release. When you initialize CamanJS with a canvas and an image, the parameter order has changed. It is now:</p><pre><code class="lang-javascript">Caman(&quot;#canvas-id&quot;, &quot;/path/to/image.png&quot;, function() {});</code></pre><p>This is in order to be more consistent with initialization, such that the &quot;initialization object&quot; is always the first parameter. Update your code accordingly.</p><h2>Development</h2><p>If you are a developer who is contributing directly to the project, there are some tools to help you out.</p><h3>Building</h3><p>To install all dependencies required for development, run <code>npm install -d</code>.</p><p>Because all plugins are in a separate repository, make sure you run:</p><pre><code>git submodule init &amp;&amp; git submodule update</code></pre><p>To build, simply run <code>cake build</code>. The resulting files will be placed in the dist/ folder. Plugins will be automatically discovered and added to caman.full.js after the core library. You can also auto-compile when a file changes by using <code>cake watch</code>.</p><p>If you add any files to the core library, you will need to add them to the <code>coffeeFiles</code> array in the Cakefile. The point of this is so that order is preserved when generating the file JS file. Plugins do not need to be added to the Cakefile.</p><p>You will probably want to generate documentation if you make any changes. In addition to the normal requirements, you will also need the Python library Pygments.</p><p>To generate the documentation, run <code>cake docs</code>.</p><h2>CDN JS Hosting</h2><p>CamanJS is hosted on CDN JS if you&#39;re looking for a CDN hosting solution. It is the full and minified version of the library, which means all plugins are included. Simply load CamanJS directly from <a href="http://cdnjs.cloudflare.com/ajax/libs/camanjs/3.3.0/caman.full.min.js">this URL</a> for usage on your site.</p><h2>NodeJS Compatibility</h2><p>CamanJS is fully compatible with NodeJS. The easiest way to install it is:</p><pre><code>npm install caman</code></pre><p><strong>Saving from NodeJS</strong></p><p>To save your modified image in NodeJS, simply call the save() function <strong>after</strong> rendering is finished by passing a callback function to <code>render()</code>. Trying to save before rendering is finished will cause issues.</p><pre><code class="lang-javascript">Caman = require(&#39;caman&#39;).Caman;
130
-
131
- Caman(&quot;./path/to/file.jpg&quot;, function () {
132
- this.brightness(40);
133
- this.render(function () {
134
- this.save(&quot;./output.png&quot;);
135
- });
136
- });</code></pre>
137
- <h2>Testing</h2><p>Tests for CamanJS run both in NodeJS and the browser.</p><h3>NodeJS</h3><p>The NodeJS tests use mocha as the test runner. The simplest way to run the test suite is by running <code>npm test</code>.</p><h3>Browser</h3><p>The browser tests are run by Karma. It will start up Chrome, Firefox, and Safari (if running OSX) in the background. You can minimize each of these browsers if desired. It will automatically run tests after CamanJS is recompiled by the Cakefile as well.</p><p>You can run Karma by running <code>karma start</code>, or you can do a single run with the NodeJS tests by running <code>npm test</code>.</p>
138
- </div>
139
- </div>
140
- <div id='footer'>
141
- Generated on
142
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
143
- by
144
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
145
- v1.7.0
146
- (Node.js v0.10.21).
147
- &#10034;
148
- Press Ctrl-h to see the keyboard shortcuts
149
- &#10034;
150
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
151
- &#10034;
152
- <a href='https://mksoft.ch'>mksoft.ch</a>
153
- </div>
154
- </body>
155
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/assets/codo.css DELETED
@@ -1 +0,0 @@
1
- body{padding:0 5px;font-family:"Lucida Sans","Lucida Grande",Verdana,Arial,sans-serif;font-size:13px}h1{font-size:25px;margin:.8em 0 .5em;padding-top:4px;border-top:1px dotted #d5d5d5}h2{padding:0;padding-bottom:3px;border-bottom:1px #aaa solid;font-size:1.4em;margin:1.8em 0 .5em}#base{display:none}#fuzzySearch{-webkit-box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;-moz-box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;-webkit-border-radius:10px;-moz-border-radius:10px;-ms-border-radius:10px;-o-border-radius:10px;border-radius:10px;position:fixed;z-index:8000;left:0;right:0;top:25px;width:500px;height:45px;margin:0 auto;display:none;padding:25px;background-color:#fff}#fuzzySearch input{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;width:485px;border:2px solid #05a;font-size:20px;padding:5px}#fuzzySearch ol{list-style-type:none;margin:10px 0 0 0;padding:0}#fuzzySearch ol li{padding:3px}#fuzzySearch ol li.stripe{background:#F0F0F0}#fuzzySearch ol li.selected{background:#05a}#fuzzySearch ol li.selected a{color:#fff}#fuzzySearch ol li.selected a:visited{color:#fff}#fuzzySearch ol li.selected a:hover{color:#05a}#fuzzySearch ol li.selected a span{color:#05a}#fuzzySearch ol li a{color:#05a;font-size:18px;text-decoration:none}#fuzzySearch ol li a:visited{color:#05a}#fuzzySearch ol li a:hover{background:#ffffa5}#fuzzySearch ol li a span{background-color:#ff0}#fuzzySearch ol li small{font-size:14px;padding-left:10px;color:#888}#help{-webkit-box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;-moz-box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;-webkit-border-radius:10px;-moz-border-radius:10px;-ms-border-radius:10px;-o-border-radius:10px;border-radius:10px;position:fixed;z-index:8000;left:0;right:0;top:50%;width:500px;height:525px;margin:0 auto;margin-top:-262px;display:none;padding:25px;background-color:#fff}#help ul{list-style-type:none;margin:0;padding:0}#help ul li{height:35px;font-weight:bold}#help ul li span{-webkit-box-shadow:rgba(0,0,0,0.5) 1px 1px 2px;-moz-box-shadow:rgba(0,0,0,0.5) 1px 1px 2px;box-shadow:rgba(0,0,0,0.5) 1px 1px 2px;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;display:block;float:left;width:50px;padding:5px;margin-right:20px;background:#eee;text-align:center}#content a:link,#content a:visited{text-decoration:none;color:#05a}#content a:hover{background:#ffffa5}#content #filecontents img{border:0}#content #filecontents li{line-height:25px}#content #filecontents table{padding:0;border-collapse:collapse;border-spacing:0}#content #filecontents table tr{border-top:1px solid #CCC;background-color:white;margin:0;padding:0}#content #filecontents table tr td{border:1px solid #CCC;text-align:left;margin:0;padding:6px 13px}#content table.box{font-size:1em;line-height:2;border-spacing:0;border-collapse:collapse}#content table.box tr{background-color:#fff}#content table.box tr:first-child{background-color:#EEE}#content table.box tr td{border:1px solid #AAA}#content table.box tr td:first-child{width:100px;padding-right:10px;text-align:right;font-weight:bold}#content table.box tr td:last-child{min-width:420px;padding-left:10px;padding-right:10px}#content h1 .note,#content li .note,#content .properties .note{font-weight:normal;padding:3px 5px;position:relative;top:-3px;text-transform:capitalize;display:inline}#content h1 .note{font-size:.5em}#content li .note{top:0;font-size:.9em}#content .properties .note{top:0;font-size:.85em}#content ul.summary,#content .properties{list-style:none;font-family:monospace;font-size:1em;line-height:1.5em}#content ul.summary li,#content .properties li{margin-bottom:5px}#content ul.summary .signature,#content .properties .signature{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:1px 10px;color:#05A;background:#EAEAFF;border:1px solid #DFDFE5}#content ul.summary .signature a:hover,#content .properties .signature a:hover{background:transparent}#content ul.summary li[deprecated] .signature,#content .properties li[deprecated] .signature{text-decoration:line-through}#content ul.summary .signature+.note.title,#content .properties .signature+.note.title{margin-left:7px}#content ul.summary .desc,#content .properties .desc{margin-left:32px;display:block;font-family:sans-serif}#content ul.summary .desc p,#content .properties .desc p{padding:0;margin:0}#content dl.constants dt{font-weight:bold}#content dl.constants,#content dl.properties{margin-left:40px}#content dl.constants dt,#content dl.properties dt{font-size:1.1em;margin-bottom:5px}#content dl.constants dt .docstring,#content dl.properties dt .docstring{margin-left:32px;font-size:.9em;font-weight:normal}#content dl.constants dd,#content dl.properties dd{margin-bottom:18px}#content .method_details{border-top:1px dotted #AAA;margin-top:15px;padding-top:0}#content .method_details:first-child{border:none}#content .method_details p.signature{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;font-size:1.1em;font-weight:normal;font-family:Monaco,Consolas,Courier,monospace;padding:6px 10px;margin-top:18px;background:#E5E8FF;border:1px solid #D8D8E5}#content .tags{font-size:13px}#content .tags h3{font-size:1em;margin-bottom:3px}#content .tags ul{margin-top:0;padding-left:30px;list-style:square}#content .tags ul .name{font-family:monospace;font-weight:bold}#content .tags .overloads h3{margin-bottom:0}#content .tags .overloads .overload{margin-left:20px}#content .tags .overloads .overload p.signature{padding-top:2px;padding-bottom:2px}#content .note{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;margin-top:10px;color:#222;background:#E3E4E3;border:1px solid #D5D5D5;padding:7px 10px;display:block}#content .deprecated{background:#FFE5E5;border-color:#E9DADA}#content .writeonly{background:#d3ff97;border-color:#c3eb8b}#content .readonly{background:#FFE5E5;border-color:#E9DADA}#content .bound{background:#d3ff97;border-color:#c3eb8b}#content .todo{background:#FFFFC5;border-color:#ECECAA}#content .private{background:#D5D5D5;border-color:#C5C5C5}#content .constructor{color:white;background:#6A98D6;border-color:#6689D6}#content h3.inherited,#content h3.included,#content h3.extended{font-style:italic;font-family:"Lucida Sans","Lucida Grande",Verdana,Arial,sans-serif;font-weight:normal;padding:0;margin:0;margin-top:12px;margin-bottom:3px;font-size:13px}#content p.inherited,#content p.included,#content p.extended{word-spacing:5px;font-size:1.2em;padding:0;margin:0;margin-left:25px}#content p.inherited a,#content p.included a,#content p.extended a{font-family:monospace;font-size:.9em}#footer{margin-top:15px;border-top:1px solid #ccc;text-align:center;padding:7px 0;font-size:12px;color:#999}#footer a:link,#footer a:visited{color:#999;text-decoration:none;border-bottom:1px dotted #bbd}#footer a:hover{color:#05a}pre code{display:block;padding:.5em;color:#000;background:#f8f8ff}pre .comment,pre .template_comment,pre .diff .header,pre .javadoc{color:#998;font-style:italic}pre .keyword,pre .css .rule .keyword,pre .winutils,pre .javascript .title,pre .lisp .title,pre .subst{color:#000;font-weight:bold}pre .number,pre .hexcolor{color:#40a070}pre .string,pre .tag .value,pre .phpdoc,pre .tex .formula{color:#d14}pre .title,pre .id{color:#900;font-weight:bold}pre .javascript .title,pre .lisp .title,pre .subst{font-weight:normal}pre .class .title,pre .haskell .label,pre .tex .command{color:#458;font-weight:bold}pre .tag,pre .tag .title,pre .rules .property,pre .django .tag .keyword{color:#000080;font-weight:normal}pre .attribute,pre .variable,pre .instancevar,pre .lisp .body{color:#008080}pre .regexp{color:#009926}pre .class{color:#458;font-weight:bold}pre .symbol,pre .ruby .symbol .string,pre .ruby .symbol .keyword,pre .ruby .symbol .keymethods,pre .lisp .keyword,pre .tex .special,pre .input_number{color:#990073}pre .builtin,pre .built_in,pre .lisp .title{color:#0086b3}pre .preprocessor,pre .pi,pre .doctype,pre .shebang,pre .cdata{color:#999;font-weight:bold}pre .deletion{background:#fdd}pre .addition{background:#dfd}pre .diff .change{background:#0086b3}pre .chunk{color:#aaa}pre .tex .formula{opacity:.5}#menu{font-size:1.3em;color:#bbb;top:-5px;position:relative}#menu .title,#menu a{font-size:.7em}#menu .title a{font-size:1em}#menu .title{color:#555}#menu a:link,#menu a:visited{color:#333;text-decoration:none;border-bottom:1px dotted #bbd}#menu a:hover{color:#05a}#header nav{float:right;color:#000;font-size:.7em}#header nav ul{list-style-type:none;margin:4px!important}#header nav ul,#header nav ul li{margin:0;padding:0;display:inline}#header nav a{font-size:1em}#header #search{float:right;margin-top:-3px}#header #search a:link,#header #search a:visited{-webkit-box-shadow:#ddd -1px 1px 3px;-moz-box-shadow:#ddd -1px 1px 3px;box-shadow:#ddd -1px 1px 3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;display:block;float:left;margin-right:4px;padding:8px 10px;color:#05a;background:#eaf0ff;text-decoration:none;border:1px solid #d8d8e5}#header #search a:hover{background:#f5faff;color:#06b}#header #search a.active{-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;border-top-right-radius:5px;padding-bottom:20px;color:#fff;background:#568;border:1px solid #457}#header #search a.inactive{color:#999}body.frames #header li.frames{display:none}body.frames #header #search{display:none}body.noframes #header li.noframes{display:none}#search_frame{-webkit-box-shadow:#aaa -7px 5px 25px;-moz-box-shadow:#aaa -7px 5px 25px;box-shadow:#aaa -7px 5px 25px;display:none;position:absolute;overflow-y:scroll;z-index:9999;top:36px;right:18px;width:500px;height:80%;background:white;border:1px solid #999;border-collapse:collapse}pre{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;-webkit-box-shadow:rgba(0,0,0,0.1) 1px 1px 2px;-moz-box-shadow:rgba(0,0,0,0.1) 1px 1px 2px;box-shadow:rgba(0,0,0,0.1) 1px 1px 2px;padding:0;margin-top:4px;border:1px solid #EAEAEA;background-color:#F8F8F8;font-family:monospace}pre.code{word-wrap:break-word}pre code{border:0;white-space:pre;overflow:hidden;word-wrap:break-word}code{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;margin:0 2px;padding:0 5px;white-space:nowrap;border:1px solid #EAEAEA;background-color:#F8F8F8}pre>code{white-space:wrap}.docstring p>code,.docstring li>code{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;margin:0 2px;padding:0 5px;white-space:nowrap;border:1px solid #EAEAEA;background-color:#F8F8F8}.alphaindex{margin-top:0;font-size:22px}.noborder{border-top:0;margin-top:0;padding-top:4px}.title{margin-bottom:10px}#files{padding:0;font-size:1.1em}#files li{list-style:none;display:inline;padding:7px 12px;line-height:35px;background:#F0F0F0;margin-right:5px}.index{-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3;-webkit-column-width:33%;-moz-column-width:33%;-ms-column-width:33%;-o-column-width:33%;column-width:33%}.index>ul{margin:0;padding:0;padding-bottom:10px;font-size:1.1em;list-style:none}.index>ul>li.letter{-webkit-column-break-after:avoid;font-size:1.4em;padding-bottom:10px;text-transform:uppercase}.index>ul>ul{margin:0;padding-left:20px}.index>ul>ul small{color:#666;font-size:.7em}body.list{padding:0;margin:0}body.noframes #content.list nav{display:none}body.noframes #content.list #search{position:absolute;right:5px;top:9px;padding-left:10px}body.frames #content.list #search{position:relative;margin-top:5px;margin-left:10px}#content.list.tree>ul{margin-top:13px!important}#content.list.tree ul{font-size:16px;margin:0;padding:0}#content.list.tree ul li{margin:0;padding:5px;color:#000;font-size:1em;list-style:none;white-space:nowrap;overflow:hidden;cursor:pointer}#content.list.tree ul li.namespace{overflow:visible}#content.list.tree ul li>a.toggle{display:block;float:left;width:10px;height:10px;margin-top:5px;margin-left:5px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTM5jWRgMAAAAVdEVYdENyZWF0aW9uIFRpbWUAMy8xNC8wOeNZPpQAAAE2SURBVDiNrZTBccIwEEXfelIAHUA6CZ24BGaWO+FuzZAK4k6gg5QAdGAq+Bxs2Yqx7BzyL7Llp/VfzZeQhCTc/ezuGzKKnKSzpCxXJM8fwNXda3df5RZETlIt6YUzSQDs93sl8w3wBZxCCE10GM1OcWbWjB2mWgEH4Mfdyxm3PSepBHibgQE2wLe7r4HjEidpnXMYdQPKEMJcsZ4zs2POYQOcaPfwMVOo58zsAdMt18BuoVDPxUJRacELbXv3hUIX2vYmOUvi8C8ydz/ThjXrqKqqLbDIAdsCKBd+Wo7GWa7o9qzOQHVVVXeAbs+yHHCH4aTsaCOQqunmUy1yBUAXkdMIfMlgF5EXLo2OpV/c/Up7jG4hhHcYLgWzAZXUc2b2ixsfvc/RmNNfOXD3Q/oeL9axJE1yT9IOoUu6MGUkAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:0 -10px}#content.list.tree ul li>a.toggle.collapsed{background-position:0 0}#content.list.tree ul li>span,#content.list.tree ul li a{margin-left:20px;text-decoration:none}#content.list.tree ul li>a.toggle+span,#content.list.tree ul li a.toggle+a{margin-left:5px}#content.list.tree ul li small{color:#888;white-space:nowrap}#content.list.tree ul li small.namespace{display:none}#content.list.tree ul li.result a.toggle{visibility:hidden}#content.list.tree ul li.result small.namespace{display:inline}#content.list.tree ul li.result small.parent{display:none}#content.list{padding:0;margin:0}#content.list h1{padding:12px 10px;padding-bottom:10px;margin:0;font-size:1.4em}#content.list a:hover{background:transparent}#content.list nav{margin-left:10px}#content.list #search{color:#888}#content.list #search input{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;border:1px solid #BBB}#content.list a{color:#05A;cursor:pointer;text-decoration:none}#content.list a:hover{text-decoration:underline}#content.list ul{padding:0;list-style:none;margin-left:0}#content.list ul li[deprecated]{text-decoration:line-through}#content.list ul li{padding:5px;padding-left:12px;margin:0;font-size:1.1em;list-style:none;color:#888;cursor:pointer}#content.list ul li.stripe{background:#F0F0F0}#content.list ul li:hover{background:#ddd}nav.toc{-webkit-box-shadow:#bbb -2px 2px 6px;-moz-box-shadow:#bbb -2px 2px 6px;box-shadow:#bbb -2px 2px 6px;overflow:hidden;float:right;z-index:500;right:0;max-width:300px;padding:20px;padding-right:30px;margin-left:20px;margin-bottom:20px;background:white;border:1px solid #DDD}nav.toc p.title{margin-top:5px}nav.toc ol{padding-left:1.8em}nav.toc li{font-size:1.1em;line-height:1.7em}nav.toc>ol>li{font-size:1.1em;font-weight:bold}nav.toc ol>ol{font-size:.9em}nav.toc.inline{-webkit-box-shadow:white 0 0 0;-moz-box-shadow:white 0 0 0;box-shadow:white 0 0 0;position:relative;float:none;padding:0;margin:5px 0 0 0;border:0}nav.toc.inline.hidden{background:none;padding:0;text-align:left}nav.toc.hidden{height:26px;width:140px;padding:5px;background:#F6F6F6;text-align:center}nav.toc.hidden p.title small{display:none}
 
includes/pickers/caman/api/assets/codo.js DELETED
@@ -1,21 +0,0 @@
1
- /*!
2
- * jQuery JavaScript Library v1.8.1
3
- * http://jquery.com/
4
- *
5
- * Includes Sizzle.js
6
- * http://sizzlejs.com/
7
- *
8
- * Copyright 2012 jQuery Foundation and other contributors
9
- * Released under the MIT license
10
- * http://jquery.org/license
11
- *
12
- * Date: Thu Aug 30 2012 17:17:22 GMT-0400 (Eastern Daylight Time)
13
- */
14
- (function(a2,aB){var w,af,o=a2.document,aI=a2.location,d=a2.navigator,bg=a2.jQuery,I=a2.$,am=Array.prototype.push,a4=Array.prototype.slice,aK=Array.prototype.indexOf,z=Object.prototype.toString,V=Object.prototype.hasOwnProperty,aO=String.prototype.trim,bG=function(e,bZ){return new bG.fn.init(e,bZ,w)},bx=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,aa=/\S/,aV=/\s+/,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,bo=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,a=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,bf=/^[\],:{}\s]*$/,bi=/(?:^|:|,)(?:\s*\[)+/g,bD=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,a0=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,bP=/^-ms-/,aU=/-([\da-z])/gi,N=function(e,bZ){return(bZ+"").toUpperCase()},aF=function(){if(o.addEventListener){o.removeEventListener("DOMContentLoaded",aF,false);bG.ready()}else{if(o.readyState==="complete"){o.detachEvent("onreadystatechange",aF);bG.ready()}}},Z={};bG.fn=bG.prototype={constructor:bG,init:function(e,b2,b1){var b0,b3,bZ,b4;if(!e){return this}if(e.nodeType){this.context=this[0]=e;this.length=1;return this}if(typeof e==="string"){if(e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3){b0=[null,e,null]}else{b0=bo.exec(e)}if(b0&&(b0[1]||!b2)){if(b0[1]){b2=b2 instanceof bG?b2[0]:b2;b4=(b2&&b2.nodeType?b2.ownerDocument||b2:o);e=bG.parseHTML(b0[1],b4,true);if(a.test(b0[1])&&bG.isPlainObject(b2)){this.attr.call(e,b2,true)}return bG.merge(this,e)}else{b3=o.getElementById(b0[2]);if(b3&&b3.parentNode){if(b3.id!==b0[2]){return b1.find(e)}this.length=1;this[0]=b3}this.context=o;this.selector=e;return this}}else{if(!b2||b2.jquery){return(b2||b1).find(e)}else{return this.constructor(b2).find(e)}}}else{if(bG.isFunction(e)){return b1.ready(e)}}if(e.selector!==aB){this.selector=e.selector;this.context=e.context}return bG.makeArray(e,this)},selector:"",jquery:"1.8.1",length:0,size:function(){return this.length},toArray:function(){return a4.call(this)},get:function(e){return e==null?this.toArray():(e<0?this[this.length+e]:this[e])},pushStack:function(bZ,b1,e){var b0=bG.merge(this.constructor(),bZ);b0.prevObject=this;b0.context=this.context;if(b1==="find"){b0.selector=this.selector+(this.selector?" ":"")+e}else{if(b1){b0.selector=this.selector+"."+b1+"("+e+")"}}return b0},each:function(bZ,e){return bG.each(this,bZ,e)},ready:function(e){bG.ready.promise().done(e);return this},eq:function(e){e=+e;return e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(a4.apply(this,arguments),"slice",a4.call(arguments).join(","))},map:function(e){return this.pushStack(bG.map(this,function(b0,bZ){return e.call(b0,bZ,b0)}))},end:function(){return this.prevObject||this.constructor(null)},push:am,sort:[].sort,splice:[].splice};bG.fn.init.prototype=bG.fn;bG.extend=bG.fn.extend=function(){var b7,b0,e,bZ,b4,b5,b3=arguments[0]||{},b2=1,b1=arguments.length,b6=false;if(typeof b3==="boolean"){b6=b3;b3=arguments[1]||{};b2=2}if(typeof b3!=="object"&&!bG.isFunction(b3)){b3={}}if(b1===b2){b3=this;--b2}for(;b2<b1;b2++){if((b7=arguments[b2])!=null){for(b0 in b7){e=b3[b0];bZ=b7[b0];if(b3===bZ){continue}if(b6&&bZ&&(bG.isPlainObject(bZ)||(b4=bG.isArray(bZ)))){if(b4){b4=false;b5=e&&bG.isArray(e)?e:[]}else{b5=e&&bG.isPlainObject(e)?e:{}}b3[b0]=bG.extend(b6,b5,bZ)}else{if(bZ!==aB){b3[b0]=bZ}}}}}return b3};bG.extend({noConflict:function(e){if(a2.$===bG){a2.$=I}if(e&&a2.jQuery===bG){a2.jQuery=bg}return bG},isReady:false,readyWait:1,holdReady:function(e){if(e){bG.readyWait++}else{bG.ready(true)}},ready:function(e){if(e===true?--bG.readyWait:bG.isReady){return}if(!o.body){return setTimeout(bG.ready,1)}bG.isReady=true;if(e!==true&&--bG.readyWait>0){return}af.resolveWith(o,[bG]);if(bG.fn.trigger){bG(o).trigger("ready").off("ready")}},isFunction:function(e){return bG.type(e)==="function"},isArray:Array.isArray||function(e){return bG.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return !isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):Z[z.call(e)]||"object"},isPlainObject:function(b1){if(!b1||bG.type(b1)!=="object"||b1.nodeType||bG.isWindow(b1)){return false}try{if(b1.constructor&&!V.call(b1,"constructor")&&!V.call(b1.constructor.prototype,"isPrototypeOf")){return false}}catch(b0){return false}var bZ;for(bZ in b1){}return bZ===aB||V.call(b1,bZ)},isEmptyObject:function(bZ){var e;for(e in bZ){return false}return true},error:function(e){throw new Error(e)},parseHTML:function(b1,b0,e){var bZ;if(!b1||typeof b1!=="string"){return null}if(typeof b0==="boolean"){e=b0;b0=0}b0=b0||o;if((bZ=a.exec(b1))){return[b0.createElement(bZ[1])]}bZ=bG.buildFragment([b1],b0,e?null:[]);return bG.merge([],(bZ.cacheable?bG.clone(bZ.fragment):bZ.fragment).childNodes)},parseJSON:function(e){if(!e||typeof e!=="string"){return null}e=bG.trim(e);if(a2.JSON&&a2.JSON.parse){return a2.JSON.parse(e)}if(bf.test(e.replace(bD,"@").replace(a0,"]").replace(bi,""))){return(new Function("return "+e))()}bG.error("Invalid JSON: "+e)},parseXML:function(b1){var bZ,b0;if(!b1||typeof b1!=="string"){return null}try{if(a2.DOMParser){b0=new DOMParser();bZ=b0.parseFromString(b1,"text/xml")}else{bZ=new ActiveXObject("Microsoft.XMLDOM");bZ.async="false";bZ.loadXML(b1)}}catch(b2){bZ=aB}if(!bZ||!bZ.documentElement||bZ.getElementsByTagName("parsererror").length){bG.error("Invalid XML: "+b1)}return bZ},noop:function(){},globalEval:function(e){if(e&&aa.test(e)){(a2.execScript||function(bZ){a2["eval"].call(a2,bZ)})(e)}},camelCase:function(e){return e.replace(bP,"ms-").replace(aU,N)},nodeName:function(bZ,e){return bZ.nodeName&&bZ.nodeName.toUpperCase()===e.toUpperCase()},each:function(b3,b4,b0){var bZ,b1=0,b2=b3.length,e=b2===aB||bG.isFunction(b3);if(b0){if(e){for(bZ in b3){if(b4.apply(b3[bZ],b0)===false){break}}}else{for(;b1<b2;){if(b4.apply(b3[b1++],b0)===false){break}}}}else{if(e){for(bZ in b3){if(b4.call(b3[bZ],bZ,b3[bZ])===false){break}}}else{for(;b1<b2;){if(b4.call(b3[b1],b1,b3[b1++])===false){break}}}}return b3},trim:aO&&!aO.call("\uFEFF\xA0")?function(e){return e==null?"":aO.call(e)}:function(e){return e==null?"":e.toString().replace(C,"")},makeArray:function(e,b0){var b1,bZ=b0||[];if(e!=null){b1=bG.type(e);if(e.length==null||b1==="string"||b1==="function"||b1==="regexp"||bG.isWindow(e)){am.call(bZ,e)}else{bG.merge(bZ,e)}}return bZ},inArray:function(b1,bZ,b0){var e;if(bZ){if(aK){return aK.call(bZ,b1,b0)}e=bZ.length;b0=b0?b0<0?Math.max(0,e+b0):b0:0;for(;b0<e;b0++){if(b0 in bZ&&bZ[b0]===b1){return b0}}}return -1},merge:function(b2,b0){var e=b0.length,b1=b2.length,bZ=0;if(typeof e==="number"){for(;bZ<e;bZ++){b2[b1++]=b0[bZ]}}else{while(b0[bZ]!==aB){b2[b1++]=b0[bZ++]}}b2.length=b1;return b2},grep:function(bZ,b4,e){var b3,b0=[],b1=0,b2=bZ.length;e=!!e;for(;b1<b2;b1++){b3=!!b4(bZ[b1],b1);if(e!==b3){b0.push(bZ[b1])}}return b0},map:function(e,b5,b6){var b3,b4,b2=[],b0=0,bZ=e.length,b1=e instanceof bG||bZ!==aB&&typeof bZ==="number"&&((bZ>0&&e[0]&&e[bZ-1])||bZ===0||bG.isArray(e));if(b1){for(;b0<bZ;b0++){b3=b5(e[b0],b0,b6);if(b3!=null){b2[b2.length]=b3}}}else{for(b4 in e){b3=b5(e[b4],b4,b6);if(b3!=null){b2[b2.length]=b3}}}return b2.concat.apply([],b2)},guid:1,proxy:function(b2,b1){var b0,e,bZ;if(typeof b1==="string"){b0=b2[b1];b1=b2;b2=b0}if(!bG.isFunction(b2)){return aB}e=a4.call(arguments,2);bZ=function(){return b2.apply(b1,e.concat(a4.call(arguments)))};bZ.guid=b2.guid=b2.guid||bZ.guid||bG.guid++;return bZ},access:function(e,b4,b7,b5,b2,b8,b6){var b0,b3=b7==null,b1=0,bZ=e.length;if(b7&&typeof b7==="object"){for(b1 in b7){bG.access(e,b4,b1,b7[b1],1,b8,b5)}b2=1}else{if(b5!==aB){b0=b6===aB&&bG.isFunction(b5);if(b3){if(b0){b0=b4;b4=function(ca,b9,cb){return b0.call(bG(ca),cb)}}else{b4.call(e,b5);b4=null}}if(b4){for(;b1<bZ;b1++){b4(e[b1],b7,b0?b5.call(e[b1],b1,b4(e[b1],b7)):b5,b6)}}b2=1}}return b2?e:b3?b4.call(e):bZ?b4(e[0],b7):b8},now:function(){return(new Date()).getTime()}});bG.ready.promise=function(b2){if(!af){af=bG.Deferred();if(o.readyState==="complete"){setTimeout(bG.ready,1)}else{if(o.addEventListener){o.addEventListener("DOMContentLoaded",aF,false);a2.addEventListener("load",bG.ready,false)}else{o.attachEvent("onreadystatechange",aF);a2.attachEvent("onload",bG.ready);var b1=false;try{b1=a2.frameElement==null&&o.documentElement}catch(b0){}if(b1&&b1.doScroll){(function bZ(){if(!bG.isReady){try{b1.doScroll("left")}catch(b3){return setTimeout(bZ,50)}bG.ready()}})()}}}}return af.promise(b2)};bG.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(bZ,e){Z["[object "+e+"]"]=e.toLowerCase()});w=bG(o);var bU={};function ac(bZ){var e=bU[bZ]={};bG.each(bZ.split(aV),function(b1,b0){e[b0]=true});return e}bG.Callbacks=function(b8){b8=typeof b8==="string"?(bU[b8]||ac(b8)):bG.extend({},b8);var b1,e,b2,b0,b3,b4,b5=[],b6=!b8.once&&[],bZ=function(b9){b1=b8.memory&&b9;e=true;b4=b0||0;b0=0;b3=b5.length;b2=true;for(;b5&&b4<b3;b4++){if(b5[b4].apply(b9[0],b9[1])===false&&b8.stopOnFalse){b1=false;break}}b2=false;if(b5){if(b6){if(b6.length){bZ(b6.shift())}}else{if(b1){b5=[]}else{b7.disable()}}}},b7={add:function(){if(b5){var ca=b5.length;(function b9(cb){bG.each(cb,function(cd,cc){var ce=bG.type(cc);if(ce==="function"&&(!b8.unique||!b7.has(cc))){b5.push(cc)}else{if(cc&&cc.length&&ce!=="string"){b9(cc)}}})})(arguments);if(b2){b3=b5.length}else{if(b1){b0=ca;bZ(b1)}}}return this},remove:function(){if(b5){bG.each(arguments,function(cb,b9){var ca;while((ca=bG.inArray(b9,b5,ca))>-1){b5.splice(ca,1);if(b2){if(ca<=b3){b3--}if(ca<=b4){b4--}}}})}return this},has:function(b9){return bG.inArray(b9,b5)>-1},empty:function(){b5=[];return this},disable:function(){b5=b6=b1=aB;return this},disabled:function(){return !b5},lock:function(){b6=aB;if(!b1){b7.disable()}return this},locked:function(){return !b6},fireWith:function(ca,b9){b9=b9||[];b9=[ca,b9.slice?b9.slice():b9];if(b5&&(!e||b6)){if(b2){b6.push(b9)}else{bZ(b9)}}return this},fire:function(){b7.fireWith(this,arguments);return this},fired:function(){return !!e}};return b7};bG.extend({Deferred:function(b0){var bZ=[["resolve","done",bG.Callbacks("once memory"),"resolved"],["reject","fail",bG.Callbacks("once memory"),"rejected"],["notify","progress",bG.Callbacks("memory")]],b1="pending",b2={state:function(){return b1},always:function(){e.done(arguments).fail(arguments);return this},then:function(){var b3=arguments;return bG.Deferred(function(b4){bG.each(bZ,function(b6,b5){var b8=b5[0],b7=b3[b6];e[b5[1]](bG.isFunction(b7)?function(){var b9=b7.apply(this,arguments);if(b9&&bG.isFunction(b9.promise)){b9.promise().done(b4.resolve).fail(b4.reject).progress(b4.notify)}else{b4[b8+"With"](this===e?b4:this,[b9])}}:b4[b8])});b3=null}).promise()},promise:function(b3){return typeof b3==="object"?bG.extend(b3,b2):b2}},e={};b2.pipe=b2.then;bG.each(bZ,function(b4,b3){var b6=b3[2],b5=b3[3];b2[b3[1]]=b6.add;if(b5){b6.add(function(){b1=b5},bZ[b4^1][2].disable,bZ[2][2].lock)}e[b3[0]]=b6.fire;e[b3[0]+"With"]=b6.fireWith});b2.promise(e);if(b0){b0.call(e,e)}return e},when:function(b2){var b0=0,b4=a4.call(arguments),e=b4.length,bZ=e!==1||(b2&&bG.isFunction(b2.promise))?e:0,b7=bZ===1?b2:bG.Deferred(),b1=function(b9,ca,b8){return function(cb){ca[b9]=this;b8[b9]=arguments.length>1?a4.call(arguments):cb;if(b8===b6){b7.notifyWith(ca,b8)}else{if(!(--bZ)){b7.resolveWith(ca,b8)}}}},b6,b3,b5;if(e>1){b6=new Array(e);b3=new Array(e);b5=new Array(e);for(;b0<e;b0++){if(b4[b0]&&bG.isFunction(b4[b0].promise)){b4[b0].promise().done(b1(b0,b5,b4)).fail(b7.reject).progress(b1(b0,b3,b6))}else{--bZ}}}if(!bZ){b7.resolveWith(b5,b4)}return b7.promise()}});bG.support=(function(){var cb,ca,b8,b9,b2,b7,b6,b4,b3,b1,bZ,b0=o.createElement("div");b0.setAttribute("className","t");b0.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";ca=b0.getElementsByTagName("*");b8=b0.getElementsByTagName("a")[0];b8.style.cssText="top:1px;float:left;opacity:.5";if(!ca||!ca.length||!b8){return{}}b9=o.createElement("select");b2=b9.appendChild(o.createElement("option"));b7=b0.getElementsByTagName("input")[0];cb={leadingWhitespace:(b0.firstChild.nodeType===3),tbody:!b0.getElementsByTagName("tbody").length,htmlSerialize:!!b0.getElementsByTagName("link").length,style:/top/.test(b8.getAttribute("style")),hrefNormalized:(b8.getAttribute("href")==="/a"),opacity:/^0.5/.test(b8.style.opacity),cssFloat:!!b8.style.cssFloat,checkOn:(b7.value==="on"),optSelected:b2.selected,getSetAttribute:b0.className!=="t",enctype:!!o.createElement("form").enctype,html5Clone:o.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",boxModel:(o.compatMode==="CSS1Compat"),submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true,boxSizingReliable:true,pixelPosition:false};b7.checked=true;cb.noCloneChecked=b7.cloneNode(true).checked;b9.disabled=true;cb.optDisabled=!b2.disabled;try{delete b0.test}catch(b5){cb.deleteExpando=false}if(!b0.addEventListener&&b0.attachEvent&&b0.fireEvent){b0.attachEvent("onclick",bZ=function(){cb.noCloneEvent=false});b0.cloneNode(true).fireEvent("onclick");b0.detachEvent("onclick",bZ)}b7=o.createElement("input");b7.value="t";b7.setAttribute("type","radio");cb.radioValue=b7.value==="t";b7.setAttribute("checked","checked");b7.setAttribute("name","t");b0.appendChild(b7);b6=o.createDocumentFragment();b6.appendChild(b0.lastChild);cb.checkClone=b6.cloneNode(true).cloneNode(true).lastChild.checked;cb.appendChecked=b7.checked;b6.removeChild(b7);b6.appendChild(b0);if(b0.attachEvent){for(b3 in {submit:true,change:true,focusin:true}){b4="on"+b3;b1=(b4 in b0);if(!b1){b0.setAttribute(b4,"return;");b1=(typeof b0[b4]==="function")}cb[b3+"Bubbles"]=b1}}bG(function(){var cc,cg,ce,cf,cd="padding:0;margin:0;border:0;display:block;overflow:hidden;",e=o.getElementsByTagName("body")[0];if(!e){return}cc=o.createElement("div");cc.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px";e.insertBefore(cc,e.firstChild);cg=o.createElement("div");cc.appendChild(cg);cg.innerHTML="<table><tr><td></td><td>t</td></tr></table>";ce=cg.getElementsByTagName("td");ce[0].style.cssText="padding:0;margin:0;border:0;display:none";b1=(ce[0].offsetHeight===0);ce[0].style.display="";ce[1].style.display="none";cb.reliableHiddenOffsets=b1&&(ce[0].offsetHeight===0);cg.innerHTML="";cg.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";cb.boxSizing=(cg.offsetWidth===4);cb.doesNotIncludeMarginInBodyOffset=(e.offsetTop!==1);if(a2.getComputedStyle){cb.pixelPosition=(a2.getComputedStyle(cg,null)||{}).top!=="1%";cb.boxSizingReliable=(a2.getComputedStyle(cg,null)||{width:"4px"}).width==="4px";cf=o.createElement("div");cf.style.cssText=cg.style.cssText=cd;cf.style.marginRight=cf.style.width="0";cg.style.width="1px";cg.appendChild(cf);cb.reliableMarginRight=!parseFloat((a2.getComputedStyle(cf,null)||{}).marginRight)}if(typeof cg.style.zoom!=="undefined"){cg.innerHTML="";cg.style.cssText=cd+"width:1px;padding:1px;display:inline;zoom:1";cb.inlineBlockNeedsLayout=(cg.offsetWidth===3);cg.style.display="block";cg.style.overflow="visible";cg.innerHTML="<div></div>";cg.firstChild.style.width="5px";cb.shrinkWrapBlocks=(cg.offsetWidth!==3);cc.style.zoom=1}e.removeChild(cc);cc=cg=ce=cf=null});b6.removeChild(b0);ca=b8=b9=b2=b7=b6=b0=null;return cb})();var bt=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,aL=/([A-Z])/g;bG.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(bG.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?bG.cache[e[bG.expando]]:e[bG.expando];return !!e&&!O(e)},data:function(b1,bZ,b3,b2){if(!bG.acceptData(b1)){return}var b4,b6,b7=bG.expando,b5=typeof bZ==="string",b8=b1.nodeType,e=b8?bG.cache:b1,b0=b8?b1[b7]:b1[b7]&&b7;if((!b0||!e[b0]||(!b2&&!e[b0].data))&&b5&&b3===aB){return}if(!b0){if(b8){b1[b7]=b0=bG.deletedIds.pop()||++bG.uuid}else{b0=b7}}if(!e[b0]){e[b0]={};if(!b8){e[b0].toJSON=bG.noop}}if(typeof bZ==="object"||typeof bZ==="function"){if(b2){e[b0]=bG.extend(e[b0],bZ)}else{e[b0].data=bG.extend(e[b0].data,bZ)}}b4=e[b0];if(!b2){if(!b4.data){b4.data={}}b4=b4.data}if(b3!==aB){b4[bG.camelCase(bZ)]=b3}if(b5){b6=b4[bZ];if(b6==null){b6=b4[bG.camelCase(bZ)]}}else{b6=b4}return b6},removeData:function(b1,bZ,b2){if(!bG.acceptData(b1)){return}var b5,b4,b3,b6=b1.nodeType,e=b6?bG.cache:b1,b0=b6?b1[bG.expando]:bG.expando;if(!e[b0]){return}if(bZ){b5=b2?e[b0]:e[b0].data;if(b5){if(!bG.isArray(bZ)){if(bZ in b5){bZ=[bZ]}else{bZ=bG.camelCase(bZ);if(bZ in b5){bZ=[bZ]}else{bZ=bZ.split(" ")}}}for(b4=0,b3=bZ.length;b4<b3;b4++){delete b5[bZ[b4]]}if(!(b2?O:bG.isEmptyObject)(b5)){return}}}if(!b2){delete e[b0].data;if(!O(e[b0])){return}}if(b6){bG.cleanData([b1],true)}else{if(bG.support.deleteExpando||e!=e.window){delete e[b0]}else{e[b0]=null}}},_data:function(bZ,e,b0){return bG.data(bZ,e,b0,true)},acceptData:function(bZ){var e=bZ.nodeName&&bG.noData[bZ.nodeName.toLowerCase()];return !e||e!==true&&bZ.getAttribute("classid")===e}});bG.fn.extend({data:function(b7,b6){var b2,bZ,b5,e,b1,b0=this[0],b4=0,b3=null;if(b7===aB){if(this.length){b3=bG.data(b0);if(b0.nodeType===1&&!bG._data(b0,"parsedAttrs")){b5=b0.attributes;for(b1=b5.length;b4<b1;b4++){e=b5[b4].name;if(e.indexOf("data-")===0){e=bG.camelCase(e.substring(5));bv(b0,e,b3[e])}}bG._data(b0,"parsedAttrs",true)}}return b3}if(typeof b7==="object"){return this.each(function(){bG.data(this,b7)})}b2=b7.split(".",2);b2[1]=b2[1]?"."+b2[1]:"";bZ=b2[1]+"!";return bG.access(this,function(b8){if(b8===aB){b3=this.triggerHandler("getData"+bZ,[b2[0]]);if(b3===aB&&b0){b3=bG.data(b0,b7);b3=bv(b0,b7,b3)}return b3===aB&&b2[1]?this.data(b2[0]):b3}b2[1]=b8;this.each(function(){var b9=bG(this);b9.triggerHandler("setData"+bZ,b2);bG.data(this,b7,b8);b9.triggerHandler("changeData"+bZ,b2)})},null,b6,arguments.length>1,null,false)},removeData:function(e){return this.each(function(){bG.removeData(this,e)})}});function bv(b1,b0,b2){if(b2===aB&&b1.nodeType===1){var bZ="data-"+b0.replace(aL,"-$1").toLowerCase();b2=b1.getAttribute(bZ);if(typeof b2==="string"){try{b2=b2==="true"?true:b2==="false"?false:b2==="null"?null:+b2+""===b2?+b2:bt.test(b2)?bG.parseJSON(b2):b2}catch(b3){}bG.data(b1,b0,b2)}else{b2=aB}}return b2}function O(bZ){var e;for(e in bZ){if(e==="data"&&bG.isEmptyObject(bZ[e])){continue}if(e!=="toJSON"){return false}}return true}bG.extend({queue:function(b0,bZ,b1){var e;if(b0){bZ=(bZ||"fx")+"queue";e=bG._data(b0,bZ);if(b1){if(!e||bG.isArray(b1)){e=bG._data(b0,bZ,bG.makeArray(b1))}else{e.push(b1)}}return e||[]}},dequeue:function(b3,b2){b2=b2||"fx";var bZ=bG.queue(b3,b2),b4=bZ.length,b1=bZ.shift(),e=bG._queueHooks(b3,b2),b0=function(){bG.dequeue(b3,b2)};if(b1==="inprogress"){b1=bZ.shift();b4--}if(b1){if(b2==="fx"){bZ.unshift("inprogress")}delete e.stop;b1.call(b3,b0,e)}if(!b4&&e){e.empty.fire()}},_queueHooks:function(b0,bZ){var e=bZ+"queueHooks";return bG._data(b0,e)||bG._data(b0,e,{empty:bG.Callbacks("once memory").add(function(){bG.removeData(b0,bZ+"queue",true);bG.removeData(b0,e,true)})})}});bG.fn.extend({queue:function(e,bZ){var b0=2;if(typeof e!=="string"){bZ=e;e="fx";b0--}if(arguments.length<b0){return bG.queue(this[0],e)}return bZ===aB?this:this.each(function(){var b1=bG.queue(this,e,bZ);bG._queueHooks(this,e);if(e==="fx"&&b1[0]!=="inprogress"){bG.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){bG.dequeue(this,e)})},delay:function(bZ,e){bZ=bG.fx?bG.fx.speeds[bZ]||bZ:bZ;e=e||"fx";return this.queue(e,function(b1,b0){var b2=setTimeout(b1,bZ);b0.stop=function(){clearTimeout(b2)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(b0,b4){var bZ,b1=1,b5=bG.Deferred(),b3=this,e=this.length,b2=function(){if(!(--b1)){b5.resolveWith(b3,[b3])}};if(typeof b0!=="string"){b4=b0;b0=aB}b0=b0||"fx";while(e--){bZ=bG._data(b3[e],b0+"queueHooks");if(bZ&&bZ.empty){b1++;bZ.empty.add(b2)}}b2();return b5.promise(b4)}});var a7,bV,n,bJ=/[\t\r\n]/g,ai=/\r/g,j=/^(?:button|input)$/i,aA=/^(?:button|input|object|select|textarea)$/i,D=/^a(?:rea|)$/i,M=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,bL=bG.support.getSetAttribute;bG.fn.extend({attr:function(e,bZ){return bG.access(this,bG.attr,e,bZ,arguments.length>1)},removeAttr:function(e){return this.each(function(){bG.removeAttr(this,e)})},prop:function(e,bZ){return bG.access(this,bG.prop,e,bZ,arguments.length>1)},removeProp:function(e){e=bG.propFix[e]||e;return this.each(function(){try{this[e]=aB;delete this[e]}catch(bZ){}})},addClass:function(b2){var b4,b0,bZ,b1,b3,b5,e;if(bG.isFunction(b2)){return this.each(function(b6){bG(this).addClass(b2.call(this,b6,this.className))})}if(b2&&typeof b2==="string"){b4=b2.split(aV);for(b0=0,bZ=this.length;b0<bZ;b0++){b1=this[b0];if(b1.nodeType===1){if(!b1.className&&b4.length===1){b1.className=b2}else{b3=" "+b1.className+" ";for(b5=0,e=b4.length;b5<e;b5++){if(!~b3.indexOf(" "+b4[b5]+" ")){b3+=b4[b5]+" "}}b1.className=bG.trim(b3)}}}}return this},removeClass:function(b4){var b1,b2,b3,b5,bZ,b0,e;if(bG.isFunction(b4)){return this.each(function(b6){bG(this).removeClass(b4.call(this,b6,this.className))})}if((b4&&typeof b4==="string")||b4===aB){b1=(b4||"").split(aV);for(b0=0,e=this.length;b0<e;b0++){b3=this[b0];if(b3.nodeType===1&&b3.className){b2=(" "+b3.className+" ").replace(bJ," ");for(b5=0,bZ=b1.length;b5<bZ;b5++){while(b2.indexOf(" "+b1[b5]+" ")>-1){b2=b2.replace(" "+b1[b5]+" "," ")}}b3.className=b4?bG.trim(b2):""}}}return this},toggleClass:function(b1,bZ){var b0=typeof b1,e=typeof bZ==="boolean";if(bG.isFunction(b1)){return this.each(function(b2){bG(this).toggleClass(b1.call(this,b2,this.className,bZ),bZ)})}return this.each(function(){if(b0==="string"){var b4,b3=0,b2=bG(this),b5=bZ,b6=b1.split(aV);while((b4=b6[b3++])){b5=e?b5:!b2.hasClass(b4);b2[b5?"addClass":"removeClass"](b4)}}else{if(b0==="undefined"||b0==="boolean"){if(this.className){bG._data(this,"__className__",this.className)}this.className=this.className||b1===false?"":bG._data(this,"__className__")||""}}})},hasClass:function(e){var b1=" "+e+" ",b0=0,bZ=this.length;for(;b0<bZ;b0++){if(this[b0].nodeType===1&&(" "+this[b0].className+" ").replace(bJ," ").indexOf(b1)>-1){return true}}return false},val:function(b1){var e,bZ,b2,b0=this[0];if(!arguments.length){if(b0){e=bG.valHooks[b0.type]||bG.valHooks[b0.nodeName.toLowerCase()];if(e&&"get" in e&&(bZ=e.get(b0,"value"))!==aB){return bZ}bZ=b0.value;return typeof bZ==="string"?bZ.replace(ai,""):bZ==null?"":bZ}return}b2=bG.isFunction(b1);return this.each(function(b4){var b5,b3=bG(this);if(this.nodeType!==1){return}if(b2){b5=b1.call(this,b4,b3.val())}else{b5=b1}if(b5==null){b5=""}else{if(typeof b5==="number"){b5+=""}else{if(bG.isArray(b5)){b5=bG.map(b5,function(b6){return b6==null?"":b6+""})}}}e=bG.valHooks[this.type]||bG.valHooks[this.nodeName.toLowerCase()];if(!e||!("set" in e)||e.set(this,b5,"value")===aB){this.value=b5}})}});bG.extend({valHooks:{option:{get:function(e){var bZ=e.attributes.value;return !bZ||bZ.specified?e.value:e.text}},select:{get:function(e){var b4,bZ,b3,b1,b2=e.selectedIndex,b5=[],b6=e.options,b0=e.type==="select-one";if(b2<0){return null}bZ=b0?b2:0;b3=b0?b2+1:b6.length;for(;bZ<b3;bZ++){b1=b6[bZ];if(b1.selected&&(bG.support.optDisabled?!b1.disabled:b1.getAttribute("disabled")===null)&&(!b1.parentNode.disabled||!bG.nodeName(b1.parentNode,"optgroup"))){b4=bG(b1).val();if(b0){return b4}b5.push(b4)}}if(b0&&!b5.length&&b6.length){return bG(b6[b2]).val()}return b5},set:function(bZ,b0){var e=bG.makeArray(b0);bG(bZ).find("option").each(function(){this.selected=bG.inArray(bG(this).val(),e)>=0});if(!e.length){bZ.selectedIndex=-1}return e}}},attrFn:{},attr:function(b4,b1,b5,b3){var b0,e,b2,bZ=b4.nodeType;if(!b4||bZ===3||bZ===8||bZ===2){return}if(b3&&bG.isFunction(bG.fn[b1])){return bG(b4)[b1](b5)}if(typeof b4.getAttribute==="undefined"){return bG.prop(b4,b1,b5)}b2=bZ!==1||!bG.isXMLDoc(b4);if(b2){b1=b1.toLowerCase();e=bG.attrHooks[b1]||(M.test(b1)?bV:a7)}if(b5!==aB){if(b5===null){bG.removeAttr(b4,b1);return}else{if(e&&"set" in e&&b2&&(b0=e.set(b4,b5,b1))!==aB){return b0}else{b4.setAttribute(b1,""+b5);return b5}}}else{if(e&&"get" in e&&b2&&(b0=e.get(b4,b1))!==null){return b0}else{b0=b4.getAttribute(b1);return b0===null?aB:b0}}},removeAttr:function(b1,b3){var b2,b4,bZ,e,b0=0;if(b3&&b1.nodeType===1){b4=b3.split(aV);for(;b0<b4.length;b0++){bZ=b4[b0];if(bZ){b2=bG.propFix[bZ]||bZ;e=M.test(bZ);if(!e){bG.attr(b1,bZ,"")}b1.removeAttribute(bL?bZ:b2);if(e&&b2 in b1){b1[b2]=false}}}}},attrHooks:{type:{set:function(e,bZ){if(j.test(e.nodeName)&&e.parentNode){bG.error("type property can't be changed")}else{if(!bG.support.radioValue&&bZ==="radio"&&bG.nodeName(e,"input")){var b0=e.value;e.setAttribute("type",bZ);if(b0){e.value=b0}return bZ}}}},value:{get:function(bZ,e){if(a7&&bG.nodeName(bZ,"button")){return a7.get(bZ,e)}return e in bZ?bZ.value:null},set:function(bZ,b0,e){if(a7&&bG.nodeName(bZ,"button")){return a7.set(bZ,b0,e)}bZ.value=b0}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(b3,b1,b4){var b0,e,b2,bZ=b3.nodeType;if(!b3||bZ===3||bZ===8||bZ===2){return}b2=bZ!==1||!bG.isXMLDoc(b3);if(b2){b1=bG.propFix[b1]||b1;e=bG.propHooks[b1]}if(b4!==aB){if(e&&"set" in e&&(b0=e.set(b3,b4,b1))!==aB){return b0}else{return(b3[b1]=b4)}}else{if(e&&"get" in e&&(b0=e.get(b3,b1))!==null){return b0}else{return b3[b1]}}},propHooks:{tabIndex:{get:function(bZ){var e=bZ.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):aA.test(bZ.nodeName)||D.test(bZ.nodeName)&&bZ.href?0:aB}}}});bV={get:function(bZ,e){var b1,b0=bG.prop(bZ,e);return b0===true||typeof b0!=="boolean"&&(b1=bZ.getAttributeNode(e))&&b1.nodeValue!==false?e.toLowerCase():aB},set:function(bZ,b1,e){var b0;if(b1===false){bG.removeAttr(bZ,e)}else{b0=bG.propFix[e]||e;if(b0 in bZ){bZ[b0]=true}bZ.setAttribute(e,e.toLowerCase())}return e}};if(!bL){n={name:true,id:true,coords:true};a7=bG.valHooks.button={get:function(b0,bZ){var e;e=b0.getAttributeNode(bZ);return e&&(n[bZ]?e.value!=="":e.specified)?e.value:aB},set:function(b0,b1,bZ){var e=b0.getAttributeNode(bZ);if(!e){e=o.createAttribute(bZ);b0.setAttributeNode(e)}return(e.value=b1+"")}};bG.each(["width","height"],function(bZ,e){bG.attrHooks[e]=bG.extend(bG.attrHooks[e],{set:function(b0,b1){if(b1===""){b0.setAttribute(e,"auto");return b1}}})});bG.attrHooks.contenteditable={get:a7.get,set:function(bZ,b0,e){if(b0===""){b0="false"}a7.set(bZ,b0,e)}}}if(!bG.support.hrefNormalized){bG.each(["href","src","width","height"],function(bZ,e){bG.attrHooks[e]=bG.extend(bG.attrHooks[e],{get:function(b1){var b0=b1.getAttribute(e,2);return b0===null?aB:b0}})})}if(!bG.support.style){bG.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||aB},set:function(e,bZ){return(e.style.cssText=""+bZ)}}}if(!bG.support.optSelected){bG.propHooks.selected=bG.extend(bG.propHooks.selected,{get:function(bZ){var e=bZ.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!bG.support.enctype){bG.propFix.enctype="encoding"}if(!bG.support.checkOn){bG.each(["radio","checkbox"],function(){bG.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}bG.each(["radio","checkbox"],function(){bG.valHooks[this]=bG.extend(bG.valHooks[this],{set:function(e,bZ){if(bG.isArray(bZ)){return(e.checked=bG.inArray(bG(e).val(),bZ)>=0)}}})});var bE=/^(?:textarea|input|select)$/i,br=/^([^\.]*|)(?:\.(.+)|)$/,ba=/(?:^|\s)hover(\.\S+|)\b/,a3=/^key/,bK=/^(?:mouse|contextmenu)|click/,by=/^(?:focusinfocus|focusoutblur)$/,aq=function(e){return bG.event.special.hover?e:e.replace(ba,"mouseenter$1 mouseleave$1")};bG.event={add:function(b1,b5,cc,b3,b2){var b6,b4,cd,cb,ca,b8,e,b9,bZ,b0,b7;if(b1.nodeType===3||b1.nodeType===8||!b5||!cc||!(b6=bG._data(b1))){return}if(cc.handler){bZ=cc;cc=bZ.handler;b2=bZ.selector}if(!cc.guid){cc.guid=bG.guid++}cd=b6.events;if(!cd){b6.events=cd={}}b4=b6.handle;if(!b4){b6.handle=b4=function(ce){return typeof bG!=="undefined"&&(!ce||bG.event.triggered!==ce.type)?bG.event.dispatch.apply(b4.elem,arguments):aB};b4.elem=b1}b5=bG.trim(aq(b5)).split(" ");for(cb=0;cb<b5.length;cb++){ca=br.exec(b5[cb])||[];b8=ca[1];e=(ca[2]||"").split(".").sort();b7=bG.event.special[b8]||{};b8=(b2?b7.delegateType:b7.bindType)||b8;b7=bG.event.special[b8]||{};b9=bG.extend({type:b8,origType:ca[1],data:b3,handler:cc,guid:cc.guid,selector:b2,namespace:e.join(".")},bZ);b0=cd[b8];if(!b0){b0=cd[b8]=[];b0.delegateCount=0;if(!b7.setup||b7.setup.call(b1,b3,e,b4)===false){if(b1.addEventListener){b1.addEventListener(b8,b4,false)}else{if(b1.attachEvent){b1.attachEvent("on"+b8,b4)}}}}if(b7.add){b7.add.call(b1,b9);if(!b9.handler.guid){b9.handler.guid=cc.guid}}if(b2){b0.splice(b0.delegateCount++,0,b9)}else{b0.push(b9)}bG.event.global[b8]=true}b1=null},global:{},remove:function(b1,b6,cc,b2,b5){var cd,ce,b9,b0,bZ,b3,b4,cb,b8,e,ca,b7=bG.hasData(b1)&&bG._data(b1);if(!b7||!(cb=b7.events)){return}b6=bG.trim(aq(b6||"")).split(" ");for(cd=0;cd<b6.length;cd++){ce=br.exec(b6[cd])||[];b9=b0=ce[1];bZ=ce[2];if(!b9){for(b9 in cb){bG.event.remove(b1,b9+b6[cd],cc,b2,true)}continue}b8=bG.event.special[b9]||{};b9=(b2?b8.delegateType:b8.bindType)||b9;e=cb[b9]||[];b3=e.length;bZ=bZ?new RegExp("(^|\\.)"+bZ.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(b4=0;b4<e.length;b4++){ca=e[b4];if((b5||b0===ca.origType)&&(!cc||cc.guid===ca.guid)&&(!bZ||bZ.test(ca.namespace))&&(!b2||b2===ca.selector||b2==="**"&&ca.selector)){e.splice(b4--,1);if(ca.selector){e.delegateCount--}if(b8.remove){b8.remove.call(b1,ca)}}}if(e.length===0&&b3!==e.length){if(!b8.teardown||b8.teardown.call(b1,bZ,b7.handle)===false){bG.removeEvent(b1,b9,b7.handle)}delete cb[b9]}}if(bG.isEmptyObject(cb)){delete b7.handle;bG.removeData(b1,"events",true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bZ,b6,b4,cd){if(b4&&(b4.nodeType===3||b4.nodeType===8)){return}var e,b1,b7,cb,b3,b2,b9,b8,b5,cc,ca=bZ.type||bZ,b0=[];if(by.test(ca+bG.event.triggered)){return}if(ca.indexOf("!")>=0){ca=ca.slice(0,-1);b1=true}if(ca.indexOf(".")>=0){b0=ca.split(".");ca=b0.shift();b0.sort()}if((!b4||bG.event.customEvent[ca])&&!bG.event.global[ca]){return}bZ=typeof bZ==="object"?bZ[bG.expando]?bZ:new bG.Event(ca,bZ):new bG.Event(ca);bZ.type=ca;bZ.isTrigger=true;bZ.exclusive=b1;bZ.namespace=b0.join(".");bZ.namespace_re=bZ.namespace?new RegExp("(^|\\.)"+b0.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;b2=ca.indexOf(":")<0?"on"+ca:"";if(!b4){e=bG.cache;for(b7 in e){if(e[b7].events&&e[b7].events[ca]){bG.event.trigger(bZ,b6,e[b7].handle.elem,true)}}return}bZ.result=aB;if(!bZ.target){bZ.target=b4}b6=b6!=null?bG.makeArray(b6):[];b6.unshift(bZ);b9=bG.event.special[ca]||{};if(b9.trigger&&b9.trigger.apply(b4,b6)===false){return}b5=[[b4,b9.bindType||ca]];if(!cd&&!b9.noBubble&&!bG.isWindow(b4)){cc=b9.delegateType||ca;cb=by.test(cc+ca)?b4:b4.parentNode;for(b3=b4;cb;cb=cb.parentNode){b5.push([cb,cc]);b3=cb}if(b3===(b4.ownerDocument||o)){b5.push([b3.defaultView||b3.parentWindow||a2,cc])}}for(b7=0;b7<b5.length&&!bZ.isPropagationStopped();b7++){cb=b5[b7][0];bZ.type=b5[b7][1];b8=(bG._data(cb,"events")||{})[bZ.type]&&bG._data(cb,"handle");if(b8){b8.apply(cb,b6)}b8=b2&&cb[b2];if(b8&&bG.acceptData(cb)&&b8.apply(cb,b6)===false){bZ.preventDefault()}}bZ.type=ca;if(!cd&&!bZ.isDefaultPrevented()){if((!b9._default||b9._default.apply(b4.ownerDocument,b6)===false)&&!(ca==="click"&&bG.nodeName(b4,"a"))&&bG.acceptData(b4)){if(b2&&b4[ca]&&((ca!=="focus"&&ca!=="blur")||bZ.target.offsetWidth!==0)&&!bG.isWindow(b4)){b3=b4[b2];if(b3){b4[b2]=null}bG.event.triggered=ca;b4[ca]();bG.event.triggered=aB;if(b3){b4[b2]=b3}}}}return bZ.result},dispatch:function(e){e=bG.event.fix(e||a2.event);var b5,b4,ce,b8,b7,bZ,b6,cc,b1,cd,b2=((bG._data(this,"events")||{})[e.type]||[]),b3=b2.delegateCount,ca=[].slice.call(arguments),b0=!e.exclusive&&!e.namespace,b9=bG.event.special[e.type]||{},cb=[];ca[0]=e;e.delegateTarget=this;if(b9.preDispatch&&b9.preDispatch.call(this,e)===false){return}if(b3&&!(e.button&&e.type==="click")){for(ce=e.target;ce!=this;ce=ce.parentNode||this){if(ce.disabled!==true||e.type!=="click"){b7={};b6=[];for(b5=0;b5<b3;b5++){cc=b2[b5];b1=cc.selector;if(b7[b1]===aB){b7[b1]=bG(b1,this).index(ce)>=0}if(b7[b1]){b6.push(cc)}}if(b6.length){cb.push({elem:ce,matches:b6})}}}}if(b2.length>b3){cb.push({elem:this,matches:b2.slice(b3)})}for(b5=0;b5<cb.length&&!e.isPropagationStopped();b5++){bZ=cb[b5];e.currentTarget=bZ.elem;for(b4=0;b4<bZ.matches.length&&!e.isImmediatePropagationStopped();b4++){cc=bZ.matches[b4];if(b0||(!e.namespace&&!cc.namespace)||e.namespace_re&&e.namespace_re.test(cc.namespace)){e.data=cc.data;e.handleObj=cc;b8=((bG.event.special[cc.origType]||{}).handle||cc.handler).apply(bZ.elem,ca);if(b8!==aB){e.result=b8;if(b8===false){e.preventDefault();e.stopPropagation()}}}}}if(b9.postDispatch){b9.postDispatch.call(this,e)}return e.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(bZ,e){if(bZ.which==null){bZ.which=e.charCode!=null?e.charCode:e.keyCode}return bZ}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(b1,b0){var b2,b3,e,bZ=b0.button,b4=b0.fromElement;if(b1.pageX==null&&b0.clientX!=null){b2=b1.target.ownerDocument||o;b3=b2.documentElement;e=b2.body;b1.pageX=b0.clientX+(b3&&b3.scrollLeft||e&&e.scrollLeft||0)-(b3&&b3.clientLeft||e&&e.clientLeft||0);b1.pageY=b0.clientY+(b3&&b3.scrollTop||e&&e.scrollTop||0)-(b3&&b3.clientTop||e&&e.clientTop||0)}if(!b1.relatedTarget&&b4){b1.relatedTarget=b4===b1.target?b0.toElement:b4}if(!b1.which&&bZ!==aB){b1.which=(bZ&1?1:(bZ&2?3:(bZ&4?2:0)))}return b1}},fix:function(b0){if(b0[bG.expando]){return b0}var bZ,b3,e=b0,b1=bG.event.fixHooks[b0.type]||{},b2=b1.props?this.props.concat(b1.props):this.props;b0=bG.Event(e);for(bZ=b2.length;bZ;){b3=b2[--bZ];b0[b3]=e[b3]}if(!b0.target){b0.target=e.srcElement||o}if(b0.target.nodeType===3){b0.target=b0.target.parentNode}b0.metaKey=!!b0.metaKey;return b1.filter?b1.filter(b0,e):b0},special:{load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(b0,bZ,e){if(bG.isWindow(this)){this.onbeforeunload=e}},teardown:function(bZ,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(b0,b2,b1,bZ){var b3=bG.extend(new bG.Event(),b1,{type:b0,isSimulated:true,originalEvent:{}});if(bZ){bG.event.trigger(b3,null,b2)}else{bG.event.dispatch.call(b2,b3)}if(b3.isDefaultPrevented()){b1.preventDefault()}}};bG.event.handle=bG.event.dispatch;bG.removeEvent=o.removeEventListener?function(bZ,e,b0){if(bZ.removeEventListener){bZ.removeEventListener(e,b0,false)}}:function(b0,bZ,b1){var e="on"+bZ;if(b0.detachEvent){if(typeof b0[e]==="undefined"){b0[e]=null}b0.detachEvent(e,b1)}};bG.Event=function(bZ,e){if(!(this instanceof bG.Event)){return new bG.Event(bZ,e)}if(bZ&&bZ.type){this.originalEvent=bZ;this.type=bZ.type;this.isDefaultPrevented=(bZ.defaultPrevented||bZ.returnValue===false||bZ.getPreventDefault&&bZ.getPreventDefault())?R:X}else{this.type=bZ}if(e){bG.extend(this,e)}this.timeStamp=bZ&&bZ.timeStamp||bG.now();this[bG.expando]=true};function X(){return false}function R(){return true}bG.Event.prototype={preventDefault:function(){this.isDefaultPrevented=R;var bZ=this.originalEvent;if(!bZ){return}if(bZ.preventDefault){bZ.preventDefault()}else{bZ.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=R;var bZ=this.originalEvent;if(!bZ){return}if(bZ.stopPropagation){bZ.stopPropagation()}bZ.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=R;this.stopPropagation()},isDefaultPrevented:X,isPropagationStopped:X,isImmediatePropagationStopped:X};bG.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bZ,e){bG.event.special[bZ]={delegateType:e,bindType:e,handle:function(b3){var b1,b5=this,b4=b3.relatedTarget,b2=b3.handleObj,b0=b2.selector;if(!b4||(b4!==b5&&!bG.contains(b5,b4))){b3.type=b2.origType;b1=b2.handler.apply(this,arguments);b3.type=e}return b1}}});if(!bG.support.submitBubbles){bG.event.special.submit={setup:function(){if(bG.nodeName(this,"form")){return false}bG.event.add(this,"click._submit keypress._submit",function(b1){var b0=b1.target,bZ=bG.nodeName(b0,"input")||bG.nodeName(b0,"button")?b0.form:aB;if(bZ&&!bG._data(bZ,"_submit_attached")){bG.event.add(bZ,"submit._submit",function(e){e._submit_bubble=true});bG._data(bZ,"_submit_attached",true)}})},postDispatch:function(e){if(e._submit_bubble){delete e._submit_bubble;if(this.parentNode&&!e.isTrigger){bG.event.simulate("submit",this.parentNode,e,true)}}},teardown:function(){if(bG.nodeName(this,"form")){return false}bG.event.remove(this,"._submit")}}}if(!bG.support.changeBubbles){bG.event.special.change={setup:function(){if(bE.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){bG.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});bG.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false}bG.event.simulate("change",this,e,true)})}return false}bG.event.add(this,"beforeactivate._change",function(b0){var bZ=b0.target;if(bE.test(bZ.nodeName)&&!bG._data(bZ,"_change_attached")){bG.event.add(bZ,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){bG.event.simulate("change",this.parentNode,e,true)}});bG._data(bZ,"_change_attached",true)}})},handle:function(bZ){var e=bZ.target;if(this!==e||bZ.isSimulated||bZ.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bZ.handleObj.handler.apply(this,arguments)}},teardown:function(){bG.event.remove(this,"._change");return !bE.test(this.nodeName)}}}if(!bG.support.focusinBubbles){bG.each({focus:"focusin",blur:"focusout"},function(b1,e){var bZ=0,b0=function(b2){bG.event.simulate(e,b2.target,bG.event.fix(b2),true)};bG.event.special[e]={setup:function(){if(bZ++===0){o.addEventListener(b1,b0,true)}},teardown:function(){if(--bZ===0){o.removeEventListener(b1,b0,true)}}}})}bG.fn.extend({on:function(b0,e,b3,b2,bZ){var b4,b1;if(typeof b0==="object"){if(typeof e!=="string"){b3=b3||e;e=aB}for(b1 in b0){this.on(b1,e,b3,b0[b1],bZ)}return this}if(b3==null&&b2==null){b2=e;b3=e=aB}else{if(b2==null){if(typeof e==="string"){b2=b3;b3=aB}else{b2=b3;b3=e;e=aB}}}if(b2===false){b2=X}else{if(!b2){return this}}if(bZ===1){b4=b2;b2=function(b5){bG().off(b5);return b4.apply(this,arguments)};b2.guid=b4.guid||(b4.guid=bG.guid++)}return this.each(function(){bG.event.add(this,b0,b2,b3,e)})},one:function(bZ,e,b1,b0){return this.on(bZ,e,b1,b0,1)},off:function(b0,e,b2){var bZ,b1;if(b0&&b0.preventDefault&&b0.handleObj){bZ=b0.handleObj;bG(b0.delegateTarget).off(bZ.namespace?bZ.origType+"."+bZ.namespace:bZ.origType,bZ.selector,bZ.handler);return this}if(typeof b0==="object"){for(b1 in b0){this.off(b1,e,b0[b1])}return this}if(e===false||typeof e==="function"){b2=e;e=aB}if(b2===false){b2=X}return this.each(function(){bG.event.remove(this,b0,b2,e)})},bind:function(e,b0,bZ){return this.on(e,null,b0,bZ)},unbind:function(e,bZ){return this.off(e,null,bZ)},live:function(e,b0,bZ){bG(this.context).on(e,this.selector,b0,bZ);return this},die:function(e,bZ){bG(this.context).off(e,this.selector||"**",bZ);return this},delegate:function(e,bZ,b1,b0){return this.on(bZ,e,b1,b0)},undelegate:function(e,bZ,b0){return arguments.length==1?this.off(e,"**"):this.off(bZ,e||"**",b0)},trigger:function(e,bZ){return this.each(function(){bG.event.trigger(e,bZ,this)})},triggerHandler:function(e,bZ){if(this[0]){return bG.event.trigger(e,bZ,this[0],true)}},toggle:function(b1){var bZ=arguments,e=b1.guid||bG.guid++,b0=0,b2=function(b3){var b4=(bG._data(this,"lastToggle"+b1.guid)||0)%b0;bG._data(this,"lastToggle"+b1.guid,b4+1);b3.preventDefault();return bZ[b4].apply(this,arguments)||false};b2.guid=e;while(b0<bZ.length){bZ[b0++].guid=e}return this.click(b2)},hover:function(e,bZ){return this.mouseenter(e).mouseleave(bZ||e)}});bG.each(("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu").split(" "),function(bZ,e){bG.fn[e]=function(b1,b0){if(b0==null){b0=b1;b1=null}return arguments.length>0?this.on(e,null,b1,b0):this.trigger(e)};if(a3.test(e)){bG.event.fixHooks[e]=bG.event.keyHooks}if(bK.test(e)){bG.event.fixHooks[e]=bG.event.mouseHooks}});
15
- /*!
16
- * Sizzle CSS Selector Engine
17
- * Copyright 2012 jQuery Foundation and other contributors
18
- * Released under the MIT license
19
- * http://sizzlejs.com/
20
- */
21
- (function(cM,cf){var cn,cR,b9,cE,b0,cj,cv,cc,ce,cb,b8=true,cr="undefined",cU=("sizcache"+Math.random()).replace(".",""),b7=cM.document,ca=b7.documentElement,cd=0,ci=[].slice,cQ=[].push,cW=function(e,c1){e[cU]=c1||true;return e},cZ=function(){var e={},c1=[];return cW(function(c2,c3){if(c1.push(c2)>cE.cacheLength){delete e[c1.shift()]}return(e[c2]=c3)},e)},cO=cZ(),cP=cZ(),ck=cZ(),cu="[\\x20\\t\\r\\n\\f]",ch="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",cg=ch.replace("w","w#"),cY="([*^$|!~]?=)",cJ="\\["+cu+"*("+ch+")"+cu+"*(?:"+cY+cu+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+cg+")|)|)"+cu+"*\\]",c0=":("+ch+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+cJ+")|[^:]|\\\\.)*|.*))\\)|)",cw=":(nth|eq|gt|lt|first|last|even|odd)(?:\\(((?:-\\d)?\\d*)\\)|)(?=[^-]|$)",cS=new RegExp("^"+cu+"+|((?:^|[^\\\\])(?:\\\\.)*)"+cu+"+$","g"),b4=new RegExp("^"+cu+"*,"+cu+"*"),cB=new RegExp("^"+cu+"*([\\x20\\t\\r\\n\\f>+~])"+cu+"*"),cG=new RegExp(c0),cI=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,cz=/^:not/,cL=/[\x20\t\r\n\f]*[+~]/,cV=/:not\($/,co=/h\d/i,cH=/input|select|textarea|button/i,cp=/\\(?!\\)/g,cA={ID:new RegExp("^#("+ch+")"),CLASS:new RegExp("^\\.("+ch+")"),NAME:new RegExp("^\\[name=['\"]?("+ch+")['\"]?\\]"),TAG:new RegExp("^("+ch.replace("w","w*")+")"),ATTR:new RegExp("^"+cJ),PSEUDO:new RegExp("^"+c0),CHILD:new RegExp("^:(only|nth|last|first)-child(?:\\("+cu+"*(even|odd|(([+-]|)(\\d*)n|)"+cu+"*(?:([+-]|)"+cu+"*(\\d+)|))"+cu+"*\\)|)","i"),POS:new RegExp(cw,"ig"),needsContext:new RegExp("^"+cu+"*[>+~]|"+cw,"i")},cD=function(c1){var c3=b7.createElement("div");try{return c1(c3)}catch(c2){return false}finally{c3=null}},b6=cD(function(e){e.appendChild(b7.createComment(""));return !e.getElementsByTagName("*").length}),cy=cD(function(e){e.innerHTML="<a href='#'></a>";return e.firstChild&&typeof e.firstChild.getAttribute!==cr&&e.firstChild.getAttribute("href")==="#"}),cm=cD(function(c1){c1.innerHTML="<select></select>";var e=typeof c1.lastChild.getAttribute("multiple");return e!=="boolean"&&e!=="string"}),cx=cD(function(e){e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>";if(!e.getElementsByClassName||!e.getElementsByClassName("e").length){return false}e.lastChild.className="e";return e.getElementsByClassName("e").length===2}),bZ=cD(function(c1){c1.id=cU+0;c1.innerHTML="<a name='"+cU+"'></a><div name='"+cU+"'></div>";ca.insertBefore(c1,ca.firstChild);var e=b7.getElementsByName&&b7.getElementsByName(cU).length===2+b7.getElementsByName(cU+0).length;b9=!b7.getElementById(cU);ca.removeChild(c1);return e});try{ci.call(ca.childNodes,0)[0].nodeType}catch(cX){ci=function(c1){var c2,e=[];for(;(c2=this[c1]);c1++){e.push(c2)}return e}}function cK(c3,e,c5,c8){c5=c5||[];e=e||b7;var c6,c1,c7,c2,c4=e.nodeType;if(c4!==1&&c4!==9){return[]}if(!c3||typeof c3!=="string"){return c5}c7=cj(e);if(!c7&&!c8){if((c6=cI.exec(c3))){if((c2=c6[1])){if(c4===9){c1=e.getElementById(c2);if(c1&&c1.parentNode){if(c1.id===c2){c5.push(c1);return c5}}else{return c5}}else{if(e.ownerDocument&&(c1=e.ownerDocument.getElementById(c2))&&cv(e,c1)&&c1.id===c2){c5.push(c1);return c5}}}else{if(c6[2]){cQ.apply(c5,ci.call(e.getElementsByTagName(c3),0));return c5}else{if((c2=c6[3])&&cx&&e.getElementsByClassName){cQ.apply(c5,ci.call(e.getElementsByClassName(c2),0));return c5}}}}}return cT(c3,e,c5,c8,c7)}cK.matches=function(c1,e){return cK(c1,null,null,e)};cK.matchesSelector=function(e,c1){return cK(c1,null,null,[e]).length>0};function cC(e){return function(c2){var c1=c2.nodeName.toLowerCase();return c1==="input"&&c2.type===e}}function b3(e){return function(c2){var c1=c2.nodeName.toLowerCase();return(c1==="input"||c1==="button")&&c2.type===e}}b0=cK.getText=function(c4){var c3,c1="",c2=0,e=c4.nodeType;if(e){if(e===1||e===9||e===11){if(typeof c4.textContent==="string"){return c4.textContent}else{for(c4=c4.firstChild;c4;c4=c4.nextSibling){c1+=b0(c4)}}}else{if(e===3||e===4){return c4.nodeValue}}}else{for(;(c3=c4[c2]);c2++){c1+=b0(c3)}}return c1};cj=cK.isXML=function cj(e){var c1=e&&(e.ownerDocument||e).documentElement;return c1?c1.nodeName!=="HTML":false};cv=cK.contains=ca.contains?function(c1,e){var c3=c1.nodeType===9?c1.documentElement:c1,c2=e&&e.parentNode;return c1===c2||!!(c2&&c2.nodeType===1&&c3.contains&&c3.contains(c2))}:ca.compareDocumentPosition?function(c1,e){return e&&!!(c1.compareDocumentPosition(e)&16)}:function(c1,e){while((e=e.parentNode)){if(e===c1){return true}}return false};cK.attr=function(c3,c2){var e,c1=cj(c3);if(!c1){c2=c2.toLowerCase()}if(cE.attrHandle[c2]){return cE.attrHandle[c2](c3)}if(cm||c1){return c3.getAttribute(c2)}e=c3.getAttributeNode(c2);return e?typeof c3[c2]==="boolean"?c3[c2]?c2:null:e.specified?e.value:null:null};cE=cK.selectors={cacheLength:50,createPseudo:cW,match:cA,order:new RegExp("ID|TAG"+(bZ?"|NAME":"")+(cx?"|CLASS":"")),attrHandle:cy?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:b9?function(c3,c2,c1){if(typeof c2.getElementById!==cr&&!c1){var e=c2.getElementById(c3);return e&&e.parentNode?[e]:[]}}:function(c3,c2,c1){if(typeof c2.getElementById!==cr&&!c1){var e=c2.getElementById(c3);return e?e.id===c3||typeof e.getAttributeNode!==cr&&e.getAttributeNode("id").value===c3?[e]:cf:[]}},TAG:b6?function(e,c1){if(typeof c1.getElementsByTagName!==cr){return c1.getElementsByTagName(e)}}:function(e,c4){var c3=c4.getElementsByTagName(e);if(e==="*"){var c5,c2=[],c1=0;for(;(c5=c3[c1]);c1++){if(c5.nodeType===1){c2.push(c5)}}return c2}return c3},NAME:function(e,c1){if(typeof c1.getElementsByName!==cr){return c1.getElementsByName(name)}},CLASS:function(c2,c1,e){if(typeof c1.getElementsByClassName!==cr&&!e){return c1.getElementsByClassName(c2)}}},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){e[1]=e[1].replace(cp,"");e[3]=(e[4]||e[5]||"").replace(cp,"");if(e[2]==="~="){e[3]=" "+e[3]+" "}return e.slice(0,4)},CHILD:function(e){e[1]=e[1].toLowerCase();if(e[1]==="nth"){if(!e[2]){cK.error(e[0])}e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd"));e[4]=+((e[6]+e[7])||e[2]==="odd")}else{if(e[2]){cK.error(e[0])}}return e},PSEUDO:function(c2,c3,c1){var c4,e;if(cA.CHILD.test(c2[0])){return null}if(c2[3]){c2[2]=c2[3]}else{if((c4=c2[4])){if(cG.test(c4)&&(e=b1(c4,c3,c1,true))&&(e=c4.indexOf(")",c4.length-e)-c4.length)){c4=c4.slice(0,e);c2[0]=c2[0].slice(0,e)}c2[2]=c4}}return c2.slice(0,3)}},filter:{ID:b9?function(e){e=e.replace(cp,"");return function(c1){return c1.getAttribute("id")===e}}:function(e){e=e.replace(cp,"");return function(c2){var c1=typeof c2.getAttributeNode!==cr&&c2.getAttributeNode("id");return c1&&c1.value===e}},TAG:function(e){if(e==="*"){return function(){return true}}e=e.replace(cp,"").toLowerCase();return function(c1){return c1.nodeName&&c1.nodeName.toLowerCase()===e}},CLASS:function(e){var c1=cO[cU][e];if(!c1){c1=cO(e,new RegExp("(^|"+cu+")"+e+"("+cu+"|$)"))}return function(c2){return c1.test(c2.className||(typeof c2.getAttribute!==cr&&c2.getAttribute("class"))||"")}},ATTR:function(c2,c1,e){if(!c1){return function(c3){return cK.attr(c3,c2)!=null}}return function(c4){var c3=cK.attr(c4,c2),c5=c3+"";if(c3==null){return c1==="!="}switch(c1){case"=":return c5===e;case"!=":return c5!==e;case"^=":return e&&c5.indexOf(e)===0;case"*=":return e&&c5.indexOf(e)>-1;case"$=":return e&&c5.substr(c5.length-e.length)===e;case"~=":return(" "+c5+" ").indexOf(e)>-1;case"|=":return c5===e||c5.substr(0,e.length+1)===e+"-"}}},CHILD:function(c1,c3,c4,c2){if(c1==="nth"){var e=cd++;return function(c8){var c5,c9,c7=0,c6=c8;if(c4===1&&c2===0){return true}c5=c8.parentNode;if(c5&&(c5[cU]!==e||!c8.sizset)){for(c6=c5.firstChild;c6;c6=c6.nextSibling){if(c6.nodeType===1){c6.sizset=++c7;if(c6===c8){break}}}c5[cU]=e}c9=c8.sizset-c2;if(c4===0){return c9===0}else{return(c9%c4===0&&c9/c4>=0)}}}return function(c6){var c5=c6;switch(c1){case"only":case"first":while((c5=c5.previousSibling)){if(c5.nodeType===1){return false}}if(c1==="first"){return true}c5=c6;case"last":while((c5=c5.nextSibling)){if(c5.nodeType===1){return false}}return true}}},PSEUDO:function(c5,c4,c2,c1){var e,c3=cE.pseudos[c5]||cE.pseudos[c5.toLowerCase()];if(!c3){cK.error("unsupported pseudo: "+c5)}if(!c3[cU]){if(c3.length>1){e=[c5,c5,"",c4];return function(c6){return c3(c6,0,e)}}return c3}return c3(c4,c2,c1)}},pseudos:{not:cW(function(e,c2,c1){var c3=cc(e.replace(cS,"$1"),c2,c1);return function(c4){return !c3(c4)}}),enabled:function(e){return e.disabled===false},disabled:function(e){return e.disabled===true},checked:function(e){var c1=e.nodeName.toLowerCase();return(c1==="input"&&!!e.checked)||(c1==="option"&&!!e.selected)},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !cE.pseudos.empty(e)},empty:function(c1){var e;c1=c1.firstChild;while(c1){if(c1.nodeName>"@"||(e=c1.nodeType)===3||e===4){return false}c1=c1.nextSibling}return true},contains:cW(function(e){return function(c1){return(c1.textContent||c1.innerText||b0(c1)).indexOf(e)>-1}}),has:cW(function(e){return function(c1){return cK(e,c1).length>0}}),header:function(e){return co.test(e.nodeName)},text:function(c2){var c1,e;return c2.nodeName.toLowerCase()==="input"&&(c1=c2.type)==="text"&&((e=c2.getAttribute("type"))==null||e.toLowerCase()===c1)},radio:cC("radio"),checkbox:cC("checkbox"),file:cC("file"),password:cC("password"),image:cC("image"),submit:b3("submit"),reset:b3("reset"),button:function(c1){var e=c1.nodeName.toLowerCase();return e==="input"&&c1.type==="button"||e==="button"},input:function(e){return cH.test(e.nodeName)},focus:function(e){var c1=e.ownerDocument;return e===c1.activeElement&&(!c1.hasFocus||c1.hasFocus())&&!!(e.type||e.href)},active:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(c2,c1,e){return e?c2.slice(1):[c2[0]]},last:function(c3,c2,c1){var e=c3.pop();return c1?c3:[e]},even:function(c5,c4,c3){var c2=[],c1=c3?1:0,e=c5.length;for(;c1<e;c1=c1+2){c2.push(c5[c1])}return c2},odd:function(c5,c4,c3){var c2=[],c1=c3?0:1,e=c5.length;for(;c1<e;c1=c1+2){c2.push(c5[c1])}return c2},lt:function(c2,c1,e){return e?c2.slice(+c1):c2.slice(0,+c1)},gt:function(c2,c1,e){return e?c2.slice(0,+c1+1):c2.slice(+c1+1)},eq:function(c3,c2,c1){var e=c3.splice(+c2,1);return c1?c3:e}}};function b2(c1,e,c2){if(c1===e){return c2}var c3=c1.nextSibling;while(c3){if(c3===e){return -1}c3=c3.nextSibling}return 1}ce=ca.compareDocumentPosition?function(c1,e){if(c1===e){cb=true;return 0}return(!c1.compareDocumentPosition||!e.compareDocumentPosition?c1.compareDocumentPosition:c1.compareDocumentPosition(e)&4)?-1:1}:function(c8,c7){if(c8===c7){cb=true;return 0}else{if(c8.sourceIndex&&c7.sourceIndex){return c8.sourceIndex-c7.sourceIndex}}var c5,c1,c2=[],e=[],c4=c8.parentNode,c6=c7.parentNode,c9=c4;if(c4===c6){return b2(c8,c7)}else{if(!c4){return -1}else{if(!c6){return 1}}}while(c9){c2.unshift(c9);c9=c9.parentNode}c9=c6;while(c9){e.unshift(c9);c9=c9.parentNode}c5=c2.length;c1=e.length;for(var c3=0;c3<c5&&c3<c1;c3++){if(c2[c3]!==e[c3]){return b2(c2[c3],e[c3])}}return c3===c5?b2(c8,e[c3],-1):b2(c2[c3],c7,1)};[0,0].sort(ce);b8=!cb;cK.uniqueSort=function(c1){var c2,e=1;cb=b8;c1.sort(ce);if(cb){for(;(c2=c1[e]);e++){if(c2===c1[e-1]){c1.splice(e--,1)}}}return c1};cK.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};function b1(c7,c1,c9,dg){var c2,da,dc,dd,db,c4,df,c8,e,c3,c6=!c9&&c1!==b7,de=(c6?"<s>":"")+c7.replace(cS,"$1<s>"),c5=cP[cU][de];if(c5){return dg?0:ci.call(c5,0)}db=c7;c4=[];c8=0;e=cE.preFilter;c3=cE.filter;while(db){if(!c2||(da=b4.exec(db))){if(da){db=db.slice(da[0].length);dc.selector=df}c4.push(dc=[]);df="";if(c6){db=" "+db}}c2=false;if((da=cB.exec(db))){df+=da[0];db=db.slice(da[0].length);c2=dc.push({part:da.pop().replace(cS," "),string:da[0],captures:da})}for(dd in c3){if((da=cA[dd].exec(db))&&(!e[dd]||(da=e[dd](da,c1,c9)))){df+=da[0];db=db.slice(da[0].length);c2=dc.push({part:dd,string:da.shift(),captures:da})}}if(!c2){break}}if(df){dc.selector=df}return dg?db.length:db?cK.error(c7):ci.call(cP(de,c4),0)}function cs(c5,c4,c3,c1){var e=c4.dir,c2=cd++;if(!c5){c5=function(c6){return c6===c3}}return c4.first?function(c6){while((c6=c6[e])){if(c6.nodeType===1){return c5(c6)&&c6}}}:c1?function(c6){while((c6=c6[e])){if(c6.nodeType===1){if(c5(c6)){return c6}}}}:function(c7){var c6,c8=c2+"."+cn,c9=c8+"."+cR;while((c7=c7[e])){if(c7.nodeType===1){if((c6=c7[cU])===c9){return c7.sizset}else{if(typeof c6==="string"&&c6.indexOf(c8)===0){if(c7.sizset){return c7}}else{c7[cU]=c9;if(c5(c7)){c7.sizset=true;return c7}c7.sizset=false}}}}}}function cq(e,c1){return e?function(c3){var c2=c1(c3);return c2&&e(c2===true?c3:c2)}:c1}function ct(c5,c3,e){var c2,c4,c1=0;for(;(c2=c5[c1]);c1++){if(cE.relative[c2.part]){c4=cs(c4,cE.relative[c2.part],c3,e)}else{c4=cq(c4,cE.filter[c2.part].apply(null,c2.captures.concat(c3,e)))}}return c4}function b5(e){return function(c2){var c3,c1=0;for(;(c3=e[c1]);c1++){if(c3(c2)){return true}}return false}}cc=cK.compile=function(c1,c4,c2){var c6,c3,e,c5=ck[cU][c1];if(c5&&c5.context===c4){return c5}c6=b1(c1,c4,c2);for(c3=0,e=c6.length;c3<e;c3++){c6[c3]=ct(c6[c3],c4,c2)}c5=ck(c1,b5(c6));c5.context=c4;c5.runs=c5.dirruns=0;return c5};function cl(c1,c5,c4,c2){var c3=0,e=c5.length;for(;c3<e;c3++){cK(c1,c5[c3],c4,c2)}}function cF(e,c2,c6,c7,c1,c5){var c3,c4=cE.setFilters[c2.toLowerCase()];if(!c4){cK.error(c2)}if(e||!(c3=c1)){cl(e||"*",c7,(c3=[]),c1)}return c3.length>0?c4(c3,c6,c5):[]}function cN(dj,e,dc,c2){var c8,dd,de,db,c5,df,c4,da,c6,c9,di,dk,c1,dg=0,dh=dj.length,c3=cA.POS,c7=new RegExp("^"+c3.source+"(?!"+cu+")","i"),dl=function(){var dn=1,dm=arguments.length-2;for(;dn<dm;dn++){if(arguments[dn]===cf){c6[dn]=cf}}};for(;dg<dh;dg++){c8=dj[dg];dd="";da=c2;for(de=0,db=c8.length;de<db;de++){c5=c8[de];df=c5.string;if(c5.part==="PSEUDO"){c3.exec("");c4=0;while((c6=c3.exec(df))){c9=true;di=c3.lastIndex=c6.index+c6[0].length;if(di>c4){dd+=df.slice(c4,c6.index);c4=di;dk=[e];if(cB.test(dd)){if(da){dk=da}da=c2}if((c1=cV.test(dd))){dd=dd.slice(0,-5).replace(cB,"$&*");c4++}if(c6.length>1){c6[0].replace(c7,dl)}da=cF(dd,c6[1],c6[2],dk,da,c1)}dd=""}}if(!c9){dd+=df}c9=false}if(dd){if(cB.test(dd)){cl(dd,da||[e],dc,c2)}else{cK(dd,e,dc,c2?c2.concat(da):da)}}else{cQ.apply(dc,da)}}return dh===1?dc:cK.uniqueSort(dc)}function cT(c6,c1,c8,db,da){c6=c6.replace(cS,"$1");var e,dc,c4,c3,c7,de,c5,c2,df,dd,c9=b1(c6,c1,da),dg=c1.nodeType;if(cA.POS.test(c6)){return cN(c9,c1,c8,db)}if(db){e=ci.call(db,0)}else{if(c9.length===1){if((de=ci.call(c9[0],0)).length>2&&(c5=de[0]).part==="ID"&&dg===9&&!da&&cE.relative[de[1].part]){c1=cE.find.ID(c5.captures[0].replace(cp,""),c1,da)[0];if(!c1){return c8}c6=c6.slice(de.shift().string.length)}df=((c9=cL.exec(de[0].string))&&!c9.index&&c1.parentNode)||c1;c2="";for(c7=de.length-1;c7>=0;c7--){c5=de[c7];dd=c5.part;c2=c5.string+c2;if(cE.relative[dd]){break}if(cE.order.test(dd)){e=cE.find[dd](c5.captures[0].replace(cp,""),df,da);if(e==null){continue}else{c6=c6.slice(0,c6.length-c2.length)+c2.replace(cA[dd],"");if(!c6){cQ.apply(c8,ci.call(e,0))}break}}}}}if(c6){dc=cc(c6,c1,da);cn=dc.dirruns++;if(e==null){e=cE.find.TAG("*",(cL.test(c6)&&c1.parentNode)||c1)}for(c7=0;(c3=e[c7]);c7++){cR=dc.runs++;if(dc(c3)){c8.push(c3)}}}return c8}if(b7.querySelectorAll){(function(){var c5,c6=cT,c4=/'|\\/g,c2=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,c1=[],e=[":active"],c3=ca.matchesSelector||ca.mozMatchesSelector||ca.webkitMatchesSelector||ca.oMatchesSelector||ca.msMatchesSelector;cD(function(c7){c7.innerHTML="<select><option selected=''></option></select>";if(!c7.querySelectorAll("[selected]").length){c1.push("\\["+cu+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)")}if(!c7.querySelectorAll(":checked").length){c1.push(":checked")}});cD(function(c7){c7.innerHTML="<p test=''></p>";if(c7.querySelectorAll("[test^='']").length){c1.push("[*^$]="+cu+"*(?:\"\"|'')")}c7.innerHTML="<input type='hidden'/>";if(!c7.querySelectorAll(":enabled").length){c1.push(":enabled",":disabled")}});c1=c1.length&&new RegExp(c1.join("|"));cT=function(dd,c8,de,dh,dg){if(!dh&&!dg&&(!c1||!c1.test(dd))){if(c8.nodeType===9){try{cQ.apply(de,ci.call(c8.querySelectorAll(dd),0));return de}catch(dc){}}else{if(c8.nodeType===1&&c8.nodeName.toLowerCase()!=="object"){var db,df,di,da=c8.getAttribute("id"),c7=da||cU,c9=cL.test(dd)&&c8.parentNode||c8;if(da){c7=c7.replace(c4,"\\$&")}else{c8.setAttribute("id",c7)}db=b1(dd,c8,dg);c7="[id='"+c7+"']";for(df=0,di=db.length;df<di;df++){db[df]=c7+db[df].selector}try{cQ.apply(de,ci.call(c9.querySelectorAll(db.join(",")),0));return de}catch(dc){}finally{if(!da){c8.removeAttribute("id")}}}}}return c6(dd,c8,de,dh,dg)};if(c3){cD(function(c8){c5=c3.call(c8,"div");try{c3.call(c8,"[test!='']:sizzle");e.push(cA.PSEUDO.source,cA.POS.source,"!=")}catch(c7){}});e=new RegExp(e.join("|"));cK.matchesSelector=function(c8,da){da=da.replace(c2,"='$1']");if(!cj(c8)&&!e.test(da)&&(!c1||!c1.test(da))){try{var c7=c3.call(c8,da);if(c7||c5||c8.document&&c8.document.nodeType!==11){return c7}}catch(c9){}}return cK(da,null,null,[c8]).length>0}}})()}cE.setFilters.nth=cE.setFilters.eq;cE.filters=cE.pseudos;cK.attr=bG.attr;bG.find=cK;bG.expr=cK.selectors;bG.expr[":"]=bG.expr.pseudos;bG.unique=cK.uniqueSort;bG.text=cK.getText;bG.isXMLDoc=cK.isXML;bG.contains=cK.contains})(a2);var ag=/Until$/,bq=/^(?:parents|prev(?:Until|All))/,al=/^.[^:#\[\.,]*$/,y=bG.expr.match.needsContext,bu={children:true,contents:true,next:true,prev:true};bG.fn.extend({find:function(e){var b2,bZ,b4,b5,b3,b1,b0=this;if(typeof e!=="string"){return bG(e).filter(function(){for(b2=0,bZ=b0.length;b2<bZ;b2++){if(bG.contains(b0[b2],this)){return true}}})}b1=this.pushStack("","find",e);for(b2=0,bZ=this.length;b2<bZ;b2++){b4=b1.length;bG.find(e,this[b2],b1);if(b2>0){for(b5=b4;b5<b1.length;b5++){for(b3=0;b3<b4;b3++){if(b1[b3]===b1[b5]){b1.splice(b5--,1);break}}}}}return b1},has:function(b1){var b0,bZ=bG(b1,this),e=bZ.length;return this.filter(function(){for(b0=0;b0<e;b0++){if(bG.contains(this,bZ[b0])){return true}}})},not:function(e){return this.pushStack(aM(this,e,false),"not",e)},filter:function(e){return this.pushStack(aM(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?y.test(e)?bG(e,this.context).index(this[0])>=0:bG.filter(e,this).length>0:this.filter(e).length>0)},closest:function(b2,b1){var b3,b0=0,e=this.length,bZ=[],b4=y.test(b2)||typeof b2!=="string"?bG(b2,b1||this.context):0;for(;b0<e;b0++){b3=this[b0];while(b3&&b3.ownerDocument&&b3!==b1&&b3.nodeType!==11){if(b4?b4.index(b3)>-1:bG.find.matchesSelector(b3,b2)){bZ.push(b3);break}b3=b3.parentNode}}bZ=bZ.length>1?bG.unique(bZ):bZ;return this.pushStack(bZ,"closest",b2)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return bG.inArray(this[0],bG(e))}return bG.inArray(e.jquery?e[0]:e,this)},add:function(e,bZ){var b1=typeof e==="string"?bG(e,bZ):bG.makeArray(e&&e.nodeType?[e]:e),b0=bG.merge(this.get(),b1);return this.pushStack(aR(b1[0])||aR(b0[0])?b0:bG.unique(b0))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}});bG.fn.andSelf=bG.fn.addBack;function aR(e){return !e||!e.parentNode||e.parentNode.nodeType===11}function aY(bZ,e){do{bZ=bZ[e]}while(bZ&&bZ.nodeType!==1);return bZ}bG.each({parent:function(bZ){var e=bZ.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return bG.dir(e,"parentNode")},parentsUntil:function(bZ,e,b0){return bG.dir(bZ,"parentNode",b0)},next:function(e){return aY(e,"nextSibling")},prev:function(e){return aY(e,"previousSibling")},nextAll:function(e){return bG.dir(e,"nextSibling")},prevAll:function(e){return bG.dir(e,"previousSibling")},nextUntil:function(bZ,e,b0){return bG.dir(bZ,"nextSibling",b0)},prevUntil:function(bZ,e,b0){return bG.dir(bZ,"previousSibling",b0)},siblings:function(e){return bG.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return bG.sibling(e.firstChild)},contents:function(e){return bG.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:bG.merge([],e.childNodes)}},function(e,bZ){bG.fn[e]=function(b2,b0){var b1=bG.map(this,bZ,b2);if(!ag.test(e)){b0=b2}if(b0&&typeof b0==="string"){b1=bG.filter(b0,b1)}b1=this.length>1&&!bu[e]?bG.unique(b1):b1;if(this.length>1&&bq.test(e)){b1=b1.reverse()}return this.pushStack(b1,e,a4.call(arguments).join(","))}});bG.extend({filter:function(b0,e,bZ){if(bZ){b0=":not("+b0+")"}return e.length===1?bG.find.matchesSelector(e[0],b0)?[e[0]]:[]:bG.find.matches(b0,e)},dir:function(b0,bZ,b2){var e=[],b1=b0[bZ];while(b1&&b1.nodeType!==9&&(b2===aB||b1.nodeType!==1||!bG(b1).is(b2))){if(b1.nodeType===1){e.push(b1)}b1=b1[bZ]}return e},sibling:function(b0,bZ){var e=[];for(;b0;b0=b0.nextSibling){if(b0.nodeType===1&&b0!==bZ){e.push(b0)}}return e}});function aM(b1,b0,e){b0=b0||0;if(bG.isFunction(b0)){return bG.grep(b1,function(b3,b2){var b4=!!b0.call(b3,b2,b3);return b4===e})}else{if(b0.nodeType){return bG.grep(b1,function(b3,b2){return(b3===b0)===e})}else{if(typeof b0==="string"){var bZ=bG.grep(b1,function(b2){return b2.nodeType===1});if(al.test(b0)){return bG.filter(b0,bZ,!e)}else{b0=bG.filter(b0,bZ)}}}}return bG.grep(b1,function(b3,b2){return(bG.inArray(b3,b0)>=0)===e})}function A(e){var b0=c.split("|"),bZ=e.createDocumentFragment();if(bZ.createElement){while(b0.length){bZ.createElement(b0.pop())}}return bZ}var c="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",av=/ jQuery\d+="(?:null|\d+)"/g,bY=/^\s+/,ay=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,p=/<([\w:]+)/,bT=/<tbody/i,J=/<|&#?\w+;/,aj=/<(?:script|style|link)/i,ap=/<(?:script|object|embed|option|style)/i,K=new RegExp("<(?:"+c+")[\\s/>]","i"),aE=/^(?:checkbox|radio)$/,bR=/checked\s*(?:[^=]|=\s*.checked.)/i,bw=/\/(java|ecma)script/i,aH=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,T={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},aQ=A(o),l=aQ.appendChild(o.createElement("div"));T.optgroup=T.option;T.tbody=T.tfoot=T.colgroup=T.caption=T.thead;T.th=T.td;if(!bG.support.htmlSerialize){T._default=[1,"X<div>","</div>"]}bG.fn.extend({text:function(e){return bG.access(this,function(bZ){return bZ===aB?bG.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(bZ))},null,e,arguments.length)},wrapAll:function(e){if(bG.isFunction(e)){return this.each(function(b0){bG(this).wrapAll(e.call(this,b0))})}if(this[0]){var bZ=bG(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bZ.insertBefore(this[0])}bZ.map(function(){var b0=this;while(b0.firstChild&&b0.firstChild.nodeType===1){b0=b0.firstChild}return b0}).append(this)}return this},wrapInner:function(e){if(bG.isFunction(e)){return this.each(function(bZ){bG(this).wrapInner(e.call(this,bZ))})}return this.each(function(){var bZ=bG(this),b0=bZ.contents();if(b0.length){b0.wrapAll(e)}else{bZ.append(e)}})},wrap:function(e){var bZ=bG.isFunction(e);return this.each(function(b0){bG(this).wrapAll(bZ?e.call(this,b0):e)})},unwrap:function(){return this.parent().each(function(){if(!bG.nodeName(this,"body")){bG(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1||this.nodeType===11){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1||this.nodeType===11){this.insertBefore(e,this.firstChild)}})},before:function(){if(!aR(this[0])){return this.domManip(arguments,false,function(bZ){this.parentNode.insertBefore(bZ,this)})}if(arguments.length){var e=bG.clean(arguments);return this.pushStack(bG.merge(e,this),"before",this.selector)}},after:function(){if(!aR(this[0])){return this.domManip(arguments,false,function(bZ){this.parentNode.insertBefore(bZ,this.nextSibling)})}if(arguments.length){var e=bG.clean(arguments);return this.pushStack(bG.merge(this,e),"after",this.selector)}},remove:function(e,b1){var b0,bZ=0;for(;(b0=this[bZ])!=null;bZ++){if(!e||bG.filter(e,[b0]).length){if(!b1&&b0.nodeType===1){bG.cleanData(b0.getElementsByTagName("*"));bG.cleanData([b0])}if(b0.parentNode){b0.parentNode.removeChild(b0)}}}return this},empty:function(){var bZ,e=0;for(;(bZ=this[e])!=null;e++){if(bZ.nodeType===1){bG.cleanData(bZ.getElementsByTagName("*"))}while(bZ.firstChild){bZ.removeChild(bZ.firstChild)}}return this},clone:function(bZ,e){bZ=bZ==null?false:bZ;e=e==null?bZ:e;return this.map(function(){return bG.clone(this,bZ,e)})},html:function(e){return bG.access(this,function(b2){var b1=this[0]||{},b0=0,bZ=this.length;if(b2===aB){return b1.nodeType===1?b1.innerHTML.replace(av,""):aB}if(typeof b2==="string"&&!aj.test(b2)&&(bG.support.htmlSerialize||!K.test(b2))&&(bG.support.leadingWhitespace||!bY.test(b2))&&!T[(p.exec(b2)||["",""])[1].toLowerCase()]){b2=b2.replace(ay,"<$1></$2>");try{for(;b0<bZ;b0++){b1=this[b0]||{};if(b1.nodeType===1){bG.cleanData(b1.getElementsByTagName("*"));b1.innerHTML=b2}}b1=0}catch(b3){}}if(b1){this.empty().append(b2)}},null,e,arguments.length)},replaceWith:function(e){if(!aR(this[0])){if(bG.isFunction(e)){return this.each(function(b1){var b0=bG(this),bZ=b0.html();b0.replaceWith(e.call(this,b1,bZ))})}if(typeof e!=="string"){e=bG(e).detach()}return this.each(function(){var b0=this.nextSibling,bZ=this.parentNode;bG(this).remove();if(b0){bG(b0).before(e)}else{bG(bZ).append(e)}})}return this.length?this.pushStack(bG(bG.isFunction(e)?e():e),"replaceWith",e):this},detach:function(e){return this.remove(e,true)},domManip:function(b4,b8,b7){b4=[].concat.apply([],b4);var b0,b2,b3,b6,b1=0,b5=b4[0],bZ=[],e=this.length;if(!bG.support.checkClone&&e>1&&typeof b5==="string"&&bR.test(b5)){return this.each(function(){bG(this).domManip(b4,b8,b7)})}if(bG.isFunction(b5)){return this.each(function(ca){var b9=bG(this);b4[0]=b5.call(this,ca,b8?b9.html():aB);b9.domManip(b4,b8,b7)})}if(this[0]){b0=bG.buildFragment(b4,this,bZ);b3=b0.fragment;b2=b3.firstChild;if(b3.childNodes.length===1){b3=b2}if(b2){b8=b8&&bG.nodeName(b2,"tr");for(b6=b0.cacheable||e-1;b1<e;b1++){b7.call(b8&&bG.nodeName(this[b1],"table")?x(this[b1],"tbody"):this[b1],b1===b6?b3:bG.clone(b3,true,true))}}b3=b2=null;if(bZ.length){bG.each(bZ,function(b9,ca){if(ca.src){if(bG.ajax){bG.ajax({url:ca.src,type:"GET",dataType:"script",async:false,global:false,"throws":true})}else{bG.error("no ajax")}}else{bG.globalEval((ca.text||ca.textContent||ca.innerHTML||"").replace(aH,""))}if(ca.parentNode){ca.parentNode.removeChild(ca)}})}}return this}});function x(bZ,e){return bZ.getElementsByTagName(e)[0]||bZ.appendChild(bZ.ownerDocument.createElement(e))}function ao(b5,bZ){if(bZ.nodeType!==1||!bG.hasData(b5)){return}var b2,b1,e,b4=bG._data(b5),b3=bG._data(bZ,b4),b0=b4.events;if(b0){delete b3.handle;b3.events={};for(b2 in b0){for(b1=0,e=b0[b2].length;b1<e;b1++){bG.event.add(bZ,b2,b0[b2][b1])}}}if(b3.data){b3.data=bG.extend({},b3.data)}}function F(bZ,e){var b0;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bZ)}b0=e.nodeName.toLowerCase();if(b0==="object"){if(e.parentNode){e.outerHTML=bZ.outerHTML}if(bG.support.html5Clone&&(bZ.innerHTML&&!bG.trim(e.innerHTML))){e.innerHTML=bZ.innerHTML}}else{if(b0==="input"&&aE.test(bZ.type)){e.defaultChecked=e.checked=bZ.checked;if(e.value!==bZ.value){e.value=bZ.value}}else{if(b0==="option"){e.selected=bZ.defaultSelected}else{if(b0==="input"||b0==="textarea"){e.defaultValue=bZ.defaultValue}else{if(b0==="script"&&e.text!==bZ.text){e.text=bZ.text}}}}}e.removeAttribute(bG.expando)}bG.buildFragment=function(b1,b2,bZ){var b0,e,b3,b4=b1[0];b2=b2||o;b2=!b2.nodeType&&b2[0]||b2;b2=b2.ownerDocument||b2;if(b1.length===1&&typeof b4==="string"&&b4.length<512&&b2===o&&b4.charAt(0)==="<"&&!ap.test(b4)&&(bG.support.checkClone||!bR.test(b4))&&(bG.support.html5Clone||!K.test(b4))){e=true;b0=bG.fragments[b4];b3=b0!==aB}if(!b0){b0=b2.createDocumentFragment();bG.clean(b1,b2,b0,bZ);if(e){bG.fragments[b4]=b3&&b0}}return{fragment:b0,cacheable:e}};bG.fragments={};bG.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bZ){bG.fn[e]=function(b0){var b2,b4=0,b3=[],b6=bG(b0),b1=b6.length,b5=this.length===1&&this[0].parentNode;if((b5==null||b5&&b5.nodeType===11&&b5.childNodes.length===1)&&b1===1){b6[bZ](this[0]);return this}else{for(;b4<b1;b4++){b2=(b4>0?this.clone(true):this).get();bG(b6[b4])[bZ](b2);b3=b3.concat(b2)}return this.pushStack(b3,e,b6.selector)}}});function m(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function bS(e){if(aE.test(e.type)){e.defaultChecked=e.checked}}bG.extend({clone:function(b2,b4,b0){var e,bZ,b1,b3;if(bG.support.html5Clone||bG.isXMLDoc(b2)||!K.test("<"+b2.nodeName+">")){b3=b2.cloneNode(true)}else{l.innerHTML=b2.outerHTML;l.removeChild(b3=l.firstChild)}if((!bG.support.noCloneEvent||!bG.support.noCloneChecked)&&(b2.nodeType===1||b2.nodeType===11)&&!bG.isXMLDoc(b2)){F(b2,b3);e=m(b2);bZ=m(b3);for(b1=0;e[b1];++b1){if(bZ[b1]){F(e[b1],bZ[b1])}}}if(b4){ao(b2,b3);if(b0){e=m(b2);bZ=m(b3);for(b1=0;e[b1];++b1){ao(e[b1],bZ[b1])}}}e=bZ=null;return b3},clean:function(cb,b0,e,b1){var b8,b7,ca,cf,b4,ce,b5,b2,bZ,b9,cd,b6,b3=b0===o&&aQ,cc=[];if(!b0||typeof b0.createDocumentFragment==="undefined"){b0=o}for(b8=0;(ca=cb[b8])!=null;b8++){if(typeof ca==="number"){ca+=""}if(!ca){continue}if(typeof ca==="string"){if(!J.test(ca)){ca=b0.createTextNode(ca)}else{b3=b3||A(b0);b5=b0.createElement("div");b3.appendChild(b5);ca=ca.replace(ay,"<$1></$2>");cf=(p.exec(ca)||["",""])[1].toLowerCase();b4=T[cf]||T._default;ce=b4[0];b5.innerHTML=b4[1]+ca+b4[2];while(ce--){b5=b5.lastChild}if(!bG.support.tbody){b2=bT.test(ca);bZ=cf==="table"&&!b2?b5.firstChild&&b5.firstChild.childNodes:b4[1]==="<table>"&&!b2?b5.childNodes:[];for(b7=bZ.length-1;b7>=0;--b7){if(bG.nodeName(bZ[b7],"tbody")&&!bZ[b7].childNodes.length){bZ[b7].parentNode.removeChild(bZ[b7])}}}if(!bG.support.leadingWhitespace&&bY.test(ca)){b5.insertBefore(b0.createTextNode(bY.exec(ca)[0]),b5.firstChild)}ca=b5.childNodes;b5.parentNode.removeChild(b5)}}if(ca.nodeType){cc.push(ca)}else{bG.merge(cc,ca)}}if(b5){ca=b5=b3=null}if(!bG.support.appendChecked){for(b8=0;(ca=cc[b8])!=null;b8++){if(bG.nodeName(ca,"input")){bS(ca)}else{if(typeof ca.getElementsByTagName!=="undefined"){bG.grep(ca.getElementsByTagName("input"),bS)}}}}if(e){cd=function(cg){if(!cg.type||bw.test(cg.type)){return b1?b1.push(cg.parentNode?cg.parentNode.removeChild(cg):cg):e.appendChild(cg)}};for(b8=0;(ca=cc[b8])!=null;b8++){if(!(bG.nodeName(ca,"script")&&cd(ca))){e.appendChild(ca);if(typeof ca.getElementsByTagName!=="undefined"){b6=bG.grep(bG.merge([],ca.getElementsByTagName("script")),cd);cc.splice.apply(cc,[b8+1,0].concat(b6));b8+=b6.length}}}}return cc},cleanData:function(bZ,b7){var b2,b0,b1,b6,b3=0,b8=bG.expando,e=bG.cache,b4=bG.support.deleteExpando,b5=bG.event.special;for(;(b1=bZ[b3])!=null;b3++){if(b7||bG.acceptData(b1)){b0=b1[b8];b2=b0&&e[b0];if(b2){if(b2.events){for(b6 in b2.events){if(b5[b6]){bG.event.remove(b1,b6)}else{bG.removeEvent(b1,b6,b2.handle)}}}if(e[b0]){delete e[b0];if(b4){delete b1[b8]}else{if(b1.removeAttribute){b1.removeAttribute(b8)}else{b1[b8]=null}}bG.deletedIds.push(b0)}}}}}});(function(){var e,bZ;bG.uaMatch=function(b1){b1=b1.toLowerCase();var b0=/(chrome)[ \/]([\w.]+)/.exec(b1)||/(webkit)[ \/]([\w.]+)/.exec(b1)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(b1)||/(msie) ([\w.]+)/.exec(b1)||b1.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}};e=bG.uaMatch(d.userAgent);bZ={};if(e.browser){bZ[e.browser]=true;bZ.version=e.version}if(bZ.chrome){bZ.webkit=true}else{if(bZ.webkit){bZ.safari=true}}bG.browser=bZ;bG.sub=function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bG.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bG&&!(b4 instanceof b0)){b4=b0(b4)}return bG.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(o);return b0}})();var E,az,aW,be=/alpha\([^)]*\)/i,aS=/opacity=([^)]*)/,bk=/^(top|right|bottom|left)$/,G=/^(none|table(?!-c[ea]).+)/,aZ=/^margin/,a8=new RegExp("^("+bx+")(.*)$","i"),W=new RegExp("^("+bx+")(?!px)[a-z%]+$","i"),S=new RegExp("^([-+])=("+bx+")","i"),bh={},a9={position:"absolute",visibility:"hidden",display:"block"},bA={letterSpacing:0,fontWeight:400},bQ=["Top","Right","Bottom","Left"],ar=["Webkit","O","Moz","ms"],aJ=bG.fn.toggle;function b(b1,bZ){if(bZ in b1){return bZ}var b2=bZ.charAt(0).toUpperCase()+bZ.slice(1),e=bZ,b0=ar.length;while(b0--){bZ=ar[b0]+b2;if(bZ in b1){return bZ}}return e}function Q(bZ,e){bZ=e||bZ;return bG.css(bZ,"display")==="none"||!bG.contains(bZ.ownerDocument,bZ)}function s(b3,e){var b2,b4,bZ=[],b0=0,b1=b3.length;for(;b0<b1;b0++){b2=b3[b0];if(!b2.style){continue}bZ[b0]=bG._data(b2,"olddisplay");if(e){if(!bZ[b0]&&b2.style.display==="none"){b2.style.display=""}if(b2.style.display===""&&Q(b2)){bZ[b0]=bG._data(b2,"olddisplay",bC(b2.nodeName))}}else{b4=E(b2,"display");if(!bZ[b0]&&b4!=="none"){bG._data(b2,"olddisplay",b4)}}}for(b0=0;b0<b1;b0++){b2=b3[b0];if(!b2.style){continue}if(!e||b2.style.display==="none"||b2.style.display===""){b2.style.display=e?bZ[b0]||"":"none"}}return b3}bG.fn.extend({css:function(e,bZ){return bG.access(this,function(b1,b0,b2){return b2!==aB?bG.style(b1,b0,b2):bG.css(b1,b0)},e,bZ,arguments.length>1)},show:function(){return s(this,true)},hide:function(){return s(this)},toggle:function(b0,bZ){var e=typeof b0==="boolean";if(bG.isFunction(b0)&&bG.isFunction(bZ)){return aJ.apply(this,arguments)}return this.each(function(){if(e?b0:Q(this)){bG(this).show()}else{bG(this).hide()}})}});bG.extend({cssHooks:{opacity:{get:function(b0,bZ){if(bZ){var e=E(b0,"opacity");return e===""?"1":e}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":bG.support.cssFloat?"cssFloat":"styleFloat"},style:function(b1,b0,b7,b2){if(!b1||b1.nodeType===3||b1.nodeType===8||!b1.style){return}var b5,b6,b8,b3=bG.camelCase(b0),bZ=b1.style;b0=bG.cssProps[b3]||(bG.cssProps[b3]=b(bZ,b3));b8=bG.cssHooks[b0]||bG.cssHooks[b3];if(b7!==aB){b6=typeof b7;if(b6==="string"&&(b5=S.exec(b7))){b7=(b5[1]+1)*b5[2]+parseFloat(bG.css(b1,b0));b6="number"}if(b7==null||b6==="number"&&isNaN(b7)){return}if(b6==="number"&&!bG.cssNumber[b3]){b7+="px"}if(!b8||!("set" in b8)||(b7=b8.set(b1,b7,b2))!==aB){try{bZ[b0]=b7}catch(b4){}}}else{if(b8&&"get" in b8&&(b5=b8.get(b1,false,b2))!==aB){return b5}return bZ[b0]}},css:function(b4,b2,b3,bZ){var b5,b1,e,b0=bG.camelCase(b2);b2=bG.cssProps[b0]||(bG.cssProps[b0]=b(b4.style,b0));e=bG.cssHooks[b2]||bG.cssHooks[b0];if(e&&"get" in e){b5=e.get(b4,true,bZ)}if(b5===aB){b5=E(b4,b2)}if(b5==="normal"&&b2 in bA){b5=bA[b2]}if(b3||bZ!==aB){b1=parseFloat(b5);return b3||bG.isNumeric(b1)?b1||0:b5}return b5},swap:function(b2,b1,b3){var b0,bZ,e={};for(bZ in b1){e[bZ]=b2.style[bZ];b2.style[bZ]=b1[bZ]}b0=b3.call(b2);for(bZ in b1){b2.style[bZ]=e[bZ]}return b0}});if(a2.getComputedStyle){E=function(b5,bZ){var e,b2,b1,b4,b3=a2.getComputedStyle(b5,null),b0=b5.style;if(b3){e=b3[bZ];if(e===""&&!bG.contains(b5.ownerDocument,b5)){e=bG.style(b5,bZ)}if(W.test(e)&&aZ.test(bZ)){b2=b0.width;b1=b0.minWidth;b4=b0.maxWidth;b0.minWidth=b0.maxWidth=b0.width=e;e=b3.width;b0.width=b2;b0.minWidth=b1;b0.maxWidth=b4}}return e}}else{if(o.documentElement.currentStyle){E=function(b2,b0){var b3,e,bZ=b2.currentStyle&&b2.currentStyle[b0],b1=b2.style;if(bZ==null&&b1&&b1[b0]){bZ=b1[b0]}if(W.test(bZ)&&!bk.test(b0)){b3=b1.left;e=b2.runtimeStyle&&b2.runtimeStyle.left;if(e){b2.runtimeStyle.left=b2.currentStyle.left}b1.left=b0==="fontSize"?"1em":bZ;bZ=b1.pixelLeft+"px";b1.left=b3;if(e){b2.runtimeStyle.left=e}}return bZ===""?"auto":bZ}}}function aG(e,b0,b1){var bZ=a8.exec(b0);return bZ?Math.max(0,bZ[1]-(b1||0))+(bZ[2]||"px"):b0}function at(b1,bZ,e,b3){var b0=e===(b3?"border":"content")?4:bZ==="width"?1:0,b2=0;for(;b0<4;b0+=2){if(e==="margin"){b2+=bG.css(b1,e+bQ[b0],true)}if(b3){if(e==="content"){b2-=parseFloat(E(b1,"padding"+bQ[b0]))||0}if(e!=="margin"){b2-=parseFloat(E(b1,"border"+bQ[b0]+"Width"))||0}}else{b2+=parseFloat(E(b1,"padding"+bQ[b0]))||0;if(e!=="padding"){b2+=parseFloat(E(b1,"border"+bQ[b0]+"Width"))||0}}}return b2}function u(b1,bZ,e){var b2=bZ==="width"?b1.offsetWidth:b1.offsetHeight,b0=true,b3=bG.support.boxSizing&&bG.css(b1,"boxSizing")==="border-box";if(b2<=0||b2==null){b2=E(b1,bZ);if(b2<0||b2==null){b2=b1.style[bZ]}if(W.test(b2)){return b2}b0=b3&&(bG.support.boxSizingReliable||b2===b1.style[bZ]);b2=parseFloat(b2)||0}return(b2+at(b1,bZ,e||(b3?"border":"content"),b0))+"px"}function bC(b0){if(bh[b0]){return bh[b0]}var e=bG("<"+b0+">").appendTo(o.body),bZ=e.css("display");e.remove();if(bZ==="none"||bZ===""){az=o.body.appendChild(az||bG.extend(o.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!aW||!az.createElement){aW=(az.contentWindow||az.contentDocument).document;aW.write("<!doctype html><html><body>");aW.close()}e=aW.body.appendChild(aW.createElement(b0));bZ=E(e,"display");o.body.removeChild(az)}bh[b0]=bZ;return bZ}bG.each(["height","width"],function(bZ,e){bG.cssHooks[e]={get:function(b2,b1,b0){if(b1){if(b2.offsetWidth===0&&G.test(E(b2,"display"))){return bG.swap(b2,a9,function(){return u(b2,e,b0)})}else{return u(b2,e,b0)}}},set:function(b1,b2,b0){return aG(b1,b2,b0?at(b1,e,b0,bG.support.boxSizing&&bG.css(b1,"boxSizing")==="border-box"):0)}}});if(!bG.support.opacity){bG.cssHooks.opacity={get:function(bZ,e){return aS.test((e&&bZ.currentStyle?bZ.currentStyle.filter:bZ.style.filter)||"")?(0.01*parseFloat(RegExp.$1))+"":e?"1":""},set:function(b2,b3){var b1=b2.style,bZ=b2.currentStyle,e=bG.isNumeric(b3)?"alpha(opacity="+b3*100+")":"",b0=bZ&&bZ.filter||b1.filter||"";b1.zoom=1;if(b3>=1&&bG.trim(b0.replace(be,""))===""&&b1.removeAttribute){b1.removeAttribute("filter");if(bZ&&!bZ.filter){return}}b1.filter=be.test(b0)?b0.replace(be,e):b0+" "+e}}}bG(function(){if(!bG.support.reliableMarginRight){bG.cssHooks.marginRight={get:function(bZ,e){return bG.swap(bZ,{display:"inline-block"},function(){if(e){return E(bZ,"marginRight")}})}}}if(!bG.support.pixelPosition&&bG.fn.position){bG.each(["top","left"],function(e,bZ){bG.cssHooks[bZ]={get:function(b2,b1){if(b1){var b0=E(b2,bZ);return W.test(b0)?bG(b2).position()[bZ]+"px":b0}}}})}});if(bG.expr&&bG.expr.filters){bG.expr.filters.hidden=function(e){return(e.offsetWidth===0&&e.offsetHeight===0)||(!bG.support.reliableHiddenOffsets&&((e.style&&e.style.display)||E(e,"display"))==="none")};bG.expr.filters.visible=function(e){return !bG.expr.filters.hidden(e)}}bG.each({margin:"",padding:"",border:"Width"},function(e,bZ){bG.cssHooks[e+bZ]={expand:function(b2){var b1,b3=typeof b2==="string"?b2.split(" "):[b2],b0={};for(b1=0;b1<4;b1++){b0[e+bQ[b1]+bZ]=b3[b1]||b3[b1-2]||b3[0]}return b0}};if(!aZ.test(e)){bG.cssHooks[e+bZ].set=aG}});var bs=/%20/g,aP=/\[\]$/,U=/\r?\n/g,bz=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aD=/^(?:select|textarea)/i;bG.fn.extend({serialize:function(){return bG.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?bG.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||aD.test(this.nodeName)||bz.test(this.type))}).map(function(e,bZ){var b0=bG(this).val();return b0==null?null:bG.isArray(b0)?bG.map(b0,function(b2,b1){return{name:bZ.name,value:b2.replace(U,"\r\n")}}):{name:bZ.name,value:b0.replace(U,"\r\n")}}).get()}});bG.param=function(e,b0){var b1,bZ=[],b2=function(b3,b4){b4=bG.isFunction(b4)?b4():(b4==null?"":b4);bZ[bZ.length]=encodeURIComponent(b3)+"="+encodeURIComponent(b4)};if(b0===aB){b0=bG.ajaxSettings&&bG.ajaxSettings.traditional}if(bG.isArray(e)||(e.jquery&&!bG.isPlainObject(e))){bG.each(e,function(){b2(this.name,this.value)})}else{for(b1 in e){k(b1,e[b1],b0,b2)}}return bZ.join("&").replace(bs,"+")};function k(b0,b2,bZ,b1){var e;if(bG.isArray(b2)){bG.each(b2,function(b4,b3){if(bZ||aP.test(b0)){b1(b0,b3)}else{k(b0+"["+(typeof b3==="object"?b4:"")+"]",b3,bZ,b1)}})}else{if(!bZ&&bG.type(b2)==="object"){for(e in b2){k(b0+"["+e+"]",b2[e],bZ,b1)}}else{b1(b0,b2)}}}var Y,bX,an=/#.*$/,ad=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,B=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,r=/^(?:GET|HEAD)$/,aC=/^\/\//,bN=/\?/,g=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,P=/([?&])_=[^&]*/,aT=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,bW=bG.fn.load,v={},a6={},aX=["*/"]+["*"];try{Y=aI.href}catch(bd){Y=o.createElement("a");Y.href="";Y=Y.href}bX=aT.exec(Y.toLowerCase())||[];function bI(e){return function(b2,b4){if(typeof b2!=="string"){b4=b2;b2="*"}var bZ,b5,b6,b1=b2.toLowerCase().split(aV),b0=0,b3=b1.length;if(bG.isFunction(b4)){for(;b0<b3;b0++){bZ=b1[b0];b6=/^\+/.test(bZ);if(b6){bZ=bZ.substr(1)||"*"}b5=e[bZ]=e[bZ]||[];b5[b6?"unshift":"push"](b4)}}}}function q(bZ,b8,b3,b6,b5,b1){b5=b5||b8.dataTypes[0];b1=b1||{};b1[b5]=true;var b7,b4=bZ[b5],b0=0,e=b4?b4.length:0,b2=(bZ===v);for(;b0<e&&(b2||!b7);b0++){b7=b4[b0](b8,b3,b6);if(typeof b7==="string"){if(!b2||b1[b7]){b7=aB}else{b8.dataTypes.unshift(b7);b7=q(bZ,b8,b3,b6,b7,b1)}}}if((b2||!b7)&&!b1["*"]){b7=q(bZ,b8,b3,b6,"*",b1)}return b7}function t(b0,b1){var bZ,e,b2=bG.ajaxSettings.flatOptions||{};for(bZ in b1){if(b1[bZ]!==aB){(b2[bZ]?b0:(e||(e={})))[bZ]=b1[bZ]}}if(e){bG.extend(true,b0,e)}}bG.fn.load=function(b1,b4,b5){if(typeof b1!=="string"&&bW){return bW.apply(this,arguments)}if(!this.length){return this}var e,b2,b0,bZ=this,b3=b1.indexOf(" ");if(b3>=0){e=b1.slice(b3,b1.length);b1=b1.slice(0,b3)}if(bG.isFunction(b4)){b5=b4;b4=aB}else{if(b4&&typeof b4==="object"){b2="POST"}}bG.ajax({url:b1,type:b2,dataType:"html",data:b4,complete:function(b7,b6){if(b5){bZ.each(b5,b0||[b7.responseText,b6,b7])}}}).done(function(b6){b0=arguments;bZ.html(e?bG("<div>").append(b6.replace(g,"")).find(e):b6)});return this};bG.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bZ){bG.fn[bZ]=function(b0){return this.on(bZ,b0)}});bG.each(["get","post"],function(e,bZ){bG[bZ]=function(b0,b2,b3,b1){if(bG.isFunction(b2)){b1=b1||b3;b3=b2;b2=aB}return bG.ajax({type:bZ,url:b0,data:b2,success:b3,dataType:b1})}});bG.extend({getScript:function(e,bZ){return bG.get(e,aB,bZ,"script")},getJSON:function(e,bZ,b0){return bG.get(e,bZ,b0,"json")},ajaxSetup:function(bZ,e){if(e){t(bZ,bG.ajaxSettings)}else{e=bZ;bZ=bG.ajaxSettings}t(bZ,e);return bZ},ajaxSettings:{url:Y,isLocal:B.test(bX[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a2.String,"text html":true,"text json":bG.parseJSON,"text xml":bG.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:bI(v),ajaxTransport:bI(a6),ajax:function(b4,b1){if(typeof b4==="object"){b1=b4;b4=aB}b1=b1||{};var b7,cl,b2,cg,b9,cd,b0,cf,b8=bG.ajaxSetup({},b1),cn=b8.context||b8,cb=cn!==b8&&(cn.nodeType||cn instanceof bG)?bG(cn):bG.event,cm=bG.Deferred(),ci=bG.Callbacks("once memory"),b5=b8.statusCode||{},cc={},cj={},b3=0,b6="canceled",ce={readyState:0,setRequestHeader:function(co,cp){if(!b3){var e=co.toLowerCase();co=cj[e]=cj[e]||co;cc[co]=cp}return this},getAllResponseHeaders:function(){return b3===2?cl:null},getResponseHeader:function(co){var e;if(b3===2){if(!b2){b2={};while((e=ad.exec(cl))){b2[e[1].toLowerCase()]=e[2]}}e=b2[co.toLowerCase()]}return e===aB?null:e},overrideMimeType:function(e){if(!b3){b8.mimeType=e}return this},abort:function(e){e=e||b6;if(cg){cg.abort(e)}ca(0,e);return this}};function ca(cs,co,ct,cq){var e,cw,cu,cr,cv,cp=co;if(b3===2){return}b3=2;if(b9){clearTimeout(b9)}cg=aB;cl=cq||"";ce.readyState=cs>0?4:0;if(ct){cr=h(b8,ce,ct)}if(cs>=200&&cs<300||cs===304){if(b8.ifModified){cv=ce.getResponseHeader("Last-Modified");if(cv){bG.lastModified[b7]=cv}cv=ce.getResponseHeader("Etag");if(cv){bG.etag[b7]=cv}}if(cs===304){cp="notmodified";e=true}else{e=ae(b8,cr);cp=e.state;cw=e.data;cu=e.error;e=!cu}}else{cu=cp;if(!cp||cs){cp="error";if(cs<0){cs=0}}}ce.status=cs;ce.statusText=""+(co||cp);if(e){cm.resolveWith(cn,[cw,cp,ce])}else{cm.rejectWith(cn,[ce,cp,cu])}ce.statusCode(b5);b5=aB;if(b0){cb.trigger("ajax"+(e?"Success":"Error"),[ce,b8,e?cw:cu])}ci.fireWith(cn,[ce,cp]);if(b0){cb.trigger("ajaxComplete",[ce,b8]);if(!(--bG.active)){bG.event.trigger("ajaxStop")}}}cm.promise(ce);ce.success=ce.done;ce.error=ce.fail;ce.complete=ci.add;ce.statusCode=function(co){if(co){var e;if(b3<2){for(e in co){b5[e]=[b5[e],co[e]]}}else{e=co[ce.status];ce.always(e)}}return this};b8.url=((b4||b8.url)+"").replace(an,"").replace(aC,bX[1]+"//");b8.dataTypes=bG.trim(b8.dataType||"*").toLowerCase().split(aV);if(b8.crossDomain==null){cd=aT.exec(b8.url.toLowerCase());b8.crossDomain=!!(cd&&(cd[1]!=bX[1]||cd[2]!=bX[2]||(cd[3]||(cd[1]==="http:"?80:443))!=(bX[3]||(bX[1]==="http:"?80:443))))}if(b8.data&&b8.processData&&typeof b8.data!=="string"){b8.data=bG.param(b8.data,b8.traditional)}q(v,b8,b1,ce);if(b3===2){return ce}b0=b8.global;b8.type=b8.type.toUpperCase();b8.hasContent=!r.test(b8.type);if(b0&&bG.active++===0){bG.event.trigger("ajaxStart")}if(!b8.hasContent){if(b8.data){b8.url+=(bN.test(b8.url)?"&":"?")+b8.data;delete b8.data}b7=b8.url;if(b8.cache===false){var bZ=bG.now(),ck=b8.url.replace(P,"$1_="+bZ);b8.url=ck+((ck===b8.url)?(bN.test(b8.url)?"&":"?")+"_="+bZ:"")}}if(b8.data&&b8.hasContent&&b8.contentType!==false||b1.contentType){ce.setRequestHeader("Content-Type",b8.contentType)}if(b8.ifModified){b7=b7||b8.url;if(bG.lastModified[b7]){ce.setRequestHeader("If-Modified-Since",bG.lastModified[b7])}if(bG.etag[b7]){ce.setRequestHeader("If-None-Match",bG.etag[b7])}}ce.setRequestHeader("Accept",b8.dataTypes[0]&&b8.accepts[b8.dataTypes[0]]?b8.accepts[b8.dataTypes[0]]+(b8.dataTypes[0]!=="*"?", "+aX+"; q=0.01":""):b8.accepts["*"]);for(cf in b8.headers){ce.setRequestHeader(cf,b8.headers[cf])}if(b8.beforeSend&&(b8.beforeSend.call(cn,ce,b8)===false||b3===2)){return ce.abort()}b6="abort";for(cf in {success:1,error:1,complete:1}){ce[cf](b8[cf])}cg=q(a6,b8,b1,ce);if(!cg){ca(-1,"No Transport")}else{ce.readyState=1;if(b0){cb.trigger("ajaxSend",[ce,b8])}if(b8.async&&b8.timeout>0){b9=setTimeout(function(){ce.abort("timeout")},b8.timeout)}try{b3=1;cg.send(cc,ca)}catch(ch){if(b3<2){ca(-1,ch)}else{throw ch}}}return ce},active:0,lastModified:{},etag:{}});function h(b7,b6,b3){var b2,b4,b1,e,bZ=b7.contents,b5=b7.dataTypes,b0=b7.responseFields;for(b4 in b0){if(b4 in b3){b6[b0[b4]]=b3[b4]}}while(b5[0]==="*"){b5.shift();if(b2===aB){b2=b7.mimeType||b6.getResponseHeader("content-type")}}if(b2){for(b4 in bZ){if(bZ[b4]&&bZ[b4].test(b2)){b5.unshift(b4);break}}}if(b5[0] in b3){b1=b5[0]}else{for(b4 in b3){if(!b5[0]||b7.converters[b4+" "+b5[0]]){b1=b4;break}if(!e){e=b4}}b1=b1||e}if(b1){if(b1!==b5[0]){b5.unshift(b1)}return b3[b1]}}function ae(b9,b1){var b7,bZ,b5,b3,b6=b9.dataTypes.slice(),b0=b6[0],b8={},b2=0;if(b9.dataFilter){b1=b9.dataFilter(b1,b9.dataType)}if(b6[1]){for(b7 in b9.converters){b8[b7.toLowerCase()]=b9.converters[b7]}}for(;(b5=b6[++b2]);){if(b5!=="*"){if(b0!=="*"&&b0!==b5){b7=b8[b0+" "+b5]||b8["* "+b5];if(!b7){for(bZ in b8){b3=bZ.split(" ");if(b3[1]===b5){b7=b8[b0+" "+b3[0]]||b8["* "+b3[0]];if(b7){if(b7===true){b7=b8[bZ]}else{if(b8[bZ]!==true){b5=b3[0];b6.splice(b2--,0,b5)}}break}}}}if(b7!==true){if(b7&&b9["throws"]){b1=b7(b1)}else{try{b1=b7(b1)}catch(b4){return{state:"parsererror",error:b7?b4:"No conversion from "+b0+" to "+b5}}}}}b0=b5}}return{state:"success",data:b1}}var bp=[],aw=/\?/,a5=/(=)\?(?=&|$)|\?\?/,bl=bG.now();bG.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=bp.pop()||(bG.expando+"_"+(bl++));this[e]=true;return e}});bG.ajaxPrefilter("json jsonp",function(b8,b3,b7){var b6,e,b5,b1=b8.data,bZ=b8.url,b0=b8.jsonp!==false,b4=b0&&a5.test(bZ),b2=b0&&!b4&&typeof b1==="string"&&!(b8.contentType||"").indexOf("application/x-www-form-urlencoded")&&a5.test(b1);if(b8.dataTypes[0]==="jsonp"||b4||b2){b6=b8.jsonpCallback=bG.isFunction(b8.jsonpCallback)?b8.jsonpCallback():b8.jsonpCallback;e=a2[b6];if(b4){b8.url=bZ.replace(a5,"$1"+b6)}else{if(b2){b8.data=b1.replace(a5,"$1"+b6)}else{if(b0){b8.url+=(aw.test(bZ)?"&":"?")+b8.jsonp+"="+b6}}}b8.converters["script json"]=function(){if(!b5){bG.error(b6+" was not called")}return b5[0]};b8.dataTypes[0]="json";a2[b6]=function(){b5=arguments};b7.always(function(){a2[b6]=e;if(b8[b6]){b8.jsonpCallback=b3.jsonpCallback;bp.push(b6)}if(b5&&bG.isFunction(e)){e(b5[0])}b5=e=aB});return"script"}});bG.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){bG.globalEval(e);return e}}});bG.ajaxPrefilter("script",function(e){if(e.cache===aB){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});bG.ajaxTransport("script",function(b0){if(b0.crossDomain){var e,bZ=o.head||o.getElementsByTagName("head")[0]||o.documentElement;return{send:function(b1,b2){e=o.createElement("script");e.async="async";if(b0.scriptCharset){e.charset=b0.scriptCharset}e.src=b0.url;e.onload=e.onreadystatechange=function(b4,b3){if(b3||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bZ&&e.parentNode){bZ.removeChild(e)}e=aB;if(!b3){b2(200,"success")}}};bZ.insertBefore(e,bZ.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var ah,aN=a2.ActiveXObject?function(){for(var e in ah){ah[e](0,1)}}:false,au=0;function bB(){try{return new a2.XMLHttpRequest()}catch(bZ){}}function bb(){try{return new a2.ActiveXObject("Microsoft.XMLHTTP")}catch(bZ){}}bG.ajaxSettings.xhr=a2.ActiveXObject?function(){return !this.isLocal&&bB()||bb()}:bB;(function(e){bG.extend(bG.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(bG.ajaxSettings.xhr());if(bG.support.ajax){bG.ajaxTransport(function(e){if(!e.crossDomain||bG.support.cors){var bZ;return{send:function(b5,b0){var b3,b2,b4=e.xhr();if(e.username){b4.open(e.type,e.url,e.async,e.username,e.password)}else{b4.open(e.type,e.url,e.async)}if(e.xhrFields){for(b2 in e.xhrFields){b4[b2]=e.xhrFields[b2]}}if(e.mimeType&&b4.overrideMimeType){b4.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!b5["X-Requested-With"]){b5["X-Requested-With"]="XMLHttpRequest"}try{for(b2 in b5){b4.setRequestHeader(b2,b5[b2])}}catch(b1){}b4.send((e.hasContent&&e.data)||null);bZ=function(ce,b8){var b9,b7,b6,cc,cb;try{if(bZ&&(b8||b4.readyState===4)){bZ=aB;if(b3){b4.onreadystatechange=bG.noop;if(aN){delete ah[b3]}}if(b8){if(b4.readyState!==4){b4.abort()}}else{b9=b4.status;b6=b4.getAllResponseHeaders();cc={};cb=b4.responseXML;if(cb&&cb.documentElement){cc.xml=cb}try{cc.text=b4.responseText}catch(ce){}try{b7=b4.statusText}catch(cd){b7=""}if(!b9&&e.isLocal&&!e.crossDomain){b9=cc.text?200:404}else{if(b9===1223){b9=204}}}}}catch(ca){if(!b8){b0(-1,ca)}}if(cc){b0(b9,b7,cc,b6)}};if(!e.async){bZ()}else{if(b4.readyState===4){setTimeout(bZ,0)}else{b3=++au;if(aN){if(!ah){ah={};bG(a2).unload(aN)}ah[b3]=bZ}b4.onreadystatechange=bZ}}},abort:function(){if(bZ){bZ(0,1)}}}}})}var L,ab,bO=/^(?:toggle|show|hide)$/,bH=new RegExp("^(?:([-+])=|)("+bx+")([a-z%]*)$","i"),bM=/queueHooks$/,ax=[i],a1={"*":[function(bZ,b5){var b2,b6,e,b7=this.createTween(bZ,b5),b3=bH.exec(b5),b4=b7.cur(),b0=+b4||0,b1=1;if(b3){b2=+b3[2];b6=b3[3]||(bG.cssNumber[bZ]?"":"px");if(b6!=="px"&&b0){b0=bG.css(b7.elem,bZ,true)||b2||1;do{e=b1=b1||".5";b0=b0/b1;bG.style(b7.elem,bZ,b0+b6);b1=b7.cur()/b4}while(b1!==1&&b1!==e)}b7.unit=b6;b7.start=b0;b7.end=b3[1]?b0+(b3[1]+1)*b2:b2}return b7}]};function bj(){setTimeout(function(){L=aB},0);return(L=bG.now())}function bc(bZ,e){bG.each(e,function(b4,b2){var b3=(a1[b4]||[]).concat(a1["*"]),b0=0,b1=b3.length;for(;b0<b1;b0++){if(b3[b0].call(bZ,b4,b2)){return}}})}function f(b0,b4,b7){var b8,b3=0,e=0,bZ=ax.length,b6=bG.Deferred().always(function(){delete b2.elem}),b2=function(){var cd=L||bj(),ca=Math.max(0,b1.startTime+b1.duration-cd),cc=1-(ca/b1.duration||0),b9=0,cb=b1.tweens.length;for(;b9<cb;b9++){b1.tweens[b9].run(cc)}b6.notifyWith(b0,[b1,cc,ca]);if(cc<1&&cb){return ca}else{b6.resolveWith(b0,[b1]);return false}},b1=b6.promise({elem:b0,props:bG.extend({},b4),opts:bG.extend(true,{specialEasing:{}},b7),originalProperties:b4,originalOptions:b7,startTime:L||bj(),duration:b7.duration,tweens:[],createTween:function(cc,b9,cb){var ca=bG.Tween(b0,b1.opts,cc,b9,b1.opts.specialEasing[cc]||b1.opts.easing);b1.tweens.push(ca);return ca},stop:function(ca){var b9=0,cb=ca?b1.tweens.length:0;for(;b9<cb;b9++){b1.tweens[b9].run(1)}if(ca){b6.resolveWith(b0,[b1,ca])}else{b6.rejectWith(b0,[b1,ca])}return this}}),b5=b1.props;ak(b5,b1.opts.specialEasing);for(;b3<bZ;b3++){b8=ax[b3].call(b1,b0,b5,b1.opts);if(b8){return b8}}bc(b1,b5);if(bG.isFunction(b1.opts.start)){b1.opts.start.call(b0,b1)}bG.fx.timer(bG.extend(b2,{anim:b1,queue:b1.opts.queue,elem:b0}));return b1.progress(b1.opts.progress).done(b1.opts.done,b1.opts.complete).fail(b1.opts.fail).always(b1.opts.always)}function ak(b1,b3){var b0,bZ,b4,b2,e;for(b0 in b1){bZ=bG.camelCase(b0);b4=b3[bZ];b2=b1[b0];if(bG.isArray(b2)){b4=b2[1];b2=b1[b0]=b2[0]}if(b0!==bZ){b1[bZ]=b2;delete b1[b0]}e=bG.cssHooks[bZ];if(e&&"expand" in e){b2=e.expand(b2);delete b1[bZ];for(b0 in b2){if(!(b0 in b1)){b1[b0]=b2[b0];b3[b0]=b4}}}else{b3[bZ]=b4}}}bG.Animation=bG.extend(f,{tweener:function(bZ,b2){if(bG.isFunction(bZ)){b2=bZ;bZ=["*"]}else{bZ=bZ.split(" ")}var b1,e=0,b0=bZ.length;for(;e<b0;e++){b1=bZ[e];a1[b1]=a1[b1]||[];a1[b1].unshift(b2)}},prefilter:function(bZ,e){if(e){ax.unshift(bZ)}else{ax.push(bZ)}}});function i(b2,b7,e){var b6,b0,b9,b1,cd,cc,cb,ca,b3=this,bZ=b2.style,b8={},b5=[],b4=b2.nodeType&&Q(b2);if(!e.queue){cb=bG._queueHooks(b2,"fx");if(cb.unqueued==null){cb.unqueued=0;ca=cb.empty.fire;cb.empty.fire=function(){if(!cb.unqueued){ca()}}}cb.unqueued++;b3.always(function(){b3.always(function(){cb.unqueued--;if(!bG.queue(b2,"fx").length){cb.empty.fire()}})})}if(b2.nodeType===1&&("height" in b7||"width" in b7)){e.overflow=[bZ.overflow,bZ.overflowX,bZ.overflowY];if(bG.css(b2,"display")==="inline"&&bG.css(b2,"float")==="none"){if(!bG.support.inlineBlockNeedsLayout||bC(b2.nodeName)==="inline"){bZ.display="inline-block"}else{bZ.zoom=1}}}if(e.overflow){bZ.overflow="hidden";if(!bG.support.shrinkWrapBlocks){b3.done(function(){bZ.overflow=e.overflow[0];bZ.overflowX=e.overflow[1];bZ.overflowY=e.overflow[2]})}}for(b6 in b7){b9=b7[b6];if(bO.exec(b9)){delete b7[b6];if(b9===(b4?"hide":"show")){continue}b5.push(b6)}}b1=b5.length;if(b1){cd=bG._data(b2,"fxshow")||bG._data(b2,"fxshow",{});if(b4){bG(b2).show()}else{b3.done(function(){bG(b2).hide()})}b3.done(function(){var ce;bG.removeData(b2,"fxshow",true);for(ce in b8){bG.style(b2,ce,b8[ce])}});for(b6=0;b6<b1;b6++){b0=b5[b6];cc=b3.createTween(b0,b4?cd[b0]:0);b8[b0]=cd[b0]||bG.style(b2,b0);if(!(b0 in cd)){cd[b0]=cc.start;if(b4){cc.end=cc.start;cc.start=b0==="width"||b0==="height"?1:0}}}}}function H(b0,bZ,b2,e,b1){return new H.prototype.init(b0,bZ,b2,e,b1)}bG.Tween=H;H.prototype={constructor:H,init:function(b1,bZ,b3,e,b2,b0){this.elem=b1;this.prop=b3;this.easing=b2||"swing";this.options=bZ;this.start=this.now=this.cur();this.end=e;this.unit=b0||(bG.cssNumber[b3]?"":"px")},cur:function(){var e=H.propHooks[this.prop];return e&&e.get?e.get(this):H.propHooks._default.get(this)},run:function(b0){var bZ,e=H.propHooks[this.prop];if(this.options.duration){this.pos=bZ=bG.easing[this.easing](b0,this.options.duration*b0,0,1,this.options.duration)}else{this.pos=bZ=b0}this.now=(this.end-this.start)*bZ+this.start;if(this.options.step){this.options.step.call(this.elem,this.now,this)}if(e&&e.set){e.set(this)}else{H.propHooks._default.set(this)}return this}};H.prototype.init.prototype=H.prototype;H.propHooks={_default:{get:function(bZ){var e;if(bZ.elem[bZ.prop]!=null&&(!bZ.elem.style||bZ.elem.style[bZ.prop]==null)){return bZ.elem[bZ.prop]}e=bG.css(bZ.elem,bZ.prop,false,"");return !e||e==="auto"?0:e},set:function(e){if(bG.fx.step[e.prop]){bG.fx.step[e.prop](e)}else{if(e.elem.style&&(e.elem.style[bG.cssProps[e.prop]]!=null||bG.cssHooks[e.prop])){bG.style(e.elem,e.prop,e.now+e.unit)}else{e.elem[e.prop]=e.now}}}}};H.propHooks.scrollTop=H.propHooks.scrollLeft={set:function(e){if(e.elem.nodeType&&e.elem.parentNode){e.elem[e.prop]=e.now}}};bG.each(["toggle","show","hide"],function(bZ,e){var b0=bG.fn[e];bG.fn[e]=function(b1,b3,b2){return b1==null||typeof b1==="boolean"||(!bZ&&bG.isFunction(b1)&&bG.isFunction(b3))?b0.apply(this,arguments):this.animate(bF(e,true),b1,b3,b2)}});bG.fn.extend({fadeTo:function(e,b1,b0,bZ){return this.filter(Q).css("opacity",0).show().end().animate({opacity:b1},e,b0,bZ)},animate:function(b4,b1,b3,b2){var b0=bG.isEmptyObject(b4),e=bG.speed(b1,b3,b2),bZ=function(){var b5=f(this,bG.extend({},b4),e);if(b0){b5.stop(true)}};return b0||e.queue===false?this.each(bZ):this.queue(e.queue,bZ)},stop:function(b0,bZ,e){var b1=function(b2){var b3=b2.stop;delete b2.stop;b3(e)};if(typeof b0!=="string"){e=bZ;bZ=b0;b0=aB}if(bZ&&b0!==false){this.queue(b0||"fx",[])}return this.each(function(){var b5=true,b2=b0!=null&&b0+"queueHooks",b4=bG.timers,b3=bG._data(this);if(b2){if(b3[b2]&&b3[b2].stop){b1(b3[b2])}}else{for(b2 in b3){if(b3[b2]&&b3[b2].stop&&bM.test(b2)){b1(b3[b2])}}}for(b2=b4.length;b2--;){if(b4[b2].elem===this&&(b0==null||b4[b2].queue===b0)){b4[b2].anim.stop(e);b5=false;b4.splice(b2,1)}}if(b5||!e){bG.dequeue(this,b0)}})}});function bF(b0,b2){var b1,e={height:b0},bZ=0;b2=b2?1:0;for(;bZ<4;bZ+=2-b2){b1=bQ[bZ];e["margin"+b1]=e["padding"+b1]=b0}if(b2){e.opacity=e.width=b0}return e}bG.each({slideDown:bF("show"),slideUp:bF("hide"),slideToggle:bF("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bZ){bG.fn[e]=function(b0,b2,b1){return this.animate(bZ,b0,b2,b1)}});bG.speed=function(b0,b1,bZ){var e=b0&&typeof b0==="object"?bG.extend({},b0):{complete:bZ||!bZ&&b1||bG.isFunction(b0)&&b0,duration:b0,easing:bZ&&b1||b1&&!bG.isFunction(b1)&&b1};e.duration=bG.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in bG.fx.speeds?bG.fx.speeds[e.duration]:bG.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(){if(bG.isFunction(e.old)){e.old.call(this)}if(e.queue){bG.dequeue(this,e.queue)}};return e};bG.easing={linear:function(e){return e},swing:function(e){return 0.5-Math.cos(e*Math.PI)/2}};bG.timers=[];bG.fx=H.prototype.init;bG.fx.tick=function(){var b0,bZ=bG.timers,e=0;for(;e<bZ.length;e++){b0=bZ[e];if(!b0()&&bZ[e]===b0){bZ.splice(e--,1)}}if(!bZ.length){bG.fx.stop()}};bG.fx.timer=function(e){if(e()&&bG.timers.push(e)&&!ab){ab=setInterval(bG.fx.tick,bG.fx.interval)}};bG.fx.interval=13;bG.fx.stop=function(){clearInterval(ab);ab=null};bG.fx.speeds={slow:600,fast:200,_default:400};bG.fx.step={};if(bG.expr&&bG.expr.filters){bG.expr.filters.animated=function(e){return bG.grep(bG.timers,function(bZ){return e===bZ.elem}).length}}var bm=/^(?:body|html)$/i;bG.fn.offset=function(ca){if(arguments.length){return ca===aB?this:this.each(function(cb){bG.offset.setOffset(this,ca,cb)})}var b4,bZ,b5,b6,b3,b7,e,b2,b8,b1,b0=this[0],b9=b0&&b0.ownerDocument;if(!b9){return}if((b5=b9.body)===b0){return bG.offset.bodyOffset(b0)}bZ=b9.documentElement;if(!bG.contains(bZ,b0)){return{top:0,left:0}}b4=b0.getBoundingClientRect();b6=bn(b9);b3=bZ.clientTop||b5.clientTop||0;b7=bZ.clientLeft||b5.clientLeft||0;e=b6.pageYOffset||bZ.scrollTop;b2=b6.pageXOffset||bZ.scrollLeft;b8=b4.top+e-b3;b1=b4.left+b2-b7;return{top:b8,left:b1}};bG.offset={bodyOffset:function(e){var b0=e.offsetTop,bZ=e.offsetLeft;if(bG.support.doesNotIncludeMarginInBodyOffset){b0+=parseFloat(bG.css(e,"marginTop"))||0;bZ+=parseFloat(bG.css(e,"marginLeft"))||0}return{top:b0,left:bZ}},setOffset:function(b1,ca,b4){var b5=bG.css(b1,"position");if(b5==="static"){b1.style.position="relative"}var b3=bG(b1),bZ=b3.offset(),e=bG.css(b1,"top"),b8=bG.css(b1,"left"),b9=(b5==="absolute"||b5==="fixed")&&bG.inArray("auto",[e,b8])>-1,b7={},b6={},b0,b2;if(b9){b6=b3.position();b0=b6.top;b2=b6.left}else{b0=parseFloat(e)||0;b2=parseFloat(b8)||0}if(bG.isFunction(ca)){ca=ca.call(b1,b4,bZ)}if(ca.top!=null){b7.top=(ca.top-bZ.top)+b0}if(ca.left!=null){b7.left=(ca.left-bZ.left)+b2}if("using" in ca){ca.using.call(b1,b7)}else{b3.css(b7)}}};bG.fn.extend({position:function(){if(!this[0]){return}var b0=this[0],bZ=this.offsetParent(),b1=this.offset(),e=bm.test(bZ[0].nodeName)?{top:0,left:0}:bZ.offset();b1.top-=parseFloat(bG.css(b0,"marginTop"))||0;b1.left-=parseFloat(bG.css(b0,"marginLeft"))||0;e.top+=parseFloat(bG.css(bZ[0],"borderTopWidth"))||0;e.left+=parseFloat(bG.css(bZ[0],"borderLeftWidth"))||0;return{top:b1.top-e.top,left:b1.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.body;while(e&&(!bm.test(e.nodeName)&&bG.css(e,"position")==="static")){e=e.offsetParent}return e||o.body})}});bG.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b0,bZ){var e=/Y/.test(bZ);bG.fn[b0]=function(b1){return bG.access(this,function(b2,b5,b4){var b3=bn(b2);if(b4===aB){return b3?(bZ in b3)?b3[bZ]:b3.document.documentElement[b5]:b2[b5]}if(b3){b3.scrollTo(!e?b4:bG(b3).scrollLeft(),e?b4:bG(b3).scrollTop())}else{b2[b5]=b4}},b0,b1,arguments.length,null)}});function bn(e){return bG.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}bG.each({Height:"height",Width:"width"},function(e,bZ){bG.each({padding:"inner"+e,content:bZ,"":"outer"+e},function(b0,b1){bG.fn[b1]=function(b5,b4){var b3=arguments.length&&(b0||typeof b5!=="boolean"),b2=b0||(b5===true||b4===true?"margin":"border");return bG.access(this,function(b7,b6,b8){var b9;if(bG.isWindow(b7)){return b7.document.documentElement["client"+e]}if(b7.nodeType===9){b9=b7.documentElement;return Math.max(b7.body["scroll"+e],b9["scroll"+e],b7.body["offset"+e],b9["offset"+e],b9["client"+e])}return b8===aB?bG.css(b7,b6,b8,b2):bG.style(b7,b6,b8,b2)},bZ,b3?b5:aB,b3,null)}})});a2.jQuery=a2.$=bG;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return bG})}})(window);(function(d){var h,g={},p={16:false,18:false,17:false,91:false},e="all",a={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,command:91},q={backspace:8,tab:9,clear:12,enter:13,"return":13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,"delete":46,home:36,end:35,pageup:33,pagedown:34,",":188,".":190,"/":191,"`":192,"-":189,"=":187,";":186,"'":222,"[":219,"]":221,"\\":220};for(h=1;h<20;h++){a["f"+h]=111+h}function n(t,s){var k=t.length;while(k--){if(t[k]===s){return k}}return -1}function o(x,w){var u,v,s,t,y;u=x.keyCode;if(u==93||u==224){u=91}if(u in p){p[u]=true;for(s in a){if(a[s]==u){c[s]=true}}return}if(!c.filter.call(this,x)){return}if(!(u in g)){return}for(t=0;t<g[u].length;t++){v=g[u][t];if(v.scope==w||v.scope=="all"){y=v.mods.length>0;for(s in p){if((!p[s]&&n(v.mods,+s)>-1)||(p[s]&&n(v.mods,+s)==-1)){y=false}}if((v.mods.length==0&&!p[16]&&!p[18]&&!p[17]&&!p[91])||y){if(v.method(x,v)===false){if(x.preventDefault){x.preventDefault()}else{x.returnValue=false}if(x.stopPropagation){x.stopPropagation()}if(x.cancelBubble){x.cancelBubble=true}}}}}}function f(u){var t=u.keyCode,s;if(t==93||t==224){t=91}if(t in p){p[t]=false;for(s in a){if(a[s]==t){c[s]=false}}}}function r(){for(h in p){p[h]=false}for(h in a){c[h]=false}}function c(t,u,x){var w,v,s,k;if(x===undefined){x=u;u="all"}t=t.replace(/\s/g,"");w=t.split(",");if((w[w.length-1])==""){w[w.length-2]+=","}for(s=0;s<w.length;s++){v=[];t=w[s].split("+");if(t.length>1){v=t.slice(0,t.length-1);for(k=0;k<v.length;k++){v[k]=a[v[k]]}t=[t[t.length-1]]}t=t[0];t=q[t]||t.toUpperCase().charCodeAt(0);if(!(t in g)){g[t]=[]}g[t].push({shortcut:w[s],scope:u,method:x,key:w[s],mods:v})}}function b(s){var k=(s.target||s.srcElement).tagName;return !(k=="INPUT"||k=="SELECT"||k=="TEXTAREA")}for(h in a){c[h]=false}function j(k){e=k||"all"}function l(){return e||"all"}function m(u){var t,k,s;for(t in g){k=g[t];for(s=0;s<k.length;){if(k[s].scope===u){k.splice(s,1)}else{s++}}}}function i(k,s,t){if(k.addEventListener){k.addEventListener(s,t,false)}else{if(k.attachEvent){k.attachEvent("on"+s,function(){t(window.event)})}}}i(document,"keydown",function(k){o(k,e)});i(document,"keyup",f);i(window,"focus",r);d.key=c;d.key.setScope=j;d.key.getScope=l;d.key.deleteScope=m;d.key.filter=b;if(typeof module!=="undefined"){module.exports=key}})(this);(function(){var v=this;var j=v._;var D={};var C=Array.prototype,f=Object.prototype,q=Function.prototype;var m=C.slice,z=C.unshift,c=f.toString,h=f.hasOwnProperty;var L=C.forEach,o=C.map,E=C.reduce,b=C.reduceRight,a=C.filter,A=C.every,n=C.some,l=C.indexOf,k=C.lastIndexOf,s=Array.isArray,e=Object.keys,F=q.bind;var M=function(p){return new t(p)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports){exports=module.exports=M}exports._=M}else{v._=M}M.VERSION="1.3.3";var I=M.each=M.forEach=function(R,Q,P){if(R==null){return}if(L&&R.forEach===L){R.forEach(Q,P)}else{if(R.length===+R.length){for(var O=0,p=R.length;O<p;O++){if(O in R&&Q.call(P,R[O],O,R)===D){return}}}else{for(var N in R){if(M.has(R,N)){if(Q.call(P,R[N],N,R)===D){return}}}}}};M.map=M.collect=function(P,O,N){var p=[];if(P==null){return p}if(o&&P.map===o){return P.map(O,N)}I(P,function(S,Q,R){p[p.length]=O.call(N,S,Q,R)});if(P.length===+P.length){p.length=P.length}return p};M.reduce=M.foldl=M.inject=function(Q,P,p,O){var N=arguments.length>2;if(Q==null){Q=[]}if(E&&Q.reduce===E){if(O){P=M.bind(P,O)}return N?Q.reduce(P,p):Q.reduce(P)}I(Q,function(T,R,S){if(!N){p=T;N=true}else{p=P.call(O,p,T,R,S)}});if(!N){throw new TypeError("Reduce of empty array with no initial value")}return p};M.reduceRight=M.foldr=function(Q,P,p,O){var N=arguments.length>2;if(Q==null){Q=[]}if(b&&Q.reduceRight===b){if(O){P=M.bind(P,O)}return N?Q.reduceRight(P,p):Q.reduceRight(P)}var R=M.toArray(Q).reverse();if(O&&!N){P=M.bind(P,O)}return N?M.reduce(R,P,p,O):M.reduce(R,P)};M.find=M.detect=function(P,O,N){var p;y(P,function(S,Q,R){if(O.call(N,S,Q,R)){p=S;return true}});return p};M.filter=M.select=function(P,O,N){var p=[];if(P==null){return p}if(a&&P.filter===a){return P.filter(O,N)}I(P,function(S,Q,R){if(O.call(N,S,Q,R)){p[p.length]=S}});return p};M.reject=function(P,O,N){var p=[];if(P==null){return p}I(P,function(S,Q,R){if(!O.call(N,S,Q,R)){p[p.length]=S}});return p};M.every=M.all=function(P,O,N){var p=true;if(P==null){return p}if(A&&P.every===A){return P.every(O,N)}I(P,function(S,Q,R){if(!(p=p&&O.call(N,S,Q,R))){return D}});return !!p};var y=M.some=M.any=function(P,O,N){O||(O=M.identity);var p=false;if(P==null){return p}if(n&&P.some===n){return P.some(O,N)}I(P,function(S,Q,R){if(p||(p=O.call(N,S,Q,R))){return D}});return !!p};M.include=M.contains=function(O,N){var p=false;if(O==null){return p}if(l&&O.indexOf===l){return O.indexOf(N)!=-1}p=y(O,function(P){return P===N});return p};M.invoke=function(N,O){var p=m.call(arguments,2);return M.map(N,function(P){return(M.isFunction(O)?O||P:P[O]).apply(P,p)})};M.pluck=function(N,p){return M.map(N,function(O){return O[p]})};M.max=function(P,O,N){if(!O&&M.isArray(P)&&P[0]===+P[0]){return Math.max.apply(Math,P)}if(!O&&M.isEmpty(P)){return -Infinity}var p={computed:-Infinity};I(P,function(T,Q,S){var R=O?O.call(N,T,Q,S):T;R>=p.computed&&(p={value:T,computed:R})});return p.value};M.min=function(P,O,N){if(!O&&M.isArray(P)&&P[0]===+P[0]){return Math.min.apply(Math,P)}if(!O&&M.isEmpty(P)){return Infinity}var p={computed:Infinity};I(P,function(T,Q,S){var R=O?O.call(N,T,Q,S):T;R<p.computed&&(p={value:T,computed:R})});return p.value};M.shuffle=function(O){var p=[],N;I(O,function(R,P,Q){N=Math.floor(Math.random()*(P+1));p[P]=p[N];p[N]=R});return p};M.sortBy=function(O,P,p){var N=M.isFunction(P)?P:function(Q){return Q[P]};return M.pluck(M.map(O,function(S,Q,R){return{value:S,criteria:N.call(p,S,Q,R)}}).sort(function(T,S){var R=T.criteria,Q=S.criteria;if(R===void 0){return 1}if(Q===void 0){return -1}return R<Q?-1:R>Q?1:0}),"value")};M.groupBy=function(O,P){var p={};var N=M.isFunction(P)?P:function(Q){return Q[P]};I(O,function(S,Q){var R=N(S,Q);(p[R]||(p[R]=[])).push(S)});return p};M.sortedIndex=function(R,Q,O){O||(O=M.identity);var p=0,P=R.length;while(p<P){var N=(p+P)>>1;O(R[N])<O(Q)?p=N+1:P=N}return p};M.toArray=function(p){if(!p){return[]}if(M.isArray(p)){return m.call(p)}if(M.isArguments(p)){return m.call(p)}if(p.toArray&&M.isFunction(p.toArray)){return p.toArray()}return M.values(p)};M.size=function(p){return M.isArray(p)?p.length:M.keys(p).length};M.first=M.head=M.take=function(O,N,p){return(N!=null)&&!p?m.call(O,0,N):O[0]};M.initial=function(O,N,p){return m.call(O,0,O.length-((N==null)||p?1:N))};M.last=function(O,N,p){if((N!=null)&&!p){return m.call(O,Math.max(O.length-N,0))}else{return O[O.length-1]}};M.rest=M.tail=function(O,p,N){return m.call(O,(p==null)||N?1:p)};M.compact=function(p){return M.filter(p,function(N){return !!N})};M.flatten=function(N,p){return M.reduce(N,function(O,P){if(M.isArray(P)){return O.concat(p?P:M.flatten(P))}O[O.length]=P;return O},[])};M.without=function(p){return M.difference(p,m.call(arguments,1))};M.uniq=M.unique=function(Q,P,O){var p=O?M.map(Q,O):Q;var N=[];if(Q.length<3){P=true}M.reduce(p,function(R,T,S){if(P?M.last(R)!==T||!R.length:!M.include(R,T)){R.push(T);N.push(Q[S])}return R},[]);return N};M.union=function(){return M.uniq(M.flatten(arguments,true))};M.intersection=M.intersect=function(N){var p=m.call(arguments,1);return M.filter(M.uniq(N),function(O){return M.every(p,function(P){return M.indexOf(P,O)>=0})})};M.difference=function(N){var p=M.flatten(m.call(arguments,1),true);return M.filter(N,function(O){return !M.include(p,O)})};M.zip=function(){var p=m.call(arguments);var P=M.max(M.pluck(p,"length"));var O=new Array(P);for(var N=0;N<P;N++){O[N]=M.pluck(p,""+N)}return O};M.indexOf=function(Q,O,P){if(Q==null){return -1}var N,p;if(P){N=M.sortedIndex(Q,O);return Q[N]===O?N:-1}if(l&&Q.indexOf===l){return Q.indexOf(O)}for(N=0,p=Q.length;N<p;N++){if(N in Q&&Q[N]===O){return N}}return -1};M.lastIndexOf=function(O,N){if(O==null){return -1}if(k&&O.lastIndexOf===k){return O.lastIndexOf(N)}var p=O.length;while(p--){if(p in O&&O[p]===N){return p}}return -1};M.range=function(R,P,Q){if(arguments.length<=1){P=R||0;R=0}Q=arguments[2]||1;var N=Math.max(Math.ceil((P-R)/Q),0);var p=0;var O=new Array(N);while(p<N){O[p++]=R;R+=Q}return O};var G=function(){};M.bind=function d(P,N){var O,p;if(P.bind===F&&F){return F.apply(P,m.call(arguments,1))}if(!M.isFunction(P)){throw new TypeError}p=m.call(arguments,2);return O=function(){if(!(this instanceof O)){return P.apply(N,p.concat(m.call(arguments)))}G.prototype=P.prototype;var R=new G;var Q=P.apply(R,p.concat(m.call(arguments)));if(Object(Q)===Q){return Q}return R}};M.bindAll=function(N){var p=m.call(arguments,1);if(p.length==0){p=M.functions(N)}I(p,function(O){N[O]=M.bind(N[O],N)});return N};M.memoize=function(O,N){var p={};N||(N=M.identity);return function(){var P=N.apply(this,arguments);return M.has(p,P)?p[P]:(p[P]=O.apply(this,arguments))}};M.delay=function(N,O){var p=m.call(arguments,2);return setTimeout(function(){return N.apply(null,p)},O)};M.defer=function(p){return M.delay.apply(M,[p,1].concat(m.call(arguments,1)))};M.throttle=function(O,P){var N,R,S,T,Q,U;var p=M.debounce(function(){Q=T=false},P);return function(){N=this;R=arguments;var V=function(){S=null;if(Q){O.apply(N,R)}p()};if(!S){S=setTimeout(V,P)}if(T){Q=true}else{U=O.apply(N,R)}p();T=true;return U}};M.debounce=function(N,P,p){var O;return function(){var S=this,R=arguments;var Q=function(){O=null;if(!p){N.apply(S,R)}};if(p&&!O){N.apply(S,R)}clearTimeout(O);O=setTimeout(Q,P)}};M.once=function(O){var p=false,N;return function(){if(p){return N}p=true;return N=O.apply(this,arguments)}};M.wrap=function(p,N){return function(){var O=[p].concat(m.call(arguments,0));return N.apply(this,O)}};M.compose=function(){var p=arguments;return function(){var N=arguments;for(var O=p.length-1;O>=0;O--){N=[p[O].apply(this,N)]}return N[0]}};M.after=function(N,p){if(N<=0){return p()}return function(){if(--N<1){return p.apply(this,arguments)}}};M.keys=e||function(O){if(O!==Object(O)){throw new TypeError("Invalid object")}var N=[];for(var p in O){if(M.has(O,p)){N[N.length]=p}}return N};M.values=function(p){return M.map(p,M.identity)};M.functions=M.methods=function(O){var N=[];for(var p in O){if(M.isFunction(O[p])){N.push(p)}}return N.sort()};M.extend=function(p){I(m.call(arguments,1),function(N){for(var O in N){p[O]=N[O]}});return p};M.pick=function(N){var p={};I(M.flatten(m.call(arguments,1)),function(O){if(O in N){p[O]=N[O]}});return p};M.defaults=function(p){I(m.call(arguments,1),function(N){for(var O in N){if(p[O]==null){p[O]=N[O]}}});return p};M.clone=function(p){if(!M.isObject(p)){return p}return M.isArray(p)?p.slice():M.extend({},p)};M.tap=function(N,p){p(N);return N};function J(P,O,N){if(P===O){return P!==0||1/P==1/O}if(P==null||O==null){return P===O}if(P._chain){P=P._wrapped}if(O._chain){O=O._wrapped}if(P.isEqual&&M.isFunction(P.isEqual)){return P.isEqual(O)}if(O.isEqual&&M.isFunction(O.isEqual)){return O.isEqual(P)}var S=c.call(P);if(S!=c.call(O)){return false}switch(S){case"[object String]":return P==String(O);case"[object Number]":return P!=+P?O!=+O:(P==0?1/P==1/O:P==+O);case"[object Date]":case"[object Boolean]":return +P==+O;case"[object RegExp]":return P.source==O.source&&P.global==O.global&&P.multiline==O.multiline&&P.ignoreCase==O.ignoreCase}if(typeof P!="object"||typeof O!="object"){return false}var T=N.length;while(T--){if(N[T]==P){return true}}N.push(P);var R=0,p=true;if(S=="[object Array]"){R=P.length;p=R==O.length;if(p){while(R--){if(!(p=R in P==R in O&&J(P[R],O[R],N))){break}}}}else{if("constructor" in P!="constructor" in O||P.constructor!=O.constructor){return false}for(var Q in P){if(M.has(P,Q)){R++;if(!(p=M.has(O,Q)&&J(P[Q],O[Q],N))){break}}}if(p){for(Q in O){if(M.has(O,Q)&&!(R--)){break}}p=!R}}N.pop();return p}M.isEqual=function(N,p){return J(N,p,[])};M.isEmpty=function(N){if(N==null){return true}if(M.isArray(N)||M.isString(N)){return N.length===0}for(var p in N){if(M.has(N,p)){return false}}return true};M.isElement=function(p){return !!(p&&p.nodeType==1)};M.isArray=s||function(p){return c.call(p)=="[object Array]"};M.isObject=function(p){return p===Object(p)};M.isArguments=function(p){return c.call(p)=="[object Arguments]"};if(!M.isArguments(arguments)){M.isArguments=function(p){return !!(p&&M.has(p,"callee"))}}M.isFunction=function(p){return c.call(p)=="[object Function]"};M.isString=function(p){return c.call(p)=="[object String]"};M.isNumber=function(p){return c.call(p)=="[object Number]"};M.isFinite=function(p){return M.isNumber(p)&&isFinite(p)};M.isNaN=function(p){return p!==p};M.isBoolean=function(p){return p===true||p===false||c.call(p)=="[object Boolean]"};M.isDate=function(p){return c.call(p)=="[object Date]"};M.isRegExp=function(p){return c.call(p)=="[object RegExp]"};M.isNull=function(p){return p===null};M.isUndefined=function(p){return p===void 0};M.has=function(N,p){return h.call(N,p)};M.noConflict=function(){v._=j;return this};M.identity=function(p){return p};M.times=function(P,O,N){for(var p=0;p<P;p++){O.call(N,p)}};M.escape=function(p){return(""+p).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};M.result=function(p,O){if(p==null){return null}var N=p[O];return M.isFunction(N)?N.call(p):N};M.mixin=function(p){I(M.functions(p),function(N){w(N,M[N]=p[N])})};var x=0;M.uniqueId=function(p){var N=x++;return p?p+N:N};M.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var u=/.^/;var g={"\\":"\\","'":"'",r:"\r",n:"\n",t:"\t",u2028:"\u2028",u2029:"\u2029"};for(var H in g){g[g[H]]=H}var i=/\\|'|\r|\n|\t|\u2028|\u2029/g;var B=/\\(\\|'|r|n|t|u2028|u2029)/g;var K=function(p){return p.replace(B,function(N,O){return g[O]})};M.template=function(R,Q,O){O=M.defaults(O||{},M.templateSettings);var P="__p+='"+R.replace(i,function(S){return"\\"+g[S]}).replace(O.escape||u,function(S,T){return"'+\n_.escape("+K(T)+")+\n'"}).replace(O.interpolate||u,function(S,T){return"'+\n("+K(T)+")+\n'"}).replace(O.evaluate||u,function(S,T){return"';\n"+K(T)+"\n;__p+='"})+"';\n";if(!O.variable){P="with(obj||{}){\n"+P+"}\n"}P="var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n"+P+"return __p;\n";var N=new Function(O.variable||"obj","_",P);if(Q){return N(Q,M)}var p=function(S){return N.call(this,S,M)};p.source="function("+(O.variable||"obj")+"){\n"+P+"}";return p};M.chain=function(p){return M(p).chain()};var t=function(p){this._wrapped=p};M.prototype=t.prototype;var r=function(N,p){return p?M(N).chain():N};var w=function(p,N){t.prototype[p]=function(){var O=m.call(arguments);z.call(O,this._wrapped);return r(N.apply(M,O),this._chain)}};M.mixin(M);I(["pop","push","reverse","shift","sort","splice","unshift"],function(p){var N=C[p];t.prototype[p]=function(){var O=this._wrapped;N.apply(O,arguments);var P=O.length;if((p=="shift"||p=="splice")&&P===0){delete O[0]}return r(O,this._chain)}});I(["concat","join","slice"],function(p){var N=C[p];t.prototype[p]=function(){return r(N.apply(this._wrapped,arguments),this._chain)}});t.prototype.chain=function(){this._chain=true;return this};t.prototype.value=function(){return this._wrapped}}).call(this);(function(){$(document).ready(function(){var a;$("#search_frame").hide();window.lastSearch="";if(window.top.frames.main){$("body").addClass("frames")}else{$("body").addClass("noframes")}$("pre code").each(function(b,c){return hljs.highlightBlock(c," ")});$("#search_frame").on("load",function(b){if($(this).attr("src")){return $("#search_frame").show()}});$(".frames #content a").each(function(){if(/^https?:\/\//i.test($(this).attr("href"))){return $(this).attr("target","_top")}});$("#search input").focus();$("#search a").click(function(b){var c=this;b.preventDefault();if($(this).hasClass("active")){$(this).removeClass("active");return $("#search_frame").hide()}else{$("#search a").removeClass("active");$("#search_frame").one("load",function(){return $(c).addClass("active")});return $("#search_frame").attr("src",$(this).attr("href"))}});$("#content.list #search input").keyup(function(c){var b;b=$(this).val().toLowerCase();if(b.length===0){$("#content.list ul li").each(function(){if($("#content").hasClass("tree")){$(this).removeClass("result");$(this).css("padding-left",$(this).data("padding"))}return $(this).show()})}else{$("#content.list ul li").each(function(){var d;if($(this).find("a").text().toLowerCase().indexOf(b)===-1){return $(this).hide()}else{if($("#content").hasClass("tree")){$(this).addClass("result");d=$(this).css("padding-left");if(d!=="0px"){$(this).data("padding",d)}$(this).css("padding-left",0)}return $(this).show()}})}return window.createStripes()});$("#fuzzySearch input").keyup(function(b){var e,h,i,j,g,f,m,c,l,d,k;l=$(this).val();c=$("#fuzzySearch ol");if(b.keyCode===13){return location.href=$("#fuzzySearch ol li.selected a").attr("href")}else{if(b.keyCode===38){j=c.children();i=j.index($("#fuzzySearch ol li.selected"));$(j.get(i)).removeClass("selected");i-=1;if(i===-1){i=j.length-1}return $(j.get(i)).addClass("selected")}else{if(b.keyCode===40){j=c.children();i=j.index($("#fuzzySearch ol li.selected"));$(j.get(i)).removeClass("selected");i+=1;if(i===j.length){i=0}return $(j.get(i)).addClass("selected")}else{if(l&&l!==lastSearch){window.lastSearch=l;c.empty();m=$("#base").attr("data-path");f=fuzzy(l,_.pluck(searchData,"t"),{limit:25});h=fuzzy(l,_.pluck(searchData,"t"),{pre:"<span>",post:"</span>",limit:25});for(i=d=0,k=f.length;d<k;i=++d){g=f[i];e=_.find(searchData,function(n){return n.t===g});c.append($("<li><a href='"+m+e.p+"'>"+h[i]+"</a>"+(e.h?"<small>("+e.h+")</small>":"")+"</li>"))}$("#fuzzySearch ol li:first").addClass("selected");$("#fuzzySearch").height(c.height()+45);return $("#fuzzySearch ol li").each(function(n,o){if(n%2===0){return $(o).addClass("stripe")}else{return $(o).removeClass("stripe")}})}else{if(l!==lastSearch){c.empty();return $("#fuzzySearch").height(45)}}}}}});$("body #content.list ul").on("click","li",function(c){var b;b=$(this).find("a:not(.toggle)").attr("href");if(b){if($("body").hasClass("noframes")){if(b!=="#"){window.parent.location.href=b}}else{if(b!=="#"){top.frames.main.location.href=b}}}return c.preventDefault()});$("#content.tree ul > ul").each(function(){return $(this).prev().prepend($('<a href="#" class="toggle"></a>'))});window.createStripes=function(){return $("#content.list li:visible").each(function(b,c){if(b%2===0){return $(c).addClass("stripe")}else{return $(c).removeClass("stripe")}})};$("#content.tree a.toggle").click(function(){$(this).toggleClass("collapsed");$(this).parent().next().toggle();return window.createStripes()});$("a.frames").click(function(b){location.href=$(this).attr("href");return b.preventDefault()});$("a.noframes").click(function(b){parent.location.href=location.href;return b.preventDefault()});window.indentTree=function(c,b){return $(c).find("> ul").each(function(){$(this).find("> li").css("padding-left",""+b+"px");return window.indentTree($(this),b+20)})};$("#filecontents").each(function(){var p,h,o,j,k,c,m,b,l,f,e,n,g,d;b=$("nav.toc");l=b;c=0;p=[];g=$("h2,h3,h4,h5,h6",this);for(k=f=0,n=g.length;f<n;k=++f){o=g[k];o=$(o);o.before($("<a name='toc_"+k+"'></a>"));h=parseInt(o.get(0).tagName.substring(1));if(h>c){m=$("<ol></ol>");l.append(m);p.push(l);l=m;c=h}else{if(h<c){for(j=e=0,d=c-h;0<=d?e<d:e>d;j=0<=d?++e:--e){l=p.pop()}if(!l){l=$("nav.toc ol:first")}c=h}}l.append($("<li><a href='#toc_"+k+"'>"+(o.text())+"</a></li>"))}if($("ol",b).length===0){return b.hide()}});$("a.hide_toc").click(function(){return $("nav.toc").toggleClass("hidden")});$("a.float_toc").click(function(){$("nav.toc").toggleClass("inline");return $(this).text($("nav.toc").hasClass("inline")?"float":"left")});indentTree($("#content.list > ul"),20);createStripes();a=function(b,c){if(parent.frames.list){if(!/#{ url }$/.test(parent.frames.list.location.href)){return parent.frames.list.location.href=b}}else{if(parent){return parent.$("#search #"+c).click()}else{return $("#search #"+c).click()}}};key.filter=function(c){var b;b=(c.target||c.srcElement).tagName;return b!=="INPUT"||c.keyCode===27||c.ctrlKey===true};key("s",function(b){$("#search input").focus().select();if(parent.frames.list){parent.frames.list.$("#search input").focus().select()}return b.preventDefault()});key("esc",function(){if(parent.frames.list){parent.frames.list.$("#search input").blur();parent.frames.main.$("#help").hide();return parent.frames.main.$("#fuzzySearch").hide()}else{if(parent){parent.$("#search .active").click();parent.$("#help").hide();return parent.$("#fuzzySearch").hide()}else{$("#search input").blur();$("#help").hide();return $("#fuzzySearch").hide()}}});key("⌃+l",function(){var b;b=$(parent.document.body);if(b.data("toggled")){parent.document.body.cols="20%, *";return b.data("toggled",false)}else{parent.document.body.cols="0, *";return b.data("toggled",true)}});key("⌃+c",function(){return a("class_list.html","class_list_link")});key("⌃+m",function(){return a("method_list.html","method_list_link")});key("⌃+i",function(){return a("mixin_list.html","mixin_list_link")});key("⌃+f",function(){return a("file_list.html","file_list_link")});key("⌃+e",function(){return a("extra_list.html","extra_list_link")});key("⌃+h",function(){if(parent.frames.main){return parent.frames.main.$("#help").toggle()}else{if(parent){return parent.$("#help").toggle()}else{return $("#help").toggle()}}});return key("⌃+t",function(b){$("#fuzzySearch").toggle();$("#fuzzySearch input").focus().select();if(parent.frames.main){parent.frames.main.$("#fuzzySearch").show();parent.frames.main.$("#fuzzySearch input").focus().select()}return b.preventDefault()})})}).call(this);(function(){var b,a;window.fuzzy=function(A,u,k){var m,i,t,r,f,l,n,I,d,H,q,E,y,C,g,w,x,D,s,o,v,c,B,e,z,F,p,j,h,G;if(k==null){k={}}v=k.pre,x=k.post,C=k.limit,j=k.separator,I=k.ignorecase,d=k.ignorespace,p=k.separate;if(I==null){I=true}if(d==null){d=true}if(p==null){p=false}if(p&&!j){throw new Error("You must pass a separator when options.separate is true.")}if(d){A=A.replace(/\s/g,"")}g=[];l=(I&&"i")||"";f=v&&x;m=function(J,K,L){if(p){return g[L]([J,K])}else{if(J){return g[L](J+j+K)}else{return g[L](K)}}};t=function(J,K){return m(J,K,"push")};F=function(J,K){return m(J,K,"unshift")};if(j){B=A.split(j);D=B.pop();c=B.join(j);H=_.map(B,(function(J){return b(J)}));H=H.join(".*?"+j+".*?");z=new RegExp("^.*?"+H+".*?$",l)}else{B=false;D=A;z=false}o=new RegExp("^.*?"+(b(D))+".*$",l);for(h=0,G=u.length;h<G;h++){E=u[h];if(g.length===C){break}n=j&&!!~E.indexOf(j);if(!n&&E.indexOf(A)===0){if(f){y=A.length;F("",v+E.slice(0,y)+x+E.slice(y))}else{F("",E)}continue}if(n){w=E.split(j);e=w.slice(0,-1).join(j);s=_.last(w)}else{e="";s=E}q=!z||z.test(e);q&&(q=!o||o.test(s));if(!q){continue}if(f){i=a(s,D,v,x,I);if(n){r=a(e,c,v,x,I);t(r,i)}else{t("",i)}}else{t(e,s)}}return g};b=function(h){var i,f,e,g,d;f=h.split("");e=[];for(g=0,d=f.length;g<d;g++){i=f[g];i=i==="\\"?"\\\\":i;e.push("(["+i+"])")}return e.join("[^/]*?")};a=function(j,k,f,n,e){var l,h,d,o,g,m,i;h="";k=k.split("");d=k.shift();i=j.split("");for(g=0,m=i.length;g<m;g++){l=i[g];if(d){o=false;if(e&&l.toLowerCase()===d.toLowerCase()){o=true}else{if(!e&&l===d){o=true}}if(o){h+=""+f+l+n;d=k.shift();continue}}h+=l}return h}}).call(this);var hljs=new function(){function m(p){return p.replace(/&/gm,"&amp;").replace(/</gm,"&lt;")}function f(r,q,p){return RegExp(q,"m"+(r.case_insensitive?"i":"")+(p?"g":""))}function b(r){for(var p=0;p<r.childNodes.length;p++){var q=r.childNodes[p];if(q.nodeName=="CODE"){return q}if(!(q.nodeType==3&&q.nodeValue.match(/\s+/))){break}}}function h(t,s){var p="";for(var r=0;r<t.childNodes.length;r++){if(t.childNodes[r].nodeType==3){var q=t.childNodes[r].nodeValue;if(s){q=q.replace(/\n/g,"")}p+=q}else{if(t.childNodes[r].nodeName=="BR"){p+="\n"}else{p+=h(t.childNodes[r])}}}if(/MSIE [678]/.test(navigator.userAgent)){p=p.replace(/\r/g,"\n")}return p}function a(s){var r=s.className.split(/\s+/);r=r.concat(s.parentNode.className.split(/\s+/));for(var q=0;q<r.length;q++){var p=r[q].replace(/^language-/,"");if(e[p]||p=="no-highlight"){return p}}}function c(q){var p=[];(function(s,t){for(var r=0;r<s.childNodes.length;r++){if(s.childNodes[r].nodeType==3){t+=s.childNodes[r].nodeValue.length}else{if(s.childNodes[r].nodeName=="BR"){t+=1}else{if(s.childNodes[r].nodeType==1){p.push({event:"start",offset:t,node:s.childNodes[r]});t=arguments.callee(s.childNodes[r],t);p.push({event:"stop",offset:t,node:s.childNodes[r]})}}}}return t})(q,0);return p}function k(y,w,x){var q=0;var z="";var s=[];function u(){if(y.length&&w.length){if(y[0].offset!=w[0].offset){return(y[0].offset<w[0].offset)?y:w}else{return w[0].event=="start"?y:w}}else{return y.length?y:w}}function t(D){var A="<"+D.nodeName.toLowerCase();for(var B=0;B<D.attributes.length;B++){var C=D.attributes[B];A+=" "+C.nodeName.toLowerCase();if(C.value!==undefined&&C.value!==false&&C.value!==null){A+='="'+m(C.value)+'"'}}return A+">"}while(y.length||w.length){var v=u().splice(0,1)[0];z+=m(x.substr(q,v.offset-q));q=v.offset;if(v.event=="start"){z+=t(v.node);s.push(v.node)}else{if(v.event=="stop"){var p,r=s.length;do{r--;p=s[r];z+=("</"+p.nodeName.toLowerCase()+">")}while(p!=v.node);s.splice(r,1);while(r<s.length){z+=t(s[r]);r++}}}}return z+m(x.substr(q))}function j(){function q(w,x,v){if(w.compiled){return}var u;if(!v){w.beginRe=f(x,w.begin?w.begin:"\\B|\\b");if(!w.end&&!w.endsWithParent){w.end="\\B|\\b"}if(w.end){w.endRe=f(x,w.end)}}if(w.illegal){w.illegalRe=f(x,w.illegal)}if(w.relevance===undefined){w.relevance=1}if(w.keywords){w.lexemsRe=f(x,w.lexems||hljs.IDENT_RE,true);for(var t in w.keywords){if(!w.keywords.hasOwnProperty(t)){continue}if(w.keywords[t] instanceof Object){u=w.keywords[t]}else{u=w.keywords;t="keyword"}for(var r in u){if(!u.hasOwnProperty(r)){continue}w.keywords[r]=[t,u[r]]}}}if(!w.contains){w.contains=[]}w.compiled=true;for(var s=0;s<w.contains.length;s++){if(w.contains[s]=="self"){w.contains[s]=w}q(w.contains[s],x,false)}if(w.starts){q(w.starts,x,false)}}for(var p in e){if(!e.hasOwnProperty(p)){continue}q(e[p].defaultMode,e[p],true)}}function d(B,C){if(!j.called){j();j.called=true}function r(K,M){for(var L=0;L<M.contains.length;L++){if(M.contains[L].beginRe.test(K)){return M.contains[L]}}}function w(L,K){if(p[L].end&&p[L].endRe.test(K)){return 1}if(p[L].endsWithParent){var M=w(L-1,K);return M?M+1:0}return 0}function x(K,L){return L.illegal&&L.illegalRe.test(K)}function J(N,O){var K=[];for(var M=0;M<N.contains.length;M++){K.push(N.contains[M].begin)}var L=p.length-1;do{if(p[L].end){K.push(p[L].end)}L--}while(p[L+1].endsWithParent);if(N.illegal){K.push(N.illegal)}return f(O,"("+K.join("|")+")",true)}function q(M,L){var N=p[p.length-1];if(!N.terminators){N.terminators=J(N,D)}N.terminators.lastIndex=L;var K=N.terminators.exec(M);if(K){return[M.substr(L,K.index-L),K[0],false]}else{return[M.substr(L),"",true]}}function A(N,K){var L=D.case_insensitive?K[0].toLowerCase():K[0];var M=N.keywords[L];if(M&&M instanceof Array){return M}return false}function E(L,P){L=m(L);if(!P.keywords){return L}var K="";var O=0;P.lexemsRe.lastIndex=0;var M=P.lexemsRe.exec(L);while(M){K+=L.substr(O,M.index-O);var N=A(P,M);if(N){y+=N[1];K+='<span class="'+N[0]+'">'+M[0]+"</span>"}else{K+=M[0]}O=P.lexemsRe.lastIndex;M=P.lexemsRe.exec(L)}return K+L.substr(O,L.length-O)}function I(L,M){if(M.subLanguage&&e[M.subLanguage]){var K=d(M.subLanguage,L);y+=K.keyword_count;return K.value}else{return E(L,M)}}function H(M,K){var L=M.className?'<span class="'+M.className+'">':"";if(M.returnBegin){z+=L;M.buffer=""}else{if(M.excludeBegin){z+=m(K)+L;M.buffer=""}else{z+=L;M.buffer=K}}p.push(M);u+=M.relevance}function F(O,N,M){var R=p[p.length-1];if(M){z+=I(R.buffer+O,R);return false}var Q=r(N,R);if(Q){z+=I(R.buffer+O,R);H(Q,N);return Q.returnBegin}var L=w(p.length-1,N);if(L){var P=R.className?"</span>":"";if(R.returnEnd){z+=I(R.buffer+O,R)+P}else{if(R.excludeEnd){z+=I(R.buffer+O,R)+P+m(N)}else{z+=I(R.buffer+O+N,R)+P}}while(L>1){P=p[p.length-2].className?"</span>":"";z+=P;L--;p.length--}var K=p[p.length-1];p.length--;p[p.length-1].buffer="";if(K.starts){H(K.starts,"")}return R.returnEnd}if(x(N,R)){throw"Illegal"}}var D=e[B];var p=[D.defaultMode];var u=0;var y=0;var z="";try{var s,v=0;D.defaultMode.buffer="";do{s=q(C,v);var t=F(s[0],s[1],s[2]);v+=s[0].length;if(!t){v+=s[1].length}}while(!s[2]);if(p.length>1){throw"Illegal"}return{relevance:u,keyword_count:y,value:z}}catch(G){if(G=="Illegal"){return{relevance:0,keyword_count:0,value:m(C)}}else{throw G}}}function g(t){var p={keyword_count:0,relevance:0,value:m(t)};var r=p;for(var q in e){if(!e.hasOwnProperty(q)){continue}var s=d(q,t);s.language=q;if(s.keyword_count+s.relevance>r.keyword_count+r.relevance){r=s}if(s.keyword_count+s.relevance>p.keyword_count+p.relevance){r=p;p=s}}if(r.language){p.second_best=r}return p}function i(r,q,p){if(q){r=r.replace(/^((<[^>]+>|\t)+)/gm,function(t,w,v,u){return w.replace(/\t/g,q)})}if(p){r=r.replace(/\n/g,"<br>")}return r}function n(t,w,r){var x=h(t,r);var v=a(t);var y,s;if(v=="no-highlight"){return}if(v){y=d(v,x)}else{y=g(x);v=y.language}var q=c(t);if(q.length){s=document.createElement("pre");s.innerHTML=y.value;y.value=k(q,c(s),x)}y.value=i(y.value,w,r);var u=t.className;if(!u.match("(\\s|^)(language-)?"+v+"(\\s|$)")){u=u?(u+" "+v):v}if(/MSIE [678]/.test(navigator.userAgent)&&t.tagName=="CODE"&&t.parentNode.tagName=="PRE"){s=t.parentNode;var p=document.createElement("div");p.innerHTML="<pre><code>"+y.value+"</code></pre>";t=p.firstChild.firstChild;p.firstChild.className=s.className;s.parentNode.replaceChild(p.firstChild,s)}else{t.innerHTML=y.value}t.className=u;t.result={language:v,kw:y.keyword_count,re:y.relevance};if(y.second_best){t.second_best={language:y.second_best.language,kw:y.second_best.keyword_count,re:y.second_best.relevance}}}function o(){if(o.called){return}o.called=true;var r=document.getElementsByTagName("pre");for(var p=0;p<r.length;p++){var q=b(r[p]);if(q){n(q,hljs.tabReplace)}}}function l(){if(window.addEventListener){window.addEventListener("DOMContentLoaded",o,false);window.addEventListener("load",o,false)}else{if(window.attachEvent){window.attachEvent("onload",o)}else{window.onload=o}}}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=n;this.initHighlighting=o;this.initHighlightingOnLoad=l;this.IDENT_RE="[a-zA-Z][a-zA-Z0-9_]*";this.UNDERSCORE_IDENT_RE="[a-zA-Z_][a-zA-Z0-9_]*";this.NUMBER_RE="\\b\\d+(\\.\\d+)?";this.C_NUMBER_RE="\\b(0[xX][a-fA-F0-9]+|(\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BINARY_NUMBER_RE="\\b(0b[01]+)";this.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BACKSLASH_ESCAPE={begin:"\\\\.",relevance:0};this.APOS_STRING_MODE={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[this.BACKSLASH_ESCAPE],relevance:0};this.QUOTE_STRING_MODE={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[this.BACKSLASH_ESCAPE],relevance:0};this.C_LINE_COMMENT_MODE={className:"comment",begin:"//",end:"$"};this.C_BLOCK_COMMENT_MODE={className:"comment",begin:"/\\*",end:"\\*/"};this.HASH_COMMENT_MODE={className:"comment",begin:"#",end:"$"};this.NUMBER_MODE={className:"number",begin:this.NUMBER_RE,relevance:0};this.C_NUMBER_MODE={className:"number",begin:this.C_NUMBER_RE,relevance:0};this.BINARY_NUMBER_MODE={className:"number",begin:this.BINARY_NUMBER_RE,relevance:0};this.inherit=function(r,s){var p={};for(var q in r){p[q]=r[q]}if(s){for(var q in s){p[q]=s[q]}}return p}}();hljs.LANGUAGES.apache=function(){var a={className:"number",begin:"[\\$%]\\d+"};return{case_insensitive:true,defaultMode:{keywords:{keyword:{acceptfilter:1,acceptmutex:1,acceptpathinfo:1,accessfilename:1,action:1,addalt:1,addaltbyencoding:1,addaltbytype:1,addcharset:1,adddefaultcharset:1,adddescription:1,addencoding:1,addhandler:1,addicon:1,addiconbyencoding:1,addiconbytype:1,addinputfilter:1,addlanguage:1,addmoduleinfo:1,addoutputfilter:1,addoutputfilterbytype:1,addtype:1,alias:1,aliasmatch:1,allow:1,allowconnect:1,allowencodedslashes:1,allowoverride:1,anonymous:1,anonymous_logemail:1,anonymous_mustgiveemail:1,anonymous_nouserid:1,anonymous_verifyemail:1,authbasicauthoritative:1,authbasicprovider:1,authdbduserpwquery:1,authdbduserrealmquery:1,authdbmgroupfile:1,authdbmtype:1,authdbmuserfile:1,authdefaultauthoritative:1,authdigestalgorithm:1,authdigestdomain:1,authdigestnccheck:1,authdigestnonceformat:1,authdigestnoncelifetime:1,authdigestprovider:1,authdigestqop:1,authdigestshmemsize:1,authgroupfile:1,authldapbinddn:1,authldapbindpassword:1,authldapcharsetconfig:1,authldapcomparednonserver:1,authldapdereferencealiases:1,authldapgroupattribute:1,authldapgroupattributeisdn:1,authldapremoteuserattribute:1,authldapremoteuserisdn:1,authldapurl:1,authname:1,authnprovideralias:1,authtype:1,authuserfile:1,authzdbmauthoritative:1,authzdbmtype:1,authzdefaultauthoritative:1,authzgroupfileauthoritative:1,authzldapauthoritative:1,authzownerauthoritative:1,authzuserauthoritative:1,balancermember:1,browsermatch:1,browsermatchnocase:1,bufferedlogs:1,cachedefaultexpire:1,cachedirlength:1,cachedirlevels:1,cachedisable:1,cacheenable:1,cachefile:1,cacheignorecachecontrol:1,cacheignoreheaders:1,cacheignorenolastmod:1,cacheignorequerystring:1,cachelastmodifiedfactor:1,cachemaxexpire:1,cachemaxfilesize:1,cacheminfilesize:1,cachenegotiateddocs:1,cacheroot:1,cachestorenostore:1,cachestoreprivate:1,cgimapextension:1,charsetdefault:1,charsetoptions:1,charsetsourceenc:1,checkcaseonly:1,checkspelling:1,chrootdir:1,contentdigest:1,cookiedomain:1,cookieexpires:1,cookielog:1,cookiename:1,cookiestyle:1,cookietracking:1,coredumpdirectory:1,customlog:1,dav:1,davdepthinfinity:1,davgenericlockdb:1,davlockdb:1,davmintimeout:1,dbdexptime:1,dbdkeep:1,dbdmax:1,dbdmin:1,dbdparams:1,dbdpersist:1,dbdpreparesql:1,dbdriver:1,defaulticon:1,defaultlanguage:1,defaulttype:1,deflatebuffersize:1,deflatecompressionlevel:1,deflatefilternote:1,deflatememlevel:1,deflatewindowsize:1,deny:1,directoryindex:1,directorymatch:1,directoryslash:1,documentroot:1,dumpioinput:1,dumpiologlevel:1,dumpiooutput:1,enableexceptionhook:1,enablemmap:1,enablesendfile:1,errordocument:1,errorlog:1,example:1,expiresactive:1,expiresbytype:1,expiresdefault:1,extendedstatus:1,extfilterdefine:1,extfilteroptions:1,fileetag:1,filterchain:1,filterdeclare:1,filterprotocol:1,filterprovider:1,filtertrace:1,forcelanguagepriority:1,forcetype:1,forensiclog:1,gracefulshutdowntimeout:1,group:1,header:1,headername:1,hostnamelookups:1,identitycheck:1,identitychecktimeout:1,imapbase:1,imapdefault:1,imapmenu:1,include:1,indexheadinsert:1,indexignore:1,indexoptions:1,indexorderdefault:1,indexstylesheet:1,isapiappendlogtoerrors:1,isapiappendlogtoquery:1,isapicachefile:1,isapifakeasync:1,isapilognotsupported:1,isapireadaheadbuffer:1,keepalive:1,keepalivetimeout:1,languagepriority:1,ldapcacheentries:1,ldapcachettl:1,ldapconnectiontimeout:1,ldapopcacheentries:1,ldapopcachettl:1,ldapsharedcachefile:1,ldapsharedcachesize:1,ldaptrustedclientcert:1,ldaptrustedglobalcert:1,ldaptrustedmode:1,ldapverifyservercert:1,limitinternalrecursion:1,limitrequestbody:1,limitrequestfields:1,limitrequestfieldsize:1,limitrequestline:1,limitxmlrequestbody:1,listen:1,listenbacklog:1,loadfile:1,loadmodule:1,lockfile:1,logformat:1,loglevel:1,maxclients:1,maxkeepaliverequests:1,maxmemfree:1,maxrequestsperchild:1,maxrequestsperthread:1,maxspareservers:1,maxsparethreads:1,maxthreads:1,mcachemaxobjectcount:1,mcachemaxobjectsize:1,mcachemaxstreamingbuffer:1,mcacheminobjectsize:1,mcacheremovalalgorithm:1,mcachesize:1,metadir:1,metafiles:1,metasuffix:1,mimemagicfile:1,minspareservers:1,minsparethreads:1,mmapfile:1,mod_gzip_on:1,mod_gzip_add_header_count:1,mod_gzip_keep_workfiles:1,mod_gzip_dechunk:1,mod_gzip_min_http:1,mod_gzip_minimum_file_size:1,mod_gzip_maximum_file_size:1,mod_gzip_maximum_inmem_size:1,mod_gzip_temp_dir:1,mod_gzip_item_include:1,mod_gzip_item_exclude:1,mod_gzip_command_version:1,mod_gzip_can_negotiate:1,mod_gzip_handle_methods:1,mod_gzip_static_suffix:1,mod_gzip_send_vary:1,mod_gzip_update_static:1,modmimeusepathinfo:1,multiviewsmatch:1,namevirtualhost:1,noproxy:1,nwssltrustedcerts:1,nwsslupgradeable:1,options:1,order:1,passenv:1,pidfile:1,protocolecho:1,proxybadheader:1,proxyblock:1,proxydomain:1,proxyerroroverride:1,proxyftpdircharset:1,proxyiobuffersize:1,proxymaxforwards:1,proxypass:1,proxypassinterpolateenv:1,proxypassmatch:1,proxypassreverse:1,proxypassreversecookiedomain:1,proxypassreversecookiepath:1,proxypreservehost:1,proxyreceivebuffersize:1,proxyremote:1,proxyremotematch:1,proxyrequests:1,proxyset:1,proxystatus:1,proxytimeout:1,proxyvia:1,readmename:1,receivebuffersize:1,redirect:1,redirectmatch:1,redirectpermanent:1,redirecttemp:1,removecharset:1,removeencoding:1,removehandler:1,removeinputfilter:1,removelanguage:1,removeoutputfilter:1,removetype:1,requestheader:1,require:2,rewritebase:1,rewritecond:10,rewriteengine:1,rewritelock:1,rewritelog:1,rewriteloglevel:1,rewritemap:1,rewriteoptions:1,rewriterule:10,rlimitcpu:1,rlimitmem:1,rlimitnproc:1,satisfy:1,scoreboardfile:1,script:1,scriptalias:1,scriptaliasmatch:1,scriptinterpretersource:1,scriptlog:1,scriptlogbuffer:1,scriptloglength:1,scriptsock:1,securelisten:1,seerequesttail:1,sendbuffersize:1,serveradmin:1,serveralias:1,serverlimit:1,servername:1,serverpath:1,serverroot:1,serversignature:1,servertokens:1,setenv:1,setenvif:1,setenvifnocase:1,sethandler:1,setinputfilter:1,setoutputfilter:1,ssienableaccess:1,ssiendtag:1,ssierrormsg:1,ssistarttag:1,ssitimeformat:1,ssiundefinedecho:1,sslcacertificatefile:1,sslcacertificatepath:1,sslcadnrequestfile:1,sslcadnrequestpath:1,sslcarevocationfile:1,sslcarevocationpath:1,sslcertificatechainfile:1,sslcertificatefile:1,sslcertificatekeyfile:1,sslciphersuite:1,sslcryptodevice:1,sslengine:1,sslhonorciperorder:1,sslmutex:1,ssloptions:1,sslpassphrasedialog:1,sslprotocol:1,sslproxycacertificatefile:1,sslproxycacertificatepath:1,sslproxycarevocationfile:1,sslproxycarevocationpath:1,sslproxyciphersuite:1,sslproxyengine:1,sslproxymachinecertificatefile:1,sslproxymachinecertificatepath:1,sslproxyprotocol:1,sslproxyverify:1,sslproxyverifydepth:1,sslrandomseed:1,sslrequire:1,sslrequiressl:1,sslsessioncache:1,sslsessioncachetimeout:1,sslusername:1,sslverifyclient:1,sslverifydepth:1,startservers:1,startthreads:1,substitute:1,suexecusergroup:1,threadlimit:1,threadsperchild:1,threadstacksize:1,timeout:1,traceenable:1,transferlog:1,typesconfig:1,unsetenv:1,usecanonicalname:1,usecanonicalphysicalport:1,user:1,userdir:1,virtualdocumentroot:1,virtualdocumentrootip:1,virtualscriptalias:1,virtualscriptaliasip:1,win32disableacceptex:1,xbithack:1},literal:{on:1,off:1}},contains:[hljs.HASH_COMMENT_MODE,{className:"sqbracket",begin:"\\s\\[",end:"\\]$"},{className:"cbracket",begin:"[\\$%]\\{",end:"\\}",contains:["self",a]},a,{className:"tag",begin:"</?",end:">"},hljs.QUOTE_STRING_MODE]}}}();hljs.LANGUAGES.bash=function(){var e={"true":1,"false":1};var b={className:"variable",begin:"\\$([a-zA-Z0-9_]+)\\b"};var a={className:"variable",begin:"\\$\\{(([^}])|(\\\\}))+\\}",contains:[hljs.C_NUMBER_MODE]};var f={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[hljs.BACKSLASH_ESCAPE,b,a],relevance:0};var c={className:"string",begin:"'",end:"'",relevance:0};var d={className:"test_condition",begin:"",end:"",contains:[f,c,b,a,hljs.C_NUMBER_MODE],keywords:{literal:e},relevance:0};return{defaultMode:{keywords:{keyword:{"if":1,then:1,"else":1,fi:1,"for":1,"break":1,"continue":1,"while":1,"in":1,"do":1,done:1,echo:1,exit:1,"return":1,set:1,declare:1},literal:e},contains:[{className:"shebang",begin:"(#!\\/bin\\/bash)|(#!\\/bin\\/sh)",relevance:10},b,a,hljs.HASH_COMMENT_MODE,hljs.C_NUMBER_MODE,f,c,hljs.inherit(d,{begin:"\\[ ",end:" \\]",relevance:0}),hljs.inherit(d,{begin:"\\[\\[ ",end:" \\]\\]"})]}}}();hljs.LANGUAGES.coffeescript=function(){var d={keyword:{"in":1,"if":1,"for":1,"while":1,"finally":1,"new":1,"do":1,"return":1,"else":1,"break":1,"catch":1,"instanceof":1,"throw":1,"try":1,"this":1,"switch":1,"continue":1,"typeof":1,"delete":1,"debugger":1,"class":1,"extends":1,"super":1,then:1,unless:1,until:1,loop:2,of:2,by:1,when:2,and:1,or:1,is:1,isnt:2,not:1},literal:{"true":1,"false":1,"null":1,"undefined":1,yes:1,no:1,on:1,off:1},reserved:{"case":1,"default":1,"function":1,"var":1,"void":1,"with":1,"const":1,let:1,"enum":1,"export":1,"import":1,"native":1,__hasProp:1,__extends:1,__slice:1,__bind:1,__indexOf:1}};var a="[A-Za-z$_][0-9A-Za-z$_]*";var g={className:"subst",begin:"#\\{",end:"}",keywords:d,contains:[hljs.C_NUMBER_MODE,hljs.BINARY_NUMBER_MODE]};var b={className:"string",begin:'"',end:'"',relevance:0,contains:[hljs.BACKSLASH_ESCAPE,g]};var i={className:"string",begin:'"""',end:'"""',contains:[hljs.BACKSLASH_ESCAPE,g]};var e={className:"comment",begin:"###",end:"###"};var f={className:"regexp",begin:"///",end:"///",contains:[hljs.HASH_COMMENT_MODE]};var h={className:"function",begin:a+"\\s*=\\s*(\\(.+\\))?\\s*[-=]>",returnBegin:true,contains:[{className:"title",begin:a},{className:"params",begin:"\\(",end:"\\)"}]};var c={className:"javascript",begin:"`",end:"`",excludeBegin:true,excludeEnd:true,subLanguage:"javascript"};return{defaultMode:{keywords:d,contains:[hljs.C_NUMBER_MODE,hljs.BINARY_NUMBER_MODE,hljs.APOS_STRING_MODE,i,b,e,hljs.HASH_COMMENT_MODE,f,c,h]}}}();hljs.LANGUAGES.css=function(){var a={className:"function",begin:hljs.IDENT_RE+"\\(",end:"\\)",contains:[{endsWithParent:true,excludeEnd:true,contains:[hljs.NUMBER_MODE,hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE]}]};return{case_insensitive:true,defaultMode:{illegal:"[=/|']",contains:[hljs.C_BLOCK_COMMENT_MODE,{className:"id",begin:"\\#[A-Za-z0-9_-]+"},{className:"class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"attr_selector",begin:"\\[",end:"\\]",illegal:"$"},{className:"pseudo",begin:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{className:"at_rule",begin:"@(font-face|page)",lexems:"[a-z-]+",keywords:{"font-face":1,page:1}},{className:"at_rule",begin:"@",end:"[{;]",excludeEnd:true,keywords:{"import":1,page:1,media:1,charset:1},contains:[a,hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE,hljs.NUMBER_MODE]},{className:"tag",begin:hljs.IDENT_RE,relevance:0},{className:"rules",begin:"{",end:"}",illegal:"[^\\s]",relevance:0,contains:[hljs.C_BLOCK_COMMENT_MODE,{className:"rule",begin:"[^\\s]",returnBegin:true,end:";",endsWithParent:true,contains:[{className:"attribute",begin:"[A-Z\\_\\.\\-]+",end:":",excludeEnd:true,illegal:"[^\\s]",starts:{className:"value",endsWithParent:true,excludeEnd:true,contains:[a,hljs.NUMBER_MODE,hljs.QUOTE_STRING_MODE,hljs.APOS_STRING_MODE,hljs.C_BLOCK_COMMENT_MODE,{className:"hexcolor",begin:"\\#[0-9A-F]+"},{className:"important",begin:"!important"}]}}]}]}]}}}();hljs.LANGUAGES.diff={case_insensitive:true,defaultMode:{contains:[{className:"chunk",begin:"^\\@\\@ +\\-\\d+,\\d+ +\\+\\d+,\\d+ +\\@\\@$",relevance:10},{className:"chunk",begin:"^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$",relevance:10},{className:"chunk",begin:"^\\-\\-\\- +\\d+,\\d+ +\\-\\-\\-\\-$",relevance:10},{className:"header",begin:"Index: ",end:"$"},{className:"header",begin:"=====",end:"=====$"},{className:"header",begin:"^\\-\\-\\-",end:"$"},{className:"header",begin:"^\\*{3} ",end:"$"},{className:"header",begin:"^\\+\\+\\+",end:"$"},{className:"header",begin:"\\*{5}",end:"\\*{5}$"},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"change",begin:"^\\!",end:"$"}]}};hljs.LANGUAGES.javascript={defaultMode:{keywords:{keyword:{"in":1,"if":1,"for":1,"while":1,"finally":1,"var":1,"new":1,"function":1,"do":1,"return":1,"void":1,"else":1,"break":1,"catch":1,"instanceof":1,"with":1,"throw":1,"case":1,"default":1,"try":1,"this":1,"switch":1,"continue":1,"typeof":1,"delete":1},literal:{"true":1,"false":1,"null":1}},contains:[hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE,hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE,hljs.C_NUMBER_MODE,{begin:"("+hljs.RE_STARTERS_RE+"|case|return|throw)\\s*",keywords:{"return":1,"throw":1,"case":1},contains:[hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE,{className:"regexp",begin:"/",end:"/[gim]*",contains:[{begin:"\\\\/"}]}],relevance:0},{className:"function",begin:"\\bfunction\\b",end:"{",keywords:{"function":1},contains:[{className:"title",begin:"[A-Za-z$_][0-9A-Za-z$_]*"},{className:"params",begin:"\\(",end:"\\)",contains:[hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE,hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE]}]}]}};hljs.LANGUAGES.nginx=function(){var c={className:"variable",begin:"\\$\\d+"};var b={className:"variable",begin:"\\${",end:"}"};var a={className:"variable",begin:"[\\$\\@]"+hljs.UNDERSCORE_IDENT_RE};return{defaultMode:{contains:[hljs.HASH_COMMENT_MODE,{begin:hljs.UNDERSCORE_IDENT_RE,end:";|{",returnEnd:true,keywords:{accept_mutex:1,accept_mutex_delay:1,access_log:1,add_after_body:1,add_before_body:1,add_header:1,addition_types:1,alias:1,allow:1,ancient_browser:1,ancient_browser_value:1,auth_basic:1,auth_basic_user_file:1,autoindex:1,autoindex_exact_size:1,autoindex_localtime:1,"break":1,charset:1,charset_map:1,charset_types:1,client_body_buffer_size:1,client_body_in_file_only:1,client_body_in_single_buffer:1,client_body_temp_path:1,client_body_timeout:1,client_header_buffer_size:1,client_header_timeout:1,client_max_body_size:1,connection_pool_size:1,connections:1,create_full_put_path:1,daemon:1,dav_access:1,dav_methods:1,debug_connection:1,debug_points:1,default_type:1,deny:1,directio:1,directio_alignment:1,echo:1,echo_after_body:1,echo_before_body:1,echo_blocking_sleep:1,echo_duplicate:1,echo_end:1,echo_exec:1,echo_flush:1,echo_foreach_split:1,echo_location:1,echo_location_async:1,echo_read_request_body:1,echo_request_body:1,echo_reset_timer:1,echo_sleep:1,echo_subrequest:1,echo_subrequest_async:1,empty_gif:1,env:1,error_log:1,error_page:1,events:1,expires:1,fastcgi_bind:1,fastcgi_buffer_size:1,fastcgi_buffers:1,fastcgi_busy_buffers_size:1,fastcgi_cache:1,fastcgi_cache_key:1,fastcgi_cache_methods:1,fastcgi_cache_min_uses:1,fastcgi_cache_path:1,fastcgi_cache_use_stale:1,fastcgi_cache_valid:1,fastcgi_catch_stderr:1,fastcgi_connect_timeout:1,fastcgi_hide_header:1,fastcgi_ignore_client_abort:1,fastcgi_ignore_headers:1,fastcgi_index:1,fastcgi_intercept_errors:1,fastcgi_max_temp_file_size:1,fastcgi_next_upstream:1,fastcgi_param:1,fastcgi_pass:1,fastcgi_pass_header:1,fastcgi_pass_request_body:1,fastcgi_pass_request_headers:1,fastcgi_read_timeout:1,fastcgi_send_lowat:1,fastcgi_send_timeout:1,fastcgi_split_path_info:1,fastcgi_store:1,fastcgi_store_access:1,fastcgi_temp_file_write_size:1,fastcgi_temp_path:1,fastcgi_upstream_fail_timeout:1,fastcgi_upstream_max_fails:1,flv:1,geo:1,geoip_city:1,geoip_country:1,gzip:1,gzip_buffers:1,gzip_comp_level:1,gzip_disable:1,gzip_hash:1,gzip_http_version:1,gzip_min_length:1,gzip_no_buffer:1,gzip_proxied:1,gzip_static:1,gzip_types:1,gzip_vary:1,gzip_window:1,http:1,"if":1,if_modified_since:1,ignore_invalid_headers:1,image_filter:1,image_filter_buffer:1,image_filter_jpeg_quality:1,image_filter_transparency:1,include:1,index:1,internal:1,ip_hash:1,js:1,js_load:1,js_require:1,js_utf8:1,keepalive_requests:1,keepalive_timeout:1,kqueue_changes:1,kqueue_events:1,large_client_header_buffers:1,limit_conn:1,limit_conn_log_level:1,limit_except:1,limit_rate:1,limit_rate_after:1,limit_req:1,limit_req_log_level:1,limit_req_zone:1,limit_zone:1,lingering_time:1,lingering_timeout:1,listen:1,location:1,lock_file:1,log_format:1,log_not_found:1,log_subrequest:1,map:1,map_hash_bucket_size:1,map_hash_max_size:1,master_process:1,memcached_bind:1,memcached_buffer_size:1,memcached_connect_timeout:1,memcached_next_upstream:1,memcached_pass:1,memcached_read_timeout:1,memcached_send_timeout:1,memcached_upstream_fail_timeout:1,memcached_upstream_max_fails:1,merge_slashes:1,min_delete_depth:1,modern_browser:1,modern_browser_value:1,more_clear_headers:1,more_clear_input_headers:1,more_set_headers:1,more_set_input_headers:1,msie_padding:1,msie_refresh:1,multi_accept:1,open_file_cache:1,open_file_cache_errors:1,open_file_cache_events:1,open_file_cache_min_uses:1,open_file_cache_retest:1,open_file_cache_valid:1,open_log_file_cache:1,optimize_server_names:1,output_buffers:1,override_charset:1,perl:1,perl_modules:1,perl_require:1,perl_set:1,pid:1,port_in_redirect:1,post_action:1,postpone_gzipping:1,postpone_output:1,proxy_bind:1,proxy_buffer_size:1,proxy_buffering:1,proxy_buffers:1,proxy_busy_buffers_size:1,proxy_cache:1,proxy_cache_key:1,proxy_cache_methods:1,proxy_cache_min_uses:1,proxy_cache_path:1,proxy_cache_use_stale:1,proxy_cache_valid:1,proxy_connect_timeout:1,proxy_headers_hash_bucket_size:1,proxy_headers_hash_max_size:1,proxy_hide_header:1,proxy_ignore_client_abort:1,proxy_ignore_headers:1,proxy_intercept_errors:1,proxy_max_temp_file_size:1,proxy_method:1,proxy_next_upstream:1,proxy_pass:1,proxy_pass_header:1,proxy_pass_request_body:1,proxy_pass_request_headers:1,proxy_read_timeout:1,proxy_redirect:1,proxy_send_lowat:1,proxy_send_timeout:1,proxy_set_body:1,proxy_set_header:1,proxy_store:1,proxy_store_access:1,proxy_temp_file_write_size:1,proxy_temp_path:1,proxy_upstream_fail_timeout:1,proxy_upstream_max_fails:1,push_authorized_channels_only:1,push_channel_group:1,push_max_channel_id_length:1,push_max_channel_subscribers:1,push_max_message_buffer_length:1,push_max_reserved_memory:1,push_message_buffer_length:1,push_message_timeout:1,push_min_message_buffer_length:1,push_min_message_recipients:1,push_publisher:1,push_store_messages:1,push_subscriber:1,push_subscriber_concurrency:1,random_index:1,read_ahead:1,real_ip_header:1,recursive_error_pages:1,request_pool_size:1,reset_timedout_connection:1,resolver:1,resolver_timeout:1,"return":1,rewrite:1,rewrite_log:1,root:1,satisfy:1,satisfy_any:1,send_lowat:1,send_timeout:1,sendfile:1,sendfile_max_chunk:1,server:1,server_name:1,server_name_in_redirect:1,server_names_hash_bucket_size:1,server_names_hash_max_size:1,server_tokens:1,set:1,set_real_ip_from:1,source_charset:1,ssi:1,ssi_ignore_recycled_buffers:1,ssi_min_file_chunk:1,ssi_silent_errors:1,ssi_types:1,ssi_value_length:1,ssl:1,ssl_certificate:1,ssl_certificate_key:1,ssl_ciphers:1,ssl_client_certificate:1,ssl_crl:1,ssl_dhparam:1,ssl_prefer_server_ciphers:1,ssl_protocols:1,ssl_session_cache:1,ssl_session_timeout:1,ssl_verify_client:1,ssl_verify_depth:1,sub_filter:1,sub_filter_once:1,sub_filter_types:1,tcp_nodelay:1,tcp_nopush:1,timer_resolution:1,try_files:1,types:1,types_hash_bucket_size:1,types_hash_max_size:1,underscores_in_headers:1,uninitialized_variable_warn:1,upstream:1,use:1,user:1,userid:1,userid_domain:1,userid_expires:1,userid_mark:1,userid_name:1,userid_p3p:1,userid_path:1,userid_service:1,valid_referers:1,variables_hash_bucket_size:1,variables_hash_max_size:1,worker_connections:1,worker_cpu_affinity:1,worker_priority:1,worker_processes:1,worker_rlimit_core:1,worker_rlimit_nofile:1,worker_rlimit_sigpending:1,working_directory:1,xml_entities:1,xslt_stylesheet:1,xslt_types:1},relevance:0,contains:[hljs.HASH_COMMENT_MODE,{begin:"\\s",end:"[;{]",returnBegin:true,returnEnd:true,lexems:"[a-z/]+",keywords:{built_in:{on:1,off:1,yes:1,no:1,"true":1,"false":1,none:1,blocked:1,debug:1,info:1,notice:1,warn:1,error:1,crit:1,select:1,permanent:1,redirect:1,kqueue:1,rtsig:1,epoll:1,poll:1,"/dev/poll":1}},relevance:0,contains:[hljs.HASH_COMMENT_MODE,{className:"string",begin:'"',end:'"',contains:[hljs.BACKSLASH_ESCAPE,c,b,a],relevance:0},{className:"string",begin:"'",end:"'",contains:[hljs.BACKSLASH_ESCAPE,c,b,a],relevance:0},{className:"string",begin:"([a-z]+):/",end:"[;\\s]",returnEnd:true},{className:"regexp",begin:"\\s\\^",end:"\\s|{|;",returnEnd:true,contains:[hljs.BACKSLASH_ESCAPE,c,b,a]},{className:"regexp",begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:true,contains:[hljs.BACKSLASH_ESCAPE,c,b,a]},{className:"regexp",begin:"\\*(\\.[a-z\\-]+)+",contains:[hljs.BACKSLASH_ESCAPE,c,b,a]},{className:"regexp",begin:"([a-z\\-]+\\.)+\\*",contains:[hljs.BACKSLASH_ESCAPE,c,b,a]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b"},{className:"number",begin:"\\s\\d+[kKmMgGdshdwy]*\\b",relevance:0},c,b,a]}]}]}}}();hljs.LANGUAGES.ruby=function(){var a="[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?";var j="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?";var f={keyword:{and:1,"false":1,then:1,defined:1,module:1,"in":1,"return":1,redo:1,"if":1,BEGIN:1,retry:1,end:1,"for":1,"true":1,self:1,when:1,next:1,until:1,"do":1,begin:1,unless:1,END:1,rescue:1,nil:1,"else":1,"break":1,undef:1,not:1,"super":1,"class":1,"case":1,require:1,yield:1,alias:1,"while":1,ensure:1,elsif:1,or:1,def:1},keymethods:{__id__:1,__send__:1,abort:1,abs:1,"all?":1,allocate:1,ancestors:1,"any?":1,arity:1,assoc:1,at:1,at_exit:1,autoload:1,"autoload?":1,"between?":1,binding:1,binmode:1,"block_given?":1,call:1,callcc:1,caller:1,capitalize:1,"capitalize!":1,casecmp:1,"catch":1,ceil:1,center:1,chomp:1,"chomp!":1,chop:1,"chop!":1,chr:1,"class":1,class_eval:1,"class_variable_defined?":1,class_variables:1,clear:1,clone:1,close:1,close_read:1,close_write:1,"closed?":1,coerce:1,collect:1,"collect!":1,compact:1,"compact!":1,concat:1,"const_defined?":1,const_get:1,const_missing:1,const_set:1,constants:1,count:1,crypt:1,"default":1,default_proc:1,"delete":1,"delete!":1,delete_at:1,delete_if:1,detect:1,display:1,div:1,divmod:1,downcase:1,"downcase!":1,downto:1,dump:1,dup:1,each:1,each_byte:1,each_index:1,each_key:1,each_line:1,each_pair:1,each_value:1,each_with_index:1,"empty?":1,entries:1,eof:1,"eof?":1,"eql?":1,"equal?":1,"eval":1,exec:1,exit:1,"exit!":1,extend:1,fail:1,fcntl:1,fetch:1,fileno:1,fill:1,find:1,find_all:1,first:1,flatten:1,"flatten!":1,floor:1,flush:1,for_fd:1,foreach:1,fork:1,format:1,freeze:1,"frozen?":1,fsync:1,getc:1,gets:1,global_variables:1,grep:1,gsub:1,"gsub!":1,"has_key?":1,"has_value?":1,hash:1,hex:1,id:1,include:1,"include?":1,included_modules:1,index:1,indexes:1,indices:1,induced_from:1,inject:1,insert:1,inspect:1,instance_eval:1,instance_method:1,instance_methods:1,"instance_of?":1,"instance_variable_defined?":1,instance_variable_get:1,instance_variable_set:1,instance_variables:1,"integer?":1,intern:1,invert:1,ioctl:1,"is_a?":1,isatty:1,"iterator?":1,join:1,"key?":1,keys:1,"kind_of?":1,lambda:1,last:1,length:1,lineno:1,ljust:1,load:1,local_variables:1,loop:1,lstrip:1,"lstrip!":1,map:1,"map!":1,match:1,max:1,"member?":1,merge:1,"merge!":1,method:1,"method_defined?":1,method_missing:1,methods:1,min:1,module_eval:1,modulo:1,name:1,nesting:1,"new":1,next:1,"next!":1,"nil?":1,nitems:1,"nonzero?":1,object_id:1,oct:1,open:1,pack:1,partition:1,pid:1,pipe:1,pop:1,popen:1,pos:1,prec:1,prec_f:1,prec_i:1,print:1,printf:1,private_class_method:1,private_instance_methods:1,"private_method_defined?":1,private_methods:1,proc:1,protected_instance_methods:1,"protected_method_defined?":1,protected_methods:1,public_class_method:1,public_instance_methods:1,"public_method_defined?":1,public_methods:1,push:1,putc:1,puts:1,quo:1,raise:1,rand:1,rassoc:1,read:1,read_nonblock:1,readchar:1,readline:1,readlines:1,readpartial:1,rehash:1,reject:1,"reject!":1,remainder:1,reopen:1,replace:1,require:1,"respond_to?":1,reverse:1,"reverse!":1,reverse_each:1,rewind:1,rindex:1,rjust:1,round:1,rstrip:1,"rstrip!":1,scan:1,seek:1,select:1,send:1,set_trace_func:1,shift:1,singleton_method_added:1,singleton_methods:1,size:1,sleep:1,slice:1,"slice!":1,sort:1,"sort!":1,sort_by:1,split:1,sprintf:1,squeeze:1,"squeeze!":1,srand:1,stat:1,step:1,store:1,strip:1,"strip!":1,sub:1,"sub!":1,succ:1,"succ!":1,sum:1,superclass:1,swapcase:1,"swapcase!":1,sync:1,syscall:1,sysopen:1,sysread:1,sysseek:1,system:1,syswrite:1,taint:1,"tainted?":1,tell:1,test:1,"throw":1,times:1,to_a:1,to_ary:1,to_f:1,to_hash:1,to_i:1,to_int:1,to_io:1,to_proc:1,to_s:1,to_str:1,to_sym:1,tr:1,"tr!":1,tr_s:1,"tr_s!":1,trace_var:1,transpose:1,trap:1,truncate:1,"tty?":1,type:1,ungetc:1,uniq:1,"uniq!":1,unpack:1,unshift:1,untaint:1,untrace_var:1,upcase:1,"upcase!":1,update:1,upto:1,"value?":1,values:1,values_at:1,warn:1,write:1,write_nonblock:1,"zero?":1,zip:1}};var c={className:"yardoctag",begin:"@[A-Za-z]+"};var k=[{className:"comment",begin:"#",end:"$",contains:[c]},{className:"comment",begin:"^\\=begin",end:"^\\=end",contains:[c],relevance:10},{className:"comment",begin:"^__END__",end:"\\n$"}];var d={className:"subst",begin:"#\\{",end:"}",lexems:a,keywords:f};var i=[hljs.BACKSLASH_ESCAPE,d];var b=[{className:"string",begin:"'",end:"'",contains:i,relevance:0},{className:"string",begin:'"',end:'"',contains:i,relevance:0},{className:"string",begin:"%[qw]?\\(",end:"\\)",contains:i,relevance:10},{className:"string",begin:"%[qw]?\\[",end:"\\]",contains:i,relevance:10},{className:"string",begin:"%[qw]?{",end:"}",contains:i,relevance:10},{className:"string",begin:"%[qw]?<",end:">",contains:i,relevance:10},{className:"string",begin:"%[qw]?/",end:"/",contains:i,relevance:10},{className:"string",begin:"%[qw]?%",end:"%",contains:i,relevance:10},{className:"string",begin:"%[qw]?-",end:"-",contains:i,relevance:10},{className:"string",begin:"%[qw]?\\|",end:"\\|",contains:i,relevance:10}];var h={className:"function",begin:"\\bdef\\s+",end:" |$|;",lexems:a,keywords:f,contains:[{className:"title",begin:j,lexems:a,keywords:f},{className:"params",begin:"\\(",end:"\\)",lexems:a,keywords:f}].concat(k)};var g={className:"identifier",begin:a,lexems:a,keywords:f,relevance:0};var e=k.concat(b.concat([{className:"class",begin:"\\b(class|module)\\b",end:"$|;",keywords:{"class":1,module:1},contains:[{className:"title",begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?",relevance:0},{className:"inheritance",begin:"<\\s*",contains:[{className:"parent",begin:"("+hljs.IDENT_RE+"::)?"+hljs.IDENT_RE}]}].concat(k)},h,{className:"constant",begin:"(::)?([A-Z]\\w*(::)?)+",relevance:0},{className:"symbol",begin:":",contains:b.concat([g]),relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{className:"number",begin:"\\?\\w"},{className:"variable",begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},g,{begin:"("+hljs.RE_STARTERS_RE+")\\s*",contains:k.concat([{className:"regexp",begin:"/",end:"/[a-z]*",illegal:"\\n",contains:[hljs.BACKSLASH_ESCAPE]}]),relevance:0}]));d.contains=e;h.contains[1].contains=e;return{defaultMode:{lexems:a,keywords:f,contains:e}}}();hljs.LANGUAGES.sql={case_insensitive:true,defaultMode:{illegal:"[^\\s]",contains:[{className:"operator",begin:"(begin|start|commit|rollback|savepoint|lock|alter|create|drop|rename|call|delete|do|handler|insert|load|replace|select|truncate|update|set|show|pragma|grant)\\b",end:";|$",keywords:{keyword:{all:1,partial:1,global:1,month:1,current_timestamp:1,using:1,go:1,revoke:1,smallint:1,indicator:1,"end-exec":1,disconnect:1,zone:1,"with":1,character:1,assertion:1,to:1,add:1,current_user:1,usage:1,input:1,local:1,alter:1,match:1,collate:1,real:1,then:1,rollback:1,get:1,read:1,timestamp:1,session_user:1,not:1,integer:1,bit:1,unique:1,day:1,minute:1,desc:1,insert:1,execute:1,like:1,ilike:2,level:1,decimal:1,drop:1,"continue":1,isolation:1,found:1,where:1,constraints:1,domain:1,right:1,national:1,some:1,module:1,transaction:1,relative:1,second:1,connect:1,escape:1,close:1,system_user:1,"for":1,deferred:1,section:1,cast:1,current:1,sqlstate:1,allocate:1,intersect:1,deallocate:1,numeric:1,"public":1,preserve:1,full:1,"goto":1,initially:1,asc:1,no:1,key:1,output:1,collation:1,group:1,by:1,union:1,session:1,both:1,last:1,language:1,constraint:1,column:1,of:1,space:1,foreign:1,deferrable:1,prior:1,connection:1,unknown:1,action:1,commit:1,view:1,or:1,first:1,into:1,"float":1,year:1,primary:1,cascaded:1,except:1,restrict:1,set:1,references:1,names:1,table:1,outer:1,open:1,select:1,size:1,are:1,rows:1,from:1,prepare:1,distinct:1,leading:1,create:1,only:1,next:1,inner:1,authorization:1,schema:1,corresponding:1,option:1,declare:1,precision:1,immediate:1,"else":1,timezone_minute:1,external:1,varying:1,translation:1,"true":1,"case":1,exception:1,join:1,hour:1,"default":1,"double":1,scroll:1,value:1,cursor:1,descriptor:1,values:1,dec:1,fetch:1,procedure:1,"delete":1,and:1,"false":1,"int":1,is:1,describe:1,"char":1,as:1,at:1,"in":1,varchar:1,"null":1,trailing:1,any:1,absolute:1,current_time:1,end:1,grant:1,privileges:1,when:1,cross:1,check:1,write:1,current_date:1,pad:1,begin:1,temporary:1,exec:1,time:1,update:1,catalog:1,user:1,sql:1,date:1,on:1,identity:1,timezone_hour:1,natural:1,whenever:1,interval:1,work:1,order:1,cascade:1,diagnostics:1,nchar:1,having:1,left:1,call:1,"do":1,handler:1,load:1,replace:1,truncate:1,start:1,lock:1,show:1,pragma:1},aggregate:{count:1,sum:1,min:1,max:1,avg:1}},contains:[{className:"string",begin:"'",end:"'",contains:[hljs.BACKSLASH_ESCAPE,{begin:"''"}],relevance:0},{className:"string",begin:'"',end:'"',contains:[hljs.BACKSLASH_ESCAPE,{begin:'""'}],relevance:0},{className:"string",begin:"`",end:"`",contains:[hljs.BACKSLASH_ESCAPE]},hljs.C_NUMBER_MODE,{begin:"\\n"}]},hljs.C_BLOCK_COMMENT_MODE,{className:"comment",begin:"--",end:"$"}]}};hljs.LANGUAGES.xml=function(){var b="[A-Za-z0-9\\._:-]+";var a={endsWithParent:true,contains:[{className:"attribute",begin:b,relevance:0},{begin:'="',returnBegin:true,end:'"',contains:[{className:"value",begin:'"',endsWithParent:true}]},{begin:"='",returnBegin:true,end:"'",contains:[{className:"value",begin:"'",endsWithParent:true}]},{begin:"=",contains:[{className:"value",begin:"[^\\s/>]+"}]}]};return{case_insensitive:true,defaultMode:{contains:[{className:"pi",begin:"<\\?",end:"\\?>",relevance:10},{className:"doctype",begin:"<!DOCTYPE",end:">",relevance:10,contains:[{begin:"\\[",end:"\\]"}]},{className:"comment",begin:"<!--",end:"-->",relevance:10},{className:"cdata",begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},{className:"tag",begin:"<style(?=\\s|>|$)",end:">",keywords:{title:{style:1}},contains:[a],starts:{className:"css",end:"</style>",returnEnd:true,subLanguage:"css"}},{className:"tag",begin:"<script(?=\\s|>|$)",end:">",keywords:{title:{script:1}},contains:[a],starts:{className:"javascript",end:"<\/script>",returnEnd:true,subLanguage:"javascript"}},{className:"vbscript",begin:"<%",end:"%>",subLanguage:"vbscript"},{className:"tag",begin:"</?",end:"/?>",contains:[{className:"title",begin:"[^ />]+"},a]}]}}}();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/assets/search_data.js DELETED
@@ -1 +0,0 @@
1
- window.searchData = [{"t":"Caman.Analyze","p":"classes/Caman/Analyze.html"},{"t":"#constructor","h":"Caman.Analyze","p":"classes/Caman/Analyze.html#constructor-instance"},{"t":"#calculateLevels","h":"Caman.Analyze","p":"classes/Caman/Analyze.html#calculateLevels-instance"},{"t":"CamanParser","p":"classes/CamanParser.html"},{"t":"#constructor","h":"CamanParser","p":"classes/CamanParser.html#constructor-instance"},{"t":"#parse","h":"CamanParser","p":"classes/CamanParser.html#parse-instance"},{"t":"#execute","h":"CamanParser","p":"classes/CamanParser.html#execute-instance"},{"t":"Caman.Blender","p":"classes/Caman/Blender.html"},{"t":".register","h":"Caman.Blender","p":"classes/Caman/Blender.html#register-class"},{"t":".execute","h":"Caman.Blender","p":"classes/Caman/Blender.html#execute-class"},{"t":"Caman.Calculate","p":"classes/Caman/Calculate.html"},{"t":".distance","h":"Caman.Calculate","p":"classes/Caman/Calculate.html#distance-class"},{"t":".randomRange","h":"Caman.Calculate","p":"classes/Caman/Calculate.html#randomRange-class"},{"t":".luminance","h":"Caman.Calculate","p":"classes/Caman/Calculate.html#luminance-class"},{"t":".bezier","h":"Caman.Calculate","p":"classes/Caman/Calculate.html#bezier-class"},{"t":".hermite","h":"Caman.Calculate","p":"classes/Caman/Calculate.html#hermite-class"},{"t":".missingValues","h":"Caman.Calculate","p":"classes/Caman/Calculate.html#missingValues-class"},{"t":"Caman","p":"classes/Caman.html"},{"t":".toString","h":"Caman","p":"classes/Caman.html#toString-class"},{"t":".getAttrId","h":"Caman","p":"classes/Caman.html#getAttrId-class"},{"t":"#constructor","h":"Caman","p":"classes/Caman.html#constructor-instance"},{"t":"#domIsLoaded","h":"Caman","p":"classes/Caman.html#domIsLoaded-instance"},{"t":"#parseArguments","h":"Caman","p":"classes/Caman.html#parseArguments-instance"},{"t":"#setInitObject","h":"Caman","p":"classes/Caman.html#setInitObject-instance"},{"t":"#setup","h":"Caman","p":"classes/Caman.html#setup-instance"},{"t":"#initNode","h":"Caman","p":"classes/Caman.html#initNode-instance"},{"t":"#readFromHttp","h":"Caman","p":"classes/Caman.html#readFromHttp-instance"},{"t":"#nodeFileReady","h":"Caman","p":"classes/Caman.html#nodeFileReady-instance"},{"t":"#initImage","h":"Caman","p":"classes/Caman.html#initImage-instance"},{"t":"#initCanvas","h":"Caman","p":"classes/Caman.html#initCanvas-instance"},{"t":"#imageAdjustments","h":"Caman","p":"classes/Caman.html#imageAdjustments-instance"},{"t":"#waitForImageLoaded","h":"Caman","p":"classes/Caman.html#waitForImageLoaded-instance"},{"t":"#isImageLoaded","h":"Caman","p":"classes/Caman.html#isImageLoaded-instance"},{"t":"#imageWidth","h":"Caman","p":"classes/Caman.html#imageWidth-instance"},{"t":"#imageHeight","h":"Caman","p":"classes/Caman.html#imageHeight-instance"},{"t":"#imageLoaded","h":"Caman","p":"classes/Caman.html#imageLoaded-instance"},{"t":"#finishInit","h":"Caman","p":"classes/Caman.html#finishInit-instance"},{"t":"#reloadCanvasData","h":"Caman","p":"classes/Caman.html#reloadCanvasData-instance"},{"t":"#resetOriginalPixelData","h":"Caman","p":"classes/Caman.html#resetOriginalPixelData-instance"},{"t":"#hasId","h":"Caman","p":"classes/Caman.html#hasId-instance"},{"t":"#assignId","h":"Caman","p":"classes/Caman.html#assignId-instance"},{"t":"#hiDPIDisabled","h":"Caman","p":"classes/Caman.html#hiDPIDisabled-instance"},{"t":"#hiDPIAdjustments","h":"Caman","p":"classes/Caman.html#hiDPIAdjustments-instance"},{"t":"#hiDPIRatio","h":"Caman","p":"classes/Caman.html#hiDPIRatio-instance"},{"t":"#hiDPICapable","h":"Caman","p":"classes/Caman.html#hiDPICapable-instance"},{"t":"#needsHiDPISwap","h":"Caman","p":"classes/Caman.html#needsHiDPISwap-instance"},{"t":"#hiDPIReplacement","h":"Caman","p":"classes/Caman.html#hiDPIReplacement-instance"},{"t":"#replaceCanvas","h":"Caman","p":"classes/Caman.html#replaceCanvas-instance"},{"t":"#render","h":"Caman","p":"classes/Caman.html#render-instance"},{"t":"#revert","h":"Caman","p":"classes/Caman.html#revert-instance"},{"t":"#reset","h":"Caman","p":"classes/Caman.html#reset-instance"},{"t":"#originalVisiblePixels","h":"Caman","p":"classes/Caman.html#originalVisiblePixels-instance"},{"t":"#process","h":"Caman","p":"classes/Caman.html#process-instance"},{"t":"#processKernel","h":"Caman","p":"classes/Caman.html#processKernel-instance"},{"t":"#processPlugin","h":"Caman","p":"classes/Caman.html#processPlugin-instance"},{"t":"#newLayer","h":"Caman","p":"classes/Caman.html#newLayer-instance"},{"t":"#executeLayer","h":"Caman","p":"classes/Caman.html#executeLayer-instance"},{"t":"#pushContext","h":"Caman","p":"classes/Caman.html#pushContext-instance"},{"t":"#popContext","h":"Caman","p":"classes/Caman.html#popContext-instance"},{"t":"#applyCurrentLayer","h":"Caman","p":"classes/Caman.html#applyCurrentLayer-instance"},{"t":"Caman.Convert","p":"classes/Caman/Convert.html"},{"t":".hexToRGB","h":"Caman.Convert","p":"classes/Caman/Convert.html#hexToRGB-class"},{"t":".rgbToHSL","h":"Caman.Convert","p":"classes/Caman/Convert.html#rgbToHSL-class"},{"t":".hslToRGB","h":"Caman.Convert","p":"classes/Caman/Convert.html#hslToRGB-class"},{"t":".hueToRGB","h":"Caman.Convert","p":"classes/Caman/Convert.html#hueToRGB-class"},{"t":".rgbToHSV","h":"Caman.Convert","p":"classes/Caman/Convert.html#rgbToHSV-class"},{"t":".hsvToRGB","h":"Caman.Convert","p":"classes/Caman/Convert.html#hsvToRGB-class"},{"t":".rgbToXYZ","h":"Caman.Convert","p":"classes/Caman/Convert.html#rgbToXYZ-class"},{"t":".xyzToRGB","h":"Caman.Convert","p":"classes/Caman/Convert.html#xyzToRGB-class"},{"t":".xyzToLab","h":"Caman.Convert","p":"classes/Caman/Convert.html#xyzToLab-class"},{"t":".labToXYZ","h":"Caman.Convert","p":"classes/Caman/Convert.html#labToXYZ-class"},{"t":".rgbToLab","h":"Caman.Convert","p":"classes/Caman/Convert.html#rgbToLab-class"},{"t":".labToRGB","h":"Caman.Convert","p":"classes/Caman/Convert.html#labToRGB-class"},{"t":"Caman.Event","p":"classes/Caman/Event.html"},{"t":".trigger","h":"Caman.Event","p":"classes/Caman/Event.html#trigger-class"},{"t":".listen","h":"Caman.Event","p":"classes/Caman/Event.html#listen-class"},{"t":"Caman.Filter","p":"classes/Caman/Filter.html"},{"t":".register","h":"Caman.Filter","p":"classes/Caman/Filter.html#register-class"},{"t":"Caman.IO","p":"classes/Caman/IO.html"},{"t":".isRemote","h":"Caman.IO","p":"classes/Caman/IO.html#isRemote-class"},{"t":".corsEnabled","h":"Caman.IO","p":"classes/Caman/IO.html#corsEnabled-class"},{"t":".isURLRemote","h":"Caman.IO","p":"classes/Caman/IO.html#isURLRemote-class"},{"t":".remoteCheck","h":"Caman.IO","p":"classes/Caman/IO.html#remoteCheck-class"},{"t":".proxyUrl","h":"Caman.IO","p":"classes/Caman/IO.html#proxyUrl-class"},{"t":".useProxy","h":"Caman.IO","p":"classes/Caman/IO.html#useProxy-class"},{"t":"Caman.Layer","p":"classes/Caman/Layer.html"},{"t":"#constructor","h":"Caman.Layer","p":"classes/Caman/Layer.html#constructor-instance"},{"t":"#newLayer","h":"Caman.Layer","p":"classes/Caman/Layer.html#newLayer-instance"},{"t":"#setBlendingMode","h":"Caman.Layer","p":"classes/Caman/Layer.html#setBlendingMode-instance"},{"t":"#opacity","h":"Caman.Layer","p":"classes/Caman/Layer.html#opacity-instance"},{"t":"#copyParent","h":"Caman.Layer","p":"classes/Caman/Layer.html#copyParent-instance"},{"t":"#fillColor","h":"Caman.Layer","p":"classes/Caman/Layer.html#fillColor-instance"},{"t":"#overlayImage","h":"Caman.Layer","p":"classes/Caman/Layer.html#overlayImage-instance"},{"t":"#applyToParent","h":"Caman.Layer","p":"classes/Caman/Layer.html#applyToParent-instance"},{"t":"Caman.Logger","p":"classes/Caman/Logger.html"},{"t":"#constructor","h":"Caman.Logger","p":"classes/Caman/Logger.html#constructor-instance"},{"t":"Module","p":"classes/Module.html"},{"t":".extends","h":"Module","p":"classes/Module.html#extends-class"},{"t":".includes","h":"Module","p":"classes/Module.html#includes-class"},{"t":".delegate","h":"Module","p":"classes/Module.html#delegate-class"},{"t":".aliasFunction","h":"Module","p":"classes/Module.html#aliasFunction-class"},{"t":".aliasProperty","h":"Module","p":"classes/Module.html#aliasProperty-class"},{"t":".included","h":"Module","p":"classes/Module.html#included-class"},{"t":"Caman.Pixel","p":"classes/Caman/Pixel.html"},{"t":".coordinatesToLocation","h":"Caman.Pixel","p":"classes/Caman/Pixel.html#coordinatesToLocation-class"},{"t":".locationToCoordinates","h":"Caman.Pixel","p":"classes/Caman/Pixel.html#locationToCoordinates-class"},{"t":"#constructor","h":"Caman.Pixel","p":"classes/Caman/Pixel.html#constructor-instance"},{"t":"#setContext","h":"Caman.Pixel","p":"classes/Caman/Pixel.html#setContext-instance"},{"t":"#locationXY","h":"Caman.Pixel","p":"classes/Caman/Pixel.html#locationXY-instance"},{"t":"#pixelAtLocation","h":"Caman.Pixel","p":"classes/Caman/Pixel.html#pixelAtLocation-instance"},{"t":"#getPixelRelative","h":"Caman.Pixel","p":"classes/Caman/Pixel.html#getPixelRelative-instance"},{"t":"#putPixelRelative","h":"Caman.Pixel","p":"classes/Caman/Pixel.html#putPixelRelative-instance"},{"t":"#getPixel","h":"Caman.Pixel","p":"classes/Caman/Pixel.html#getPixel-instance"},{"t":"#putPixel","h":"Caman.Pixel","p":"classes/Caman/Pixel.html#putPixel-instance"},{"t":"#toString","h":"Caman.Pixel","p":"classes/Caman/Pixel.html#toString-instance"},{"t":"#toHex","h":"Caman.Pixel","p":"classes/Caman/Pixel.html#toHex-instance"},{"t":"Caman.Plugin","p":"classes/Caman/Plugin.html"},{"t":".register","h":"Caman.Plugin","p":"classes/Caman/Plugin.html#register-class"},{"t":".execute","h":"Caman.Plugin","p":"classes/Caman/Plugin.html#execute-class"},{"t":"Caman.Renderer","p":"classes/Caman/Renderer.html"},{"t":"#constructor","h":"Caman.Renderer","p":"classes/Caman/Renderer.html#constructor-instance"},{"t":"#add","h":"Caman.Renderer","p":"classes/Caman/Renderer.html#add-instance"},{"t":"#processNext","h":"Caman.Renderer","p":"classes/Caman/Renderer.html#processNext-instance"},{"t":"#execute","h":"Caman.Renderer","p":"classes/Caman/Renderer.html#execute-instance"},{"t":"#eachBlock","h":"Caman.Renderer","p":"classes/Caman/Renderer.html#eachBlock-instance"},{"t":"#executeFilter","h":"Caman.Renderer","p":"classes/Caman/Renderer.html#executeFilter-instance"},{"t":"#executePlugin","h":"Caman.Renderer","p":"classes/Caman/Renderer.html#executePlugin-instance"},{"t":"#renderBlock","h":"Caman.Renderer","p":"classes/Caman/Renderer.html#renderBlock-instance"},{"t":"#renderKernel","h":"Caman.Renderer","p":"classes/Caman/Renderer.html#renderKernel-instance"},{"t":"#blockFinished","h":"Caman.Renderer","p":"classes/Caman/Renderer.html#blockFinished-instance"},{"t":"#processKernel","h":"Caman.Renderer","p":"classes/Caman/Renderer.html#processKernel-instance"},{"t":"#loadOverlay","h":"Caman.Renderer","p":"classes/Caman/Renderer.html#loadOverlay-instance"},{"t":"Caman.Store","p":"classes/Caman/Store.html"},{"t":".has","h":"Caman.Store","p":"classes/Caman/Store.html#has-class"},{"t":".get","h":"Caman.Store","p":"classes/Caman/Store.html#get-class"},{"t":".put","h":"Caman.Store","p":"classes/Caman/Store.html#put-class"},{"t":".execute","h":"Caman.Store","p":"classes/Caman/Store.html#execute-class"},{"t":".flush","h":"Caman.Store","p":"classes/Caman/Store.html#flush-class"},{"t":"Util","p":"classes/Util.html"},{"t":".extend","h":"Util","p":"classes/Util.html#extend-class"},{"t":".clampRGB","h":"Util","p":"classes/Util.html#clampRGB-class"},{"t":".copyAttributes","h":"Util","p":"classes/Util.html#copyAttributes-class"},{"t":".dataArray","h":"Util","p":"classes/Util.html#dataArray-class"},{"t":"analyze.coffee","p":"files/core/analyze.coffee.html"},{"t":"autoload.coffee","p":"files/core/autoload.coffee.html"},{"t":"Caman.DOMUpdated","p":"files/core/autoload.coffee.html#Caman.DOMUpdated-file","h":"autoload.coffee"},{"t":"blender.coffee","p":"files/core/blender.coffee.html"},{"t":"calculate.coffee","p":"files/core/calculate.coffee.html"},{"t":"caman.coffee","p":"files/core/caman.coffee.html"},{"t":"convert.coffee","p":"files/core/convert.coffee.html"},{"t":"event.coffee","p":"files/core/event.coffee.html"},{"t":"filter.coffee","p":"files/core/filter.coffee.html"},{"t":"io.coffee","p":"files/core/io.coffee.html"},{"t":"Caman.prototype.save","p":"files/core/io.coffee.html#Caman.prototype.save-file","h":"io.coffee"},{"t":"Caman.prototype.browserSave","p":"files/core/io.coffee.html#Caman.prototype.browserSave-file","h":"io.coffee"},{"t":"Caman.prototype.nodeSave","p":"files/core/io.coffee.html#Caman.prototype.nodeSave-file","h":"io.coffee"},{"t":"Caman.prototype.toImage","p":"files/core/io.coffee.html#Caman.prototype.toImage-file","h":"io.coffee"},{"t":"Caman.prototype.toBase64","p":"files/core/io.coffee.html#Caman.prototype.toBase64-file","h":"io.coffee"},{"t":"layer.coffee","p":"files/core/layer.coffee.html"},{"t":"pixel.coffee","p":"files/core/pixel.coffee.html"},{"t":"plugin.coffee","p":"files/core/plugin.coffee.html"},{"t":"renderer.coffee","p":"files/core/renderer.coffee.html"},{"t":"store.coffee","p":"files/core/store.coffee.html"},{"t":"util.coffee","p":"files/core/util.coffee.html"},{"t":"$","p":"files/core/util.coffee.html#$-file","h":"util.coffee"},{"t":"README.md","p":"README.md.html"},{"t":"LICENSE","p":"LICENSE.html"}]
 
includes/pickers/caman/api/class_index.html DELETED
@@ -1,432 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='assets/codo.css' type='text/css'>
7
- <script src='assets/codo.js'></script>
8
- <script src='assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path=''></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <nav>
15
- <ul>
16
- <li class='noframes'>
17
- (<a class='noframes' href='#'>no frames</a>)
18
- </li>
19
- </ul>
20
- </nav>
21
- <div id='search'>
22
- <a id='class_list_link' href='class_list.html'>Classes</a>
23
- <a id='file_list_link' href='file_list.html'>Files</a>
24
- <a id='method_list_link' href='method_list.html'>Methods</a>
25
- <a id='extra_list_link' href='extra_list.html'>Extras</a>
26
- </div>
27
- </div>
28
- <iframe id='search_frame'></iframe>
29
- <div id='fuzzySearch'>
30
- <input type='text'>
31
- <ol></ol>
32
- </div>
33
- <div id='help'>
34
- <p>
35
- Quickly fuzzy find classes, mixins, methods, file:
36
- </p>
37
- <ul>
38
- <li>
39
- <span>Ctrl-T</span>
40
- Open fuzzy finder dialog
41
- </li>
42
- </ul>
43
- <p>
44
- In frame mode you can toggle the list naviation frame on the left side:
45
- </p>
46
- <ul>
47
- <li>
48
- <span>Ctrl-L</span>
49
- Toggle list view
50
- </li>
51
- </ul>
52
- <p>
53
- You can focus a list in frame mode or toggle a tab in frameless mode:
54
- </p>
55
- <ul>
56
- <li>
57
- <span>Ctrl-C</span>
58
- Class list
59
- </li>
60
- <li>
61
- <span>Ctrl-I</span>
62
- Mixin list
63
- </li>
64
- <li>
65
- <span>Ctrl-F</span>
66
- File list
67
- </li>
68
- <li>
69
- <span>Ctrl-M</span>
70
- Method list
71
- </li>
72
- <li>
73
- <span>Ctrl-E</span>
74
- Extras list
75
- </li>
76
- </ul>
77
- <p>
78
- You can focus and blur the search input:
79
- </p>
80
- <ul>
81
- <li>
82
- <span>Ctrl-S</span>
83
- Focus search input
84
- </li>
85
- <li>
86
- <span>Esc</span>
87
- Blur search input
88
- </li>
89
- </ul>
90
- <p>
91
- In frameless mode you can close the list tab:
92
- </p>
93
- <ul>
94
- <li>
95
- <span>Esc</span>
96
- Close list tab
97
- </li>
98
- </ul>
99
- </div>
100
- </div>
101
- <div id='content'>
102
- <h1 class='noborder title'>CamanJS Documentation</h1>
103
- <div id='listing'>
104
- <h1 class='alphaindex'>Alphabetic Index</h1>
105
- <h2>Extra File Listing</h2>
106
- <ul id='files'>
107
- <li>
108
- <a href='README.md.html' title='README.md'>README.md</a>
109
- </li>
110
- <li>
111
- <a href='LICENSE.html' title='LICENSE'>LICENSE</a>
112
- </li>
113
- </ul>
114
- <h2>Class Listing A-Z</h2>
115
- <div class='index'>
116
- <ul>
117
- <li class='letter'>a</li>
118
- <ul>
119
- <li>
120
- <a href='classes/Caman/Analyze.html'>Analyze</a>
121
- <small>
122
- (Caman)
123
- </small>
124
- </li>
125
- </ul>
126
- </ul>
127
- <ul>
128
- <li class='letter'>b</li>
129
- <ul>
130
- <li>
131
- <a href='classes/Caman/Blender.html'>Blender</a>
132
- <small>
133
- (Caman)
134
- </small>
135
- </li>
136
- </ul>
137
- </ul>
138
- <ul>
139
- <li class='letter'>c</li>
140
- <ul>
141
- <li>
142
- <a href='classes/CamanParser.html'>CamanParser</a>
143
- </li>
144
- <li>
145
- <a href='classes/Caman/Calculate.html'>Calculate</a>
146
- <small>
147
- (Caman)
148
- </small>
149
- </li>
150
- <li>
151
- <a href='classes/Caman.html'>Caman</a>
152
- </li>
153
- <li>
154
- <a href='classes/Caman/Convert.html'>Convert</a>
155
- <small>
156
- (Caman)
157
- </small>
158
- </li>
159
- </ul>
160
- </ul>
161
- <ul>
162
- <li class='letter'>e</li>
163
- <ul>
164
- <li>
165
- <a href='classes/Caman/Event.html'>Event</a>
166
- <small>
167
- (Caman)
168
- </small>
169
- </li>
170
- </ul>
171
- </ul>
172
- <ul>
173
- <li class='letter'>f</li>
174
- <ul>
175
- <li>
176
- <a href='classes/Caman/Filter.html'>Filter</a>
177
- <small>
178
- (Caman)
179
- </small>
180
- </li>
181
- </ul>
182
- </ul>
183
- <ul>
184
- <li class='letter'>i</li>
185
- <ul>
186
- <li>
187
- <a href='classes/Caman/IO.html'>IO</a>
188
- <small>
189
- (Caman)
190
- </small>
191
- </li>
192
- </ul>
193
- </ul>
194
- <ul>
195
- <li class='letter'>l</li>
196
- <ul>
197
- <li>
198
- <a href='classes/Caman/Layer.html'>Layer</a>
199
- <small>
200
- (Caman)
201
- </small>
202
- </li>
203
- <li>
204
- <a href='classes/Caman/Logger.html'>Logger</a>
205
- <small>
206
- (Caman)
207
- </small>
208
- </li>
209
- </ul>
210
- </ul>
211
- <ul>
212
- <li class='letter'>m</li>
213
- <ul>
214
- <li>
215
- <a href='classes/Module.html'>Module</a>
216
- </li>
217
- </ul>
218
- </ul>
219
- <ul>
220
- <li class='letter'>p</li>
221
- <ul>
222
- <li>
223
- <a href='classes/Caman/Pixel.html'>Pixel</a>
224
- <small>
225
- (Caman)
226
- </small>
227
- </li>
228
- <li>
229
- <a href='classes/Caman/Plugin.html'>Plugin</a>
230
- <small>
231
- (Caman)
232
- </small>
233
- </li>
234
- </ul>
235
- </ul>
236
- <ul>
237
- <li class='letter'>r</li>
238
- <ul>
239
- <li>
240
- <a href='classes/Caman/Renderer.html'>Renderer</a>
241
- <small>
242
- (Caman)
243
- </small>
244
- </li>
245
- </ul>
246
- </ul>
247
- <ul>
248
- <li class='letter'>s</li>
249
- <ul>
250
- <li>
251
- <a href='classes/Caman/Store.html'>Store</a>
252
- <small>
253
- (Caman)
254
- </small>
255
- </li>
256
- </ul>
257
- </ul>
258
- <ul>
259
- <li class='letter'>u</li>
260
- <ul>
261
- <li>
262
- <a href='classes/Util.html'>Util</a>
263
- </li>
264
- </ul>
265
- </ul>
266
- </div>
267
- <h2>File Listing A-Z</h2>
268
- <div class='index'>
269
- <ul>
270
- <li class='letter'>a</li>
271
- <ul>
272
- <li>
273
- <a href='files/core/analyze.coffee.html'>analyze.coffee</a>
274
- <small>
275
- (core)
276
- </small>
277
- </li>
278
- <li>
279
- <a href='files/core/autoload.coffee.html'>autoload.coffee</a>
280
- <small>
281
- (core)
282
- </small>
283
- </li>
284
- </ul>
285
- </ul>
286
- <ul>
287
- <li class='letter'>b</li>
288
- <ul>
289
- <li>
290
- <a href='files/core/blender.coffee.html'>blender.coffee</a>
291
- <small>
292
- (core)
293
- </small>
294
- </li>
295
- </ul>
296
- </ul>
297
- <ul>
298
- <li class='letter'>c</li>
299
- <ul>
300
- <li>
301
- <a href='files/core/calculate.coffee.html'>calculate.coffee</a>
302
- <small>
303
- (core)
304
- </small>
305
- </li>
306
- <li>
307
- <a href='files/core/caman.coffee.html'>caman.coffee</a>
308
- <small>
309
- (core)
310
- </small>
311
- </li>
312
- <li>
313
- <a href='files/core/convert.coffee.html'>convert.coffee</a>
314
- <small>
315
- (core)
316
- </small>
317
- </li>
318
- </ul>
319
- </ul>
320
- <ul>
321
- <li class='letter'>e</li>
322
- <ul>
323
- <li>
324
- <a href='files/core/event.coffee.html'>event.coffee</a>
325
- <small>
326
- (core)
327
- </small>
328
- </li>
329
- </ul>
330
- </ul>
331
- <ul>
332
- <li class='letter'>f</li>
333
- <ul>
334
- <li>
335
- <a href='files/core/filter.coffee.html'>filter.coffee</a>
336
- <small>
337
- (core)
338
- </small>
339
- </li>
340
- </ul>
341
- </ul>
342
- <ul>
343
- <li class='letter'>i</li>
344
- <ul>
345
- <li>
346
- <a href='files/core/io.coffee.html'>io.coffee</a>
347
- <small>
348
- (core)
349
- </small>
350
- </li>
351
- </ul>
352
- </ul>
353
- <ul>
354
- <li class='letter'>l</li>
355
- <ul>
356
- <li>
357
- <a href='files/core/layer.coffee.html'>layer.coffee</a>
358
- <small>
359
- (core)
360
- </small>
361
- </li>
362
- </ul>
363
- </ul>
364
- <ul>
365
- <li class='letter'>p</li>
366
- <ul>
367
- <li>
368
- <a href='files/core/pixel.coffee.html'>pixel.coffee</a>
369
- <small>
370
- (core)
371
- </small>
372
- </li>
373
- <li>
374
- <a href='files/core/plugin.coffee.html'>plugin.coffee</a>
375
- <small>
376
- (core)
377
- </small>
378
- </li>
379
- </ul>
380
- </ul>
381
- <ul>
382
- <li class='letter'>r</li>
383
- <ul>
384
- <li>
385
- <a href='files/core/renderer.coffee.html'>renderer.coffee</a>
386
- <small>
387
- (core)
388
- </small>
389
- </li>
390
- </ul>
391
- </ul>
392
- <ul>
393
- <li class='letter'>s</li>
394
- <ul>
395
- <li>
396
- <a href='files/core/store.coffee.html'>store.coffee</a>
397
- <small>
398
- (core)
399
- </small>
400
- </li>
401
- </ul>
402
- </ul>
403
- <ul>
404
- <li class='letter'>u</li>
405
- <ul>
406
- <li>
407
- <a href='files/core/util.coffee.html'>util.coffee</a>
408
- <small>
409
- (core)
410
- </small>
411
- </li>
412
- </ul>
413
- </ul>
414
- </div>
415
- </div>
416
- </div>
417
- <div id='footer'>
418
- Generated on
419
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
420
- by
421
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
422
- v1.7.0
423
- (Node.js v0.10.21).
424
- &#10034;
425
- Press Ctrl-h to see the keyboard shortcuts
426
- &#10034;
427
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
428
- &#10034;
429
- <a href='https://mksoft.ch'>mksoft.ch</a>
430
- </div>
431
- </body>
432
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/class_list.html DELETED
@@ -1,142 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='assets/codo.css' type='text/css'>
7
- <script src='assets/codo.js'></script>
8
- <script src='assets/search_data.js'></script>
9
- </head>
10
- <body class='list'>
11
- <div class='list tree' id='content'>
12
- <h1 class='full_list_header'>Class List</h1>
13
- <nav>
14
- <a target='_self' href='class_list.html'>Classes</a>
15
- <a target='_self' href='file_list.html'>Files</a>
16
- <a target='_self' href='method_list.html'>Methods</a>
17
- <a target='_self' href='extra_list.html'>Extras</a>
18
- </nav>
19
- <div id='search'>
20
- Search:
21
- <input type='text'>
22
- </div>
23
- <ul>
24
- <li>
25
- <span>
26
- Caman
27
- </span>
28
- </li>
29
- <ul>
30
- <li>
31
- <a href='classes/Caman/Analyze.html' target='main'>Analyze</a>
32
- <small class='namespace'>
33
- Caman
34
- </small>
35
- </li>
36
- <li>
37
- <a href='classes/Caman/Blender.html' target='main'>Blender</a>
38
- <small class='namespace'>
39
- Caman
40
- </small>
41
- </li>
42
- <li>
43
- <a href='classes/Caman/Calculate.html' target='main'>Calculate</a>
44
- <small class='namespace'>
45
- Caman
46
- </small>
47
- </li>
48
- <li>
49
- <a href='classes/Caman/Convert.html' target='main'>Convert</a>
50
- <small class='namespace'>
51
- Caman
52
- </small>
53
- </li>
54
- <li>
55
- <a href='classes/Caman/Event.html' target='main'>Event</a>
56
- <small class='namespace'>
57
- Caman
58
- </small>
59
- </li>
60
- <li>
61
- <a href='classes/Caman/Filter.html' target='main'>Filter</a>
62
- <small class='namespace'>
63
- Caman
64
- </small>
65
- </li>
66
- <li>
67
- <a href='classes/Caman/IO.html' target='main'>IO</a>
68
- <small class='namespace'>
69
- Caman
70
- </small>
71
- </li>
72
- <li>
73
- <a href='classes/Caman/Layer.html' target='main'>Layer</a>
74
- <small class='namespace'>
75
- Caman
76
- </small>
77
- </li>
78
- <li>
79
- <a href='classes/Caman/Logger.html' target='main'>Logger</a>
80
- <small class='namespace'>
81
- Caman
82
- </small>
83
- </li>
84
- <li>
85
- <a href='classes/Caman/Pixel.html' target='main'>Pixel</a>
86
- <small class='namespace'>
87
- Caman
88
- </small>
89
- </li>
90
- <li>
91
- <a href='classes/Caman/Plugin.html' target='main'>Plugin</a>
92
- <small class='namespace'>
93
- Caman
94
- </small>
95
- </li>
96
- <li>
97
- <a href='classes/Caman/Renderer.html' target='main'>Renderer</a>
98
- <small class='namespace'>
99
- Caman
100
- </small>
101
- </li>
102
- <li>
103
- <a href='classes/Caman/Store.html' target='main'>Store</a>
104
- <small class='namespace'>
105
- Caman
106
- </small>
107
- </li>
108
- </ul>
109
-
110
- <li>
111
- <a href='classes/CamanParser.html' target='main'>CamanParser</a>
112
- <small class='namespace'>
113
-
114
- </small>
115
- </li>
116
- <li>
117
- <a href='classes/Caman.html' target='main'>Caman</a>
118
- <small class='parent'>
119
- <
120
- Module
121
- </small>
122
- <small class='namespace'>
123
-
124
- </small>
125
- </li>
126
- <li>
127
- <a href='classes/Module.html' target='main'>Module</a>
128
- <small class='namespace'>
129
-
130
- </small>
131
- </li>
132
- <li>
133
- <a href='classes/Util.html' target='main'>Util</a>
134
- <small class='namespace'>
135
-
136
- </small>
137
- </li>
138
- </ul>
139
-
140
- </div>
141
- </body>
142
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/Caman.html DELETED
@@ -1,1509 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../assets/codo.css' type='text/css'>
7
- <script src='../assets/codo.js'></script>
8
- <script src='../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>Caman</span>
19
- <nav>
20
- <ul>
21
- <li class='noframes'>
22
- (<a class='noframes' href='#'>no frames</a>)
23
- </li>
24
- </ul>
25
- </nav>
26
- <div id='search'>
27
- <a id='class_list_link' href='../class_list.html'>Classes</a>
28
- <a id='file_list_link' href='../file_list.html'>Files</a>
29
- <a id='method_list_link' href='../method_list.html'>Methods</a>
30
- <a id='extra_list_link' href='../extra_list.html'>Extras</a>
31
- </div>
32
- </div>
33
- <iframe id='search_frame'></iframe>
34
- <div id='fuzzySearch'>
35
- <input type='text'>
36
- <ol></ol>
37
- </div>
38
- <div id='help'>
39
- <p>
40
- Quickly fuzzy find classes, mixins, methods, file:
41
- </p>
42
- <ul>
43
- <li>
44
- <span>Ctrl-T</span>
45
- Open fuzzy finder dialog
46
- </li>
47
- </ul>
48
- <p>
49
- In frame mode you can toggle the list naviation frame on the left side:
50
- </p>
51
- <ul>
52
- <li>
53
- <span>Ctrl-L</span>
54
- Toggle list view
55
- </li>
56
- </ul>
57
- <p>
58
- You can focus a list in frame mode or toggle a tab in frameless mode:
59
- </p>
60
- <ul>
61
- <li>
62
- <span>Ctrl-C</span>
63
- Class list
64
- </li>
65
- <li>
66
- <span>Ctrl-I</span>
67
- Mixin list
68
- </li>
69
- <li>
70
- <span>Ctrl-F</span>
71
- File list
72
- </li>
73
- <li>
74
- <span>Ctrl-M</span>
75
- Method list
76
- </li>
77
- <li>
78
- <span>Ctrl-E</span>
79
- Extras list
80
- </li>
81
- </ul>
82
- <p>
83
- You can focus and blur the search input:
84
- </p>
85
- <ul>
86
- <li>
87
- <span>Ctrl-S</span>
88
- Focus search input
89
- </li>
90
- <li>
91
- <span>Esc</span>
92
- Blur search input
93
- </li>
94
- </ul>
95
- <p>
96
- In frameless mode you can close the list tab:
97
- </p>
98
- <ul>
99
- <li>
100
- <span>Esc</span>
101
- Close list tab
102
- </li>
103
- </ul>
104
- </div>
105
- </div>
106
- <div id='content'>
107
- <h1>
108
- Class:
109
- Caman
110
- </h1>
111
- <table class='box'>
112
- <tr>
113
- <td>Defined in:</td>
114
- <td>src&#47;core&#47;caman.coffee</td>
115
- </tr>
116
- <tr>
117
- <td>Inherits:</td>
118
- <td>
119
- <a href='../classes/Module.html'>Module</a>
120
- </td>
121
- </tr>
122
- </table>
123
- <h2>Overview</h2>
124
- <div class='docstring'>
125
- <p>Here it begins. Caman is defined.
126
- There are many different initialization for Caman, which are described on the
127
- <a href="http://camanjs.com/guides">Guides</a>.</p><p>Initialization is tricky because we need to make sure everything we need is actually fully
128
- loaded in the DOM before proceeding. When initialized on an image, we need to make sure that the
129
- image is done loading before converting it to a canvas element and writing the pixel data. If we
130
- do this prematurely, the browser will throw a DOM Error, and chaos will ensue. In the event that
131
- we initialize Caman on a canvas element while specifying an image URL, we need to create a new
132
- image element, load the image, then continue with initialization.</p><p>The main goal for Caman was simplicity, so all of this is handled transparently to the end-user. </p>
133
- </div>
134
- <div class='tags'>
135
- </div>
136
- <h2>Property Summary</h2>
137
- <dl class='properties'>
138
- <dt id='DEBUG-property'>
139
- <span class='signature'>
140
- (Boolean) <strong>DEBUG</strong>
141
- </span>
142
- </dt>
143
- <dd class='desc'>
144
- <p>Debug mode enables console logging.</p>
145
- </dd>
146
- </dl>
147
- <h2>Class Method Summary</h2>
148
- <ul class='summary'>
149
- <li>
150
- <span class='signature'>
151
- <a href='#toString-class'>
152
- + (String) <strong>toString</strong>()
153
- </a>
154
- </span>
155
- <span class='desc'>
156
- Custom toString()
157
- </span>
158
- </li>
159
- <li>
160
- <span class='signature'>
161
- <a href='#getAttrId-class'>
162
- + (String) <strong>getAttrId</strong>(canvas)
163
- </a>
164
- </span>
165
- <span class='desc'>
166
- Get the ID assigned to this canvas by Caman.
167
- </span>
168
- </li>
169
- </ul>
170
- <h2>Instance Method Summary</h2>
171
- <ul class='summary'>
172
- <li>
173
- <span class='signature'>
174
- <a href='#constructor-instance'>
175
- - (Caman) <strong>constructor</strong>()
176
- </a>
177
- </span>
178
- <span class='constructor note title'>Constructor</span>
179
- <span class='desc'>
180
- The Caman function.
181
- </span>
182
- </li>
183
- <li>
184
- <span class='signature'>
185
- <a href='#domIsLoaded-instance'>
186
- - (void) <strong>domIsLoaded</strong>(cb)
187
- </a>
188
- </span>
189
- <span class='desc'>
190
- Checks to ensure the DOM is loaded.
191
- </span>
192
- </li>
193
- <li>
194
- <span class='signature'>
195
- <a href='#parseArguments-instance'>
196
- - (void) <strong>parseArguments</strong>(args)
197
- </a>
198
- </span>
199
- <span class='desc'>
200
- Parses the arguments given to the Caman function, and sets the appropriate properties on this instance.
201
- </span>
202
- </li>
203
- <li>
204
- <span class='signature'>
205
- <a href='#setInitObject-instance'>
206
- - (void) <strong>setInitObject</strong>(obj)
207
- </a>
208
- </span>
209
- <span class='desc'>
210
- Sets the initialization object for this instance.
211
- </span>
212
- </li>
213
- <li>
214
- <span class='signature'>
215
- <a href='#setup-instance'>
216
- - (void) <strong>setup</strong>()
217
- </a>
218
- </span>
219
- <span class='desc'>
220
- Begins the setup process, which differs depending on whether we&#39;re in NodeJS, or if an image or canvas object was provided.
221
- </span>
222
- </li>
223
- <li>
224
- <span class='signature'>
225
- <a href='#initNode-instance'>
226
- - (void) <strong>initNode</strong>()
227
- </a>
228
- </span>
229
- <span class='desc'>
230
- Initialization function for NodeJS.
231
- </span>
232
- </li>
233
- <li>
234
- <span class='signature'>
235
- <a href='#readFromHttp-instance'>
236
- - (void) <strong>readFromHttp</strong>(url, callback)
237
- </a>
238
- </span>
239
- <span class='desc'>
240
-
241
- </span>
242
- </li>
243
- <li>
244
- <span class='signature'>
245
- <a href='#nodeFileReady-instance'>
246
- - (void) <strong>nodeFileReady</strong>(err, data)
247
- </a>
248
- </span>
249
- <span class='bound note title'>Bound</span>
250
- <span class='desc'>
251
-
252
- </span>
253
- </li>
254
- <li>
255
- <span class='signature'>
256
- <a href='#initImage-instance'>
257
- - (void) <strong>initImage</strong>()
258
- </a>
259
- </span>
260
- <span class='desc'>
261
- Initialization function for the browser and image objects.
262
- </span>
263
- </li>
264
- <li>
265
- <span class='signature'>
266
- <a href='#initCanvas-instance'>
267
- - (void) <strong>initCanvas</strong>()
268
- </a>
269
- </span>
270
- <span class='desc'>
271
- Initialization function for the browser and canvas objects.
272
- </span>
273
- </li>
274
- <li>
275
- <span class='signature'>
276
- <a href='#imageAdjustments-instance'>
277
- - (void) <strong>imageAdjustments</strong>()
278
- </a>
279
- </span>
280
- <span class='desc'>
281
- Automatically check for a HiDPI capable screen and swap out the image if possible.
282
- </span>
283
- </li>
284
- <li>
285
- <span class='signature'>
286
- <a href='#waitForImageLoaded-instance'>
287
- - (void) <strong>waitForImageLoaded</strong>()
288
- </a>
289
- </span>
290
- <span class='desc'>
291
- Utility function that fires <a href='../classes/Caman.html#imageLoaded-instance'>Caman#imageLoaded</a> once the image is finished loading.
292
- </span>
293
- </li>
294
- <li>
295
- <span class='signature'>
296
- <a href='#isImageLoaded-instance'>
297
- - (Boolean) <strong>isImageLoaded</strong>()
298
- </a>
299
- </span>
300
- <span class='desc'>
301
- Checks if the given image is finished loading.
302
- </span>
303
- </li>
304
- <li>
305
- <span class='signature'>
306
- <a href='#imageWidth-instance'>
307
- - (Number) <strong>imageWidth</strong>()
308
- </a>
309
- </span>
310
- <span class='desc'>
311
- Internet Explorer has issues figuring out image dimensions when they aren&#39;t explicitly defined, apparently.
312
- </span>
313
- </li>
314
- <li>
315
- <span class='signature'>
316
- <a href='#imageHeight-instance'>
317
- - (Number) <strong>imageHeight</strong>()
318
- </a>
319
- </span>
320
- <span class='desc'>
321
-
322
- </span>
323
- </li>
324
- <li>
325
- <span class='signature'>
326
- <a href='#imageLoaded-instance'>
327
- - (void) <strong>imageLoaded</strong>()
328
- </a>
329
- </span>
330
- <span class='desc'>
331
- Function that is called once the initialization image is finished loading.
332
- </span>
333
- </li>
334
- <li>
335
- <span class='signature'>
336
- <a href='#finishInit-instance'>
337
- - (void) <strong>finishInit</strong>()
338
- </a>
339
- </span>
340
- <span class='desc'>
341
- Final step of initialization.
342
- </span>
343
- </li>
344
- <li>
345
- <span class='signature'>
346
- <a href='#reloadCanvasData-instance'>
347
- - (void) <strong>reloadCanvasData</strong>()
348
- </a>
349
- </span>
350
- <span class='desc'>
351
- If you have a separate context reference to this canvas outside of CamanJS and you make a change to the canvas outside of CamanJS, you will have to call this function to update our context reference to include those changes.
352
- </span>
353
- </li>
354
- <li>
355
- <span class='signature'>
356
- <a href='#resetOriginalPixelData-instance'>
357
- - (void) <strong>resetOriginalPixelData</strong>()
358
- </a>
359
- </span>
360
- <span class='desc'>
361
- Reset the canvas pixels to the original state at initialization.
362
- </span>
363
- </li>
364
- <li>
365
- <span class='signature'>
366
- <a href='#hasId-instance'>
367
- - (Boolean) <strong>hasId</strong>()
368
- </a>
369
- </span>
370
- <span class='desc'>
371
- Does this instance have an ID assigned?
372
- </span>
373
- </li>
374
- <li>
375
- <span class='signature'>
376
- <a href='#assignId-instance'>
377
- - (void) <strong>assignId</strong>()
378
- </a>
379
- </span>
380
- <span class='desc'>
381
- Assign a unique ID to this instance.
382
- </span>
383
- </li>
384
- <li>
385
- <span class='signature'>
386
- <a href='#hiDPIDisabled-instance'>
387
- - (Boolean) <strong>hiDPIDisabled</strong>()
388
- </a>
389
- </span>
390
- <span class='desc'>
391
- Is HiDPI support disabled via the HTML data attribute?
392
- </span>
393
- </li>
394
- <li>
395
- <span class='signature'>
396
- <a href='#hiDPIAdjustments-instance'>
397
- - (void) <strong>hiDPIAdjustments</strong>()
398
- </a>
399
- </span>
400
- <span class='desc'>
401
- Perform HiDPI adjustments to the canvas.
402
- </span>
403
- </li>
404
- <li>
405
- <span class='signature'>
406
- <a href='#hiDPIRatio-instance'>
407
- - (Number) <strong>hiDPIRatio</strong>()
408
- </a>
409
- </span>
410
- <span class='desc'>
411
- Calculate the HiDPI ratio of this display based on the backing store and the pixel ratio.
412
- </span>
413
- </li>
414
- <li>
415
- <span class='signature'>
416
- <a href='#hiDPICapable-instance'>
417
- - (Boolean) <strong>hiDPICapable</strong>()
418
- </a>
419
- </span>
420
- <span class='desc'>
421
- Is this display HiDPI capable?
422
- </span>
423
- </li>
424
- <li>
425
- <span class='signature'>
426
- <a href='#needsHiDPISwap-instance'>
427
- - (Boolean) <strong>needsHiDPISwap</strong>()
428
- </a>
429
- </span>
430
- <span class='desc'>
431
- Do we need to perform an image swap with a HiDPI image?
432
- </span>
433
- </li>
434
- <li>
435
- <span class='signature'>
436
- <a href='#hiDPIReplacement-instance'>
437
- - (String) <strong>hiDPIReplacement</strong>()
438
- </a>
439
- </span>
440
- <span class='desc'>
441
- Gets the HiDPI replacement for the initialization image.
442
- </span>
443
- </li>
444
- <li>
445
- <span class='signature'>
446
- <a href='#replaceCanvas-instance'>
447
- - (void) <strong>replaceCanvas</strong>(newCanvas)
448
- </a>
449
- </span>
450
- <span class='desc'>
451
- Replaces the current canvas with a new one, and properly updates all of the applicable references for this instance.
452
- </span>
453
- </li>
454
- <li>
455
- <span class='signature'>
456
- <a href='#render-instance'>
457
- - (void) <strong>render</strong>(callback = function() {})
458
- </a>
459
- </span>
460
- <span class='desc'>
461
- Begins the rendering process.
462
- </span>
463
- </li>
464
- <li>
465
- <span class='signature'>
466
- <a href='#revert-instance'>
467
- - (void) <strong>revert</strong>(updateContext = true)
468
- </a>
469
- </span>
470
- <span class='desc'>
471
- Reverts the canvas back to it&#39;s original state while maintaining any cropped or resized dimensions.
472
- </span>
473
- </li>
474
- <li>
475
- <span class='signature'>
476
- <a href='#reset-instance'>
477
- - (void) <strong>reset</strong>()
478
- </a>
479
- </span>
480
- <span class='desc'>
481
- Completely resets the canvas back to it&#39;s original state.
482
- </span>
483
- </li>
484
- <li>
485
- <span class='signature'>
486
- <a href='#originalVisiblePixels-instance'>
487
- - (Array) <strong>originalVisiblePixels</strong>()
488
- </a>
489
- </span>
490
- <span class='desc'>
491
- Returns the original pixel data while maintaining any cropping or resizing that may have occured.
492
- </span>
493
- </li>
494
- <li>
495
- <span class='signature'>
496
- <a href='#process-instance'>
497
- - (Caman) <strong>process</strong>(name, processFn)
498
- </a>
499
- </span>
500
- <span class='desc'>
501
- Pushes the filter callback that modifies the RGBA object into the render queue.
502
- </span>
503
- </li>
504
- <li>
505
- <span class='signature'>
506
- <a href='#processKernel-instance'>
507
- - (Caman) <strong>processKernel</strong>(name, adjust, divisor = null, bias = 0)
508
- </a>
509
- </span>
510
- <span class='desc'>
511
- Pushes the kernel into the render queue.
512
- </span>
513
- </li>
514
- <li>
515
- <span class='signature'>
516
- <a href='#processPlugin-instance'>
517
- - (Caman) <strong>processPlugin</strong>(plugin, args)
518
- </a>
519
- </span>
520
- <span class='desc'>
521
- Adds a standalone plugin into the render queue.
522
- </span>
523
- </li>
524
- <li>
525
- <span class='signature'>
526
- <a href='#newLayer-instance'>
527
- - (Caman) <strong>newLayer</strong>(callback)
528
- </a>
529
- </span>
530
- <span class='desc'>
531
- Pushes a new layer operation into the render queue and calls the layer callback.
532
- </span>
533
- </li>
534
- <li>
535
- <span class='signature'>
536
- <a href='#executeLayer-instance'>
537
- - (void) <strong>executeLayer</strong>(layer)
538
- </a>
539
- </span>
540
- <span class='desc'>
541
- Pushes the layer context and moves to the next operation.
542
- </span>
543
- </li>
544
- <li>
545
- <span class='signature'>
546
- <a href='#pushContext-instance'>
547
- - (void) <strong>pushContext</strong>(layer)
548
- </a>
549
- </span>
550
- <span class='desc'>
551
- Set all of the relevant data to the new layer.
552
- </span>
553
- </li>
554
- <li>
555
- <span class='signature'>
556
- <a href='#popContext-instance'>
557
- - (void) <strong>popContext</strong>()
558
- </a>
559
- </span>
560
- <span class='desc'>
561
- Restore the previous layer context.
562
- </span>
563
- </li>
564
- <li>
565
- <span class='signature'>
566
- <a href='#applyCurrentLayer-instance'>
567
- - (void) <strong>applyCurrentLayer</strong>()
568
- </a>
569
- </span>
570
- <span class='desc'>
571
- Applies the current layer to its parent layer.
572
- </span>
573
- </li>
574
- </ul>
575
- <h2>
576
- <small>Inherited Method Summary</small>
577
- </h2>
578
- <h3 class='inherited'>
579
- Methods inherited from
580
- <a href='../classes/Module.html'>Module</a>
581
- </h3>
582
- <p class='inherited'>
583
- <a href='../classes/Module.html#extends-class'>.extends</a>,
584
- <a href='../classes/Module.html#includes-class'>.includes</a>,
585
- <a href='../classes/Module.html#delegate-class'>.delegate</a>,
586
- <a href='../classes/Module.html#aliasFunction-class'>.aliasFunction</a>,
587
- <a href='../classes/Module.html#aliasProperty-class'>.aliasProperty</a>,
588
- <a href='../classes/Module.html#included-class'>.included</a>
589
- </p>
590
- <h2>Class Method Details</h2>
591
- <div class='methods'>
592
- <div class='method_details'>
593
- <p class='signature' id='toString-class'>
594
- + (String) <strong>toString</strong>()
595
- </p>
596
- <div class='docstring'>
597
- <p>Custom toString()</p>
598
- </div>
599
- <div class='tags'>
600
- <h3>Returns:</h3>
601
- <ul class='return'>
602
- <li>
603
- <span class='type'></span>
604
- (<tt>String</tt>)
605
- &mdash;
606
- <span class='desc'>Version and release information.</span>
607
- </li>
608
- </ul>
609
- </div>
610
- </div>
611
- <div class='method_details'>
612
- <p class='signature' id='getAttrId-class'>
613
- + (String) <strong>getAttrId</strong>(canvas)
614
- </p>
615
- <div class='docstring'>
616
- <p>Get the ID assigned to this canvas by Caman.</p>
617
- </div>
618
- <div class='tags'>
619
- <h3>Parameters:</h3>
620
- <ul class='param'>
621
- <li>
622
- <span class='name'>canvas</span>
623
- <span class='type'>
624
- (<tt>DOMObject</tt>)
625
- </span>
626
- &mdash;
627
- <span class='desc'>The canvas to inspect.</span>
628
- </li>
629
- </ul>
630
- <h3>Returns:</h3>
631
- <ul class='return'>
632
- <li>
633
- <span class='type'></span>
634
- (<tt>String</tt>)
635
- &mdash;
636
- <span class='desc'>The Caman ID associated with this canvas.</span>
637
- </li>
638
- </ul>
639
- </div>
640
- </div>
641
- </div>
642
- <h2>Constructor Details</h2>
643
- <div class='methods'>
644
- <div class='method_details'>
645
- <p class='signature' id='constructor-instance'>
646
- - (Caman) <strong>Caman</strong>(initializer)
647
- <br>
648
- - (Caman) <strong>Caman</strong>(initializer, callback)
649
- <br>
650
- - (Caman) <strong>Caman</strong>(initializer, url)
651
- <br>
652
- - (Caman) <strong>Caman</strong>(initializer, url, callback)
653
- <br>
654
- - (Caman) <strong>Caman</strong>(file)
655
- <br>
656
- - (Caman) <strong>Caman</strong>(file, callback)
657
- <br>
658
- </p>
659
- <div class='docstring'>
660
- <p>The Caman function. While technically a constructor, it was made to be called without
661
- the <code>new</code> keyword. Caman will figure it out.</p>
662
- </div>
663
- <div class='tags'>
664
- <h3>Parameters:</h3>
665
- <ul class='param'>
666
- <li>
667
- <span class='name'>initializer</span>
668
- <span class='type'>
669
- (<tt>DOMObject, String</tt>)
670
- </span>
671
- &mdash;
672
- <span class='desc'>The DOM selector or DOM object to initialize.</span>
673
- </li>
674
- </ul>
675
- <h3>Returns:</h3>
676
- <ul class='return'>
677
- <li>
678
- <span class='type'></span>
679
- (<tt><a href='../classes/Caman.html'>Caman</a></tt>)
680
- &mdash;
681
- <span class='desc'>Initialized Caman instance.</span>
682
- </li>
683
- </ul>
684
- <div class='overloads'>
685
- <h3>Overloads:</h3>
686
- <div class='overload'>
687
- <p class='signature'>
688
- - (Caman) <strong>Caman</strong>(initializer)
689
- </p>
690
- <div class='docstring'>
691
- <p>Initialize Caman without a callback.</p>
692
- </div>
693
- <div class='tags'>
694
- </div>
695
- </div>
696
- <div class='overload'>
697
- <p class='signature'>
698
- - (Caman) <strong>Caman</strong>(initializer, callback)
699
- </p>
700
- <div class='docstring'>
701
- <p>Initialize Caman with a callback.</p>
702
- </div>
703
- <div class='tags'>
704
- <h3>Parameters:</h3>
705
- <ul class='param'>
706
- <li>
707
- <span class='name'>callback</span>
708
- <span class='type'>
709
- (<tt>Function</tt>)
710
- </span>
711
- &mdash;
712
- <span class='desc'>Function to call once initialization completes.</span>
713
- </li>
714
- </ul>
715
- </div>
716
- </div>
717
- <div class='overload'>
718
- <p class='signature'>
719
- - (Caman) <strong>Caman</strong>(initializer, url)
720
- </p>
721
- <div class='docstring'>
722
- <p>Initialize Caman with a URL to an image and no callback.</p>
723
- </div>
724
- <div class='tags'>
725
- <h3>Parameters:</h3>
726
- <ul class='param'>
727
- <li>
728
- <span class='name'>url</span>
729
- <span class='type'>
730
- (<tt>String</tt>)
731
- </span>
732
- &mdash;
733
- <span class='desc'>URl to an image to draw to the canvas.</span>
734
- </li>
735
- </ul>
736
- </div>
737
- </div>
738
- <div class='overload'>
739
- <p class='signature'>
740
- - (Caman) <strong>Caman</strong>(initializer, url, callback)
741
- </p>
742
- <div class='docstring'>
743
- <p>Initialize Caman with a canvas, URL to an image, and a callback.</p>
744
- </div>
745
- <div class='tags'>
746
- <h3>Parameters:</h3>
747
- <ul class='param'>
748
- <li>
749
- <span class='name'>url</span>
750
- <span class='type'>
751
- (<tt>String</tt>)
752
- </span>
753
- &mdash;
754
- <span class='desc'>URl to an image to draw to the canvas.</span>
755
- </li>
756
- <li>
757
- <span class='name'>callback</span>
758
- <span class='type'>
759
- (<tt>Function</tt>)
760
- </span>
761
- &mdash;
762
- <span class='desc'>Function to call once initialization completes.</span>
763
- </li>
764
- </ul>
765
- </div>
766
- </div>
767
- <div class='overload'>
768
- <p class='signature'>
769
- - (Caman) <strong>Caman</strong>(file)
770
- </p>
771
- <div class='docstring'>
772
- <p><strong>NodeJS</strong>: Initialize Caman with a path to an image file and no callback.</p>
773
- </div>
774
- <div class='tags'>
775
- <h3>Parameters:</h3>
776
- <ul class='param'>
777
- <li>
778
- <span class='name'>file</span>
779
- <span class='type'>
780
- (<tt>String, File</tt>)
781
- </span>
782
- &mdash;
783
- <span class='desc'>File object or path to image to read.</span>
784
- </li>
785
- </ul>
786
- </div>
787
- </div>
788
- <div class='overload'>
789
- <p class='signature'>
790
- - (Caman) <strong>Caman</strong>(file, callback)
791
- </p>
792
- <div class='docstring'>
793
- <p><strong>NodeJS</strong>: Initialize Caman with a file and a callback.</p>
794
- </div>
795
- <div class='tags'>
796
- <h3>Parameters:</h3>
797
- <ul class='param'>
798
- <li>
799
- <span class='name'>file</span>
800
- <span class='type'>
801
- (<tt>String, File</tt>)
802
- </span>
803
- &mdash;
804
- <span class='desc'>File object or path to image to read.</span>
805
- </li>
806
- <li>
807
- <span class='name'>callback</span>
808
- <span class='type'>
809
- (<tt>Function</tt>)
810
- </span>
811
- &mdash;
812
- <span class='desc'>Function to call once initialization completes.</span>
813
- </li>
814
- </ul>
815
- </div>
816
- </div>
817
- </div>
818
- </div>
819
- </div>
820
- </div>
821
- <h2>Instance Method Details</h2>
822
- <div class='methods'>
823
- <div class='method_details'>
824
- <p class='signature' id='domIsLoaded-instance'>
825
- - (void) <strong>domIsLoaded</strong>(cb)
826
- </p>
827
- <div class='docstring'>
828
- <p>Checks to ensure the DOM is loaded. Ensures the callback is always fired, even
829
- if the DOM is already loaded before it&#39;s invoked. The callback is also always
830
- called asynchronously.</p>
831
- </div>
832
- <div class='tags'>
833
- <h3>Parameters:</h3>
834
- <ul class='param'>
835
- <li>
836
- <span class='name'>cb</span>
837
- <span class='type'>
838
- (<tt>Function</tt>)
839
- </span>
840
- &mdash;
841
- <span class='desc'>The callback function to fire when the DOM is ready.</span>
842
- </li>
843
- </ul>
844
- </div>
845
- </div>
846
- <div class='method_details'>
847
- <p class='signature' id='parseArguments-instance'>
848
- - (void) <strong>parseArguments</strong>(args)
849
- </p>
850
- <div class='docstring'>
851
- <p>Parses the arguments given to the Caman function, and sets the appropriate
852
- properties on this instance.</p><p>@params [Array] args Array of arguments passed to Caman.</p>
853
- </div>
854
- <div class='tags'>
855
- </div>
856
- </div>
857
- <div class='method_details'>
858
- <p class='signature' id='setInitObject-instance'>
859
- - (void) <strong>setInitObject</strong>(obj)
860
- </p>
861
- <div class='docstring'>
862
- <p>Sets the initialization object for this instance.</p>
863
- </div>
864
- <div class='tags'>
865
- <h3>Parameters:</h3>
866
- <ul class='param'>
867
- <li>
868
- <span class='name'>obj</span>
869
- <span class='type'>
870
- (<tt>Object, String</tt>)
871
- </span>
872
- &mdash;
873
- <span class='desc'>The initialization argument.</span>
874
- </li>
875
- </ul>
876
- </div>
877
- </div>
878
- <div class='method_details'>
879
- <p class='signature' id='setup-instance'>
880
- - (void) <strong>setup</strong>()
881
- </p>
882
- <div class='docstring'>
883
- <p>Begins the setup process, which differs depending on whether we&#39;re in NodeJS,
884
- or if an image or canvas object was provided.</p>
885
- </div>
886
- <div class='tags'>
887
- </div>
888
- </div>
889
- <div class='method_details'>
890
- <p class='signature' id='initNode-instance'>
891
- - (void) <strong>initNode</strong>()
892
- </p>
893
- <div class='docstring'>
894
- <p>Initialization function for NodeJS.</p>
895
- </div>
896
- <div class='tags'>
897
- </div>
898
- </div>
899
- <div class='method_details'>
900
- <p class='signature' id='readFromHttp-instance'>
901
- - (void) <strong>readFromHttp</strong>(url, callback)
902
- </p>
903
- <div class='tags'>
904
- </div>
905
- </div>
906
- <div class='method_details'>
907
- <p class='signature' id='nodeFileReady-instance'>
908
- - (void) <strong>nodeFileReady</strong>(err, data)
909
- (bound)
910
- </p>
911
- <div class='tags'>
912
- </div>
913
- </div>
914
- <div class='method_details'>
915
- <p class='signature' id='initImage-instance'>
916
- - (void) <strong>initImage</strong>()
917
- </p>
918
- <div class='docstring'>
919
- <p>Initialization function for the browser and image objects.</p>
920
- </div>
921
- <div class='tags'>
922
- </div>
923
- </div>
924
- <div class='method_details'>
925
- <p class='signature' id='initCanvas-instance'>
926
- - (void) <strong>initCanvas</strong>()
927
- </p>
928
- <div class='docstring'>
929
- <p>Initialization function for the browser and canvas objects.</p>
930
- </div>
931
- <div class='tags'>
932
- </div>
933
- </div>
934
- <div class='method_details'>
935
- <p class='signature' id='imageAdjustments-instance'>
936
- - (void) <strong>imageAdjustments</strong>()
937
- </p>
938
- <div class='docstring'>
939
- <p>Automatically check for a HiDPI capable screen and swap out the image if possible.
940
- Also checks the image URL to see if it&#39;s a cross-domain request, and attempt to
941
- proxy the image. If a cross-origin type is configured, the proxy will be ignored.</p>
942
- </div>
943
- <div class='tags'>
944
- </div>
945
- </div>
946
- <div class='method_details'>
947
- <p class='signature' id='waitForImageLoaded-instance'>
948
- - (void) <strong>waitForImageLoaded</strong>()
949
- </p>
950
- <div class='docstring'>
951
- <p>Utility function that fires <a href='../classes/Caman.html#imageLoaded-instance'>Caman#imageLoaded</a> once the image is finished loading.</p>
952
- </div>
953
- <div class='tags'>
954
- </div>
955
- </div>
956
- <div class='method_details'>
957
- <p class='signature' id='isImageLoaded-instance'>
958
- - (Boolean) <strong>isImageLoaded</strong>()
959
- </p>
960
- <div class='docstring'>
961
- <p>Checks if the given image is finished loading.</p>
962
- </div>
963
- <div class='tags'>
964
- <h3>Returns:</h3>
965
- <ul class='return'>
966
- <li>
967
- <span class='type'></span>
968
- (<tt>Boolean</tt>)
969
- &mdash;
970
- <span class='desc'>Is the image loaded?</span>
971
- </li>
972
- </ul>
973
- </div>
974
- </div>
975
- <div class='method_details'>
976
- <p class='signature' id='imageWidth-instance'>
977
- - (Number) <strong>imageWidth</strong>()
978
- </p>
979
- <div class='docstring'>
980
- <p>Internet Explorer has issues figuring out image dimensions when they aren&#39;t
981
- explicitly defined, apparently. We check the normal width/height properties first,
982
- but fall back to natural sizes if they are 0.</p>
983
- </div>
984
- <div class='tags'>
985
- <h3>Returns:</h3>
986
- <ul class='return'>
987
- <li>
988
- <span class='type'></span>
989
- (<tt>Number</tt>)
990
- &mdash;
991
- <span class='desc'>Width of the initialization image.</span>
992
- </li>
993
- </ul>
994
- </div>
995
- </div>
996
- <div class='method_details'>
997
- <p class='signature' id='imageHeight-instance'>
998
- - (Number) <strong>imageHeight</strong>()
999
- </p>
1000
- <div class='tags'>
1001
- <h3>Returns:</h3>
1002
- <ul class='return'>
1003
- <li>
1004
- <span class='type'></span>
1005
- (<tt>Number</tt>)
1006
- &mdash;
1007
- <span class='desc'>Height of the initialization image.</span>
1008
- </li>
1009
- </ul>
1010
- <h3>See also:</h3>
1011
- <ul class='see'>
1012
- <li>
1013
- <a href='../classes/Caman.html#imageWidth-instance'>Caman#imageWidth</a>
1014
- </li>
1015
- </ul>
1016
- </div>
1017
- </div>
1018
- <div class='method_details'>
1019
- <p class='signature' id='imageLoaded-instance'>
1020
- - (void) <strong>imageLoaded</strong>()
1021
- </p>
1022
- <div class='docstring'>
1023
- <p>Function that is called once the initialization image is finished loading.
1024
- We make sure that the canvas dimensions are properly set here.</p>
1025
- </div>
1026
- <div class='tags'>
1027
- </div>
1028
- </div>
1029
- <div class='method_details'>
1030
- <p class='signature' id='finishInit-instance'>
1031
- - (void) <strong>finishInit</strong>()
1032
- </p>
1033
- <div class='docstring'>
1034
- <p>Final step of initialization. We finish setting up our canvas element, and we
1035
- draw the image to the canvas (if applicable).</p>
1036
- </div>
1037
- <div class='tags'>
1038
- </div>
1039
- </div>
1040
- <div class='method_details'>
1041
- <p class='signature' id='reloadCanvasData-instance'>
1042
- - (void) <strong>reloadCanvasData</strong>()
1043
- </p>
1044
- <div class='docstring'>
1045
- <p>If you have a separate context reference to this canvas outside of CamanJS
1046
- and you make a change to the canvas outside of CamanJS, you will have to call
1047
- this function to update our context reference to include those changes.</p>
1048
- </div>
1049
- <div class='tags'>
1050
- </div>
1051
- </div>
1052
- <div class='method_details'>
1053
- <p class='signature' id='resetOriginalPixelData-instance'>
1054
- - (void) <strong>resetOriginalPixelData</strong>()
1055
- </p>
1056
- <div class='docstring'>
1057
- <p>Reset the canvas pixels to the original state at initialization.</p>
1058
- </div>
1059
- <div class='tags'>
1060
- </div>
1061
- </div>
1062
- <div class='method_details'>
1063
- <p class='signature' id='hasId-instance'>
1064
- - (Boolean) <strong>hasId</strong>()
1065
- </p>
1066
- <div class='docstring'>
1067
- <p>Does this instance have an ID assigned?</p>
1068
- </div>
1069
- <div class='tags'>
1070
- <h3>Returns:</h3>
1071
- <ul class='return'>
1072
- <li>
1073
- <span class='type'></span>
1074
- (<tt>Boolean</tt>)
1075
- &mdash;
1076
- <span class='desc'>Existance of an ID.</span>
1077
- </li>
1078
- </ul>
1079
- </div>
1080
- </div>
1081
- <div class='method_details'>
1082
- <p class='signature' id='assignId-instance'>
1083
- - (void) <strong>assignId</strong>()
1084
- </p>
1085
- <div class='docstring'>
1086
- <p>Assign a unique ID to this instance.</p>
1087
- </div>
1088
- <div class='tags'>
1089
- </div>
1090
- </div>
1091
- <div class='method_details'>
1092
- <p class='signature' id='hiDPIDisabled-instance'>
1093
- - (Boolean) <strong>hiDPIDisabled</strong>()
1094
- </p>
1095
- <div class='docstring'>
1096
- <p>Is HiDPI support disabled via the HTML data attribute?</p>
1097
- </div>
1098
- <div class='tags'>
1099
- <h3>Returns:</h3>
1100
- <ul class='return'>
1101
- <li>
1102
- <span class='type'></span><tt>Boolean</tt></li>
1103
- </ul>
1104
- </div>
1105
- </div>
1106
- <div class='method_details'>
1107
- <p class='signature' id='hiDPIAdjustments-instance'>
1108
- - (void) <strong>hiDPIAdjustments</strong>()
1109
- </p>
1110
- <div class='docstring'>
1111
- <p>Perform HiDPI adjustments to the canvas. This consists of changing the
1112
- scaling and the dimensions to match that of the display.</p>
1113
- </div>
1114
- <div class='tags'>
1115
- </div>
1116
- </div>
1117
- <div class='method_details'>
1118
- <p class='signature' id='hiDPIRatio-instance'>
1119
- - (Number) <strong>hiDPIRatio</strong>()
1120
- </p>
1121
- <div class='docstring'>
1122
- <p>Calculate the HiDPI ratio of this display based on the backing store
1123
- and the pixel ratio.</p>
1124
- </div>
1125
- <div class='tags'>
1126
- <h3>Returns:</h3>
1127
- <ul class='return'>
1128
- <li>
1129
- <span class='type'></span>
1130
- (<tt>Number</tt>)
1131
- &mdash;
1132
- <span class='desc'>The HiDPI pixel ratio.</span>
1133
- </li>
1134
- </ul>
1135
- </div>
1136
- </div>
1137
- <div class='method_details'>
1138
- <p class='signature' id='hiDPICapable-instance'>
1139
- - (Boolean) <strong>hiDPICapable</strong>()
1140
- </p>
1141
- <div class='docstring'>
1142
- <p>Is this display HiDPI capable?</p>
1143
- </div>
1144
- <div class='tags'>
1145
- <h3>Returns:</h3>
1146
- <ul class='return'>
1147
- <li>
1148
- <span class='type'></span><tt>Boolean</tt></li>
1149
- </ul>
1150
- </div>
1151
- </div>
1152
- <div class='method_details'>
1153
- <p class='signature' id='needsHiDPISwap-instance'>
1154
- - (Boolean) <strong>needsHiDPISwap</strong>()
1155
- </p>
1156
- <div class='docstring'>
1157
- <p>Do we need to perform an image swap with a HiDPI image?</p>
1158
- </div>
1159
- <div class='tags'>
1160
- <h3>Returns:</h3>
1161
- <ul class='return'>
1162
- <li>
1163
- <span class='type'></span><tt>Boolean</tt></li>
1164
- </ul>
1165
- </div>
1166
- </div>
1167
- <div class='method_details'>
1168
- <p class='signature' id='hiDPIReplacement-instance'>
1169
- - (String) <strong>hiDPIReplacement</strong>()
1170
- </p>
1171
- <div class='docstring'>
1172
- <p>Gets the HiDPI replacement for the initialization image.</p>
1173
- </div>
1174
- <div class='tags'>
1175
- <h3>Returns:</h3>
1176
- <ul class='return'>
1177
- <li>
1178
- <span class='type'></span>
1179
- (<tt>String</tt>)
1180
- &mdash;
1181
- <span class='desc'>URL to the HiDPI version.</span>
1182
- </li>
1183
- </ul>
1184
- </div>
1185
- </div>
1186
- <div class='method_details'>
1187
- <p class='signature' id='replaceCanvas-instance'>
1188
- - (void) <strong>replaceCanvas</strong>(newCanvas)
1189
- </p>
1190
- <div class='docstring'>
1191
- <p>Replaces the current canvas with a new one, and properly updates all of the
1192
- applicable references for this instance.</p>
1193
- </div>
1194
- <div class='tags'>
1195
- <h3>Parameters:</h3>
1196
- <ul class='param'>
1197
- <li>
1198
- <span class='name'>newCanvas</span>
1199
- <span class='type'>
1200
- (<tt>DOMObject</tt>)
1201
- </span>
1202
- &mdash;
1203
- <span class='desc'>The canvas to swap into this instance.</span>
1204
- </li>
1205
- </ul>
1206
- </div>
1207
- </div>
1208
- <div class='method_details'>
1209
- <p class='signature' id='render-instance'>
1210
- - (void) <strong>render</strong>(callback = function() {})
1211
- </p>
1212
- <div class='docstring'>
1213
- <p>Begins the rendering process. This will execute all of the filter functions
1214
- called either since initialization or the previous render.</p>
1215
- </div>
1216
- <div class='tags'>
1217
- <h3>Parameters:</h3>
1218
- <ul class='param'>
1219
- <li>
1220
- <span class='name'>callback</span>
1221
- <span class='type'>
1222
- (<tt>Function</tt>)
1223
- </span>
1224
- &mdash;
1225
- <span class='desc'>Function to call when rendering is finished.</span>
1226
- </li>
1227
- </ul>
1228
- </div>
1229
- </div>
1230
- <div class='method_details'>
1231
- <p class='signature' id='revert-instance'>
1232
- - (void) <strong>revert</strong>(updateContext = true)
1233
- </p>
1234
- <div class='docstring'>
1235
- <p>Reverts the canvas back to it&#39;s original state while
1236
- maintaining any cropped or resized dimensions.</p>
1237
- </div>
1238
- <div class='tags'>
1239
- <h3>Parameters:</h3>
1240
- <ul class='param'>
1241
- <li>
1242
- <span class='name'>updateContext</span>
1243
- <span class='type'>
1244
- (<tt>Boolean</tt>)
1245
- </span>
1246
- &mdash;
1247
- <span class='desc'>Should we apply the reverted pixel data to the canvas context thus triggering a re-render by the browser?</span>
1248
- </li>
1249
- </ul>
1250
- </div>
1251
- </div>
1252
- <div class='method_details'>
1253
- <p class='signature' id='reset-instance'>
1254
- - (void) <strong>reset</strong>()
1255
- </p>
1256
- <div class='docstring'>
1257
- <p>Completely resets the canvas back to it&#39;s original state.
1258
- Any size adjustments will also be reset.</p>
1259
- </div>
1260
- <div class='tags'>
1261
- </div>
1262
- </div>
1263
- <div class='method_details'>
1264
- <p class='signature' id='originalVisiblePixels-instance'>
1265
- - (Array) <strong>originalVisiblePixels</strong>()
1266
- </p>
1267
- <div class='docstring'>
1268
- <p>Returns the original pixel data while maintaining any
1269
- cropping or resizing that may have occured.
1270
- <strong>Warning</strong>: this is currently in beta status.</p>
1271
- </div>
1272
- <div class='tags'>
1273
- <h3>Returns:</h3>
1274
- <ul class='return'>
1275
- <li>
1276
- <span class='type'></span>
1277
- (<tt>Array</tt>)
1278
- &mdash;
1279
- <span class='desc'>Original pixel values still visible after cropping or resizing.</span>
1280
- </li>
1281
- </ul>
1282
- </div>
1283
- </div>
1284
- <div class='method_details'>
1285
- <p class='signature' id='process-instance'>
1286
- - (Caman) <strong>process</strong>(name, processFn)
1287
- </p>
1288
- <div class='docstring'>
1289
- <p>Pushes the filter callback that modifies the RGBA object into the
1290
- render queue.</p>
1291
- </div>
1292
- <div class='tags'>
1293
- <h3>Parameters:</h3>
1294
- <ul class='param'>
1295
- <li>
1296
- <span class='name'>name</span>
1297
- <span class='type'>
1298
- (<tt>String</tt>)
1299
- </span>
1300
- &mdash;
1301
- <span class='desc'>Name of the filter function.</span>
1302
- </li>
1303
- <li>
1304
- <span class='name'>processFn</span>
1305
- <span class='type'>
1306
- (<tt>Function</tt>)
1307
- </span>
1308
- &mdash;
1309
- <span class='desc'>The Filter function.</span>
1310
- </li>
1311
- </ul>
1312
- <h3>Returns:</h3>
1313
- <ul class='return'>
1314
- <li>
1315
- <span class='type'></span><tt><a href='../classes/Caman.html'>Caman</a></tt></li>
1316
- </ul>
1317
- </div>
1318
- </div>
1319
- <div class='method_details'>
1320
- <p class='signature' id='processKernel-instance'>
1321
- - (Caman) <strong>processKernel</strong>(name, adjust, divisor = null, bias = 0)
1322
- </p>
1323
- <div class='docstring'>
1324
- <p>Pushes the kernel into the render queue.</p>
1325
- </div>
1326
- <div class='tags'>
1327
- <h3>Parameters:</h3>
1328
- <ul class='param'>
1329
- <li>
1330
- <span class='name'>name</span>
1331
- <span class='type'>
1332
- (<tt>String</tt>)
1333
- </span>
1334
- &mdash;
1335
- <span class='desc'>The name of the kernel.</span>
1336
- </li>
1337
- <li>
1338
- <span class='name'>adjust</span>
1339
- <span class='type'>
1340
- (<tt>Array</tt>)
1341
- </span>
1342
- &mdash;
1343
- <span class='desc'>The convolution kernel represented as a 1D array.</span>
1344
- </li>
1345
- <li>
1346
- <span class='name'>divisor</span>
1347
- <span class='type'>
1348
- (<tt>Number</tt>)
1349
- </span>
1350
- &mdash;
1351
- <span class='desc'>The divisor for the convolution.</span>
1352
- </li>
1353
- <li>
1354
- <span class='name'>bias</span>
1355
- <span class='type'>
1356
- (<tt>Number</tt>)
1357
- </span>
1358
- &mdash;
1359
- <span class='desc'>The bias for the convolution.</span>
1360
- </li>
1361
- </ul>
1362
- <h3>Returns:</h3>
1363
- <ul class='return'>
1364
- <li>
1365
- <span class='type'></span><tt><a href='../classes/Caman.html'>Caman</a></tt></li>
1366
- </ul>
1367
- </div>
1368
- </div>
1369
- <div class='method_details'>
1370
- <p class='signature' id='processPlugin-instance'>
1371
- - (Caman) <strong>processPlugin</strong>(plugin, args)
1372
- </p>
1373
- <div class='docstring'>
1374
- <p>Adds a standalone plugin into the render queue.</p>
1375
- </div>
1376
- <div class='tags'>
1377
- <h3>Parameters:</h3>
1378
- <ul class='param'>
1379
- <li>
1380
- <span class='name'>plugin</span>
1381
- <span class='type'>
1382
- (<tt>String</tt>)
1383
- </span>
1384
- &mdash;
1385
- <span class='desc'>Name of the plugin.</span>
1386
- </li>
1387
- <li>
1388
- <span class='name'>args</span>
1389
- <span class='type'>
1390
- (<tt>Array</tt>)
1391
- </span>
1392
- &mdash;
1393
- <span class='desc'>Array of arguments to pass to the plugin.</span>
1394
- </li>
1395
- </ul>
1396
- <h3>Returns:</h3>
1397
- <ul class='return'>
1398
- <li>
1399
- <span class='type'></span><tt><a href='../classes/Caman.html'>Caman</a></tt></li>
1400
- </ul>
1401
- </div>
1402
- </div>
1403
- <div class='method_details'>
1404
- <p class='signature' id='newLayer-instance'>
1405
- - (Caman) <strong>newLayer</strong>(callback)
1406
- </p>
1407
- <div class='docstring'>
1408
- <p>Pushes a new layer operation into the render queue and calls the layer
1409
- callback.</p>
1410
- </div>
1411
- <div class='tags'>
1412
- <h3>Parameters:</h3>
1413
- <ul class='param'>
1414
- <li>
1415
- <span class='name'>callback</span>
1416
- <span class='type'>
1417
- (<tt>Function</tt>)
1418
- </span>
1419
- &mdash;
1420
- <span class='desc'>Function that is executed within the context of the layer. All filter and adjustment functions for the layer will be executed inside of this function.</span>
1421
- </li>
1422
- </ul>
1423
- <h3>Returns:</h3>
1424
- <ul class='return'>
1425
- <li>
1426
- <span class='type'></span><tt><a href='../classes/Caman.html'>Caman</a></tt></li>
1427
- </ul>
1428
- </div>
1429
- </div>
1430
- <div class='method_details'>
1431
- <p class='signature' id='executeLayer-instance'>
1432
- - (void) <strong>executeLayer</strong>(layer)
1433
- </p>
1434
- <div class='docstring'>
1435
- <p>Pushes the layer context and moves to the next operation.</p>
1436
- </div>
1437
- <div class='tags'>
1438
- <h3>Parameters:</h3>
1439
- <ul class='param'>
1440
- <li>
1441
- <span class='name'>layer</span>
1442
- <span class='type'>
1443
- (<tt>Layer</tt>)
1444
- </span>
1445
- &mdash;
1446
- <span class='desc'>The layer to execute.</span>
1447
- </li>
1448
- </ul>
1449
- </div>
1450
- </div>
1451
- <div class='method_details'>
1452
- <p class='signature' id='pushContext-instance'>
1453
- - (void) <strong>pushContext</strong>(layer)
1454
- </p>
1455
- <div class='docstring'>
1456
- <p>Set all of the relevant data to the new layer.</p>
1457
- </div>
1458
- <div class='tags'>
1459
- <h3>Parameters:</h3>
1460
- <ul class='param'>
1461
- <li>
1462
- <span class='name'>layer</span>
1463
- <span class='type'>
1464
- (<tt>Layer</tt>)
1465
- </span>
1466
- &mdash;
1467
- <span class='desc'>The layer whose context we want to switch to.</span>
1468
- </li>
1469
- </ul>
1470
- </div>
1471
- </div>
1472
- <div class='method_details'>
1473
- <p class='signature' id='popContext-instance'>
1474
- - (void) <strong>popContext</strong>()
1475
- </p>
1476
- <div class='docstring'>
1477
- <p>Restore the previous layer context.</p>
1478
- </div>
1479
- <div class='tags'>
1480
- </div>
1481
- </div>
1482
- <div class='method_details'>
1483
- <p class='signature' id='applyCurrentLayer-instance'>
1484
- - (void) <strong>applyCurrentLayer</strong>()
1485
- </p>
1486
- <div class='docstring'>
1487
- <p>Applies the current layer to its parent layer.</p>
1488
- </div>
1489
- <div class='tags'>
1490
- </div>
1491
- </div>
1492
- </div>
1493
- </div>
1494
- <div id='footer'>
1495
- Generated on
1496
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
1497
- by
1498
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
1499
- v1.7.0
1500
- (Node.js v0.10.21).
1501
- &#10034;
1502
- Press Ctrl-h to see the keyboard shortcuts
1503
- &#10034;
1504
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
1505
- &#10034;
1506
- <a href='https://mksoft.ch'>mksoft.ch</a>
1507
- </div>
1508
- </body>
1509
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/Caman/Analyze.html DELETED
@@ -1,197 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <a href='../../classes/Caman.html' title='Caman'>Caman</a>
19
- &raquo;
20
- <span class='title'>Analyze</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- Class:
111
- Caman.Analyze
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>src&#47;core&#47;analyze.coffee</td>
117
- </tr>
118
- </table>
119
- <h2>Overview</h2>
120
- <div class='docstring'>
121
- <p>Various image analysis methods</p>
122
- </div>
123
- <div class='tags'>
124
- </div>
125
- <h2>Instance Method Summary</h2>
126
- <ul class='summary'>
127
- <li>
128
- <span class='signature'>
129
- <a href='#constructor-instance'>
130
- - (void) <strong>constructor</strong>(c)
131
- </a>
132
- </span>
133
- <span class='constructor note title'>Constructor</span>
134
- <span class='desc'>
135
-
136
- </span>
137
- </li>
138
- <li>
139
- <span class='signature'>
140
- <a href='#calculateLevels-instance'>
141
- - (Object) <strong>calculateLevels</strong>()
142
- </a>
143
- </span>
144
- <span class='desc'>
145
- Calculates the number of occurances of each color value throughout the image.
146
- </span>
147
- </li>
148
- </ul>
149
- <h2>Constructor Details</h2>
150
- <div class='methods'>
151
- <div class='method_details'>
152
- <p class='signature' id='constructor-instance'>
153
- - (void) <strong>constructor</strong>(c)
154
- </p>
155
- <div class='tags'>
156
- </div>
157
- </div>
158
- </div>
159
- <h2>Instance Method Details</h2>
160
- <div class='methods'>
161
- <div class='method_details'>
162
- <p class='signature' id='calculateLevels-instance'>
163
- - (Object) <strong>calculateLevels</strong>()
164
- </p>
165
- <div class='docstring'>
166
- <p>Calculates the number of occurances of each color value throughout the image.</p>
167
- </div>
168
- <div class='tags'>
169
- <h3>Returns:</h3>
170
- <ul class='return'>
171
- <li>
172
- <span class='type'></span>
173
- (<tt>Object</tt>)
174
- &mdash;
175
- <span class='desc'>Hash of RGB channels and the occurance of each value</span>
176
- </li>
177
- </ul>
178
- </div>
179
- </div>
180
- </div>
181
- </div>
182
- <div id='footer'>
183
- Generated on
184
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
185
- by
186
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
187
- v1.7.0
188
- (Node.js v0.10.21).
189
- &#10034;
190
- Press Ctrl-h to see the keyboard shortcuts
191
- &#10034;
192
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
193
- &#10034;
194
- <a href='https://mksoft.ch'>mksoft.ch</a>
195
- </div>
196
- </body>
197
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/Caman/Blender.html DELETED
@@ -1,236 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <a href='../../classes/Caman.html' title='Caman'>Caman</a>
19
- &raquo;
20
- <span class='title'>Blender</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- Class:
111
- Caman.Blender
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>src&#47;core&#47;blender.coffee</td>
117
- </tr>
118
- </table>
119
- <h2>Overview</h2>
120
- <div class='docstring'>
121
- <p>Built-in layer blenders. Many of these mimic Photoshop blend modes.</p>
122
- </div>
123
- <div class='tags'>
124
- </div>
125
- <h2>Class Method Summary</h2>
126
- <ul class='summary'>
127
- <li>
128
- <span class='signature'>
129
- <a href='#register-class'>
130
- + (void) <strong>register</strong>(name, func)
131
- </a>
132
- </span>
133
- <span class='desc'>
134
-
135
- </span>
136
- </li>
137
- <li>
138
- <span class='signature'>
139
- <a href='#execute-class'>
140
- + (Object) <strong>execute</strong>(name, rgbaLayer, rgbaParent)
141
- </a>
142
- </span>
143
- <span class='desc'>
144
-
145
- </span>
146
- </li>
147
- </ul>
148
- <h2>Class Method Details</h2>
149
- <div class='methods'>
150
- <div class='method_details'>
151
- <p class='signature' id='register-class'>
152
- + (void) <strong>register</strong>(name, func)
153
- </p>
154
- <div class='tags'>
155
- <h3>Parameters:</h3>
156
- <ul class='param'>
157
- <li>
158
- <span class='name'>name</span>
159
- <span class='type'>
160
- (<tt>String</tt>)
161
- </span>
162
- &mdash;
163
- <span class='desc'>Name of the blender.</span>
164
- </li>
165
- <li>
166
- <span class='name'>func</span>
167
- <span class='type'>
168
- (<tt>Function</tt>)
169
- </span>
170
- &mdash;
171
- <span class='desc'>The blender function.</span>
172
- </li>
173
- </ul>
174
- </div>
175
- </div>
176
- <div class='method_details'>
177
- <p class='signature' id='execute-class'>
178
- + (Object) <strong>execute</strong>(name, rgbaLayer, rgbaParent)
179
- </p>
180
- <div class='tags'>
181
- <h3>Parameters:</h3>
182
- <ul class='param'>
183
- <li>
184
- <span class='name'>name</span>
185
- <span class='type'>
186
- (<tt>String</tt>)
187
- </span>
188
- &mdash;
189
- <span class='desc'>Name of the blending function to invoke.</span>
190
- </li>
191
- <li>
192
- <span class='name'>rgbaLayer</span>
193
- <span class='type'>
194
- (<tt>Object</tt>)
195
- </span>
196
- &mdash;
197
- <span class='desc'>RGBA object of the current pixel from the layer.</span>
198
- </li>
199
- <li>
200
- <span class='name'>rgbaParent</span>
201
- <span class='type'>
202
- (<tt>Object</tt>)
203
- </span>
204
- &mdash;
205
- <span class='desc'>RGBA object of the corresponding pixel in the parent layer.</span>
206
- </li>
207
- </ul>
208
- <h3>Returns:</h3>
209
- <ul class='return'>
210
- <li>
211
- <span class='type'></span>
212
- (<tt>Object</tt>)
213
- &mdash;
214
- <span class='desc'>RGBA object representing the blended pixel.</span>
215
- </li>
216
- </ul>
217
- </div>
218
- </div>
219
- </div>
220
- </div>
221
- <div id='footer'>
222
- Generated on
223
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
224
- by
225
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
226
- v1.7.0
227
- (Node.js v0.10.21).
228
- &#10034;
229
- Press Ctrl-h to see the keyboard shortcuts
230
- &#10034;
231
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
232
- &#10034;
233
- <a href='https://mksoft.ch'>mksoft.ch</a>
234
- </div>
235
- </body>
236
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/Caman/Calculate.html DELETED
@@ -1,475 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <a href='../../classes/Caman.html' title='Caman'>Caman</a>
19
- &raquo;
20
- <span class='title'>Calculate</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- Class:
111
- Caman.Calculate
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>src&#47;core&#47;calculate.coffee</td>
117
- </tr>
118
- </table>
119
- <h2>Overview</h2>
120
- <div class='docstring'>
121
- <p>Various math-heavy helpers that are used throughout CamanJS.</p>
122
- </div>
123
- <div class='tags'>
124
- </div>
125
- <h2>Class Method Summary</h2>
126
- <ul class='summary'>
127
- <li>
128
- <span class='signature'>
129
- <a href='#distance-class'>
130
- + (Number) <strong>distance</strong>(x1, y1, x2, y2)
131
- </a>
132
- </span>
133
- <span class='desc'>
134
-
135
- </span>
136
- </li>
137
- <li>
138
- <span class='signature'>
139
- <a href='#randomRange-class'>
140
- + (Number) <strong>randomRange</strong>(min, max, getFloat = false)
141
- </a>
142
- </span>
143
- <span class='desc'>
144
-
145
- </span>
146
- </li>
147
- <li>
148
- <span class='signature'>
149
- <a href='#luminance-class'>
150
- + (Number) <strong>luminance</strong>(rgba)
151
- </a>
152
- </span>
153
- <span class='desc'>
154
- Calculates the luminance of a single pixel using a special weighted sum.
155
- </span>
156
- </li>
157
- <li>
158
- <span class='signature'>
159
- <a href='#bezier-class'>
160
- + (Array) <strong>bezier</strong>(start, ctrl1, ctrl2, end, lowBound = 0, highBound = 255)
161
- </a>
162
- </span>
163
- <span class='desc'>
164
- Generates a bezier curve given a start and end point, with control points in between.
165
- </span>
166
- </li>
167
- <li>
168
- <span class='signature'>
169
- <a href='#hermite-class'>
170
- + (Array) <strong>hermite</strong>(controlPoints, lowBound, highBound)
171
- </a>
172
- </span>
173
- <span class='desc'>
174
- Generates a hermite curve given a start and end point, with control points in between.
175
- </span>
176
- </li>
177
- <li>
178
- <span class='signature'>
179
- <a href='#missingValues-class'>
180
- + (Array) <strong>missingValues</strong>(values, endX)
181
- </a>
182
- </span>
183
- <span class='desc'>
184
- Calculates possible missing values from a given value array.
185
- </span>
186
- </li>
187
- </ul>
188
- <h2>Class Method Details</h2>
189
- <div class='methods'>
190
- <div class='method_details'>
191
- <p class='signature' id='distance-class'>
192
- + (Number) <strong>distance</strong>(x1, y1, x2, y2)
193
- </p>
194
- <div class='tags'>
195
- <h3>Parameters:</h3>
196
- <ul class='param'>
197
- <li>
198
- <span class='name'>x1</span>
199
- <span class='type'>
200
- (<tt>Number</tt>)
201
- </span>
202
- &mdash;
203
- <span class='desc'>1st point x-coordinate.</span>
204
- </li>
205
- <li>
206
- <span class='name'>y1</span>
207
- <span class='type'>
208
- (<tt>Number</tt>)
209
- </span>
210
- &mdash;
211
- <span class='desc'>1st point y-coordinate.</span>
212
- </li>
213
- <li>
214
- <span class='name'>x2</span>
215
- <span class='type'>
216
- (<tt>Number</tt>)
217
- </span>
218
- &mdash;
219
- <span class='desc'>2nd point x-coordinate.</span>
220
- </li>
221
- <li>
222
- <span class='name'>y2</span>
223
- <span class='type'>
224
- (<tt>Number</tt>)
225
- </span>
226
- &mdash;
227
- <span class='desc'>2nd point y-coordinate.</span>
228
- </li>
229
- </ul>
230
- <h3>Returns:</h3>
231
- <ul class='return'>
232
- <li>
233
- <span class='type'></span>
234
- (<tt>Number</tt>)
235
- &mdash;
236
- <span class='desc'>The distance between the two points.</span>
237
- </li>
238
- </ul>
239
- </div>
240
- </div>
241
- <div class='method_details'>
242
- <p class='signature' id='randomRange-class'>
243
- + (Number) <strong>randomRange</strong>(min, max, getFloat = false)
244
- </p>
245
- <div class='tags'>
246
- <h3>Parameters:</h3>
247
- <ul class='param'>
248
- <li>
249
- <span class='name'>min</span>
250
- <span class='type'>
251
- (<tt>Number</tt>)
252
- </span>
253
- &mdash;
254
- <span class='desc'>The lower bound (inclusive).</span>
255
- </li>
256
- <li>
257
- <span class='name'>max</span>
258
- <span class='type'>
259
- (<tt>Number</tt>)
260
- </span>
261
- &mdash;
262
- <span class='desc'>The upper bound (inclusive).</span>
263
- </li>
264
- <li>
265
- <span class='name'>getFloat</span>
266
- <span class='type'>
267
- (<tt>Boolean</tt>)
268
- </span>
269
- &mdash;
270
- <span class='desc'>Return a Float or a rounded Integer?</span>
271
- </li>
272
- </ul>
273
- <h3>Returns:</h3>
274
- <ul class='return'>
275
- <li>
276
- <span class='type'></span>
277
- (<tt>Number</tt>)
278
- &mdash;
279
- <span class='desc'>The pseudorandom number, either as a float or integer.</span>
280
- </li>
281
- </ul>
282
- </div>
283
- </div>
284
- <div class='method_details'>
285
- <p class='signature' id='luminance-class'>
286
- + (Number) <strong>luminance</strong>(rgba)
287
- </p>
288
- <div class='docstring'>
289
- <p>Calculates the luminance of a single pixel using a special weighted sum.</p>
290
- </div>
291
- <div class='tags'>
292
- <h3>Parameters:</h3>
293
- <ul class='param'>
294
- <li>
295
- <span class='name'>rgba</span>
296
- <span class='type'>
297
- (<tt>Object</tt>)
298
- </span>
299
- &mdash;
300
- <span class='desc'>RGBA object describing a single pixel.</span>
301
- </li>
302
- </ul>
303
- <h3>Returns:</h3>
304
- <ul class='return'>
305
- <li>
306
- <span class='type'></span>
307
- (<tt>Number</tt>)
308
- &mdash;
309
- <span class='desc'>The luminance value of the pixel.</span>
310
- </li>
311
- </ul>
312
- </div>
313
- </div>
314
- <div class='method_details'>
315
- <p class='signature' id='bezier-class'>
316
- + (Array) <strong>bezier</strong>(start, ctrl1, ctrl2, end, lowBound = 0, highBound = 255)
317
- </p>
318
- <div class='docstring'>
319
- <p>Generates a bezier curve given a start and end point, with control points in between.
320
- Can also optionally bound the y values between a low and high bound.</p><p>This is different than most bezier curve functions because it attempts to construct it in such
321
- a way that we can use it more like a simple input -&gt; output system, or a one-to-one function.
322
- In other words we can provide an input color value, and immediately receive an output modified
323
- color value.</p><p>Note that, by design, this does not force X values to be in the range [0..255]. This is to
324
- generalize the function a bit more. If you give it a starting X value that isn&#39;t 0, and/or a
325
- ending X value that isn&#39;t 255, you may run into problems with your filter!</p>
326
- </div>
327
- <div class='tags'>
328
- <h3>Parameters:</h3>
329
- <ul class='param'>
330
- <li>
331
- <span class='name'>2-item</span>
332
- <span class='type'>
333
- (<tt>Array</tt>)
334
- </span>
335
- &mdash;
336
- <span class='desc'>arrays describing the x, y coordinates of the control points. Minimum two.</span>
337
- </li>
338
- <li>
339
- <span class='name'>lowBound</span>
340
- <span class='type'>
341
- (<tt>Number</tt>)
342
- </span>
343
- &mdash;
344
- <span class='desc'>(optional) Minimum possible value for any y-value in the curve.</span>
345
- </li>
346
- <li>
347
- <span class='name'>highBound</span>
348
- <span class='type'>
349
- (<tt>Number</tt>)
350
- </span>
351
- &mdash;
352
- <span class='desc'>(optional) Maximum posisble value for any y-value in the curve.</span>
353
- </li>
354
- </ul>
355
- <h3>Returns:</h3>
356
- <ul class='return'>
357
- <li>
358
- <span class='type'></span>
359
- (<tt>Array</tt>)
360
- &mdash;
361
- <span class='desc'>Array whose index represents every x-value between start and end, and value represents the corresponding y-value.</span>
362
- </li>
363
- </ul>
364
- </div>
365
- </div>
366
- <div class='method_details'>
367
- <p class='signature' id='hermite-class'>
368
- + (Array) <strong>hermite</strong>(controlPoints, lowBound, highBound)
369
- </p>
370
- <div class='docstring'>
371
- <p>Generates a hermite curve given a start and end point, with control points in between.
372
- Can also optionally bound the y values between a low and high bound.</p><p>This is different than most hermite curve functions because it attempts to construct it in such
373
- a way that we can use it more like a simple input -&gt; output system, or a one-to-one function.
374
- In other words we can provide an input color value, and immediately receive an output modified
375
- color value.</p><p>Note that, by design, this does not force X values to be in the range [0..255]. This is to
376
- generalize the function a bit more. If you give it a starting X value that isn&#39;t 0, and/or a
377
- ending X value that isn&#39;t 255, you may run into problems with your filter!</p>
378
- </div>
379
- <div class='tags'>
380
- <h3>Parameters:</h3>
381
- <ul class='param'>
382
- <li>
383
- <span class='name'>2-item</span>
384
- <span class='type'>
385
- (<tt>Array</tt>)
386
- </span>
387
- &mdash;
388
- <span class='desc'>arrays describing the x, y coordinates of the control points. Minimum two.</span>
389
- </li>
390
- <li>
391
- <span class='name'>lowBound</span>
392
- <span class='type'>
393
- (<tt>Number</tt>)
394
- </span>
395
- &mdash;
396
- <span class='desc'>(optional) Minimum possible value for any y-value in the curve.</span>
397
- </li>
398
- <li>
399
- <span class='name'>highBound</span>
400
- <span class='type'>
401
- (<tt>Number</tt>)
402
- </span>
403
- &mdash;
404
- <span class='desc'>(optional) Maximum possible value for any y-value in the curve.</span>
405
- </li>
406
- </ul>
407
- <h3>Returns:</h3>
408
- <ul class='return'>
409
- <li>
410
- <span class='type'></span>
411
- (<tt>Array</tt>)
412
- &mdash;
413
- <span class='desc'>Array whose index represents every x-value between start and end, and value represents the corresponding y-value.</span>
414
- </li>
415
- </ul>
416
- </div>
417
- </div>
418
- <div class='method_details'>
419
- <p class='signature' id='missingValues-class'>
420
- + (Array) <strong>missingValues</strong>(values, endX)
421
- </p>
422
- <div class='docstring'>
423
- <p>Calculates possible missing values from a given value array. Note that this returns a copy
424
- and does not mutate the original. In case no values are missing the original array is
425
- returned as that is convenient.</p>
426
- </div>
427
- <div class='tags'>
428
- <h3>Parameters:</h3>
429
- <ul class='param'>
430
- <li>
431
- <span class='name'>2-item</span>
432
- <span class='type'>
433
- (<tt>Array</tt>)
434
- </span>
435
- &mdash;
436
- <span class='desc'>arrays describing the x, y coordinates of the control points.</span>
437
- </li>
438
- <li>
439
- <span class='name'>end</span>
440
- <span class='type'>
441
- (<tt>Number</tt>)
442
- </span>
443
- &mdash;
444
- <span class='desc'>x value of the array (maximum)</span>
445
- </li>
446
- </ul>
447
- <h3>Returns:</h3>
448
- <ul class='return'>
449
- <li>
450
- <span class='type'></span>
451
- (<tt>Array</tt>)
452
- &mdash;
453
- <span class='desc'>Array whose index represents every x-value between start and end, and value represents the corresponding y-value.</span>
454
- </li>
455
- </ul>
456
- </div>
457
- </div>
458
- </div>
459
- </div>
460
- <div id='footer'>
461
- Generated on
462
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
463
- by
464
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
465
- v1.7.0
466
- (Node.js v0.10.21).
467
- &#10034;
468
- Press Ctrl-h to see the keyboard shortcuts
469
- &#10034;
470
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
471
- &#10034;
472
- <a href='https://mksoft.ch'>mksoft.ch</a>
473
- </div>
474
- </body>
475
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/Caman/Convert.html DELETED
@@ -1,1002 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <a href='../../classes/Caman.html' title='Caman'>Caman</a>
19
- &raquo;
20
- <span class='title'>Convert</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- Class:
111
- Caman.Convert
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>src&#47;core&#47;convert.coffee</td>
117
- </tr>
118
- </table>
119
- <h2>Overview</h2>
120
- <div class='docstring'>
121
- <p>Tons of color conversion utility functions.</p>
122
- </div>
123
- <div class='tags'>
124
- </div>
125
- <h2>Class Method Summary</h2>
126
- <ul class='summary'>
127
- <li>
128
- <span class='signature'>
129
- <a href='#hexToRGB-class'>
130
- + (Array) <strong>hexToRGB</strong>(hex)
131
- </a>
132
- </span>
133
- <span class='desc'>
134
- Converts the hex representation of a color to RGB values.
135
- </span>
136
- </li>
137
- <li>
138
- <span class='signature'>
139
- <a href='#rgbToHSL-class'>
140
- + (Array) <strong>rgbToHSL</strong>(r, g, b)
141
- </a>
142
- </span>
143
- <span class='desc'>
144
- Converts an RGB color to HSL.
145
- </span>
146
- </li>
147
- <li>
148
- <span class='signature'>
149
- <a href='#hslToRGB-class'>
150
- + (Array) <strong>hslToRGB</strong>(h, s, l)
151
- </a>
152
- </span>
153
- <span class='desc'>
154
- Converts an HSL color value to RGB.
155
- </span>
156
- </li>
157
- <li>
158
- <span class='signature'>
159
- <a href='#hueToRGB-class'>
160
- + (Number) <strong>hueToRGB</strong>(p, q, t)
161
- </a>
162
- </span>
163
- <span class='desc'>
164
- Converts from the hue color space back to RGB.
165
- </span>
166
- </li>
167
- <li>
168
- <span class='signature'>
169
- <a href='#rgbToHSV-class'>
170
- + (Array) <strong>rgbToHSV</strong>(r, g, b)
171
- </a>
172
- </span>
173
- <span class='desc'>
174
- Converts an RGB color value to HSV.
175
- </span>
176
- </li>
177
- <li>
178
- <span class='signature'>
179
- <a href='#hsvToRGB-class'>
180
- + (Array) <strong>hsvToRGB</strong>(h, s, v)
181
- </a>
182
- </span>
183
- <span class='desc'>
184
- Converts an HSV color value to RGB.
185
- </span>
186
- </li>
187
- <li>
188
- <span class='signature'>
189
- <a href='#rgbToXYZ-class'>
190
- + (Array) <strong>rgbToXYZ</strong>(r, g, b)
191
- </a>
192
- </span>
193
- <span class='desc'>
194
- Converts a RGB color value to the XYZ color space.
195
- </span>
196
- </li>
197
- <li>
198
- <span class='signature'>
199
- <a href='#xyzToRGB-class'>
200
- + (Array) <strong>xyzToRGB</strong>(x, y, z)
201
- </a>
202
- </span>
203
- <span class='desc'>
204
- Converts a XYZ color value to the sRGB color space.
205
- </span>
206
- </li>
207
- <li>
208
- <span class='signature'>
209
- <a href='#xyzToLab-class'>
210
- + (Array) <strong>xyzToLab</strong>(x, y, z)
211
- </a>
212
- </span>
213
- <span class='desc'>
214
- Converts a XYZ color value to the CIELAB color space.
215
- </span>
216
- </li>
217
- <li>
218
- <span class='signature'>
219
- <a href='#labToXYZ-class'>
220
- + (Array) <strong>labToXYZ</strong>(l, a, b)
221
- </a>
222
- </span>
223
- <span class='desc'>
224
- Converts a L<em>, a</em>, b* color values from the CIELAB color space to the XYZ color space.
225
- </span>
226
- </li>
227
- <li>
228
- <span class='signature'>
229
- <a href='#rgbToLab-class'>
230
- + (void) <strong>rgbToLab</strong>(r, g, b)
231
- </a>
232
- </span>
233
- <span class='desc'>
234
- Converts L<em>, a</em>, b* back to RGB values.
235
- </span>
236
- </li>
237
- <li>
238
- <span class='signature'>
239
- <a href='#labToRGB-class'>
240
- + (void) <strong>labToRGB</strong>(l, a, b)
241
- </a>
242
- </span>
243
- <span class='desc'>
244
-
245
- </span>
246
- </li>
247
- </ul>
248
- <h2>Class Method Details</h2>
249
- <div class='methods'>
250
- <div class='method_details'>
251
- <p class='signature' id='hexToRGB-class'>
252
- + (Array) <strong>hexToRGB</strong>(hex)
253
- </p>
254
- <div class='docstring'>
255
- <p>Converts the hex representation of a color to RGB values.
256
- Hex value can optionally start with the hash (#).</p>
257
- </div>
258
- <div class='tags'>
259
- <h3>Parameters:</h3>
260
- <ul class='param'>
261
- <li>
262
- <span class='name'>hex</span>
263
- <span class='type'>
264
- (<tt>String</tt>)
265
- </span>
266
- &mdash;
267
- <span class='desc'>The colors hex value</span>
268
- </li>
269
- </ul>
270
- <h3>Returns:</h3>
271
- <ul class='return'>
272
- <li>
273
- <span class='type'></span>
274
- (<tt>Array</tt>)
275
- &mdash;
276
- <span class='desc'>The RGB representation</span>
277
- </li>
278
- </ul>
279
- </div>
280
- </div>
281
- <div class='method_details'>
282
- <p class='signature' id='rgbToHSL-class'>
283
- + (Array) <strong>rgbToHSL</strong>(r, g, b)
284
- <br>
285
- + (Array) <strong>rgbToHSL</strong>(rgb)
286
- <br>
287
- </p>
288
- <div class='docstring'>
289
- <p>Converts an RGB color to HSL.
290
- Assumes r, g, and b are in the set [0, 255] and
291
- returns h, s, and l in the set [0, 1].</p>
292
- </div>
293
- <div class='tags'>
294
- <h3>Returns:</h3>
295
- <ul class='return'>
296
- <li>
297
- <span class='type'></span>
298
- (<tt>Array</tt>)
299
- &mdash;
300
- <span class='desc'>The HSL representation</span>
301
- </li>
302
- </ul>
303
- <div class='overloads'>
304
- <h3>Overloads:</h3>
305
- <div class='overload'>
306
- <p class='signature'>
307
- + (Array) <strong>rgbToHSL</strong>(r, g, b)
308
- </p>
309
- <div class='tags'>
310
- <h3>Parameters:</h3>
311
- <ul class='param'>
312
- <li>
313
- <span class='name'>r</span>
314
- <span class='type'>
315
- (<tt>Number</tt>)
316
- </span>
317
- &mdash;
318
- <span class='desc'>Red channel</span>
319
- </li>
320
- <li>
321
- <span class='name'>g</span>
322
- <span class='type'>
323
- (<tt>Number</tt>)
324
- </span>
325
- &mdash;
326
- <span class='desc'>Green channel</span>
327
- </li>
328
- <li>
329
- <span class='name'>b</span>
330
- <span class='type'>
331
- (<tt>Number</tt>)
332
- </span>
333
- &mdash;
334
- <span class='desc'>Blue channel</span>
335
- </li>
336
- </ul>
337
- </div>
338
- </div>
339
- <div class='overload'>
340
- <p class='signature'>
341
- + (Array) <strong>rgbToHSL</strong>(rgb)
342
- </p>
343
- <div class='tags'>
344
- <h3>Parameters:</h3>
345
- <ul class='param'>
346
- <li>
347
- <span class='name'>rgb</span>
348
- <span class='type'>
349
- (<tt>Object</tt>)
350
- </span>
351
- &mdash;
352
- <span class='desc'>The RGB object.</span>
353
- </li>
354
- </ul>
355
- <h3>
356
- Options Hash:
357
- (rgb):
358
- </h3>
359
- <ul class='options'>
360
- <li>
361
- <span class='name'>r</span>
362
- <span class='type'>
363
- (<tt>Number</tt>)
364
- </span>
365
- &mdash;
366
- <span class='desc'>The red channel.</span>
367
- </li>
368
- <li>
369
- <span class='name'>g</span>
370
- <span class='type'>
371
- (<tt>Number</tt>)
372
- </span>
373
- &mdash;
374
- <span class='desc'>The green channel.</span>
375
- </li>
376
- <li>
377
- <span class='name'>b</span>
378
- <span class='type'>
379
- (<tt>Number</tt>)
380
- </span>
381
- &mdash;
382
- <span class='desc'>The blue channel.</span>
383
- </li>
384
- </ul>
385
- </div>
386
- </div>
387
- </div>
388
- </div>
389
- </div>
390
- <div class='method_details'>
391
- <p class='signature' id='hslToRGB-class'>
392
- + (Array) <strong>hslToRGB</strong>(h, s, l)
393
- <br>
394
- + (Array) <strong>hslToRGB</strong>(hsl)
395
- <br>
396
- </p>
397
- <div class='docstring'>
398
- <p>Converts an HSL color value to RGB. Conversion formula
399
- adapted from <a href="http://en.wikipedia.org/wiki/HSL_color_space">http://en.wikipedia.org/wiki/HSL_color_space</a>.
400
- Assumes h, s, and l are contained in the set [0, 1] and
401
- returns r, g, and b in the set [0, 255].</p>
402
- </div>
403
- <div class='tags'>
404
- <h3>Returns:</h3>
405
- <ul class='return'>
406
- <li>
407
- <span class='type'></span>
408
- (<tt>Array</tt>)
409
- &mdash;
410
- <span class='desc'>The RGB representation</span>
411
- </li>
412
- </ul>
413
- <div class='overloads'>
414
- <h3>Overloads:</h3>
415
- <div class='overload'>
416
- <p class='signature'>
417
- + (Array) <strong>hslToRGB</strong>(h, s, l)
418
- </p>
419
- <div class='tags'>
420
- <h3>Parameters:</h3>
421
- <ul class='param'>
422
- <li>
423
- <span class='name'>h</span>
424
- <span class='type'>
425
- (<tt>Number</tt>)
426
- </span>
427
- &mdash;
428
- <span class='desc'>The hue</span>
429
- </li>
430
- <li>
431
- <span class='name'>s</span>
432
- <span class='type'>
433
- (<tt>Number</tt>)
434
- </span>
435
- &mdash;
436
- <span class='desc'>The saturation</span>
437
- </li>
438
- <li>
439
- <span class='name'>l</span>
440
- <span class='type'>
441
- (<tt>Number</tt>)
442
- </span>
443
- &mdash;
444
- <span class='desc'>The lightness</span>
445
- </li>
446
- </ul>
447
- </div>
448
- </div>
449
- <div class='overload'>
450
- <p class='signature'>
451
- + (Array) <strong>hslToRGB</strong>(hsl)
452
- </p>
453
- <div class='tags'>
454
- <h3>Parameters:</h3>
455
- <ul class='param'>
456
- <li>
457
- <span class='name'>hsl</span>
458
- <span class='type'>
459
- (<tt>Object</tt>)
460
- </span>
461
- &mdash;
462
- <span class='desc'>The HSL object.</span>
463
- </li>
464
- </ul>
465
- <h3>
466
- Options Hash:
467
- (hsl):
468
- </h3>
469
- <ul class='options'>
470
- <li>
471
- <span class='name'>h</span>
472
- <span class='type'>
473
- (<tt>Number</tt>)
474
- </span>
475
- &mdash;
476
- <span class='desc'>The hue.</span>
477
- </li>
478
- <li>
479
- <span class='name'>s</span>
480
- <span class='type'>
481
- (<tt>Number</tt>)
482
- </span>
483
- &mdash;
484
- <span class='desc'>The saturation.</span>
485
- </li>
486
- <li>
487
- <span class='name'>l</span>
488
- <span class='type'>
489
- (<tt>Number</tt>)
490
- </span>
491
- &mdash;
492
- <span class='desc'>The lightness.</span>
493
- </li>
494
- </ul>
495
- </div>
496
- </div>
497
- </div>
498
- </div>
499
- </div>
500
- <div class='method_details'>
501
- <p class='signature' id='hueToRGB-class'>
502
- + (Number) <strong>hueToRGB</strong>(p, q, t)
503
- </p>
504
- <div class='docstring'>
505
- <p>Converts from the hue color space back to RGB.</p>
506
- </div>
507
- <div class='tags'>
508
- <h3>Parameters:</h3>
509
- <ul class='param'>
510
- <li>
511
- <span class='name'>p</span>
512
- <span class='type'>
513
- (<tt>Number</tt>)
514
- </span>
515
- </li>
516
- <li>
517
- <span class='name'>q</span>
518
- <span class='type'>
519
- (<tt>Number</tt>)
520
- </span>
521
- </li>
522
- <li>
523
- <span class='name'>t</span>
524
- <span class='type'>
525
- (<tt>Number</tt>)
526
- </span>
527
- </li>
528
- </ul>
529
- <h3>Returns:</h3>
530
- <ul class='return'>
531
- <li>
532
- <span class='type'></span>
533
- (<tt>Number</tt>)
534
- &mdash;
535
- <span class='desc'>RGB value</span>
536
- </li>
537
- </ul>
538
- </div>
539
- </div>
540
- <div class='method_details'>
541
- <p class='signature' id='rgbToHSV-class'>
542
- + (Array) <strong>rgbToHSV</strong>(r, g, b)
543
- </p>
544
- <div class='docstring'>
545
- <p>Converts an RGB color value to HSV. Conversion formula
546
- adapted from {<a href="http://en.wikipedia.org/wiki/HSV_color_space}">http://en.wikipedia.org/wiki/HSV_color_space}</a>.
547
- Assumes r, g, and b are contained in the set [0, 255] and
548
- returns h, s, and v in the set [0, 1].</p>
549
- </div>
550
- <div class='tags'>
551
- <h3>Parameters:</h3>
552
- <ul class='param'>
553
- <li>
554
- <span class='name'>r</span>
555
- <span class='type'>
556
- (<tt>Number</tt>)
557
- </span>
558
- &mdash;
559
- <span class='desc'>The red color value</span>
560
- </li>
561
- <li>
562
- <span class='name'>g</span>
563
- <span class='type'>
564
- (<tt>Number</tt>)
565
- </span>
566
- &mdash;
567
- <span class='desc'>The green color value</span>
568
- </li>
569
- <li>
570
- <span class='name'>b</span>
571
- <span class='type'>
572
- (<tt>Number</tt>)
573
- </span>
574
- &mdash;
575
- <span class='desc'>The blue color value</span>
576
- </li>
577
- </ul>
578
- <h3>Returns:</h3>
579
- <ul class='return'>
580
- <li>
581
- <span class='type'></span>
582
- (<tt>Array</tt>)
583
- &mdash;
584
- <span class='desc'>The HSV representation</span>
585
- </li>
586
- </ul>
587
- </div>
588
- </div>
589
- <div class='method_details'>
590
- <p class='signature' id='hsvToRGB-class'>
591
- + (Array) <strong>hsvToRGB</strong>(h, s, v)
592
- </p>
593
- <div class='docstring'>
594
- <p>Converts an HSV color value to RGB. Conversion formula
595
- adapted from <a href="http://en.wikipedia.org/wiki/HSV_color_space">http://en.wikipedia.org/wiki/HSV_color_space</a>.
596
- Assumes h, s, and v are contained in the set [0, 1] and
597
- returns r, g, and b in the set [0, 255].</p>
598
- </div>
599
- <div class='tags'>
600
- <h3>Parameters:</h3>
601
- <ul class='param'>
602
- <li>
603
- <span class='name'>h</span>
604
- <span class='type'>
605
- (<tt>Number</tt>)
606
- </span>
607
- &mdash;
608
- <span class='desc'>The hue</span>
609
- </li>
610
- <li>
611
- <span class='name'>s</span>
612
- <span class='type'>
613
- (<tt>Number</tt>)
614
- </span>
615
- &mdash;
616
- <span class='desc'>The saturation</span>
617
- </li>
618
- <li>
619
- <span class='name'>v</span>
620
- <span class='type'>
621
- (<tt>Number</tt>)
622
- </span>
623
- &mdash;
624
- <span class='desc'>The value</span>
625
- </li>
626
- </ul>
627
- <h3>Returns:</h3>
628
- <ul class='return'>
629
- <li>
630
- <span class='type'></span>
631
- (<tt>Array</tt>)
632
- &mdash;
633
- <span class='desc'>The RGB representation</span>
634
- </li>
635
- </ul>
636
- </div>
637
- </div>
638
- <div class='method_details'>
639
- <p class='signature' id='rgbToXYZ-class'>
640
- + (Array) <strong>rgbToXYZ</strong>(r, g, b)
641
- </p>
642
- <div class='docstring'>
643
- <p>Converts a RGB color value to the XYZ color space. Formulas
644
- are based on <a href="http://en.wikipedia.org/wiki/SRGB">http://en.wikipedia.org/wiki/SRGB</a> assuming that
645
- RGB values are sRGB.</p><p>Assumes r, g, and b are contained in the set [0, 255] and
646
- returns x, y, and z.</p>
647
- </div>
648
- <div class='tags'>
649
- <h3>Parameters:</h3>
650
- <ul class='param'>
651
- <li>
652
- <span class='name'>r</span>
653
- <span class='type'>
654
- (<tt>Number</tt>)
655
- </span>
656
- &mdash;
657
- <span class='desc'>The red color value</span>
658
- </li>
659
- <li>
660
- <span class='name'>g</span>
661
- <span class='type'>
662
- (<tt>Number</tt>)
663
- </span>
664
- &mdash;
665
- <span class='desc'>The green color value</span>
666
- </li>
667
- <li>
668
- <span class='name'>b</span>
669
- <span class='type'>
670
- (<tt>Number</tt>)
671
- </span>
672
- &mdash;
673
- <span class='desc'>The blue color value</span>
674
- </li>
675
- </ul>
676
- <h3>Returns:</h3>
677
- <ul class='return'>
678
- <li>
679
- <span class='type'></span>
680
- (<tt>Array</tt>)
681
- &mdash;
682
- <span class='desc'>The XYZ representation</span>
683
- </li>
684
- </ul>
685
- </div>
686
- </div>
687
- <div class='method_details'>
688
- <p class='signature' id='xyzToRGB-class'>
689
- + (Array) <strong>xyzToRGB</strong>(x, y, z)
690
- </p>
691
- <div class='docstring'>
692
- <p>Converts a XYZ color value to the sRGB color space. Formulas
693
- are based on <a href="http://en.wikipedia.org/wiki/SRGB">http://en.wikipedia.org/wiki/SRGB</a> and the resulting
694
- RGB value will be in the sRGB color space.
695
- Assumes x, y and z values are whatever they are and returns
696
- r, g and b in the set [0, 255].</p>
697
- </div>
698
- <div class='tags'>
699
- <h3>Parameters:</h3>
700
- <ul class='param'>
701
- <li>
702
- <span class='name'>x</span>
703
- <span class='type'>
704
- (<tt>Number</tt>)
705
- </span>
706
- &mdash;
707
- <span class='desc'>The X value</span>
708
- </li>
709
- <li>
710
- <span class='name'>y</span>
711
- <span class='type'>
712
- (<tt>Number</tt>)
713
- </span>
714
- &mdash;
715
- <span class='desc'>The Y value</span>
716
- </li>
717
- <li>
718
- <span class='name'>z</span>
719
- <span class='type'>
720
- (<tt>Number</tt>)
721
- </span>
722
- &mdash;
723
- <span class='desc'>The Z value</span>
724
- </li>
725
- </ul>
726
- <h3>Returns:</h3>
727
- <ul class='return'>
728
- <li>
729
- <span class='type'></span>
730
- (<tt>Array</tt>)
731
- &mdash;
732
- <span class='desc'>The RGB representation</span>
733
- </li>
734
- </ul>
735
- </div>
736
- </div>
737
- <div class='method_details'>
738
- <p class='signature' id='xyzToLab-class'>
739
- + (Array) <strong>xyzToLab</strong>(x, y, z)
740
- <br>
741
- + (Array) <strong>xyzToLab</strong>(xyz)
742
- <br>
743
- </p>
744
- <div class='docstring'>
745
- <p>Converts a XYZ color value to the CIELAB color space. Formulas
746
- are based on <a href="http://en.wikipedia.org/wiki/Lab_color_space">http://en.wikipedia.org/wiki/Lab_color_space</a>
747
- The reference white point used in the conversion is D65.
748
- Assumes x, y and z values are whatever they are and returns
749
- L<em>, a</em> and b* values</p>
750
- </div>
751
- <div class='tags'>
752
- <h3>Returns:</h3>
753
- <ul class='return'>
754
- <li>
755
- <span class='type'></span>
756
- (<tt>Array</tt>)
757
- &mdash;
758
- <span class='desc'>The Lab representation</span>
759
- </li>
760
- </ul>
761
- <div class='overloads'>
762
- <h3>Overloads:</h3>
763
- <div class='overload'>
764
- <p class='signature'>
765
- + (Array) <strong>xyzToLab</strong>(x, y, z)
766
- </p>
767
- <div class='tags'>
768
- <h3>Parameters:</h3>
769
- <ul class='param'>
770
- <li>
771
- <span class='name'>x</span>
772
- <span class='type'>
773
- (<tt>Number</tt>)
774
- </span>
775
- &mdash;
776
- <span class='desc'>The X value</span>
777
- </li>
778
- <li>
779
- <span class='name'>y</span>
780
- <span class='type'>
781
- (<tt>Number</tt>)
782
- </span>
783
- &mdash;
784
- <span class='desc'>The Y value</span>
785
- </li>
786
- <li>
787
- <span class='name'>z</span>
788
- <span class='type'>
789
- (<tt>Number</tt>)
790
- </span>
791
- &mdash;
792
- <span class='desc'>The Z value</span>
793
- </li>
794
- </ul>
795
- </div>
796
- </div>
797
- <div class='overload'>
798
- <p class='signature'>
799
- + (Array) <strong>xyzToLab</strong>(xyz)
800
- </p>
801
- <div class='tags'>
802
- <h3>Parameters:</h3>
803
- <ul class='param'>
804
- <li>
805
- <span class='name'>xyz</span>
806
- <span class='type'>
807
- (<tt>Object</tt>)
808
- </span>
809
- &mdash;
810
- <span class='desc'>The XYZ object.</span>
811
- </li>
812
- </ul>
813
- <h3>
814
- Options Hash:
815
- (xyz):
816
- </h3>
817
- <ul class='options'>
818
- <li>
819
- <span class='name'>x</span>
820
- <span class='type'>
821
- (<tt>Number</tt>)
822
- </span>
823
- &mdash;
824
- <span class='desc'>The X value.</span>
825
- </li>
826
- <li>
827
- <span class='name'>y</span>
828
- <span class='type'>
829
- (<tt>Number</tt>)
830
- </span>
831
- &mdash;
832
- <span class='desc'>The Y value.</span>
833
- </li>
834
- <li>
835
- <span class='name'>z</span>
836
- <span class='type'>
837
- (<tt>Number</tt>)
838
- </span>
839
- &mdash;
840
- <span class='desc'>The z value.</span>
841
- </li>
842
- </ul>
843
- </div>
844
- </div>
845
- </div>
846
- </div>
847
- </div>
848
- <div class='method_details'>
849
- <p class='signature' id='labToXYZ-class'>
850
- + (Array) <strong>labToXYZ</strong>(l, a, b)
851
- <br>
852
- + (Array) <strong>labToXYZ</strong>(lab)
853
- <br>
854
- </p>
855
- <div class='docstring'>
856
- <p>Converts a L<em>, a</em>, b* color values from the CIELAB color space
857
- to the XYZ color space. Formulas are based on
858
- <a href="http://en.wikipedia.org/wiki/Lab_color_space">http://en.wikipedia.org/wiki/Lab_color_space</a></p><p>The reference white point used in the conversion is D65.
859
- Assumes L<em>, a</em> and b* values are whatever they are and returns
860
- x, y and z values.</p>
861
- </div>
862
- <div class='tags'>
863
- <h3>Returns:</h3>
864
- <ul class='return'>
865
- <li>
866
- <span class='type'></span>
867
- (<tt>Array</tt>)
868
- &mdash;
869
- <span class='desc'>The XYZ representation</span>
870
- </li>
871
- </ul>
872
- <div class='overloads'>
873
- <h3>Overloads:</h3>
874
- <div class='overload'>
875
- <p class='signature'>
876
- + (Array) <strong>labToXYZ</strong>(l, a, b)
877
- </p>
878
- <div class='tags'>
879
- <h3>Parameters:</h3>
880
- <ul class='param'>
881
- <li>
882
- <span class='name'>l</span>
883
- <span class='type'>
884
- (<tt>Number</tt>)
885
- </span>
886
- &mdash;
887
- <span class='desc'>The L* value</span>
888
- </li>
889
- <li>
890
- <span class='name'>a</span>
891
- <span class='type'>
892
- (<tt>Number</tt>)
893
- </span>
894
- &mdash;
895
- <span class='desc'>The a* value</span>
896
- </li>
897
- <li>
898
- <span class='name'>b</span>
899
- <span class='type'>
900
- (<tt>Number</tt>)
901
- </span>
902
- &mdash;
903
- <span class='desc'>The b* value</span>
904
- </li>
905
- </ul>
906
- </div>
907
- </div>
908
- <div class='overload'>
909
- <p class='signature'>
910
- + (Array) <strong>labToXYZ</strong>(lab)
911
- </p>
912
- <div class='tags'>
913
- <h3>Parameters:</h3>
914
- <ul class='param'>
915
- <li>
916
- <span class='name'>lab</span>
917
- <span class='type'>
918
- (<tt>Object</tt>)
919
- </span>
920
- &mdash;
921
- <span class='desc'>The LAB values</span>
922
- </li>
923
- </ul>
924
- <h3>
925
- Options Hash:
926
- (lab):
927
- </h3>
928
- <ul class='options'>
929
- <li>
930
- <span class='name'>l</span>
931
- <span class='type'>
932
- (<tt>Number</tt>)
933
- </span>
934
- &mdash;
935
- <span class='desc'>The L* value.</span>
936
- </li>
937
- <li>
938
- <span class='name'>a</span>
939
- <span class='type'>
940
- (<tt>Number</tt>)
941
- </span>
942
- &mdash;
943
- <span class='desc'>The a* value.</span>
944
- </li>
945
- <li>
946
- <span class='name'>b</span>
947
- <span class='type'>
948
- (<tt>Number</tt>)
949
- </span>
950
- &mdash;
951
- <span class='desc'>The b* value.</span>
952
- </li>
953
- </ul>
954
- </div>
955
- </div>
956
- </div>
957
- </div>
958
- </div>
959
- <div class='method_details'>
960
- <p class='signature' id='rgbToLab-class'>
961
- + (void) <strong>rgbToLab</strong>(r, g, b)
962
- </p>
963
- <div class='docstring'>
964
- <p>Converts L<em>, a</em>, b* back to RGB values.</p>
965
- </div>
966
- <div class='tags'>
967
- <h3>See also:</h3>
968
- <ul class='see'>
969
- <li>
970
- Convert.rgbToXYZ
971
- </li>
972
- <li>
973
- Convert.xyzToLab
974
- </li>
975
- </ul>
976
- </div>
977
- </div>
978
- <div class='method_details'>
979
- <p class='signature' id='labToRGB-class'>
980
- + (void) <strong>labToRGB</strong>(l, a, b)
981
- </p>
982
- <div class='tags'>
983
- </div>
984
- </div>
985
- </div>
986
- </div>
987
- <div id='footer'>
988
- Generated on
989
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
990
- by
991
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
992
- v1.7.0
993
- (Node.js v0.10.21).
994
- &#10034;
995
- Press Ctrl-h to see the keyboard shortcuts
996
- &#10034;
997
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
998
- &#10034;
999
- <a href='https://mksoft.ch'>mksoft.ch</a>
1000
- </div>
1001
- </body>
1002
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/Caman/Event.html DELETED
@@ -1,288 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <a href='../../classes/Caman.html' title='Caman'>Caman</a>
19
- &raquo;
20
- <span class='title'>Event</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- Class:
111
- Caman.Event
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>src&#47;core&#47;event.coffee</td>
117
- </tr>
118
- </table>
119
- <h2>Overview</h2>
120
- <div class='docstring'>
121
- <p>Event system that can be used to register callbacks that get fired
122
- during certain times in the render process.</p>
123
- </div>
124
- <div class='tags'>
125
- </div>
126
- <h2>Class Method Summary</h2>
127
- <ul class='summary'>
128
- <li>
129
- <span class='signature'>
130
- <a href='#trigger-class'>
131
- + (void) <strong>trigger</strong>(target, type, data = null)
132
- </a>
133
- </span>
134
- <span class='desc'>
135
- Trigger an event.
136
- </span>
137
- </li>
138
- <li>
139
- <span class='signature'>
140
- <a href='#listen-class'>
141
- + (void) <strong>listen</strong>(target, type, fn)
142
- </a>
143
- </span>
144
- <span class='desc'>
145
- Listen for an event.
146
- </span>
147
- </li>
148
- </ul>
149
- <h2>Class Method Details</h2>
150
- <div class='methods'>
151
- <div class='method_details'>
152
- <p class='signature' id='trigger-class'>
153
- + (void) <strong>trigger</strong>(target, type, data = null)
154
- </p>
155
- <div class='docstring'>
156
- <p>Trigger an event.</p>
157
- </div>
158
- <div class='tags'>
159
- <h3>Parameters:</h3>
160
- <ul class='param'>
161
- <li>
162
- <span class='name'>target</span>
163
- <span class='type'>
164
- (<tt><a href='../../classes/Caman.html'>Caman</a></tt>)
165
- </span>
166
- &mdash;
167
- <span class='desc'>Instance of Caman emitting the event.</span>
168
- </li>
169
- <li>
170
- <span class='name'>type</span>
171
- <span class='type'>
172
- (<tt>String</tt>)
173
- </span>
174
- &mdash;
175
- <span class='desc'>The event type.</span>
176
- </li>
177
- <li>
178
- <span class='name'>data</span>
179
- <span class='type'>
180
- (<tt>Object</tt>)
181
- </span>
182
- &mdash;
183
- <span class='desc'>Extra data to send with the event.</span>
184
- </li>
185
- </ul>
186
- </div>
187
- </div>
188
- <div class='method_details'>
189
- <p class='signature' id='listen-class'>
190
- + (void) <strong>listen</strong>(target, type, fn)
191
- <br>
192
- + (void) <strong>listen</strong>(type, fn)
193
- <br>
194
- </p>
195
- <div class='docstring'>
196
- <p>Listen for an event. Optionally bind the listen to a single instance
197
- or all instances.</p>
198
- </div>
199
- <div class='tags'>
200
- <div class='overloads'>
201
- <h3>Overloads:</h3>
202
- <div class='overload'>
203
- <p class='signature'>
204
- + (void) <strong>listen</strong>(target, type, fn)
205
- </p>
206
- <div class='docstring'>
207
- <p>Listen for events emitted from a particular Caman instance.</p>
208
- </div>
209
- <div class='tags'>
210
- <h3>Parameters:</h3>
211
- <ul class='param'>
212
- <li>
213
- <span class='name'>target</span>
214
- <span class='type'>
215
- (<tt><a href='../../classes/Caman.html'>Caman</a></tt>)
216
- </span>
217
- &mdash;
218
- <span class='desc'>The instance to listen to.</span>
219
- </li>
220
- <li>
221
- <span class='name'>type</span>
222
- <span class='type'>
223
- (<tt>String</tt>)
224
- </span>
225
- &mdash;
226
- <span class='desc'>The type of event to listen for.</span>
227
- </li>
228
- <li>
229
- <span class='name'>fn</span>
230
- <span class='type'>
231
- (<tt>Function</tt>)
232
- </span>
233
- &mdash;
234
- <span class='desc'>The function to call when the event occurs.</span>
235
- </li>
236
- </ul>
237
- </div>
238
- </div>
239
- <div class='overload'>
240
- <p class='signature'>
241
- + (void) <strong>listen</strong>(type, fn)
242
- </p>
243
- <div class='docstring'>
244
- <p>Listen for an event from all Caman instances.</p>
245
- </div>
246
- <div class='tags'>
247
- <h3>Parameters:</h3>
248
- <ul class='param'>
249
- <li>
250
- <span class='name'>type</span>
251
- <span class='type'>
252
- (<tt>String</tt>)
253
- </span>
254
- &mdash;
255
- <span class='desc'>The type of event to listen for.</span>
256
- </li>
257
- <li>
258
- <span class='name'>fn</span>
259
- <span class='type'>
260
- (<tt>Function</tt>)
261
- </span>
262
- &mdash;
263
- <span class='desc'>The function to call when the event occurs.</span>
264
- </li>
265
- </ul>
266
- </div>
267
- </div>
268
- </div>
269
- </div>
270
- </div>
271
- </div>
272
- </div>
273
- <div id='footer'>
274
- Generated on
275
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
276
- by
277
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
278
- v1.7.0
279
- (Node.js v0.10.21).
280
- &#10034;
281
- Press Ctrl-h to see the keyboard shortcuts
282
- &#10034;
283
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
284
- &#10034;
285
- <a href='https://mksoft.ch'>mksoft.ch</a>
286
- </div>
287
- </body>
288
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/Caman/Filter.html DELETED
@@ -1,186 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <a href='../../classes/Caman.html' title='Caman'>Caman</a>
19
- &raquo;
20
- <span class='title'>Filter</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- Class:
111
- Caman.Filter
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>src&#47;core&#47;filter.coffee</td>
117
- </tr>
118
- </table>
119
- <h2>Overview</h2>
120
- <div class='docstring'>
121
- <p>Responsible for registering and storing all of the filters.</p>
122
- </div>
123
- <div class='tags'>
124
- </div>
125
- <h2>Class Method Summary</h2>
126
- <ul class='summary'>
127
- <li>
128
- <span class='signature'>
129
- <a href='#register-class'>
130
- + (void) <strong>register</strong>(name, filterFunc)
131
- </a>
132
- </span>
133
- <span class='desc'>
134
- Registers a filter function.
135
- </span>
136
- </li>
137
- </ul>
138
- <h2>Class Method Details</h2>
139
- <div class='methods'>
140
- <div class='method_details'>
141
- <p class='signature' id='register-class'>
142
- + (void) <strong>register</strong>(name, filterFunc)
143
- </p>
144
- <div class='docstring'>
145
- <p>Registers a filter function.</p>
146
- </div>
147
- <div class='tags'>
148
- <h3>Parameters:</h3>
149
- <ul class='param'>
150
- <li>
151
- <span class='name'>name</span>
152
- <span class='type'>
153
- (<tt>String</tt>)
154
- </span>
155
- &mdash;
156
- <span class='desc'>The name of the filter.</span>
157
- </li>
158
- <li>
159
- <span class='name'>filterFunc</span>
160
- <span class='type'>
161
- (<tt>Function</tt>)
162
- </span>
163
- &mdash;
164
- <span class='desc'>The filter function.</span>
165
- </li>
166
- </ul>
167
- </div>
168
- </div>
169
- </div>
170
- </div>
171
- <div id='footer'>
172
- Generated on
173
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
174
- by
175
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
176
- v1.7.0
177
- (Node.js v0.10.21).
178
- &#10034;
179
- Press Ctrl-h to see the keyboard shortcuts
180
- &#10034;
181
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
182
- &#10034;
183
- <a href='https://mksoft.ch'>mksoft.ch</a>
184
- </div>
185
- </body>
186
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/Caman/IO.html DELETED
@@ -1,378 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <a href='../../classes/Caman.html' title='Caman'>Caman</a>
19
- &raquo;
20
- <span class='title'>IO</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- Class:
111
- Caman.IO
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>src&#47;core&#47;io.coffee</td>
117
- </tr>
118
- </table>
119
- <h2>Overview</h2>
120
- <div class='docstring'>
121
- <p>Various I/O based operations</p>
122
- </div>
123
- <div class='tags'>
124
- </div>
125
- <h2>Class Method Summary</h2>
126
- <ul class='summary'>
127
- <li>
128
- <span class='signature'>
129
- <a href='#isRemote-class'>
130
- + (Boolean) <strong>isRemote</strong>(img)
131
- </a>
132
- </span>
133
- <span class='desc'>
134
- Is the given URL remote? If a cross-origin setting is set, we assume you have CORS properly configured.
135
- </span>
136
- </li>
137
- <li>
138
- <span class='signature'>
139
- <a href='#corsEnabled-class'>
140
- + (Boolean) <strong>corsEnabled</strong>(img)
141
- </a>
142
- </span>
143
- <span class='desc'>
144
- Given an image, we check to see if a CORS policy has been defined.
145
- </span>
146
- </li>
147
- <li>
148
- <span class='signature'>
149
- <a href='#isURLRemote-class'>
150
- + (Boolean) <strong>isURLRemote</strong>(url)
151
- </a>
152
- </span>
153
- <span class='desc'>
154
- Does the given URL exist on a different domain than the current one? This is done by comparing the URL to <code>document.domain</code>.
155
- </span>
156
- </li>
157
- <li>
158
- <span class='signature'>
159
- <a href='#remoteCheck-class'>
160
- + (String) <strong>remoteCheck</strong>(src)
161
- </a>
162
- </span>
163
- <span class='desc'>
164
- Checks to see if the URL is remote, and if there is a proxy defined, it
165
- </span>
166
- </li>
167
- <li>
168
- <span class='signature'>
169
- <a href='#proxyUrl-class'>
170
- + (String) <strong>proxyUrl</strong>(src)
171
- </a>
172
- </span>
173
- <span class='desc'>
174
- Given a URL, get the proxy URL for it.
175
- </span>
176
- </li>
177
- <li>
178
- <span class='signature'>
179
- <a href='#useProxy-class'>
180
- + (String) <strong>useProxy</strong>(lang)
181
- </a>
182
- </span>
183
- <span class='desc'>
184
- Shortcut for using one of the bundled proxies.
185
- </span>
186
- </li>
187
- </ul>
188
- <h2>Class Method Details</h2>
189
- <div class='methods'>
190
- <div class='method_details'>
191
- <p class='signature' id='isRemote-class'>
192
- + (Boolean) <strong>isRemote</strong>(img)
193
- </p>
194
- <div class='docstring'>
195
- <p>Is the given URL remote?
196
- If a cross-origin setting is set, we assume you have CORS
197
- properly configured.</p>
198
- </div>
199
- <div class='tags'>
200
- <h3>Parameters:</h3>
201
- <ul class='param'>
202
- <li>
203
- <span class='name'>img</span>
204
- <span class='type'>
205
- (<tt>DOMObject</tt>)
206
- </span>
207
- &mdash;
208
- <span class='desc'>The image to check.</span>
209
- </li>
210
- </ul>
211
- <h3>Returns:</h3>
212
- <ul class='return'>
213
- <li>
214
- <span class='type'></span><tt>Boolean</tt></li>
215
- </ul>
216
- </div>
217
- </div>
218
- <div class='method_details'>
219
- <p class='signature' id='corsEnabled-class'>
220
- + (Boolean) <strong>corsEnabled</strong>(img)
221
- </p>
222
- <div class='docstring'>
223
- <p>Given an image, we check to see if a CORS policy has been defined.</p>
224
- </div>
225
- <div class='tags'>
226
- <h3>Parameters:</h3>
227
- <ul class='param'>
228
- <li>
229
- <span class='name'>img</span>
230
- <span class='type'>
231
- (<tt>DOMObject</tt>)
232
- </span>
233
- &mdash;
234
- <span class='desc'>The image to check.</span>
235
- </li>
236
- </ul>
237
- <h3>Returns:</h3>
238
- <ul class='return'>
239
- <li>
240
- <span class='type'></span><tt>Boolean</tt></li>
241
- </ul>
242
- </div>
243
- </div>
244
- <div class='method_details'>
245
- <p class='signature' id='isURLRemote-class'>
246
- + (Boolean) <strong>isURLRemote</strong>(url)
247
- </p>
248
- <div class='docstring'>
249
- <p>Does the given URL exist on a different domain than the current one?
250
- This is done by comparing the URL to <code>document.domain</code>.</p>
251
- </div>
252
- <div class='tags'>
253
- <h3>Parameters:</h3>
254
- <ul class='param'>
255
- <li>
256
- <span class='name'>url</span>
257
- <span class='type'>
258
- (<tt>String</tt>)
259
- </span>
260
- &mdash;
261
- <span class='desc'>The URL to check.</span>
262
- </li>
263
- </ul>
264
- <h3>Returns:</h3>
265
- <ul class='return'>
266
- <li>
267
- <span class='type'></span><tt>Boolean</tt></li>
268
- </ul>
269
- </div>
270
- </div>
271
- <div class='method_details'>
272
- <p class='signature' id='remoteCheck-class'>
273
- + (String) <strong>remoteCheck</strong>(src)
274
- </p>
275
- <div class='docstring'>
276
- <p>Checks to see if the URL is remote, and if there is a proxy defined, it</p>
277
- </div>
278
- <div class='tags'>
279
- <h3>Parameters:</h3>
280
- <ul class='param'>
281
- <li>
282
- <span class='name'>src</span>
283
- <span class='type'>
284
- (<tt>String</tt>)
285
- </span>
286
- &mdash;
287
- <span class='desc'>The URL to check.</span>
288
- </li>
289
- </ul>
290
- <h3>Returns:</h3>
291
- <ul class='return'>
292
- <li>
293
- <span class='type'></span>
294
- (<tt>String</tt>)
295
- &mdash;
296
- <span class='desc'>The proxy URL if the image is remote. Nothing otherwise.</span>
297
- </li>
298
- </ul>
299
- </div>
300
- </div>
301
- <div class='method_details'>
302
- <p class='signature' id='proxyUrl-class'>
303
- + (String) <strong>proxyUrl</strong>(src)
304
- </p>
305
- <div class='docstring'>
306
- <p>Given a URL, get the proxy URL for it.</p>
307
- </div>
308
- <div class='tags'>
309
- <h3>Parameters:</h3>
310
- <ul class='param'>
311
- <li>
312
- <span class='name'>src</span>
313
- <span class='type'>
314
- (<tt>String</tt>)
315
- </span>
316
- &mdash;
317
- <span class='desc'>The URL to proxy.</span>
318
- </li>
319
- </ul>
320
- <h3>Returns:</h3>
321
- <ul class='return'>
322
- <li>
323
- <span class='type'></span>
324
- (<tt>String</tt>)
325
- &mdash;
326
- <span class='desc'>The proxy URL.</span>
327
- </li>
328
- </ul>
329
- </div>
330
- </div>
331
- <div class='method_details'>
332
- <p class='signature' id='useProxy-class'>
333
- + (String) <strong>useProxy</strong>(lang)
334
- </p>
335
- <div class='docstring'>
336
- <p>Shortcut for using one of the bundled proxies.</p>
337
- </div>
338
- <div class='tags'>
339
- <h3>Parameters:</h3>
340
- <ul class='param'>
341
- <li>
342
- <span class='name'>lang</span>
343
- <span class='type'>
344
- (<tt>String</tt>)
345
- </span>
346
- &mdash;
347
- <span class='desc'>String identifier for the proxy script language.</span>
348
- </li>
349
- </ul>
350
- <h3>Returns:</h3>
351
- <ul class='return'>
352
- <li>
353
- <span class='type'></span>
354
- (<tt>String</tt>)
355
- &mdash;
356
- <span class='desc'>A proxy URL.</span>
357
- </li>
358
- </ul>
359
- </div>
360
- </div>
361
- </div>
362
- </div>
363
- <div id='footer'>
364
- Generated on
365
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
366
- by
367
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
368
- v1.7.0
369
- (Node.js v0.10.21).
370
- &#10034;
371
- Press Ctrl-h to see the keyboard shortcuts
372
- &#10034;
373
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
374
- &#10034;
375
- <a href='https://mksoft.ch'>mksoft.ch</a>
376
- </div>
377
- </body>
378
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/Caman/Layer.html DELETED
@@ -1,318 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <a href='../../classes/Caman.html' title='Caman'>Caman</a>
19
- &raquo;
20
- <span class='title'>Layer</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- Class:
111
- Caman.Layer
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>src&#47;core&#47;layer.coffee</td>
117
- </tr>
118
- </table>
119
- <h2>Overview</h2>
120
- <div class='docstring'>
121
- <p>The entire layering system for Caman resides in this file. Layers get their own canvasLayer
122
- objectwhich is created when newLayer() is called. For extensive information regarding the
123
- specifics of howthe layering system works, there is an in-depth blog post on this very topic.
124
- Instead of copying the entirety of that post, I&#39;ll simply point you towards the
125
- <a href="http://blog.meltingice.net/programming/implementing-layers-camanjs">blog link</a>.</p><p>However, the gist of the layering system is that, for each layer, it creates a new canvas
126
- element and then either copies the parent layer&#39;s data or applies a solid color to the new
127
- layer. After some (optional) effects are applied, the layer is blended back into the parent
128
- canvas layer using one of many different blending algorithms.</p><p>You can also load an image (local or remote, with a proxy) into a canvas layer, which is useful
129
- if you want to add textures to an image.</p>
130
- </div>
131
- <div class='tags'>
132
- </div>
133
- <h2>Instance Method Summary</h2>
134
- <ul class='summary'>
135
- <li>
136
- <span class='signature'>
137
- <a href='#constructor-instance'>
138
- - (void) <strong>constructor</strong>(c)
139
- </a>
140
- </span>
141
- <span class='constructor note title'>Constructor</span>
142
- <span class='desc'>
143
-
144
- </span>
145
- </li>
146
- <li>
147
- <span class='signature'>
148
- <a href='#newLayer-instance'>
149
- - (void) <strong>newLayer</strong>(cb)
150
- </a>
151
- </span>
152
- <span class='desc'>
153
- If you want to create nested layers
154
- </span>
155
- </li>
156
- <li>
157
- <span class='signature'>
158
- <a href='#setBlendingMode-instance'>
159
- - (void) <strong>setBlendingMode</strong>(mode)
160
- </a>
161
- </span>
162
- <span class='desc'>
163
- Sets the blending mode of this layer.
164
- </span>
165
- </li>
166
- <li>
167
- <span class='signature'>
168
- <a href='#opacity-instance'>
169
- - (void) <strong>opacity</strong>(opacity)
170
- </a>
171
- </span>
172
- <span class='desc'>
173
- Sets the opacity of this layer.
174
- </span>
175
- </li>
176
- <li>
177
- <span class='signature'>
178
- <a href='#copyParent-instance'>
179
- - (void) <strong>copyParent</strong>()
180
- </a>
181
- </span>
182
- <span class='desc'>
183
- Copies the contents of the parent layer to this layer
184
- </span>
185
- </li>
186
- <li>
187
- <span class='signature'>
188
- <a href='#fillColor-instance'>
189
- - (void) <strong>fillColor</strong>()
190
- </a>
191
- </span>
192
- <span class='desc'>
193
- Fills this layer with a single color
194
- </span>
195
- </li>
196
- <li>
197
- <span class='signature'>
198
- <a href='#overlayImage-instance'>
199
- - (void) <strong>overlayImage</strong>(image)
200
- </a>
201
- </span>
202
- <span class='desc'>
203
- Loads and overlays an image onto this layer
204
- </span>
205
- </li>
206
- <li>
207
- <span class='signature'>
208
- <a href='#applyToParent-instance'>
209
- - (void) <strong>applyToParent</strong>()
210
- </a>
211
- </span>
212
- <span class='desc'>
213
- Takes the contents of this layer and applies them to the parent layer at render time.
214
- </span>
215
- </li>
216
- </ul>
217
- <h2>Constructor Details</h2>
218
- <div class='methods'>
219
- <div class='method_details'>
220
- <p class='signature' id='constructor-instance'>
221
- - (void) <strong>constructor</strong>(c)
222
- </p>
223
- <div class='tags'>
224
- </div>
225
- </div>
226
- </div>
227
- <h2>Instance Method Details</h2>
228
- <div class='methods'>
229
- <div class='method_details'>
230
- <p class='signature' id='newLayer-instance'>
231
- - (void) <strong>newLayer</strong>(cb)
232
- </p>
233
- <div class='docstring'>
234
- <p>If you want to create nested layers</p>
235
- </div>
236
- <div class='tags'>
237
- </div>
238
- </div>
239
- <div class='method_details'>
240
- <p class='signature' id='setBlendingMode-instance'>
241
- - (void) <strong>setBlendingMode</strong>(mode)
242
- </p>
243
- <div class='docstring'>
244
- <p>Sets the blending mode of this layer. The mode is the name of a blender function.</p>
245
- </div>
246
- <div class='tags'>
247
- </div>
248
- </div>
249
- <div class='method_details'>
250
- <p class='signature' id='opacity-instance'>
251
- - (void) <strong>opacity</strong>(opacity)
252
- </p>
253
- <div class='docstring'>
254
- <p>Sets the opacity of this layer. This affects how much of this layer is applied to the parent
255
- layer at render time.</p>
256
- </div>
257
- <div class='tags'>
258
- </div>
259
- </div>
260
- <div class='method_details'>
261
- <p class='signature' id='copyParent-instance'>
262
- - (void) <strong>copyParent</strong>()
263
- </p>
264
- <div class='docstring'>
265
- <p>Copies the contents of the parent layer to this layer</p>
266
- </div>
267
- <div class='tags'>
268
- </div>
269
- </div>
270
- <div class='method_details'>
271
- <p class='signature' id='fillColor-instance'>
272
- - (void) <strong>fillColor</strong>()
273
- </p>
274
- <div class='docstring'>
275
- <p>Fills this layer with a single color</p>
276
- </div>
277
- <div class='tags'>
278
- </div>
279
- </div>
280
- <div class='method_details'>
281
- <p class='signature' id='overlayImage-instance'>
282
- - (void) <strong>overlayImage</strong>(image)
283
- </p>
284
- <div class='docstring'>
285
- <p>Loads and overlays an image onto this layer</p>
286
- </div>
287
- <div class='tags'>
288
- </div>
289
- </div>
290
- <div class='method_details'>
291
- <p class='signature' id='applyToParent-instance'>
292
- - (void) <strong>applyToParent</strong>()
293
- </p>
294
- <div class='docstring'>
295
- <p>Takes the contents of this layer and applies them to the parent layer at render time. This
296
- should never be called explicitly by the user.</p>
297
- </div>
298
- <div class='tags'>
299
- </div>
300
- </div>
301
- </div>
302
- </div>
303
- <div id='footer'>
304
- Generated on
305
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
306
- by
307
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
308
- v1.7.0
309
- (Node.js v0.10.21).
310
- &#10034;
311
- Press Ctrl-h to see the keyboard shortcuts
312
- &#10034;
313
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
314
- &#10034;
315
- <a href='https://mksoft.ch'>mksoft.ch</a>
316
- </div>
317
- </body>
318
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/Caman/Logger.html DELETED
@@ -1,165 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <a href='../../classes/Caman.html' title='Caman'>Caman</a>
19
- &raquo;
20
- <span class='title'>Logger</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- Class:
111
- Caman.Logger
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>src&#47;core&#47;logger.coffee</td>
117
- </tr>
118
- </table>
119
- <h2>Overview</h2>
120
- <div class='docstring'>
121
- <p>Simple console logger class that can be toggled on and off based on Caman.DEBUG</p>
122
- </div>
123
- <div class='tags'>
124
- </div>
125
- <h2>Instance Method Summary</h2>
126
- <ul class='summary'>
127
- <li>
128
- <span class='signature'>
129
- <a href='#constructor-instance'>
130
- - (void) <strong>constructor</strong>()
131
- </a>
132
- </span>
133
- <span class='constructor note title'>Constructor</span>
134
- <span class='desc'>
135
-
136
- </span>
137
- </li>
138
- </ul>
139
- <h2>Constructor Details</h2>
140
- <div class='methods'>
141
- <div class='method_details'>
142
- <p class='signature' id='constructor-instance'>
143
- - (void) <strong>constructor</strong>()
144
- </p>
145
- <div class='tags'>
146
- </div>
147
- </div>
148
- </div>
149
- </div>
150
- <div id='footer'>
151
- Generated on
152
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
153
- by
154
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
155
- v1.7.0
156
- (Node.js v0.10.21).
157
- &#10034;
158
- Press Ctrl-h to see the keyboard shortcuts
159
- &#10034;
160
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
161
- &#10034;
162
- <a href='https://mksoft.ch'>mksoft.ch</a>
163
- </div>
164
- </body>
165
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/Caman/Pixel.html DELETED
@@ -1,379 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <a href='../../classes/Caman.html' title='Caman'>Caman</a>
19
- &raquo;
20
- <span class='title'>Pixel</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- Class:
111
- Caman.Pixel
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>src&#47;core&#47;pixel.coffee</td>
117
- </tr>
118
- </table>
119
- <h2>Overview</h2>
120
- <div class='docstring'>
121
- <p>Represents a single Pixel in an image.</p>
122
- </div>
123
- <div class='tags'>
124
- </div>
125
- <h2>Class Method Summary</h2>
126
- <ul class='summary'>
127
- <li>
128
- <span class='signature'>
129
- <a href='#coordinatesToLocation-class'>
130
- + (void) <strong>coordinatesToLocation</strong>(x, y, width)
131
- </a>
132
- </span>
133
- <span class='desc'>
134
-
135
- </span>
136
- </li>
137
- <li>
138
- <span class='signature'>
139
- <a href='#locationToCoordinates-class'>
140
- + (void) <strong>locationToCoordinates</strong>(loc, width)
141
- </a>
142
- </span>
143
- <span class='desc'>
144
-
145
- </span>
146
- </li>
147
- </ul>
148
- <h2>Instance Method Summary</h2>
149
- <ul class='summary'>
150
- <li>
151
- <span class='signature'>
152
- <a href='#constructor-instance'>
153
- - (void) <strong>constructor</strong>(r = 0, g = 0, b = 0, a = 255, c = null)
154
- </a>
155
- </span>
156
- <span class='constructor note title'>Constructor</span>
157
- <span class='desc'>
158
-
159
- </span>
160
- </li>
161
- <li>
162
- <span class='signature'>
163
- <a href='#setContext-instance'>
164
- - (void) <strong>setContext</strong>(c)
165
- </a>
166
- </span>
167
- <span class='desc'>
168
-
169
- </span>
170
- </li>
171
- <li>
172
- <span class='signature'>
173
- <a href='#locationXY-instance'>
174
- - (void) <strong>locationXY</strong>()
175
- </a>
176
- </span>
177
- <span class='desc'>
178
- Retrieves the X, Y location of the current pixel.
179
- </span>
180
- </li>
181
- <li>
182
- <span class='signature'>
183
- <a href='#pixelAtLocation-instance'>
184
- - (void) <strong>pixelAtLocation</strong>(loc)
185
- </a>
186
- </span>
187
- <span class='desc'>
188
-
189
- </span>
190
- </li>
191
- <li>
192
- <span class='signature'>
193
- <a href='#getPixelRelative-instance'>
194
- - (void) <strong>getPixelRelative</strong>(horiz, vert)
195
- </a>
196
- </span>
197
- <span class='desc'>
198
- Returns an RGBA object for a pixel whose location is specified in relation to the current pixel.
199
- </span>
200
- </li>
201
- <li>
202
- <span class='signature'>
203
- <a href='#putPixelRelative-instance'>
204
- - (void) <strong>putPixelRelative</strong>(horiz, vert, rgba)
205
- </a>
206
- </span>
207
- <span class='desc'>
208
- The counterpart to getPixelRelative, this updates the value of a pixel whose location is specified in relation to the current pixel.
209
- </span>
210
- </li>
211
- <li>
212
- <span class='signature'>
213
- <a href='#getPixel-instance'>
214
- - (void) <strong>getPixel</strong>(x, y)
215
- </a>
216
- </span>
217
- <span class='desc'>
218
- Gets an RGBA object for an arbitrary pixel in the canvas specified by absolute X, Y coordinates
219
- </span>
220
- </li>
221
- <li>
222
- <span class='signature'>
223
- <a href='#putPixel-instance'>
224
- - (void) <strong>putPixel</strong>(x, y, rgba)
225
- </a>
226
- </span>
227
- <span class='desc'>
228
- Updates the pixel at the given X, Y coordinate
229
- </span>
230
- </li>
231
- <li>
232
- <span class='signature'>
233
- <a href='#toString-instance'>
234
- - (void) <strong>toString</strong>()
235
- </a>
236
- </span>
237
- <span class='desc'>
238
-
239
- </span>
240
- </li>
241
- <li>
242
- <span class='signature'>
243
- <a href='#toHex-instance'>
244
- - (void) <strong>toHex</strong>(includeAlpha = false)
245
- </a>
246
- </span>
247
- <span class='desc'>
248
-
249
- </span>
250
- </li>
251
- </ul>
252
- <h2>Class Method Details</h2>
253
- <div class='methods'>
254
- <div class='method_details'>
255
- <p class='signature' id='coordinatesToLocation-class'>
256
- + (void) <strong>coordinatesToLocation</strong>(x, y, width)
257
- </p>
258
- <div class='tags'>
259
- </div>
260
- </div>
261
- <div class='method_details'>
262
- <p class='signature' id='locationToCoordinates-class'>
263
- + (void) <strong>locationToCoordinates</strong>(loc, width)
264
- </p>
265
- <div class='tags'>
266
- </div>
267
- </div>
268
- </div>
269
- <h2>Constructor Details</h2>
270
- <div class='methods'>
271
- <div class='method_details'>
272
- <p class='signature' id='constructor-instance'>
273
- - (void) <strong>constructor</strong>(r = 0, g = 0, b = 0, a = 255, c = null)
274
- </p>
275
- <div class='tags'>
276
- </div>
277
- </div>
278
- </div>
279
- <h2>Instance Method Details</h2>
280
- <div class='methods'>
281
- <div class='method_details'>
282
- <p class='signature' id='setContext-instance'>
283
- - (void) <strong>setContext</strong>(c)
284
- </p>
285
- <div class='tags'>
286
- </div>
287
- </div>
288
- <div class='method_details'>
289
- <p class='signature' id='locationXY-instance'>
290
- - (void) <strong>locationXY</strong>()
291
- </p>
292
- <div class='docstring'>
293
- <p>Retrieves the X, Y location of the current pixel. The origin is at the bottom left corner of
294
- the image, like a normal coordinate system.</p>
295
- </div>
296
- <div class='tags'>
297
- </div>
298
- </div>
299
- <div class='method_details'>
300
- <p class='signature' id='pixelAtLocation-instance'>
301
- - (void) <strong>pixelAtLocation</strong>(loc)
302
- </p>
303
- <div class='tags'>
304
- </div>
305
- </div>
306
- <div class='method_details'>
307
- <p class='signature' id='getPixelRelative-instance'>
308
- - (void) <strong>getPixelRelative</strong>(horiz, vert)
309
- </p>
310
- <div class='docstring'>
311
- <p>Returns an RGBA object for a pixel whose location is specified in relation to the current
312
- pixel.</p>
313
- </div>
314
- <div class='tags'>
315
- </div>
316
- </div>
317
- <div class='method_details'>
318
- <p class='signature' id='putPixelRelative-instance'>
319
- - (void) <strong>putPixelRelative</strong>(horiz, vert, rgba)
320
- </p>
321
- <div class='docstring'>
322
- <p>The counterpart to getPixelRelative, this updates the value of a pixel whose location is
323
- specified in relation to the current pixel.</p>
324
- </div>
325
- <div class='tags'>
326
- </div>
327
- </div>
328
- <div class='method_details'>
329
- <p class='signature' id='getPixel-instance'>
330
- - (void) <strong>getPixel</strong>(x, y)
331
- </p>
332
- <div class='docstring'>
333
- <p>Gets an RGBA object for an arbitrary pixel in the canvas specified by absolute X, Y coordinates</p>
334
- </div>
335
- <div class='tags'>
336
- </div>
337
- </div>
338
- <div class='method_details'>
339
- <p class='signature' id='putPixel-instance'>
340
- - (void) <strong>putPixel</strong>(x, y, rgba)
341
- </p>
342
- <div class='docstring'>
343
- <p>Updates the pixel at the given X, Y coordinate</p>
344
- </div>
345
- <div class='tags'>
346
- </div>
347
- </div>
348
- <div class='method_details'>
349
- <p class='signature' id='toString-instance'>
350
- - (void) <strong>toString</strong>()
351
- </p>
352
- <div class='tags'>
353
- </div>
354
- </div>
355
- <div class='method_details'>
356
- <p class='signature' id='toHex-instance'>
357
- - (void) <strong>toHex</strong>(includeAlpha = false)
358
- </p>
359
- <div class='tags'>
360
- </div>
361
- </div>
362
- </div>
363
- </div>
364
- <div id='footer'>
365
- Generated on
366
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
367
- by
368
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
369
- v1.7.0
370
- (Node.js v0.10.21).
371
- &#10034;
372
- Press Ctrl-h to see the keyboard shortcuts
373
- &#10034;
374
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
375
- &#10034;
376
- <a href='https://mksoft.ch'>mksoft.ch</a>
377
- </div>
378
- </body>
379
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/Caman/Plugin.html DELETED
@@ -1,181 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <a href='../../classes/Caman.html' title='Caman'>Caman</a>
19
- &raquo;
20
- <span class='title'>Plugin</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- Class:
111
- Caman.Plugin
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>src&#47;core&#47;plugin.coffee</td>
117
- </tr>
118
- </table>
119
- <h2>Overview</h2>
120
- <div class='docstring'>
121
- <p>Stores and registers standalone plugins</p>
122
- </div>
123
- <div class='tags'>
124
- </div>
125
- <h2>Class Method Summary</h2>
126
- <ul class='summary'>
127
- <li>
128
- <span class='signature'>
129
- <a href='#register-class'>
130
- + (void) <strong>register</strong>(name, plugin)
131
- </a>
132
- </span>
133
- <span class='desc'>
134
-
135
- </span>
136
- </li>
137
- <li>
138
- <span class='signature'>
139
- <a href='#execute-class'>
140
- + (void) <strong>execute</strong>(context, name, args)
141
- </a>
142
- </span>
143
- <span class='desc'>
144
-
145
- </span>
146
- </li>
147
- </ul>
148
- <h2>Class Method Details</h2>
149
- <div class='methods'>
150
- <div class='method_details'>
151
- <p class='signature' id='register-class'>
152
- + (void) <strong>register</strong>(name, plugin)
153
- </p>
154
- <div class='tags'>
155
- </div>
156
- </div>
157
- <div class='method_details'>
158
- <p class='signature' id='execute-class'>
159
- + (void) <strong>execute</strong>(context, name, args)
160
- </p>
161
- <div class='tags'>
162
- </div>
163
- </div>
164
- </div>
165
- </div>
166
- <div id='footer'>
167
- Generated on
168
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
169
- by
170
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
171
- v1.7.0
172
- (Node.js v0.10.21).
173
- &#10034;
174
- Press Ctrl-h to see the keyboard shortcuts
175
- &#10034;
176
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
177
- &#10034;
178
- <a href='https://mksoft.ch'>mksoft.ch</a>
179
- </div>
180
- </body>
181
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/Caman/Renderer.html DELETED
@@ -1,385 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <a href='../../classes/Caman.html' title='Caman'>Caman</a>
19
- &raquo;
20
- <span class='title'>Renderer</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- Class:
111
- Caman.Renderer
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>src&#47;core&#47;renderer.coffee</td>
117
- </tr>
118
- </table>
119
- <h2>Overview</h2>
120
- <div class='docstring'>
121
- <p>Handles all of the various rendering methods in Caman. Most of the image modification happens
122
- here. A new Renderer object is created for every render operation.</p>
123
- </div>
124
- <div class='tags'>
125
- </div>
126
- <h2>Instance Method Summary</h2>
127
- <ul class='summary'>
128
- <li>
129
- <span class='signature'>
130
- <a href='#constructor-instance'>
131
- - (void) <strong>constructor</strong>(c)
132
- </a>
133
- </span>
134
- <span class='constructor note title'>Constructor</span>
135
- <span class='desc'>
136
-
137
- </span>
138
- </li>
139
- <li>
140
- <span class='signature'>
141
- <a href='#add-instance'>
142
- - (void) <strong>add</strong>(job)
143
- </a>
144
- </span>
145
- <span class='desc'>
146
-
147
- </span>
148
- </li>
149
- <li>
150
- <span class='signature'>
151
- <a href='#processNext-instance'>
152
- - (void) <strong>processNext</strong>()
153
- </a>
154
- </span>
155
- <span class='bound note title'>Bound</span>
156
- <span class='desc'>
157
- Grabs the next operation from the render queue and passes it to Renderer for execution
158
- </span>
159
- </li>
160
- <li>
161
- <span class='signature'>
162
- <a href='#execute-instance'>
163
- - (void) <strong>execute</strong>(callback)
164
- </a>
165
- </span>
166
- <span class='desc'>
167
-
168
- </span>
169
- </li>
170
- <li>
171
- <span class='signature'>
172
- <a href='#eachBlock-instance'>
173
- - (void) <strong>eachBlock</strong>(fn)
174
- </a>
175
- </span>
176
- <span class='desc'>
177
-
178
- </span>
179
- </li>
180
- <li>
181
- <span class='signature'>
182
- <a href='#executeFilter-instance'>
183
- - (void) <strong>executeFilter</strong>()
184
- </a>
185
- </span>
186
- <span class='desc'>
187
- The core of the image rendering, this function executes the provided filter.
188
- </span>
189
- </li>
190
- <li>
191
- <span class='signature'>
192
- <a href='#executePlugin-instance'>
193
- - (void) <strong>executePlugin</strong>()
194
- </a>
195
- </span>
196
- <span class='desc'>
197
- Executes a standalone plugin
198
- </span>
199
- </li>
200
- <li>
201
- <span class='signature'>
202
- <a href='#renderBlock-instance'>
203
- - (void) <strong>renderBlock</strong>(bnum, start, end)
204
- </a>
205
- </span>
206
- <span class='desc'>
207
- Renders a single block of the canvas with the current filter function
208
- </span>
209
- </li>
210
- <li>
211
- <span class='signature'>
212
- <a href='#renderKernel-instance'>
213
- - (void) <strong>renderKernel</strong>(bnum, start, end)
214
- </a>
215
- </span>
216
- <span class='desc'>
217
- Applies an image kernel to the canvas
218
- </span>
219
- </li>
220
- <li>
221
- <span class='signature'>
222
- <a href='#blockFinished-instance'>
223
- - (void) <strong>blockFinished</strong>(bnum)
224
- </a>
225
- </span>
226
- <span class='desc'>
227
- Called when a single block is finished rendering.
228
- </span>
229
- </li>
230
- <li>
231
- <span class='signature'>
232
- <a href='#processKernel-instance'>
233
- - (void) <strong>processKernel</strong>(adjust, kernel, divisor, bias)
234
- </a>
235
- </span>
236
- <span class='desc'>
237
- The &quot;filter function&quot; for kernel adjustments.
238
- </span>
239
- </li>
240
- <li>
241
- <span class='signature'>
242
- <a href='#loadOverlay-instance'>
243
- - (void) <strong>loadOverlay</strong>(layer, src)
244
- </a>
245
- </span>
246
- <span class='desc'>
247
- Loads an image onto the current canvas
248
- </span>
249
- </li>
250
- </ul>
251
- <h2>Constructor Details</h2>
252
- <div class='methods'>
253
- <div class='method_details'>
254
- <p class='signature' id='constructor-instance'>
255
- - (void) <strong>constructor</strong>(c)
256
- </p>
257
- <div class='tags'>
258
- </div>
259
- </div>
260
- </div>
261
- <h2>Instance Method Details</h2>
262
- <div class='methods'>
263
- <div class='method_details'>
264
- <p class='signature' id='add-instance'>
265
- - (void) <strong>add</strong>(job)
266
- </p>
267
- <div class='tags'>
268
- </div>
269
- </div>
270
- <div class='method_details'>
271
- <p class='signature' id='processNext-instance'>
272
- - (void) <strong>processNext</strong>()
273
- (bound)
274
- </p>
275
- <div class='docstring'>
276
- <p>Grabs the next operation from the render queue and passes it to Renderer
277
- for execution</p>
278
- </div>
279
- <div class='tags'>
280
- </div>
281
- </div>
282
- <div class='method_details'>
283
- <p class='signature' id='execute-instance'>
284
- - (void) <strong>execute</strong>(callback)
285
- </p>
286
- <div class='tags'>
287
- </div>
288
- </div>
289
- <div class='method_details'>
290
- <p class='signature' id='eachBlock-instance'>
291
- - (void) <strong>eachBlock</strong>(fn)
292
- </p>
293
- <div class='tags'>
294
- </div>
295
- </div>
296
- <div class='method_details'>
297
- <p class='signature' id='executeFilter-instance'>
298
- - (void) <strong>executeFilter</strong>()
299
- </p>
300
- <div class='docstring'>
301
- <p>The core of the image rendering, this function executes the provided filter.</p><p>NOTE: this does not write the updated pixel data to the canvas. That happens when all filters
302
- are finished rendering in order to be as fast as possible.</p>
303
- </div>
304
- <div class='tags'>
305
- </div>
306
- </div>
307
- <div class='method_details'>
308
- <p class='signature' id='executePlugin-instance'>
309
- - (void) <strong>executePlugin</strong>()
310
- </p>
311
- <div class='docstring'>
312
- <p>Executes a standalone plugin</p>
313
- </div>
314
- <div class='tags'>
315
- </div>
316
- </div>
317
- <div class='method_details'>
318
- <p class='signature' id='renderBlock-instance'>
319
- - (void) <strong>renderBlock</strong>(bnum, start, end)
320
- </p>
321
- <div class='docstring'>
322
- <p>Renders a single block of the canvas with the current filter function</p>
323
- </div>
324
- <div class='tags'>
325
- </div>
326
- </div>
327
- <div class='method_details'>
328
- <p class='signature' id='renderKernel-instance'>
329
- - (void) <strong>renderKernel</strong>(bnum, start, end)
330
- </p>
331
- <div class='docstring'>
332
- <p>Applies an image kernel to the canvas</p>
333
- </div>
334
- <div class='tags'>
335
- </div>
336
- </div>
337
- <div class='method_details'>
338
- <p class='signature' id='blockFinished-instance'>
339
- - (void) <strong>blockFinished</strong>(bnum)
340
- </p>
341
- <div class='docstring'>
342
- <p>Called when a single block is finished rendering. Once all blocks are done, we signal that this
343
- filter is finished rendering and continue to the next step.</p>
344
- </div>
345
- <div class='tags'>
346
- </div>
347
- </div>
348
- <div class='method_details'>
349
- <p class='signature' id='processKernel-instance'>
350
- - (void) <strong>processKernel</strong>(adjust, kernel, divisor, bias)
351
- </p>
352
- <div class='docstring'>
353
- <p>The &quot;filter function&quot; for kernel adjustments.</p>
354
- </div>
355
- <div class='tags'>
356
- </div>
357
- </div>
358
- <div class='method_details'>
359
- <p class='signature' id='loadOverlay-instance'>
360
- - (void) <strong>loadOverlay</strong>(layer, src)
361
- </p>
362
- <div class='docstring'>
363
- <p>Loads an image onto the current canvas</p>
364
- </div>
365
- <div class='tags'>
366
- </div>
367
- </div>
368
- </div>
369
- </div>
370
- <div id='footer'>
371
- Generated on
372
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
373
- by
374
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
375
- v1.7.0
376
- (Node.js v0.10.21).
377
- &#10034;
378
- Press Ctrl-h to see the keyboard shortcuts
379
- &#10034;
380
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
381
- &#10034;
382
- <a href='https://mksoft.ch'>mksoft.ch</a>
383
- </div>
384
- </body>
385
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/Caman/Store.html DELETED
@@ -1,233 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <a href='../../classes/Caman.html' title='Caman'>Caman</a>
19
- &raquo;
20
- <span class='title'>Store</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- Class:
111
- Caman.Store
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>src&#47;core&#47;store.coffee</td>
117
- </tr>
118
- </table>
119
- <h2>Overview</h2>
120
- <div class='docstring'>
121
- <p>Used for storing instances of CamanInstance objects such that, when Caman() is called on an
122
- already initialized element, it returns that object instead of re-initializing.</p>
123
- </div>
124
- <div class='tags'>
125
- </div>
126
- <h2>Class Method Summary</h2>
127
- <ul class='summary'>
128
- <li>
129
- <span class='signature'>
130
- <a href='#has-class'>
131
- + (void) <strong>has</strong>(search)
132
- </a>
133
- </span>
134
- <span class='desc'>
135
-
136
- </span>
137
- </li>
138
- <li>
139
- <span class='signature'>
140
- <a href='#get-class'>
141
- + (void) <strong>get</strong>(search)
142
- </a>
143
- </span>
144
- <span class='desc'>
145
-
146
- </span>
147
- </li>
148
- <li>
149
- <span class='signature'>
150
- <a href='#put-class'>
151
- + (void) <strong>put</strong>(name, obj)
152
- </a>
153
- </span>
154
- <span class='desc'>
155
-
156
- </span>
157
- </li>
158
- <li>
159
- <span class='signature'>
160
- <a href='#execute-class'>
161
- + (void) <strong>execute</strong>(search, callback)
162
- </a>
163
- </span>
164
- <span class='desc'>
165
-
166
- </span>
167
- </li>
168
- <li>
169
- <span class='signature'>
170
- <a href='#flush-class'>
171
- + (void) <strong>flush</strong>(name = false)
172
- </a>
173
- </span>
174
- <span class='desc'>
175
-
176
- </span>
177
- </li>
178
- </ul>
179
- <h2>Class Method Details</h2>
180
- <div class='methods'>
181
- <div class='method_details'>
182
- <p class='signature' id='has-class'>
183
- + (void) <strong>has</strong>(search)
184
- </p>
185
- <div class='tags'>
186
- </div>
187
- </div>
188
- <div class='method_details'>
189
- <p class='signature' id='get-class'>
190
- + (void) <strong>get</strong>(search)
191
- </p>
192
- <div class='tags'>
193
- </div>
194
- </div>
195
- <div class='method_details'>
196
- <p class='signature' id='put-class'>
197
- + (void) <strong>put</strong>(name, obj)
198
- </p>
199
- <div class='tags'>
200
- </div>
201
- </div>
202
- <div class='method_details'>
203
- <p class='signature' id='execute-class'>
204
- + (void) <strong>execute</strong>(search, callback)
205
- </p>
206
- <div class='tags'>
207
- </div>
208
- </div>
209
- <div class='method_details'>
210
- <p class='signature' id='flush-class'>
211
- + (void) <strong>flush</strong>(name = false)
212
- </p>
213
- <div class='tags'>
214
- </div>
215
- </div>
216
- </div>
217
- </div>
218
- <div id='footer'>
219
- Generated on
220
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
221
- by
222
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
223
- v1.7.0
224
- (Node.js v0.10.21).
225
- &#10034;
226
- Press Ctrl-h to see the keyboard shortcuts
227
- &#10034;
228
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
229
- &#10034;
230
- <a href='https://mksoft.ch'>mksoft.ch</a>
231
- </div>
232
- </body>
233
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/CamanParser.html DELETED
@@ -1,243 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../assets/codo.css' type='text/css'>
7
- <script src='../assets/codo.js'></script>
8
- <script src='../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>CamanParser</span>
19
- <nav>
20
- <ul>
21
- <li class='noframes'>
22
- (<a class='noframes' href='#'>no frames</a>)
23
- </li>
24
- </ul>
25
- </nav>
26
- <div id='search'>
27
- <a id='class_list_link' href='../class_list.html'>Classes</a>
28
- <a id='file_list_link' href='../file_list.html'>Files</a>
29
- <a id='method_list_link' href='../method_list.html'>Methods</a>
30
- <a id='extra_list_link' href='../extra_list.html'>Extras</a>
31
- </div>
32
- </div>
33
- <iframe id='search_frame'></iframe>
34
- <div id='fuzzySearch'>
35
- <input type='text'>
36
- <ol></ol>
37
- </div>
38
- <div id='help'>
39
- <p>
40
- Quickly fuzzy find classes, mixins, methods, file:
41
- </p>
42
- <ul>
43
- <li>
44
- <span>Ctrl-T</span>
45
- Open fuzzy finder dialog
46
- </li>
47
- </ul>
48
- <p>
49
- In frame mode you can toggle the list naviation frame on the left side:
50
- </p>
51
- <ul>
52
- <li>
53
- <span>Ctrl-L</span>
54
- Toggle list view
55
- </li>
56
- </ul>
57
- <p>
58
- You can focus a list in frame mode or toggle a tab in frameless mode:
59
- </p>
60
- <ul>
61
- <li>
62
- <span>Ctrl-C</span>
63
- Class list
64
- </li>
65
- <li>
66
- <span>Ctrl-I</span>
67
- Mixin list
68
- </li>
69
- <li>
70
- <span>Ctrl-F</span>
71
- File list
72
- </li>
73
- <li>
74
- <span>Ctrl-M</span>
75
- Method list
76
- </li>
77
- <li>
78
- <span>Ctrl-E</span>
79
- Extras list
80
- </li>
81
- </ul>
82
- <p>
83
- You can focus and blur the search input:
84
- </p>
85
- <ul>
86
- <li>
87
- <span>Ctrl-S</span>
88
- Focus search input
89
- </li>
90
- <li>
91
- <span>Esc</span>
92
- Blur search input
93
- </li>
94
- </ul>
95
- <p>
96
- In frameless mode you can close the list tab:
97
- </p>
98
- <ul>
99
- <li>
100
- <span>Esc</span>
101
- Close list tab
102
- </li>
103
- </ul>
104
- </div>
105
- </div>
106
- <div id='content'>
107
- <h1>
108
- Class:
109
- CamanParser
110
- </h1>
111
- <table class='box'>
112
- <tr>
113
- <td>Defined in:</td>
114
- <td>src&#47;core&#47;autoload.coffee</td>
115
- </tr>
116
- </table>
117
- <h2>Overview</h2>
118
- <div class='docstring'>
119
- <p>Parses Caman instructions embedded in the HTML data-caman attribute.</p>
120
- </div>
121
- <div class='tags'>
122
- </div>
123
- <h2>Constant Summary</h2>
124
- <dl class='constants'>
125
- <dt id='INST_REGEX-constant'>
126
- INST_REGEX
127
- =
128
- <div class='docstring'>
129
- <p>Regex used for parsing options out of the data-caman attribute.</p>
130
- </div>
131
- <div class='tags'>
132
- </div>
133
- </dt>
134
- <dd>
135
- <pre><code class='coffee'>"(\\w+)\\((.*?)\\)"</code></pre>
136
- </dd>
137
- </dl>
138
- <h2>Instance Method Summary</h2>
139
- <ul class='summary'>
140
- <li>
141
- <span class='signature'>
142
- <a href='#constructor-instance'>
143
- - (void) <strong>constructor</strong>(ele, ready)
144
- </a>
145
- </span>
146
- <span class='constructor note title'>Constructor</span>
147
- <span class='desc'>
148
- Creates a new parser instance.
149
- </span>
150
- </li>
151
- <li>
152
- <span class='signature'>
153
- <a href='#parse-instance'>
154
- - (void) <strong>parse</strong>()
155
- </a>
156
- </span>
157
- <span class='desc'>
158
- Parse the DOM object and call the parsed filter functions on the Caman object.
159
- </span>
160
- </li>
161
- <li>
162
- <span class='signature'>
163
- <a href='#execute-instance'>
164
- - (void) <strong>execute</strong>()
165
- </a>
166
- </span>
167
- <span class='desc'>
168
- Execute <a href='../classes/Caman.html#render-instance'>Caman#render</a> on this Caman instance.
169
- </span>
170
- </li>
171
- </ul>
172
- <h2>Constructor Details</h2>
173
- <div class='methods'>
174
- <div class='method_details'>
175
- <p class='signature' id='constructor-instance'>
176
- - (void) <strong>constructor</strong>(ele, ready)
177
- </p>
178
- <div class='docstring'>
179
- <p>Creates a new parser instance.</p>
180
- </div>
181
- <div class='tags'>
182
- <h3>Parameters:</h3>
183
- <ul class='param'>
184
- <li>
185
- <span class='name'>ele</span>
186
- <span class='type'>
187
- (<tt>DOMObject</tt>)
188
- </span>
189
- &mdash;
190
- <span class='desc'>DOM object to be instantiated with CamanJS</span>
191
- </li>
192
- <li>
193
- <span class='name'>ready</span>
194
- <span class='type'>
195
- (<tt>Function</tt>)
196
- </span>
197
- &mdash;
198
- <span class='desc'>Callback function to pass to CamanJS</span>
199
- </li>
200
- </ul>
201
- </div>
202
- </div>
203
- </div>
204
- <h2>Instance Method Details</h2>
205
- <div class='methods'>
206
- <div class='method_details'>
207
- <p class='signature' id='parse-instance'>
208
- - (void) <strong>parse</strong>()
209
- </p>
210
- <div class='docstring'>
211
- <p>Parse the DOM object and call the parsed filter functions on the Caman object.</p>
212
- </div>
213
- <div class='tags'>
214
- </div>
215
- </div>
216
- <div class='method_details'>
217
- <p class='signature' id='execute-instance'>
218
- - (void) <strong>execute</strong>()
219
- </p>
220
- <div class='docstring'>
221
- <p>Execute <a href='../classes/Caman.html#render-instance'>Caman#render</a> on this Caman instance.</p>
222
- </div>
223
- <div class='tags'>
224
- </div>
225
- </div>
226
- </div>
227
- </div>
228
- <div id='footer'>
229
- Generated on
230
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
231
- by
232
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
233
- v1.7.0
234
- (Node.js v0.10.21).
235
- &#10034;
236
- Press Ctrl-h to see the keyboard shortcuts
237
- &#10034;
238
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
239
- &#10034;
240
- <a href='https://mksoft.ch'>mksoft.ch</a>
241
- </div>
242
- </body>
243
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/Module.html DELETED
@@ -1,265 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../assets/codo.css' type='text/css'>
7
- <script src='../assets/codo.js'></script>
8
- <script src='../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>Module</span>
19
- <nav>
20
- <ul>
21
- <li class='noframes'>
22
- (<a class='noframes' href='#'>no frames</a>)
23
- </li>
24
- </ul>
25
- </nav>
26
- <div id='search'>
27
- <a id='class_list_link' href='../class_list.html'>Classes</a>
28
- <a id='file_list_link' href='../file_list.html'>Files</a>
29
- <a id='method_list_link' href='../method_list.html'>Methods</a>
30
- <a id='extra_list_link' href='../extra_list.html'>Extras</a>
31
- </div>
32
- </div>
33
- <iframe id='search_frame'></iframe>
34
- <div id='fuzzySearch'>
35
- <input type='text'>
36
- <ol></ol>
37
- </div>
38
- <div id='help'>
39
- <p>
40
- Quickly fuzzy find classes, mixins, methods, file:
41
- </p>
42
- <ul>
43
- <li>
44
- <span>Ctrl-T</span>
45
- Open fuzzy finder dialog
46
- </li>
47
- </ul>
48
- <p>
49
- In frame mode you can toggle the list naviation frame on the left side:
50
- </p>
51
- <ul>
52
- <li>
53
- <span>Ctrl-L</span>
54
- Toggle list view
55
- </li>
56
- </ul>
57
- <p>
58
- You can focus a list in frame mode or toggle a tab in frameless mode:
59
- </p>
60
- <ul>
61
- <li>
62
- <span>Ctrl-C</span>
63
- Class list
64
- </li>
65
- <li>
66
- <span>Ctrl-I</span>
67
- Mixin list
68
- </li>
69
- <li>
70
- <span>Ctrl-F</span>
71
- File list
72
- </li>
73
- <li>
74
- <span>Ctrl-M</span>
75
- Method list
76
- </li>
77
- <li>
78
- <span>Ctrl-E</span>
79
- Extras list
80
- </li>
81
- </ul>
82
- <p>
83
- You can focus and blur the search input:
84
- </p>
85
- <ul>
86
- <li>
87
- <span>Ctrl-S</span>
88
- Focus search input
89
- </li>
90
- <li>
91
- <span>Esc</span>
92
- Blur search input
93
- </li>
94
- </ul>
95
- <p>
96
- In frameless mode you can close the list tab:
97
- </p>
98
- <ul>
99
- <li>
100
- <span>Esc</span>
101
- Close list tab
102
- </li>
103
- </ul>
104
- </div>
105
- </div>
106
- <div id='content'>
107
- <h1>
108
- Class:
109
- Module
110
- </h1>
111
- <table class='box'>
112
- <tr>
113
- <td>Defined in:</td>
114
- <td>src&#47;core&#47;module.coffee</td>
115
- </tr>
116
- </table>
117
- <h2>Direct Known Subclasses</h2>
118
- <p class='children'>
119
- <a href='../classes/Caman.html'>Caman</a>
120
- </p>
121
- <h2>Class Method Summary</h2>
122
- <ul class='summary'>
123
- <li>
124
- <span class='signature'>
125
- <a href='#extends-class'>
126
- + (void) <strong>extends</strong>(obj)
127
- </a>
128
- </span>
129
- <span class='desc'>
130
- Extend the base object itself like a static method
131
- </span>
132
- </li>
133
- <li>
134
- <span class='signature'>
135
- <a href='#includes-class'>
136
- + (void) <strong>includes</strong>(obj)
137
- </a>
138
- </span>
139
- <span class='desc'>
140
- Include methods on the object prototype
141
- </span>
142
- </li>
143
- <li>
144
- <span class='signature'>
145
- <a href='#delegate-class'>
146
- + (void) <strong>delegate</strong>(args...)
147
- </a>
148
- </span>
149
- <span class='desc'>
150
- Add methods on this prototype that point to another method on another object&#39;s prototype.
151
- </span>
152
- </li>
153
- <li>
154
- <span class='signature'>
155
- <a href='#aliasFunction-class'>
156
- + (void) <strong>aliasFunction</strong>(to, from)
157
- </a>
158
- </span>
159
- <span class='desc'>
160
- Create an alias for a function
161
- </span>
162
- </li>
163
- <li>
164
- <span class='signature'>
165
- <a href='#aliasProperty-class'>
166
- + (void) <strong>aliasProperty</strong>(to, from)
167
- </a>
168
- </span>
169
- <span class='desc'>
170
- Create an alias for a property
171
- </span>
172
- </li>
173
- <li>
174
- <span class='signature'>
175
- <a href='#included-class'>
176
- + (void) <strong>included</strong>(func)
177
- </a>
178
- </span>
179
- <span class='desc'>
180
- Execute a function in the context of the object, and pass a reference to the object&#39;s prototype.
181
- </span>
182
- </li>
183
- </ul>
184
- <h2>Class Method Details</h2>
185
- <div class='methods'>
186
- <div class='method_details'>
187
- <p class='signature' id='extends-class'>
188
- + (void) <strong>extends</strong>(obj)
189
- </p>
190
- <div class='docstring'>
191
- <p>Extend the base object itself like a static method</p>
192
- </div>
193
- <div class='tags'>
194
- </div>
195
- </div>
196
- <div class='method_details'>
197
- <p class='signature' id='includes-class'>
198
- + (void) <strong>includes</strong>(obj)
199
- </p>
200
- <div class='docstring'>
201
- <p>Include methods on the object prototype</p>
202
- </div>
203
- <div class='tags'>
204
- </div>
205
- </div>
206
- <div class='method_details'>
207
- <p class='signature' id='delegate-class'>
208
- + (void) <strong>delegate</strong>(args...)
209
- </p>
210
- <div class='docstring'>
211
- <p>Add methods on this prototype that point to another method
212
- on another object&#39;s prototype.</p>
213
- </div>
214
- <div class='tags'>
215
- </div>
216
- </div>
217
- <div class='method_details'>
218
- <p class='signature' id='aliasFunction-class'>
219
- + (void) <strong>aliasFunction</strong>(to, from)
220
- </p>
221
- <div class='docstring'>
222
- <p>Create an alias for a function</p>
223
- </div>
224
- <div class='tags'>
225
- </div>
226
- </div>
227
- <div class='method_details'>
228
- <p class='signature' id='aliasProperty-class'>
229
- + (void) <strong>aliasProperty</strong>(to, from)
230
- </p>
231
- <div class='docstring'>
232
- <p>Create an alias for a property</p>
233
- </div>
234
- <div class='tags'>
235
- </div>
236
- </div>
237
- <div class='method_details'>
238
- <p class='signature' id='included-class'>
239
- + (void) <strong>included</strong>(func)
240
- </p>
241
- <div class='docstring'>
242
- <p>Execute a function in the context of the object, and pass
243
- a reference to the object&#39;s prototype.</p>
244
- </div>
245
- <div class='tags'>
246
- </div>
247
- </div>
248
- </div>
249
- </div>
250
- <div id='footer'>
251
- Generated on
252
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
253
- by
254
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
255
- v1.7.0
256
- (Node.js v0.10.21).
257
- &#10034;
258
- Press Ctrl-h to see the keyboard shortcuts
259
- &#10034;
260
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
261
- &#10034;
262
- <a href='https://mksoft.ch'>mksoft.ch</a>
263
- </div>
264
- </body>
265
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/classes/Util.html DELETED
@@ -1,217 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../assets/codo.css' type='text/css'>
7
- <script src='../assets/codo.js'></script>
8
- <script src='../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>Util</span>
19
- <nav>
20
- <ul>
21
- <li class='noframes'>
22
- (<a class='noframes' href='#'>no frames</a>)
23
- </li>
24
- </ul>
25
- </nav>
26
- <div id='search'>
27
- <a id='class_list_link' href='../class_list.html'>Classes</a>
28
- <a id='file_list_link' href='../file_list.html'>Files</a>
29
- <a id='method_list_link' href='../method_list.html'>Methods</a>
30
- <a id='extra_list_link' href='../extra_list.html'>Extras</a>
31
- </div>
32
- </div>
33
- <iframe id='search_frame'></iframe>
34
- <div id='fuzzySearch'>
35
- <input type='text'>
36
- <ol></ol>
37
- </div>
38
- <div id='help'>
39
- <p>
40
- Quickly fuzzy find classes, mixins, methods, file:
41
- </p>
42
- <ul>
43
- <li>
44
- <span>Ctrl-T</span>
45
- Open fuzzy finder dialog
46
- </li>
47
- </ul>
48
- <p>
49
- In frame mode you can toggle the list naviation frame on the left side:
50
- </p>
51
- <ul>
52
- <li>
53
- <span>Ctrl-L</span>
54
- Toggle list view
55
- </li>
56
- </ul>
57
- <p>
58
- You can focus a list in frame mode or toggle a tab in frameless mode:
59
- </p>
60
- <ul>
61
- <li>
62
- <span>Ctrl-C</span>
63
- Class list
64
- </li>
65
- <li>
66
- <span>Ctrl-I</span>
67
- Mixin list
68
- </li>
69
- <li>
70
- <span>Ctrl-F</span>
71
- File list
72
- </li>
73
- <li>
74
- <span>Ctrl-M</span>
75
- Method list
76
- </li>
77
- <li>
78
- <span>Ctrl-E</span>
79
- Extras list
80
- </li>
81
- </ul>
82
- <p>
83
- You can focus and blur the search input:
84
- </p>
85
- <ul>
86
- <li>
87
- <span>Ctrl-S</span>
88
- Focus search input
89
- </li>
90
- <li>
91
- <span>Esc</span>
92
- Blur search input
93
- </li>
94
- </ul>
95
- <p>
96
- In frameless mode you can close the list tab:
97
- </p>
98
- <ul>
99
- <li>
100
- <span>Esc</span>
101
- Close list tab
102
- </li>
103
- </ul>
104
- </div>
105
- </div>
106
- <div id='content'>
107
- <h1>
108
- Class:
109
- Util
110
- </h1>
111
- <table class='box'>
112
- <tr>
113
- <td>Defined in:</td>
114
- <td>src&#47;core&#47;util.coffee</td>
115
- </tr>
116
- </table>
117
- <h2>Class Method Summary</h2>
118
- <ul class='summary'>
119
- <li>
120
- <span class='signature'>
121
- <a href='#extend-class'>
122
- + (void) <strong>extend</strong>(obj, src...)
123
- </a>
124
- </span>
125
- <span class='desc'>
126
- Helper function that extends one object with all the properies of other objects
127
- </span>
128
- </li>
129
- <li>
130
- <span class='signature'>
131
- <a href='#clampRGB-class'>
132
- + (void) <strong>clampRGB</strong>(val)
133
- </a>
134
- </span>
135
- <span class='desc'>
136
- In order to stay true to the latest spec, RGB values must be clamped between 0 and 255.
137
- </span>
138
- </li>
139
- <li>
140
- <span class='signature'>
141
- <a href='#copyAttributes-class'>
142
- + (void) <strong>copyAttributes</strong>(from, to, opts = {})
143
- </a>
144
- </span>
145
- <span class='desc'>
146
-
147
- </span>
148
- </li>
149
- <li>
150
- <span class='signature'>
151
- <a href='#dataArray-class'>
152
- + (void) <strong>dataArray</strong>(length = 0)
153
- </a>
154
- </span>
155
- <span class='desc'>
156
- Support for browsers that don&#39;t know Uint8Array (such as IE9)
157
- </span>
158
- </li>
159
- </ul>
160
- <h2>Class Method Details</h2>
161
- <div class='methods'>
162
- <div class='method_details'>
163
- <p class='signature' id='extend-class'>
164
- + (void) <strong>extend</strong>(obj, src...)
165
- </p>
166
- <div class='docstring'>
167
- <p>Helper function that extends one object with all the properies of other objects</p>
168
- </div>
169
- <div class='tags'>
170
- </div>
171
- </div>
172
- <div class='method_details'>
173
- <p class='signature' id='clampRGB-class'>
174
- + (void) <strong>clampRGB</strong>(val)
175
- </p>
176
- <div class='docstring'>
177
- <p>In order to stay true to the latest spec, RGB values must be clamped between
178
- 0 and 255. If we don&#39;t do this, weird things happen.</p>
179
- </div>
180
- <div class='tags'>
181
- </div>
182
- </div>
183
- <div class='method_details'>
184
- <p class='signature' id='copyAttributes-class'>
185
- + (void) <strong>copyAttributes</strong>(from, to, opts = {})
186
- </p>
187
- <div class='tags'>
188
- </div>
189
- </div>
190
- <div class='method_details'>
191
- <p class='signature' id='dataArray-class'>
192
- + (void) <strong>dataArray</strong>(length = 0)
193
- </p>
194
- <div class='docstring'>
195
- <p>Support for browsers that don&#39;t know Uint8Array (such as IE9)</p>
196
- </div>
197
- <div class='tags'>
198
- </div>
199
- </div>
200
- </div>
201
- </div>
202
- <div id='footer'>
203
- Generated on
204
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
205
- by
206
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
207
- v1.7.0
208
- (Node.js v0.10.21).
209
- &#10034;
210
- Press Ctrl-h to see the keyboard shortcuts
211
- &#10034;
212
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
213
- &#10034;
214
- <a href='https://mksoft.ch'>mksoft.ch</a>
215
- </div>
216
- </body>
217
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/extra_list.html DELETED
@@ -1,33 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='assets/codo.css' type='text/css'>
7
- <script src='assets/codo.js'></script>
8
- <script src='assets/search_data.js'></script>
9
- </head>
10
- <body class='list'>
11
- <div class='list' id='content'>
12
- <h1 class='full_list_header'>File List</h1>
13
- <nav>
14
- <a target='_self' href='class_list.html'>Classes</a>
15
- <a target='_self' href='file_list.html'>Files</a>
16
- <a target='_self' href='method_list.html'>Methods</a>
17
- <a target='_self' href='extra_list.html'>Extras</a>
18
- </nav>
19
- <div id='search'>
20
- Search:
21
- <input type='text'>
22
- </div>
23
- <ul>
24
- <li>
25
- <a href='README.md.html' target='main' title='README.md'>README.md</a>
26
- </li>
27
- <li>
28
- <a href='LICENSE.html' target='main' title='LICENSE'>LICENSE</a>
29
- </li>
30
- </ul>
31
- </div>
32
- </body>
33
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/file_list.html DELETED
@@ -1,126 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='assets/codo.css' type='text/css'>
7
- <script src='assets/codo.js'></script>
8
- <script src='assets/search_data.js'></script>
9
- </head>
10
- <body class='list'>
11
- <div class='list tree' id='content'>
12
- <h1 class='full_list_header'>File List</h1>
13
- <nav>
14
- <a target='_self' href='class_list.html'>Classes</a>
15
- <a target='_self' href='file_list.html'>Files</a>
16
- <a target='_self' href='method_list.html'>Methods</a>
17
- <a target='_self' href='extra_list.html'>Extras</a>
18
- </nav>
19
- <div id='search'>
20
- Search:
21
- <input type='text'>
22
- </div>
23
- <ul>
24
- <li>
25
- <span>
26
- core
27
- </span>
28
- </li>
29
- <ul>
30
- <li>
31
- <a href='files/core/analyze.coffee.html' target='main'>analyze.coffee</a>
32
- <small class='namespace'>
33
- core
34
- </small>
35
- </li>
36
- <li>
37
- <a href='files/core/autoload.coffee.html' target='main'>autoload.coffee</a>
38
- <small class='namespace'>
39
- core
40
- </small>
41
- </li>
42
- <li>
43
- <a href='files/core/blender.coffee.html' target='main'>blender.coffee</a>
44
- <small class='namespace'>
45
- core
46
- </small>
47
- </li>
48
- <li>
49
- <a href='files/core/calculate.coffee.html' target='main'>calculate.coffee</a>
50
- <small class='namespace'>
51
- core
52
- </small>
53
- </li>
54
- <li>
55
- <a href='files/core/caman.coffee.html' target='main'>caman.coffee</a>
56
- <small class='namespace'>
57
- core
58
- </small>
59
- </li>
60
- <li>
61
- <a href='files/core/convert.coffee.html' target='main'>convert.coffee</a>
62
- <small class='namespace'>
63
- core
64
- </small>
65
- </li>
66
- <li>
67
- <a href='files/core/event.coffee.html' target='main'>event.coffee</a>
68
- <small class='namespace'>
69
- core
70
- </small>
71
- </li>
72
- <li>
73
- <a href='files/core/filter.coffee.html' target='main'>filter.coffee</a>
74
- <small class='namespace'>
75
- core
76
- </small>
77
- </li>
78
- <li>
79
- <a href='files/core/io.coffee.html' target='main'>io.coffee</a>
80
- <small class='namespace'>
81
- core
82
- </small>
83
- </li>
84
- <li>
85
- <a href='files/core/layer.coffee.html' target='main'>layer.coffee</a>
86
- <small class='namespace'>
87
- core
88
- </small>
89
- </li>
90
- <li>
91
- <a href='files/core/pixel.coffee.html' target='main'>pixel.coffee</a>
92
- <small class='namespace'>
93
- core
94
- </small>
95
- </li>
96
- <li>
97
- <a href='files/core/plugin.coffee.html' target='main'>plugin.coffee</a>
98
- <small class='namespace'>
99
- core
100
- </small>
101
- </li>
102
- <li>
103
- <a href='files/core/renderer.coffee.html' target='main'>renderer.coffee</a>
104
- <small class='namespace'>
105
- core
106
- </small>
107
- </li>
108
- <li>
109
- <a href='files/core/store.coffee.html' target='main'>store.coffee</a>
110
- <small class='namespace'>
111
- core
112
- </small>
113
- </li>
114
- <li>
115
- <a href='files/core/util.coffee.html' target='main'>util.coffee</a>
116
- <small class='namespace'>
117
- core
118
- </small>
119
- </li>
120
- </ul>
121
-
122
- </ul>
123
-
124
- </div>
125
- </body>
126
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/files/core/analyze.coffee.html DELETED
@@ -1,135 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>core</span>
19
- &raquo;
20
- <span class='title'>analyze.coffee</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- File:
111
- analyze.coffee
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>core</td>
117
- </tr>
118
- </table>
119
- </div>
120
- <div id='footer'>
121
- Generated on
122
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
123
- by
124
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
125
- v1.7.0
126
- (Node.js v0.10.21).
127
- &#10034;
128
- Press Ctrl-h to see the keyboard shortcuts
129
- &#10034;
130
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
131
- &#10034;
132
- <a href='https://mksoft.ch'>mksoft.ch</a>
133
- </div>
134
- </body>
135
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/files/core/autoload.coffee.html DELETED
@@ -1,162 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>core</span>
19
- &raquo;
20
- <span class='title'>autoload.coffee</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- File:
111
- autoload.coffee
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>core</td>
117
- </tr>
118
- </table>
119
- <h2>Method Summary</h2>
120
- <ul class='summary'>
121
- <li>
122
- <span class='signature'>
123
- <a href='#Caman.DOMUpdated-file'>
124
- ? (void) <strong>Caman.DOMUpdated</strong>()
125
- </a>
126
- </span>
127
- <span class='desc'>
128
- Inform CamanJS that the DOM has been updated, and that it should re-scan for CamanJS instances in the document.
129
- </span>
130
- </li>
131
- </ul>
132
- <h2>Method Details</h2>
133
- <div class='methods'>
134
- <div class='method_details'>
135
- <p class='signature' id='Caman.DOMUpdated-file'>
136
- ? (void) <strong>Caman.DOMUpdated</strong>()
137
- </p>
138
- <div class='docstring'>
139
- <p>Inform CamanJS that the DOM has been updated, and that it
140
- should re-scan for CamanJS instances in the document.</p>
141
- </div>
142
- <div class='tags'>
143
- </div>
144
- </div>
145
- </div>
146
- </div>
147
- <div id='footer'>
148
- Generated on
149
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
150
- by
151
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
152
- v1.7.0
153
- (Node.js v0.10.21).
154
- &#10034;
155
- Press Ctrl-h to see the keyboard shortcuts
156
- &#10034;
157
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
158
- &#10034;
159
- <a href='https://mksoft.ch'>mksoft.ch</a>
160
- </div>
161
- </body>
162
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/files/core/blender.coffee.html DELETED
@@ -1,135 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>core</span>
19
- &raquo;
20
- <span class='title'>blender.coffee</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- File:
111
- blender.coffee
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>core</td>
117
- </tr>
118
- </table>
119
- </div>
120
- <div id='footer'>
121
- Generated on
122
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
123
- by
124
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
125
- v1.7.0
126
- (Node.js v0.10.21).
127
- &#10034;
128
- Press Ctrl-h to see the keyboard shortcuts
129
- &#10034;
130
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
131
- &#10034;
132
- <a href='https://mksoft.ch'>mksoft.ch</a>
133
- </div>
134
- </body>
135
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/files/core/calculate.coffee.html DELETED
@@ -1,135 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>core</span>
19
- &raquo;
20
- <span class='title'>calculate.coffee</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- File:
111
- calculate.coffee
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>core</td>
117
- </tr>
118
- </table>
119
- </div>
120
- <div id='footer'>
121
- Generated on
122
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
123
- by
124
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
125
- v1.7.0
126
- (Node.js v0.10.21).
127
- &#10034;
128
- Press Ctrl-h to see the keyboard shortcuts
129
- &#10034;
130
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
131
- &#10034;
132
- <a href='https://mksoft.ch'>mksoft.ch</a>
133
- </div>
134
- </body>
135
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/files/core/caman.coffee.html DELETED
@@ -1,135 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>core</span>
19
- &raquo;
20
- <span class='title'>caman.coffee</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- File:
111
- caman.coffee
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>core</td>
117
- </tr>
118
- </table>
119
- </div>
120
- <div id='footer'>
121
- Generated on
122
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
123
- by
124
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
125
- v1.7.0
126
- (Node.js v0.10.21).
127
- &#10034;
128
- Press Ctrl-h to see the keyboard shortcuts
129
- &#10034;
130
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
131
- &#10034;
132
- <a href='https://mksoft.ch'>mksoft.ch</a>
133
- </div>
134
- </body>
135
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/files/core/convert.coffee.html DELETED
@@ -1,135 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>core</span>
19
- &raquo;
20
- <span class='title'>convert.coffee</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- File:
111
- convert.coffee
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>core</td>
117
- </tr>
118
- </table>
119
- </div>
120
- <div id='footer'>
121
- Generated on
122
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
123
- by
124
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
125
- v1.7.0
126
- (Node.js v0.10.21).
127
- &#10034;
128
- Press Ctrl-h to see the keyboard shortcuts
129
- &#10034;
130
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
131
- &#10034;
132
- <a href='https://mksoft.ch'>mksoft.ch</a>
133
- </div>
134
- </body>
135
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/files/core/event.coffee.html DELETED
@@ -1,135 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>core</span>
19
- &raquo;
20
- <span class='title'>event.coffee</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- File:
111
- event.coffee
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>core</td>
117
- </tr>
118
- </table>
119
- </div>
120
- <div id='footer'>
121
- Generated on
122
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
123
- by
124
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
125
- v1.7.0
126
- (Node.js v0.10.21).
127
- &#10034;
128
- Press Ctrl-h to see the keyboard shortcuts
129
- &#10034;
130
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
131
- &#10034;
132
- <a href='https://mksoft.ch'>mksoft.ch</a>
133
- </div>
134
- </body>
135
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/files/core/filter.coffee.html DELETED
@@ -1,135 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>core</span>
19
- &raquo;
20
- <span class='title'>filter.coffee</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- File:
111
- filter.coffee
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>core</td>
117
- </tr>
118
- </table>
119
- </div>
120
- <div id='footer'>
121
- Generated on
122
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
123
- by
124
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
125
- v1.7.0
126
- (Node.js v0.10.21).
127
- &#10034;
128
- Press Ctrl-h to see the keyboard shortcuts
129
- &#10034;
130
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
131
- &#10034;
132
- <a href='https://mksoft.ch'>mksoft.ch</a>
133
- </div>
134
- </body>
135
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/files/core/io.coffee.html DELETED
@@ -1,245 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>core</span>
19
- &raquo;
20
- <span class='title'>io.coffee</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- File:
111
- io.coffee
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>core</td>
117
- </tr>
118
- </table>
119
- <h2>Constant Summary</h2>
120
- <dl class='constants'>
121
- <dt id='IO-constant'>
122
- IO
123
- =
124
- <div class='tags'>
125
- </div>
126
- </dt>
127
- <dd>
128
- <pre><code class='coffee'>Caman</code></pre>
129
- </dd>
130
- </dl>
131
- <h2>Method Summary</h2>
132
- <ul class='summary'>
133
- <li>
134
- <span class='signature'>
135
- <a href='#Caman.prototype.save-file'>
136
- ? (void) <strong>Caman.prototype.save</strong>()
137
- </a>
138
- </span>
139
- <span class='desc'>
140
-
141
- </span>
142
- </li>
143
- <li>
144
- <span class='signature'>
145
- <a href='#Caman.prototype.browserSave-file'>
146
- ? (void) <strong>Caman.prototype.browserSave</strong>(type = "png")
147
- </a>
148
- </span>
149
- <span class='desc'>
150
-
151
- </span>
152
- </li>
153
- <li>
154
- <span class='signature'>
155
- <a href='#Caman.prototype.nodeSave-file'>
156
- ? (void) <strong>Caman.prototype.nodeSave</strong>(file, overwrite = true)
157
- </a>
158
- </span>
159
- <span class='desc'>
160
-
161
- </span>
162
- </li>
163
- <li>
164
- <span class='signature'>
165
- <a href='#Caman.prototype.toImage-file'>
166
- ? (void) <strong>Caman.prototype.toImage</strong>(type)
167
- </a>
168
- </span>
169
- <span class='desc'>
170
- Takes the current canvas data, converts it to Base64, then sets it as the source of a new Image object and returns it.
171
- </span>
172
- </li>
173
- <li>
174
- <span class='signature'>
175
- <a href='#Caman.prototype.toBase64-file'>
176
- ? (void) <strong>Caman.prototype.toBase64</strong>(type = "png")
177
- </a>
178
- </span>
179
- <span class='desc'>
180
- Base64 encodes the current canvas
181
- </span>
182
- </li>
183
- </ul>
184
- <h2>Method Details</h2>
185
- <div class='methods'>
186
- <div class='method_details'>
187
- <p class='signature' id='Caman.prototype.save-file'>
188
- ? (void) <strong>Caman.prototype.save</strong>()
189
- </p>
190
- <div class='tags'>
191
- </div>
192
- </div>
193
- <div class='method_details'>
194
- <p class='signature' id='Caman.prototype.browserSave-file'>
195
- ? (void) <strong>Caman.prototype.browserSave</strong>(type = "png")
196
- </p>
197
- <div class='tags'>
198
- </div>
199
- </div>
200
- <div class='method_details'>
201
- <p class='signature' id='Caman.prototype.nodeSave-file'>
202
- ? (void) <strong>Caman.prototype.nodeSave</strong>(file, overwrite = true)
203
- </p>
204
- <div class='tags'>
205
- </div>
206
- </div>
207
- <div class='method_details'>
208
- <p class='signature' id='Caman.prototype.toImage-file'>
209
- ? (void) <strong>Caman.prototype.toImage</strong>(type)
210
- </p>
211
- <div class='docstring'>
212
- <p>Takes the current canvas data, converts it to Base64, then sets it as the source
213
- of a new Image object and returns it.</p>
214
- </div>
215
- <div class='tags'>
216
- </div>
217
- </div>
218
- <div class='method_details'>
219
- <p class='signature' id='Caman.prototype.toBase64-file'>
220
- ? (void) <strong>Caman.prototype.toBase64</strong>(type = "png")
221
- </p>
222
- <div class='docstring'>
223
- <p>Base64 encodes the current canvas</p>
224
- </div>
225
- <div class='tags'>
226
- </div>
227
- </div>
228
- </div>
229
- </div>
230
- <div id='footer'>
231
- Generated on
232
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
233
- by
234
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
235
- v1.7.0
236
- (Node.js v0.10.21).
237
- &#10034;
238
- Press Ctrl-h to see the keyboard shortcuts
239
- &#10034;
240
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
241
- &#10034;
242
- <a href='https://mksoft.ch'>mksoft.ch</a>
243
- </div>
244
- </body>
245
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/files/core/layer.coffee.html DELETED
@@ -1,135 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>core</span>
19
- &raquo;
20
- <span class='title'>layer.coffee</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- File:
111
- layer.coffee
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>core</td>
117
- </tr>
118
- </table>
119
- </div>
120
- <div id='footer'>
121
- Generated on
122
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
123
- by
124
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
125
- v1.7.0
126
- (Node.js v0.10.21).
127
- &#10034;
128
- Press Ctrl-h to see the keyboard shortcuts
129
- &#10034;
130
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
131
- &#10034;
132
- <a href='https://mksoft.ch'>mksoft.ch</a>
133
- </div>
134
- </body>
135
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/files/core/pixel.coffee.html DELETED
@@ -1,135 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>core</span>
19
- &raquo;
20
- <span class='title'>pixel.coffee</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- File:
111
- pixel.coffee
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>core</td>
117
- </tr>
118
- </table>
119
- </div>
120
- <div id='footer'>
121
- Generated on
122
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
123
- by
124
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
125
- v1.7.0
126
- (Node.js v0.10.21).
127
- &#10034;
128
- Press Ctrl-h to see the keyboard shortcuts
129
- &#10034;
130
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
131
- &#10034;
132
- <a href='https://mksoft.ch'>mksoft.ch</a>
133
- </div>
134
- </body>
135
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/files/core/plugin.coffee.html DELETED
@@ -1,135 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>core</span>
19
- &raquo;
20
- <span class='title'>plugin.coffee</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- File:
111
- plugin.coffee
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>core</td>
117
- </tr>
118
- </table>
119
- </div>
120
- <div id='footer'>
121
- Generated on
122
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
123
- by
124
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
125
- v1.7.0
126
- (Node.js v0.10.21).
127
- &#10034;
128
- Press Ctrl-h to see the keyboard shortcuts
129
- &#10034;
130
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
131
- &#10034;
132
- <a href='https://mksoft.ch'>mksoft.ch</a>
133
- </div>
134
- </body>
135
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/files/core/renderer.coffee.html DELETED
@@ -1,135 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>core</span>
19
- &raquo;
20
- <span class='title'>renderer.coffee</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- File:
111
- renderer.coffee
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>core</td>
117
- </tr>
118
- </table>
119
- </div>
120
- <div id='footer'>
121
- Generated on
122
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
123
- by
124
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
125
- v1.7.0
126
- (Node.js v0.10.21).
127
- &#10034;
128
- Press Ctrl-h to see the keyboard shortcuts
129
- &#10034;
130
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
131
- &#10034;
132
- <a href='https://mksoft.ch'>mksoft.ch</a>
133
- </div>
134
- </body>
135
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/files/core/store.coffee.html DELETED
@@ -1,135 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>core</span>
19
- &raquo;
20
- <span class='title'>store.coffee</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- File:
111
- store.coffee
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>core</td>
117
- </tr>
118
- </table>
119
- </div>
120
- <div id='footer'>
121
- Generated on
122
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
123
- by
124
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
125
- v1.7.0
126
- (Node.js v0.10.21).
127
- &#10034;
128
- Press Ctrl-h to see the keyboard shortcuts
129
- &#10034;
130
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
131
- &#10034;
132
- <a href='https://mksoft.ch'>mksoft.ch</a>
133
- </div>
134
- </body>
135
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/files/core/util.coffee.html DELETED
@@ -1,162 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='../../assets/codo.css' type='text/css'>
7
- <script src='../../assets/codo.js'></script>
8
- <script src='../../assets/search_data.js'></script>
9
- </head>
10
- <body>
11
- <div id='base' data-path='../../'></div>
12
- <div id='header'>
13
- <div id='menu'>
14
- <a href='../../README.md.html' title='CamanJS'>CamanJS</a>
15
- &raquo;
16
- <a href='../../class_index.html' title='Index'>Index</a>
17
- &raquo;
18
- <span class='title'>core</span>
19
- &raquo;
20
- <span class='title'>util.coffee</span>
21
- <nav>
22
- <ul>
23
- <li class='noframes'>
24
- (<a class='noframes' href='#'>no frames</a>)
25
- </li>
26
- </ul>
27
- </nav>
28
- <div id='search'>
29
- <a id='class_list_link' href='../../class_list.html'>Classes</a>
30
- <a id='file_list_link' href='../../file_list.html'>Files</a>
31
- <a id='method_list_link' href='../../method_list.html'>Methods</a>
32
- <a id='extra_list_link' href='../../extra_list.html'>Extras</a>
33
- </div>
34
- </div>
35
- <iframe id='search_frame'></iframe>
36
- <div id='fuzzySearch'>
37
- <input type='text'>
38
- <ol></ol>
39
- </div>
40
- <div id='help'>
41
- <p>
42
- Quickly fuzzy find classes, mixins, methods, file:
43
- </p>
44
- <ul>
45
- <li>
46
- <span>Ctrl-T</span>
47
- Open fuzzy finder dialog
48
- </li>
49
- </ul>
50
- <p>
51
- In frame mode you can toggle the list naviation frame on the left side:
52
- </p>
53
- <ul>
54
- <li>
55
- <span>Ctrl-L</span>
56
- Toggle list view
57
- </li>
58
- </ul>
59
- <p>
60
- You can focus a list in frame mode or toggle a tab in frameless mode:
61
- </p>
62
- <ul>
63
- <li>
64
- <span>Ctrl-C</span>
65
- Class list
66
- </li>
67
- <li>
68
- <span>Ctrl-I</span>
69
- Mixin list
70
- </li>
71
- <li>
72
- <span>Ctrl-F</span>
73
- File list
74
- </li>
75
- <li>
76
- <span>Ctrl-M</span>
77
- Method list
78
- </li>
79
- <li>
80
- <span>Ctrl-E</span>
81
- Extras list
82
- </li>
83
- </ul>
84
- <p>
85
- You can focus and blur the search input:
86
- </p>
87
- <ul>
88
- <li>
89
- <span>Ctrl-S</span>
90
- Focus search input
91
- </li>
92
- <li>
93
- <span>Esc</span>
94
- Blur search input
95
- </li>
96
- </ul>
97
- <p>
98
- In frameless mode you can close the list tab:
99
- </p>
100
- <ul>
101
- <li>
102
- <span>Esc</span>
103
- Close list tab
104
- </li>
105
- </ul>
106
- </div>
107
- </div>
108
- <div id='content'>
109
- <h1>
110
- File:
111
- util.coffee
112
- </h1>
113
- <table class='box'>
114
- <tr>
115
- <td>Defined in:</td>
116
- <td>core</td>
117
- </tr>
118
- </table>
119
- <h2>Method Summary</h2>
120
- <ul class='summary'>
121
- <li>
122
- <span class='signature'>
123
- <a href='#$-file'>
124
- ? (void) <strong>$</strong>(sel, root = document)
125
- </a>
126
- </span>
127
- <span class='desc'>
128
- DOM simplifier (no jQuery dependency) NodeJS compatible
129
- </span>
130
- </li>
131
- </ul>
132
- <h2>Method Details</h2>
133
- <div class='methods'>
134
- <div class='method_details'>
135
- <p class='signature' id='$-file'>
136
- ? (void) <strong>$</strong>(sel, root = document)
137
- </p>
138
- <div class='docstring'>
139
- <p>DOM simplifier (no jQuery dependency)
140
- NodeJS compatible</p>
141
- </div>
142
- <div class='tags'>
143
- </div>
144
- </div>
145
- </div>
146
- </div>
147
- <div id='footer'>
148
- Generated on
149
- Wed Nov 13 2013 09:33:09 GMT-0500 (EST)
150
- by
151
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
152
- v1.7.0
153
- (Node.js v0.10.21).
154
- &#10034;
155
- Press Ctrl-h to see the keyboard shortcuts
156
- &#10034;
157
- <a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
158
- &#10034;
159
- <a href='https://mksoft.ch'>mksoft.ch</a>
160
- </div>
161
- </body>
162
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/index.html DELETED
@@ -1,14 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='assets/codo.css' type='text/css'>
7
- <script src='assets/codo.js'></script>
8
- <script src='assets/search_data.js'></script>
9
- </head>
10
- <frameset cols='20%, *'>
11
- <frame name='list' src='class_list.html'></frame>
12
- <frame name='main' src='README.md.html'></frame>
13
- </frameset>
14
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/method_list.html DELETED
@@ -1,1035 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='assets/codo.css' type='text/css'>
7
- <script src='assets/codo.js'></script>
8
- <script src='assets/search_data.js'></script>
9
- </head>
10
- <body class='list'>
11
- <div class='list' id='content'>
12
- <h1 class='full_list_header'>Method List</h1>
13
- <nav>
14
- <a target='_self' href='class_list.html'>Classes</a>
15
- <a target='_self' href='file_list.html'>Files</a>
16
- <a target='_self' href='method_list.html'>Methods</a>
17
- <a target='_self' href='extra_list.html'>Extras</a>
18
- </nav>
19
- <div id='search'>
20
- Search:
21
- <input type='text'>
22
- </div>
23
- <ul>
24
- <li>
25
- <a href='files/core/util.coffee.html#$-file' target='main' title='$'>
26
- .$
27
- </a>
28
- <small>
29
- (core&#47;util.coffee)
30
- </small>
31
- </li>
32
- <li>
33
- <a href='files/core/autoload.coffee.html#Caman.DOMUpdated-file' target='main' title='Caman.DOMUpdated'>
34
- .Caman.DOMUpdated
35
- </a>
36
- <small>
37
- (core&#47;autoload.coffee)
38
- </small>
39
- </li>
40
- <li>
41
- <a href='files/core/io.coffee.html#Caman.prototype.browserSave-file' target='main' title='Caman.prototype.browserSave'>
42
- .Caman.prototype.browserSave
43
- </a>
44
- <small>
45
- (core&#47;io.coffee)
46
- </small>
47
- </li>
48
- <li>
49
- <a href='files/core/io.coffee.html#Caman.prototype.nodeSave-file' target='main' title='Caman.prototype.nodeSave'>
50
- .Caman.prototype.nodeSave
51
- </a>
52
- <small>
53
- (core&#47;io.coffee)
54
- </small>
55
- </li>
56
- <li>
57
- <a href='files/core/io.coffee.html#Caman.prototype.save-file' target='main' title='Caman.prototype.save'>
58
- .Caman.prototype.save
59
- </a>
60
- <small>
61
- (core&#47;io.coffee)
62
- </small>
63
- </li>
64
- <li>
65
- <a href='files/core/io.coffee.html#Caman.prototype.toBase64-file' target='main' title='Caman.prototype.toBase64'>
66
- .Caman.prototype.toBase64
67
- </a>
68
- <small>
69
- (core&#47;io.coffee)
70
- </small>
71
- </li>
72
- <li>
73
- <a href='files/core/io.coffee.html#Caman.prototype.toImage-file' target='main' title='Caman.prototype.toImage'>
74
- .Caman.prototype.toImage
75
- </a>
76
- <small>
77
- (core&#47;io.coffee)
78
- </small>
79
- </li>
80
- <li>
81
- <a href='classes/Caman/Renderer.html#add-instance' target='main' title='add'>
82
- #add
83
- </a>
84
- <small>
85
- (Caman.Renderer)
86
- </small>
87
- </li>
88
- <li>
89
- <a href='classes/Module.html#aliasFunction-class' target='main' title='aliasFunction'>
90
- .aliasFunction
91
- </a>
92
- <small>
93
- (Module)
94
- </small>
95
- </li>
96
- <li>
97
- <a href='classes/Module.html#aliasProperty-class' target='main' title='aliasProperty'>
98
- .aliasProperty
99
- </a>
100
- <small>
101
- (Module)
102
- </small>
103
- </li>
104
- <li>
105
- <a href='classes/Caman.html#applyCurrentLayer-instance' target='main' title='applyCurrentLayer'>
106
- #applyCurrentLayer
107
- </a>
108
- <small>
109
- (Caman)
110
- </small>
111
- </li>
112
- <li>
113
- <a href='classes/Caman/Layer.html#applyToParent-instance' target='main' title='applyToParent'>
114
- #applyToParent
115
- </a>
116
- <small>
117
- (Caman.Layer)
118
- </small>
119
- </li>
120
- <li>
121
- <a href='classes/Caman.html#assignId-instance' target='main' title='assignId'>
122
- #assignId
123
- </a>
124
- <small>
125
- (Caman)
126
- </small>
127
- </li>
128
- <li>
129
- <a href='classes/Caman/Calculate.html#bezier-class' target='main' title='bezier'>
130
- .bezier
131
- </a>
132
- <small>
133
- (Caman.Calculate)
134
- </small>
135
- </li>
136
- <li>
137
- <a href='classes/Caman/Renderer.html#blockFinished-instance' target='main' title='blockFinished'>
138
- #blockFinished
139
- </a>
140
- <small>
141
- (Caman.Renderer)
142
- </small>
143
- </li>
144
- <li>
145
- <a href='classes/Caman/Analyze.html#calculateLevels-instance' target='main' title='calculateLevels'>
146
- #calculateLevels
147
- </a>
148
- <small>
149
- (Caman.Analyze)
150
- </small>
151
- </li>
152
- <li>
153
- <a href='classes/Util.html#clampRGB-class' target='main' title='clampRGB'>
154
- .clampRGB
155
- </a>
156
- <small>
157
- (Util)
158
- </small>
159
- </li>
160
- <li>
161
- <a href='classes/Caman/Pixel.html#coordinatesToLocation-class' target='main' title='coordinatesToLocation'>
162
- .coordinatesToLocation
163
- </a>
164
- <small>
165
- (Caman.Pixel)
166
- </small>
167
- </li>
168
- <li>
169
- <a href='classes/Util.html#copyAttributes-class' target='main' title='copyAttributes'>
170
- .copyAttributes
171
- </a>
172
- <small>
173
- (Util)
174
- </small>
175
- </li>
176
- <li>
177
- <a href='classes/Caman/Layer.html#copyParent-instance' target='main' title='copyParent'>
178
- #copyParent
179
- </a>
180
- <small>
181
- (Caman.Layer)
182
- </small>
183
- </li>
184
- <li>
185
- <a href='classes/Caman/IO.html#corsEnabled-class' target='main' title='corsEnabled'>
186
- .corsEnabled
187
- </a>
188
- <small>
189
- (Caman.IO)
190
- </small>
191
- </li>
192
- <li>
193
- <a href='classes/Util.html#dataArray-class' target='main' title='dataArray'>
194
- .dataArray
195
- </a>
196
- <small>
197
- (Util)
198
- </small>
199
- </li>
200
- <li>
201
- <a href='classes/Module.html#delegate-class' target='main' title='delegate'>
202
- .delegate
203
- </a>
204
- <small>
205
- (Module)
206
- </small>
207
- </li>
208
- <li>
209
- <a href='classes/Caman/Calculate.html#distance-class' target='main' title='distance'>
210
- .distance
211
- </a>
212
- <small>
213
- (Caman.Calculate)
214
- </small>
215
- </li>
216
- <li>
217
- <a href='classes/Caman.html#domIsLoaded-instance' target='main' title='domIsLoaded'>
218
- #domIsLoaded
219
- </a>
220
- <small>
221
- (Caman)
222
- </small>
223
- </li>
224
- <li>
225
- <a href='classes/Caman/Renderer.html#eachBlock-instance' target='main' title='eachBlock'>
226
- #eachBlock
227
- </a>
228
- <small>
229
- (Caman.Renderer)
230
- </small>
231
- </li>
232
- <li>
233
- <a href='classes/CamanParser.html#execute-instance' target='main' title='execute'>
234
- #execute
235
- </a>
236
- <small>
237
- (CamanParser)
238
- </small>
239
- </li>
240
- <li>
241
- <a href='classes/Caman/Blender.html#execute-class' target='main' title='execute'>
242
- .execute
243
- </a>
244
- <small>
245
- (Caman.Blender)
246
- </small>
247
- </li>
248
- <li>
249
- <a href='classes/Caman/Plugin.html#execute-class' target='main' title='execute'>
250
- .execute
251
- </a>
252
- <small>
253
- (Caman.Plugin)
254
- </small>
255
- </li>
256
- <li>
257
- <a href='classes/Caman/Renderer.html#execute-instance' target='main' title='execute'>
258
- #execute
259
- </a>
260
- <small>
261
- (Caman.Renderer)
262
- </small>
263
- </li>
264
- <li>
265
- <a href='classes/Caman/Store.html#execute-class' target='main' title='execute'>
266
- .execute
267
- </a>
268
- <small>
269
- (Caman.Store)
270
- </small>
271
- </li>
272
- <li>
273
- <a href='classes/Caman/Renderer.html#executeFilter-instance' target='main' title='executeFilter'>
274
- #executeFilter
275
- </a>
276
- <small>
277
- (Caman.Renderer)
278
- </small>
279
- </li>
280
- <li>
281
- <a href='classes/Caman.html#executeLayer-instance' target='main' title='executeLayer'>
282
- #executeLayer
283
- </a>
284
- <small>
285
- (Caman)
286
- </small>
287
- </li>
288
- <li>
289
- <a href='classes/Caman/Renderer.html#executePlugin-instance' target='main' title='executePlugin'>
290
- #executePlugin
291
- </a>
292
- <small>
293
- (Caman.Renderer)
294
- </small>
295
- </li>
296
- <li>
297
- <a href='classes/Util.html#extend-class' target='main' title='extend'>
298
- .extend
299
- </a>
300
- <small>
301
- (Util)
302
- </small>
303
- </li>
304
- <li>
305
- <a href='classes/Module.html#extends-class' target='main' title='extends'>
306
- .extends
307
- </a>
308
- <small>
309
- (Module)
310
- </small>
311
- </li>
312
- <li>
313
- <a href='classes/Caman/Layer.html#fillColor-instance' target='main' title='fillColor'>
314
- #fillColor
315
- </a>
316
- <small>
317
- (Caman.Layer)
318
- </small>
319
- </li>
320
- <li>
321
- <a href='classes/Caman.html#finishInit-instance' target='main' title='finishInit'>
322
- #finishInit
323
- </a>
324
- <small>
325
- (Caman)
326
- </small>
327
- </li>
328
- <li>
329
- <a href='classes/Caman/Store.html#flush-class' target='main' title='flush'>
330
- .flush
331
- </a>
332
- <small>
333
- (Caman.Store)
334
- </small>
335
- </li>
336
- <li>
337
- <a href='classes/Caman/Store.html#get-class' target='main' title='get'>
338
- .get
339
- </a>
340
- <small>
341
- (Caman.Store)
342
- </small>
343
- </li>
344
- <li>
345
- <a href='classes/Caman.html#getAttrId-class' target='main' title='getAttrId'>
346
- .getAttrId
347
- </a>
348
- <small>
349
- (Caman)
350
- </small>
351
- </li>
352
- <li>
353
- <a href='classes/Caman/Pixel.html#getPixel-instance' target='main' title='getPixel'>
354
- #getPixel
355
- </a>
356
- <small>
357
- (Caman.Pixel)
358
- </small>
359
- </li>
360
- <li>
361
- <a href='classes/Caman/Pixel.html#getPixelRelative-instance' target='main' title='getPixelRelative'>
362
- #getPixelRelative
363
- </a>
364
- <small>
365
- (Caman.Pixel)
366
- </small>
367
- </li>
368
- <li>
369
- <a href='classes/Caman/Store.html#has-class' target='main' title='has'>
370
- .has
371
- </a>
372
- <small>
373
- (Caman.Store)
374
- </small>
375
- </li>
376
- <li>
377
- <a href='classes/Caman.html#hasId-instance' target='main' title='hasId'>
378
- #hasId
379
- </a>
380
- <small>
381
- (Caman)
382
- </small>
383
- </li>
384
- <li>
385
- <a href='classes/Caman/Calculate.html#hermite-class' target='main' title='hermite'>
386
- .hermite
387
- </a>
388
- <small>
389
- (Caman.Calculate)
390
- </small>
391
- </li>
392
- <li>
393
- <a href='classes/Caman/Convert.html#hexToRGB-class' target='main' title='hexToRGB'>
394
- .hexToRGB
395
- </a>
396
- <small>
397
- (Caman.Convert)
398
- </small>
399
- </li>
400
- <li>
401
- <a href='classes/Caman.html#hiDPIAdjustments-instance' target='main' title='hiDPIAdjustments'>
402
- #hiDPIAdjustments
403
- </a>
404
- <small>
405
- (Caman)
406
- </small>
407
- </li>
408
- <li>
409
- <a href='classes/Caman.html#hiDPICapable-instance' target='main' title='hiDPICapable'>
410
- #hiDPICapable
411
- </a>
412
- <small>
413
- (Caman)
414
- </small>
415
- </li>
416
- <li>
417
- <a href='classes/Caman.html#hiDPIDisabled-instance' target='main' title='hiDPIDisabled'>
418
- #hiDPIDisabled
419
- </a>
420
- <small>
421
- (Caman)
422
- </small>
423
- </li>
424
- <li>
425
- <a href='classes/Caman.html#hiDPIRatio-instance' target='main' title='hiDPIRatio'>
426
- #hiDPIRatio
427
- </a>
428
- <small>
429
- (Caman)
430
- </small>
431
- </li>
432
- <li>
433
- <a href='classes/Caman.html#hiDPIReplacement-instance' target='main' title='hiDPIReplacement'>
434
- #hiDPIReplacement
435
- </a>
436
- <small>
437
- (Caman)
438
- </small>
439
- </li>
440
- <li>
441
- <a href='classes/Caman/Convert.html#hslToRGB-class' target='main' title='hslToRGB'>
442
- .hslToRGB
443
- </a>
444
- <small>
445
- (Caman.Convert)
446
- </small>
447
- </li>
448
- <li>
449
- <a href='classes/Caman/Convert.html#hsvToRGB-class' target='main' title='hsvToRGB'>
450
- .hsvToRGB
451
- </a>
452
- <small>
453
- (Caman.Convert)
454
- </small>
455
- </li>
456
- <li>
457
- <a href='classes/Caman/Convert.html#hueToRGB-class' target='main' title='hueToRGB'>
458
- .hueToRGB
459
- </a>
460
- <small>
461
- (Caman.Convert)
462
- </small>
463
- </li>
464
- <li>
465
- <a href='classes/Caman.html#imageAdjustments-instance' target='main' title='imageAdjustments'>
466
- #imageAdjustments
467
- </a>
468
- <small>
469
- (Caman)
470
- </small>
471
- </li>
472
- <li>
473
- <a href='classes/Caman.html#imageHeight-instance' target='main' title='imageHeight'>
474
- #imageHeight
475
- </a>
476
- <small>
477
- (Caman)
478
- </small>
479
- </li>
480
- <li>
481
- <a href='classes/Caman.html#imageLoaded-instance' target='main' title='imageLoaded'>
482
- #imageLoaded
483
- </a>
484
- <small>
485
- (Caman)
486
- </small>
487
- </li>
488
- <li>
489
- <a href='classes/Caman.html#imageWidth-instance' target='main' title='imageWidth'>
490
- #imageWidth
491
- </a>
492
- <small>
493
- (Caman)
494
- </small>
495
- </li>
496
- <li>
497
- <a href='classes/Module.html#included-class' target='main' title='included'>
498
- .included
499
- </a>
500
- <small>
501
- (Module)
502
- </small>
503
- </li>
504
- <li>
505
- <a href='classes/Module.html#includes-class' target='main' title='includes'>
506
- .includes
507
- </a>
508
- <small>
509
- (Module)
510
- </small>
511
- </li>
512
- <li>
513
- <a href='classes/Caman.html#initCanvas-instance' target='main' title='initCanvas'>
514
- #initCanvas
515
- </a>
516
- <small>
517
- (Caman)
518
- </small>
519
- </li>
520
- <li>
521
- <a href='classes/Caman.html#initImage-instance' target='main' title='initImage'>
522
- #initImage
523
- </a>
524
- <small>
525
- (Caman)
526
- </small>
527
- </li>
528
- <li>
529
- <a href='classes/Caman.html#initNode-instance' target='main' title='initNode'>
530
- #initNode
531
- </a>
532
- <small>
533
- (Caman)
534
- </small>
535
- </li>
536
- <li>
537
- <a href='classes/Caman.html#isImageLoaded-instance' target='main' title='isImageLoaded'>
538
- #isImageLoaded
539
- </a>
540
- <small>
541
- (Caman)
542
- </small>
543
- </li>
544
- <li>
545
- <a href='classes/Caman/IO.html#isRemote-class' target='main' title='isRemote'>
546
- .isRemote
547
- </a>
548
- <small>
549
- (Caman.IO)
550
- </small>
551
- </li>
552
- <li>
553
- <a href='classes/Caman/IO.html#isURLRemote-class' target='main' title='isURLRemote'>
554
- .isURLRemote
555
- </a>
556
- <small>
557
- (Caman.IO)
558
- </small>
559
- </li>
560
- <li>
561
- <a href='classes/Caman/Convert.html#labToRGB-class' target='main' title='labToRGB'>
562
- .labToRGB
563
- </a>
564
- <small>
565
- (Caman.Convert)
566
- </small>
567
- </li>
568
- <li>
569
- <a href='classes/Caman/Convert.html#labToXYZ-class' target='main' title='labToXYZ'>
570
- .labToXYZ
571
- </a>
572
- <small>
573
- (Caman.Convert)
574
- </small>
575
- </li>
576
- <li>
577
- <a href='classes/Caman/Event.html#listen-class' target='main' title='listen'>
578
- .listen
579
- </a>
580
- <small>
581
- (Caman.Event)
582
- </small>
583
- </li>
584
- <li>
585
- <a href='classes/Caman/Renderer.html#loadOverlay-instance' target='main' title='loadOverlay'>
586
- #loadOverlay
587
- </a>
588
- <small>
589
- (Caman.Renderer)
590
- </small>
591
- </li>
592
- <li>
593
- <a href='classes/Caman/Pixel.html#locationToCoordinates-class' target='main' title='locationToCoordinates'>
594
- .locationToCoordinates
595
- </a>
596
- <small>
597
- (Caman.Pixel)
598
- </small>
599
- </li>
600
- <li>
601
- <a href='classes/Caman/Pixel.html#locationXY-instance' target='main' title='locationXY'>
602
- #locationXY
603
- </a>
604
- <small>
605
- (Caman.Pixel)
606
- </small>
607
- </li>
608
- <li>
609
- <a href='classes/Caman/Calculate.html#luminance-class' target='main' title='luminance'>
610
- .luminance
611
- </a>
612
- <small>
613
- (Caman.Calculate)
614
- </small>
615
- </li>
616
- <li>
617
- <a href='classes/Caman/Calculate.html#missingValues-class' target='main' title='missingValues'>
618
- .missingValues
619
- </a>
620
- <small>
621
- (Caman.Calculate)
622
- </small>
623
- </li>
624
- <li>
625
- <a href='classes/Caman.html#needsHiDPISwap-instance' target='main' title='needsHiDPISwap'>
626
- #needsHiDPISwap
627
- </a>
628
- <small>
629
- (Caman)
630
- </small>
631
- </li>
632
- <li>
633
- <a href='classes/Caman.html#newLayer-instance' target='main' title='newLayer'>
634
- #newLayer
635
- </a>
636
- <small>
637
- (Caman)
638
- </small>
639
- </li>
640
- <li>
641
- <a href='classes/Caman/Layer.html#newLayer-instance' target='main' title='newLayer'>
642
- #newLayer
643
- </a>
644
- <small>
645
- (Caman.Layer)
646
- </small>
647
- </li>
648
- <li>
649
- <a href='classes/Caman.html#nodeFileReady-instance' target='main' title='nodeFileReady'>
650
- #nodeFileReady
651
- </a>
652
- <small>
653
- (Caman)
654
- </small>
655
- </li>
656
- <li>
657
- <a href='classes/Caman/Layer.html#opacity-instance' target='main' title='opacity'>
658
- #opacity
659
- </a>
660
- <small>
661
- (Caman.Layer)
662
- </small>
663
- </li>
664
- <li>
665
- <a href='classes/Caman.html#originalVisiblePixels-instance' target='main' title='originalVisiblePixels'>
666
- #originalVisiblePixels
667
- </a>
668
- <small>
669
- (Caman)
670
- </small>
671
- </li>
672
- <li>
673
- <a href='classes/Caman/Layer.html#overlayImage-instance' target='main' title='overlayImage'>
674
- #overlayImage
675
- </a>
676
- <small>
677
- (Caman.Layer)
678
- </small>
679
- </li>
680
- <li>
681
- <a href='classes/CamanParser.html#parse-instance' target='main' title='parse'>
682
- #parse
683
- </a>
684
- <small>
685
- (CamanParser)
686
- </small>
687
- </li>
688
- <li>
689
- <a href='classes/Caman.html#parseArguments-instance' target='main' title='parseArguments'>
690
- #parseArguments
691
- </a>
692
- <small>
693
- (Caman)
694
- </small>
695
- </li>
696
- <li>
697
- <a href='classes/Caman/Pixel.html#pixelAtLocation-instance' target='main' title='pixelAtLocation'>
698
- #pixelAtLocation
699
- </a>
700
- <small>
701
- (Caman.Pixel)
702
- </small>
703
- </li>
704
- <li>
705
- <a href='classes/Caman.html#popContext-instance' target='main' title='popContext'>
706
- #popContext
707
- </a>
708
- <small>
709
- (Caman)
710
- </small>
711
- </li>
712
- <li>
713
- <a href='classes/Caman.html#process-instance' target='main' title='process'>
714
- #process
715
- </a>
716
- <small>
717
- (Caman)
718
- </small>
719
- </li>
720
- <li>
721
- <a href='classes/Caman.html#processKernel-instance' target='main' title='processKernel'>
722
- #processKernel
723
- </a>
724
- <small>
725
- (Caman)
726
- </small>
727
- </li>
728
- <li>
729
- <a href='classes/Caman/Renderer.html#processKernel-instance' target='main' title='processKernel'>
730
- #processKernel
731
- </a>
732
- <small>
733
- (Caman.Renderer)
734
- </small>
735
- </li>
736
- <li>
737
- <a href='classes/Caman/Renderer.html#processNext-instance' target='main' title='processNext'>
738
- #processNext
739
- </a>
740
- <small>
741
- (Caman.Renderer)
742
- </small>
743
- </li>
744
- <li>
745
- <a href='classes/Caman.html#processPlugin-instance' target='main' title='processPlugin'>
746
- #processPlugin
747
- </a>
748
- <small>
749
- (Caman)
750
- </small>
751
- </li>
752
- <li>
753
- <a href='classes/Caman/IO.html#proxyUrl-class' target='main' title='proxyUrl'>
754
- .proxyUrl
755
- </a>
756
- <small>
757
- (Caman.IO)
758
- </small>
759
- </li>
760
- <li>
761
- <a href='classes/Caman.html#pushContext-instance' target='main' title='pushContext'>
762
- #pushContext
763
- </a>
764
- <small>
765
- (Caman)
766
- </small>
767
- </li>
768
- <li>
769
- <a href='classes/Caman/Store.html#put-class' target='main' title='put'>
770
- .put
771
- </a>
772
- <small>
773
- (Caman.Store)
774
- </small>
775
- </li>
776
- <li>
777
- <a href='classes/Caman/Pixel.html#putPixel-instance' target='main' title='putPixel'>
778
- #putPixel
779
- </a>
780
- <small>
781
- (Caman.Pixel)
782
- </small>
783
- </li>
784
- <li>
785
- <a href='classes/Caman/Pixel.html#putPixelRelative-instance' target='main' title='putPixelRelative'>
786
- #putPixelRelative
787
- </a>
788
- <small>
789
- (Caman.Pixel)
790
- </small>
791
- </li>
792
- <li>
793
- <a href='classes/Caman/Calculate.html#randomRange-class' target='main' title='randomRange'>
794
- .randomRange
795
- </a>
796
- <small>
797
- (Caman.Calculate)
798
- </small>
799
- </li>
800
- <li>
801
- <a href='classes/Caman.html#readFromHttp-instance' target='main' title='readFromHttp'>
802
- #readFromHttp
803
- </a>
804
- <small>
805
- (Caman)
806
- </small>
807
- </li>
808
- <li>
809
- <a href='classes/Caman/Blender.html#register-class' target='main' title='register'>
810
- .register
811
- </a>
812
- <small>
813
- (Caman.Blender)
814
- </small>
815
- </li>
816
- <li>
817
- <a href='classes/Caman/Filter.html#register-class' target='main' title='register'>
818
- .register
819
- </a>
820
- <small>
821
- (Caman.Filter)
822
- </small>
823
- </li>
824
- <li>
825
- <a href='classes/Caman/Plugin.html#register-class' target='main' title='register'>
826
- .register
827
- </a>
828
- <small>
829
- (Caman.Plugin)
830
- </small>
831
- </li>
832
- <li>
833
- <a href='classes/Caman.html#reloadCanvasData-instance' target='main' title='reloadCanvasData'>
834
- #reloadCanvasData
835
- </a>
836
- <small>
837
- (Caman)
838
- </small>
839
- </li>
840
- <li>
841
- <a href='classes/Caman/IO.html#remoteCheck-class' target='main' title='remoteCheck'>
842
- .remoteCheck
843
- </a>
844
- <small>
845
- (Caman.IO)
846
- </small>
847
- </li>
848
- <li>
849
- <a href='classes/Caman.html#render-instance' target='main' title='render'>
850
- #render
851
- </a>
852
- <small>
853
- (Caman)
854
- </small>
855
- </li>
856
- <li>
857
- <a href='classes/Caman/Renderer.html#renderBlock-instance' target='main' title='renderBlock'>
858
- #renderBlock
859
- </a>
860
- <small>
861
- (Caman.Renderer)
862
- </small>
863
- </li>
864
- <li>
865
- <a href='classes/Caman/Renderer.html#renderKernel-instance' target='main' title='renderKernel'>
866
- #renderKernel
867
- </a>
868
- <small>
869
- (Caman.Renderer)
870
- </small>
871
- </li>
872
- <li>
873
- <a href='classes/Caman.html#replaceCanvas-instance' target='main' title='replaceCanvas'>
874
- #replaceCanvas
875
- </a>
876
- <small>
877
- (Caman)
878
- </small>
879
- </li>
880
- <li>
881
- <a href='classes/Caman.html#reset-instance' target='main' title='reset'>
882
- #reset
883
- </a>
884
- <small>
885
- (Caman)
886
- </small>
887
- </li>
888
- <li>
889
- <a href='classes/Caman.html#resetOriginalPixelData-instance' target='main' title='resetOriginalPixelData'>
890
- #resetOriginalPixelData
891
- </a>
892
- <small>
893
- (Caman)
894
- </small>
895
- </li>
896
- <li>
897
- <a href='classes/Caman.html#revert-instance' target='main' title='revert'>
898
- #revert
899
- </a>
900
- <small>
901
- (Caman)
902
- </small>
903
- </li>
904
- <li>
905
- <a href='classes/Caman/Convert.html#rgbToHSL-class' target='main' title='rgbToHSL'>
906
- .rgbToHSL
907
- </a>
908
- <small>
909
- (Caman.Convert)
910
- </small>
911
- </li>
912
- <li>
913
- <a href='classes/Caman/Convert.html#rgbToHSV-class' target='main' title='rgbToHSV'>
914
- .rgbToHSV
915
- </a>
916
- <small>
917
- (Caman.Convert)
918
- </small>
919
- </li>
920
- <li>
921
- <a href='classes/Caman/Convert.html#rgbToLab-class' target='main' title='rgbToLab'>
922
- .rgbToLab
923
- </a>
924
- <small>
925
- (Caman.Convert)
926
- </small>
927
- </li>
928
- <li>
929
- <a href='classes/Caman/Convert.html#rgbToXYZ-class' target='main' title='rgbToXYZ'>
930
- .rgbToXYZ
931
- </a>
932
- <small>
933
- (Caman.Convert)
934
- </small>
935
- </li>
936
- <li>
937
- <a href='classes/Caman/Layer.html#setBlendingMode-instance' target='main' title='setBlendingMode'>
938
- #setBlendingMode
939
- </a>
940
- <small>
941
- (Caman.Layer)
942
- </small>
943
- </li>
944
- <li>
945
- <a href='classes/Caman/Pixel.html#setContext-instance' target='main' title='setContext'>
946
- #setContext
947
- </a>
948
- <small>
949
- (Caman.Pixel)
950
- </small>
951
- </li>
952
- <li>
953
- <a href='classes/Caman.html#setInitObject-instance' target='main' title='setInitObject'>
954
- #setInitObject
955
- </a>
956
- <small>
957
- (Caman)
958
- </small>
959
- </li>
960
- <li>
961
- <a href='classes/Caman.html#setup-instance' target='main' title='setup'>
962
- #setup
963
- </a>
964
- <small>
965
- (Caman)
966
- </small>
967
- </li>
968
- <li>
969
- <a href='classes/Caman/Pixel.html#toHex-instance' target='main' title='toHex'>
970
- #toHex
971
- </a>
972
- <small>
973
- (Caman.Pixel)
974
- </small>
975
- </li>
976
- <li>
977
- <a href='classes/Caman.html#toString-class' target='main' title='toString'>
978
- .toString
979
- </a>
980
- <small>
981
- (Caman)
982
- </small>
983
- </li>
984
- <li>
985
- <a href='classes/Caman/Pixel.html#toString-instance' target='main' title='toString'>
986
- #toString
987
- </a>
988
- <small>
989
- (Caman.Pixel)
990
- </small>
991
- </li>
992
- <li>
993
- <a href='classes/Caman/Event.html#trigger-class' target='main' title='trigger'>
994
- .trigger
995
- </a>
996
- <small>
997
- (Caman.Event)
998
- </small>
999
- </li>
1000
- <li>
1001
- <a href='classes/Caman/IO.html#useProxy-class' target='main' title='useProxy'>
1002
- .useProxy
1003
- </a>
1004
- <small>
1005
- (Caman.IO)
1006
- </small>
1007
- </li>
1008
- <li>
1009
- <a href='classes/Caman.html#waitForImageLoaded-instance' target='main' title='waitForImageLoaded'>
1010
- #waitForImageLoaded
1011
- </a>
1012
- <small>
1013
- (Caman)
1014
- </small>
1015
- </li>
1016
- <li>
1017
- <a href='classes/Caman/Convert.html#xyzToLab-class' target='main' title='xyzToLab'>
1018
- .xyzToLab
1019
- </a>
1020
- <small>
1021
- (Caman.Convert)
1022
- </small>
1023
- </li>
1024
- <li>
1025
- <a href='classes/Caman/Convert.html#xyzToRGB-class' target='main' title='xyzToRGB'>
1026
- .xyzToRGB
1027
- </a>
1028
- <small>
1029
- (Caman.Convert)
1030
- </small>
1031
- </li>
1032
- </ul>
1033
- </div>
1034
- </body>
1035
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/api/mixin_list.html DELETED
@@ -1,28 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset='UTF-8'>
5
- <title>CamanJS Documentation</title>
6
- <link rel='stylesheet' href='assets/codo.css' type='text/css'>
7
- <script src='assets/codo.js'></script>
8
- <script src='assets/search_data.js'></script>
9
- </head>
10
- <body class='list'>
11
- <div class='list tree' id='content'>
12
- <h1 class='full_list_header'>Mixin List</h1>
13
- <nav>
14
- <a target='_self' href='class_list.html'>Classes</a>
15
- <a target='_self' href='file_list.html'>Files</a>
16
- <a target='_self' href='method_list.html'>Methods</a>
17
- <a target='_self' href='extra_list.html'>Extras</a>
18
- </nav>
19
- <div id='search'>
20
- Search:
21
- <input type='text'>
22
- </div>
23
- <ul>
24
- </ul>
25
-
26
- </div>
27
- </body>
28
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/bower.json DELETED
@@ -1,14 +0,0 @@
1
- {
2
- "name": "caman",
3
- "version": "4.1.2",
4
- "main": ["./dist/caman.min.js", "./dist/caman.full.min.js"],
5
- "ignore": [
6
- "adapters/",
7
- "docs/",
8
- "examples/",
9
- "src/",
10
- "test/"
11
- ],
12
- "dependencies": {
13
- }
14
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/dist/caman.css DELETED
@@ -1,223 +0,0 @@
1
- @media screen and (max-width: 992px) {
2
-
3
- body #caman_content .wooccmsidebar {
4
- width: 100%;
5
- top: 60%;
6
- }
7
- body #caman_content .wooccmimageeditor{
8
- width: 100%;
9
- left: inherit;
10
- }
11
- .wooccmsidebar #Filters .Filter {
12
- width: 45%;
13
- }
14
- }
15
-
16
- @media screen and (max-width: 933px) {
17
-
18
- #caman_content .wooccmsidebar #Filters .Filter {
19
- width: 44%;
20
- }
21
- }
22
-
23
- @media screen and (max-width: 783px) {
24
-
25
- body #caman_content .wooccmsidebar #Filters .Filter {
26
- width: 42%;
27
- }
28
- }
29
-
30
- @media screen and (max-width: 596px) {
31
-
32
- body #caman_content .wooccmsidebar #Filters .Filter {
33
- width: 100%;
34
- }
35
- }
36
-
37
-
38
- #Filters .Filter{
39
- float:left;
40
- width:300px;
41
- margin-right: 20px;
42
- padding-right: 66px;
43
- margin-left: 25px;
44
- }
45
-
46
- #Filters .Filter>div{
47
- padding:5px 10px;
48
- }
49
-
50
- #Filters .Filter .FilterName{
51
- float:left;
52
- }
53
-
54
- #Filters .Filter .FilterName p{
55
- margin:0;
56
- text-shadow: none;
57
- text-rendering: optimizeLegibility;
58
- text-decoration: none;
59
- color: #777;
60
- }
61
-
62
- #Filters .Filter .FilterSetting{float:right}#Filters .Filter .FilterSetting input[type="range"]{
63
- -webkit-appearance:none!important;
64
- width:150px;
65
- background-color:#434341;
66
- height:1px;
67
- vertical-align:1px;
68
- }
69
-
70
- #Filters .Filter .FilterSetting input[type="range"]::-webkit-slider-thumb{
71
- -webkit-appearance:none!important;
72
- height:12px;
73
- width:15px;
74
- background-color:#368ad2;
75
- cursor:pointer;
76
- }
77
-
78
- #Filters .Filter .FilterSetting .FilterValue{
79
- width:30px;
80
- display:inline-block;
81
- }
82
-
83
- #PresetFilters a{
84
- -webkit-border-radius:3px;
85
- -moz-border-radius:3px;
86
- border-radius:3px;
87
- -webkit-transition:background-color .3s ease-out;
88
- -moz-transition:background-color .3s ease-out;
89
- transition:background-color .3s ease-out;
90
- background-color:#368ad2;
91
- display:block;
92
- float:left;
93
- text-align:center;
94
- padding:8px 10px;
95
- color:black;
96
- margin:5px;
97
- border:none;
98
- font-size:13px;
99
- width:120px;
100
- cursor:pointer
101
- }
102
-
103
- #PresetFilters a:hover{
104
- background-color:#4b96d7;
105
- }
106
-
107
- #PresetFilters a:active{
108
- -webkit-box-shadow:inset 1px 1px 3px rgba(0,0,0,0.3);
109
- -moz-box-shadow:inset 1px 1px 3px rgba(0,0,0,0.3);
110
- box-shadow:inset 1px 1px 3px rgba(0,0,0,0.3);
111
- }
112
-
113
- #PresetFilters a.Active{
114
- background-color:#e69751;
115
- }
116
-
117
- #caman_content {
118
- color: #fff;
119
- text-align: center;
120
- position: fixed;
121
- width: 100%;
122
- height: 100%;
123
- left: 0;
124
- top: 0;
125
- -webkit-box-sizing: border-box;
126
- -moz-box-sizing: border-box;
127
- box-sizing: border-box;
128
- background: #1B1917;
129
- font-weight: normal;
130
- text-shadow: none;
131
- z-index: 99999;
132
- }
133
-
134
- #caman_content h3{
135
- color: #777;
136
- font-weight: normal;
137
- text-shadow: none;
138
- padding-top: 8px;
139
- text-transform: uppercase;
140
- }
141
-
142
- #caman_content .wooccmsidebar {
143
- width: 300px;
144
- margin: 0;
145
- z-index: 1;
146
- overflow-x: hidden;
147
- overflow-y: auto;
148
- float:left;
149
- height: initial;
150
- position: absolute;
151
- bottom: 0;
152
- top: 44px;
153
- background: #1B1917;
154
- }
155
-
156
- #caman_content .Clear {
157
- padding: 15px;
158
- float: left;
159
- width: 91%;
160
- border-top: 1px solid black;
161
- margin-top: 30px;
162
- }
163
-
164
- #caman_content #Filters {
165
- margin-top: 25px;
166
- }
167
-
168
- #caman_content .image-edit {
169
- overflow: auto;
170
- }
171
-
172
- #caman_content #wooccmtoolbar {
173
- z-index: 2;
174
- background: -moz-linear-gradient(#3B3937, #2B2927);
175
- background: -webkit-gradient(linear, left top, left bottom, from(#3B3937), to(#2B2927));
176
- -moz-box-shadow: 0 1px 0 black;
177
- -webkit-box-shadow: 0 1px 0 black;
178
- height: 44px;
179
- width: 100%;
180
- }
181
-
182
- #caman_content #wooccmtoolbar #close {
183
- margin-left: 0;
184
- }
185
-
186
- #caman_content #wooccmtoolbar .button {
187
- float: left;
188
- line-height: 27px;
189
- margin: 7px 37px;
190
- display: inline-block;
191
- padding: 1px 15px;
192
- border-radius: 4px;
193
- vertical-align: top;
194
- background: -moz-linear-gradient(#4B4947, #32302D);
195
- background: -webkit-gradient(linear, left top, left bottom, from(#4B4947), to(#32302D));
196
- -moz-box-shadow: inset 0 1px 0 #5B5957, 0 -1px 0 black, 0 1px 0 black, -1px 0 0 black, 1px 0 0 black, 0 1px 1px #111;
197
- -webkit-box-shadow: inset 0 1px 0 #5B5957, 0 -1px 0 black, 0 1px 0 black, -1px 0 0 black, 1px 0 0 black, 0 1px 1px #111;
198
- cursor: pointer;
199
- }
200
-
201
- #caman_content .wooccmimageeditor {
202
- position: absolute;
203
- left: 300px;
204
- top: 44px;
205
- right: 0;
206
- bottom: 0;
207
- overflow: auto;
208
- padding: 30px;
209
- }
210
-
211
- #caman_content ::-webkit-scrollbar {
212
- width: 15px;
213
- }
214
-
215
- #caman_content ::-webkit-scrollbar-track {
216
- -webkit-box-shadow: inset 0 0 6px black;
217
- border-radius: 10px;
218
- }
219
-
220
- #caman_content ::-webkit-scrollbar-thumb {
221
- border-radius: 10px;
222
- -webkit-box-shadow: inset 0 0 6px black;
223
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/dist/caman.full.js DELETED
@@ -1,3676 +0,0 @@
1
- // Generated by CoffeeScript 1.6.3
2
- (function() {
3
- var $, Analyze, Blender, Calculate, Caman, CamanParser, Canvas, Convert, Event, Fiber, Filter, IO, Image, Layer, Log, Module, Pixel, Plugin, Renderer, Root, Store, Util, fs, http, moduleKeywords, slice, vignetteFilters,
4
- __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
5
- __slice = [].slice,
6
- __hasProp = {}.hasOwnProperty,
7
- __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
8
- __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
9
-
10
- moduleKeywords = ['extended', 'included'];
11
-
12
- Module = (function() {
13
- function Module() {}
14
-
15
- Module["extends"] = function(obj) {
16
- var key, value, _ref;
17
- for (key in obj) {
18
- value = obj[key];
19
- if (__indexOf.call(moduleKeywords, key) < 0) {
20
- this[key] = value;
21
- }
22
- }
23
- if ((_ref = obj.extended) != null) {
24
- _ref.apply(this);
25
- }
26
- return this;
27
- };
28
-
29
- Module.includes = function(obj) {
30
- var key, value, _ref;
31
- for (key in obj) {
32
- value = obj[key];
33
- if (__indexOf.call(moduleKeywords, key) < 0) {
34
- this.prototype[key] = value;
35
- }
36
- }
37
- if ((_ref = obj.included) != null) {
38
- _ref.apply(this);
39
- }
40
- return this;
41
- };
42
-
43
- Module.delegate = function() {
44
- var args, source, target, _i, _len, _results;
45
- args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
46
- target = args.pop();
47
- _results = [];
48
- for (_i = 0, _len = args.length; _i < _len; _i++) {
49
- source = args[_i];
50
- _results.push(this.prototype[source] = target.prototype[source]);
51
- }
52
- return _results;
53
- };
54
-
55
- Module.aliasFunction = function(to, from) {
56
- var _this = this;
57
- return this.prototype[to] = function() {
58
- var args;
59
- args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
60
- return _this.prototype[from].apply(_this, args);
61
- };
62
- };
63
-
64
- Module.aliasProperty = function(to, from) {
65
- return Object.defineProperty(this.prototype, to, {
66
- get: function() {
67
- return this[from];
68
- },
69
- set: function(val) {
70
- return this[from] = val;
71
- }
72
- });
73
- };
74
-
75
- Module.included = function(func) {
76
- return func.call(this, this.prototype);
77
- };
78
-
79
- return Module;
80
-
81
- })();
82
-
83
- slice = Array.prototype.slice;
84
-
85
- $ = function(sel, root) {
86
- if (root == null) {
87
- root = document;
88
- }
89
- if (typeof sel === "object" || (typeof exports !== "undefined" && exports !== null)) {
90
- return sel;
91
- }
92
- return root.querySelector(sel);
93
- };
94
-
95
- Util = (function() {
96
- function Util() {}
97
-
98
- Util.uniqid = (function() {
99
- var id;
100
- id = 0;
101
- return {
102
- get: function() {
103
- return id++;
104
- }
105
- };
106
- })();
107
-
108
- Util.extend = function() {
109
- var copy, dest, obj, prop, src, _i, _len;
110
- obj = arguments[0], src = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
111
- dest = obj;
112
- for (_i = 0, _len = src.length; _i < _len; _i++) {
113
- copy = src[_i];
114
- for (prop in copy) {
115
- if (!__hasProp.call(copy, prop)) continue;
116
- dest[prop] = copy[prop];
117
- }
118
- }
119
- return dest;
120
- };
121
-
122
- Util.clampRGB = function(val) {
123
- if (val < 0) {
124
- return 0;
125
- }
126
- if (val > 255) {
127
- return 255;
128
- }
129
- return val;
130
- };
131
-
132
- Util.copyAttributes = function(from, to, opts) {
133
- var attr, _i, _len, _ref, _ref1, _results;
134
- if (opts == null) {
135
- opts = {};
136
- }
137
- _ref = from.attributes;
138
- _results = [];
139
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
140
- attr = _ref[_i];
141
- if ((opts.except != null) && (_ref1 = attr.nodeName, __indexOf.call(opts.except, _ref1) >= 0)) {
142
- continue;
143
- }
144
- _results.push(to.setAttribute(attr.nodeName, attr.nodeValue));
145
- }
146
- return _results;
147
- };
148
-
149
- Util.dataArray = function(length) {
150
- if (length == null) {
151
- length = 0;
152
- }
153
- if (Caman.NodeJS || (window.Uint8Array != null)) {
154
- return new Uint8Array(length);
155
- }
156
- return new Array(length);
157
- };
158
-
159
- return Util;
160
-
161
- })();
162
-
163
- if (typeof exports !== "undefined" && exports !== null) {
164
- Root = exports;
165
- Canvas = require('canvas');
166
- Image = Canvas.Image;
167
- Fiber = require('fibers');
168
- fs = require('fs');
169
- http = require('http');
170
- } else {
171
- Root = window;
172
- }
173
-
174
- Caman = (function(_super) {
175
- __extends(Caman, _super);
176
-
177
- Caman.version = {
178
- release: "4.1.2",
179
- date: "7/27/2013"
180
- };
181
-
182
- Caman.DEBUG = false;
183
-
184
- Caman.allowRevert = true;
185
-
186
- Caman.crossOrigin = "anonymous";
187
-
188
- Caman.remoteProxy = "";
189
-
190
- Caman.proxyParam = "camanProxyUrl";
191
-
192
- Caman.NodeJS = typeof exports !== "undefined" && exports !== null;
193
-
194
- Caman.autoload = !Caman.NodeJS;
195
-
196
- Caman.toString = function() {
197
- return "Version " + Caman.version.release + ", Released " + Caman.version.date;
198
- };
199
-
200
- Caman.getAttrId = function(canvas) {
201
- if (Caman.NodeJS) {
202
- return true;
203
- }
204
- if (typeof canvas === "string") {
205
- canvas = $(canvas);
206
- }
207
- if (!((canvas != null) && (canvas.getAttribute != null))) {
208
- return null;
209
- }
210
- return canvas.getAttribute('data-caman-id');
211
- };
212
-
213
- function Caman() {
214
- this.nodeFileReady = __bind(this.nodeFileReady, this);
215
- var args, callback, id,
216
- _this = this;
217
- if (arguments.length === 0) {
218
- throw "Invalid arguments";
219
- }
220
- if (this instanceof Caman) {
221
- this.finishInit = this.finishInit.bind(this);
222
- this.imageLoaded = this.imageLoaded.bind(this);
223
- args = arguments[0];
224
- if (!Caman.NodeJS) {
225
- id = parseInt(Caman.getAttrId(args[0]), 10);
226
- callback = typeof args[1] === "function" ? args[1] : typeof args[2] === "function" ? args[2] : function() {};
227
- if (!isNaN(id) && Store.has(id)) {
228
- return Store.execute(id, callback);
229
- }
230
- }
231
- this.id = Util.uniqid.get();
232
- this.initializedPixelData = this.originalPixelData = null;
233
- this.cropCoordinates = {
234
- x: 0,
235
- y: 0
236
- };
237
- this.cropped = false;
238
- this.resized = false;
239
- this.pixelStack = [];
240
- this.layerStack = [];
241
- this.canvasQueue = [];
242
- this.currentLayer = null;
243
- this.scaled = false;
244
- this.analyze = new Analyze(this);
245
- this.renderer = new Renderer(this);
246
- this.domIsLoaded(function() {
247
- _this.parseArguments(args);
248
- return _this.setup();
249
- });
250
- return this;
251
- } else {
252
- return new Caman(arguments);
253
- }
254
- }
255
-
256
- Caman.prototype.domIsLoaded = function(cb) {
257
- var listener,
258
- _this = this;
259
- if (Caman.NodeJS) {
260
- return setTimeout(function() {
261
- return cb.call(_this);
262
- }, 0);
263
- } else {
264
- if (document.readyState === "complete") {
265
- Log.debug("DOM initialized");
266
- return setTimeout(function() {
267
- return cb.call(_this);
268
- }, 0);
269
- } else {
270
- listener = function() {
271
- if (document.readyState === "complete") {
272
- Log.debug("DOM initialized");
273
- return cb.call(_this);
274
- }
275
- };
276
- return document.addEventListener("readystatechange", listener, false);
277
- }
278
- }
279
- };
280
-
281
- Caman.prototype.parseArguments = function(args) {
282
- var key, val, _ref, _results;
283
- if (args.length === 0) {
284
- throw "Invalid arguments given";
285
- }
286
- this.initObj = null;
287
- this.initType = null;
288
- this.imageUrl = null;
289
- this.callback = function() {};
290
- this.setInitObject(args[0]);
291
- if (args.length === 1) {
292
- return;
293
- }
294
- switch (typeof args[1]) {
295
- case "string":
296
- this.imageUrl = args[1];
297
- break;
298
- case "function":
299
- this.callback = args[1];
300
- }
301
- if (args.length === 2) {
302
- return;
303
- }
304
- this.callback = args[2];
305
- if (args.length === 4) {
306
- _ref = args[4];
307
- _results = [];
308
- for (key in _ref) {
309
- if (!__hasProp.call(_ref, key)) continue;
310
- val = _ref[key];
311
- _results.push(this.options[key] = val);
312
- }
313
- return _results;
314
- }
315
- };
316
-
317
- Caman.prototype.setInitObject = function(obj) {
318
- if (Caman.NodeJS) {
319
- this.initObj = obj;
320
- this.initType = 'node';
321
- return;
322
- }
323
- if (typeof obj === "object") {
324
- this.initObj = obj;
325
- } else {
326
- this.initObj = $(obj);
327
- }
328
- if (this.initObj == null) {
329
- throw "Could not find image or canvas for initialization.";
330
- }
331
- return this.initType = this.initObj.nodeName.toLowerCase();
332
- };
333
-
334
- Caman.prototype.setup = function() {
335
- switch (this.initType) {
336
- case "node":
337
- return this.initNode();
338
- case "img":
339
- return this.initImage();
340
- case "canvas":
341
- return this.initCanvas();
342
- }
343
- };
344
-
345
- Caman.prototype.initNode = function() {
346
- Log.debug("Initializing for NodeJS");
347
- if (typeof this.initObj === "string" && this.initObj.match(/^https?:\/\//)) {
348
- return this.readFromHttp(this.initObj, this.nodeFileReady);
349
- } else if (typeof this.initObj === "string") {
350
- return fs.readFile(this.initObj, this.nodeFileReady);
351
- } else {
352
- return this.nodeFileReady(null, this.initObj);
353
- }
354
- };
355
-
356
- Caman.prototype.readFromHttp = function(url, callback) {
357
- var req;
358
- Log.debug("Fetching image from " + url);
359
- req = http.get(url, function(res) {
360
- var buf;
361
- buf = '';
362
- res.setEncoding('binary');
363
- res.on('data', function(chunk) {
364
- return buf += chunk;
365
- });
366
- return res.on('end', function() {
367
- return callback(null, new Buffer(buf, 'binary'));
368
- });
369
- });
370
- return req.on('error', callback);
371
- };
372
-
373
- Caman.prototype.nodeFileReady = function(err, data) {
374
- if (err) {
375
- throw err;
376
- }
377
- this.image = new Image();
378
- this.image.src = data;
379
- Log.debug("Image loaded. Width = " + (this.imageWidth()) + ", Height = " + (this.imageHeight()));
380
- this.canvas = new Canvas(this.imageWidth(), this.imageHeight());
381
- return this.finishInit();
382
- };
383
-
384
- Caman.prototype.initImage = function() {
385
- this.image = this.initObj;
386
- this.canvas = document.createElement('canvas');
387
- this.context = this.canvas.getContext('2d');
388
- Util.copyAttributes(this.image, this.canvas, {
389
- except: ['src']
390
- });
391
- if (this.image.parentNode != null) {
392
- this.image.parentNode.replaceChild(this.canvas, this.image);
393
- }
394
- this.imageAdjustments();
395
- return this.waitForImageLoaded();
396
- };
397
-
398
- Caman.prototype.initCanvas = function() {
399
- this.canvas = this.initObj;
400
- this.context = this.canvas.getContext('2d');
401
- if (this.imageUrl != null) {
402
- this.image = document.createElement('img');
403
- this.image.src = this.imageUrl;
404
- this.imageAdjustments();
405
- return this.waitForImageLoaded();
406
- } else {
407
- return this.finishInit();
408
- }
409
- };
410
-
411
- Caman.prototype.imageAdjustments = function() {
412
- if (this.needsHiDPISwap()) {
413
- Log.debug(this.image.src, "->", this.hiDPIReplacement());
414
- this.swapped = true;
415
- this.image.src = this.hiDPIReplacement();
416
- }
417
- if (IO.isRemote(this.image)) {
418
- this.image.src = IO.proxyUrl(this.image.src);
419
- return Log.debug("Remote image detected, using URL = " + this.image.src);
420
- }
421
- };
422
-
423
- Caman.prototype.waitForImageLoaded = function() {
424
- if (this.isImageLoaded()) {
425
- return this.imageLoaded();
426
- } else {
427
- return this.image.onload = this.imageLoaded;
428
- }
429
- };
430
-
431
- Caman.prototype.isImageLoaded = function() {
432
- if (!this.image.complete) {
433
- return false;
434
- }
435
- if ((this.image.naturalWidth != null) && this.image.naturalWidth === 0) {
436
- return false;
437
- }
438
- return true;
439
- };
440
-
441
- Caman.prototype.imageWidth = function() {
442
- return this.image.width || this.image.naturalWidth;
443
- };
444
-
445
- Caman.prototype.imageHeight = function() {
446
- return this.image.height || this.image.naturalHeight;
447
- };
448
-
449
- Caman.prototype.imageLoaded = function() {
450
- Log.debug("Image loaded. Width = " + (this.imageWidth()) + ", Height = " + (this.imageHeight()));
451
- if (this.swapped) {
452
- this.canvas.width = this.imageWidth() / this.hiDPIRatio();
453
- this.canvas.height = this.imageHeight() / this.hiDPIRatio();
454
- } else {
455
- this.canvas.width = this.imageWidth();
456
- this.canvas.height = this.imageHeight();
457
- }
458
- return this.finishInit();
459
- };
460
-
461
- Caman.prototype.finishInit = function() {
462
- var i, pixel, _i, _len, _ref;
463
- if (this.context == null) {
464
- this.context = this.canvas.getContext('2d');
465
- }
466
- this.originalWidth = this.preScaledWidth = this.width = this.canvas.width;
467
- this.originalHeight = this.preScaledHeight = this.height = this.canvas.height;
468
- this.hiDPIAdjustments();
469
- if (!this.hasId()) {
470
- this.assignId();
471
- }
472
- if (this.image != null) {
473
- this.context.drawImage(this.image, 0, 0, this.imageWidth(), this.imageHeight(), 0, 0, this.preScaledWidth, this.preScaledHeight);
474
- }
475
- this.imageData = this.context.getImageData(0, 0, this.canvas.width, this.canvas.height);
476
- this.pixelData = this.imageData.data;
477
- if (Caman.allowRevert) {
478
- this.initializedPixelData = Util.dataArray(this.pixelData.length);
479
- this.originalPixelData = Util.dataArray(this.pixelData.length);
480
- _ref = this.pixelData;
481
- for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
482
- pixel = _ref[i];
483
- this.initializedPixelData[i] = pixel;
484
- this.originalPixelData[i] = pixel;
485
- }
486
- }
487
- this.dimensions = {
488
- width: this.canvas.width,
489
- height: this.canvas.height
490
- };
491
- if (!Caman.NodeJS) {
492
- Store.put(this.id, this);
493
- }
494
- this.callback.call(this, this);
495
- return this.callback = function() {};
496
- };
497
-
498
- Caman.prototype.reloadCanvasData = function() {
499
- this.imageData = this.context.getImageData(0, 0, this.canvas.width, this.canvas.height);
500
- return this.pixelData = this.imageData.data;
501
- };
502
-
503
- Caman.prototype.resetOriginalPixelData = function() {
504
- var i, pixel, _i, _len, _ref, _results;
505
- if (!Caman.allowRevert) {
506
- throw "Revert disabled";
507
- }
508
- this.originalPixelData = Util.dataArray(this.pixelData.length);
509
- _ref = this.pixelData;
510
- _results = [];
511
- for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
512
- pixel = _ref[i];
513
- _results.push(this.originalPixelData[i] = pixel);
514
- }
515
- return _results;
516
- };
517
-
518
- Caman.prototype.hasId = function() {
519
- return Caman.getAttrId(this.canvas) != null;
520
- };
521
-
522
- Caman.prototype.assignId = function() {
523
- if (Caman.NodeJS || this.canvas.getAttribute('data-caman-id')) {
524
- return;
525
- }
526
- return this.canvas.setAttribute('data-caman-id', this.id);
527
- };
528
-
529
- Caman.prototype.hiDPIDisabled = function() {
530
- return this.canvas.getAttribute('data-caman-hidpi-disabled') !== null;
531
- };
532
-
533
- Caman.prototype.hiDPIAdjustments = function() {
534
- var ratio;
535
- if (Caman.NodeJS || !this.needsHiDPISwap()) {
536
- return;
537
- }
538
- ratio = this.hiDPIRatio();
539
- if (ratio !== 1) {
540
- Log.debug("HiDPI ratio = " + ratio);
541
- this.scaled = true;
542
- this.preScaledWidth = this.canvas.width;
543
- this.preScaledHeight = this.canvas.height;
544
- this.canvas.width = this.preScaledWidth * ratio;
545
- this.canvas.height = this.preScaledHeight * ratio;
546
- this.canvas.style.width = "" + this.preScaledWidth + "px";
547
- this.canvas.style.height = "" + this.preScaledHeight + "px";
548
- this.context.scale(ratio, ratio);
549
- this.width = this.originalWidth = this.canvas.width;
550
- return this.height = this.originalHeight = this.canvas.height;
551
- }
552
- };
553
-
554
- Caman.prototype.hiDPIRatio = function() {
555
- var backingStoreRatio, devicePixelRatio;
556
- devicePixelRatio = window.devicePixelRatio || 1;
557
- backingStoreRatio = this.context.webkitBackingStorePixelRatio || this.context.mozBackingStorePixelRatio || this.context.msBackingStorePixelRatio || this.context.oBackingStorePixelRatio || this.context.backingStorePixelRatio || 1;
558
- return devicePixelRatio / backingStoreRatio;
559
- };
560
-
561
- Caman.prototype.hiDPICapable = function() {
562
- return (window.devicePixelRatio != null) && window.devicePixelRatio !== 1;
563
- };
564
-
565
- Caman.prototype.needsHiDPISwap = function() {
566
- if (this.hiDPIDisabled() || !this.hiDPICapable()) {
567
- return false;
568
- }
569
- return this.hiDPIReplacement() !== null;
570
- };
571
-
572
- Caman.prototype.hiDPIReplacement = function() {
573
- if (this.image == null) {
574
- return null;
575
- }
576
- return this.image.getAttribute('data-caman-hidpi');
577
- };
578
-
579
- Caman.prototype.replaceCanvas = function(newCanvas) {
580
- var oldCanvas;
581
- oldCanvas = this.canvas;
582
- this.canvas = newCanvas;
583
- this.context = this.canvas.getContext('2d');
584
- if (!Caman.NodeJS) {
585
- oldCanvas.parentNode.replaceChild(this.canvas, oldCanvas);
586
- }
587
- this.width = this.canvas.width;
588
- this.height = this.canvas.height;
589
- this.reloadCanvasData();
590
- return this.dimensions = {
591
- width: this.canvas.width,
592
- height: this.canvas.height
593
- };
594
- };
595
-
596
- Caman.prototype.render = function(callback) {
597
- var _this = this;
598
- if (callback == null) {
599
- callback = function() {};
600
- }
601
- Event.trigger(this, "renderStart");
602
- return this.renderer.execute(function() {
603
- _this.context.putImageData(_this.imageData, 0, 0);
604
- return callback.call(_this);
605
- });
606
- };
607
-
608
- Caman.prototype.revert = function(updateContext) {
609
- var i, pixel, _i, _len, _ref;
610
- if (updateContext == null) {
611
- updateContext = true;
612
- }
613
- if (!Caman.allowRevert) {
614
- throw "Revert disabled";
615
- }
616
- _ref = this.originalVisiblePixels();
617
- for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
618
- pixel = _ref[i];
619
- this.pixelData[i] = pixel;
620
- }
621
- if (updateContext) {
622
- return this.context.putImageData(this.imageData, 0, 0);
623
- }
624
- };
625
-
626
- Caman.prototype.reset = function() {
627
- var canvas, ctx, i, imageData, pixel, pixelData, _i, _len, _ref;
628
- canvas = document.createElement('canvas');
629
- Util.copyAttributes(this.canvas, canvas);
630
- canvas.width = this.originalWidth;
631
- canvas.height = this.originalHeight;
632
- ctx = canvas.getContext('2d');
633
- imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
634
- pixelData = imageData.data;
635
- _ref = this.initializedPixelData;
636
- for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
637
- pixel = _ref[i];
638
- pixelData[i] = pixel;
639
- }
640
- ctx.putImageData(imageData, 0, 0);
641
- this.cropCoordinates = {
642
- x: 0,
643
- y: 0
644
- };
645
- this.resized = false;
646
- return this.replaceCanvas(canvas);
647
- };
648
-
649
- Caman.prototype.originalVisiblePixels = function() {
650
- var canvas, coord, ctx, endX, endY, i, imageData, pixel, pixelData, pixels, scaledCanvas, startX, startY, width, _i, _j, _len, _ref, _ref1, _ref2, _ref3;
651
- if (!Caman.allowRevert) {
652
- throw "Revert disabled";
653
- }
654
- pixels = [];
655
- startX = this.cropCoordinates.x;
656
- endX = startX + this.width;
657
- startY = this.cropCoordinates.y;
658
- endY = startY + this.height;
659
- if (this.resized) {
660
- canvas = document.createElement('canvas');
661
- canvas.width = this.originalWidth;
662
- canvas.height = this.originalHeight;
663
- ctx = canvas.getContext('2d');
664
- imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
665
- pixelData = imageData.data;
666
- _ref = this.originalPixelData;
667
- for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
668
- pixel = _ref[i];
669
- pixelData[i] = pixel;
670
- }
671
- ctx.putImageData(imageData, 0, 0);
672
- scaledCanvas = document.createElement('canvas');
673
- scaledCanvas.width = this.width;
674
- scaledCanvas.height = this.height;
675
- ctx = scaledCanvas.getContext('2d');
676
- ctx.drawImage(canvas, 0, 0, this.originalWidth, this.originalHeight, 0, 0, this.width, this.height);
677
- pixelData = ctx.getImageData(0, 0, this.width, this.height).data;
678
- width = this.width;
679
- } else {
680
- pixelData = this.originalPixelData;
681
- width = this.originalWidth;
682
- }
683
- for (i = _j = 0, _ref1 = pixelData.length; _j < _ref1; i = _j += 4) {
684
- coord = Pixel.locationToCoordinates(i, width);
685
- if (((startX <= (_ref2 = coord.x) && _ref2 < endX)) && ((startY <= (_ref3 = coord.y) && _ref3 < endY))) {
686
- pixels.push(pixelData[i], pixelData[i + 1], pixelData[i + 2], pixelData[i + 3]);
687
- }
688
- }
689
- return pixels;
690
- };
691
-
692
- Caman.prototype.process = function(name, processFn) {
693
- this.renderer.add({
694
- type: Filter.Type.Single,
695
- name: name,
696
- processFn: processFn
697
- });
698
- return this;
699
- };
700
-
701
- Caman.prototype.processKernel = function(name, adjust, divisor, bias) {
702
- var i, _i, _ref;
703
- if (divisor == null) {
704
- divisor = null;
705
- }
706
- if (bias == null) {
707
- bias = 0;
708
- }
709
- if (divisor == null) {
710
- divisor = 0;
711
- for (i = _i = 0, _ref = adjust.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
712
- divisor += adjust[i];
713
- }
714
- }
715
- this.renderer.add({
716
- type: Filter.Type.Kernel,
717
- name: name,
718
- adjust: adjust,
719
- divisor: divisor,
720
- bias: bias
721
- });
722
- return this;
723
- };
724
-
725
- Caman.prototype.processPlugin = function(plugin, args) {
726
- this.renderer.add({
727
- type: Filter.Type.Plugin,
728
- plugin: plugin,
729
- args: args
730
- });
731
- return this;
732
- };
733
-
734
- Caman.prototype.newLayer = function(callback) {
735
- var layer;
736
- layer = new Layer(this);
737
- this.canvasQueue.push(layer);
738
- this.renderer.add({
739
- type: Filter.Type.LayerDequeue
740
- });
741
- callback.call(layer);
742
- this.renderer.add({
743
- type: Filter.Type.LayerFinished
744
- });
745
- return this;
746
- };
747
-
748
- Caman.prototype.executeLayer = function(layer) {
749
- return this.pushContext(layer);
750
- };
751
-
752
- Caman.prototype.pushContext = function(layer) {
753
- this.layerStack.push(this.currentLayer);
754
- this.pixelStack.push(this.pixelData);
755
- this.currentLayer = layer;
756
- return this.pixelData = layer.pixelData;
757
- };
758
-
759
- Caman.prototype.popContext = function() {
760
- this.pixelData = this.pixelStack.pop();
761
- return this.currentLayer = this.layerStack.pop();
762
- };
763
-
764
- Caman.prototype.applyCurrentLayer = function() {
765
- return this.currentLayer.applyToParent();
766
- };
767
-
768
- return Caman;
769
-
770
- })(Module);
771
-
772
- Root.Caman = Caman;
773
-
774
- Caman.Analyze = (function() {
775
- function Analyze(c) {
776
- this.c = c;
777
- }
778
-
779
- Analyze.prototype.calculateLevels = function() {
780
- var i, levels, numPixels, _i, _j, _k, _ref;
781
- levels = {
782
- r: {},
783
- g: {},
784
- b: {}
785
- };
786
- for (i = _i = 0; _i <= 255; i = ++_i) {
787
- levels.r[i] = 0;
788
- levels.g[i] = 0;
789
- levels.b[i] = 0;
790
- }
791
- for (i = _j = 0, _ref = this.c.pixelData.length; _j < _ref; i = _j += 4) {
792
- levels.r[this.c.pixelData[i]]++;
793
- levels.g[this.c.pixelData[i + 1]]++;
794
- levels.b[this.c.pixelData[i + 2]]++;
795
- }
796
- numPixels = this.c.pixelData.length / 4;
797
- for (i = _k = 0; _k <= 255; i = ++_k) {
798
- levels.r[i] /= numPixels;
799
- levels.g[i] /= numPixels;
800
- levels.b[i] /= numPixels;
801
- }
802
- return levels;
803
- };
804
-
805
- return Analyze;
806
-
807
- })();
808
-
809
- Analyze = Caman.Analyze;
810
-
811
- Caman.DOMUpdated = function() {
812
- var img, imgs, parser, _i, _len, _results;
813
- imgs = document.querySelectorAll("img[data-caman]");
814
- if (!(imgs.length > 0)) {
815
- return;
816
- }
817
- _results = [];
818
- for (_i = 0, _len = imgs.length; _i < _len; _i++) {
819
- img = imgs[_i];
820
- _results.push(parser = new CamanParser(img, function() {
821
- this.parse();
822
- return this.execute();
823
- }));
824
- }
825
- return _results;
826
- };
827
-
828
- if (Caman.autoload) {
829
- (function() {
830
- if (document.readyState === "complete") {
831
- return Caman.DOMUpdated();
832
- } else {
833
- return document.addEventListener("DOMContentLoaded", Caman.DOMUpdated, false);
834
- }
835
- })();
836
- }
837
-
838
- CamanParser = (function() {
839
- var INST_REGEX;
840
-
841
- INST_REGEX = "(\\w+)\\((.*?)\\)";
842
-
843
- function CamanParser(ele, ready) {
844
- this.dataStr = ele.getAttribute('data-caman');
845
- this.caman = Caman(ele, ready.bind(this));
846
- }
847
-
848
- CamanParser.prototype.parse = function() {
849
- var args, e, filter, func, inst, instFunc, m, r, unparsedInstructions, _i, _len, _ref, _results;
850
- this.ele = this.caman.canvas;
851
- r = new RegExp(INST_REGEX, 'g');
852
- unparsedInstructions = this.dataStr.match(r);
853
- if (!(unparsedInstructions.length > 0)) {
854
- return;
855
- }
856
- r = new RegExp(INST_REGEX);
857
- _results = [];
858
- for (_i = 0, _len = unparsedInstructions.length; _i < _len; _i++) {
859
- inst = unparsedInstructions[_i];
860
- _ref = inst.match(r), m = _ref[0], filter = _ref[1], args = _ref[2];
861
- instFunc = new Function("return function() { this." + filter + "(" + args + "); };");
862
- try {
863
- func = instFunc();
864
- _results.push(func.call(this.caman));
865
- } catch (_error) {
866
- e = _error;
867
- _results.push(Log.debug(e));
868
- }
869
- }
870
- return _results;
871
- };
872
-
873
- CamanParser.prototype.execute = function() {
874
- var ele;
875
- ele = this.ele;
876
- return this.caman.render(function() {
877
- return ele.parentNode.replaceChild(this.toImage(), ele);
878
- });
879
- };
880
-
881
- return CamanParser;
882
-
883
- })();
884
-
885
- Caman.Blender = (function() {
886
- function Blender() {}
887
-
888
- Blender.blenders = {};
889
-
890
- Blender.register = function(name, func) {
891
- return this.blenders[name] = func;
892
- };
893
-
894
- Blender.execute = function(name, rgbaLayer, rgbaParent) {
895
- return this.blenders[name](rgbaLayer, rgbaParent);
896
- };
897
-
898
- return Blender;
899
-
900
- })();
901
-
902
- Blender = Caman.Blender;
903
-
904
- Caman.Calculate = (function() {
905
- function Calculate() {}
906
-
907
- Calculate.distance = function(x1, y1, x2, y2) {
908
- return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
909
- };
910
-
911
- Calculate.randomRange = function(min, max, getFloat) {
912
- var rand;
913
- if (getFloat == null) {
914
- getFloat = false;
915
- }
916
- rand = min + (Math.random() * (max - min));
917
- if (getFloat) {
918
- return rand.toFixed(getFloat);
919
- } else {
920
- return Math.round(rand);
921
- }
922
- };
923
-
924
- Calculate.luminance = function(rgba) {
925
- return (0.299 * rgba.r) + (0.587 * rgba.g) + (0.114 * rgba.b);
926
- };
927
-
928
- Calculate.bezier = function(start, ctrl1, ctrl2, end, lowBound, highBound) {
929
- var bezier, clamp, controlPoints, endX, i, j, lerp, next, prev, t, _i, _j, _ref;
930
- if (lowBound == null) {
931
- lowBound = 0;
932
- }
933
- if (highBound == null) {
934
- highBound = 255;
935
- }
936
- if (start[0] instanceof Array) {
937
- controlPoints = start;
938
- lowBound = ctrl1;
939
- highBound = ctrl2;
940
- } else {
941
- controlPoints = [start, ctrl1, ctrl2, end];
942
- }
943
- if (controlPoints.length < 2) {
944
- throw "Invalid number of arguments to bezier";
945
- }
946
- bezier = {};
947
- lerp = function(a, b, t) {
948
- return a * (1 - t) + b * t;
949
- };
950
- clamp = function(a, min, max) {
951
- return Math.min(Math.max(a, min), max);
952
- };
953
- for (i = _i = 0; _i < 1000; i = ++_i) {
954
- t = i / 1000;
955
- prev = controlPoints;
956
- while (prev.length > 1) {
957
- next = [];
958
- for (j = _j = 0, _ref = prev.length - 2; 0 <= _ref ? _j <= _ref : _j >= _ref; j = 0 <= _ref ? ++_j : --_j) {
959
- next.push([lerp(prev[j][0], prev[j + 1][0], t), lerp(prev[j][1], prev[j + 1][1], t)]);
960
- }
961
- prev = next;
962
- }
963
- bezier[Math.round(prev[0][0])] = Math.round(clamp(prev[0][1], lowBound, highBound));
964
- }
965
- endX = controlPoints[controlPoints.length - 1][0];
966
- bezier = Caman.Calculate.missingValues(bezier, endX);
967
- if (bezier[endX] == null) {
968
- bezier[endX] = bezier[endX - 1];
969
- }
970
- return bezier;
971
- };
972
-
973
- Calculate.hermite = function(controlPoints, lowBound, highBound) {
974
- var add, clamp, count, endX, fac0, fac1, fac2, fac3, i, j, lerp, m0, m1, mul, p, p0, p1, pointsPerSegment, pointsPerStep, pos, ret, sub, t, _i, _j, _ref,
975
- _this = this;
976
- if (controlPoints.length < 2) {
977
- throw "Invalid number of arguments to hermite";
978
- }
979
- ret = {};
980
- lerp = function(a, b, t) {
981
- return a * (1 - t) + b * t;
982
- };
983
- add = function(a, b, c, d) {
984
- return [a[0] + b[0] + c[0] + d[0], a[1] + b[1] + c[1] + d[1]];
985
- };
986
- mul = function(a, b) {
987
- return [a[0] * b[0], a[1] * b[1]];
988
- };
989
- sub = function(a, b) {
990
- return [a[0] - b[0], a[1] - b[1]];
991
- };
992
- clamp = function(a, min, max) {
993
- return Math.min(Math.max(a, min), max);
994
- };
995
- count = 0;
996
- for (i = _i = 0, _ref = controlPoints.length - 2; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
997
- p0 = controlPoints[i];
998
- p1 = controlPoints[i + 1];
999
- pointsPerSegment = p1[0] - p0[0];
1000
- pointsPerStep = 1 / pointsPerSegment;
1001
- if (i === controlPoints.length - 2) {
1002
- pointsPerStep = 1 / (pointsPerSegment - 1);
1003
- }
1004
- p = i > 0 ? controlPoints[i - 1] : p0;
1005
- m0 = mul(sub(p1, p), [0.5, 0.5]);
1006
- p = i < controlPoints.length - 2 ? controlPoints[i + 2] : p1;
1007
- m1 = mul(sub(p, p0), [0.5, 0.5]);
1008
- for (j = _j = 0; 0 <= pointsPerSegment ? _j <= pointsPerSegment : _j >= pointsPerSegment; j = 0 <= pointsPerSegment ? ++_j : --_j) {
1009
- t = j * pointsPerStep;
1010
- fac0 = 2.0 * t * t * t - 3.0 * t * t + 1.0;
1011
- fac1 = t * t * t - 2.0 * t * t + t;
1012
- fac2 = -2.0 * t * t * t + 3.0 * t * t;
1013
- fac3 = t * t * t - t * t;
1014
- pos = add(mul(p0, [fac0, fac0]), mul(m0, [fac1, fac1]), mul(p1, [fac2, fac2]), mul(m1, [fac3, fac3]));
1015
- ret[Math.round(pos[0])] = Math.round(clamp(pos[1], lowBound, highBound));
1016
- count += 1;
1017
- }
1018
- }
1019
- endX = controlPoints[controlPoints.length - 1][0];
1020
- ret = Caman.Calculate.missingValues(ret, endX);
1021
- return ret;
1022
- };
1023
-
1024
- Calculate.missingValues = function(values, endX) {
1025
- var i, j, leftCoord, ret, rightCoord, _i, _j;
1026
- if (Object.keys(values).length < endX + 1) {
1027
- ret = {};
1028
- for (i = _i = 0; 0 <= endX ? _i <= endX : _i >= endX; i = 0 <= endX ? ++_i : --_i) {
1029
- if (values[i] != null) {
1030
- ret[i] = values[i];
1031
- } else {
1032
- leftCoord = [i - 1, ret[i - 1]];
1033
- for (j = _j = i; i <= endX ? _j <= endX : _j >= endX; j = i <= endX ? ++_j : --_j) {
1034
- if (values[j] != null) {
1035
- rightCoord = [j, values[j]];
1036
- break;
1037
- }
1038
- }
1039
- ret[i] = leftCoord[1] + ((rightCoord[1] - leftCoord[1]) / (rightCoord[0] - leftCoord[0])) * (i - leftCoord[0]);
1040
- }
1041
- }
1042
- return ret;
1043
- }
1044
- return values;
1045
- };
1046
-
1047
- return Calculate;
1048
-
1049
- })();
1050
-
1051
- Calculate = Caman.Calculate;
1052
-
1053
- Caman.Convert = (function() {
1054
- function Convert() {}
1055
-
1056
- Convert.hexToRGB = function(hex) {
1057
- var b, g, r;
1058
- if (hex.charAt(0) === "#") {
1059
- hex = hex.substr(1);
1060
- }
1061
- r = parseInt(hex.substr(0, 2), 16);
1062
- g = parseInt(hex.substr(2, 2), 16);
1063
- b = parseInt(hex.substr(4, 2), 16);
1064
- return {
1065
- r: r,
1066
- g: g,
1067
- b: b
1068
- };
1069
- };
1070
-
1071
- Convert.rgbToHSL = function(r, g, b) {
1072
- var d, h, l, max, min, s;
1073
- if (typeof r === "object") {
1074
- g = r.g;
1075
- b = r.b;
1076
- r = r.r;
1077
- }
1078
- r /= 255;
1079
- g /= 255;
1080
- b /= 255;
1081
- max = Math.max(r, g, b);
1082
- min = Math.min(r, g, b);
1083
- l = (max + min) / 2;
1084
- if (max === min) {
1085
- h = s = 0;
1086
- } else {
1087
- d = max - min;
1088
- s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
1089
- h = (function() {
1090
- switch (max) {
1091
- case r:
1092
- return (g - b) / d + (g < b ? 6 : 0);
1093
- case g:
1094
- return (b - r) / d + 2;
1095
- case b:
1096
- return (r - g) / d + 4;
1097
- }
1098
- })();
1099
- h /= 6;
1100
- }
1101
- return {
1102
- h: h,
1103
- s: s,
1104
- l: l
1105
- };
1106
- };
1107
-
1108
- Convert.hslToRGB = function(h, s, l) {
1109
- var b, g, p, q, r;
1110
- if (typeof h === "object") {
1111
- s = h.s;
1112
- l = h.l;
1113
- h = h.h;
1114
- }
1115
- if (s === 0) {
1116
- r = g = b = l;
1117
- } else {
1118
- q = l < 0.5 ? l * (1 + s) : l + s - l * s;
1119
- p = 2 * l - q;
1120
- r = this.hueToRGB(p, q, h + 1 / 3);
1121
- g = this.hueToRGB(p, q, h);
1122
- b = this.hueToRGB(p, q, h - 1 / 3);
1123
- }
1124
- return {
1125
- r: r * 255,
1126
- g: g * 255,
1127
- b: b * 255
1128
- };
1129
- };
1130
-
1131
- Convert.hueToRGB = function(p, q, t) {
1132
- if (t < 0) {
1133
- t += 1;
1134
- }
1135
- if (t > 1) {
1136
- t -= 1;
1137
- }
1138
- if (t < 1 / 6) {
1139
- return p + (q - p) * 6 * t;
1140
- }
1141
- if (t < 1 / 2) {
1142
- return q;
1143
- }
1144
- if (t < 2 / 3) {
1145
- return p + (q - p) * (2 / 3 - t) * 6;
1146
- }
1147
- return p;
1148
- };
1149
-
1150
- Convert.rgbToHSV = function(r, g, b) {
1151
- var d, h, max, min, s, v;
1152
- r /= 255;
1153
- g /= 255;
1154
- b /= 255;
1155
- max = Math.max(r, g, b);
1156
- min = Math.min(r, g, b);
1157
- v = max;
1158
- d = max - min;
1159
- s = max === 0 ? 0 : d / max;
1160
- if (max === min) {
1161
- h = 0;
1162
- } else {
1163
- h = (function() {
1164
- switch (max) {
1165
- case r:
1166
- return (g - b) / d + (g < b ? 6 : 0);
1167
- case g:
1168
- return (b - r) / d + 2;
1169
- case b:
1170
- return (r - g) / d + 4;
1171
- }
1172
- })();
1173
- h /= 6;
1174
- }
1175
- return {
1176
- h: h,
1177
- s: s,
1178
- v: v
1179
- };
1180
- };
1181
-
1182
- Convert.hsvToRGB = function(h, s, v) {
1183
- var b, f, g, i, p, q, r, t;
1184
- i = Math.floor(h * 6);
1185
- f = h * 6 - i;
1186
- p = v * (1 - s);
1187
- q = v * (1 - f * s);
1188
- t = v * (1 - (1 - f) * s);
1189
- switch (i % 6) {
1190
- case 0:
1191
- r = v;
1192
- g = t;
1193
- b = p;
1194
- break;
1195
- case 1:
1196
- r = q;
1197
- g = v;
1198
- b = p;
1199
- break;
1200
- case 2:
1201
- r = p;
1202
- g = v;
1203
- b = t;
1204
- break;
1205
- case 3:
1206
- r = p;
1207
- g = q;
1208
- b = v;
1209
- break;
1210
- case 4:
1211
- r = t;
1212
- g = p;
1213
- b = v;
1214
- break;
1215
- case 5:
1216
- r = v;
1217
- g = p;
1218
- b = q;
1219
- }
1220
- return {
1221
- r: Math.floor(r * 255),
1222
- g: Math.floor(g * 255),
1223
- b: Math.floor(b * 255)
1224
- };
1225
- };
1226
-
1227
- Convert.rgbToXYZ = function(r, g, b) {
1228
- var x, y, z;
1229
- r /= 255;
1230
- g /= 255;
1231
- b /= 255;
1232
- if (r > 0.04045) {
1233
- r = Math.pow((r + 0.055) / 1.055, 2.4);
1234
- } else {
1235
- r /= 12.92;
1236
- }
1237
- if (g > 0.04045) {
1238
- g = Math.pow((g + 0.055) / 1.055, 2.4);
1239
- } else {
1240
- g /= 12.92;
1241
- }
1242
- if (b > 0.04045) {
1243
- b = Math.pow((b + 0.055) / 1.055, 2.4);
1244
- } else {
1245
- b /= 12.92;
1246
- }
1247
- x = r * 0.4124 + g * 0.3576 + b * 0.1805;
1248
- y = r * 0.2126 + g * 0.7152 + b * 0.0722;
1249
- z = r * 0.0193 + g * 0.1192 + b * 0.9505;
1250
- return {
1251
- x: x * 100,
1252
- y: y * 100,
1253
- z: z * 100
1254
- };
1255
- };
1256
-
1257
- Convert.xyzToRGB = function(x, y, z) {
1258
- var b, g, r;
1259
- x /= 100;
1260
- y /= 100;
1261
- z /= 100;
1262
- r = (3.2406 * x) + (-1.5372 * y) + (-0.4986 * z);
1263
- g = (-0.9689 * x) + (1.8758 * y) + (0.0415 * z);
1264
- b = (0.0557 * x) + (-0.2040 * y) + (1.0570 * z);
1265
- if (r > 0.0031308) {
1266
- r = (1.055 * Math.pow(r, 0.4166666667)) - 0.055;
1267
- } else {
1268
- r *= 12.92;
1269
- }
1270
- if (g > 0.0031308) {
1271
- g = (1.055 * Math.pow(g, 0.4166666667)) - 0.055;
1272
- } else {
1273
- g *= 12.92;
1274
- }
1275
- if (b > 0.0031308) {
1276
- b = (1.055 * Math.pow(b, 0.4166666667)) - 0.055;
1277
- } else {
1278
- b *= 12.92;
1279
- }
1280
- return {
1281
- r: r * 255,
1282
- g: g * 255,
1283
- b: b * 255
1284
- };
1285
- };
1286
-
1287
- Convert.xyzToLab = function(x, y, z) {
1288
- var a, b, l, whiteX, whiteY, whiteZ;
1289
- if (typeof x === "object") {
1290
- y = x.y;
1291
- z = x.z;
1292
- x = x.x;
1293
- }
1294
- whiteX = 95.047;
1295
- whiteY = 100.0;
1296
- whiteZ = 108.883;
1297
- x /= whiteX;
1298
- y /= whiteY;
1299
- z /= whiteZ;
1300
- if (x > 0.008856451679) {
1301
- x = Math.pow(x, 0.3333333333);
1302
- } else {
1303
- x = (7.787037037 * x) + 0.1379310345;
1304
- }
1305
- if (y > 0.008856451679) {
1306
- y = Math.pow(y, 0.3333333333);
1307
- } else {
1308
- y = (7.787037037 * y) + 0.1379310345;
1309
- }
1310
- if (z > 0.008856451679) {
1311
- z = Math.pow(z, 0.3333333333);
1312
- } else {
1313
- z = (7.787037037 * z) + 0.1379310345;
1314
- }
1315
- l = 116 * y - 16;
1316
- a = 500 * (x - y);
1317
- b = 200 * (y - z);
1318
- return {
1319
- l: l,
1320
- a: a,
1321
- b: b
1322
- };
1323
- };
1324
-
1325
- Convert.labToXYZ = function(l, a, b) {
1326
- var x, y, z;
1327
- if (typeof l === "object") {
1328
- a = l.a;
1329
- b = l.b;
1330
- l = l.l;
1331
- }
1332
- y = (l + 16) / 116;
1333
- x = y + (a / 500);
1334
- z = y - (b / 200);
1335
- if (x > 0.2068965517) {
1336
- x = x * x * x;
1337
- } else {
1338
- x = 0.1284185493 * (x - 0.1379310345);
1339
- }
1340
- if (y > 0.2068965517) {
1341
- y = y * y * y;
1342
- } else {
1343
- y = 0.1284185493 * (y - 0.1379310345);
1344
- }
1345
- if (z > 0.2068965517) {
1346
- z = z * z * z;
1347
- } else {
1348
- z = 0.1284185493 * (z - 0.1379310345);
1349
- }
1350
- return {
1351
- x: x * 95.047,
1352
- y: y * 100.0,
1353
- z: z * 108.883
1354
- };
1355
- };
1356
-
1357
- Convert.rgbToLab = function(r, g, b) {
1358
- var xyz;
1359
- if (typeof r === "object") {
1360
- g = r.g;
1361
- b = r.b;
1362
- r = r.r;
1363
- }
1364
- xyz = this.rgbToXYZ(r, g, b);
1365
- return this.xyzToLab(xyz);
1366
- };
1367
-
1368
- Convert.labToRGB = function(l, a, b) {};
1369
-
1370
- return Convert;
1371
-
1372
- })();
1373
-
1374
- Convert = Caman.Convert;
1375
-
1376
- Caman.Event = (function() {
1377
- function Event() {}
1378
-
1379
- Event.events = {};
1380
-
1381
- Event.types = ["processStart", "processComplete", "renderStart", "renderFinished", "blockStarted", "blockFinished"];
1382
-
1383
- Event.trigger = function(target, type, data) {
1384
- var event, _i, _len, _ref, _results;
1385
- if (data == null) {
1386
- data = null;
1387
- }
1388
- if (this.events[type] && this.events[type].length) {
1389
- _ref = this.events[type];
1390
- _results = [];
1391
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
1392
- event = _ref[_i];
1393
- if (event.target === null || target.id === event.target.id) {
1394
- _results.push(event.fn.call(target, data));
1395
- } else {
1396
- _results.push(void 0);
1397
- }
1398
- }
1399
- return _results;
1400
- }
1401
- };
1402
-
1403
- Event.listen = function(target, type, fn) {
1404
- var _fn, _type;
1405
- if (typeof target === "string") {
1406
- _type = target;
1407
- _fn = type;
1408
- target = null;
1409
- type = _type;
1410
- fn = _fn;
1411
- }
1412
- if (__indexOf.call(this.types, type) < 0) {
1413
- return false;
1414
- }
1415
- if (!this.events[type]) {
1416
- this.events[type] = [];
1417
- }
1418
- this.events[type].push({
1419
- target: target,
1420
- fn: fn
1421
- });
1422
- return true;
1423
- };
1424
-
1425
- return Event;
1426
-
1427
- })();
1428
-
1429
- Event = Caman.Event;
1430
-
1431
- Caman.Filter = (function() {
1432
- function Filter() {}
1433
-
1434
- Filter.Type = {
1435
- Single: 1,
1436
- Kernel: 2,
1437
- LayerDequeue: 3,
1438
- LayerFinished: 4,
1439
- LoadOverlay: 5,
1440
- Plugin: 6
1441
- };
1442
-
1443
- Filter.register = function(name, filterFunc) {
1444
- return Caman.prototype[name] = filterFunc;
1445
- };
1446
-
1447
- return Filter;
1448
-
1449
- })();
1450
-
1451
- Filter = Caman.Filter;
1452
-
1453
- Caman.IO = (function() {
1454
- function IO() {}
1455
-
1456
- IO.domainRegex = /(?:(?:http|https):\/\/)((?:\w+)\.(?:(?:\w|\.)+))/;
1457
-
1458
- IO.isRemote = function(img) {
1459
- if (img == null) {
1460
- return false;
1461
- }
1462
- if (this.corsEnabled(img)) {
1463
- return false;
1464
- }
1465
- return this.isURLRemote(img.src);
1466
- };
1467
-
1468
- IO.corsEnabled = function(img) {
1469
- var _ref;
1470
- return (img.crossOrigin != null) && ((_ref = img.crossOrigin.toLowerCase()) === 'anonymous' || _ref === 'use-credentials');
1471
- };
1472
-
1473
- IO.isURLRemote = function(url) {
1474
- var matches;
1475
- matches = url.match(this.domainRegex);
1476
- if (matches) {
1477
- return matches[1] !== document.domain;
1478
- } else {
1479
- return false;
1480
- }
1481
- };
1482
-
1483
- IO.remoteCheck = function(src) {
1484
- if (this.isURLRemote(src)) {
1485
- if (!Caman.remoteProxy.length) {
1486
- Log.info("Attempting to load a remote image without a configured proxy. URL: " + src);
1487
- } else {
1488
- if (Caman.isURLRemote(Caman.remoteProxy)) {
1489
- Log.info("Cannot use a remote proxy for loading images.");
1490
- return;
1491
- }
1492
- return this.proxyUrl(src);
1493
- }
1494
- }
1495
- };
1496
-
1497
- IO.proxyUrl = function(src) {
1498
- return "" + Caman.remoteProxy + "?" + Caman.proxyParam + "=" + (encodeURIComponent(src));
1499
- };
1500
-
1501
- IO.useProxy = function(lang) {
1502
- var langToExt;
1503
- langToExt = {
1504
- ruby: 'rb',
1505
- python: 'py',
1506
- perl: 'pl',
1507
- javascript: 'js'
1508
- };
1509
- lang = lang.toLowerCase();
1510
- if (langToExt[lang] != null) {
1511
- lang = langToExt[lang];
1512
- }
1513
- return "proxies/caman_proxy." + lang;
1514
- };
1515
-
1516
- return IO;
1517
-
1518
- })();
1519
-
1520
- Caman.prototype.save = function() {
1521
- if (typeof exports !== "undefined" && exports !== null) {
1522
- return this.nodeSave.apply(this, arguments);
1523
- } else {
1524
- return this.browserSave.apply(this, arguments);
1525
- }
1526
- };
1527
-
1528
- Caman.prototype.browserSave = function(type) {
1529
- var image;
1530
- if (type == null) {
1531
- type = "png";
1532
- }
1533
- type = type.toLowerCase();
1534
- image = this.toBase64(type).replace("image/" + type, "image/octet-stream");
1535
- return document.location.href = image;
1536
- };
1537
-
1538
- Caman.prototype.nodeSave = function(file, overwrite, callback) {
1539
- var e, stats;
1540
- if (overwrite == null) {
1541
- overwrite = true;
1542
- }
1543
- if (callback == null) {
1544
- callback = null;
1545
- }
1546
- try {
1547
- stats = fs.statSync(file);
1548
- if (stats.isFile() && !overwrite) {
1549
- return false;
1550
- }
1551
- } catch (_error) {
1552
- e = _error;
1553
- Log.debug("Creating output file " + file);
1554
- }
1555
- return fs.writeFile(file, this.canvas.toBuffer(), function(err) {
1556
- Log.debug("Finished writing to " + file);
1557
- if (callback) {
1558
- return callback.call(this, err);
1559
- }
1560
- });
1561
- };
1562
-
1563
- Caman.prototype.toImage = function(type) {
1564
- var img;
1565
- img = new Image();
1566
- img.src = this.toBase64(type);
1567
- img.width = this.dimensions.width;
1568
- img.height = this.dimensions.height;
1569
- if (window.devicePixelRatio) {
1570
- img.width /= window.devicePixelRatio;
1571
- img.height /= window.devicePixelRatio;
1572
- }
1573
- return img;
1574
- };
1575
-
1576
- Caman.prototype.toBase64 = function(type) {
1577
- if (type == null) {
1578
- type = "png";
1579
- }
1580
- type = type.toLowerCase();
1581
- return this.canvas.toDataURL("image/" + type);
1582
- };
1583
-
1584
- IO = Caman.IO;
1585
-
1586
- Caman.Layer = (function() {
1587
- function Layer(c) {
1588
- this.c = c;
1589
- this.filter = this.c;
1590
- this.options = {
1591
- blendingMode: 'normal',
1592
- opacity: 1.0
1593
- };
1594
- this.layerID = Util.uniqid.get();
1595
- this.canvas = typeof exports !== "undefined" && exports !== null ? new Canvas() : document.createElement('canvas');
1596
- this.canvas.width = this.c.dimensions.width;
1597
- this.canvas.height = this.c.dimensions.height;
1598
- this.context = this.canvas.getContext('2d');
1599
- this.context.createImageData(this.canvas.width, this.canvas.height);
1600
- this.imageData = this.context.getImageData(0, 0, this.canvas.width, this.canvas.height);
1601
- this.pixelData = this.imageData.data;
1602
- }
1603
-
1604
- Layer.prototype.newLayer = function(cb) {
1605
- return this.c.newLayer.call(this.c, cb);
1606
- };
1607
-
1608
- Layer.prototype.setBlendingMode = function(mode) {
1609
- this.options.blendingMode = mode;
1610
- return this;
1611
- };
1612
-
1613
- Layer.prototype.opacity = function(opacity) {
1614
- this.options.opacity = opacity / 100;
1615
- return this;
1616
- };
1617
-
1618
- Layer.prototype.copyParent = function() {
1619
- var i, parentData, _i, _ref;
1620
- parentData = this.c.pixelData;
1621
- for (i = _i = 0, _ref = this.c.pixelData.length; _i < _ref; i = _i += 4) {
1622
- this.pixelData[i] = parentData[i];
1623
- this.pixelData[i + 1] = parentData[i + 1];
1624
- this.pixelData[i + 2] = parentData[i + 2];
1625
- this.pixelData[i + 3] = parentData[i + 3];
1626
- }
1627
- return this;
1628
- };
1629
-
1630
- Layer.prototype.fillColor = function() {
1631
- return this.c.fillColor.apply(this.c, arguments);
1632
- };
1633
-
1634
- Layer.prototype.overlayImage = function(image) {
1635
- if (typeof image === "object") {
1636
- image = image.src;
1637
- } else if (typeof image === "string" && image[0] === "#") {
1638
- image = $(image).src;
1639
- }
1640
- if (!image) {
1641
- return this;
1642
- }
1643
- this.c.renderer.renderQueue.push({
1644
- type: Filter.Type.LoadOverlay,
1645
- src: image,
1646
- layer: this
1647
- });
1648
- return this;
1649
- };
1650
-
1651
- Layer.prototype.applyToParent = function() {
1652
- var i, layerData, parentData, result, rgbaLayer, rgbaParent, _i, _ref, _results;
1653
- parentData = this.c.pixelStack[this.c.pixelStack.length - 1];
1654
- layerData = this.c.pixelData;
1655
- _results = [];
1656
- for (i = _i = 0, _ref = layerData.length; _i < _ref; i = _i += 4) {
1657
- rgbaParent = {
1658
- r: parentData[i],
1659
- g: parentData[i + 1],
1660
- b: parentData[i + 2],
1661
- a: parentData[i + 3]
1662
- };
1663
- rgbaLayer = {
1664
- r: layerData[i],
1665
- g: layerData[i + 1],
1666
- b: layerData[i + 2],
1667
- a: layerData[i + 3]
1668
- };
1669
- result = Blender.execute(this.options.blendingMode, rgbaLayer, rgbaParent);
1670
- result.r = Util.clampRGB(result.r);
1671
- result.g = Util.clampRGB(result.g);
1672
- result.b = Util.clampRGB(result.b);
1673
- if (result.a == null) {
1674
- result.a = rgbaLayer.a;
1675
- }
1676
- parentData[i] = rgbaParent.r - ((rgbaParent.r - result.r) * (this.options.opacity * (result.a / 255)));
1677
- parentData[i + 1] = rgbaParent.g - ((rgbaParent.g - result.g) * (this.options.opacity * (result.a / 255)));
1678
- _results.push(parentData[i + 2] = rgbaParent.b - ((rgbaParent.b - result.b) * (this.options.opacity * (result.a / 255))));
1679
- }
1680
- return _results;
1681
- };
1682
-
1683
- return Layer;
1684
-
1685
- })();
1686
-
1687
- Layer = Caman.Layer;
1688
-
1689
- Caman.Logger = (function() {
1690
- function Logger() {
1691
- var name, _i, _len, _ref;
1692
- _ref = ['log', 'info', 'warn', 'error'];
1693
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
1694
- name = _ref[_i];
1695
- this[name] = (function(name) {
1696
- return function() {
1697
- var args, e;
1698
- args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
1699
- if (!Caman.DEBUG) {
1700
- return;
1701
- }
1702
- try {
1703
- return console[name].apply(console, args);
1704
- } catch (_error) {
1705
- e = _error;
1706
- return console[name](args);
1707
- }
1708
- };
1709
- })(name);
1710
- }
1711
- this.debug = this.log;
1712
- }
1713
-
1714
- return Logger;
1715
-
1716
- })();
1717
-
1718
- Log = new Caman.Logger();
1719
-
1720
- Caman.Pixel = (function() {
1721
- Pixel.coordinatesToLocation = function(x, y, width) {
1722
- return (y * width + x) * 4;
1723
- };
1724
-
1725
- Pixel.locationToCoordinates = function(loc, width) {
1726
- var x, y;
1727
- y = Math.floor(loc / (width * 4));
1728
- x = (loc % (width * 4)) / 4;
1729
- return {
1730
- x: x,
1731
- y: y
1732
- };
1733
- };
1734
-
1735
- function Pixel(r, g, b, a, c) {
1736
- this.r = r != null ? r : 0;
1737
- this.g = g != null ? g : 0;
1738
- this.b = b != null ? b : 0;
1739
- this.a = a != null ? a : 255;
1740
- this.c = c != null ? c : null;
1741
- this.loc = 0;
1742
- }
1743
-
1744
- Pixel.prototype.setContext = function(c) {
1745
- return this.c = c;
1746
- };
1747
-
1748
- Pixel.prototype.locationXY = function() {
1749
- var x, y;
1750
- if (this.c == null) {
1751
- throw "Requires a CamanJS context";
1752
- }
1753
- y = this.c.dimensions.height - Math.floor(this.loc / (this.c.dimensions.width * 4));
1754
- x = (this.loc % (this.c.dimensions.width * 4)) / 4;
1755
- return {
1756
- x: x,
1757
- y: y
1758
- };
1759
- };
1760
-
1761
- Pixel.prototype.pixelAtLocation = function(loc) {
1762
- if (this.c == null) {
1763
- throw "Requires a CamanJS context";
1764
- }
1765
- return new Pixel(this.c.pixelData[loc], this.c.pixelData[loc + 1], this.c.pixelData[loc + 2], this.c.pixelData[loc + 3], this.c);
1766
- };
1767
-
1768
- Pixel.prototype.getPixelRelative = function(horiz, vert) {
1769
- var newLoc;
1770
- if (this.c == null) {
1771
- throw "Requires a CamanJS context";
1772
- }
1773
- newLoc = this.loc + (this.c.dimensions.width * 4 * (vert * -1)) + (4 * horiz);
1774
- if (newLoc > this.c.pixelData.length || newLoc < 0) {
1775
- return new Pixel(0, 0, 0, 255, this.c);
1776
- }
1777
- return this.pixelAtLocation(newLoc);
1778
- };
1779
-
1780
- Pixel.prototype.putPixelRelative = function(horiz, vert, rgba) {
1781
- var nowLoc;
1782
- if (this.c == null) {
1783
- throw "Requires a CamanJS context";
1784
- }
1785
- nowLoc = this.loc + (this.c.dimensions.width * 4 * (vert * -1)) + (4 * horiz);
1786
- if (newLoc > this.c.pixelData.length || newLoc < 0) {
1787
- return;
1788
- }
1789
- this.c.pixelData[newLoc] = rgba.r;
1790
- this.c.pixelData[newLoc + 1] = rgba.g;
1791
- this.c.pixelData[newLoc + 2] = rgba.b;
1792
- this.c.pixelData[newLoc + 3] = rgba.a;
1793
- return true;
1794
- };
1795
-
1796
- Pixel.prototype.getPixel = function(x, y) {
1797
- var loc;
1798
- if (this.c == null) {
1799
- throw "Requires a CamanJS context";
1800
- }
1801
- loc = this.coordinatesToLocation(x, y, this.width);
1802
- return this.pixelAtLocation(loc);
1803
- };
1804
-
1805
- Pixel.prototype.putPixel = function(x, y, rgba) {
1806
- var loc;
1807
- if (this.c == null) {
1808
- throw "Requires a CamanJS context";
1809
- }
1810
- loc = this.coordinatesToLocation(x, y, this.width);
1811
- this.c.pixelData[loc] = rgba.r;
1812
- this.c.pixelData[loc + 1] = rgba.g;
1813
- this.c.pixelData[loc + 2] = rgba.b;
1814
- return this.c.pixelData[loc + 3] = rgba.a;
1815
- };
1816
-
1817
- Pixel.prototype.toString = function() {
1818
- return this.toKey();
1819
- };
1820
-
1821
- Pixel.prototype.toHex = function(includeAlpha) {
1822
- var hex;
1823
- if (includeAlpha == null) {
1824
- includeAlpha = false;
1825
- }
1826
- hex = '#' + this.r.toString(16) + this.g.toString(16) + this.b.toString(16);
1827
- if (includeAlpha) {
1828
- return hex + this.a.toString(16);
1829
- } else {
1830
- return hex;
1831
- }
1832
- };
1833
-
1834
- return Pixel;
1835
-
1836
- })();
1837
-
1838
- Pixel = Caman.Pixel;
1839
-
1840
- Caman.Plugin = (function() {
1841
- function Plugin() {}
1842
-
1843
- Plugin.plugins = {};
1844
-
1845
- Plugin.register = function(name, plugin) {
1846
- return this.plugins[name] = plugin;
1847
- };
1848
-
1849
- Plugin.execute = function(context, name, args) {
1850
- return this.plugins[name].apply(context, args);
1851
- };
1852
-
1853
- return Plugin;
1854
-
1855
- })();
1856
-
1857
- Plugin = Caman.Plugin;
1858
-
1859
- Caman.Renderer = (function() {
1860
- Renderer.Blocks = Caman.NodeJS ? require('os').cpus().length : 4;
1861
-
1862
- function Renderer(c) {
1863
- this.c = c;
1864
- this.processNext = __bind(this.processNext, this);
1865
- this.renderQueue = [];
1866
- this.modPixelData = null;
1867
- }
1868
-
1869
- Renderer.prototype.add = function(job) {
1870
- if (job == null) {
1871
- return;
1872
- }
1873
- return this.renderQueue.push(job);
1874
- };
1875
-
1876
- Renderer.prototype.processNext = function() {
1877
- var layer;
1878
- if (this.renderQueue.length === 0) {
1879
- Event.trigger(this, "renderFinished");
1880
- if (this.finishedFn != null) {
1881
- this.finishedFn.call(this.c);
1882
- }
1883
- return this;
1884
- }
1885
- this.currentJob = this.renderQueue.shift();
1886
- switch (this.currentJob.type) {
1887
- case Filter.Type.LayerDequeue:
1888
- layer = this.c.canvasQueue.shift();
1889
- this.c.executeLayer(layer);
1890
- return this.processNext();
1891
- case Filter.Type.LayerFinished:
1892
- this.c.applyCurrentLayer();
1893
- this.c.popContext();
1894
- return this.processNext();
1895
- case Filter.Type.LoadOverlay:
1896
- return this.loadOverlay(this.currentJob.layer, this.currentJob.src);
1897
- case Filter.Type.Plugin:
1898
- return this.executePlugin();
1899
- default:
1900
- return this.executeFilter();
1901
- }
1902
- };
1903
-
1904
- Renderer.prototype.execute = function(callback) {
1905
- this.finishedFn = callback;
1906
- this.modPixelData = Util.dataArray(this.c.pixelData.length);
1907
- return this.processNext();
1908
- };
1909
-
1910
- Renderer.prototype.eachBlock = function(fn) {
1911
- var blockN, blockPixelLength, bnum, end, f, i, lastBlockN, n, start, _i, _ref, _results,
1912
- _this = this;
1913
- this.blocksDone = 0;
1914
- n = this.c.pixelData.length;
1915
- blockPixelLength = Math.floor((n / 4) / Renderer.Blocks);
1916
- blockN = blockPixelLength * 4;
1917
- lastBlockN = blockN + ((n / 4) % Renderer.Blocks) * 4;
1918
- _results = [];
1919
- for (i = _i = 0, _ref = Renderer.Blocks; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
1920
- start = i * blockN;
1921
- end = start + (i === Renderer.Blocks - 1 ? lastBlockN : blockN);
1922
- if (Caman.NodeJS) {
1923
- f = Fiber(function() {
1924
- return fn.call(_this, i, start, end);
1925
- });
1926
- bnum = f.run();
1927
- _results.push(this.blockFinished(bnum));
1928
- } else {
1929
- _results.push(setTimeout((function(i, start, end) {
1930
- return function() {
1931
- return fn.call(_this, i, start, end);
1932
- };
1933
- })(i, start, end), 0));
1934
- }
1935
- }
1936
- return _results;
1937
- };
1938
-
1939
- Renderer.prototype.executeFilter = function() {
1940
- Event.trigger(this.c, "processStart", this.currentJob);
1941
- if (this.currentJob.type === Filter.Type.Single) {
1942
- return this.eachBlock(this.renderBlock);
1943
- } else {
1944
- return this.eachBlock(this.renderKernel);
1945
- }
1946
- };
1947
-
1948
- Renderer.prototype.executePlugin = function() {
1949
- Log.debug("Executing plugin " + this.currentJob.plugin);
1950
- Plugin.execute(this.c, this.currentJob.plugin, this.currentJob.args);
1951
- Log.debug("Plugin " + this.currentJob.plugin + " finished!");
1952
- return this.processNext();
1953
- };
1954
-
1955
- Renderer.prototype.renderBlock = function(bnum, start, end) {
1956
- var i, pixel, _i;
1957
- Log.debug("Block #" + bnum + " - Filter: " + this.currentJob.name + ", Start: " + start + ", End: " + end);
1958
- Event.trigger(this.c, "blockStarted", {
1959
- blockNum: bnum,
1960
- totalBlocks: Renderer.Blocks,
1961
- startPixel: start,
1962
- endPixel: end
1963
- });
1964
- pixel = new Pixel();
1965
- pixel.setContext(this.c);
1966
- for (i = _i = start; _i < end; i = _i += 4) {
1967
- pixel.loc = i;
1968
- pixel.r = this.c.pixelData[i];
1969
- pixel.g = this.c.pixelData[i + 1];
1970
- pixel.b = this.c.pixelData[i + 2];
1971
- pixel.a = this.c.pixelData[i + 3];
1972
- this.currentJob.processFn(pixel);
1973
- this.c.pixelData[i] = Util.clampRGB(pixel.r);
1974
- this.c.pixelData[i + 1] = Util.clampRGB(pixel.g);
1975
- this.c.pixelData[i + 2] = Util.clampRGB(pixel.b);
1976
- this.c.pixelData[i + 3] = Util.clampRGB(pixel.a);
1977
- }
1978
- if (Caman.NodeJS) {
1979
- return Fiber["yield"](bnum);
1980
- } else {
1981
- return this.blockFinished(bnum);
1982
- }
1983
- };
1984
-
1985
- Renderer.prototype.renderKernel = function(bnum, start, end) {
1986
- var adjust, adjustSize, bias, builder, builderIndex, divisor, i, j, k, kernel, n, name, p, pixel, res, _i, _j, _k;
1987
- name = this.currentJob.name;
1988
- bias = this.currentJob.bias;
1989
- divisor = this.currentJob.divisor;
1990
- n = this.c.pixelData.length;
1991
- adjust = this.currentJob.adjust;
1992
- adjustSize = Math.sqrt(adjust.length);
1993
- kernel = [];
1994
- Log.debug("Rendering kernel - Filter: " + this.currentJob.name);
1995
- start = Math.max(start, this.c.dimensions.width * 4 * ((adjustSize - 1) / 2));
1996
- end = Math.min(end, n - (this.c.dimensions.width * 4 * ((adjustSize - 1) / 2)));
1997
- builder = (adjustSize - 1) / 2;
1998
- pixel = new Pixel();
1999
- pixel.setContext(this.c);
2000
- for (i = _i = start; _i < end; i = _i += 4) {
2001
- pixel.loc = i;
2002
- builderIndex = 0;
2003
- for (j = _j = -builder; -builder <= builder ? _j <= builder : _j >= builder; j = -builder <= builder ? ++_j : --_j) {
2004
- for (k = _k = builder; builder <= -builder ? _k <= -builder : _k >= -builder; k = builder <= -builder ? ++_k : --_k) {
2005
- p = pixel.getPixelRelative(j, k);
2006
- kernel[builderIndex * 3] = p.r;
2007
- kernel[builderIndex * 3 + 1] = p.g;
2008
- kernel[builderIndex * 3 + 2] = p.b;
2009
- builderIndex++;
2010
- }
2011
- }
2012
- res = this.processKernel(adjust, kernel, divisor, bias);
2013
- this.modPixelData[i] = Util.clampRGB(res.r);
2014
- this.modPixelData[i + 1] = Util.clampRGB(res.g);
2015
- this.modPixelData[i + 2] = Util.clampRGB(res.b);
2016
- this.modPixelData[i + 3] = this.c.pixelData[i + 3];
2017
- }
2018
- if (Caman.NodeJS) {
2019
- return Fiber["yield"](bnum);
2020
- } else {
2021
- return this.blockFinished(bnum);
2022
- }
2023
- };
2024
-
2025
- Renderer.prototype.blockFinished = function(bnum) {
2026
- var i, _i, _ref;
2027
- if (bnum >= 0) {
2028
- Log.debug("Block #" + bnum + " finished! Filter: " + this.currentJob.name);
2029
- }
2030
- this.blocksDone++;
2031
- Event.trigger(this.c, "blockFinished", {
2032
- blockNum: bnum,
2033
- blocksFinished: this.blocksDone,
2034
- totalBlocks: Renderer.Blocks
2035
- });
2036
- if (this.blocksDone === Renderer.Blocks) {
2037
- if (this.currentJob.type === Filter.Type.Kernel) {
2038
- for (i = _i = 0, _ref = this.c.pixelData.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
2039
- this.c.pixelData[i] = this.modPixelData[i];
2040
- }
2041
- }
2042
- if (bnum >= 0) {
2043
- Log.debug("Filter " + this.currentJob.name + " finished!");
2044
- }
2045
- Event.trigger(this.c, "processComplete", this.currentJob);
2046
- return this.processNext();
2047
- }
2048
- };
2049
-
2050
- Renderer.prototype.processKernel = function(adjust, kernel, divisor, bias) {
2051
- var i, val, _i, _ref;
2052
- val = {
2053
- r: 0,
2054
- g: 0,
2055
- b: 0
2056
- };
2057
- for (i = _i = 0, _ref = adjust.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
2058
- val.r += adjust[i] * kernel[i * 3];
2059
- val.g += adjust[i] * kernel[i * 3 + 1];
2060
- val.b += adjust[i] * kernel[i * 3 + 2];
2061
- }
2062
- val.r = (val.r / divisor) + bias;
2063
- val.g = (val.g / divisor) + bias;
2064
- val.b = (val.b / divisor) + bias;
2065
- return val;
2066
- };
2067
-
2068
- Renderer.prototype.loadOverlay = function(layer, src) {
2069
- var img, proxyUrl,
2070
- _this = this;
2071
- img = new Image();
2072
- img.onload = function() {
2073
- layer.context.drawImage(img, 0, 0, _this.c.dimensions.width, _this.c.dimensions.height);
2074
- layer.imageData = layer.context.getImageData(0, 0, _this.c.dimensions.width, _this.c.dimensions.height);
2075
- layer.pixelData = layer.imageData.data;
2076
- _this.c.pixelData = layer.pixelData;
2077
- return _this.processNext();
2078
- };
2079
- proxyUrl = IO.remoteCheck(src);
2080
- return img.src = proxyUrl != null ? proxyUrl : src;
2081
- };
2082
-
2083
- return Renderer;
2084
-
2085
- })();
2086
-
2087
- Renderer = Caman.Renderer;
2088
-
2089
- Caman.Store = (function() {
2090
- function Store() {}
2091
-
2092
- Store.items = {};
2093
-
2094
- Store.has = function(search) {
2095
- return this.items[search] != null;
2096
- };
2097
-
2098
- Store.get = function(search) {
2099
- return this.items[search];
2100
- };
2101
-
2102
- Store.put = function(name, obj) {
2103
- return this.items[name] = obj;
2104
- };
2105
-
2106
- Store.execute = function(search, callback) {
2107
- var _this = this;
2108
- setTimeout(function() {
2109
- return callback.call(_this.get(search), _this.get(search));
2110
- }, 0);
2111
- return this.get(search);
2112
- };
2113
-
2114
- Store.flush = function(name) {
2115
- if (name == null) {
2116
- name = false;
2117
- }
2118
- if (name) {
2119
- return delete this.items[name];
2120
- } else {
2121
- return this.items = {};
2122
- }
2123
- };
2124
-
2125
- return Store;
2126
-
2127
- })();
2128
-
2129
- Store = Caman.Store;
2130
-
2131
- Blender.register("normal", function(rgbaLayer, rgbaParent) {
2132
- return {
2133
- r: rgbaLayer.r,
2134
- g: rgbaLayer.g,
2135
- b: rgbaLayer.b
2136
- };
2137
- });
2138
-
2139
- Blender.register("multiply", function(rgbaLayer, rgbaParent) {
2140
- return {
2141
- r: (rgbaLayer.r * rgbaParent.r) / 255,
2142
- g: (rgbaLayer.g * rgbaParent.g) / 255,
2143
- b: (rgbaLayer.b * rgbaParent.b) / 255
2144
- };
2145
- });
2146
-
2147
- Blender.register("screen", function(rgbaLayer, rgbaParent) {
2148
- return {
2149
- r: 255 - (((255 - rgbaLayer.r) * (255 - rgbaParent.r)) / 255),
2150
- g: 255 - (((255 - rgbaLayer.g) * (255 - rgbaParent.g)) / 255),
2151
- b: 255 - (((255 - rgbaLayer.b) * (255 - rgbaParent.b)) / 255)
2152
- };
2153
- });
2154
-
2155
- Blender.register("overlay", function(rgbaLayer, rgbaParent) {
2156
- var result;
2157
- result = {};
2158
- result.r = rgbaParent.r > 128 ? 255 - 2 * (255 - rgbaLayer.r) * (255 - rgbaParent.r) / 255 : (rgbaParent.r * rgbaLayer.r * 2) / 255;
2159
- result.g = rgbaParent.g > 128 ? 255 - 2 * (255 - rgbaLayer.g) * (255 - rgbaParent.g) / 255 : (rgbaParent.g * rgbaLayer.g * 2) / 255;
2160
- result.b = rgbaParent.b > 128 ? 255 - 2 * (255 - rgbaLayer.b) * (255 - rgbaParent.b) / 255 : (rgbaParent.b * rgbaLayer.b * 2) / 255;
2161
- return result;
2162
- });
2163
-
2164
- Blender.register("difference", function(rgbaLayer, rgbaParent) {
2165
- return {
2166
- r: rgbaLayer.r - rgbaParent.r,
2167
- g: rgbaLayer.g - rgbaParent.g,
2168
- b: rgbaLayer.b - rgbaParent.b
2169
- };
2170
- });
2171
-
2172
- Blender.register("addition", function(rgbaLayer, rgbaParent) {
2173
- return {
2174
- r: rgbaParent.r + rgbaLayer.r,
2175
- g: rgbaParent.g + rgbaLayer.g,
2176
- b: rgbaParent.b + rgbaLayer.b
2177
- };
2178
- });
2179
-
2180
- Blender.register("exclusion", function(rgbaLayer, rgbaParent) {
2181
- return {
2182
- r: 128 - 2 * (rgbaParent.r - 128) * (rgbaLayer.r - 128) / 255,
2183
- g: 128 - 2 * (rgbaParent.g - 128) * (rgbaLayer.g - 128) / 255,
2184
- b: 128 - 2 * (rgbaParent.b - 128) * (rgbaLayer.b - 128) / 255
2185
- };
2186
- });
2187
-
2188
- Blender.register("softLight", function(rgbaLayer, rgbaParent) {
2189
- var result;
2190
- result = {};
2191
- result.r = rgbaParent.r > 128 ? 255 - ((255 - rgbaParent.r) * (255 - (rgbaLayer.r - 128))) / 255 : (rgbaParent.r * (rgbaLayer.r + 128)) / 255;
2192
- result.g = rgbaParent.g > 128 ? 255 - ((255 - rgbaParent.g) * (255 - (rgbaLayer.g - 128))) / 255 : (rgbaParent.g * (rgbaLayer.g + 128)) / 255;
2193
- result.b = rgbaParent.b > 128 ? 255 - ((255 - rgbaParent.b) * (255 - (rgbaLayer.b - 128))) / 255 : (rgbaParent.b * (rgbaLayer.b + 128)) / 255;
2194
- return result;
2195
- });
2196
-
2197
- Blender.register("lighten", function(rgbaLayer, rgbaParent) {
2198
- return {
2199
- r: rgbaParent.r > rgbaLayer.r ? rgbaParent.r : rgbaLayer.r,
2200
- g: rgbaParent.g > rgbaLayer.g ? rgbaParent.g : rgbaLayer.g,
2201
- b: rgbaParent.b > rgbaLayer.b ? rgbaParent.b : rgbaLayer.b
2202
- };
2203
- });
2204
-
2205
- Blender.register("darken", function(rgbaLayer, rgbaParent) {
2206
- return {
2207
- r: rgbaParent.r > rgbaLayer.r ? rgbaLayer.r : rgbaParent.r,
2208
- g: rgbaParent.g > rgbaLayer.g ? rgbaLayer.g : rgbaParent.g,
2209
- b: rgbaParent.b > rgbaLayer.b ? rgbaLayer.b : rgbaParent.b
2210
- };
2211
- });
2212
-
2213
- Filter.register("fillColor", function() {
2214
- var color;
2215
- if (arguments.length === 1) {
2216
- color = Convert.hexToRGB(arguments[0]);
2217
- } else {
2218
- color = {
2219
- r: arguments[0],
2220
- g: arguments[1],
2221
- b: arguments[2]
2222
- };
2223
- }
2224
- return this.process("fillColor", function(rgba) {
2225
- rgba.r = color.r;
2226
- rgba.g = color.g;
2227
- rgba.b = color.b;
2228
- rgba.a = 255;
2229
- return rgba;
2230
- });
2231
- });
2232
-
2233
- Filter.register("brightness", function(adjust) {
2234
- adjust = Math.floor(255 * (adjust / 100));
2235
- return this.process("brightness", function(rgba) {
2236
- rgba.r += adjust;
2237
- rgba.g += adjust;
2238
- rgba.b += adjust;
2239
- return rgba;
2240
- });
2241
- });
2242
-
2243
- Filter.register("saturation", function(adjust) {
2244
- adjust *= -0.01;
2245
- return this.process("saturation", function(rgba) {
2246
- var max;
2247
- max = Math.max(rgba.r, rgba.g, rgba.b);
2248
- if (rgba.r !== max) {
2249
- rgba.r += (max - rgba.r) * adjust;
2250
- }
2251
- if (rgba.g !== max) {
2252
- rgba.g += (max - rgba.g) * adjust;
2253
- }
2254
- if (rgba.b !== max) {
2255
- rgba.b += (max - rgba.b) * adjust;
2256
- }
2257
- return rgba;
2258
- });
2259
- });
2260
-
2261
- Filter.register("vibrance", function(adjust) {
2262
- adjust *= -1;
2263
- return this.process("vibrance", function(rgba) {
2264
- var amt, avg, max;
2265
- max = Math.max(rgba.r, rgba.g, rgba.b);
2266
- avg = (rgba.r + rgba.g + rgba.b) / 3;
2267
- amt = ((Math.abs(max - avg) * 2 / 255) * adjust) / 100;
2268
- if (rgba.r !== max) {
2269
- rgba.r += (max - rgba.r) * amt;
2270
- }
2271
- if (rgba.g !== max) {
2272
- rgba.g += (max - rgba.g) * amt;
2273
- }
2274
- if (rgba.b !== max) {
2275
- rgba.b += (max - rgba.b) * amt;
2276
- }
2277
- return rgba;
2278
- });
2279
- });
2280
-
2281
- Filter.register("greyscale", function(adjust) {
2282
- return this.process("greyscale", function(rgba) {
2283
- var avg;
2284
- avg = Calculate.luminance(rgba);
2285
- rgba.r = avg;
2286
- rgba.g = avg;
2287
- rgba.b = avg;
2288
- return rgba;
2289
- });
2290
- });
2291
-
2292
- Filter.register("contrast", function(adjust) {
2293
- adjust = Math.pow((adjust + 100) / 100, 2);
2294
- return this.process("contrast", function(rgba) {
2295
- rgba.r /= 255;
2296
- rgba.r -= 0.5;
2297
- rgba.r *= adjust;
2298
- rgba.r += 0.5;
2299
- rgba.r *= 255;
2300
- rgba.g /= 255;
2301
- rgba.g -= 0.5;
2302
- rgba.g *= adjust;
2303
- rgba.g += 0.5;
2304
- rgba.g *= 255;
2305
- rgba.b /= 255;
2306
- rgba.b -= 0.5;
2307
- rgba.b *= adjust;
2308
- rgba.b += 0.5;
2309
- rgba.b *= 255;
2310
- return rgba;
2311
- });
2312
- });
2313
-
2314
- Filter.register("hue", function(adjust) {
2315
- return this.process("hue", function(rgba) {
2316
- var b, g, h, hsv, r, _ref;
2317
- hsv = Convert.rgbToHSV(rgba.r, rgba.g, rgba.b);
2318
- h = hsv.h * 100;
2319
- h += Math.abs(adjust);
2320
- h = h % 100;
2321
- h /= 100;
2322
- hsv.h = h;
2323
- _ref = Convert.hsvToRGB(hsv.h, hsv.s, hsv.v), r = _ref.r, g = _ref.g, b = _ref.b;
2324
- rgba.r = r;
2325
- rgba.g = g;
2326
- rgba.b = b;
2327
- return rgba;
2328
- });
2329
- });
2330
-
2331
- Filter.register("colorize", function() {
2332
- var level, rgb;
2333
- if (arguments.length === 2) {
2334
- rgb = Convert.hexToRGB(arguments[0]);
2335
- level = arguments[1];
2336
- } else if (arguments.length === 4) {
2337
- rgb = {
2338
- r: arguments[0],
2339
- g: arguments[1],
2340
- b: arguments[2]
2341
- };
2342
- level = arguments[3];
2343
- }
2344
- return this.process("colorize", function(rgba) {
2345
- rgba.r -= (rgba.r - rgb.r) * (level / 100);
2346
- rgba.g -= (rgba.g - rgb.g) * (level / 100);
2347
- rgba.b -= (rgba.b - rgb.b) * (level / 100);
2348
- return rgba;
2349
- });
2350
- });
2351
-
2352
- Filter.register("invert", function() {
2353
- return this.process("invert", function(rgba) {
2354
- rgba.r = 255 - rgba.r;
2355
- rgba.g = 255 - rgba.g;
2356
- rgba.b = 255 - rgba.b;
2357
- return rgba;
2358
- });
2359
- });
2360
-
2361
- Filter.register("sepia", function(adjust) {
2362
- if (adjust == null) {
2363
- adjust = 100;
2364
- }
2365
- adjust /= 100;
2366
- return this.process("sepia", function(rgba) {
2367
- rgba.r = Math.min(255, (rgba.r * (1 - (0.607 * adjust))) + (rgba.g * (0.769 * adjust)) + (rgba.b * (0.189 * adjust)));
2368
- rgba.g = Math.min(255, (rgba.r * (0.349 * adjust)) + (rgba.g * (1 - (0.314 * adjust))) + (rgba.b * (0.168 * adjust)));
2369
- rgba.b = Math.min(255, (rgba.r * (0.272 * adjust)) + (rgba.g * (0.534 * adjust)) + (rgba.b * (1 - (0.869 * adjust))));
2370
- return rgba;
2371
- });
2372
- });
2373
-
2374
- Filter.register("gamma", function(adjust) {
2375
- return this.process("gamma", function(rgba) {
2376
- rgba.r = Math.pow(rgba.r / 255, adjust) * 255;
2377
- rgba.g = Math.pow(rgba.g / 255, adjust) * 255;
2378
- rgba.b = Math.pow(rgba.b / 255, adjust) * 255;
2379
- return rgba;
2380
- });
2381
- });
2382
-
2383
- Filter.register("noise", function(adjust) {
2384
- adjust = Math.abs(adjust) * 2.55;
2385
- return this.process("noise", function(rgba) {
2386
- var rand;
2387
- rand = Calculate.randomRange(adjust * -1, adjust);
2388
- rgba.r += rand;
2389
- rgba.g += rand;
2390
- rgba.b += rand;
2391
- return rgba;
2392
- });
2393
- });
2394
-
2395
- Filter.register("clip", function(adjust) {
2396
- adjust = Math.abs(adjust) * 2.55;
2397
- return this.process("clip", function(rgba) {
2398
- if (rgba.r > 255 - adjust) {
2399
- rgba.r = 255;
2400
- } else if (rgba.r < adjust) {
2401
- rgba.r = 0;
2402
- }
2403
- if (rgba.g > 255 - adjust) {
2404
- rgba.g = 255;
2405
- } else if (rgba.g < adjust) {
2406
- rgba.g = 0;
2407
- }
2408
- if (rgba.b > 255 - adjust) {
2409
- rgba.b = 255;
2410
- } else if (rgba.b < adjust) {
2411
- rgba.b = 0;
2412
- }
2413
- return rgba;
2414
- });
2415
- });
2416
-
2417
- Filter.register("channels", function(options) {
2418
- var chan, value;
2419
- if (typeof options !== "object") {
2420
- return this;
2421
- }
2422
- for (chan in options) {
2423
- if (!__hasProp.call(options, chan)) continue;
2424
- value = options[chan];
2425
- if (value === 0) {
2426
- delete options[chan];
2427
- continue;
2428
- }
2429
- options[chan] /= 100;
2430
- }
2431
- if (options.length === 0) {
2432
- return this;
2433
- }
2434
- return this.process("channels", function(rgba) {
2435
- if (options.red != null) {
2436
- if (options.red > 0) {
2437
- rgba.r += (255 - rgba.r) * options.red;
2438
- } else {
2439
- rgba.r -= rgba.r * Math.abs(options.red);
2440
- }
2441
- }
2442
- if (options.green != null) {
2443
- if (options.green > 0) {
2444
- rgba.g += (255 - rgba.g) * options.green;
2445
- } else {
2446
- rgba.g -= rgba.g * Math.abs(options.green);
2447
- }
2448
- }
2449
- if (options.blue != null) {
2450
- if (options.blue > 0) {
2451
- rgba.b += (255 - rgba.b) * options.blue;
2452
- } else {
2453
- rgba.b -= rgba.b * Math.abs(options.blue);
2454
- }
2455
- }
2456
- return rgba;
2457
- });
2458
- });
2459
-
2460
- Filter.register("curves", function() {
2461
- var algo, bezier, chans, cps, end, i, last, start, _i, _j, _ref, _ref1;
2462
- chans = arguments[0], cps = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
2463
- last = cps[cps.length - 1];
2464
- if (typeof last === "function") {
2465
- algo = last;
2466
- cps.pop();
2467
- } else if (typeof last === "string") {
2468
- algo = Calculate[last];
2469
- cps.pop();
2470
- } else {
2471
- algo = Calculate.bezier;
2472
- }
2473
- if (typeof chans === "string") {
2474
- chans = chans.split("");
2475
- }
2476
- if (chans[0] === "v") {
2477
- chans = ['r', 'g', 'b'];
2478
- }
2479
- if (cps.length < 2) {
2480
- throw "Invalid number of arguments to curves filter";
2481
- }
2482
- bezier = algo(cps, 0, 255);
2483
- start = cps[0];
2484
- if (start[0] > 0) {
2485
- for (i = _i = 0, _ref = start[0]; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
2486
- bezier[i] = start[1];
2487
- }
2488
- }
2489
- end = cps[cps.length - 1];
2490
- if (end[0] < 255) {
2491
- for (i = _j = _ref1 = end[0]; _ref1 <= 255 ? _j <= 255 : _j >= 255; i = _ref1 <= 255 ? ++_j : --_j) {
2492
- bezier[i] = end[1];
2493
- }
2494
- }
2495
- return this.process("curves", function(rgba) {
2496
- var _k, _ref2;
2497
- for (i = _k = 0, _ref2 = chans.length; 0 <= _ref2 ? _k < _ref2 : _k > _ref2; i = 0 <= _ref2 ? ++_k : --_k) {
2498
- rgba[chans[i]] = bezier[rgba[chans[i]]];
2499
- }
2500
- return rgba;
2501
- });
2502
- });
2503
-
2504
- Filter.register("exposure", function(adjust) {
2505
- var ctrl1, ctrl2, p;
2506
- p = Math.abs(adjust) / 100;
2507
- ctrl1 = [0, 255 * p];
2508
- ctrl2 = [255 - (255 * p), 255];
2509
- if (adjust < 0) {
2510
- ctrl1 = ctrl1.reverse();
2511
- ctrl2 = ctrl2.reverse();
2512
- }
2513
- return this.curves('rgb', [0, 0], ctrl1, ctrl2, [255, 255]);
2514
- });
2515
-
2516
- Caman.Plugin.register("crop", function(width, height, x, y) {
2517
- var canvas, ctx;
2518
- if (x == null) {
2519
- x = 0;
2520
- }
2521
- if (y == null) {
2522
- y = 0;
2523
- }
2524
- if (typeof exports !== "undefined" && exports !== null) {
2525
- canvas = new Canvas(width, height);
2526
- } else {
2527
- canvas = document.createElement('canvas');
2528
- Util.copyAttributes(this.canvas, canvas);
2529
- canvas.width = width;
2530
- canvas.height = height;
2531
- }
2532
- ctx = canvas.getContext('2d');
2533
- ctx.drawImage(this.canvas, x, y, width, height, 0, 0, width, height);
2534
- this.cropCoordinates = {
2535
- x: x,
2536
- y: y
2537
- };
2538
- this.cropped = true;
2539
- return this.replaceCanvas(canvas);
2540
- });
2541
-
2542
- Caman.Plugin.register("resize", function(newDims) {
2543
- var canvas, ctx;
2544
- if (newDims == null) {
2545
- newDims = null;
2546
- }
2547
- if (newDims === null || ((newDims.width == null) && (newDims.height == null))) {
2548
- Log.error("Invalid or missing dimensions given for resize");
2549
- return;
2550
- }
2551
- if (newDims.width == null) {
2552
- newDims.width = this.canvas.width * newDims.height / this.canvas.height;
2553
- } else if (newDims.height == null) {
2554
- newDims.height = this.canvas.height * newDims.width / this.canvas.width;
2555
- }
2556
- if (typeof exports !== "undefined" && exports !== null) {
2557
- canvas = new Canvas(newDims.width, newDims.height);
2558
- } else {
2559
- canvas = document.createElement('canvas');
2560
- Util.copyAttributes(this.canvas, canvas);
2561
- canvas.width = newDims.width;
2562
- canvas.height = newDims.height;
2563
- }
2564
- ctx = canvas.getContext('2d');
2565
- ctx.drawImage(this.canvas, 0, 0, this.canvas.width, this.canvas.height, 0, 0, newDims.width, newDims.height);
2566
- this.resized = true;
2567
- return this.replaceCanvas(canvas);
2568
- });
2569
-
2570
- Caman.Filter.register("crop", function() {
2571
- return this.processPlugin("crop", Array.prototype.slice.call(arguments, 0));
2572
- });
2573
-
2574
- Caman.Filter.register("resize", function() {
2575
- return this.processPlugin("resize", Array.prototype.slice.call(arguments, 0));
2576
- });
2577
-
2578
- Caman.Filter.register("boxBlur", function() {
2579
- return this.processKernel("Box Blur", [1, 1, 1, 1, 1, 1, 1, 1, 1]);
2580
- });
2581
-
2582
- Caman.Filter.register("heavyRadialBlur", function() {
2583
- return this.processKernel("Heavy Radial Blur", [0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0]);
2584
- });
2585
-
2586
- Caman.Filter.register("gaussianBlur", function() {
2587
- return this.processKernel("Gaussian Blur", [1, 4, 6, 4, 1, 4, 16, 24, 16, 4, 6, 24, 36, 24, 6, 4, 16, 24, 16, 4, 1, 4, 6, 4, 1]);
2588
- });
2589
-
2590
- Caman.Filter.register("motionBlur", function(degrees) {
2591
- var kernel;
2592
- if (degrees === 0 || degrees === 180) {
2593
- kernel = [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0];
2594
- } else if ((degrees > 0 && degrees < 90) || (degrees > 180 && degrees < 270)) {
2595
- kernel = [0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0];
2596
- } else if (degrees === 90 || degrees === 270) {
2597
- kernel = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
2598
- } else {
2599
- kernel = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1];
2600
- }
2601
- return this.processKernel("Motion Blur", kernel);
2602
- });
2603
-
2604
- Caman.Filter.register("sharpen", function(amt) {
2605
- if (amt == null) {
2606
- amt = 100;
2607
- }
2608
- amt /= 100;
2609
- return this.processKernel("Sharpen", [0, -amt, 0, -amt, 4 * amt + 1, -amt, 0, -amt, 0]);
2610
- });
2611
-
2612
- vignetteFilters = {
2613
- brightness: function(rgba, amt, opts) {
2614
- rgba.r = rgba.r - (rgba.r * amt * opts.strength);
2615
- rgba.g = rgba.g - (rgba.g * amt * opts.strength);
2616
- rgba.b = rgba.b - (rgba.b * amt * opts.strength);
2617
- return rgba;
2618
- },
2619
- gamma: function(rgba, amt, opts) {
2620
- rgba.r = Math.pow(rgba.r / 255, Math.max(10 * amt * opts.strength, 1)) * 255;
2621
- rgba.g = Math.pow(rgba.g / 255, Math.max(10 * amt * opts.strength, 1)) * 255;
2622
- rgba.b = Math.pow(rgba.b / 255, Math.max(10 * amt * opts.strength, 1)) * 255;
2623
- return rgba;
2624
- },
2625
- colorize: function(rgba, amt, opts) {
2626
- rgba.r -= (rgba.r - opts.color.r) * amt;
2627
- rgba.g -= (rgba.g - opts.color.g) * amt;
2628
- rgba.b -= (rgba.b - opts.color.b) * amt;
2629
- return rgba;
2630
- }
2631
- };
2632
-
2633
- Filter.register("vignette", function(size, strength) {
2634
- var bezier, center, end, start;
2635
- if (strength == null) {
2636
- strength = 60;
2637
- }
2638
- if (typeof size === "string" && size.substr(-1) === "%") {
2639
- if (this.dimensions.height > this.dimensions.width) {
2640
- size = this.dimensions.width * (parseInt(size.substr(0, size.length - 1), 10) / 100);
2641
- } else {
2642
- size = this.dimensions.height * (parseInt(size.substr(0, size.length - 1), 10) / 100);
2643
- }
2644
- }
2645
- strength /= 100;
2646
- center = [this.dimensions.width / 2, this.dimensions.height / 2];
2647
- start = Math.sqrt(Math.pow(center[0], 2) + Math.pow(center[1], 2));
2648
- end = start - size;
2649
- bezier = Calculate.bezier([0, 1], [30, 30], [70, 60], [100, 80]);
2650
- return this.process("vignette", function(rgba) {
2651
- var dist, div, loc;
2652
- loc = rgba.locationXY();
2653
- dist = Calculate.distance(loc.x, loc.y, center[0], center[1]);
2654
- if (dist > end) {
2655
- div = Math.max(1, (bezier[Math.round(((dist - end) / size) * 100)] / 10) * strength);
2656
- rgba.r = Math.pow(rgba.r / 255, div) * 255;
2657
- rgba.g = Math.pow(rgba.g / 255, div) * 255;
2658
- rgba.b = Math.pow(rgba.b / 255, div) * 255;
2659
- }
2660
- return rgba;
2661
- });
2662
- });
2663
-
2664
- Filter.register("rectangularVignette", function(opts) {
2665
- var defaults, dim, percent, size, _i, _len, _ref;
2666
- defaults = {
2667
- strength: 50,
2668
- cornerRadius: 0,
2669
- method: 'brightness',
2670
- color: {
2671
- r: 0,
2672
- g: 0,
2673
- b: 0
2674
- }
2675
- };
2676
- opts = Util.extend(defaults, opts);
2677
- if (!opts.size) {
2678
- return this;
2679
- } else if (typeof opts.size === "string") {
2680
- percent = parseInt(opts.size, 10) / 100;
2681
- opts.size = {
2682
- width: this.dimensions.width * percent,
2683
- height: this.dimensions.height * percent
2684
- };
2685
- } else if (typeof opts.size === "object") {
2686
- _ref = ["width", "height"];
2687
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
2688
- dim = _ref[_i];
2689
- if (typeof opts.size[dim] === "string") {
2690
- opts.size[dim] = this.dimensions[dim] * (parseInt(opts.size[dim], 10) / 100);
2691
- }
2692
- }
2693
- } else if (opts.size === "number") {
2694
- size = opts.size;
2695
- opts.size = {
2696
- width: size,
2697
- height: size
2698
- };
2699
- }
2700
- if (typeof opts.cornerRadius === "string") {
2701
- opts.cornerRadius = (opts.size.width / 2) * (parseInt(opts.cornerRadius, 10) / 100);
2702
- }
2703
- opts.strength /= 100;
2704
- opts.size.width = Math.floor(opts.size.width);
2705
- opts.size.height = Math.floor(opts.size.height);
2706
- opts.image = {
2707
- width: this.dimensions.width,
2708
- height: this.dimensions.height
2709
- };
2710
- if (opts.method === "colorize" && typeof opts.color === "string") {
2711
- opts.color = Convert.hexToRGB(opts.color);
2712
- }
2713
- opts.coords = {
2714
- left: (this.dimensions.width - opts.size.width) / 2,
2715
- right: this.dimensions.width - opts.coords.left,
2716
- bottom: (this.dimensions.height - opts.size.height) / 2,
2717
- top: this.dimensions.height - opts.coords.bottom
2718
- };
2719
- opts.corners = [
2720
- {
2721
- x: opts.coords.left + opts.cornerRadius,
2722
- y: opts.coords.top - opts.cornerRadius
2723
- }, {
2724
- x: opts.coords.right - opts.cornerRadius,
2725
- y: opts.coords.top - opts.cornerRadius
2726
- }, {
2727
- x: opts.coords.right - opts.cornerRadius,
2728
- y: opts.coords.bottom + opts.cornerRadius
2729
- }, {
2730
- x: opts.coords.left + opts.cornerRadius,
2731
- y: opts.coords.bottom + opts.cornerRadius
2732
- }
2733
- ];
2734
- opts.maxDist = Calculate.distance(0, 0, opts.corners[3].x, opts.corners[3].y) - opts.cornerRadius;
2735
- return this.process("rectangularVignette", function(rgba) {
2736
- var amt, loc, radialDist;
2737
- loc = rgba.locationXY();
2738
- if ((loc.x > opts.corners[0].x && loc.x < opts.corners[1].x) && (loc.y > opts.coords.bottom && loc.y < opts.coords.top)) {
2739
- return rgba;
2740
- }
2741
- if ((loc.x > opts.coords.left && loc.x < opts.coords.right) && (loc.y > opts.corners[3].y && loc.y < opts.corners[2].y)) {
2742
- return rgba;
2743
- }
2744
- if (loc.x > opts.corners[0].x && loc.x < opts.corners[1].x && loc.y > opts.coords.top) {
2745
- amt = (loc.y - opts.coords.top) / opts.maxDist;
2746
- } else if (loc.y > opts.corners[2].y && loc.y < opts.corners[1].y && loc.x > opts.coords.right) {
2747
- amt = (loc.x - opts.coords.right) / opts.maxDist;
2748
- } else if (loc.x > opts.corners[0].x && loc.x < opts.corners[1].x && loc.y < opts.coords.bottom) {
2749
- amt = (opts.coords.bottom - loc.y) / opts.maxDist;
2750
- } else if (loc.y > opts.corners[2].y && loc.y < opts.corners[1].y && loc.x < opts.coords.left) {
2751
- amt = (opts.coords.left - loc.x) / opts.maxDist;
2752
- } else if (loc.x <= opts.corners[0].x && loc.y >= opts.corners[0].y) {
2753
- radialDist = Caman.distance(loc.x, loc.y, opts.corners[0].x, opts.corners[0].y);
2754
- amt = (radialDist - opts.cornerRadius) / opts.maxDist;
2755
- } else if (loc.x >= opts.corners[1].x && loc.y >= opts.corners[1].y) {
2756
- radialDist = Caman.distance(loc.x, loc.y, opts.corners[1].x, opts.corners[1].y);
2757
- amt = (radialDist - opts.cornerRadius) / opts.maxDist;
2758
- } else if (loc.x >= opts.corners[2].x && loc.y <= opts.corners[2].y) {
2759
- radialDist = Caman.distance(loc.x, loc.y, opts.corners[2].x, opts.corners[2].y);
2760
- amt = (radialDist - opts.cornerRadius) / opts.maxDist;
2761
- } else if (loc.x <= opts.corners[3].x && loc.y <= opts.corners[3].y) {
2762
- radialDist = Caman.distance(loc.x, loc.y, opts.corners[3].x, opts.corners[3].y);
2763
- amt = (radialDist - opts.cornerRadius) / opts.maxDist;
2764
- }
2765
- if (amt < 0) {
2766
- return rgba;
2767
- }
2768
- return vignetteFilters[opts.method](rgba, amt, opts);
2769
- });
2770
- });
2771
-
2772
- /*
2773
- CompoundBlur - Blurring with varying radii for Canvas
2774
-
2775
- Version: 0.1
2776
- Author: Mario Klingemann
2777
- Contact: mario@quasimondo.com
2778
- Website: http://www.quasimondo.com/StackBlurForCanvas
2779
- Twitter: @quasimondo
2780
- Modified By: Ryan LeFevre (@meltingice)
2781
-
2782
- In case you find this class useful - especially in commercial projects -
2783
- I am not totally unhappy for a small donation to my PayPal account
2784
- mario@quasimondo.de
2785
-
2786
- Copyright (c) 2011 Mario Klingemann
2787
-
2788
- Permission is hereby granted, free of charge, to any person
2789
- obtaining a copy of this software and associated documentation
2790
- files (the "Software"), to deal in the Software without
2791
- restriction, including without limitation the rights to use,
2792
- copy, modify, merge, publish, distribute, sublicense, and/or sell
2793
- copies of the Software, and to permit persons to whom the
2794
- Software is furnished to do so, subject to the following
2795
- conditions:
2796
-
2797
- The above copyright notice and this permission notice shall be
2798
- included in all copies or substantial portions of the Software.
2799
-
2800
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
2801
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
2802
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
2803
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
2804
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
2805
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2806
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
2807
- OTHER DEALINGS IN THE SOFTWARE.
2808
- */
2809
-
2810
-
2811
- (function() {
2812
- var BlurStack, getLinearGradientMap, getRadialGradientMap, mul_table, shg_table;
2813
- mul_table = [512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512, 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292, 273, 512, 482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271, 259, 496, 475, 456, 437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512, 497, 482, 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328, 320, 312, 305, 298, 291, 284, 278, 271, 265, 259, 507, 496, 485, 475, 465, 456, 446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347, 341, 335, 329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512, 505, 497, 489, 482, 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405, 399, 394, 389, 383, 378, 373, 368, 364, 359, 354, 350, 345, 341, 337, 332, 328, 324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271, 268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456, 451, 446, 442, 437, 433, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 388, 385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347, 344, 341, 338, 335, 332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292, 289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259];
2814
- shg_table = [9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24];
2815
- getLinearGradientMap = function(width, height, centerX, centerY, angle, length, mirrored) {
2816
- var cnv, context, gradient, x1, x2, y1, y2;
2817
- cnv = typeof exports !== "undefined" && exports !== null ? new Canvas() : document.createElement('canvas');
2818
- cnv.width = width;
2819
- cnv.height = height;
2820
- x1 = centerX + Math.cos(angle) * length * 0.5;
2821
- y1 = centerY + Math.sin(angle) * length * 0.5;
2822
- x2 = centerX - Math.cos(angle) * length * 0.5;
2823
- y2 = centerY - Math.sin(angle) * length * 0.5;
2824
- context = cnv.getContext("2d");
2825
- gradient = context.createLinearGradient(x1, y1, x2, y2);
2826
- if (!mirrored) {
2827
- gradient.addColorStop(0, "white");
2828
- gradient.addColorStop(1, "black");
2829
- } else {
2830
- gradient.addColorStop(0, "white");
2831
- gradient.addColorStop(0.5, "black");
2832
- gradient.addColorStop(1, "white");
2833
- }
2834
- context.fillStyle = gradient;
2835
- context.fillRect(0, 0, width, height);
2836
- return context.getImageData(0, 0, width, height);
2837
- };
2838
- getRadialGradientMap = function(width, height, centerX, centerY, radius1, radius2) {
2839
- var cnv, context, gradient;
2840
- cnv = typeof exports !== "undefined" && exports !== null ? new Canvas() : document.createElement('canvas');
2841
- cnv.width = width;
2842
- cnv.height = height;
2843
- context = cnv.getContext("2d");
2844
- gradient = context.createRadialGradient(centerX, centerY, radius1, centerX, centerY, radius2);
2845
- gradient.addColorStop(1, "white");
2846
- gradient.addColorStop(0, "black");
2847
- context.fillStyle = gradient;
2848
- context.fillRect(0, 0, width, height);
2849
- return context.getImageData(0, 0, width, height);
2850
- };
2851
- BlurStack = function() {
2852
- this.r = 0;
2853
- this.g = 0;
2854
- this.b = 0;
2855
- this.a = 0;
2856
- return this.next = null;
2857
- };
2858
- Caman.Plugin.register("compoundBlur", function(radiusData, radius, increaseFactor, blurLevels) {
2859
- var b_in_sum, b_out_sum, b_sum, blend, currentIndex, div, g_in_sum, g_out_sum, g_sum, height, heightMinus1, i, iblend, idx, imagePixels, index, iradius, lookupValue, mul_sum, p, pb, pg, pixels, pr, r_in_sum, r_out_sum, r_sum, radiusPixels, radiusPlus1, rbs, shg_sum, stack, stackEnd, stackIn, stackOut, stackStart, steps, sumFactor, w4, wh, wh4, width, widthMinus1, x, y, yi, yp, yw, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
2860
- width = this.dimensions.width;
2861
- height = this.dimensions.height;
2862
- imagePixels = this.pixelData;
2863
- radiusPixels = radiusData.data;
2864
- wh = width * height;
2865
- wh4 = wh << 2;
2866
- pixels = [];
2867
- for (i = _i = 0; 0 <= wh4 ? _i < wh4 : _i > wh4; i = 0 <= wh4 ? ++_i : --_i) {
2868
- pixels[i] = imagePixels[i];
2869
- }
2870
- currentIndex = 0;
2871
- steps = blurLevels;
2872
- blurLevels -= 1;
2873
- while (steps-- >= 0) {
2874
- iradius = (radius + 0.5) | 0;
2875
- if (iradius === 0) {
2876
- continue;
2877
- }
2878
- if (iradius > 256) {
2879
- iradius = 256;
2880
- }
2881
- div = iradius + iradius + 1;
2882
- w4 = width << 2;
2883
- widthMinus1 = width - 1;
2884
- heightMinus1 = height - 1;
2885
- radiusPlus1 = iradius + 1;
2886
- sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;
2887
- stackStart = new BlurStack();
2888
- stackEnd = void 0;
2889
- stack = stackStart;
2890
- for (i = _j = 1; 1 <= div ? _j < div : _j > div; i = 1 <= div ? ++_j : --_j) {
2891
- stack = stack.next = new BlurStack();
2892
- if (i === radiusPlus1) {
2893
- stackEnd = stack;
2894
- }
2895
- }
2896
- stack.next = stackStart;
2897
- stackIn = null;
2898
- stackOut = null;
2899
- yw = yi = 0;
2900
- mul_sum = mul_table[iradius];
2901
- shg_sum = shg_table[iradius];
2902
- for (y = _k = 0; 0 <= height ? _k < height : _k > height; y = 0 <= height ? ++_k : --_k) {
2903
- r_in_sum = g_in_sum = b_in_sum = r_sum = g_sum = b_sum = 0;
2904
- r_out_sum = radiusPlus1 * (pr = pixels[yi]);
2905
- g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);
2906
- b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);
2907
- r_sum += sumFactor * pr;
2908
- g_sum += sumFactor * pg;
2909
- b_sum += sumFactor * pb;
2910
- stack = stackStart;
2911
- for (i = _l = 0; 0 <= radiusPlus1 ? _l < radiusPlus1 : _l > radiusPlus1; i = 0 <= radiusPlus1 ? ++_l : --_l) {
2912
- stack.r = pr;
2913
- stack.g = pg;
2914
- stack.b = pb;
2915
- stack = stack.next;
2916
- }
2917
- for (i = _m = 1; 1 <= radiusPlus1 ? _m < radiusPlus1 : _m > radiusPlus1; i = 1 <= radiusPlus1 ? ++_m : --_m) {
2918
- p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);
2919
- r_sum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);
2920
- g_sum += (stack.g = (pg = pixels[p + 1])) * rbs;
2921
- b_sum += (stack.b = (pb = pixels[p + 2])) * rbs;
2922
- r_in_sum += pr;
2923
- g_in_sum += pg;
2924
- b_in_sum += pb;
2925
- stack = stack.next;
2926
- }
2927
- stackIn = stackStart;
2928
- stackOut = stackEnd;
2929
- for (x = _n = 0; 0 <= width ? _n < width : _n > width; x = 0 <= width ? ++_n : --_n) {
2930
- pixels[yi] = (r_sum * mul_sum) >> shg_sum;
2931
- pixels[yi + 1] = (g_sum * mul_sum) >> shg_sum;
2932
- pixels[yi + 2] = (b_sum * mul_sum) >> shg_sum;
2933
- r_sum -= r_out_sum;
2934
- g_sum -= g_out_sum;
2935
- b_sum -= b_out_sum;
2936
- r_out_sum -= stackIn.r;
2937
- g_out_sum -= stackIn.g;
2938
- b_out_sum -= stackIn.b;
2939
- p = (yw + ((p = x + radiusPlus1) < widthMinus1 ? p : widthMinus1)) << 2;
2940
- r_in_sum += (stackIn.r = pixels[p]);
2941
- g_in_sum += (stackIn.g = pixels[p + 1]);
2942
- b_in_sum += (stackIn.b = pixels[p + 2]);
2943
- r_sum += r_in_sum;
2944
- g_sum += g_in_sum;
2945
- b_sum += b_in_sum;
2946
- stackIn = stackIn.next;
2947
- r_out_sum += (pr = stackOut.r);
2948
- g_out_sum += (pg = stackOut.g);
2949
- b_out_sum += (pb = stackOut.b);
2950
- r_in_sum -= pr;
2951
- g_in_sum -= pg;
2952
- b_in_sum -= pb;
2953
- stackOut = stackOut.next;
2954
- yi += 4;
2955
- }
2956
- yw += width;
2957
- }
2958
- for (x = _o = 0; 0 <= width ? _o < width : _o > width; x = 0 <= width ? ++_o : --_o) {
2959
- g_in_sum = b_in_sum = r_in_sum = g_sum = b_sum = r_sum = 0;
2960
- yi = x << 2;
2961
- r_out_sum = radiusPlus1 * (pr = pixels[yi]);
2962
- g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);
2963
- b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);
2964
- r_sum += sumFactor * pr;
2965
- g_sum += sumFactor * pg;
2966
- b_sum += sumFactor * pb;
2967
- stack = stackStart;
2968
- for (i = _p = 0; 0 <= radiusPlus1 ? _p < radiusPlus1 : _p > radiusPlus1; i = 0 <= radiusPlus1 ? ++_p : --_p) {
2969
- stack.r = pr;
2970
- stack.g = pg;
2971
- stack.b = pb;
2972
- stack = stack.next;
2973
- }
2974
- yp = width;
2975
- for (i = _q = 1; 1 <= radiusPlus1 ? _q < radiusPlus1 : _q > radiusPlus1; i = 1 <= radiusPlus1 ? ++_q : --_q) {
2976
- yi = (yp + x) << 2;
2977
- r_sum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);
2978
- g_sum += (stack.g = (pg = pixels[yi + 1])) * rbs;
2979
- b_sum += (stack.b = (pb = pixels[yi + 2])) * rbs;
2980
- r_in_sum += pr;
2981
- g_in_sum += pg;
2982
- b_in_sum += pb;
2983
- stack = stack.next;
2984
- if (i < heightMinus1) {
2985
- yp += width;
2986
- }
2987
- }
2988
- yi = x;
2989
- stackIn = stackStart;
2990
- stackOut = stackEnd;
2991
- for (y = _r = 0; 0 <= height ? _r < height : _r > height; y = 0 <= height ? ++_r : --_r) {
2992
- p = yi << 2;
2993
- pixels[p] = (r_sum * mul_sum) >> shg_sum;
2994
- pixels[p + 1] = (g_sum * mul_sum) >> shg_sum;
2995
- pixels[p + 2] = (b_sum * mul_sum) >> shg_sum;
2996
- r_sum -= r_out_sum;
2997
- g_sum -= g_out_sum;
2998
- b_sum -= b_out_sum;
2999
- r_out_sum -= stackIn.r;
3000
- g_out_sum -= stackIn.g;
3001
- b_out_sum -= stackIn.b;
3002
- p = (x + (((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width)) << 2;
3003
- r_sum += (r_in_sum += (stackIn.r = pixels[p]));
3004
- g_sum += (g_in_sum += (stackIn.g = pixels[p + 1]));
3005
- b_sum += (b_in_sum += (stackIn.b = pixels[p + 2]));
3006
- stackIn = stackIn.next;
3007
- r_out_sum += (pr = stackOut.r);
3008
- g_out_sum += (pg = stackOut.g);
3009
- b_out_sum += (pb = stackOut.b);
3010
- r_in_sum -= pr;
3011
- g_in_sum -= pg;
3012
- b_in_sum -= pb;
3013
- stackOut = stackOut.next;
3014
- yi += width;
3015
- }
3016
- }
3017
- radius *= increaseFactor;
3018
- i = wh;
3019
- while (--i > -1) {
3020
- idx = i << 2;
3021
- lookupValue = (radiusPixels[idx + 2] & 0xff) / 255.0 * blurLevels;
3022
- index = lookupValue | 0;
3023
- if (index === currentIndex) {
3024
- blend = 256.0 * (lookupValue - (lookupValue | 0));
3025
- iblend = 256 - blend;
3026
- imagePixels[idx] = (imagePixels[idx] * iblend + pixels[idx] * blend) >> 8;
3027
- imagePixels[idx + 1] = (imagePixels[idx + 1] * iblend + pixels[idx + 1] * blend) >> 8;
3028
- imagePixels[idx + 2] = (imagePixels[idx + 2] * iblend + pixels[idx + 2] * blend) >> 8;
3029
- } else if (index === currentIndex + 1) {
3030
- imagePixels[idx] = pixels[idx];
3031
- imagePixels[idx + 1] = pixels[idx + 1];
3032
- imagePixels[idx + 2] = pixels[idx + 2];
3033
- }
3034
- }
3035
- currentIndex++;
3036
- }
3037
- return this;
3038
- });
3039
- Caman.Filter.register("tiltShift", function(opts) {
3040
- var defaults, gradient;
3041
- defaults = {
3042
- center: {
3043
- x: this.dimensions.width / 2,
3044
- y: this.dimensions.height / 2
3045
- },
3046
- angle: 45,
3047
- focusWidth: 200,
3048
- startRadius: 3,
3049
- radiusFactor: 1.5,
3050
- steps: 3
3051
- };
3052
- opts = Util.extend(defaults, opts);
3053
- opts.angle *= Math.PI / 180;
3054
- gradient = getLinearGradientMap(this.dimensions.width, this.dimensions.height, opts.center.x, opts.center.y, opts.angle, opts.focusWidth, true);
3055
- return this.processPlugin("compoundBlur", [gradient, opts.startRadius, opts.radiusFactor, opts.steps]);
3056
- });
3057
- return Caman.Filter.register("radialBlur", function(opts) {
3058
- var defaults, gradient, radius1, radius2;
3059
- defaults = {
3060
- size: 50,
3061
- center: {
3062
- x: this.dimensions.width / 2,
3063
- y: this.dimensions.height / 2
3064
- },
3065
- startRadius: 3,
3066
- radiusFactor: 1.5,
3067
- steps: 3,
3068
- radius: null
3069
- };
3070
- opts = Util.extend(defaults, opts);
3071
- if (!opts.radius) {
3072
- opts.radius = this.dimensions.width < this.dimensions.height ? this.dimensions.height : this.dimensions.width;
3073
- }
3074
- radius1 = (opts.radius / 2) - opts.size;
3075
- radius2 = opts.radius / 2;
3076
- gradient = getRadialGradientMap(this.dimensions.width, this.dimensions.height, opts.center.x, opts.center.y, radius1, radius2);
3077
- return this.processPlugin("compoundBlur", [gradient, opts.startRadius, opts.radiusFactor, opts.steps]);
3078
- });
3079
- })();
3080
-
3081
- Caman.Filter.register("edgeEnhance", function() {
3082
- return this.processKernel("Edge Enhance", [0, 0, 0, -1, 1, 0, 0, 0, 0]);
3083
- });
3084
-
3085
- Caman.Filter.register("edgeDetect", function() {
3086
- return this.processKernel("Edge Detect", [-1, -1, -1, -1, 8, -1, -1, -1, -1]);
3087
- });
3088
-
3089
- Caman.Filter.register("emboss", function() {
3090
- return this.processKernel("Emboss", [-2, -1, 0, -1, 1, 1, 0, 1, 2]);
3091
- });
3092
-
3093
- Caman.Filter.register("posterize", function(adjust) {
3094
- var numOfAreas, numOfValues;
3095
- numOfAreas = 256 / adjust;
3096
- numOfValues = 255 / (adjust - 1);
3097
- return this.process("posterize", function(rgba) {
3098
- rgba.r = Math.floor(Math.floor(rgba.r / numOfAreas) * numOfValues);
3099
- rgba.g = Math.floor(Math.floor(rgba.g / numOfAreas) * numOfValues);
3100
- rgba.b = Math.floor(Math.floor(rgba.b / numOfAreas) * numOfValues);
3101
- return rgba;
3102
- });
3103
- });
3104
-
3105
- Caman.Filter.register("vintage", function(vignette) {
3106
- if (vignette == null) {
3107
- vignette = true;
3108
- }
3109
- this.greyscale();
3110
- this.contrast(5);
3111
- this.noise(3);
3112
- this.sepia(100);
3113
- this.channels({
3114
- red: 8,
3115
- blue: 2,
3116
- green: 4
3117
- });
3118
- this.gamma(0.87);
3119
- if (vignette) {
3120
- return this.vignette("40%", 30);
3121
- }
3122
- });
3123
-
3124
- Caman.Filter.register("lomo", function(vignette) {
3125
- if (vignette == null) {
3126
- vignette = true;
3127
- }
3128
- this.brightness(15);
3129
- this.exposure(15);
3130
- this.curves('rgb', [0, 0], [200, 0], [155, 255], [255, 255]);
3131
- this.saturation(-20);
3132
- this.gamma(1.8);
3133
- if (vignette) {
3134
- this.vignette("50%", 60);
3135
- }
3136
- return this.brightness(5);
3137
- });
3138
-
3139
- Caman.Filter.register("clarity", function(grey) {
3140
- if (grey == null) {
3141
- grey = false;
3142
- }
3143
- this.vibrance(20);
3144
- this.curves('rgb', [5, 0], [130, 150], [190, 220], [250, 255]);
3145
- this.sharpen(15);
3146
- this.vignette("45%", 20);
3147
- if (grey) {
3148
- this.greyscale();
3149
- this.contrast(4);
3150
- }
3151
- return this;
3152
- });
3153
-
3154
- Caman.Filter.register("sinCity", function() {
3155
- this.contrast(100);
3156
- this.brightness(15);
3157
- this.exposure(10);
3158
- this.posterize(80);
3159
- this.clip(30);
3160
- return this.greyscale();
3161
- });
3162
-
3163
- Caman.Filter.register("sunrise", function() {
3164
- this.exposure(3.5);
3165
- this.saturation(-5);
3166
- this.vibrance(50);
3167
- this.sepia(60);
3168
- this.colorize("#e87b22", 10);
3169
- this.channels({
3170
- red: 8,
3171
- blue: 8
3172
- });
3173
- this.contrast(5);
3174
- this.gamma(1.2);
3175
- return this.vignette("55%", 25);
3176
- });
3177
-
3178
- Caman.Filter.register("crossProcess", function() {
3179
- this.exposure(5);
3180
- this.colorize("#e87b22", 4);
3181
- this.sepia(20);
3182
- this.channels({
3183
- blue: 8,
3184
- red: 3
3185
- });
3186
- this.curves('b', [0, 0], [100, 150], [180, 180], [255, 255]);
3187
- this.contrast(15);
3188
- this.vibrance(75);
3189
- return this.gamma(1.6);
3190
- });
3191
-
3192
- Caman.Filter.register("orangePeel", function() {
3193
- this.curves('rgb', [0, 0], [100, 50], [140, 200], [255, 255]);
3194
- this.vibrance(-30);
3195
- this.saturation(-30);
3196
- this.colorize('#ff9000', 30);
3197
- this.contrast(-5);
3198
- return this.gamma(1.4);
3199
- });
3200
-
3201
- Caman.Filter.register("love", function() {
3202
- this.brightness(5);
3203
- this.exposure(8);
3204
- this.contrast(4);
3205
- this.colorize('#c42007', 30);
3206
- this.vibrance(50);
3207
- return this.gamma(1.3);
3208
- });
3209
-
3210
- Caman.Filter.register("grungy", function() {
3211
- this.gamma(1.5);
3212
- this.clip(25);
3213
- this.saturation(-60);
3214
- this.contrast(5);
3215
- this.noise(5);
3216
- return this.vignette("50%", 30);
3217
- });
3218
-
3219
- Caman.Filter.register("jarques", function() {
3220
- this.saturation(-35);
3221
- this.curves('b', [20, 0], [90, 120], [186, 144], [255, 230]);
3222
- this.curves('r', [0, 0], [144, 90], [138, 120], [255, 255]);
3223
- this.curves('g', [10, 0], [115, 105], [148, 100], [255, 248]);
3224
- this.curves('rgb', [0, 0], [120, 100], [128, 140], [255, 255]);
3225
- return this.sharpen(20);
3226
- });
3227
-
3228
- Caman.Filter.register("pinhole", function() {
3229
- this.greyscale();
3230
- this.sepia(10);
3231
- this.exposure(10);
3232
- this.contrast(15);
3233
- return this.vignette("60%", 35);
3234
- });
3235
-
3236
- Caman.Filter.register("oldBoot", function() {
3237
- this.saturation(-20);
3238
- this.vibrance(-50);
3239
- this.gamma(1.1);
3240
- this.sepia(30);
3241
- this.channels({
3242
- red: -10,
3243
- blue: 5
3244
- });
3245
- this.curves('rgb', [0, 0], [80, 50], [128, 230], [255, 255]);
3246
- return this.vignette("60%", 30);
3247
- });
3248
-
3249
- Caman.Filter.register("glowingSun", function(vignette) {
3250
- if (vignette == null) {
3251
- vignette = true;
3252
- }
3253
- this.brightness(10);
3254
- this.newLayer(function() {
3255
- this.setBlendingMode("multiply");
3256
- this.opacity(80);
3257
- this.copyParent();
3258
- this.filter.gamma(0.8);
3259
- this.filter.contrast(50);
3260
- return this.filter.exposure(10);
3261
- });
3262
- this.newLayer(function() {
3263
- this.setBlendingMode("softLight");
3264
- this.opacity(80);
3265
- return this.fillColor("#f49600");
3266
- });
3267
- this.exposure(20);
3268
- this.gamma(0.8);
3269
- if (vignette) {
3270
- return this.vignette("45%", 20);
3271
- }
3272
- });
3273
-
3274
- Caman.Filter.register("hazyDays", function() {
3275
- this.gamma(1.2);
3276
- this.newLayer(function() {
3277
- this.setBlendingMode("overlay");
3278
- this.opacity(60);
3279
- this.copyParent();
3280
- this.filter.channels({
3281
- red: 5
3282
- });
3283
- return this.filter.stackBlur(15);
3284
- });
3285
- this.newLayer(function() {
3286
- this.setBlendingMode("addition");
3287
- this.opacity(40);
3288
- return this.fillColor("#6899ba");
3289
- });
3290
- this.newLayer(function() {
3291
- this.setBlendingMode("multiply");
3292
- this.opacity(35);
3293
- this.copyParent();
3294
- this.filter.brightness(40);
3295
- this.filter.vibrance(40);
3296
- this.filter.exposure(30);
3297
- this.filter.contrast(15);
3298
- this.filter.curves('r', [0, 40], [128, 128], [128, 128], [255, 215]);
3299
- this.filter.curves('g', [0, 40], [128, 128], [128, 128], [255, 215]);
3300
- this.filter.curves('b', [0, 40], [128, 128], [128, 128], [255, 215]);
3301
- return this.filter.stackBlur(5);
3302
- });
3303
- this.curves('r', [20, 0], [128, 158], [128, 128], [235, 255]);
3304
- this.curves('g', [20, 0], [128, 128], [128, 128], [235, 255]);
3305
- this.curves('b', [20, 0], [128, 108], [128, 128], [235, 255]);
3306
- return this.vignette("45%", 20);
3307
- });
3308
-
3309
- Caman.Filter.register("herMajesty", function() {
3310
- this.brightness(40);
3311
- this.colorize("#ea1c5d", 10);
3312
- this.curves('b', [0, 10], [128, 180], [190, 190], [255, 255]);
3313
- this.newLayer(function() {
3314
- this.setBlendingMode('overlay');
3315
- this.opacity(50);
3316
- this.copyParent();
3317
- this.filter.gamma(0.7);
3318
- return this.newLayer(function() {
3319
- this.setBlendingMode('normal');
3320
- this.opacity(60);
3321
- return this.fillColor('#ea1c5d');
3322
- });
3323
- });
3324
- this.newLayer(function() {
3325
- this.setBlendingMode('multiply');
3326
- this.opacity(60);
3327
- this.copyParent();
3328
- this.filter.saturation(50);
3329
- this.filter.hue(90);
3330
- return this.filter.contrast(10);
3331
- });
3332
- this.gamma(1.4);
3333
- this.vibrance(-30);
3334
- this.newLayer(function() {
3335
- this.opacity(10);
3336
- return this.fillColor('#e5f0ff');
3337
- });
3338
- return this;
3339
- });
3340
-
3341
- Caman.Filter.register("nostalgia", function() {
3342
- this.saturation(20);
3343
- this.gamma(1.4);
3344
- this.greyscale();
3345
- this.contrast(5);
3346
- this.sepia(100);
3347
- this.channels({
3348
- red: 8,
3349
- blue: 2,
3350
- green: 4
3351
- });
3352
- this.gamma(0.8);
3353
- this.contrast(5);
3354
- this.exposure(10);
3355
- this.newLayer(function() {
3356
- this.setBlendingMode('overlay');
3357
- this.copyParent();
3358
- this.opacity(55);
3359
- return this.filter.stackBlur(10);
3360
- });
3361
- return this.vignette("50%", 30);
3362
- });
3363
-
3364
- Caman.Filter.register("hemingway", function() {
3365
- this.greyscale();
3366
- this.contrast(10);
3367
- this.gamma(0.9);
3368
- this.newLayer(function() {
3369
- this.setBlendingMode("multiply");
3370
- this.opacity(40);
3371
- this.copyParent();
3372
- this.filter.exposure(15);
3373
- this.filter.contrast(15);
3374
- return this.filter.channels({
3375
- green: 10,
3376
- red: 5
3377
- });
3378
- });
3379
- this.sepia(30);
3380
- this.curves('rgb', [0, 10], [120, 90], [180, 200], [235, 255]);
3381
- this.channels({
3382
- red: 5,
3383
- green: -2
3384
- });
3385
- return this.exposure(15);
3386
- });
3387
-
3388
- Caman.Filter.register("concentrate", function() {
3389
- this.sharpen(40);
3390
- this.saturation(-50);
3391
- this.channels({
3392
- red: 3
3393
- });
3394
- this.newLayer(function() {
3395
- this.setBlendingMode("multiply");
3396
- this.opacity(80);
3397
- this.copyParent();
3398
- this.filter.sharpen(5);
3399
- this.filter.contrast(50);
3400
- this.filter.exposure(10);
3401
- return this.filter.channels({
3402
- blue: 5
3403
- });
3404
- });
3405
- return this.brightness(10);
3406
- });
3407
-
3408
- Caman.Plugin.register("rotate", function(degrees) {
3409
- var angle, canvas, ctx, height, to_radians, width, x, y;
3410
- angle = degrees % 360;
3411
- if (angle === 0) {
3412
- return this.dimensions = {
3413
- width: this.canvas.width,
3414
- height: this.canvas.height
3415
- };
3416
- }
3417
- to_radians = Math.PI / 180;
3418
- if (typeof exports !== "undefined" && exports !== null) {
3419
- canvas = new Canvas();
3420
- } else {
3421
- canvas = document.createElement('canvas');
3422
- Util.copyAttributes(this.canvas, canvas);
3423
- }
3424
- if (angle === 90 || angle === -270 || angle === 270 || angle === -90) {
3425
- width = this.canvas.height;
3426
- height = this.canvas.width;
3427
- x = width / 2;
3428
- y = height / 2;
3429
- } else if (angle === 180) {
3430
- width = this.canvas.width;
3431
- height = this.canvas.height;
3432
- x = width / 2;
3433
- y = height / 2;
3434
- } else {
3435
- width = Math.sqrt(Math.pow(this.originalWidth, 2) + Math.pow(this.originalHeight, 2));
3436
- height = width;
3437
- x = this.canvas.height / 2;
3438
- y = this.canvas.width / 2;
3439
- }
3440
- canvas.width = width;
3441
- canvas.height = height;
3442
- ctx = canvas.getContext('2d');
3443
- ctx.save();
3444
- ctx.translate(x, y);
3445
- ctx.rotate(angle * to_radians);
3446
- ctx.drawImage(this.canvas, -this.canvas.width / 2, -this.canvas.height / 2, this.canvas.width, this.canvas.height);
3447
- ctx.restore();
3448
- return this.replaceCanvas(canvas);
3449
- });
3450
-
3451
- Caman.Filter.register("rotate", function() {
3452
- return this.processPlugin("rotate", Array.prototype.slice.call(arguments, 0));
3453
- });
3454
-
3455
- /*
3456
- StackBlur - a fast almost Gaussian Blur For Canvas v0.31 modified for CamanJS
3457
-
3458
- Version: 0.31
3459
- Author: Mario Klingemann
3460
- Contact: mario@quasimondo.com
3461
- Website: http://www.quasimondo.com/StackBlurForCanvas
3462
- Twitter: @quasimondo
3463
- Modified By: Ryan LeFevre (@meltingice)
3464
-
3465
- In case you find this class useful - especially in commercial projects -
3466
- I am not totally unhappy for a small donation to my PayPal account
3467
- mario@quasimondo.de
3468
-
3469
- Or support me on flattr:
3470
- https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript
3471
-
3472
- Copyright (c) 2010 Mario Klingemann
3473
-
3474
- Permission is hereby granted, free of charge, to any person
3475
- obtaining a copy of this software and associated documentation
3476
- files (the "Software"), to deal in the Software without
3477
- restriction, including without limitation the rights to use,
3478
- copy, modify, merge, publish, distribute, sublicense, and/or sell
3479
- copies of the Software, and to permit persons to whom the
3480
- Software is furnished to do so, subject to the following
3481
- conditions:
3482
-
3483
- The above copyright notice and this permission notice shall be
3484
- included in all copies or substantial portions of the Software.
3485
-
3486
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
3487
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
3488
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
3489
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
3490
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
3491
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
3492
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
3493
- OTHER DEALINGS IN THE SOFTWARE.
3494
- */
3495
-
3496
-
3497
- (function() {
3498
- var BlurStack, mul_table, shg_table;
3499
- mul_table = [512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512, 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292, 273, 512, 482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271, 259, 496, 475, 456, 437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512, 497, 482, 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328, 320, 312, 305, 298, 291, 284, 278, 271, 265, 259, 507, 496, 485, 475, 465, 456, 446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347, 341, 335, 329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512, 505, 497, 489, 482, 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405, 399, 394, 389, 383, 378, 373, 368, 364, 359, 354, 350, 345, 341, 337, 332, 328, 324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271, 268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456, 451, 446, 442, 437, 433, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 388, 385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347, 344, 341, 338, 335, 332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292, 289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259];
3500
- shg_table = [9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24];
3501
- BlurStack = function() {
3502
- this.r = 0;
3503
- this.g = 0;
3504
- this.b = 0;
3505
- this.a = 0;
3506
- return this.next = null;
3507
- };
3508
- Caman.Plugin.register("stackBlur", function(radius) {
3509
- var b_in_sum, b_out_sum, b_sum, div, g_in_sum, g_out_sum, g_sum, height, heightMinus1, i, mul_sum, p, pb, pg, pixels, pr, r_in_sum, r_out_sum, r_sum, radiusPlus1, rbs, shg_sum, stack, stackEnd, stackIn, stackOut, stackStart, sumFactor, w4, width, widthMinus1, x, y, yi, yp, yw, _i, _j, _k, _l, _m, _n, _o, _p, _q;
3510
- if (isNaN(radius) || radius < 1) {
3511
- return;
3512
- }
3513
- radius |= 0;
3514
- pixels = this.pixelData;
3515
- width = this.dimensions.width;
3516
- height = this.dimensions.height;
3517
- div = radius + radius + 1;
3518
- w4 = width << 2;
3519
- widthMinus1 = width - 1;
3520
- heightMinus1 = height - 1;
3521
- radiusPlus1 = radius + 1;
3522
- sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;
3523
- stackStart = new BlurStack();
3524
- stack = stackStart;
3525
- for (i = _i = 1; 1 <= div ? _i < div : _i > div; i = 1 <= div ? ++_i : --_i) {
3526
- stack = stack.next = new BlurStack();
3527
- if (i === radiusPlus1) {
3528
- stackEnd = stack;
3529
- }
3530
- }
3531
- stack.next = stackStart;
3532
- stackIn = null;
3533
- stackOut = null;
3534
- yw = yi = 0;
3535
- mul_sum = mul_table[radius];
3536
- shg_sum = shg_table[radius];
3537
- for (y = _j = 0; 0 <= height ? _j < height : _j > height; y = 0 <= height ? ++_j : --_j) {
3538
- r_in_sum = g_in_sum = b_in_sum = r_sum = g_sum = b_sum = 0;
3539
- r_out_sum = radiusPlus1 * (pr = pixels[yi]);
3540
- g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);
3541
- b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);
3542
- r_sum += sumFactor * pr;
3543
- g_sum += sumFactor * pg;
3544
- b_sum += sumFactor * pb;
3545
- stack = stackStart;
3546
- for (i = _k = 0; 0 <= radiusPlus1 ? _k < radiusPlus1 : _k > radiusPlus1; i = 0 <= radiusPlus1 ? ++_k : --_k) {
3547
- stack.r = pr;
3548
- stack.g = pg;
3549
- stack.b = pb;
3550
- stack = stack.next;
3551
- }
3552
- for (i = _l = 1; 1 <= radiusPlus1 ? _l < radiusPlus1 : _l > radiusPlus1; i = 1 <= radiusPlus1 ? ++_l : --_l) {
3553
- p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);
3554
- r_sum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);
3555
- g_sum += (stack.g = (pg = pixels[p + 1])) * rbs;
3556
- b_sum += (stack.b = (pb = pixels[p + 2])) * rbs;
3557
- r_in_sum += pr;
3558
- g_in_sum += pg;
3559
- b_in_sum += pb;
3560
- stack = stack.next;
3561
- }
3562
- stackIn = stackStart;
3563
- stackOut = stackEnd;
3564
- for (x = _m = 0; 0 <= width ? _m < width : _m > width; x = 0 <= width ? ++_m : --_m) {
3565
- pixels[yi] = (r_sum * mul_sum) >> shg_sum;
3566
- pixels[yi + 1] = (g_sum * mul_sum) >> shg_sum;
3567
- pixels[yi + 2] = (b_sum * mul_sum) >> shg_sum;
3568
- r_sum -= r_out_sum;
3569
- g_sum -= g_out_sum;
3570
- b_sum -= b_out_sum;
3571
- r_out_sum -= stackIn.r;
3572
- g_out_sum -= stackIn.g;
3573
- b_out_sum -= stackIn.b;
3574
- p = (yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1)) << 2;
3575
- r_in_sum += (stackIn.r = pixels[p]);
3576
- g_in_sum += (stackIn.g = pixels[p + 1]);
3577
- b_in_sum += (stackIn.b = pixels[p + 2]);
3578
- r_sum += r_in_sum;
3579
- g_sum += g_in_sum;
3580
- b_sum += b_in_sum;
3581
- stackIn = stackIn.next;
3582
- r_out_sum += (pr = stackOut.r);
3583
- g_out_sum += (pg = stackOut.g);
3584
- b_out_sum += (pb = stackOut.b);
3585
- r_in_sum -= pr;
3586
- g_in_sum -= pg;
3587
- b_in_sum -= pb;
3588
- stackOut = stackOut.next;
3589
- yi += 4;
3590
- }
3591
- yw += width;
3592
- }
3593
- for (x = _n = 0; 0 <= width ? _n < width : _n > width; x = 0 <= width ? ++_n : --_n) {
3594
- g_in_sum = b_in_sum = r_in_sum = g_sum = b_sum = r_sum = 0;
3595
- yi = x << 2;
3596
- r_out_sum = radiusPlus1 * (pr = pixels[yi]);
3597
- g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);
3598
- b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);
3599
- r_sum += sumFactor * pr;
3600
- g_sum += sumFactor * pg;
3601
- b_sum += sumFactor * pb;
3602
- stack = stackStart;
3603
- for (i = _o = 0; 0 <= radiusPlus1 ? _o < radiusPlus1 : _o > radiusPlus1; i = 0 <= radiusPlus1 ? ++_o : --_o) {
3604
- stack.r = pr;
3605
- stack.g = pg;
3606
- stack.b = pb;
3607
- stack = stack.next;
3608
- }
3609
- yp = width;
3610
- for (i = _p = 1; 1 <= radius ? _p <= radius : _p >= radius; i = 1 <= radius ? ++_p : --_p) {
3611
- yi = (yp + x) << 2;
3612
- r_sum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);
3613
- g_sum += (stack.g = (pg = pixels[yi + 1])) * rbs;
3614
- b_sum += (stack.b = (pb = pixels[yi + 2])) * rbs;
3615
- r_in_sum += pr;
3616
- g_in_sum += pg;
3617
- b_in_sum += pb;
3618
- stack = stack.next;
3619
- if (i < heightMinus1) {
3620
- yp += width;
3621
- }
3622
- }
3623
- yi = x;
3624
- stackIn = stackStart;
3625
- stackOut = stackEnd;
3626
- for (y = _q = 0; 0 <= height ? _q < height : _q > height; y = 0 <= height ? ++_q : --_q) {
3627
- p = yi << 2;
3628
- pixels[p] = (r_sum * mul_sum) >> shg_sum;
3629
- pixels[p + 1] = (g_sum * mul_sum) >> shg_sum;
3630
- pixels[p + 2] = (b_sum * mul_sum) >> shg_sum;
3631
- r_sum -= r_out_sum;
3632
- g_sum -= g_out_sum;
3633
- b_sum -= b_out_sum;
3634
- r_out_sum -= stackIn.r;
3635
- g_out_sum -= stackIn.g;
3636
- b_out_sum -= stackIn.b;
3637
- p = (x + (((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width)) << 2;
3638
- r_sum += (r_in_sum += (stackIn.r = pixels[p]));
3639
- g_sum += (g_in_sum += (stackIn.g = pixels[p + 1]));
3640
- b_sum += (b_in_sum += (stackIn.b = pixels[p + 2]));
3641
- stackIn = stackIn.next;
3642
- r_out_sum += (pr = stackOut.r);
3643
- g_out_sum += (pg = stackOut.g);
3644
- b_out_sum += (pb = stackOut.b);
3645
- r_in_sum -= pr;
3646
- g_in_sum -= pg;
3647
- b_in_sum -= pb;
3648
- stackOut = stackOut.next;
3649
- yi += width;
3650
- }
3651
- }
3652
- return this;
3653
- });
3654
- return Caman.Filter.register("stackBlur", function(radius) {
3655
- return this.processPlugin("stackBlur", [radius]);
3656
- });
3657
- })();
3658
-
3659
- Caman.Filter.register("threshold", function(adjust) {
3660
- return this.process("threshold", function(rgba) {
3661
- var luminance;
3662
- luminance = (0.2126 * rgba.r) + (0.7152 * rgba.g) + (0.0722 * rgba.b);
3663
- if (luminance < adjust) {
3664
- rgba.r = 0;
3665
- rgba.g = 0;
3666
- rgba.b = 0;
3667
- } else {
3668
- rgba.r = 255;
3669
- rgba.g = 255;
3670
- rgba.b = 255;
3671
- }
3672
- return rgba;
3673
- });
3674
- });
3675
-
3676
- }).call(this);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/dist/caman.full.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"caman.full.js","sourceRoot":"","sources":["caman.full.coffee"],"names":[],"mappings":"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"}
 
includes/pickers/caman/dist/caman.full.min.js DELETED
@@ -1,251 +0,0 @@
1
-
2
- (function(){var $,Analyze,Blender,Calculate,Caman,CamanParser,Canvas,Convert,Event,Fiber,Filter,IO,Image,Layer,Log,Module,Pixel,Plugin,Renderer,Root,Store,Util,fs,http,moduleKeywords,slice,vignetteFilters,__indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i<l;i++){if(i in this&&this[i]===item)return i;}return-1;},__slice=[].slice,__hasProp={}.hasOwnProperty,__bind=function(fn,me){return function(){return fn.apply(me,arguments);};},__extends=function(child,parent){for(var key in parent){if(__hasProp.call(parent,key))child[key]=parent[key];}function ctor(){this.constructor=child;}ctor.prototype=parent.prototype;child.prototype=new ctor();child.__super__=parent.prototype;return child;};moduleKeywords=['extended','included'];Module=(function(){function Module(){}
3
- Module["extends"]=function(obj){var key,value,_ref;for(key in obj){value=obj[key];if(__indexOf.call(moduleKeywords,key)<0){this[key]=value;}}
4
- if((_ref=obj.extended)!=null){_ref.apply(this);}
5
- return this;};Module.includes=function(obj){var key,value,_ref;for(key in obj){value=obj[key];if(__indexOf.call(moduleKeywords,key)<0){this.prototype[key]=value;}}
6
- if((_ref=obj.included)!=null){_ref.apply(this);}
7
- return this;};Module.delegate=function(){var args,source,target,_i,_len,_results;args=1<=arguments.length?__slice.call(arguments,0):[];target=args.pop();_results=[];for(_i=0,_len=args.length;_i<_len;_i++){source=args[_i];_results.push(this.prototype[source]=target.prototype[source]);}
8
- return _results;};Module.aliasFunction=function(to,from){var _this=this;return this.prototype[to]=function(){var args;args=1<=arguments.length?__slice.call(arguments,0):[];return _this.prototype[from].apply(_this,args);};};Module.aliasProperty=function(to,from){return Object.defineProperty(this.prototype,to,{get:function(){return this[from];},set:function(val){return this[from]=val;}});};Module.included=function(func){return func.call(this,this.prototype);};return Module;})();slice=Array.prototype.slice;$=function(sel,root){if(root==null){root=document;}
9
- if(typeof sel==="object"||(typeof exports!=="undefined"&&exports!==null)){return sel;}
10
- return root.querySelector(sel);};Util=(function(){function Util(){}
11
- Util.uniqid=(function(){var id;id=0;return{get:function(){return id++;}};})();Util.extend=function(){var copy,dest,obj,prop,src,_i,_len;obj=arguments[0],src=2<=arguments.length?__slice.call(arguments,1):[];dest=obj;for(_i=0,_len=src.length;_i<_len;_i++){copy=src[_i];for(prop in copy){if(!__hasProp.call(copy,prop))continue;dest[prop]=copy[prop];}}
12
- return dest;};Util.clampRGB=function(val){if(val<0){return 0;}
13
- if(val>255){return 255;}
14
- return val;};Util.copyAttributes=function(from,to,opts){var attr,_i,_len,_ref,_ref1,_results;if(opts==null){opts={};}
15
- _ref=from.attributes;_results=[];for(_i=0,_len=_ref.length;_i<_len;_i++){attr=_ref[_i];if((opts.except!=null)&&(_ref1=attr.nodeName,__indexOf.call(opts.except,_ref1)>=0)){continue;}
16
- _results.push(to.setAttribute(attr.nodeName,attr.nodeValue));}
17
- return _results;};Util.dataArray=function(length){if(length==null){length=0;}
18
- if(Caman.NodeJS||(window.Uint8Array!=null)){return new Uint8Array(length);}
19
- return new Array(length);};return Util;})();if(typeof exports!=="undefined"&&exports!==null){Root=exports;Canvas=require('canvas');Image=Canvas.Image;Fiber=require('fibers');fs=require('fs');http=require('http');}else{Root=window;}
20
- Caman=(function(_super){__extends(Caman,_super);Caman.version={release:"4.1.2",date:"7/27/2013"};Caman.DEBUG=false;Caman.allowRevert=true;Caman.crossOrigin="anonymous";Caman.remoteProxy="";Caman.proxyParam="camanProxyUrl";Caman.NodeJS=typeof exports!=="undefined"&&exports!==null;Caman.autoload=!Caman.NodeJS;Caman.toString=function(){return"Version "+Caman.version.release+", Released "+Caman.version.date;};Caman.getAttrId=function(canvas){if(Caman.NodeJS){return true;}
21
- if(typeof canvas==="string"){canvas=$(canvas);}
22
- if(!((canvas!=null)&&(canvas.getAttribute!=null))){return null;}
23
- return canvas.getAttribute('data-caman-id');};function Caman(){this.nodeFileReady=__bind(this.nodeFileReady,this);var args,callback,id,_this=this;if(arguments.length===0){throw"Invalid arguments";}
24
- if(this instanceof Caman){this.finishInit=this.finishInit.bind(this);this.imageLoaded=this.imageLoaded.bind(this);args=arguments[0];if(!Caman.NodeJS){id=parseInt(Caman.getAttrId(args[0]),10);callback=typeof args[1]==="function"?args[1]:typeof args[2]==="function"?args[2]:function(){};if(!isNaN(id)&&Store.has(id)){return Store.execute(id,callback);}}
25
- this.id=Util.uniqid.get();this.initializedPixelData=this.originalPixelData=null;this.cropCoordinates={x:0,y:0};this.cropped=false;this.resized=false;this.pixelStack=[];this.layerStack=[];this.canvasQueue=[];this.currentLayer=null;this.scaled=false;this.analyze=new Analyze(this);this.renderer=new Renderer(this);this.domIsLoaded(function(){_this.parseArguments(args);return _this.setup();});return this;}else{return new Caman(arguments);}}
26
- Caman.prototype.domIsLoaded=function(cb){var listener,_this=this;if(Caman.NodeJS){return setTimeout(function(){return cb.call(_this);},0);}else{if(document.readyState==="complete"){Log.debug("DOM initialized");return setTimeout(function(){return cb.call(_this);},0);}else{listener=function(){if(document.readyState==="complete"){Log.debug("DOM initialized");return cb.call(_this);}};return document.addEventListener("readystatechange",listener,false);}}};Caman.prototype.parseArguments=function(args){var key,val,_ref,_results;if(args.length===0){throw"Invalid arguments given";}
27
- this.initObj=null;this.initType=null;this.imageUrl=null;this.callback=function(){};this.setInitObject(args[0]);if(args.length===1){return;}
28
- switch(typeof args[1]){case"string":this.imageUrl=args[1];break;case"function":this.callback=args[1];}
29
- if(args.length===2){return;}
30
- this.callback=args[2];if(args.length===4){_ref=args[4];_results=[];for(key in _ref){if(!__hasProp.call(_ref,key))continue;val=_ref[key];_results.push(this.options[key]=val);}
31
- return _results;}};Caman.prototype.setInitObject=function(obj){if(Caman.NodeJS){this.initObj=obj;this.initType='node';return;}
32
- if(typeof obj==="object"){this.initObj=obj;}else{this.initObj=$(obj);}
33
- if(this.initObj==null){throw"Could not find image or canvas for initialization.";}
34
- return this.initType=this.initObj.nodeName.toLowerCase();};Caman.prototype.setup=function(){switch(this.initType){case"node":return this.initNode();case"img":return this.initImage();case"canvas":return this.initCanvas();}};Caman.prototype.initNode=function(){Log.debug("Initializing for NodeJS");if(typeof this.initObj==="string"&&this.initObj.match(/^https?:\/\//)){return this.readFromHttp(this.initObj,this.nodeFileReady);}else if(typeof this.initObj==="string"){return fs.readFile(this.initObj,this.nodeFileReady);}else{return this.nodeFileReady(null,this.initObj);}};Caman.prototype.readFromHttp=function(url,callback){var req;Log.debug("Fetching image from "+url);req=http.get(url,function(res){var buf;buf='';res.setEncoding('binary');res.on('data',function(chunk){return buf+=chunk;});return res.on('end',function(){return callback(null,new Buffer(buf,'binary'));});});return req.on('error',callback);};Caman.prototype.nodeFileReady=function(err,data){if(err){throw err;}
35
- this.image=new Image();this.image.src=data;Log.debug("Image loaded. Width = "+(this.imageWidth())+", Height = "+(this.imageHeight()));this.canvas=new Canvas(this.imageWidth(),this.imageHeight());return this.finishInit();};Caman.prototype.initImage=function(){this.image=this.initObj;this.canvas=document.createElement('canvas');this.context=this.canvas.getContext('2d');Util.copyAttributes(this.image,this.canvas,{except:['src']});if(this.image.parentNode!=null){this.image.parentNode.replaceChild(this.canvas,this.image);}
36
- this.imageAdjustments();return this.waitForImageLoaded();};Caman.prototype.initCanvas=function(){this.canvas=this.initObj;this.context=this.canvas.getContext('2d');if(this.imageUrl!=null){this.image=document.createElement('img');this.image.src=this.imageUrl;this.imageAdjustments();return this.waitForImageLoaded();}else{return this.finishInit();}};Caman.prototype.imageAdjustments=function(){if(this.needsHiDPISwap()){Log.debug(this.image.src,"->",this.hiDPIReplacement());this.swapped=true;this.image.src=this.hiDPIReplacement();}
37
- if(IO.isRemote(this.image)){this.image.src=IO.proxyUrl(this.image.src);return Log.debug("Remote image detected, using URL = "+this.image.src);}};Caman.prototype.waitForImageLoaded=function(){if(this.isImageLoaded()){return this.imageLoaded();}else{return this.image.onload=this.imageLoaded;}};Caman.prototype.isImageLoaded=function(){if(!this.image.complete){return false;}
38
- if((this.image.naturalWidth!=null)&&this.image.naturalWidth===0){return false;}
39
- return true;};Caman.prototype.imageWidth=function(){return this.image.width||this.image.naturalWidth;};Caman.prototype.imageHeight=function(){return this.image.height||this.image.naturalHeight;};Caman.prototype.imageLoaded=function(){Log.debug("Image loaded. Width = "+(this.imageWidth())+", Height = "+(this.imageHeight()));if(this.swapped){this.canvas.width=this.imageWidth()/this.hiDPIRatio();this.canvas.height=this.imageHeight()/this.hiDPIRatio();}else{this.canvas.width=this.imageWidth();this.canvas.height=this.imageHeight();}
40
- return this.finishInit();};Caman.prototype.finishInit=function(){var i,pixel,_i,_len,_ref;if(this.context==null){this.context=this.canvas.getContext('2d');}
41
- this.originalWidth=this.preScaledWidth=this.width=this.canvas.width;this.originalHeight=this.preScaledHeight=this.height=this.canvas.height;this.hiDPIAdjustments();if(!this.hasId()){this.assignId();}
42
- if(this.image!=null){this.context.drawImage(this.image,0,0,this.imageWidth(),this.imageHeight(),0,0,this.preScaledWidth,this.preScaledHeight);}
43
- this.imageData=this.context.getImageData(0,0,this.canvas.width,this.canvas.height);this.pixelData=this.imageData.data;if(Caman.allowRevert){this.initializedPixelData=Util.dataArray(this.pixelData.length);this.originalPixelData=Util.dataArray(this.pixelData.length);_ref=this.pixelData;for(i=_i=0,_len=_ref.length;_i<_len;i=++_i){pixel=_ref[i];this.initializedPixelData[i]=pixel;this.originalPixelData[i]=pixel;}}
44
- this.dimensions={width:this.canvas.width,height:this.canvas.height};if(!Caman.NodeJS){Store.put(this.id,this);}
45
- this.callback.call(this,this);return this.callback=function(){};};Caman.prototype.reloadCanvasData=function(){this.imageData=this.context.getImageData(0,0,this.canvas.width,this.canvas.height);return this.pixelData=this.imageData.data;};Caman.prototype.resetOriginalPixelData=function(){var i,pixel,_i,_len,_ref,_results;if(!Caman.allowRevert){throw"Revert disabled";}
46
- this.originalPixelData=Util.dataArray(this.pixelData.length);_ref=this.pixelData;_results=[];for(i=_i=0,_len=_ref.length;_i<_len;i=++_i){pixel=_ref[i];_results.push(this.originalPixelData[i]=pixel);}
47
- return _results;};Caman.prototype.hasId=function(){return Caman.getAttrId(this.canvas)!=null;};Caman.prototype.assignId=function(){if(Caman.NodeJS||this.canvas.getAttribute('data-caman-id')){return;}
48
- return this.canvas.setAttribute('data-caman-id',this.id);};Caman.prototype.hiDPIDisabled=function(){return this.canvas.getAttribute('data-caman-hidpi-disabled')!==null;};Caman.prototype.hiDPIAdjustments=function(){var ratio;if(Caman.NodeJS||!this.needsHiDPISwap()){return;}
49
- ratio=this.hiDPIRatio();if(ratio!==1){Log.debug("HiDPI ratio = "+ratio);this.scaled=true;this.preScaledWidth=this.canvas.width;this.preScaledHeight=this.canvas.height;this.canvas.width=this.preScaledWidth*ratio;this.canvas.height=this.preScaledHeight*ratio;this.canvas.style.width=""+this.preScaledWidth+"px";this.canvas.style.height=""+this.preScaledHeight+"px";this.context.scale(ratio,ratio);this.width=this.originalWidth=this.canvas.width;return this.height=this.originalHeight=this.canvas.height;}};Caman.prototype.hiDPIRatio=function(){var backingStoreRatio,devicePixelRatio;devicePixelRatio=window.devicePixelRatio||1;backingStoreRatio=this.context.webkitBackingStorePixelRatio||this.context.mozBackingStorePixelRatio||this.context.msBackingStorePixelRatio||this.context.oBackingStorePixelRatio||this.context.backingStorePixelRatio||1;return devicePixelRatio/backingStoreRatio;};Caman.prototype.hiDPICapable=function(){return(window.devicePixelRatio!=null)&&window.devicePixelRatio!==1;};Caman.prototype.needsHiDPISwap=function(){if(this.hiDPIDisabled()||!this.hiDPICapable()){return false;}
50
- return this.hiDPIReplacement()!==null;};Caman.prototype.hiDPIReplacement=function(){if(this.image==null){return null;}
51
- return this.image.getAttribute('data-caman-hidpi');};Caman.prototype.replaceCanvas=function(newCanvas){var oldCanvas;oldCanvas=this.canvas;this.canvas=newCanvas;this.context=this.canvas.getContext('2d');if(!Caman.NodeJS){oldCanvas.parentNode.replaceChild(this.canvas,oldCanvas);}
52
- this.width=this.canvas.width;this.height=this.canvas.height;this.reloadCanvasData();return this.dimensions={width:this.canvas.width,height:this.canvas.height};};Caman.prototype.render=function(callback){var _this=this;if(callback==null){callback=function(){};}
53
- Event.trigger(this,"renderStart");return this.renderer.execute(function(){_this.context.putImageData(_this.imageData,0,0);return callback.call(_this);});};Caman.prototype.revert=function(updateContext){var i,pixel,_i,_len,_ref;if(updateContext==null){updateContext=true;}
54
- if(!Caman.allowRevert){throw"Revert disabled";}
55
- _ref=this.originalVisiblePixels();for(i=_i=0,_len=_ref.length;_i<_len;i=++_i){pixel=_ref[i];this.pixelData[i]=pixel;}
56
- if(updateContext){return this.context.putImageData(this.imageData,0,0);}};Caman.prototype.reset=function(){var canvas,ctx,i,imageData,pixel,pixelData,_i,_len,_ref;canvas=document.createElement('canvas');Util.copyAttributes(this.canvas,canvas);canvas.width=this.originalWidth;canvas.height=this.originalHeight;ctx=canvas.getContext('2d');imageData=ctx.getImageData(0,0,canvas.width,canvas.height);pixelData=imageData.data;_ref=this.initializedPixelData;for(i=_i=0,_len=_ref.length;_i<_len;i=++_i){pixel=_ref[i];pixelData[i]=pixel;}
57
- ctx.putImageData(imageData,0,0);this.cropCoordinates={x:0,y:0};this.resized=false;return this.replaceCanvas(canvas);};Caman.prototype.originalVisiblePixels=function(){var canvas,coord,ctx,endX,endY,i,imageData,pixel,pixelData,pixels,scaledCanvas,startX,startY,width,_i,_j,_len,_ref,_ref1,_ref2,_ref3;if(!Caman.allowRevert){throw"Revert disabled";}
58
- pixels=[];startX=this.cropCoordinates.x;endX=startX+this.width;startY=this.cropCoordinates.y;endY=startY+this.height;if(this.resized){canvas=document.createElement('canvas');canvas.width=this.originalWidth;canvas.height=this.originalHeight;ctx=canvas.getContext('2d');imageData=ctx.getImageData(0,0,canvas.width,canvas.height);pixelData=imageData.data;_ref=this.originalPixelData;for(i=_i=0,_len=_ref.length;_i<_len;i=++_i){pixel=_ref[i];pixelData[i]=pixel;}
59
- ctx.putImageData(imageData,0,0);scaledCanvas=document.createElement('canvas');scaledCanvas.width=this.width;scaledCanvas.height=this.height;ctx=scaledCanvas.getContext('2d');ctx.drawImage(canvas,0,0,this.originalWidth,this.originalHeight,0,0,this.width,this.height);pixelData=ctx.getImageData(0,0,this.width,this.height).data;width=this.width;}else{pixelData=this.originalPixelData;width=this.originalWidth;}
60
- for(i=_j=0,_ref1=pixelData.length;_j<_ref1;i=_j+=4){coord=Pixel.locationToCoordinates(i,width);if(((startX<=(_ref2=coord.x)&&_ref2<endX))&&((startY<=(_ref3=coord.y)&&_ref3<endY))){pixels.push(pixelData[i],pixelData[i+1],pixelData[i+2],pixelData[i+3]);}}
61
- return pixels;};Caman.prototype.process=function(name,processFn){this.renderer.add({type:Filter.Type.Single,name:name,processFn:processFn});return this;};Caman.prototype.processKernel=function(name,adjust,divisor,bias){var i,_i,_ref;if(divisor==null){divisor=null;}
62
- if(bias==null){bias=0;}
63
- if(divisor==null){divisor=0;for(i=_i=0,_ref=adjust.length;0<=_ref?_i<_ref:_i>_ref;i=0<=_ref?++_i:--_i){divisor+=adjust[i];}}
64
- this.renderer.add({type:Filter.Type.Kernel,name:name,adjust:adjust,divisor:divisor,bias:bias});return this;};Caman.prototype.processPlugin=function(plugin,args){this.renderer.add({type:Filter.Type.Plugin,plugin:plugin,args:args});return this;};Caman.prototype.newLayer=function(callback){var layer;layer=new Layer(this);this.canvasQueue.push(layer);this.renderer.add({type:Filter.Type.LayerDequeue});callback.call(layer);this.renderer.add({type:Filter.Type.LayerFinished});return this;};Caman.prototype.executeLayer=function(layer){return this.pushContext(layer);};Caman.prototype.pushContext=function(layer){this.layerStack.push(this.currentLayer);this.pixelStack.push(this.pixelData);this.currentLayer=layer;return this.pixelData=layer.pixelData;};Caman.prototype.popContext=function(){this.pixelData=this.pixelStack.pop();return this.currentLayer=this.layerStack.pop();};Caman.prototype.applyCurrentLayer=function(){return this.currentLayer.applyToParent();};return Caman;})(Module);Root.Caman=Caman;Caman.Analyze=(function(){function Analyze(c){this.c=c;}
65
- Analyze.prototype.calculateLevels=function(){var i,levels,numPixels,_i,_j,_k,_ref;levels={r:{},g:{},b:{}};for(i=_i=0;_i<=255;i=++_i){levels.r[i]=0;levels.g[i]=0;levels.b[i]=0;}
66
- for(i=_j=0,_ref=this.c.pixelData.length;_j<_ref;i=_j+=4){levels.r[this.c.pixelData[i]]++;levels.g[this.c.pixelData[i+1]]++;levels.b[this.c.pixelData[i+2]]++;}
67
- numPixels=this.c.pixelData.length/4;for(i=_k=0;_k<=255;i=++_k){levels.r[i]/=numPixels;levels.g[i]/=numPixels;levels.b[i]/=numPixels;}
68
- return levels;};return Analyze;})();Analyze=Caman.Analyze;Caman.DOMUpdated=function(){var img,imgs,parser,_i,_len,_results;imgs=document.querySelectorAll("img[data-caman]");if(!(imgs.length>0)){return;}
69
- _results=[];for(_i=0,_len=imgs.length;_i<_len;_i++){img=imgs[_i];_results.push(parser=new CamanParser(img,function(){this.parse();return this.execute();}));}
70
- return _results;};if(Caman.autoload){(function(){if(document.readyState==="complete"){return Caman.DOMUpdated();}else{return document.addEventListener("DOMContentLoaded",Caman.DOMUpdated,false);}})();}
71
- CamanParser=(function(){var INST_REGEX;INST_REGEX="(\\w+)\\((.*?)\\)";function CamanParser(ele,ready){this.dataStr=ele.getAttribute('data-caman');this.caman=Caman(ele,ready.bind(this));}
72
- CamanParser.prototype.parse=function(){var args,e,filter,func,inst,instFunc,m,r,unparsedInstructions,_i,_len,_ref,_results;this.ele=this.caman.canvas;r=new RegExp(INST_REGEX,'g');unparsedInstructions=this.dataStr.match(r);if(!(unparsedInstructions.length>0)){return;}
73
- r=new RegExp(INST_REGEX);_results=[];for(_i=0,_len=unparsedInstructions.length;_i<_len;_i++){inst=unparsedInstructions[_i];_ref=inst.match(r),m=_ref[0],filter=_ref[1],args=_ref[2];instFunc=new Function("return function() { this."+filter+"("+args+"); };");try{func=instFunc();_results.push(func.call(this.caman));}catch(_error){e=_error;_results.push(Log.debug(e));}}
74
- return _results;};CamanParser.prototype.execute=function(){var ele;ele=this.ele;return this.caman.render(function(){return ele.parentNode.replaceChild(this.toImage(),ele);});};return CamanParser;})();Caman.Blender=(function(){function Blender(){}
75
- Blender.blenders={};Blender.register=function(name,func){return this.blenders[name]=func;};Blender.execute=function(name,rgbaLayer,rgbaParent){return this.blenders[name](rgbaLayer,rgbaParent);};return Blender;})();Blender=Caman.Blender;Caman.Calculate=(function(){function Calculate(){}
76
- Calculate.distance=function(x1,y1,x2,y2){return Math.sqrt(Math.pow(x2-x1,2)+Math.pow(y2-y1,2));};Calculate.randomRange=function(min,max,getFloat){var rand;if(getFloat==null){getFloat=false;}
77
- rand=min+(Math.random()*(max-min));if(getFloat){return rand.toFixed(getFloat);}else{return Math.round(rand);}};Calculate.luminance=function(rgba){return(0.299*rgba.r)+(0.587*rgba.g)+(0.114*rgba.b);};Calculate.bezier=function(start,ctrl1,ctrl2,end,lowBound,highBound){var bezier,clamp,controlPoints,endX,i,j,lerp,next,prev,t,_i,_j,_ref;if(lowBound==null){lowBound=0;}
78
- if(highBound==null){highBound=255;}
79
- if(start[0]instanceof Array){controlPoints=start;lowBound=ctrl1;highBound=ctrl2;}else{controlPoints=[start,ctrl1,ctrl2,end];}
80
- if(controlPoints.length<2){throw"Invalid number of arguments to bezier";}
81
- bezier={};lerp=function(a,b,t){return a*(1-t)+b*t;};clamp=function(a,min,max){return Math.min(Math.max(a,min),max);};for(i=_i=0;_i<1000;i=++_i){t=i/1000;prev=controlPoints;while(prev.length>1){next=[];for(j=_j=0,_ref=prev.length-2;0<=_ref?_j<=_ref:_j>=_ref;j=0<=_ref?++_j:--_j){next.push([lerp(prev[j][0],prev[j+1][0],t),lerp(prev[j][1],prev[j+1][1],t)]);}
82
- prev=next;}
83
- bezier[Math.round(prev[0][0])]=Math.round(clamp(prev[0][1],lowBound,highBound));}
84
- endX=controlPoints[controlPoints.length-1][0];bezier=Caman.Calculate.missingValues(bezier,endX);if(bezier[endX]==null){bezier[endX]=bezier[endX-1];}
85
- return bezier;};Calculate.hermite=function(controlPoints,lowBound,highBound){var add,clamp,count,endX,fac0,fac1,fac2,fac3,i,j,lerp,m0,m1,mul,p,p0,p1,pointsPerSegment,pointsPerStep,pos,ret,sub,t,_i,_j,_ref,_this=this;if(controlPoints.length<2){throw"Invalid number of arguments to hermite";}
86
- ret={};lerp=function(a,b,t){return a*(1-t)+b*t;};add=function(a,b,c,d){return[a[0]+b[0]+c[0]+d[0],a[1]+b[1]+c[1]+d[1]];};mul=function(a,b){return[a[0]*b[0],a[1]*b[1]];};sub=function(a,b){return[a[0]-b[0],a[1]-b[1]];};clamp=function(a,min,max){return Math.min(Math.max(a,min),max);};count=0;for(i=_i=0,_ref=controlPoints.length-2;0<=_ref?_i<=_ref:_i>=_ref;i=0<=_ref?++_i:--_i){p0=controlPoints[i];p1=controlPoints[i+1];pointsPerSegment=p1[0]-p0[0];pointsPerStep=1/pointsPerSegment;if(i===controlPoints.length-2){pointsPerStep=1/(pointsPerSegment-1);}
87
- p=i>0?controlPoints[i-1]:p0;m0=mul(sub(p1,p),[0.5,0.5]);p=i<controlPoints.length-2?controlPoints[i+2]:p1;m1=mul(sub(p,p0),[0.5,0.5]);for(j=_j=0;0<=pointsPerSegment?_j<=pointsPerSegment:_j>=pointsPerSegment;j=0<=pointsPerSegment?++_j:--_j){t=j*pointsPerStep;fac0=2.0*t*t*t-3.0*t*t+1.0;fac1=t*t*t-2.0*t*t+t;fac2=-2.0*t*t*t+3.0*t*t;fac3=t*t*t-t*t;pos=add(mul(p0,[fac0,fac0]),mul(m0,[fac1,fac1]),mul(p1,[fac2,fac2]),mul(m1,[fac3,fac3]));ret[Math.round(pos[0])]=Math.round(clamp(pos[1],lowBound,highBound));count+=1;}}
88
- endX=controlPoints[controlPoints.length-1][0];ret=Caman.Calculate.missingValues(ret,endX);return ret;};Calculate.missingValues=function(values,endX){var i,j,leftCoord,ret,rightCoord,_i,_j;if(Object.keys(values).length<endX+1){ret={};for(i=_i=0;0<=endX?_i<=endX:_i>=endX;i=0<=endX?++_i:--_i){if(values[i]!=null){ret[i]=values[i];}else{leftCoord=[i-1,ret[i-1]];for(j=_j=i;i<=endX?_j<=endX:_j>=endX;j=i<=endX?++_j:--_j){if(values[j]!=null){rightCoord=[j,values[j]];break;}}
89
- ret[i]=leftCoord[1]+((rightCoord[1]-leftCoord[1])/(rightCoord[0]-leftCoord[0]))*(i-leftCoord[0]);}}
90
- return ret;}
91
- return values;};return Calculate;})();Calculate=Caman.Calculate;Caman.Convert=(function(){function Convert(){}
92
- Convert.hexToRGB=function(hex){var b,g,r;if(hex.charAt(0)==="#"){hex=hex.substr(1);}
93
- r=parseInt(hex.substr(0,2),16);g=parseInt(hex.substr(2,2),16);b=parseInt(hex.substr(4,2),16);return{r:r,g:g,b:b};};Convert.rgbToHSL=function(r,g,b){var d,h,l,max,min,s;if(typeof r==="object"){g=r.g;b=r.b;r=r.r;}
94
- r/=255;g/=255;b/=255;max=Math.max(r,g,b);min=Math.min(r,g,b);l=(max+min)/2;if(max===min){h=s=0;}else{d=max-min;s=l>0.5?d/(2-max-min):d/(max+min);h=(function(){switch(max){case r:return(g-b)/d+(g<b?6:0);case g:return(b-r)/d+2;case b:return(r-g)/d+4;}})();h/=6;}
95
- return{h:h,s:s,l:l};};Convert.hslToRGB=function(h,s,l){var b,g,p,q,r;if(typeof h==="object"){s=h.s;l=h.l;h=h.h;}
96
- if(s===0){r=g=b=l;}else{q=l<0.5?l*(1+s):l+s-l*s;p=2*l-q;r=this.hueToRGB(p,q,h+1/3);g=this.hueToRGB(p,q,h);b=this.hueToRGB(p,q,h-1/3);}
97
- return{r:r*255,g:g*255,b:b*255};};Convert.hueToRGB=function(p,q,t){if(t<0){t+=1;}
98
- if(t>1){t-=1;}
99
- if(t<1/6){return p+(q-p)*6*t;}
100
- if(t<1/2){return q;}
101
- if(t<2/3){return p+(q-p)*(2/3-t)*6;}
102
- return p;};Convert.rgbToHSV=function(r,g,b){var d,h,max,min,s,v;r/=255;g/=255;b/=255;max=Math.max(r,g,b);min=Math.min(r,g,b);v=max;d=max-min;s=max===0?0:d/max;if(max===min){h=0;}else{h=(function(){switch(max){case r:return(g-b)/d+(g<b?6:0);case g:return(b-r)/d+2;case b:return(r-g)/d+4;}})();h/=6;}
103
- return{h:h,s:s,v:v};};Convert.hsvToRGB=function(h,s,v){var b,f,g,i,p,q,r,t;i=Math.floor(h*6);f=h*6-i;p=v*(1-s);q=v*(1-f*s);t=v*(1-(1-f)*s);switch(i%6){case 0:r=v;g=t;b=p;break;case 1:r=q;g=v;b=p;break;case 2:r=p;g=v;b=t;break;case 3:r=p;g=q;b=v;break;case 4:r=t;g=p;b=v;break;case 5:r=v;g=p;b=q;}
104
- return{r:Math.floor(r*255),g:Math.floor(g*255),b:Math.floor(b*255)};};Convert.rgbToXYZ=function(r,g,b){var x,y,z;r/=255;g/=255;b/=255;if(r>0.04045){r=Math.pow((r+0.055)/1.055,2.4);}else{r/=12.92;}
105
- if(g>0.04045){g=Math.pow((g+0.055)/1.055,2.4);}else{g/=12.92;}
106
- if(b>0.04045){b=Math.pow((b+0.055)/1.055,2.4);}else{b/=12.92;}
107
- x=r*0.4124+g*0.3576+b*0.1805;y=r*0.2126+g*0.7152+b*0.0722;z=r*0.0193+g*0.1192+b*0.9505;return{x:x*100,y:y*100,z:z*100};};Convert.xyzToRGB=function(x,y,z){var b,g,r;x/=100;y/=100;z/=100;r=(3.2406*x)+(-1.5372*y)+(-0.4986*z);g=(-0.9689*x)+(1.8758*y)+(0.0415*z);b=(0.0557*x)+(-0.2040*y)+(1.0570*z);if(r>0.0031308){r=(1.055*Math.pow(r,0.4166666667))-0.055;}else{r*=12.92;}
108
- if(g>0.0031308){g=(1.055*Math.pow(g,0.4166666667))-0.055;}else{g*=12.92;}
109
- if(b>0.0031308){b=(1.055*Math.pow(b,0.4166666667))-0.055;}else{b*=12.92;}
110
- return{r:r*255,g:g*255,b:b*255};};Convert.xyzToLab=function(x,y,z){var a,b,l,whiteX,whiteY,whiteZ;if(typeof x==="object"){y=x.y;z=x.z;x=x.x;}
111
- whiteX=95.047;whiteY=100.0;whiteZ=108.883;x/=whiteX;y/=whiteY;z/=whiteZ;if(x>0.008856451679){x=Math.pow(x,0.3333333333);}else{x=(7.787037037*x)+0.1379310345;}
112
- if(y>0.008856451679){y=Math.pow(y,0.3333333333);}else{y=(7.787037037*y)+0.1379310345;}
113
- if(z>0.008856451679){z=Math.pow(z,0.3333333333);}else{z=(7.787037037*z)+0.1379310345;}
114
- l=116*y-16;a=500*(x-y);b=200*(y-z);return{l:l,a:a,b:b};};Convert.labToXYZ=function(l,a,b){var x,y,z;if(typeof l==="object"){a=l.a;b=l.b;l=l.l;}
115
- y=(l+16)/116;x=y+(a/500);z=y-(b/200);if(x>0.2068965517){x=x*x*x;}else{x=0.1284185493*(x-0.1379310345);}
116
- if(y>0.2068965517){y=y*y*y;}else{y=0.1284185493*(y-0.1379310345);}
117
- if(z>0.2068965517){z=z*z*z;}else{z=0.1284185493*(z-0.1379310345);}
118
- return{x:x*95.047,y:y*100.0,z:z*108.883};};Convert.rgbToLab=function(r,g,b){var xyz;if(typeof r==="object"){g=r.g;b=r.b;r=r.r;}
119
- xyz=this.rgbToXYZ(r,g,b);return this.xyzToLab(xyz);};Convert.labToRGB=function(l,a,b){};return Convert;})();Convert=Caman.Convert;Caman.Event=(function(){function Event(){}
120
- Event.events={};Event.types=["processStart","processComplete","renderStart","renderFinished","blockStarted","blockFinished"];Event.trigger=function(target,type,data){var event,_i,_len,_ref,_results;if(data==null){data=null;}
121
- if(this.events[type]&&this.events[type].length){_ref=this.events[type];_results=[];for(_i=0,_len=_ref.length;_i<_len;_i++){event=_ref[_i];if(event.target===null||target.id===event.target.id){_results.push(event.fn.call(target,data));}else{_results.push(void 0);}}
122
- return _results;}};Event.listen=function(target,type,fn){var _fn,_type;if(typeof target==="string"){_type=target;_fn=type;target=null;type=_type;fn=_fn;}
123
- if(__indexOf.call(this.types,type)<0){return false;}
124
- if(!this.events[type]){this.events[type]=[];}
125
- this.events[type].push({target:target,fn:fn});return true;};return Event;})();Event=Caman.Event;Caman.Filter=(function(){function Filter(){}
126
- Filter.Type={Single:1,Kernel:2,LayerDequeue:3,LayerFinished:4,LoadOverlay:5,Plugin:6};Filter.register=function(name,filterFunc){return Caman.prototype[name]=filterFunc;};return Filter;})();Filter=Caman.Filter;Caman.IO=(function(){function IO(){}
127
- IO.domainRegex=/(?:(?:http|https):\/\/)((?:\w+)\.(?:(?:\w|\.)+))/;IO.isRemote=function(img){if(img==null){return false;}
128
- if(this.corsEnabled(img)){return false;}
129
- return this.isURLRemote(img.src);};IO.corsEnabled=function(img){var _ref;return(img.crossOrigin!=null)&&((_ref=img.crossOrigin.toLowerCase())==='anonymous'||_ref==='use-credentials');};IO.isURLRemote=function(url){var matches;matches=url.match(this.domainRegex);if(matches){return matches[1]!==document.domain;}else{return false;}};IO.remoteCheck=function(src){if(this.isURLRemote(src)){if(!Caman.remoteProxy.length){Log.info("Attempting to load a remote image without a configured proxy. URL: "+src);}else{if(Caman.isURLRemote(Caman.remoteProxy)){Log.info("Cannot use a remote proxy for loading images.");return;}
130
- return this.proxyUrl(src);}}};IO.proxyUrl=function(src){return""+Caman.remoteProxy+"?"+Caman.proxyParam+"="+(encodeURIComponent(src));};IO.useProxy=function(lang){var langToExt;langToExt={ruby:'rb',python:'py',perl:'pl',javascript:'js'};lang=lang.toLowerCase();if(langToExt[lang]!=null){lang=langToExt[lang];}
131
- return"proxies/caman_proxy."+lang;};return IO;})();Caman.prototype.save=function(){if(typeof exports!=="undefined"&&exports!==null){return this.nodeSave.apply(this,arguments);}else{return this.browserSave.apply(this,arguments);}};Caman.prototype.browserSave=function(type){var image;if(type==null){type="png";}
132
- type=type.toLowerCase();image=this.toBase64(type).replace("image/"+type,"image/octet-stream");return document.location.href=image;};Caman.prototype.nodeSave=function(file,overwrite,callback){var e,stats;if(overwrite==null){overwrite=true;}
133
- if(callback==null){callback=null;}
134
- try{stats=fs.statSync(file);if(stats.isFile()&&!overwrite){return false;}}catch(_error){e=_error;Log.debug("Creating output file "+file);}
135
- return fs.writeFile(file,this.canvas.toBuffer(),function(err){Log.debug("Finished writing to "+file);if(callback){return callback.call(this,err);}});};Caman.prototype.toImage=function(type){var img;img=new Image();img.src=this.toBase64(type);img.width=this.dimensions.width;img.height=this.dimensions.height;if(window.devicePixelRatio){img.width/=window.devicePixelRatio;img.height/=window.devicePixelRatio;}
136
- return img;};Caman.prototype.toBase64=function(type){if(type==null){type="png";}
137
- type=type.toLowerCase();return this.canvas.toDataURL("image/"+type);};IO=Caman.IO;Caman.Layer=(function(){function Layer(c){this.c=c;this.filter=this.c;this.options={blendingMode:'normal',opacity:1.0};this.layerID=Util.uniqid.get();this.canvas=typeof exports!=="undefined"&&exports!==null?new Canvas():document.createElement('canvas');this.canvas.width=this.c.dimensions.width;this.canvas.height=this.c.dimensions.height;this.context=this.canvas.getContext('2d');this.context.createImageData(this.canvas.width,this.canvas.height);this.imageData=this.context.getImageData(0,0,this.canvas.width,this.canvas.height);this.pixelData=this.imageData.data;}
138
- Layer.prototype.newLayer=function(cb){return this.c.newLayer.call(this.c,cb);};Layer.prototype.setBlendingMode=function(mode){this.options.blendingMode=mode;return this;};Layer.prototype.opacity=function(opacity){this.options.opacity=opacity/100;return this;};Layer.prototype.copyParent=function(){var i,parentData,_i,_ref;parentData=this.c.pixelData;for(i=_i=0,_ref=this.c.pixelData.length;_i<_ref;i=_i+=4){this.pixelData[i]=parentData[i];this.pixelData[i+1]=parentData[i+1];this.pixelData[i+2]=parentData[i+2];this.pixelData[i+3]=parentData[i+3];}
139
- return this;};Layer.prototype.fillColor=function(){return this.c.fillColor.apply(this.c,arguments);};Layer.prototype.overlayImage=function(image){if(typeof image==="object"){image=image.src;}else if(typeof image==="string"&&image[0]==="#"){image=$(image).src;}
140
- if(!image){return this;}
141
- this.c.renderer.renderQueue.push({type:Filter.Type.LoadOverlay,src:image,layer:this});return this;};Layer.prototype.applyToParent=function(){var i,layerData,parentData,result,rgbaLayer,rgbaParent,_i,_ref,_results;parentData=this.c.pixelStack[this.c.pixelStack.length-1];layerData=this.c.pixelData;_results=[];for(i=_i=0,_ref=layerData.length;_i<_ref;i=_i+=4){rgbaParent={r:parentData[i],g:parentData[i+1],b:parentData[i+2],a:parentData[i+3]};rgbaLayer={r:layerData[i],g:layerData[i+1],b:layerData[i+2],a:layerData[i+3]};result=Blender.execute(this.options.blendingMode,rgbaLayer,rgbaParent);result.r=Util.clampRGB(result.r);result.g=Util.clampRGB(result.g);result.b=Util.clampRGB(result.b);if(result.a==null){result.a=rgbaLayer.a;}
142
- parentData[i]=rgbaParent.r-((rgbaParent.r-result.r)*(this.options.opacity*(result.a/255)));parentData[i+1]=rgbaParent.g-((rgbaParent.g-result.g)*(this.options.opacity*(result.a/255)));_results.push(parentData[i+2]=rgbaParent.b-((rgbaParent.b-result.b)*(this.options.opacity*(result.a/255))));}
143
- return _results;};return Layer;})();Layer=Caman.Layer;Caman.Logger=(function(){function Logger(){var name,_i,_len,_ref;_ref=['log','info','warn','error'];for(_i=0,_len=_ref.length;_i<_len;_i++){name=_ref[_i];this[name]=(function(name){return function(){var args,e;args=1<=arguments.length?__slice.call(arguments,0):[];if(!Caman.DEBUG){return;}
144
- try{return console[name].apply(console,args);}catch(_error){e=_error;return console[name](args);}};})(name);}
145
- this.debug=this.log;}
146
- return Logger;})();Log=new Caman.Logger();Caman.Pixel=(function(){Pixel.coordinatesToLocation=function(x,y,width){return(y*width+x)*4;};Pixel.locationToCoordinates=function(loc,width){var x,y;y=Math.floor(loc/(width*4));x=(loc%(width*4))/4;return{x:x,y:y};};function Pixel(r,g,b,a,c){this.r=r!=null?r:0;this.g=g!=null?g:0;this.b=b!=null?b:0;this.a=a!=null?a:255;this.c=c!=null?c:null;this.loc=0;}
147
- Pixel.prototype.setContext=function(c){return this.c=c;};Pixel.prototype.locationXY=function(){var x,y;if(this.c==null){throw"Requires a CamanJS context";}
148
- y=this.c.dimensions.height-Math.floor(this.loc/(this.c.dimensions.width*4));x=(this.loc%(this.c.dimensions.width*4))/4;return{x:x,y:y};};Pixel.prototype.pixelAtLocation=function(loc){if(this.c==null){throw"Requires a CamanJS context";}
149
- return new Pixel(this.c.pixelData[loc],this.c.pixelData[loc+1],this.c.pixelData[loc+2],this.c.pixelData[loc+3],this.c);};Pixel.prototype.getPixelRelative=function(horiz,vert){var newLoc;if(this.c==null){throw"Requires a CamanJS context";}
150
- newLoc=this.loc+(this.c.dimensions.width*4*(vert*-1))+(4*horiz);if(newLoc>this.c.pixelData.length||newLoc<0){return new Pixel(0,0,0,255,this.c);}
151
- return this.pixelAtLocation(newLoc);};Pixel.prototype.putPixelRelative=function(horiz,vert,rgba){var nowLoc;if(this.c==null){throw"Requires a CamanJS context";}
152
- nowLoc=this.loc+(this.c.dimensions.width*4*(vert*-1))+(4*horiz);if(newLoc>this.c.pixelData.length||newLoc<0){return;}
153
- this.c.pixelData[newLoc]=rgba.r;this.c.pixelData[newLoc+1]=rgba.g;this.c.pixelData[newLoc+2]=rgba.b;this.c.pixelData[newLoc+3]=rgba.a;return true;};Pixel.prototype.getPixel=function(x,y){var loc;if(this.c==null){throw"Requires a CamanJS context";}
154
- loc=this.coordinatesToLocation(x,y,this.width);return this.pixelAtLocation(loc);};Pixel.prototype.putPixel=function(x,y,rgba){var loc;if(this.c==null){throw"Requires a CamanJS context";}
155
- loc=this.coordinatesToLocation(x,y,this.width);this.c.pixelData[loc]=rgba.r;this.c.pixelData[loc+1]=rgba.g;this.c.pixelData[loc+2]=rgba.b;return this.c.pixelData[loc+3]=rgba.a;};Pixel.prototype.toString=function(){return this.toKey();};Pixel.prototype.toHex=function(includeAlpha){var hex;if(includeAlpha==null){includeAlpha=false;}
156
- hex='#'+this.r.toString(16)+this.g.toString(16)+this.b.toString(16);if(includeAlpha){return hex+this.a.toString(16);}else{return hex;}};return Pixel;})();Pixel=Caman.Pixel;Caman.Plugin=(function(){function Plugin(){}
157
- Plugin.plugins={};Plugin.register=function(name,plugin){return this.plugins[name]=plugin;};Plugin.execute=function(context,name,args){return this.plugins[name].apply(context,args);};return Plugin;})();Plugin=Caman.Plugin;Caman.Renderer=(function(){Renderer.Blocks=Caman.NodeJS?require('os').cpus().length:4;function Renderer(c){this.c=c;this.processNext=__bind(this.processNext,this);this.renderQueue=[];this.modPixelData=null;}
158
- Renderer.prototype.add=function(job){if(job==null){return;}
159
- return this.renderQueue.push(job);};Renderer.prototype.processNext=function(){var layer;if(this.renderQueue.length===0){Event.trigger(this,"renderFinished");if(this.finishedFn!=null){this.finishedFn.call(this.c);}
160
- return this;}
161
- this.currentJob=this.renderQueue.shift();switch(this.currentJob.type){case Filter.Type.LayerDequeue:layer=this.c.canvasQueue.shift();this.c.executeLayer(layer);return this.processNext();case Filter.Type.LayerFinished:this.c.applyCurrentLayer();this.c.popContext();return this.processNext();case Filter.Type.LoadOverlay:return this.loadOverlay(this.currentJob.layer,this.currentJob.src);case Filter.Type.Plugin:return this.executePlugin();default:return this.executeFilter();}};Renderer.prototype.execute=function(callback){this.finishedFn=callback;this.modPixelData=Util.dataArray(this.c.pixelData.length);return this.processNext();};Renderer.prototype.eachBlock=function(fn){var blockN,blockPixelLength,bnum,end,f,i,lastBlockN,n,start,_i,_ref,_results,_this=this;this.blocksDone=0;n=this.c.pixelData.length;blockPixelLength=Math.floor((n/4)/Renderer.Blocks);blockN=blockPixelLength*4;lastBlockN=blockN+((n/4)%Renderer.Blocks)*4;_results=[];for(i=_i=0,_ref=Renderer.Blocks;0<=_ref?_i<_ref:_i>_ref;i=0<=_ref?++_i:--_i){start=i*blockN;end=start+(i===Renderer.Blocks-1?lastBlockN:blockN);if(Caman.NodeJS){f=Fiber(function(){return fn.call(_this,i,start,end);});bnum=f.run();_results.push(this.blockFinished(bnum));}else{_results.push(setTimeout((function(i,start,end){return function(){return fn.call(_this,i,start,end);};})(i,start,end),0));}}
162
- return _results;};Renderer.prototype.executeFilter=function(){Event.trigger(this.c,"processStart",this.currentJob);if(this.currentJob.type===Filter.Type.Single){return this.eachBlock(this.renderBlock);}else{return this.eachBlock(this.renderKernel);}};Renderer.prototype.executePlugin=function(){Log.debug("Executing plugin "+this.currentJob.plugin);Plugin.execute(this.c,this.currentJob.plugin,this.currentJob.args);Log.debug("Plugin "+this.currentJob.plugin+" finished!");return this.processNext();};Renderer.prototype.renderBlock=function(bnum,start,end){var i,pixel,_i;Log.debug("Block #"+bnum+" - Filter: "+this.currentJob.name+", Start: "+start+", End: "+end);Event.trigger(this.c,"blockStarted",{blockNum:bnum,totalBlocks:Renderer.Blocks,startPixel:start,endPixel:end});pixel=new Pixel();pixel.setContext(this.c);for(i=_i=start;_i<end;i=_i+=4){pixel.loc=i;pixel.r=this.c.pixelData[i];pixel.g=this.c.pixelData[i+1];pixel.b=this.c.pixelData[i+2];pixel.a=this.c.pixelData[i+3];this.currentJob.processFn(pixel);this.c.pixelData[i]=Util.clampRGB(pixel.r);this.c.pixelData[i+1]=Util.clampRGB(pixel.g);this.c.pixelData[i+2]=Util.clampRGB(pixel.b);this.c.pixelData[i+3]=Util.clampRGB(pixel.a);}
163
- if(Caman.NodeJS){return Fiber["yield"](bnum);}else{return this.blockFinished(bnum);}};Renderer.prototype.renderKernel=function(bnum,start,end){var adjust,adjustSize,bias,builder,builderIndex,divisor,i,j,k,kernel,n,name,p,pixel,res,_i,_j,_k;name=this.currentJob.name;bias=this.currentJob.bias;divisor=this.currentJob.divisor;n=this.c.pixelData.length;adjust=this.currentJob.adjust;adjustSize=Math.sqrt(adjust.length);kernel=[];Log.debug("Rendering kernel - Filter: "+this.currentJob.name);start=Math.max(start,this.c.dimensions.width*4*((adjustSize-1)/2));end=Math.min(end,n-(this.c.dimensions.width*4*((adjustSize-1)/2)));builder=(adjustSize-1)/2;pixel=new Pixel();pixel.setContext(this.c);for(i=_i=start;_i<end;i=_i+=4){pixel.loc=i;builderIndex=0;for(j=_j=-builder;-builder<=builder?_j<=builder:_j>=builder;j=-builder<=builder?++_j:--_j){for(k=_k=builder;builder<=-builder?_k<=-builder:_k>=-builder;k=builder<=-builder?++_k:--_k){p=pixel.getPixelRelative(j,k);kernel[builderIndex*3]=p.r;kernel[builderIndex*3+1]=p.g;kernel[builderIndex*3+2]=p.b;builderIndex++;}}
164
- res=this.processKernel(adjust,kernel,divisor,bias);this.modPixelData[i]=Util.clampRGB(res.r);this.modPixelData[i+1]=Util.clampRGB(res.g);this.modPixelData[i+2]=Util.clampRGB(res.b);this.modPixelData[i+3]=this.c.pixelData[i+3];}
165
- if(Caman.NodeJS){return Fiber["yield"](bnum);}else{return this.blockFinished(bnum);}};Renderer.prototype.blockFinished=function(bnum){var i,_i,_ref;if(bnum>=0){Log.debug("Block #"+bnum+" finished! Filter: "+this.currentJob.name);}
166
- this.blocksDone++;Event.trigger(this.c,"blockFinished",{blockNum:bnum,blocksFinished:this.blocksDone,totalBlocks:Renderer.Blocks});if(this.blocksDone===Renderer.Blocks){if(this.currentJob.type===Filter.Type.Kernel){for(i=_i=0,_ref=this.c.pixelData.length;0<=_ref?_i<_ref:_i>_ref;i=0<=_ref?++_i:--_i){this.c.pixelData[i]=this.modPixelData[i];}}
167
- if(bnum>=0){Log.debug("Filter "+this.currentJob.name+" finished!");}
168
- Event.trigger(this.c,"processComplete",this.currentJob);return this.processNext();}};Renderer.prototype.processKernel=function(adjust,kernel,divisor,bias){var i,val,_i,_ref;val={r:0,g:0,b:0};for(i=_i=0,_ref=adjust.length;0<=_ref?_i<_ref:_i>_ref;i=0<=_ref?++_i:--_i){val.r+=adjust[i]*kernel[i*3];val.g+=adjust[i]*kernel[i*3+1];val.b+=adjust[i]*kernel[i*3+2];}
169
- val.r=(val.r/divisor)+bias;val.g=(val.g/divisor)+bias;val.b=(val.b/divisor)+bias;return val;};Renderer.prototype.loadOverlay=function(layer,src){var img,proxyUrl,_this=this;img=new Image();img.onload=function(){layer.context.drawImage(img,0,0,_this.c.dimensions.width,_this.c.dimensions.height);layer.imageData=layer.context.getImageData(0,0,_this.c.dimensions.width,_this.c.dimensions.height);layer.pixelData=layer.imageData.data;_this.c.pixelData=layer.pixelData;return _this.processNext();};proxyUrl=IO.remoteCheck(src);return img.src=proxyUrl!=null?proxyUrl:src;};return Renderer;})();Renderer=Caman.Renderer;Caman.Store=(function(){function Store(){}
170
- Store.items={};Store.has=function(search){return this.items[search]!=null;};Store.get=function(search){return this.items[search];};Store.put=function(name,obj){return this.items[name]=obj;};Store.execute=function(search,callback){var _this=this;setTimeout(function(){return callback.call(_this.get(search),_this.get(search));},0);return this.get(search);};Store.flush=function(name){if(name==null){name=false;}
171
- if(name){return delete this.items[name];}else{return this.items={};}};return Store;})();Store=Caman.Store;Blender.register("normal",function(rgbaLayer,rgbaParent){return{r:rgbaLayer.r,g:rgbaLayer.g,b:rgbaLayer.b};});Blender.register("multiply",function(rgbaLayer,rgbaParent){return{r:(rgbaLayer.r*rgbaParent.r)/255,g:(rgbaLayer.g*rgbaParent.g)/255,b:(rgbaLayer.b*rgbaParent.b)/255};});Blender.register("screen",function(rgbaLayer,rgbaParent){return{r:255-(((255-rgbaLayer.r)*(255-rgbaParent.r))/255),g:255-(((255-rgbaLayer.g)*(255-rgbaParent.g))/255),b:255-(((255-rgbaLayer.b)*(255-rgbaParent.b))/255)};});Blender.register("overlay",function(rgbaLayer,rgbaParent){var result;result={};result.r=rgbaParent.r>128?255-2*(255-rgbaLayer.r)*(255-rgbaParent.r)/255:(rgbaParent.r*rgbaLayer.r*2)/255;result.g=rgbaParent.g>128?255-2*(255-rgbaLayer.g)*(255-rgbaParent.g)/255:(rgbaParent.g*rgbaLayer.g*2)/255;result.b=rgbaParent.b>128?255-2*(255-rgbaLayer.b)*(255-rgbaParent.b)/255:(rgbaParent.b*rgbaLayer.b*2)/255;return result;});Blender.register("difference",function(rgbaLayer,rgbaParent){return{r:rgbaLayer.r-rgbaParent.r,g:rgbaLayer.g-rgbaParent.g,b:rgbaLayer.b-rgbaParent.b};});Blender.register("addition",function(rgbaLayer,rgbaParent){return{r:rgbaParent.r+rgbaLayer.r,g:rgbaParent.g+rgbaLayer.g,b:rgbaParent.b+rgbaLayer.b};});Blender.register("exclusion",function(rgbaLayer,rgbaParent){return{r:128-2*(rgbaParent.r-128)*(rgbaLayer.r-128)/255,g:128-2*(rgbaParent.g-128)*(rgbaLayer.g-128)/255,b:128-2*(rgbaParent.b-128)*(rgbaLayer.b-128)/255};});Blender.register("softLight",function(rgbaLayer,rgbaParent){var result;result={};result.r=rgbaParent.r>128?255-((255-rgbaParent.r)*(255-(rgbaLayer.r-128)))/255:(rgbaParent.r*(rgbaLayer.r+128))/255;result.g=rgbaParent.g>128?255-((255-rgbaParent.g)*(255-(rgbaLayer.g-128)))/255:(rgbaParent.g*(rgbaLayer.g+128))/255;result.b=rgbaParent.b>128?255-((255-rgbaParent.b)*(255-(rgbaLayer.b-128)))/255:(rgbaParent.b*(rgbaLayer.b+128))/255;return result;});Blender.register("lighten",function(rgbaLayer,rgbaParent){return{r:rgbaParent.r>rgbaLayer.r?rgbaParent.r:rgbaLayer.r,g:rgbaParent.g>rgbaLayer.g?rgbaParent.g:rgbaLayer.g,b:rgbaParent.b>rgbaLayer.b?rgbaParent.b:rgbaLayer.b};});Blender.register("darken",function(rgbaLayer,rgbaParent){return{r:rgbaParent.r>rgbaLayer.r?rgbaLayer.r:rgbaParent.r,g:rgbaParent.g>rgbaLayer.g?rgbaLayer.g:rgbaParent.g,b:rgbaParent.b>rgbaLayer.b?rgbaLayer.b:rgbaParent.b};});Filter.register("fillColor",function(){var color;if(arguments.length===1){color=Convert.hexToRGB(arguments[0]);}else{color={r:arguments[0],g:arguments[1],b:arguments[2]};}
172
- return this.process("fillColor",function(rgba){rgba.r=color.r;rgba.g=color.g;rgba.b=color.b;rgba.a=255;return rgba;});});Filter.register("brightness",function(adjust){adjust=Math.floor(255*(adjust/100));return this.process("brightness",function(rgba){rgba.r+=adjust;rgba.g+=adjust;rgba.b+=adjust;return rgba;});});Filter.register("saturation",function(adjust){adjust*=-0.01;return this.process("saturation",function(rgba){var max;max=Math.max(rgba.r,rgba.g,rgba.b);if(rgba.r!==max){rgba.r+=(max-rgba.r)*adjust;}
173
- if(rgba.g!==max){rgba.g+=(max-rgba.g)*adjust;}
174
- if(rgba.b!==max){rgba.b+=(max-rgba.b)*adjust;}
175
- return rgba;});});Filter.register("vibrance",function(adjust){adjust*=-1;return this.process("vibrance",function(rgba){var amt,avg,max;max=Math.max(rgba.r,rgba.g,rgba.b);avg=(rgba.r+rgba.g+rgba.b)/3;amt=((Math.abs(max-avg)*2/255)*adjust)/100;if(rgba.r!==max){rgba.r+=(max-rgba.r)*amt;}
176
- if(rgba.g!==max){rgba.g+=(max-rgba.g)*amt;}
177
- if(rgba.b!==max){rgba.b+=(max-rgba.b)*amt;}
178
- return rgba;});});Filter.register("greyscale",function(adjust){return this.process("greyscale",function(rgba){var avg;avg=Calculate.luminance(rgba);rgba.r=avg;rgba.g=avg;rgba.b=avg;return rgba;});});Filter.register("contrast",function(adjust){adjust=Math.pow((adjust+100)/100,2);return this.process("contrast",function(rgba){rgba.r/=255;rgba.r-=0.5;rgba.r*=adjust;rgba.r+=0.5;rgba.r*=255;rgba.g/=255;rgba.g-=0.5;rgba.g*=adjust;rgba.g+=0.5;rgba.g*=255;rgba.b/=255;rgba.b-=0.5;rgba.b*=adjust;rgba.b+=0.5;rgba.b*=255;return rgba;});});Filter.register("hue",function(adjust){return this.process("hue",function(rgba){var b,g,h,hsv,r,_ref;hsv=Convert.rgbToHSV(rgba.r,rgba.g,rgba.b);h=hsv.h*100;h+=Math.abs(adjust);h=h%100;h/=100;hsv.h=h;_ref=Convert.hsvToRGB(hsv.h,hsv.s,hsv.v),r=_ref.r,g=_ref.g,b=_ref.b;rgba.r=r;rgba.g=g;rgba.b=b;return rgba;});});Filter.register("colorize",function(){var level,rgb;if(arguments.length===2){rgb=Convert.hexToRGB(arguments[0]);level=arguments[1];}else if(arguments.length===4){rgb={r:arguments[0],g:arguments[1],b:arguments[2]};level=arguments[3];}
179
- return this.process("colorize",function(rgba){rgba.r-=(rgba.r-rgb.r)*(level/100);rgba.g-=(rgba.g-rgb.g)*(level/100);rgba.b-=(rgba.b-rgb.b)*(level/100);return rgba;});});Filter.register("invert",function(){return this.process("invert",function(rgba){rgba.r=255-rgba.r;rgba.g=255-rgba.g;rgba.b=255-rgba.b;return rgba;});});Filter.register("sepia",function(adjust){if(adjust==null){adjust=100;}
180
- adjust/=100;return this.process("sepia",function(rgba){rgba.r=Math.min(255,(rgba.r*(1-(0.607*adjust)))+(rgba.g*(0.769*adjust))+(rgba.b*(0.189*adjust)));rgba.g=Math.min(255,(rgba.r*(0.349*adjust))+(rgba.g*(1-(0.314*adjust)))+(rgba.b*(0.168*adjust)));rgba.b=Math.min(255,(rgba.r*(0.272*adjust))+(rgba.g*(0.534*adjust))+(rgba.b*(1-(0.869*adjust))));return rgba;});});Filter.register("gamma",function(adjust){return this.process("gamma",function(rgba){rgba.r=Math.pow(rgba.r/255,adjust)*255;rgba.g=Math.pow(rgba.g/255,adjust)*255;rgba.b=Math.pow(rgba.b/255,adjust)*255;return rgba;});});Filter.register("noise",function(adjust){adjust=Math.abs(adjust)*2.55;return this.process("noise",function(rgba){var rand;rand=Calculate.randomRange(adjust*-1,adjust);rgba.r+=rand;rgba.g+=rand;rgba.b+=rand;return rgba;});});Filter.register("clip",function(adjust){adjust=Math.abs(adjust)*2.55;return this.process("clip",function(rgba){if(rgba.r>255-adjust){rgba.r=255;}else if(rgba.r<adjust){rgba.r=0;}
181
- if(rgba.g>255-adjust){rgba.g=255;}else if(rgba.g<adjust){rgba.g=0;}
182
- if(rgba.b>255-adjust){rgba.b=255;}else if(rgba.b<adjust){rgba.b=0;}
183
- return rgba;});});Filter.register("channels",function(options){var chan,value;if(typeof options!=="object"){return this;}
184
- for(chan in options){if(!__hasProp.call(options,chan))continue;value=options[chan];if(value===0){delete options[chan];continue;}
185
- options[chan]/=100;}
186
- if(options.length===0){return this;}
187
- return this.process("channels",function(rgba){if(options.red!=null){if(options.red>0){rgba.r+=(255-rgba.r)*options.red;}else{rgba.r-=rgba.r*Math.abs(options.red);}}
188
- if(options.green!=null){if(options.green>0){rgba.g+=(255-rgba.g)*options.green;}else{rgba.g-=rgba.g*Math.abs(options.green);}}
189
- if(options.blue!=null){if(options.blue>0){rgba.b+=(255-rgba.b)*options.blue;}else{rgba.b-=rgba.b*Math.abs(options.blue);}}
190
- return rgba;});});Filter.register("curves",function(){var algo,bezier,chans,cps,end,i,last,start,_i,_j,_ref,_ref1;chans=arguments[0],cps=2<=arguments.length?__slice.call(arguments,1):[];last=cps[cps.length-1];if(typeof last==="function"){algo=last;cps.pop();}else if(typeof last==="string"){algo=Calculate[last];cps.pop();}else{algo=Calculate.bezier;}
191
- if(typeof chans==="string"){chans=chans.split("");}
192
- if(chans[0]==="v"){chans=['r','g','b'];}
193
- if(cps.length<2){throw"Invalid number of arguments to curves filter";}
194
- bezier=algo(cps,0,255);start=cps[0];if(start[0]>0){for(i=_i=0,_ref=start[0];0<=_ref?_i<_ref:_i>_ref;i=0<=_ref?++_i:--_i){bezier[i]=start[1];}}
195
- end=cps[cps.length-1];if(end[0]<255){for(i=_j=_ref1=end[0];_ref1<=255?_j<=255:_j>=255;i=_ref1<=255?++_j:--_j){bezier[i]=end[1];}}
196
- return this.process("curves",function(rgba){var _k,_ref2;for(i=_k=0,_ref2=chans.length;0<=_ref2?_k<_ref2:_k>_ref2;i=0<=_ref2?++_k:--_k){rgba[chans[i]]=bezier[rgba[chans[i]]];}
197
- return rgba;});});Filter.register("exposure",function(adjust){var ctrl1,ctrl2,p;p=Math.abs(adjust)/100;ctrl1=[0,255*p];ctrl2=[255-(255*p),255];if(adjust<0){ctrl1=ctrl1.reverse();ctrl2=ctrl2.reverse();}
198
- return this.curves('rgb',[0,0],ctrl1,ctrl2,[255,255]);});Caman.Plugin.register("crop",function(width,height,x,y){var canvas,ctx;if(x==null){x=0;}
199
- if(y==null){y=0;}
200
- if(typeof exports!=="undefined"&&exports!==null){canvas=new Canvas(width,height);}else{canvas=document.createElement('canvas');Util.copyAttributes(this.canvas,canvas);canvas.width=width;canvas.height=height;}
201
- ctx=canvas.getContext('2d');ctx.drawImage(this.canvas,x,y,width,height,0,0,width,height);this.cropCoordinates={x:x,y:y};this.cropped=true;return this.replaceCanvas(canvas);});Caman.Plugin.register("resize",function(newDims){var canvas,ctx;if(newDims==null){newDims=null;}
202
- if(newDims===null||((newDims.width==null)&&(newDims.height==null))){Log.error("Invalid or missing dimensions given for resize");return;}
203
- if(newDims.width==null){newDims.width=this.canvas.width*newDims.height/this.canvas.height;}else if(newDims.height==null){newDims.height=this.canvas.height*newDims.width/this.canvas.width;}
204
- if(typeof exports!=="undefined"&&exports!==null){canvas=new Canvas(newDims.width,newDims.height);}else{canvas=document.createElement('canvas');Util.copyAttributes(this.canvas,canvas);canvas.width=newDims.width;canvas.height=newDims.height;}
205
- ctx=canvas.getContext('2d');ctx.drawImage(this.canvas,0,0,this.canvas.width,this.canvas.height,0,0,newDims.width,newDims.height);this.resized=true;return this.replaceCanvas(canvas);});Caman.Filter.register("crop",function(){return this.processPlugin("crop",Array.prototype.slice.call(arguments,0));});Caman.Filter.register("resize",function(){return this.processPlugin("resize",Array.prototype.slice.call(arguments,0));});Caman.Filter.register("boxBlur",function(){return this.processKernel("Box Blur",[1,1,1,1,1,1,1,1,1]);});Caman.Filter.register("heavyRadialBlur",function(){return this.processKernel("Heavy Radial Blur",[0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1,0,0,0,1,0,0]);});Caman.Filter.register("gaussianBlur",function(){return this.processKernel("Gaussian Blur",[1,4,6,4,1,4,16,24,16,4,6,24,36,24,6,4,16,24,16,4,1,4,6,4,1]);});Caman.Filter.register("motionBlur",function(degrees){var kernel;if(degrees===0||degrees===180){kernel=[0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0];}else if((degrees>0&&degrees<90)||(degrees>180&&degrees<270)){kernel=[0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0];}else if(degrees===90||degrees===270){kernel=[0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0];}else{kernel=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1];}
206
- return this.processKernel("Motion Blur",kernel);});Caman.Filter.register("sharpen",function(amt){if(amt==null){amt=100;}
207
- amt/=100;return this.processKernel("Sharpen",[0,-amt,0,-amt,4*amt+1,-amt,0,-amt,0]);});vignetteFilters={brightness:function(rgba,amt,opts){rgba.r=rgba.r-(rgba.r*amt*opts.strength);rgba.g=rgba.g-(rgba.g*amt*opts.strength);rgba.b=rgba.b-(rgba.b*amt*opts.strength);return rgba;},gamma:function(rgba,amt,opts){rgba.r=Math.pow(rgba.r/255,Math.max(10*amt*opts.strength,1))*255;rgba.g=Math.pow(rgba.g/255,Math.max(10*amt*opts.strength,1))*255;rgba.b=Math.pow(rgba.b/255,Math.max(10*amt*opts.strength,1))*255;return rgba;},colorize:function(rgba,amt,opts){rgba.r-=(rgba.r-opts.color.r)*amt;rgba.g-=(rgba.g-opts.color.g)*amt;rgba.b-=(rgba.b-opts.color.b)*amt;return rgba;}};Filter.register("vignette",function(size,strength){var bezier,center,end,start;if(strength==null){strength=60;}
208
- if(typeof size==="string"&&size.substr(-1)==="%"){if(this.dimensions.height>this.dimensions.width){size=this.dimensions.width*(parseInt(size.substr(0,size.length-1),10)/100);}else{size=this.dimensions.height*(parseInt(size.substr(0,size.length-1),10)/100);}}
209
- strength/=100;center=[this.dimensions.width/2,this.dimensions.height/2];start=Math.sqrt(Math.pow(center[0],2)+Math.pow(center[1],2));end=start-size;bezier=Calculate.bezier([0,1],[30,30],[70,60],[100,80]);return this.process("vignette",function(rgba){var dist,div,loc;loc=rgba.locationXY();dist=Calculate.distance(loc.x,loc.y,center[0],center[1]);if(dist>end){div=Math.max(1,(bezier[Math.round(((dist-end)/size)*100)]/10)*strength);rgba.r=Math.pow(rgba.r/255,div)*255;rgba.g=Math.pow(rgba.g/255,div)*255;rgba.b=Math.pow(rgba.b/255,div)*255;}
210
- return rgba;});});Filter.register("rectangularVignette",function(opts){var defaults,dim,percent,size,_i,_len,_ref;defaults={strength:50,cornerRadius:0,method:'brightness',color:{r:0,g:0,b:0}};opts=Util.extend(defaults,opts);if(!opts.size){return this;}else if(typeof opts.size==="string"){percent=parseInt(opts.size,10)/100;opts.size={width:this.dimensions.width*percent,height:this.dimensions.height*percent};}else if(typeof opts.size==="object"){_ref=["width","height"];for(_i=0,_len=_ref.length;_i<_len;_i++){dim=_ref[_i];if(typeof opts.size[dim]==="string"){opts.size[dim]=this.dimensions[dim]*(parseInt(opts.size[dim],10)/100);}}}else if(opts.size==="number"){size=opts.size;opts.size={width:size,height:size};}
211
- if(typeof opts.cornerRadius==="string"){opts.cornerRadius=(opts.size.width/2)*(parseInt(opts.cornerRadius,10)/100);}
212
- opts.strength/=100;opts.size.width=Math.floor(opts.size.width);opts.size.height=Math.floor(opts.size.height);opts.image={width:this.dimensions.width,height:this.dimensions.height};if(opts.method==="colorize"&&typeof opts.color==="string"){opts.color=Convert.hexToRGB(opts.color);}
213
- opts.coords={left:(this.dimensions.width-opts.size.width)/2,right:this.dimensions.width-opts.coords.left,bottom:(this.dimensions.height-opts.size.height)/2,top:this.dimensions.height-opts.coords.bottom};opts.corners=[{x:opts.coords.left+opts.cornerRadius,y:opts.coords.top-opts.cornerRadius},{x:opts.coords.right-opts.cornerRadius,y:opts.coords.top-opts.cornerRadius},{x:opts.coords.right-opts.cornerRadius,y:opts.coords.bottom+opts.cornerRadius},{x:opts.coords.left+opts.cornerRadius,y:opts.coords.bottom+opts.cornerRadius}];opts.maxDist=Calculate.distance(0,0,opts.corners[3].x,opts.corners[3].y)-opts.cornerRadius;return this.process("rectangularVignette",function(rgba){var amt,loc,radialDist;loc=rgba.locationXY();if((loc.x>opts.corners[0].x&&loc.x<opts.corners[1].x)&&(loc.y>opts.coords.bottom&&loc.y<opts.coords.top)){return rgba;}
214
- if((loc.x>opts.coords.left&&loc.x<opts.coords.right)&&(loc.y>opts.corners[3].y&&loc.y<opts.corners[2].y)){return rgba;}
215
- if(loc.x>opts.corners[0].x&&loc.x<opts.corners[1].x&&loc.y>opts.coords.top){amt=(loc.y-opts.coords.top)/opts.maxDist;}else if(loc.y>opts.corners[2].y&&loc.y<opts.corners[1].y&&loc.x>opts.coords.right){amt=(loc.x-opts.coords.right)/opts.maxDist;}else if(loc.x>opts.corners[0].x&&loc.x<opts.corners[1].x&&loc.y<opts.coords.bottom){amt=(opts.coords.bottom-loc.y)/opts.maxDist;}else if(loc.y>opts.corners[2].y&&loc.y<opts.corners[1].y&&loc.x<opts.coords.left){amt=(opts.coords.left-loc.x)/opts.maxDist;}else if(loc.x<=opts.corners[0].x&&loc.y>=opts.corners[0].y){radialDist=Caman.distance(loc.x,loc.y,opts.corners[0].x,opts.corners[0].y);amt=(radialDist-opts.cornerRadius)/opts.maxDist;}else if(loc.x>=opts.corners[1].x&&loc.y>=opts.corners[1].y){radialDist=Caman.distance(loc.x,loc.y,opts.corners[1].x,opts.corners[1].y);amt=(radialDist-opts.cornerRadius)/opts.maxDist;}else if(loc.x>=opts.corners[2].x&&loc.y<=opts.corners[2].y){radialDist=Caman.distance(loc.x,loc.y,opts.corners[2].x,opts.corners[2].y);amt=(radialDist-opts.cornerRadius)/opts.maxDist;}else if(loc.x<=opts.corners[3].x&&loc.y<=opts.corners[3].y){radialDist=Caman.distance(loc.x,loc.y,opts.corners[3].x,opts.corners[3].y);amt=(radialDist-opts.cornerRadius)/opts.maxDist;}
216
- if(amt<0){return rgba;}
217
- return vignetteFilters[opts.method](rgba,amt,opts);});});(function(){var BlurStack,getLinearGradientMap,getRadialGradientMap,mul_table,shg_table;mul_table=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259];shg_table=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];getLinearGradientMap=function(width,height,centerX,centerY,angle,length,mirrored){var cnv,context,gradient,x1,x2,y1,y2;cnv=typeof exports!=="undefined"&&exports!==null?new Canvas():document.createElement('canvas');cnv.width=width;cnv.height=height;x1=centerX+Math.cos(angle)*length*0.5;y1=centerY+Math.sin(angle)*length*0.5;x2=centerX-Math.cos(angle)*length*0.5;y2=centerY-Math.sin(angle)*length*0.5;context=cnv.getContext("2d");gradient=context.createLinearGradient(x1,y1,x2,y2);if(!mirrored){gradient.addColorStop(0,"white");gradient.addColorStop(1,"black");}else{gradient.addColorStop(0,"white");gradient.addColorStop(0.5,"black");gradient.addColorStop(1,"white");}
218
- context.fillStyle=gradient;context.fillRect(0,0,width,height);return context.getImageData(0,0,width,height);};getRadialGradientMap=function(width,height,centerX,centerY,radius1,radius2){var cnv,context,gradient;cnv=typeof exports!=="undefined"&&exports!==null?new Canvas():document.createElement('canvas');cnv.width=width;cnv.height=height;context=cnv.getContext("2d");gradient=context.createRadialGradient(centerX,centerY,radius1,centerX,centerY,radius2);gradient.addColorStop(1,"white");gradient.addColorStop(0,"black");context.fillStyle=gradient;context.fillRect(0,0,width,height);return context.getImageData(0,0,width,height);};BlurStack=function(){this.r=0;this.g=0;this.b=0;this.a=0;return this.next=null;};Caman.Plugin.register("compoundBlur",function(radiusData,radius,increaseFactor,blurLevels){var b_in_sum,b_out_sum,b_sum,blend,currentIndex,div,g_in_sum,g_out_sum,g_sum,height,heightMinus1,i,iblend,idx,imagePixels,index,iradius,lookupValue,mul_sum,p,pb,pg,pixels,pr,r_in_sum,r_out_sum,r_sum,radiusPixels,radiusPlus1,rbs,shg_sum,stack,stackEnd,stackIn,stackOut,stackStart,steps,sumFactor,w4,wh,wh4,width,widthMinus1,x,y,yi,yp,yw,_i,_j,_k,_l,_m,_n,_o,_p,_q,_r;width=this.dimensions.width;height=this.dimensions.height;imagePixels=this.pixelData;radiusPixels=radiusData.data;wh=width*height;wh4=wh<<2;pixels=[];for(i=_i=0;0<=wh4?_i<wh4:_i>wh4;i=0<=wh4?++_i:--_i){pixels[i]=imagePixels[i];}
219
- currentIndex=0;steps=blurLevels;blurLevels-=1;while(steps-->=0){iradius=(radius+0.5)|0;if(iradius===0){continue;}
220
- if(iradius>256){iradius=256;}
221
- div=iradius+iradius+1;w4=width<<2;widthMinus1=width-1;heightMinus1=height-1;radiusPlus1=iradius+1;sumFactor=radiusPlus1*(radiusPlus1+1)/2;stackStart=new BlurStack();stackEnd=void 0;stack=stackStart;for(i=_j=1;1<=div?_j<div:_j>div;i=1<=div?++_j:--_j){stack=stack.next=new BlurStack();if(i===radiusPlus1){stackEnd=stack;}}
222
- stack.next=stackStart;stackIn=null;stackOut=null;yw=yi=0;mul_sum=mul_table[iradius];shg_sum=shg_table[iradius];for(y=_k=0;0<=height?_k<height:_k>height;y=0<=height?++_k:--_k){r_in_sum=g_in_sum=b_in_sum=r_sum=g_sum=b_sum=0;r_out_sum=radiusPlus1*(pr=pixels[yi]);g_out_sum=radiusPlus1*(pg=pixels[yi+1]);b_out_sum=radiusPlus1*(pb=pixels[yi+2]);r_sum+=sumFactor*pr;g_sum+=sumFactor*pg;b_sum+=sumFactor*pb;stack=stackStart;for(i=_l=0;0<=radiusPlus1?_l<radiusPlus1:_l>radiusPlus1;i=0<=radiusPlus1?++_l:--_l){stack.r=pr;stack.g=pg;stack.b=pb;stack=stack.next;}
223
- for(i=_m=1;1<=radiusPlus1?_m<radiusPlus1:_m>radiusPlus1;i=1<=radiusPlus1?++_m:--_m){p=yi+((widthMinus1<i?widthMinus1:i)<<2);r_sum+=(stack.r=(pr=pixels[p]))*(rbs=radiusPlus1-i);g_sum+=(stack.g=(pg=pixels[p+1]))*rbs;b_sum+=(stack.b=(pb=pixels[p+2]))*rbs;r_in_sum+=pr;g_in_sum+=pg;b_in_sum+=pb;stack=stack.next;}
224
- stackIn=stackStart;stackOut=stackEnd;for(x=_n=0;0<=width?_n<width:_n>width;x=0<=width?++_n:--_n){pixels[yi]=(r_sum*mul_sum)>>shg_sum;pixels[yi+1]=(g_sum*mul_sum)>>shg_sum;pixels[yi+2]=(b_sum*mul_sum)>>shg_sum;r_sum-=r_out_sum;g_sum-=g_out_sum;b_sum-=b_out_sum;r_out_sum-=stackIn.r;g_out_sum-=stackIn.g;b_out_sum-=stackIn.b;p=(yw+((p=x+radiusPlus1)<widthMinus1?p:widthMinus1))<<2;r_in_sum+=(stackIn.r=pixels[p]);g_in_sum+=(stackIn.g=pixels[p+1]);b_in_sum+=(stackIn.b=pixels[p+2]);r_sum+=r_in_sum;g_sum+=g_in_sum;b_sum+=b_in_sum;stackIn=stackIn.next;r_out_sum+=(pr=stackOut.r);g_out_sum+=(pg=stackOut.g);b_out_sum+=(pb=stackOut.b);r_in_sum-=pr;g_in_sum-=pg;b_in_sum-=pb;stackOut=stackOut.next;yi+=4;}
225
- yw+=width;}
226
- for(x=_o=0;0<=width?_o<width:_o>width;x=0<=width?++_o:--_o){g_in_sum=b_in_sum=r_in_sum=g_sum=b_sum=r_sum=0;yi=x<<2;r_out_sum=radiusPlus1*(pr=pixels[yi]);g_out_sum=radiusPlus1*(pg=pixels[yi+1]);b_out_sum=radiusPlus1*(pb=pixels[yi+2]);r_sum+=sumFactor*pr;g_sum+=sumFactor*pg;b_sum+=sumFactor*pb;stack=stackStart;for(i=_p=0;0<=radiusPlus1?_p<radiusPlus1:_p>radiusPlus1;i=0<=radiusPlus1?++_p:--_p){stack.r=pr;stack.g=pg;stack.b=pb;stack=stack.next;}
227
- yp=width;for(i=_q=1;1<=radiusPlus1?_q<radiusPlus1:_q>radiusPlus1;i=1<=radiusPlus1?++_q:--_q){yi=(yp+x)<<2;r_sum+=(stack.r=(pr=pixels[yi]))*(rbs=radiusPlus1-i);g_sum+=(stack.g=(pg=pixels[yi+1]))*rbs;b_sum+=(stack.b=(pb=pixels[yi+2]))*rbs;r_in_sum+=pr;g_in_sum+=pg;b_in_sum+=pb;stack=stack.next;if(i<heightMinus1){yp+=width;}}
228
- yi=x;stackIn=stackStart;stackOut=stackEnd;for(y=_r=0;0<=height?_r<height:_r>height;y=0<=height?++_r:--_r){p=yi<<2;pixels[p]=(r_sum*mul_sum)>>shg_sum;pixels[p+1]=(g_sum*mul_sum)>>shg_sum;pixels[p+2]=(b_sum*mul_sum)>>shg_sum;r_sum-=r_out_sum;g_sum-=g_out_sum;b_sum-=b_out_sum;r_out_sum-=stackIn.r;g_out_sum-=stackIn.g;b_out_sum-=stackIn.b;p=(x+(((p=y+radiusPlus1)<heightMinus1?p:heightMinus1)*width))<<2;r_sum+=(r_in_sum+=(stackIn.r=pixels[p]));g_sum+=(g_in_sum+=(stackIn.g=pixels[p+1]));b_sum+=(b_in_sum+=(stackIn.b=pixels[p+2]));stackIn=stackIn.next;r_out_sum+=(pr=stackOut.r);g_out_sum+=(pg=stackOut.g);b_out_sum+=(pb=stackOut.b);r_in_sum-=pr;g_in_sum-=pg;b_in_sum-=pb;stackOut=stackOut.next;yi+=width;}}
229
- radius*=increaseFactor;i=wh;while(--i>-1){idx=i<<2;lookupValue=(radiusPixels[idx+2]&0xff)/255.0*blurLevels;index=lookupValue|0;if(index===currentIndex){blend=256.0*(lookupValue-(lookupValue|0));iblend=256-blend;imagePixels[idx]=(imagePixels[idx]*iblend+pixels[idx]*blend)>>8;imagePixels[idx+1]=(imagePixels[idx+1]*iblend+pixels[idx+1]*blend)>>8;imagePixels[idx+2]=(imagePixels[idx+2]*iblend+pixels[idx+2]*blend)>>8;}else if(index===currentIndex+1){imagePixels[idx]=pixels[idx];imagePixels[idx+1]=pixels[idx+1];imagePixels[idx+2]=pixels[idx+2];}}
230
- currentIndex++;}
231
- return this;});Caman.Filter.register("tiltShift",function(opts){var defaults,gradient;defaults={center:{x:this.dimensions.width/2,y:this.dimensions.height/2},angle:45,focusWidth:200,startRadius:3,radiusFactor:1.5,steps:3};opts=Util.extend(defaults,opts);opts.angle*=Math.PI/180;gradient=getLinearGradientMap(this.dimensions.width,this.dimensions.height,opts.center.x,opts.center.y,opts.angle,opts.focusWidth,true);return this.processPlugin("compoundBlur",[gradient,opts.startRadius,opts.radiusFactor,opts.steps]);});return Caman.Filter.register("radialBlur",function(opts){var defaults,gradient,radius1,radius2;defaults={size:50,center:{x:this.dimensions.width/2,y:this.dimensions.height/2},startRadius:3,radiusFactor:1.5,steps:3,radius:null};opts=Util.extend(defaults,opts);if(!opts.radius){opts.radius=this.dimensions.width<this.dimensions.height?this.dimensions.height:this.dimensions.width;}
232
- radius1=(opts.radius/2)-opts.size;radius2=opts.radius/2;gradient=getRadialGradientMap(this.dimensions.width,this.dimensions.height,opts.center.x,opts.center.y,radius1,radius2);return this.processPlugin("compoundBlur",[gradient,opts.startRadius,opts.radiusFactor,opts.steps]);});})();Caman.Filter.register("edgeEnhance",function(){return this.processKernel("Edge Enhance",[0,0,0,-1,1,0,0,0,0]);});Caman.Filter.register("edgeDetect",function(){return this.processKernel("Edge Detect",[-1,-1,-1,-1,8,-1,-1,-1,-1]);});Caman.Filter.register("emboss",function(){return this.processKernel("Emboss",[-2,-1,0,-1,1,1,0,1,2]);});Caman.Filter.register("posterize",function(adjust){var numOfAreas,numOfValues;numOfAreas=256/adjust;numOfValues=255/(adjust-1);return this.process("posterize",function(rgba){rgba.r=Math.floor(Math.floor(rgba.r/numOfAreas)*numOfValues);rgba.g=Math.floor(Math.floor(rgba.g/numOfAreas)*numOfValues);rgba.b=Math.floor(Math.floor(rgba.b/numOfAreas)*numOfValues);return rgba;});});Caman.Filter.register("vintage",function(vignette){if(vignette==null){vignette=true;}
233
- this.greyscale();this.contrast(5);this.noise(3);this.sepia(100);this.channels({red:8,blue:2,green:4});this.gamma(0.87);if(vignette){return this.vignette("40%",30);}});Caman.Filter.register("lomo",function(vignette){if(vignette==null){vignette=true;}
234
- this.brightness(15);this.exposure(15);this.curves('rgb',[0,0],[200,0],[155,255],[255,255]);this.saturation(-20);this.gamma(1.8);if(vignette){this.vignette("50%",60);}
235
- return this.brightness(5);});Caman.Filter.register("clarity",function(grey){if(grey==null){grey=false;}
236
- this.vibrance(20);this.curves('rgb',[5,0],[130,150],[190,220],[250,255]);this.sharpen(15);this.vignette("45%",20);if(grey){this.greyscale();this.contrast(4);}
237
- return this;});Caman.Filter.register("sinCity",function(){this.contrast(100);this.brightness(15);this.exposure(10);this.posterize(80);this.clip(30);return this.greyscale();});Caman.Filter.register("sunrise",function(){this.exposure(3.5);this.saturation(-5);this.vibrance(50);this.sepia(60);this.colorize("#e87b22",10);this.channels({red:8,blue:8});this.contrast(5);this.gamma(1.2);return this.vignette("55%",25);});Caman.Filter.register("crossProcess",function(){this.exposure(5);this.colorize("#e87b22",4);this.sepia(20);this.channels({blue:8,red:3});this.curves('b',[0,0],[100,150],[180,180],[255,255]);this.contrast(15);this.vibrance(75);return this.gamma(1.6);});Caman.Filter.register("orangePeel",function(){this.curves('rgb',[0,0],[100,50],[140,200],[255,255]);this.vibrance(-30);this.saturation(-30);this.colorize('#ff9000',30);this.contrast(-5);return this.gamma(1.4);});Caman.Filter.register("love",function(){this.brightness(5);this.exposure(8);this.contrast(4);this.colorize('#c42007',30);this.vibrance(50);return this.gamma(1.3);});Caman.Filter.register("grungy",function(){this.gamma(1.5);this.clip(25);this.saturation(-60);this.contrast(5);this.noise(5);return this.vignette("50%",30);});Caman.Filter.register("jarques",function(){this.saturation(-35);this.curves('b',[20,0],[90,120],[186,144],[255,230]);this.curves('r',[0,0],[144,90],[138,120],[255,255]);this.curves('g',[10,0],[115,105],[148,100],[255,248]);this.curves('rgb',[0,0],[120,100],[128,140],[255,255]);return this.sharpen(20);});Caman.Filter.register("pinhole",function(){this.greyscale();this.sepia(10);this.exposure(10);this.contrast(15);return this.vignette("60%",35);});Caman.Filter.register("oldBoot",function(){this.saturation(-20);this.vibrance(-50);this.gamma(1.1);this.sepia(30);this.channels({red:-10,blue:5});this.curves('rgb',[0,0],[80,50],[128,230],[255,255]);return this.vignette("60%",30);});Caman.Filter.register("glowingSun",function(vignette){if(vignette==null){vignette=true;}
238
- this.brightness(10);this.newLayer(function(){this.setBlendingMode("multiply");this.opacity(80);this.copyParent();this.filter.gamma(0.8);this.filter.contrast(50);return this.filter.exposure(10);});this.newLayer(function(){this.setBlendingMode("softLight");this.opacity(80);return this.fillColor("#f49600");});this.exposure(20);this.gamma(0.8);if(vignette){return this.vignette("45%",20);}});Caman.Filter.register("hazyDays",function(){this.gamma(1.2);this.newLayer(function(){this.setBlendingMode("overlay");this.opacity(60);this.copyParent();this.filter.channels({red:5});return this.filter.stackBlur(15);});this.newLayer(function(){this.setBlendingMode("addition");this.opacity(40);return this.fillColor("#6899ba");});this.newLayer(function(){this.setBlendingMode("multiply");this.opacity(35);this.copyParent();this.filter.brightness(40);this.filter.vibrance(40);this.filter.exposure(30);this.filter.contrast(15);this.filter.curves('r',[0,40],[128,128],[128,128],[255,215]);this.filter.curves('g',[0,40],[128,128],[128,128],[255,215]);this.filter.curves('b',[0,40],[128,128],[128,128],[255,215]);return this.filter.stackBlur(5);});this.curves('r',[20,0],[128,158],[128,128],[235,255]);this.curves('g',[20,0],[128,128],[128,128],[235,255]);this.curves('b',[20,0],[128,108],[128,128],[235,255]);return this.vignette("45%",20);});Caman.Filter.register("herMajesty",function(){this.brightness(40);this.colorize("#ea1c5d",10);this.curves('b',[0,10],[128,180],[190,190],[255,255]);this.newLayer(function(){this.setBlendingMode('overlay');this.opacity(50);this.copyParent();this.filter.gamma(0.7);return this.newLayer(function(){this.setBlendingMode('normal');this.opacity(60);return this.fillColor('#ea1c5d');});});this.newLayer(function(){this.setBlendingMode('multiply');this.opacity(60);this.copyParent();this.filter.saturation(50);this.filter.hue(90);return this.filter.contrast(10);});this.gamma(1.4);this.vibrance(-30);this.newLayer(function(){this.opacity(10);return this.fillColor('#e5f0ff');});return this;});Caman.Filter.register("nostalgia",function(){this.saturation(20);this.gamma(1.4);this.greyscale();this.contrast(5);this.sepia(100);this.channels({red:8,blue:2,green:4});this.gamma(0.8);this.contrast(5);this.exposure(10);this.newLayer(function(){this.setBlendingMode('overlay');this.copyParent();this.opacity(55);return this.filter.stackBlur(10);});return this.vignette("50%",30);});Caman.Filter.register("hemingway",function(){this.greyscale();this.contrast(10);this.gamma(0.9);this.newLayer(function(){this.setBlendingMode("multiply");this.opacity(40);this.copyParent();this.filter.exposure(15);this.filter.contrast(15);return this.filter.channels({green:10,red:5});});this.sepia(30);this.curves('rgb',[0,10],[120,90],[180,200],[235,255]);this.channels({red:5,green:-2});return this.exposure(15);});Caman.Filter.register("concentrate",function(){this.sharpen(40);this.saturation(-50);this.channels({red:3});this.newLayer(function(){this.setBlendingMode("multiply");this.opacity(80);this.copyParent();this.filter.sharpen(5);this.filter.contrast(50);this.filter.exposure(10);return this.filter.channels({blue:5});});return this.brightness(10);});Caman.Plugin.register("rotate",function(degrees){var angle,canvas,ctx,height,to_radians,width,x,y;angle=degrees%360;if(angle===0){return this.dimensions={width:this.canvas.width,height:this.canvas.height};}
239
- to_radians=Math.PI/180;if(typeof exports!=="undefined"&&exports!==null){canvas=new Canvas();}else{canvas=document.createElement('canvas');Util.copyAttributes(this.canvas,canvas);}
240
- if(angle===90||angle===-270||angle===270||angle===-90){width=this.canvas.height;height=this.canvas.width;x=width/2;y=height/2;}else if(angle===180){width=this.canvas.width;height=this.canvas.height;x=width/2;y=height/2;}else{width=Math.sqrt(Math.pow(this.originalWidth,2)+Math.pow(this.originalHeight,2));height=width;x=this.canvas.height/2;y=this.canvas.width/2;}
241
- canvas.width=width;canvas.height=height;ctx=canvas.getContext('2d');ctx.save();ctx.translate(x,y);ctx.rotate(angle*to_radians);ctx.drawImage(this.canvas,-this.canvas.width/2,-this.canvas.height/2,this.canvas.width,this.canvas.height);ctx.restore();return this.replaceCanvas(canvas);});Caman.Filter.register("rotate",function(){return this.processPlugin("rotate",Array.prototype.slice.call(arguments,0));});(function(){var BlurStack,mul_table,shg_table;mul_table=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259];shg_table=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];BlurStack=function(){this.r=0;this.g=0;this.b=0;this.a=0;return this.next=null;};Caman.Plugin.register("stackBlur",function(radius){var b_in_sum,b_out_sum,b_sum,div,g_in_sum,g_out_sum,g_sum,height,heightMinus1,i,mul_sum,p,pb,pg,pixels,pr,r_in_sum,r_out_sum,r_sum,radiusPlus1,rbs,shg_sum,stack,stackEnd,stackIn,stackOut,stackStart,sumFactor,w4,width,widthMinus1,x,y,yi,yp,yw,_i,_j,_k,_l,_m,_n,_o,_p,_q;if(isNaN(radius)||radius<1){return;}
242
- radius|=0;pixels=this.pixelData;width=this.dimensions.width;height=this.dimensions.height;div=radius+radius+1;w4=width<<2;widthMinus1=width-1;heightMinus1=height-1;radiusPlus1=radius+1;sumFactor=radiusPlus1*(radiusPlus1+1)/2;stackStart=new BlurStack();stack=stackStart;for(i=_i=1;1<=div?_i<div:_i>div;i=1<=div?++_i:--_i){stack=stack.next=new BlurStack();if(i===radiusPlus1){stackEnd=stack;}}
243
- stack.next=stackStart;stackIn=null;stackOut=null;yw=yi=0;mul_sum=mul_table[radius];shg_sum=shg_table[radius];for(y=_j=0;0<=height?_j<height:_j>height;y=0<=height?++_j:--_j){r_in_sum=g_in_sum=b_in_sum=r_sum=g_sum=b_sum=0;r_out_sum=radiusPlus1*(pr=pixels[yi]);g_out_sum=radiusPlus1*(pg=pixels[yi+1]);b_out_sum=radiusPlus1*(pb=pixels[yi+2]);r_sum+=sumFactor*pr;g_sum+=sumFactor*pg;b_sum+=sumFactor*pb;stack=stackStart;for(i=_k=0;0<=radiusPlus1?_k<radiusPlus1:_k>radiusPlus1;i=0<=radiusPlus1?++_k:--_k){stack.r=pr;stack.g=pg;stack.b=pb;stack=stack.next;}
244
- for(i=_l=1;1<=radiusPlus1?_l<radiusPlus1:_l>radiusPlus1;i=1<=radiusPlus1?++_l:--_l){p=yi+((widthMinus1<i?widthMinus1:i)<<2);r_sum+=(stack.r=(pr=pixels[p]))*(rbs=radiusPlus1-i);g_sum+=(stack.g=(pg=pixels[p+1]))*rbs;b_sum+=(stack.b=(pb=pixels[p+2]))*rbs;r_in_sum+=pr;g_in_sum+=pg;b_in_sum+=pb;stack=stack.next;}
245
- stackIn=stackStart;stackOut=stackEnd;for(x=_m=0;0<=width?_m<width:_m>width;x=0<=width?++_m:--_m){pixels[yi]=(r_sum*mul_sum)>>shg_sum;pixels[yi+1]=(g_sum*mul_sum)>>shg_sum;pixels[yi+2]=(b_sum*mul_sum)>>shg_sum;r_sum-=r_out_sum;g_sum-=g_out_sum;b_sum-=b_out_sum;r_out_sum-=stackIn.r;g_out_sum-=stackIn.g;b_out_sum-=stackIn.b;p=(yw+((p=x+radius+1)<widthMinus1?p:widthMinus1))<<2;r_in_sum+=(stackIn.r=pixels[p]);g_in_sum+=(stackIn.g=pixels[p+1]);b_in_sum+=(stackIn.b=pixels[p+2]);r_sum+=r_in_sum;g_sum+=g_in_sum;b_sum+=b_in_sum;stackIn=stackIn.next;r_out_sum+=(pr=stackOut.r);g_out_sum+=(pg=stackOut.g);b_out_sum+=(pb=stackOut.b);r_in_sum-=pr;g_in_sum-=pg;b_in_sum-=pb;stackOut=stackOut.next;yi+=4;}
246
- yw+=width;}
247
- for(x=_n=0;0<=width?_n<width:_n>width;x=0<=width?++_n:--_n){g_in_sum=b_in_sum=r_in_sum=g_sum=b_sum=r_sum=0;yi=x<<2;r_out_sum=radiusPlus1*(pr=pixels[yi]);g_out_sum=radiusPlus1*(pg=pixels[yi+1]);b_out_sum=radiusPlus1*(pb=pixels[yi+2]);r_sum+=sumFactor*pr;g_sum+=sumFactor*pg;b_sum+=sumFactor*pb;stack=stackStart;for(i=_o=0;0<=radiusPlus1?_o<radiusPlus1:_o>radiusPlus1;i=0<=radiusPlus1?++_o:--_o){stack.r=pr;stack.g=pg;stack.b=pb;stack=stack.next;}
248
- yp=width;for(i=_p=1;1<=radius?_p<=radius:_p>=radius;i=1<=radius?++_p:--_p){yi=(yp+x)<<2;r_sum+=(stack.r=(pr=pixels[yi]))*(rbs=radiusPlus1-i);g_sum+=(stack.g=(pg=pixels[yi+1]))*rbs;b_sum+=(stack.b=(pb=pixels[yi+2]))*rbs;r_in_sum+=pr;g_in_sum+=pg;b_in_sum+=pb;stack=stack.next;if(i<heightMinus1){yp+=width;}}
249
- yi=x;stackIn=stackStart;stackOut=stackEnd;for(y=_q=0;0<=height?_q<height:_q>height;y=0<=height?++_q:--_q){p=yi<<2;pixels[p]=(r_sum*mul_sum)>>shg_sum;pixels[p+1]=(g_sum*mul_sum)>>shg_sum;pixels[p+2]=(b_sum*mul_sum)>>shg_sum;r_sum-=r_out_sum;g_sum-=g_out_sum;b_sum-=b_out_sum;r_out_sum-=stackIn.r;g_out_sum-=stackIn.g;b_out_sum-=stackIn.b;p=(x+(((p=y+radiusPlus1)<heightMinus1?p:heightMinus1)*width))<<2;r_sum+=(r_in_sum+=(stackIn.r=pixels[p]));g_sum+=(g_in_sum+=(stackIn.g=pixels[p+1]));b_sum+=(b_in_sum+=(stackIn.b=pixels[p+2]));stackIn=stackIn.next;r_out_sum+=(pr=stackOut.r);g_out_sum+=(pg=stackOut.g);b_out_sum+=(pb=stackOut.b);r_in_sum-=pr;g_in_sum-=pg;b_in_sum-=pb;stackOut=stackOut.next;yi+=width;}}
250
- return this;});return Caman.Filter.register("stackBlur",function(radius){return this.processPlugin("stackBlur",[radius]);});})();Caman.Filter.register("threshold",function(adjust){return this.process("threshold",function(rgba){var luminance;luminance=(0.2126*rgba.r)+(0.7152*rgba.g)+(0.0722*rgba.b);if(luminance<adjust){rgba.r=0;rgba.g=0;rgba.b=0;}else{rgba.r=255;rgba.g=255;rgba.b=255;}
251
- return rgba;});});}).call(this);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/dist/caman.full.pack.js DELETED
@@ -1 +0,0 @@
1
- eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(A(){M $,4K,2k,2b,D,54,3S,1X,2Q,6B,R,2N,4V,39,1Y,3L,28,2w,1P,7V,32,1v,fs,6y,7Z,5f,9y,6s=[].fb||A(bS){W(M i=0,l=o.P;i<l;i++){B(i 5h o&&o[i]===bS)u i}u-1},5W=[].5f,74={}.f2,9x=A(fn,cH){u A(){u fn.4r(cH,1l)}},cM=A(6e,6h){W(M 2t 5h 6h){B(74.1w(6h,2t))6e[2t]=6h[2t]}A 9b(){o.eU=6e}9b.N=6h.N;6e.N=1y 9b();6e.eT=6h.N;u 6e};7Z=[\'aN\',\'97\'];3L=(A(){A 3L(){}3L["dc"]=A(2C){M 2t,4q,K;W(2t 5h 2C){4q=2C[2t];B(6s.1w(7Z,2t)<0){o[2t]=4q}}B((K=2C.aN)!=L){K.4r(o)}u o};3L.eP=A(2C){M 2t,4q,K;W(2t 5h 2C){4q=2C[2t];B(6s.1w(7Z,2t)<0){o.N[2t]=4q}}B((K=2C.97)!=L){K.4r(o)}u o};3L.eO=A(){M 1k,7q,38,H,1n,1o;1k=1<=1l.P?5W.1w(1l,0):[];38=1k.6o();1o=[];W(H=0,1n=1k.P;H<1n;H++){7q=1k[H];1o.2j(o.N[7q]=38.N[7q])}u 1o};3L.eJ=A(3N,4M){M 1D=o;u o.N[3N]=A(){M 1k;1k=1<=1l.P?5W.1w(1l,0):[];u 1D.N[4M].4r(1D,1k)}};3L.eH=A(3N,4M){u bc.eF(o.N,3N,{4i:A(){u o[4M]},eE:A(2f){u o[4M]=2f}})};3L.97=A(5j){u 5j.1w(o,o.N)};u 3L})();5f=5T.N.5f;$=A(7A,7C){B(7C==L){7C=2p}B(1r 7A==="44"||(1r 2g!=="42"&&2g!==L)){u 7A}u 7C.ei(7A)};1v=(A(){A 1v(){}1v.8Z=(A(){M 2X;2X=0;u{4i:A(){u 2X++}}})();1v.7N=A(){M 6C,7T,2C,6E,1G,H,1n;2C=1l[0],1G=2<=1l.P?5W.1w(1l,1):[];7T=2C;W(H=0,1n=1G.P;H<1n;H++){6C=1G[H];W(6E 5h 6C){B(!74.1w(6C,6E))5I;7T[6E]=6C[6E]}}u 7T};1v.3H=A(2f){B(2f<0){u 0}B(2f>E){u E}u 2f};1v.5H=A(4M,3N,G){M 6l,H,1n,K,3T,1o;B(G==L){G={}}K=4M.e6;1o=[];W(H=0,1n=K.P;H<1n;H++){6l=K[H];B((G.8W!=L)&&(3T=6l.9U,6s.1w(G.8W,3T)>=0)){5I}1o.2j(3N.cR(6l.9U,6l.dd))}u 1o};1v.6F=A(P){B(P==L){P=0}B(D.2O||(4N.cC!=L)){u 1y cC(P)}u 1y 5T(P)};u 1v})();B(1r 2g!=="42"&&2g!==L){7V=2g;3S=6x(\'I\');4V=3S.4V;6B=6x(\'eQ\');fs=6x(\'fs\');6y=6x(\'6y\')}S{7V=4N}D=(A(cv){cM(D,cv);D.9w={ct:"4.1.2",cs:"7/27/de"};D.co=2r;D.6r=31;D.9t="cm";D.8t="";D.ck="df";D.2O=1r 2g!=="42"&&2g!==L;D.ci=!D.2O;D.65=A(){u"dg "+D.9w.ct+", dh "+D.9w.cs};D.9m=A(I){B(D.2O){u 31}B(1r I==="3j"){I=$(I)}B(!((I!=L)&&(I.6c!=L))){u L}u I.6c(\'29-3E-2X\')};A D(){o.6d=9x(o.6d,o);M 1k,1N,2X,1D=o;B(1l.P===0){2V"6i 1l";}B(o bY D){o.6k=o.6k.98(o);o.6H=o.6H.98(o);1k=1l[0];B(!D.2O){2X=49(D.9m(1k[0]),10);1N=1r 1k[1]==="A"?1k[1]:1r 1k[2]==="A"?1k[2]:A(){};B(!bQ(2X)&&32.bP(2X)){u 32.3O(2X,1N)}}o.2X=1v.8Z.4i();o.7D=o.5g=L;o.6z={x:0,y:0};o.bH=2r;o.7R=2r;o.6D=[];o.8S=[];o.8P=[];o.6N=L;o.bl=2r;o.du=1y 4K(o);o.4S=1y 1P(o);o.bi(A(){1D.bh(1k);u 1D.bg()});u o}S{u 1y D(1l)}}D.N.bi=A(cb){M 8H,1D=o;B(D.2O){u 8q(A(){u cb.1w(1D)},0)}S{B(2p.9q==="8D"){1Y.2x("aU aT");u 8q(A(){u cb.1w(1D)},0)}S{8H=A(){B(2p.9q==="8D"){1Y.2x("aU aT");u cb.1w(1D)}};u 2p.aS("dE",8H,2r)}}};D.N.bh=A(1k){M 2t,2f,K,1o;B(1k.P===0){2V"6i 1l aQ";}o.3b=L;o.8A=L;o.8z=L;o.1N=A(){};o.aM(1k[0]);B(1k.P===1){u}61(1r 1k[1]){2i"3j":o.8z=1k[1];4Z;2i"A":o.1N=1k[1]}B(1k.P===2){u}o.1N=1k[2];B(1k.P===4){K=1k[4];1o=[];W(2t 5h K){B(!74.1w(K,2t))5I;2f=K[2t];1o.2j(o.1F[2t]=2f)}u 1o}};D.N.aM=A(2C){B(D.2O){o.3b=2C;o.8A=\'ay\';u}B(1r 2C==="44"){o.3b=2C}S{o.3b=$(2C)}B(o.3b==L){2V"dN dO dV 1f d3 I W dX.";}u o.8A=o.3b.9U.6P()};D.N.bg=A(){61(o.8A){2i"ay":u o.cN();2i"1K":u o.cE();2i"I":u o.cx()}};D.N.cN=A(){1Y.2x("e8 W 2O");B(1r o.3b==="3j"&&o.3b.7W(/^ch?:\\/\\//)){u o.cf(o.3b,o.6d)}S B(1r o.3b==="3j"){u fs.eb(o.3b,o.6d)}S{u o.6d(L,o.3b)}};D.N.cf=A(6u,1N){M 9z;1Y.2x("fj 1f 4M "+6u);9z=6y.4i(6u,A(4p){M 7O;7O=\'\';4p.fk(\'aP\');4p.9B(\'29\',A(at){u 7O+=at});u 4p.9B(\'1Q\',A(){u 1N(L,1y fp(7O,\'aP\'))})});u 9z.9B(\'9C\',1N)};D.N.6d=A(6G,29){B(6G){2V 6G;}o.1f=1y 4V();o.1f.1G=29;1Y.2x("4V cS. cD = "+(o.5b())+", cy = "+(o.4W()));o.I=1y 3S(o.5b(),o.4W());u o.6k()};D.N.cE=A(){o.1f=o.3b;o.I=2p.3K(\'I\');o.1i=o.I.3h(\'2d\');1v.5H(o.1f,o.I,{8W:[\'1G\']});B(o.1f.7c!=L){o.1f.7c.9D(o.I,o.1f)}o.9J();u o.9L()};D.N.cx=A(){o.I=o.3b;o.1i=o.I.3h(\'2d\');B(o.8z!=L){o.1f=2p.3K(\'1K\');o.1f.1G=o.8z;o.9J();u o.9L()}S{u o.6k()}};D.N.9J=A(){B(o.9M()){1Y.2x(o.1f.1G,"->",o.8m());o.bd=31;o.1f.1G=o.8m()}B(2N.bb(o.1f)){o.1f.1G=2N.57(o.1f.1G);u 1Y.2x("fu 1f fx, fD cQ = "+o.1f.1G)}};D.N.9L=A(){B(o.cB()){u o.6H()}S{u o.1f.cr=o.6H}};D.N.cB=A(){B(!o.1f.8D){u 2r}B((o.1f.9P!=L)&&o.1f.9P===0){u 2r}u 31};D.N.5b=A(){u o.1f.F||o.1f.9P};D.N.4W=A(){u o.1f.J||o.1f.fN};D.N.6H=A(){1Y.2x("4V cS. cD = "+(o.5b())+", cy = "+(o.4W()));B(o.bd){o.I.F=o.5b()/o.7G();o.I.J=o.4W()/o.7G()}S{o.I.F=o.5b();o.I.J=o.4W()}u o.6k()};D.N.6k=A(){M i,1u,H,1n,K;B(o.1i==L){o.1i=o.I.3h(\'2d\')}o.51=o.6W=o.F=o.I.F;o.5D=o.6Y=o.J=o.I.J;o.d9();B(!o.c7()){o.c6()}B(o.1f!=L){o.1i.5U(o.1f,0,0,o.5b(),o.4W(),0,0,o.6W,o.6Y)}o.2y=o.1i.48(0,0,o.I.F,o.I.J);o.T=o.2y.29;B(D.6r){o.7D=1v.6F(o.T.P);o.5g=1v.6F(o.T.P);K=o.T;W(i=H=0,1n=K.P;H<1n;i=++H){1u=K[i];o.7D[i]=1u;o.5g[i]=1u}}o.1d={F:o.I.F,J:o.I.J};B(!D.2O){32.c4(o.2X,o)}o.1N.1w(o,o);u o.1N=A(){}};D.N.c1=A(){o.2y=o.1i.48(0,0,o.I.F,o.I.J);u o.T=o.2y.29};D.N.g3=A(){M i,1u,H,1n,K,1o;B(!D.6r){2V"a0 7F";}o.5g=1v.6F(o.T.P);K=o.T;1o=[];W(i=H=0,1n=K.P;H<1n;i=++H){1u=K[i];1o.2j(o.5g[i]=1u)}u 1o};D.N.c7=A(){u D.9m(o.I)!=L};D.N.c6=A(){B(D.2O||o.I.6c(\'29-3E-2X\')){u}u o.I.cR(\'29-3E-2X\',o.2X)};D.N.aE=A(){u o.I.6c(\'29-3E-cO-7F\')!==L};D.N.d9=A(){M 4d;B(D.2O||!o.9M()){u}4d=o.7G();B(4d!==1){1Y.2x("g4 4d = "+4d);o.bl=31;o.6W=o.I.F;o.6Y=o.I.J;o.I.F=o.6W*4d;o.I.J=o.6Y*4d;o.I.c8.F=""+o.6W+"c5";o.I.c8.J=""+o.6Y+"c5";o.1i.g6(4d,4d);o.F=o.51=o.I.F;u o.J=o.5D=o.I.J}};D.N.7G=A(){M a3,4j;4j=4N.4j||1;a3=o.1i.g7||o.1i.gi||o.1i.gk||o.1i.gm||o.1i.go||1;u 4j/a3};D.N.aZ=A(){u(4N.4j!=L)&&4N.4j!==1};D.N.9M=A(){B(o.aE()||!o.aZ()){u 2r}u o.8m()!==L};D.N.8m=A(){B(o.1f==L){u L}u o.1f.6c(\'29-3E-cO\')};D.N.73=A(aD){M 7z;7z=o.I;o.I=aD;o.1i=o.I.3h(\'2d\');B(!D.2O){7z.7c.9D(o.I,7z)}o.F=o.I.F;o.J=o.I.J;o.c1();u o.1d={F:o.I.F,J:o.I.J}};D.N.a8=A(1N){M 1D=o;B(1N==L){1N=A(){}}2Q.4Y(o,"aX");u o.4S.3O(A(){1D.1i.7x(1D.2y,0,0);u 1N.1w(1D)})};D.N.gu=A(8e){M i,1u,H,1n,K;B(8e==L){8e=31}B(!D.6r){2V"a0 7F";}K=o.d2();W(i=H=0,1n=K.P;H<1n;i=++H){1u=K[i];o.T[i]=1u}B(8e){u o.1i.7x(o.2y,0,0)}};D.N.gt=A(){M I,1W,i,2y,1u,T,H,1n,K;I=2p.3K(\'I\');1v.5H(o.I,I);I.F=o.51;I.J=o.5D;1W=I.3h(\'2d\');2y=1W.48(0,0,I.F,I.J);T=2y.29;K=o.7D;W(i=H=0,1n=K.P;H<1n;i=++H){1u=K[i];T[i]=1u}1W.7x(2y,0,0);o.6z={x:0,y:0};o.7R=2r;u o.73(I)};D.N.d2=A(){M I,7E,1W,26,a6,i,2y,1u,T,Y,72,8k,8w,F,H,1e,1n,K,3T,4o,a5;B(!D.6r){2V"a0 7F";}Y=[];8k=o.6z.x;26=8k+o.F;8w=o.6z.y;a6=8w+o.J;B(o.7R){I=2p.3K(\'I\');I.F=o.51;I.J=o.5D;1W=I.3h(\'2d\');2y=1W.48(0,0,I.F,I.J);T=2y.29;K=o.5g;W(i=H=0,1n=K.P;H<1n;i=++H){1u=K[i];T[i]=1u}1W.7x(2y,0,0);72=2p.3K(\'I\');72.F=o.F;72.J=o.J;1W=72.3h(\'2d\');1W.5U(I,0,0,o.51,o.5D,0,0,o.F,o.J);T=1W.48(0,0,o.F,o.J).29;F=o.F}S{T=o.5g;F=o.51}W(i=1e=0,3T=T.P;1e<3T;i=1e+=4){7E=28.cl(i,F);B(((8k<=(4o=7E.x)&&4o<26))&&((8w<=(a5=7E.y)&&a5<a6))){Y.2j(T[i],T[i+1],T[i+2],T[i+3])}}u Y};D.N.2m=A(1q,7n){o.4S.4k({1t:R.3g.a2,1q:1q,7n:7n});u o};D.N.3I=A(1q,Q,2K,3e){M i,H,K;B(2K==L){2K=L}B(3e==L){3e=0}B(2K==L){2K=0;W(i=H=0,K=Q.P;0<=K?H<K:H>K;i=0<=K?++H:--H){2K+=Q[i]}}o.4S.4k({1t:R.3g.a1,1q:1q,Q:Q,2K:2K,3e:3e});u o};D.N.5a=A(4b,1k){o.4S.4k({1t:R.3g.2w,4b:4b,1k:1k});u o};D.N.2Z=A(1N){M 2a;2a=1y 39(o);o.8P.2j(2a);o.4S.4k({1t:R.3g.9Z});1N.1w(2a);o.4S.4k({1t:R.3g.9Y});u o};D.N.bm=A(2a){u o.bn(2a)};D.N.bn=A(2a){o.8S.2j(o.6N);o.6D.2j(o.T);o.6N=2a;u o.T=2a.T};D.N.bx=A(){o.T=o.6D.6o();u o.6N=o.8S.6o()};D.N.bO=A(){u o.6N.bU()};u D})(3L);7V.D=D;D.4K=(A(){A 4K(c){o.c=c}4K.N.fX=A(){M i,3B,71,H,1e,1I,K;3B={r:{},g:{},b:{}};W(i=H=0;H<=E;i=++H){3B.r[i]=0;3B.g[i]=0;3B.b[i]=0}W(i=1e=0,K=o.c.T.P;1e<K;i=1e+=4){3B.r[o.c.T[i]]++;3B.g[o.c.T[i+1]]++;3B.b[o.c.T[i+2]]++}71=o.c.T.P/4;W(i=1I=0;1I<=E;i=++1I){3B.r[i]/=71;3B.g[i]/=71;3B.b[i]/=71}u 3B};u 4K})();4K=D.4K;D.9X=A(){M 1K,6Z,cA,H,1n,1o;6Z=2p.fU("1K[29-3E]");B(!(6Z.P>0)){u}1o=[];W(H=0,1n=6Z.P;H<1n;H++){1K=6Z[H];1o.2j(cA=1y 54(1K,A(){o.cI();u o.3O()}))}u 1o};B(D.ci){(A(){B(2p.9q==="8D"){u D.9X()}S{u 2p.aS("fT",D.9X,2r)}})()}54=(A(){M 8g;8g="(\\\\w+)\\\\((.*?)\\\\)";A 54(46,db){o.ab=46.6c(\'29-3E\');o.3E=D(46,db.98(o))}54.N.cI=A(){M 1k,e,1C,5j,9W,9V,m,r,6X,H,1n,K,1o;o.46=o.3E.I;r=1y bf(8g,\'g\');6X=o.ab.7W(r);B(!(6X.P>0)){u}r=1y bf(8g);1o=[];W(H=0,1n=6X.P;H<1n;H++){9W=6X[H];K=9W.7W(r),m=K[0],1C=K[1],1k=K[2];9V=1y fO("u A() { o."+1C+"("+1k+"); };");9S{5j=9V();1o.2j(5j.1w(o.3E))}9R(5C){e=5C;1o.2j(1Y.2x(e))}}u 1o};54.N.3O=A(){M 46;46=o.46;u o.3E.a8(A(){u 46.7c.9D(o.bJ(),46)})};u 54})();D.2k=(A(){A 2k(){}2k.9Q={};2k.V=A(1q,5j){u o.9Q[1q]=5j};2k.3O=A(1q,Z,X){u o.9Q[1q](Z,X)};u 2k})();2k=D.2k;D.2b=(A(){A 2b(){}2b.52=A(6U,6S,6R,6Q){u O.7L(O.1T(6R-6U,2)+O.1T(6Q-6S,2))};2b.ce=A(1M,1c,6M){M 4s;B(6M==L){6M=2r}4s=1M+(O.fL()*(1c-1M));B(6M){u 4s.fH(6M)}S{u O.62(4s)}};2b.6L=A(C){u(0.9O*C.r)+(0.fF*C.g)+(0.fE*C.b)};2b.2h=A(1J,4H,4G,1Q,58,59){M 2h,5r,2F,26,i,j,5s,1S,3G,t,H,1e,K;B(58==L){58=0}B(59==L){59=E}B(1J[0]bY 5T){2F=1J;58=4H;59=4G}S{2F=[1J,4H,4G,1Q]}B(2F.P<2){2V"6i 8s 9K 1l 3N 2h";}2h={};5s=A(a,b,t){u a*(1-t)+b*t};5r=A(a,1M,1c){u O.1M(O.1c(a,1M),1c)};W(i=H=0;H<bI;i=++H){t=i/bI;3G=2F;9I(3G.P>1){1S=[];W(j=1e=0,K=3G.P-2;0<=K?1e<=K:1e>=K;j=0<=K?++1e:--1e){1S.2j([5s(3G[j][0],3G[j+1][0],t),5s(3G[j][1],3G[j+1][1],t)])}3G=1S}2h[O.62(3G[0][0])]=O.62(5r(3G[0][1],58,59))}26=2F[2F.P-1][0];2h=D.2b.9H(2h,26);B(2h[26]==L){2h[26]=2h[26-1]}u 2h};2b.bR=A(2F,58,59){M 4k,5r,9G,26,8C,76,77,78,i,j,5s,9F,9E,4A,p,5A,5B,4u,7g,7i,3p,7k,t,H,1e,K,1D=o;B(2F.P<2){2V"6i 8s 9K 1l 3N bR";}3p={};5s=A(a,b,t){u a*(1-t)+b*t};4k=A(a,b,c,d){u[a[0]+b[0]+c[0]+d[0],a[1]+b[1]+c[1]+d[1]]};4A=A(a,b){u[a[0]*b[0],a[1]*b[1]]};7k=A(a,b){u[a[0]-b[0],a[1]-b[1]]};5r=A(a,1M,1c){u O.1M(O.1c(a,1M),1c)};9G=0;W(i=H=0,K=2F.P-2;0<=K?H<=K:H>=K;i=0<=K?++H:--H){5A=2F[i];5B=2F[i+1];4u=5B[0]-5A[0];7g=1/4u;B(i===2F.P-2){7g=1/(4u-1)}p=i>0?2F[i-1]:5A;9F=4A(7k(5B,p),[0.5,0.5]);p=i<2F.P-2?2F[i+2]:5B;9E=4A(7k(p,5A),[0.5,0.5]);W(j=1e=0;0<=4u?1e<=4u:1e>=4u;j=0<=4u?++1e:--1e){t=j*7g;8C=2.0*t*t*t-3.0*t*t+1.0;76=t*t*t-2.0*t*t+t;77=-2.0*t*t*t+3.0*t*t;78=t*t*t-t*t;7i=4k(4A(5A,[8C,8C]),4A(9F,[76,76]),4A(5B,[77,77]),4A(9E,[78,78]));3p[O.62(7i[0])]=O.62(5r(7i[1],58,59));9G+=1}}26=2F[2F.P-1][0];3p=D.2b.9H(3p,26);u 3p};2b.9H=A(5c,26){M i,j,5F,3p,7s,H,1e;B(bc.ft(5c).P<26+1){3p={};W(i=H=0;0<=26?H<=26:H>=26;i=0<=26?++H:--H){B(5c[i]!=L){3p[i]=5c[i]}S{5F=[i-1,3p[i-1]];W(j=1e=i;i<=26?1e<=26:1e>=26;j=i<=26?++1e:--1e){B(5c[j]!=L){7s=[j,5c[j]];4Z}}3p[i]=5F[1]+((7s[1]-5F[1])/(7s[0]-5F[0]))*(i-5F[0])}}u 3p}u 5c};u 2b})();2b=D.2b;D.1X=(A(){A 1X(){}1X.7u=A(3F){M b,g,r;B(3F.fr(0)==="#"){3F=3F.5d(1)}r=49(3F.5d(0,2),16);g=49(3F.5d(2,2),16);b=49(3F.5d(4,2),16);u{r:r,g:g,b:b}};1X.fq=A(r,g,b){M d,h,l,1c,1M,s;B(1r r==="44"){g=r.g;b=r.b;r=r.r}r/=E;g/=E;b/=E;1c=O.1c(r,g,b);1M=O.1M(r,g,b);l=(1c+1M)/2;B(1c===1M){h=s=0}S{d=1c-1M;s=l>0.5?d/(2-1c-1M):d/(1c+1M);h=(A(){61(1c){2i r:u(g-b)/d+(g<b?6:0);2i g:u(b-r)/d+2;2i b:u(r-g)/d+4}})();h/=6}u{h:h,s:s,l:l}};1X.fm=A(h,s,l){M b,g,p,q,r;B(1r h==="44"){s=h.s;l=h.l;h=h.h}B(s===0){r=g=b=l}S{q=l<0.5?l*(1+s):l+s-l*s;p=2*l-q;r=o.7I(p,q,h+1/3);g=o.7I(p,q,h);b=o.7I(p,q,h-1/3)}u{r:r*E,g:g*E,b:b*E}};1X.7I=A(p,q,t){B(t<0){t+=1}B(t>1){t-=1}B(t<1/6){u p+(q-p)*6*t}B(t<1/2){u q}B(t<2/3){u p+(q-p)*(2/3-t)*6}u p};1X.aL=A(r,g,b){M d,h,1c,1M,s,v;r/=E;g/=E;b/=E;1c=O.1c(r,g,b);1M=O.1M(r,g,b);v=1c;d=1c-1M;s=1c===0?0:d/1c;B(1c===1M){h=0}S{h=(A(){61(1c){2i r:u(g-b)/d+(g<b?6:0);2i g:u(b-r)/d+2;2i b:u(r-g)/d+4}})();h/=6}u{h:h,s:s,v:v}};1X.aW=A(h,s,v){M b,f,g,i,p,q,r,t;i=O.2P(h*6);f=h*6-i;p=v*(1-s);q=v*(1-f*s);t=v*(1-(1-f)*s);61(i%6){2i 0:r=v;g=t;b=p;4Z;2i 1:r=q;g=v;b=p;4Z;2i 2:r=p;g=v;b=t;4Z;2i 3:r=p;g=q;b=v;4Z;2i 4:r=t;g=p;b=v;4Z;2i 5:r=v;g=p;b=q}u{r:O.2P(r*E),g:O.2P(g*E),b:O.2P(b*E)}};1X.b1=A(r,g,b){M x,y,z;r/=E;g/=E;b/=E;B(r>0.9A){r=O.1T((r+0.3n)/1.3n,2.4)}S{r/=12.92}B(g>0.9A){g=O.1T((g+0.3n)/1.3n,2.4)}S{g/=12.92}B(b>0.9A){b=O.1T((b+0.3n)/1.3n,2.4)}S{b/=12.92}x=r*0.fi+g*0.fh+b*0.fg;y=r*0.bp+g*0.bs+b*0.bv;z=r*0.ff+g*0.fe+b*0.fd;u{x:x*1j,y:y*1j,z:z*1j}};1X.fc=A(x,y,z){M b,g,r;x/=1j;y/=1j;z/=1j;r=(3.fa*x)+(-1.f9*y)+(-0.f8*z);g=(-0.f7*x)+(1.f6*y)+(0.f5*z);b=(0.f4*x)+(-0.f3*y)+(1.f1*z);B(r>0.9v){r=(1.3n*O.1T(r,0.9u))-0.3n}S{r*=12.92}B(g>0.9v){g=(1.3n*O.1T(g,0.9u))-0.3n}S{g*=12.92}B(b>0.9v){b=(1.3n*O.1T(b,0.9u))-0.3n}S{b*=12.92}u{r:r*E,g:g*E,b:b*E}};1X.c9=A(x,y,z){M a,b,l,9s,9r,8E;B(1r x==="44"){y=x.y;z=x.z;x=x.x}9s=95.cn;9r=1j.0;8E=9n.cu;x/=9s;y/=9r;z/=8E;B(x>0.9l){x=O.1T(x,0.9k)}S{x=(7.9j*x)+0.69}B(y>0.9l){y=O.1T(y,0.9k)}S{y=(7.9j*y)+0.69}B(z>0.9l){z=O.1T(z,0.9k)}S{z=(7.9j*z)+0.69}l=cF*y-16;a=cG*(x-y);b=6a*(y-z);u{l:l,a:a,b:b}};1X.f0=A(l,a,b){M x,y,z;B(1r l==="44"){a=l.a;b=l.b;l=l.l}y=(l+16)/cF;x=y+(a/cG);z=y-(b/6a);B(x>0.9i){x=x*x*x}S{x=0.9h*(x-0.69)}B(y>0.9i){y=y*y*y}S{y=0.9h*(y-0.69)}B(z>0.9i){z=z*z*z}S{z=0.9h*(z-0.69)}u{x:x*95.cn,y:y*1j.0,z:z*9n.cu}};1X.eZ=A(r,g,b){M 9f;B(1r r==="44"){g=r.g;b=r.b;r=r.r}9f=o.b1(r,g,b);u o.c9(9f)};1X.eY=A(l,a,b){};u 1X})();1X=D.1X;D.2Q=(A(){A 2Q(){}2Q.5n={};2Q.cU=["cV","cW","aX","d0","d1","6g"];2Q.4Y=A(38,1t,29){M 6m,H,1n,K,1o;B(29==L){29=L}B(o.5n[1t]&&o.5n[1t].P){K=o.5n[1t];1o=[];W(H=0,1n=K.P;H<1n;H++){6m=K[H];B(6m.38===L||38.2X===6m.38.2X){1o.2j(6m.fn.1w(38,29))}S{1o.2j(da 0)}}u 1o}};2Q.eX=A(38,1t,fn){M 9e,9d;B(1r 38==="3j"){9d=38;9e=1t;38=L;1t=9d;fn=9e}B(6s.1w(o.cU,1t)<0){u 2r}B(!o.5n[1t]){o.5n[1t]=[]}o.5n[1t].2j({38:38,fn:fn});u 31};u 2Q})();2Q=D.2Q;D.R=(A(){A R(){}R.3g={a2:1,a1:2,9Z:3,9Y:4,9c:5,2w:6};R.V=A(1q,ah){u D.N[1q]=ah};u R})();R=D.R;D.2N=(A(){A 2N(){}2N.aq=/(?:(?:6y|ch):\\/\\/)((?:\\w+)\\.(?:(?:\\w|\\.)+))/;2N.bb=A(1K){B(1K==L){u 2r}B(o.as(1K)){u 2r}u o.7j(1K.1G)};2N.as=A(1K){M K;u(1K.9t!=L)&&((K=1K.9t.6P())===\'cm\'||K===\'ax-eW\')};2N.7j=A(6u){M 7l;7l=6u.7W(o.aq);B(7l){u 7l[1]!==2p.eV}S{u 2r}};2N.aK=A(1G){B(o.7j(1G)){B(!D.8t.P){1Y.99("eS 3N eR a aV 1f eN a eM aY. cQ: "+1G)}S{B(D.7j(D.8t)){1Y.99("eL ax a aV aY W eK eI.");u}u o.57(1G)}}};2N.57=A(1G){u""+D.8t+"?"+D.ck+"="+(eG(1G))};2N.eD=A(5k){M 7w;7w={eC:\'eB\',eA:\'ez\',ey:\'ex\',ew:\'ev\'};5k=5k.6P();B(7w[5k]!=L){5k=7w[5k]}u"eu/es."+5k};u 2N})();D.N.bB=A(){B(1r 2g!=="42"&&2g!==L){u o.bC.4r(o,1l)}S{u o.bD.4r(o,1l)}};D.N.bD=A(1t){M 1f;B(1t==L){1t="bG"}1t=1t.6P();1f=o.94(1t).er("1f/"+1t,"1f/eq-ep");u 2p.eo.en=1f};D.N.bC=A(5R,7J,1N){M e,91;B(7J==L){7J=31}B(1N==L){1N=L}9S{91=fs.em(5R);B(91.ek()&&!7J){u 2r}}9R(5C){e=5C;1Y.2x("ej eh 5R "+5R)}u fs.eg(5R,o.I.ef(),A(6G){1Y.2x("ee ed 3N "+5R);B(1N){u 1N.1w(o,6G)}})};D.N.bJ=A(1t){M 1K;1K=1y 4V();1K.1G=o.94(1t);1K.F=o.1d.F;1K.J=o.1d.J;B(4N.4j){1K.F/=4N.4j;1K.J/=4N.4j}u 1K};D.N.94=A(1t){B(1t==L){1t="bG"}1t=1t.6P();u o.I.ec("1f/"+1t)};2N=D.2N;D.39=(A(){A 39(c){o.c=c;o.1C=o.c;o.1F={8Y:\'8X\',2q:1.0};o.ea=1v.8Z.4i();o.I=1r 2g!=="42"&&2g!==L?1y 3S():2p.3K(\'I\');o.I.F=o.c.1d.F;o.I.J=o.c.1d.J;o.1i=o.I.3h(\'2d\');o.1i.e9(o.I.F,o.I.J);o.2y=o.1i.48(0,0,o.I.F,o.I.J);o.T=o.2y.29}39.N.2Z=A(cb){u o.c.2Z.1w(o.c,cb)};39.N.3q=A(cg){o.1F.8Y=cg;u o};39.N.2q=A(2q){o.1F.2q=2q/1j;u o};39.N.4n=A(){M i,2Y,H,K;2Y=o.c.T;W(i=H=0,K=o.c.T.P;H<K;i=H+=4){o.T[i]=2Y[i];o.T[i+1]=2Y[i+1];o.T[i+2]=2Y[i+2];o.T[i+3]=2Y[i+3]}u o};39.N.4B=A(){u o.c.4B.4r(o.c,1l)};39.N.e7=A(1f){B(1r 1f==="44"){1f=1f.1G}S B(1r 1f==="3j"&&1f[0]==="#"){1f=$(1f).1G}B(!1f){u o}o.c.4S.6I.2j({1t:R.3g.9c,1G:1f,2a:o});u o};39.N.bU=A(){M i,56,2Y,1E,Z,X,H,K,1o;2Y=o.c.6D[o.c.6D.P-1];56=o.c.T;1o=[];W(i=H=0,K=56.P;H<K;i=H+=4){X={r:2Y[i],g:2Y[i+1],b:2Y[i+2],a:2Y[i+3]};Z={r:56[i],g:56[i+1],b:56[i+2],a:56[i+3]};1E=2k.3O(o.1F.8Y,Z,X);1E.r=1v.3H(1E.r);1E.g=1v.3H(1E.g);1E.b=1v.3H(1E.b);B(1E.a==L){1E.a=Z.a}2Y[i]=X.r-((X.r-1E.r)*(o.1F.2q*(1E.a/E)));2Y[i+1]=X.g-((X.g-1E.g)*(o.1F.2q*(1E.a/E)));1o.2j(2Y[i+2]=X.b-((X.b-1E.b)*(o.1F.2q*(1E.a/E))))}u 1o};u 39})();39=D.39;D.82=(A(){A 82(){M 1q,H,1n,K;K=[\'cz\',\'99\',\'e5\',\'9C\'];W(H=0,1n=K.P;H<1n;H++){1q=K[H];o[1q]=(A(1q){u A(){M 1k,e;1k=1<=1l.P?5W.1w(1l,0):[];B(!D.co){u}9S{u 8V[1q].4r(8V,1k)}9R(5C){e=5C;u 8V[1q](1k)}}})(1q)}o.2x=o.cz}u 82})();1Y=1y D.82();D.28=(A(){28.8U=A(x,y,F){u(y*F+x)*4};28.cl=A(U,F){M x,y;y=O.2P(U/(F*4));x=(U%(F*4))/4;u{x:x,y:y}};A 28(r,g,b,a,c){o.r=r!=L?r:0;o.g=g!=L?g:0;o.b=b!=L?b:0;o.a=a!=L?a:E;o.c=c!=L?c:L;o.U=0}28.N.8T=A(c){u o.c=c};28.N.8R=A(){M x,y;B(o.c==L){2V"6b a 67 1i";}y=o.c.1d.J-O.2P(o.U/(o.c.1d.F*4));x=(o.U%(o.c.1d.F*4))/4;u{x:x,y:y}};28.N.8O=A(U){B(o.c==L){2V"6b a 67 1i";}u 1y 28(o.c.T[U],o.c.T[U+1],o.c.T[U+2],o.c.T[U+3],o.c)};28.N.cJ=A(8c,8d){M 3M;B(o.c==L){2V"6b a 67 1i";}3M=o.U+(o.c.1d.F*4*(8d*-1))+(4*8c);B(3M>o.c.T.P||3M<0){u 1y 28(0,0,0,E,o.c)}u o.8O(3M)};28.N.e4=A(8c,8d,C){M cP;B(o.c==L){2V"6b a 67 1i";}cP=o.U+(o.c.1d.F*4*(8d*-1))+(4*8c);B(3M>o.c.T.P||3M<0){u}o.c.T[3M]=C.r;o.c.T[3M+1]=C.g;o.c.T[3M+2]=C.b;o.c.T[3M+3]=C.a;u 31};28.N.e3=A(x,y){M U;B(o.c==L){2V"6b a 67 1i";}U=o.8U(x,y,o.F);u o.8O(U)};28.N.e2=A(x,y,C){M U;B(o.c==L){2V"6b a 67 1i";}U=o.8U(x,y,o.F);o.c.T[U]=C.r;o.c.T[U+1]=C.g;o.c.T[U+2]=C.b;u o.c.T[U+3]=C.a};28.N.65=A(){u o.e1()};28.N.e0=A(8f){M 3F;B(8f==L){8f=2r}3F=\'#\'+o.r.65(16)+o.g.65(16)+o.b.65(16);B(8f){u 3F+o.a.65(16)}S{u 3F}};u 28})();28=D.28;D.2w=(A(){A 2w(){}2w.8N={};2w.V=A(1q,4b){u o.8N[1q]=4b};2w.3O=A(1i,1q,1k){u o.8N[1q].4r(1i,1k)};u 2w})();2w=D.2w;D.1P=(A(){1P.4t=D.2O?6x(\'dZ\').dY().P:4;A 1P(c){o.c=c;o.4l=9x(o.4l,o);o.6I=[];o.53=L}1P.N.4k=A(8M){B(8M==L){u}u o.6I.2j(8M)};1P.N.4l=A(){M 2a;B(o.6I.P===0){2Q.4Y(o,"d0");B(o.8L!=L){o.8L.1w(o.c)}u o}o.2c=o.6I.d4();61(o.2c.1t){2i R.3g.9Z:2a=o.c.8P.d4();o.c.bm(2a);u o.4l();2i R.3g.9Y:o.c.bO();o.c.bx();u o.4l();2i R.3g.9c:u o.d5(o.2c.2a,o.2c.1G);2i R.3g.2w:u o.d6();dW:u o.d8()}};1P.N.3O=A(1N){o.8L=1N;o.53=1v.6F(o.c.T.P);u o.4l()};1P.N.8K=A(fn){M 6T,8J,2T,1Q,f,i,8I,n,1J,H,K,1o,1D=o;o.8p=0;n=o.c.T.P;8J=O.2P((n/4)/1P.4t);6T=8J*4;8I=6T+((n/4)%1P.4t)*4;1o=[];W(i=H=0,K=1P.4t;0<=K?H<K:H>K;i=0<=K?++H:--H){1J=i*6T;1Q=1J+(i===1P.4t-1?8I:6T);B(D.2O){f=6B(A(){u fn.1w(1D,i,1J,1Q)});2T=f.dU();1o.2j(o.6g(2T))}S{1o.2j(8q((A(i,1J,1Q){u A(){u fn.1w(1D,i,1J,1Q)}})(i,1J,1Q),0))}}u 1o};1P.N.d8=A(){2Q.4Y(o.c,"cV",o.2c);B(o.2c.1t===R.3g.a2){u o.8K(o.ae)}S{u o.8K(o.af)}};1P.N.d6=A(){1Y.2x("dT 4b "+o.2c.4b);2w.3O(o.c,o.2c.4b,o.2c.1k);1Y.2x("2w "+o.2c.4b+" 8G!");u o.4l()};1P.N.ae=A(2T,1J,1Q){M i,1u,H;1Y.2x("ai #"+2T+" - R: "+o.2c.1q+", dS: "+1J+", dR: "+1Q);2Q.4Y(o.c,"d1",{al:2T,am:1P.4t,dQ:1J,dP:1Q});1u=1y 28();1u.8T(o.c);W(i=H=1J;H<1Q;i=H+=4){1u.U=i;1u.r=o.c.T[i];1u.g=o.c.T[i+1];1u.b=o.c.T[i+2];1u.a=o.c.T[i+3];o.2c.7n(1u);o.c.T[i]=1v.3H(1u.r);o.c.T[i+1]=1v.3H(1u.g);o.c.T[i+2]=1v.3H(1u.b);o.c.T[i+3]=1v.3H(1u.a)}B(D.2O){u 6B["ap"](2T)}S{u o.6g(2T)}};1P.N.af=A(2T,1J,1Q){M Q,6V,3e,2U,5E,2K,i,j,k,2I,n,1q,p,1u,4p,H,1e,1I;1q=o.2c.1q;3e=o.2c.3e;2K=o.2c.2K;n=o.c.T.P;Q=o.2c.Q;6V=O.7L(Q.P);2I=[];1Y.2x("dM 2I - R: "+o.2c.1q);1J=O.1c(1J,o.c.1d.F*4*((6V-1)/2));1Q=O.1M(1Q,n-(o.c.1d.F*4*((6V-1)/2)));2U=(6V-1)/2;1u=1y 28();1u.8T(o.c);W(i=H=1J;H<1Q;i=H+=4){1u.U=i;5E=0;W(j=1e=-2U;-2U<=2U?1e<=2U:1e>=2U;j=-2U<=2U?++1e:--1e){W(k=1I=2U;2U<=-2U?1I<=-2U:1I>=-2U;k=2U<=-2U?++1I:--1I){p=1u.cJ(j,k);2I[5E*3]=p.r;2I[5E*3+1]=p.g;2I[5E*3+2]=p.b;5E++}}4p=o.3I(Q,2I,2K,3e);o.53[i]=1v.3H(4p.r);o.53[i+1]=1v.3H(4p.g);o.53[i+2]=1v.3H(4p.b);o.53[i+3]=o.c.T[i+3]}B(D.2O){u 6B["ap"](2T)}S{u o.6g(2T)}};1P.N.6g=A(2T){M i,H,K;B(2T>=0){1Y.2x("ai #"+2T+" 8G! R: "+o.2c.1q)}o.8p++;2Q.4Y(o.c,"6g",{al:2T,dL:o.8p,am:1P.4t});B(o.8p===1P.4t){B(o.2c.1t===R.3g.a1){W(i=H=0,K=o.c.T.P;0<=K?H<K:H>K;i=0<=K?++H:--H){o.c.T[i]=o.53[i]}}B(2T>=0){1Y.2x("R "+o.2c.1q+" 8G!")}2Q.4Y(o.c,"cW",o.2c);u o.4l()}};1P.N.3I=A(Q,2I,2K,3e){M i,2f,H,K;2f={r:0,g:0,b:0};W(i=H=0,K=Q.P;0<=K?H<K:H>K;i=0<=K?++H:--H){2f.r+=Q[i]*2I[i*3];2f.g+=Q[i]*2I[i*3+1];2f.b+=Q[i]*2I[i*3+2]}2f.r=(2f.r/2K)+3e;2f.g=(2f.g/2K)+3e;2f.b=(2f.b/2K)+3e;u 2f};1P.N.d5=A(2a,1G){M 1K,57,1D=o;1K=1y 4V();1K.cr=A(){2a.1i.5U(1K,0,0,1D.c.1d.F,1D.c.1d.J);2a.2y=2a.1i.48(0,0,1D.c.1d.F,1D.c.1d.J);2a.T=2a.2y.29;1D.c.T=2a.T;u 1D.4l()};57=2N.aK(1G);u 1K.1G=57!=L?57:1G};u 1P})();1P=D.1P;D.32=(A(){A 32(){}32.5p={};32.bP=A(4Q){u o.5p[4Q]!=L};32.4i=A(4Q){u o.5p[4Q]};32.c4=A(1q,2C){u o.5p[1q]=2C};32.3O=A(4Q,1N){M 1D=o;8q(A(){u 1N.1w(1D.4i(4Q),1D.4i(4Q))},0);u o.4i(4Q)};32.dK=A(1q){B(1q==L){1q=2r}B(1q){u aA o.5p[1q]}S{u o.5p={}}};u 32})();32=D.32;2k.V("8X",A(Z,X){u{r:Z.r,g:Z.g,b:Z.b}});2k.V("5o",A(Z,X){u{r:(Z.r*X.r)/E,g:(Z.g*X.g)/E,b:(Z.b*X.b)/E}});2k.V("dJ",A(Z,X){u{r:E-(((E-Z.r)*(E-X.r))/E),g:E-(((E-Z.g)*(E-X.g))/E),b:E-(((E-Z.b)*(E-X.b))/E)}});2k.V("8v",A(Z,X){M 1E;1E={};1E.r=X.r>1g?E-2*(E-Z.r)*(E-X.r)/E:(X.r*Z.r*2)/E;1E.g=X.g>1g?E-2*(E-Z.g)*(E-X.g)/E:(X.g*Z.g*2)/E;1E.b=X.b>1g?E-2*(E-Z.b)*(E-X.b)/E:(X.b*Z.b*2)/E;u 1E});2k.V("dI",A(Z,X){u{r:Z.r-X.r,g:Z.g-X.g,b:Z.b-X.b}});2k.V("aG",A(Z,X){u{r:X.r+Z.r,g:X.g+Z.g,b:X.b+Z.b}});2k.V("dH",A(Z,X){u{r:1g-2*(X.r-1g)*(Z.r-1g)/E,g:1g-2*(X.g-1g)*(Z.g-1g)/E,b:1g-2*(X.b-1g)*(Z.b-1g)/E}});2k.V("aI",A(Z,X){M 1E;1E={};1E.r=X.r>1g?E-((E-X.r)*(E-(Z.r-1g)))/E:(X.r*(Z.r+1g))/E;1E.g=X.g>1g?E-((E-X.g)*(E-(Z.g-1g)))/E:(X.g*(Z.g+1g))/E;1E.b=X.b>1g?E-((E-X.b)*(E-(Z.b-1g)))/E:(X.b*(Z.b+1g))/E;u 1E});2k.V("dG",A(Z,X){u{r:X.r>Z.r?X.r:Z.r,g:X.g>Z.g?X.g:Z.g,b:X.b>Z.b?X.b:Z.b}});2k.V("gx",A(Z,X){u{r:X.r>Z.r?Z.r:X.r,g:X.g>Z.g?Z.g:X.g,b:X.b>Z.b?Z.b:X.b}});R.V("4B",A(){M 3c;B(1l.P===1){3c=1X.7u(1l[0])}S{3c={r:1l[0],g:1l[1],b:1l[2]}}u o.2m("4B",A(C){C.r=3c.r;C.g=3c.g;C.b=3c.b;C.a=E;u C})});R.V("3A",A(Q){Q=O.2P(E*(Q/1j));u o.2m("3A",A(C){C.r+=Q;C.g+=Q;C.b+=Q;u C})});R.V("3D",A(Q){Q*=-0.dF;u o.2m("3D",A(C){M 1c;1c=O.1c(C.r,C.g,C.b);B(C.r!==1c){C.r+=(1c-C.r)*Q}B(C.g!==1c){C.g+=(1c-C.g)*Q}B(C.b!==1c){C.b+=(1c-C.b)*Q}u C})});R.V("3Y",A(Q){Q*=-1;u o.2m("3Y",A(C){M 1p,4E,1c;1c=O.1c(C.r,C.g,C.b);4E=(C.r+C.g+C.b)/3;1p=((O.4D(1c-4E)*2/E)*Q)/1j;B(C.r!==1c){C.r+=(1c-C.r)*1p}B(C.g!==1c){C.g+=(1c-C.g)*1p}B(C.b!==1c){C.b+=(1c-C.b)*1p}u C})});R.V("4C",A(Q){u o.2m("4C",A(C){M 4E;4E=2b.6L(C);C.r=4E;C.g=4E;C.b=4E;u C})});R.V("2u",A(Q){Q=O.1T((Q+1j)/1j,2);u o.2m("2u",A(C){C.r/=E;C.r-=0.5;C.r*=Q;C.r+=0.5;C.r*=E;C.g/=E;C.g-=0.5;C.g*=Q;C.g+=0.5;C.g*=E;C.b/=E;C.b-=0.5;C.b*=Q;C.b+=0.5;C.b*=E;u C})});R.V("8F",A(Q){u o.2m("8F",A(C){M b,g,h,4X,r,K;4X=1X.aL(C.r,C.g,C.b);h=4X.h*1j;h+=O.4D(Q);h=h%1j;h/=1j;4X.h=h;K=1X.aW(4X.h,4X.s,4X.v),r=K.r,g=K.g,b=K.b;C.r=r;C.g=g;C.b=b;u C})});R.V("4e",A(){M 5Q,3f;B(1l.P===2){3f=1X.7u(1l[0]);5Q=1l[1]}S B(1l.P===4){3f={r:1l[0],g:1l[1],b:1l[2]};5Q=1l[3]}u o.2m("4e",A(C){C.r-=(C.r-3f.r)*(5Q/1j);C.g-=(C.g-3f.g)*(5Q/1j);C.b-=(C.b-3f.b)*(5Q/1j);u C})});R.V("b0",A(){u o.2m("b0",A(C){C.r=E-C.r;C.g=E-C.g;C.b=E-C.b;u C})});R.V("4a",A(Q){B(Q==L){Q=1j}Q/=1j;u o.2m("4a",A(C){C.r=O.1M(E,(C.r*(1-(0.dD*Q)))+(C.g*(0.dC*Q))+(C.b*(0.dB*Q)));C.g=O.1M(E,(C.r*(0.dA*Q))+(C.g*(1-(0.dz*Q)))+(C.b*(0.dy*Q)));C.b=O.1M(E,(C.r*(0.dx*Q))+(C.g*(0.dw*Q))+(C.b*(1-(0.dv*Q))));u C})});R.V("2v",A(Q){u o.2m("2v",A(C){C.r=O.1T(C.r/E,Q)*E;C.g=O.1T(C.g/E,Q)*E;C.b=O.1T(C.b/E,Q)*E;u C})});R.V("8n",A(Q){Q=O.4D(Q)*2.55;u o.2m("8n",A(C){M 4s;4s=2b.ce(Q*-1,Q);C.r+=4s;C.g+=4s;C.b+=4s;u C})});R.V("8l",A(Q){Q=O.4D(Q)*2.55;u o.2m("8l",A(C){B(C.r>E-Q){C.r=E}S B(C.r<Q){C.r=0}B(C.g>E-Q){C.g=E}S B(C.g<Q){C.g=0}B(C.b>E-Q){C.b=E}S B(C.b<Q){C.b=0}u C})});R.V("3x",A(1F){M 5S,4q;B(1r 1F!=="44"){u o}W(5S 5h 1F){B(!74.1w(1F,5S))5I;4q=1F[5S];B(4q===0){aA 1F[5S];5I}1F[5S]/=1j}B(1F.P===0){u o}u o.2m("3x",A(C){B(1F.3d!=L){B(1F.3d>0){C.r+=(E-C.r)*1F.3d}S{C.r-=C.r*O.4D(1F.3d)}}B(1F.4U!=L){B(1F.4U>0){C.g+=(E-C.g)*1F.4U}S{C.g-=C.g*O.4D(1F.4U)}}B(1F.41!=L){B(1F.41>0){C.b+=(E-C.b)*1F.41}S{C.b-=C.b*O.4D(1F.41)}}u C})});R.V("2e",A(){M 6O,2h,43,3J,1Q,i,5X,1J,H,1e,K,3T;43=1l[0],3J=2<=1l.P?5W.1w(1l,1):[];5X=3J[3J.P-1];B(1r 5X==="A"){6O=5X;3J.6o()}S B(1r 5X==="3j"){6O=2b[5X];3J.6o()}S{6O=2b.2h}B(1r 43==="3j"){43=43.dt("")}B(43[0]==="v"){43=[\'r\',\'g\',\'b\']}B(3J.P<2){2V"6i 8s 9K 1l 3N 2e 1C";}2h=6O(3J,0,E);1J=3J[0];B(1J[0]>0){W(i=H=0,K=1J[0];0<=K?H<K:H>K;i=0<=K?++H:--H){2h[i]=1J[1]}}1Q=3J[3J.P-1];B(1Q[0]<E){W(i=1e=3T=1Q[0];3T<=E?1e<=E:1e>=E;i=3T<=E?++1e:--1e){2h[i]=1Q[1]}}u o.2m("2e",A(C){M 1I,4o;W(i=1I=0,4o=43.P;0<=4o?1I<4o:1I>4o;i=0<=4o?++1I:--1I){C[43[i]]=2h[C[43[i]]]}u C})});R.V("33",A(Q){M 4H,4G,p;p=O.4D(Q)/1j;4H=[0,E*p];4G=[E-(E*p),E];B(Q<0){4H=4H.bq();4G=4G.bq()}u o.2e(\'3f\',[0,0],4H,4G,[E,E])});D.2w.V("8Q",A(F,J,x,y){M I,1W;B(x==L){x=0}B(y==L){y=0}B(1r 2g!=="42"&&2g!==L){I=1y 3S(F,J)}S{I=2p.3K(\'I\');1v.5H(o.I,I);I.F=F;I.J=J}1W=I.3h(\'2d\');1W.5U(o.I,x,y,F,J,0,0,F,J);o.6z={x:x,y:y};o.bH=31;u o.73(I)});D.2w.V("88",A(2B){M I,1W;B(2B==L){2B=L}B(2B===L||((2B.F==L)&&(2B.J==L))){1Y.9C("6i d3 ds 1d aQ W 88");u}B(2B.F==L){2B.F=o.I.F*2B.J/o.I.J}S B(2B.J==L){2B.J=o.I.J*2B.F/o.I.F}B(1r 2g!=="42"&&2g!==L){I=1y 3S(2B.F,2B.J)}S{I=2p.3K(\'I\');1v.5H(o.I,I);I.F=2B.F;I.J=2B.J}1W=I.3h(\'2d\');1W.5U(o.I,0,0,o.I.F,o.I.J,0,0,2B.F,2B.J);o.7R=31;u o.73(I)});D.R.V("8Q",A(){u o.5a("8Q",5T.N.5f.1w(1l,0))});D.R.V("88",A(){u o.5a("88",5T.N.5f.1w(1l,0))});D.R.V("dr",A(){u o.3I("dq 85",[1,1,1,1,1,1,1,1,1])});D.R.V("dp",A(){u o.3I("do dn 85",[0,0,1,0,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1,0,0,0,1,0,0])});D.R.V("dm",A(){u o.3I("dl 85",[1,4,6,4,1,4,16,24,16,4,6,24,36,24,6,4,16,24,16,4,1,4,6,4,1])});D.R.V("dk",A(3C){M 2I;B(3C===0||3C===47){2I=[0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0]}S B((3C>0&&3C<90)||(3C>47&&3C<7K)){2I=[0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0]}S B(3C===90||3C===7K){2I=[0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0]}S{2I=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1]}u o.3I("dj 85",2I)});D.R.V("6w",A(1p){B(1p==L){1p=1j}1p/=1j;u o.3I("di",[0,-1p,0,-1p,4*1p+1,-1p,0,-1p,0])});9y={3A:A(C,1p,G){C.r=C.r-(C.r*1p*G.3i);C.g=C.g-(C.g*1p*G.3i);C.b=C.b-(C.b*1p*G.3i);u C},2v:A(C,1p,G){C.r=O.1T(C.r/E,O.1c(10*1p*G.3i,1))*E;C.g=O.1T(C.g/E,O.1c(10*1p*G.3i,1))*E;C.b=O.1T(C.b/E,O.1c(10*1p*G.3i,1))*E;u C},4e:A(C,1p,G){C.r-=(C.r-G.3c.r)*1p;C.g-=(C.g-G.3c.g)*1p;C.b-=(C.b-G.3c.b)*1p;u C}};R.V("1V",A(1s,3i){M 2h,3t,1Q,1J;B(3i==L){3i=60}B(1r 1s==="3j"&&1s.5d(-1)==="%"){B(o.1d.J>o.1d.F){1s=o.1d.F*(49(1s.5d(0,1s.P-1),10)/1j)}S{1s=o.1d.J*(49(1s.5d(0,1s.P-1),10)/1j)}}3i/=1j;3t=[o.1d.F/2,o.1d.J/2];1J=O.7L(O.1T(3t[0],2)+O.1T(3t[1],2));1Q=1J-1s;2h=2b.2h([0,1],[30,30],[70,60],[1j,80]);u o.2m("1V",A(C){M 7m,2J,U;U=C.8R();7m=2b.52(U.x,U.y,3t[0],3t[1]);B(7m>1Q){2J=O.1c(1,(2h[O.62(((7m-1Q)/1s)*1j)]/10)*3i);C.r=O.1T(C.r/E,2J)*E;C.g=O.1T(C.g/E,2J)*E;C.b=O.1T(C.b/E,2J)*E}u C})});R.V("bX",A(G){M 4c,6j,7h,1s,H,1n,K;4c={3i:50,2G:0,9g:\'3A\',3c:{r:0,g:0,b:0}};G=1v.7N(4c,G);B(!G.1s){u o}S B(1r G.1s==="3j"){7h=49(G.1s,10)/1j;G.1s={F:o.1d.F*7h,J:o.1d.J*7h}}S B(1r G.1s==="44"){K=["F","J"];W(H=0,1n=K.P;H<1n;H++){6j=K[H];B(1r G.1s[6j]==="3j"){G.1s[6j]=o.1d[6j]*(49(G.1s[6j],10)/1j)}}}S B(G.1s==="8s"){1s=G.1s;G.1s={F:1s,J:1s}}B(1r G.2G==="3j"){G.2G=(G.1s.F/2)*(49(G.2G,10)/1j)}G.3i/=1j;G.1s.F=O.2P(G.1s.F);G.1s.J=O.2P(G.1s.J);G.1f={F:o.1d.F,J:o.1d.J};B(G.9g==="4e"&&1r G.3c==="3j"){G.3c=1X.7u(G.3c)}G.1Z={5m:(o.1d.F-G.1s.F)/2,68:o.1d.F-G.1Z.5m,5l:(o.1d.J-G.1s.J)/2,66:o.1d.J-G.1Z.5l};G.1x=[{x:G.1Z.5m+G.2G,y:G.1Z.66-G.2G},{x:G.1Z.68-G.2G,y:G.1Z.66-G.2G},{x:G.1Z.68-G.2G,y:G.1Z.5l+G.2G},{x:G.1Z.5m+G.2G,y:G.1Z.5l+G.2G}];G.4f=2b.52(0,0,G.1x[3].x,G.1x[3].y)-G.2G;u o.2m("bX",A(C){M 1p,U,4g;U=C.8R();B((U.x>G.1x[0].x&&U.x<G.1x[1].x)&&(U.y>G.1Z.5l&&U.y<G.1Z.66)){u C}B((U.x>G.1Z.5m&&U.x<G.1Z.68)&&(U.y>G.1x[3].y&&U.y<G.1x[2].y)){u C}B(U.x>G.1x[0].x&&U.x<G.1x[1].x&&U.y>G.1Z.66){1p=(U.y-G.1Z.66)/G.4f}S B(U.y>G.1x[2].y&&U.y<G.1x[1].y&&U.x>G.1Z.68){1p=(U.x-G.1Z.68)/G.4f}S B(U.x>G.1x[0].x&&U.x<G.1x[1].x&&U.y<G.1Z.5l){1p=(G.1Z.5l-U.y)/G.4f}S B(U.y>G.1x[2].y&&U.y<G.1x[1].y&&U.x<G.1Z.5m){1p=(G.1Z.5m-U.x)/G.4f}S B(U.x<=G.1x[0].x&&U.y>=G.1x[0].y){4g=D.52(U.x,U.y,G.1x[0].x,G.1x[0].y);1p=(4g-G.2G)/G.4f}S B(U.x>=G.1x[1].x&&U.y>=G.1x[1].y){4g=D.52(U.x,U.y,G.1x[1].x,G.1x[1].y);1p=(4g-G.2G)/G.4f}S B(U.x>=G.1x[2].x&&U.y<=G.1x[2].y){4g=D.52(U.x,U.y,G.1x[2].x,G.1x[2].y);1p=(4g-G.2G)/G.4f}S B(U.x<=G.1x[3].x&&U.y<=G.1x[3].y){4g=D.52(U.x,U.y,G.1x[3].x,G.1x[3].y);1p=(4g-G.2G)/G.4f}B(1p<0){u C}u 9y[G.9g](C,1p,G)})});(A(){M 4v,9o,9p,64,63;64=[2S,2S,37,2S,3u,37,3v,2S,3X,3u,3y,37,3W,3v,3V,2S,4J,3X,4I,3u,4F,3y,4z,37,4x,3W,4m,3v,34,3V,4T,2S,5Z,4J,3Q,3X,5P,4I,5N,3u,34,4F,5K,3y,4O,4z,4L,37,5z,4x,5y,3W,5x,4m,5w,3v,5v,34,5u,3V,5t,4T,3P,2S,8u,5Z,8r,4J,8o,3Q,8a,3X,7Y,5P,7M,4I,4y,5N,7e,3u,5q,34,7a,4F,79,5K,4w,3y,3P,4O,8y,4z,8x,4L,8j,37,8b,5z,3Q,4x,7X,5y,7U,3W,7S,5x,7P,4m,4y,5w,5G,3v,7p,5v,7o,34,7d,5u,8B,3V,5Y,5t,4w,4T,89,3P,81,2S,cK,8u,cw,5Z,4L,8r,cq,4J,cp,8o,cj,3Q,cc,8a,ca,3X,bT,7Y,bM,5P,bK,7M,bF,4I,bE,4y,83,5N,5G,7e,84,3u,bA,5q,bz,34,by,7a,bw,4F,86,79,5Y,5K,bu,4w,bo,3y,bj,3P,ba,4O,b9,8y,b8,4z,b7,8x,b6,4L,b5,8j,b4,37,b3,8b,b2,5z,aR,3Q,aO,4x,aJ,7X,aH,5y,aF,7U,aC,3W,az,7S,aw,5x,av,7P,au,4m,ar,4y,83,5w,ao,5G,an,3v,84,7p,ak,5v,5q,7o,aj,34,ag,7d,ad,5u,9O,8B,86,3V,a9,5Y,d7,5t,cZ,4w,cY,4T,3y,89,cX,3P,cT,81,4O];63=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];9o=A(F,J,5J,5M,2H,P,c2){M 3Z,1i,2s,6U,6R,6S,6Q;3Z=1r 2g!=="42"&&2g!==L?1y 3S():2p.3K(\'I\');3Z.F=F;3Z.J=J;6U=5J+O.c0(2H)*P*0.5;6S=5M+O.bZ(2H)*P*0.5;6R=5J-O.c0(2H)*P*0.5;6Q=5M-O.bZ(2H)*P*0.5;1i=3Z.3h("2d");2s=1i.el(6U,6S,6R,6Q);B(!c2){2s.5e(0,"7H");2s.5e(1,"93")}S{2s.5e(0,"7H");2s.5e(0.5,"93");2s.5e(1,"7H")}1i.bN=2s;1i.bL(0,0,F,J);u 1i.48(0,0,F,J)};9p=A(F,J,5J,5M,6v,6t){M 3Z,1i,2s;3Z=1r 2g!=="42"&&2g!==L?1y 3S():2p.3K(\'I\');3Z.F=F;3Z.J=J;1i=3Z.3h("2d");2s=1i.et(5J,5M,6v,5J,5M,6t);2s.5e(1,"7H");2s.5e(0,"93");1i.bN=2s;1i.bL(0,0,F,J);u 1i.48(0,0,F,J)};4v=A(){o.r=0;o.g=0;o.b=0;o.a=0;u o.1S=L};D.2w.V("96",A(bt,1U,br,7B){M 2n,2A,1O,5L,6q,2J,2l,2D,1L,J,3U,i,6p,2z,3o,7r,3R,6n,2L,p,1z,1B,Y,1A,2o,2E,1R,9a,1a,3a,2R,1b,4h,1m,1H,2M,5i,2W,8i,8h,5V,F,3l,x,y,1h,4R,4P,H,1e,1I,3m,3r,3s,3k,3w,3z,5O;F=o.1d.F;J=o.1d.J;3o=o.T;9a=bt.29;8h=F*J;5V=8h<<2;Y=[];W(i=H=0;0<=5V?H<5V:H>5V;i=0<=5V?++H:--H){Y[i]=3o[i]}6q=0;5i=7B;7B-=1;9I(5i-->=0){3R=(1U+0.5)|0;B(3R===0){5I}B(3R>6A){3R=6A}2J=3R+3R+1;8i=F<<2;3l=F-1;3U=J-1;1a=3R+1;2W=1a*(1a+1)/2;2M=1y 4v();4h=da 0;1b=2M;W(i=1e=1;1<=2J?1e<2J:1e>2J;i=1<=2J?++1e:--1e){1b=1b.1S=1y 4v();B(i===1a){4h=1b}}1b.1S=2M;1m=L;1H=L;4P=1h=0;2L=64[3R];2R=63[3R];W(y=1I=0;0<=J?1I<J:1I>J;y=0<=J?++1I:--1I){2o=2l=2n=1R=1L=1O=0;2E=1a*(1A=Y[1h]);2D=1a*(1B=Y[1h+1]);2A=1a*(1z=Y[1h+2]);1R+=2W*1A;1L+=2W*1B;1O+=2W*1z;1b=2M;W(i=3m=0;0<=1a?3m<1a:3m>1a;i=0<=1a?++3m:--3m){1b.r=1A;1b.g=1B;1b.b=1z;1b=1b.1S}W(i=3r=1;1<=1a?3r<1a:3r>1a;i=1<=1a?++3r:--3r){p=1h+((3l<i?3l:i)<<2);1R+=(1b.r=(1A=Y[p]))*(3a=1a-i);1L+=(1b.g=(1B=Y[p+1]))*3a;1O+=(1b.b=(1z=Y[p+2]))*3a;2o+=1A;2l+=1B;2n+=1z;1b=1b.1S}1m=2M;1H=4h;W(x=3s=0;0<=F?3s<F:3s>F;x=0<=F?++3s:--3s){Y[1h]=(1R*2L)>>2R;Y[1h+1]=(1L*2L)>>2R;Y[1h+2]=(1O*2L)>>2R;1R-=2E;1L-=2D;1O-=2A;2E-=1m.r;2D-=1m.g;2A-=1m.b;p=(4P+((p=x+1a)<3l?p:3l))<<2;2o+=(1m.r=Y[p]);2l+=(1m.g=Y[p+1]);2n+=(1m.b=Y[p+2]);1R+=2o;1L+=2l;1O+=2n;1m=1m.1S;2E+=(1A=1H.r);2D+=(1B=1H.g);2A+=(1z=1H.b);2o-=1A;2l-=1B;2n-=1z;1H=1H.1S;1h+=4}4P+=F}W(x=3k=0;0<=F?3k<F:3k>F;x=0<=F?++3k:--3k){2l=2n=2o=1L=1O=1R=0;1h=x<<2;2E=1a*(1A=Y[1h]);2D=1a*(1B=Y[1h+1]);2A=1a*(1z=Y[1h+2]);1R+=2W*1A;1L+=2W*1B;1O+=2W*1z;1b=2M;W(i=3w=0;0<=1a?3w<1a:3w>1a;i=0<=1a?++3w:--3w){1b.r=1A;1b.g=1B;1b.b=1z;1b=1b.1S}4R=F;W(i=3z=1;1<=1a?3z<1a:3z>1a;i=1<=1a?++3z:--3z){1h=(4R+x)<<2;1R+=(1b.r=(1A=Y[1h]))*(3a=1a-i);1L+=(1b.g=(1B=Y[1h+1]))*3a;1O+=(1b.b=(1z=Y[1h+2]))*3a;2o+=1A;2l+=1B;2n+=1z;1b=1b.1S;B(i<3U){4R+=F}}1h=x;1m=2M;1H=4h;W(y=5O=0;0<=J?5O<J:5O>J;y=0<=J?++5O:--5O){p=1h<<2;Y[p]=(1R*2L)>>2R;Y[p+1]=(1L*2L)>>2R;Y[p+2]=(1O*2L)>>2R;1R-=2E;1L-=2D;1O-=2A;2E-=1m.r;2D-=1m.g;2A-=1m.b;p=(x+(((p=y+1a)<3U?p:3U)*F))<<2;1R+=(2o+=(1m.r=Y[p]));1L+=(2l+=(1m.g=Y[p+1]));1O+=(2n+=(1m.b=Y[p+2]));1m=1m.1S;2E+=(1A=1H.r);2D+=(1B=1H.g);2A+=(1z=1H.b);2o-=1A;2l-=1B;2n-=1z;1H=1H.1S;1h+=F}}1U*=br;i=8h;9I(--i>-1){2z=i<<2;6n=(9a[2z+2]&fl)/E.0*7B;7r=6n|0;B(7r===6q){5L=6A.0*(6n-(6n|0));6p=6A-5L;3o[2z]=(3o[2z]*6p+Y[2z]*5L)>>8;3o[2z+1]=(3o[2z+1]*6p+Y[2z+1]*5L)>>8;3o[2z+2]=(3o[2z+2]*6p+Y[2z+2]*5L)>>8}S B(7r===6q+1){3o[2z]=Y[2z];3o[2z+1]=Y[2z+1];3o[2z+2]=Y[2z+2]}}6q++}u o});D.R.V("fo",A(G){M 4c,2s;4c={3t:{x:o.1d.F/2,y:o.1d.J/2},2H:45,aa:6a,7v:3,7t:1.5,5i:3};G=1v.7N(4c,G);G.2H*=O.aB/47;2s=9o(o.1d.F,o.1d.J,G.3t.x,G.3t.y,G.2H,G.aa,31);u o.5a("96",[2s,G.7v,G.7t,G.5i])});u D.R.V("fv",A(G){M 4c,2s,6v,6t;4c={1s:50,3t:{x:o.1d.F/2,y:o.1d.J/2},7v:3,7t:1.5,5i:3,1U:L};G=1v.7N(4c,G);B(!G.1U){G.1U=o.1d.F<o.1d.J?o.1d.J:o.1d.F}6v=(G.1U/2)-G.1s;6t=G.1U/2;2s=9p(o.1d.F,o.1d.J,G.3t.x,G.3t.y,6v,6t);u o.5a("96",[2s,G.7v,G.7t,G.5i])})})();D.R.V("fw",A(){u o.3I("ac fy",[0,0,0,-1,1,0,0,0,0])});D.R.V("fz",A(){u o.3I("ac fA",[-1,-1,-1,-1,8,-1,-1,-1,-1])});D.R.V("fB",A(){u o.3I("fC",[-2,-1,0,-1,1,1,0,1,2])});D.R.V("9N",A(Q){M 6J,6K;6J=6A/Q;6K=E/(Q-1);u o.2m("9N",A(C){C.r=O.2P(O.2P(C.r/6J)*6K);C.g=O.2P(O.2P(C.g/6J)*6K);C.b=O.2P(O.2P(C.b/6J)*6K);u C})});D.R.V("fG",A(1V){B(1V==L){1V=31}o.4C();o.2u(5);o.8n(3);o.4a(1j);o.3x({3d:8,41:2,4U:4});o.2v(0.87);B(1V){u o.1V("40%",30)}});D.R.V("fI",A(1V){B(1V==L){1V=31}o.3A(15);o.33(15);o.2e(\'3f\',[0,0],[6a,0],[fJ,E],[E,E]);o.3D(-20);o.2v(1.8);B(1V){o.1V("50%",60)}u o.3A(5)});D.R.V("fK",A(7Q){B(7Q==L){7Q=2r}o.3Y(20);o.2e(\'3f\',[5,0],[fM,cd],[9T,fP],[fQ,E]);o.6w(15);o.1V("45%",20);B(7Q){o.4C();o.2u(4)}u o});D.R.V("fR",A(){o.2u(1j);o.3A(15);o.33(10);o.9N(80);o.8l(30);u o.4C()});D.R.V("fS",A(){o.33(3.5);o.3D(-5);o.3Y(50);o.4a(60);o.4e("#cL",10);o.3x({3d:8,41:8});o.2u(5);o.2v(1.2);u o.1V("55%",25)});D.R.V("fV",A(){o.33(5);o.4e("#cL",4);o.4a(20);o.3x({41:8,3d:3});o.2e(\'b\',[0,0],[1j,cd],[47,47],[E,E]);o.2u(15);o.3Y(75);u o.2v(1.6)});D.R.V("fW",A(){o.2e(\'3f\',[0,0],[1j,50],[bW,6a],[E,E]);o.3Y(-30);o.3D(-30);o.4e(\'#fY\',30);o.2u(-5);u o.2v(1.4)});D.R.V("fZ",A(){o.3A(5);o.33(8);o.2u(4);o.4e(\'#g0\',30);o.3Y(50);u o.2v(1.3)});D.R.V("g1",A(){o.2v(1.5);o.8l(25);o.3D(-60);o.2u(5);o.8n(5);u o.1V("50%",30)});D.R.V("g2",A(){o.3D(-35);o.2e(\'b\',[20,0],[90,7y],[g5,bV],[E,be]);o.2e(\'r\',[0,0],[bV,90],[g8,7y],[E,E]);o.2e(\'g\',[10,0],[g9,ga],[gb,1j],[E,gc]);o.2e(\'3f\',[0,0],[7y,1j],[1g,bW],[E,E]);u o.6w(20)});D.R.V("gd",A(){o.4C();o.4a(10);o.33(10);o.2u(15);u o.1V("60%",35)});D.R.V("ge",A(){o.3D(-20);o.3Y(-50);o.2v(1.1);o.4a(30);o.3x({3d:-10,41:5});o.2e(\'3f\',[0,0],[80,50],[1g,be],[E,E]);u o.1V("60%",30)});D.R.V("gf",A(1V){B(1V==L){1V=31}o.3A(10);o.2Z(A(){o.3q("5o");o.2q(80);o.4n();o.1C.2v(0.8);o.1C.2u(50);u o.1C.33(10)});o.2Z(A(){o.3q("aI");o.2q(80);u o.4B("#gg")});o.33(20);o.2v(0.8);B(1V){u o.1V("45%",20)}});D.R.V("gh",A(){o.2v(1.2);o.2Z(A(){o.3q("8v");o.2q(60);o.4n();o.1C.3x({3d:5});u o.1C.6f(15)});o.2Z(A(){o.3q("aG");o.2q(40);u o.4B("#gj")});o.2Z(A(){o.3q("5o");o.2q(35);o.4n();o.1C.3A(40);o.1C.3Y(40);o.1C.33(30);o.1C.2u(15);o.1C.2e(\'r\',[0,40],[1g,1g],[1g,1g],[E,a4]);o.1C.2e(\'g\',[0,40],[1g,1g],[1g,1g],[E,a4]);o.1C.2e(\'b\',[0,40],[1g,1g],[1g,1g],[E,a4]);u o.1C.6f(5)});o.2e(\'r\',[20,0],[1g,gl],[1g,1g],[7b,E]);o.2e(\'g\',[20,0],[1g,1g],[1g,1g],[7b,E]);o.2e(\'b\',[20,0],[1g,9n],[1g,1g],[7b,E]);u o.1V("45%",20)});D.R.V("gn",A(){o.3A(40);o.4e("#bk",10);o.2e(\'b\',[0,10],[1g,47],[9T,9T],[E,E]);o.2Z(A(){o.3q(\'8v\');o.2q(50);o.4n();o.1C.2v(0.7);u o.2Z(A(){o.3q(\'8X\');o.2q(60);u o.4B(\'#bk\')})});o.2Z(A(){o.3q(\'5o\');o.2q(60);o.4n();o.1C.3D(50);o.1C.8F(90);u o.1C.2u(10)});o.2v(1.4);o.3Y(-30);o.2Z(A(){o.2q(10);u o.4B(\'#gp\')});u o});D.R.V("gq",A(){o.3D(20);o.2v(1.4);o.4C();o.2u(5);o.4a(1j);o.3x({3d:8,41:2,4U:4});o.2v(0.8);o.2u(5);o.33(10);o.2Z(A(){o.3q(\'8v\');o.4n();o.2q(55);u o.1C.6f(10)});u o.1V("50%",30)});D.R.V("gr",A(){o.4C();o.2u(10);o.2v(0.9);o.2Z(A(){o.3q("5o");o.2q(40);o.4n();o.1C.33(15);o.1C.2u(15);u o.1C.3x({4U:10,3d:5})});o.4a(30);o.2e(\'3f\',[0,10],[7y,90],[47,6a],[7b,E]);o.3x({3d:5,4U:-2});u o.33(15)});D.R.V("gs",A(){o.6w(40);o.3D(-50);o.3x({3d:3});o.2Z(A(){o.3q("5o");o.2q(80);o.4n();o.1C.6w(5);o.1C.2u(50);o.1C.33(10);u o.1C.3x({41:5})});u o.3A(10)});D.2w.V("7f",A(3C){M 2H,I,1W,J,a7,F,x,y;2H=3C%4m;B(2H===0){u o.1d={F:o.I.F,J:o.I.J}}a7=O.aB/47;B(1r 2g!=="42"&&2g!==L){I=1y 3S()}S{I=2p.3K(\'I\');1v.5H(o.I,I)}B(2H===90||2H===-7K||2H===7K||2H===-90){F=o.I.J;J=o.I.F;x=F/2;y=J/2}S B(2H===47){F=o.I.F;J=o.I.J;x=F/2;y=J/2}S{F=O.7L(O.1T(o.51,2)+O.1T(o.5D,2));J=F;x=o.I.J/2;y=o.I.F/2}I.F=F;I.J=J;1W=I.3h(\'2d\');1W.bB();1W.gv(x,y);1W.7f(2H*a7);1W.5U(o.I,-o.I.F/2,-o.I.J/2,o.I.F,o.I.J);1W.gw();u o.73(I)});D.R.V("7f",A(){u o.5a("7f",5T.N.5f.1w(1l,0))});(A(){M 4v,64,63;64=[2S,2S,37,2S,3u,37,3v,2S,3X,3u,3y,37,3W,3v,3V,2S,4J,3X,4I,3u,4F,3y,4z,37,4x,3W,4m,3v,34,3V,4T,2S,5Z,4J,3Q,3X,5P,4I,5N,3u,34,4F,5K,3y,4O,4z,4L,37,5z,4x,5y,3W,5x,4m,5w,3v,5v,34,5u,3V,5t,4T,3P,2S,8u,5Z,8r,4J,8o,3Q,8a,3X,7Y,5P,7M,4I,4y,5N,7e,3u,5q,34,7a,4F,79,5K,4w,3y,3P,4O,8y,4z,8x,4L,8j,37,8b,5z,3Q,4x,7X,5y,7U,3W,7S,5x,7P,4m,4y,5w,5G,3v,7p,5v,7o,34,7d,5u,8B,3V,5Y,5t,4w,4T,89,3P,81,2S,cK,8u,cw,5Z,4L,8r,cq,4J,cp,8o,cj,3Q,cc,8a,ca,3X,bT,7Y,bM,5P,bK,7M,bF,4I,bE,4y,83,5N,5G,7e,84,3u,bA,5q,bz,34,by,7a,bw,4F,86,79,5Y,5K,bu,4w,bo,3y,bj,3P,ba,4O,b9,8y,b8,4z,b7,8x,b6,4L,b5,8j,b4,37,b3,8b,b2,5z,aR,3Q,aO,4x,aJ,7X,aH,5y,aF,7U,aC,3W,az,7S,aw,5x,av,7P,au,4m,ar,4y,83,5w,ao,5G,an,3v,84,7p,ak,5v,5q,7o,aj,34,ag,7d,ad,5u,9O,8B,86,3V,a9,5Y,d7,5t,cZ,4w,cY,4T,3y,89,cX,3P,cT,81,4O];63=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];4v=A(){o.r=0;o.g=0;o.b=0;o.a=0;u o.1S=L};D.2w.V("6f",A(1U){M 2n,2A,1O,2J,2l,2D,1L,J,3U,i,2L,p,1z,1B,Y,1A,2o,2E,1R,1a,3a,2R,1b,4h,1m,1H,2M,2W,8i,F,3l,x,y,1h,4R,4P,H,1e,1I,3m,3r,3s,3k,3w,3z;B(bQ(1U)||1U<1){u}1U|=0;Y=o.T;F=o.1d.F;J=o.1d.J;2J=1U+1U+1;8i=F<<2;3l=F-1;3U=J-1;1a=1U+1;2W=1a*(1a+1)/2;2M=1y 4v();1b=2M;W(i=H=1;1<=2J?H<2J:H>2J;i=1<=2J?++H:--H){1b=1b.1S=1y 4v();B(i===1a){4h=1b}}1b.1S=2M;1m=L;1H=L;4P=1h=0;2L=64[1U];2R=63[1U];W(y=1e=0;0<=J?1e<J:1e>J;y=0<=J?++1e:--1e){2o=2l=2n=1R=1L=1O=0;2E=1a*(1A=Y[1h]);2D=1a*(1B=Y[1h+1]);2A=1a*(1z=Y[1h+2]);1R+=2W*1A;1L+=2W*1B;1O+=2W*1z;1b=2M;W(i=1I=0;0<=1a?1I<1a:1I>1a;i=0<=1a?++1I:--1I){1b.r=1A;1b.g=1B;1b.b=1z;1b=1b.1S}W(i=3m=1;1<=1a?3m<1a:3m>1a;i=1<=1a?++3m:--3m){p=1h+((3l<i?3l:i)<<2);1R+=(1b.r=(1A=Y[p]))*(3a=1a-i);1L+=(1b.g=(1B=Y[p+1]))*3a;1O+=(1b.b=(1z=Y[p+2]))*3a;2o+=1A;2l+=1B;2n+=1z;1b=1b.1S}1m=2M;1H=4h;W(x=3r=0;0<=F?3r<F:3r>F;x=0<=F?++3r:--3r){Y[1h]=(1R*2L)>>2R;Y[1h+1]=(1L*2L)>>2R;Y[1h+2]=(1O*2L)>>2R;1R-=2E;1L-=2D;1O-=2A;2E-=1m.r;2D-=1m.g;2A-=1m.b;p=(4P+((p=x+1U+1)<3l?p:3l))<<2;2o+=(1m.r=Y[p]);2l+=(1m.g=Y[p+1]);2n+=(1m.b=Y[p+2]);1R+=2o;1L+=2l;1O+=2n;1m=1m.1S;2E+=(1A=1H.r);2D+=(1B=1H.g);2A+=(1z=1H.b);2o-=1A;2l-=1B;2n-=1z;1H=1H.1S;1h+=4}4P+=F}W(x=3s=0;0<=F?3s<F:3s>F;x=0<=F?++3s:--3s){2l=2n=2o=1L=1O=1R=0;1h=x<<2;2E=1a*(1A=Y[1h]);2D=1a*(1B=Y[1h+1]);2A=1a*(1z=Y[1h+2]);1R+=2W*1A;1L+=2W*1B;1O+=2W*1z;1b=2M;W(i=3k=0;0<=1a?3k<1a:3k>1a;i=0<=1a?++3k:--3k){1b.r=1A;1b.g=1B;1b.b=1z;1b=1b.1S}4R=F;W(i=3w=1;1<=1U?3w<=1U:3w>=1U;i=1<=1U?++3w:--3w){1h=(4R+x)<<2;1R+=(1b.r=(1A=Y[1h]))*(3a=1a-i);1L+=(1b.g=(1B=Y[1h+1]))*3a;1O+=(1b.b=(1z=Y[1h+2]))*3a;2o+=1A;2l+=1B;2n+=1z;1b=1b.1S;B(i<3U){4R+=F}}1h=x;1m=2M;1H=4h;W(y=3z=0;0<=J?3z<J:3z>J;y=0<=J?++3z:--3z){p=1h<<2;Y[p]=(1R*2L)>>2R;Y[p+1]=(1L*2L)>>2R;Y[p+2]=(1O*2L)>>2R;1R-=2E;1L-=2D;1O-=2A;2E-=1m.r;2D-=1m.g;2A-=1m.b;p=(x+(((p=y+1a)<3U?p:3U)*F))<<2;1R+=(2o+=(1m.r=Y[p]));1L+=(2l+=(1m.g=Y[p+1]));1O+=(2n+=(1m.b=Y[p+2]));1m=1m.1S;2E+=(1A=1H.r);2D+=(1B=1H.g);2A+=(1z=1H.b);2o-=1A;2l-=1B;2n-=1z;1H=1H.1S;1h+=F}}u o});u D.R.V("6f",A(1U){u o.5a("6f",[1U])})})();D.R.V("c3",A(Q){u o.2m("c3",A(C){M 6L;6L=(0.bp*C.r)+(0.bs*C.g)+(0.bv*C.b);B(6L<Q){C.r=0;C.g=0;C.b=0}S{C.r=E;C.g=E;C.b=E}u C})})}).1w(o);',62,1026,'||||||||||||||||||||||||this||||||return||||||function|if|rgba|Caman|255|width|opts|_i|canvas|height|_ref|null|var|prototype|Math|length|adjust|Filter|else|pixelData|loc|register|for|rgbaParent|pixels|rgbaLayer|||||||||||radiusPlus1|stack|max|dimensions|_j|image|128|yi|context|100|args|arguments|stackIn|_len|_results|amt|name|typeof|size|type|pixel|Util|call|corners|new|pb|pr|pg|filter|_this|result|options|src|stackOut|_k|start|img|g_sum|min|callback|b_sum|Renderer|end|r_sum|next|pow|radius|vignette|ctx|Convert|Log|coords|||||||endX||Pixel|data|layer|Calculate|currentJob||curves|val|exports|bezier|case|push|Blender|g_in_sum|process|b_in_sum|r_in_sum|document|opacity|false|gradient|key|contrast|gamma|Plugin|debug|imageData|idx|b_out_sum|newDims|obj|g_out_sum|r_out_sum|controlPoints|cornerRadius|angle|kernel|div|divisor|mul_sum|stackStart|IO|NodeJS|floor|Event|shg_sum|512|bnum|builder|throw|sumFactor|id|parentData|newLayer||true|Store|exposure|312|||456|target|Layer|rbs|initObj|color|red|bias|rgb|Type|getContext|strength|string|_o|widthMinus1|_l|055|imagePixels|ret|setBlendingMode|_m|_n|center|328|335|_p|channels|271|_q|brightness|levels|degrees|saturation|caman|hex|prev|clampRGB|processKernel|cps|createElement|Module|newLoc|to|execute|265|428|iradius|Canvas|_ref1|heightMinus1|292|388|405|vibrance|cnv||blue|undefined|chans|object||ele|180|getImageData|parseInt|sepia|plugin|defaults|ratio|colorize|maxDist|radialDist|stackEnd|get|devicePixelRatio|add|processNext|360|copyParent|_ref2|res|value|apply|rand|Blocks|pointsPerSegment|BlurStack|278|420|354|496|mul|fillColor|greyscale|abs|avg|298|ctrl2|ctrl1|364|454|Analyze|475|from|window|259|yw|search|yp|renderer|273|green|Image|imageHeight|hsv|trigger|break||originalWidth|distance|modPixelData|CamanParser||layerData|proxyUrl|lowBound|highBound|processPlugin|imageWidth|values|substr|addColorStop|slice|originalPixelData|in|steps|func|lang|bottom|left|events|multiply|items|320|clamp|lerp|282|302|323|347|374|404|437|p0|p1|_error|originalHeight|builderIndex|leftCoord|341|copyAttributes|continue|centerX|284|blend|centerY|345|_r|383|level|file|chan|Array|drawImage|wh4|__slice|last|287|482||switch|round|shg_table|mul_table|toString|top|CamanJS|right|1379310345|200|Requires|getAttribute|nodeFileReady|child|stackBlur|blockFinished|parent|Invalid|dim|finishInit|attr|event|lookupValue|pop|iblend|currentIndex|allowRevert|__indexOf|radius2|url|radius1|sharpen|require|http|cropCoordinates|256|Fiber|copy|pixelStack|prop|dataArray|err|imageLoaded|renderQueue|numOfAreas|numOfValues|luminance|getFloat|currentLayer|algo|toLowerCase|y2|x2|y1|blockN|x1|adjustSize|preScaledWidth|unparsedInstructions|preScaledHeight|imgs||numPixels|scaledCanvas|replaceCanvas|__hasProp||fac1|fac2|fac3|291|305|235|parentNode|307|337|rotate|pointsPerStep|percent|pos|isURLRemote|sub|matches|dist|processFn|318|329|source|index|rightCoord|radiusFactor|hexToRGB|startRadius|langToExt|putImageData|120|oldCanvas|sel|blurLevels|root|initializedPixelData|coord|disabled|hiDPIRatio|white|hueToRGB|overwrite|270|sqrt|373|extend|buf|367|grey|resized|381|dest|396|Root|match|412|394|moduleKeywords||261|Logger|350|332|Blur|294||resize|269|417|446|horiz|vert|updateContext|includeAlpha|INST_REGEX|wh|w4|465|startX|clip|hiDPIReplacement|noise|441|blocksDone|setTimeout|468|number|remoteProxy|497|overlay|startY|485|507|imageUrl|initType|297|fac0|complete|whiteZ|hue|finished|listener|lastBlockN|blockPixelLength|eachBlock|finishedFn|job|plugins|pixelAtLocation|canvasQueue|crop|locationXY|layerStack|setContext|coordinatesToLocation|console|except|normal|blendingMode|uniqid||stats||black|toBase64||compoundBlur|included|bind|info|radiusPixels|ctor|LoadOverlay|_type|_fn|xyz|method|1284185493|2068965517|787037037|3333333333|008856451679|getAttrId|108|getLinearGradientMap|getRadialGradientMap|readyState|whiteY|whiteX|crossOrigin|4166666667|0031308|version|__bind|vignetteFilters|req|04045|on|error|replaceChild|m1|m0|count|missingValues|while|imageAdjustments|of|waitForImageLoaded|needsHiDPISwap|posterize|299|naturalWidth|blenders|catch|try|190|nodeName|instFunc|inst|DOMUpdated|LayerFinished|LayerDequeue|Revert|Kernel|Single|backingStoreRatio|215|_ref3|endY|to_radians|render|289|focusWidth|dataStr|Edge|304|renderBlock|renderKernel|310|filterFunc|Block|315|326|blockNum|totalBlocks|338|344|yield|domainRegex|357|corsEnabled|chunk|363|370|377|use|node|385|delete|PI|392|newCanvas|hiDPIDisabled|400|addition|408|softLight|416|remoteCheck|rgbToHSV|setInitObject|extended|424|binary|given|433|addEventListener|initialized|DOM|remote|hsvToRGB|renderStart|proxy|hiDPICapable|invert|rgbToXYZ|442|451|460|470|480|491|501|257|262|isRemote|Object|swapped|230|RegExp|setup|parseArguments|domIsLoaded|268|ea1c5d|scaled|executeLayer|pushContext|274|2126|reverse|increaseFactor|7152|radiusData|281|0722|301|popContext|309|316|324|save|nodeSave|browserSave|359|368|png|cropped|1000|toImage|378|fillRect|389|fillStyle|applyCurrentLayer|has|isNaN|hermite|item|399|applyToParent|144|140|rectangularVignette|instanceof|sin|cos|reloadCanvasData|mirrored|threshold|put|px|assignId|hasId|style|xyzToLab|411||422|150|randomRange|readFromHttp|mode|https|autoload|435|proxyParam|locationToCoordinates|anonymous|047|DEBUG|447|461|onload|date|release|883|_super|489|initCanvas|Height|log|parser|isImageLoaded|Uint8Array|Width|initImage|116|500|me|parse|getPixelRelative|505|e87b22|__extends|initNode|hidpi|nowLoc|URL|setAttribute|loaded|263|types|processStart|processComplete|267|275|280|renderFinished|blockStarted|originalVisiblePixels|or|shift|loadOverlay|executePlugin|285|executeFilter|hiDPIAdjustments|void|ready|extends|nodeValue|2013|camanProxyUrl|Version|Released|Sharpen|Motion|motionBlur|Gaussian|gaussianBlur|Radial|Heavy|heavyRadialBlur|Box|boxBlur|missing|split|analyze|869|534|272|168|314|349|189|769|607|readystatechange|01|lighten|exclusion|difference|screen|flush|blocksFinished|Rendering|Could|not|endPixel|startPixel|End|Start|Executing|run|find|default|initialization|cpus|os|toHex|toKey|putPixel|getPixel|putPixelRelative|warn|attributes|overlayImage|Initializing|createImageData|layerID|readFile|toDataURL|writing|Finished|toBuffer|writeFile|output|querySelector|Creating|isFile|createLinearGradient|statSync|href|location|stream|octet|replace|caman_proxy|createRadialGradient|proxies|js|javascript|pl|perl|py|python|rb|ruby|useProxy|set|defineProperty|encodeURIComponent|aliasProperty|images|aliasFunction|loading|Cannot|configured|without|delegate|includes|fibers|load|Attempting|__super__|constructor|domain|credentials|listen|labToRGB|rgbToLab|labToXYZ|0570|hasOwnProperty|2040|0557|0415|8758|9689|4986|5372|2406|indexOf|xyzToRGB|9505|1192|0193|1805|3576|4124|Fetching|setEncoding|0xff|hslToRGB||tiltShift|Buffer|rgbToHSL|charAt||keys|Remote|radialBlur|edgeEnhance|detected|Enhance|edgeDetect|Detect|emboss|Emboss|using|114|587|vintage|toFixed|lomo|155|clarity|random|130|naturalHeight|Function|220|250|sinCity|sunrise|DOMContentLoaded|querySelectorAll|crossProcess|orangePeel|calculateLevels|ff9000|love|c42007|grungy|jarques|resetOriginalPixelData|HiDPI|186|scale|webkitBackingStorePixelRatio|138|115|105|148|248|pinhole|oldBoot|glowingSun|f49600|hazyDays|mozBackingStorePixelRatio|6899ba|msBackingStorePixelRatio|158|oBackingStorePixelRatio|herMajesty|backingStorePixelRatio|e5f0ff|nostalgia|hemingway|concentrate|reset|revert|translate|restore|darken'.split('|'),0,{}))
 
includes/pickers/caman/dist/caman.js DELETED
@@ -1,2578 +0,0 @@
1
- // Generated by CoffeeScript 1.6.3
2
- (function() {
3
- var $, Analyze, Blender, Calculate, Caman, CamanParser, Canvas, Convert, Event, Fiber, Filter, IO, Image, Layer, Log, Module, Pixel, Plugin, Renderer, Root, Store, Util, fs, http, moduleKeywords, slice,
4
- __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
5
- __slice = [].slice,
6
- __hasProp = {}.hasOwnProperty,
7
- __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
8
- __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
9
-
10
- moduleKeywords = ['extended', 'included'];
11
-
12
- Module = (function() {
13
- function Module() {}
14
-
15
- Module["extends"] = function(obj) {
16
- var key, value, _ref;
17
- for (key in obj) {
18
- value = obj[key];
19
- if (__indexOf.call(moduleKeywords, key) < 0) {
20
- this[key] = value;
21
- }
22
- }
23
- if ((_ref = obj.extended) != null) {
24
- _ref.apply(this);
25
- }
26
- return this;
27
- };
28
-
29
- Module.includes = function(obj) {
30
- var key, value, _ref;
31
- for (key in obj) {
32
- value = obj[key];
33
- if (__indexOf.call(moduleKeywords, key) < 0) {
34
- this.prototype[key] = value;
35
- }
36
- }
37
- if ((_ref = obj.included) != null) {
38
- _ref.apply(this);
39
- }
40
- return this;
41
- };
42
-
43
- Module.delegate = function() {
44
- var args, source, target, _i, _len, _results;
45
- args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
46
- target = args.pop();
47
- _results = [];
48
- for (_i = 0, _len = args.length; _i < _len; _i++) {
49
- source = args[_i];
50
- _results.push(this.prototype[source] = target.prototype[source]);
51
- }
52
- return _results;
53
- };
54
-
55
- Module.aliasFunction = function(to, from) {
56
- var _this = this;
57
- return this.prototype[to] = function() {
58
- var args;
59
- args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
60
- return _this.prototype[from].apply(_this, args);
61
- };
62
- };
63
-
64
- Module.aliasProperty = function(to, from) {
65
- return Object.defineProperty(this.prototype, to, {
66
- get: function() {
67
- return this[from];
68
- },
69
- set: function(val) {
70
- return this[from] = val;
71
- }
72
- });
73
- };
74
-
75
- Module.included = function(func) {
76
- return func.call(this, this.prototype);
77
- };
78
-
79
- return Module;
80
-
81
- })();
82
-
83
- slice = Array.prototype.slice;
84
-
85
- $ = function(sel, root) {
86
- if (root == null) {
87
- root = document;
88
- }
89
- if (typeof sel === "object" || (typeof exports !== "undefined" && exports !== null)) {
90
- return sel;
91
- }
92
- return root.querySelector(sel);
93
- };
94
-
95
- Util = (function() {
96
- function Util() {}
97
-
98
- Util.uniqid = (function() {
99
- var id;
100
- id = 0;
101
- return {
102
- get: function() {
103
- return id++;
104
- }
105
- };
106
- })();
107
-
108
- Util.extend = function() {
109
- var copy, dest, obj, prop, src, _i, _len;
110
- obj = arguments[0], src = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
111
- dest = obj;
112
- for (_i = 0, _len = src.length; _i < _len; _i++) {
113
- copy = src[_i];
114
- for (prop in copy) {
115
- if (!__hasProp.call(copy, prop)) continue;
116
- dest[prop] = copy[prop];
117
- }
118
- }
119
- return dest;
120
- };
121
-
122
- Util.clampRGB = function(val) {
123
- if (val < 0) {
124
- return 0;
125
- }
126
- if (val > 255) {
127
- return 255;
128
- }
129
- return val;
130
- };
131
-
132
- Util.copyAttributes = function(from, to, opts) {
133
- var attr, _i, _len, _ref, _ref1, _results;
134
- if (opts == null) {
135
- opts = {};
136
- }
137
- _ref = from.attributes;
138
- _results = [];
139
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
140
- attr = _ref[_i];
141
- if ((opts.except != null) && (_ref1 = attr.nodeName, __indexOf.call(opts.except, _ref1) >= 0)) {
142
- continue;
143
- }
144
- _results.push(to.setAttribute(attr.nodeName, attr.nodeValue));
145
- }
146
- return _results;
147
- };
148
-
149
- Util.dataArray = function(length) {
150
- if (length == null) {
151
- length = 0;
152
- }
153
- if (Caman.NodeJS || (window.Uint8Array != null)) {
154
- return new Uint8Array(length);
155
- }
156
- return new Array(length);
157
- };
158
-
159
- return Util;
160
-
161
- })();
162
-
163
- if (typeof exports !== "undefined" && exports !== null) {
164
- Root = exports;
165
- Canvas = require('canvas');
166
- Image = Canvas.Image;
167
- Fiber = require('fibers');
168
- fs = require('fs');
169
- http = require('http');
170
- } else {
171
- Root = window;
172
- }
173
-
174
- Caman = (function(_super) {
175
- __extends(Caman, _super);
176
-
177
- Caman.version = {
178
- release: "4.1.2",
179
- date: "7/27/2013"
180
- };
181
-
182
- Caman.DEBUG = false;
183
-
184
- Caman.allowRevert = true;
185
-
186
- Caman.crossOrigin = "anonymous";
187
-
188
- Caman.remoteProxy = "";
189
-
190
- Caman.proxyParam = "camanProxyUrl";
191
-
192
- Caman.NodeJS = typeof exports !== "undefined" && exports !== null;
193
-
194
- Caman.autoload = !Caman.NodeJS;
195
-
196
- Caman.toString = function() {
197
- return "Version " + Caman.version.release + ", Released " + Caman.version.date;
198
- };
199
-
200
- Caman.getAttrId = function(canvas) {
201
- if (Caman.NodeJS) {
202
- return true;
203
- }
204
- if (typeof canvas === "string") {
205
- canvas = $(canvas);
206
- }
207
- if (!((canvas != null) && (canvas.getAttribute != null))) {
208
- return null;
209
- }
210
- return canvas.getAttribute('data-caman-id');
211
- };
212
-
213
- function Caman() {
214
- this.nodeFileReady = __bind(this.nodeFileReady, this);
215
- var args, callback, id,
216
- _this = this;
217
- if (arguments.length === 0) {
218
- throw "Invalid arguments";
219
- }
220
- if (this instanceof Caman) {
221
- this.finishInit = this.finishInit.bind(this);
222
- this.imageLoaded = this.imageLoaded.bind(this);
223
- args = arguments[0];
224
- if (!Caman.NodeJS) {
225
- id = parseInt(Caman.getAttrId(args[0]), 10);
226
- callback = typeof args[1] === "function" ? args[1] : typeof args[2] === "function" ? args[2] : function() {};
227
- if (!isNaN(id) && Store.has(id)) {
228
- return Store.execute(id, callback);
229
- }
230
- }
231
- this.id = Util.uniqid.get();
232
- this.initializedPixelData = this.originalPixelData = null;
233
- this.cropCoordinates = {
234
- x: 0,
235
- y: 0
236
- };
237
- this.cropped = false;
238
- this.resized = false;
239
- this.pixelStack = [];
240
- this.layerStack = [];
241
- this.canvasQueue = [];
242
- this.currentLayer = null;
243
- this.scaled = false;
244
- this.analyze = new Analyze(this);
245
- this.renderer = new Renderer(this);
246
- this.domIsLoaded(function() {
247
- _this.parseArguments(args);
248
- return _this.setup();
249
- });
250
- return this;
251
- } else {
252
- return new Caman(arguments);
253
- }
254
- }
255
-
256
- Caman.prototype.domIsLoaded = function(cb) {
257
- var listener,
258
- _this = this;
259
- if (Caman.NodeJS) {
260
- return setTimeout(function() {
261
- return cb.call(_this);
262
- }, 0);
263
- } else {
264
- if (document.readyState === "complete") {
265
- Log.debug("DOM initialized");
266
- return setTimeout(function() {
267
- return cb.call(_this);
268
- }, 0);
269
- } else {
270
- listener = function() {
271
- if (document.readyState === "complete") {
272
- Log.debug("DOM initialized");
273
- return cb.call(_this);
274
- }
275
- };
276
- return document.addEventListener("readystatechange", listener, false);
277
- }
278
- }
279
- };
280
-
281
- Caman.prototype.parseArguments = function(args) {
282
- var key, val, _ref, _results;
283
- if (args.length === 0) {
284
- throw "Invalid arguments given";
285
- }
286
- this.initObj = null;
287
- this.initType = null;
288
- this.imageUrl = null;
289
- this.callback = function() {};
290
- this.setInitObject(args[0]);
291
- if (args.length === 1) {
292
- return;
293
- }
294
- switch (typeof args[1]) {
295
- case "string":
296
- this.imageUrl = args[1];
297
- break;
298
- case "function":
299
- this.callback = args[1];
300
- }
301
- if (args.length === 2) {
302
- return;
303
- }
304
- this.callback = args[2];
305
- if (args.length === 4) {
306
- _ref = args[4];
307
- _results = [];
308
- for (key in _ref) {
309
- if (!__hasProp.call(_ref, key)) continue;
310
- val = _ref[key];
311
- _results.push(this.options[key] = val);
312
- }
313
- return _results;
314
- }
315
- };
316
-
317
- Caman.prototype.setInitObject = function(obj) {
318
- if (Caman.NodeJS) {
319
- this.initObj = obj;
320
- this.initType = 'node';
321
- return;
322
- }
323
- if (typeof obj === "object") {
324
- this.initObj = obj;
325
- } else {
326
- this.initObj = $(obj);
327
- }
328
- if (this.initObj == null) {
329
- throw "Could not find image or canvas for initialization.";
330
- }
331
- return this.initType = this.initObj.nodeName.toLowerCase();
332
- };
333
-
334
- Caman.prototype.setup = function() {
335
- switch (this.initType) {
336
- case "node":
337
- return this.initNode();
338
- case "img":
339
- return this.initImage();
340
- case "canvas":
341
- return this.initCanvas();
342
- }
343
- };
344
-
345
- Caman.prototype.initNode = function() {
346
- Log.debug("Initializing for NodeJS");
347
- if (typeof this.initObj === "string" && this.initObj.match(/^https?:\/\//)) {
348
- return this.readFromHttp(this.initObj, this.nodeFileReady);
349
- } else if (typeof this.initObj === "string") {
350
- return fs.readFile(this.initObj, this.nodeFileReady);
351
- } else {
352
- return this.nodeFileReady(null, this.initObj);
353
- }
354
- };
355
-
356
- Caman.prototype.readFromHttp = function(url, callback) {
357
- var req;
358
- Log.debug("Fetching image from " + url);
359
- req = http.get(url, function(res) {
360
- var buf;
361
- buf = '';
362
- res.setEncoding('binary');
363
- res.on('data', function(chunk) {
364
- return buf += chunk;
365
- });
366
- return res.on('end', function() {
367
- return callback(null, new Buffer(buf, 'binary'));
368
- });
369
- });
370
- return req.on('error', callback);
371
- };
372
-
373
- Caman.prototype.nodeFileReady = function(err, data) {
374
- if (err) {
375
- throw err;
376
- }
377
- this.image = new Image();
378
- this.image.src = data;
379
- Log.debug("Image loaded. Width = " + (this.imageWidth()) + ", Height = " + (this.imageHeight()));
380
- this.canvas = new Canvas(this.imageWidth(), this.imageHeight());
381
- return this.finishInit();
382
- };
383
-
384
- Caman.prototype.initImage = function() {
385
- this.image = this.initObj;
386
- this.canvas = document.createElement('canvas');
387
- this.context = this.canvas.getContext('2d');
388
- Util.copyAttributes(this.image, this.canvas, {
389
- except: ['src']
390
- });
391
- if (this.image.parentNode != null) {
392
- this.image.parentNode.replaceChild(this.canvas, this.image);
393
- }
394
- this.imageAdjustments();
395
- return this.waitForImageLoaded();
396
- };
397
-
398
- Caman.prototype.initCanvas = function() {
399
- this.canvas = this.initObj;
400
- this.context = this.canvas.getContext('2d');
401
- if (this.imageUrl != null) {
402
- this.image = document.createElement('img');
403
- this.image.src = this.imageUrl;
404
- this.imageAdjustments();
405
- return this.waitForImageLoaded();
406
- } else {
407
- return this.finishInit();
408
- }
409
- };
410
-
411
- Caman.prototype.imageAdjustments = function() {
412
- if (this.needsHiDPISwap()) {
413
- Log.debug(this.image.src, "->", this.hiDPIReplacement());
414
- this.swapped = true;
415
- this.image.src = this.hiDPIReplacement();
416
- }
417
- if (IO.isRemote(this.image)) {
418
- this.image.src = IO.proxyUrl(this.image.src);
419
- return Log.debug("Remote image detected, using URL = " + this.image.src);
420
- }
421
- };
422
-
423
- Caman.prototype.waitForImageLoaded = function() {
424
- if (this.isImageLoaded()) {
425
- return this.imageLoaded();
426
- } else {
427
- return this.image.onload = this.imageLoaded;
428
- }
429
- };
430
-
431
- Caman.prototype.isImageLoaded = function() {
432
- if (!this.image.complete) {
433
- return false;
434
- }
435
- if ((this.image.naturalWidth != null) && this.image.naturalWidth === 0) {
436
- return false;
437
- }
438
- return true;
439
- };
440
-
441
- Caman.prototype.imageWidth = function() {
442
- return this.image.width || this.image.naturalWidth;
443
- };
444
-
445
- Caman.prototype.imageHeight = function() {
446
- return this.image.height || this.image.naturalHeight;
447
- };
448
-
449
- Caman.prototype.imageLoaded = function() {
450
- Log.debug("Image loaded. Width = " + (this.imageWidth()) + ", Height = " + (this.imageHeight()));
451
- if (this.swapped) {
452
- this.canvas.width = this.imageWidth() / this.hiDPIRatio();
453
- this.canvas.height = this.imageHeight() / this.hiDPIRatio();
454
- } else {
455
- this.canvas.width = this.imageWidth();
456
- this.canvas.height = this.imageHeight();
457
- }
458
- return this.finishInit();
459
- };
460
-
461
- Caman.prototype.finishInit = function() {
462
- var i, pixel, _i, _len, _ref;
463
- if (this.context == null) {
464
- this.context = this.canvas.getContext('2d');
465
- }
466
- this.originalWidth = this.preScaledWidth = this.width = this.canvas.width;
467
- this.originalHeight = this.preScaledHeight = this.height = this.canvas.height;
468
- this.hiDPIAdjustments();
469
- if (!this.hasId()) {
470
- this.assignId();
471
- }
472
- if (this.image != null) {
473
- this.context.drawImage(this.image, 0, 0, this.imageWidth(), this.imageHeight(), 0, 0, this.preScaledWidth, this.preScaledHeight);
474
- }
475
- this.imageData = this.context.getImageData(0, 0, this.canvas.width, this.canvas.height);
476
- this.pixelData = this.imageData.data;
477
- if (Caman.allowRevert) {
478
- this.initializedPixelData = Util.dataArray(this.pixelData.length);
479
- this.originalPixelData = Util.dataArray(this.pixelData.length);
480
- _ref = this.pixelData;
481
- for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
482
- pixel = _ref[i];
483
- this.initializedPixelData[i] = pixel;
484
- this.originalPixelData[i] = pixel;
485
- }
486
- }
487
- this.dimensions = {
488
- width: this.canvas.width,
489
- height: this.canvas.height
490
- };
491
- if (!Caman.NodeJS) {
492
- Store.put(this.id, this);
493
- }
494
- this.callback.call(this, this);
495
- return this.callback = function() {};
496
- };
497
-
498
- Caman.prototype.reloadCanvasData = function() {
499
- this.imageData = this.context.getImageData(0, 0, this.canvas.width, this.canvas.height);
500
- return this.pixelData = this.imageData.data;
501
- };
502
-
503
- Caman.prototype.resetOriginalPixelData = function() {
504
- var i, pixel, _i, _len, _ref, _results;
505
- if (!Caman.allowRevert) {
506
- throw "Revert disabled";
507
- }
508
- this.originalPixelData = Util.dataArray(this.pixelData.length);
509
- _ref = this.pixelData;
510
- _results = [];
511
- for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
512
- pixel = _ref[i];
513
- _results.push(this.originalPixelData[i] = pixel);
514
- }
515
- return _results;
516
- };
517
-
518
- Caman.prototype.hasId = function() {
519
- return Caman.getAttrId(this.canvas) != null;
520
- };
521
-
522
- Caman.prototype.assignId = function() {
523
- if (Caman.NodeJS || this.canvas.getAttribute('data-caman-id')) {
524
- return;
525
- }
526
- return this.canvas.setAttribute('data-caman-id', this.id);
527
- };
528
-
529
- Caman.prototype.hiDPIDisabled = function() {
530
- return this.canvas.getAttribute('data-caman-hidpi-disabled') !== null;
531
- };
532
-
533
- Caman.prototype.hiDPIAdjustments = function() {
534
- var ratio;
535
- if (Caman.NodeJS || !this.needsHiDPISwap()) {
536
- return;
537
- }
538
- ratio = this.hiDPIRatio();
539
- if (ratio !== 1) {
540
- Log.debug("HiDPI ratio = " + ratio);
541
- this.scaled = true;
542
- this.preScaledWidth = this.canvas.width;
543
- this.preScaledHeight = this.canvas.height;
544
- this.canvas.width = this.preScaledWidth * ratio;
545
- this.canvas.height = this.preScaledHeight * ratio;
546
- this.canvas.style.width = "" + this.preScaledWidth + "px";
547
- this.canvas.style.height = "" + this.preScaledHeight + "px";
548
- this.context.scale(ratio, ratio);
549
- this.width = this.originalWidth = this.canvas.width;
550
- return this.height = this.originalHeight = this.canvas.height;
551
- }
552
- };
553
-
554
- Caman.prototype.hiDPIRatio = function() {
555
- var backingStoreRatio, devicePixelRatio;
556
- devicePixelRatio = window.devicePixelRatio || 1;
557
- backingStoreRatio = this.context.webkitBackingStorePixelRatio || this.context.mozBackingStorePixelRatio || this.context.msBackingStorePixelRatio || this.context.oBackingStorePixelRatio || this.context.backingStorePixelRatio || 1;
558
- return devicePixelRatio / backingStoreRatio;
559
- };
560
-
561
- Caman.prototype.hiDPICapable = function() {
562
- return (window.devicePixelRatio != null) && window.devicePixelRatio !== 1;
563
- };
564
-
565
- Caman.prototype.needsHiDPISwap = function() {
566
- if (this.hiDPIDisabled() || !this.hiDPICapable()) {
567
- return false;
568
- }
569
- return this.hiDPIReplacement() !== null;
570
- };
571
-
572
- Caman.prototype.hiDPIReplacement = function() {
573
- if (this.image == null) {
574
- return null;
575
- }
576
- return this.image.getAttribute('data-caman-hidpi');
577
- };
578
-
579
- Caman.prototype.replaceCanvas = function(newCanvas) {
580
- var oldCanvas;
581
- oldCanvas = this.canvas;
582
- this.canvas = newCanvas;
583
- this.context = this.canvas.getContext('2d');
584
- if (!Caman.NodeJS) {
585
- oldCanvas.parentNode.replaceChild(this.canvas, oldCanvas);
586
- }
587
- this.width = this.canvas.width;
588
- this.height = this.canvas.height;
589
- this.reloadCanvasData();
590
- return this.dimensions = {
591
- width: this.canvas.width,
592
- height: this.canvas.height
593
- };
594
- };
595
-
596
- Caman.prototype.render = function(callback) {
597
- var _this = this;
598
- if (callback == null) {
599
- callback = function() {};
600
- }
601
- Event.trigger(this, "renderStart");
602
- return this.renderer.execute(function() {
603
- _this.context.putImageData(_this.imageData, 0, 0);
604
- return callback.call(_this);
605
- });
606
- };
607
-
608
- Caman.prototype.revert = function(updateContext) {
609
- var i, pixel, _i, _len, _ref;
610
- if (updateContext == null) {
611
- updateContext = true;
612
- }
613
- if (!Caman.allowRevert) {
614
- throw "Revert disabled";
615
- }
616
- _ref = this.originalVisiblePixels();
617
- for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
618
- pixel = _ref[i];
619
- this.pixelData[i] = pixel;
620
- }
621
- if (updateContext) {
622
- return this.context.putImageData(this.imageData, 0, 0);
623
- }
624
- };
625
-
626
- Caman.prototype.reset = function() {
627
- var canvas, ctx, i, imageData, pixel, pixelData, _i, _len, _ref;
628
- canvas = document.createElement('canvas');
629
- Util.copyAttributes(this.canvas, canvas);
630
- canvas.width = this.originalWidth;
631
- canvas.height = this.originalHeight;
632
- ctx = canvas.getContext('2d');
633
- imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
634
- pixelData = imageData.data;
635
- _ref = this.initializedPixelData;
636
- for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
637
- pixel = _ref[i];
638
- pixelData[i] = pixel;
639
- }
640
- ctx.putImageData(imageData, 0, 0);
641
- this.cropCoordinates = {
642
- x: 0,
643
- y: 0
644
- };
645
- this.resized = false;
646
- return this.replaceCanvas(canvas);
647
- };
648
-
649
- Caman.prototype.originalVisiblePixels = function() {
650
- var canvas, coord, ctx, endX, endY, i, imageData, pixel, pixelData, pixels, scaledCanvas, startX, startY, width, _i, _j, _len, _ref, _ref1, _ref2, _ref3;
651
- if (!Caman.allowRevert) {
652
- throw "Revert disabled";
653
- }
654
- pixels = [];
655
- startX = this.cropCoordinates.x;
656
- endX = startX + this.width;
657
- startY = this.cropCoordinates.y;
658
- endY = startY + this.height;
659
- if (this.resized) {
660
- canvas = document.createElement('canvas');
661
- canvas.width = this.originalWidth;
662
- canvas.height = this.originalHeight;
663
- ctx = canvas.getContext('2d');
664
- imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
665
- pixelData = imageData.data;
666
- _ref = this.originalPixelData;
667
- for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
668
- pixel = _ref[i];
669
- pixelData[i] = pixel;
670
- }
671
- ctx.putImageData(imageData, 0, 0);
672
- scaledCanvas = document.createElement('canvas');
673
- scaledCanvas.width = this.width;
674
- scaledCanvas.height = this.height;
675
- ctx = scaledCanvas.getContext('2d');
676
- ctx.drawImage(canvas, 0, 0, this.originalWidth, this.originalHeight, 0, 0, this.width, this.height);
677
- pixelData = ctx.getImageData(0, 0, this.width, this.height).data;
678
- width = this.width;
679
- } else {
680
- pixelData = this.originalPixelData;
681
- width = this.originalWidth;
682
- }
683
- for (i = _j = 0, _ref1 = pixelData.length; _j < _ref1; i = _j += 4) {
684
- coord = Pixel.locationToCoordinates(i, width);
685
- if (((startX <= (_ref2 = coord.x) && _ref2 < endX)) && ((startY <= (_ref3 = coord.y) && _ref3 < endY))) {
686
- pixels.push(pixelData[i], pixelData[i + 1], pixelData[i + 2], pixelData[i + 3]);
687
- }
688
- }
689
- return pixels;
690
- };
691
-
692
- Caman.prototype.process = function(name, processFn) {
693
- this.renderer.add({
694
- type: Filter.Type.Single,
695
- name: name,
696
- processFn: processFn
697
- });
698
- return this;
699
- };
700
-
701
- Caman.prototype.processKernel = function(name, adjust, divisor, bias) {
702
- var i, _i, _ref;
703
- if (divisor == null) {
704
- divisor = null;
705
- }
706
- if (bias == null) {
707
- bias = 0;
708
- }
709
- if (divisor == null) {
710
- divisor = 0;
711
- for (i = _i = 0, _ref = adjust.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
712
- divisor += adjust[i];
713
- }
714
- }
715
- this.renderer.add({
716
- type: Filter.Type.Kernel,
717
- name: name,
718
- adjust: adjust,
719
- divisor: divisor,
720
- bias: bias
721
- });
722
- return this;
723
- };
724
-
725
- Caman.prototype.processPlugin = function(plugin, args) {
726
- this.renderer.add({
727
- type: Filter.Type.Plugin,
728
- plugin: plugin,
729
- args: args
730
- });
731
- return this;
732
- };
733
-
734
- Caman.prototype.newLayer = function(callback) {
735
- var layer;
736
- layer = new Layer(this);
737
- this.canvasQueue.push(layer);
738
- this.renderer.add({
739
- type: Filter.Type.LayerDequeue
740
- });
741
- callback.call(layer);
742
- this.renderer.add({
743
- type: Filter.Type.LayerFinished
744
- });
745
- return this;
746
- };
747
-
748
- Caman.prototype.executeLayer = function(layer) {
749
- return this.pushContext(layer);
750
- };
751
-
752
- Caman.prototype.pushContext = function(layer) {
753
- this.layerStack.push(this.currentLayer);
754
- this.pixelStack.push(this.pixelData);
755
- this.currentLayer = layer;
756
- return this.pixelData = layer.pixelData;
757
- };
758
-
759
- Caman.prototype.popContext = function() {
760
- this.pixelData = this.pixelStack.pop();
761
- return this.currentLayer = this.layerStack.pop();
762
- };
763
-
764
- Caman.prototype.applyCurrentLayer = function() {
765
- return this.currentLayer.applyToParent();
766
- };
767
-
768
- return Caman;
769
-
770
- })(Module);
771
-
772
- Root.Caman = Caman;
773
-
774
- Caman.Analyze = (function() {
775
- function Analyze(c) {
776
- this.c = c;
777
- }
778
-
779
- Analyze.prototype.calculateLevels = function() {
780
- var i, levels, numPixels, _i, _j, _k, _ref;
781
- levels = {
782
- r: {},
783
- g: {},
784
- b: {}
785
- };
786
- for (i = _i = 0; _i <= 255; i = ++_i) {
787
- levels.r[i] = 0;
788
- levels.g[i] = 0;
789
- levels.b[i] = 0;
790
- }
791
- for (i = _j = 0, _ref = this.c.pixelData.length; _j < _ref; i = _j += 4) {
792
- levels.r[this.c.pixelData[i]]++;
793
- levels.g[this.c.pixelData[i + 1]]++;
794
- levels.b[this.c.pixelData[i + 2]]++;
795
- }
796
- numPixels = this.c.pixelData.length / 4;
797
- for (i = _k = 0; _k <= 255; i = ++_k) {
798
- levels.r[i] /= numPixels;
799
- levels.g[i] /= numPixels;
800
- levels.b[i] /= numPixels;
801
- }
802
- return levels;
803
- };
804
-
805
- return Analyze;
806
-
807
- })();
808
-
809
- Analyze = Caman.Analyze;
810
-
811
- Caman.DOMUpdated = function() {
812
- var img, imgs, parser, _i, _len, _results;
813
- imgs = document.querySelectorAll("img[data-caman]");
814
- if (!(imgs.length > 0)) {
815
- return;
816
- }
817
- _results = [];
818
- for (_i = 0, _len = imgs.length; _i < _len; _i++) {
819
- img = imgs[_i];
820
- _results.push(parser = new CamanParser(img, function() {
821
- this.parse();
822
- return this.execute();
823
- }));
824
- }
825
- return _results;
826
- };
827
-
828
- if (Caman.autoload) {
829
- (function() {
830
- if (document.readyState === "complete") {
831
- return Caman.DOMUpdated();
832
- } else {
833
- return document.addEventListener("DOMContentLoaded", Caman.DOMUpdated, false);
834
- }
835
- })();
836
- }
837
-
838
- CamanParser = (function() {
839
- var INST_REGEX;
840
-
841
- INST_REGEX = "(\\w+)\\((.*?)\\)";
842
-
843
- function CamanParser(ele, ready) {
844
- this.dataStr = ele.getAttribute('data-caman');
845
- this.caman = Caman(ele, ready.bind(this));
846
- }
847
-
848
- CamanParser.prototype.parse = function() {
849
- var args, e, filter, func, inst, instFunc, m, r, unparsedInstructions, _i, _len, _ref, _results;
850
- this.ele = this.caman.canvas;
851
- r = new RegExp(INST_REGEX, 'g');
852
- unparsedInstructions = this.dataStr.match(r);
853
- if (!(unparsedInstructions.length > 0)) {
854
- return;
855
- }
856
- r = new RegExp(INST_REGEX);
857
- _results = [];
858
- for (_i = 0, _len = unparsedInstructions.length; _i < _len; _i++) {
859
- inst = unparsedInstructions[_i];
860
- _ref = inst.match(r), m = _ref[0], filter = _ref[1], args = _ref[2];
861
- instFunc = new Function("return function() { this." + filter + "(" + args + "); };");
862
- try {
863
- func = instFunc();
864
- _results.push(func.call(this.caman));
865
- } catch (_error) {
866
- e = _error;
867
- _results.push(Log.debug(e));
868
- }
869
- }
870
- return _results;
871
- };
872
-
873
- CamanParser.prototype.execute = function() {
874
- var ele;
875
- ele = this.ele;
876
- return this.caman.render(function() {
877
- return ele.parentNode.replaceChild(this.toImage(), ele);
878
- });
879
- };
880
-
881
- return CamanParser;
882
-
883
- })();
884
-
885
- Caman.Blender = (function() {
886
- function Blender() {}
887
-
888
- Blender.blenders = {};
889
-
890
- Blender.register = function(name, func) {
891
- return this.blenders[name] = func;
892
- };
893
-
894
- Blender.execute = function(name, rgbaLayer, rgbaParent) {
895
- return this.blenders[name](rgbaLayer, rgbaParent);
896
- };
897
-
898
- return Blender;
899
-
900
- })();
901
-
902
- Blender = Caman.Blender;
903
-
904
- Caman.Calculate = (function() {
905
- function Calculate() {}
906
-
907
- Calculate.distance = function(x1, y1, x2, y2) {
908
- return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
909
- };
910
-
911
- Calculate.randomRange = function(min, max, getFloat) {
912
- var rand;
913
- if (getFloat == null) {
914
- getFloat = false;
915
- }
916
- rand = min + (Math.random() * (max - min));
917
- if (getFloat) {
918
- return rand.toFixed(getFloat);
919
- } else {
920
- return Math.round(rand);
921
- }
922
- };
923
-
924
- Calculate.luminance = function(rgba) {
925
- return (0.299 * rgba.r) + (0.587 * rgba.g) + (0.114 * rgba.b);
926
- };
927
-
928
- Calculate.bezier = function(start, ctrl1, ctrl2, end, lowBound, highBound) {
929
- var bezier, clamp, controlPoints, endX, i, j, lerp, next, prev, t, _i, _j, _ref;
930
- if (lowBound == null) {
931
- lowBound = 0;
932
- }
933
- if (highBound == null) {
934
- highBound = 255;
935
- }
936
- if (start[0] instanceof Array) {
937
- controlPoints = start;
938
- lowBound = ctrl1;
939
- highBound = ctrl2;
940
- } else {
941
- controlPoints = [start, ctrl1, ctrl2, end];
942
- }
943
- if (controlPoints.length < 2) {
944
- throw "Invalid number of arguments to bezier";
945
- }
946
- bezier = {};
947
- lerp = function(a, b, t) {
948
- return a * (1 - t) + b * t;
949
- };
950
- clamp = function(a, min, max) {
951
- return Math.min(Math.max(a, min), max);
952
- };
953
- for (i = _i = 0; _i < 1000; i = ++_i) {
954
- t = i / 1000;
955
- prev = controlPoints;
956
- while (prev.length > 1) {
957
- next = [];
958
- for (j = _j = 0, _ref = prev.length - 2; 0 <= _ref ? _j <= _ref : _j >= _ref; j = 0 <= _ref ? ++_j : --_j) {
959
- next.push([lerp(prev[j][0], prev[j + 1][0], t), lerp(prev[j][1], prev[j + 1][1], t)]);
960
- }
961
- prev = next;
962
- }
963
- bezier[Math.round(prev[0][0])] = Math.round(clamp(prev[0][1], lowBound, highBound));
964
- }
965
- endX = controlPoints[controlPoints.length - 1][0];
966
- bezier = Caman.Calculate.missingValues(bezier, endX);
967
- if (bezier[endX] == null) {
968
- bezier[endX] = bezier[endX - 1];
969
- }
970
- return bezier;
971
- };
972
-
973
- Calculate.hermite = function(controlPoints, lowBound, highBound) {
974
- var add, clamp, count, endX, fac0, fac1, fac2, fac3, i, j, lerp, m0, m1, mul, p, p0, p1, pointsPerSegment, pointsPerStep, pos, ret, sub, t, _i, _j, _ref,
975
- _this = this;
976
- if (controlPoints.length < 2) {
977
- throw "Invalid number of arguments to hermite";
978
- }
979
- ret = {};
980
- lerp = function(a, b, t) {
981
- return a * (1 - t) + b * t;
982
- };
983
- add = function(a, b, c, d) {
984
- return [a[0] + b[0] + c[0] + d[0], a[1] + b[1] + c[1] + d[1]];
985
- };
986
- mul = function(a, b) {
987
- return [a[0] * b[0], a[1] * b[1]];
988
- };
989
- sub = function(a, b) {
990
- return [a[0] - b[0], a[1] - b[1]];
991
- };
992
- clamp = function(a, min, max) {
993
- return Math.min(Math.max(a, min), max);
994
- };
995
- count = 0;
996
- for (i = _i = 0, _ref = controlPoints.length - 2; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
997
- p0 = controlPoints[i];
998
- p1 = controlPoints[i + 1];
999
- pointsPerSegment = p1[0] - p0[0];
1000
- pointsPerStep = 1 / pointsPerSegment;
1001
- if (i === controlPoints.length - 2) {
1002
- pointsPerStep = 1 / (pointsPerSegment - 1);
1003
- }
1004
- p = i > 0 ? controlPoints[i - 1] : p0;
1005
- m0 = mul(sub(p1, p), [0.5, 0.5]);
1006
- p = i < controlPoints.length - 2 ? controlPoints[i + 2] : p1;
1007
- m1 = mul(sub(p, p0), [0.5, 0.5]);
1008
- for (j = _j = 0; 0 <= pointsPerSegment ? _j <= pointsPerSegment : _j >= pointsPerSegment; j = 0 <= pointsPerSegment ? ++_j : --_j) {
1009
- t = j * pointsPerStep;
1010
- fac0 = 2.0 * t * t * t - 3.0 * t * t + 1.0;
1011
- fac1 = t * t * t - 2.0 * t * t + t;
1012
- fac2 = -2.0 * t * t * t + 3.0 * t * t;
1013
- fac3 = t * t * t - t * t;
1014
- pos = add(mul(p0, [fac0, fac0]), mul(m0, [fac1, fac1]), mul(p1, [fac2, fac2]), mul(m1, [fac3, fac3]));
1015
- ret[Math.round(pos[0])] = Math.round(clamp(pos[1], lowBound, highBound));
1016
- count += 1;
1017
- }
1018
- }
1019
- endX = controlPoints[controlPoints.length - 1][0];
1020
- ret = Caman.Calculate.missingValues(ret, endX);
1021
- return ret;
1022
- };
1023
-
1024
- Calculate.missingValues = function(values, endX) {
1025
- var i, j, leftCoord, ret, rightCoord, _i, _j;
1026
- if (Object.keys(values).length < endX + 1) {
1027
- ret = {};
1028
- for (i = _i = 0; 0 <= endX ? _i <= endX : _i >= endX; i = 0 <= endX ? ++_i : --_i) {
1029
- if (values[i] != null) {
1030
- ret[i] = values[i];
1031
- } else {
1032
- leftCoord = [i - 1, ret[i - 1]];
1033
- for (j = _j = i; i <= endX ? _j <= endX : _j >= endX; j = i <= endX ? ++_j : --_j) {
1034
- if (values[j] != null) {
1035
- rightCoord = [j, values[j]];
1036
- break;
1037
- }
1038
- }
1039
- ret[i] = leftCoord[1] + ((rightCoord[1] - leftCoord[1]) / (rightCoord[0] - leftCoord[0])) * (i - leftCoord[0]);
1040
- }
1041
- }
1042
- return ret;
1043
- }
1044
- return values;
1045
- };
1046
-
1047
- return Calculate;
1048
-
1049
- })();
1050
-
1051
- Calculate = Caman.Calculate;
1052
-
1053
- Caman.Convert = (function() {
1054
- function Convert() {}
1055
-
1056
- Convert.hexToRGB = function(hex) {
1057
- var b, g, r;
1058
- if (hex.charAt(0) === "#") {
1059
- hex = hex.substr(1);
1060
- }
1061
- r = parseInt(hex.substr(0, 2), 16);
1062
- g = parseInt(hex.substr(2, 2), 16);
1063
- b = parseInt(hex.substr(4, 2), 16);
1064
- return {
1065
- r: r,
1066
- g: g,
1067
- b: b
1068
- };
1069
- };
1070
-
1071
- Convert.rgbToHSL = function(r, g, b) {
1072
- var d, h, l, max, min, s;
1073
- if (typeof r === "object") {
1074
- g = r.g;
1075
- b = r.b;
1076
- r = r.r;
1077
- }
1078
- r /= 255;
1079
- g /= 255;
1080
- b /= 255;
1081
- max = Math.max(r, g, b);
1082
- min = Math.min(r, g, b);
1083
- l = (max + min) / 2;
1084
- if (max === min) {
1085
- h = s = 0;
1086
- } else {
1087
- d = max - min;
1088
- s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
1089
- h = (function() {
1090
- switch (max) {
1091
- case r:
1092
- return (g - b) / d + (g < b ? 6 : 0);
1093
- case g:
1094
- return (b - r) / d + 2;
1095
- case b:
1096
- return (r - g) / d + 4;
1097
- }
1098
- })();
1099
- h /= 6;
1100
- }
1101
- return {
1102
- h: h,
1103
- s: s,
1104
- l: l
1105
- };
1106
- };
1107
-
1108
- Convert.hslToRGB = function(h, s, l) {
1109
- var b, g, p, q, r;
1110
- if (typeof h === "object") {
1111
- s = h.s;
1112
- l = h.l;
1113
- h = h.h;
1114
- }
1115
- if (s === 0) {
1116
- r = g = b = l;
1117
- } else {
1118
- q = l < 0.5 ? l * (1 + s) : l + s - l * s;
1119
- p = 2 * l - q;
1120
- r = this.hueToRGB(p, q, h + 1 / 3);
1121
- g = this.hueToRGB(p, q, h);
1122
- b = this.hueToRGB(p, q, h - 1 / 3);
1123
- }
1124
- return {
1125
- r: r * 255,
1126
- g: g * 255,
1127
- b: b * 255
1128
- };
1129
- };
1130
-
1131
- Convert.hueToRGB = function(p, q, t) {
1132
- if (t < 0) {
1133
- t += 1;
1134
- }
1135
- if (t > 1) {
1136
- t -= 1;
1137
- }
1138
- if (t < 1 / 6) {
1139
- return p + (q - p) * 6 * t;
1140
- }
1141
- if (t < 1 / 2) {
1142
- return q;
1143
- }
1144
- if (t < 2 / 3) {
1145
- return p + (q - p) * (2 / 3 - t) * 6;
1146
- }
1147
- return p;
1148
- };
1149
-
1150
- Convert.rgbToHSV = function(r, g, b) {
1151
- var d, h, max, min, s, v;
1152
- r /= 255;
1153
- g /= 255;
1154
- b /= 255;
1155
- max = Math.max(r, g, b);
1156
- min = Math.min(r, g, b);
1157
- v = max;
1158
- d = max - min;
1159
- s = max === 0 ? 0 : d / max;
1160
- if (max === min) {
1161
- h = 0;
1162
- } else {
1163
- h = (function() {
1164
- switch (max) {
1165
- case r:
1166
- return (g - b) / d + (g < b ? 6 : 0);
1167
- case g:
1168
- return (b - r) / d + 2;
1169
- case b:
1170
- return (r - g) / d + 4;
1171
- }
1172
- })();
1173
- h /= 6;
1174
- }
1175
- return {
1176
- h: h,
1177
- s: s,
1178
- v: v
1179
- };
1180
- };
1181
-
1182
- Convert.hsvToRGB = function(h, s, v) {
1183
- var b, f, g, i, p, q, r, t;
1184
- i = Math.floor(h * 6);
1185
- f = h * 6 - i;
1186
- p = v * (1 - s);
1187
- q = v * (1 - f * s);
1188
- t = v * (1 - (1 - f) * s);
1189
- switch (i % 6) {
1190
- case 0:
1191
- r = v;
1192
- g = t;
1193
- b = p;
1194
- break;
1195
- case 1:
1196
- r = q;
1197
- g = v;
1198
- b = p;
1199
- break;
1200
- case 2:
1201
- r = p;
1202
- g = v;
1203
- b = t;
1204
- break;
1205
- case 3:
1206
- r = p;
1207
- g = q;
1208
- b = v;
1209
- break;
1210
- case 4:
1211
- r = t;
1212
- g = p;
1213
- b = v;
1214
- break;
1215
- case 5:
1216
- r = v;
1217
- g = p;
1218
- b = q;
1219
- }
1220
- return {
1221
- r: Math.floor(r * 255),
1222
- g: Math.floor(g * 255),
1223
- b: Math.floor(b * 255)
1224
- };
1225
- };
1226
-
1227
- Convert.rgbToXYZ = function(r, g, b) {
1228
- var x, y, z;
1229
- r /= 255;
1230
- g /= 255;
1231
- b /= 255;
1232
- if (r > 0.04045) {
1233
- r = Math.pow((r + 0.055) / 1.055, 2.4);
1234
- } else {
1235
- r /= 12.92;
1236
- }
1237
- if (g > 0.04045) {
1238
- g = Math.pow((g + 0.055) / 1.055, 2.4);
1239
- } else {
1240
- g /= 12.92;
1241
- }
1242
- if (b > 0.04045) {
1243
- b = Math.pow((b + 0.055) / 1.055, 2.4);
1244
- } else {
1245
- b /= 12.92;
1246
- }
1247
- x = r * 0.4124 + g * 0.3576 + b * 0.1805;
1248
- y = r * 0.2126 + g * 0.7152 + b * 0.0722;
1249
- z = r * 0.0193 + g * 0.1192 + b * 0.9505;
1250
- return {
1251
- x: x * 100,
1252
- y: y * 100,
1253
- z: z * 100
1254
- };
1255
- };
1256
-
1257
- Convert.xyzToRGB = function(x, y, z) {
1258
- var b, g, r;
1259
- x /= 100;
1260
- y /= 100;
1261
- z /= 100;
1262
- r = (3.2406 * x) + (-1.5372 * y) + (-0.4986 * z);
1263
- g = (-0.9689 * x) + (1.8758 * y) + (0.0415 * z);
1264
- b = (0.0557 * x) + (-0.2040 * y) + (1.0570 * z);
1265
- if (r > 0.0031308) {
1266
- r = (1.055 * Math.pow(r, 0.4166666667)) - 0.055;
1267
- } else {
1268
- r *= 12.92;
1269
- }
1270
- if (g > 0.0031308) {
1271
- g = (1.055 * Math.pow(g, 0.4166666667)) - 0.055;
1272
- } else {
1273
- g *= 12.92;
1274
- }
1275
- if (b > 0.0031308) {
1276
- b = (1.055 * Math.pow(b, 0.4166666667)) - 0.055;
1277
- } else {
1278
- b *= 12.92;
1279
- }
1280
- return {
1281
- r: r * 255,
1282
- g: g * 255,
1283
- b: b * 255
1284
- };
1285
- };
1286
-
1287
- Convert.xyzToLab = function(x, y, z) {
1288
- var a, b, l, whiteX, whiteY, whiteZ;
1289
- if (typeof x === "object") {
1290
- y = x.y;
1291
- z = x.z;
1292
- x = x.x;
1293
- }
1294
- whiteX = 95.047;
1295
- whiteY = 100.0;
1296
- whiteZ = 108.883;
1297
- x /= whiteX;
1298
- y /= whiteY;
1299
- z /= whiteZ;
1300
- if (x > 0.008856451679) {
1301
- x = Math.pow(x, 0.3333333333);
1302
- } else {
1303
- x = (7.787037037 * x) + 0.1379310345;
1304
- }
1305
- if (y > 0.008856451679) {
1306
- y = Math.pow(y, 0.3333333333);
1307
- } else {
1308
- y = (7.787037037 * y) + 0.1379310345;
1309
- }
1310
- if (z > 0.008856451679) {
1311
- z = Math.pow(z, 0.3333333333);
1312
- } else {
1313
- z = (7.787037037 * z) + 0.1379310345;
1314
- }
1315
- l = 116 * y - 16;
1316
- a = 500 * (x - y);
1317
- b = 200 * (y - z);
1318
- return {
1319
- l: l,
1320
- a: a,
1321
- b: b
1322
- };
1323
- };
1324
-
1325
- Convert.labToXYZ = function(l, a, b) {
1326
- var x, y, z;
1327
- if (typeof l === "object") {
1328
- a = l.a;
1329
- b = l.b;
1330
- l = l.l;
1331
- }
1332
- y = (l + 16) / 116;
1333
- x = y + (a / 500);
1334
- z = y - (b / 200);
1335
- if (x > 0.2068965517) {
1336
- x = x * x * x;
1337
- } else {
1338
- x = 0.1284185493 * (x - 0.1379310345);
1339
- }
1340
- if (y > 0.2068965517) {
1341
- y = y * y * y;
1342
- } else {
1343
- y = 0.1284185493 * (y - 0.1379310345);
1344
- }
1345
- if (z > 0.2068965517) {
1346
- z = z * z * z;
1347
- } else {
1348
- z = 0.1284185493 * (z - 0.1379310345);
1349
- }
1350
- return {
1351
- x: x * 95.047,
1352
- y: y * 100.0,
1353
- z: z * 108.883
1354
- };
1355
- };
1356
-
1357
- Convert.rgbToLab = function(r, g, b) {
1358
- var xyz;
1359
- if (typeof r === "object") {
1360
- g = r.g;
1361
- b = r.b;
1362
- r = r.r;
1363
- }
1364
- xyz = this.rgbToXYZ(r, g, b);
1365
- return this.xyzToLab(xyz);
1366
- };
1367
-
1368
- Convert.labToRGB = function(l, a, b) {};
1369
-
1370
- return Convert;
1371
-
1372
- })();
1373
-
1374
- Convert = Caman.Convert;
1375
-
1376
- Caman.Event = (function() {
1377
- function Event() {}
1378
-
1379
- Event.events = {};
1380
-
1381
- Event.types = ["processStart", "processComplete", "renderStart", "renderFinished", "blockStarted", "blockFinished"];
1382
-
1383
- Event.trigger = function(target, type, data) {
1384
- var event, _i, _len, _ref, _results;
1385
- if (data == null) {
1386
- data = null;
1387
- }
1388
- if (this.events[type] && this.events[type].length) {
1389
- _ref = this.events[type];
1390
- _results = [];
1391
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
1392
- event = _ref[_i];
1393
- if (event.target === null || target.id === event.target.id) {
1394
- _results.push(event.fn.call(target, data));
1395
- } else {
1396
- _results.push(void 0);
1397
- }
1398
- }
1399
- return _results;
1400
- }
1401
- };
1402
-
1403
- Event.listen = function(target, type, fn) {
1404
- var _fn, _type;
1405
- if (typeof target === "string") {
1406
- _type = target;
1407
- _fn = type;
1408
- target = null;
1409
- type = _type;
1410
- fn = _fn;
1411
- }
1412
- if (__indexOf.call(this.types, type) < 0) {
1413
- return false;
1414
- }
1415
- if (!this.events[type]) {
1416
- this.events[type] = [];
1417
- }
1418
- this.events[type].push({
1419
- target: target,
1420
- fn: fn
1421
- });
1422
- return true;
1423
- };
1424
-
1425
- return Event;
1426
-
1427
- })();
1428
-
1429
- Event = Caman.Event;
1430
-
1431
- Caman.Filter = (function() {
1432
- function Filter() {}
1433
-
1434
- Filter.Type = {
1435
- Single: 1,
1436
- Kernel: 2,
1437
- LayerDequeue: 3,
1438
- LayerFinished: 4,
1439
- LoadOverlay: 5,
1440
- Plugin: 6
1441
- };
1442
-
1443
- Filter.register = function(name, filterFunc) {
1444
- return Caman.prototype[name] = filterFunc;
1445
- };
1446
-
1447
- return Filter;
1448
-
1449
- })();
1450
-
1451
- Filter = Caman.Filter;
1452
-
1453
- Caman.IO = (function() {
1454
- function IO() {}
1455
-
1456
- IO.domainRegex = /(?:(?:http|https):\/\/)((?:\w+)\.(?:(?:\w|\.)+))/;
1457
-
1458
- IO.isRemote = function(img) {
1459
- if (img == null) {
1460
- return false;
1461
- }
1462
- if (this.corsEnabled(img)) {
1463
- return false;
1464
- }
1465
- return this.isURLRemote(img.src);
1466
- };
1467
-
1468
- IO.corsEnabled = function(img) {
1469
- var _ref;
1470
- return (img.crossOrigin != null) && ((_ref = img.crossOrigin.toLowerCase()) === 'anonymous' || _ref === 'use-credentials');
1471
- };
1472
-
1473
- IO.isURLRemote = function(url) {
1474
- var matches;
1475
- matches = url.match(this.domainRegex);
1476
- if (matches) {
1477
- return matches[1] !== document.domain;
1478
- } else {
1479
- return false;
1480
- }
1481
- };
1482
-
1483
- IO.remoteCheck = function(src) {
1484
- if (this.isURLRemote(src)) {
1485
- if (!Caman.remoteProxy.length) {
1486
- Log.info("Attempting to load a remote image without a configured proxy. URL: " + src);
1487
- } else {
1488
- if (Caman.isURLRemote(Caman.remoteProxy)) {
1489
- Log.info("Cannot use a remote proxy for loading images.");
1490
- return;
1491
- }
1492
- return this.proxyUrl(src);
1493
- }
1494
- }
1495
- };
1496
-
1497
- IO.proxyUrl = function(src) {
1498
- return "" + Caman.remoteProxy + "?" + Caman.proxyParam + "=" + (encodeURIComponent(src));
1499
- };
1500
-
1501
- IO.useProxy = function(lang) {
1502
- var langToExt;
1503
- langToExt = {
1504
- ruby: 'rb',
1505
- python: 'py',
1506
- perl: 'pl',
1507
- javascript: 'js'
1508
- };
1509
- lang = lang.toLowerCase();
1510
- if (langToExt[lang] != null) {
1511
- lang = langToExt[lang];
1512
- }
1513
- return "proxies/caman_proxy." + lang;
1514
- };
1515
-
1516
- return IO;
1517
-
1518
- })();
1519
-
1520
- Caman.prototype.save = function() {
1521
- if (typeof exports !== "undefined" && exports !== null) {
1522
- return this.nodeSave.apply(this, arguments);
1523
- } else {
1524
- return this.browserSave.apply(this, arguments);
1525
- }
1526
- };
1527
-
1528
- Caman.prototype.browserSave = function(type) {
1529
- var image;
1530
- if (type == null) {
1531
- type = "png";
1532
- }
1533
- type = type.toLowerCase();
1534
- image = this.toBase64(type).replace("image/" + type, "image/octet-stream");
1535
- return document.location.href = image;
1536
- };
1537
-
1538
- Caman.prototype.nodeSave = function(file, overwrite, callback) {
1539
- var e, stats;
1540
- if (overwrite == null) {
1541
- overwrite = true;
1542
- }
1543
- if (callback == null) {
1544
- callback = null;
1545
- }
1546
- try {
1547
- stats = fs.statSync(file);
1548
- if (stats.isFile() && !overwrite) {
1549
- return false;
1550
- }
1551
- } catch (_error) {
1552
- e = _error;
1553
- Log.debug("Creating output file " + file);
1554
- }
1555
- return fs.writeFile(file, this.canvas.toBuffer(), function(err) {
1556
- Log.debug("Finished writing to " + file);
1557
- if (callback) {
1558
- return callback.call(this, err);
1559
- }
1560
- });
1561
- };
1562
-
1563
- Caman.prototype.toImage = function(type) {
1564
- var img;
1565
- img = new Image();
1566
- img.src = this.toBase64(type);
1567
- img.width = this.dimensions.width;
1568
- img.height = this.dimensions.height;
1569
- if (window.devicePixelRatio) {
1570
- img.width /= window.devicePixelRatio;
1571
- img.height /= window.devicePixelRatio;
1572
- }
1573
- return img;
1574
- };
1575
-
1576
- Caman.prototype.toBase64 = function(type) {
1577
- if (type == null) {
1578
- type = "png";
1579
- }
1580
- type = type.toLowerCase();
1581
- return this.canvas.toDataURL("image/" + type);
1582
- };
1583
-
1584
- IO = Caman.IO;
1585
-
1586
- Caman.Layer = (function() {
1587
- function Layer(c) {
1588
- this.c = c;
1589
- this.filter = this.c;
1590
- this.options = {
1591
- blendingMode: 'normal',
1592
- opacity: 1.0
1593
- };
1594
- this.layerID = Util.uniqid.get();
1595
- this.canvas = typeof exports !== "undefined" && exports !== null ? new Canvas() : document.createElement('canvas');
1596
- this.canvas.width = this.c.dimensions.width;
1597
- this.canvas.height = this.c.dimensions.height;
1598
- this.context = this.canvas.getContext('2d');
1599
- this.context.createImageData(this.canvas.width, this.canvas.height);
1600
- this.imageData = this.context.getImageData(0, 0, this.canvas.width, this.canvas.height);
1601
- this.pixelData = this.imageData.data;
1602
- }
1603
-
1604
- Layer.prototype.newLayer = function(cb) {
1605
- return this.c.newLayer.call(this.c, cb);
1606
- };
1607
-
1608
- Layer.prototype.setBlendingMode = function(mode) {
1609
- this.options.blendingMode = mode;
1610
- return this;
1611
- };
1612
-
1613
- Layer.prototype.opacity = function(opacity) {
1614
- this.options.opacity = opacity / 100;
1615
- return this;
1616
- };
1617
-
1618
- Layer.prototype.copyParent = function() {
1619
- var i, parentData, _i, _ref;
1620
- parentData = this.c.pixelData;
1621
- for (i = _i = 0, _ref = this.c.pixelData.length; _i < _ref; i = _i += 4) {
1622
- this.pixelData[i] = parentData[i];
1623
- this.pixelData[i + 1] = parentData[i + 1];
1624
- this.pixelData[i + 2] = parentData[i + 2];
1625
- this.pixelData[i + 3] = parentData[i + 3];
1626
- }
1627
- return this;
1628
- };
1629
-
1630
- Layer.prototype.fillColor = function() {
1631
- return this.c.fillColor.apply(this.c, arguments);
1632
- };
1633
-
1634
- Layer.prototype.overlayImage = function(image) {
1635
- if (typeof image === "object") {
1636
- image = image.src;
1637
- } else if (typeof image === "string" && image[0] === "#") {
1638
- image = $(image).src;
1639
- }
1640
- if (!image) {
1641
- return this;
1642
- }
1643
- this.c.renderer.renderQueue.push({
1644
- type: Filter.Type.LoadOverlay,
1645
- src: image,
1646
- layer: this
1647
- });
1648
- return this;
1649
- };
1650
-
1651
- Layer.prototype.applyToParent = function() {
1652
- var i, layerData, parentData, result, rgbaLayer, rgbaParent, _i, _ref, _results;
1653
- parentData = this.c.pixelStack[this.c.pixelStack.length - 1];
1654
- layerData = this.c.pixelData;
1655
- _results = [];
1656
- for (i = _i = 0, _ref = layerData.length; _i < _ref; i = _i += 4) {
1657
- rgbaParent = {
1658
- r: parentData[i],
1659
- g: parentData[i + 1],
1660
- b: parentData[i + 2],
1661
- a: parentData[i + 3]
1662
- };
1663
- rgbaLayer = {
1664
- r: layerData[i],
1665
- g: layerData[i + 1],
1666
- b: layerData[i + 2],
1667
- a: layerData[i + 3]
1668
- };
1669
- result = Blender.execute(this.options.blendingMode, rgbaLayer, rgbaParent);
1670
- result.r = Util.clampRGB(result.r);
1671
- result.g = Util.clampRGB(result.g);
1672
- result.b = Util.clampRGB(result.b);
1673
- if (result.a == null) {
1674
- result.a = rgbaLayer.a;
1675
- }
1676
- parentData[i] = rgbaParent.r - ((rgbaParent.r - result.r) * (this.options.opacity * (result.a / 255)));
1677
- parentData[i + 1] = rgbaParent.g - ((rgbaParent.g - result.g) * (this.options.opacity * (result.a / 255)));
1678
- _results.push(parentData[i + 2] = rgbaParent.b - ((rgbaParent.b - result.b) * (this.options.opacity * (result.a / 255))));
1679
- }
1680
- return _results;
1681
- };
1682
-
1683
- return Layer;
1684
-
1685
- })();
1686
-
1687
- Layer = Caman.Layer;
1688
-
1689
- Caman.Logger = (function() {
1690
- function Logger() {
1691
- var name, _i, _len, _ref;
1692
- _ref = ['log', 'info', 'warn', 'error'];
1693
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
1694
- name = _ref[_i];
1695
- this[name] = (function(name) {
1696
- return function() {
1697
- var args, e;
1698
- args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
1699
- if (!Caman.DEBUG) {
1700
- return;
1701
- }
1702
- try {
1703
- return console[name].apply(console, args);
1704
- } catch (_error) {
1705
- e = _error;
1706
- return console[name](args);
1707
- }
1708
- };
1709
- })(name);
1710
- }
1711
- this.debug = this.log;
1712
- }
1713
-
1714
- return Logger;
1715
-
1716
- })();
1717
-
1718
- Log = new Caman.Logger();
1719
-
1720
- Caman.Pixel = (function() {
1721
- Pixel.coordinatesToLocation = function(x, y, width) {
1722
- return (y * width + x) * 4;
1723
- };
1724
-
1725
- Pixel.locationToCoordinates = function(loc, width) {
1726
- var x, y;
1727
- y = Math.floor(loc / (width * 4));
1728
- x = (loc % (width * 4)) / 4;
1729
- return {
1730
- x: x,
1731
- y: y
1732
- };
1733
- };
1734
-
1735
- function Pixel(r, g, b, a, c) {
1736
- this.r = r != null ? r : 0;
1737
- this.g = g != null ? g : 0;
1738
- this.b = b != null ? b : 0;
1739
- this.a = a != null ? a : 255;
1740
- this.c = c != null ? c : null;
1741
- this.loc = 0;
1742
- }
1743
-
1744
- Pixel.prototype.setContext = function(c) {
1745
- return this.c = c;
1746
- };
1747
-
1748
- Pixel.prototype.locationXY = function() {
1749
- var x, y;
1750
- if (this.c == null) {
1751
- throw "Requires a CamanJS context";
1752
- }
1753
- y = this.c.dimensions.height - Math.floor(this.loc / (this.c.dimensions.width * 4));
1754
- x = (this.loc % (this.c.dimensions.width * 4)) / 4;
1755
- return {
1756
- x: x,
1757
- y: y
1758
- };
1759
- };
1760
-
1761
- Pixel.prototype.pixelAtLocation = function(loc) {
1762
- if (this.c == null) {
1763
- throw "Requires a CamanJS context";
1764
- }
1765
- return new Pixel(this.c.pixelData[loc], this.c.pixelData[loc + 1], this.c.pixelData[loc + 2], this.c.pixelData[loc + 3], this.c);
1766
- };
1767
-
1768
- Pixel.prototype.getPixelRelative = function(horiz, vert) {
1769
- var newLoc;
1770
- if (this.c == null) {
1771
- throw "Requires a CamanJS context";
1772
- }
1773
- newLoc = this.loc + (this.c.dimensions.width * 4 * (vert * -1)) + (4 * horiz);
1774
- if (newLoc > this.c.pixelData.length || newLoc < 0) {
1775
- return new Pixel(0, 0, 0, 255, this.c);
1776
- }
1777
- return this.pixelAtLocation(newLoc);
1778
- };
1779
-
1780
- Pixel.prototype.putPixelRelative = function(horiz, vert, rgba) {
1781
- var nowLoc;
1782
- if (this.c == null) {
1783
- throw "Requires a CamanJS context";
1784
- }
1785
- nowLoc = this.loc + (this.c.dimensions.width * 4 * (vert * -1)) + (4 * horiz);
1786
- if (newLoc > this.c.pixelData.length || newLoc < 0) {
1787
- return;
1788
- }
1789
- this.c.pixelData[newLoc] = rgba.r;
1790
- this.c.pixelData[newLoc + 1] = rgba.g;
1791
- this.c.pixelData[newLoc + 2] = rgba.b;
1792
- this.c.pixelData[newLoc + 3] = rgba.a;
1793
- return true;
1794
- };
1795
-
1796
- Pixel.prototype.getPixel = function(x, y) {
1797
- var loc;
1798
- if (this.c == null) {
1799
- throw "Requires a CamanJS context";
1800
- }
1801
- loc = this.coordinatesToLocation(x, y, this.width);
1802
- return this.pixelAtLocation(loc);
1803
- };
1804
-
1805
- Pixel.prototype.putPixel = function(x, y, rgba) {
1806
- var loc;
1807
- if (this.c == null) {
1808
- throw "Requires a CamanJS context";
1809
- }
1810
- loc = this.coordinatesToLocation(x, y, this.width);
1811
- this.c.pixelData[loc] = rgba.r;
1812
- this.c.pixelData[loc + 1] = rgba.g;
1813
- this.c.pixelData[loc + 2] = rgba.b;
1814
- return this.c.pixelData[loc + 3] = rgba.a;
1815
- };
1816
-
1817
- Pixel.prototype.toString = function() {
1818
- return this.toKey();
1819
- };
1820
-
1821
- Pixel.prototype.toHex = function(includeAlpha) {
1822
- var hex;
1823
- if (includeAlpha == null) {
1824
- includeAlpha = false;
1825
- }
1826
- hex = '#' + this.r.toString(16) + this.g.toString(16) + this.b.toString(16);
1827
- if (includeAlpha) {
1828
- return hex + this.a.toString(16);
1829
- } else {
1830
- return hex;
1831
- }
1832
- };
1833
-
1834
- return Pixel;
1835
-
1836
- })();
1837
-
1838
- Pixel = Caman.Pixel;
1839
-
1840
- Caman.Plugin = (function() {
1841
- function Plugin() {}
1842
-
1843
- Plugin.plugins = {};
1844
-
1845
- Plugin.register = function(name, plugin) {
1846
- return this.plugins[name] = plugin;
1847
- };
1848
-
1849
- Plugin.execute = function(context, name, args) {
1850
- return this.plugins[name].apply(context, args);
1851
- };
1852
-
1853
- return Plugin;
1854
-
1855
- })();
1856
-
1857
- Plugin = Caman.Plugin;
1858
-
1859
- Caman.Renderer = (function() {
1860
- Renderer.Blocks = Caman.NodeJS ? require('os').cpus().length : 4;
1861
-
1862
- function Renderer(c) {
1863
- this.c = c;
1864
- this.processNext = __bind(this.processNext, this);
1865
- this.renderQueue = [];
1866
- this.modPixelData = null;
1867
- }
1868
-
1869
- Renderer.prototype.add = function(job) {
1870
- if (job == null) {
1871
- return;
1872
- }
1873
- return this.renderQueue.push(job);
1874
- };
1875
-
1876
- Renderer.prototype.processNext = function() {
1877
- var layer;
1878
- if (this.renderQueue.length === 0) {
1879
- Event.trigger(this, "renderFinished");
1880
- if (this.finishedFn != null) {
1881
- this.finishedFn.call(this.c);
1882
- }
1883
- return this;
1884
- }
1885
- this.currentJob = this.renderQueue.shift();
1886
- switch (this.currentJob.type) {
1887
- case Filter.Type.LayerDequeue:
1888
- layer = this.c.canvasQueue.shift();
1889
- this.c.executeLayer(layer);
1890
- return this.processNext();
1891
- case Filter.Type.LayerFinished:
1892
- this.c.applyCurrentLayer();
1893
- this.c.popContext();
1894
- return this.processNext();
1895
- case Filter.Type.LoadOverlay:
1896
- return this.loadOverlay(this.currentJob.layer, this.currentJob.src);
1897
- case Filter.Type.Plugin:
1898
- return this.executePlugin();
1899
- default:
1900
- return this.executeFilter();
1901
- }
1902
- };
1903
-
1904
- Renderer.prototype.execute = function(callback) {
1905
- this.finishedFn = callback;
1906
- this.modPixelData = Util.dataArray(this.c.pixelData.length);
1907
- return this.processNext();
1908
- };
1909
-
1910
- Renderer.prototype.eachBlock = function(fn) {
1911
- var blockN, blockPixelLength, bnum, end, f, i, lastBlockN, n, start, _i, _ref, _results,
1912
- _this = this;
1913
- this.blocksDone = 0;
1914
- n = this.c.pixelData.length;
1915
- blockPixelLength = Math.floor((n / 4) / Renderer.Blocks);
1916
- blockN = blockPixelLength * 4;
1917
- lastBlockN = blockN + ((n / 4) % Renderer.Blocks) * 4;
1918
- _results = [];
1919
- for (i = _i = 0, _ref = Renderer.Blocks; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
1920
- start = i * blockN;
1921
- end = start + (i === Renderer.Blocks - 1 ? lastBlockN : blockN);
1922
- if (Caman.NodeJS) {
1923
- f = Fiber(function() {
1924
- return fn.call(_this, i, start, end);
1925
- });
1926
- bnum = f.run();
1927
- _results.push(this.blockFinished(bnum));
1928
- } else {
1929
- _results.push(setTimeout((function(i, start, end) {
1930
- return function() {
1931
- return fn.call(_this, i, start, end);
1932
- };
1933
- })(i, start, end), 0));
1934
- }
1935
- }
1936
- return _results;
1937
- };
1938
-
1939
- Renderer.prototype.executeFilter = function() {
1940
- Event.trigger(this.c, "processStart", this.currentJob);
1941
- if (this.currentJob.type === Filter.Type.Single) {
1942
- return this.eachBlock(this.renderBlock);
1943
- } else {
1944
- return this.eachBlock(this.renderKernel);
1945
- }
1946
- };
1947
-
1948
- Renderer.prototype.executePlugin = function() {
1949
- Log.debug("Executing plugin " + this.currentJob.plugin);
1950
- Plugin.execute(this.c, this.currentJob.plugin, this.currentJob.args);
1951
- Log.debug("Plugin " + this.currentJob.plugin + " finished!");
1952
- return this.processNext();
1953
- };
1954
-
1955
- Renderer.prototype.renderBlock = function(bnum, start, end) {
1956
- var i, pixel, _i;
1957
- Log.debug("Block #" + bnum + " - Filter: " + this.currentJob.name + ", Start: " + start + ", End: " + end);
1958
- Event.trigger(this.c, "blockStarted", {
1959
- blockNum: bnum,
1960
- totalBlocks: Renderer.Blocks,
1961
- startPixel: start,
1962
- endPixel: end
1963
- });
1964
- pixel = new Pixel();
1965
- pixel.setContext(this.c);
1966
- for (i = _i = start; _i < end; i = _i += 4) {
1967
- pixel.loc = i;
1968
- pixel.r = this.c.pixelData[i];
1969
- pixel.g = this.c.pixelData[i + 1];
1970
- pixel.b = this.c.pixelData[i + 2];
1971
- pixel.a = this.c.pixelData[i + 3];
1972
- this.currentJob.processFn(pixel);
1973
- this.c.pixelData[i] = Util.clampRGB(pixel.r);
1974
- this.c.pixelData[i + 1] = Util.clampRGB(pixel.g);
1975
- this.c.pixelData[i + 2] = Util.clampRGB(pixel.b);
1976
- this.c.pixelData[i + 3] = Util.clampRGB(pixel.a);
1977
- }
1978
- if (Caman.NodeJS) {
1979
- return Fiber["yield"](bnum);
1980
- } else {
1981
- return this.blockFinished(bnum);
1982
- }
1983
- };
1984
-
1985
- Renderer.prototype.renderKernel = function(bnum, start, end) {
1986
- var adjust, adjustSize, bias, builder, builderIndex, divisor, i, j, k, kernel, n, name, p, pixel, res, _i, _j, _k;
1987
- name = this.currentJob.name;
1988
- bias = this.currentJob.bias;
1989
- divisor = this.currentJob.divisor;
1990
- n = this.c.pixelData.length;
1991
- adjust = this.currentJob.adjust;
1992
- adjustSize = Math.sqrt(adjust.length);
1993
- kernel = [];
1994
- Log.debug("Rendering kernel - Filter: " + this.currentJob.name);
1995
- start = Math.max(start, this.c.dimensions.width * 4 * ((adjustSize - 1) / 2));
1996
- end = Math.min(end, n - (this.c.dimensions.width * 4 * ((adjustSize - 1) / 2)));
1997
- builder = (adjustSize - 1) / 2;
1998
- pixel = new Pixel();
1999
- pixel.setContext(this.c);
2000
- for (i = _i = start; _i < end; i = _i += 4) {
2001
- pixel.loc = i;
2002
- builderIndex = 0;
2003
- for (j = _j = -builder; -builder <= builder ? _j <= builder : _j >= builder; j = -builder <= builder ? ++_j : --_j) {
2004
- for (k = _k = builder; builder <= -builder ? _k <= -builder : _k >= -builder; k = builder <= -builder ? ++_k : --_k) {
2005
- p = pixel.getPixelRelative(j, k);
2006
- kernel[builderIndex * 3] = p.r;
2007
- kernel[builderIndex * 3 + 1] = p.g;
2008
- kernel[builderIndex * 3 + 2] = p.b;
2009
- builderIndex++;
2010
- }
2011
- }
2012
- res = this.processKernel(adjust, kernel, divisor, bias);
2013
- this.modPixelData[i] = Util.clampRGB(res.r);
2014
- this.modPixelData[i + 1] = Util.clampRGB(res.g);
2015
- this.modPixelData[i + 2] = Util.clampRGB(res.b);
2016
- this.modPixelData[i + 3] = this.c.pixelData[i + 3];
2017
- }
2018
- if (Caman.NodeJS) {
2019
- return Fiber["yield"](bnum);
2020
- } else {
2021
- return this.blockFinished(bnum);
2022
- }
2023
- };
2024
-
2025
- Renderer.prototype.blockFinished = function(bnum) {
2026
- var i, _i, _ref;
2027
- if (bnum >= 0) {
2028
- Log.debug("Block #" + bnum + " finished! Filter: " + this.currentJob.name);
2029
- }
2030
- this.blocksDone++;
2031
- Event.trigger(this.c, "blockFinished", {
2032
- blockNum: bnum,
2033
- blocksFinished: this.blocksDone,
2034
- totalBlocks: Renderer.Blocks
2035
- });
2036
- if (this.blocksDone === Renderer.Blocks) {
2037
- if (this.currentJob.type === Filter.Type.Kernel) {
2038
- for (i = _i = 0, _ref = this.c.pixelData.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
2039
- this.c.pixelData[i] = this.modPixelData[i];
2040
- }
2041
- }
2042
- if (bnum >= 0) {
2043
- Log.debug("Filter " + this.currentJob.name + " finished!");
2044
- }
2045
- Event.trigger(this.c, "processComplete", this.currentJob);
2046
- return this.processNext();
2047
- }
2048
- };
2049
-
2050
- Renderer.prototype.processKernel = function(adjust, kernel, divisor, bias) {
2051
- var i, val, _i, _ref;
2052
- val = {
2053
- r: 0,
2054
- g: 0,
2055
- b: 0
2056
- };
2057
- for (i = _i = 0, _ref = adjust.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
2058
- val.r += adjust[i] * kernel[i * 3];
2059
- val.g += adjust[i] * kernel[i * 3 + 1];
2060
- val.b += adjust[i] * kernel[i * 3 + 2];
2061
- }
2062
- val.r = (val.r / divisor) + bias;
2063
- val.g = (val.g / divisor) + bias;
2064
- val.b = (val.b / divisor) + bias;
2065
- return val;
2066
- };
2067
-
2068
- Renderer.prototype.loadOverlay = function(layer, src) {
2069
- var img, proxyUrl,
2070
- _this = this;
2071
- img = new Image();
2072
- img.onload = function() {
2073
- layer.context.drawImage(img, 0, 0, _this.c.dimensions.width, _this.c.dimensions.height);
2074
- layer.imageData = layer.context.getImageData(0, 0, _this.c.dimensions.width, _this.c.dimensions.height);
2075
- layer.pixelData = layer.imageData.data;
2076
- _this.c.pixelData = layer.pixelData;
2077
- return _this.processNext();
2078
- };
2079
- proxyUrl = IO.remoteCheck(src);
2080
- return img.src = proxyUrl != null ? proxyUrl : src;
2081
- };
2082
-
2083
- return Renderer;
2084
-
2085
- })();
2086
-
2087
- Renderer = Caman.Renderer;
2088
-
2089
- Caman.Store = (function() {
2090
- function Store() {}
2091
-
2092
- Store.items = {};
2093
-
2094
- Store.has = function(search) {
2095
- return this.items[search] != null;
2096
- };
2097
-
2098
- Store.get = function(search) {
2099
- return this.items[search];
2100
- };
2101
-
2102
- Store.put = function(name, obj) {
2103
- return this.items[name] = obj;
2104
- };
2105
-
2106
- Store.execute = function(search, callback) {
2107
- var _this = this;
2108
- setTimeout(function() {
2109
- return callback.call(_this.get(search), _this.get(search));
2110
- }, 0);
2111
- return this.get(search);
2112
- };
2113
-
2114
- Store.flush = function(name) {
2115
- if (name == null) {
2116
- name = false;
2117
- }
2118
- if (name) {
2119
- return delete this.items[name];
2120
- } else {
2121
- return this.items = {};
2122
- }
2123
- };
2124
-
2125
- return Store;
2126
-
2127
- })();
2128
-
2129
- Store = Caman.Store;
2130
-
2131
- Blender.register("normal", function(rgbaLayer, rgbaParent) {
2132
- return {
2133
- r: rgbaLayer.r,
2134
- g: rgbaLayer.g,
2135
- b: rgbaLayer.b
2136
- };
2137
- });
2138
-
2139
- Blender.register("multiply", function(rgbaLayer, rgbaParent) {
2140
- return {
2141
- r: (rgbaLayer.r * rgbaParent.r) / 255,
2142
- g: (rgbaLayer.g * rgbaParent.g) / 255,
2143
- b: (rgbaLayer.b * rgbaParent.b) / 255
2144
- };
2145
- });
2146
-
2147
- Blender.register("screen", function(rgbaLayer, rgbaParent) {
2148
- return {
2149
- r: 255 - (((255 - rgbaLayer.r) * (255 - rgbaParent.r)) / 255),
2150
- g: 255 - (((255 - rgbaLayer.g) * (255 - rgbaParent.g)) / 255),
2151
- b: 255 - (((255 - rgbaLayer.b) * (255 - rgbaParent.b)) / 255)
2152
- };
2153
- });
2154
-
2155
- Blender.register("overlay", function(rgbaLayer, rgbaParent) {
2156
- var result;
2157
- result = {};
2158
- result.r = rgbaParent.r > 128 ? 255 - 2 * (255 - rgbaLayer.r) * (255 - rgbaParent.r) / 255 : (rgbaParent.r * rgbaLayer.r * 2) / 255;
2159
- result.g = rgbaParent.g > 128 ? 255 - 2 * (255 - rgbaLayer.g) * (255 - rgbaParent.g) / 255 : (rgbaParent.g * rgbaLayer.g * 2) / 255;
2160
- result.b = rgbaParent.b > 128 ? 255 - 2 * (255 - rgbaLayer.b) * (255 - rgbaParent.b) / 255 : (rgbaParent.b * rgbaLayer.b * 2) / 255;
2161
- return result;
2162
- });
2163
-
2164
- Blender.register("difference", function(rgbaLayer, rgbaParent) {
2165
- return {
2166
- r: rgbaLayer.r - rgbaParent.r,
2167
- g: rgbaLayer.g - rgbaParent.g,
2168
- b: rgbaLayer.b - rgbaParent.b
2169
- };
2170
- });
2171
-
2172
- Blender.register("addition", function(rgbaLayer, rgbaParent) {
2173
- return {
2174
- r: rgbaParent.r + rgbaLayer.r,
2175
- g: rgbaParent.g + rgbaLayer.g,
2176
- b: rgbaParent.b + rgbaLayer.b
2177
- };
2178
- });
2179
-
2180
- Blender.register("exclusion", function(rgbaLayer, rgbaParent) {
2181
- return {
2182
- r: 128 - 2 * (rgbaParent.r - 128) * (rgbaLayer.r - 128) / 255,
2183
- g: 128 - 2 * (rgbaParent.g - 128) * (rgbaLayer.g - 128) / 255,
2184
- b: 128 - 2 * (rgbaParent.b - 128) * (rgbaLayer.b - 128) / 255
2185
- };
2186
- });
2187
-
2188
- Blender.register("softLight", function(rgbaLayer, rgbaParent) {
2189
- var result;
2190
- result = {};
2191
- result.r = rgbaParent.r > 128 ? 255 - ((255 - rgbaParent.r) * (255 - (rgbaLayer.r - 128))) / 255 : (rgbaParent.r * (rgbaLayer.r + 128)) / 255;
2192
- result.g = rgbaParent.g > 128 ? 255 - ((255 - rgbaParent.g) * (255 - (rgbaLayer.g - 128))) / 255 : (rgbaParent.g * (rgbaLayer.g + 128)) / 255;
2193
- result.b = rgbaParent.b > 128 ? 255 - ((255 - rgbaParent.b) * (255 - (rgbaLayer.b - 128))) / 255 : (rgbaParent.b * (rgbaLayer.b + 128)) / 255;
2194
- return result;
2195
- });
2196
-
2197
- Blender.register("lighten", function(rgbaLayer, rgbaParent) {
2198
- return {
2199
- r: rgbaParent.r > rgbaLayer.r ? rgbaParent.r : rgbaLayer.r,
2200
- g: rgbaParent.g > rgbaLayer.g ? rgbaParent.g : rgbaLayer.g,
2201
- b: rgbaParent.b > rgbaLayer.b ? rgbaParent.b : rgbaLayer.b
2202
- };
2203
- });
2204
-
2205
- Blender.register("darken", function(rgbaLayer, rgbaParent) {
2206
- return {
2207
- r: rgbaParent.r > rgbaLayer.r ? rgbaLayer.r : rgbaParent.r,
2208
- g: rgbaParent.g > rgbaLayer.g ? rgbaLayer.g : rgbaParent.g,
2209
- b: rgbaParent.b > rgbaLayer.b ? rgbaLayer.b : rgbaParent.b
2210
- };
2211
- });
2212
-
2213
- Filter.register("fillColor", function() {
2214
- var color;
2215
- if (arguments.length === 1) {
2216
- color = Convert.hexToRGB(arguments[0]);
2217
- } else {
2218
- color = {
2219
- r: arguments[0],
2220
- g: arguments[1],
2221
- b: arguments[2]
2222
- };
2223
- }
2224
- return this.process("fillColor", function(rgba) {
2225
- rgba.r = color.r;
2226
- rgba.g = color.g;
2227
- rgba.b = color.b;
2228
- rgba.a = 255;
2229
- return rgba;
2230
- });
2231
- });
2232
-
2233
- Filter.register("brightness", function(adjust) {
2234
- adjust = Math.floor(255 * (adjust / 100));
2235
- return this.process("brightness", function(rgba) {
2236
- rgba.r += adjust;
2237
- rgba.g += adjust;
2238
- rgba.b += adjust;
2239
- return rgba;
2240
- });
2241
- });
2242
-
2243
- Filter.register("saturation", function(adjust) {
2244
- adjust *= -0.01;
2245
- return this.process("saturation", function(rgba) {
2246
- var max;
2247
- max = Math.max(rgba.r, rgba.g, rgba.b);
2248
- if (rgba.r !== max) {
2249
- rgba.r += (max - rgba.r) * adjust;
2250
- }
2251
- if (rgba.g !== max) {
2252
- rgba.g += (max - rgba.g) * adjust;
2253
- }
2254
- if (rgba.b !== max) {
2255
- rgba.b += (max - rgba.b) * adjust;
2256
- }
2257
- return rgba;
2258
- });
2259
- });
2260
-
2261
- Filter.register("vibrance", function(adjust) {
2262
- adjust *= -1;
2263
- return this.process("vibrance", function(rgba) {
2264
- var amt, avg, max;
2265
- max = Math.max(rgba.r, rgba.g, rgba.b);
2266
- avg = (rgba.r + rgba.g + rgba.b) / 3;
2267
- amt = ((Math.abs(max - avg) * 2 / 255) * adjust) / 100;
2268
- if (rgba.r !== max) {
2269
- rgba.r += (max - rgba.r) * amt;
2270
- }
2271
- if (rgba.g !== max) {
2272
- rgba.g += (max - rgba.g) * amt;
2273
- }
2274
- if (rgba.b !== max) {
2275
- rgba.b += (max - rgba.b) * amt;
2276
- }
2277
- return rgba;
2278
- });
2279
- });
2280
-
2281
- Filter.register("greyscale", function(adjust) {
2282
- return this.process("greyscale", function(rgba) {
2283
- var avg;
2284
- avg = Calculate.luminance(rgba);
2285
- rgba.r = avg;
2286
- rgba.g = avg;
2287
- rgba.b = avg;
2288
- return rgba;
2289
- });
2290
- });
2291
-
2292
- Filter.register("contrast", function(adjust) {
2293
- adjust = Math.pow((adjust + 100) / 100, 2);
2294
- return this.process("contrast", function(rgba) {
2295
- rgba.r /= 255;
2296
- rgba.r -= 0.5;
2297
- rgba.r *= adjust;
2298
- rgba.r += 0.5;
2299
- rgba.r *= 255;
2300
- rgba.g /= 255;
2301
- rgba.g -= 0.5;
2302
- rgba.g *= adjust;
2303
- rgba.g += 0.5;
2304
- rgba.g *= 255;
2305
- rgba.b /= 255;
2306
- rgba.b -= 0.5;
2307
- rgba.b *= adjust;
2308
- rgba.b += 0.5;
2309
- rgba.b *= 255;
2310
- return rgba;
2311
- });
2312
- });
2313
-
2314
- Filter.register("hue", function(adjust) {
2315
- return this.process("hue", function(rgba) {
2316
- var b, g, h, hsv, r, _ref;
2317
- hsv = Convert.rgbToHSV(rgba.r, rgba.g, rgba.b);
2318
- h = hsv.h * 100;
2319
- h += Math.abs(adjust);
2320
- h = h % 100;
2321
- h /= 100;
2322
- hsv.h = h;
2323
- _ref = Convert.hsvToRGB(hsv.h, hsv.s, hsv.v), r = _ref.r, g = _ref.g, b = _ref.b;
2324
- rgba.r = r;
2325
- rgba.g = g;
2326
- rgba.b = b;
2327
- return rgba;
2328
- });
2329
- });
2330
-
2331
- Filter.register("colorize", function() {
2332
- var level, rgb;
2333
- if (arguments.length === 2) {
2334
- rgb = Convert.hexToRGB(arguments[0]);
2335
- level = arguments[1];
2336
- } else if (arguments.length === 4) {
2337
- rgb = {
2338
- r: arguments[0],
2339
- g: arguments[1],
2340
- b: arguments[2]
2341
- };
2342
- level = arguments[3];
2343
- }
2344
- return this.process("colorize", function(rgba) {
2345
- rgba.r -= (rgba.r - rgb.r) * (level / 100);
2346
- rgba.g -= (rgba.g - rgb.g) * (level / 100);
2347
- rgba.b -= (rgba.b - rgb.b) * (level / 100);
2348
- return rgba;
2349
- });
2350
- });
2351
-
2352
- Filter.register("invert", function() {
2353
- return this.process("invert", function(rgba) {
2354
- rgba.r = 255 - rgba.r;
2355
- rgba.g = 255 - rgba.g;
2356
- rgba.b = 255 - rgba.b;
2357
- return rgba;
2358
- });
2359
- });
2360
-
2361
- Filter.register("sepia", function(adjust) {
2362
- if (adjust == null) {
2363
- adjust = 100;
2364
- }
2365
- adjust /= 100;
2366
- return this.process("sepia", function(rgba) {
2367
- rgba.r = Math.min(255, (rgba.r * (1 - (0.607 * adjust))) + (rgba.g * (0.769 * adjust)) + (rgba.b * (0.189 * adjust)));
2368
- rgba.g = Math.min(255, (rgba.r * (0.349 * adjust)) + (rgba.g * (1 - (0.314 * adjust))) + (rgba.b * (0.168 * adjust)));
2369
- rgba.b = Math.min(255, (rgba.r * (0.272 * adjust)) + (rgba.g * (0.534 * adjust)) + (rgba.b * (1 - (0.869 * adjust))));
2370
- return rgba;
2371
- });
2372
- });
2373
-
2374
- Filter.register("gamma", function(adjust) {
2375
- return this.process("gamma", function(rgba) {
2376
- rgba.r = Math.pow(rgba.r / 255, adjust) * 255;
2377
- rgba.g = Math.pow(rgba.g / 255, adjust) * 255;
2378
- rgba.b = Math.pow(rgba.b / 255, adjust) * 255;
2379
- return rgba;
2380
- });
2381
- });
2382
-
2383
- Filter.register("noise", function(adjust) {
2384
- adjust = Math.abs(adjust) * 2.55;
2385
- return this.process("noise", function(rgba) {
2386
- var rand;
2387
- rand = Calculate.randomRange(adjust * -1, adjust);
2388
- rgba.r += rand;
2389
- rgba.g += rand;
2390
- rgba.b += rand;
2391
- return rgba;
2392
- });
2393
- });
2394
-
2395
- Filter.register("clip", function(adjust) {
2396
- adjust = Math.abs(adjust) * 2.55;
2397
- return this.process("clip", function(rgba) {
2398
- if (rgba.r > 255 - adjust) {
2399
- rgba.r = 255;
2400
- } else if (rgba.r < adjust) {
2401
- rgba.r = 0;
2402
- }
2403
- if (rgba.g > 255 - adjust) {
2404
- rgba.g = 255;
2405
- } else if (rgba.g < adjust) {
2406
- rgba.g = 0;
2407
- }
2408
- if (rgba.b > 255 - adjust) {
2409
- rgba.b = 255;
2410
- } else if (rgba.b < adjust) {
2411
- rgba.b = 0;
2412
- }
2413
- return rgba;
2414
- });
2415
- });
2416
-
2417
- Filter.register("channels", function(options) {
2418
- var chan, value;
2419
- if (typeof options !== "object") {
2420
- return this;
2421
- }
2422
- for (chan in options) {
2423
- if (!__hasProp.call(options, chan)) continue;
2424
- value = options[chan];
2425
- if (value === 0) {
2426
- delete options[chan];
2427
- continue;
2428
- }
2429
- options[chan] /= 100;
2430
- }
2431
- if (options.length === 0) {
2432
- return this;
2433
- }
2434
- return this.process("channels", function(rgba) {
2435
- if (options.red != null) {
2436
- if (options.red > 0) {
2437
- rgba.r += (255 - rgba.r) * options.red;
2438
- } else {
2439
- rgba.r -= rgba.r * Math.abs(options.red);
2440
- }
2441
- }
2442
- if (options.green != null) {
2443
- if (options.green > 0) {
2444
- rgba.g += (255 - rgba.g) * options.green;
2445
- } else {
2446
- rgba.g -= rgba.g * Math.abs(options.green);
2447
- }
2448
- }
2449
- if (options.blue != null) {
2450
- if (options.blue > 0) {
2451
- rgba.b += (255 - rgba.b) * options.blue;
2452
- } else {
2453
- rgba.b -= rgba.b * Math.abs(options.blue);
2454
- }
2455
- }
2456
- return rgba;
2457
- });
2458
- });
2459
-
2460
- Filter.register("curves", function() {
2461
- var algo, bezier, chans, cps, end, i, last, start, _i, _j, _ref, _ref1;
2462
- chans = arguments[0], cps = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
2463
- last = cps[cps.length - 1];
2464
- if (typeof last === "function") {
2465
- algo = last;
2466
- cps.pop();
2467
- } else if (typeof last === "string") {
2468
- algo = Calculate[last];
2469
- cps.pop();
2470
- } else {
2471
- algo = Calculate.bezier;
2472
- }
2473
- if (typeof chans === "string") {
2474
- chans = chans.split("");
2475
- }
2476
- if (chans[0] === "v") {
2477
- chans = ['r', 'g', 'b'];
2478
- }
2479
- if (cps.length < 2) {
2480
- throw "Invalid number of arguments to curves filter";
2481
- }
2482
- bezier = algo(cps, 0, 255);
2483
- start = cps[0];
2484
- if (start[0] > 0) {
2485
- for (i = _i = 0, _ref = start[0]; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
2486
- bezier[i] = start[1];
2487
- }
2488
- }
2489
- end = cps[cps.length - 1];
2490
- if (end[0] < 255) {
2491
- for (i = _j = _ref1 = end[0]; _ref1 <= 255 ? _j <= 255 : _j >= 255; i = _ref1 <= 255 ? ++_j : --_j) {
2492
- bezier[i] = end[1];
2493
- }
2494
- }
2495
- return this.process("curves", function(rgba) {
2496
- var _k, _ref2;
2497
- for (i = _k = 0, _ref2 = chans.length; 0 <= _ref2 ? _k < _ref2 : _k > _ref2; i = 0 <= _ref2 ? ++_k : --_k) {
2498
- rgba[chans[i]] = bezier[rgba[chans[i]]];
2499
- }
2500
- return rgba;
2501
- });
2502
- });
2503
-
2504
- Filter.register("exposure", function(adjust) {
2505
- var ctrl1, ctrl2, p;
2506
- p = Math.abs(adjust) / 100;
2507
- ctrl1 = [0, 255 * p];
2508
- ctrl2 = [255 - (255 * p), 255];
2509
- if (adjust < 0) {
2510
- ctrl1 = ctrl1.reverse();
2511
- ctrl2 = ctrl2.reverse();
2512
- }
2513
- return this.curves('rgb', [0, 0], ctrl1, ctrl2, [255, 255]);
2514
- });
2515
-
2516
- Caman.Plugin.register("crop", function(width, height, x, y) {
2517
- var canvas, ctx;
2518
- if (x == null) {
2519
- x = 0;
2520
- }
2521
- if (y == null) {
2522
- y = 0;
2523
- }
2524
- if (typeof exports !== "undefined" && exports !== null) {
2525
- canvas = new Canvas(width, height);
2526
- } else {
2527
- canvas = document.createElement('canvas');
2528
- Util.copyAttributes(this.canvas, canvas);
2529
- canvas.width = width;
2530
- canvas.height = height;
2531
- }
2532
- ctx = canvas.getContext('2d');
2533
- ctx.drawImage(this.canvas, x, y, width, height, 0, 0, width, height);
2534
- this.cropCoordinates = {
2535
- x: x,
2536
- y: y
2537
- };
2538
- this.cropped = true;
2539
- return this.replaceCanvas(canvas);
2540
- });
2541
-
2542
- Caman.Plugin.register("resize", function(newDims) {
2543
- var canvas, ctx;
2544
- if (newDims == null) {
2545
- newDims = null;
2546
- }
2547
- if (newDims === null || ((newDims.width == null) && (newDims.height == null))) {
2548
- Log.error("Invalid or missing dimensions given for resize");
2549
- return;
2550
- }
2551
- if (newDims.width == null) {
2552
- newDims.width = this.canvas.width * newDims.height / this.canvas.height;
2553
- } else if (newDims.height == null) {
2554
- newDims.height = this.canvas.height * newDims.width / this.canvas.width;
2555
- }
2556
- if (typeof exports !== "undefined" && exports !== null) {
2557
- canvas = new Canvas(newDims.width, newDims.height);
2558
- } else {
2559
- canvas = document.createElement('canvas');
2560
- Util.copyAttributes(this.canvas, canvas);
2561
- canvas.width = newDims.width;
2562
- canvas.height = newDims.height;
2563
- }
2564
- ctx = canvas.getContext('2d');
2565
- ctx.drawImage(this.canvas, 0, 0, this.canvas.width, this.canvas.height, 0, 0, newDims.width, newDims.height);
2566
- this.resized = true;
2567
- return this.replaceCanvas(canvas);
2568
- });
2569
-
2570
- Caman.Filter.register("crop", function() {
2571
- return this.processPlugin("crop", Array.prototype.slice.call(arguments, 0));
2572
- });
2573
-
2574
- Caman.Filter.register("resize", function() {
2575
- return this.processPlugin("resize", Array.prototype.slice.call(arguments, 0));
2576
- });
2577
-
2578
- }).call(this);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/dist/caman.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"caman.js","sourceRoot":"","sources":["caman.coffee"],"names":[],"mappings":"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"}
 
includes/pickers/caman/dist/caman.min.js DELETED
@@ -1,205 +0,0 @@
1
-
2
- (function(){var $,Analyze,Blender,Calculate,Caman,CamanParser,Canvas,Convert,Event,Fiber,Filter,IO,Image,Layer,Log,Module,Pixel,Plugin,Renderer,Root,Store,Util,fs,http,moduleKeywords,slice,__indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i<l;i++){if(i in this&&this[i]===item)return i;}return-1;},__slice=[].slice,__hasProp={}.hasOwnProperty,__bind=function(fn,me){return function(){return fn.apply(me,arguments);};},__extends=function(child,parent){for(var key in parent){if(__hasProp.call(parent,key))child[key]=parent[key];}function ctor(){this.constructor=child;}ctor.prototype=parent.prototype;child.prototype=new ctor();child.__super__=parent.prototype;return child;};moduleKeywords=['extended','included'];Module=(function(){function Module(){}
3
- Module["extends"]=function(obj){var key,value,_ref;for(key in obj){value=obj[key];if(__indexOf.call(moduleKeywords,key)<0){this[key]=value;}}
4
- if((_ref=obj.extended)!=null){_ref.apply(this);}
5
- return this;};Module.includes=function(obj){var key,value,_ref;for(key in obj){value=obj[key];if(__indexOf.call(moduleKeywords,key)<0){this.prototype[key]=value;}}
6
- if((_ref=obj.included)!=null){_ref.apply(this);}
7
- return this;};Module.delegate=function(){var args,source,target,_i,_len,_results;args=1<=arguments.length?__slice.call(arguments,0):[];target=args.pop();_results=[];for(_i=0,_len=args.length;_i<_len;_i++){source=args[_i];_results.push(this.prototype[source]=target.prototype[source]);}
8
- return _results;};Module.aliasFunction=function(to,from){var _this=this;return this.prototype[to]=function(){var args;args=1<=arguments.length?__slice.call(arguments,0):[];return _this.prototype[from].apply(_this,args);};};Module.aliasProperty=function(to,from){return Object.defineProperty(this.prototype,to,{get:function(){return this[from];},set:function(val){return this[from]=val;}});};Module.included=function(func){return func.call(this,this.prototype);};return Module;})();slice=Array.prototype.slice;$=function(sel,root){if(root==null){root=document;}
9
- if(typeof sel==="object"||(typeof exports!=="undefined"&&exports!==null)){return sel;}
10
- return root.querySelector(sel);};Util=(function(){function Util(){}
11
- Util.uniqid=(function(){var id;id=0;return{get:function(){return id++;}};})();Util.extend=function(){var copy,dest,obj,prop,src,_i,_len;obj=arguments[0],src=2<=arguments.length?__slice.call(arguments,1):[];dest=obj;for(_i=0,_len=src.length;_i<_len;_i++){copy=src[_i];for(prop in copy){if(!__hasProp.call(copy,prop))continue;dest[prop]=copy[prop];}}
12
- return dest;};Util.clampRGB=function(val){if(val<0){return 0;}
13
- if(val>255){return 255;}
14
- return val;};Util.copyAttributes=function(from,to,opts){var attr,_i,_len,_ref,_ref1,_results;if(opts==null){opts={};}
15
- _ref=from.attributes;_results=[];for(_i=0,_len=_ref.length;_i<_len;_i++){attr=_ref[_i];if((opts.except!=null)&&(_ref1=attr.nodeName,__indexOf.call(opts.except,_ref1)>=0)){continue;}
16
- _results.push(to.setAttribute(attr.nodeName,attr.nodeValue));}
17
- return _results;};Util.dataArray=function(length){if(length==null){length=0;}
18
- if(Caman.NodeJS||(window.Uint8Array!=null)){return new Uint8Array(length);}
19
- return new Array(length);};return Util;})();if(typeof exports!=="undefined"&&exports!==null){Root=exports;Canvas=require('canvas');Image=Canvas.Image;Fiber=require('fibers');fs=require('fs');http=require('http');}else{Root=window;}
20
- Caman=(function(_super){__extends(Caman,_super);Caman.version={release:"4.1.2",date:"7/27/2013"};Caman.DEBUG=false;Caman.allowRevert=true;Caman.crossOrigin="anonymous";Caman.remoteProxy="";Caman.proxyParam="camanProxyUrl";Caman.NodeJS=typeof exports!=="undefined"&&exports!==null;Caman.autoload=!Caman.NodeJS;Caman.toString=function(){return"Version "+Caman.version.release+", Released "+Caman.version.date;};Caman.getAttrId=function(canvas){if(Caman.NodeJS){return true;}
21
- if(typeof canvas==="string"){canvas=$(canvas);}
22
- if(!((canvas!=null)&&(canvas.getAttribute!=null))){return null;}
23
- return canvas.getAttribute('data-caman-id');};function Caman(){this.nodeFileReady=__bind(this.nodeFileReady,this);var args,callback,id,_this=this;if(arguments.length===0){throw"Invalid arguments";}
24
- if(this instanceof Caman){this.finishInit=this.finishInit.bind(this);this.imageLoaded=this.imageLoaded.bind(this);args=arguments[0];if(!Caman.NodeJS){id=parseInt(Caman.getAttrId(args[0]),10);callback=typeof args[1]==="function"?args[1]:typeof args[2]==="function"?args[2]:function(){};if(!isNaN(id)&&Store.has(id)){return Store.execute(id,callback);}}
25
- this.id=Util.uniqid.get();this.initializedPixelData=this.originalPixelData=null;this.cropCoordinates={x:0,y:0};this.cropped=false;this.resized=false;this.pixelStack=[];this.layerStack=[];this.canvasQueue=[];this.currentLayer=null;this.scaled=false;this.analyze=new Analyze(this);this.renderer=new Renderer(this);this.domIsLoaded(function(){_this.parseArguments(args);return _this.setup();});return this;}else{return new Caman(arguments);}}
26
- Caman.prototype.domIsLoaded=function(cb){var listener,_this=this;if(Caman.NodeJS){return setTimeout(function(){return cb.call(_this);},0);}else{if(document.readyState==="complete"){Log.debug("DOM initialized");return setTimeout(function(){return cb.call(_this);},0);}else{listener=function(){if(document.readyState==="complete"){Log.debug("DOM initialized");return cb.call(_this);}};return document.addEventListener("readystatechange",listener,false);}}};Caman.prototype.parseArguments=function(args){var key,val,_ref,_results;if(args.length===0){throw"Invalid arguments given";}
27
- this.initObj=null;this.initType=null;this.imageUrl=null;this.callback=function(){};this.setInitObject(args[0]);if(args.length===1){return;}
28
- switch(typeof args[1]){case"string":this.imageUrl=args[1];break;case"function":this.callback=args[1];}
29
- if(args.length===2){return;}
30
- this.callback=args[2];if(args.length===4){_ref=args[4];_results=[];for(key in _ref){if(!__hasProp.call(_ref,key))continue;val=_ref[key];_results.push(this.options[key]=val);}
31
- return _results;}};Caman.prototype.setInitObject=function(obj){if(Caman.NodeJS){this.initObj=obj;this.initType='node';return;}
32
- if(typeof obj==="object"){this.initObj=obj;}else{this.initObj=$(obj);}
33
- if(this.initObj==null){throw"Could not find image or canvas for initialization.";}
34
- return this.initType=this.initObj.nodeName.toLowerCase();};Caman.prototype.setup=function(){switch(this.initType){case"node":return this.initNode();case"img":return this.initImage();case"canvas":return this.initCanvas();}};Caman.prototype.initNode=function(){Log.debug("Initializing for NodeJS");if(typeof this.initObj==="string"&&this.initObj.match(/^https?:\/\//)){return this.readFromHttp(this.initObj,this.nodeFileReady);}else if(typeof this.initObj==="string"){return fs.readFile(this.initObj,this.nodeFileReady);}else{return this.nodeFileReady(null,this.initObj);}};Caman.prototype.readFromHttp=function(url,callback){var req;Log.debug("Fetching image from "+url);req=http.get(url,function(res){var buf;buf='';res.setEncoding('binary');res.on('data',function(chunk){return buf+=chunk;});return res.on('end',function(){return callback(null,new Buffer(buf,'binary'));});});return req.on('error',callback);};Caman.prototype.nodeFileReady=function(err,data){if(err){throw err;}
35
- this.image=new Image();this.image.src=data;Log.debug("Image loaded. Width = "+(this.imageWidth())+", Height = "+(this.imageHeight()));this.canvas=new Canvas(this.imageWidth(),this.imageHeight());return this.finishInit();};Caman.prototype.initImage=function(){this.image=this.initObj;this.canvas=document.createElement('canvas');this.context=this.canvas.getContext('2d');Util.copyAttributes(this.image,this.canvas,{except:['src']});if(this.image.parentNode!=null){this.image.parentNode.replaceChild(this.canvas,this.image);}
36
- this.imageAdjustments();return this.waitForImageLoaded();};Caman.prototype.initCanvas=function(){this.canvas=this.initObj;this.context=this.canvas.getContext('2d');if(this.imageUrl!=null){this.image=document.createElement('img');this.image.src=this.imageUrl;this.imageAdjustments();return this.waitForImageLoaded();}else{return this.finishInit();}};Caman.prototype.imageAdjustments=function(){if(this.needsHiDPISwap()){Log.debug(this.image.src,"->",this.hiDPIReplacement());this.swapped=true;this.image.src=this.hiDPIReplacement();}
37
- if(IO.isRemote(this.image)){this.image.src=IO.proxyUrl(this.image.src);return Log.debug("Remote image detected, using URL = "+this.image.src);}};Caman.prototype.waitForImageLoaded=function(){if(this.isImageLoaded()){return this.imageLoaded();}else{return this.image.onload=this.imageLoaded;}};Caman.prototype.isImageLoaded=function(){if(!this.image.complete){return false;}
38
- if((this.image.naturalWidth!=null)&&this.image.naturalWidth===0){return false;}
39
- return true;};Caman.prototype.imageWidth=function(){return this.image.width||this.image.naturalWidth;};Caman.prototype.imageHeight=function(){return this.image.height||this.image.naturalHeight;};Caman.prototype.imageLoaded=function(){Log.debug("Image loaded. Width = "+(this.imageWidth())+", Height = "+(this.imageHeight()));if(this.swapped){this.canvas.width=this.imageWidth()/this.hiDPIRatio();this.canvas.height=this.imageHeight()/this.hiDPIRatio();}else{this.canvas.width=this.imageWidth();this.canvas.height=this.imageHeight();}
40
- return this.finishInit();};Caman.prototype.finishInit=function(){var i,pixel,_i,_len,_ref;if(this.context==null){this.context=this.canvas.getContext('2d');}
41
- this.originalWidth=this.preScaledWidth=this.width=this.canvas.width;this.originalHeight=this.preScaledHeight=this.height=this.canvas.height;this.hiDPIAdjustments();if(!this.hasId()){this.assignId();}
42
- if(this.image!=null){this.context.drawImage(this.image,0,0,this.imageWidth(),this.imageHeight(),0,0,this.preScaledWidth,this.preScaledHeight);}
43
- this.imageData=this.context.getImageData(0,0,this.canvas.width,this.canvas.height);this.pixelData=this.imageData.data;if(Caman.allowRevert){this.initializedPixelData=Util.dataArray(this.pixelData.length);this.originalPixelData=Util.dataArray(this.pixelData.length);_ref=this.pixelData;for(i=_i=0,_len=_ref.length;_i<_len;i=++_i){pixel=_ref[i];this.initializedPixelData[i]=pixel;this.originalPixelData[i]=pixel;}}
44
- this.dimensions={width:this.canvas.width,height:this.canvas.height};if(!Caman.NodeJS){Store.put(this.id,this);}
45
- this.callback.call(this,this);return this.callback=function(){};};Caman.prototype.reloadCanvasData=function(){this.imageData=this.context.getImageData(0,0,this.canvas.width,this.canvas.height);return this.pixelData=this.imageData.data;};Caman.prototype.resetOriginalPixelData=function(){var i,pixel,_i,_len,_ref,_results;if(!Caman.allowRevert){throw"Revert disabled";}
46
- this.originalPixelData=Util.dataArray(this.pixelData.length);_ref=this.pixelData;_results=[];for(i=_i=0,_len=_ref.length;_i<_len;i=++_i){pixel=_ref[i];_results.push(this.originalPixelData[i]=pixel);}
47
- return _results;};Caman.prototype.hasId=function(){return Caman.getAttrId(this.canvas)!=null;};Caman.prototype.assignId=function(){if(Caman.NodeJS||this.canvas.getAttribute('data-caman-id')){return;}
48
- return this.canvas.setAttribute('data-caman-id',this.id);};Caman.prototype.hiDPIDisabled=function(){return this.canvas.getAttribute('data-caman-hidpi-disabled')!==null;};Caman.prototype.hiDPIAdjustments=function(){var ratio;if(Caman.NodeJS||!this.needsHiDPISwap()){return;}
49
- ratio=this.hiDPIRatio();if(ratio!==1){Log.debug("HiDPI ratio = "+ratio);this.scaled=true;this.preScaledWidth=this.canvas.width;this.preScaledHeight=this.canvas.height;this.canvas.width=this.preScaledWidth*ratio;this.canvas.height=this.preScaledHeight*ratio;this.canvas.style.width=""+this.preScaledWidth+"px";this.canvas.style.height=""+this.preScaledHeight+"px";this.context.scale(ratio,ratio);this.width=this.originalWidth=this.canvas.width;return this.height=this.originalHeight=this.canvas.height;}};Caman.prototype.hiDPIRatio=function(){var backingStoreRatio,devicePixelRatio;devicePixelRatio=window.devicePixelRatio||1;backingStoreRatio=this.context.webkitBackingStorePixelRatio||this.context.mozBackingStorePixelRatio||this.context.msBackingStorePixelRatio||this.context.oBackingStorePixelRatio||this.context.backingStorePixelRatio||1;return devicePixelRatio/backingStoreRatio;};Caman.prototype.hiDPICapable=function(){return(window.devicePixelRatio!=null)&&window.devicePixelRatio!==1;};Caman.prototype.needsHiDPISwap=function(){if(this.hiDPIDisabled()||!this.hiDPICapable()){return false;}
50
- return this.hiDPIReplacement()!==null;};Caman.prototype.hiDPIReplacement=function(){if(this.image==null){return null;}
51
- return this.image.getAttribute('data-caman-hidpi');};Caman.prototype.replaceCanvas=function(newCanvas){var oldCanvas;oldCanvas=this.canvas;this.canvas=newCanvas;this.context=this.canvas.getContext('2d');if(!Caman.NodeJS){oldCanvas.parentNode.replaceChild(this.canvas,oldCanvas);}
52
- this.width=this.canvas.width;this.height=this.canvas.height;this.reloadCanvasData();return this.dimensions={width:this.canvas.width,height:this.canvas.height};};Caman.prototype.render=function(callback){var _this=this;if(callback==null){callback=function(){};}
53
- Event.trigger(this,"renderStart");return this.renderer.execute(function(){_this.context.putImageData(_this.imageData,0,0);return callback.call(_this);});};Caman.prototype.revert=function(updateContext){var i,pixel,_i,_len,_ref;if(updateContext==null){updateContext=true;}
54
- if(!Caman.allowRevert){throw"Revert disabled";}
55
- _ref=this.originalVisiblePixels();for(i=_i=0,_len=_ref.length;_i<_len;i=++_i){pixel=_ref[i];this.pixelData[i]=pixel;}
56
- if(updateContext){return this.context.putImageData(this.imageData,0,0);}};Caman.prototype.reset=function(){var canvas,ctx,i,imageData,pixel,pixelData,_i,_len,_ref;canvas=document.createElement('canvas');Util.copyAttributes(this.canvas,canvas);canvas.width=this.originalWidth;canvas.height=this.originalHeight;ctx=canvas.getContext('2d');imageData=ctx.getImageData(0,0,canvas.width,canvas.height);pixelData=imageData.data;_ref=this.initializedPixelData;for(i=_i=0,_len=_ref.length;_i<_len;i=++_i){pixel=_ref[i];pixelData[i]=pixel;}
57
- ctx.putImageData(imageData,0,0);this.cropCoordinates={x:0,y:0};this.resized=false;return this.replaceCanvas(canvas);};Caman.prototype.originalVisiblePixels=function(){var canvas,coord,ctx,endX,endY,i,imageData,pixel,pixelData,pixels,scaledCanvas,startX,startY,width,_i,_j,_len,_ref,_ref1,_ref2,_ref3;if(!Caman.allowRevert){throw"Revert disabled";}
58
- pixels=[];startX=this.cropCoordinates.x;endX=startX+this.width;startY=this.cropCoordinates.y;endY=startY+this.height;if(this.resized){canvas=document.createElement('canvas');canvas.width=this.originalWidth;canvas.height=this.originalHeight;ctx=canvas.getContext('2d');imageData=ctx.getImageData(0,0,canvas.width,canvas.height);pixelData=imageData.data;_ref=this.originalPixelData;for(i=_i=0,_len=_ref.length;_i<_len;i=++_i){pixel=_ref[i];pixelData[i]=pixel;}
59
- ctx.putImageData(imageData,0,0);scaledCanvas=document.createElement('canvas');scaledCanvas.width=this.width;scaledCanvas.height=this.height;ctx=scaledCanvas.getContext('2d');ctx.drawImage(canvas,0,0,this.originalWidth,this.originalHeight,0,0,this.width,this.height);pixelData=ctx.getImageData(0,0,this.width,this.height).data;width=this.width;}else{pixelData=this.originalPixelData;width=this.originalWidth;}
60
- for(i=_j=0,_ref1=pixelData.length;_j<_ref1;i=_j+=4){coord=Pixel.locationToCoordinates(i,width);if(((startX<=(_ref2=coord.x)&&_ref2<endX))&&((startY<=(_ref3=coord.y)&&_ref3<endY))){pixels.push(pixelData[i],pixelData[i+1],pixelData[i+2],pixelData[i+3]);}}
61
- return pixels;};Caman.prototype.process=function(name,processFn){this.renderer.add({type:Filter.Type.Single,name:name,processFn:processFn});return this;};Caman.prototype.processKernel=function(name,adjust,divisor,bias){var i,_i,_ref;if(divisor==null){divisor=null;}
62
- if(bias==null){bias=0;}
63
- if(divisor==null){divisor=0;for(i=_i=0,_ref=adjust.length;0<=_ref?_i<_ref:_i>_ref;i=0<=_ref?++_i:--_i){divisor+=adjust[i];}}
64
- this.renderer.add({type:Filter.Type.Kernel,name:name,adjust:adjust,divisor:divisor,bias:bias});return this;};Caman.prototype.processPlugin=function(plugin,args){this.renderer.add({type:Filter.Type.Plugin,plugin:plugin,args:args});return this;};Caman.prototype.newLayer=function(callback){var layer;layer=new Layer(this);this.canvasQueue.push(layer);this.renderer.add({type:Filter.Type.LayerDequeue});callback.call(layer);this.renderer.add({type:Filter.Type.LayerFinished});return this;};Caman.prototype.executeLayer=function(layer){return this.pushContext(layer);};Caman.prototype.pushContext=function(layer){this.layerStack.push(this.currentLayer);this.pixelStack.push(this.pixelData);this.currentLayer=layer;return this.pixelData=layer.pixelData;};Caman.prototype.popContext=function(){this.pixelData=this.pixelStack.pop();return this.currentLayer=this.layerStack.pop();};Caman.prototype.applyCurrentLayer=function(){return this.currentLayer.applyToParent();};return Caman;})(Module);Root.Caman=Caman;Caman.Analyze=(function(){function Analyze(c){this.c=c;}
65
- Analyze.prototype.calculateLevels=function(){var i,levels,numPixels,_i,_j,_k,_ref;levels={r:{},g:{},b:{}};for(i=_i=0;_i<=255;i=++_i){levels.r[i]=0;levels.g[i]=0;levels.b[i]=0;}
66
- for(i=_j=0,_ref=this.c.pixelData.length;_j<_ref;i=_j+=4){levels.r[this.c.pixelData[i]]++;levels.g[this.c.pixelData[i+1]]++;levels.b[this.c.pixelData[i+2]]++;}
67
- numPixels=this.c.pixelData.length/4;for(i=_k=0;_k<=255;i=++_k){levels.r[i]/=numPixels;levels.g[i]/=numPixels;levels.b[i]/=numPixels;}
68
- return levels;};return Analyze;})();Analyze=Caman.Analyze;Caman.DOMUpdated=function(){var img,imgs,parser,_i,_len,_results;imgs=document.querySelectorAll("img[data-caman]");if(!(imgs.length>0)){return;}
69
- _results=[];for(_i=0,_len=imgs.length;_i<_len;_i++){img=imgs[_i];_results.push(parser=new CamanParser(img,function(){this.parse();return this.execute();}));}
70
- return _results;};if(Caman.autoload){(function(){if(document.readyState==="complete"){return Caman.DOMUpdated();}else{return document.addEventListener("DOMContentLoaded",Caman.DOMUpdated,false);}})();}
71
- CamanParser=(function(){var INST_REGEX;INST_REGEX="(\\w+)\\((.*?)\\)";function CamanParser(ele,ready){this.dataStr=ele.getAttribute('data-caman');this.caman=Caman(ele,ready.bind(this));}
72
- CamanParser.prototype.parse=function(){var args,e,filter,func,inst,instFunc,m,r,unparsedInstructions,_i,_len,_ref,_results;this.ele=this.caman.canvas;r=new RegExp(INST_REGEX,'g');unparsedInstructions=this.dataStr.match(r);if(!(unparsedInstructions.length>0)){return;}
73
- r=new RegExp(INST_REGEX);_results=[];for(_i=0,_len=unparsedInstructions.length;_i<_len;_i++){inst=unparsedInstructions[_i];_ref=inst.match(r),m=_ref[0],filter=_ref[1],args=_ref[2];instFunc=new Function("return function() { this."+filter+"("+args+"); };");try{func=instFunc();_results.push(func.call(this.caman));}catch(_error){e=_error;_results.push(Log.debug(e));}}
74
- return _results;};CamanParser.prototype.execute=function(){var ele;ele=this.ele;return this.caman.render(function(){return ele.parentNode.replaceChild(this.toImage(),ele);});};return CamanParser;})();Caman.Blender=(function(){function Blender(){}
75
- Blender.blenders={};Blender.register=function(name,func){return this.blenders[name]=func;};Blender.execute=function(name,rgbaLayer,rgbaParent){return this.blenders[name](rgbaLayer,rgbaParent);};return Blender;})();Blender=Caman.Blender;Caman.Calculate=(function(){function Calculate(){}
76
- Calculate.distance=function(x1,y1,x2,y2){return Math.sqrt(Math.pow(x2-x1,2)+Math.pow(y2-y1,2));};Calculate.randomRange=function(min,max,getFloat){var rand;if(getFloat==null){getFloat=false;}
77
- rand=min+(Math.random()*(max-min));if(getFloat){return rand.toFixed(getFloat);}else{return Math.round(rand);}};Calculate.luminance=function(rgba){return(0.299*rgba.r)+(0.587*rgba.g)+(0.114*rgba.b);};Calculate.bezier=function(start,ctrl1,ctrl2,end,lowBound,highBound){var bezier,clamp,controlPoints,endX,i,j,lerp,next,prev,t,_i,_j,_ref;if(lowBound==null){lowBound=0;}
78
- if(highBound==null){highBound=255;}
79
- if(start[0]instanceof Array){controlPoints=start;lowBound=ctrl1;highBound=ctrl2;}else{controlPoints=[start,ctrl1,ctrl2,end];}
80
- if(controlPoints.length<2){throw"Invalid number of arguments to bezier";}
81
- bezier={};lerp=function(a,b,t){return a*(1-t)+b*t;};clamp=function(a,min,max){return Math.min(Math.max(a,min),max);};for(i=_i=0;_i<1000;i=++_i){t=i/1000;prev=controlPoints;while(prev.length>1){next=[];for(j=_j=0,_ref=prev.length-2;0<=_ref?_j<=_ref:_j>=_ref;j=0<=_ref?++_j:--_j){next.push([lerp(prev[j][0],prev[j+1][0],t),lerp(prev[j][1],prev[j+1][1],t)]);}
82
- prev=next;}
83
- bezier[Math.round(prev[0][0])]=Math.round(clamp(prev[0][1],lowBound,highBound));}
84
- endX=controlPoints[controlPoints.length-1][0];bezier=Caman.Calculate.missingValues(bezier,endX);if(bezier[endX]==null){bezier[endX]=bezier[endX-1];}
85
- return bezier;};Calculate.hermite=function(controlPoints,lowBound,highBound){var add,clamp,count,endX,fac0,fac1,fac2,fac3,i,j,lerp,m0,m1,mul,p,p0,p1,pointsPerSegment,pointsPerStep,pos,ret,sub,t,_i,_j,_ref,_this=this;if(controlPoints.length<2){throw"Invalid number of arguments to hermite";}
86
- ret={};lerp=function(a,b,t){return a*(1-t)+b*t;};add=function(a,b,c,d){return[a[0]+b[0]+c[0]+d[0],a[1]+b[1]+c[1]+d[1]];};mul=function(a,b){return[a[0]*b[0],a[1]*b[1]];};sub=function(a,b){return[a[0]-b[0],a[1]-b[1]];};clamp=function(a,min,max){return Math.min(Math.max(a,min),max);};count=0;for(i=_i=0,_ref=controlPoints.length-2;0<=_ref?_i<=_ref:_i>=_ref;i=0<=_ref?++_i:--_i){p0=controlPoints[i];p1=controlPoints[i+1];pointsPerSegment=p1[0]-p0[0];pointsPerStep=1/pointsPerSegment;if(i===controlPoints.length-2){pointsPerStep=1/(pointsPerSegment-1);}
87
- p=i>0?controlPoints[i-1]:p0;m0=mul(sub(p1,p),[0.5,0.5]);p=i<controlPoints.length-2?controlPoints[i+2]:p1;m1=mul(sub(p,p0),[0.5,0.5]);for(j=_j=0;0<=pointsPerSegment?_j<=pointsPerSegment:_j>=pointsPerSegment;j=0<=pointsPerSegment?++_j:--_j){t=j*pointsPerStep;fac0=2.0*t*t*t-3.0*t*t+1.0;fac1=t*t*t-2.0*t*t+t;fac2=-2.0*t*t*t+3.0*t*t;fac3=t*t*t-t*t;pos=add(mul(p0,[fac0,fac0]),mul(m0,[fac1,fac1]),mul(p1,[fac2,fac2]),mul(m1,[fac3,fac3]));ret[Math.round(pos[0])]=Math.round(clamp(pos[1],lowBound,highBound));count+=1;}}
88
- endX=controlPoints[controlPoints.length-1][0];ret=Caman.Calculate.missingValues(ret,endX);return ret;};Calculate.missingValues=function(values,endX){var i,j,leftCoord,ret,rightCoord,_i,_j;if(Object.keys(values).length<endX+1){ret={};for(i=_i=0;0<=endX?_i<=endX:_i>=endX;i=0<=endX?++_i:--_i){if(values[i]!=null){ret[i]=values[i];}else{leftCoord=[i-1,ret[i-1]];for(j=_j=i;i<=endX?_j<=endX:_j>=endX;j=i<=endX?++_j:--_j){if(values[j]!=null){rightCoord=[j,values[j]];break;}}
89
- ret[i]=leftCoord[1]+((rightCoord[1]-leftCoord[1])/(rightCoord[0]-leftCoord[0]))*(i-leftCoord[0]);}}
90
- return ret;}
91
- return values;};return Calculate;})();Calculate=Caman.Calculate;Caman.Convert=(function(){function Convert(){}
92
- Convert.hexToRGB=function(hex){var b,g,r;if(hex.charAt(0)==="#"){hex=hex.substr(1);}
93
- r=parseInt(hex.substr(0,2),16);g=parseInt(hex.substr(2,2),16);b=parseInt(hex.substr(4,2),16);return{r:r,g:g,b:b};};Convert.rgbToHSL=function(r,g,b){var d,h,l,max,min,s;if(typeof r==="object"){g=r.g;b=r.b;r=r.r;}
94
- r/=255;g/=255;b/=255;max=Math.max(r,g,b);min=Math.min(r,g,b);l=(max+min)/2;if(max===min){h=s=0;}else{d=max-min;s=l>0.5?d/(2-max-min):d/(max+min);h=(function(){switch(max){case r:return(g-b)/d+(g<b?6:0);case g:return(b-r)/d+2;case b:return(r-g)/d+4;}})();h/=6;}
95
- return{h:h,s:s,l:l};};Convert.hslToRGB=function(h,s,l){var b,g,p,q,r;if(typeof h==="object"){s=h.s;l=h.l;h=h.h;}
96
- if(s===0){r=g=b=l;}else{q=l<0.5?l*(1+s):l+s-l*s;p=2*l-q;r=this.hueToRGB(p,q,h+1/3);g=this.hueToRGB(p,q,h);b=this.hueToRGB(p,q,h-1/3);}
97
- return{r:r*255,g:g*255,b:b*255};};Convert.hueToRGB=function(p,q,t){if(t<0){t+=1;}
98
- if(t>1){t-=1;}
99
- if(t<1/6){return p+(q-p)*6*t;}
100
- if(t<1/2){return q;}
101
- if(t<2/3){return p+(q-p)*(2/3-t)*6;}
102
- return p;};Convert.rgbToHSV=function(r,g,b){var d,h,max,min,s,v;r/=255;g/=255;b/=255;max=Math.max(r,g,b);min=Math.min(r,g,b);v=max;d=max-min;s=max===0?0:d/max;if(max===min){h=0;}else{h=(function(){switch(max){case r:return(g-b)/d+(g<b?6:0);case g:return(b-r)/d+2;case b:return(r-g)/d+4;}})();h/=6;}
103
- return{h:h,s:s,v:v};};Convert.hsvToRGB=function(h,s,v){var b,f,g,i,p,q,r,t;i=Math.floor(h*6);f=h*6-i;p=v*(1-s);q=v*(1-f*s);t=v*(1-(1-f)*s);switch(i%6){case 0:r=v;g=t;b=p;break;case 1:r=q;g=v;b=p;break;case 2:r=p;g=v;b=t;break;case 3:r=p;g=q;b=v;break;case 4:r=t;g=p;b=v;break;case 5:r=v;g=p;b=q;}
104
- return{r:Math.floor(r*255),g:Math.floor(g*255),b:Math.floor(b*255)};};Convert.rgbToXYZ=function(r,g,b){var x,y,z;r/=255;g/=255;b/=255;if(r>0.04045){r=Math.pow((r+0.055)/1.055,2.4);}else{r/=12.92;}
105
- if(g>0.04045){g=Math.pow((g+0.055)/1.055,2.4);}else{g/=12.92;}
106
- if(b>0.04045){b=Math.pow((b+0.055)/1.055,2.4);}else{b/=12.92;}
107
- x=r*0.4124+g*0.3576+b*0.1805;y=r*0.2126+g*0.7152+b*0.0722;z=r*0.0193+g*0.1192+b*0.9505;return{x:x*100,y:y*100,z:z*100};};Convert.xyzToRGB=function(x,y,z){var b,g,r;x/=100;y/=100;z/=100;r=(3.2406*x)+(-1.5372*y)+(-0.4986*z);g=(-0.9689*x)+(1.8758*y)+(0.0415*z);b=(0.0557*x)+(-0.2040*y)+(1.0570*z);if(r>0.0031308){r=(1.055*Math.pow(r,0.4166666667))-0.055;}else{r*=12.92;}
108
- if(g>0.0031308){g=(1.055*Math.pow(g,0.4166666667))-0.055;}else{g*=12.92;}
109
- if(b>0.0031308){b=(1.055*Math.pow(b,0.4166666667))-0.055;}else{b*=12.92;}
110
- return{r:r*255,g:g*255,b:b*255};};Convert.xyzToLab=function(x,y,z){var a,b,l,whiteX,whiteY,whiteZ;if(typeof x==="object"){y=x.y;z=x.z;x=x.x;}
111
- whiteX=95.047;whiteY=100.0;whiteZ=108.883;x/=whiteX;y/=whiteY;z/=whiteZ;if(x>0.008856451679){x=Math.pow(x,0.3333333333);}else{x=(7.787037037*x)+0.1379310345;}
112
- if(y>0.008856451679){y=Math.pow(y,0.3333333333);}else{y=(7.787037037*y)+0.1379310345;}
113
- if(z>0.008856451679){z=Math.pow(z,0.3333333333);}else{z=(7.787037037*z)+0.1379310345;}
114
- l=116*y-16;a=500*(x-y);b=200*(y-z);return{l:l,a:a,b:b};};Convert.labToXYZ=function(l,a,b){var x,y,z;if(typeof l==="object"){a=l.a;b=l.b;l=l.l;}
115
- y=(l+16)/116;x=y+(a/500);z=y-(b/200);if(x>0.2068965517){x=x*x*x;}else{x=0.1284185493*(x-0.1379310345);}
116
- if(y>0.2068965517){y=y*y*y;}else{y=0.1284185493*(y-0.1379310345);}
117
- if(z>0.2068965517){z=z*z*z;}else{z=0.1284185493*(z-0.1379310345);}
118
- return{x:x*95.047,y:y*100.0,z:z*108.883};};Convert.rgbToLab=function(r,g,b){var xyz;if(typeof r==="object"){g=r.g;b=r.b;r=r.r;}
119
- xyz=this.rgbToXYZ(r,g,b);return this.xyzToLab(xyz);};Convert.labToRGB=function(l,a,b){};return Convert;})();Convert=Caman.Convert;Caman.Event=(function(){function Event(){}
120
- Event.events={};Event.types=["processStart","processComplete","renderStart","renderFinished","blockStarted","blockFinished"];Event.trigger=function(target,type,data){var event,_i,_len,_ref,_results;if(data==null){data=null;}
121
- if(this.events[type]&&this.events[type].length){_ref=this.events[type];_results=[];for(_i=0,_len=_ref.length;_i<_len;_i++){event=_ref[_i];if(event.target===null||target.id===event.target.id){_results.push(event.fn.call(target,data));}else{_results.push(void 0);}}
122
- return _results;}};Event.listen=function(target,type,fn){var _fn,_type;if(typeof target==="string"){_type=target;_fn=type;target=null;type=_type;fn=_fn;}
123
- if(__indexOf.call(this.types,type)<0){return false;}
124
- if(!this.events[type]){this.events[type]=[];}
125
- this.events[type].push({target:target,fn:fn});return true;};return Event;})();Event=Caman.Event;Caman.Filter=(function(){function Filter(){}
126
- Filter.Type={Single:1,Kernel:2,LayerDequeue:3,LayerFinished:4,LoadOverlay:5,Plugin:6};Filter.register=function(name,filterFunc){return Caman.prototype[name]=filterFunc;};return Filter;})();Filter=Caman.Filter;Caman.IO=(function(){function IO(){}
127
- IO.domainRegex=/(?:(?:http|https):\/\/)((?:\w+)\.(?:(?:\w|\.)+))/;IO.isRemote=function(img){if(img==null){return false;}
128
- if(this.corsEnabled(img)){return false;}
129
- return this.isURLRemote(img.src);};IO.corsEnabled=function(img){var _ref;return(img.crossOrigin!=null)&&((_ref=img.crossOrigin.toLowerCase())==='anonymous'||_ref==='use-credentials');};IO.isURLRemote=function(url){var matches;matches=url.match(this.domainRegex);if(matches){return matches[1]!==document.domain;}else{return false;}};IO.remoteCheck=function(src){if(this.isURLRemote(src)){if(!Caman.remoteProxy.length){Log.info("Attempting to load a remote image without a configured proxy. URL: "+src);}else{if(Caman.isURLRemote(Caman.remoteProxy)){Log.info("Cannot use a remote proxy for loading images.");return;}
130
- return this.proxyUrl(src);}}};IO.proxyUrl=function(src){return""+Caman.remoteProxy+"?"+Caman.proxyParam+"="+(encodeURIComponent(src));};IO.useProxy=function(lang){var langToExt;langToExt={ruby:'rb',python:'py',perl:'pl',javascript:'js'};lang=lang.toLowerCase();if(langToExt[lang]!=null){lang=langToExt[lang];}
131
- return"proxies/caman_proxy."+lang;};return IO;})();Caman.prototype.save=function(){if(typeof exports!=="undefined"&&exports!==null){return this.nodeSave.apply(this,arguments);}else{return this.browserSave.apply(this,arguments);}};Caman.prototype.browserSave=function(type){var image;if(type==null){type="png";}
132
- type=type.toLowerCase();image=this.toBase64(type).replace("image/"+type,"image/octet-stream");return document.location.href=image;};Caman.prototype.nodeSave=function(file,overwrite,callback){var e,stats;if(overwrite==null){overwrite=true;}
133
- if(callback==null){callback=null;}
134
- try{stats=fs.statSync(file);if(stats.isFile()&&!overwrite){return false;}}catch(_error){e=_error;Log.debug("Creating output file "+file);}
135
- return fs.writeFile(file,this.canvas.toBuffer(),function(err){Log.debug("Finished writing to "+file);if(callback){return callback.call(this,err);}});};Caman.prototype.toImage=function(type){var img;img=new Image();img.src=this.toBase64(type);img.width=this.dimensions.width;img.height=this.dimensions.height;if(window.devicePixelRatio){img.width/=window.devicePixelRatio;img.height/=window.devicePixelRatio;}
136
- return img;};Caman.prototype.toBase64=function(type){if(type==null){type="png";}
137
- type=type.toLowerCase();return this.canvas.toDataURL("image/"+type);};IO=Caman.IO;Caman.Layer=(function(){function Layer(c){this.c=c;this.filter=this.c;this.options={blendingMode:'normal',opacity:1.0};this.layerID=Util.uniqid.get();this.canvas=typeof exports!=="undefined"&&exports!==null?new Canvas():document.createElement('canvas');this.canvas.width=this.c.dimensions.width;this.canvas.height=this.c.dimensions.height;this.context=this.canvas.getContext('2d');this.context.createImageData(this.canvas.width,this.canvas.height);this.imageData=this.context.getImageData(0,0,this.canvas.width,this.canvas.height);this.pixelData=this.imageData.data;}
138
- Layer.prototype.newLayer=function(cb){return this.c.newLayer.call(this.c,cb);};Layer.prototype.setBlendingMode=function(mode){this.options.blendingMode=mode;return this;};Layer.prototype.opacity=function(opacity){this.options.opacity=opacity/100;return this;};Layer.prototype.copyParent=function(){var i,parentData,_i,_ref;parentData=this.c.pixelData;for(i=_i=0,_ref=this.c.pixelData.length;_i<_ref;i=_i+=4){this.pixelData[i]=parentData[i];this.pixelData[i+1]=parentData[i+1];this.pixelData[i+2]=parentData[i+2];this.pixelData[i+3]=parentData[i+3];}
139
- return this;};Layer.prototype.fillColor=function(){return this.c.fillColor.apply(this.c,arguments);};Layer.prototype.overlayImage=function(image){if(typeof image==="object"){image=image.src;}else if(typeof image==="string"&&image[0]==="#"){image=$(image).src;}
140
- if(!image){return this;}
141
- this.c.renderer.renderQueue.push({type:Filter.Type.LoadOverlay,src:image,layer:this});return this;};Layer.prototype.applyToParent=function(){var i,layerData,parentData,result,rgbaLayer,rgbaParent,_i,_ref,_results;parentData=this.c.pixelStack[this.c.pixelStack.length-1];layerData=this.c.pixelData;_results=[];for(i=_i=0,_ref=layerData.length;_i<_ref;i=_i+=4){rgbaParent={r:parentData[i],g:parentData[i+1],b:parentData[i+2],a:parentData[i+3]};rgbaLayer={r:layerData[i],g:layerData[i+1],b:layerData[i+2],a:layerData[i+3]};result=Blender.execute(this.options.blendingMode,rgbaLayer,rgbaParent);result.r=Util.clampRGB(result.r);result.g=Util.clampRGB(result.g);result.b=Util.clampRGB(result.b);if(result.a==null){result.a=rgbaLayer.a;}
142
- parentData[i]=rgbaParent.r-((rgbaParent.r-result.r)*(this.options.opacity*(result.a/255)));parentData[i+1]=rgbaParent.g-((rgbaParent.g-result.g)*(this.options.opacity*(result.a/255)));_results.push(parentData[i+2]=rgbaParent.b-((rgbaParent.b-result.b)*(this.options.opacity*(result.a/255))));}
143
- return _results;};return Layer;})();Layer=Caman.Layer;Caman.Logger=(function(){function Logger(){var name,_i,_len,_ref;_ref=['log','info','warn','error'];for(_i=0,_len=_ref.length;_i<_len;_i++){name=_ref[_i];this[name]=(function(name){return function(){var args,e;args=1<=arguments.length?__slice.call(arguments,0):[];if(!Caman.DEBUG){return;}
144
- try{return console[name].apply(console,args);}catch(_error){e=_error;return console[name](args);}};})(name);}
145
- this.debug=this.log;}
146
- return Logger;})();Log=new Caman.Logger();Caman.Pixel=(function(){Pixel.coordinatesToLocation=function(x,y,width){return(y*width+x)*4;};Pixel.locationToCoordinates=function(loc,width){var x,y;y=Math.floor(loc/(width*4));x=(loc%(width*4))/4;return{x:x,y:y};};function Pixel(r,g,b,a,c){this.r=r!=null?r:0;this.g=g!=null?g:0;this.b=b!=null?b:0;this.a=a!=null?a:255;this.c=c!=null?c:null;this.loc=0;}
147
- Pixel.prototype.setContext=function(c){return this.c=c;};Pixel.prototype.locationXY=function(){var x,y;if(this.c==null){throw"Requires a CamanJS context";}
148
- y=this.c.dimensions.height-Math.floor(this.loc/(this.c.dimensions.width*4));x=(this.loc%(this.c.dimensions.width*4))/4;return{x:x,y:y};};Pixel.prototype.pixelAtLocation=function(loc){if(this.c==null){throw"Requires a CamanJS context";}
149
- return new Pixel(this.c.pixelData[loc],this.c.pixelData[loc+1],this.c.pixelData[loc+2],this.c.pixelData[loc+3],this.c);};Pixel.prototype.getPixelRelative=function(horiz,vert){var newLoc;if(this.c==null){throw"Requires a CamanJS context";}
150
- newLoc=this.loc+(this.c.dimensions.width*4*(vert*-1))+(4*horiz);if(newLoc>this.c.pixelData.length||newLoc<0){return new Pixel(0,0,0,255,this.c);}
151
- return this.pixelAtLocation(newLoc);};Pixel.prototype.putPixelRelative=function(horiz,vert,rgba){var nowLoc;if(this.c==null){throw"Requires a CamanJS context";}
152
- nowLoc=this.loc+(this.c.dimensions.width*4*(vert*-1))+(4*horiz);if(newLoc>this.c.pixelData.length||newLoc<0){return;}
153
- this.c.pixelData[newLoc]=rgba.r;this.c.pixelData[newLoc+1]=rgba.g;this.c.pixelData[newLoc+2]=rgba.b;this.c.pixelData[newLoc+3]=rgba.a;return true;};Pixel.prototype.getPixel=function(x,y){var loc;if(this.c==null){throw"Requires a CamanJS context";}
154
- loc=this.coordinatesToLocation(x,y,this.width);return this.pixelAtLocation(loc);};Pixel.prototype.putPixel=function(x,y,rgba){var loc;if(this.c==null){throw"Requires a CamanJS context";}
155
- loc=this.coordinatesToLocation(x,y,this.width);this.c.pixelData[loc]=rgba.r;this.c.pixelData[loc+1]=rgba.g;this.c.pixelData[loc+2]=rgba.b;return this.c.pixelData[loc+3]=rgba.a;};Pixel.prototype.toString=function(){return this.toKey();};Pixel.prototype.toHex=function(includeAlpha){var hex;if(includeAlpha==null){includeAlpha=false;}
156
- hex='#'+this.r.toString(16)+this.g.toString(16)+this.b.toString(16);if(includeAlpha){return hex+this.a.toString(16);}else{return hex;}};return Pixel;})();Pixel=Caman.Pixel;Caman.Plugin=(function(){function Plugin(){}
157
- Plugin.plugins={};Plugin.register=function(name,plugin){return this.plugins[name]=plugin;};Plugin.execute=function(context,name,args){return this.plugins[name].apply(context,args);};return Plugin;})();Plugin=Caman.Plugin;Caman.Renderer=(function(){Renderer.Blocks=Caman.NodeJS?require('os').cpus().length:4;function Renderer(c){this.c=c;this.processNext=__bind(this.processNext,this);this.renderQueue=[];this.modPixelData=null;}
158
- Renderer.prototype.add=function(job){if(job==null){return;}
159
- return this.renderQueue.push(job);};Renderer.prototype.processNext=function(){var layer;if(this.renderQueue.length===0){Event.trigger(this,"renderFinished");if(this.finishedFn!=null){this.finishedFn.call(this.c);}
160
- return this;}
161
- this.currentJob=this.renderQueue.shift();switch(this.currentJob.type){case Filter.Type.LayerDequeue:layer=this.c.canvasQueue.shift();this.c.executeLayer(layer);return this.processNext();case Filter.Type.LayerFinished:this.c.applyCurrentLayer();this.c.popContext();return this.processNext();case Filter.Type.LoadOverlay:return this.loadOverlay(this.currentJob.layer,this.currentJob.src);case Filter.Type.Plugin:return this.executePlugin();default:return this.executeFilter();}};Renderer.prototype.execute=function(callback){this.finishedFn=callback;this.modPixelData=Util.dataArray(this.c.pixelData.length);return this.processNext();};Renderer.prototype.eachBlock=function(fn){var blockN,blockPixelLength,bnum,end,f,i,lastBlockN,n,start,_i,_ref,_results,_this=this;this.blocksDone=0;n=this.c.pixelData.length;blockPixelLength=Math.floor((n/4)/Renderer.Blocks);blockN=blockPixelLength*4;lastBlockN=blockN+((n/4)%Renderer.Blocks)*4;_results=[];for(i=_i=0,_ref=Renderer.Blocks;0<=_ref?_i<_ref:_i>_ref;i=0<=_ref?++_i:--_i){start=i*blockN;end=start+(i===Renderer.Blocks-1?lastBlockN:blockN);if(Caman.NodeJS){f=Fiber(function(){return fn.call(_this,i,start,end);});bnum=f.run();_results.push(this.blockFinished(bnum));}else{_results.push(setTimeout((function(i,start,end){return function(){return fn.call(_this,i,start,end);};})(i,start,end),0));}}
162
- return _results;};Renderer.prototype.executeFilter=function(){Event.trigger(this.c,"processStart",this.currentJob);if(this.currentJob.type===Filter.Type.Single){return this.eachBlock(this.renderBlock);}else{return this.eachBlock(this.renderKernel);}};Renderer.prototype.executePlugin=function(){Log.debug("Executing plugin "+this.currentJob.plugin);Plugin.execute(this.c,this.currentJob.plugin,this.currentJob.args);Log.debug("Plugin "+this.currentJob.plugin+" finished!");return this.processNext();};Renderer.prototype.renderBlock=function(bnum,start,end){var i,pixel,_i;Log.debug("Block #"+bnum+" - Filter: "+this.currentJob.name+", Start: "+start+", End: "+end);Event.trigger(this.c,"blockStarted",{blockNum:bnum,totalBlocks:Renderer.Blocks,startPixel:start,endPixel:end});pixel=new Pixel();pixel.setContext(this.c);for(i=_i=start;_i<end;i=_i+=4){pixel.loc=i;pixel.r=this.c.pixelData[i];pixel.g=this.c.pixelData[i+1];pixel.b=this.c.pixelData[i+2];pixel.a=this.c.pixelData[i+3];this.currentJob.processFn(pixel);this.c.pixelData[i]=Util.clampRGB(pixel.r);this.c.pixelData[i+1]=Util.clampRGB(pixel.g);this.c.pixelData[i+2]=Util.clampRGB(pixel.b);this.c.pixelData[i+3]=Util.clampRGB(pixel.a);}
163
- if(Caman.NodeJS){return Fiber["yield"](bnum);}else{return this.blockFinished(bnum);}};Renderer.prototype.renderKernel=function(bnum,start,end){var adjust,adjustSize,bias,builder,builderIndex,divisor,i,j,k,kernel,n,name,p,pixel,res,_i,_j,_k;name=this.currentJob.name;bias=this.currentJob.bias;divisor=this.currentJob.divisor;n=this.c.pixelData.length;adjust=this.currentJob.adjust;adjustSize=Math.sqrt(adjust.length);kernel=[];Log.debug("Rendering kernel - Filter: "+this.currentJob.name);start=Math.max(start,this.c.dimensions.width*4*((adjustSize-1)/2));end=Math.min(end,n-(this.c.dimensions.width*4*((adjustSize-1)/2)));builder=(adjustSize-1)/2;pixel=new Pixel();pixel.setContext(this.c);for(i=_i=start;_i<end;i=_i+=4){pixel.loc=i;builderIndex=0;for(j=_j=-builder;-builder<=builder?_j<=builder:_j>=builder;j=-builder<=builder?++_j:--_j){for(k=_k=builder;builder<=-builder?_k<=-builder:_k>=-builder;k=builder<=-builder?++_k:--_k){p=pixel.getPixelRelative(j,k);kernel[builderIndex*3]=p.r;kernel[builderIndex*3+1]=p.g;kernel[builderIndex*3+2]=p.b;builderIndex++;}}
164
- res=this.processKernel(adjust,kernel,divisor,bias);this.modPixelData[i]=Util.clampRGB(res.r);this.modPixelData[i+1]=Util.clampRGB(res.g);this.modPixelData[i+2]=Util.clampRGB(res.b);this.modPixelData[i+3]=this.c.pixelData[i+3];}
165
- if(Caman.NodeJS){return Fiber["yield"](bnum);}else{return this.blockFinished(bnum);}};Renderer.prototype.blockFinished=function(bnum){var i,_i,_ref;if(bnum>=0){Log.debug("Block #"+bnum+" finished! Filter: "+this.currentJob.name);}
166
- this.blocksDone++;Event.trigger(this.c,"blockFinished",{blockNum:bnum,blocksFinished:this.blocksDone,totalBlocks:Renderer.Blocks});if(this.blocksDone===Renderer.Blocks){if(this.currentJob.type===Filter.Type.Kernel){for(i=_i=0,_ref=this.c.pixelData.length;0<=_ref?_i<_ref:_i>_ref;i=0<=_ref?++_i:--_i){this.c.pixelData[i]=this.modPixelData[i];}}
167
- if(bnum>=0){Log.debug("Filter "+this.currentJob.name+" finished!");}
168
- Event.trigger(this.c,"processComplete",this.currentJob);return this.processNext();}};Renderer.prototype.processKernel=function(adjust,kernel,divisor,bias){var i,val,_i,_ref;val={r:0,g:0,b:0};for(i=_i=0,_ref=adjust.length;0<=_ref?_i<_ref:_i>_ref;i=0<=_ref?++_i:--_i){val.r+=adjust[i]*kernel[i*3];val.g+=adjust[i]*kernel[i*3+1];val.b+=adjust[i]*kernel[i*3+2];}
169
- val.r=(val.r/divisor)+bias;val.g=(val.g/divisor)+bias;val.b=(val.b/divisor)+bias;return val;};Renderer.prototype.loadOverlay=function(layer,src){var img,proxyUrl,_this=this;img=new Image();img.onload=function(){layer.context.drawImage(img,0,0,_this.c.dimensions.width,_this.c.dimensions.height);layer.imageData=layer.context.getImageData(0,0,_this.c.dimensions.width,_this.c.dimensions.height);layer.pixelData=layer.imageData.data;_this.c.pixelData=layer.pixelData;return _this.processNext();};proxyUrl=IO.remoteCheck(src);return img.src=proxyUrl!=null?proxyUrl:src;};return Renderer;})();Renderer=Caman.Renderer;Caman.Store=(function(){function Store(){}
170
- Store.items={};Store.has=function(search){return this.items[search]!=null;};Store.get=function(search){return this.items[search];};Store.put=function(name,obj){return this.items[name]=obj;};Store.execute=function(search,callback){var _this=this;setTimeout(function(){return callback.call(_this.get(search),_this.get(search));},0);return this.get(search);};Store.flush=function(name){if(name==null){name=false;}
171
- if(name){return delete this.items[name];}else{return this.items={};}};return Store;})();Store=Caman.Store;Blender.register("normal",function(rgbaLayer,rgbaParent){return{r:rgbaLayer.r,g:rgbaLayer.g,b:rgbaLayer.b};});Blender.register("multiply",function(rgbaLayer,rgbaParent){return{r:(rgbaLayer.r*rgbaParent.r)/255,g:(rgbaLayer.g*rgbaParent.g)/255,b:(rgbaLayer.b*rgbaParent.b)/255};});Blender.register("screen",function(rgbaLayer,rgbaParent){return{r:255-(((255-rgbaLayer.r)*(255-rgbaParent.r))/255),g:255-(((255-rgbaLayer.g)*(255-rgbaParent.g))/255),b:255-(((255-rgbaLayer.b)*(255-rgbaParent.b))/255)};});Blender.register("overlay",function(rgbaLayer,rgbaParent){var result;result={};result.r=rgbaParent.r>128?255-2*(255-rgbaLayer.r)*(255-rgbaParent.r)/255:(rgbaParent.r*rgbaLayer.r*2)/255;result.g=rgbaParent.g>128?255-2*(255-rgbaLayer.g)*(255-rgbaParent.g)/255:(rgbaParent.g*rgbaLayer.g*2)/255;result.b=rgbaParent.b>128?255-2*(255-rgbaLayer.b)*(255-rgbaParent.b)/255:(rgbaParent.b*rgbaLayer.b*2)/255;return result;});Blender.register("difference",function(rgbaLayer,rgbaParent){return{r:rgbaLayer.r-rgbaParent.r,g:rgbaLayer.g-rgbaParent.g,b:rgbaLayer.b-rgbaParent.b};});Blender.register("addition",function(rgbaLayer,rgbaParent){return{r:rgbaParent.r+rgbaLayer.r,g:rgbaParent.g+rgbaLayer.g,b:rgbaParent.b+rgbaLayer.b};});Blender.register("exclusion",function(rgbaLayer,rgbaParent){return{r:128-2*(rgbaParent.r-128)*(rgbaLayer.r-128)/255,g:128-2*(rgbaParent.g-128)*(rgbaLayer.g-128)/255,b:128-2*(rgbaParent.b-128)*(rgbaLayer.b-128)/255};});Blender.register("softLight",function(rgbaLayer,rgbaParent){var result;result={};result.r=rgbaParent.r>128?255-((255-rgbaParent.r)*(255-(rgbaLayer.r-128)))/255:(rgbaParent.r*(rgbaLayer.r+128))/255;result.g=rgbaParent.g>128?255-((255-rgbaParent.g)*(255-(rgbaLayer.g-128)))/255:(rgbaParent.g*(rgbaLayer.g+128))/255;result.b=rgbaParent.b>128?255-((255-rgbaParent.b)*(255-(rgbaLayer.b-128)))/255:(rgbaParent.b*(rgbaLayer.b+128))/255;return result;});Blender.register("lighten",function(rgbaLayer,rgbaParent){return{r:rgbaParent.r>rgbaLayer.r?rgbaParent.r:rgbaLayer.r,g:rgbaParent.g>rgbaLayer.g?rgbaParent.g:rgbaLayer.g,b:rgbaParent.b>rgbaLayer.b?rgbaParent.b:rgbaLayer.b};});Blender.register("darken",function(rgbaLayer,rgbaParent){return{r:rgbaParent.r>rgbaLayer.r?rgbaLayer.r:rgbaParent.r,g:rgbaParent.g>rgbaLayer.g?rgbaLayer.g:rgbaParent.g,b:rgbaParent.b>rgbaLayer.b?rgbaLayer.b:rgbaParent.b};});Filter.register("fillColor",function(){var color;if(arguments.length===1){color=Convert.hexToRGB(arguments[0]);}else{color={r:arguments[0],g:arguments[1],b:arguments[2]};}
172
- return this.process("fillColor",function(rgba){rgba.r=color.r;rgba.g=color.g;rgba.b=color.b;rgba.a=255;return rgba;});});Filter.register("brightness",function(adjust){adjust=Math.floor(255*(adjust/100));return this.process("brightness",function(rgba){rgba.r+=adjust;rgba.g+=adjust;rgba.b+=adjust;return rgba;});});Filter.register("saturation",function(adjust){adjust*=-0.01;return this.process("saturation",function(rgba){var max;max=Math.max(rgba.r,rgba.g,rgba.b);if(rgba.r!==max){rgba.r+=(max-rgba.r)*adjust;}
173
- if(rgba.g!==max){rgba.g+=(max-rgba.g)*adjust;}
174
- if(rgba.b!==max){rgba.b+=(max-rgba.b)*adjust;}
175
- return rgba;});});Filter.register("vibrance",function(adjust){adjust*=-1;return this.process("vibrance",function(rgba){var amt,avg,max;max=Math.max(rgba.r,rgba.g,rgba.b);avg=(rgba.r+rgba.g+rgba.b)/3;amt=((Math.abs(max-avg)*2/255)*adjust)/100;if(rgba.r!==max){rgba.r+=(max-rgba.r)*amt;}
176
- if(rgba.g!==max){rgba.g+=(max-rgba.g)*amt;}
177
- if(rgba.b!==max){rgba.b+=(max-rgba.b)*amt;}
178
- return rgba;});});Filter.register("greyscale",function(adjust){return this.process("greyscale",function(rgba){var avg;avg=Calculate.luminance(rgba);rgba.r=avg;rgba.g=avg;rgba.b=avg;return rgba;});});Filter.register("contrast",function(adjust){adjust=Math.pow((adjust+100)/100,2);return this.process("contrast",function(rgba){rgba.r/=255;rgba.r-=0.5;rgba.r*=adjust;rgba.r+=0.5;rgba.r*=255;rgba.g/=255;rgba.g-=0.5;rgba.g*=adjust;rgba.g+=0.5;rgba.g*=255;rgba.b/=255;rgba.b-=0.5;rgba.b*=adjust;rgba.b+=0.5;rgba.b*=255;return rgba;});});Filter.register("hue",function(adjust){return this.process("hue",function(rgba){var b,g,h,hsv,r,_ref;hsv=Convert.rgbToHSV(rgba.r,rgba.g,rgba.b);h=hsv.h*100;h+=Math.abs(adjust);h=h%100;h/=100;hsv.h=h;_ref=Convert.hsvToRGB(hsv.h,hsv.s,hsv.v),r=_ref.r,g=_ref.g,b=_ref.b;rgba.r=r;rgba.g=g;rgba.b=b;return rgba;});});Filter.register("colorize",function(){var level,rgb;if(arguments.length===2){rgb=Convert.hexToRGB(arguments[0]);level=arguments[1];}else if(arguments.length===4){rgb={r:arguments[0],g:arguments[1],b:arguments[2]};level=arguments[3];}
179
- return this.process("colorize",function(rgba){rgba.r-=(rgba.r-rgb.r)*(level/100);rgba.g-=(rgba.g-rgb.g)*(level/100);rgba.b-=(rgba.b-rgb.b)*(level/100);return rgba;});});Filter.register("invert",function(){return this.process("invert",function(rgba){rgba.r=255-rgba.r;rgba.g=255-rgba.g;rgba.b=255-rgba.b;return rgba;});});Filter.register("sepia",function(adjust){if(adjust==null){adjust=100;}
180
- adjust/=100;return this.process("sepia",function(rgba){rgba.r=Math.min(255,(rgba.r*(1-(0.607*adjust)))+(rgba.g*(0.769*adjust))+(rgba.b*(0.189*adjust)));rgba.g=Math.min(255,(rgba.r*(0.349*adjust))+(rgba.g*(1-(0.314*adjust)))+(rgba.b*(0.168*adjust)));rgba.b=Math.min(255,(rgba.r*(0.272*adjust))+(rgba.g*(0.534*adjust))+(rgba.b*(1-(0.869*adjust))));return rgba;});});Filter.register("gamma",function(adjust){return this.process("gamma",function(rgba){rgba.r=Math.pow(rgba.r/255,adjust)*255;rgba.g=Math.pow(rgba.g/255,adjust)*255;rgba.b=Math.pow(rgba.b/255,adjust)*255;return rgba;});});Filter.register("noise",function(adjust){adjust=Math.abs(adjust)*2.55;return this.process("noise",function(rgba){var rand;rand=Calculate.randomRange(adjust*-1,adjust);rgba.r+=rand;rgba.g+=rand;rgba.b+=rand;return rgba;});});Filter.register("clip",function(adjust){adjust=Math.abs(adjust)*2.55;return this.process("clip",function(rgba){if(rgba.r>255-adjust){rgba.r=255;}else if(rgba.r<adjust){rgba.r=0;}
181
- if(rgba.g>255-adjust){rgba.g=255;}else if(rgba.g<adjust){rgba.g=0;}
182
- if(rgba.b>255-adjust){rgba.b=255;}else if(rgba.b<adjust){rgba.b=0;}
183
- return rgba;});});Filter.register("channels",function(options){var chan,value;if(typeof options!=="object"){return this;}
184
- for(chan in options){if(!__hasProp.call(options,chan))continue;value=options[chan];if(value===0){delete options[chan];continue;}
185
- options[chan]/=100;}
186
- if(options.length===0){return this;}
187
- return this.process("channels",function(rgba){if(options.red!=null){if(options.red>0){rgba.r+=(255-rgba.r)*options.red;}else{rgba.r-=rgba.r*Math.abs(options.red);}}
188
- if(options.green!=null){if(options.green>0){rgba.g+=(255-rgba.g)*options.green;}else{rgba.g-=rgba.g*Math.abs(options.green);}}
189
- if(options.blue!=null){if(options.blue>0){rgba.b+=(255-rgba.b)*options.blue;}else{rgba.b-=rgba.b*Math.abs(options.blue);}}
190
- return rgba;});});Filter.register("curves",function(){var algo,bezier,chans,cps,end,i,last,start,_i,_j,_ref,_ref1;chans=arguments[0],cps=2<=arguments.length?__slice.call(arguments,1):[];last=cps[cps.length-1];if(typeof last==="function"){algo=last;cps.pop();}else if(typeof last==="string"){algo=Calculate[last];cps.pop();}else{algo=Calculate.bezier;}
191
- if(typeof chans==="string"){chans=chans.split("");}
192
- if(chans[0]==="v"){chans=['r','g','b'];}
193
- if(cps.length<2){throw"Invalid number of arguments to curves filter";}
194
- bezier=algo(cps,0,255);start=cps[0];if(start[0]>0){for(i=_i=0,_ref=start[0];0<=_ref?_i<_ref:_i>_ref;i=0<=_ref?++_i:--_i){bezier[i]=start[1];}}
195
- end=cps[cps.length-1];if(end[0]<255){for(i=_j=_ref1=end[0];_ref1<=255?_j<=255:_j>=255;i=_ref1<=255?++_j:--_j){bezier[i]=end[1];}}
196
- return this.process("curves",function(rgba){var _k,_ref2;for(i=_k=0,_ref2=chans.length;0<=_ref2?_k<_ref2:_k>_ref2;i=0<=_ref2?++_k:--_k){rgba[chans[i]]=bezier[rgba[chans[i]]];}
197
- return rgba;});});Filter.register("exposure",function(adjust){var ctrl1,ctrl2,p;p=Math.abs(adjust)/100;ctrl1=[0,255*p];ctrl2=[255-(255*p),255];if(adjust<0){ctrl1=ctrl1.reverse();ctrl2=ctrl2.reverse();}
198
- return this.curves('rgb',[0,0],ctrl1,ctrl2,[255,255]);});Caman.Plugin.register("crop",function(width,height,x,y){var canvas,ctx;if(x==null){x=0;}
199
- if(y==null){y=0;}
200
- if(typeof exports!=="undefined"&&exports!==null){canvas=new Canvas(width,height);}else{canvas=document.createElement('canvas');Util.copyAttributes(this.canvas,canvas);canvas.width=width;canvas.height=height;}
201
- ctx=canvas.getContext('2d');ctx.drawImage(this.canvas,x,y,width,height,0,0,width,height);this.cropCoordinates={x:x,y:y};this.cropped=true;return this.replaceCanvas(canvas);});Caman.Plugin.register("resize",function(newDims){var canvas,ctx;if(newDims==null){newDims=null;}
202
- if(newDims===null||((newDims.width==null)&&(newDims.height==null))){Log.error("Invalid or missing dimensions given for resize");return;}
203
- if(newDims.width==null){newDims.width=this.canvas.width*newDims.height/this.canvas.height;}else if(newDims.height==null){newDims.height=this.canvas.height*newDims.width/this.canvas.width;}
204
- if(typeof exports!=="undefined"&&exports!==null){canvas=new Canvas(newDims.width,newDims.height);}else{canvas=document.createElement('canvas');Util.copyAttributes(this.canvas,canvas);canvas.width=newDims.width;canvas.height=newDims.height;}
205
- ctx=canvas.getContext('2d');ctx.drawImage(this.canvas,0,0,this.canvas.width,this.canvas.height,0,0,newDims.width,newDims.height);this.resized=true;return this.replaceCanvas(canvas);});Caman.Filter.register("crop",function(){return this.processPlugin("crop",Array.prototype.slice.call(arguments,0));});Caman.Filter.register("resize",function(){return this.processPlugin("resize",Array.prototype.slice.call(arguments,0));});}).call(this);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/pickers/caman/dist/caman.pack.js DELETED
@@ -1 +0,0 @@
1
- eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(o(){I $,2F,1z,1J,B,2Y,30,1p,1O,3X,V,1Q,2I,22,1o,2g,1r,1V,1g,4o,21,1a,3q,49,4G,3r,4g=[].9q||o(7j){T(I i=0,l=8.L;i<l;i++){u(i 2X 8&&8[i]===7j)9 i}9-1},3x=[].3r,3L={}.9e,5k=o(2n,7S){9 o(){9 2n.2u(7S,X)}},6x=o(3z,3A){T(I 1B 2X 3A){u(3L.18(3A,1B))3z[1B]=3A[1B]}o 5j(){8.bo=3z}5j.H=3A.H;3z.H=1m 5j();3z.aR=3A.H;9 3z};4G=[\'7D\',\'5B\'];2g=(o(){o 2g(){}2g["aa"]=o(1D){I 1B,2y,F;T(1B 2X 1D){2y=1D[1B];u(4g.18(4G,1B)<0){8[1B]=2y}}u((F=1D.7D)!=G){F.2u(8)}9 8};2g.a6=o(1D){I 1B,2y,F;T(1B 2X 1D){2y=1D[1B];u(4g.18(4G,1B)<0){8.H[1B]=2y}}u((F=1D.5B)!=G){F.2u(8)}9 8};2g.a5=o(){I W,4S,24,C,13,Y;W=1<=X.L?3x.18(X,0):[];24=W.4h();Y=[];T(C=0,13=W.L;C<13;C++){4S=W[C];Y.1A(8.H[4S]=24.H[4S])}9 Y};2g.9s=o(2l,2R){I 1b=8;9 8.H[2l]=o(){I W;W=1<=X.L?3x.18(X,0):[];9 1b.H[2R].2u(1b,W)}};2g.9l=o(2l,2R){9 6I.8S(8.H,2l,{2t:o(){9 8[2R]},8R:o(1x){9 8[2R]=1x}})};2g.5B=o(35){9 35.18(8,8.H)};9 2g})();3r=4c.H.3r;$=o(4K,4J){u(4J==G){4J=1M}u(1f 4K==="2w"||(1f 1Y!=="36"&&1Y!==G)){9 4K}9 4J.a9(4K)};1a=(o(){o 1a(){}1a.6e=(o(){I 1W;1W=0;9{2t:o(){9 1W++}}})();1a.9u=o(){I 45,4t,1D,43,1c,C,13;1D=X[0],1c=2<=X.L?3x.18(X,1):[];4t=1D;T(C=0,13=1c.L;C<13;C++){45=1c[C];T(43 2X 45){u(!3L.18(45,43))42;4t[43]=45[43]}}9 4t};1a.2j=o(1x){u(1x<0){9 0}u(1x>D){9 D}9 1x};1a.40=o(2R,2l,3Z){I 3W,C,13,F,2q,Y;u(3Z==G){3Z={}}F=2R.aH;Y=[];T(C=0,13=F.L;C<13;C++){3W=F[C];u((3Z.6m!=G)&&(2q=3W.6p,4g.18(3Z.6m,2q)>=0)){42}Y.1A(2l.7G(3W.6p,3W.am))}9 Y};1a.3T=o(L){u(L==G){L=0}u(B.1S||(2T.7B!=G)){9 1m 7B(L)}9 1m 4c(L)};9 1a})();u(1f 1Y!=="36"&&1Y!==G){4o=1Y;30=3S(\'E\');2I=30.2I;3X=3S(\'a0\');3q=3S(\'3q\');49=3S(\'49\')}R{4o=2T}B=(o(7d){6x(B,7d);B.6s={7M:"4.1.2",7s:"7/27/b8"};B.6V=1G;B.44=2c;B.6v="7x";B.5e="";B.7P="aP";B.1S=1f 1Y!=="36"&&1Y!==G;B.82=!B.1S;B.3D=o(){9"a2 "+B.6s.7M+", aO "+B.6s.7s};B.5V=o(E){u(B.1S){9 2c}u(1f E==="2S"){E=$(E)}u(!((E!=G)&&(E.3G!=G))){9 G}9 E.3G(\'1v-2h-1W\')};o B(){8.3n=5k(8.3n,8);I W,1j,1W,1b=8;u(X.L===0){1R"3l X";}u(8 8m B){8.3h=8.3h.5o(8);8.4f=8.4f.5o(8);W=X[0];u(!B.1S){1W=4D(B.5V(W[0]),10);1j=1f W[1]==="o"?W[1]:1f W[2]==="o"?W[2]:o(){};u(!aT(1W)&&21.8z(1W)){9 21.2o(1W,1j)}}8.1W=1a.6e.2t();8.4Q=8.38=G;8.3U={x:0,y:0};8.84=1G;8.4w=1G;8.4b=[];8.63=[];8.5R=[];8.4j=G;8.76=1G;8.aN=1m 2F(8);8.2L=1m 1g(8);8.6L(o(){1b.8v(W);9 1b.86()});9 8}R{9 1m B(X)}}B.H.6L=o(3y){I 5m,1b=8;u(B.1S){9 59(o(){9 3y.18(1b)},0)}R{u(1M.5F==="4P"){1o.1C("6S 6R");9 59(o(){9 3y.18(1b)},0)}R{5m=o(){u(1M.5F==="4P"){1o.1C("6S 6R");9 3y.18(1b)}};9 1M.6B("a4",5m,1G)}}};B.H.8v=o(W){I 1B,1x,F,Y;u(W.L===0){1R"3l X 80";}8.23=G;8.4A=G;8.4F=G;8.1j=o(){};8.8D(W[0]);u(W.L===1){9}3I(1f W[1]){1t"2S":8.4F=W[1];3c;1t"o":8.1j=W[1]}u(W.L===2){9}8.1j=W[2];u(W.L===4){F=W[4];Y=[];T(1B 2X F){u(!3L.18(F,1B))42;1x=F[1B];Y.1A(8.1e[1B]=1x)}9 Y}};B.H.8D=o(1D){u(B.1S){8.23=1D;8.4A=\'7Q\';9}u(1f 1D==="2w"){8.23=1D}R{8.23=$(1D)}u(8.23==G){1R"bb 9F 9X S 85 E T ak.";}9 8.4A=8.23.6p.4m()};B.H.86=o(){3I(8.4A){1t"7Q":9 8.8F();1t"1i":9 8.8B();1t"E":9 8.8t()}};B.H.8F=o(){1o.1C("aU T 1S");u(1f 8.23==="2S"&&8.23.4N(/^8e?:\\/\\//)){9 8.89(8.23,8.3n)}R u(1f 8.23==="2S"){9 3q.9Y(8.23,8.3n)}R{9 8.3n(G,8.23)}};B.H.89=o(3Y,1j){I 6j;1o.1C("ac S 2R "+3Y);6j=49.2t(3Y,o(2r){I 4z;4z=\'\';2r.aK(\'7z\');2r.5X(\'1v\',o(7t){9 4z+=7t});9 2r.5X(\'1q\',o(){9 1j(G,1m aS(4z,\'7z\'))})});9 6j.5X(\'5K\',1j)};B.H.3n=o(4l,1v){u(4l){1R 4l;}8.S=1m 2I();8.S.1c=1v;1o.1C("2I 6E. 8u = "+(8.3f())+", 8j = "+(8.3e()));8.E=1m 30(8.3f(),8.3e());9 8.3h()};B.H.8B=o(){8.S=8.23;8.E=1M.2U(\'E\');8.19=8.E.2p(\'2d\');1a.40(8.S,8.E,{6m:[\'1c\']});u(8.S.58!=G){8.S.58.5S(8.E,8.S)}8.5i();9 8.5Z()};B.H.8t=o(){8.E=8.23;8.19=8.E.2p(\'2d\');u(8.4F!=G){8.S=1M.2U(\'1i\');8.S.1c=8.4F;8.5i();9 8.5Z()}R{9 8.3h()}};B.H.5i=o(){u(8.61()){1o.1C(8.S.1c,"->",8.4L());8.7c=2c;8.S.1c=8.4L()}u(1Q.7l(8.S)){8.S.1c=1Q.3b(8.S.1c);9 1o.1C("90 S 9f, 9j 7m = "+8.S.1c)}};B.H.5Z=o(){u(8.7F()){9 8.4f()}R{9 8.S.6T=8.4f}};B.H.7F=o(){u(!8.S.4P){9 1G}u((8.S.5A!=G)&&8.S.5A===0){9 1G}9 2c};B.H.3f=o(){9 8.S.K||8.S.5A};B.H.3e=o(){9 8.S.P||8.S.ag};B.H.4f=o(){1o.1C("2I 6E. 8u = "+(8.3f())+", 8j = "+(8.3e()));u(8.7c){8.E.K=8.3f()/8.4x();8.E.P=8.3e()/8.4x()}R{8.E.K=8.3f();8.E.P=8.3e()}9 8.3h()};B.H.3h=o(){I i,15,C,13,F;u(8.19==G){8.19=8.E.2p(\'2d\')}8.3J=8.3M=8.K=8.E.K;8.3N=8.3O=8.P=8.E.P;8.7O();u(!8.8d()){8.6J()}u(8.S!=G){8.19.3P(8.S,0,0,8.3f(),8.3e(),0,0,8.3M,8.3O)}8.1H=8.19.3a(0,0,8.E.K,8.E.P);8.M=8.1H.1v;u(B.44){8.4Q=1a.3T(8.M.L);8.38=1a.3T(8.M.L);F=8.M;T(i=C=0,13=F.L;C<13;i=++C){15=F[i];8.4Q[i]=15;8.38[i]=15}}8.1E={K:8.E.K,P:8.E.P};u(!B.1S){21.7f(8.1W,8)}8.1j.18(8,8);9 8.1j=o(){}};B.H.7k=o(){8.1H=8.19.3a(0,0,8.E.K,8.E.P);9 8.M=8.1H.1v};B.H.9r=o(){I i,15,C,13,F,Y;u(!B.44){1R"6u 4V";}8.38=1a.3T(8.M.L);F=8.M;Y=[];T(i=C=0,13=F.L;C<13;i=++C){15=F[i];Y.1A(8.38[i]=15)}9 Y};B.H.8d=o(){9 B.5V(8.E)!=G};B.H.6J=o(){u(B.1S||8.E.3G(\'1v-2h-1W\')){9}9 8.E.7G(\'1v-2h-1W\',8.1W)};B.H.7n=o(){9 8.E.3G(\'1v-2h-7p-4V\')!==G};B.H.7O=o(){I 2s;u(B.1S||!8.61()){9}2s=8.4x();u(2s!==1){1o.1C("a7 2s = "+2s);8.76=2c;8.3M=8.E.K;8.3O=8.E.P;8.E.K=8.3M*2s;8.E.P=8.3O*2s;8.E.7C.K=""+8.3M+"7E";8.E.7C.P=""+8.3O+"7E";8.19.ah(2s,2s);8.K=8.3J=8.E.K;9 8.P=8.3N=8.E.P}};B.H.4x=o(){I 6t,2C;2C=2T.2C||1;6t=8.19.ap||8.19.at||8.19.av||8.19.aG||8.19.aI||1;9 2C/6t};B.H.7N=o(){9(2T.2C!=G)&&2T.2C!==1};B.H.61=o(){u(8.7n()||!8.7N()){9 1G}9 8.4L()!==G};B.H.4L=o(){u(8.S==G){9 G}9 8.S.3G(\'1v-2h-7p\')};B.H.57=o(7V){I 5a;5a=8.E;8.E=7V;8.19=8.E.2p(\'2d\');u(!B.1S){5a.58.5S(8.E,5a)}8.K=8.E.K;8.P=8.E.P;8.7k();9 8.1E={K:8.E.K,P:8.E.P}};B.H.8f=o(1j){I 1b=8;u(1j==G){1j=o(){}}1O.39(8,"6D");9 8.2L.2o(o(){1b.19.5d(1b.1H,0,0);9 1j.18(1b)})};B.H.b5=o(4p){I i,15,C,13,F;u(4p==G){4p=2c}u(!B.44){1R"6u 4V";}F=8.6U();T(i=C=0,13=F.L;C<13;i=++C){15=F[i];8.M[i]=15}u(4p){9 8.19.5d(8.1H,0,0)}};B.H.bm=o(){I E,1K,i,1H,15,M,C,13,F;E=1M.2U(\'E\');1a.40(8.E,E);E.K=8.3J;E.P=8.3N;1K=E.2p(\'2d\');1H=1K.3a(0,0,E.K,E.P);M=1H.1v;F=8.4Q;T(i=C=0,13=F.L;C<13;i=++C){15=F[i];M[i]=15}1K.5d(1H,0,0);8.3U={x:0,y:0};8.4w=1G;9 8.57(E)};B.H.6U=o(){I E,4r,1K,1s,6r,i,1H,15,M,4u,3R,4B,4C,K,C,Z,13,F,2q,2x,6q;u(!B.44){1R"6u 4V";}4u=[];4B=8.3U.x;1s=4B+8.K;4C=8.3U.y;6r=4C+8.P;u(8.4w){E=1M.2U(\'E\');E.K=8.3J;E.P=8.3N;1K=E.2p(\'2d\');1H=1K.3a(0,0,E.K,E.P);M=1H.1v;F=8.38;T(i=C=0,13=F.L;C<13;i=++C){15=F[i];M[i]=15}1K.5d(1H,0,0);3R=1M.2U(\'E\');3R.K=8.K;3R.P=8.P;1K=3R.2p(\'2d\');1K.3P(E,0,0,8.3J,8.3N,0,0,8.K,8.P);M=1K.3a(0,0,8.K,8.P).1v;K=8.K}R{M=8.38;K=8.3J}T(i=Z=0,2q=M.L;Z<2q;i=Z+=4){4r=1r.7u(i,K);u(((4B<=(2x=4r.x)&&2x<1s))&&((4C<=(6q=4r.y)&&6q<6r))){4u.1A(M[i],M[i+1],M[i+2],M[i+3])}}9 4u};B.H.1T=o(11,4M){8.2L.2D({14:V.25.6o,11:11,4M:4M});9 8};B.H.6n=o(11,J,1P,26){I i,C,F;u(1P==G){1P=G}u(26==G){26=0}u(1P==G){1P=0;T(i=C=0,F=J.L;0<=F?C<F:C>F;i=0<=F?++C:--C){1P+=J[i]}}8.2L.2D({14:V.25.6l,11:11,J:J,1P:1P,26:26});9 8};B.H.6k=o(2v,W){8.2L.2D({14:V.25.1V,2v:2v,W:W});9 8};B.H.6i=o(1j){I 1w;1w=1m 22(8);8.5R.1A(1w);8.2L.2D({14:V.25.6h});1j.18(1w);8.2L.2D({14:V.25.6g});9 8};B.H.6Z=o(1w){9 8.71(1w)};B.H.71=o(1w){8.63.1A(8.4j);8.4b.1A(8.M);8.4j=1w;9 8.M=1w.M};B.H.73=o(){8.M=8.4b.4h();9 8.4j=8.63.4h()};B.H.77=o(){9 8.4j.7b()};9 B})(2g);4o.B=B;B.2F=(o(){o 2F(c){8.c=c}2F.H.8T=o(){I i,2a,3K,C,Z,1N,F;2a={r:{},g:{},b:{}};T(i=C=0;C<=D;i=++C){2a.r[i]=0;2a.g[i]=0;2a.b[i]=0}T(i=Z=0,F=8.c.M.L;Z<F;i=Z+=4){2a.r[8.c.M[i]]++;2a.g[8.c.M[i+1]]++;2a.b[8.c.M[i+2]]++}3K=8.c.M.L/4;T(i=1N=0;1N<=D;i=++1N){2a.r[i]/=3K;2a.g[i]/=3K;2a.b[i]/=3K}9 2a};9 2F})();2F=B.2F;B.6d=o(){I 1i,46,7q,C,13,Y;46=1M.a1("1i[1v-2h]");u(!(46.L>0)){9}Y=[];T(C=0,13=46.L;C<13;C++){1i=46[C];Y.1A(7q=1m 2Y(1i,o(){8.7r();9 8.2o()}))}9 Y};u(B.82){(o(){u(1M.5F==="4P"){9 B.6d()}R{9 1M.6B("a3",B.6d,1G)}})()}2Y=(o(){I 4y;4y="(\\\\w+)\\\\((.*?)\\\\)";o 2Y(2z,7v){8.7y=2z.3G(\'1v-2h\');8.2h=B(2z,7v.5o(8))}2Y.H.7r=o(){I W,e,47,35,6a,68,m,r,4a,C,13,F,Y;8.2z=8.2h.E;r=1m 7H(4y,\'g\');4a=8.7y.4N(r);u(!(4a.L>0)){9}r=1m 7H(4y);Y=[];T(C=0,13=4a.L;C<13;C++){6a=4a[C];F=6a.4N(r),m=F[0],47=F[1],W=F[2];68=1m az("9 o() { 8."+47+"("+W+"); };");65{35=68();Y.1A(35.18(8.2h))}64(3H){e=3H;Y.1A(1o.1C(e))}}9 Y};2Y.H.2o=o(){I 2z;2z=8.2z;9 8.2h.8f(o(){9 2z.58.5S(8.7R(),2z)})};9 2Y})();B.1z=(o(){o 1z(){}1z.60={};1z.17=o(11,35){9 8.60[11]=35};1z.2o=o(11,O,N){9 8.60[11](O,N)};9 1z})();1z=B.1z;B.1J=(o(){o 1J(){}1J.aQ=o(8l,8w,8x,8A){9 Q.8E(Q.1Z(8x-8l,2)+Q.1Z(8A-8w,2))};1J.6C=o(1h,U,4d){I 2A;u(4d==G){4d=1G}2A=1h+(Q.91()*(U-1h));u(4d){9 2A.9d(4d)}R{9 Q.4e(2A)}};1J.6K=o(A){9(0.9m*A.r)+(0.9o*A.g)+(0.9p*A.b)};1J.1L=o(1k,2Q,2P,1q,32,2V){I 1L,3F,1I,1s,i,j,3E,4U,2f,t,C,Z,F;u(32==G){32=0}u(2V==G){2V=D}u(1k[0]8m 4c){1I=1k;32=2Q;2V=2P}R{1I=[1k,2Q,2P,1q]}u(1I.L<2){1R"3l 5Q 5P X 2l 1L";}1L={};3E=o(a,b,t){9 a*(1-t)+b*t};3F=o(a,1h,U){9 Q.1h(Q.U(a,1h),U)};T(i=C=0;C<7e;i=++C){t=i/7e;2f=1I;ad(2f.L>1){4U=[];T(j=Z=0,F=2f.L-2;0<=F?Z<=F:Z>=F;j=0<=F?++Z:--Z){4U.1A([3E(2f[j][0],2f[j+1][0],t),3E(2f[j][1],2f[j+1][1],t)])}2f=4U}1L[Q.4e(2f[0][0])]=Q.4e(3F(2f[0][1],32,2V))}1s=1I[1I.L-1][0];1L=B.1J.5O(1L,1s);u(1L[1s]==G){1L[1s]=1L[1s-1]}9 1L};1J.7h=o(1I,32,2V){I 2D,3F,5L,1s,4Z,50,51,52,i,j,3E,5I,5G,2O,p,3g,3C,2N,4n,5b,28,5c,t,C,Z,F,1b=8;u(1I.L<2){1R"3l 5Q 5P X 2l 7h";}28={};3E=o(a,b,t){9 a*(1-t)+b*t};2D=o(a,b,c,d){9[a[0]+b[0]+c[0]+d[0],a[1]+b[1]+c[1]+d[1]]};2O=o(a,b){9[a[0]*b[0],a[1]*b[1]]};5c=o(a,b){9[a[0]-b[0],a[1]-b[1]]};3F=o(a,1h,U){9 Q.1h(Q.U(a,1h),U)};5L=0;T(i=C=0,F=1I.L-2;0<=F?C<=F:C>=F;i=0<=F?++C:--C){3g=1I[i];3C=1I[i+1];2N=3C[0]-3g[0];4n=1/2N;u(i===1I.L-2){4n=1/(2N-1)}p=i>0?1I[i-1]:3g;5I=2O(5c(3C,p),[0.5,0.5]);p=i<1I.L-2?1I[i+2]:3C;5G=2O(5c(p,3g),[0.5,0.5]);T(j=Z=0;0<=2N?Z<=2N:Z>=2N;j=0<=2N?++Z:--Z){t=j*4n;4Z=2.0*t*t*t-3.0*t*t+1.0;50=t*t*t-2.0*t*t+t;51=-2.0*t*t*t+3.0*t*t;52=t*t*t-t*t;5b=2D(2O(3g,[4Z,4Z]),2O(5I,[50,50]),2O(3C,[51,51]),2O(5G,[52,52]));28[Q.4e(5b[0])]=Q.4e(3F(5b[1],32,2V));5L+=1}}1s=1I[1I.L-1][0];28=B.1J.5O(28,1s);9 28};1J.5O=o(2Z,1s){I i,j,3B,28,5f,C,Z;u(6I.b7(2Z).L<1s+1){28={};T(i=C=0;0<=1s?C<=1s:C>=1s;i=0<=1s?++C:--C){u(2Z[i]!=G){28[i]=2Z[i]}R{3B=[i-1,28[i-1]];T(j=Z=i;i<=1s?Z<=1s:Z>=1s;j=i<=1s?++Z:--Z){u(2Z[j]!=G){5f=[j,2Z[j]];3c}}28[i]=3B[1]+((5f[1]-3B[1])/(5f[0]-3B[0]))*(i-3B[0])}}9 28}9 2Z};9 1J})();1J=B.1J;B.1p=(o(){o 1p(){}1p.5l=o(2e){I b,g,r;u(2e.be(0)==="#"){2e=2e.5h(1)}r=4D(2e.5h(0,2),16);g=4D(2e.5h(2,2),16);b=4D(2e.5h(4,2),16);9{r:r,g:g,b:b}};1p.8Q=o(r,g,b){I d,h,l,U,1h,s;u(1f r==="2w"){g=r.g;b=r.b;r=r.r}r/=D;g/=D;b/=D;U=Q.U(r,g,b);1h=Q.1h(r,g,b);l=(U+1h)/2;u(U===1h){h=s=0}R{d=U-1h;s=l>0.5?d/(2-U-1h):d/(U+1h);h=(o(){3I(U){1t r:9(g-b)/d+(g<b?6:0);1t g:9(b-r)/d+2;1t b:9(r-g)/d+4}})();h/=6}9{h:h,s:s,l:l}};1p.8Z=o(h,s,l){I b,g,p,q,r;u(1f h==="2w"){s=h.s;l=h.l;h=h.h}u(s===0){r=g=b=l}R{q=l<0.5?l*(1+s):l+s-l*s;p=2*l-q;r=8.5g(p,q,h+1/3);g=8.5g(p,q,h);b=8.5g(p,q,h-1/3)}9{r:r*D,g:g*D,b:b*D}};1p.5g=o(p,q,t){u(t<0){t+=1}u(t>1){t-=1}u(t<1/6){9 p+(q-p)*6*t}u(t<1/2){9 q}u(t<2/3){9 p+(q-p)*(2/3-t)*6}9 p};1p.81=o(r,g,b){I d,h,U,1h,s,v;r/=D;g/=D;b/=D;U=Q.U(r,g,b);1h=Q.1h(r,g,b);v=U;d=U-1h;s=U===0?0:d/U;u(U===1h){h=0}R{h=(o(){3I(U){1t r:9(g-b)/d+(g<b?6:0);1t g:9(b-r)/d+2;1t b:9(r-g)/d+4}})();h/=6}9{h:h,s:s,v:v}};1p.83=o(h,s,v){I b,f,g,i,p,q,r,t;i=Q.2E(h*6);f=h*6-i;p=v*(1-s);q=v*(1-f*s);t=v*(1-(1-f)*s);3I(i%6){1t 0:r=v;g=t;b=p;3c;1t 1:r=q;g=v;b=p;3c;1t 2:r=p;g=v;b=t;3c;1t 3:r=p;g=q;b=v;3c;1t 4:r=t;g=p;b=v;3c;1t 5:r=v;g=p;b=q}9{r:Q.2E(r*D),g:Q.2E(g*D),b:Q.2E(b*D)}};1p.88=o(r,g,b){I x,y,z;r/=D;g/=D;b/=D;u(r>0.5n){r=Q.1Z((r+0.29)/1.29,2.4)}R{r/=12.92}u(g>0.5n){g=Q.1Z((g+0.29)/1.29,2.4)}R{g/=12.92}u(b>0.5n){b=Q.1Z((b+0.29)/1.29,2.4)}R{b/=12.92}x=r*0.9v+g*0.9w+b*0.9x;y=r*0.9z+g*0.9A+b*0.9B;z=r*0.9C+g*0.9D+b*0.9E;9{x:x*1n,y:y*1n,z:z*1n}};1p.9H=o(x,y,z){I b,g,r;x/=1n;y/=1n;z/=1n;r=(3.9M*x)+(-1.9N*y)+(-0.9O*z);g=(-0.9R*x)+(1.9S*y)+(0.9T*z);b=(0.9U*x)+(-0.9V*y)+(1.9W*z);u(r>0.5p){r=(1.29*Q.1Z(r,0.5q))-0.29}R{r*=12.92}u(g>0.5p){g=(1.29*Q.1Z(g,0.5q))-0.29}R{g*=12.92}u(b>0.5p){b=(1.29*Q.1Z(b,0.5q))-0.29}R{b*=12.92}9{r:r*D,g:g*D,b:b*D}};1p.8y=o(x,y,z){I a,b,l,5r,5s,5t;u(1f x==="2w"){y=x.y;z=x.z;x=x.x}5r=95.6y;5s=1n.0;5t=6z.6A;x/=5r;y/=5s;z/=5t;u(x>0.5u){x=Q.1Z(x,0.5v)}R{x=(7.5w*x)+0.3w}u(y>0.5u){y=Q.1Z(y,0.5v)}R{y=(7.5w*y)+0.3w}u(z>0.5u){z=Q.1Z(z,0.5v)}R{z=(7.5w*z)+0.3w}l=6F*y-16;a=6G*(x-y);b=6H*(y-z);9{l:l,a:a,b:b}};1p.al=o(l,a,b){I x,y,z;u(1f l==="2w"){a=l.a;b=l.b;l=l.l}y=(l+16)/6F;x=y+(a/6G);z=y-(b/6H);u(x>0.5x){x=x*x*x}R{x=0.5y*(x-0.3w)}u(y>0.5x){y=y*y*y}R{y=0.5y*(y-0.3w)}u(z>0.5x){z=z*z*z}R{z=0.5y*(z-0.3w)}9{x:x*95.6y,y:y*1n.0,z:z*6z.6A}};1p.ao=o(r,g,b){I 5z;u(1f r==="2w"){g=r.g;b=r.b;r=r.r}5z=8.88(r,g,b);9 8.8y(5z)};1p.as=o(l,a,b){};9 1p})();1p=B.1p;B.1O=(o(){o 1O(){}1O.2W={};1O.6M=["6N","6O","6D","6P","6Q","3v"];1O.39=o(24,14,1v){I 4k,C,13,F,Y;u(1v==G){1v=G}u(8.2W[14]&&8.2W[14].L){F=8.2W[14];Y=[];T(C=0,13=F.L;C<13;C++){4k=F[C];u(4k.24===G||24.1W===4k.24.1W){Y.1A(4k.2n.18(24,1v))}R{Y.1A(aL 0)}}9 Y}};1O.aM=o(24,14,2n){I 5C,5D;u(1f 24==="2S"){5D=24;5C=14;24=G;14=5D;2n=5C}u(4g.18(8.6M,14)<0){9 1G}u(!8.2W[14]){8.2W[14]=[]}8.2W[14].1A({24:24,2n:2n});9 2c};9 1O})();1O=B.1O;B.V=(o(){o V(){}V.25={6o:1,6l:2,6h:3,6g:4,5E:5,1V:6};V.17=o(11,6W){9 B.H[11]=6W};9 V})();V=B.V;B.1Q=(o(){o 1Q(){}1Q.6X=/(?:(?:49|8e):\\/\\/)((?:\\w+)\\.(?:(?:\\w|\\.)+))/;1Q.7l=o(1i){u(1i==G){9 1G}u(8.6Y(1i)){9 1G}9 8.56(1i.1c)};1Q.6Y=o(1i){I F;9(1i.6v!=G)&&((F=1i.6v.4m())===\'7x\'||F===\'70-aV\')};1Q.56=o(3Y){I 54;54=3Y.4N(8.6X);u(54){9 54[1]!==1M.b6}R{9 1G}};1Q.72=o(1c){u(8.56(1c)){u(!B.5e.L){1o.5H("b9 2l ba a 74 S bc a bd 75. 7m: "+1c)}R{u(B.56(B.5e)){1o.5H("bf 70 a 74 75 T bg bh.");9}9 8.3b(1c)}}};1Q.3b=o(1c){9""+B.5e+"?"+B.7P+"="+(bi(1c))};1Q.bl=o(3d){I 53;53={bn:\'8G\',8H:\'8I\',8J:\'8K\',8L:\'8M\'};3d=3d.4m();u(53[3d]!=G){3d=53[3d]}9"8N/8O."+3d};9 1Q})();B.H.8P=o(){u(1f 1Y!=="36"&&1Y!==G){9 8.78.2u(8,X)}R{9 8.79.2u(8,X)}};B.H.79=o(14){I S;u(14==G){14="7a"}14=14.4m();S=8.5J(14).8U("S/"+14,"S/8V-8W");9 1M.8X.8Y=S};B.H.78=o(3u,4Y,1j){I e,5M;u(4Y==G){4Y=2c}u(1j==G){1j=G}65{5M=3q.93(3u);u(5M.94()&&!4Y){9 1G}}64(3H){e=3H;1o.1C("96 97 3u "+3u)}9 3q.98(3u,8.E.99(),o(4l){1o.1C("9a 9b 2l "+3u);u(1j){9 1j.18(8,4l)}})};B.H.7R=o(14){I 1i;1i=1m 2I();1i.1c=8.5J(14);1i.K=8.1E.K;1i.P=8.1E.P;u(2T.2C){1i.K/=2T.2C;1i.P/=2T.2C}9 1i};B.H.5J=o(14){u(14==G){14="7a"}14=14.4m();9 8.E.9c("S/"+14)};1Q=B.1Q;B.22=(o(){o 22(c){8.c=c;8.47=8.c;8.1e={5N:\'7g\',2K:1.0};8.9g=1a.6e.2t();8.E=1f 1Y!=="36"&&1Y!==G?1m 30():1M.2U(\'E\');8.E.K=8.c.1E.K;8.E.P=8.c.1E.P;8.19=8.E.2p(\'2d\');8.19.9h(8.E.K,8.E.P);8.1H=8.19.3a(0,0,8.E.K,8.E.P);8.M=8.1H.1v}22.H.6i=o(3y){9 8.c.6i.18(8.c,3y)};22.H.9i=o(7i){8.1e.5N=7i;9 8};22.H.2K=o(2K){8.1e.2K=2K/1n;9 8};22.H.9k=o(){I i,20,C,F;20=8.c.M;T(i=C=0,F=8.c.M.L;C<F;i=C+=4){8.M[i]=20[i];8.M[i+1]=20[i+1];8.M[i+2]=20[i+2];8.M[i+3]=20[i+3]}9 8};22.H.4W=o(){9 8.c.4W.2u(8.c,X)};22.H.9n=o(S){u(1f S==="2w"){S=S.1c}R u(1f S==="2S"&&S[0]==="#"){S=$(S).1c}u(!S){9 8}8.c.2L.4i.1A({14:V.25.5E,1c:S,1w:8});9 8};22.H.7b=o(){I i,37,20,1d,O,N,C,F,Y;20=8.c.4b[8.c.4b.L-1];37=8.c.M;Y=[];T(i=C=0,F=37.L;C<F;i=C+=4){N={r:20[i],g:20[i+1],b:20[i+2],a:20[i+3]};O={r:37[i],g:37[i+1],b:37[i+2],a:37[i+3]};1d=1z.2o(8.1e.5N,O,N);1d.r=1a.2j(1d.r);1d.g=1a.2j(1d.g);1d.b=1a.2j(1d.b);u(1d.a==G){1d.a=O.a}20[i]=N.r-((N.r-1d.r)*(8.1e.2K*(1d.a/D)));20[i+1]=N.g-((N.g-1d.g)*(8.1e.2K*(1d.a/D)));Y.1A(20[i+2]=N.b-((N.b-1d.b)*(8.1e.2K*(1d.a/D))))}9 Y};9 22})();22=B.22;B.4T=(o(){o 4T(){I 11,C,13,F;F=[\'7o\',\'5H\',\'9t\',\'5K\'];T(C=0,13=F.L;C<13;C++){11=F[C];8[11]=(o(11){9 o(){I W,e;W=1<=X.L?3x.18(X,0):[];u(!B.6V){9}65{9 5T[11].2u(5T,W)}64(3H){e=3H;9 5T[11](W)}}})(11)}8.1C=8.7o}9 4T})();1o=1m B.4T();B.1r=(o(){1r.5U=o(x,y,K){9(y*K+x)*4};1r.7u=o(1l,K){I x,y;y=Q.2E(1l/(K*4));x=(1l%(K*4))/4;9{x:x,y:y}};o 1r(r,g,b,a,c){8.r=r!=G?r:0;8.g=g!=G?g:0;8.b=b!=G?b:0;8.a=a!=G?a:D;8.c=c!=G?c:G;8.1l=0}1r.H.5W=o(c){9 8.c=c};1r.H.9y=o(){I x,y;u(8.c==G){1R"3t a 3s 19";}y=8.c.1E.P-Q.2E(8.1l/(8.c.1E.K*4));x=(8.1l%(8.c.1E.K*4))/4;9{x:x,y:y}};1r.H.5Y=o(1l){u(8.c==G){1R"3t a 3s 19";}9 1m 1r(8.c.M[1l],8.c.M[1l+1],8.c.M[1l+2],8.c.M[1l+3],8.c)};1r.H.7w=o(4O,4I){I 2k;u(8.c==G){1R"3t a 3s 19";}2k=8.1l+(8.c.1E.K*4*(4I*-1))+(4*4O);u(2k>8.c.M.L||2k<0){9 1m 1r(0,0,0,D,8.c)}9 8.5Y(2k)};1r.H.9G=o(4O,4I,A){I 7A;u(8.c==G){1R"3t a 3s 19";}7A=8.1l+(8.c.1E.K*4*(4I*-1))+(4*4O);u(2k>8.c.M.L||2k<0){9}8.c.M[2k]=A.r;8.c.M[2k+1]=A.g;8.c.M[2k+2]=A.b;8.c.M[2k+3]=A.a;9 2c};1r.H.9I=o(x,y){I 1l;u(8.c==G){1R"3t a 3s 19";}1l=8.5U(x,y,8.K);9 8.5Y(1l)};1r.H.9J=o(x,y,A){I 1l;u(8.c==G){1R"3t a 3s 19";}1l=8.5U(x,y,8.K);8.c.M[1l]=A.r;8.c.M[1l+1]=A.g;8.c.M[1l+2]=A.b;9 8.c.M[1l+3]=A.a};1r.H.3D=o(){9 8.9K()};1r.H.9L=o(4H){I 2e;u(4H==G){4H=1G}2e=\'#\'+8.r.3D(16)+8.g.3D(16)+8.b.3D(16);u(4H){9 2e+8.a.3D(16)}R{9 2e}};9 1r})();1r=B.1r;B.1V=(o(){o 1V(){}1V.62={};1V.17=o(11,2v){9 8.62[11]=2v};1V.2o=o(19,11,W){9 8.62[11].2u(19,W)};9 1V})();1V=B.1V;B.1g=(o(){1g.2J=B.1S?3S(\'9P\').9Q().L:4;o 1g(c){8.c=c;8.2B=5k(8.2B,8);8.4i=[];8.33=G}1g.H.2D=o(66){u(66==G){9}9 8.4i.1A(66)};1g.H.2B=o(){I 1w;u(8.4i.L===0){1O.39(8,"6P");u(8.67!=G){8.67.18(8.c)}9 8}8.1u=8.4i.7I();3I(8.1u.14){1t V.25.6h:1w=8.c.5R.7I();8.c.6Z(1w);9 8.2B();1t V.25.6g:8.c.77();8.c.73();9 8.2B();1t V.25.5E:9 8.7J(8.1u.1w,8.1u.1c);1t V.25.1V:9 8.7K();9Z:9 8.7L()}};1g.H.2o=o(1j){8.67=1j;8.33=1a.3T(8.c.M.L);9 8.2B()};1g.H.69=o(2n){I 48,6b,1X,1q,f,i,6c,n,1k,C,F,Y,1b=8;8.4v=0;n=8.c.M.L;6b=Q.2E((n/4)/1g.2J);48=6b*4;6c=48+((n/4)%1g.2J)*4;Y=[];T(i=C=0,F=1g.2J;0<=F?C<F:C>F;i=0<=F?++C:--C){1k=i*48;1q=1k+(i===1g.2J-1?6c:48);u(B.1S){f=3X(o(){9 2n.18(1b,i,1k,1q)});1X=f.a8();Y.1A(8.3v(1X))}R{Y.1A(59((o(i,1k,1q){9 o(){9 2n.18(1b,i,1k,1q)}})(i,1k,1q),0))}}9 Y};1g.H.7L=o(){1O.39(8.c,"6N",8.1u);u(8.1u.14===V.25.6o){9 8.69(8.7T)}R{9 8.69(8.7U)}};1g.H.7K=o(){1o.1C("ab 2v "+8.1u.2v);1V.2o(8.c,8.1u.2v,8.1u.W);1o.1C("1V "+8.1u.2v+" 6f!");9 8.2B()};1g.H.7T=o(1X,1k,1q){I i,15,C;1o.1C("7W #"+1X+" - V: "+8.1u.11+", ae: "+1k+", af: "+1q);1O.39(8.c,"6Q",{7X:1X,7Y:1g.2J,ai:1k,aj:1q});15=1m 1r();15.5W(8.c);T(i=C=1k;C<1q;i=C+=4){15.1l=i;15.r=8.c.M[i];15.g=8.c.M[i+1];15.b=8.c.M[i+2];15.a=8.c.M[i+3];8.1u.4M(15);8.c.M[i]=1a.2j(15.r);8.c.M[i+1]=1a.2j(15.g);8.c.M[i+2]=1a.2j(15.b);8.c.M[i+3]=1a.2j(15.a)}u(B.1S){9 3X["7Z"](1X)}R{9 8.3v(1X)}};1g.H.7U=o(1X,1k,1q){I J,41,26,1U,3p,1P,i,j,k,2b,n,11,p,15,2r,C,Z,1N;11=8.1u.11;26=8.1u.26;1P=8.1u.1P;n=8.c.M.L;J=8.1u.J;41=Q.8E(J.L);2b=[];1o.1C("aq 2b - V: "+8.1u.11);1k=Q.U(1k,8.c.1E.K*4*((41-1)/2));1q=Q.1h(1q,n-(8.c.1E.K*4*((41-1)/2)));1U=(41-1)/2;15=1m 1r();15.5W(8.c);T(i=C=1k;C<1q;i=C+=4){15.1l=i;3p=0;T(j=Z=-1U;-1U<=1U?Z<=1U:Z>=1U;j=-1U<=1U?++Z:--Z){T(k=1N=1U;1U<=-1U?1N<=-1U:1N>=-1U;k=1U<=-1U?++1N:--1N){p=15.7w(j,k);2b[3p*3]=p.r;2b[3p*3+1]=p.g;2b[3p*3+2]=p.b;3p++}}2r=8.6n(J,2b,1P,26);8.33[i]=1a.2j(2r.r);8.33[i+1]=1a.2j(2r.g);8.33[i+2]=1a.2j(2r.b);8.33[i+3]=8.c.M[i+3]}u(B.1S){9 3X["7Z"](1X)}R{9 8.3v(1X)}};1g.H.3v=o(1X){I i,C,F;u(1X>=0){1o.1C("7W #"+1X+" 6f! V: "+8.1u.11)}8.4v++;1O.39(8.c,"3v",{7X:1X,ar:8.4v,7Y:1g.2J});u(8.4v===1g.2J){u(8.1u.14===V.25.6l){T(i=C=0,F=8.c.M.L;0<=F?C<F:C>F;i=0<=F?++C:--C){8.c.M[i]=8.33[i]}}u(1X>=0){1o.1C("V "+8.1u.11+" 6f!")}1O.39(8.c,"6O",8.1u);9 8.2B()}};1g.H.6n=o(J,2b,1P,26){I i,1x,C,F;1x={r:0,g:0,b:0};T(i=C=0,F=J.L;0<=F?C<F:C>F;i=0<=F?++C:--C){1x.r+=J[i]*2b[i*3];1x.g+=J[i]*2b[i*3+1];1x.b+=J[i]*2b[i*3+2]}1x.r=(1x.r/1P)+26;1x.g=(1x.g/1P)+26;1x.b=(1x.b/1P)+26;9 1x};1g.H.7J=o(1w,1c){I 1i,3b,1b=8;1i=1m 2I();1i.6T=o(){1w.19.3P(1i,0,0,1b.c.1E.K,1b.c.1E.P);1w.1H=1w.19.3a(0,0,1b.c.1E.K,1b.c.1E.P);1w.M=1w.1H.1v;1b.c.M=1w.M;9 1b.2B()};3b=1Q.72(1c);9 1i.1c=3b!=G?3b:1c};9 1g})();1g=B.1g;B.21=(o(){o 21(){}21.3o={};21.8z=o(2H){9 8.3o[2H]!=G};21.2t=o(2H){9 8.3o[2H]};21.7f=o(11,1D){9 8.3o[11]=1D};21.2o=o(2H,1j){I 1b=8;59(o(){9 1j.18(1b.2t(2H),1b.2t(2H))},0);9 8.2t(2H)};21.au=o(11){u(11==G){11=1G}u(11){9 87 8.3o[11]}R{9 8.3o={}}};9 21})();21=B.21;1z.17("7g",o(O,N){9{r:O.r,g:O.g,b:O.b}});1z.17("aw",o(O,N){9{r:(O.r*N.r)/D,g:(O.g*N.g)/D,b:(O.b*N.b)/D}});1z.17("ax",o(O,N){9{r:D-(((D-O.r)*(D-N.r))/D),g:D-(((D-O.g)*(D-N.g))/D),b:D-(((D-O.b)*(D-N.b))/D)}});1z.17("ay",o(O,N){I 1d;1d={};1d.r=N.r>1y?D-2*(D-O.r)*(D-N.r)/D:(N.r*O.r*2)/D;1d.g=N.g>1y?D-2*(D-O.g)*(D-N.g)/D:(N.g*O.g*2)/D;1d.b=N.b>1y?D-2*(D-O.b)*(D-N.b)/D:(N.b*O.b*2)/D;9 1d});1z.17("aA",o(O,N){9{r:O.r-N.r,g:O.g-N.g,b:O.b-N.b}});1z.17("aB",o(O,N){9{r:N.r+O.r,g:N.g+O.g,b:N.b+O.b}});1z.17("aC",o(O,N){9{r:1y-2*(N.r-1y)*(O.r-1y)/D,g:1y-2*(N.g-1y)*(O.g-1y)/D,b:1y-2*(N.b-1y)*(O.b-1y)/D}});1z.17("aD",o(O,N){I 1d;1d={};1d.r=N.r>1y?D-((D-N.r)*(D-(O.r-1y)))/D:(N.r*(O.r+1y))/D;1d.g=N.g>1y?D-((D-N.g)*(D-(O.g-1y)))/D:(N.g*(O.g+1y))/D;1d.b=N.b>1y?D-((D-N.b)*(D-(O.b-1y)))/D:(N.b*(O.b+1y))/D;9 1d});1z.17("aE",o(O,N){9{r:N.r>O.r?N.r:O.r,g:N.g>O.g?N.g:O.g,b:N.b>O.b?N.b:O.b}});1z.17("aF",o(O,N){9{r:N.r>O.r?O.r:N.r,g:N.g>O.g?O.g:N.g,b:N.b>O.b?O.b:N.b}});V.17("4W",o(){I 3m;u(X.L===1){3m=1p.5l(X[0])}R{3m={r:X[0],g:X[1],b:X[2]}}9 8.1T("4W",o(A){A.r=3m.r;A.g=3m.g;A.b=3m.b;A.a=D;9 A})});V.17("8a",o(J){J=Q.2E(D*(J/1n));9 8.1T("8a",o(A){A.r+=J;A.g+=J;A.b+=J;9 A})});V.17("8b",o(J){J*=-0.aJ;9 8.1T("8b",o(A){I U;U=Q.U(A.r,A.g,A.b);u(A.r!==U){A.r+=(U-A.r)*J}u(A.g!==U){A.g+=(U-A.g)*J}u(A.b!==U){A.b+=(U-A.b)*J}9 A})});V.17("8c",o(J){J*=-1;9 8.1T("8c",o(A){I 3V,2G,U;U=Q.U(A.r,A.g,A.b);2G=(A.r+A.g+A.b)/3;3V=((Q.2M(U-2G)*2/D)*J)/1n;u(A.r!==U){A.r+=(U-A.r)*3V}u(A.g!==U){A.g+=(U-A.g)*3V}u(A.b!==U){A.b+=(U-A.b)*3V}9 A})});V.17("8g",o(J){9 8.1T("8g",o(A){I 2G;2G=1J.6K(A);A.r=2G;A.g=2G;A.b=2G;9 A})});V.17("8h",o(J){J=Q.1Z((J+1n)/1n,2);9 8.1T("8h",o(A){A.r/=D;A.r-=0.5;A.r*=J;A.r+=0.5;A.r*=D;A.g/=D;A.g-=0.5;A.g*=J;A.g+=0.5;A.g*=D;A.b/=D;A.b-=0.5;A.b*=J;A.b+=0.5;A.b*=D;9 A})});V.17("8i",o(J){9 8.1T("8i",o(A){I b,g,h,34,r,F;34=1p.81(A.r,A.g,A.b);h=34.h*1n;h+=Q.2M(J);h=h%1n;h/=1n;34.h=h;F=1p.83(34.h,34.s,34.v),r=F.r,g=F.g,b=F.b;A.r=r;A.g=g;A.b=b;9 A})});V.17("8k",o(){I 3k,31;u(X.L===2){31=1p.5l(X[0]);3k=X[1]}R u(X.L===4){31={r:X[0],g:X[1],b:X[2]};3k=X[3]}9 8.1T("8k",o(A){A.r-=(A.r-31.r)*(3k/1n);A.g-=(A.g-31.g)*(3k/1n);A.b-=(A.b-31.b)*(3k/1n);9 A})});V.17("8n",o(){9 8.1T("8n",o(A){A.r=D-A.r;A.g=D-A.g;A.b=D-A.b;9 A})});V.17("8o",o(J){u(J==G){J=1n}J/=1n;9 8.1T("8o",o(A){A.r=Q.1h(D,(A.r*(1-(0.aW*J)))+(A.g*(0.aX*J))+(A.b*(0.aY*J)));A.g=Q.1h(D,(A.r*(0.aZ*J))+(A.g*(1-(0.b0*J)))+(A.b*(0.b1*J)));A.b=Q.1h(D,(A.r*(0.b2*J))+(A.g*(0.b3*J))+(A.b*(1-(0.b4*J))));9 A})});V.17("8p",o(J){9 8.1T("8p",o(A){A.r=Q.1Z(A.r/D,J)*D;A.g=Q.1Z(A.g/D,J)*D;A.b=Q.1Z(A.b/D,J)*D;9 A})});V.17("8q",o(J){J=Q.2M(J)*2.55;9 8.1T("8q",o(A){I 2A;2A=1J.6C(J*-1,J);A.r+=2A;A.g+=2A;A.b+=2A;9 A})});V.17("8r",o(J){J=Q.2M(J)*2.55;9 8.1T("8r",o(A){u(A.r>D-J){A.r=D}R u(A.r<J){A.r=0}u(A.g>D-J){A.g=D}R u(A.g<J){A.g=0}u(A.b>D-J){A.b=D}R u(A.b<J){A.b=0}9 A})});V.17("8s",o(1e){I 3j,2y;u(1f 1e!=="2w"){9 8}T(3j 2X 1e){u(!3L.18(1e,3j))42;2y=1e[3j];u(2y===0){87 1e[3j];42}1e[3j]/=1n}u(1e.L===0){9 8}9 8.1T("8s",o(A){u(1e.4E!=G){u(1e.4E>0){A.r+=(D-A.r)*1e.4E}R{A.r-=A.r*Q.2M(1e.4E)}}u(1e.4s!=G){u(1e.4s>0){A.g+=(D-A.g)*1e.4s}R{A.g-=A.g*Q.2M(1e.4s)}}u(1e.4q!=G){u(1e.4q>0){A.b+=(D-A.b)*1e.4q}R{A.b-=A.b*Q.2M(1e.4q)}}9 A})});V.17("4X",o(){I 3Q,1L,2m,2i,1q,i,3i,1k,C,Z,F,2q;2m=X[0],2i=2<=X.L?3x.18(X,1):[];3i=2i[2i.L-1];u(1f 3i==="o"){3Q=3i;2i.4h()}R u(1f 3i==="2S"){3Q=1J[3i];2i.4h()}R{3Q=1J.1L}u(1f 2m==="2S"){2m=2m.bj("")}u(2m[0]==="v"){2m=[\'r\',\'g\',\'b\']}u(2i.L<2){1R"3l 5Q 5P X 2l 4X 47";}1L=3Q(2i,0,D);1k=2i[0];u(1k[0]>0){T(i=C=0,F=1k[0];0<=F?C<F:C>F;i=0<=F?++C:--C){1L[i]=1k[1]}}1q=2i[2i.L-1];u(1q[0]<D){T(i=Z=2q=1q[0];2q<=D?Z<=D:Z>=D;i=2q<=D?++Z:--Z){1L[i]=1q[1]}}9 8.1T("4X",o(A){I 1N,2x;T(i=1N=0,2x=2m.L;0<=2x?1N<2x:1N>2x;i=0<=2x?++1N:--1N){A[2m[i]]=1L[A[2m[i]]]}9 A})});V.17("bk",o(J){I 2Q,2P,p;p=Q.2M(J)/1n;2Q=[0,D*p];2P=[D-(D*p),D];u(J<0){2Q=2Q.8C();2P=2P.8C()}9 8.4X(\'31\',[0,0],2Q,2P,[D,D])});B.1V.17("6w",o(K,P,x,y){I E,1K;u(x==G){x=0}u(y==G){y=0}u(1f 1Y!=="36"&&1Y!==G){E=1m 30(K,P)}R{E=1M.2U(\'E\');1a.40(8.E,E);E.K=K;E.P=P}1K=E.2p(\'2d\');1K.3P(8.E,x,y,K,P,0,0,K,P);8.3U={x:x,y:y};8.84=2c;9 8.57(E)});B.1V.17("4R",o(1F){I E,1K;u(1F==G){1F=G}u(1F===G||((1F.K==G)&&(1F.P==G))){1o.5K("3l 85 an 1E 80 T 4R");9}u(1F.K==G){1F.K=8.E.K*1F.P/8.E.P}R u(1F.P==G){1F.P=8.E.P*1F.K/8.E.K}u(1f 1Y!=="36"&&1Y!==G){E=1m 30(1F.K,1F.P)}R{E=1M.2U(\'E\');1a.40(8.E,E);E.K=1F.K;E.P=1F.P}1K=E.2p(\'2d\');1K.3P(8.E,0,0,8.E.K,8.E.P,0,0,1F.K,1F.P);8.4w=2c;9 8.57(E)});B.V.17("6w",o(){9 8.6k("6w",4c.H.3r.18(X,0))});B.V.17("4R",o(){9 8.6k("4R",4c.H.3r.18(X,0))})}).18(8);',62,707,'||||||||this|return|||||||||||||||function||||||if||||||rgba|Caman|_i|255|canvas|_ref|null|prototype|var|adjust|width|length|pixelData|rgbaParent|rgbaLayer|height|Math|else|image|for|max|Filter|args|arguments|_results|_j||name||_len|type|pixel||register|call|context|Util|_this|src|result|options|typeof|Renderer|min|img|callback|start|loc|new|100|Log|Convert|end|Pixel|endX|case|currentJob|data|layer|val|128|Blender|push|key|debug|obj|dimensions|newDims|false|imageData|controlPoints|Calculate|ctx|bezier|document|_k|Event|divisor|IO|throw|NodeJS|process|builder|Plugin|id|bnum|exports|pow|parentData|Store|Layer|initObj|target|Type|bias||ret|055|levels|kernel|true||hex|prev|Module|caman|cps|clampRGB|newLoc|to|chans|fn|execute|getContext|_ref1|res|ratio|get|apply|plugin|object|_ref2|value|ele|rand|processNext|devicePixelRatio|add|floor|Analyze|avg|search|Image|Blocks|opacity|renderer|abs|pointsPerSegment|mul|ctrl2|ctrl1|from|string|window|createElement|highBound|events|in|CamanParser|values|Canvas|rgb|lowBound|modPixelData|hsv|func|undefined|layerData|originalPixelData|trigger|getImageData|proxyUrl|break|lang|imageHeight|imageWidth|p0|finishInit|last|chan|level|Invalid|color|nodeFileReady|items|builderIndex|fs|slice|CamanJS|Requires|file|blockFinished|1379310345|__slice|cb|child|parent|leftCoord|p1|toString|lerp|clamp|getAttribute|_error|switch|originalWidth|numPixels|__hasProp|preScaledWidth|originalHeight|preScaledHeight|drawImage|algo|scaledCanvas|require|dataArray|cropCoordinates|amt|attr|Fiber|url|opts|copyAttributes|adjustSize|continue|prop|allowRevert|copy|imgs|filter|blockN|http|unparsedInstructions|pixelStack|Array|getFloat|round|imageLoaded|__indexOf|pop|renderQueue|currentLayer|event|err|toLowerCase|pointsPerStep|Root|updateContext|blue|coord|green|dest|pixels|blocksDone|resized|hiDPIRatio|INST_REGEX|buf|initType|startX|startY|parseInt|red|imageUrl|moduleKeywords|includeAlpha|vert|root|sel|hiDPIReplacement|processFn|match|horiz|complete|initialize