address field. js and style is broken
This commit is contained in:
parent
be448d42c9
commit
a85e5fcc0d
|
@ -0,0 +1,80 @@
|
|||
jQuery(document).ready(function($) {
|
||||
// Stuff to do as soon as the DOM is ready. Use $() w/o colliding with other libs;
|
||||
var current_textarea = {};
|
||||
current_textarea['en'] = $("textarea[for=en]").val();
|
||||
current_textarea['zh_tw'] = $("textarea[for=zh_tw]").val();
|
||||
$("div.controls").on("click","a.edit-btn",function(){
|
||||
switch($(this).parent().parent().find("ul li.active a").attr("href")){
|
||||
case ".tab1":
|
||||
$("#tab3").addClass("active in");
|
||||
$(".modal-body li").eq(0).addClass("active");
|
||||
break;
|
||||
case ".tab2":
|
||||
$("#tab4").addClass("active in");
|
||||
$(".modal-body li").eq(1).addClass("active");
|
||||
break;
|
||||
}
|
||||
var lang = ["en","zh_tw"];
|
||||
for(i=0;i<2;i++){
|
||||
|
||||
var sa = $(".tab-content input.street_address_"+lang[i]).val();
|
||||
var city = $(".tab-content input.city_"+lang[i]).val();
|
||||
var county = $(".tab-content input.county_"+lang[i]).val();
|
||||
var zip = $(".tab-content input.zip_"+lang[i]).val();
|
||||
var country = $(".tab-content input.country_"+lang[i]).val();
|
||||
$(".modal-body").find('#street_address_'+lang[i]).val(sa)
|
||||
$(".modal-body").find('#city_'+lang[i]).val(city);
|
||||
$(".modal-body").find('#counties_'+lang[i]).val(county);
|
||||
$(".modal-body").find('#zip_'+lang[i]).val(zip);
|
||||
$(".modal-body").find('#country_'+lang[i]).val(country);
|
||||
var verify = sa + city + country +county + zip;
|
||||
var combined = "";
|
||||
if(verify!="")
|
||||
combined = sa + "\n" + city + "\n" + county + "\n" + zip + "\n" + country;
|
||||
|
||||
if($(".tab-content textarea[for="+lang[i]+"]").val() != combined){
|
||||
$(".tab-content").find('#street_address_'+lang[i]).val($(".tab-content textarea[for="+lang[i]+"]").val());
|
||||
$(".modal-body input").val("");
|
||||
}
|
||||
}
|
||||
})
|
||||
$("textarea.dummy").change(function(){
|
||||
var lang = $(this).attr("for");
|
||||
if(current_textarea[lang] != $(this).val())
|
||||
$("input.indicator_"+lang).val("true");
|
||||
else
|
||||
$("input.indicator_"+lang).val("false");
|
||||
})
|
||||
|
||||
$(".address-edit").on("hidden",function(){
|
||||
$("#tab3").removeClass("active in");
|
||||
$("#tab4").removeClass("active in");
|
||||
$(".modal-body li").removeClass("active");
|
||||
$(".modal-body input, .modal-body textarea").val("");
|
||||
|
||||
})
|
||||
$(".bt-save").click(function(){
|
||||
var lang = ["en","zh_tw"];
|
||||
for(i=0;i<2;i++){
|
||||
var sa = $(".tab-content").find('#street_address_'+lang[i]).val();
|
||||
var city = $(".tab-content").find('#city_'+lang[i]).val();
|
||||
var county = $(".tab-content").find('#counties_'+lang[i]).val();
|
||||
var zip = $(".tab-content").find('#zip_'+lang[i]).val();
|
||||
var country = $(".tab-content").find('#country_'+lang[i]).val();
|
||||
$(".tab-content input.street_address_"+lang[i]).val(sa);
|
||||
$(".tab-content input.city_"+lang[i]).val(city);
|
||||
$(".tab-content input.county_"+lang[i]).val(county);
|
||||
$(".tab-content input.zip_"+lang[i]).val(zip);
|
||||
$(".tab-content input.country_"+lang[i]).val(country);
|
||||
var verify = sa + city + country +county + zip;
|
||||
var combined = "";
|
||||
if(verify!="")
|
||||
combined = sa + "\n" + city + "\n" + county + "\n" + zip + "\n" + country;
|
||||
$(".tab-content textarea[for="+lang[i]+"]").val(combined);
|
||||
$("input.indicator_"+lang[i]).val("false");
|
||||
current_textarea[lang[i]] = combined;
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
});
|
|
@ -0,0 +1,26 @@
|
|||
function checkMultipleInput() {
|
||||
$(".multipleInput").each(function() {
|
||||
$(this).children('.controls').length==1 ? $(this).addClass("plural") : $(this).removeClass("plural")
|
||||
});
|
||||
}
|
||||
function removeInput(){
|
||||
$(".removeInput").click(function (){
|
||||
$(this).parents(".controls").remove();
|
||||
checkMultipleInput();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
$(document).ready(function(){
|
||||
var $modalNumber = 0;
|
||||
checkMultipleInput();
|
||||
removeInput();
|
||||
$(".addinput").click(function (){
|
||||
$modalNumber+=1;
|
||||
var $CloneTarget = $(this).parents(".controls").prev(".multipleInput").children('.controls:last');
|
||||
$(this).parents(".controls").prev(".multipleInput").append($CloneTarget.clone());
|
||||
$(this).parents(".controls").prev(".multipleInput").children('.controls:last input').val("");
|
||||
removeInput();
|
||||
checkMultipleInput();
|
||||
return false;
|
||||
})
|
||||
});
|
|
@ -280,7 +280,7 @@
|
|||
margin-top: 8px;
|
||||
}
|
||||
.nav-tabs li a {
|
||||
padding-right: 32px;
|
||||
/*padding-right: 32px;*/
|
||||
}
|
||||
|
||||
.user-role {
|
||||
|
@ -314,7 +314,8 @@
|
|||
float: left;
|
||||
}
|
||||
.role-block .nav-pills {
|
||||
margin-bottom: 0;g
|
||||
margin-bottom: 0;
|
||||
margin-left: 10px;
|
||||
}
|
||||
.role-block .nav-pills > li > a {
|
||||
margin-top: 0;
|
||||
|
@ -345,7 +346,13 @@
|
|||
-moz-border-radius: 0 3px 3px 0;
|
||||
border-radius: 0 3px 3px 0;
|
||||
}
|
||||
.input-append > .active {
|
||||
display: inline-block;
|
||||
}
|
||||
.input-append .active {
|
||||
background-color: transparent;
|
||||
border-color: transparent;
|
||||
}
|
||||
.language-swich .tab-pane {
|
||||
margin-bottom: 5px;
|
||||
margin-right: 10px;
|
||||
/*margin-bottom: 5px;*/
|
||||
}
|
|
@ -111,7 +111,7 @@
|
|||
.role-block .form-horizontal .controls {
|
||||
margin-left: 120px;
|
||||
}
|
||||
.role-block .form-horizontal .controls>.input-append {
|
||||
.role-block .form-horizontal .controls .input-append {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.role-block .form-horizontal legend .onoff {
|
||||
|
|
|
@ -5,7 +5,7 @@ module AttributeFieldsHelper
|
|||
include ActionView::Helpers::DateHelper
|
||||
include ActionView::Helpers::TagHelper
|
||||
include ActionView::Helpers::RenderingHelper
|
||||
|
||||
include OrbitBasis::RenderAnywhere
|
||||
def block_helper(user,index,disable = false)
|
||||
unless self.disabled
|
||||
@index = index
|
||||
|
@ -26,37 +26,22 @@ module AttributeFieldsHelper
|
|||
end
|
||||
|
||||
def render_address
|
||||
#NP
|
||||
control_group_wrapper do |key,value|
|
||||
result = '<div class="input-append">'.html_safe
|
||||
value = (can_muti_lang_input? ? @prefiled_value[key] : @prefiled_value) rescue nil
|
||||
key_field = can_muti_lang_input? ? "[#{key}]" : ""
|
||||
place_holder= @panel_setting["placeholder"][key] rescue ''
|
||||
result = text_area_tag(get_field_name_base + key_field, value,@markup_options.merge(:placeholder=>place_holder))
|
||||
|
||||
if(add_more and value.is_a?(Array))
|
||||
values = value
|
||||
result << values.each_with_index.collect do |value,index|
|
||||
text_field_tag(get_field_name_base + (key.nil? ? '' : "[#{key}][#{index}]"), value.last,@markup_options)
|
||||
end.join.html_safe
|
||||
else
|
||||
result << text_field_tag(get_field_name_base + (key.nil? ? '' : "[#{key}]"), value,@markup_options)
|
||||
end
|
||||
|
||||
result << ('<a href="#'+self.key+'-edit" class="btn" type="button" data-toggle="modal"><i class="icon-edit"></i></a>').html_safe
|
||||
result << '<a href="#" class="btn" type="button"><i class="icon-trash"></i></a>'.html_safe
|
||||
result << '</div>'.html_safe
|
||||
result << gen_modal_dialog
|
||||
result << hidden_field_tag(get_basic_field_name_base+"[temp][street_address][#{key}]",nil,:class=>"street_address_#{key}")
|
||||
result << hidden_field_tag(get_basic_field_name_base+"[temp][city][#{key}]",nil,:class=>"city_#{key}")
|
||||
result << hidden_field_tag(get_basic_field_name_base+"[temp][zip][#{key}]",nil,:class=>"zip_#{key}")
|
||||
result << hidden_field_tag(get_basic_field_name_base+"[temp][country][#{key}]",nil,:class=>"country_#{key}")
|
||||
result << hidden_field_tag(get_basic_field_name_base+"[temp][indicator][#{key}]",nil,:class=>"indicator_#{key}")
|
||||
end
|
||||
end
|
||||
|
||||
def render_checkbox
|
||||
@prefiled_value ||=[]
|
||||
# @prefiled_value = @prefiled_value.keys unless @prefiled_value ==[]
|
||||
# begin
|
||||
# markup_value = eval(self.markup_value)
|
||||
# rescue
|
||||
# markup_value = self.markup_value
|
||||
# ensure
|
||||
# markup_value ||= {}
|
||||
# end
|
||||
|
||||
control_group_wrapper do
|
||||
a = self[:option_list].collect do |key,value|
|
||||
label_tag(key,check_box_tag(get_field_name_base+"[#{key}]", true , (@prefiled_value.include?(key) ? true : false), {})+value[I18n.locale.to_s],@markup_options.merge(:class=>"control-label"))
|
||||
|
@ -65,7 +50,6 @@ module AttributeFieldsHelper
|
|||
end
|
||||
|
||||
def render_date
|
||||
#NP
|
||||
control_group_wrapper{date_select(get_field_name_base,nil,@markup_options.merge(:default=>@prefiled_value),:class=>"input-small")}
|
||||
end
|
||||
|
||||
|
@ -75,13 +59,6 @@ module AttributeFieldsHelper
|
|||
|
||||
def render_radio_button
|
||||
@prefiled_value ||=[]
|
||||
# begin
|
||||
# markup_value = eval(self.markup_value)
|
||||
# rescue
|
||||
# markup_value = self.markup_value
|
||||
# ensure
|
||||
# markup_value ||= {}
|
||||
# end
|
||||
control_group_wrapper do
|
||||
self[:option_list].collect do |key,value|
|
||||
label_tag(key,radio_button_tag(get_field_name_base, key , (@prefiled_value.include?(key) ? true : false), {})+value[I18n.locale.to_s],@markup_options.merge(:class=>"control-label"))
|
||||
|
@ -92,25 +69,15 @@ module AttributeFieldsHelper
|
|||
def render_select
|
||||
prompt = @panel_setting["initial"][I18n.locale.to_s] rescue nil
|
||||
@markup_options.merge!(:prompt => prompt) unless prompt.nil?
|
||||
# markup_value = (self.markup_value.is_a?(Hash) ? self.markup_value : eval(self.markup_value) )rescue {}
|
||||
# check self[:option_list].collect{|p| [p[1][I18n.locale.to_s],p[0]]}
|
||||
control_group_wrapper{select_tag( get_field_name_base,options_for_select(self.option_list.collect{|p| [p[1][I18n.locale.to_s],p[0]]},@prefiled_value),@markup_options)} rescue ""
|
||||
end
|
||||
|
||||
def render_text_area
|
||||
control_group_wrapper do |key,value|
|
||||
# if(add_more and value.is_a?(Hash))
|
||||
# values = value
|
||||
# values.each_with_index.collect do |value,index|
|
||||
# place_holder= @panel_setting["placeholder"][key]
|
||||
# text_area_tag(get_field_name_base + (key.nil? ? '' : "[#{key}][#{index}]"), value.last,@markup_options.merge(:placeholder=>place_holder))
|
||||
# end.join.html_safe
|
||||
# else
|
||||
value = can_muti_lang_input ? @prefiled_value[key] : @prefiled_value
|
||||
key = can_muti_lang_input ? "[#{key}]" : ""
|
||||
value = can_muti_lang_input? ? @prefiled_value[key] : @prefiled_value
|
||||
key = can_muti_lang_input? ? "[#{key}]" : ""
|
||||
place_holder= @panel_setting["placeholder"][I18n.locale.to_s] rescue ''
|
||||
text_area_tag(get_field_name_base + key, value,@markup_options.merge(:placeholder=>place_holder))
|
||||
# end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -118,10 +85,10 @@ module AttributeFieldsHelper
|
|||
control_group_wrapper do |key,value,add_more_counter|
|
||||
if(add_more)
|
||||
place_holder= @panel_setting["placeholder"][key]
|
||||
text_field_tag(get_field_name_base + (key.nil? ? '' : "[][#{key}]"), value,@markup_options.merge(:placeholder=>place_holder)) + link_to( (content_tag :i,'',:class=>"icon-trash"),'#',:class=> "btn removeInput")
|
||||
text_field_tag(get_field_name_base + (key.nil? ? '' : "[][#{key}]"), value,@markup_options.merge(:placeholder=>place_holder))
|
||||
else
|
||||
value = (can_muti_lang_input ? @prefiled_value[key] : @prefiled_value) rescue nil
|
||||
key_field = can_muti_lang_input ? "[#{key}]" : ""
|
||||
value = (can_muti_lang_input? ? @prefiled_value[key] : @prefiled_value) rescue nil
|
||||
key_field = can_muti_lang_input? ? "[#{key}]" : ""
|
||||
place_holder= @panel_setting["placeholder"][key] rescue ''
|
||||
text_field_tag(get_field_name_base + key_field, value,@markup_options.merge(:placeholder=>place_holder))
|
||||
end
|
||||
|
@ -141,50 +108,58 @@ protected
|
|||
def controls_wrapper(&block)
|
||||
loop_time = self.add_more ? @attribute_value.add_more_counter : 1
|
||||
result = ''
|
||||
result << "<div class='multipleInput'>" if self.add_more
|
||||
multi_and_edit_more_class = (self.markup == 'address' ? "multipleInput" : "multipleInput editMore" )
|
||||
result << "<div class='#{multi_and_edit_more_class}'>" if self.add_more
|
||||
result << "<div class='controls'>"
|
||||
loop_time.times do |loop_counter|
|
||||
if can_muti_lang_input
|
||||
|
||||
if can_muti_lang_input?
|
||||
result << "<div class='tabbable'>"
|
||||
|
||||
result << "<div class='tab-content'>"
|
||||
tab_content_class = add_more ? "tab-content input-append" : "tab-content"
|
||||
|
||||
result << "<div class= '#{tab_content_class}'>"
|
||||
VALID_LOCALES.collect do |key|
|
||||
|
||||
value = @prefiled_value[key.to_s] rescue nil
|
||||
div_class = ["tab-pane" ,"fade"].join(" ")
|
||||
div_class << (key == I18n.locale.to_s ? " active in" : '')
|
||||
if self.add_more
|
||||
div_class << " input-append #{add_more_tab(:input_field,loop_counter,key)}"
|
||||
# binding.pry
|
||||
div_class << " #{add_more_tab(:input_field,loop_counter,key)}"
|
||||
add_more_field_value = @prefiled_value[loop_counter][key] rescue ''
|
||||
result << content_tag(:div,yield(key,add_more_field_value,loop_counter),:class=>div_class)#,:id=>"tab"+id.to_s+"_#{key}_#{loop_counter}"
|
||||
else
|
||||
result << content_tag(:div,yield(key,value),:class=>div_class,:id=>"tab"+id.to_s+"_#{key}")
|
||||
end
|
||||
end # of VALID_LOCALES.collect for tabed input
|
||||
|
||||
result << '<a href=".address-edit.' + get_pairing_tab_class({}) + ' " class="btn edit-btn" type="button" data-toggle="modal"><i class="icon-edit"></i></a>' if self.markup == 'address'
|
||||
result << '<a href="#" class="btn removeInput" type="button"><i class="icon-trash"></i></a>' if self.add_more
|
||||
result << "</div>"
|
||||
|
||||
result << "<ul class='nav nav-pills'>"
|
||||
VALID_LOCALES.each do |key|
|
||||
link_entry = self.add_more ? "#{add_more_tab(:tab_btn,loop_counter,key)}" : "#tab"+id.to_s+"_#{key}"
|
||||
result << content_tag(:li,link_to(I18n.t("langs."+key),link_entry,:data=>{:toggle=>"tab"}),:class=>(key == I18n.locale.to_s ? "active" : nil))
|
||||
end # of VALID_LOCALES.collect for tabs
|
||||
result << "</ul>"
|
||||
if can_muti_lang_input?
|
||||
result << "<ul class='nav nav-pills'>"
|
||||
VALID_LOCALES.reverse.each do |key|
|
||||
link_entry = self.add_more ? "#{add_more_tab(:tab_btn,loop_counter,key)}" : "#tab"+id.to_s+"_#{key}"
|
||||
result << content_tag(:li,link_to(I18n.t("langs."+key),link_entry,:data=>{:toggle=>"tab"}),:class=>(key == I18n.locale.to_s ? "active" : nil))
|
||||
end # of VALID_LOCALES.collect for tabs
|
||||
result << "</ul>"
|
||||
end
|
||||
|
||||
result << "</div>"
|
||||
# @prefiled_value.collect do |key,value|
|
||||
# result << yield(key,value)
|
||||
# end
|
||||
result << gen_modal_dialog if self.markup == "address"
|
||||
else
|
||||
|
||||
result << yield
|
||||
end
|
||||
if can_add_more and (loop_counter == loop_time-1)
|
||||
temp_field_name = get_basic_field_name_base + '[temp]'
|
||||
result << '<div class="controls">'
|
||||
result << '<span class="help-block">'
|
||||
result << '<a href="#"><i class="icon-plus-sign"></i>'+I18n.t("admin.infos.add")+' </a>'
|
||||
result << '<a href="#" class="addinput"><i class="icon-plus-sign"></i>'+I18n.t("admin.infos.add")+' </a>'
|
||||
result << hidden_field_tag("#{temp_field_name}[count]",loop_time,:class=>"list_count")
|
||||
result << hidden_field_tag("#{temp_field_name}[count]",get_basic_field_name_base,:class=>"field_name")
|
||||
result << '</span>'
|
||||
result << '</div>'
|
||||
end
|
||||
end # of loop_time
|
||||
result << "</div>"
|
||||
|
@ -193,9 +168,8 @@ protected
|
|||
end # of def controls_wrapper(&block)
|
||||
|
||||
def control_group_wrapper(&block)
|
||||
div_class = can_muti_lang_input ? "control-group language-swich" : "control-group"
|
||||
div_class = can_muti_lang_input? ? "control-group language-swich" : "control-group"
|
||||
temp = label + controls_wrapper(&block)
|
||||
|
||||
result = content_tag(:div,temp,:class=>div_class)
|
||||
result << end_block
|
||||
|
||||
|
@ -243,36 +217,26 @@ protected
|
|||
label_tag(key,title,:class=>"control-label",:func => "field_label")
|
||||
end
|
||||
|
||||
def can_muti_lang_input
|
||||
LIST[:markups][markup]["muti_lang_input_supprt"] #and locale
|
||||
def can_muti_lang_input?
|
||||
if self.markup == "address"
|
||||
return true
|
||||
else
|
||||
LIST[:markups][markup]["muti_lang_input_supprt"] and !(get_data["cross_lang"] == "true")
|
||||
end
|
||||
end
|
||||
|
||||
def can_add_more
|
||||
locale and LIST[:markups][markup]["ext_support"] && add_more
|
||||
if self.markup == "address"
|
||||
return false
|
||||
else
|
||||
locale and LIST[:markups][markup]["ext_support"] && add_more
|
||||
end
|
||||
end
|
||||
|
||||
def render_anywhere(partial, assigns)
|
||||
view = ActionView::Base.new(Rails::Configuration.new.view_path, assigns)
|
||||
ActionView::Base.helper_modules.each { |helper| view.extend helper }
|
||||
view.extend ApplicationHelper
|
||||
view.render(:partial => partial)
|
||||
end
|
||||
|
||||
|
||||
def gen_modal_dialog
|
||||
result = '<div class="modal hide fade" id="address-edit" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" style="display: none; ">'
|
||||
result << '<div class="modal-header">'
|
||||
result << '<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>'
|
||||
result << '<h3 id="myModalLabel">'+title+'</h3>'
|
||||
result << '</div>'
|
||||
result << '<div class="modal-body">'
|
||||
result << '<p>One fine body…</p>'
|
||||
result << '</div>'
|
||||
result << '<div class="modal-footer">'
|
||||
result << '<button class="btn" data-dismiss="modal" aria-hidden="true">'+I18n.t("modal.close")+'</button>'
|
||||
result << '<button class="btn btn-primary">'+I18n.t("modal.save_and_close")+'</button>'
|
||||
result << '</div>'
|
||||
result << '</div>'
|
||||
result.html_safe
|
||||
render_anywhere("shared/attribute_field/address_modal_dialog",{:field_name=>title,:btn_class => "#{get_pairing_tab_class({})}"})
|
||||
end
|
||||
|
||||
end
|
|
@ -1,5 +1,4 @@
|
|||
class AttributeField
|
||||
|
||||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
include ::AttributeFieldsHelper
|
||||
|
@ -8,8 +7,6 @@ class AttributeField
|
|||
field :markup ,:default=>"text_field"
|
||||
field :option_list ,:type => Hash,:default => {}
|
||||
field :markup_options,:type => Hash
|
||||
# field :locale, :type => Boolean, :default => true
|
||||
# field :list_options, :type => Array
|
||||
field :built_in, :type => Boolean, :default => false
|
||||
field :disabled, :type => Boolean, :default => false
|
||||
field :to_delete,:type=> Boolean,:default => false
|
||||
|
@ -18,18 +15,11 @@ class AttributeField
|
|||
field :typeC,:type=> Hash,:default=>{:claendar=>"west_claendar",:format=>"format3"}
|
||||
field :typeD,:type=> Hash,:default=>{:cross_lang=>false}
|
||||
field :typeE,:type=> Hash,:default=>{}
|
||||
|
||||
|
||||
#field :title, localize: true
|
||||
|
||||
field :title, localize: true
|
||||
|
||||
|
||||
belongs_to :attribute
|
||||
# belongs_to :role
|
||||
has_many :attribute_values,:autosave => true, :dependent => :destroy
|
||||
before_save :check_option_list
|
||||
# validates_uniqueness_of :key
|
||||
|
||||
def markup_value
|
||||
get_data["option_list"]
|
||||
|
@ -52,12 +42,6 @@ class AttributeField
|
|||
(self.attribute.role.method(self[:key].pluralize.to_sym) && self.attribute.role.method(self[:key].pluralize+"_for_"+markup)) rescue false
|
||||
end
|
||||
|
||||
# def markup_value=(var)
|
||||
# if !self_defined_markup_options?
|
||||
# self[:markup_value] = (eval(var) rescue {})
|
||||
# end
|
||||
# end
|
||||
|
||||
def option_list
|
||||
if self_defined_markup_options?
|
||||
#Class need to have corresponding field and value agent
|
||||
|
@ -71,8 +55,6 @@ class AttributeField
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
def markup_options=(var)
|
||||
self[:markup_options] = (eval(var) rescue {})
|
||||
end
|
||||
|
@ -99,92 +81,18 @@ class AttributeField
|
|||
end
|
||||
|
||||
|
||||
# def title_translations
|
||||
# if locale
|
||||
# return self.locale_title_translations
|
||||
# else
|
||||
# return self[:neutral_title] #Hash[VALID_LOCALES.map{|d| [d,neutral_title]}]
|
||||
# end
|
||||
# end
|
||||
|
||||
# def title_translations=(var)
|
||||
# if locale
|
||||
# self.locale_title_translations = var
|
||||
# end
|
||||
# end
|
||||
|
||||
# def title
|
||||
# if locale
|
||||
# return self.locale_title
|
||||
# else
|
||||
# return self.neutral_title
|
||||
# end
|
||||
# end
|
||||
|
||||
# def check_title
|
||||
# if locale
|
||||
# self.locale_title_translations = self[:temp_title]
|
||||
# else
|
||||
# self.neutral_title = self[:temp_title]
|
||||
# end
|
||||
# self.unset("temp_title")
|
||||
# end
|
||||
|
||||
# def title=(var)
|
||||
# self["temp_title"] = var
|
||||
# end
|
||||
|
||||
# # Convert the string list_options into an array
|
||||
# def select_list_options=(var)
|
||||
# self.list_options = var.gsub(' ', '').split(',')
|
||||
# end
|
||||
|
||||
# # Convert the array list_options into a string
|
||||
# def select_list_options
|
||||
# self.list_options.to_a.join(', ')
|
||||
# end
|
||||
|
||||
def add_more_convert(opt)
|
||||
case opt
|
||||
when :to_add_more
|
||||
self.attribute_values.each do |av|
|
||||
VALID_LOCALES.each do |loc|
|
||||
splited_str = av[loc].split(",") rescue []
|
||||
av["val"] = [] if av["val"].nil?
|
||||
splited_str.each_with_index{|value,index| av["val"][index] = av["val"][index].nil? ? {loc=>value} : av["val"][index].merge(loc=>value) }
|
||||
# av[loc] = Hash[splited_str.each_with_index.map{|t,index| [index.to_s,t]}] rescue {"0"=>av[loc].to_s}
|
||||
end
|
||||
av.save
|
||||
end #of self.attribute_values.each
|
||||
when :to_no_add_more
|
||||
self.attribute_values.each do |av|
|
||||
VALID_LOCALES.each do |loc|
|
||||
if av["val"].kind_of? Array
|
||||
av[loc] = av["val"].collect{|t| t[loc]}.join(",")
|
||||
else
|
||||
av[loc] = av["val"]
|
||||
end
|
||||
# av[loc] = av["val"].invert.keys.join(",") rescue av["val"]
|
||||
# av.save(:validate => false)
|
||||
end
|
||||
av.unset("val")
|
||||
av.save
|
||||
end #of self.attribute_values.each
|
||||
end
|
||||
end
|
||||
|
||||
def typeA=(var)
|
||||
if self["typeA"]["add_more"] != var["add_more"]
|
||||
case var["add_more"]
|
||||
when "true" #from no-add_more to add_more
|
||||
add_more_convert(:to_add_more)
|
||||
else #from add_more to no-add_more
|
||||
add_more_convert(:to_no_add_more)
|
||||
end # of case
|
||||
end # of if
|
||||
check_add_more_convert(var)
|
||||
check_cross_lang_convert(var,"typeA")
|
||||
self["typeA"] = var
|
||||
end
|
||||
|
||||
def typeD=(var)
|
||||
check_cross_lang_convert(var,"typeD")
|
||||
self["typeD"] = var
|
||||
end
|
||||
|
||||
def is_built_in?
|
||||
self.built_in
|
||||
end
|
||||
|
@ -195,7 +103,82 @@ class AttributeField
|
|||
|
||||
protected
|
||||
def check_option_list
|
||||
self[:option_list] = self[panel]["option_list"]
|
||||
self[:option_list] = self[panel]["option_list"] rescue nil
|
||||
end
|
||||
|
||||
def add_more_convert(opt)
|
||||
case opt
|
||||
when :to_add_more
|
||||
self.attribute_values.each do |av|
|
||||
VALID_LOCALES.each do |loc|
|
||||
splited_str = av[loc].split(",") rescue []
|
||||
av["val"] = [] if av["val"].nil?
|
||||
splited_str.each_with_index{|value,index| av["val"][index] = av["val"][index].nil? ? {loc=>value} : av["val"][index].merge(loc=>value) }
|
||||
end
|
||||
av.unset_all_lang_values
|
||||
av.save
|
||||
end #of self.attribute_values.each
|
||||
when :to_no_add_more
|
||||
self.attribute_values.each do |av|
|
||||
VALID_LOCALES.each do |loc|
|
||||
if av["val"].kind_of? Array
|
||||
av[loc] = av["val"].collect{|t| t[loc]}.join(",")
|
||||
else
|
||||
av[loc] = av["val"]
|
||||
end
|
||||
end
|
||||
av.unset("val")
|
||||
av.save
|
||||
end #of self.attribute_values.each
|
||||
end
|
||||
end
|
||||
|
||||
def cross_lang_convert(opt)
|
||||
case opt
|
||||
when :to_cross_lang
|
||||
self.attribute_values.each do |av|
|
||||
if add_more
|
||||
av["val"] = av["val"].collect{|t| t.invert.keys.join(",")}
|
||||
else
|
||||
av["val"] = VALID_LOCALES.collect{|t| av[t]}.join(",")
|
||||
av.unset_all_lang_values
|
||||
end
|
||||
av.save
|
||||
end #of self.attribute_values.each
|
||||
when :to_no_cross_lang
|
||||
default_locale = I18n.default_locale.to_s
|
||||
self.attribute_values.each do |av|
|
||||
if add_more
|
||||
av["val"] = av["val"].collect{|t| {default_locale => t} }
|
||||
else
|
||||
av[default_locale] = av["val"]
|
||||
av.unset("val")
|
||||
end
|
||||
av.save
|
||||
end #of self.attribute_values.each
|
||||
end
|
||||
end
|
||||
|
||||
def check_add_more_convert(var)
|
||||
if self["typeA"]["add_more"] != var["add_more"]
|
||||
case var["add_more"]
|
||||
when "true" #from no-add_more to add_more
|
||||
add_more_convert(:to_add_more)
|
||||
else #from add_more to no-add_more
|
||||
add_more_convert(:to_no_add_more)
|
||||
end # of case
|
||||
end # of if
|
||||
end
|
||||
|
||||
def check_cross_lang_convert(var,field)
|
||||
if self[field]["cross_lang"] != var["cross_lang"]
|
||||
case var["cross_lang"]
|
||||
when "true" #from no-add_more to add_more
|
||||
cross_lang_convert(:to_cross_lang)
|
||||
else #from add_more to no-add_more
|
||||
cross_lang_convert(:to_no_cross_lang)
|
||||
end # of case
|
||||
end # of if
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -12,35 +12,13 @@ class AttributeValue
|
|||
before_save :data_proc
|
||||
# NO_MULTI_TAG = ["select","date","radio_button","checkbox","date_durnation"]
|
||||
|
||||
|
||||
|
||||
def add_more_counter
|
||||
index_max = self["val"].count rescue 0
|
||||
index_max == 0 ? 1 : index_max
|
||||
end
|
||||
|
||||
def data_proc
|
||||
unless self[:temp_data].nil?
|
||||
case self.attribute_field.markup
|
||||
when 'text_field','text_area'
|
||||
if self.attribute_field.add_more
|
||||
self["val"] = self["temp_data"]
|
||||
else # if not add_more
|
||||
self[:temp_data].each{|key,val|
|
||||
self[key] = val
|
||||
} if(!self.attribute_field.get_data[:cross_lang])
|
||||
self["val"] = self[:temp_data] if(self.attribute_field.get_data[:cross_lang])
|
||||
end # of self.attribute_field.add_more
|
||||
|
||||
when 'select','date','radio_button'
|
||||
self["val"] = self[:temp_data]
|
||||
when 'checkbox'
|
||||
self["val"] = self[:temp_data].keys
|
||||
end #end of case self.attribute_field.markup
|
||||
end # of self[:temp_data].nil?
|
||||
self.unset('temp_data')
|
||||
self.unset('temp')
|
||||
end #of data_proc
|
||||
|
||||
def value(index = nil)
|
||||
result = case self.attribute_field.markup
|
||||
when 'text_field','text_area'
|
||||
|
@ -48,7 +26,7 @@ class AttributeValue
|
|||
index.nil? ? self["val"] : self["val"][index]
|
||||
# self.attribute_field.get_data[:cross_lang] ? Hash[VALID_LOCALES.collect{|lang| [lang,self[lang.to_sym]]}] : self["val"] #if !self.attribute_field.get_data[:cross_lang]
|
||||
else
|
||||
self.attribute_field.get_data[:cross_lang] ? self["val"] : Hash[VALID_LOCALES.collect{|lang| [lang,self[lang.to_sym]]}]
|
||||
self.attribute_field.get_data["cross_lang"] =="true" ? self["val"] : Hash[VALID_LOCALES.collect{|lang| [lang,self[lang.to_sym]]}]
|
||||
end
|
||||
when 'select','date','radio_button'
|
||||
self["val"]
|
||||
|
@ -62,17 +40,6 @@ class AttributeValue
|
|||
self[:temp_data] = value
|
||||
end
|
||||
|
||||
def check_key
|
||||
self.key = attribute_field.key
|
||||
end
|
||||
|
||||
def method_missing(*field)
|
||||
if field.size < 1
|
||||
self[field[0]]
|
||||
else
|
||||
self[(field[0].to_s.delete "=")] = field[1]
|
||||
end
|
||||
end
|
||||
|
||||
def get_value_by_locale(locale,add_more_index=nil)
|
||||
|
||||
|
@ -106,23 +73,52 @@ class AttributeValue
|
|||
end
|
||||
end
|
||||
|
||||
# def get_values
|
||||
# unless ['select','checkbox','radio_button'].include?(self.attribute_field.markup )
|
||||
# if self.attribute_field.locale && LIST[:markups][self.attribute_field.markup]["muti_lang_input_supprt"]
|
||||
# return Hash[VALID_LOCALES.collect{|lang| [lang,get_value_by_locale(lang.to_sym)]}]
|
||||
# else
|
||||
# return get_value_by_locale("")
|
||||
# end
|
||||
# else
|
||||
# if self.attribute_field.markup == "select"
|
||||
# self[:value]
|
||||
# else
|
||||
# self[:value].keys rescue self[:value]
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
protected
|
||||
|
||||
protected
|
||||
|
||||
def unset_all_lang_values
|
||||
VALID_LOCALES.each{|t| self.unset t}
|
||||
end
|
||||
|
||||
def data_proc
|
||||
unless self[:temp_data].nil?
|
||||
case self.attribute_field.markup
|
||||
when 'text_field','text_area'
|
||||
if self.attribute_field.add_more
|
||||
self["val"] = self["temp_data"]
|
||||
else # if not add_more
|
||||
if self.attribute_field.can_muti_lang_input?
|
||||
self[:temp_data].each do |key,val|
|
||||
self[key] = val
|
||||
end if(!self.attribute_field.get_data[:cross_lang])
|
||||
else
|
||||
self["val"] = self[:temp_data]
|
||||
end
|
||||
end # of self.attribute_field.add_more
|
||||
|
||||
when 'select','date','radio_button'
|
||||
self["val"] = self[:temp_data]
|
||||
when 'checkbox'
|
||||
self["val"] = self[:temp_data].keys
|
||||
end #end of case self.attribute_field.markup
|
||||
end # of self[:temp_data].nil?
|
||||
self.unset('temp_data')
|
||||
self.unset('temp')
|
||||
end #of data_proc
|
||||
|
||||
def check_key
|
||||
self.key = attribute_field.key
|
||||
end
|
||||
|
||||
def method_missing(*field)
|
||||
if field.size < 1
|
||||
self[field[0]]
|
||||
else
|
||||
self[(field[0].to_s.delete "=")] = field[1]
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def get_date
|
||||
Date.new(self[:val]["(1i)"].to_i,self[:val]["(2i)"].to_i,self[:val]["(3i)"].to_i) rescue nil
|
||||
end
|
||||
|
|
|
@ -17,53 +17,3 @@
|
|||
|
||||
<%= render :partial=>"infos"%>
|
||||
<%= render :partial=>"roles"%>
|
||||
|
||||
<% content_for :page_specific_javascript do -%>
|
||||
<script>
|
||||
var CloneTarget ;
|
||||
var NewNode;
|
||||
|
||||
$(document).ready(function(){
|
||||
function checkMultipleInput() {
|
||||
$(".multipleInput").each(function(i) {
|
||||
$(this).find('.tabbable').length==1 ? $(this).addClass("plural") : $(this).removeClass("plural")
|
||||
});
|
||||
}
|
||||
function removeInput(){
|
||||
$(".removeInput").live('click',function (){
|
||||
$(this).parents(".tabbable").remove();
|
||||
checkMultipleInput();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
checkMultipleInput();
|
||||
removeInput();
|
||||
|
||||
$(".help-block a").live('click',function (){
|
||||
|
||||
CloneTarget = $(this).parents(".controls").find(".tabbable:last");
|
||||
NewNode = CloneTarget.clone();
|
||||
var index;
|
||||
NewNode.find("input").each(function(k,v){
|
||||
index = CloneTarget.parents("div.control-group").find(".list_count").val();
|
||||
|
||||
field_name = CloneTarget.parents("div.control-group").find(".field_name").val();
|
||||
ori_str = $(v).attr("name").replace(field_name,"");
|
||||
lang = ori_str.match(/\[\D*\]/);
|
||||
new_field_name = (field_name+"[" + (parseInt(index)+1) + "]" + lang);
|
||||
$(v).attr("name",new_field_name);
|
||||
$(v).val("");
|
||||
})
|
||||
$(this).parents("div.control-group").find(".list_count").val(parseInt(index)+1)
|
||||
$(this).parents(".controls").find(".tabbable:last").after(NewNode);
|
||||
|
||||
removeInput();
|
||||
// checkMultipleInput();
|
||||
return false;
|
||||
})
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
</script>
|
||||
<% end -%>
|
|
@ -11,6 +11,9 @@
|
|||
<%= javascript_include_tag "/static/jquery.cycle.all.latest.js" %>
|
||||
<%= javascript_include_tag "inc/modal-preview" %>
|
||||
<%= javascript_include_tag "lib/contenteditable" %>
|
||||
<%= javascript_include_tag "inc/ploy_input_field" %>
|
||||
<%= javascript_include_tag "inc/input_module" %>
|
||||
|
||||
<% end -%>
|
||||
|
||||
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
<div class="modal hide fade" id="address-edit" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" style="display: none; ">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h3 id="myModalLabel">Modal header</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>One fine body…</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
|
||||
<button class="btn btn-primary">Save changes</button>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,61 @@
|
|||
<div class="modal hide fade address-edit <%= btn_class %>" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h3 id="myModalLabel"><%= (field_name rescue nil) || t("address_modal.default_title") %></h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="tabbable">
|
||||
<ul class="nav nav-tabs">
|
||||
<% VALID_LOCALES.each do |locale|%>
|
||||
<% active = (locale == VALID_LOCALES.first ? "active" : nil ) %>
|
||||
<%= content_tag :i,:class=>active do%>
|
||||
<%= link_to t("langs.#{locale}"),".#{btn_class}.address_modal.#{locale}",:data=>{:toggle=>"tab"}%>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<% VALID_LOCALES.each do |locale|%>
|
||||
<!-- start of lang tab context -->
|
||||
<% active = (locale == VALID_LOCALES.first ? "active" : "" ) %>
|
||||
<div class="tab-pane <%= active %> fade in <%= "#{btn_class} address_modal #{locale}" %>" for="<%= locale %>">
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="street_address"><%= t("address_modal.street_address") %></label>
|
||||
<div class="controls">
|
||||
<%= text_area_tag("#{btn_class}_street_address_#{locale}",nil,:rows=>3) %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="city"><%= t("address_modal.city") %></label>
|
||||
<div class="controls">
|
||||
<%= text_field_tag("#{btn_class}_city_#{locale}") %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="counties"><%= t("address_modal.county") %></label>
|
||||
<div class="controls">
|
||||
<%= text_field_tag("#{btn_class}_county_#{locale}") %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="zip"><%= t("address_modal.zip") %></label>
|
||||
<div class="controls">
|
||||
<%= text_field_tag("#{btn_class}_zip_#{locale}",nil,:class=>"input-mini") %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="country"><%= t("address_modal.country") %></label>
|
||||
<div class="controls">
|
||||
<%= text_field_tag("#{btn_class}_country_#{locale}") %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- end of tab context -->
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn" data-dismiss="modal" aria-hidden="true"><%=t("modal.close")%></button>
|
||||
<button href="" class="btn btn-primary bt-save" data-dismiss="modal" aria-hidden="true"><%=t("modal.save_and_close")%></button>
|
||||
</div>
|
||||
</div>
|
|
@ -33,9 +33,9 @@ markups:
|
|||
# date_durnation:
|
||||
# muti_lang_input_supprt: false
|
||||
# ext_support: false
|
||||
# address:
|
||||
# muti_lang_input_supprt: true
|
||||
# ext_support: true
|
||||
address:
|
||||
muti_lang_input_supprt: true
|
||||
ext_support: true
|
||||
|
||||
|
||||
public_r_tags:
|
||||
|
|
|
@ -158,8 +158,19 @@ zh_tw:
|
|||
user: 使用者列表
|
||||
list_: 列表
|
||||
list_lower: 列表
|
||||
address_modal:
|
||||
default_title: 地址
|
||||
street_address: 街道地址
|
||||
city: 城市
|
||||
county: 縣市
|
||||
zip: 郵遞區號
|
||||
country: 國家/地區
|
||||
langs:
|
||||
zh_tw: 中文
|
||||
en: 英文
|
||||
lists:
|
||||
markups:
|
||||
address: 地址欄位
|
||||
text_field: 文字輸入框
|
||||
select: 下拉選單
|
||||
date: 日期
|
||||
|
|
|
@ -1,4 +1,11 @@
|
|||
module OrbitBasis
|
||||
module RenderAnywhere
|
||||
def render_anywhere(partial,opts)
|
||||
view = ActionView::Base.new(Orbit::Application.config.paths["app/views"].first)
|
||||
view.extend ApplicationHelper
|
||||
view.render(:partial => partial,:locals=>opts)
|
||||
end
|
||||
end
|
||||
module BaseModel
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
|
|
Reference in New Issue