adyen-skinbuilder 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/.travis.yml +2 -1
- data/CHANGELOG.md +6 -1
- data/Gemfile +10 -0
- data/Gemfile.lock +74 -53
- data/{README.markdown → README.md} +1 -18
- data/adyen-skinbuilder.gemspec +1 -5
- data/bin/adyen-skinbuilder +5 -1
- data/lib/adyen-skinbuilder.rb +0 -4
- data/lib/adyen-skinbuilder/helper/render.rb +15 -4
- data/lib/adyen-skinbuilder/server.rb +40 -12
- data/lib/adyen-skinbuilder/server/views/_adyen_form.html.erb +4 -4
- data/lib/adyen-skinbuilder/server/views/_adyen_payment_fields.html.erb +23 -44
- data/lib/adyen-skinbuilder/server/views/layout.html.erb +1 -1
- data/lib/adyen-skinbuilder/version.rb +1 -1
- data/spec/fixtures/skins/test/skin.html.erb +2 -0
- data/spec/fixtures/skins/test/skin.yml +1 -0
- data/spec/lib/adyen-skinbuilder/server_spec.rb +4 -0
- metadata +88 -149
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
OTRmMmE1M2FiZTE2Y2E0NjJjNjhjZjgzZmUwODU3ZmFmNDk1ZTdlMg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MmZhZTIxYWUwMGM2NGVkNDdkZjVmZjlkNzE3ZDRlNTVlZDIxZDQ3Yg==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MmEzMzE4ZDc1M2QzMTk2ODY0NzVlYjgwYThlMGZlN2U5MTc1NjBjMzAzZmQy
|
10
|
+
ZWE3OTFlNzIwMWE4YmU1ZjA2ODkzMTRlOGIyNTg3ZmY0YmY5YzNhMTFhNTZm
|
11
|
+
YWVkZmNiYTE5OTUzNmM5ZjZmMjY1MWZjYmE0NDhhMjE4NjM0ZGQ=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ODIyYmU3YmVjNjAxMWQwNzllYzAwNTEwMzIzZWE4ODIxMGNhM2I4MzkzNDg4
|
14
|
+
M2JhYTNmNmU5YWVkZjM2MTg4OTkzOWQzODI1YjAzMDkyODAwYzNmZjQ1ZDA4
|
15
|
+
NmJiZTkzYWRmNGQ4MWIwNzEwZGE5Mzg0ZjVkZGRjNjRjZTkxYmU=
|
data/.gitignore
CHANGED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -11,7 +11,12 @@
|
|
11
11
|
* auto concatinate multiple .js files
|
12
12
|
* auto concatinate multiple .css files
|
13
13
|
* auto build example PaymentMethod skeleton
|
14
|
-
|
14
|
+
|
15
|
+
## v0.4.2
|
16
|
+
* lastes adyen-admin which fixes upload
|
17
|
+
* compress includes the skincode in filename
|
18
|
+
* pass default_data to skin
|
19
|
+
* support new CSS selectors by @jigfox (https://github.com/priithaamer/adyen-skinbuilder/pull/17)
|
15
20
|
|
16
21
|
## v0.3.1
|
17
22
|
* feature: see remote version
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
adyen-skinbuilder (0.4.
|
4
|
+
adyen-skinbuilder (0.4.2)
|
5
5
|
adyen-admin
|
6
|
+
i18n
|
6
7
|
sinatra
|
7
8
|
sinatra-contrib
|
8
9
|
vegas
|
@@ -10,76 +11,96 @@ PATH
|
|
10
11
|
GEM
|
11
12
|
remote: http://rubygems.org/
|
12
13
|
specs:
|
13
|
-
adyen-admin (0.0.
|
14
|
+
adyen-admin (0.0.18)
|
14
15
|
mechanize
|
15
16
|
rubyzip
|
16
|
-
backports (
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
guard
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
17
|
+
backports (3.3.5)
|
18
|
+
celluloid (0.15.2)
|
19
|
+
timers (~> 1.1.0)
|
20
|
+
coderay (1.1.0)
|
21
|
+
diff-lcs (1.2.5)
|
22
|
+
domain_name (0.5.15)
|
23
|
+
unf (>= 0.0.5, < 1.0.0)
|
24
|
+
ffi (1.9.3)
|
25
|
+
formatador (0.2.4)
|
26
|
+
guard (2.2.4)
|
27
|
+
formatador (>= 0.2.4)
|
28
|
+
listen (~> 2.1)
|
29
|
+
lumberjack (~> 1.0)
|
30
|
+
pry (>= 0.9.12)
|
31
|
+
thor (>= 0.18.1)
|
32
|
+
guard-rspec (4.0.4)
|
33
|
+
guard (>= 2.1.1)
|
34
|
+
rspec (~> 2.14)
|
35
|
+
http-cookie (1.0.2)
|
36
|
+
domain_name (~> 0.5)
|
37
|
+
i18n (0.6.5)
|
38
|
+
listen (2.2.0)
|
39
|
+
celluloid (>= 0.15.2)
|
40
|
+
rb-fsevent (>= 0.9.3)
|
41
|
+
rb-inotify (>= 0.9)
|
42
|
+
lumberjack (1.0.4)
|
43
|
+
mechanize (2.7.3)
|
32
44
|
domain_name (~> 0.5, >= 0.5.1)
|
33
|
-
|
45
|
+
http-cookie (~> 1.0)
|
46
|
+
mime-types (~> 2.0)
|
34
47
|
net-http-digest_auth (~> 1.1, >= 1.1.1)
|
35
48
|
net-http-persistent (~> 2.5, >= 2.5.2)
|
36
49
|
nokogiri (~> 1.4)
|
37
50
|
ntlm-http (~> 0.1, >= 0.1.1)
|
38
|
-
webrobots (
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
51
|
+
webrobots (>= 0.0.9, < 0.2)
|
52
|
+
method_source (0.8.2)
|
53
|
+
mime-types (2.0)
|
54
|
+
mini_portile (0.5.2)
|
55
|
+
multi_json (1.8.2)
|
56
|
+
net-http-digest_auth (1.4)
|
57
|
+
net-http-persistent (2.9)
|
58
|
+
nokogiri (1.6.0)
|
59
|
+
mini_portile (~> 0.5.0)
|
43
60
|
ntlm-http (0.1.1)
|
44
|
-
|
45
|
-
|
61
|
+
pry (0.9.12.3)
|
62
|
+
coderay (~> 1.0)
|
63
|
+
method_source (~> 0.8)
|
64
|
+
slop (~> 3.4)
|
65
|
+
rack (1.5.2)
|
66
|
+
rack-protection (1.5.1)
|
46
67
|
rack
|
47
|
-
rack-test (0.6.
|
68
|
+
rack-test (0.6.2)
|
48
69
|
rack (>= 1.0)
|
49
|
-
rake (
|
50
|
-
rb-
|
51
|
-
|
52
|
-
rb-fsevent (0.9.1)
|
53
|
-
rb-inotify (0.8.8)
|
70
|
+
rake (10.1.0)
|
71
|
+
rb-fsevent (0.9.3)
|
72
|
+
rb-inotify (0.9.2)
|
54
73
|
ffi (>= 0.5.0)
|
55
|
-
rspec (2.
|
56
|
-
rspec-core (~> 2.
|
57
|
-
rspec-expectations (~> 2.
|
58
|
-
rspec-mocks (~> 2.
|
59
|
-
rspec-core (2.
|
60
|
-
rspec-expectations (2.
|
61
|
-
diff-lcs (
|
62
|
-
rspec-mocks (2.
|
63
|
-
rubyzip (
|
64
|
-
sinatra (1.
|
65
|
-
rack (~> 1.
|
66
|
-
rack-protection (~> 1.
|
67
|
-
tilt (~> 1.3, >= 1.3.
|
68
|
-
sinatra-contrib (1.
|
74
|
+
rspec (2.14.1)
|
75
|
+
rspec-core (~> 2.14.0)
|
76
|
+
rspec-expectations (~> 2.14.0)
|
77
|
+
rspec-mocks (~> 2.14.0)
|
78
|
+
rspec-core (2.14.7)
|
79
|
+
rspec-expectations (2.14.4)
|
80
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
81
|
+
rspec-mocks (2.14.4)
|
82
|
+
rubyzip (1.1.0)
|
83
|
+
sinatra (1.4.4)
|
84
|
+
rack (~> 1.4)
|
85
|
+
rack-protection (~> 1.4)
|
86
|
+
tilt (~> 1.3, >= 1.3.4)
|
87
|
+
sinatra-contrib (1.4.1)
|
69
88
|
backports (>= 2.0)
|
70
|
-
|
89
|
+
multi_json
|
71
90
|
rack-protection
|
72
91
|
rack-test
|
73
|
-
sinatra (~> 1.
|
92
|
+
sinatra (~> 1.4.0)
|
74
93
|
tilt (~> 1.3)
|
75
|
-
|
76
|
-
|
77
|
-
|
94
|
+
slop (3.4.7)
|
95
|
+
thor (0.18.1)
|
96
|
+
tilt (1.4.1)
|
97
|
+
timers (1.1.0)
|
98
|
+
unf (0.1.3)
|
78
99
|
unf_ext
|
79
|
-
unf_ext (0.0.
|
100
|
+
unf_ext (0.0.6)
|
80
101
|
vegas (0.1.11)
|
81
102
|
rack (>= 1.0.0)
|
82
|
-
webrobots (0.
|
103
|
+
webrobots (0.1.1)
|
83
104
|
|
84
105
|
PLATFORMS
|
85
106
|
ruby
|
@@ -28,7 +28,7 @@ Usually Adyen requires to split up the skin page in up to four different files.
|
|
28
28
|
A most minimal file would look like:
|
29
29
|
|
30
30
|
```html
|
31
|
-
<h1>
|
31
|
+
<h1>Example skin</h1>
|
32
32
|
|
33
33
|
<% adyen_form_tag do %>
|
34
34
|
<h3>header</h3>
|
@@ -60,23 +60,6 @@ Similar as in rails, Skinbuilder allows to render other files inline, e.g.:
|
|
60
60
|
|
61
61
|
This will load and render `header.html.erb` for your skin root on top of the form.
|
62
62
|
|
63
|
-
#### Base directory
|
64
|
-
|
65
|
-
_Deprecated since Version 0.3_
|
66
|
-
|
67
|
-
Another way is to create a `base` directory to provide fallback files that will be included in all skins without the need to duplicate them. Let's consider this example:
|
68
|
-
|
69
|
-
+- ~/Documents
|
70
|
-
+- base
|
71
|
-
+- inc
|
72
|
-
+- cfooter.txt
|
73
|
-
+- cheader.txt
|
74
|
-
+- DV3tf95f
|
75
|
-
+- inc
|
76
|
-
+- cheader.txt
|
77
|
-
|
78
|
-
File in specific skin directory takes precedence when building skin zip file. In this example, `cheader.txt` will be bundled from skin directory `DV3tf95f/inc` but `cfooter.txt` comes from `base/inc`.
|
79
|
-
|
80
63
|
### Order Data
|
81
64
|
|
82
65
|
Adyen let's you post order data that will be shown in shopping cart view as part of html. You can put `order_data.txt` file into `inc/` folder in the skin directory. This file will be included automatically in the same place, where adyen would put it.
|
data/adyen-skinbuilder.gemspec
CHANGED
@@ -16,11 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
17
|
s.require_paths = ['lib']
|
18
18
|
|
19
|
-
%w(sinatra sinatra-contrib vegas adyen-admin).each do |gem|
|
19
|
+
%w(sinatra sinatra-contrib vegas i18n adyen-admin).each do |gem|
|
20
20
|
s.add_runtime_dependency *gem.split(' ')
|
21
21
|
end
|
22
|
-
|
23
|
-
%w(rake rspec guard-rspec rack-test).each do |gem|
|
24
|
-
s.add_development_dependency *gem.split(' ')
|
25
|
-
end
|
26
22
|
end
|
data/bin/adyen-skinbuilder
CHANGED
@@ -28,4 +28,8 @@ begin
|
|
28
28
|
rescue
|
29
29
|
end
|
30
30
|
|
31
|
-
Vegas::Runner.new(Adyen::SkinBuilder::Server, 'adyen-skinbuilder', opts)
|
31
|
+
Vegas::Runner.new(Adyen::SkinBuilder::Server, 'adyen-skinbuilder', opts) do |runner, opt, app|
|
32
|
+
opt.on('-i PATH', '--i18n PATH', 'Load i18n translations from given directory') do |path|
|
33
|
+
opts[:i18n_path] = path
|
34
|
+
end
|
35
|
+
end
|
data/lib/adyen-skinbuilder.rb
CHANGED
@@ -8,7 +8,7 @@ module Adyen
|
|
8
8
|
@_out_buf || @_buf
|
9
9
|
end
|
10
10
|
|
11
|
-
# capture
|
11
|
+
# capture rendered output to a string
|
12
12
|
def capture
|
13
13
|
pos = buffer.size
|
14
14
|
yield
|
@@ -16,9 +16,19 @@ module Adyen
|
|
16
16
|
end
|
17
17
|
|
18
18
|
# renders a file from the inc folder of the skin
|
19
|
-
def render_file(
|
20
|
-
file =
|
21
|
-
|
19
|
+
def render_file(filename)
|
20
|
+
file = @skin.get_file("inc/#{filename}.txt")
|
21
|
+
localized_file = @skin.get_file("inc/#{filename}_#{@locale}.txt")
|
22
|
+
|
23
|
+
if File.exists?(localized_file)
|
24
|
+
File.read(localized_file)
|
25
|
+
elsif File.exists?(file)
|
26
|
+
File.read(file)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def t(*args)
|
31
|
+
I18n.t(*args)
|
22
32
|
end
|
23
33
|
|
24
34
|
# render an erb partial inline
|
@@ -33,6 +43,7 @@ module Adyen
|
|
33
43
|
end
|
34
44
|
|
35
45
|
private
|
46
|
+
|
36
47
|
def partialize(path)
|
37
48
|
path.to_s.split('/').tap do |path|
|
38
49
|
path[-1] = "_#{path.last}.html.erb"
|
@@ -7,18 +7,25 @@ require 'adyen-skinbuilder/helper/render'
|
|
7
7
|
|
8
8
|
require 'adyen-admin'
|
9
9
|
|
10
|
+
require 'i18n'
|
11
|
+
|
10
12
|
module Adyen
|
11
13
|
module SkinBuilder
|
12
14
|
class Server < Sinatra::Base
|
13
15
|
dir = File.dirname(File.expand_path(__FILE__))
|
14
16
|
|
15
17
|
set :views, "#{dir}/server/views"
|
18
|
+
set :server, 'webrick'
|
16
19
|
|
17
20
|
# method will be overwritten by _vegas_ if skin directory given
|
18
21
|
def self.skins_directory
|
19
22
|
File.expand_path(".")
|
20
23
|
end
|
21
24
|
|
25
|
+
def self.skins_directory=(dir)
|
26
|
+
@@skins_directory = dir
|
27
|
+
end
|
28
|
+
|
22
29
|
def self.adyen_admin_cfg
|
23
30
|
nil
|
24
31
|
end
|
@@ -53,20 +60,36 @@ module Adyen
|
|
53
60
|
end
|
54
61
|
end
|
55
62
|
|
56
|
-
def render_skin(skin)
|
63
|
+
def render_skin(skin, locals = {})
|
57
64
|
erb(skin_erb_file(skin).to_sym, {
|
58
65
|
:views => '/',
|
59
|
-
:layout => File.join(settings.views, "layout.html").to_sym
|
66
|
+
:layout => File.join(settings.views, "layout.html").to_sym,
|
67
|
+
:locals => locals,
|
60
68
|
})
|
61
69
|
end
|
62
70
|
|
63
71
|
helpers Helper::Render, Helper::Adyen
|
64
72
|
|
73
|
+
before do
|
74
|
+
if settings.respond_to?(:i18n_path) && settings.i18n_path
|
75
|
+
@locale = params.fetch('locale', 'en')
|
76
|
+
@locale_suffix = "_#{@locale}"
|
77
|
+
|
78
|
+
I18n.load_path = Dir[File.join(settings.i18n_path, '*yml')]
|
79
|
+
I18n::Backend::Simple.include(I18n::Backend::Fallbacks)
|
80
|
+
I18n.locale = @locale
|
81
|
+
else
|
82
|
+
@locale_suffix = ''
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
65
86
|
get '/sf/:skin_code/*' do |skin_code, path|
|
66
|
-
if
|
67
|
-
|
68
|
-
|
69
|
-
|
87
|
+
if skin = Adyen::Admin::Skin.find(skin_code)
|
88
|
+
if (file = skin.get_file(path)) && File.exists?(file)
|
89
|
+
send_file file
|
90
|
+
elsif (file = File.join(skins_directory, skin.parent_skin, path)) && File.exists?(file)
|
91
|
+
send_file file
|
92
|
+
end
|
70
93
|
end
|
71
94
|
end
|
72
95
|
|
@@ -84,8 +107,7 @@ module Adyen
|
|
84
107
|
|
85
108
|
get '/:skin_code/upload' do |skin_code|
|
86
109
|
if @skin = Adyen::Admin::Skin.find(skin_code)
|
87
|
-
|
88
|
-
@skin.compile(output)
|
110
|
+
@skin.compile(render_skin(@skin))
|
89
111
|
@skin.upload
|
90
112
|
end
|
91
113
|
redirect '/sync'
|
@@ -111,9 +133,15 @@ module Adyen
|
|
111
133
|
|
112
134
|
get '/:skin_code/compile' do |skin_code|
|
113
135
|
if @skin = Adyen::Admin::Skin.find(skin_code)
|
114
|
-
|
115
|
-
@skin.compile(
|
116
|
-
|
136
|
+
@locale_suffix = ''
|
137
|
+
@skin.compile(render_skin(@skin))
|
138
|
+
|
139
|
+
I18n.available_locales.each do |locale|
|
140
|
+
I18n.locale = locale
|
141
|
+
@locale_suffix = "_#{locale}"
|
142
|
+
@skin.compile(render_skin(@skin))
|
143
|
+
end
|
144
|
+
send_file(@skin.compress, :filename => "#{skin_code}.zip")
|
117
145
|
else
|
118
146
|
redirect '/'
|
119
147
|
end
|
@@ -129,7 +157,7 @@ module Adyen
|
|
129
157
|
# skin page
|
130
158
|
get '/:skin_code' do |skin_code|
|
131
159
|
if @skin = Adyen::Admin::Skin.find(skin_code)
|
132
|
-
render_skin @skin
|
160
|
+
render_skin @skin, { :default_data => @skin.default_data }
|
133
161
|
else
|
134
162
|
redirect '/'
|
135
163
|
end
|
@@ -11,7 +11,7 @@
|
|
11
11
|
<div id="content">
|
12
12
|
<div id="pmcontent">
|
13
13
|
|
14
|
-
<!-- ### inc/pmheader -->
|
14
|
+
<!-- ### inc/pmheader<%= @locale_suffix %> -->
|
15
15
|
|
16
16
|
<%= adyen_payment_fields(&block) %>
|
17
17
|
|
@@ -25,8 +25,8 @@
|
|
25
25
|
<div id="nextstepc">Next Step Text</div>
|
26
26
|
</div>
|
27
27
|
<div id="footerb1div">
|
28
|
-
|
29
|
-
|
28
|
+
<input onclick="" type="submit" id="mainSubmit" value="continue" class="footerB nextB" />
|
29
|
+
</div>
|
30
30
|
<div id="footerb2div">
|
31
31
|
<input onclick="" type="button" id="mainBack" value="previous" class="footerB backB" />
|
32
32
|
</div>
|
@@ -34,4 +34,4 @@
|
|
34
34
|
</div>
|
35
35
|
</form>
|
36
36
|
|
37
|
-
<!-- ### inc/cfooter -->
|
37
|
+
<!-- ### inc/cfooter<%= @locale_suffix %> -->
|
@@ -191,7 +191,7 @@
|
|
191
191
|
}
|
192
192
|
|
193
193
|
function validateCcNumber(e, dontHideErrorFrame) {
|
194
|
-
cardNumber = (document.getElementById('cardNumber').value);
|
194
|
+
cardNumber = (document.getElementById('card.cardNumber').value);
|
195
195
|
|
196
196
|
if(cardNumber.length <= previousCardNumber.length) {
|
197
197
|
previousCardNumber = cardNumber;
|
@@ -256,7 +256,7 @@
|
|
256
256
|
result = result.replace(/\s+$/, ''); //remove trailing spaces
|
257
257
|
|
258
258
|
previousCardNumber = result;
|
259
|
-
document.getElementById('cardNumber').value = result;
|
259
|
+
document.getElementById('card.cardNumber').value = result;
|
260
260
|
}
|
261
261
|
|
262
262
|
function setExtraCost(selectedCard, lookedUpCard) {
|
@@ -345,7 +345,7 @@
|
|
345
345
|
|
346
346
|
function ccNumberPresentation(valid, dontHideErrorFrame){
|
347
347
|
var errors = new Array();
|
348
|
-
errors.push("cardNumber");
|
348
|
+
errors.push("card.cardNumber");
|
349
349
|
if(valid){
|
350
350
|
clearErrors(errors, dontHideErrorFrame);
|
351
351
|
}
|
@@ -385,7 +385,7 @@
|
|
385
385
|
|
386
386
|
validationFunctions
|
387
387
|
function doCCCheck(){
|
388
|
-
cardNumber = (document.getElementById('cardNumber').value);
|
388
|
+
cardNumber = (document.getElementById('card.cardNumber').value);
|
389
389
|
reg = /\s+/g;
|
390
390
|
cardNumber = cardNumber.replace(reg,'');
|
391
391
|
if(!luhnCheck(cardNumber))
|
@@ -432,11 +432,11 @@
|
|
432
432
|
</tr>
|
433
433
|
<tr id="cardNumberTr">
|
434
434
|
<td><div>Card number</div></td>
|
435
|
-
<td><div class="fieldDiv"><input type="text" class="inputField" id="cardNumber" onkeypress="return blockNonNumbers(event)" onkeyup="validateCcNumber(event)" onblur="validateCcNumber(event)" onchange="doCCCheck()" name="cardNumber" value="" size="24" maxlength="23" /></div></td>
|
435
|
+
<td><div class="fieldDiv"><input type="text" class="inputField" id="card.cardNumber" onkeypress="return blockNonNumbers(event)" onkeyup="validateCcNumber(event)" onblur="validateCcNumber(event)" onchange="doCCCheck()" name="card.cardNumber" value="" size="24" maxlength="23" /></div></td>
|
436
436
|
</tr>
|
437
437
|
<tr>
|
438
438
|
<td><div>Card holder name</div></td>
|
439
|
-
<td><div class="fieldDiv"><input type="text" class="inputField" id="cardHolderName" name="cardHolderName" value="" size="19" maxlength="30" /></div></td>
|
439
|
+
<td><div class="fieldDiv"><input type="text" class="inputField" id="card.cardHolderName" name="card.cardHolderName" value="" size="19" maxlength="30" /></div></td>
|
440
440
|
</tr>
|
441
441
|
<tr id="cardIssueNumber" style="display: none">
|
442
442
|
<td><div>Issue Number</div></td>
|
@@ -445,7 +445,7 @@
|
|
445
445
|
<tr id="cardStartDate" style="display: none">
|
446
446
|
<td><div>Start Date</div></td>
|
447
447
|
<td><div class="fieldDiv">
|
448
|
-
<select class="inputField" name="startMonth" id="startMonth" size="1">
|
448
|
+
<select class="inputField" name="card.startMonth" id="card.startMonth" size="1">
|
449
449
|
<option value="*"></option>
|
450
450
|
<option value="01">01</option>
|
451
451
|
<option value="02">02</option>
|
@@ -461,26 +461,19 @@
|
|
461
461
|
<option value="12">12</option>
|
462
462
|
</select>
|
463
463
|
/
|
464
|
-
<select class="inputField" name="startYear" id="startYear" size="1">
|
464
|
+
<select class="inputField" name="card.startYear" id="card.startYear" size="1">
|
465
465
|
<option value="*"></option>
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
<option value="2008">2008</option>
|
470
|
-
<option value="2007">2007</option>
|
471
|
-
<option value="2006">2006</option>
|
472
|
-
<option value="2005">2005</option>
|
473
|
-
<option value="2004">2004</option>
|
474
|
-
<option value="2003">2003</option>
|
475
|
-
<option value="2002">2002</option>
|
466
|
+
<% 10.times do |i| %>
|
467
|
+
<option value="<%= year = Date.today.year - i %>"><%= year %></option>
|
468
|
+
<% end %>
|
476
469
|
</select>
|
477
470
|
</div>
|
478
471
|
</td>
|
479
472
|
</tr>
|
480
473
|
<tr>
|
481
474
|
<td><div>Card expiry date</div></td><td>
|
482
|
-
<div class="fieldDiv">
|
483
|
-
<select class="inputField" name="expiryMonth" id="expiryMonth" size="1">
|
475
|
+
<div class="fieldDiv" id="card.expiryContainer">
|
476
|
+
<select class="inputField" name="card.expiryMonth" id="card.expiryMonth" size="1">
|
484
477
|
<option value="*"></option>
|
485
478
|
<option value="01">01</option>
|
486
479
|
<option value="02">02</option>
|
@@ -496,32 +489,18 @@
|
|
496
489
|
<option value="12">12</option>
|
497
490
|
</select>
|
498
491
|
/
|
499
|
-
<select class="inputField" name="expiryYear" id="expiryYear" size="1">
|
492
|
+
<select class="inputField" name="card.expiryYear" id="card.expiryYear" size="1">
|
500
493
|
<option value="*"></option>
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
<option value="2014">2014</option>
|
505
|
-
<option value="2015">2015</option>
|
506
|
-
<option value="2016">2016</option>
|
507
|
-
<option value="2017">2017</option>
|
508
|
-
<option value="2018">2018</option>
|
509
|
-
<option value="2019">2019</option>
|
510
|
-
<option value="2020">2020</option>
|
511
|
-
<option value="2021">2021</option>
|
512
|
-
<option value="2022">2022</option>
|
513
|
-
<option value="2023">2023</option>
|
514
|
-
<option value="2024">2024</option>
|
515
|
-
<option value="2025">2025</option>
|
516
|
-
<option value="2026">2026</option>
|
517
|
-
<option value="2027">2027</option>
|
494
|
+
<% 15.times do |i| %>
|
495
|
+
<option value="<%= year = Date.today.year + i %>"><%= year %></option>
|
496
|
+
<% end %>
|
518
497
|
</select>
|
519
498
|
</div>
|
520
499
|
</td>
|
521
500
|
</tr>
|
522
501
|
<tr>
|
523
502
|
<td><div id="cvcName">CVC/CVV/CID</div></td>
|
524
|
-
<td><div class="fieldDiv"><input class="inputField" type="text" name="cvcCode" value="" id="cvcCode" size="7" maxlength="3" /> <a href="#" onclick="return toggleElement('cvcFrame');"><span id="cvcWhatIs">What is CVC/CVV/CID?</span></a></div></td>
|
503
|
+
<td><div class="fieldDiv"><input class="inputField" type="text" name="card.cvcCode" value="" id="card.cvcCode" size="7" maxlength="3" /> <a href="#" onclick="return toggleElement('cvcFrame');"><span id="cvcWhatIs">What is CVC/CVV/CID?</span></a></div></td>
|
525
504
|
</tr>
|
526
505
|
<tr>
|
527
506
|
<td colspan="2"><div class="r">
|
@@ -545,7 +524,7 @@
|
|
545
524
|
// find out what the CSS implementation calls the tr "display" value
|
546
525
|
var cssTr = document.getElementById('cardNumberTr').style.display;
|
547
526
|
|
548
|
-
if(document.getElementById('cardNumber').value.length > 0) {
|
527
|
+
if(document.getElementById('card.cardNumber').value.length > 0) {
|
549
528
|
var validateCcNumberTimer = setTimeout('validateCcNumber(null,true)', 2500);
|
550
529
|
}
|
551
530
|
|
@@ -713,7 +692,7 @@ errorMessages["card"]["generic"] = "Please enter your card details";
|
|
713
692
|
}
|
714
693
|
|
715
694
|
function validateCcNumber(e, dontHideErrorFrame) {
|
716
|
-
cardNumber = (document.getElementById('cardNumber').value);
|
695
|
+
cardNumber = (document.getElementById('card.cardNumber').value);
|
717
696
|
|
718
697
|
if(cardNumber.length <= previousCardNumber.length) {
|
719
698
|
previousCardNumber = cardNumber;
|
@@ -778,7 +757,7 @@ errorMessages["card"]["generic"] = "Please enter your card details";
|
|
778
757
|
result = result.replace(/\s+$/, ''); //remove trailing spaces
|
779
758
|
|
780
759
|
previousCardNumber = result;
|
781
|
-
document.getElementById('cardNumber').value = result;
|
760
|
+
document.getElementById('card.cardNumber').value = result;
|
782
761
|
}
|
783
762
|
|
784
763
|
function setExtraCost(selectedCard, lookedUpCard) {
|
@@ -892,7 +871,7 @@ errorMessages["card"]["generic"] = "Please enter your card details";
|
|
892
871
|
|
893
872
|
validationFunctions
|
894
873
|
function doCCCheck(){
|
895
|
-
cardNumber = (document.getElementById('cardNumber').value);
|
874
|
+
cardNumber = (document.getElementById('card.cardNumber').value);
|
896
875
|
reg = /\s+/g;
|
897
876
|
cardNumber = cardNumber.replace(reg,'');
|
898
877
|
if(!luhnCheck(cardNumber))
|
@@ -1029,7 +1008,7 @@ errorMessages["card"]["generic"] = "Please enter your card details";
|
|
1029
1008
|
<script type="text/javascript">
|
1030
1009
|
//<![CDATA[
|
1031
1010
|
|
1032
|
-
if(document.getElementById('cardNumber').value.length > 0) {
|
1011
|
+
if(document.getElementById('card.cardNumber').value.length > 0) {
|
1033
1012
|
var validateCcNumberTimer = setTimeout('validateCcNumber(null,true)', 2500);
|
1034
1013
|
}
|
1035
1014
|
|
metadata
CHANGED
@@ -1,155 +1,105 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: adyen-skinbuilder
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 4
|
9
|
-
- 1
|
10
|
-
version: 0.4.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.2
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Priit Haamer
|
14
8
|
- Tobias Bielohlawek
|
15
9
|
autorequire:
|
16
10
|
bindir: bin
|
17
11
|
cert_chain: []
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
dependencies:
|
22
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-11-18 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
23
15
|
name: sinatra
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
hash: 3
|
31
|
-
segments:
|
32
|
-
- 0
|
33
|
-
version: "0"
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ! '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
34
21
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: sinatra-contrib
|
38
22
|
prerelease: false
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ! '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: sinatra-contrib
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ! '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
48
35
|
type: :runtime
|
49
|
-
version_requirements: *id002
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: vegas
|
52
36
|
prerelease: false
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ! '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: vegas
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
62
49
|
type: :runtime
|
63
|
-
version_requirements: *id003
|
64
|
-
- !ruby/object:Gem::Dependency
|
65
|
-
name: adyen-admin
|
66
50
|
prerelease: false
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: i18n
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
76
63
|
type: :runtime
|
77
|
-
version_requirements: *id004
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: rake
|
80
|
-
prerelease: false
|
81
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
|
-
requirements:
|
84
|
-
- - ">="
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
hash: 3
|
87
|
-
segments:
|
88
|
-
- 0
|
89
|
-
version: "0"
|
90
|
-
type: :development
|
91
|
-
version_requirements: *id005
|
92
|
-
- !ruby/object:Gem::Dependency
|
93
|
-
name: rspec
|
94
|
-
prerelease: false
|
95
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
96
|
-
none: false
|
97
|
-
requirements:
|
98
|
-
- - ">="
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
hash: 3
|
101
|
-
segments:
|
102
|
-
- 0
|
103
|
-
version: "0"
|
104
|
-
type: :development
|
105
|
-
version_requirements: *id006
|
106
|
-
- !ruby/object:Gem::Dependency
|
107
|
-
name: guard-rspec
|
108
64
|
prerelease: false
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: adyen-admin
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :runtime
|
122
78
|
prerelease: false
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
version: "0"
|
132
|
-
type: :development
|
133
|
-
version_requirements: *id008
|
134
|
-
description: Provides helpful command line tools to run sinatra server and bundle adyen skin files
|
135
|
-
email:
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ! '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
description: Provides helpful command line tools to run sinatra server and bundle
|
85
|
+
adyen skin files
|
86
|
+
email:
|
136
87
|
- priit@edicy.com
|
137
88
|
- tobi@soundcloud.com
|
138
|
-
executables:
|
89
|
+
executables:
|
139
90
|
- adyen-skinbuilder
|
140
91
|
extensions: []
|
141
|
-
|
142
92
|
extra_rdoc_files: []
|
143
|
-
|
144
|
-
files:
|
93
|
+
files:
|
145
94
|
- .gitignore
|
95
|
+
- .rspec
|
146
96
|
- .travis.yml
|
147
97
|
- CHANGELOG.md
|
148
98
|
- Gemfile
|
149
99
|
- Gemfile.lock
|
150
100
|
- Guardfile
|
151
101
|
- LICENSE
|
152
|
-
- README.
|
102
|
+
- README.md
|
153
103
|
- Rakefile
|
154
104
|
- adyen-skinbuilder.gemspec
|
155
105
|
- bin/adyen-skinbuilder
|
@@ -215,41 +165,30 @@ files:
|
|
215
165
|
- spec/lib/adyen-skinbuilder/helper/render_spec.rb
|
216
166
|
- spec/lib/adyen-skinbuilder/server_spec.rb
|
217
167
|
- spec/spec_helper.rb
|
218
|
-
has_rdoc: true
|
219
168
|
homepage: http://rubygems.org/gems/adyen-skinbuilder
|
220
169
|
licenses: []
|
221
|
-
|
170
|
+
metadata: {}
|
222
171
|
post_install_message:
|
223
172
|
rdoc_options: []
|
224
|
-
|
225
|
-
require_paths:
|
173
|
+
require_paths:
|
226
174
|
- lib
|
227
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
none: false
|
238
|
-
requirements:
|
239
|
-
- - ">="
|
240
|
-
- !ruby/object:Gem::Version
|
241
|
-
hash: 3
|
242
|
-
segments:
|
243
|
-
- 0
|
244
|
-
version: "0"
|
175
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - ! '>='
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '0'
|
180
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
|
+
requirements:
|
182
|
+
- - ! '>='
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: '0'
|
245
185
|
requirements: []
|
246
|
-
|
247
186
|
rubyforge_project:
|
248
|
-
rubygems_version:
|
187
|
+
rubygems_version: 2.0.6
|
249
188
|
signing_key:
|
250
|
-
specification_version:
|
189
|
+
specification_version: 4
|
251
190
|
summary: Simple Sinatra server to make coding Adyen skins easier
|
252
|
-
test_files:
|
191
|
+
test_files:
|
253
192
|
- spec/fixtures/example.zip
|
254
193
|
- spec/fixtures/skins/DV3tf95f/css/screen.css
|
255
194
|
- spec/fixtures/skins/DV3tf95f/inc/order_data.txt
|