ymdp 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +17 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/lib/application_view/application_view.rb +210 -0
- data/lib/application_view/asset_tag_helper.rb +106 -0
- data/lib/application_view/commands/generate.rb +3 -0
- data/lib/application_view/compiler/template_compiler.rb +417 -0
- data/lib/application_view/config.rb +39 -0
- data/lib/application_view/environment.rb +29 -0
- data/lib/application_view/generator/base.rb +15 -0
- data/lib/application_view/generator/templates/javascript.js +51 -0
- data/lib/application_view/generator/templates/stylesheet.css +5 -0
- data/lib/application_view/generator/templates/translation.pres +8 -0
- data/lib/application_view/generator/templates/view.html.haml +8 -0
- data/lib/application_view/generator/view.rb +170 -0
- data/lib/application_view/helpers.rb +4 -0
- data/lib/application_view/processor/compressor.rb +81 -0
- data/lib/application_view/processor/processor.rb +132 -0
- data/lib/application_view/processor/validator.rb +125 -0
- data/lib/application_view/support/file.rb +54 -0
- data/lib/application_view/support/form_post.rb +58 -0
- data/lib/application_view/support/g.rb +11 -0
- data/lib/application_view/support/growl.rb +36 -0
- data/lib/application_view/support/timer.rb +40 -0
- data/lib/application_view/support/w3c.rb +22 -0
- data/lib/application_view/tag_helper.rb +147 -0
- data/lib/application_view/translator/base.rb +387 -0
- data/lib/application_view/translator/blank.rb +58 -0
- data/lib/application_view/translator/ymdp_translate.rb +92 -0
- data/lib/ymdp.rb +1 -0
- data/test/helper.rb +10 -0
- data/test/test_ymdp.rb +4 -0
- data/ymdp.gemspec +77 -0
- metadata +92 -0
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'erb'
|
3
|
+
require 'net/http'
|
4
|
+
require 'optparse'
|
5
|
+
|
6
|
+
require 'vendor/gems/environment'
|
7
|
+
Bundler.require_env
|
8
|
+
|
9
|
+
require 'constants'
|
10
|
+
|
11
|
+
# load application
|
12
|
+
#
|
13
|
+
Dir["#{APPLICATION_PATH}/*.rb"].each do |path|
|
14
|
+
require path
|
15
|
+
end
|
16
|
+
|
17
|
+
# load support
|
18
|
+
#
|
19
|
+
Dir["#{APPLICATION_PATH}/support/*.rb"].each do |path|
|
20
|
+
require path
|
21
|
+
end
|
22
|
+
|
23
|
+
# load everything in the lib directory
|
24
|
+
#
|
25
|
+
Dir["#{BASE_PATH}/lib/**/*.rb"].each do |path|
|
26
|
+
require path unless path == File.expand_path(__FILE__)
|
27
|
+
end
|
28
|
+
|
29
|
+
require "#{APPLICATION_PATH}/support/file"
|
@@ -0,0 +1,51 @@
|
|
1
|
+
/*
|
2
|
+
INIT
|
3
|
+
|
4
|
+
local to each view. Launched automatically when the window is loaded.
|
5
|
+
*/
|
6
|
+
|
7
|
+
// Adds behaviors/observers to elements on the page
|
8
|
+
//
|
9
|
+
// YAHOO.init.addBehaviors = function() {
|
10
|
+
// // overwrite this function locally
|
11
|
+
// };
|
12
|
+
|
13
|
+
// To be run before any other initializers have run.
|
14
|
+
//
|
15
|
+
// YAHOO.init.before = function() {
|
16
|
+
// // overwrite this function locally
|
17
|
+
// };
|
18
|
+
|
19
|
+
// A/B testing hook. Runs before the page content is shown.
|
20
|
+
//
|
21
|
+
// A/B testing is disabled by default.
|
22
|
+
//
|
23
|
+
// YAHOO.init.abTesting = function() {
|
24
|
+
// // to enable A/B testing in your view, overwrite this file locally.
|
25
|
+
// //
|
26
|
+
// // be sure to finish your post-Ajax callback with YAHOO.init.show()
|
27
|
+
// //
|
28
|
+
// YAHOO.init.show();
|
29
|
+
// };
|
30
|
+
|
31
|
+
// Post-initalizer. Runs after startup.
|
32
|
+
//
|
33
|
+
// YAHOO.init.after = function() {
|
34
|
+
// // overwrite this function locally
|
35
|
+
// };
|
36
|
+
|
37
|
+
YAHOO.init.local = function() {
|
38
|
+
// put whatever you need in here
|
39
|
+
// make sure your final callback is the following:
|
40
|
+
//
|
41
|
+
YAHOO.init.finish();
|
42
|
+
};
|
43
|
+
|
44
|
+
I18n.localTranslations = function() {
|
45
|
+
// add local translation functions here
|
46
|
+
};
|
47
|
+
|
48
|
+
// hide the loading screen and show the main body of the summary
|
49
|
+
// YAHOO.init.show = function() {
|
50
|
+
// overwrite this function only if necessary
|
51
|
+
// };
|
@@ -0,0 +1,170 @@
|
|
1
|
+
require 'support/file'
|
2
|
+
require 'translator/base'
|
3
|
+
require 'erb'
|
4
|
+
|
5
|
+
module ApplicationView
|
6
|
+
module Generator
|
7
|
+
module Snippets
|
8
|
+
def launcher_method(view)
|
9
|
+
view = view.downcase
|
10
|
+
class_name = view.capitalize
|
11
|
+
<<-OUTPUT
|
12
|
+
|
13
|
+
Launcher.launch#{class_name} = function() {
|
14
|
+
Launcher.launchTab("#{view}", "#{class_name}");
|
15
|
+
};
|
16
|
+
OUTPUT
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module Templates
|
21
|
+
class Base
|
22
|
+
include ApplicationView::FileSupport
|
23
|
+
|
24
|
+
attr_accessor :view
|
25
|
+
|
26
|
+
def initialize(view)
|
27
|
+
@view = view
|
28
|
+
end
|
29
|
+
|
30
|
+
def generate
|
31
|
+
write_processed_template
|
32
|
+
end
|
33
|
+
|
34
|
+
def template_dir
|
35
|
+
"#{APPLICATION_PATH}/generator/templates"
|
36
|
+
end
|
37
|
+
|
38
|
+
def process_template(template)
|
39
|
+
ERB.new(template, 0, "%<>").result(binding)
|
40
|
+
end
|
41
|
+
|
42
|
+
def processed_template
|
43
|
+
result = ""
|
44
|
+
File.open(full_template_path) do |f|
|
45
|
+
template = f.read
|
46
|
+
result = process_template(template)
|
47
|
+
end
|
48
|
+
result
|
49
|
+
end
|
50
|
+
|
51
|
+
def write_processed_template
|
52
|
+
write_to_file
|
53
|
+
end
|
54
|
+
|
55
|
+
def destination_path
|
56
|
+
"#{destination_dir}/#{destination_filename}"
|
57
|
+
end
|
58
|
+
|
59
|
+
def full_template_path
|
60
|
+
"#{template_dir}/#{template_filename}"
|
61
|
+
end
|
62
|
+
|
63
|
+
def write_processed_template
|
64
|
+
if confirm_overwrite(destination_path)
|
65
|
+
append_to_file(destination_path, processed_template)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def append_to_file(file, content)
|
70
|
+
File.open(file, "a") do |f|
|
71
|
+
puts " #{display_path(file)} writing . . ."
|
72
|
+
f.puts content
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class View < Base
|
78
|
+
def template_filename
|
79
|
+
"view.html.haml"
|
80
|
+
end
|
81
|
+
|
82
|
+
def destination_filename
|
83
|
+
"#{view}.html.haml"
|
84
|
+
end
|
85
|
+
|
86
|
+
def destination_dir
|
87
|
+
"#{BASE_PATH}/app/views"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
class JavaScript < Base
|
92
|
+
def template_filename
|
93
|
+
"javascript.js"
|
94
|
+
end
|
95
|
+
|
96
|
+
def destination_dir
|
97
|
+
"#{BASE_PATH}/app/javascripts"
|
98
|
+
end
|
99
|
+
|
100
|
+
def destination_filename
|
101
|
+
"#{view}.js"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
class Stylesheet < Base
|
106
|
+
def template_filename
|
107
|
+
"stylesheet.css"
|
108
|
+
end
|
109
|
+
|
110
|
+
def destination_dir
|
111
|
+
"#{BASE_PATH}/app/stylesheets"
|
112
|
+
end
|
113
|
+
|
114
|
+
def destination_filename
|
115
|
+
"#{view}.css"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
class Translation < Base
|
120
|
+
def template_filename
|
121
|
+
"translation.pres"
|
122
|
+
end
|
123
|
+
|
124
|
+
def destination_dir
|
125
|
+
"#{BASE_PATH}/app/assets/yrb/en-US"
|
126
|
+
end
|
127
|
+
|
128
|
+
def destination_filename
|
129
|
+
"new_#{view}_en-US.pres"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
class Modifications < Base
|
134
|
+
include Snippets
|
135
|
+
|
136
|
+
def generate
|
137
|
+
content = launcher_method(view)
|
138
|
+
append_to_file(destination_path, content)
|
139
|
+
end
|
140
|
+
|
141
|
+
def destination_dir
|
142
|
+
"#{BASE_PATH}/app/javascripts"
|
143
|
+
end
|
144
|
+
|
145
|
+
def destination_filename
|
146
|
+
"launcher.js"
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
class View
|
152
|
+
attr_accessor :view
|
153
|
+
|
154
|
+
def initialize(args)
|
155
|
+
@view = args.first
|
156
|
+
end
|
157
|
+
|
158
|
+
def generate
|
159
|
+
puts "Create a new view: #{view}"
|
160
|
+
|
161
|
+
Templates::View.new(view).generate
|
162
|
+
Templates::JavaScript.new(view).generate
|
163
|
+
Templates::Stylesheet.new(view).generate
|
164
|
+
Templates::Translation.new(view).generate
|
165
|
+
Templates::Modifications.new(view).generate
|
166
|
+
ApplicationView::Translator::YRB.translate
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'support/file'
|
2
|
+
|
3
|
+
module ApplicationView
|
4
|
+
module Compressor
|
5
|
+
class Base
|
6
|
+
extend ApplicationView::Config
|
7
|
+
extend ApplicationView::FileSupport
|
8
|
+
|
9
|
+
def self.compress(path, options={})
|
10
|
+
compressed_display_path = display_path(path)
|
11
|
+
compressed_path = "#{path}.min"
|
12
|
+
|
13
|
+
options["type"] ||= "js"
|
14
|
+
|
15
|
+
unless File.exists?(compressed_path)
|
16
|
+
$stdout.print " #{compressed_display_path} compressing . . . "
|
17
|
+
compressed = ''
|
18
|
+
|
19
|
+
if !obfuscate?
|
20
|
+
options["nomunge"] = ""
|
21
|
+
end
|
22
|
+
if verbose?
|
23
|
+
options["verbose"] = ""
|
24
|
+
end
|
25
|
+
options["charset"] = "utf-8"
|
26
|
+
|
27
|
+
if options["type"].to_s == "js" && !options["preserve_semi"]
|
28
|
+
options["preserve-semi"] = ""
|
29
|
+
end
|
30
|
+
|
31
|
+
options_string = options.map {|k,v| "--#{k} #{v}"}.join(" ")
|
32
|
+
|
33
|
+
result = `java -jar ./script/yuicompressor-2.4.2.jar #{options_string} #{path} -o #{compressed_path} 2>&1`
|
34
|
+
|
35
|
+
result.split("\n").each do |line|
|
36
|
+
if line =~ /\[ERROR\] (\d+):(\d+):(.*)/
|
37
|
+
line_number = $1.to_i
|
38
|
+
error = "Error at #{compressed_display_path} line #{line_number} character #{$2}: #{$3}"
|
39
|
+
error += get_line_from_file(path, line_number)
|
40
|
+
|
41
|
+
$stdout.puts error
|
42
|
+
growl(error)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
if result =~ /ERROR/
|
47
|
+
raise "JavaScript errors in #{compressed_display_path}"
|
48
|
+
else
|
49
|
+
$stdout.puts "OK"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
if File.exists?(compressed_path)
|
54
|
+
File.open(compressed_path) do |c|
|
55
|
+
compressed = c.read
|
56
|
+
end
|
57
|
+
else
|
58
|
+
raise "File does not exist: #{compressed_display_path}"
|
59
|
+
end
|
60
|
+
|
61
|
+
compressed
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class Stylesheet < Base
|
66
|
+
def self.compress(path)
|
67
|
+
if compress_css?
|
68
|
+
super(path, "type" => "css")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
class JavaScript < Base
|
74
|
+
def self.compress(filename)
|
75
|
+
if compress_embedded_js?
|
76
|
+
super(filename, "type" => "js")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'support/file'
|
2
|
+
require 'haml'
|
3
|
+
|
4
|
+
module ApplicationView
|
5
|
+
module Renderer
|
6
|
+
class Base
|
7
|
+
end
|
8
|
+
|
9
|
+
class Haml < Base
|
10
|
+
def self.scope
|
11
|
+
ApplicationView::ViewHelpers
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.render(filename)
|
15
|
+
options = {}
|
16
|
+
::Haml::Engine.new(filename, options).render(scope)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class ERB < Base
|
21
|
+
def self.scope
|
22
|
+
ApplicationView::ViewHelpers.get_binding
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.render(filename)
|
26
|
+
::ERB.new(filename, 0, "%<>").result(scope)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module Processor
|
32
|
+
class Base
|
33
|
+
extend ApplicationView::Config
|
34
|
+
extend ApplicationView::FileSupport
|
35
|
+
|
36
|
+
def self.render(params)
|
37
|
+
output = []
|
38
|
+
tags = true
|
39
|
+
if params[:tags] == false
|
40
|
+
tags = false
|
41
|
+
end
|
42
|
+
if params[:partial]
|
43
|
+
# params[:partial].to_a.each do |partial|
|
44
|
+
# output << render_partial(params)
|
45
|
+
output << Partial.render(params)
|
46
|
+
# end
|
47
|
+
end
|
48
|
+
# if params[:javascript]
|
49
|
+
# output << "<script type='text/javascript'>" if tags
|
50
|
+
# output << render_javascripts(params)
|
51
|
+
# output << "</script>" if tags
|
52
|
+
# end
|
53
|
+
# if params[:stylesheet]
|
54
|
+
# # params[:stylesheet].to_a.each do |stylesheet|
|
55
|
+
# output << render_stylesheet(params)
|
56
|
+
# # end
|
57
|
+
# end
|
58
|
+
output.join("\n")
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.render_partial(params)
|
62
|
+
Partial.render(params)
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.render_javascripts(params)
|
66
|
+
JavaScript.render(params)
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.render_stylesheet(params)
|
70
|
+
Stylesheet.render(params)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
class Partial < Base
|
75
|
+
def self.render(params)
|
76
|
+
filename = params[:partial]
|
77
|
+
output = ''
|
78
|
+
path = nil
|
79
|
+
|
80
|
+
path = find_partial(filename)
|
81
|
+
|
82
|
+
if path
|
83
|
+
output = process(path)
|
84
|
+
else
|
85
|
+
raise "Could not find partial: #{filename}"
|
86
|
+
end
|
87
|
+
output
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.process(path)
|
91
|
+
output = ""
|
92
|
+
|
93
|
+
File.open(path) do |f|
|
94
|
+
template = f.read
|
95
|
+
if path =~ /haml$/
|
96
|
+
output = ApplicationView::Processor::Haml.render(template, path)
|
97
|
+
else
|
98
|
+
output = ApplicationView::Processor::ERB.render(template)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
output
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.find_partial(partial)
|
106
|
+
path = nil
|
107
|
+
["views", "views/shared"].each do |dir|
|
108
|
+
basic_path = "#{BASE_PATH}/app/#{dir}/_#{partial}.html"
|
109
|
+
|
110
|
+
["", ".haml", ".erb"].each do |extension|
|
111
|
+
if File.exists?(basic_path + extension)
|
112
|
+
path ||= basic_path + extension
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
path
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
class JavaScript < Base
|
121
|
+
def self.render(params)
|
122
|
+
puts "Rendering partial"
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
class Stylesheet < Base
|
127
|
+
def self.render(params)
|
128
|
+
puts "Rendering partial"
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|