266 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			266 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| 
								 | 
							
								// Check Questions Length
							 | 
						||
| 
								 | 
							
								function checkQuestionsLength() {
							 | 
						||
| 
								 | 
							
									var questionsLength = $('.questions > .attributes').length;
							 | 
						||
| 
								 | 
							
									if(questionsLength == 1) {
							 | 
						||
| 
								 | 
							
										$('.questions .delete').addClass('hide');
							 | 
						||
| 
								 | 
							
									} else {
							 | 
						||
| 
								 | 
							
										$('.questions .delete').removeClass('hide');
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Role Attribute Template Data
							 | 
						||
| 
								 | 
							
								function setData(l, length, optionsI, className) {
							 | 
						||
| 
								 | 
							
									if(!optionsI) {
							 | 
						||
| 
								 | 
							
										optionsI = 0;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									var id = "survey_survey_questions_attributes_",
							 | 
						||
| 
								 | 
							
										name = "survey[survey_questions_attributes][",
							 | 
						||
| 
								 | 
							
										optionID = l+"_survey_question_options_attributes_"+optionsI+"_name_translations_",
							 | 
						||
| 
								 | 
							
										optionName = l+"][survey_question_options_attributes]["+optionsI+"][name_translations]",
							 | 
						||
| 
								 | 
							
										radiogroupsID = l+"_survey_question_radiogroups_attributes_"+optionsI+"_name_translations_",
							 | 
						||
| 
								 | 
							
										radiogroupsName = l+"][survey_question_radiogroups_attributes]["+optionsI+"][name_translations]";
							 | 
						||
| 
								 | 
							
									data = {
							 | 
						||
| 
								 | 
							
										_l: l,
							 | 
						||
| 
								 | 
							
										_ques: "new",
							 | 
						||
| 
								 | 
							
										_length: length,
							 | 
						||
| 
								 | 
							
										_className: className,
							 | 
						||
| 
								 | 
							
										_destroy: [id+l+"_destroy", name+l+"][_destroy]"],
							 | 
						||
| 
								 | 
							
										_sequence : [id+l+"_sequence",name+l+"][sequence]",length-1],
							 | 
						||
| 
								 | 
							
										_title_translations: [id+l+"_title_translations", name+l+"][title_translations]", "questions_title_"+l,{"en":"","zh_tw":""}],
							 | 
						||
| 
								 | 
							
										_description_translations: [id+l+"_description_translations", name+l+"][description_translations]", "questions_depiction_"+l,{"en":"","zh_tw":""}],
							 | 
						||
| 
								 | 
							
										_type: [id+l+"_type", name+l+"][type]"],
							 | 
						||
| 
								 | 
							
										_is_required: [id+l+"_is_required", name+l+"][is_required]",false],
							 | 
						||
| 
								 | 
							
										_option: [id+optionID, name+optionName, "attributes_"+l+"_options_"+optionsI+"_",{"en":"","zh_tw":""}],
							 | 
						||
| 
								 | 
							
										_radiogroups: [id+radiogroupsID, name+radiogroupsName, "attributes_"+l+"_radiogroups_"+optionsI+"_",{"en":"","zh_tw":""}],
							 | 
						||
| 
								 | 
							
										_custom_option: [id+l+"_custom_option", name+l+"][custom_option]",false]
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
									return data;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function setEditData(l, length, d, optionsI, className) {
							 | 
						||
| 
								 | 
							
									if(!optionsI) {
							 | 
						||
| 
								 | 
							
										optionsI = 0;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									var id = "survey_survey_questions_attributes_",
							 | 
						||
| 
								 | 
							
										name = "survey[survey_questions_attributes][",
							 | 
						||
| 
								 | 
							
										optionID = l+"_survey_question_options_attributes_"+optionsI+"_name_translations_",
							 | 
						||
| 
								 | 
							
										optionName = l+"][survey_question_options_attributes]["+optionsI+"][name_translations]",
							 | 
						||
| 
								 | 
							
										radiogroupsID = l+"_survey_question_radiogroups_attributes_"+optionsI+"_name_translations_",
							 | 
						||
| 
								 | 
							
										radiogroupsName = l+"][survey_question_radiogroups_attributes]["+optionsI+"][name_translations]";
							 | 
						||
| 
								 | 
							
									data = {
							 | 
						||
| 
								 | 
							
										_l: l,
							 | 
						||
| 
								 | 
							
										_ques: "old",
							 | 
						||
| 
								 | 
							
										_length: length,
							 | 
						||
| 
								 | 
							
										_className: className,
							 | 
						||
| 
								 | 
							
										_destroy: [id+l+"__destroy", name+l+"][_destroy]"],
							 | 
						||
| 
								 | 
							
										_id: [id+l+"_id", name+l+"][id]",d._id],
							 | 
						||
| 
								 | 
							
										_sequence : [id+l+"_sequence",name+l+"][sequence]",d.sequence],
							 | 
						||
| 
								 | 
							
										_title_translations: [id+l+"_title_translations", name+l+"][title_translations]", "questions_title_"+l,d.title_translations],
							 | 
						||
| 
								 | 
							
										_description_translations: [id+l+"_description_translations", name+l+"][description_translations]", "questions_depiction_"+l,d.description_translations],
							 | 
						||
| 
								 | 
							
										_type: [id+l+"_type", name+l+"][type]",d.type],
							 | 
						||
| 
								 | 
							
										_is_required: [id+l+"_is_required", name+l+"][is_required]",d.is_required],
							 | 
						||
| 
								 | 
							
										_option: [id+optionID, name+optionName, "attributes_"+l+"_options_"+optionsI+"_"],
							 | 
						||
| 
								 | 
							
										_radiogroups: [id+radiogroupsID, name+radiogroupsName, "attributes_"+l+"_radiogroups_"+optionsI+"_"],
							 | 
						||
| 
								 | 
							
										_custom_option: [id+l+"_custom_option", name+l+"][custom_option]",d.custom_option]
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
									return data;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function setEditQuestionAttributes(l, length, d, optionsI, className) {
							 | 
						||
| 
								 | 
							
									if(!optionsI) {
							 | 
						||
| 
								 | 
							
										optionsI = 0;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									var id = "survey_survey_questions_attributes_",
							 | 
						||
| 
								 | 
							
										name = "survey[survey_questions_attributes][",
							 | 
						||
| 
								 | 
							
										optionID = l+"_survey_question_options_attributes_"+optionsI+"_name_translations_",
							 | 
						||
| 
								 | 
							
										optionName = l+"][survey_question_options_attributes]["+optionsI+"][name_translations]",
							 | 
						||
| 
								 | 
							
										radiogroupsID = l+"_survey_question_radiogroups_attributes_"+optionsI+"_name_translations_",
							 | 
						||
| 
								 | 
							
										radiogroupsName = l+"][survey_question_radiogroups_attributes]["+optionsI+"][name_translations]",
							 | 
						||
| 
								 | 
							
										option_id = l+"][survey_question_options_attributes]["+optionsI+"][id]",
							 | 
						||
| 
								 | 
							
										destroy = l+"][survey_question_options_attributes]["+optionsI+"][_destroy]",
							 | 
						||
| 
								 | 
							
										radiogroups_id = l+"][survey_question_radiogroups_attributes]["+optionsI+"][id]";
							 | 
						||
| 
								 | 
							
									data = {
							 | 
						||
| 
								 | 
							
										_l: l,
							 | 
						||
| 
								 | 
							
										_length: length,
							 | 
						||
| 
								 | 
							
										_ques: "old",
							 | 
						||
| 
								 | 
							
										_className: className,
							 | 
						||
| 
								 | 
							
										_destroy: [name+destroy],
							 | 
						||
| 
								 | 
							
										_option: [id+optionID, name+optionName, "attributes_"+l+"_options_"+optionsI+"_", d.name_translations],
							 | 
						||
| 
								 | 
							
										_radiogroups: [id+radiogroupsID, name+radiogroupsName, "attributes_"+l+"_radiogroups_"+optionsI+"_",d.name_translations],
							 | 
						||
| 
								 | 
							
										_options_id: [name+option_id,d._id],
							 | 
						||
| 
								 | 
							
										_radiogroups_id: [name+radiogroups_id,d._id]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
									return data;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function inputAppendLength(element, length) {
							 | 
						||
| 
								 | 
							
									if(length == 2) {
							 | 
						||
| 
								 | 
							
										element.closest('.add-target').find('.remove-input').addClass('hide').prev().addClass('last');
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									var option = element.closest('.input-append');
							 | 
						||
| 
								 | 
							
									if( option.data( 'question-option' ) == "old" ){
							 | 
						||
| 
								 | 
							
										option.hide().removeAttr( 'question-option' ).find( "input.should_destroy_option" ).val("1");
							 | 
						||
| 
								 | 
							
									} else if( option.data( "question-option" ) == "new"){
							 | 
						||
| 
								 | 
							
										option.remove();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function editQuestion (dataArray){
							 | 
						||
| 
								 | 
							
									var l = $('.questions > .attributes').length  || 0;
							 | 
						||
| 
								 | 
							
									$.each(dataArray,function ( i, d ) {
							 | 
						||
| 
								 | 
							
										$('#template-survery').tmpl(setEditData(l, $('.questions > .attributes').length + 1, d)).appendTo($('.questions'));
							 | 
						||
| 
								 | 
							
										checkQuestionsLength();
							 | 
						||
| 
								 | 
							
										textareaResizable(); // from textarea-lang-btn.js
							 | 
						||
| 
								 | 
							
										if( d.type > 1 && d.type < 5 ){
							 | 
						||
| 
								 | 
							
											onQuestionTypeChanged( $(".questions .field-type:eq("+ i +")"), d.type );
							 | 
						||
| 
								 | 
							
											$.each(d.survey_question_options,function ( x, data ){
							 | 
						||
| 
								 | 
							
												$('#template-survery-option').tmpl(setEditQuestionAttributes( l, "", data, x, "options" )).insertBefore($(".questions .field-type:eq("+ i +") .options .add-btn"));
							 | 
						||
| 
								 | 
							
												$(".questions .field-type:eq("+ i +") .options").data("index",x);
							 | 
						||
| 
								 | 
							
											})
							 | 
						||
| 
								 | 
							
										} else if( d.type == 5 ) {
							 | 
						||
| 
								 | 
							
											onQuestionTypeChanged( $(".questions .field-type:eq("+ i +")"), d.type );
							 | 
						||
| 
								 | 
							
											$.each(d.survey_question_radiogroups,function ( x, data ){
							 | 
						||
| 
								 | 
							
												$('#template-survery-option').tmpl(setEditQuestionAttributes( l, "", data, x, "rgl" )).insertBefore($(".questions .field-type:eq("+ i +") .rgl .add-btn"));
							 | 
						||
| 
								 | 
							
												$(".questions .field-type:eq("+ i +") .options").data("index",x);
							 | 
						||
| 
								 | 
							
											})
							 | 
						||
| 
								 | 
							
											$.each(d.survey_question_options,function ( x, data ){
							 | 
						||
| 
								 | 
							
												$('#template-survery-option').tmpl(setEditQuestionAttributes( l, "", data, x, "options" )).insertBefore($(".questions .field-type:eq("+ i +") .options .add-btn"));
							 | 
						||
| 
								 | 
							
												$(".questions .field-type:eq("+ i +") .options").data("index",x);
							 | 
						||
| 
								 | 
							
											})
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										l++;
							 | 
						||
| 
								 | 
							
									})
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function onQuestionTypeChanged ( $fieldType, _val ){
							 | 
						||
| 
								 | 
							
									if(_val < 2) {
							 | 
						||
| 
								 | 
							
										$fieldType.fadeOut(300);
							 | 
						||
| 
								 | 
							
									} else {
							 | 
						||
| 
								 | 
							
										$fieldType.fadeIn(300);
							 | 
						||
| 
								 | 
							
										if(_val < 5) {
							 | 
						||
| 
								 | 
							
											$fieldType.find('.rgl, hr').addClass('hide').siblings('.allow').removeClass('hide');
							 | 
						||
| 
								 | 
							
										} else {
							 | 
						||
| 
								 | 
							
											$fieldType.find('.rgl, hr').removeClass('hide').siblings('.allow').addClass('hide');
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$(function() {
							 | 
						||
| 
								 | 
							
									var l = $('.questions > .attributes').length  || 0;
							 | 
						||
| 
								 | 
							
									if($('#survey_redirect_mode').prop('checked')) {
							 | 
						||
| 
								 | 
							
										$('.questions').fadeOut(300);
							 | 
						||
| 
								 | 
							
										$('.redirect-url').fadeIn(300);
							 | 
						||
| 
								 | 
							
									} else {
							 | 
						||
| 
								 | 
							
										$('.questions').fadeIn(300);
							 | 
						||
| 
								 | 
							
										$('.redirect-url').fadeOut(300);
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
									$('#survey_redirect_mode').change(function(event) {
							 | 
						||
| 
								 | 
							
										if($(this).prop('checked')) {
							 | 
						||
| 
								 | 
							
											$('.questions').fadeOut(300);
							 | 
						||
| 
								 | 
							
											$('.redirect-url').fadeIn(300);
							 | 
						||
| 
								 | 
							
										} else {
							 | 
						||
| 
								 | 
							
											$('.questions').fadeIn(300);
							 | 
						||
| 
								 | 
							
											$('.redirect-url').fadeOut(300);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
									$('.field-type').each(function() {
							 | 
						||
| 
								 | 
							
										$(this).children('.control-group').each(function() {
							 | 
						||
| 
								 | 
							
											$(this).data().index = $(this).find('.input-append').length
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
									$('.add-target').each(function() {
							 | 
						||
| 
								 | 
							
										if($(this).children('.input-append').length == 1) {
							 | 
						||
| 
								 | 
							
											$(this).find('.remove-input').addClass('hide').prev().addClass('last');
							 | 
						||
| 
								 | 
							
										};
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
									$('.add-question').on(clickEvent, function(event) {
							 | 
						||
| 
								 | 
							
										$('#template-survery').tmpl(setData(l, $('.questions > .attributes[data-question]').length + 1)).appendTo($('.questions'));
							 | 
						||
| 
								 | 
							
										checkQuestionsLength();
							 | 
						||
| 
								 | 
							
										textareaResizable(); // from textarea-lang-btn.js
							 | 
						||
| 
								 | 
							
										l += 1;
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									$('.questions').on('change', '.type-selector', function(event) {
							 | 
						||
| 
								 | 
							
										var $fieldType = $(this).closest('.control-group').siblings('.field-type'),
							 | 
						||
| 
								 | 
							
											_val = $(this).val(),
							 | 
						||
| 
								 | 
							
											_index = $(this).closest('.attributes').data().index;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										onQuestionTypeChanged( $fieldType, _val );
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
									$('.questions').on(clickEvent, "input[type=checkbox]", function(){
							 | 
						||
| 
								 | 
							
										if( $( this ).is(":checked") )
							 | 
						||
| 
								 | 
							
											$( this ).parent().find( 'input[type=hidden]' ).val("1");
							 | 
						||
| 
								 | 
							
										else
							 | 
						||
| 
								 | 
							
											$( this ).parent().find( 'input[type=hidden]' ).val("0");
							 | 
						||
| 
								 | 
							
									})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									$('.questions').on('keyup', '.q-title', function(event) {
							 | 
						||
| 
								 | 
							
										var $questionsTitle = $(this).closest('.attributes-body').siblings('.attributes-header').find('.questions-title'),
							 | 
						||
| 
								 | 
							
											$tabPane = $(this).closest('.tab-content');
							 | 
						||
| 
								 | 
							
										$questionsTitle.text($tabPane.find('.active input[type="text"]').val())
							 | 
						||
| 
								 | 
							
										event.preventDefault();
							 | 
						||
| 
								 | 
							
										/* Act on the event */
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
									$(".questions").sortable({
							 | 
						||
| 
								 | 
							
										update : function ( event, ui ){
							 | 
						||
| 
								 | 
							
											$(".questions .attributes").each( function ( i ){
							 | 
						||
| 
								 | 
							
												$( this ).find( "input.sequence" ).val( i );
							 | 
						||
| 
								 | 
							
												$( this ).find( "h4 span:eq(0)" ).text( i + 1 );
							 | 
						||
| 
								 | 
							
												$( this ).attr( "data-index", i );
							 | 
						||
| 
								 | 
							
											})
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									$('.questions').on(clickEvent, '.add-btn a, .remove-input, .delete, .attributes-header h4 i, .btn-group .btn', function(event) {
							 | 
						||
| 
								 | 
							
										if($(this).hasClass('remove-input')){
							 | 
						||
| 
								 | 
							
											inputAppendLength($(this), $(this).closest('.add-target').children('.input-append').length);
							 | 
						||
| 
								 | 
							
										} else if($(this).hasClass('delete')) {
							 | 
						||
| 
								 | 
							
											$(this).closest('.attributes').fadeOut(300, function() {
							 | 
						||
| 
								 | 
							
												if( $( this ).data( 'question' ) == "old" ){
							 | 
						||
| 
								 | 
							
													$(this).hide().removeAttr('data-question');
							 | 
						||
| 
								 | 
							
													$( this ).find( '.should_destroy' ).val(1);
							 | 
						||
| 
								 | 
							
													l--;
							 | 
						||
| 
								 | 
							
													checkQuestionsLength();
							 | 
						||
| 
								 | 
							
													$('.questions .attributes[data-question]').each(function(index, el) {
							 | 
						||
| 
								 | 
							
														$( this ).find( "input.sequence" ).val( index );
							 | 
						||
| 
								 | 
							
														$( this ).find( "h4 span:eq(0)" ).text( index + 1 );
							 | 
						||
| 
								 | 
							
														$( this ).attr( "data-index", index );
							 | 
						||
| 
								 | 
							
													});
							 | 
						||
| 
								 | 
							
												} else if( $( this ).data( 'question' ) == "new" ){
							 | 
						||
| 
								 | 
							
													$( this ).remove();
							 | 
						||
| 
								 | 
							
													l--;
							 | 
						||
| 
								 | 
							
													checkQuestionsLength();
							 | 
						||
| 
								 | 
							
													$('.questions .attributes[data-question]').each(function(index, el) {
							 | 
						||
| 
								 | 
							
														$( this ).find( "input.sequence" ).val( index );
							 | 
						||
| 
								 | 
							
														$( this ).find( "h4 span:eq(0)" ).text( index + 1 );
							 | 
						||
| 
								 | 
							
														$( this ).attr( "data-index", index );
							 | 
						||
| 
								 | 
							
													});
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											});
							 | 
						||
| 
								 | 
							
										} else if($(this).hasClass('icon-caret-up') || $(this).hasClass('icon-caret-down')) {
							 | 
						||
| 
								 | 
							
											if($(this).hasClass('icon-caret-up')) {
							 | 
						||
| 
								 | 
							
												$(this).closest('.attributes-header').siblings('.attributes-body').slideUp(300)
							 | 
						||
| 
								 | 
							
												$(this).addClass('icon-caret-down').removeClass('icon-caret-up');
							 | 
						||
| 
								 | 
							
											} else {
							 | 
						||
| 
								 | 
							
												$(this).closest('.attributes-header').siblings('.attributes-body').slideDown(300)
							 | 
						||
| 
								 | 
							
												$(this).addClass('icon-caret-up').removeClass('icon-caret-down');
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										} else if($(this).hasClass('change-title')){
							 | 
						||
| 
								 | 
							
											var $questionsTitle = $(this).closest('.attributes-body').siblings('.attributes-header').find('.questions-title'),
							 | 
						||
| 
								 | 
							
												$tabPane = $(this).closest('.btn-group').siblings('.tab-content');
							 | 
						||
| 
								 | 
							
											$questionsTitle.text($tabPane.find('div').not('.active').children('input[type="text"]').val())
							 | 
						||
| 
								 | 
							
										} else {
							 | 
						||
| 
								 | 
							
											var _i = $(this).closest('.control-group').data('index') || 0,
							 | 
						||
| 
								 | 
							
												_className = $(this).closest('.control-group').attr('class').match(/options|rgl/g)[0],
							 | 
						||
| 
								 | 
							
												_index = $(this).closest('.attributes').data().index,
							 | 
						||
| 
								 | 
							
												_length = $(this).closest('.add-btn').siblings('.input-append').length;
							 | 
						||
| 
								 | 
							
											$('#template-survery-option').tmpl(setData(_index, "", _i, _className)).insertBefore($(this).closest('.add-btn'));
							 | 
						||
| 
								 | 
							
											$(this).closest('.add-target').find('.input-append').find('.remove-input').removeClass('hide').prev().removeClass('last');
							 | 
						||
| 
								 | 
							
											_i += 1
							 | 
						||
| 
								 | 
							
											$(this).closest('.control-group').data('index', _i);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										event.preventDefault();
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
									checkQuestionsLength();
							 | 
						||
| 
								 | 
							
								});
							 |