514 lines
21 KiB
Plaintext
514 lines
21 KiB
Plaintext
<% content_for :page_specific_css do %>
|
|
<%= stylesheet_link_tag "lib/main-forms" %>
|
|
<%= stylesheet_link_tag "lib/fileupload" %>
|
|
<%= stylesheet_link_tag "lib/main-list" %>
|
|
<% end %>
|
|
<% content_for :page_specific_javascript do %>
|
|
<%= javascript_include_tag "lib/bootstrap-fileupload" %>
|
|
<%= javascript_include_tag "lib/bootstrap-datetimepicker" %>
|
|
<%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %>
|
|
<%= javascript_include_tag "lib/file-type" %>
|
|
<%= javascript_include_tag "lib/module-area" %>
|
|
<%= javascript_include_tag "validator" %>
|
|
<% end %>
|
|
|
|
<!-- Input Area -->
|
|
<div class="input-area">
|
|
|
|
<!-- Module Tabs -->
|
|
<div class="nav-name"><strong><%= t(:module) %></strong></div>
|
|
<ul class="nav nav-pills module-nav">
|
|
<li class="active"><a href="#basic" data-toggle="tab"><%= t(:basic) %></a></li>
|
|
<li><a href="#settings" data-toggle="tab"><%= t("act.settings") %></a></li>
|
|
<li><a href="#status" data-toggle="tab"><%= t(:status) %></a></li>
|
|
<li><a href="#tag" data-toggle="tab"><%= t(:tags) %></a></li>
|
|
<li><a href="#imageupload" data-toggle="tab"><%= t('act.image') %></a></li>
|
|
</ul>
|
|
|
|
<!-- Module -->
|
|
<div class="tab-content module-area">
|
|
|
|
<!-- Basic Module -->
|
|
<div class="tab-pane fade in active" id="basic">
|
|
|
|
<!-- Category -->
|
|
<div class="control-group">
|
|
<label class="control-label muted"><%= t(:category) %></label>
|
|
<div class="controls">
|
|
<%= select_category(f, @module_app) %>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- postdate Time Picker -->
|
|
<div class="control-group">
|
|
<label class="control-label muted"><%= t('act.postdate') %></label>
|
|
<div class="controls">
|
|
<%= f.datetime_picker :postdate, :no_label => true, :new_record => @act.new_record? %>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- end_date Time Picker -->
|
|
<div class="control-group">
|
|
<label class="control-label muted"><%= t('act.end_date') %></label>
|
|
<div class="controls">
|
|
<%= f.datetime_picker :end_date, :no_label => true, :new_record => @act.new_record? %>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Act Date Time Picker -->
|
|
<div class="control-group">
|
|
<label class="control-label muted"><%= t('act.act_start_date') %></label>
|
|
<div class="controls">
|
|
<%= f.datetime_picker :act_start_date, :no_label => true, :new_record => @act.new_record? %>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<label class="control-label muted"><%= t('act.act_end_date') %></label>
|
|
<div class="controls">
|
|
<%= f.datetime_picker :act_end_date, :no_label => true, :new_record => @act.new_record? %>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Sign up Date Time Picker -->
|
|
<div class="control-group">
|
|
<label class="control-label muted"><%= t('act.sign_start_date') %></label>
|
|
<div class="controls">
|
|
<%= f.datetime_picker :sign_start_date, :no_label => true, :new_record => @act.new_record? %>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="control-group">
|
|
<label class="control-label muted"><%= t('act.sign_end_date') %></label>
|
|
<div class="controls">
|
|
<%= f.datetime_picker :sign_end_date, :no_label => true, :new_record => @act.new_record? %>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Sign up -->
|
|
<div class="control-group">
|
|
<label class="control-label muted"><%= t('act.is_sign_up') %></label>
|
|
<div class="controls">
|
|
<label class="radio inline"><%= f.radio_button :sign_up, "yes", checked: @act.sign_up == true ? true : false %><%= t(:yes_) %></label>
|
|
<label class="radio inline"><%= f.radio_button :sign_up, "no", checked: @act.sign_up == false ? true : false %><%= t(:no_) %></label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="control-group" style="display: none;" id="external_link_check_box">
|
|
<%= f.label :is_external_link, t("act.is_external_link"), :class => "control-label muted" %>
|
|
<div class="controls">
|
|
<%= f.check_box :is_external_link %>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 新增:是否需先註冊才能報名 -->
|
|
<div class="control-group" style="display: none;" id="need_pre_register_box">
|
|
<label class="control-label muted"><%= t('act.need_pre_register') %></label>
|
|
<div class="controls">
|
|
<label class="radio inline"><%= f.radio_button :need_pre_register, "true", checked: @act.need_pre_register == true %><%= t(:yes_) %></label>
|
|
<label class="radio inline"><%= f.radio_button :need_pre_register, "false", checked: @act.need_pre_register != true %><%= t(:no_) %></label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="control-group" style="display: none;" id="external_link_box">
|
|
<%= f.label :external_link, t("act.external_link"), :class => "control-label muted" %>
|
|
<div class="controls">
|
|
<%= f.text_field :external_link %>
|
|
<div class="hint"><%= t("act.external_link_hint") %></div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="tab-pane fade" id="settings">
|
|
<table class="table table-bordered table-condensed">
|
|
<thead>
|
|
<tr>
|
|
<th><%= t('act.field_name') %></th>
|
|
<% @site_in_use_locales.each do |locale| %>
|
|
<th><%= t('act.field_label') %> (<%= t(locale.to_s) %>)</th>
|
|
<% end %>
|
|
<th><%= t('act.field_enabled') %></th>
|
|
<th><%= t('act.required') %></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<% [
|
|
[:name, :enabled_name, :has_name],
|
|
[:tel, :enabled_tel, :has_tel],
|
|
[:phone, :enabled_phone, :has_phone],
|
|
[:fax, :enabled_fax, :has_fax],
|
|
[:email, :enabled_email, :has_email],
|
|
[:idno, :enabled_idno, :has_idno],
|
|
[:sex, :enabled_sex, :has_sex],
|
|
[:birthday, :enabled_birthday, :has_birthday],
|
|
[:organization, :enabled_organization, :has_organization],
|
|
[:title, :enabled_title, :has_title],
|
|
[:address, :enabled_address, :has_address],
|
|
[:emergency_contact_number, :enabled_emergency_contact_number, :has_emergency_contact_number],
|
|
[:emergency_contact_person, :enabled_emergency_contact_person, :has_emergency_contact_person],
|
|
[:vegetarian, :enabled_vegetarian, :has_vegetarian],
|
|
[:note, :enabled_note, :has_note],
|
|
].each do |key, enabled_field, has_field| %>
|
|
<tr>
|
|
<td><%= t("act.has_#{key}") %></td>
|
|
<% @site_in_use_locales.each do |locale| %>
|
|
<td>
|
|
<%= f.fields_for "signup_label_#{key}_translations" do |lf| %>
|
|
<%= lf.text_field locale,
|
|
value: (@act.send("signup_label_#{key}_translations")[locale.to_s].presence || I18n.with_locale(locale){ I18n.t("act_signup.#{key}") }),
|
|
placeholder: I18n.with_locale(locale){ I18n.t("act_signup.#{key}") },
|
|
class: "input-medium" %>
|
|
<% end %>
|
|
</td>
|
|
<% end %>
|
|
<td class="text-center">
|
|
<%= f.check_box enabled_field, class: "act-enabler", data: { target: "required_#{key}" } %>
|
|
</td>
|
|
<td id="required_<%= key %>" <%= @act.send(enabled_field) ? '' : 'style="display:none;"' %>>
|
|
<label class="radio inline">
|
|
<%= f.radio_button has_field, "yes", checked: @act.send(has_field) == true %><%= t(:yes_) %>
|
|
</label>
|
|
<label class="radio inline">
|
|
<%= f.radio_button has_field, "no", checked: @act.send(has_field) != true %><%= t(:no_) %>
|
|
</label>
|
|
</td>
|
|
</tr>
|
|
<% end %>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- Status Module -->
|
|
|
|
<div class="tab-pane fade" id="status">
|
|
<!-- Status -->
|
|
<div class="control-group">
|
|
<label class="control-label muted"><%= t(:status) %></label>
|
|
<div class="controls" data-toggle="buttons-checkbox">
|
|
<label class="checkbox inline btn <%= 'active' if @act.is_top? || (!@act.top_end_date.nil? && @act.top_end_date > Time.now) %>">
|
|
<%= f.check_box :is_top %> <%= t(:top) %>
|
|
</label>
|
|
<label class="checkbox inline btn <%= 'active' if @act.is_hot? %>">
|
|
<%= f.check_box :is_hot %> <%= t(:hot) %>
|
|
</label>
|
|
<label class="checkbox inline btn <%= 'active' if @act.is_hidden? %>">
|
|
<%= f.check_box :is_hidden %> <%= t(:hide) %>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="control-group <%= @act.is_top? || (!@act.top_end_date.nil? && @act.top_end_date > Time.now) ? "" : "hide" %>" data-for="is_top">
|
|
<label for="" class="control-label muted"><%= t('act.top_end_date') %></label>
|
|
<div class="controls">
|
|
<%= f.datetime_picker :top_end_date, :no_label => true, :new_record => @act.new_record? %>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Tag Module -->
|
|
<div class="tab-pane fade" id="tag">
|
|
<div class="control-group">
|
|
<label class="control-label muted"><%= t(:tags) %></label>
|
|
<%= select_tags(f, @module_app) %>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Images Module -->
|
|
<div class="tab-pane fade" id="imageupload">
|
|
|
|
<!-- Images Upload -->
|
|
<div class="control-group">
|
|
<label class="control-label muted"><%= t(:image) %></label>
|
|
<div class="controls">
|
|
<div class="fileupload fileupload-new clearfix <%= 'fileupload-edit' if @act.image.file %>" data-provides="fileupload">
|
|
<div class="fileupload-new thumbnail pull-left">
|
|
<% if @act.image.file %>
|
|
<%= image_tag @act.image %>
|
|
<% else %>
|
|
<img src="http://www.placehold.it/50x50/EFEFEF/AAAAAA" />
|
|
<% end %>
|
|
</div>
|
|
<div class="fileupload-preview fileupload-exists thumbnail pull-left"></div>
|
|
<span class="btn btn-file">
|
|
<span class="fileupload-new"><%= t(:select_image) %></span>
|
|
<span class="fileupload-exists"><%= t(:change) %></span>
|
|
<%= f.file_field :image %>
|
|
</span>
|
|
<a href="#" class="btn fileupload-exists" data-dismiss="fileupload"><%= t(:cancel) %></a>
|
|
<div class="controls" data-toggle="buttons-checkbox">
|
|
<label class="checkbox inline btn btn-danger fileupload-remove">
|
|
<%= f.check_box :remove_image %><%= t(:remove) %>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<% @site_in_use_locales.each do |locale| %>
|
|
<%= f.fields_for :image_description_translations do |f| %>
|
|
<div class="control-group">
|
|
<label class="control-label muted" for="image_description_<%= locale.to_s %>"><%= t(:description) + " (#{t(locale.to_s)})" %></label>
|
|
<div class="controls">
|
|
<%= f.text_field locale, value: (@act.image_description_translations[locale.to_s] rescue nil) %>
|
|
</div>
|
|
</div>
|
|
<% end %>
|
|
<% end %>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- Language Tabs -->
|
|
<div class="nav-name"><strong><%= t(:language) %></strong></div>
|
|
<ul class="nav nav-pills language-nav">
|
|
<% @site_in_use_locales.each_with_index do |locale, i| %>
|
|
<li class="<%= 'active' if i == 0 %>">
|
|
<a data-toggle="tab" href=".<%= locale %>"><%= t(locale) %></a>
|
|
</li>
|
|
<% end %>
|
|
</ul>
|
|
|
|
<!-- Language -->
|
|
<div class="tab-content language-area">
|
|
|
|
<% @site_in_use_locales.each_with_index do |locale, i| %>
|
|
|
|
<div class="<%= locale %> tab-pane fade <%= ( i == 0 ) ? "in active" : '' %>">
|
|
|
|
<!-- Title-->
|
|
<div class="control-group input-title">
|
|
<label class="control-label muted"><%= t(:title) %></label>
|
|
<div class="controls">
|
|
<%= f.fields_for :title_translations do |f| %>
|
|
<%= f.text_area locale, class: "ckeditor_reduce input-block-level", placeholder: t(:title), value: (@act.title_translations[locale] rescue nil) %>
|
|
<% end %>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Subtitle-->
|
|
<div class="control-group input-title">
|
|
<label class="control-label muted"><%= t(:subtitle) %></label>
|
|
<div class="controls">
|
|
<%= f.fields_for :subtitle_translations do |f| %>
|
|
<%= f.text_area locale, class: "ckeditor input-block-level", placeholder: t(:subtitle), value: (@act.subtitle_translations[locale] rescue nil) %>
|
|
<% end %>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Content -->
|
|
<div class="control-group input-content">
|
|
<label class="control-label muted"><%= t('act.content') %></label>
|
|
<div class="controls">
|
|
<div class="textarea">
|
|
<%= f.fields_for :content_translations do |f| %>
|
|
<%= f.cktext_area locale, rows: 5, class: "input-block-level", :value => (@act.content_translations[locale] rescue nil) %>
|
|
<% end %>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Place-->
|
|
<div class="control-group input-title">
|
|
<label class="control-label muted"><%= t('act.place') %></label>
|
|
<div class="controls">
|
|
<%= f.fields_for :place_translations do |f| %>
|
|
<%= f.text_field locale, class: "input-block-level", placeholder: t('act.place'), value: (@act.place_translations[locale] rescue nil) %>
|
|
<% end %>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Note -->
|
|
<div class="control-group input-subtitle">
|
|
<label class="control-label muted"><%= t('act.note') %></label>
|
|
<div class="controls">
|
|
<div class="textarea">
|
|
<%= f.fields_for :note_translations do |f| %>
|
|
<%= f.text_area locale, rows: 2, class: "input-block-level", value: (@act.note_translations[locale] rescue nil) %>
|
|
<% end %>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
<% end %>
|
|
|
|
<!-- Link -->
|
|
<div class="control-group">
|
|
<label class="control-label muted"><%= t(:link) %></label>
|
|
<div class="controls add-input">
|
|
|
|
<!-- Exist -->
|
|
<% if @act && !@act.act_links.blank? %>
|
|
<div class="exist">
|
|
<% @act.act_links.each_with_index do |act_link, i| %>
|
|
<%= f.fields_for :act_links, act_link do |f| %>
|
|
<%= render :partial => 'form_link', :object => act_link, :locals => {:f => f, :i => i} %>
|
|
<% end %>
|
|
<% end %>
|
|
<hr>
|
|
</div>
|
|
<% end %>
|
|
|
|
<!-- Add -->
|
|
<div class="add-target">
|
|
</div>
|
|
<p class="add-btn">
|
|
<%= hidden_field_tag 'act_link_field_count', @act.act_links.count %>
|
|
<a id="add_link" class="trigger btn btn-small btn-primary"><i class="icons-plus"></i> <%= t(:add) %></a>
|
|
</p>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<!-- File -->
|
|
<div class="control-group">
|
|
<label class="control-label muted"><%= t(:file_) %></label>
|
|
<div class="controls">
|
|
|
|
<!-- Exist -->
|
|
<% if @act && !@act.act_files.blank? %>
|
|
<div class="exist">
|
|
<% @act.act_files.each_with_index do |act_file, i| %>
|
|
<%= f.fields_for :act_files, act_file do |f| %>
|
|
<%= render :partial => 'form_file', :object => act_file, :locals => {:f => f, :i => i} %>
|
|
<% end %>
|
|
<% end %>
|
|
<hr>
|
|
</div>
|
|
<% end %>
|
|
|
|
<!-- Add -->
|
|
<div class="add-target">
|
|
</div>
|
|
<p class="add-btn">
|
|
<%= hidden_field_tag 'act_file_field_count', @act.act_files.count %>
|
|
<a id="add_file" class="trigger btn btn-small btn-primary"><i class="icons-plus"></i> <%= t(:add) %></a>
|
|
</p>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- Form Actions -->
|
|
<div class="form-actions">
|
|
<%= get_referer_url[:action] rescue "" %>
|
|
<%= f.submit t('submit'), class: 'btn btn-primary' %>
|
|
<input type="hidden" name="referer_url" value="<%= get_referer_url %>">
|
|
<%= link_to t('cancel'), admin_actives_path, :class=>"btn" %>
|
|
</div>
|
|
|
|
<% content_for :page_specific_javascript do %>
|
|
<script>
|
|
$(function() {
|
|
$("#act_is_top").parent().on("click",function(){
|
|
setTimeout(function(){
|
|
if($("#act_is_top").parent().hasClass("active")){
|
|
$("div[data-for=is_top]").removeClass("hide");
|
|
}else{
|
|
$("div[data-for=is_top]").addClass("hide");
|
|
$("div[data-for=is_top]").find("input[type=text]").val("");
|
|
}
|
|
},100)
|
|
})
|
|
$(".act-enabler").on("change",function(){
|
|
var target = "#" + $(this).data("target");
|
|
if($(this).is(":checked")){
|
|
$(target).show();
|
|
}else{
|
|
$(target).hide();
|
|
}
|
|
});
|
|
$("#main-wrap").after("");
|
|
|
|
$(document).on('click', '#add_link', function(){
|
|
var new_id = $(this).prev().attr('value');
|
|
var old_id = new RegExp("new_act_links", "g");
|
|
var on = $('.language-nav li.active').index();
|
|
var le = $(this).parent('.add-btn').prev('.add-target').children('.start-line').length;
|
|
$(this).prev().attr('value', parseInt(new_id) + 1);
|
|
$(this).parent().siblings('.add-target').append(("<%= escape_javascript(add_attribute 'form_link', f, :act_links) %>").replace(old_id, new_id));
|
|
$(this).parent('.add-btn').prev('.add-target').children('.start-line').eq(le).children('.tab-content').children('.tab-pane').eq(on).addClass('in active').siblings().removeClass('in active');
|
|
formTip();
|
|
});
|
|
$(document).on('click', '#add_file', function(){
|
|
var new_id = $(this).prev().attr('value');
|
|
var old_id = new RegExp("new_act_files", "g");
|
|
var on = $('.language-nav li.active').index();
|
|
var le = $(this).parent('.add-btn').prev('.add-target').children('.start-line').length;
|
|
$(this).prev().attr('value', parseInt(new_id) + 1);
|
|
$(this).parent().siblings('.add-target').append(("<%= escape_javascript(add_attribute 'form_file', f, :act_files) %>").replace(old_id, new_id));
|
|
$(this).parent('.add-btn').prev('.add-target').children('.start-line').eq(le).children('.input-append').find('.tab-content').each(function() {
|
|
$(this).children('.tab-pane').eq(on).addClass('in active').siblings().removeClass('in active');
|
|
});
|
|
formTip();
|
|
});
|
|
$(document).on('click', '.delete_link', function(){
|
|
$(this).parents('.input-prepend').remove();
|
|
});
|
|
$(document).on('click', '.delete_file', function(){
|
|
$(this).parents('.input-prepend').remove();
|
|
});
|
|
$(document).on('click', '.remove_existing_record', function(){
|
|
if(confirm("<%= I18n.t(:sure?)%>")){
|
|
$(this).children('.should_destroy').attr('value', 1);
|
|
$(this).parents('.start-line').hide();
|
|
}
|
|
});
|
|
|
|
$('#remind-check').prop('checked') ? '':$('.content-box').addClass('hide')
|
|
$('#remind-check').on('change', function() {
|
|
$(this).prop('checked') ? $('.content-box').removeClass('hide'):$('.content-box').addClass('hide')
|
|
});
|
|
|
|
$("#act_is_external_link").on("change",function(){
|
|
if($(this).is(":checked") && $("input[name=\"act[sign_up]\"]:checked").val()=='yes'){
|
|
$("#external_link_box").show();
|
|
$("#need_pre_register_box").hide();
|
|
$("input[name=\"act[need_pre_register]\"][value='false']").prop("checked", true);
|
|
}else{
|
|
$("#external_link_box").hide();
|
|
if($("input[name=\"act[sign_up]\"]:checked").val()=='yes'){
|
|
$("#need_pre_register_box").show();
|
|
}else{
|
|
$("#need_pre_register_box").hide();
|
|
}
|
|
}
|
|
}).trigger('change');
|
|
|
|
$("input[name=\"act[sign_up]\"]").change(function(){
|
|
if($("input[name=\"act[sign_up]\"]:checked").val()=='yes'){
|
|
$("#external_link_check_box").show();
|
|
}else{
|
|
$("#external_link_check_box").hide();
|
|
$("#need_pre_register_box").hide();
|
|
$("input[name=\"act[need_pre_register]\"][value='false']").prop("checked", true);
|
|
}
|
|
$("#act_is_external_link").trigger('change')
|
|
}).trigger('change');
|
|
var config = {}
|
|
config.autoGrow_minHeight = 50;
|
|
config.allowedContent = false;
|
|
config.disallowedContent = 'img';
|
|
config.toolbar = [
|
|
{ name: 'clipboard', items: [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ] },
|
|
{ name: 'editing', items: [ 'Find', 'Replace', '-', 'SelectAll', '-', 'Scayt' ] },
|
|
|
|
{ name: 'basicstyles', items: [ 'Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'CopyFormatting', 'RemoveFormat' ] },
|
|
'/',
|
|
{ name: 'insert', items: [ 'SpecialChar'] },
|
|
{ name: 'styles', items: [ 'Font' ] },
|
|
{ name: 'colors', items: [ 'TextColor', 'BGColor' ] }
|
|
];
|
|
|
|
var ckeditor_reduce = $('.ckeditor_reduce')
|
|
ckeditor_reduce.each(function(i,v){
|
|
CKEDITOR.replace(v,config);
|
|
});
|
|
});
|
|
</script>
|
|
<% end %>
|