adyen-skinbuilder 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +31 -0
- data/Guardfile +5 -0
- data/README.markdown +26 -0
- data/Rakefile +7 -0
- data/TODO.markdown +16 -0
- data/adyen-skinbuilder.gemspec +24 -0
- data/adyen/main_content.html +1 -0
- data/adyen/skeleton.html +60 -0
- data/bin/adyen-skinbuilder +6 -0
- data/lib/adyen-skinbuilder.rb +8 -0
- data/lib/adyen-skinbuilder/launcher.rb +40 -0
- data/lib/adyen-skinbuilder/railtie.rb +9 -0
- data/lib/adyen-skinbuilder/server.rb +65 -0
- data/lib/adyen-skinbuilder/tasks/skin.rake +13 -0
- data/lib/adyen-skinbuilder/version.rb +5 -0
- data/spec/fixtures/skins/DV3tf95f/css/screen.css +262 -0
- data/spec/fixtures/skins/base/css/print.css +7 -0
- data/spec/fixtures/skins/base/css/screen_ie6.css +1 -0
- data/spec/fixtures/skins/base/img/Airliner.airjamaica.a340.arp.750pix.jpg +0 -0
- data/spec/fixtures/skins/base/img/Eurofighter.jpg +0 -0
- data/spec/fixtures/skins/base/img/bg_gr.jpg +0 -0
- data/spec/fixtures/skins/base/img/blog_gr.jpg +0 -0
- data/spec/fixtures/skins/base/img/category.gif +0 -0
- data/spec/fixtures/skins/base/img/mig.jpg +0 -0
- data/spec/fixtures/skins/base/img/top1.jpg +0 -0
- data/spec/fixtures/skins/base/img/top2.jpg +0 -0
- data/spec/fixtures/skins/base/img/top3.jpg +0 -0
- data/spec/fixtures/skins/base/inc/cfooter.txt +15 -0
- data/spec/fixtures/skins/base/inc/cheader.txt +11 -0
- data/spec/fixtures/skins/base/inc/pmfooter.txt +1 -0
- data/spec/fixtures/skins/base/inc/pmheader.txt +4 -0
- data/spec/fixtures/skins/base/res/resources.properties +0 -0
- data/spec/lib/adyen-skinbuilder/server_spec.rb +73 -0
- data/spec/spec_helper.rb +6 -0
- metadata +179 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
adyen-skinbuilder (0.0.1)
|
5
|
+
rack (>= 1.2)
|
6
|
+
slop (>= 1.6.0)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
diff-lcs (1.1.2)
|
12
|
+
rack (1.2.2)
|
13
|
+
rack-test (0.5.7)
|
14
|
+
rack (>= 1.0)
|
15
|
+
rspec (2.5.0)
|
16
|
+
rspec-core (~> 2.5.0)
|
17
|
+
rspec-expectations (~> 2.5.0)
|
18
|
+
rspec-mocks (~> 2.5.0)
|
19
|
+
rspec-core (2.5.1)
|
20
|
+
rspec-expectations (2.5.0)
|
21
|
+
diff-lcs (~> 1.1.2)
|
22
|
+
rspec-mocks (2.5.0)
|
23
|
+
slop (1.6.0)
|
24
|
+
|
25
|
+
PLATFORMS
|
26
|
+
ruby
|
27
|
+
|
28
|
+
DEPENDENCIES
|
29
|
+
adyen-skinbuilder!
|
30
|
+
rack-test
|
31
|
+
rspec
|
data/Guardfile
ADDED
@@ -0,0 +1,5 @@
|
|
1
|
+
guard 'rspec', :version => 2, :cli => "--color", :bundler => true, :all_on_start => false, :all_after_pass => false, :keep_failed => true, :notification => false do
|
2
|
+
watch('spec/spec_helper.rb') { "spec" }
|
3
|
+
watch(%r{^spec/.+_spec\.rb})
|
4
|
+
watch(%r{^lib/(.+)\.rb}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
5
|
+
end
|
data/README.markdown
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
Simple Rack server to make Adyen skin authoring easier. Also includes rake tasks to bundle skin directories into deployable bundles (not yet implemented):
|
2
|
+
|
3
|
+
## Install
|
4
|
+
|
5
|
+
sudo gem install adyen-skinbuilder
|
6
|
+
|
7
|
+
## Usage
|
8
|
+
|
9
|
+
Make sure you have directory with basic Adyen skin structure, that looks something like this:
|
10
|
+
|
11
|
+
+- ~/Documents
|
12
|
+
+- DV3tf95f
|
13
|
+
+- css
|
14
|
+
+- img
|
15
|
+
+- inc
|
16
|
+
+- cfooter.txt
|
17
|
+
+- cheader.txt
|
18
|
+
+- js
|
19
|
+
|
20
|
+
To view something that is very much similar to the end result generated in Adyen, fire up adyen-skinbuilder rack server, that does the template rendering on your local machine:
|
21
|
+
|
22
|
+
adyen-skinbuilder ~/Documents/DV3tf95f
|
23
|
+
|
24
|
+
And go to http://localhost:8888 to see the generated page.
|
25
|
+
|
26
|
+
See `adyen-skinbuilder --help` for options when running this server.
|
data/Rakefile
ADDED
data/TODO.markdown
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
TODO list
|
2
|
+
=========
|
3
|
+
|
4
|
+
TODO
|
5
|
+
----
|
6
|
+
|
7
|
+
### file://lib/adyen-skinbuilder.rb
|
8
|
+
|
9
|
+
* TODO: skin bundle generator (7)
|
10
|
+
* TODO: Init task to build adyen skins directory structure (8)
|
11
|
+
|
12
|
+
### file://lib/adyen-skinbuilder/server.rb
|
13
|
+
|
14
|
+
* TODO: add locale support so files like inc/cheader_[locale].txt will be included correctly (25)
|
15
|
+
* TODO: process Adyen default files at "/hpp" (51)
|
16
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
$:.push File.expand_path('../lib', __FILE__)
|
2
|
+
require 'adyen-skinbuilder/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = 'adyen-skinbuilder'
|
6
|
+
s.version = Adyen::Skinbuilder::VERSION
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.authors = ['Priit Haamer']
|
9
|
+
s.email = ['priit@edicy.com']
|
10
|
+
s.homepage = 'http://rubygems.org/gems/adyen-skinbuilder'
|
11
|
+
s.summary = %q{Simple Rack server to make coding Adyen skins easier}
|
12
|
+
s.description = %q{Provides helpful rake tasks and command line tools to run rack server and bundle adyen skin files}
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ['lib']
|
18
|
+
|
19
|
+
s.add_dependency 'rack', '>= 1.2'
|
20
|
+
s.add_dependency 'slop', '>= 1.6.0'
|
21
|
+
|
22
|
+
s.add_development_dependency 'rspec'
|
23
|
+
s.add_development_dependency 'rack-test'
|
24
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
== adyen main content ==
|
data/adyen/skeleton.html
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
|
+
<head>
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
6
|
+
<title>Page Title</title>
|
7
|
+
|
8
|
+
<link rel="stylesheet" media="screen" type="text/css" href="/hpp/css/reset.css" />
|
9
|
+
<link rel="stylesheet" media="screen" type="text/css" href="/sf/$skinCode/css/screen.css" />
|
10
|
+
<link rel="stylesheet" media="print" type="text/css" href="/sf/$skinCode/css/print.css" />
|
11
|
+
<script type="text/javascript" src="/hpp/js/default.js"></script>
|
12
|
+
|
13
|
+
<script type="text/javascript" src="/sf/$skinCode/js/custom.js"></script>
|
14
|
+
<!--[if lt IE 7]>
|
15
|
+
<link rel="stylesheet" type="text/css" href="/sf/$skinCode/css/screen_ie6.css" />
|
16
|
+
<![endif]-->
|
17
|
+
</head>
|
18
|
+
<body>
|
19
|
+
<!-- ### inc/cheader_[locale].txt or inc/cheader.txt (fallback) ### -->
|
20
|
+
<form id="pageform" action="" method="post" onsubmit="return formValidate(this);">
|
21
|
+
<script type="text/javascript">
|
22
|
+
//<![CDATA[
|
23
|
+
if (notNull(document.getElementById('pageform'))) {
|
24
|
+
document.getElementById('pageform').setAttribute("autocomplete","off");
|
25
|
+
}
|
26
|
+
//]]>
|
27
|
+
</script>
|
28
|
+
<div id="content">
|
29
|
+
|
30
|
+
<div id="pmcontent">
|
31
|
+
<!-- ### inc/pmheader_[locale].txt or inc/pmheader.txt (fallback) ### -->
|
32
|
+
<div class="padDiv1"></div>
|
33
|
+
|
34
|
+
<!-- ==================== -->
|
35
|
+
<!-- Adyen Main Content -->
|
36
|
+
<!-- ==================== -->
|
37
|
+
|
38
|
+
<div class="padDiv2"></div>
|
39
|
+
<!-- ### inc/pmfooter_[locale].txt or inc/pmfooter.txt (fallback) ### -->
|
40
|
+
<!-- ### inc/customfields_[locale].txt or inc/customfields.txt (fallback) ### -->
|
41
|
+
|
42
|
+
</div>
|
43
|
+
</div>
|
44
|
+
<div id="foot">
|
45
|
+
<div id="footc">
|
46
|
+
<div id="nextstep">
|
47
|
+
<div id="nextstepc">Next Step Text</div>
|
48
|
+
</div>
|
49
|
+
<div id="footerb1div">
|
50
|
+
<input onclick="" type="submit" id="mainSubmit" value="continue" class="footerB nextB" />
|
51
|
+
</div>
|
52
|
+
<div id="footerb2div">
|
53
|
+
<input onclick="" type="button" id="mainBack" value="previous" class="footerB backB" />
|
54
|
+
</div>
|
55
|
+
</div>
|
56
|
+
</div>
|
57
|
+
</form>
|
58
|
+
<!-- ### inc/cfooter_[locale].txt or inc/cfooter.txt (fallback) ### -->
|
59
|
+
</body>
|
60
|
+
</html>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require 'adyen-skinbuilder/server'
|
2
|
+
require 'adyen-skinbuilder/version'
|
3
|
+
require 'adyen-skinbuilder/launcher'
|
4
|
+
|
5
|
+
require 'adyen-skinbuilder/railtie' if defined?(::Rails) && ::Rails::VERSION::MAJOR >= 3
|
6
|
+
|
7
|
+
# TODO: skin bundle generator
|
8
|
+
# TODO: Init task to build adyen skins directory structure
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'slop'
|
2
|
+
|
3
|
+
module Adyen
|
4
|
+
module SkinBuilder
|
5
|
+
class Launcher
|
6
|
+
|
7
|
+
def self.ignition(*argv)
|
8
|
+
opts = Slop.parse do
|
9
|
+
banner "\nUsage: adyen-skinbuilder [options] path\n"
|
10
|
+
|
11
|
+
on :P, :port, 'Port, defaults to 8888', true, :default => 8888
|
12
|
+
on :l, :log, 'Show server log'
|
13
|
+
on :V, :version, 'Print the version' do
|
14
|
+
puts "Adyen Skinbuilder version #{Adyen::Skinbuilder::VERSION}"
|
15
|
+
exit
|
16
|
+
end
|
17
|
+
on :h, :help, 'Print this help message' do
|
18
|
+
puts help
|
19
|
+
exit
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# If skins directory is not provided or does not exist
|
24
|
+
if opts.parse.empty? or not File.exists?(File.expand_path(opts.parse.last))
|
25
|
+
puts opts.help
|
26
|
+
exit
|
27
|
+
end
|
28
|
+
|
29
|
+
puts "Using skin directory #{File.expand_path(opts.parse.last)}"
|
30
|
+
puts "Running server at http://localhost:#{opts[:port]}/"
|
31
|
+
|
32
|
+
Adyen::SkinBuilder::Server.run({
|
33
|
+
:port => opts[:port],
|
34
|
+
:log => opts[:log],
|
35
|
+
:skins_directory => File.expand_path(opts.parse.last)
|
36
|
+
})
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'rack'
|
2
|
+
|
3
|
+
module Adyen
|
4
|
+
module SkinBuilder
|
5
|
+
class SkeletonAdapter
|
6
|
+
|
7
|
+
def initialize(skins_directory)
|
8
|
+
@skins_directory = File.dirname(skins_directory)
|
9
|
+
@skin = File.basename(skins_directory)
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(env)
|
13
|
+
body = File.read(File.join(File.dirname(__FILE__), '../../adyen/skeleton.html'))
|
14
|
+
body = body.gsub(/\$skinCode/, @skin)
|
15
|
+
%w(cheader pmheader pmfooter customfields cfooter).each do |inc|
|
16
|
+
body = body.gsub(%r{\<!-- ### inc\/#{inc}_\[locale\].txt or inc\/#{inc}.txt \(fallback\) ### --\>}, get_inc(inc))
|
17
|
+
end
|
18
|
+
body = body.gsub(%r{\<!-- Adyen Main Content --\>}, File.read(File.join(File.dirname(__FILE__), '../../adyen/main_content.html')))
|
19
|
+
|
20
|
+
[200, {'Content-Type' => 'text/html'}, [body]]
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
# TODO: add locale support so files like inc/cheader_[locale].txt will be included correctly
|
26
|
+
def get_inc(filename)
|
27
|
+
if File.exists?(File.join(@skins_directory, @skin, 'inc', "#{filename}.txt"))
|
28
|
+
File.read(File.join(@skins_directory, @skin, 'inc', "#{filename}.txt"))
|
29
|
+
elsif File.exists?(File.join(@skins_directory, 'base', 'inc', "#{filename}.txt"))
|
30
|
+
File.read(File.join(@skins_directory, 'base', 'inc', "#{filename}.txt"))
|
31
|
+
else
|
32
|
+
"<!-- == #{filename}.txt IS MISSING == -->"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class Server
|
38
|
+
|
39
|
+
class << self
|
40
|
+
|
41
|
+
def run(config)
|
42
|
+
handler = Rack::Handler.default
|
43
|
+
handler.run(self.app(config), :Port => config[:port], :AccessLog => [])
|
44
|
+
end
|
45
|
+
|
46
|
+
def app(config = {})
|
47
|
+
Rack::Builder.app do
|
48
|
+
use Rack::CommonLogger if config[:log]
|
49
|
+
use Rack::Head
|
50
|
+
|
51
|
+
# TODO: process Adyen default files at "/hpp"
|
52
|
+
map("/sf/#{File.basename(config[:skins_directory])}") do
|
53
|
+
run Rack::Cascade.new([
|
54
|
+
Rack::File.new(config[:skins_directory]),
|
55
|
+
Rack::File.new(File.join(File.dirname(config[:skins_directory]), 'base'))
|
56
|
+
])
|
57
|
+
end
|
58
|
+
|
59
|
+
map('/') { run Adyen::SkinBuilder::SkeletonAdapter.new(config[:skins_directory]) }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'adyen-skinbuilder'
|
2
|
+
|
3
|
+
namespace :adyen do
|
4
|
+
namespace :skin do
|
5
|
+
|
6
|
+
desc 'Run server to test Adyen skins'
|
7
|
+
task :server do
|
8
|
+
puts "Starting server at http://localhost:8888/"
|
9
|
+
|
10
|
+
Adyen::SkinBuilder::Server.run(:skin => 'lE00qtob')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,262 @@
|
|
1
|
+
html, body {
|
2
|
+
height: 100%;
|
3
|
+
margin: 0;
|
4
|
+
padding: 0;
|
5
|
+
font: 15px/19px verdana, serif;
|
6
|
+
color: #FFF;
|
7
|
+
background: #6A96BB url(../img/bg_gr.jpg) repeat-x top;
|
8
|
+
}
|
9
|
+
|
10
|
+
#content2 h1, #content2 h2, #content2 h3, #content2 h4, #content2 h5 {
|
11
|
+
/* Headers inside the actual content2sbox */
|
12
|
+
margin: 1em 17px 0.5em 10px;
|
13
|
+
text-align: right;
|
14
|
+
font-size: 1.4em;
|
15
|
+
}
|
16
|
+
|
17
|
+
h1, h2, h3, h4 {font-family: "georgia", serif; font-weight: bold;}
|
18
|
+
|
19
|
+
h3 { font-size: 1.2em;}
|
20
|
+
h3 a, h3 a:visited { text-decoration: none; color: #fff;}
|
21
|
+
h3 a:active { color: #f00;}
|
22
|
+
h3 a:hover { color: #fff000;}
|
23
|
+
|
24
|
+
#center {
|
25
|
+
/* Makes the page in center of the viewport */
|
26
|
+
position: relative;
|
27
|
+
width: 792px;
|
28
|
+
height: 100%;
|
29
|
+
margin: 0 auto;
|
30
|
+
background: transparent url(../img/blog_gr.jpg) repeat-y top right;
|
31
|
+
}
|
32
|
+
|
33
|
+
#pageform{
|
34
|
+
height: 20px;
|
35
|
+
|
36
|
+
}
|
37
|
+
|
38
|
+
#archives {
|
39
|
+
position: relative;
|
40
|
+
left: -20px;
|
41
|
+
padding: 0;
|
42
|
+
top: 228px;
|
43
|
+
width: 271px;
|
44
|
+
}
|
45
|
+
|
46
|
+
#archives h3 {
|
47
|
+
/* the clouds graphic is a background of every h3 inside #achives */
|
48
|
+
background: transparent url(../img/category.gif) no-repeat top right;
|
49
|
+
padding: 0 15px;
|
50
|
+
margin: 0;
|
51
|
+
vertical-align: middle;
|
52
|
+
line-height: 30px;
|
53
|
+
height: 38px;
|
54
|
+
text-align: right;
|
55
|
+
|
56
|
+
}
|
57
|
+
|
58
|
+
/* the archives list is a real list, but I don't dots or numbers, and that I change with the following: */
|
59
|
+
|
60
|
+
#archives ul {
|
61
|
+
margin: 0 22px 0 0;
|
62
|
+
padding: 0 0 10px 0;
|
63
|
+
}
|
64
|
+
|
65
|
+
#archives ul li {
|
66
|
+
list-style-type: none;
|
67
|
+
text-align: right;
|
68
|
+
margin: 5px 0;
|
69
|
+
}
|
70
|
+
|
71
|
+
#archives ul li a {
|
72
|
+
text-decoration: none;
|
73
|
+
color: #2F3B55;
|
74
|
+
font-family: "georgia", "palatino linotype", "times new roman", serif;
|
75
|
+
}
|
76
|
+
|
77
|
+
#archives ul li a:hover {color: #fff; text-decoration: underline;}
|
78
|
+
|
79
|
+
|
80
|
+
#content2 {
|
81
|
+
/* the actual content2 of the page */
|
82
|
+
position: absolute;
|
83
|
+
top: 198px;
|
84
|
+
width: 502px;
|
85
|
+
right: 0;
|
86
|
+
padding-right: 10px;
|
87
|
+
padding-left: 28px;
|
88
|
+
background: transparent url(../img/blog_gr.jpg) repeat-y top right;
|
89
|
+
}
|
90
|
+
|
91
|
+
|
92
|
+
#foot {
|
93
|
+
/* height: 60px;
|
94
|
+
background-color: white;
|
95
|
+
*/
|
96
|
+
}
|
97
|
+
|
98
|
+
#content2 p {
|
99
|
+
margin: 15px 17px 15px 0px;
|
100
|
+
text-align: justify;
|
101
|
+
}
|
102
|
+
|
103
|
+
#content2 h2 {
|
104
|
+
color: #C8E5FF;
|
105
|
+
border-top: 1px dotted;
|
106
|
+
padding-top: 12px;
|
107
|
+
margin-left: 0px;
|
108
|
+
}
|
109
|
+
|
110
|
+
|
111
|
+
#home {
|
112
|
+
/* the box in the upper-left corner */
|
113
|
+
position: absolute;
|
114
|
+
top: 15px;
|
115
|
+
left: 80px;
|
116
|
+
width: 200px;
|
117
|
+
text-align: center;
|
118
|
+
z-index: 1;
|
119
|
+
}
|
120
|
+
|
121
|
+
#home * {
|
122
|
+
margin: 0;
|
123
|
+
padding: 3px 0;
|
124
|
+
}
|
125
|
+
|
126
|
+
#top1, #top2, #top3 {
|
127
|
+
display: block;
|
128
|
+
position: absolute;
|
129
|
+
top: 0;
|
130
|
+
background-repeat: no-repeat;
|
131
|
+
background-color: transparent;
|
132
|
+
}
|
133
|
+
|
134
|
+
/* the top-graphic is made with these three elements: */
|
135
|
+
|
136
|
+
#top1 {
|
137
|
+
right: 503px;
|
138
|
+
width: 55px;
|
139
|
+
height: 223px;
|
140
|
+
background-image: url(../img/top1.jpg);
|
141
|
+
}
|
142
|
+
|
143
|
+
#top2 {
|
144
|
+
right: 5px;
|
145
|
+
width: 498px;
|
146
|
+
height: 223px;
|
147
|
+
background-image: url(../img/top2.jpg);
|
148
|
+
}
|
149
|
+
|
150
|
+
#top3 {
|
151
|
+
right: -25px;
|
152
|
+
width: 30px;
|
153
|
+
height: 231px;
|
154
|
+
background-image: url(../img/top3.jpg);
|
155
|
+
}
|
156
|
+
|
157
|
+
pre {font-family: courier, monospace; font-size: 1em; color: black; }
|
158
|
+
table.basetable { margin-left: 5px;}
|
159
|
+
table.basetable td { padding-bottom: 0.6em; padding-right: 0.6em;}
|
160
|
+
table.od { margin: 10px 0px 10px 40px;}
|
161
|
+
table.od td { padding: 5px; border: 1px solid #999;}
|
162
|
+
table.od th { padding: 5px; font-weight: bold; border: 1px solid #999;}
|
163
|
+
.r { text-align: right; }
|
164
|
+
.l { text-align: left; }
|
165
|
+
.fr { float: right; }
|
166
|
+
.fl { float: left; }
|
167
|
+
.b {font-size:1em; font-weight:bold;}
|
168
|
+
|
169
|
+
.imgB {
|
170
|
+
width: 138px;
|
171
|
+
height: 32px;
|
172
|
+
padding: 0;
|
173
|
+
border: 0;
|
174
|
+
background: transparent url(../img/bg_buttons.png) no-repeat left 0px;
|
175
|
+
overflow: hidden;
|
176
|
+
color: white;
|
177
|
+
cursor: pointer; /* hand-shaped cursor */
|
178
|
+
cursor: hand; /* for IE 5.x */
|
179
|
+
font-weight: bold;
|
180
|
+
font-size: 1.2em;
|
181
|
+
}
|
182
|
+
form>.imgB { /* For non-IE browsers*/
|
183
|
+
height: 0px;
|
184
|
+
}
|
185
|
+
|
186
|
+
#footerb1div {
|
187
|
+
float: right;
|
188
|
+
}
|
189
|
+
#footerb2div {
|
190
|
+
float: right;
|
191
|
+
}
|
192
|
+
|
193
|
+
.pmB {
|
194
|
+
width: 238px;
|
195
|
+
height: 42px;
|
196
|
+
padding-left: 85px;
|
197
|
+
text-align: left;
|
198
|
+
margin-bottom: 6px;
|
199
|
+
font-size: 1.1em;
|
200
|
+
}
|
201
|
+
|
202
|
+
.footerB {
|
203
|
+
border: 2px outset black;
|
204
|
+
background-color: #ccc;
|
205
|
+
margin: 6px 10px 0 0;
|
206
|
+
}
|
207
|
+
.footerB:active {
|
208
|
+
border: 2px inset black;
|
209
|
+
}
|
210
|
+
|
211
|
+
#nextstep {display: none;}
|
212
|
+
|
213
|
+
.red {color:#c00;}
|
214
|
+
.popupMsg { display: none; border: 1px solid #666; color: black; background-color: #eee; margin-bottom:5px; padding: 6px;}
|
215
|
+
|
216
|
+
input, select
|
217
|
+
{
|
218
|
+
font-size: 0.95em;
|
219
|
+
padding: 1px;
|
220
|
+
border: 1px solid #C3C3C3;
|
221
|
+
border-top-color: #7C7C7C;
|
222
|
+
border-bottom-color: #DDD;
|
223
|
+
background: white url(../img/input_bg.png) 0 0 repeat-x;
|
224
|
+
}
|
225
|
+
|
226
|
+
input[type=text]:focus, input[type=password]:focus, select:focus {
|
227
|
+
background-color: #E7F1F8 !important;
|
228
|
+
}
|
229
|
+
|
230
|
+
select {
|
231
|
+
font-weight: bold;
|
232
|
+
}
|
233
|
+
|
234
|
+
|
235
|
+
select {
|
236
|
+
font-size: 0.9em;
|
237
|
+
}
|
238
|
+
|
239
|
+
table.basetable .inputField {
|
240
|
+
padding: 1px 2px 2px 2px;
|
241
|
+
background-color: white;
|
242
|
+
}
|
243
|
+
|
244
|
+
|
245
|
+
table.basetable .errorField {
|
246
|
+
border: 2px solid #f33;
|
247
|
+
background-color: #fff3f3;
|
248
|
+
padding: 1px 1px 1px 1px;
|
249
|
+
}
|
250
|
+
|
251
|
+
.fieldDiv {
|
252
|
+
padding-right: 20px;
|
253
|
+
background: transparent;
|
254
|
+
}
|
255
|
+
.errorDiv {
|
256
|
+
background: transparent url(/hpp/img/icons/error.png) no-repeat right 3px;
|
257
|
+
padding-right: 20px;
|
258
|
+
}
|
259
|
+
.errorFrame {
|
260
|
+
background-color: #fff3f3;
|
261
|
+
}
|
262
|
+
|
@@ -0,0 +1,7 @@
|
|
1
|
+
html {background:#fff; font-size:10pt; font-family: arial, sans-serif;}
|
2
|
+
#content {position:relative; z-index:3; word-wrap:break-word;}
|
3
|
+
#head {display:none;}
|
4
|
+
#printhead {height:100px; background:#fff; font-size:24pt; color:#000; border-bottom:1px solid #000;}
|
5
|
+
#printfoot {height:50px; background:#fff; color:#000; text-align:right; font-size:12pt; border-top:1px solid #000; margin-top:20px;}
|
6
|
+
#foot {display:none;}
|
7
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
#topbar1 { background-position: left top }
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,15 @@
|
|
1
|
+
</div>
|
2
|
+
<div id="archives">
|
3
|
+
<h3>Home</h3>
|
4
|
+
<h3>Book online</h3>
|
5
|
+
<h3>Flight Info</h3>
|
6
|
+
<h3>Service</h3>
|
7
|
+
<h3>Offers</h3>
|
8
|
+
<h3>Hotel</h3>
|
9
|
+
<h3>Car Rental</h3>
|
10
|
+
|
11
|
+
</div>
|
12
|
+
<div id="top1"></div>
|
13
|
+
<div id="top2"></div>
|
14
|
+
<div id="top3"></div>
|
15
|
+
</div>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<div id="center">
|
2
|
+
<div id="home"> <!-- the box in the upper-left corner -->
|
3
|
+
|
4
|
+
<h1>paxjet</h1>
|
5
|
+
|
6
|
+
<h4>low cost, sky high</h4>
|
7
|
+
<p><img src="/sf/DV3tf95f/img/Airliner.airjamaica.a340.arp.750pix.jpg" alt="" height='100' width='120'/></p>
|
8
|
+
<p></p>
|
9
|
+
|
10
|
+
</div>
|
11
|
+
<div id="content2">
|
@@ -0,0 +1 @@
|
|
1
|
+
|
File without changes
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
require 'rack/test'
|
3
|
+
|
4
|
+
describe 'SkinBuilder server' do
|
5
|
+
|
6
|
+
include Rack::Test::Methods
|
7
|
+
|
8
|
+
def app
|
9
|
+
Adyen::SkinBuilder::Server.app(
|
10
|
+
:skins_directory => File.expand_path(File.join(File.dirname(__FILE__), '../../fixtures/skins/DV3tf95f'))
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe 'get asset from skin directory' do
|
15
|
+
before(:each) do
|
16
|
+
get '/sf/DV3tf95f/css/screen.css'
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'responds with 200 status' do
|
20
|
+
last_response.status.should == 200
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'responds with "text/css" content type header for CSS file' do
|
24
|
+
last_response.headers.fetch('Content-Type').should == 'text/css'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe 'get asset from skins base directory' do
|
29
|
+
before(:each) do
|
30
|
+
get '/sf/DV3tf95f/css/print.css'
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'responds with 200 status' do
|
34
|
+
last_response.status.should == 200
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'responds with "text/css" content type header for CSS file' do
|
38
|
+
last_response.headers.fetch('Content-Type').should == 'text/css'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe 'GET /' do
|
43
|
+
before(:each) do
|
44
|
+
get '/'
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'responds with 200 status' do
|
48
|
+
last_response.status.should == 200
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'returns adyen skeleton in HTML format' do
|
52
|
+
last_response.headers.fetch('Content-Type').should == 'text/html'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe 'HEAD /' do
|
57
|
+
before(:each) do
|
58
|
+
head '/'
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'responds withr 200 status' do
|
62
|
+
last_response.status.should == 200
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'returns content type header' do
|
66
|
+
last_response.headers.should == { 'Content-Type' => 'text/html' }
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'returns empty body' do
|
70
|
+
last_response.body.should == ''
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: adyen-skinbuilder
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Priit Haamer
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-05-19 00:00:00 +03:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rack
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 11
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 2
|
33
|
+
version: "1.2"
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: slop
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 15
|
45
|
+
segments:
|
46
|
+
- 1
|
47
|
+
- 6
|
48
|
+
- 0
|
49
|
+
version: 1.6.0
|
50
|
+
type: :runtime
|
51
|
+
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: rspec
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 3
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
version: "0"
|
64
|
+
type: :development
|
65
|
+
version_requirements: *id003
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
name: rack-test
|
68
|
+
prerelease: false
|
69
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
hash: 3
|
75
|
+
segments:
|
76
|
+
- 0
|
77
|
+
version: "0"
|
78
|
+
type: :development
|
79
|
+
version_requirements: *id004
|
80
|
+
description: Provides helpful rake tasks and command line tools to run rack server and bundle adyen skin files
|
81
|
+
email:
|
82
|
+
- priit@edicy.com
|
83
|
+
executables:
|
84
|
+
- adyen-skinbuilder
|
85
|
+
extensions: []
|
86
|
+
|
87
|
+
extra_rdoc_files: []
|
88
|
+
|
89
|
+
files:
|
90
|
+
- .gitignore
|
91
|
+
- Gemfile
|
92
|
+
- Gemfile.lock
|
93
|
+
- Guardfile
|
94
|
+
- README.markdown
|
95
|
+
- Rakefile
|
96
|
+
- TODO.markdown
|
97
|
+
- adyen-skinbuilder.gemspec
|
98
|
+
- adyen/main_content.html
|
99
|
+
- adyen/skeleton.html
|
100
|
+
- bin/adyen-skinbuilder
|
101
|
+
- lib/adyen-skinbuilder.rb
|
102
|
+
- lib/adyen-skinbuilder/launcher.rb
|
103
|
+
- lib/adyen-skinbuilder/railtie.rb
|
104
|
+
- lib/adyen-skinbuilder/server.rb
|
105
|
+
- lib/adyen-skinbuilder/tasks/skin.rake
|
106
|
+
- lib/adyen-skinbuilder/version.rb
|
107
|
+
- spec/fixtures/skins/DV3tf95f/css/screen.css
|
108
|
+
- spec/fixtures/skins/base/css/print.css
|
109
|
+
- spec/fixtures/skins/base/css/screen_ie6.css
|
110
|
+
- spec/fixtures/skins/base/img/Airliner.airjamaica.a340.arp.750pix.jpg
|
111
|
+
- spec/fixtures/skins/base/img/Eurofighter.jpg
|
112
|
+
- spec/fixtures/skins/base/img/bg_gr.jpg
|
113
|
+
- spec/fixtures/skins/base/img/blog_gr.jpg
|
114
|
+
- spec/fixtures/skins/base/img/category.gif
|
115
|
+
- spec/fixtures/skins/base/img/mig.jpg
|
116
|
+
- spec/fixtures/skins/base/img/top1.jpg
|
117
|
+
- spec/fixtures/skins/base/img/top2.jpg
|
118
|
+
- spec/fixtures/skins/base/img/top3.jpg
|
119
|
+
- spec/fixtures/skins/base/inc/cfooter.txt
|
120
|
+
- spec/fixtures/skins/base/inc/cheader.txt
|
121
|
+
- spec/fixtures/skins/base/inc/pmfooter.txt
|
122
|
+
- spec/fixtures/skins/base/inc/pmheader.txt
|
123
|
+
- spec/fixtures/skins/base/res/resources.properties
|
124
|
+
- spec/lib/adyen-skinbuilder/server_spec.rb
|
125
|
+
- spec/spec_helper.rb
|
126
|
+
has_rdoc: true
|
127
|
+
homepage: http://rubygems.org/gems/adyen-skinbuilder
|
128
|
+
licenses: []
|
129
|
+
|
130
|
+
post_install_message:
|
131
|
+
rdoc_options: []
|
132
|
+
|
133
|
+
require_paths:
|
134
|
+
- lib
|
135
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
+
none: false
|
137
|
+
requirements:
|
138
|
+
- - ">="
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
hash: 3
|
141
|
+
segments:
|
142
|
+
- 0
|
143
|
+
version: "0"
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
hash: 3
|
150
|
+
segments:
|
151
|
+
- 0
|
152
|
+
version: "0"
|
153
|
+
requirements: []
|
154
|
+
|
155
|
+
rubyforge_project:
|
156
|
+
rubygems_version: 1.4.2
|
157
|
+
signing_key:
|
158
|
+
specification_version: 3
|
159
|
+
summary: Simple Rack server to make coding Adyen skins easier
|
160
|
+
test_files:
|
161
|
+
- spec/fixtures/skins/DV3tf95f/css/screen.css
|
162
|
+
- spec/fixtures/skins/base/css/print.css
|
163
|
+
- spec/fixtures/skins/base/css/screen_ie6.css
|
164
|
+
- spec/fixtures/skins/base/img/Airliner.airjamaica.a340.arp.750pix.jpg
|
165
|
+
- spec/fixtures/skins/base/img/Eurofighter.jpg
|
166
|
+
- spec/fixtures/skins/base/img/bg_gr.jpg
|
167
|
+
- spec/fixtures/skins/base/img/blog_gr.jpg
|
168
|
+
- spec/fixtures/skins/base/img/category.gif
|
169
|
+
- spec/fixtures/skins/base/img/mig.jpg
|
170
|
+
- spec/fixtures/skins/base/img/top1.jpg
|
171
|
+
- spec/fixtures/skins/base/img/top2.jpg
|
172
|
+
- spec/fixtures/skins/base/img/top3.jpg
|
173
|
+
- spec/fixtures/skins/base/inc/cfooter.txt
|
174
|
+
- spec/fixtures/skins/base/inc/cheader.txt
|
175
|
+
- spec/fixtures/skins/base/inc/pmfooter.txt
|
176
|
+
- spec/fixtures/skins/base/inc/pmheader.txt
|
177
|
+
- spec/fixtures/skins/base/res/resources.properties
|
178
|
+
- spec/lib/adyen-skinbuilder/server_spec.rb
|
179
|
+
- spec/spec_helper.rb
|