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 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue