/** * * ----------------------------------------------------------- * * Codestar Framework * A Simple and Lightweight WordPress Option Framework * * ----------------------------------------------------------- * */ ; (function ($, window, document, undefined) { 'use strict'; // // Constants // var DARKIFY = DARKIFY || {}; DARKIFY.funcs = {}; DARKIFY.vars = { onloaded: false, $body: $('body'), $window: $(window), $document: $(document), $form_warning: null, is_confirm: false, form_modified: false, code_themes: [], is_rtl: $('body').hasClass('rtl'), }; // // Helper Functions // DARKIFY.helper = { // // Generate UID // uid: function (prefix) { return (prefix || '') + Math.random().toString(36).substr(2, 9); }, // Quote regular expression characters // preg_quote: function (str) { return (str + '').replace(/(\[|\])/g, "\\$1"); }, // // Reneme input names // name_nested_replace: function ($selector, field_id) { var checks = []; var regex = new RegExp(DARKIFY.helper.preg_quote(field_id + '[\\d+]'), 'g'); $selector.find(':radio').each(function () { if (this.checked || this.orginal_checked) { this.orginal_checked = true; } }); $selector.each(function (index) { $(this).find(':input').each(function () { this.name = this.name.replace(regex, field_id + '[' + index + ']'); if (this.orginal_checked) { this.checked = true; } }); }); }, // // Debounce // debounce: function (callback, threshold, immediate) { var timeout; return function () { var context = this, args = arguments; var later = function () { timeout = null; if (!immediate) { callback.apply(context, args); } }; var callNow = (immediate && !timeout); clearTimeout(timeout); timeout = setTimeout(later, threshold); if (callNow) { callback.apply(context, args); } }; }, }; // // Custom clone for textarea and select clone() bug // $.fn.darkify_clone = function () { var base = $.fn.clone.apply(this, arguments), clone = this.find('select').add(this.filter('select')), cloned = base.find('select').add(base.filter('select')); for (var i = 0; i < clone.length; ++i) { for (var j = 0; j < clone[i].options.length; ++j) { if (clone[i].options[j].selected === true) { cloned[i].options[j].selected = true; } } } this.find(':radio').each(function () { this.orginal_checked = this.checked; }); return base; }; // // Expand All Options // $.fn.darkify_expand_all = function () { return this.each(function () { $(this).on('click', function (e) { e.preventDefault(); $('.darkify-wrapper').toggleClass('darkify-show-all'); $('.darkify-section').darkify_reload_script(); $(this).find('.fa').toggleClass('fa-indent').toggleClass('fa-outdent'); }); }); }; // // Options Navigation // $.fn.darkify_nav_options = function () { return this.each(function () { var $nav = $(this), $window = $(window), $wpwrap = $('#wpwrap'), $links = $nav.find('a'), $last; $window.on('hashchange darkify.hashchange', function () { var hash = window.location.hash.replace('#tab=', ''); var slug = hash ? hash : $links.first().attr('href').replace('#tab=', ''); var $link = $('[data-tab-id="' + slug + '"]'); if ($link.length) { $link.closest('.darkify-tab-item').addClass('darkify-tab-expanded').siblings().removeClass('darkify-tab-expanded'); if ($link.next().is('ul')) { $link = $link.next().find('li').first().find('a'); slug = $link.data('tab-id'); } $links.removeClass('darkify-active'); $link.addClass('darkify-active'); if ($last) { $last.addClass('hidden'); } var $section = $('[data-section-id="' + slug + '"]'); $section.removeClass('hidden'); $section.darkify_reload_script(); $('.darkify-section-id').val($section.index() + 1); $last = $section; if ($wpwrap.hasClass('wp-responsive-open')) { $('html, body').animate({ scrollTop: ($section.offset().top - 50) }, 200); $wpwrap.removeClass('wp-responsive-open'); } } }).trigger('darkify.hashchange'); }); }; // // Metabox Tabs // $.fn.darkify_nav_metabox = function () { return this.each(function () { var $nav = $(this), $links = $nav.find('a'), $sections = $nav.parent().find('.darkify-section'), $last; $links.each(function (index) { $(this).on('click', function (e) { e.preventDefault(); var $link = $(this); $links.removeClass('darkify-active'); $link.addClass('darkify-active'); if ($last !== undefined) { $last.addClass('hidden'); } var $section = $sections.eq(index); $section.removeClass('hidden'); $section.darkify_reload_script(); $last = $section; }); }); $links.first().trigger('click'); }); }; // // Metabox Page Templates Listener // $.fn.darkify_page_templates = function () { if (this.length) { $(document).on('change', '.editor-page-attributes__template select, #page_template, .edit-post-post-status + div select', function () { var maybe_value = $(this).val() || 'default'; $('.darkify-page-templates').removeClass('darkify-metabox-show').addClass('darkify-metabox-hide'); $('.darkify-page-' + maybe_value.toLowerCase().replace(/[^a-zA-Z0-9]+/g, '-')).removeClass('darkify-metabox-hide').addClass('darkify-metabox-show'); }); } }; // // Metabox Post Formats Listener // $.fn.darkify_post_formats = function () { if (this.length) { $(document).on('change', '.editor-post-format select, #formatdiv input[name="post_format"]', function () { var maybe_value = $(this).val() || 'default'; // Fallback for classic editor version maybe_value = (maybe_value === '0') ? 'default' : maybe_value; $('.darkify-post-formats').removeClass('darkify-metabox-show').addClass('darkify-metabox-hide'); $('.darkify-post-format-' + maybe_value).removeClass('darkify-metabox-hide').addClass('darkify-metabox-show'); }); } }; // // Search // $.fn.darkify_search = function () { return this.each(function () { var $this = $(this), $input = $this.find('input'); $input.on('change keyup', function () { var value = $(this).val(), $wrapper = $('.darkify-wrapper'), $section = $wrapper.find('.darkify-section'), $fields = $section.find('> .darkify-field:not(.darkify-depend-on)'), $titles = $fields.find('> .darkify-title, .darkify-search-tags'); if (value.length > 3) { $fields.addClass('darkify-metabox-hide'); $wrapper.addClass('darkify-search-all'); $titles.each(function () { var $title = $(this); if ($title.text().match(new RegExp('.*?' + value + '.*?', 'i'))) { var $field = $title.closest('.darkify-field'); $field.removeClass('darkify-metabox-hide'); $field.parent().darkify_reload_script(); } }); } else { $fields.removeClass('darkify-metabox-hide'); $wrapper.removeClass('darkify-search-all'); } }); }); }; // // Sticky Header // $.fn.darkify_sticky = function () { return this.each(function () { var $this = $(this), $window = $(window), $inner = $this.find('.darkify-header-inner'), padding = parseInt($inner.css('padding-left')) + parseInt($inner.css('padding-right')), offset = 32, scrollTop = 0, lastTop = 0, ticking = false, stickyUpdate = function () { var offsetTop = $this.offset().top, stickyTop = Math.max(offset, offsetTop - scrollTop), winWidth = $window.innerWidth(); if (stickyTop <= offset && winWidth > 782) { $inner.css({ width: $this.outerWidth() - padding }); $this.css({ height: $this.outerHeight() }).addClass('darkify-sticky'); } else { $inner.removeAttr('style'); $this.removeAttr('style').removeClass('darkify-sticky'); } }, requestTick = function () { if (!ticking) { requestAnimationFrame(function () { stickyUpdate(); ticking = false; }); } ticking = true; }, onSticky = function () { scrollTop = $window.scrollTop(); requestTick(); }; $window.on('scroll resize', onSticky); onSticky(); }); }; // // Dependency System // $.fn.darkify_dependency = function () { return this.each(function () { var $this = $(this), $fields = $this.children('[data-controller]'); if ($fields.length) { var normal_ruleset = $.darkify_deps.createRuleset(), global_ruleset = $.darkify_deps.createRuleset(), normal_depends = [], global_depends = []; $fields.each(function () { var $field = $(this), controllers = $field.data('controller').split('|'), conditions = $field.data('condition').split('|'), values = $field.data('value').toString().split('|'), is_global = $field.data('depend-global') ? true : false, ruleset = (is_global) ? global_ruleset : normal_ruleset; $.each(controllers, function (index, depend_id) { var value = values[index] || '', condition = conditions[index] || conditions[0]; ruleset = ruleset.createRule('[data-depend-id="' + depend_id + '"]', condition, value); ruleset.include($field); if (is_global) { global_depends.push(depend_id); } else { normal_depends.push(depend_id); } }); }); if (normal_depends.length) { $.darkify_deps.enable($this, normal_ruleset, normal_depends); } if (global_depends.length) { $.darkify_deps.enable(DARKIFY.vars.$body, global_ruleset, global_depends); } } }); }; // // Field: accordion // $.fn.darkify_field_accordion = function () { return this.each(function () { var $titles = $(this).find('.darkify-accordion-title'); $titles.on('click', function () { var $title = $(this), $icon = $title.find('.darkify-accordion-icon'), $content = $title.next(); if ($icon.hasClass('fa-angle-right')) { $icon.removeClass('fa-angle-right').addClass('fa-angle-down'); } else { $icon.removeClass('fa-angle-down').addClass('fa-angle-right'); } if (!$content.data('opened')) { $content.darkify_reload_script(); $content.data('opened', true); } $content.toggleClass('darkify-accordion-open'); }); }); }; // // Field: backup // $.fn.darkify_field_backup = function () { return this.each(function () { if (window.wp.customize === undefined) { return; } var base = this, $this = $(this), $body = $('body'), $import = $this.find('.darkify-import'), $reset = $this.find('.darkify-reset'); base.notificationOverlay = function () { if (wp.customize.notifications && wp.customize.OverlayNotification) { // clear if there is any saved data. if (!wp.customize.state('saved').get()) { wp.customize.state('changesetStatus').set('trash'); wp.customize.each(function (setting) { setting._dirty = false; }); wp.customize.state('saved').set(true); } // then show a notification overlay wp.customize.notifications.add(new wp.customize.OverlayNotification('darkify_field_backup_notification', { type: 'default', message: ' ', loading: true })); } }; $reset.on('click', function (e) { e.preventDefault(); if (DARKIFY.vars.is_confirm) { base.notificationOverlay(); window.wp.ajax.post('darkify-reset', { unique: $reset.data('unique'), nonce: $reset.data('nonce') }) .done(function (response) { window.location.reload(true); }) .fail(function (response) { alert(response.error); wp.customize.notifications.remove('darkify_field_backup_notification'); }); } }); $import.on('click', function (e) { e.preventDefault(); if (DARKIFY.vars.is_confirm) { base.notificationOverlay(); window.wp.ajax.post('darkify-import', { unique: $import.data('unique'), nonce: $import.data('nonce'), data: $this.find('.darkify-import-data').val() }).done(function (response) { window.location.reload(true); }).fail(function (response) { alert(response.error); wp.customize.notifications.remove('darkify_field_backup_notification'); }); } }); }); }; // // Field: background // $.fn.darkify_field_background = function () { return this.each(function () { $(this).find('.darkify--background-image').darkify_reload_script(); }); }; $.fn.darkify_field_code_editor = function () { return this.each(function () { if (typeof wp === 'undefined' || typeof wp.codeEditor === 'undefined') { return; } var $this = $(this), $textarea = $this.find('textarea'), settings = $textarea.data('editor') || {}; // Merge with WP defaults var editorSettings = wp.codeEditor.defaultSettings ? _.clone(wp.codeEditor.defaultSettings) : {}; editorSettings.codemirror = _.extend( {}, editorSettings.codemirror, settings ); // Initialize editor var editor = wp.codeEditor.initialize($textarea[0], editorSettings); //editor.codemirror.setOption('theme', 'monokai'); // Sync changes back to textarea editor.codemirror.on('change', function () { $textarea.val(editor.codemirror.getValue()).trigger('change'); }); }); }; // // Field: date // $.fn.darkify_field_date = function () { return this.each(function () { var $this = $(this), $inputs = $this.find('input'), settings = $this.find('.darkify-date-settings').data('settings'), wrapper = '
'; var defaults = { showAnim: '', beforeShow: function (input, inst) { $(inst.dpDiv).addClass('darkify-datepicker-wrapper'); }, onClose: function (input, inst) { $(inst.dpDiv).removeClass('darkify-datepicker-wrapper'); }, }; settings = $.extend({}, settings, defaults); if ($inputs.length === 2) { settings = $.extend({}, settings, { onSelect: function (selectedDate) { var $this = $(this), $from = $inputs.first(), option = ($inputs.first().attr('id') === $(this).attr('id')) ? 'minDate' : 'maxDate', date = $.datepicker.parseDate(settings.dateFormat, selectedDate); $inputs.not(this).datepicker('option', option, date); } }); } $inputs.each(function () { var $input = $(this); if ($input.hasClass('hasDatepicker')) { $input.removeAttr('id').removeClass('hasDatepicker'); } $input.datepicker(settings); }); }); }; // // Field: datetime // $.fn.darkify_field_datetime = function () { return this.each(function () { var $this = $(this), $inputs = $this.find('input'), settings = $this.find('.darkify-datetime-settings').data('settings'); settings = $.extend({}, settings, { onReady: function (selectedDates, dateStr, instance) { $(instance.calendarContainer).addClass('darkify-flatpickr'); }, }); if ($inputs.length === 2) { settings = $.extend({}, settings, { onChange: function (selectedDates, dateStr, instance) { if ($(instance.element).data('type') === 'from') { $inputs.last().get(0)._flatpickr.set('minDate', selectedDates[0]); } else { $inputs.first().get(0)._flatpickr.set('maxDate', selectedDates[0]); } }, }); } $inputs.each(function () { $(this).flatpickr(settings); }); }); }; // // Field: fieldset // $.fn.darkify_field_fieldset = function () { return this.each(function () { $(this).find('.darkify-fieldset-content').darkify_reload_script(); }); }; // // Field: gallery // $.fn.darkify_field_gallery = function () { return this.each(function () { var $this = $(this), $edit = $this.find('.darkify-edit-gallery'), $clear = $this.find('.darkify-clear-gallery'), $list = $this.find('ul'), $input = $this.find('input'), $img = $this.find('img'), wp_media_frame; $this.on('click', '.darkify-button, .darkify-edit-gallery', function (e) { var $el = $(this), ids = $input.val(), what = ($el.hasClass('darkify-edit-gallery')) ? 'edit' : 'add', state = (what === 'add' && !ids.length) ? 'gallery' : 'gallery-edit'; e.preventDefault(); if (typeof window.wp === 'undefined' || !window.wp.media || !window.wp.media.gallery) { return; } // Open media with state if (state === 'gallery') { wp_media_frame = window.wp.media({ library: { type: 'image' }, frame: 'post', state: 'gallery', multiple: true }); wp_media_frame.open(); } else { wp_media_frame = window.wp.media.gallery.edit('[gallery ids="' + ids + '"]'); if (what === 'add') { wp_media_frame.setState('gallery-library'); } } // Media Update wp_media_frame.on('update', function (selection) { $list.empty(); var selectedIds = selection.models.map(function (attachment) { var item = attachment.toJSON(); var thumb = (item.sizes && item.sizes.thumbnail && item.sizes.thumbnail.url) ? item.sizes.thumbnail.url : item.url; $list.append('
  • '); return item.id; }); $input.val(selectedIds.join(',')).trigger('change'); $clear.removeClass('hidden'); $edit.removeClass('hidden'); }); }); $clear.on('click', function (e) { e.preventDefault(); $list.empty(); $input.val('').trigger('change'); $clear.addClass('hidden'); $edit.addClass('hidden'); }); }); }; // // Field: group // $.fn.darkify_field_group = function() { return this.each(function() { var $this = $(this), $fieldset = $this.children('.darkify-fieldset'), $group = $fieldset.length ? $fieldset : $this, $wrapper = $group.children('.darkify-cloneable-wrapper'), $hidden = $group.children('.darkify-cloneable-hidden'), $max = $group.children('.darkify-cloneable-max'), $min = $group.children('.darkify-cloneable-min'), title_by = $wrapper.data('title-by'), title_prefix= $wrapper.data('title-by-prefix'), field_id = $wrapper.data('field-id'), is_number = Boolean(Number($wrapper.data('title-number'))), max = parseInt($wrapper.data('max')), min = parseInt($wrapper.data('min')); if ($wrapper.hasClass('ui-accordion')) { $wrapper.find('.ui-accordion-header-icon').remove(); } var update_title_numbers = function($selector) { $selector.find('.darkify-cloneable-title-number').each(function(index) { $(this).html(($(this).closest('.darkify-cloneable-item').index() + 1) + '.'); }); }; // Function to update title text for a single item var updateCloneableTitle = function($item) { var $title = $item.find('> .darkify-cloneable-title .darkify-cloneable-value'); var titles = []; $.each(title_by, function(key, title_key) { var $input = $item.find('[data-depend-id="' + title_key + '"]'); var input_value = ''; if ($input.is('select')) { input_value = $input.find('option:selected').text(); } else { input_value = $input.val(); } if (!input_value) { if ($input.is('select')) { input_value = $input.find('option').first().text(); } else { input_value = $input.data('default') || $input.attr('placeholder') || ''; } } if (input_value) { titles.push(input_value); } }); if (titles.length) { $title.text(titles.join(' || ')); } }; $wrapper.accordion({ header: '> .darkify-cloneable-item > .darkify-cloneable-title', collapsible: true, active: false, animate: false, heightStyle: 'content', icons: { 'header': 'darkify-cloneable-header-icon icofont-rounded-right', 'activeHeader': 'darkify-cloneable-header-icon icofont-rounded-down' }, activate: function(event, ui) { var $panel = ui.newPanel; var $header = ui.newHeader; if ($panel.length && !$panel.data('opened')) { var $item = $header.closest('.darkify-cloneable-item'); // Bind updates for each field $.each(title_by, function(key, title_key) { $panel.find('[data-depend-id="' + title_key + '"]') .on('change keyup darkify.keyup', function() { updateCloneableTitle($item); }); }); // Initial update for this opened item updateCloneableTitle($item); $panel.darkify_reload_script(); $panel.data('opened', true).data('retry', false); } else if ($panel.data('retry')) { $panel.darkify_reload_script_retry(); $panel.data('retry', false); } } }); // Always update all titles on load/refresh $wrapper.children('.darkify-cloneable-item').each(function() { var $item = $(this); // Bind events even if not opened $.each(title_by, function(key, title_key) { $item.find('[data-depend-id="' + title_key + '"]') .on('change keyup darkify.keyup', function() { updateCloneableTitle($item); }); }); updateCloneableTitle($item); }); $wrapper.sortable({ axis: 'y', handle: '.darkify-cloneable-title,.darkify-cloneable-sort', helper: 'original', cursor: 'move', placeholder: 'widget-placeholder', start: function(event, ui) { $wrapper.accordion({ active: false }); $wrapper.sortable('refreshPositions'); ui.item.children('.darkify-cloneable-content').data('retry', true); }, update: function(event, ui) { DARKIFY.helper.name_nested_replace($wrapper.children('.darkify-cloneable-item'), field_id); $wrapper.darkify_customizer_refresh(); if (is_number) { update_title_numbers($wrapper); } }, }); $group.children('.darkify-cloneable-add').on('click', function(e) { e.preventDefault(); var count = $wrapper.children('.darkify-cloneable-item').length; $min.hide(); if (max && (count + 1) > max) { $max.show(); return; } var $cloned_item = $hidden.darkify_clone(true); $cloned_item.removeClass('darkify-cloneable-hidden'); $cloned_item.find(':input[name!="_pseudo"]').each(function() { this.name = this.name.replace('___', '').replace(field_id + '[0]', field_id + '[' + count + ']'); }); $wrapper.append($cloned_item); $wrapper.accordion('refresh'); $wrapper.accordion({ active: count }); $wrapper.darkify_customizer_refresh(); $wrapper.darkify_customizer_listen({ closest: true }); if (is_number) { update_title_numbers($wrapper); } updateCloneableTitle($cloned_item); }); var event_clone = function(e) { e.preventDefault(); var count = $wrapper.children('.darkify-cloneable-item').length; $min.hide(); if (max && (count + 1) > max) { $max.show(); return; } var $this = $(this), $parent = $this.parent().parent(), $cloned_helper = $parent.children('.darkify-cloneable-helper').darkify_clone(true), $cloned_title = $parent.children('.darkify-cloneable-title').darkify_clone(), $cloned_content = $parent.children('.darkify-cloneable-content').darkify_clone(), $cloned_item = $('
    '); $cloned_item.append($cloned_helper); $cloned_item.append($cloned_title); $cloned_item.append($cloned_content); $wrapper.children().eq($parent.index()).after($cloned_item); DARKIFY.helper.name_nested_replace($wrapper.children('.darkify-cloneable-item'), field_id); $wrapper.accordion('refresh'); $wrapper.darkify_customizer_refresh(); $wrapper.darkify_customizer_listen({ closest: true }); if (is_number) { update_title_numbers($wrapper); } updateCloneableTitle($cloned_item); }; $wrapper.children('.darkify-cloneable-item').children('.darkify-cloneable-helper').on('click', '.darkify-cloneable-clone', event_clone); $group.children('.darkify-cloneable-hidden').children('.darkify-cloneable-helper').on('click', '.darkify-cloneable-clone', event_clone); var event_remove = function(e) { e.preventDefault(); var count = $wrapper.children('.darkify-cloneable-item').length; $max.hide(); $min.hide(); if (min && (count - 1) < min) { $min.show(); return; } $(this).closest('.darkify-cloneable-item').remove(); DARKIFY.helper.name_nested_replace($wrapper.children('.darkify-cloneable-item'), field_id); $wrapper.darkify_customizer_refresh(); if (is_number) { update_title_numbers($wrapper); } }; $wrapper.children('.darkify-cloneable-item').children('.darkify-cloneable-helper').on('click', '.darkify-cloneable-remove', event_remove); $group.children('.darkify-cloneable-hidden').children('.darkify-cloneable-helper').on('click', '.darkify-cloneable-remove', event_remove); }); }; // // Field: icon // $.fn.darkify_field_icon = function () { return this.each(function () { var $this = $(this); $this.on('click', '.darkify-icon-add', function (e) { e.preventDefault(); var $button = $(this); var $modal = $('#darkify-modal-icon'); $modal.removeClass('hidden'); DARKIFY.vars.$icon_target = $this; if (!DARKIFY.vars.icon_modal_loaded) { $modal.find('.darkify-modal-loading').show(); window.wp.ajax.post('darkify-get-icons', { nonce: $button.data('nonce') }).done(function (response) { $modal.find('.darkify-modal-loading').hide(); DARKIFY.vars.icon_modal_loaded = true; var $load = $modal.find('.darkify-modal-load').html(response.content); $load.on('click', 'i', function (e) { e.preventDefault(); var icon = $(this).attr('title'); DARKIFY.vars.$icon_target.find('.darkify-icon-preview i').removeAttr('class').addClass(icon); DARKIFY.vars.$icon_target.find('.darkify-icon-preview').removeClass('hidden'); DARKIFY.vars.$icon_target.find('.darkify-icon-remove').removeClass('hidden'); DARKIFY.vars.$icon_target.find('input').val(icon).trigger('change'); $modal.addClass('hidden'); }); $modal.on('change keyup', '.darkify-icon-search', function () { var value = $(this).val(), $icons = $load.find('i'); $icons.each(function () { var $elem = $(this); if ($elem.attr('title').search(new RegExp(value, 'i')) < 0) { $elem.hide(); } else { $elem.show(); } }); }); $modal.on('click', '.darkify-modal-close, .darkify-modal-overlay', function () { $modal.addClass('hidden'); }); }).fail(function (response) { $modal.find('.darkify-modal-loading').hide(); $modal.find('.darkify-modal-load').html(response.error); $modal.on('click', function () { $modal.addClass('hidden'); }); }); } }); $this.on('click', '.darkify-icon-remove', function (e) { e.preventDefault(); $this.find('.darkify-icon-preview').addClass('hidden'); $this.find('input').val('').trigger('change'); $(this).addClass('hidden'); }); }); }; // // Field: link // $.fn.darkify_field_link = function () { return this.each(function () { var $this = $(this), $link = $this.find('.darkify--link'), $add = $this.find('.darkify--add'), $edit = $this.find('.darkify--edit'), $remove = $this.find('.darkify--remove'), $result = $this.find('.darkify--result'), uniqid = DARKIFY.helper.uid('darkify-wplink-textarea-'); $add.on('click', function (e) { e.preventDefault(); window.wpLink.open(uniqid); }); $edit.on('click', function (e) { e.preventDefault(); $add.trigger('click'); $('#wp-link-url').val($this.find('.darkify--url').val()); $('#wp-link-text').val($this.find('.darkify--text').val()); $('#wp-link-target').prop('checked', ($this.find('.darkify--target').val() === '_blank')); }); $remove.on('click', function (e) { e.preventDefault(); $this.find('.darkify--url').val('').trigger('change'); $this.find('.darkify--text').val(''); $this.find('.darkify--target').val(''); $add.removeClass('hidden'); $edit.addClass('hidden'); $remove.addClass('hidden'); $result.parent().addClass('hidden'); }); $link.attr('id', uniqid).on('change', function () { var atts = window.wpLink.getAttrs(), href = atts.href, text = $('#wp-link-text').val(), target = (atts.target) ? atts.target : ''; $this.find('.darkify--url').val(href).trigger('change'); $this.find('.darkify--text').val(text); $this.find('.darkify--target').val(target); $result.html('{url:"' + href + '", text:"' + text + '", target:"' + target + '"}'); $add.addClass('hidden'); $edit.removeClass('hidden'); $remove.removeClass('hidden'); $result.parent().removeClass('hidden'); }); }); }; // // Field: media // $.fn.darkify_field_media = function () { return this.each(function () { var $this = $(this), $upload_button = $this.find('.darkify--button'), $remove_button = $this.find('.darkify--remove'), $library = $upload_button.data('library') && $upload_button.data('library').split(',') || '', $auto_attributes = ($this.hasClass('darkify-assign-field-background')) ? $this.closest('.darkify-field-background').find('.darkify--auto-attributes') : false, wp_media_frame; $upload_button.on('click', function (e) { e.preventDefault(); if (typeof window.wp === 'undefined' || !window.wp.media || !window.wp.media.gallery) { return; } if (wp_media_frame) { wp_media_frame.open(); return; } wp_media_frame = window.wp.media({ library: { type: $library } }); wp_media_frame.on('select', function () { var thumbnail; var attributes = wp_media_frame.state().get('selection').first().attributes; var preview_size = $upload_button.data('preview-size') || 'thumbnail'; if ($library.length && $library.indexOf(attributes.subtype) === -1 && $library.indexOf(attributes.type) === -1) { return; } $this.find('.darkify--id').val(attributes.id); $this.find('.darkify--width').val(attributes.width); $this.find('.darkify--height').val(attributes.height); $this.find('.darkify--alt').val(attributes.alt); $this.find('.darkify--title').val(attributes.title); $this.find('.darkify--description').val(attributes.description); if (typeof attributes.sizes !== 'undefined' && typeof attributes.sizes.thumbnail !== 'undefined' && preview_size === 'thumbnail') { thumbnail = attributes.sizes.thumbnail.url; } else if (typeof attributes.sizes !== 'undefined' && typeof attributes.sizes.full !== 'undefined') { thumbnail = attributes.sizes.full.url; } else if (attributes.type === 'image') { thumbnail = attributes.url; } else { thumbnail = attributes.icon; } if ($auto_attributes) { $auto_attributes.removeClass('darkify--attributes-hidden'); } $remove_button.removeClass('hidden'); $this.find('.darkify--preview').removeClass('hidden'); $this.find('.darkify--src').attr('src', thumbnail); $this.find('.darkify--thumbnail').val(thumbnail); $this.find('.darkify--url').val(attributes.url).trigger('change'); }); wp_media_frame.open(); }); $remove_button.on('click', function (e) { e.preventDefault(); if ($auto_attributes) { $auto_attributes.addClass('darkify--attributes-hidden'); } $remove_button.addClass('hidden'); $this.find('input').val(''); $this.find('.darkify--preview').addClass('hidden'); $this.find('.darkify--url').trigger('change'); }); }); }; // // Field: repeater // $.fn.darkify_field_repeater = function () { return this.each(function () { var $this = $(this), $fieldset = $this.children('.darkify-fieldset'), $repeater = $fieldset.length ? $fieldset : $this, $wrapper = $repeater.children('.darkify-repeater-wrapper'), $hidden = $repeater.children('.darkify-repeater-hidden'), $max = $repeater.children('.darkify-repeater-max'), $min = $repeater.children('.darkify-repeater-min'), field_id = $wrapper.data('field-id'), max = parseInt($wrapper.data('max')), min = parseInt($wrapper.data('min')); $wrapper.children('.darkify-repeater-item').children('.darkify-repeater-content').darkify_reload_script(); $wrapper.sortable({ axis: 'y', handle: '.darkify-repeater-sort', helper: 'original', cursor: 'move', placeholder: 'widget-placeholder', update: function (event, ui) { DARKIFY.helper.name_nested_replace($wrapper.children('.darkify-repeater-item'), field_id); $wrapper.darkify_customizer_refresh(); ui.item.darkify_reload_script_retry(); } }); $repeater.children('.darkify-repeater-add').on('click', function (e) { e.preventDefault(); var count = $wrapper.children('.darkify-repeater-item').length; $min.hide(); if (max && (count + 1) > max) { $max.show(); return; } var $cloned_item = $hidden.darkify_clone(true); $cloned_item.removeClass('darkify-repeater-hidden'); $cloned_item.find(':input[name!="_pseudo"]').each(function () { this.name = this.name.replace('___', '').replace(field_id + '[0]', field_id + '[' + count + ']'); }); $wrapper.append($cloned_item); $cloned_item.children('.darkify-repeater-content').darkify_reload_script(); $wrapper.darkify_customizer_refresh(); $wrapper.darkify_customizer_listen({ closest: true }); }); var event_clone = function (e) { e.preventDefault(); var count = $wrapper.children('.darkify-repeater-item').length; $min.hide(); if (max && (count + 1) > max) { $max.show(); return; } var $this = $(this), $parent = $this.parent().parent().parent(), $cloned_content = $parent.children('.darkify-repeater-content').darkify_clone(), $cloned_helper = $parent.children('.darkify-repeater-helper').darkify_clone(true), $cloned_item = $('
    '); $cloned_item.append($cloned_content); $cloned_item.append($cloned_helper); $wrapper.children().eq($parent.index()).after($cloned_item); $cloned_item.children('.darkify-repeater-content').darkify_reload_script(); DARKIFY.helper.name_nested_replace($wrapper.children('.darkify-repeater-item'), field_id); $wrapper.darkify_customizer_refresh(); $wrapper.darkify_customizer_listen({ closest: true }); }; $wrapper.children('.darkify-repeater-item').children('.darkify-repeater-helper').on('click', '.darkify-repeater-clone', event_clone); $repeater.children('.darkify-repeater-hidden').children('.darkify-repeater-helper').on('click', '.darkify-repeater-clone', event_clone); var event_remove = function (e) { e.preventDefault(); var count = $wrapper.children('.darkify-repeater-item').length; $max.hide(); $min.hide(); if (min && (count - 1) < min) { $min.show(); return; } $(this).closest('.darkify-repeater-item').remove(); DARKIFY.helper.name_nested_replace($wrapper.children('.darkify-repeater-item'), field_id); $wrapper.darkify_customizer_refresh(); }; $wrapper.children('.darkify-repeater-item').children('.darkify-repeater-helper').on('click', '.darkify-repeater-remove', event_remove); $repeater.children('.darkify-repeater-hidden').children('.darkify-repeater-helper').on('click', '.darkify-repeater-remove', event_remove); }); }; // // Field: slider // $.fn.darkify_field_slider = function () { return this.each(function () { var $this = $(this), $input = $this.find('input'), $slider = $this.find('.darkify-slider-ui'), data = $input.data(), value = $input.val() || 0; if ($slider.hasClass('ui-slider')) { $slider.empty(); } $slider.slider({ range: 'min', value: value, min: data.min || 0, max: data.max || 100, step: data.step || 1, slide: function (e, o) { $input.val(o.value).trigger('change'); } }); $input.on('keyup', function () { $slider.slider('value', $input.val()); }); }); }; // // Field: sortable // $.fn.darkify_field_sortable = function () { return this.each(function () { var $sortable = $(this).find('.darkify-sortable'); $sortable.sortable({ axis: 'y', helper: 'original', cursor: 'move', placeholder: 'widget-placeholder', update: function (event, ui) { $sortable.darkify_customizer_refresh(); } }); $sortable.find('.darkify-sortable-content').darkify_reload_script(); }); }; // // Field: sorter // $.fn.darkify_field_sorter = function () { return this.each(function () { var $this = $(this), $enabled = $this.find('.darkify-enabled'), $has_disabled = $this.find('.darkify-disabled'), $disabled = ($has_disabled.length) ? $has_disabled : false; $enabled.sortable({ connectWith: $disabled, placeholder: 'ui-sortable-placeholder', update: function (event, ui) { var $el = ui.item.find('input'); if (ui.item.parent().hasClass('darkify-enabled')) { $el.attr('name', $el.attr('name').replace('disabled', 'enabled')); } else { $el.attr('name', $el.attr('name').replace('enabled', 'disabled')); } $this.darkify_customizer_refresh(); } }); if ($disabled) { $disabled.sortable({ connectWith: $enabled, placeholder: 'ui-sortable-placeholder', update: function (event, ui) { $this.darkify_customizer_refresh(); } }); } }); }; // // Field: spinner // $.fn.darkify_field_spinner = function () { return this.each(function () { var $this = $(this), $input = $this.find('input'), $inited = $this.find('.ui-button'), data = $input.data(); if ($inited.length) { $inited.remove(); } $input.spinner({ min: data.min || 0, max: data.max || 100, step: data.step || 1, create: function (event, ui) { if (data.unit) { $input.after('' + data.unit + ''); } }, spin: function (event, ui) { $input.val(ui.value).trigger('change'); } }); }); }; // // Field: switcher // $.fn.darkify_field_switcher = function () { return this.each(function () { var $switcher = $(this).find('.darkify--switcher'); $switcher.on('click', function () { var value = 0; var $input = $switcher.find('input'); if ($switcher.hasClass('darkify--active')) { $switcher.removeClass('darkify--active'); } else { value = 1; $switcher.addClass('darkify--active'); } $input.val(value).trigger('change'); }); }); }; // // Field: tabbed // $.fn.darkify_field_tabbed = function () { return this.each(function () { var $this = $(this), $links = $this.find('.darkify-tabbed-nav a'), $contents = $this.find('.darkify-tabbed-content'); $contents.eq(0).darkify_reload_script(); $links.on('click', function (e) { e.preventDefault(); var $link = $(this), index = $link.index(), $content = $contents.eq(index); $link.addClass('darkify-tabbed-active').siblings().removeClass('darkify-tabbed-active'); $content.darkify_reload_script(); $content.removeClass('hidden').siblings().addClass('hidden'); }); }); }; // // Field: upload // $.fn.darkify_field_upload = function () { return this.each(function () { var $this = $(this), $input = $this.find('input'), $upload_button = $this.find('.darkify--button'), $remove_button = $this.find('.darkify--remove'), $preview_wrap = $this.find('.darkify--preview'), $preview_src = $this.find('.darkify--src'), $library = $upload_button.data('library') && $upload_button.data('library').split(',') || '', wp_media_frame; $upload_button.on('click', function (e) { e.preventDefault(); if (typeof window.wp === 'undefined' || !window.wp.media || !window.wp.media.gallery) { return; } if (wp_media_frame) { wp_media_frame.open(); return; } wp_media_frame = window.wp.media({ library: { type: $library }, }); wp_media_frame.on('select', function () { var src; var attributes = wp_media_frame.state().get('selection').first().attributes; if ($library.length && $library.indexOf(attributes.subtype) === -1 && $library.indexOf(attributes.type) === -1) { return; } $input.val(attributes.url).trigger('change'); }); wp_media_frame.open(); }); $remove_button.on('click', function (e) { e.preventDefault(); $input.val('').trigger('change'); }); $input.on('change', function (e) { var $value = $input.val(); if ($value) { $remove_button.removeClass('hidden'); } else { $remove_button.addClass('hidden'); } if ($preview_wrap.length) { if ($.inArray($value.split('.').pop().toLowerCase(), ['jpg', 'jpeg', 'gif', 'png', 'svg', 'webp']) !== -1) { $preview_wrap.removeClass('hidden'); $preview_src.attr('src', $value); } else { $preview_wrap.addClass('hidden'); } } }); }); }; // // Field: wp_editor // $.fn.darkify_field_wp_editor = function () { return this.each(function () { if (typeof window.wp.editor === 'undefined' || typeof window.tinyMCEPreInit === 'undefined' || typeof window.tinyMCEPreInit.mceInit.darkify_wp_editor === 'undefined') { return; } var $this = $(this), $editor = $this.find('.darkify-wp-editor'), $textarea = $this.find('textarea'); // If there is wp-editor remove it for avoid dupliated wp-editor conflicts. var $has_wp_editor = $this.find('.wp-editor-wrap').length || $this.find('.mce-container').length; if ($has_wp_editor) { $editor.empty(); $editor.append($textarea); $textarea.css('display', ''); } // Generate a unique id var uid = DARKIFY.helper.uid('darkify-editor-'); $textarea.attr('id', uid); // Get default editor settings var default_editor_settings = { tinymce: window.tinyMCEPreInit.mceInit.darkify_wp_editor, quicktags: window.tinyMCEPreInit.qtInit.darkify_wp_editor }; // Get default editor settings var field_editor_settings = $editor.data('editor-settings'); // Callback for old wp editor var wpEditor = wp.oldEditor ? wp.oldEditor : wp.editor; if (wpEditor && wpEditor.hasOwnProperty('autop')) { wp.editor.autop = wpEditor.autop; wp.editor.removep = wpEditor.removep; wp.editor.initialize = wpEditor.initialize; } // Add on change event handle var editor_on_change = function (editor) { editor.on('change keyup', function () { var value = (field_editor_settings.wpautop) ? editor.getContent() : wp.editor.removep(editor.getContent()); $textarea.val(value).trigger('change'); }); }; // Extend editor selector and on change event handler default_editor_settings.tinymce = $.extend({}, default_editor_settings.tinymce, { selector: '#' + uid, setup: editor_on_change }); // Override editor tinymce settings if (field_editor_settings.tinymce === false) { default_editor_settings.tinymce = false; $editor.addClass('darkify-no-tinymce'); } // Override editor quicktags settings if (field_editor_settings.quicktags === false) { default_editor_settings.quicktags = false; $editor.addClass('darkify-no-quicktags'); } // Wait until :visible var interval = setInterval(function () { if ($this.is(':visible')) { window.wp.editor.initialize(uid, default_editor_settings); clearInterval(interval); } }); // Add Media buttons if (field_editor_settings.media_buttons && window.darkify_media_buttons) { var $editor_buttons = $editor.find('.wp-media-buttons'); if ($editor_buttons.length) { $editor_buttons.find('.darkify-shortcode-button').data('editor-id', uid); } else { var $media_buttons = $(window.darkify_media_buttons); $media_buttons.find('.darkify-shortcode-button').data('editor-id', uid); $editor.prepend($media_buttons); } } }); }; // // Field: section_tab // $.fn.darkify_field_section_tab = function() { return this.each( function() { var $this = $(this), $links = $this.find('.darkify-section_tab-nav a'), $contents = $this.find('.darkify-section_tab-content'); $contents.eq(0).darkify_reload_script(); $links.on( 'click', function( e ) { e.preventDefault(); var $link = $(this), index = $link.index(), $content = $contents.eq(index); $link.addClass('darkify-section_tab-active').siblings().removeClass('darkify-section_tab-active'); $content.darkify_reload_script(); $content.removeClass('hidden').siblings().addClass('hidden'); }); }); }; // // Field: section_inner_tab // $.fn.darkify_field_section_inner_tab = function() { return this.each( function() { var $this = $(this), $links = $this.find('.darkify-section_inner_tab-nav a'), $contents = $this.find('.darkify-section_inner_tab-content'); $contents.eq(0).darkify_reload_script(); $links.on( 'click', function( e ) { e.preventDefault(); var $link = $(this), index = $link.index(), $content = $contents.eq(index); $link.addClass('darkify-section_inner_tab-active').siblings().removeClass('darkify-section_inner_tab-active'); $content.darkify_reload_script(); $content.removeClass('hidden').siblings().addClass('hidden'); }); }); }; // // Confirm // $.fn.darkify_confirm = function () { return this.each(function () { $(this).on('click', function (e) { var confirm_text = $(this).data('confirm') || window.darkify_vars.i18n.confirm; var confirm_answer = confirm(confirm_text); if (confirm_answer) { DARKIFY.vars.is_confirm = true; DARKIFY.vars.form_modified = false; } else { e.preventDefault(); return false; } }); }); }; $.fn.serializeObject = function () { var obj = {}; $.each(this.serializeArray(), function (i, o) { var n = o.name, v = o.value; obj[n] = obj[n] === undefined ? v : $.isArray(obj[n]) ? obj[n].concat(v) : [obj[n], v]; }); return obj; }; function darkify_ajax_action() { jQuery.ajax({ url: darkify_vars.darkify_ajaxurl, type: "POST", data: { action: "set_options", nonce: darkify_vars.nonce, }, }); } // // Options Save // $.fn.darkify_save = function() { return this.each( function() { var $this = $(this), $buttons = $('.darkify-save'), $panel = $('.darkify-options'), flooding = false, timeout; $this.on('click', function( e ) { if ( !flooding ) { var $text = $this.data('save'), $value = $this.val(); $buttons.attr('value', $text); if ( $this.hasClass('darkify-save-ajax') ) { e.preventDefault(); $panel.addClass('darkify-saving'); $buttons.prop('disabled', true); window.wp.ajax.post( 'darkify_'+ $panel.data('unique') +'_ajax_save', { data: $('#darkify-form').serializeJSONDARKIFY() }) .done( function( response ) { clearTimeout(timeout); var $result_success = $('.darkify-form-success'); $result_success.empty().append(response.notice).slideDown('fast', function() { timeout = setTimeout( function() { $result_success.slideUp('fast'); }, 1000); }); // clear errors $('.darkify-error').remove(); if ( Object.keys( response.errors ).length ) { var error_icon = '!'; $.each(response.errors, function( key, error_message ) { var $field = $('[data-depend-id="'+ key +'"]'), $link = $('a[href="#tab='+ $field.closest('.darkify-section').data('section-id') +'"]' ), $tab = $link.closest('.darkify-tab-item'); $field.closest('.darkify-fieldset').append( '

    '+ error_message +'

    ' ); if ( !$link.find('.darkify-error').length ) { $link.append( error_icon ); } if ( !$tab.find('.darkify-arrow .darkify-error').length ) { $tab.find('.darkify-arrow').append( error_icon ); } }); } $panel.removeClass('darkify-saving'); $buttons.prop('disabled', false).attr('value', $value); flooding = false; DARKIFY.vars.form_modified = false; DARKIFY.vars.$form_warning.hide(); }) .fail( function( response ) { alert( response.error ); }); } else { DARKIFY.vars.form_modified = false; } } flooding = true; }); }); }; // // Option Framework // $.fn.darkify_options = function () { return this.each(function () { var $this = $(this), $content = $this.find('.darkify-content'), $form_success = $this.find('.darkify-form-success'), $form_warning = $this.find('.darkify-form-warning'), $save_button = $this.find('.darkify-header .darkify-save'); DARKIFY.vars.$form_warning = $form_warning; // Shows a message white leaving theme options without saving if ($form_warning.length) { window.onbeforeunload = function () { return (DARKIFY.vars.form_modified) ? true : undefined; }; $content.on('change keypress', ':input', function () { if (!DARKIFY.vars.form_modified) { $form_success.hide(); $form_warning.fadeIn('fast'); DARKIFY.vars.form_modified = true; } }); } if ($form_success.hasClass('darkify-form-show')) { setTimeout(function () { $form_success.fadeOut('fast'); }, 1000); } $(document).keydown(function (event) { if ((event.ctrlKey || event.metaKey) && event.which === 83) { $save_button.trigger('click'); event.preventDefault(); return false; } }); }); }; // // Taxonomy Framework // $.fn.darkify_taxonomy = function () { return this.each(function () { var $this = $(this), $form = $this.parents('form'); if ($form.attr('id') === 'addtag') { var $submit = $form.find('#submit'), $cloned = $this.children('.darkify-field').darkify_clone(); $submit.on('click', function () { if (!$form.find('.form-required').hasClass('form-invalid')) { $this.data('inited', false); $this.empty(); $this.html($cloned); $cloned = $cloned.darkify_clone(); $this.darkify_reload_script(); } }); } }); }; // // Shortcode Framework // $.fn.darkify_shortcode = function () { var base = this; base.shortcode_parse = function (serialize, key) { var shortcode = ''; $.each(serialize, function (shortcode_key, shortcode_values) { key = (key) ? key : shortcode_key; shortcode += '[' + key; $.each(shortcode_values, function (shortcode_tag, shortcode_value) { if (shortcode_tag === 'content') { shortcode += ']'; shortcode += shortcode_value; shortcode += '[/' + key + ''; } else { shortcode += base.shortcode_tags(shortcode_tag, shortcode_value); } }); shortcode += ']'; }); return shortcode; }; base.shortcode_tags = function (shortcode_tag, shortcode_value) { var shortcode = ''; if (shortcode_value !== '') { if (typeof shortcode_value === 'object' && !$.isArray(shortcode_value)) { $.each(shortcode_value, function (sub_shortcode_tag, sub_shortcode_value) { // sanitize spesific key/value switch (sub_shortcode_tag) { case 'background-image': sub_shortcode_value = (sub_shortcode_value.url) ? sub_shortcode_value.url : ''; break; } if (sub_shortcode_value !== '') { shortcode += ' ' + sub_shortcode_tag + '="' + sub_shortcode_value.toString() + '"'; } }); } else { shortcode += ' ' + shortcode_tag + '="' + shortcode_value.toString() + '"'; } } return shortcode; }; base.insertAtChars = function (_this, currentValue) { var obj = (typeof _this[0].name !== 'undefined') ? _this[0] : _this; if (obj.value.length && typeof obj.selectionStart !== 'undefined') { obj.focus(); return obj.value.substring(0, obj.selectionStart) + currentValue + obj.value.substring(obj.selectionEnd, obj.value.length); } else { obj.focus(); return currentValue; } }; base.send_to_editor = function (html, editor_id) { var tinymce_editor; if (typeof tinymce !== 'undefined') { tinymce_editor = tinymce.get(editor_id); } if (tinymce_editor && !tinymce_editor.isHidden()) { tinymce_editor.execCommand('mceInsertContent', false, html); } else { var $editor = $('#' + editor_id); $editor.val(base.insertAtChars($editor, html)).trigger('change'); } }; return this.each(function () { var $modal = $(this), $load = $modal.find('.darkify-modal-load'), $content = $modal.find('.darkify-modal-content'), $insert = $modal.find('.darkify-modal-insert'), $loading = $modal.find('.darkify-modal-loading'), $select = $modal.find('select'), modal_id = $modal.data('modal-id'), nonce = $modal.data('nonce'), editor_id, target_id, gutenberg_id, sc_key, sc_name, sc_view, sc_group, $cloned, $button; $(document).on('click', '.darkify-shortcode-button[data-modal-id="' + modal_id + '"]', function (e) { e.preventDefault(); $button = $(this); editor_id = $button.data('editor-id') || false; target_id = $button.data('target-id') || false; gutenberg_id = $button.data('gutenberg-id') || false; $modal.removeClass('hidden'); // single usage trigger first shortcode if ($modal.hasClass('darkify-shortcode-single') && sc_name === undefined) { $select.trigger('change'); } }); $select.on('change', function () { var $option = $(this); var $selected = $option.find(':selected'); sc_key = $option.val(); sc_name = $selected.data('shortcode'); sc_view = $selected.data('view') || 'normal'; sc_group = $selected.data('group') || sc_name; $load.empty(); if (sc_key) { $loading.show(); window.wp.ajax.post('darkify-get-shortcode-' + modal_id, { shortcode_key: sc_key, nonce: nonce }) .done(function (response) { $loading.hide(); var $appended = $(response.content).appendTo($load); $insert.parent().removeClass('hidden'); $cloned = $appended.find('.darkify--repeat-shortcode').darkify_clone(); $appended.darkify_reload_script(); $appended.find('.darkify-fields').darkify_reload_script(); }); } else { $insert.parent().addClass('hidden'); } }); $insert.on('click', function (e) { e.preventDefault(); if ($insert.prop('disabled') || $insert.attr('disabled')) { return; } var shortcode = ''; var serialize = $modal.find('.darkify-field:not(.darkify-depend-on)').find(':input:not(.ignore)').serializeObjectDARKIFY(); switch (sc_view) { case 'contents': var contentsObj = (sc_name) ? serialize[sc_name] : serialize; $.each(contentsObj, function (sc_key, sc_value) { var sc_tag = (sc_name) ? sc_name : sc_key; shortcode += '[' + sc_tag + ']' + sc_value + '[/' + sc_tag + ']'; }); break; case 'group': shortcode += '[' + sc_name; $.each(serialize[sc_name], function (sc_key, sc_value) { shortcode += base.shortcode_tags(sc_key, sc_value); }); shortcode += ']'; shortcode += base.shortcode_parse(serialize[sc_group], sc_group); shortcode += '[/' + sc_name + ']'; break; case 'repeater': shortcode += base.shortcode_parse(serialize[sc_group], sc_group); break; default: shortcode += base.shortcode_parse(serialize); break; } shortcode = (shortcode === '') ? '[' + sc_name + ']' : shortcode; if (gutenberg_id) { var content = window.darkify_gutenberg_props.attributes.hasOwnProperty('shortcode') ? window.darkify_gutenberg_props.attributes.shortcode : ''; window.darkify_gutenberg_props.setAttributes({ shortcode: content + shortcode }); } else if (editor_id) { base.send_to_editor(shortcode, editor_id); } else { var $textarea = (target_id) ? $(target_id) : $button.parent().find('textarea'); $textarea.val(base.insertAtChars($textarea, shortcode)).trigger('change'); } $modal.addClass('hidden'); }); $modal.on('click', '.darkify--repeat-button', function (e) { e.preventDefault(); var $repeatable = $modal.find('.darkify--repeatable'); var $new_clone = $cloned.darkify_clone(); var $remove_btn = $new_clone.find('.darkify-repeat-remove'); var $appended = $new_clone.appendTo($repeatable); $new_clone.find('.darkify-fields').darkify_reload_script(); DARKIFY.helper.name_nested_replace($modal.find('.darkify--repeat-shortcode'), sc_group); $remove_btn.on('click', function () { $new_clone.remove(); DARKIFY.helper.name_nested_replace($modal.find('.darkify--repeat-shortcode'), sc_group); }); }); $modal.on('click', '.darkify-modal-close, .darkify-modal-overlay', function () { $modal.addClass('hidden'); }); }); }; // // WP Color Picker // if (typeof Color === 'function') { Color.prototype.toString = function () { if (this._alpha < 1) { return this.toCSS('rgba', this._alpha).replace(/\s+/g, ''); } var hex = parseInt(this._color, 10).toString(16); if (this.error) { return ''; } if (hex.length < 6) { for (var i = 6 - hex.length - 1; i >= 0; i--) { hex = '0' + hex; } } return '#' + hex; }; } DARKIFY.funcs.parse_color = function (color) { var value = color.replace(/\s+/g, ''), trans = (value.indexOf('rgba') !== -1) ? parseFloat(value.replace(/^.*,(.+)\)/, '$1') * 100) : 100, rgba = (trans < 100) ? true : false; return { value: value, transparent: trans, rgba: rgba }; }; $.fn.darkify_color = function () { return this.each(function () { var $input = $(this), picker_color = DARKIFY.funcs.parse_color($input.val()), palette_color = window.darkify_vars.color_palette.length ? window.darkify_vars.color_palette : true, $container; // Destroy and Reinit if ($input.hasClass('wp-color-picker')) { $input.closest('.wp-picker-container').after($input).remove(); } $input.wpColorPicker({ palettes: palette_color, change: function (event, ui) { var ui_color_value = ui.color.toString(); $container.removeClass('darkify--transparent-active'); $container.find('.darkify--transparent-offset').css('background-color', ui_color_value); $input.val(ui_color_value).trigger('change'); }, create: function () { $container = $input.closest('.wp-picker-container'); var a8cIris = $input.data('a8cIris'), $transparent_wrap = $('
    ' + '
    ' + '
    ' + '
    ' + '
    transparent
    ' + '
    ').appendTo($container.find('.wp-picker-holder')), $transparent_slider = $transparent_wrap.find('.darkify--transparent-slider'), $transparent_text = $transparent_wrap.find('.darkify--transparent-text'), $transparent_offset = $transparent_wrap.find('.darkify--transparent-offset'), $transparent_button = $transparent_wrap.find('.darkify--transparent-button'); if ($input.val() === 'transparent') { $container.addClass('darkify--transparent-active'); } $transparent_button.on('click', function () { if ($input.val() !== 'transparent') { $input.val('transparent').trigger('change').removeClass('iris-error'); $container.addClass('darkify--transparent-active'); } else { $input.val(a8cIris._color.toString()).trigger('change'); $container.removeClass('darkify--transparent-active'); } }); $transparent_slider.slider({ value: picker_color.transparent, step: 1, min: 0, max: 100, slide: function (event, ui) { var slide_value = parseFloat(ui.value / 100); a8cIris._color._alpha = slide_value; $input.wpColorPicker('color', a8cIris._color.toString()); $transparent_text.text((slide_value === 1 || slide_value === 0 ? '' : slide_value)); }, create: function () { var slide_value = parseFloat(picker_color.transparent / 100), text_value = slide_value < 1 ? slide_value : ''; $transparent_text.text(text_value); $transparent_offset.css('background-color', picker_color.value); $container.on('click', '.wp-picker-clear', function () { a8cIris._color._alpha = 1; $transparent_text.text(''); $transparent_slider.slider('option', 'value', 100); $container.removeClass('darkify--transparent-active'); $input.trigger('change'); }); $container.on('click', '.wp-picker-default', function () { var default_color = DARKIFY.funcs.parse_color($input.data('default-color')), default_value = parseFloat(default_color.transparent / 100), default_text = default_value < 1 ? default_value : ''; a8cIris._color._alpha = default_value; $transparent_text.text(default_text); $transparent_slider.slider('option', 'value', default_color.transparent); if (default_color.value === 'transparent') { $input.removeClass('iris-error'); $container.addClass('darkify--transparent-active'); } }); } }); } }); }); }; // // ChosenJS // $.fn.darkify_chosen = function () { return this.each(function () { var $this = $(this), $inited = $this.parent().find('.chosen-container'), is_sortable = $this.hasClass('darkify-chosen-sortable') || false, is_ajax = $this.hasClass('darkify-chosen-ajax') || false, is_multiple = $this.attr('multiple') || false, set_width = is_multiple ? '100%' : 'auto', set_options = $.extend({ allow_single_deselect: true, disable_search_threshold: 10, width: set_width, no_results_text: window.darkify_vars.i18n.no_results_text, }, $this.data('chosen-settings')); if ($inited.length) { $inited.remove(); } // Chosen ajax if (is_ajax) { var set_ajax_options = $.extend({ data: { type: 'post', nonce: '', }, allow_single_deselect: true, disable_search_threshold: -1, width: '100%', min_length: 3, type_delay: 500, typing_text: window.darkify_vars.i18n.typing_text, searching_text: window.darkify_vars.i18n.searching_text, no_results_text: window.darkify_vars.i18n.no_results_text, }, $this.data('chosen-settings')); $this.DARKIFYAjaxChosen(set_ajax_options); } else { $this.chosen(set_options); } // Chosen keep options order if (is_multiple) { var $hidden_select = $this.parent().find('.darkify-hide-select'); var $hidden_value = $hidden_select.val() || []; $this.on('change', function (obj, result) { if (result && result.selected) { $hidden_select.append(''); } else if (result && result.deselected) { $hidden_select.find('option[value="' + result.deselected + '"]').remove(); } // Force customize refresh if (window.wp.customize !== undefined && $hidden_select.children().length === 0 && $hidden_select.data('customize-setting-link')) { window.wp.customize.control($hidden_select.data('customize-setting-link')).setting.set(''); } $hidden_select.trigger('change'); }); // Chosen order abstract $this.DARKIFYChosenOrder($hidden_value, true); } // Chosen sortable if (is_sortable) { var $chosen_container = $this.parent().find('.chosen-container'); var $chosen_choices = $chosen_container.find('.chosen-choices'); $chosen_choices.bind('mousedown', function (event) { if ($(event.target).is('span')) { event.stopPropagation(); } }); $chosen_choices.sortable({ items: 'li:not(.search-field)', helper: 'orginal', cursor: 'move', placeholder: 'search-choice-placeholder', start: function (e, ui) { ui.placeholder.width(ui.item.innerWidth()); ui.placeholder.height(ui.item.innerHeight()); }, update: function (e, ui) { var select_options = ''; var chosen_object = $this.data('chosen'); var $prev_select = $this.parent().find('.darkify-hide-select'); $chosen_choices.find('.search-choice-close').each(function () { var option_array_index = $(this).data('option-array-index'); $.each(chosen_object.results_data, function (index, data) { if (data.array_index === option_array_index) { select_options += ''; } }); }); $prev_select.children().remove(); $prev_select.append(select_options); $prev_select.trigger('change'); } }); } }); }; // // Helper Checkbox Checker // $.fn.darkify_checkbox = function () { return this.each(function () { var $this = $(this), $input = $this.find('.darkify--input'), $checkbox = $this.find('.darkify--checkbox'); $checkbox.on('click', function () { $input.val(Number($checkbox.prop('checked'))).trigger('change'); }); }); }; // // Helper Check/Uncheck All // $.fn.darkify_checkbox_all = function () { return this.each(function () { var $this = $(this); $this.on('click', function () { var $inputs = $this.closest('.darkify-field-checkbox').find(':input'), uncheck = false; $inputs.each(function () { if (!$(this).prop('checked')) { uncheck = true; } }); if (uncheck) { $inputs.prop('checked', 'checked'); $inputs.attr('checked', 'checked'); } else { $inputs.prop('checked', ''); $inputs.removeAttr('checked'); } $inputs.first().trigger('change'); }); }); }; // // Siblings // $.fn.darkify_siblings = function () { return this.each(function () { var $this = $(this), $siblings = $this.find('.darkify--sibling:not(.darkify-pro-only)'), multiple = $this.data('multiple') || false; $this.find('.darkify--sibling.darkify-pro-only').find('input').prop('disable', true) $siblings.on('click', function () { var $sibling = $(this); if (multiple) { if ($sibling.hasClass('darkify--active')) { $sibling.removeClass('darkify--active'); $sibling.find('input').prop('checked', false).trigger('change'); } else { $sibling.addClass('darkify--active'); $sibling.find('input').prop('checked', true).trigger('change'); } } else { $this.find('input').prop('checked', false); $sibling.find('input').prop('checked', true).trigger('change'); $sibling.addClass('darkify--active').siblings().removeClass('darkify--active'); } }); }); }; // // Help Tooltip // $.fn.darkify_help = function() { return this.each( function() { var $this = $(this), $tooltip, offset_left; $this.on({ mouseenter: function () { $tooltip = $('
    ').html($this.find('.darkify-help-text').html()).appendTo('body'); offset_left = (DARKIFY.vars.is_rtl) ? $this.offset().left - $tooltip.outerWidth() : ($this.offset().left + 32); var $top = $this.offset().top - (($tooltip.outerHeight() / 2) - 6); // This block used for support tooltip. if ($this.find('.darkify-tooltip').length > 0) { $top = $this.offset().top + 46; offset_left = $this.offset().left - 249; } $($tooltip).addClass('darkify-tooltip-hover-effect'); $tooltip.css({ top: $top, left: offset_left, textAlign: 'left', }); }, mouseleave: function () { if (!$tooltip.is(':hover')) { $(this).removeClass('darkify-tooltip-hover-effect'); $tooltip.addClass('darkify-fade-out'); // Wait for the transition to complete, then remove the tooltip $tooltip.on('transitionend', function() { $tooltip.remove(); }); } } }); // Event delegation to handle tooltip removal when the cursor leaves the tooltip itself. $('body').on('mouseleave', '.darkify-tooltip', function () { if ($tooltip !== undefined) { $(this).removeClass('darkify-tooltip-hover-effect'); $tooltip.addClass('darkify-fade-out'); // Wait for the transition to complete, then remove the tooltip $tooltip.on('transitionend', function() { $tooltip.remove(); }); } }); }); }; // // Customize Refresh // $.fn.darkify_customizer_refresh = function () { return this.each(function () { var $this = $(this), $complex = $this.closest('.darkify-customize-complex'); if ($complex.length) { var unique_id = $complex.data('unique-id'); if (unique_id === undefined) { return; } var $input = $complex.find(':input'), option_id = $complex.data('option-id'), obj = $input.serializeObjectDARKIFY(), data = (!$.isEmptyObject(obj) && obj[unique_id] && obj[unique_id][option_id]) ? obj[unique_id][option_id] : '', control = window.wp.customize.control(unique_id + '[' + option_id + ']'); // clear the value to force refresh. control.setting._value = null; control.setting.set(data); } else { $this.find(':input').first().trigger('change'); } $(document).trigger('darkify-customizer-refresh', $this); }); }; // // Customize Listen Form Elements // $.fn.darkify_customizer_listen = function (options) { var settings = $.extend({ closest: false, }, options); return this.each(function () { if (window.wp.customize === undefined) { return; } var $this = (settings.closest) ? $(this).closest('.darkify-customize-complex') : $(this), $input = $this.find(':input'), unique_id = $this.data('unique-id'), option_id = $this.data('option-id'); if (unique_id === undefined) { return; } $input.on('change keyup darkify.change', function () { var obj = $this.find(':input').serializeObjectDARKIFY(); var val = (!$.isEmptyObject(obj) && obj[unique_id] && obj[unique_id][option_id]) ? obj[unique_id][option_id] : ''; window.wp.customize.control(unique_id + '[' + option_id + ']').setting.set(val); }); }); }; // // Customizer Listener for Reload JS // $(document).on('expanded', '.control-section', function () { var $this = $(this); if ($this.hasClass('open') && !$this.data('inited')) { var $fields = $this.find('.darkify-customize-field'); var $complex = $this.find('.darkify-customize-complex'); if ($fields.length) { $this.darkify_dependency(); $fields.darkify_reload_script({ dependency: false }); $complex.darkify_customizer_listen(); } $this.data('inited', true); } }); // // Window on resize // DARKIFY.vars.$window.on('resize darkify.resize', DARKIFY.helper.debounce(function (event) { var window_width = navigator.userAgent.indexOf('AppleWebKit/') > -1 ? DARKIFY.vars.$window.width() : window.innerWidth; if (window_width <= 782 && !DARKIFY.vars.onloaded) { $('.darkify-section').darkify_reload_script(); DARKIFY.vars.onloaded = true; } }, 200)).trigger('darkify.resize'); // // Widgets Framework // $.fn.darkify_widgets = function () { return this.each(function () { $(document).on('widget-added widget-updated', function (event, $widget) { var $fields = $widget.find('.darkify-fields'); if ($fields.length) { $fields.darkify_reload_script(); } }); $(document).on('click', '.widget-top', function (event) { var $fields = $(this).parent().find('.darkify-fields'); if ($fields.length) { $fields.darkify_reload_script(); } }); $('.widgets-sortables, .control-section-sidebar').on('sortstop', function (event, ui) { ui.item.find('.darkify-fields').darkify_reload_script_retry(); }); }); }; // // Nav Menu Options Framework // $.fn.darkify_nav_menu = function () { return this.each(function () { var $navmenu = $(this); $navmenu.on('click', 'a.item-edit', function () { $(this).closest('li.menu-item').find('.darkify-fields').darkify_reload_script(); }); $navmenu.on('sortstop', function (event, ui) { ui.item.find('.darkify-fields').darkify_reload_script_retry(); }); }); }; // // Retry Plugins // $.fn.darkify_reload_script_retry = function () { return this.each(function () { var $this = $(this); if ($this.data('inited')) { $this.children('.darkify-field-wp_editor').darkify_field_wp_editor(); } }); }; // // Reload Plugins // $.fn.darkify_reload_script = function (options) { var settings = $.extend({ dependency: true, }, options); return this.each(function () { var $this = $(this); // Avoid for conflicts if (!$this.data('inited')) { // Field plugins $this.children('.darkify-field-accordion').darkify_field_accordion(); $this.children('.darkify-field-backup').darkify_field_backup(); $this.children('.darkify-field-background').darkify_field_background(); $this.children('.darkify-field-code_editor').darkify_field_code_editor(); $this.children('.darkify-field-date').darkify_field_date(); $this.children('.darkify-field-datetime').darkify_field_datetime(); $this.children('.darkify-field-fieldset').darkify_field_fieldset(); $this.children('.darkify-field-gallery').darkify_field_gallery(); $this.children('.darkify-field-group').darkify_field_group(); $this.children('.darkify-field-icon').darkify_field_icon(); $this.children('.darkify-field-link').darkify_field_link(); $this.children('.darkify-field-media').darkify_field_media(); $this.children('.darkify-field-repeater').darkify_field_repeater(); $this.children('.darkify-field-slider').darkify_field_slider(); $this.children('.darkify-field-sortable').darkify_field_sortable(); $this.children('.darkify-field-sorter').darkify_field_sorter(); $this.children('.darkify-field-spinner').darkify_field_spinner(); $this.children('.darkify-field-switcher').darkify_field_switcher(); $this.children('.darkify-field-section_tab').darkify_field_section_tab(); $this.children('.darkify-field-section_inner_tab').darkify_field_section_inner_tab(); $this.children('.darkify-field-tabbed').darkify_field_tabbed(); $this.children('.darkify-field-upload').darkify_field_upload(); $this.children('.darkify-field-wp_editor').darkify_field_wp_editor(); // Field colors $this.children('.darkify-field-border').find('.darkify-color').darkify_color(); $this.children('.darkify-field-background').find('.darkify-color').darkify_color(); $this.children('.darkify-field-color').find('.darkify-color').darkify_color(); $this.children('.darkify-field-color_group').find('.darkify-color').darkify_color(); $this.children('.darkify-field-link_color').find('.darkify-color').darkify_color(); // Field chosenjs $this.children('.darkify-field-select').find('.darkify-chosen').darkify_chosen(); // Field Checkbox $this.children('.darkify-field-checkbox').find('.darkify-checkbox').darkify_checkbox(); $this.children('.darkify-field-checkbox').find('.darkify-checkbox-all').darkify_checkbox_all(); // Field Siblings $this.children('.darkify-field-button_set').find('.darkify-siblings').darkify_siblings(); $this.children('.darkify-field-image_select').find('.darkify-siblings').darkify_siblings(); $this.children('.darkify-field-palette').find('.darkify-siblings').darkify_siblings(); // Help Tooptip $this.children('.darkify-field').find('.darkify-help').darkify_help(); if (settings.dependency) { $this.darkify_dependency(); } $this.data('inited', true); $(document).trigger('darkify-reload-script', $this); } }); }; // // Document ready and run scripts // $(document).ready(function () { $('.darkify-save').darkify_save(); $('.darkify-options').darkify_options(); $('.darkify-sticky-header').darkify_sticky(); $('.darkify-nav-options').darkify_nav_options(); $('.darkify-nav-metabox').darkify_nav_metabox(); $('.darkify-taxonomy').darkify_taxonomy(); $('.darkify-page-templates').darkify_page_templates(); $('.darkify-post-formats').darkify_post_formats(); $('.darkify-shortcode').darkify_shortcode(); $('.darkify-search').darkify_search(); $('.darkify-confirm').darkify_confirm(); $('.darkify-expand-all').darkify_expand_all(); $('.darkify-onload').darkify_reload_script(); $('#widgets-editor').darkify_widgets(); $('#widgets-right').darkify_widgets(); $('#menu-to-edit').darkify_nav_menu(); // Preloader $('.darkify').removeClass('darkify-preloader'); }); })(jQuery, window, document); (function ($) { "use strict"; $(document).on("click", "#switcher_shortcode_copy", function (e) { e.preventDefault(); /* Get the text field */ $(this).siblings("#switcher_shortcode").select(); /* Select the text field */ document.execCommand("copy"); $(".switcher_shortcode_after_copy").animate( { opacity: 1, bottom: 25, }, 300 ); setTimeout(function () { jQuery(".switcher_shortcode_after_copy").animate( { opacity: 0, }, 200 ); jQuery(".switcher_shortcode_after_copy").animate( { bottom: 0, }, 0 ); }, 2000); }); $(document).on("click", "#switcher_shortcode_v2_copy", function (e) { e.preventDefault(); /* Get the text field */ $(this).siblings("#switcher_shortcode_v2").select(); /* Select the text field */ document.execCommand("copy"); $(".switcher_shortcode_v2_after_copy").animate( { opacity: 1, bottom: 25, }, 300 ); setTimeout(function () { jQuery(".switcher_shortcode_v2_after_copy").animate( { opacity: 0, }, 200 ); jQuery(".switcher_shortcode_v2_after_copy").animate( { bottom: 0, }, 0 ); }, 2000); }); $(document).on('keyup change', '#darkify-form', function (e) { e.preventDefault(); var $button = $(this).find('.darkify-save.darkify-save-ajax'); $button.css({ "background-color": "#171717", "pointer-events": "initial" }).val('Save Settings'); }); $(document).on('click change', '#darkify-form .darkify-cloneable-helper, #darkify-form .darkify-cloneable-helper .sp_wgs-icon-clone, #darkify-form .darkify-cloneable-helper .sp_wgs-icon-drag-and-drop, .darkify-cloneable-add', function (e) { e.preventDefault(); var $button = $('#darkify-form').find('.darkify-save.darkify-save-ajax'); $button.css({ "background-color": "#171717", "pointer-events": "initial" }).val('Save Settings'); }); // If no item added Add to assign layout, trigger to add one item. setTimeout(() => { if ($('#darkify-section-assign_layout .darkify-cloneable-wrapper .darkify-cloneable-item').length == 0 && $('#darkify-section-assign_layout .darkify-cloneable-add').length > 0) { $('#darkify-section-assign_layout .darkify-cloneable-add').trigger('click'); } }, 500); $(".darkify-save").on('click', function (e) { e.preventDefault(); $(this).css({ "background-color": "#C5C5C6", "pointer-events": "none", "padding-left": "38px" }).val('Changes Saved'); }) // Disable Fields // $("select option:contains((Pro))").attr('disabled', true).css('opacity', '1') // Disable and style the switcher element $(".switcher_pro_only .darkify--switcher") .attr("disabled", "disabled") .addClass("only_pro_switcher") .css({ background: "#B0BCC4" }); // Apply common styling to elements with the 'only_pro_switcher' class $(".only_pro_switcher").css({ "pointer-events": "none", color: "#8796A1", position: "relative", }); // Pro only tag. $('.darkffy-pagination-type li:nth-child(n+2) input').attr('disabled', true) $("label:contains((Pro))").css({ 'pointer-events': 'none', 'opacity': '0.8', 'user-select': 'none' }) $("label:contains((Pro)) input").attr('disabled', true).css('opacity', '1') $("select option:contains((Pro))").attr('disabled', true).css('opacity', '1') })(jQuery);