AdBanner reopen new banner and delete. Rename title with content editable tag.

This commit is contained in:
Matthew K. Fu JuYuan 2012-05-16 16:42:43 +08:00
parent a31a9c4792
commit befd3bcdec
10 changed files with 73 additions and 11 deletions

View File

@ -0,0 +1,41 @@
<%#= encoding: utf-8 %>
$(function() {
var content_holder, content;
var selector = 'li[contenteditable="true"]';
// prevent clicks inside editable area to fire
// a click event on the body
// and therefor saving our content before we even edit it
$(selector).click(function(e) {
e.stopPropagation();
});
// initialize the "save" function
$(selector).focus(function(e) {
content_holder = $(this);
content = content_holder.html();
// one click outside the editable area saves the content
$('body').one('click', function(e) {
// but not if the content didn't change
if ($(e.target).is(selector) || content == content_holder.html()) {
return;
}
$.ajax({
url: content_holder.data('edit-url'),
type: 'POST',
dataType: 'json',
data: { body: content_holder.html() },
success: function(json) {
alert("<%= I18n.t("admin.contenteditable.update_done") %>");
//content_holder.effect('highlight', {'color': '#0f0'}, 3000);
},
error: function() {
alert("<%= I18n.t("admin.contenteditable.update_failed") %>");
//content_holder.effect('highlight', {'color': '#f00'}, 3000);
content_holder.html(content);
}
});
});
});
});

View File

@ -4,6 +4,11 @@ class Admin::AdBannersController < OrbitBackendController
before_filter :for_app_manager,:except => [:index,:show] before_filter :for_app_manager,:except => [:index,:show]
before_filter :for_app_sub_manager before_filter :for_app_sub_manager
def rename
@ad_banner = AdBanner.find(params[:id])
@ad_banner.title = Nokogiri::HTML.fragment(params["body"]).at("a").children().to_s
render :json => {:success =>@ad_banner.save!}
end
def destroy def destroy
@ad_banner = AdBanner.find(params[:id]) @ad_banner = AdBanner.find(params[:id])
@ad_banner.destroy @ad_banner.destroy

View File

@ -172,11 +172,10 @@ module ApplicationHelper
locale.to_sym == I18n.locale ? 'active in': '' locale.to_sym == I18n.locale ? 'active in': ''
end end
<<<<<<< HEAD
def at_least_module_manager def at_least_module_manager
is_manager? || is_admin? is_manager? || is_admin?
end end
=======
def dislpay_view_count(object) def dislpay_view_count(object)
"#{t(:view_count)}: #{object.view_count}" "#{t(:view_count)}: #{object.view_count}"
end end

View File

@ -26,7 +26,9 @@
</ul> </ul>
<% if at_least_module_manager %> <% if at_least_module_manager %>
<%= show_ad_banner_permission_link ad_banner_tab%> <%= show_ad_banner_permission_link ad_banner_tab%>
<%= link_to t('admin.ad.delete_banner'),admin_ad_banner_path(ad_banner_tab),:class => 'btn',:method => :delete,:confirm => t('sure?') %>
<% end -%> <% end -%>
<%#= render :partial => 'new_add_banner_file', :object => ad_banner_tab.ad_images.build, :locals => { :field_name => "new_ad_images[]", :f => f, :classes => "r_destroy" } %> <%#= render :partial => 'new_add_banner_file', :object => ad_banner_tab.ad_images.build, :locals => { :field_name => "new_ad_images[]", :f => f, :classes => "r_destroy" } %>
</div> </div>
<%#= render :partial => 'preview_block',:locals=> {:ad_banner =>ad_banner_tab} %> <%#= render :partial => 'preview_block',:locals=> {:ad_banner =>ad_banner_tab} %>

View File

@ -30,6 +30,7 @@
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<span id="ad_banner-modal-info"></span>
<%= f.submit t('submit'), :class=>'btn btn-primary',:remote=>true %> <%= f.submit t('submit'), :class=>'btn btn-primary',:remote=>true %>
<a class="btn" data-dismiss="modal"><%= t('cancel')%></a> <a class="btn" data-dismiss="modal"><%= t('cancel')%></a>
</div> </div>

View File

@ -1 +1 @@
alert("Error occures:<%= @ad_banner.errors.full_messages%>"); $("#ad_banner-modal-info").append("<%= @ad_banner.errors.full_messages.join(',')%>");

View File

@ -4,21 +4,23 @@
<% content_for :page_specific_javascript do -%> <% content_for :page_specific_javascript do -%>
<%= javascript_include_tag "/static/jquery.cycle.all.latest.js" %> <%= javascript_include_tag "/static/jquery.cycle.all.latest.js" %>
<%= javascript_include_tag "inc/modal-preview" %> <%= javascript_include_tag "inc/modal-preview" %>
<%= javascript_include_tag "lib/contenteditable" %>
<% end -%> <% end -%>
<div id="post-body-content" class="clear"> <div id="post-body-content" class="clear">
<ul id="banner_tab" class="nav nav-tabs"> <ul id="banner_tab" class="nav nav-tabs">
<% @ad_banners.each do |ab| %> <% @ad_banners.each do |ab| %>
<%= content_tag :li,link_to(ab.title,"##{ab.title.dehumanize}",:data=>{:toggle=>"tab"}),:class => (ab == @active ? 'active' : nil ) %> <%= content_tag :li,link_to(ab.title,"##{ab.title.dehumanize}",:data=>{:toggle=>"tab"}),:class => (ab == @active ? 'active' : nil ), :contenteditable=>"true" ,"data-edit-url"=>(admin_rename_ad_banner_path ab)%>
<% end -%> <% end -%>
<%#= content_tag :li,link_to(t("admin.ad.new_banner"),"#new-a-banner",:data=>{:toggle=>"modal"}),:id=>'new_ad_banner_tab_but',:class => (@active.nil? ? 'active' : nil ) %> <%= content_tag :li,link_to(t("admin.ad.new_banner"),"#new-a-banner",:data=>{:toggle=>"modal"}),:id=>'new_ad_banner_tab_but',:class => (@active.nil? ? 'active' : nil ) %>
</ul> </ul>
<div class="tab-content"> <div class="tab-content" id="ad_banner-tab-content">
<%= render :partial => 'ad_banner_tab',:collection => @ad_banners %> <%= render :partial => 'ad_banner_tab',:collection => @ad_banners %>
</div> </div>
<%#= render :partial => "modal_ad_banner_form"%> <%= render :partial => "modal_ad_banner_form"%>
</div> </div>

View File

@ -1,8 +1,14 @@
$('<%= escape_javascript(content_tag(:li,link_to(@ad_banner.title,"##{@ad_banner.title}",:data=>{:toggle=>"tab"}))) %>').insertBefore("#new_ad_banner_tab_but"); $('<%= escape_javascript(content_tag(:li,link_to(@ad_banner.title,"##{@ad_banner.title}",:data=>{:toggle=>"tab"}))) %>').insertBefore("#new_ad_banner_tab_but");
$('<%= escape_javascript(render(:partial => "ad_banner_tab",:locals => {:ad_banner_tab => @ad_banner})) %>').insertBefore($("#new-a-banner")); $('<%= escape_javascript(render(:partial => "ad_banner_tab",:locals => {:ad_banner_tab => @ad_banner})) %>').insertAfter($("#ad_banner-tab-content").children(".tab-pane").last());
$('.modal').modal('hide'); $('.modal').modal('hide');
$("#ad_banner-modal-info").empty();
$("#new-a-banner form").each(function(){this.reset();});
$('#new-a-banner').unbind(); $('#new-a-banner').unbind();
$('#post-body-content').find(".nav.nav-tabs").children('li.active').removeClass("active"); $('#post-body-content').find(".nav.nav-tabs").children('li.active').removeClass("active");
$("#ad_banner-tab-content").children(".tab-pane").removeClass("active");
$('#post-body-content').find(".nav.nav-tabs").children('li[id!="new_ad_banner_tab_but"]').last().addClass("active"); $('#post-body-content').find(".nav.nav-tabs").children('li[id!="new_ad_banner_tab_but"]').last().addClass("active");
$("#ad_banner-tab-content").children(".tab-pane").last().addClass("active");

View File

@ -82,8 +82,9 @@ zh_tw:
sec_place_holder: 3秒請輸入3 sec_place_holder: 3秒請輸入3
ab_fx: 轉場特效 ab_fx: 轉場特效
all_banners: 輪播清單 all_banners: 輪播清單
cate_auth: 分類授權
banner_best_size: Banner 尺寸 banner_best_size: Banner 尺寸
cate_auth: 分類授權
delete_banner: 刪除整組輪播
new_banner: 新增輪播 new_banner: 新增輪播
new_image: 新增橫幅 new_image: 新增橫幅
showing: 顯示中 showing: 顯示中
@ -115,6 +116,9 @@ zh_tw:
choose_file: 請選擇一個文件... choose_file: 請選擇一個文件...
class: 階級 class: 階級
content: 內容 content: 內容
contenteditable:
update_done: 更新完成
update_failed: 更新失敗
create_error_link: 新增連接時出錯。 create_error_link: 新增連接時出錯。
create_error_page: 新增頁面時出錯。 create_error_page: 新增頁面時出錯。
create_success_home: 首頁已成功新增。 create_success_home: 首頁已成功新增。

View File

@ -37,6 +37,8 @@ Orbit::Application.routes.draw do
match 'ad_banners/:id/preview' => 'ad_banners#realtime_preview',:as => :realtime_preview_ad_banner,:via => :put match 'ad_banners/:id/preview' => 'ad_banners#realtime_preview',:as => :realtime_preview_ad_banner,:via => :put
match 'ad_banners/:id/rename' => 'ad_banners#rename',:as => :rename_ad_banner,:via => :post
resources :ad_banners do resources :ad_banners do
collection do collection do
match 'new_ad_image' => 'ad_images#new',:as => :new_ad_image,:via => :get match 'new_ad_image' => 'ad_images#new',:as => :new_ad_image,:via => :get