Fooman_Speedster - Version 1.0.3

Version Notes

updated included validation.js
minor fixes

Download this release

Release Info

Developer Magento Core Team
Extension Fooman_Speedster
Version 1.0.3
Comparing to
See all releases


Code changes from version 1.0.2 to 1.0.3

app/code/community/Fooman/Speedster/Block/Page/Html/Head.php CHANGED
@@ -39,8 +39,8 @@ class Fooman_Speedster_Block_Page_Html_Head extends Mage_Page_Block_Html_Head
39
 
40
  $lines = array();
41
 
42
- $baseJs = Mage::getBaseUrl('js',Mage::app()->getStore()->isCurrentlySecure() ? array('_secure'=>1) : array());
43
- $baseJsFast = Mage::getBaseUrl('web',Mage::app()->getStore()->isCurrentlySecure() ? array('_secure'=>1) : array()).'minify/';
44
  $html = '';
45
  //$html = "<!--".BP."-->\n";
46
  $script = '<script type="text/javascript" src="%s" %s></script>';
39
 
40
  $lines = array();
41
 
42
+ $baseJs = Mage::getBaseUrl('js');
43
+ $baseJsFast = Mage::getBaseUrl('web').'minify/';
44
  $html = '';
45
  //$html = "<!--".BP."-->\n";
46
  $script = '<script type="text/javascript" src="%s" %s></script>';
app/code/community/Fooman/Speedster/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Fooman_Speedster>
5
- <version>1.0.2</version>
6
  <depends>
7
  <Mage_Page />
8
  <Mage_Adminhtml />
2
  <config>
3
  <modules>
4
  <Fooman_Speedster>
5
+ <version>1.0.3</version>
6
  <depends>
7
  <Mage_Page />
8
  <Mage_Adminhtml />
js/prototype/validation-4min.js CHANGED
@@ -68,6 +68,17 @@ Validator.methods = {
68
  }
69
 
70
  var Validation = Class.create();
 
 
 
 
 
 
 
 
 
 
 
71
 
72
  Validation.prototype = {
73
  initialize : function(form, options){
@@ -76,23 +87,32 @@ Validation.prototype = {
76
  return;
77
  }
78
  this.options = Object.extend({
79
- onSubmit : true,
80
- stopOnFirst : false,
81
- immediate : false,
82
- focusOnError : true,
83
- useTitles : false,
84
- onFormValidate : function(result, form) {},
85
- onElementValidate : function(result, elm) {}
86
  }, options || {});
87
  if(this.options.onSubmit) Event.observe(this.form,'submit',this.onSubmit.bind(this),false);
88
  if(this.options.immediate) {
89
- var useTitles = this.options.useTitles;
90
- var callback = this.options.onElementValidate;
91
  Form.getElements(this.form).each(function(input) { // Thanks Mike!
92
- Event.observe(input, 'blur', function(ev) { Validation.validate(Event.element(ev),{useTitle : useTitles, onElementValidate : callback}); });
93
- });
 
 
 
94
  }
95
  },
 
 
 
 
 
 
 
 
96
  onSubmit : function(ev){
97
  if(!this.validate()) Event.stop(ev);
98
  },
@@ -144,8 +164,9 @@ Object.extend(Validation, {
144
  var container = $(elm).up('.field-row');
145
  if(container){
146
  Element.insert(container, {after: advice});
147
- }
148
- else if (elm.advaiceContainer && $(elm.advaiceContainer)) {
 
149
  $(elm.advaiceContainer).update(advice);
150
  }
151
  else {
@@ -211,6 +232,20 @@ Object.extend(Validation, {
211
 
212
  elm.addClassName('validation-failed');
213
  elm.addClassName('validate-ajax');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
214
  },
215
  test : function(name, elm, useTitle) {
216
  var v = Validation.get(name);
@@ -230,6 +265,14 @@ Object.extend(Validation, {
230
  elm.removeClassName('validation-passed');
231
  elm.addClassName('validation-failed');
232
  }
 
 
 
 
 
 
 
 
233
  return false;
234
  } else {
235
  var advice = Validation.getAdvice(name, elm);
@@ -238,6 +281,17 @@ Object.extend(Validation, {
238
  elm[prop] = '';
239
  elm.removeClassName('validation-failed');
240
  elm.addClassName('validation-passed');
 
 
 
 
 
 
 
 
 
 
 
241
  return true;
242
  }
243
  } catch(e) {
@@ -293,11 +347,20 @@ Object.extend(Validation, {
293
  var prop = '__advice'+value.camelize();
294
  if(elm[prop]) {
295
  var advice = Validation.getAdvice(value, elm);
296
- advice.hide();
 
 
297
  elm[prop] = '';
298
  }
299
  elm.removeClassName('validation-failed');
300
  elm.removeClassName('validation-passed');
 
 
 
 
 
 
 
301
  });
302
  },
303
  add : function(className, error, test, options) {
@@ -367,12 +430,30 @@ Validation.addAllThese([
367
  //return Validation.get('IsEmpty').test(v) || /^[\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9][\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9\.]{1,30}[\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9]@([a-z0-9_-]{1,30}\.){1,5}[a-z]{2,4}$/i.test(v)
368
  //return Validation.get('IsEmpty').test(v) || /^[a-z0-9,!\#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})/i.test(v)
369
  }],
 
 
 
370
  ['validate-password', 'Please enter 6 or more characters. Leading or trailing spaces will be ignored.', function(v) {
371
  var pass=v.strip(); /*strip leading and trailing spaces*/
372
  return !(pass.length>0 && pass.length < 6);
373
  }],
 
 
 
 
 
 
 
 
 
 
374
  ['validate-cpassword', 'Please make sure your passwords match.', function(v) {
375
- var pass = $('password') ? $('password') : $$('.validate-password')[0];
 
 
 
 
 
376
  var conf = $('confirmation') ? $('confirmation') : $$('.validate-cpassword')[0];
377
  return (pass.value == conf.value);
378
  }],
@@ -422,12 +503,17 @@ Validation.addAllThese([
422
  });
423
  }],
424
  ['validate-one-required-by-name', 'Please select one of the options.', function (v,elm) {
425
- var inputs = $$('input');
 
426
  var error = 1;
427
- for( i in inputs ) {
428
- if( inputs[i].checked == true && inputs[i].name == elm.name ) {
429
  error = 0;
430
  }
 
 
 
 
431
  }
432
 
433
  if( error == 0 ) {
@@ -508,10 +594,20 @@ Validation.addAllThese([
508
  return false;
509
  }
510
 
 
 
 
 
511
  return true;
512
  }],
513
  ['validate-cc-type-select', 'Card type doesn\'t match credit card number', function(v, elm) {
514
  var ccNumberContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_type')) + '_cc_number');
 
 
 
 
 
 
515
  return Validation.get('validate-cc-type').test(ccNumberContainer.value, ccNumberContainer);
516
  }],
517
  ['validate-cc-exp', 'Incorrect credit card expiration date', function(v, elm) {
@@ -643,4 +739,4 @@ Validation.creditCartTypes = $H({
643
  'DI': [new RegExp('^6011[0-9]{12}$'), new RegExp('^[0-9]{3}$'), true],
644
  'SS': [new RegExp('^((6759[0-9]{12})|(49[013][1356][0-9]{13})|(633[34][0-9]{12})|(633110[0-9]{10})|(564182[0-9]{10}))([0-9]{2,3})?$'), new RegExp('^([0-9]{3}|[0-9]{4})?$'), true],
645
  'OT': [false, new RegExp('^([0-9]{3}|[0-9]{4})?$'), false]
646
- });
68
  }
69
 
70
  var Validation = Class.create();
71
+ Validation.defaultOptions = {
72
+ onSubmit : true,
73
+ stopOnFirst : false,
74
+ immediate : false,
75
+ focusOnError : true,
76
+ useTitles : false,
77
+ addClassNameToContainer: false,
78
+ containerClassName: '.input-box',
79
+ onFormValidate : function(result, form) {},
80
+ onElementValidate : function(result, elm) {}
81
+ };
82
 
83
  Validation.prototype = {
84
  initialize : function(form, options){
87
  return;
88
  }
89
  this.options = Object.extend({
90
+ onSubmit : Validation.defaultOptions.onSubmit,
91
+ stopOnFirst : Validation.defaultOptions.stopOnFirst,
92
+ immediate : Validation.defaultOptions.immediate,
93
+ focusOnError : Validation.defaultOptions.focusOnError,
94
+ useTitles : Validation.defaultOptions.useTitles,
95
+ onFormValidate : Validation.defaultOptions.onFormValidate,
96
+ onElementValidate : Validation.defaultOptions.onElementValidate
97
  }, options || {});
98
  if(this.options.onSubmit) Event.observe(this.form,'submit',this.onSubmit.bind(this),false);
99
  if(this.options.immediate) {
 
 
100
  Form.getElements(this.form).each(function(input) { // Thanks Mike!
101
+ if (input.tagName.toLowerCase() == 'select') {
102
+ Event.observe(input, 'blur', this.onChange.bindAsEventListener(this));
103
+ }
104
+ Event.observe(input, 'change', this.onChange.bindAsEventListener(this));
105
+ }, this);
106
  }
107
  },
108
+ onChange : function (ev) {
109
+ Validation.isOnChange = true;
110
+ Validation.validate(Event.element(ev),{
111
+ useTitle : this.options.useTitles,
112
+ onElementValidate : this.options.onElementValidate
113
+ });
114
+ Validation.isOnChange = false;
115
+ },
116
  onSubmit : function(ev){
117
  if(!this.validate()) Event.stop(ev);
118
  },
164
  var container = $(elm).up('.field-row');
165
  if(container){
166
  Element.insert(container, {after: advice});
167
+ } else if (elm.up('td.value')) {
168
+ elm.up('td.value').insert({bottom: advice});
169
+ } else if (elm.advaiceContainer && $(elm.advaiceContainer)) {
170
  $(elm.advaiceContainer).update(advice);
171
  }
172
  else {
232
 
233
  elm.addClassName('validation-failed');
234
  elm.addClassName('validate-ajax');
235
+ if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
236
+ var container = elm.up(Validation.defaultOptions.containerClassName);
237
+ if (container && this.allowContainerClassName(elm)) {
238
+ container.removeClassName('validation-passed');
239
+ container.addClassName('validation-error');
240
+ }
241
+ }
242
+ },
243
+ allowContainerClassName: function (elm) {
244
+ if (elm.type == 'radio' || elm.type == 'checkbox') {
245
+ return elm.hasClassName('change-container-classname');
246
+ }
247
+
248
+ return true;
249
  },
250
  test : function(name, elm, useTitle) {
251
  var v = Validation.get(name);
265
  elm.removeClassName('validation-passed');
266
  elm.addClassName('validation-failed');
267
  }
268
+
269
+ if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
270
+ var container = elm.up(Validation.defaultOptions.containerClassName);
271
+ if (container && this.allowContainerClassName(elm)) {
272
+ container.removeClassName('validation-passed');
273
+ container.addClassName('validation-error');
274
+ }
275
+ }
276
  return false;
277
  } else {
278
  var advice = Validation.getAdvice(name, elm);
281
  elm[prop] = '';
282
  elm.removeClassName('validation-failed');
283
  elm.addClassName('validation-passed');
284
+ if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
285
+ var container = elm.up(Validation.defaultOptions.containerClassName);
286
+ if (container && !container.down('.validation-failed') && this.allowContainerClassName(elm)) {
287
+ if (!Validation.get('IsEmpty').test(elm.value) || !this.isVisible(elm)) {
288
+ container.addClassName('validation-passed');
289
+ } else {
290
+ container.removeClassName('validation-passed');
291
+ }
292
+ container.removeClassName('validation-error');
293
+ }
294
+ }
295
  return true;
296
  }
297
  } catch(e) {
347
  var prop = '__advice'+value.camelize();
348
  if(elm[prop]) {
349
  var advice = Validation.getAdvice(value, elm);
350
+ if (advice) {
351
+ advice.hide();
352
+ }
353
  elm[prop] = '';
354
  }
355
  elm.removeClassName('validation-failed');
356
  elm.removeClassName('validation-passed');
357
+ if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
358
+ var container = elm.up(Validation.defaultOptions.containerClassName);
359
+ if (container) {
360
+ container.removeClassName('validation-passed');
361
+ container.removeClassName('validation-error');
362
+ }
363
+ }
364
  });
365
  },
366
  add : function(className, error, test, options) {
430
  //return Validation.get('IsEmpty').test(v) || /^[\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9][\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9\.]{1,30}[\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9]@([a-z0-9_-]{1,30}\.){1,5}[a-z]{2,4}$/i.test(v)
431
  //return Validation.get('IsEmpty').test(v) || /^[a-z0-9,!\#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})/i.test(v)
432
  }],
433
+ ['validate-emailSender', 'Please use only letters (a-z or A-Z), numbers (0-9) , underscore(_) or spaces in this field.', function (v) {
434
+ return Validation.get('IsEmpty').test(v) || /^[a-zA-Z0-9_\s]+$/.test(v)
435
+ }],
436
  ['validate-password', 'Please enter 6 or more characters. Leading or trailing spaces will be ignored.', function(v) {
437
  var pass=v.strip(); /*strip leading and trailing spaces*/
438
  return !(pass.length>0 && pass.length < 6);
439
  }],
440
+ ['validate-admin-password', 'Please enter 7 or more characters. Password should contain both numeric and alphabetic characters.', function(v) {
441
+ var pass=v.strip();
442
+ if (0 == pass.length) {
443
+ return true;
444
+ }
445
+ if (!(/[a-z]/i.test(v)) || !(/[0-9]/.test(v))) {
446
+ return false;
447
+ }
448
+ return !(pass.length < 7);
449
+ }],
450
  ['validate-cpassword', 'Please make sure your passwords match.', function(v) {
451
+ if ($('password')) {
452
+ var pass = $('password');
453
+ }
454
+ else {
455
+ var pass = $$('.validate-password').length ? $$('.validate-password')[0] : $$('.validate-admin-password')[0];
456
+ }
457
  var conf = $('confirmation') ? $('confirmation') : $$('.validate-cpassword')[0];
458
  return (pass.value == conf.value);
459
  }],
503
  });
504
  }],
505
  ['validate-one-required-by-name', 'Please select one of the options.', function (v,elm) {
506
+ var inputs = $$('input[name="' + elm.name.replace(/([\\"])/g, '\\$1') + '"]');
507
+
508
  var error = 1;
509
+ for(var i=0;i<inputs.length;i++) {
510
+ if((inputs[i].type == 'checkbox' || inputs[i].type == 'radio') && inputs[i].checked == true) {
511
  error = 0;
512
  }
513
+
514
+ if(Validation.isOnChange && (inputs[i].type == 'checkbox' || inputs[i].type == 'radio')) {
515
+ Validation.reset(inputs[i]);
516
+ }
517
  }
518
 
519
  if( error == 0 ) {
594
  return false;
595
  }
596
 
597
+ if (ccTypeContainer.hasClassName('validation-failed') && Validation.isOnChange) {
598
+ Validation.validate(ccTypeContainer);
599
+ }
600
+
601
  return true;
602
  }],
603
  ['validate-cc-type-select', 'Card type doesn\'t match credit card number', function(v, elm) {
604
  var ccNumberContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_type')) + '_cc_number');
605
+ if (Validation.isOnChange && Validation.get('IsEmpty').test(ccNumberContainer.value)) {
606
+ return true;
607
+ }
608
+ if (Validation.get('validate-cc-type').test(ccNumberContainer.value, ccNumberContainer)) {
609
+ Validation.validate(ccNumberContainer);
610
+ }
611
  return Validation.get('validate-cc-type').test(ccNumberContainer.value, ccNumberContainer);
612
  }],
613
  ['validate-cc-exp', 'Incorrect credit card expiration date', function(v, elm) {
739
  'DI': [new RegExp('^6011[0-9]{12}$'), new RegExp('^[0-9]{3}$'), true],
740
  'SS': [new RegExp('^((6759[0-9]{12})|(49[013][1356][0-9]{13})|(633[34][0-9]{12})|(633110[0-9]{10})|(564182[0-9]{10}))([0-9]{2,3})?$'), new RegExp('^([0-9]{3}|[0-9]{4})?$'), true],
741
  'OT': [false, new RegExp('^([0-9]{3}|[0-9]{4})?$'), false]
742
+ });
lib/minify/lib/Minify/BuildSpeedster.php CHANGED
@@ -10,10 +10,35 @@
10
  require_once 'Build.php';
11
 
12
  class Minify_Build_Speedster extends Minify_Build {
13
- /**
14
- * Get last modified
15
  *
 
16
  *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  * @param null
18
  * @return string
19
  */
10
  require_once 'Build.php';
11
 
12
  class Minify_Build_Speedster extends Minify_Build {
13
+ /**
14
+ * Create a build object
15
  *
16
+ * @param array $sources array of Minify_Source objects and/or file paths
17
  *
18
+ * @return null
19
+ */
20
+ public function __construct($sources,$base)
21
+ {
22
+ $max = 0;
23
+ foreach ((array)$sources as $source) {
24
+ if ($source instanceof Minify_Source) {
25
+ $max = max($max, $source->lastModified);
26
+ } elseif (is_string($source)) {
27
+ if (0 === strpos($source, '//')) {
28
+ $source = $base . substr($source, 1);
29
+ }
30
+ if (is_file($source)) {
31
+
32
+ $max = max($max, filemtime($source));
33
+ }
34
+ }
35
+ }
36
+ $this->lastModified = $max;
37
+ }
38
+
39
+
40
+ /**
41
+ * Get last modified
42
  * @param null
43
  * @return string
44
  */
package.xml CHANGED
@@ -1,23 +1,21 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Fooman_Speedster</name>
4
- <version>1.0.2</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.opensource.org/licenses/osl-3.0.php">OSL v3.0 / BSD see files</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Speed up your store by combining, compressing and caching JS and CSS.</summary>
10
- <description>&lt;p&gt;FOOMAN Speedster 1.0.2&lt;/p&gt;
11
-
12
  &lt;p&gt;Speed up your store by combining, compressing and caching JS and CSS.&lt;/p&gt;
13
-
14
- &lt;p&gt;Please read the installation instructions and latest changes &lt;a href="http://www.magentocommerce.com/extension/457/fooman-speedster"&gt;here.&lt;/a&gt;
15
- &lt;/p&gt;</description>
16
- <notes>reupload of 1.0.1</notes>
17
  <authors><author><name>Kristof Ringleff</name><user>auto-converted</user><email>kristof@fooman.co.nz</email></author></authors>
18
- <date>2009-03-22</date>
19
- <time>10:29:47</time>
20
- <contents><target name="mage"><dir name="app"><dir name="etc"><dir name="modules"><file name="Fooman_Speedster.xml" hash="94d303cd2552119381411068d2e7809b"/></dir></dir></dir><dir name="js"><dir name="prototype"><file name="validation-4min.js" hash="6772623b37ef0a68e845e27004d7e1cb"/></dir></dir><dir name="lib"><dir name="minify"><file name=".htaccess" hash="4d6b8833e4ccae2d2393dfeba369b894"/></dir></dir><dir name="var"><dir name="minifycache"><file name="cache.txt" hash="5709c1d6a6f85fb7b7ea2eef23086b46"/></dir></dir></target><target name="magecommunity"><dir name="Fooman"><dir name="Speedster"><dir name="Block"><dir name="Adminhtml"><dir name="Page"><file name="Head.php" hash="d850197d05af7b972eda1ef6bf3da2ed"/></dir></dir><dir name="Page"><dir name="Html"><file name="Head.php" hash="d3cb5b9869689fd5535511ebbab9efee"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="a64a32de72467805e9d2e45afcb44bdb"/></dir></dir></dir></target><target name="magelib"><dir name="minify"><dir name="lib"><dir name="HTTP"><file name="ConditionalGet.php" hash="2617a41438dff20749abb9be1793b10f"/><file name="Encoder.php" hash="a2f4ae355c06fb6a98d6b4bd82c34e76"/></dir><dir name="Minify"><dir name="Cache"><file name="APC.php" hash="2766ccf5e1e4d6e38d3ec128dbc4bc6f"/><file name="File.php" hash="dd7545011e50c153a11dd100db35315a"/><file name="Memcache.php" hash="fa208d979196d0479e3aacec853502c8"/></dir><dir name="Controller"><file name="Base.php" hash="070ed4d5f471a88f2f45cf2e93ba720a"/><file name="Files.php" hash="f579a28cea39da5c595057e72fc65967"/><file name="Groups.php" hash="79bb7cbd0b598dc35a93b99adfdbfab6"/><file name="MinApp.php" hash="42803a069db0f5892012991af5ec5334"/><file name="Page.php" hash="113e99f1206cfb3c3a64aedef65554d1"/><file name="Version1.php" hash="4369c8793be1d5cf061a99651b16da26"/></dir><dir name="CSS"><file name="Compressor.php" hash="3a3a65aa92f74958f50d9d43f8827f8a"/><file name="UriRewriter.php" hash="da8f5cdad4726e0370bbe5f351ec9d98"/></dir><file name="Build.php" hash="6e329c2acc80b72cfde52be6918940bb"/><file name="BuildSpeedster.php" hash="29409f498535de615ea68679939afc27"/><file name="CommentPreserver.php" hash="86bab05265083b57935503bdd735ce74"/><file name="CSS.php" hash="cdeb49c0f35a6cef166c6cfee7f1dd95"/><file name="HTML.php" hash="e774a70491041048fef690d4b162e0ce"/><file name="ImportProcessor.php" hash="3d1726a5df7eb2edba8cd6da2cb75eec"/><file name="Javascript.php" hash="1baa1a43818fcecb89c2a08b40a544da"/><file name="Lines.php" hash="80b2932320c98d1e84aa7f48fceb35e8"/><file name="Logger.php" hash="b2844a8c35e028b9ee725be05adbcf7e"/><file name="Packer.php" hash="41878d87ec3b3e3bbd1538291edeb7cf"/><file name="Source.php" hash="a8d9fa9f0ab2ba9e9b37209148375924"/><file name="YUICompressor.php" hash="13840856d6340e70e7289035827b8b7d"/></dir><dir name="Solar"><file name="Dir.php" hash="6c88f363f6830ac4dc3917eac3c9d78c"/></dir><file name="FirePHP.php" hash="f619b5a77fee4b21e4397e98d858fbf4"/><file name="JSMin.php" hash="e9fe7911a2787240d3ed6dd2da9bc95b"/><file name="Minify.php" hash="9ee5b8bb23e3d856faec4358aa887e33"/></dir><file name="HISTORY.txt" hash="70c3e25e9331dc17e5d538bfc3dd8fe1"/><file name="LICENSE.txt" hash="911d374696c0a5e9e6e848e7f20d0ee1"/><file name="m.php" hash="49b12c34094a3ba1090f7b42719706e7"/><file name="README.txt" hash="6e961a626ae6814c72fab53bcad4a4a7"/></dir></target></contents>
21
  <compatible/>
22
  <dependencies/>
23
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Fooman_Speedster</name>
4
+ <version>1.0.3</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.opensource.org/licenses/osl-3.0.php">OSL v3.0 / BSD see files</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Speed up your store by combining, compressing and caching JS and CSS.</summary>
10
+ <description>&lt;p&gt;FOOMAN Speedster 1.0.3&lt;/p&gt;
 
11
  &lt;p&gt;Speed up your store by combining, compressing and caching JS and CSS.&lt;/p&gt;
12
+ &lt;p&gt;Please read the installation instructions and latest changes &lt;a href="http://www.magentocommerce.com/extension/457/fooman-speedster"&gt;here.&lt;/a&gt;&lt;/p&gt;</description>
13
+ <notes>updated included validation.js
14
+ minor fixes</notes>
 
15
  <authors><author><name>Kristof Ringleff</name><user>auto-converted</user><email>kristof@fooman.co.nz</email></author></authors>
16
+ <date>2009-06-08</date>
17
+ <time>00:34:33</time>
18
+ <contents><target name="mage"><dir name="app"><dir name="etc"><dir name="modules"><file name="Fooman_Speedster.xml" hash="94d303cd2552119381411068d2e7809b"/></dir></dir></dir><dir name="js"><dir name="prototype"><file name="validation-4min.js" hash="13c749d40036ae055baa6f7825499c1c"/></dir></dir><dir name="lib"><dir name="minify"><file name=".htaccess" hash="4d6b8833e4ccae2d2393dfeba369b894"/></dir></dir><dir name="var"><dir name="minifycache"><file name="cache.txt" hash="5709c1d6a6f85fb7b7ea2eef23086b46"/></dir></dir></target><target name="magecommunity"><dir name="Fooman"><dir name="Speedster"><dir name="Block"><dir name="Adminhtml"><dir name="Page"><file name="Head.php" hash="d850197d05af7b972eda1ef6bf3da2ed"/></dir></dir><dir name="Page"><dir name="Html"><file name="Head.php" hash="b3e32a0793bcf35dfcfd07ad4d618222"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="a5a8c8e6fdd1274e333d2cfb12d43f74"/></dir></dir></dir></target><target name="magelib"><dir name="minify"><dir name="lib"><dir name="HTTP"><file name="ConditionalGet.php" hash="2617a41438dff20749abb9be1793b10f"/><file name="Encoder.php" hash="a2f4ae355c06fb6a98d6b4bd82c34e76"/></dir><dir name="Minify"><dir name="Cache"><file name="APC.php" hash="2766ccf5e1e4d6e38d3ec128dbc4bc6f"/><file name="File.php" hash="dd7545011e50c153a11dd100db35315a"/><file name="Memcache.php" hash="fa208d979196d0479e3aacec853502c8"/></dir><dir name="Controller"><file name="Base.php" hash="070ed4d5f471a88f2f45cf2e93ba720a"/><file name="Files.php" hash="f579a28cea39da5c595057e72fc65967"/><file name="Groups.php" hash="79bb7cbd0b598dc35a93b99adfdbfab6"/><file name="MinApp.php" hash="42803a069db0f5892012991af5ec5334"/><file name="Page.php" hash="113e99f1206cfb3c3a64aedef65554d1"/><file name="Version1.php" hash="4369c8793be1d5cf061a99651b16da26"/></dir><dir name="CSS"><file name="Compressor.php" hash="3a3a65aa92f74958f50d9d43f8827f8a"/><file name="UriRewriter.php" hash="da8f5cdad4726e0370bbe5f351ec9d98"/></dir><file name="Build.php" hash="6e329c2acc80b72cfde52be6918940bb"/><file name="BuildSpeedster.php" hash="b93d3e802e2bf7b31eecf9537d3e92f9"/><file name="CommentPreserver.php" hash="86bab05265083b57935503bdd735ce74"/><file name="CSS.php" hash="cdeb49c0f35a6cef166c6cfee7f1dd95"/><file name="HTML.php" hash="e774a70491041048fef690d4b162e0ce"/><file name="ImportProcessor.php" hash="3d1726a5df7eb2edba8cd6da2cb75eec"/><file name="Javascript.php" hash="1baa1a43818fcecb89c2a08b40a544da"/><file name="Lines.php" hash="80b2932320c98d1e84aa7f48fceb35e8"/><file name="Logger.php" hash="b2844a8c35e028b9ee725be05adbcf7e"/><file name="Packer.php" hash="41878d87ec3b3e3bbd1538291edeb7cf"/><file name="Source.php" hash="a8d9fa9f0ab2ba9e9b37209148375924"/><file name="YUICompressor.php" hash="13840856d6340e70e7289035827b8b7d"/></dir><dir name="Solar"><file name="Dir.php" hash="6c88f363f6830ac4dc3917eac3c9d78c"/></dir><file name="FirePHP.php" hash="f619b5a77fee4b21e4397e98d858fbf4"/><file name="JSMin.php" hash="e9fe7911a2787240d3ed6dd2da9bc95b"/><file name="Minify.php" hash="9ee5b8bb23e3d856faec4358aa887e33"/></dir><file name="HISTORY.txt" hash="70c3e25e9331dc17e5d538bfc3dd8fe1"/><file name="LICENSE.txt" hash="911d374696c0a5e9e6e848e7f20d0ee1"/><file name="m.php" hash="49b12c34094a3ba1090f7b42719706e7"/><file name="README.txt" hash="6e961a626ae6814c72fab53bcad4a4a7"/></dir></target></contents>
19
  <compatible/>
20
  <dependencies/>
21
  </package>