%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/gachan/www/wp-content/plugins/mailchimp/assets/js/
Upload File :
Create Path :
Current File : /home/gachan/www/wp-content/plugins/mailchimp/assets/js/admin.js

(function($) {
	'use strict';

	/**
	 * Variables
	 */
	var $context = $(document.getElementById('mc4wp-admin'));
	var $listInputs = $(document.getElementById('mc4wp-lists')).find(':input');
	var $formMarkup = $(document.getElementById('mc4wpformmarkup'));
	var $missingFieldsNotice = $(document.getElementById('missing-fields-notice'));
	var $missingFieldsList = $(document.getElementById('missing-fields-list'));

	/**
	 * Functions
	 */
	function showProNotice() {

		// prevent checking of radio buttons
		if( typeof this.checked === 'boolean' ) {
			this.checked = false;
		}

		alert( mc4wp.strings.proOnlyNotice );
		event.stopPropagation();
	}

	function toggleSendWelcomeFields() {

		var $el = $(document.getElementById('mc4wp-send-welcome'));

		if($(this).val() == 0) {
			$el.removeClass('hidden').find(':input').removeAttr('disabled');
		} else {
			$el.addClass('hidden').find(':input').attr('disabled', 'disabled').prop('checked', false);
		}
	}

	function toggleWooCommerceSettings() {
		var $el = $(document.getElementById('woocommerce-settings'));
		$el.toggle(this.checked);
	}

	function toggleFieldWizard() {
		var hasListSelected = $listInputs.filter(':checked').length > 0;
		$(".mc4wp-notice.no-lists-selected").toggle( ! hasListSelected );
		$( document.getElementById( 'mc4wp-fw-mailchimp-fields' )).toggle( hasListSelected );
	}

	function allowTabKey(e) {
		var keyCode = e.keyCode || e.which;

		if (keyCode === 9) {
			e.preventDefault();
			var start = this.selectionStart;
			var end = this.selectionEnd;

			// set textarea value to: text before caret + tab + text after caret
			$(this).val($(this).val().substring(0, start) + "\t" + $(this).val().substring(end));

			// put caret at right position again
			this.selectionStart = this.selectionEnd = start + 1;
		}
	}

	function addQTagsButtons() {
		if ( typeof(QTags) === 'undefined' ) {
			return;
		}

		QTags.addButton( 'mc4wp_paragraph', '<p>', '<p>', '</p>', 'paragraph', 'Paragraph tag', 1 );
		QTags.addButton( 'mc4wp_label', 'label', '<label>', '</label>', 'label', 'Label tag', 2 );
		QTags.addButton( 'mc4wp_response', 'form response', '{response}', '', 'response', 'Shows the form response' );
		QTags.addButton( 'mc4wp_subscriber_count', '# of subscribers', '{subscriber_count}', '', 'subscribers', 'Shows number of subscribers of selected list(s)' );

		if( window.mc4wp.hasCaptchaPlugin === true ) {
			QTags.addButton( 'mc4wp_captcha', 'CAPTCHA', '{captcha}', '', 'captcha', 'Display a CAPTCHA field' );
		}
	}

	/**
	 * Bind Event Handlers
	 */

	// show a notice when clicking a pro feature
	$context.find(".pro-feature, .pro-feature label, .pro-feature :radio").click(showProNotice);

	// Show send-welcome field only when double opt-in is disabled
	$context.find('input[name$="[double_optin]"]').change(toggleSendWelcomeFields);

	// show woocommerce settings only when `show at woocommerce checkout` is checked.
	$context.find('input[name$="[show_at_woocommerce_checkout]"]').change(toggleWooCommerceSettings);

	// only show fieldwizard when a list is selected
	$listInputs.change(toggleFieldWizard);

	// Allow tabs inside the form mark-up
	$(document).delegate('#mc4wpformmarkup', 'keydown', allowTabKey);

	addQTagsButtons();


	/**
	* MailChimp for WordPress Field Wizard
	* Created by Danny van Kooten
	*/
	(function() {
		'use strict';

		// setup variables
		var $lists = $("#mc4wp-lists :input");
		var $mailchimpFields = $("#mc4wp-fw-mailchimp-fields");
		var $mailchimpMergeFields = $mailchimpFields.find('.merge-fields');
		var $mailchimpGroupings = $mailchimpFields.find(".groupings");
		var $wizardFields = $("#mc4wp-fw-fields");
		var $value = $("#mc4wp-fw-value");
		var $valueLabel = $("#mc4wp-fw-value-label");
		var $multipleValues = $("#mc4wp-fw-values");
		var $label = $("#mc4wp-fw-label");
		var $placeholder = $("#mc4wp-fw-placeholder");
		var $required = $("#mc4wp-fw-required");
		var $wrapp = $("#mc4wp-fw-wrap-p");
		var fieldType, fieldName;
		var $codePreview = $("#mc4wp-fw-preview");
		var strings = mc4wp.strings.fieldWizard;
		var requiredFields = [];

		// functions
		function checkRequiredFields() {

			// check presence of reach required field
			var missingFields = {};
			for(var i=0; i<requiredFields.length; i++) {
				var htmlString = 'name="' + requiredFields[i].tag.toLowerCase();
				if( $formMarkup.val().toLowerCase().indexOf( htmlString ) == -1 ) {
					missingFields[requiredFields[i].tag] = requiredFields[i];
				}
			}

			// do nothing if no fields are missing
			if($.isEmptyObject(missingFields)) {
				$missingFieldsNotice.hide();
				return;
			}

			// show notice
			$missingFieldsList.html('');
			for( var key in missingFields ) {
				var field = missingFields[key];
				var $listItem = $("<li></li>");
				$listItem.html( field.name + " (<code>" + field.tag + "</code>)");
				$listItem.appendTo( $missingFieldsList );
			}

			$missingFieldsNotice.show();
			return;
		}

		// set the fields the user can choose from
		function setMailChimpFields()
		{
			// empty field select
			$mailchimpFields.find('option').not('.default').remove();

			// empty required fields array
			requiredFields = [];
			
			// loop through checked lists
			$lists.filter(':checked').each(function() {
				var listId = $(this).val();
				var list = mc4wp.mailchimpLists[listId];

				// loop through merge fields from this list
				for(var i = 0, fieldCount = list.merge_vars.length; i < fieldCount; i++) {

					var listField = list.merge_vars[i];

					if( listField.req ) {
						requiredFields.push( listField );
					}

					// add field to select if no similar option exists yet
					if($mailchimpMergeFields.children("option[value='"+ listField.tag +"']").length === 0) {

						var text = (listField.name.length > 25) ? listField.name.substring(0, 25) + '..' : listField.name;
						if(listField.req) { text += '*'; }

						var $option = $("<option />")
							.text(text)
							.val(listField.tag)
							.data('list-field', listField);

						$mailchimpMergeFields.append($option);
					}
				}

				// loop through interest groupings
				for(var i = 0, groupingsCount = list.interest_groupings.length; i < groupingsCount; i++) {
					var listGrouping = list.interest_groupings[i];

					// add field to select if no similar option exists yet
					if($mailchimpGroupings.children("option[value='"+ listGrouping.id +"']").length === 0) {
						var text = (listGrouping.name.length > 25) ? listGrouping.name.substring(0, 25) + '..' : listGrouping.name;
						
						// build option HTML
						var $option = $("<option />")
							.text(text)
							.val(listGrouping.id)
							.data('list-grouping', listGrouping);

						// only show 1 grouping per list
						if(i >= 1) {
							$option.text( strings.proOnly + " " + text)
								.attr('disabled', 'disabled')
								.data('list-grouping', null);
						}

						$mailchimpGroupings.append($option);
					}
				}


			});

			// check required fields with new selected lists
			checkRequiredFields();
		}

		/**
		* Set Presets
		*/ 
		function setPresets()
		{
			resetFields();

			var selected = $(this).find(':selected');
			switch( selected.val() ) {

				case '_action':
					fieldType = 'action';
					$wizardFields.find('.wrap-p').show();
					break;

				case 'submit':
					fieldType = 'submit';
					$valueLabel.text( strings.buttonText );
					$value.val( strings.subscribe );
					$wizardFields.find('p.row').filter('.value, .wrap-p').show();
					break;

				case 'lists':
					fieldType = 'lists';
					$wizardFields.find('.wrap-p').show();
					break;

				default:
					// try data for MailChimp field
					var data = selected.data('list-field');
					if(data) { 
						return setPresetsForField(data); 
					}

					// try data for interest grouping
					var data = selected.data('list-grouping');
					if(data) { 
						return setPresetsForGrouping(data); 
					}

					break;
			}

			updateCodePreview();
		}

		/**
		* Resets all wizard fields back to their default state
		*/
		function resetFields() {
			$wizardFields.find('.row :input').each(function() {
				if($(this).is(":checkbox")) { this.checked = true; } else { this.value = ''; }
			});

			$wizardFields.find('p.row').hide();
			$multipleValues.find(':input').remove();
			$wizardFields.show();

			fieldType = 'text';
			fieldName = '';
			$valueLabel.html( strings.initialValue + " <small>" + strings.optional + "</small>" );
		}

		/**
		* Add inputs for each group
		*/
		function addGroupInputs(groups)
		{
			// add a text input to $multipleValues for each group
			for(var i = 0, groupsCount = groups.length; i < groupsCount; i++) {
				$("<input />").attr('type', 'text')
					.addClass('widefat').data('value', groups[i].name)
					.attr('placeholder', strings.labelFor + ' "' + groups[i].name + '" ' + strings.orLeaveEmpty )
					.attr('value', groups[i].name)
					.appendTo($multipleValues);
			}
		}

		/**
		* Set presets for interest groupings
		*/
		function setPresetsForGrouping(data)
		{
			$wizardFields.find('p.row').filter('.values, .label, .wrap-p').show();
			$label.val(data.name + ":");
			fieldName = 'GROUPINGS[' + data.id + ']';
			addGroupInputs(data.groups);

			switch(data.form_field) {
				case 'radio':
					fieldType = 'radio';
					break;

				case 'hidden':
					// hide all rows except value row
					$wizardFields.find('p.row').filter('.values, .label, .wrap-p').hide();
					$wizardFields.find('p.row.value').show();

					// add group name to hidden input value
					for(var i = 0, groupsCount = data.groups.length; i < groupsCount; i++) {
						$value.val($value.val() + data.groups[i].name + ',');
					}

					fieldType = 'hidden';
					break;

				case 'dropdown':
					fieldType = 'select';
					break;

				default:
					fieldType = 'checkbox';

					// turn field name into an array
					fieldName += '[]';
					break;
			}	

			// update code preview
			updateCodePreview();
		}

		/**
		* Build list choice HTML
		*/
		function getListChoiceHTML()
		{
			var html = '';
			$lists.each(function() {
				var list_id = $(this).val();
				var list_name = $(this).parent('label').text();
				var attrs = '';

				if($(this).is(':checked')) {
					attrs += 'checked ';
				}

				html += '<label>' + "\n"
				html += "\t" + '<input type="checkbox" name="_mc4wp_lists[]" value="' + list_id +'" '+ attrs + ' /> '+ list_name + "\n";
				html += '</label>' + "\n";
			});

			return html;
		}

		function getActionChoiceHTML() {
			var actions = [
				{ name: "subscribe", label: strings.subscribe, checked: true },
				{ name: "unsubscribe", label: strings.unsubscribe, checked: false }
			];

			var html = '';
			for( var i=0; i<actions.length; i++ ) {
				var action = actions[i];

				html += '<label>' + "\n";
				html += "\t" + '<input type="radio" name="_mc4wp_action" value="' + action.name + '" '+ ( ( action.checked ) ? 'checked' : '' ) +' > ' + action.label + "\n";
				html += '</label>' + "\n";
			}

			return html;
		}



		/**
		* Set presets for a fields
		*/
		function setPresetsForField(data) 
		{

			// show fields for this field type
			var visibleRowsMap = {
				'default': [ 'label', 'value', 'placeholder', 'required', 'wrap-p' ],
				'select': [ 'label', 'required', 'wrap-p', 'values'],
				'radio': [ 'label', 'required', 'wrap-p', 'values'],
				'date':  [ 'label', 'required', 'wrap-p', 'value']
			};

			// map MailChimp field types to HTML5 field type
			var fieldTypesMap = {
				'text': 'text',
				'email': 'email',
				'phone': 'tel',
				'address': 'text',
				'number': 'number',
				'dropdown': 'select',
				'date': 'date',
				'birthday': 'date',
				'radio': 'radio',
				'checkbox': 'checkbox',
				'url': 'url'
			};

			if( typeof(fieldTypesMap[data.field_type]) !== "undefined") {
				fieldType = fieldTypesMap[data.field_type];
			} else {
				fieldType = 'text';
			}
			
			if( typeof(visibleRowsMap[fieldType]) !== "undefined") {
				var visibleRows = visibleRowsMap[fieldType];
			} else {
				var visibleRows = visibleRowsMap["default"];
			}

			for(var i = 0; i < visibleRows.length; i++) {
				$wizardFields.find('p.row.' + visibleRows[i]).show();
			}

			fieldType = fieldType;
			fieldName = data.tag;

			// set placeholder text
			$placeholder.val( "Your " + data.name.toLowerCase());

			// set label text
			$label.val( data.name + ":" );

			// set required attribute
			$required.prop('checked', data.req);

			if($multipleValues.is(":visible") && data.choices) {
				for(var i = 0; i < data.choices.length; i++) {
					$("<input />")
						.attr('type', 'text')
						.addClass('widefat')
						.data('value', data.choices[i])
						.attr('placeholder', strings.labelFor + ' "' + data.choices[i] + '" ' + strings.orLeaveEmpty )
						.attr('value', data.choices[i])
						.appendTo($multipleValues);
				}
			}
			
			// update code preview
			updateCodePreview();
		}

		/**
		* Format and indent the generated HTML
		* Then add it to the code preview textarea
		*/
		function setCodePreview(html) {
			html = html_beautify(html);
			$codePreview.val(html);
		}


		/**
		* Generate HTML based on the various field values
		*/
		function updateCodePreview()
		{
			var $code = $("<div></div>");
			var $input;

			switch(fieldType) {

				case 'action':
					var html = getActionChoiceHTML();

					if( wrapInParagraph() ) {
						html = "<p>" + html + "</p>";
					}

					return setCodePreview(html);
					break;

				// MailChimp lists
				case 'lists':
					var html = getListChoiceHTML();

					if( wrapInParagraph() ) {
						html = "<p>" + html + "</p>";
					}

					return setCodePreview(html);
					break;

				// MailChimp dropdown
				case 'select':
					$input = $("<select />");

					// add options to select
					$multipleValues.find(":input").each(function() {
						if($(this).val().length > 0) {
							$("<option />")
								.val($(this).data("value"))
								.text($(this).val())
								.appendTo($input);						}
					});
					break;

				// MailChimo choices
				case 'radio':
				case 'checkbox':
					// build multiple input values
					$multipleValues.find(":input").each(function() {
						if($(this).val().length > 0) {
							$input = $("<input />").attr('type', fieldType).attr('name', fieldName).val($(this).data('value'));

							if($required.is(':visible:checked')) {
								$input.attr('required', true);
							}

							$code.append($input);

							$input.wrap("<label />");
							$("<span />").text($(this).val() + ' ').insertAfter($input);
						}					
					});
					break;

				// MailChimp long text
				case 'textarea':
					$input = $("<textarea />");
					break;

				default:
					$input = $("<input />").attr('type', fieldType);
					break;
			}

			// only do this piece when we're not adding radio inputs
			if(fieldType !== 'radio' && fieldType !== 'checkbox') {

				// set name attribute
				if(fieldName.length > 0) {
					$input.attr('name', fieldName);
				}

				// set value
				if($value.is(":visible") && $value.val().length > 0) {
					if(fieldType === 'textarea') {
						$input.text($value.val());
					} else {
						$input.attr('value', $value.val());
					}
				}

				// add placeholder to element
				if($placeholder.is(":visible") && $placeholder.val().length > 0) {
					$input.attr('placeholder', $placeholder.val());
				}

				// add required attribute
				if($required.is(':visible:checked')) {
					$input.attr('required', true);
				}

				$code.append($input);			
			}

			// build label
			if($label.is(":visible") && $label.val().length > 0) {
				$("<label />").text($label.val()).prependTo($code);
			}

			// wrap in paragraphs?
			if( wrapInParagraph() ) {
				$code.wrapInner($("<p />"));
			}
			
			setCodePreview($code.html());
		}

		/**
		* Transfer code preview field to form mark-up
		*/
		function addCodeToFormMarkup() {
			
			var result = false;

			// try to insert in QuickTags editor at cursor position
			if(typeof wpActiveEditor !== 'undefined' && typeof QTags !== 'undefined' && QTags.insertContent) {
				result = QTags.insertContent($codePreview.val());
			}
			
			// fallback, just append
			if(!result) {
				$formMarkup.val($formMarkup.val() + "\n" + $codePreview.val());
			}

			// trigger change event
			$formMarkup.change();
		}

		/**
		 * Should we wrap the HTML in paragraph tags?
		 *
		 * @returns {boolean}
		 */
		function wrapInParagraph() {
			return ( $wrapp.is(':visible:checked') ) ? true: false;
		}

		// setup events
		$lists.change(setMailChimpFields);
		$mailchimpFields.change(setPresets);
		$wizardFields.change(updateCodePreview);
		$("#mc4wp-fw-add-to-form").click(addCodeToFormMarkup);

		// Validate the form fields after every change
		$formMarkup.bind({
			'input': function() {
				$formMarkup.unbind('keydown');
				checkRequiredFields.call(this);
			},
			'keydown': checkRequiredFields
		});

		// init
		setMailChimpFields();

	})();

})(jQuery);


Zerion Mini Shell 1.0