adyen-skinbuilder 0.2.6 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/.gitignore +3 -4
  2. data/.travis.yml +5 -0
  3. data/CHANGELOG.md +22 -0
  4. data/Gemfile.lock +51 -7
  5. data/LICENSE +3 -3
  6. data/README.markdown +83 -24
  7. data/Rakefile +6 -0
  8. data/adyen-skinbuilder.gemspec +12 -11
  9. data/bin/adyen-skinbuilder +28 -3
  10. data/lib/adyen-skinbuilder.rb +1 -4
  11. data/lib/adyen-skinbuilder/helper/adyen.rb +29 -0
  12. data/lib/adyen-skinbuilder/helper/render.rb +32 -0
  13. data/lib/adyen-skinbuilder/server.rb +112 -58
  14. data/lib/adyen-skinbuilder/server/views/_adyen_form.html.erb +37 -0
  15. data/{adyen/main_content.html → lib/adyen-skinbuilder/server/views/_adyen_payment_fields.html.erb} +534 -530
  16. data/lib/adyen-skinbuilder/server/views/css/reset.css +306 -0
  17. data/lib/adyen-skinbuilder/server/views/img/icons/error.png +0 -0
  18. data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK1.png +0 -0
  19. data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK10.png +0 -0
  20. data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK2.png +0 -0
  21. data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK3.png +0 -0
  22. data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK4.png +0 -0
  23. data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK5.png +0 -0
  24. data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK6.png +0 -0
  25. data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK7.png +0 -0
  26. data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK8.png +0 -0
  27. data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANK9.png +0 -0
  28. data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANKCANCELLED.png +0 -0
  29. data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANKPENDING.png +0 -0
  30. data/lib/adyen-skinbuilder/server/views/img/pm/TESTBANKREFUSED.png +0 -0
  31. data/lib/adyen-skinbuilder/server/views/img/pm/amex_small.png +0 -0
  32. data/lib/adyen-skinbuilder/server/views/img/pm/card.png +0 -0
  33. data/lib/adyen-skinbuilder/server/views/img/pm/ideal.png +0 -0
  34. data/lib/adyen-skinbuilder/server/views/img/pm/mc_small.png +0 -0
  35. data/lib/adyen-skinbuilder/server/views/img/pm/unknown_small.png +0 -0
  36. data/lib/adyen-skinbuilder/server/views/img/pm/vias_small.png +0 -0
  37. data/lib/adyen-skinbuilder/server/views/img/pm/visa.png +0 -0
  38. data/lib/adyen-skinbuilder/server/views/img/pm/visa_small.png +0 -0
  39. data/lib/adyen-skinbuilder/server/views/index.html.erb +118 -0
  40. data/lib/adyen-skinbuilder/server/views/js/default.js +385 -0
  41. data/lib/adyen-skinbuilder/server/views/layout.html.erb +33 -0
  42. data/lib/adyen-skinbuilder/server/views/skeleton.html +56 -0
  43. data/lib/adyen-skinbuilder/server/views/skin.html.erb +18 -0
  44. data/lib/adyen-skinbuilder/version.rb +1 -1
  45. data/lib/hash.rb +15 -0
  46. data/spec/fixtures/example.zip +0 -0
  47. data/spec/fixtures/skins/DV3tf95f/inc/order_data.txt +1 -0
  48. data/spec/fixtures/skins/JH0815/css/screen.css +262 -0
  49. data/spec/fixtures/skins/JH0815/skin.html.erb +13 -0
  50. data/spec/lib/adyen-skinbuilder/server_spec.rb +166 -38
  51. data/spec/spec_helper.rb +2 -2
  52. metadata +109 -31
  53. data/adyen/skeleton.html +0 -70
  54. data/lib/adyen-skinbuilder/launcher.rb +0 -40
  55. data/lib/adyen-skinbuilder/railtie.rb +0 -9
  56. data/lib/adyen-skinbuilder/tasks/skin.rake +0 -65
@@ -0,0 +1,385 @@
1
+
2
+ function wopen(obj, w, h) {
3
+ if(!w) { w = 800; }
4
+ if(!h) { h = 600; }
5
+ winoptions="height="+h+",width="+w+",,"+
6
+ ",menubar=no,resizable=yes,scrollbars=yes,status=no,titlebar=no,toolbar=no";
7
+ win=window.open("","info",winoptions);
8
+ win.location.href=obj.href;
9
+ if (parseInt(navigator.appVersion) >= 4) { win.window.focus(); }
10
+ return false;
11
+ }
12
+
13
+
14
+ function wclose() {
15
+ var ua = navigator.userAgent.toLowerCase();
16
+ if((/msie/.test(ua)) && !(/opera/.test(ua)) && (/win/.test(ua))) {
17
+ window.opener='X';
18
+ }
19
+ window.close();
20
+ return false;
21
+ }
22
+
23
+
24
+
25
+ function preventEnterSubmit() {
26
+
27
+ var inputs = document.getElementsByTagName('input');
28
+ for (var i=0; i<inputs.length; i++) {
29
+
30
+ if(inputs[i].type != "text" && inputs[i].type != "password") continue;
31
+
32
+ if(inputs[i].onkeypress) continue;
33
+
34
+ inputs[i].onkeypress = function (e) {
35
+ var keycode;
36
+ if (window.event) keycode = window.event.keyCode;
37
+ else if (e) keycode = e.which;
38
+ else return true;
39
+
40
+ if (keycode == 13) {
41
+ return false;
42
+ } else {
43
+ return true;
44
+ }
45
+ }
46
+ }
47
+ }
48
+
49
+
50
+ function addOnLoad(initFunction) {
51
+ if ( typeof window.addEventListener != "undefined" ) {
52
+ window.addEventListener( "load", initFunction, false );
53
+ } else if ( typeof window.attachEvent != "undefined" ) {
54
+ window.attachEvent( "onload", initFunction );
55
+ } else {
56
+ if ( window.onload != null ) {
57
+ var oldOnload = window.onload;
58
+ window.onload = function ( e ) {
59
+ oldOnload( e );
60
+ initFunction();
61
+ };
62
+ } else {
63
+ window.onload = initFunction;
64
+ }
65
+ }
66
+ }
67
+
68
+
69
+
70
+ function prepareForBack() {
71
+ formValidate = function(f,g) {
72
+ return true;
73
+ }
74
+ return true;
75
+ }
76
+
77
+
78
+
79
+
80
+ function formValidate(form, group) {
81
+
82
+ if (!confirmMessage(form)) return false;
83
+
84
+ if(! (notNull(requiredFields) && notNull(requiredFields[group]) && notNull(errorMessages) && notNull(errorMessages[group]) && notNull(form))) return true;
85
+
86
+ var errors = checkRequiredFields(group);
87
+
88
+ if (errors.length == 0) return submitOnlyOnce(form);
89
+
90
+ clearErrors(requiredFields[group]);
91
+ try {
92
+ if (notNull(serverValidationFields)) {
93
+ clearErrors(serverValidationFields);
94
+ }
95
+ } catch (err) {}
96
+ markErrorFields(errors);
97
+ setErrorMessages(errors, group);
98
+ return false;
99
+ }
100
+
101
+ function checkRequiredFields(group) {
102
+
103
+ var errors = new Array();
104
+
105
+ if(! (notNull(requiredFields) && notNull(requiredFields[group]) && notNull(errorMessages) && notNull(errorMessages[group]))) {
106
+ return errors;
107
+ }
108
+
109
+ for(var i = 0; i < requiredFields[group].length; ++i) {
110
+ el = document.getElementById(requiredFields[group][i]);
111
+ if(! validateElement(el)) {
112
+ errors.push(requiredFields[group][i]);
113
+ }
114
+
115
+ if(notNull(validationFunctions) && notNull(validationFunctions[group]) && notNull(validationFunctions[group][requiredFields[group][i]])) {
116
+ if(! validationFunctions[group][requiredFields[group][i]](el)) {
117
+ errors.push(requiredFields[group][i]);
118
+ }
119
+ }
120
+ }
121
+ return errors;
122
+ }
123
+
124
+ function validateElement(el) {
125
+ if (!notNull(el)) return true;
126
+
127
+ if (el.type == "text" || el.type == "hidden" || el.type == "password") {
128
+ if (trim(el.value) == "") {
129
+ return false;
130
+ }
131
+ } else if (el.type == "radio") {
132
+ var itemchecked = false;
133
+ var elems = document.getElementsByTagName("input");
134
+ for(var j = 0; j < elems.length; ++j) {
135
+ if(elems[j].type == "radio" && elems[j].name == el.name) {
136
+ if(elems[j].checked && trim(elems[j].value) != "") {
137
+ itemchecked = true;
138
+ break;
139
+ }
140
+ }
141
+ }
142
+ if(!itemchecked) {
143
+ return false;
144
+ }
145
+ } else if (el.type == "checkbox") {
146
+ var itemchecked = false;
147
+ var elems = document.getElementsByTagName("input");
148
+ for(var j = 0; j < elems.length; ++j) {
149
+ if(elems[j].type == "checkbox" && elems[j].name == el.name) {
150
+ if(elems[j].checked) {
151
+ itemchecked = true;
152
+ break;
153
+ }
154
+ }
155
+ }
156
+ if(!itemchecked) {
157
+ return false;
158
+ }
159
+ } else if (el.type == "textarea") {
160
+ if (trim(el.value) == "") {
161
+ return false;
162
+ }
163
+ } else if (el.type == "select-one") {
164
+ if (el.selectedIndex == 0) {
165
+ return false;
166
+ }
167
+ } else if (el.type=="select-multiple") {
168
+ var optionselected = false;
169
+ for(var j=0;j<el.options.length; ++j) {
170
+ if (el.options[j].selected) {
171
+ optionselected = true;
172
+ break;
173
+ }
174
+ }
175
+ if (!optionselected) {
176
+ return false;
177
+ }
178
+ }
179
+ return true;
180
+ }
181
+
182
+
183
+ function markErrorFields(errors) {
184
+ if(errors.length == 0) return;
185
+ for(var i = 0; i < errors.length; ++i) {
186
+ el = document.getElementById(errors[i]);
187
+ if(! notNull(el)) continue;
188
+ if(el.type == "hidden") continue;
189
+ if (el.parentNode.nodeName == "DIV") {
190
+ el.parentNode.className = "errorDiv";
191
+ }
192
+ el.className = "errorField";
193
+ }
194
+
195
+ }
196
+
197
+ function setOkMessages(messages) {
198
+ if ( notNull(document.getElementById("okFrameMessages"))) {
199
+ var messageHTML = "";
200
+ for(var i = 0; i < messages.length; ++i) {
201
+ messageHTML += messages[i];
202
+ messageHTML += "<br />";
203
+ }
204
+ document.getElementById("okFrameMessages").innerHTML = "<span class='green'>" + messageHTML + "</span>";
205
+ showElement("okFrame");
206
+ showElement("okFrameMessages");
207
+ }
208
+ }
209
+
210
+ function setErrorMessages(errors,group) {
211
+ if ( notNull(document.getElementById("errorFrameValidationErrors"))) {
212
+ var messageHTML = "";
213
+ if(errors.length > 3) {
214
+ messageHTML = errorMessages[group]["generic"];
215
+ } else {
216
+ for(var i = 0; i < errors.length; ++i) {
217
+ messageHTML += errorMessages[group][errors[i]];
218
+ messageHTML += "<br />";
219
+ }
220
+ }
221
+ document.getElementById("errorFrameValidationErrors").innerHTML = "<span class='red'>" + messageHTML + "</span>";
222
+ showElement("errorFrame");
223
+ showElement("errorFrameValidationErrors");
224
+ }
225
+ hideElement("okFrame");
226
+ }
227
+
228
+
229
+ function clearErrors(fields, dontHideErrorFrame) {
230
+ for(var i = 0; i < fields.length; ++i) {
231
+ obj = document.getElementById(fields[i]);
232
+
233
+ if(! notNull(obj)) continue;
234
+
235
+ if (obj.parentNode.nodeName == "DIV") {
236
+ obj.parentNode.className = "fieldDiv";
237
+ }
238
+ obj.className = "inputField";
239
+ }
240
+ if(! dontHideErrorFrame) {
241
+ hideElement("errorFrameValidationErrors");
242
+ if(! notNull(document.getElementById("errorFrameCustomFieldErrors"))) {
243
+ hideElement("errorFrame");
244
+ }
245
+ }
246
+ hideElement("okFrame");
247
+ }
248
+
249
+ function showElement(elId) {
250
+ if (notNull(document.getElementById(elId))) {
251
+ document.getElementById(elId).style.display = 'block';
252
+ }
253
+ return false;
254
+ }
255
+ function hideElement(elId) {
256
+ if (notNull(document.getElementById(elId))) {
257
+ document.getElementById(elId).style.display = 'none';
258
+ }
259
+ return false;
260
+ }
261
+ function toggleElement(elId) {
262
+ if (notNull(document.getElementById(elId))) {
263
+ if(document.getElementById(elId).style.display == 'block') {
264
+ document.getElementById(elId).style.display = 'none';
265
+ } else {
266
+ document.getElementById(elId).style.display = 'block';
267
+ }
268
+ }
269
+ return false;
270
+ }
271
+
272
+ function notNull(objToTest) {
273
+ if (null == objToTest) {
274
+ return false;
275
+ }
276
+ if ("undefined" == typeof(objToTest) ) {
277
+ return false;
278
+ }
279
+ return true;
280
+ }
281
+
282
+
283
+ function trim(s){ return rtrim(ltrim(s)); }
284
+
285
+ function ltrim(s){
286
+ var w = " \n\t\f";
287
+ // remove all beginning white space
288
+ while( w.indexOf(s.charAt(0)) != -1 && s.length != 0 ) s = s.substring(1);
289
+ return s;
290
+ }
291
+
292
+ function rtrim(s){
293
+ var w = " \n\t\f";
294
+ // remove all ending white space
295
+ while( w.indexOf(s.charAt(s.length-1)) != -1 && s.length != 0 ) s = s.substring(0, s.length-1);
296
+ return s;
297
+ }
298
+
299
+ function digitsOnly(s){
300
+ var w = "0123456789";
301
+ var r = "";
302
+ for(var i=0; i<s.length; i++) {
303
+ if(w.indexOf(s.charAt(i)) != -1) {
304
+ r += s.charAt(i);
305
+ }
306
+ }
307
+ return r;
308
+ }
309
+
310
+ function removeLeadingZeros(s) {
311
+ while( s.charAt(0) == "0" && s.length != 0 ) s = s.substring(1);
312
+ return s;
313
+ }
314
+
315
+ function submitOnlyOnce(f) {
316
+
317
+ if(typeof(maySubmitOnlyOnce) == "undefined") {
318
+ return true;
319
+ } else if (maySubmitOnlyOnce == false){
320
+ return true;
321
+ }
322
+
323
+ for (i=1; i<f.elements.length; i++) {
324
+ if (f.elements[i].type == 'submit' || f.elements[i].type == 'button') {
325
+ f.elements[i].disabled = true;
326
+ }
327
+ }
328
+ f.submit();
329
+ submitOnlyOnce = function (f) {
330
+ return false;
331
+ };
332
+ var errors = new Array();
333
+ errors.push("submitonce");
334
+ setErrorMessages(errors,"default");
335
+ hideElement("errorFrameCustomFieldErrors");
336
+
337
+ return false;
338
+ }
339
+
340
+ function confirmMessage(f) {
341
+
342
+ if(typeof(confirmOnSubmit) == "undefined") {
343
+ return true;
344
+ }
345
+ if (confirm(errorMessages["confirm"])) {
346
+ return true;
347
+ }
348
+ return false;
349
+ }
350
+
351
+ // vX library (Ajax, Extend, GetElement, Animation)
352
+ var _=_?_:{}
353
+ _.X=function(u,f,d,x){x=new(window.ActiveXObject?ActiveXObject:XMLHttpRequest)('Microsoft.XMLHTTP');x.open(d?'POST':'GET',u,1);d?x.setRequestHeader('Content-type','application/x-www-form-urlencoded'):0;x.onreadystatechange=function(){x.readyState>3&&f?f(x.responseText,x):0};x.send(d)}
354
+ _.E=function(e,t,f,r){if(e.attachEvent?(r?e.detachEvent('on'+t,e[t+f]):!0):(r?e.removeEventListener(t,f,!1):e.addEventListener(t,f,!1))){e['e'+t+f]=f;e[t+f]=function(){e['e'+t+f](window.event)};e.attachEvent('on'+t,e[t+f])}}
355
+ _.G=function(e){return e.style?e:document.getElementById(e)}
356
+ _.A=function(v,n,c,u,y){if(u===undefined){var u=new Object();u.value=0};u.value?0:u.value=0;return y.value=setInterval(function(){c(u.value/v);++u.value>v?clearInterval(y.value):0},n)}
357
+ _.F=function(d,h,f,i){d=d=='in';_.A(f?f:15,i?i:50,function(a){a=(d?0:1)+(d?1:-1)*a;h.style.opacity=a;h.style.filter='alpha(opacity='+100*a+')'})}
358
+ _.S=function(d,h,f,i,w,t,c){d=d=='in';_.A(f?f:15,i?i:50,function(a){a=(d?0:1)+(d?1:-1)*a;h.style.width=parseInt(a*w)+"px";},c,t);}
359
+ _.Q=function(f){var o=new Object();var r=new Array();
360
+ for(var i=0;i < f.elements.length;i++){
361
+ try {l=f.elements[i];n=l.name;
362
+ if(n=='')continue;
363
+ switch(l.type.split('-')[0]){
364
+ case "select":
365
+ for(var s=0;s < l.options.length;s++){
366
+ if(l.options[s].selected){
367
+ if(typeof(o[n])=='undefined')o[n]=new Array();
368
+ o[n][o[n].length]=encodeURIComponent(l.options[s].value);}}break;
369
+ case "radio":
370
+ if(l.checked){
371
+ if(typeof(o[n])=='undefined')o[n]=new Array();
372
+ o[n][o[n].length]=encodeURIComponent(l.value);}break;
373
+ case "checkbox":
374
+ if(l.checked){
375
+ if(typeof(o[n])=='undefined')o[n] = new Array();
376
+ o[n][o[n].length]=encodeURIComponent(l.value);}break;
377
+ case "submit":
378
+ break;
379
+ default:
380
+ if(typeof(o[n])=='undefined')o[n] = new Array();
381
+ o[n][o[n].length]=encodeURIComponent(l.value);break;
382
+ }
383
+ }catch(e){}
384
+ } for(x in o){r[r.length]=x+'='+o[x].join(',');}return r.join('&');
385
+ }
@@ -0,0 +1,33 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Page Title</title>
5
+
6
+ <link rel="stylesheet" media="screen" type="text/css" href="/hpp/css/reset.css" />
7
+
8
+ <link rel="stylesheet" media="screen" type="text/css" href="/sf/<%= @skin_code %>/css/screen.css" />
9
+ <link rel="stylesheet" media="print" type="text/css" href="/sf/<%= @skin_code %>/css/print.css" />
10
+
11
+ <script type="text/javascript" src="/hpp/js/default.js"></script>
12
+ <script type="text/javascript" src="/sf/<%= @skin_code %>/js/custom.js"></script>
13
+ <!--[if lt IE 7]>
14
+ <link rel="stylesheet" type="text/css" href="/sf/<%= @skin_code %>/css/screen_ie6.css" />
15
+ <![endif]-->
16
+ </head>
17
+ <body>
18
+ <script type="text/javascript">
19
+ //<![CDATA[
20
+ var clientIPAddress = "127.0.0.1";
21
+ var config = new Array();
22
+ config["pmmanimation"] = 0;
23
+ //]]>
24
+ </script>
25
+
26
+ <!-- ### inc/cheader -->
27
+
28
+ <%= yield %>
29
+
30
+ <!-- ### -->
31
+
32
+ </body>
33
+ </html>
@@ -0,0 +1,56 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Page Title</title>
5
+
6
+ <link rel="stylesheet" media="screen" type="text/css" href="/hpp/css/reset.css" />
7
+ <link rel="stylesheet" media="screen" type="text/css" href="/sf/$skinCode/css/screen.css" />
8
+ <link rel="stylesheet" media="print" type="text/css" href="/sf/$skinCode/css/print.css" />
9
+
10
+ <script type="text/javascript" src="/hpp/js/default.js"></script>
11
+ <script type="text/javascript" src="/sf/$skinCode/js/custom.js"></script>
12
+ <!--[if lt IE 7]>
13
+ <link rel="stylesheet" type="text/css" href="/sf/$skinCode/css/screen_ie6.css" />
14
+ <![endif]-->
15
+ </head>
16
+ <body>
17
+ <!-- ### inc/cheader_[locale]5.txt or inc/cheader.txt (fallback) ### -->
18
+ <form id="pageform" action="" method="post" onsubmit="return formValidate(this);">
19
+ <script type="text/javascript">
20
+ //<![CDATA[
21
+ if (notNull(document.getElementById('pageform'))) {
22
+ document.getElementById('pageform').setAttribute("autocomplete","off");
23
+ }
24
+ //]]>
25
+ </script>
26
+ <div id="content">
27
+ <div id="pmcontent">
28
+ <!-- ### inc/pmheader_[locale].txt or in/pmheader.txt (fallback) ### -->
29
+ <div class="padDiv1"></div>
30
+
31
+ <!-- ==================== -->
32
+ <!-- Adyen Main Content -->
33
+ <!-- ==================== -->
34
+
35
+ <div class="padDiv2"></div>
36
+ <!-- ### inc/pmfooter_[locale].txt or inc/pmfooter.txt (fallback) ### -->
37
+ <!-- ### inc/customfields_[locale].txt or inc/customfields.txt (fallback) ### -->
38
+ </div>
39
+ </div>
40
+ <div id="foot">
41
+ <div id="footc">
42
+ <div id="nextstep">
43
+ <div id="nextstepc">Next Step Text</div>
44
+ </div>
45
+ <div id="footerb1div">
46
+ <input onclick="" type="submit" id="mainSubmit" value="continue" class="footerB nextB" />
47
+ </div>
48
+ <div id="footerb2div">
49
+ <input onclick="" type="button" id="mainBack" value="previous" class="footerB backB" />
50
+ </div>
51
+ </div>
52
+ </div>
53
+ </form>
54
+ <!-- ### inc/cfooter_[locale].txt or inc/cfooter.txt (fallback) ### -->
55
+ </body>
56
+ </html>