origen 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 67638f71155b698c46c36ac11275cbd932f59f4c
4
- data.tar.gz: 71f951d39c6a92b7f9ffc4a60b8613f164cdab61
3
+ metadata.gz: 2444b500452b441ffe3b828caf07864c4bac244c
4
+ data.tar.gz: bf221ec3d4731ac3e36a5c2ea25ec3b65cc4680c
5
5
  SHA512:
6
- metadata.gz: cc180e1083595da71e9d7ffe40a34fe084fc950f0cd9affd03da76f62695bc398d97dc7b7112386c56b66f903fd8072c4b06a9507c4205fb1a541e91ad748c7a
7
- data.tar.gz: 4cdac149a1a653a8aede5ea906f2fdbfce0c625c90dcf6cca5dad24d86fb498010eedac1e6513127f32d614e53d3461d3108b914a1e0596e2ac50b60bc02d678
6
+ metadata.gz: c299c349c1623868cccc9e93a0cdbab6e9b20b19471c83db65a89c273a80d2fe455e48b7b8d09395238fc4f35bc83810343c4d8c2cc7326951b1f5a405424f33
7
+ data.tar.gz: cfe2bae4e3193971e82f470e0a542ade063aa941bd08d32980884af5a0b3ae0bd9549641b01e35a1db5132f244a990c713bb7e1332c045b4be37968a09ccd723
@@ -29,8 +29,7 @@ class OrigenCoreApplication < Origen::Application
29
29
 
30
30
  #config.lsf.project = "origen core"
31
31
 
32
- config.web_directory = "/proj/.web_origen/html/origen"
33
-
32
+ config.web_directory = "git@github.com:Origen-SDK/Origen-SDK.github.io.git/origen"
34
33
  config.web_domain = "http://origen-sdk.org/origen"
35
34
 
36
35
  config.pattern_prefix = "nvm"
@@ -112,13 +111,13 @@ class OrigenCoreApplication < Origen::Application
112
111
  end
113
112
 
114
113
  def before_deploy_site
115
- Dir.chdir Origen.root do
116
- system "origen specs -c"
117
- system "origen examples -c"
118
- dir = "#{Origen.root}/web/output/coverage"
119
- FileUtils.remove_dir(dir, true) if File.exists?(dir)
120
- system "mv #{Origen.root}/coverage #{dir}"
121
- end
114
+ #Dir.chdir Origen.root do
115
+ # system "origen specs -c"
116
+ # system "origen examples -c"
117
+ # dir = "#{Origen.root}/web/output/coverage"
118
+ # FileUtils.remove_dir(dir, true) if File.exists?(dir)
119
+ # system "mv #{Origen.root}/coverage #{dir}"
120
+ #end
122
121
  end
123
122
 
124
123
  def after_release_email(tag, note, type, selector, options)
data/config/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Origen
2
2
  MAJOR = 0
3
3
  MINOR = 0
4
- BUGFIX = 4
4
+ BUGFIX = 5
5
5
  DEV = nil
6
6
 
7
7
  VERSION = [MAJOR, MINOR, BUGFIX].join(".") + (DEV ? ".pre#{DEV}" : '')
data/helpers/url.rb CHANGED
@@ -23,6 +23,9 @@ module Origen
23
23
 
24
24
  if Origen.development?
25
25
  "#{p}" # dev mode used for local website generation
26
+ # For Git deploy don't maintain versions
27
+ elsif Origen.app.deployer.deploy_to_git?
28
+ "#{root_path}#{p}"
26
29
  else
27
30
  "#{root_path}/#{_version}#{p}"
28
31
  end
@@ -54,8 +57,8 @@ module Origen
54
57
  end
55
58
  end
56
59
 
57
- # Returns any path attached to the domain, for example will return "/tfs"
58
- # for "http://origen.freescale.net/tfs"
60
+ # Returns any path attached to the domain, for example will return "/jtag"
61
+ # for "http://origen-sdk.org/jtag"
59
62
  def root_path # :nodoc:
60
63
  if domain =~ /\/\/[^\/]*(\/.*)/ # http://rubular.com/r/UY06Z6DXUS
61
64
  $1
@@ -1,75 +1,90 @@
1
1
  module Origen
2
2
  class Application
3
- # This class currently serves two APIs and is a bit of a mess.
4
- # The first API is the old style deploy which is deprecated, in this approach the
5
- # entire application was built and manged remotely with pages compiled in the remote
6
- # application.
3
+ # This class manages deploying an application's website.
7
4
  #
8
- # The new appraoch is that the web pages are compiled in the local application and
9
- # then deploy consists of simply copying them to the remote location.
5
+ # The web pages are compiled in the local application workspace and
6
+ # deploy consists of copying them to the remote location.
7
+ #
8
+ # Two directories are maintained in the remote location, one containing the live
9
+ # website and another where the new site is copied to during a deploy.
10
+ # A symlink is used to indicate which one of the two directories is currently being
11
+ # served.
12
+ #
13
+ # Upon a successful copy the symlink is switched over, thereby providing zero-downtime
14
+ # deploys and guaranteeing that the old site will stay up if an error is encountered
15
+ # during a deploy.
16
+ #
17
+ # An alternative method of deploying is also supported by pushing to a Git repository.
10
18
  class Deployer
11
19
  require 'fileutils'
12
20
 
13
- attr_writer :version, :directory, :origen_directory, :rdoc_command, :test
14
-
15
- # Deploys this release to origen.freescale.net/tfs
16
- # This needs to be made generic so that projects can use it to, right now this
17
- # code exists both here and in the TFS project
18
- def deploy(options = {})
19
- options = {
20
- test: false, # Do a test run deploy in the local workspace
21
- archive: false
22
- }.merge(options)
23
- @directory = options[:directory]
24
- @app_sub_directory = options[:app_sub_directory]
25
- @test = options[:test]
26
- @version = options[:version]
27
- @rdoc_command = options[:rdoc_command]
28
- @successful = false
29
-
30
- puts '***********************************************************************'
31
- puts "'deploy' is deprecated, please transition to 'origen web compile' instead"
32
- puts '***********************************************************************'
21
+ attr_writer :directory, :test
33
22
 
34
- begin
35
- puts ''
36
- puts 'Deploying...'
37
- puts ''
38
- populate(offline_release_dir) unless test_run?
39
- generate_web_pages
40
- generate_rdoc_pages if @rdoc_command
41
- # If web pages were generated compile them through nanoc, this is not done
42
- # as part of generate web pages to allow the application to add additional web
43
- # pages during the rdoc command
44
- if @nanoc_dir
45
- Dir.chdir @nanoc_dir do
46
- system 'nanoc'
47
- end
23
+ # Prepare for deploying, this will raise an error if the current user is found to
24
+ # have insufficient permissions to deploy to the target directory
25
+ def prepare!(options = {})
26
+ if deploy_to_git?
27
+ require 'highline/import'
28
+ @commit_message = options[:message] || ask('Enter a deployment commit message: ') do |q|
29
+ q.validate = /\w/
30
+ q.responses[:not_valid] = "Can't be blank"
31
+ end
32
+ Origen.log.info "Fetching the website's Git respository..."
33
+ begin
34
+ git_repo
35
+ fail unless git_repo.can_checkin?
36
+ rescue
37
+ puts "Sorry, but you don't have permission to write to #{Origen.config.web_directory}!"
38
+ exit 1
48
39
  end
49
- unless test_run?
50
- create_symlinks
51
- make_archive if options[:archive]
40
+ else
41
+ begin
42
+ require_remote_directories
43
+ test_file = "#{Origen.config.web_directory}/_test_file.txt"
44
+ FileUtils.rm_f(test_file) if File.exist?(test_file)
45
+ FileUtils.touch(test_file)
46
+ FileUtils.rm_f(test_file)
47
+ rescue
48
+ puts "Sorry, but you don't have permission to write to #{Origen.config.web_directory}!"
49
+ exit 1
52
50
  end
53
- @successful = true
54
- true
55
- rescue Exception => e
56
- puts e.message
57
- puts e.backtrace
58
- deploy_unsuccessful(@directory)
59
- @successful = false
60
- false
61
51
  end
62
52
  end
63
53
 
64
- # Reports whether the last deploy was successful or not
65
- def successful?
66
- @successful
54
+ def git_sub_dir
55
+ if Origen.config.web_directory =~ /\.git\/(.*)$/
56
+ Regexp.last_match(1)
57
+ end
58
+ end
59
+
60
+ # Returns a RevisionControl::Git object that points to a local copy of the website repo
61
+ # which is will build and checkout as required
62
+ def git_repo
63
+ @git_repo ||= begin
64
+ local = Pathname.new("#{Origen.app.workspace_manager.imports_directory}/git/#{Origen.config.web_directory.gsub('/', '-').symbolize}")
65
+ if git_sub_dir
66
+ remote = Origen.config.web_directory.sub("\/#{git_sub_dir}", '')
67
+ else
68
+ remote = Origen.config.web_directory
69
+ end
70
+ git = RevisionControl::Git.new(local: local, remote: remote)
71
+ if git.initialized?
72
+ git.checkout(force: true)
73
+ else
74
+ git.build(force: true)
75
+ end
76
+ git
77
+ end
67
78
  end
68
79
 
69
80
  def test_run?
70
81
  @test
71
82
  end
72
83
 
84
+ def deploy_to_git?
85
+ !!(Origen.config.web_directory =~ /\.git\/?#{git_sub_dir}$/)
86
+ end
87
+
73
88
  def require_remote_directories
74
89
  %w(remote1 remote2).each do |dir|
75
90
  dir = "#{Origen.config.web_directory}/#{dir}"
@@ -111,22 +126,33 @@ module Origen
111
126
  # directory to the remote server.
112
127
  def deploy_site
113
128
  Origen.app.listeners_for(:before_deploy_site).each(&:before_deploy_site)
114
- # Empty the contents of the remote dir
115
- if File.exist?(offline_remote_directory)
116
- FileUtils.remove_dir(offline_remote_directory, true)
117
- require_remote_directories
118
- end
119
- # Copy the new contents accross
120
- `chmod g+w -R #{Origen.root}/web/output` # Ensure group writable
121
- FileUtils.cp_r "#{Origen.root}/web/output/.", offline_remote_directory
122
- `chmod g+w -R #{offline_remote_directory}` # Double ensure group writable
123
- # Make live
124
- create_symlink offline_remote_directory, latest_symlink
125
- index = "#{Origen.config.web_directory}/index.html"
126
- # This symlink allows the site homepage to be accessed from the web root
127
- # directory rather than root directory/latest
128
- unless File.exist?(index)
129
- create_symlink "#{latest_symlink}/index.html", index
129
+ if deploy_to_git?
130
+ dir = git_repo.local.to_s
131
+ dir += "/#{git_sub_dir}" if git_sub_dir
132
+ # Delete everything so that we don't preserve old files
133
+ git_repo.delete_all(git_sub_dir)
134
+ FileUtils.mkdir_p(dir) unless File.exist?(dir)
135
+ `chmod a+w -R #{Origen.root}/web/output` # Ensure world writable, required?
136
+ FileUtils.cp_r "#{Origen.root}/web/output/.", dir
137
+ git_repo.checkin git_sub_dir, unmanaged: true, comment: @commit_message
138
+ else
139
+ # Empty the contents of the remote dir
140
+ if File.exist?(offline_remote_directory)
141
+ FileUtils.remove_dir(offline_remote_directory, true)
142
+ require_remote_directories
143
+ end
144
+ # Copy the new contents across
145
+ `chmod g+w -R #{Origen.root}/web/output` # Ensure group writable
146
+ FileUtils.cp_r "#{Origen.root}/web/output/.", offline_remote_directory
147
+ `chmod g+w -R #{offline_remote_directory}` # Double ensure group writable
148
+ # Make live
149
+ create_symlink offline_remote_directory, latest_symlink
150
+ index = "#{Origen.config.web_directory}/index.html"
151
+ # This symlink allows the site homepage to be accessed from the web root
152
+ # directory rather than root directory/latest
153
+ unless File.exist?(index)
154
+ create_symlink "#{latest_symlink}/index.html", index
155
+ end
130
156
  end
131
157
  end
132
158
 
@@ -156,6 +182,18 @@ module Origen
156
182
  title = "#{Origen.config.name} #{Origen.app.version}"
157
183
  end
158
184
  system("yard doc --output-dir #{Origen.root}/web/output/api --title '#{title}'")
185
+ # Yard doesn't have an option to ignore github-style READMEs, so force it here to
186
+ # always present the API index on the API homepage for consistency
187
+ index = "#{Origen.root}/web/output/api/index.html"
188
+ _index = "#{Origen.root}/web/output/api/_index.html"
189
+ FileUtils.rm_f(index) if File.exist?(index)
190
+ # This removes a prominent link that we are left with to a README file that doesn't work
191
+ require 'nokogiri'
192
+ doc = Nokogiri::HTML(File.read(_index))
193
+ doc.xpath('//h2[contains(text(), "File Listing")]').remove
194
+ doc.css('#files').remove
195
+ File.open(_index, 'w') { |f| f.write(doc.to_html) }
196
+ FileUtils.cp(_index, index)
159
197
  end
160
198
 
161
199
  def deploy_archive(id)
@@ -169,48 +207,17 @@ module Origen
169
207
  end
170
208
  end
171
209
 
172
- # Make an archive directory for the current release, this will create
173
- # a new directory specifically for this release and copy over the web
174
- # pages and api docs.
175
- def make_archive
176
- if version == 'latest'
177
- puts 'Cannot archive latest, need a tag reference'
178
- else
179
- dir = archive_directory(force_clear: true)
180
- FileUtils.cp_r Dir.glob("#{origen_directory}/web/output/*").sort, dir
181
- api = "#{archive_directory}/api"
182
- FileUtils.mkdir_p api unless File.exist?(api)
183
- FileUtils.cp_r Dir.glob("#{origen_directory}/api/*").sort, api
184
- end
185
- end
186
-
187
- def create_symlinks
188
- {
189
- "#{origen_directory}/web/output" => "#{root_directory}/latest",
190
- "#{origen_directory}/api" => "#{origen_directory}/web/output/api"
191
-
192
- }.each do |from, to|
193
- create_symlink(from, to)
194
- end
195
- end
196
-
197
210
  def create_symlink(from, to)
198
211
  `rm -f #{to}` if File.exist?(to)
199
212
  `ln -s #{from} #{to}` if File.exist?(from)
200
213
  end
201
214
 
202
- def populate(dir)
203
- # Populate to the new tag
204
- system "dssc setvault #{Origen.config.vault} #{dir}"
205
- system "dssc pop -rec -uni -force -ver #{version} #{dir}"
206
- end
207
-
208
215
  def web_server_dir
209
- "#{origen_directory}/web"
216
+ "#{Origen.root}/web"
210
217
  end
211
218
 
212
219
  def create_web_server_dir
213
- if File.exist?("#{origen_directory}/templates/web")
220
+ if File.exist?("#{Origen.root}/templates/web")
214
221
  dir = web_server_dir
215
222
  FileUtils.rm_rf dir if File.exist?(dir)
216
223
  FileUtils.mkdir_p dir
@@ -220,10 +227,10 @@ module Origen
220
227
  Origen.app.runner.launch action: :compile,
221
228
  files: "#{Origen.top}/templates/nanoc_dynamic",
222
229
  output: dir
223
- unless Origen.root == origen_directory
230
+ unless Origen.root == Origen.top
224
231
  # Copy any application overrides if they exist
225
- if File.exist?("#{origen_directory}/templates/nanoc")
226
- FileUtils.cp_r Dir.glob("#{origen_directory}/templates/nanoc/*").sort, dir, remove_destination: true
232
+ if File.exist?("#{Origen.root}/templates/nanoc")
233
+ FileUtils.cp_r Dir.glob("#{Origen.root}/templates/nanoc/*").sort, dir, remove_destination: true
227
234
  end
228
235
  end
229
236
  # Remove the .SYNCs
@@ -231,137 +238,6 @@ module Origen
231
238
  @nanoc_dir = dir
232
239
  end
233
240
  end
234
-
235
- # Compiles and creates the web documentation pages, combining the Origen Jekyll
236
- # infrastructure and the application specific content
237
- def generate_web_pages
238
- if File.exist?("#{origen_directory}/templates/web")
239
- create_web_server_dir
240
- # Finally compile the application web pages
241
- Origen.app.runner.generate(files: "#{origen_directory}/templates/web",
242
- compile: true,
243
- output: "#{@nanoc_dir}/content")
244
- end
245
- end
246
-
247
- # Run the rdoc task
248
- def generate_rdoc_pages
249
- if File.exist?("#{origen_directory}/templates/api_doc")
250
- Origen.app.runner.generate(files: "#{origen_directory}/templates/api_doc",
251
- compile: true,
252
- output: "#{origen_directory}/api_doc")
253
- end
254
- Dir.chdir origen_directory do
255
- system "origen #{rdoc_command}"
256
- end
257
- end
258
-
259
- def rdoc_command
260
- @rdoc_command || 'rdoc'
261
- end
262
-
263
- # The top level directory that hosts all releases
264
- def root_directory
265
- return @root_directory if @root_directory
266
- FileUtils.mkdir_p @directory unless File.exist?(@directory)
267
- @root_directory = @directory
268
- end
269
-
270
- # The directory that contains the current release
271
- def release_directory1
272
- return @release_directory1 if @release_directory1
273
- if test_run?
274
- @release_directory1 = Origen.root
275
- else
276
- @release_directory1 = "#{root_directory}/release_1"
277
- unless File.exist?(@release_directory1)
278
- FileUtils.mkdir_p @release_directory1
279
- populate(@release_directory1)
280
- end
281
- end
282
- @release_directory1
283
- end
284
-
285
- def release_directory2
286
- return @release_directory2 if @release_directory2
287
- if test_run?
288
- @release_directory2 = Origen.root
289
- else
290
- @release_directory2 = "#{root_directory}/release_2"
291
- unless File.exist?(@release_directory2)
292
- FileUtils.mkdir_p @release_directory2
293
- populate(@release_directory2)
294
- end
295
- end
296
- @release_directory2
297
- end
298
-
299
- def archive_directory(options = {})
300
- ver = version
301
- return Origen.root if test_run?
302
- if options[:force_clear]
303
- @archive_directory = "#{root_directory}/#{ver}"
304
- FileUtils.rm_rf @archive_directory if File.exist?(@archive_directory)
305
- else
306
- return @archive_directory if @archive_directory
307
- @archive_directory = "#{root_directory}/#{ver}"
308
- end
309
- FileUtils.mkdir_p @archive_directory unless File.exist?(@archive_directory)
310
- @archive_directory
311
- end
312
-
313
- def offline_release_dir
314
- link = "#{root_directory}/latest"
315
- if File.exist?(link)
316
- if File.readlink(link) =~ /release_1/
317
- @offline_release_dir = release_directory2
318
- else
319
- @offline_release_dir = release_directory1
320
- end
321
- else
322
- @offline_release_dir = release_directory1
323
- end
324
- end
325
-
326
- # The directory that contains the Origen app for the current release
327
- def origen_directory
328
- return @origen_directory if @origen_directory
329
- if test_run?
330
- @origen_directory = Origen.root
331
- else
332
- @origen_directory = @app_sub_directory ? "#{offline_release_dir}/#{@app_sub_directory}" : offline_release_dir
333
- FileUtils.mkdir_p @origen_directory unless File.exist?(@origen_directory)
334
- end
335
- @origen_directory
336
- end
337
-
338
- def version
339
- @version
340
- end
341
-
342
- # Returns true if the user account belongs to the origen group
343
- def user_belongs_to_origen?
344
- if Origen.running_on_windows?
345
- false
346
- else
347
- `"groups"`.gsub("\n", '').split(' ').include?('origen')
348
- end
349
- end
350
-
351
- # Returns true if running on CDE
352
- def running_on_cde?
353
- if Origen.running_on_windows?
354
- false
355
- else
356
- !!(`"domainname"` =~ /cde/i)
357
- end
358
- end
359
-
360
- def deploy_unsuccessful(directory)
361
- puts ''
362
- puts "*** ERROR *** - Could not deploy to: #{directory}"
363
- puts ''
364
- end
365
241
  end
366
242
  end
367
243
  end
@@ -18,7 +18,7 @@ module Origen
18
18
  #
19
19
  # However within Origen core (and possibly some plugins) it is often the case that registered
20
20
  # listeners will be objects that are not re-instantiated upon target load and persist for
21
- # the entire Origen thread. In this case use the CoreCallbacks module instead of the regular
21
+ # the entire Origen thread. In this case use the PersistentCallbacks module instead of the regular
22
22
  # Callbacks module to make these objects register as permanent listeners.
23
23
  module PersistentCallbacks
24
24
  extend ActiveSupport::Concern
@@ -132,7 +132,7 @@ The following options are available:
132
132
  Origen.app.load_target!
133
133
  if options[:remote]
134
134
  _require_web_directory
135
- _deployer.require_remote_directories
135
+ _deployer.prepare!
136
136
  # If the whole site has been requested that start from a clean slate
137
137
  _build_web_dir if ARGV.empty?
138
138
  else
@@ -1,8 +1,8 @@
1
1
  module Origen
2
2
  module RevisionControl
3
3
  class Git < Base
4
- def build
5
- if Dir["#{local}/*"].empty?
4
+ def build(options = {})
5
+ if Dir["#{local}/*"].empty? || options[:force]
6
6
  FileUtils.rm_rf(local.to_s)
7
7
  # Not using the regular 'git' method here since the local dir doesn't exist to CD into
8
8
  system "git clone #{remote} #{local}"
@@ -74,7 +74,11 @@ module Origen
74
74
  checkout unless options[:initial]
75
75
  end
76
76
  cmd = 'add'
77
- cmd += ' -u' unless options[:unmanaged]
77
+ if options[:unmanaged]
78
+ cmd += ' -A'
79
+ else
80
+ cmd += ' -u' unless options[:unmanaged]
81
+ end
78
82
  cmd += " #{paths.join(' ')}"
79
83
  git cmd, options
80
84
  if changes_pending_commit?
@@ -101,6 +105,15 @@ module Origen
101
105
  paths
102
106
  end
103
107
 
108
+ # Returns true if the current user can checkin to the given repo (means has permission
109
+ # to push in Git terms)
110
+ def can_checkin?
111
+ git('push --dry-run', verbose: false)
112
+ true
113
+ rescue
114
+ false
115
+ end
116
+
104
117
  def changes(dir = nil, options = {})
105
118
  paths, options = clean_path(dir, options)
106
119
  options = {
@@ -176,8 +189,25 @@ module Origen
176
189
  git('tag', verbose: false).include?(tag.to_s)
177
190
  end
178
191
 
192
+ def initialized?
193
+ File.exist?("#{local}/.git") &&
194
+ git('remote -v', verbose: false).any? { |r| r =~ /#{remote_without_protocol}/ } &&
195
+ !git('status', verbose: false).any? { |l| l == 'Initial commit' }
196
+ end
197
+
198
+ # Delete everything in the given directory, or the whole repo
199
+ def delete_all(dir = nil, options = {})
200
+ paths, options = clean_path(dir, options)
201
+ files = git("ls-files #{paths.first}")
202
+ FileUtils.rm_f files
203
+ end
204
+
179
205
  private
180
206
 
207
+ def remote_without_protocol
208
+ Pathname.new(remote.sub(/^.*:\/\//, ''))
209
+ end
210
+
181
211
  def create_gitignore
182
212
  c = Origen::Generator::Compiler.new
183
213
  c.compile "#{Origen.top}/templates/git/gitignore.erb",
@@ -204,10 +234,6 @@ module Origen
204
234
  end
205
235
  end
206
236
 
207
- def initialized?
208
- File.exist?("#{local}/.git")
209
- end
210
-
211
237
  # Execute a git operation, the resultant output is returned in an array
212
238
  def git(command, options = {})
213
239
  options = {
@@ -36,14 +36,11 @@ compile '*' do
36
36
  filter :codeblocks
37
37
  end
38
38
  unless ["xml", "js"].include?(item[:extension])
39
- if item[:layout] == "bootstrap"
39
+ if item[:layout] == "bootstrap" || item[:layout] == "bootstrap3" || !item[:layout]
40
40
  filter :bootstrap
41
41
  layout 'bootstrap'
42
- elsif item[:layout] == "bootstrap3"
43
- filter :bootstrap
44
- layout 'bootstrap3'
45
- elsif item[:layout] != "none"
46
- layout 'freescale'
42
+ else
43
+ fail "Unknown web page layout: #{item[:layout]}"
47
44
  end
48
45
  filter :search
49
46
  end
@@ -2,8 +2,11 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="utf-8">
5
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
8
+
5
9
  <title><%= @item[:title] %></title>
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
10
  <% if @item[:description] %>
8
11
  <meta name="description" content="<%= @item[:description] %>">
9
12
  <% end %>
@@ -11,53 +14,47 @@
11
14
  <meta name="author" content="<%= @item[:author] %>">
12
15
  <% end %>
13
16
 
14
- <!-- Le styles -->
15
- <link href="http://rgen.freescale.net/css/bootstrap.min.css" rel="stylesheet">
16
- <link href="http://rgen.freescale.net/css/bootstrap_custom.css" rel="stylesheet">
17
- <link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet">
17
+ <!-- Bootstrap core CSS -->
18
+ <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
19
+ <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
20
+ <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
21
+ <link rel="stylesheet" href="http://origen-sdk.org/css/bootstrap_custom.css"></script>
18
22
 
19
- <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
23
+ <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
20
24
  <!--[if lt IE 9]>
21
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
25
+ <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
26
+ <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
22
27
  <![endif]-->
23
28
 
24
29
  <!-- Fav and touch icons -->
25
30
  <link rel="shortcut icon" href="http://rgen.freescale.net/favicon.ico"/>
26
31
  <link rel="icon" type="image/ico" href="http://rgen.freescale.net/favicon.ico"/>
27
- <script src="http://rgen.freescale.net/js/jquery.min.js"></script>
28
- <script src="http://rgen.freescale.net/js/bootstrap.min.js"></script>
29
32
  </head>
30
33
 
31
- <body class="freescale">
32
-
33
- <div id="wrap">
34
- <div id="wrapper">
35
- <div class="container" id="top-level-container">
36
- <% if @item[:yammer_share].nil? || @item[:yammer_share] %>
37
- <div id="yj-share-button"></div>
38
- <% end %>
39
- <%= yield %>
40
- </div>
41
-
42
- <div id="push"></div>
43
- </div>
44
- </div>
34
+ <body>
35
+ <% if @item[:full_width] %>
36
+ <%= yield %>
37
+ <% else %>
38
+ <div class="container">
39
+ <%= yield %>
40
+ </div><!-- /.container -->
41
+ <% end %>
45
42
 
46
- <div id=footer>
47
- <div class="container" style="padding-top:20px">
48
- <p class="pull-left">
43
+ <footer class="footer">
44
+ <div class="container">
45
+ <p class="pull-left text-muted">
49
46
  Freescale Internal Use Only
50
47
  </p>
51
- <p class="pull-right">&copy; Copyright <%= Time.now.year %> Freescale, Inc. All Rights Reserved</p>
48
+ <p class="pull-right text-muted">&copy; Copyright <%= Time.now.year %> Freescale, Inc. All Rights Reserved</p>
52
49
  </div>
53
- <div>
54
-
55
- <script src="http://rgen.freescale.net/js/lunr.min.js"></script>
56
- <script src="http://rgen.freescale.net/js/highlight.js"></script>
57
- <script src="http://rgen.freescale.net/js/custom.js"></script>
58
- <% if @item[:yammer_share].nil? || @item[:yammer_share] %>
59
- <script type="text/javascript" src="https://c64.assets-yammer.com/assets/platform_social_buttons.min.js"></script>
60
- <script type="text/javascript">yam.platform.yammerShare();</script>
61
- <% end %>
50
+ </footer>
51
+ <!-- Bootstrap core JavaScript
52
+ ================================================== -->
53
+ <!-- Placed at the end of the document so the pages load faster -->
54
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
55
+ <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
56
+ <script src="http://origen-sdk.org/js/lunr.min.js"></script>
57
+ <script src="http://origen-sdk.org/js/highlight.js"></script>
58
+ <script src="http://origen-sdk.org/js/custom.js"></script>
62
59
  </body>
63
60
  </html>
@@ -1,10 +1,10 @@
1
1
  <div class="pull-right logo-rgen" style="margin-top: 18px; margin-left: 10px">
2
- <a href="http://rgen.freescale.net" style="text-decoration: none; color: #e66a08; font-weight: bold; font-size: 20px;">
3
- <span>RGen</span>
2
+ <a href="http://origen-sdk.org" style="text-decoration: none; color: #e66a08; font-weight: bold; font-size: 20px;">
3
+ <span>Origen</span>
4
4
  </a>
5
5
  </div>
6
6
  <div class="pull-right">
7
- <a href="http://rgen.freescale.net">
7
+ <a href="http://origen-sdk.org">
8
8
  <img src="http://rgen.freescale.net/img/fsl_logo.png" style="height:40px">
9
9
  </a>
10
10
  </div>
@@ -0,0 +1,11 @@
1
+ % render "layouts/basic.html", tab: :archive do
2
+
3
+ ## Archive
4
+
5
+ Documentation from previous releases is available via the links below:
6
+
7
+ % Origen.app.versions.reverse_each do |version|
8
+ * [<%= version %>](<%= Origen.app.config.web_domain %>/<%= version.gsub(".", "_") %>)
9
+ % end
10
+
11
+ % end
@@ -0,0 +1,40 @@
1
+ % render "layouts/basic.html", tab: :contact do
2
+
3
+ ## Contact Us
4
+
5
+ The following engineers can be contacted about this application:
6
+
7
+ % Origen.app.developers.each do |user|
8
+ % if user.email
9
+ * [<%= user.name %>](mailto:<%= user.email %>)
10
+ % else
11
+ * <%= user.name %>
12
+ % end
13
+ % end
14
+
15
+ %# An example of how to manually write a more detailed contact page:
16
+ %#Please use PDM For any bug reports or change/feature requests:
17
+ %#
18
+ %#* [C90TFS_NVM_tester on PDM](http://designpdm.freescale.net/Agile/PLMServlet?fromPCClient=true&module=PartFamilyHandler&requestUrl=module%3DPartFamilyHandler%26opcode%3DdisplayObject%26classid%3D2000004409%26objid%3D17718323%26tabid%3D2%26)
19
+ %#
20
+ %#For test related issues you can contact:
21
+ %#
22
+ %#* [Stephen McGinty](http://freeshare.freescale.net:2222/my/Person.aspx?accountname=fsl\r49409)
23
+ %#* [Thao Huynh](http://freeshare.freescale.net:2222/my/Person.aspx?accountname=fsl\R6AANF)
24
+ %#
25
+ %#For product/yield issues contact:
26
+ %#
27
+ %#* [Andrew Hardell](http://freeshare.freescale.net:2222/my/Person.aspx?accountname=fsl\R12635)
28
+ %#* [Eddie Lepore](http://freeshare.freescale.net:2222/my/Person.aspx?accountname=fsl\B06626)
29
+ %#
30
+ %#The manager of this project is:
31
+ %#
32
+ %#* [Wendy Malloch](http://freeshare.freescale.net:2222/my/Person.aspx?accountname=fsl\TTZ231)
33
+ %#
34
+ %#
35
+ %#Finally if you are not sure who to contact, or if your question may have device/reliability
36
+ %#implications, then you can use the Split Gate Flash Test and Reliability mailing list:
37
+ %#
38
+ %#* [Email SGFTANDR](mailto:SGFTANDR@freescale.com)
39
+
40
+ % end
@@ -0,0 +1,17 @@
1
+ % render "../../layouts/doc.html" do
2
+
3
+ %# Add any new entries anywhere in this list, it will get sorted into
4
+ %# alphabetical order during compilation:
5
+ %
6
+ % terms = {
7
+ % "Origen" => "A general purpose semiconductor engineering framework that uses the Ruby programming language, read more at http://origen.freescale.net",
8
+ % "Application" => "The generic name given to a project that uses Origen",
9
+ % }
10
+
11
+ | Term or Acronym | Definition
12
+ |:----------------|:----------
13
+ % terms.sort.each do |term|
14
+ | <%= term[0] %> | <%= term[1] %>
15
+ % end
16
+
17
+ % end
@@ -0,0 +1,22 @@
1
+ % render "../../layouts/doc.html" do
2
+
3
+ Follow the steps below to setup a new environment.
4
+
5
+ #### 1. Install Origen
6
+
7
+ Follow these instructions to install Origen: [How to Install Origen](http://origen.freescale.net/origen/latest/guides/starting/installing)
8
+
9
+ #### 2. Create the application workspace
10
+
11
+ This workspace must be situated outside of the Origen workspace that you have just created.
12
+
13
+ Execute the following commands:
14
+
15
+ ~~~
16
+ mkdir <%= Origen.app.name %>
17
+ cd <%= Origen.app.name %>
18
+ dssc setvault <%= Origen.config.vault %> .
19
+ dssc pop -rec -uni -get -force -ver <%= Origen.app.version %> .
20
+ ~~~
21
+
22
+ % end
@@ -0,0 +1,5 @@
1
+ % render "../../layouts/doc.html" do
2
+
3
+ Welcome to the docs...
4
+
5
+ % end
@@ -0,0 +1,12 @@
1
+ % render "layouts/basic.html" do
2
+
3
+ %# HTML tags can be embedded in mark down files if you want to do specific custom
4
+ %# formatting like this, but in most cases that is not required.
5
+ <h1><%= Origen.app.namespace %> <span style="font-size: 14px">(<%= Origen.app.version %>)</span></h1>
6
+
7
+ ### Introduction
8
+
9
+ Use this page to give a brief overview of what your application does, put the detail
10
+ in the docs section.
11
+
12
+ % end
@@ -0,0 +1,13 @@
1
+ ---
2
+ title: <%= options[:title] || Origen.app.namespace %>
3
+ ---
4
+ <%= render "templates/web/partials/navbar.html", tab: options[:tab] %>
5
+
6
+ <div class="row">
7
+ %# The markdown attribute is important if you are going to include content written
8
+ %# in markdown, without this is will be included verbatim
9
+ <div class="span12" markdown="1">
10
+ <%= yield %>
11
+
12
+ </div>
13
+ </div>
@@ -0,0 +1,32 @@
1
+ ---
2
+ title: <%= options[:title] || "#{Origen.app.namespace} - Docs" %>
3
+ ---
4
+ <%= render "templates/web/partials/navbar.html", tab: :docs %>
5
+ % s = {}
6
+
7
+ %# This creates the index on the left of your doc pages
8
+ %#
9
+ %# Naming of the keys is very important and must be of the form:
10
+ %# <section>_<page> with no other underscores
11
+ %# Origen will then look for the corresponding page in:
12
+ %# templates/web/docs/<section>/<page>.md.erb
13
+ %#
14
+ %# See here for more info: http://origen.freescale.net/doc_helpers/latest/examples/searchable/intro/
15
+
16
+ % s["Environment"] = {
17
+ % environment_introduction: "Introduction",
18
+ % environment_installation: "Installation",
19
+ % environment_definitions: "Definitions and Acronyms",
20
+ % }
21
+ %
22
+ %# Define additional sections as required, e.g.
23
+ %# s["Registers"] = {
24
+ %# registers_map: "Register Map",
25
+ %# }
26
+
27
+
28
+ % #render "doc_helpers/searchable.html", options.merge(:index => s) do
29
+
30
+ <%= yield %>
31
+
32
+ % #end
@@ -0,0 +1,24 @@
1
+ <nav class="navbar navbar-inverse navbar-fixed-top">
2
+ <div class="container">
3
+ <div class="navbar-header">
4
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
5
+ <span class="sr-only">Toggle navigation</span>
6
+ <span class="icon-bar"></span>
7
+ <span class="icon-bar"></span>
8
+ <span class="icon-bar"></span>
9
+ </button>
10
+ <a class="navbar-brand" href="<%= path "/" %>">Home</a>
11
+ </div>
12
+ <div id="navbar" class="collapse navbar-collapse">
13
+ <ul class="nav navbar-nav">
14
+ <li class="<%= options[:tab] == :docs ? 'active' : '' %>"><a href="<%= path("/docs/environment/introduction") %>">Docs</a></li>
15
+ <li class="<%= options[:tab] == :api ? 'active' : '' %>"><a href="<%= path "/api/" %>">API</a></li>
16
+ <li class="<%= options[:tab] == :references ? 'active' : '' %>"><a href="<%= path "/references" %>">References</a></li>
17
+ <li class="<%= options[:tab] == :archive ? 'active' : '' %>"><a href="<%= path "/archive" %>">Archive</a></li>
18
+ <li class="<%= options[:tab] == :release ? 'active' : '' %>"><a href="<%= path "/release_notes" %>">Release Notes</a></li>
19
+ <li class="<%= options[:tab] == :contact ? 'active' : '' %>"><a href="<%= path "/contact" %>">Contact</a></li>
20
+ </ul>
21
+ <%= import "origen/web/logo.html" %>
22
+ </div><!--/.nav-collapse -->
23
+ </div>
24
+ </nav>
@@ -0,0 +1,39 @@
1
+ % render "layouts/basic.html", tab: :references do
2
+
3
+ ## References
4
+
5
+ %# An example of how to write a references page:
6
+ %#### Documents
7
+ %#
8
+ %#* Block Guides
9
+ %# * [FTFL Block Guide](http://compass.freescale.net/go/ftflspecs)
10
+ %# * [FTFE Block Guide](http://compass.freescale.net/go/ftfespecs)
11
+ %# * [FTFA Block Guide](http://compass.freescale.net/go/ftflspecs)
12
+ %#* Hardmacro Creation Guides
13
+ %# * [TFSL Creation Guide](http://compass.freescale.net/go/tfsspec)
14
+ %# * [TFSE Creation Guide](http://compass.freescale.net/go/tfsspec)
15
+ %#* Training
16
+ %# * [FTFL Overview](http://compass.freescale.net/livelink/livelink/207024304/FTFL_Overview.ppt?func=doc.Fetch&nodeid=207024304)
17
+ %#* Quality
18
+ %# * [Quality Level Cheatsheet](http://compass.freescale.net/livelink/livelink/227376170/SOC_3.6_NVM_Quality_Level_1409_C90TFS.xlsx?func=doc.Fetch&nodeid=227376170)
19
+ %#
20
+ %#### Origen
21
+ %#
22
+ %#* [Origen Documentation](http://origen.freescale.net)
23
+ %#* [Origen Freeshare Commmunity](http://freeshare.freescale.net:2222/public/origen-cmty-svc/Pages/PublicHome.aspx)
24
+ %#
25
+ %#### Design Sync Vaults
26
+ %#
27
+ %#* C90TFS NVM Test Module
28
+ %# * <%= Origen.config.vault %>
29
+ %#* FTFL Design
30
+ %# * sync://sync-15040:15040/Projects/nvm_c90tfsw/ftfl
31
+ %# * sync://sync-15040:15040/Projects/nvm_c90tfsw/ftfl_firmware
32
+ %#* FTFE Design
33
+ %# * sync://sync-15040:15040/Projects/nvm_c90ftfe/ftfe
34
+ %# * sync://sync-15040:15040/Projects/nvm_c90ftfe/ftfe_firmware
35
+ %#* FTFA Design
36
+ %# * sync://sync-15040:15040/Projects/nvm_c90tfsw/ftfa
37
+ %# * sync://sync-15040:15040/Projects/nvm_c90tfsw/ftfa_firmware
38
+
39
+ % end
@@ -0,0 +1,5 @@
1
+ % render "layouts/basic.html", tab: :release do
2
+
3
+ <%= render "#{Origen.root}/doc/history" %>
4
+
5
+ % end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: origen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen McGinty
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-24 00:00:00.000000000 Z
11
+ date: 2015-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -664,7 +664,7 @@ files:
664
664
  - lib/tasks/gem.rake
665
665
  - origen_site_config.yml
666
666
  - source_setup
667
- - spec/format/rgen_formatter.rb
667
+ - spec/format/origen_formatter.rb
668
668
  - templates/api_doc/README.txt.erb
669
669
  - templates/code_generators/gemfile_app.rb
670
670
  - templates/code_generators/gemfile_plugin.rb
@@ -681,8 +681,6 @@ files:
681
681
  - templates/nanoc/config.yaml
682
682
  - templates/nanoc/content/favicon.ico
683
683
  - templates/nanoc/layouts/bootstrap.html.erb
684
- - templates/nanoc/layouts/bootstrap3.html.erb
685
- - templates/nanoc/layouts/freescale.html.erb
686
684
  - templates/nanoc/lib/bootstrap_filter.rb
687
685
  - templates/nanoc/lib/codeblocks_filter.rb
688
686
  - templates/nanoc/lib/default.rb
@@ -709,6 +707,17 @@ files:
709
707
  - templates/test/set3/content.html.erb
710
708
  - templates/time/filter.rb.erb
711
709
  - templates/time/rules.rb.erb
710
+ - templates/web/archive.md.erb
711
+ - templates/web/contact.md.erb
712
+ - templates/web/docs/environment/definitions.md.erb
713
+ - templates/web/docs/environment/installation.md.erb
714
+ - templates/web/docs/environment/introduction.md.erb
715
+ - templates/web/index.md.erb
716
+ - templates/web/layouts/_basic.html.erb
717
+ - templates/web/layouts/_doc.html.erb
718
+ - templates/web/partials/_navbar.html.erb
719
+ - templates/web/references.md.erb
720
+ - templates/web/release_notes.md.erb
712
721
  homepage: http://origen-sdk.org
713
722
  licenses:
714
723
  - LGPL-3
@@ -1,71 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8">
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
- <meta name="viewport" content="width=device-width, initial-scale=1">
7
-
8
- <title><%= @item[:title] %></title>
9
- <% if @item[:description] %>
10
- <meta name="description" content="<%= @item[:description] %>">
11
- <% end %>
12
- <% if @item[:author] %>
13
- <meta name="author" content="<%= @item[:author] %>">
14
- <% end %>
15
-
16
- <!-- Le styles -->
17
- <link href="http://rgen.freescale.net/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet">
18
- <link href="http://rgen.freescale.net/css/bootstrap_custom.css" rel="stylesheet">
19
- <link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet">
20
-
21
- <!--[if lt IE 9]>
22
- <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
23
- <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
24
- <![endif]-->
25
- <!-- Fav and touch icons -->
26
- <link rel="shortcut icon" href="http://rgen.freescale.net/favicon.ico"/>
27
- <link rel="icon" type="image/ico" href="http://rgen.freescale.net/favicon.ico"/>
28
- </head>
29
-
30
- <body class="freescale">
31
-
32
- <div id="wrap">
33
- <div id="wrapper">
34
- <% if @item[:full_width] %>
35
- <% if @item[:yammer_share].nil? || @item[:yammer_share] %>
36
- <div id="yj-share-button"></div>
37
- <% end %>
38
- <%= yield %>
39
- <% else %>
40
- <div class="container" id="top-level-container">
41
- <% if @item[:yammer_share].nil? || @item[:yammer_share] %>
42
- <div id="yj-share-button"></div>
43
- <% end %>
44
- <%= yield %>
45
- </div>
46
- <% end %>
47
-
48
- <div id="push"></div>
49
- </div>
50
- </div>
51
-
52
- <div id=footer>
53
- <div class="container" style="padding-top:20px">
54
- <p class="pull-left">
55
- Freescale Internal Use Only
56
- </p>
57
- <p class="pull-right">&copy; Copyright <%= Time.now.year %> Freescale, Inc. All Rights Reserved</p>
58
- </div>
59
- <div>
60
-
61
- <script src="http://rgen.freescale.net/js/jquery.min.js"></script>
62
- <script src="http://rgen.freescale.net/bootstrap/3.2.0/js/bootstrap.min.js"></script>
63
- <script src="http://rgen.freescale.net/js/lunr.min.js"></script>
64
- <script src="http://rgen.freescale.net/js/highlight.js"></script>
65
- <script src="http://rgen.freescale.net/js/custom.js"></script>
66
- <% if @item[:yammer_share].nil? || @item[:yammer_share] %>
67
- <script type="text/javascript" src="https://c64.assets-yammer.com/assets/platform_social_buttons.min.js"></script>
68
- <script type="text/javascript">yam.platform.yammerShare();</script>
69
- <% end %>
70
- </body>
71
- </html>
@@ -1,79 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml">
4
- <head>
5
- <title><%= @item[:title] %></title>
6
- <% if @item[:description] %>
7
- <meta name="description" content="<%= @item[:description] %>">
8
- <% end %>
9
- <% if @item[:author] %>
10
- <meta name="author" content="<%= @item[:author] %>">
11
- <% end %>
12
- <link rel="shortcut icon" href="http://rgen.freescale.net/favicon.ico"/>
13
- <link rel="icon" type="image/ico" href="http://rgen.freescale.net/favicon.ico"/>
14
- <link href="http://swo.freescale.net/css/fsl.css" rel="stylesheet"
15
- type="text/css" />
16
- <link href="http://swo.freescale.net/css/leftnav.css" rel=
17
- "stylesheet" type="text/css" />
18
- <script language="JavaScript" src=
19
- "http://swo.freescale.net/jscripts/FSLHeader.js" type=
20
- "text/javascript">
21
- </script>
22
-
23
- <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
24
- <!--[if lt IE 9]>
25
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
26
- <![endif]-->
27
-
28
- <link href="http://rgen.freescale.net/css/fsl.css" rel="stylesheet" type="text/css" media="all">
29
- </head>
30
-
31
- <body>
32
- <a name="top" id="top"></a>
33
- <script language="JavaScript" type="text/javascript">
34
- HideDropDowns = true;
35
- WriteFSHeader();
36
- </script>
37
- <table width="100%">
38
- <tr>
39
- <td valign="top"><!-- BEGIN LEFT NAVIGATION, IF DESIRED -->
40
- </td>
41
-
42
- <td width="100%" valign="top">
43
- <% if false %>
44
- <div class="breadcrumbs">
45
- <a href="index.htm">Home Page</a>
46
- This Page
47
- </div>
48
- <% end %>
49
- <!-- Page Header -->
50
- <table width="100%">
51
- <tr>
52
- <td>
53
- <h1><%= @item[:title] %></h1>
54
- </td>
55
- </tr>
56
- </table>
57
-
58
- <table width="100%">
59
- <tr><!-- Begin Left Column -->
60
- <td valign="top">
61
- <%= yield %>
62
- </td>
63
- </tr>
64
- </table>
65
-
66
- </td>
67
- </tr>
68
- </table>
69
- <div>
70
- <p>Generated with <a href="http://rgen.freescale.net" target="_blank" title="RGen">RGen</a>
71
- </p>
72
- </div>
73
- <script language="JavaScript" type="text/javascript">
74
- Contact = 'mailto:stephen.mcginty@freescale.com';
75
- POPI = "FIUO"
76
- WriteFooter();
77
- </script>
78
- </body>
79
- </html>