Links edition

This commit is contained in:
chris2tof 2011-05-13 09:08:42 +08:00
parent d9ba76ebd5
commit 24ae7ed5e3
31 changed files with 184 additions and 98 deletions

View File

@ -6,12 +6,14 @@ class Admin::ItemsController < ApplicationController
before_filter :find_parent_item before_filter :find_parent_item
before_filter :find_snippets, :only => :index before_filter :find_snippets, :only => :index
before_filter :is_admin? before_filter :is_admin?
before_filter :set_current_item
def index def index
if params[:item_id] if params[:item_id]
@page = Item.find(params[:item_id]) @item = Item.find(params[:item_id])
else else
@page = Item.first(:conditions => {:parent_id => nil}) @item = Item.first(:conditions => {:parent_id => nil})
@page = @item
end end
end end

View File

@ -1,18 +1,19 @@
class Admin::LinksController < ApplicationController class Admin::LinksController < ApplicationController
layout "admin" layout "content"
before_filter :authenticate_user! before_filter :authenticate_user!
before_filter :find_parent_item before_filter :find_parent_item
before_filter :is_admin? before_filter :is_admin?
def show def show
#TODO @link ||= Link.find(params[:id])
end end
def new def new
@link = Link.new @link = Link.new
@link.is_published = true @link.is_published = true
@link.parent_id = @parent_item.id rescue nil @link.parent_id = Page.find(params[:parent_id]).id rescue nil
end end
def edit def edit
@ -24,9 +25,16 @@ class Admin::LinksController < ApplicationController
@link = Link.new(params[:link]) @link = Link.new(params[:link])
if @link.save if @link.save
flash[:notice] = t('admin.create_success_link') flash.now[:notice] = t('admin.create_success_link')
redirect_to admin_items_url( :parent_id => @link.parent_id ) respond_to do |format|
format.html {
redirect_to admin_link_url(@link)
}
format.js {}
end
else else
flash.now[:error] = t('admin.create_error_link')
@i18n_variable = @link.i18n_variable
render :action => "new" render :action => "new"
end end
end end
@ -35,9 +43,16 @@ class Admin::LinksController < ApplicationController
@link = Link.find(params[:id]) @link = Link.find(params[:id])
if @link.update_attributes(params[:link]) if @link.update_attributes(params[:link])
flash[:notice] = t('admin.update_success_link') flash.now[:notice] = t('admin.update_success_link')
redirect_to admin_items_url( :parent_id => @link.parent_id ) respond_to do |format|
format.html {
redirect_to admin_link_url(@link)
}
format.js {}
end
else else
flash.now[:error] = t('admin.update_error_link')
@i18n_variable = @link.i18n_variable
render :action => "edit" render :action => "edit"
end end
end end
@ -46,8 +61,16 @@ class Admin::LinksController < ApplicationController
@link = Link.find(params[:id]) @link = Link.find(params[:id])
@link.destroy @link.destroy
@link.destroy_i18n_variable @link.destroy_i18n_variable
end
redirect_to admin_items_url( :parent_id => @link.parent_id ) def delete
destroy
respond_to do |format|
format.html {
redirect_to admin_items_url
}
format.js {}
end
end end
end end

View File

@ -1,12 +1,21 @@
class Admin::PagesController < ApplicationController class Admin::PagesController < ApplicationController
layout "content" layout "content"
before_filter :authenticate_user! before_filter :authenticate_user!
before_filter :find_parent_item before_filter :find_parent_item
before_filter :is_admin? before_filter :is_admin?
before_filter :set_current_item
def show def show
#TODO @page = Page.find(params[:id])
respond_to do |format|
format.html {
@item = @page
render 'admin/items/index'
}
format.js {}
end
end end
def new def new

View File

@ -52,4 +52,8 @@ class ApplicationController < ActionController::Base
@site_valid_locales = @site.valid_locales @site_valid_locales = @site.valid_locales
end end
def set_current_item
session[:current_page] = params[:id] || @page.id || @link.id || @item.id rescue nil
end
end end

View File

@ -49,25 +49,35 @@ module ApplicationHelper
end end
end end
def render_node_and_children(node, current_name = 'home') def render_node_and_children(node)
ret = '' ret = ''
if node if node
case node._type
when 'Page'
dest = admin_page_path(:id => node.id)
when 'Link'
dest = admin_link_path(:id => node.id)
end
ret << "<li>" ret << "<li>"
ret << (link_to node.name, admin_items_path(:item_id => node.id), :remote => true, :class => (current_name.eql?(node.name) ? 'sidebar_no_link' : 'sidebar_link')) ret << (link_to node.name, dest)
ret << render_children(node) if node.children.size > 0 ret << ' | ' << (link_to 'new_link', new_admin_link_path(:parent_id => node.id)) if node._type.eql?('Page')
ret << ' | ' << (link_to t(:delete), delete_admin_link_path(node, :authenticity_token => form_authenticity_token), :confirm => t('sure?'), :class => 'delete') if node._type.eql?('Link')
ret << render_children(node)
ret << "</li>" ret << "</li>"
end end
ret.html_safe ret.html_safe
end end
def render_children(parent) def render_children(parent)
if children = parent.children
ret = '' ret = ''
ret << "<ul>" ret << "<ul>"
parent.children.each do |child| children.each do |child|
ret << render_node_and_children(child) ret << render_node_and_children(child)
end end
ret << "</ul>" ret << "</ul>"
ret ret
end end
end
end end

View File

@ -1,11 +0,0 @@
<td><%= item.class %></td>
<td><%= link_to item.name, admin_items_path(:parent_id => item.id) %></td>
<td><%= item.i18n_variable[I18n.locale] rescue nil %>
<td><%= item.position %></td>
<td><%= item.is_published.to_s %></td>
<td>
<%= link_to t(:show), item.url %> |
<%= link_to t(:edit), edit_admin_page_path(item) %> |
<%= link_to t(:delete), admin_page_path(item), :confirm => t('sure?'), :method => :delete %>
</td>

View File

@ -0,0 +1 @@
<%= render_node_and_children(Item.first(:conditions => {:parent_id => nil})) %>

View File

@ -1,55 +1,24 @@
<% content_for :sidebar do %> <% content_for :sidebar do %>
<div id='sidebar'><%= render 'layouts/site_map_left_bar' %></div> <div id='sidebar'><%= render 'admin/items/site_map_left_bar' %></div>
<% end -%> <% end -%>
<% content_for :page_specific_javascript do %> <% content_for :page_specific_javascript do %>
<script type="text/javascript" charset="utf-8"> <!-- <script type="text/javascript" charset="utf-8">
$('a.sidebar_link').live( "click", function(){ $('a.sidebar_link').live( "click", function(){
$(this).removeClass('sidebar_link'); $(this).removeClass('sidebar_link');
$('.sidebar_no_link').addClass('sidebar_link'); $('.sidebar_no_link').addClass('sidebar_link');
$('.sidebar_no_link').removeClass('sidebar_no_link'); $('.sidebar_no_link').removeClass('sidebar_no_link');
$(this).addClass('sidebar_no_link'); $(this).addClass('sidebar_no_link');
}); });
</script> </script> -->
<% end -%> <% end -%>
<% content_for :page_specific_css do %> <% content_for :page_specific_css do %>
<style type="text/css"> <!-- <style type="text/css">
.sidebar_no_link { .sidebar_no_link {
pointer-events: none; pointer-events: none;
cursor: default; cursor: default;
} }
</style> </style> -->
<% end %> <% end %>
<%= render "admin/#{@item._type.downcase.pluralize}/show" %>
<%= render 'layouts/page' %>
<!-- <%= flash_messages %>
<h1><%= t('admin.list_items') %>: <%= show_parent_items_link unless @parent_item.nil? %></h1>
<% if !Layout.exist_one? %>
<div style='color:red'><%= t('admin.no_layout') %>: <%= link_to t('create').downcase, new_admin_layout_path %></div>
<br/>
<% else %>
<table>
<tr>
<th><%= t('admin.class') %></th>
<th><%= t('admin.name') %></th>
<th><%= t('admin.title') %></th>
<th><%= t('admin.position') %></th>
<th><%= t('admin.published?') %></th>
<th><%= t('admin.action') %></th>
<th></th>
</tr>
<% @items.each do |item| %>
<tr>
<%= render :partial => item.class.to_s.downcase, :locals => { :item => item } %>
<!--<td><%= link_to t(:move_up, :scope => :admin), up_admin_item_path(item), :method => :put %> |
<%= link_to t(:move_down, :scope => :admin), down_admin_item_path(item), :method => :put %></td>-->
</tr>
<% end if @items %>
</table>
<% end %>
<%= render :partial => "snippets", :locals => { :snippets => @snippets } %> -->

View File

@ -1,9 +1,9 @@
$('#main').empty(); $('#main').empty();
switch ("<%= escape_javascript(@page._type)%>") { switch ("<%= escape_javascript(@item._type)%>") {
case 'Link': case 'Link':
$('#main').append("TODO: page to edit the link"); $('#main').append("<%= escape_javascript(render(:partial => 'admin/links/show')) %>");
break; break;
case 'Page': case 'Page':
$('#main').append("<%= escape_javascript(render(:partial => 'layouts/page')) %>"); $('#main').append("<%= escape_javascript(render(:partial => 'page')) %>");
break; break;
}; };

View File

@ -0,0 +1,12 @@
<h1><%= t('admin.editing_link') %></h1>
<%= flash_messages %>
<%= form_for @link, :url => admin_link_path(@link), :html => { :class => 'form' } do |f| %>
<%= render :partial => "admin/links/form", :locals => { :f => f } %>
<p>
<%= f.submit t(:update) %> <%= link_back %>
</p>
<% end %>

View File

@ -0,0 +1,13 @@
<h1><%= t('admin.new_link') %></h1>
<%= flash_messages %>
<%= form_for @link, :url => admin_links_path, :html => { :class => 'form' } do |f| %>
<%= render :partial => "admin/links/form", :locals => { :f => f } %>
<p>
<%= f.submit t(:create) %> <%= link_back %>
</p>
<% end %>

View File

@ -0,0 +1,24 @@
<%= flash_messages %>
<p>
<b><%= t('admin.name') %></b>
<%= @link.name %>
</p>
<% @site_valid_locales.each do |locale| %>
<p>
<b><%= "#{t('admin.title')} #{locale}" %></b>
<%= @link.i18n_variable[locale] if @link.i18n_variable %>
</p>
<% end %>
<p>
<b><%= t('admin.is_published') %></b>
<%= @link.is_published.to_s %>
</p>
<p>
<b><%= t('admin.url') %></b>
<%= @link.url %>
</p>
<%= link_to t(:edit), edit_admin_link_path(@link) %>

View File

@ -0,0 +1,2 @@
$('#sidebar').html("<%= escape_javascript(render(:partial => 'admin/items/site_map_left_bar')) %>");
$('#main').html("<%= escape_javascript(render(:partial => 'admin/links/show')) %>");

View File

@ -0,0 +1 @@
$('#sidebar').html("<%= escape_javascript(render(:partial => 'admin/items/site_map_left_bar')) %>");

View File

@ -1,10 +1,5 @@
<h1><%= t('admin.editing_link') %></h1> <% content_for :sidebar do %>
<div id='sidebar'><%= render 'admin/items/site_map_left_bar' %></div>
<% end -%>
<%= form_for @link, :url => admin_link_path(@link) do |f| %> <%= render 'edit' %>
<%= render :partial => "form", :locals => { :f => f } %>
<p>
<%= f.submit t(:update) %> <%= link_back %>
</p>
<% end %>

View File

@ -0,0 +1 @@
$('#main').html("<%= escape_javascript(render(:partial => 'admin/links/edit')) %>");

View File

@ -1,11 +1,5 @@
<h1><%= t('admin.new_link') %></h1> <% content_for :sidebar do %>
<div id='sidebar'><%= render 'admin/items/site_map_left_bar' %></div>
<% end -%>
<%= form_for @link, :url => admin_links_path do |f| %> <%= render 'new' %>
<%= render :partial => "form", :locals => { :f => f } %>
<p>
<%= f.submit t(:create) %> <%= link_back %>
</p>
<% end %>

View File

@ -0,0 +1 @@
$('#main').html("<%= escape_javascript(render(:partial => 'admin/links/new')) %>");

View File

@ -0,0 +1,5 @@
<% content_for :sidebar do %>
<div id='sidebar'><%= render 'admin/items/site_map_left_bar' %></div>
<% end -%>
<%= render 'show' %>

View File

@ -0,0 +1 @@
$('#main').html("<%= escape_javascript(render(:partial => 'show')) %>");

View File

@ -0,0 +1 @@
$('#main').html("<%= escape_javascript(render(:partial => 'admin/links/show')) %>");

View File

@ -0,0 +1 @@
<%= parse_page(@page).html_safe %>

View File

@ -0,0 +1 @@
<%= render 'show' %>

View File

@ -0,0 +1 @@
$('#main').html("<%= escape_javascript(render(:partial => 'show')) %>");

View File

@ -1 +0,0 @@
<%= parse_page(@page).html_safe if @page._type.eql?('Page') %>

View File

@ -1 +0,0 @@
<%= render_node_and_children(@page) %>

View File

@ -2,12 +2,13 @@
<html> <html>
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><%= @title %></title> <title><%= @title || 'R4 rescue title' %></title>
<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 "easy", "main", "devise", "content", :media => "screen, projection" %> <%= stylesheet_link_tag "easy", "main", "devise", "content", :media => "screen, projection" %>
<%= stylesheet_link_tag "easyprint", :media => "print" %> <%= stylesheet_link_tag "easyprint", :media => "print" %>
<%= javascript_include_tag "jquery", "jquery-ui", "rails", "easy", "application", :cache => 'all' %> <%= javascript_include_tag "jquery", "jquery-ui", "rails", "easy", :cache => 'all' %>
<%= javascript_include_tag "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" %>

View File

@ -88,11 +88,13 @@ en:
title: Title title: Title
translation: Translation translation: Translation
type: Type type: Type
update_error_link: Error when updating link.
update_success_home: Homepage was successfully updated. update_success_home: Homepage was successfully updated.
update_success_layout: Layout was successfully updated. update_success_layout: Layout was successfully updated.
update_success_link: Link was successfully updated. update_success_link: Link was successfully updated.
update_success_page: Page was successfully updated. update_success_page: Page was successfully updated.
update_success_snippet: Snippet was successfully updated. update_success_snippet: Snippet was successfully updated.
url: URL
user_info: User information user_info: User information
user_role: User role user_role: User role

View File

@ -85,11 +85,13 @@ zh_tw:
title: 標題 title: 標題
translation: 翻譯 translation: 翻譯
type: 類型 type: 類型
update_error_link: 更新鏈接時出現錯誤。
update_success_home: 首頁已成功更新。 update_success_home: 首頁已成功更新。
update_success_layout: 樣板已成功更新。 update_success_layout: 樣板已成功更新。
update_success_link: 連結已成功更新。 update_success_link: 連結已成功更新。
update_success_page: 頁面已成功更新。 update_success_page: 頁面已成功更新。
update_success_snippet: 片段已成功更新。 update_success_snippet: 片段已成功更新。
url: URL
user_info: 用戶資料 user_info: 用戶資料
user_role: 用戶角色 user_role: 用戶角色

View File

@ -43,7 +43,11 @@ PrototypeR4::Application.routes.draw do
end end
resources :layouts resources :layouts
resources :links resources :links do
member do
get 'delete'
end
end
resources :pages resources :pages
resources :homes resources :homes
resources :snippets resources :snippets

View File

@ -1,2 +1,21 @@
// Place your application-specific JavaScript functions and classes here // Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults // This file is automatically included by javascript_include_tag :defaults
$(function () {
$('#sidebar a, #main a').live('click',
function () {
$.getScript(this.href);
history.pushState(null, document.title, this.href);
return false;
}
);
$('.form').live('submit', function () {
$.post(this.action, $(this).serialize(), null, 'script');
return false;
});
$(window).bind("popstate", function () {
$.getScript(location.href);
});
});