Clean code for layout and modifications in dev.rake

This commit is contained in:
chris2tof 2011-08-22 13:45:21 +08:00
parent e74f2931b1
commit 7a4ad240a8
22 changed files with 226 additions and 159 deletions

View File

@ -1,54 +0,0 @@
class Admin::LayoutsController < ApplicationController
layout "admin"
before_filter :authenticate_user!
before_filter :is_admin?
def index
@layouts = Layout.all.entries
end
def show
#TODO
# @layout = Layout.find(params[:id])
# redirect_to "/#{@layout.name}"
end
def new
@layout = Layout.new
end
def edit
@layout = Layout.find(params[:id])
end
def create
@layout = Layout.new(params[:layout])
if @layout.save
flash[:notice] = t('admin.create_success_layout')
redirect_to admin_layouts_url
else
render :action => 'new'
end
end
def update
@layout = Layout.find(params[:id])
if @layout.update_attributes(params[:layout])
flash[:notice] = t('admin.update_success_layout')
redirect_to admin_layouts_url
else
render :action => "edit"
end
end
def destroy
@layout = Layout.find(params[:id])
@layout.destroy
redirect_to admin_layouts_url
end
end

View File

@ -3,6 +3,8 @@ class Admin::PurchasesController < ApplicationController
require "uri" require "uri"
require 'zip/zip' require 'zip/zip'
layout "admin"
def index def index
@purchases = Purchase.all.entries @purchases = Purchase.all.entries
end end

View File

@ -1,6 +1,8 @@
class SitesController < ApplicationController class Admin::SitesController < ApplicationController
#layout 'set_up' layout "admin"
before_filter :authenticate_user!
before_filter :is_admin?
def index def index
@site = Site.first @site = Site.first

View File

@ -12,6 +12,8 @@ class Design
validates_presence_of :title validates_presence_of :title
validates_presence_of :author validates_presence_of :author
has_many :pages
embeds_one :layout embeds_one :layout
mount_uploader :structure_css, AssetUploader mount_uploader :structure_css, AssetUploader

View File

@ -1,14 +1,11 @@
class Page < Item class Page < Item
#include LayoutSupport
field :content field :content
field :design_name field :design_name
field :design_id
validates_presence_of :design_name, :design_id validates_presence_of :design_name, :design_id
referenced_in :design belongs_to :design
has_many :page_parts has_many :page_parts
def create_parts def create_parts

View File

@ -1,6 +1,7 @@
<% content_for :secondary do %> <% content_for :secondary do %>
<ul class="list"> <ul class="list">
<li><%= link_to t(:new_design, :scope => :admin), new_admin_design_path, :class => 'button positive' %></li> <li><%= link_to t(:new_design, :scope => :admin), new_admin_design_path %></li>
<li><%= link_to t('admin.upload_design'), upload_package_admin_designs_path %></li>
</ul> </ul>
<% end -%> <% end -%>

View File

@ -1,14 +0,0 @@
<p>
<%= f.label :name, t('admin.name') %>
<%= f.text_field :name, :class => 'text' %>
</p>
<p>
<%= f.label :description, t('admin.description') %>
<%= f.text_field :description, :class => 'text' %>
</p>
<p>
<%= f.label "content", t('admin.content') %>
<%= f.text_area :content, :size => '100x30' %>
</p>

View File

@ -1,9 +0,0 @@
<h1><%= t('admin.editing_layout') %></h1>
<%= form_for @layout, :url => admin_layout_path(@layout) do |f| %>
<%= f.error_messages %>
<%= render :partial => "form", :locals => { :f => f } %>
<p>
<%= f.submit t('update') %> <%= link_back %>
</p>
<% end %>

View File

@ -1,28 +0,0 @@
<% content_for :secondary do %>
<ul class="list">
<li><%= link_to t(:new_layout, :scope => :admin), new_admin_layout_path, :class => 'button positive' %></li>
</ul>
<% end -%>
<%= flash_messages %>
<h1><%= t('admin.list_layouts') %></h1>
<table>
<tr>
<th><%= t('admin.name') %></th>
<th><%= t('admin.description') %></th>
<th><%= t('admin.action') %></th>
</tr>
<% @layouts.each do |layout| %>
<tr>
<td><%= layout.name %></td>
<td><%= layout.description %></td>
<td>
<%= link_to t(:edit), edit_admin_layout_path(layout) %> |
<%= link_to t(:delete), admin_layout_path(layout), :confirm => t('sure?'), :method => :delete %>
</td>
</tr>
<% end %>
</table>

View File

@ -1,10 +0,0 @@
<h1><%= t('admin.new_layout') %></h1>
<%= form_for :layout, :url => admin_layouts_path do |f| %>
<%= f.error_messages %>
<%= render :partial => "form", :locals => { :f => f } %>
<p>
<%= f.submit t('create') %> <%= link_back %>
</p>
<% end %>

View File

@ -28,13 +28,12 @@
</div> </div>
<div id="header"> <div id="header">
<h1>RulingSite <%= t('admin.admin') %></h1> <h1>RulingSite <%= t('admin.admin') %></h1>
<ul id="nav"> <ul id="nav">
<li><%= link_to t('homepage'), root_path %></li> <li><%= link_to t('homepage'), root_path %></li>
<li><%= link_to t('admin.layout'), admin_layouts_path %></li> <li><%= link_to t('admin.item'), admin_items_path %></li>
<li><%= link_to t('admin.design'), admin_designs_path %></li> <li><%= link_to t('admin.design'), admin_designs_path %></li>
<li><%= link_to t('admin.purchase'), admin_purchases_path %></li>
<li><%= link_to t('admin.asset'), admin_assets_path %></li> <li><%= link_to t('admin.asset'), admin_assets_path %></li>
<li><%= link_to t('admin.user_info'), admin_user_info_models_path %></li> <li><%= link_to t('admin.user_info'), admin_user_info_models_path %></li>
<li><%= link_to t('admin.user_role'), admin_user_role_models_path %></li> <li><%= link_to t('admin.user_role'), admin_user_role_models_path %></li>

View File

@ -6,9 +6,9 @@
<link rel="shortcut icon" href="/favicon.ico"> <link rel="shortcut icon" href="/favicon.ico">
<%= yield :page_specific_link %> <%= yield :page_specific_link %>
<%= stylesheet_link_tag "content", :media => "screen, projection" %> <%= stylesheet_link_tag "content", :media => "screen, projection" %>
<%= javascript_include_tag :ckeditor %> <%#= javascript_include_tag :ckeditor %>
<%= javascript_include_tag "jquery", "jquery-ui", "rails", "easy", "application", :cache => 'all' %> <%#= javascript_include_tag "jquery", "jquery-ui", "rails", "easy", "application", :cache => 'all' %>
<%= yield :page_specific_javascript %> <%= yield :page_specific_javascript %>
<!--[if IE]> <!--[if IE]>
<%= stylesheet_link_tag "ie", :media => "screen, projection" %> <%= stylesheet_link_tag "ie", :media => "screen, projection" %>
@ -21,7 +21,8 @@
<ul id="panel_nav"> <ul id="panel_nav">
<li><%= link_to t('homepage'), root_path %></li> <li><%= link_to t('homepage'), root_path %></li>
<li><%= link_to t('admin.item'), admin_items_path %></li> <li><%= link_to t('admin.item'), admin_items_path %></li>
<li><%= link_to t('admin.layout'), admin_layouts_path %></li> <li><%= link_to t('admin.design'), admin_designs_path %></li>
<li><%= link_to t('admin.purchase'), admin_purchases_path %></li>
<li><%= link_to t('admin.asset'), admin_assets_path %></li> <li><%= link_to t('admin.asset'), admin_assets_path %></li>
<li><%= link_to t('admin.user_info'), admin_user_info_models_path %></li> <li><%= link_to t('admin.user_info'), admin_user_info_models_path %></li>
<li><%= link_to t('admin.user_role'), admin_user_role_models_path %></li> <li><%= link_to t('admin.user_role'), admin_user_role_models_path %></li>

View File

@ -2,8 +2,6 @@ PrototypeR4::Application.routes.draw do
devise_for :users devise_for :users
resources :sites
# routes for sinatra app # routes for sinatra app
match '/site/set_registered', :to => CentralServerExchangeApp match '/site/set_registered', :to => CentralServerExchangeApp
match '/site/public_key', :to => CentralServerExchangeApp match '/site/public_key', :to => CentralServerExchangeApp
@ -20,7 +18,6 @@ PrototypeR4::Application.routes.draw do
end end
end end
resources :items resources :items
resources :layouts
resources :links do resources :links do
member do member do
get 'delete' get 'delete'
@ -37,7 +34,7 @@ PrototypeR4::Application.routes.draw do
get 'download' get 'download'
end end
end end
resources :homes resources :sites
resources :snippets resources :snippets
resources :translations resources :translations
resources :user_info_models resources :user_info_models

85
lib/fraisier/README.txt Normal file
View File

@ -0,0 +1,85 @@
Naming convention:
1 - The file names can only be changed inside themes, javascripts and images.
2 - File names must not contain spaces, spaces must be replace by underscores
3 - CSS files can only have the extensions ".css" or ".scss"
4 - Javascript files must have the extension ".js"
5 - Image files can have any extension
Package content:
My_design.zip
- info.json
- layout.html
- structure.css
- themes
- default.css
- blue.css
- red.css
- javascripts
- one.js
- two.js
- images
- pic.jpg
- pic_1.png
- pic_2.jpg
- README
"info.json" file:
Content:
{
"title": "your_title",
"author": "your_author",
"intro": "your_intro"
}
Title: it's the title of your design as it's going to appeared in your website, it can contain spaces
Author: it's the name of the creator of the design
Intro: it's introduction that can contain more details about your design
"layout.html" file:
This HTML file can contain 3 types of elements: headers, blocks and footers.
Each element defining a header, a block or a footer must be a <div>.
Furthermore, each of those <div> must include an <layout_part> as follow:
<div ID="div_1" class="header">
<r:layout_part ID="div_1" class="header" name="header_1">
// Your code here
</r:layout_part>
</div>
Attributes convention:
- each pair of <div> and <layout_part> tags, must have the same ID and class.
- the <r:layout_part> tag as one more attribute: "name", it must contain the type of the element followed by the number of the element (if you have 2 header elements, you will have "header_1" and "header_2"
Javascripts and stylsheets:
The links to your javascript files and stylesheet files must be encapsulated respectively in <r:javascripts></r:javascripts> and <stylesheets></stylesheets> tags.
"strucutre.css" file:
The stylesheet file contains the structure of the page, it reference elements by their ID.
In this file, you can set structural attributes like "width", "height", "position"…
Themes:
Themes are stylesheet files that modify the visual aspects of the page.
The themes folder must contain at least one file named "default.css" that will be the default theme.
Themes stylesheets reference elements by class.
They can set attributes like "color", "background-image", "border"…
Javascripts:
This folder contains the javascript files used by the design.
Images:
This folder contains the images used by the design.
They can have the extensions ".jpg", ".png"...

5
lib/fraisier/info.json Normal file
View File

@ -0,0 +1,5 @@
{
"title": "Fraisier",
"author": "Paul",
"intro": "Strawberry cake"
}

37
lib/fraisier/layout.html Normal file
View File

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>RulingSite</title>
<r:stylesheets>
<!-- your stylesheets here -->
</r:stylesheets>
<r:javascripts>
<!-- your javascripts here -->
</r:javascripts>
</head>
<body>
<!-- example -->
<div id="header_top" class="header">
<r:layout_part id='header_top' class='header' name='header_1'>
</r:layout_part>
</div>
<div id="header_bottom" class="header">
<r:layout_part id='header_bottom' class='header' name='header_2'>
</r:layout_part>
</div>
<div id="main_content" class="content">
<r:layout_part id="main_content" class='content' name='block_1' editable="true">
</r:layout_part>
</div>
<div id="footer" class="footer">
<r:layout_part id="footer" class='footer' name='footer_1'>
</r:layout_part>
</div>
<!-- END example -->
</body>
</html>

View File

@ -0,0 +1,2 @@
/* This stylesheet file contains the structure of the page, it reference elements by their ID.
In this file, you can set structural attributes like "width", "height", "position" */

View File

@ -0,0 +1,2 @@
/* This stylesheet file contains the visual aspect of the page, it reference elements by their class.
In this file, you can set visual attributes like "color", "background-color", "border" */

View File

@ -64,8 +64,19 @@ module Parser
res res
end end
c.define_tag 'stylesheets' do |tag| c.define_tag 'stylesheets' do |tag|
contents = tag.expand res = ''
contents.to_html res << "<link href='#{page.design.structure_css.url}' rel='stylesheet' type='text/css' /> "
page.design.themes.each do |theme|
res << "<link href='#{theme.file.url}' rel='stylesheet' type='text/css' /> "
end
res
end
c.define_tag 'javascripts' do |tag|
res = ''
page.design.javascripts.each do |js|
res << "<script type='text/javascript' src='#{js.file.url}'></script>"
end
res
end end
c.define_tag 'image' do |tag| c.define_tag 'image' do |tag|
asset = Asset.find(tag.attr['id']) asset = Asset.find(tag.attr['id'])
@ -163,8 +174,19 @@ module Parser
end end
end end
c.define_tag 'stylesheets' do |tag| c.define_tag 'stylesheets' do |tag|
contents = tag.expand res = ''
contents.to_html res << "<link href='#{page.design.structure_css.url}' rel='stylesheet' type='text/css' />"
page.design.themes.each do |theme|
res << "<link href='#{theme.file.url}' rel='stylesheet' type='text/css' />"
end
res
end
c.define_tag 'javascripts' do |tag|
res = ''
page.design.javascripts.each do |js|
res << "<script type='text/javascript' src='#{js.file.url}'></script>"
end
res
end end
c.define_tag 'layout_part' do |tag| c.define_tag 'layout_part' do |tag|
part = page.page_parts.detect{ |p| p.name.to_s == tag.attr['name'].to_s } part = page.page_parts.detect{ |p| p.name.to_s == tag.attr['name'].to_s }

View File

@ -11,7 +11,7 @@ namespace :dev do
include include
end.each(&:drop) end.each(&:drop)
Site.create!( :valid_locales => [ 'en', 'zh_tw' ], :in_use_locales => [ 'zh_tw', 'en' ] ) Site.create( :school => 'The Best School', :department => 'Awesome', :valid_locales => [ 'en', 'zh_tw' ], :in_use_locales => [ 'zh_tw', 'en' ])
user = User.new( :email => 'chris@rulingcom.com', :password => 'password', :password_confirmation => 'password', :admin => true, :active_roles => ['teacher']) user = User.new( :email => 'chris@rulingcom.com', :password => 'password', :password_confirmation => 'password', :admin => true, :active_roles => ['teacher'])
user.user_roles.build(:key => 'teacher', :discipline_en => 'Database', :discipline_zh_tw => '資料庫' ) user.user_roles.build(:key => 'teacher', :discipline_en => 'Database', :discipline_zh_tw => '資料庫' )
@ -50,22 +50,50 @@ namespace :dev do
uim_1.save! uim_1.save!
layout = Layout.create!( :name => 'root', :description => 'root', :content => File.open("#{Rails.root}/lib/template/root.layout").read ) # layout = Layout.create!( :name => 'root', :description => 'root', :content => File.open("#{Rails.root}/lib/template/root.layout").read )
layout.layout_parts.create!( :name => 'header', :content => File.open("#{Rails.root}/lib/template/nav.snippet").read ) # layout.layout_parts.create!( :name => 'header', :content => File.open("#{Rails.root}/lib/template/nav.snippet").read )
layout.layout_parts.create!( :name => 'main_content', :editable => true ) # layout.layout_parts.create!( :name => 'main_content', :editable => true )
layout.layout_parts.create!( :name => 'footer', :content => File.open("#{Rails.root}/lib/template/footer.snippet").read ) # layout.layout_parts.create!( :name => 'footer', :content => File.open("#{Rails.root}/lib/template/footer.snippet").read )
#
# home = Page.create!( :i18n_variable_id => var_10.id, :layout_id => layout.id, :name => 'home', :is_published => true )
# home.page_parts.create!( :name => 'main_content', :content => File.open("#{Rails.root}/lib/template/home.page").read, :kind => 'text', :i18n_variable_id => var_13.id )
#
# about = Page.create!( :i18n_variable_id => var_11.id, :layout_id => layout.id, :name => 'about', :is_published => true, :parent_id => home.id )
# about.page_parts.create!( :name => 'main_content', :content => File.open("#{Rails.root}/lib/template/about.page").read, :kind => 'text', :i18n_variable_id => var_14.id )
home = Page.create!( :i18n_variable_id => var_10.id, :layout_id => layout.id, :name => 'home', :is_published => true ) # Link.create!( :i18n_variable_id => var_12.id, :name => 'google', :is_published => true, :parent_id => home.id, :url => 'www.google.com' )
home.page_parts.create!( :name => 'main_content', :content => File.open("#{Rails.root}/lib/template/home.page").read, :kind => 'text', :i18n_variable_id => var_13.id ) #
# ["nav", "footer"].each do |page_name|
# Snippet.create!( :name => page_name, :parent_id => home.id, :content => File.open("#{Rails.root}/lib/template/#{page_name}.snippet").read )
# end
about = Page.create!( :i18n_variable_id => var_11.id, :layout_id => layout.id, :name => 'about', :is_published => true, :parent_id => home.id ) design = Design.new(:title => "Fraisier", :author => "Paul", :intro => "Strawberry cake")
about.page_parts.create!( :name => 'main_content', :content => File.open("#{Rails.root}/lib/template/about.page").read, :kind => 'text', :i18n_variable_id => var_14.id )
Link.create!( :i18n_variable_id => var_12.id, :name => 'google', :is_published => true, :parent_id => home.id, :url => 'www.google.com' ) design.structure_css = File.open("#{Rails.root}/lib/fraisier/structure.css")
["nav", "footer"].each do |page_name| # image = design.images.build(:file => File.open("#{Rails.root}/lib/fraisier/img/buttons.gif"))
Snippet.create!( :name => page_name, :parent_id => home.id, :content => File.open("#{Rails.root}/lib/template/#{page_name}.snippet").read ) #
end # js = design.javascripts.build(:file => File.open("#{Rails.root}/lib/fraisier/inettuts.js"))
#
# theme = design.themes.build(:file => File.open("#{Rails.root}/lib/fraisier/inettuts.js.css"))
design.build_layout
design.layout.file = File.open("#{Rails.root}/lib/fraisier/layout.html")
design.layout.save
# theme.save
# image.save
# js.save
design.save
design.layout.layout_parts.create!( :name => 'header_1')
design.layout.layout_parts.create!( :name => 'header_2')
design.layout.layout_parts.create!( :name => 'block_1')
design.layout.layout_parts.create!( :name => 'footer_1')
home = Page.create!( :i18n_variable_id => var_10.id, :design_id => design.id, :name => 'home', :is_published => true )
home.page_parts.create!( :name => 'header_1', :kind => 'text')
end end