Preview: dmb.js
Size: 20.57 KB
//proc/self/root/home/nshryvcy/himaltourism.com/wp-content/plugins/team-members/inc/dmb/dmb.js
/**
* Team Members Admin JS
*/
;(function($){
$(document).ready(function (){
/* Spencer Tipping jQuery's clone method fix (for select fields). */
(function (original) {
jQuery.fn.clone = function () {
var result = original.apply(this, arguments),
my_textareas = this.find('textarea').add(this.filter('textarea')),
result_textareas = result.find('textarea').add(result.filter('textarea')),
my_selects = this.find('select').add(this.filter('select')),
result_selects = result.find('select').add(result.filter('select'));
for (var i = 0, l = my_textareas.length; i < l; ++i) $(result_textareas[i]).val($(my_textareas[i]).val());
for (var i = 0, l = my_selects.length; i < l; ++i) result_selects[i].selectedIndex = my_selects[i].selectedIndex;
return result;
};
}) (jQuery.fn.clone);
/* Defines folder slug. */
var pluginFolderSlug = 'team-members';
/* Color conversions. */
var hexDigits = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
function dmb_rgb2hex(rgb) {
if (rgb) {
rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
return "#" + dmb_hex(rgb[1]) + dmb_hex(rgb[2]) + dmb_hex(rgb[3]);
} else {
return;
}
}
function dmb_hex(x) {
return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
}
/* Inits color pickers. */
$('.dmb_color_picker').each(function(i, obj){$(this).wpColorPicker();});
/* Gathers data into single input. */
function dmbGatherData(keyUpParam) {
var member = keyUpParam.closest('.dmb_main'),
firstname = member.find('.dmb_firstname_of_member').val() || '',
lastname = member.find('.dmb_lastname_of_member').val() || '',
job = member.find('.dmb_job_of_member').val() || '';
if ($('#acf-fallback-bio').length) {
description = $.trim(member.find('.dmb_description_of_member_fb').text()) || '';
} else {
description = $.trim(member.find('.dmb_description_of_member').html()) || '';
}
var sclType1 = member.find('.dmb_scl_type1_of_member').val() || '',
sclTitle1 = member.find('.dmb_scl_title1_of_member').val() || '',
sclUrl1 = member.find('.dmb_scl_url1_of_member').val() || '',
sclType2 = member.find('.dmb_scl_type2_of_member').val() || '',
sclTitle2 = member.find('.dmb_scl_title2_of_member').val() || '',
sclUrl2 = member.find('.dmb_scl_url2_of_member').val() || '',
sclType3 = member.find('.dmb_scl_type3_of_member').val() || '',
sclTitle3 = member.find('.dmb_scl_title3_of_member').val() || '',
sclUrl3 = member.find('.dmb_scl_url3_of_member').val() || '',
/* Image URL. */
memberPhoto = member.find('.dmb_img_data_url').attr('data-img') || '',
/* Image link URL. */
memberPhotoUrl = member.find('.dmb_photo_url_of_member').val() || '',
/* Finds single input. */
dataDump = member.find('.dmb_data_dump');
/* Fills single input. */
dataDump.val(
firstname + ']--[' +
lastname + ']--[' +
job + ']--[' +
$("<div/>").html(description).text() + ']--[' +
sclType1 + ']--[' +
sclTitle1 + ']--[' +
sclUrl1 + ']--[' +
sclType2 + ']--[' +
sclTitle2 + ']--[' +
sclUrl2 + ']--[' +
sclType3 + ']--[' +
sclTitle3 + ']--[' +
sclUrl3 + ']--[' +
memberPhoto + ']--[' +
memberPhotoUrl
);
}
/* Defines trigger for single input update. */
$('body').on('keyup', '.dmb_field', function(e) { dmbGatherData($(this)); });
$('body').on('change', '.dmb_scl_type_select', function(e) { dmbGatherData($(this)); });
$('body').on('change', '.dmb_img_data_url', function(e) { dmbGatherData($(this)); });
/* Shows img/remove button if exists on page load. */
$('.dmb_img_data_url').each(function(i, obj) {
var imgUrl = $(this).attr("data-img");
if (imgUrl != ''){
$("<a class='dmb_remove_img_btn dmb_button dmb_button_large dmb_button_compact' href='#'><span class='dashicons dashicons-trash'></span></a><img src='"+imgUrl+"' class='dmb_img'/>").insertAfter($(this).parent().find('.dmb_upload_img_btn'));
}
});
/* Processes member's description fields. */
/* Initial single input update. */
$('.dmb_main').not('.dmb_empty_row').each(function(i, obj){
$(this).find('.dmb_description_of_member').each(function(i, obj){
if ($.trim($(this).text()) == ''){
$(this).hide();
} else {
$(this).show();
}
$(this).html($(this).text());
});
/* Triggers single input update. */
dmbGatherData($(this).find('.dmb_field').first());
});
/* Shows/hides no row notice. */
function refreshRowCountRelatedUI(){
/* Shows notice when team has no member. */
if($('.dmb_main').not('.dmb_empty_row').length > 0){
$( '.dmb_no_row_notice' ).hide();
} else {
$( '.dmb_no_row_notice' ).show();
}
}
refreshRowCountRelatedUI();
/* Removes member's img. */
$('body').on('click', '.dmb_remove_img_btn', function(e) {
$(this).parent().find('.dmb_img').remove();
/* Empties img URL (primary or hover). */
$(this)
.parent()
.find('.dmb_img_data_url')
.attr('data-img', '')
.trigger('change');
$(this).remove();
return false;
});
/* Uploads members's img. */
$('.dmb_upload_img_btn').click(function(e) {
e.preventDefault();
var button = $(this),
custom_uploader = wp.media({
title: 'Insert image',
library : {
// uncomment the next line if you want to attach image to the current post
// uploadedTo : wp.media.view.settings.post.id,
type : 'image'
},
button: {
text: 'Use this image' // button label text
},
multiple: false // for multiple image selection set to true
}).on('select', function() { // it also has "open" and "close" events
var attachment = custom_uploader.state().get('selection').first().toJSON();
button.siblings('img, .dmb_remove_img_btn, .dashicons-trash').remove();
$("<a class='dmb_remove_img_btn dmb_button dmb_button_large dmb_button_compact' href='#'><span class='dashicons dashicons-trash'></span></a><img src='"+attachment.url+"' class='dmb_img'/>").insertAfter(button);
button.siblings('.dmb_img_data_url').attr('data-img', attachment.url).trigger('change');
})
.open();
});
/* Adds a member to the team. */
$( '.dmb_add_row' ).on('click', function() {
/* Clones/cleans/displays the empty row. */
var row = $( '.dmb_empty_row' ).clone(true);
row.removeClass( 'dmb_empty_row' ).addClass('dmb_main').show();
row.insertBefore( $('.dmb_empty_row') );
row.find('.dmb_firstname_of_member').focus();
/* Inits color picker. */
row.find('.dmb_color_picker_ready').removeClass('.dmb_color_picker_ready').addClass('.dmb_color_picker').wpColorPicker().css({'padding':'3px'});
/* Defaults handle title. */
row.find('.dmb_handle_title').html(objectL10n.untitled);
/* Hides empty member description. */
row.find('.dmb_description_of_member').hide();
refreshRowCountRelatedUI();
return false;
});
/* Removes a row. */
$('.dmb_remove_row_btn').click(function(e) {
$(this).closest('.dmb_main').remove();
refreshRowCountRelatedUI();
return false;
});
/* Expands/collapses handle. */
$('.dmb_handle').click(function(e) {
$(this).siblings('.dmb_inner').slideToggle(50);
($(this).hasClass('closed'))
? $(this).removeClass('closed')
: $(this).addClass('closed');
return false;
});
/* Collapses all rows. */
$('.dmb_collapse_rows').click(function(e) {
$('.dmb_handle').each(function(i, obj){
if(!$(this).closest('.dmb_empty_row').length){ // Makes sure not to collapse empty row.
if($(this).hasClass('closed')){
} else {
$(this).siblings('.dmb_inner').slideToggle(50);
$(this).addClass('closed');
}
}
});
return false;
});
/* Expands all rows. */
$('.dmb_expand_rows').click(function(e) {
$('.dmb_handle').each(function(i, obj){
if($(this).hasClass('closed')){
$(this).siblings('.dmb_inner').slideToggle(50);
$(this).removeClass('closed');
}
});
return false;
});
/* Shifts a row down (clones and deletes). */
$('.dmb_move_row_down').click(function(e) {
if($(this).closest('.dmb_main').next().hasClass('dmb_main')){ // If there's a next row.
/* Clones the row. */
var movingRow = $(this).closest('.dmb_main').clone(true);
/* Inserts it after next row. */
movingRow.insertAfter($(this).closest('.dmb_main').next());
/* Removes original row. */
$(this).closest('.dmb_main').remove();
}
return false;
});
/* Shifts a row up (clones and deletes). */
$('.dmb_move_row_up').click(function(e) {
if($(this).closest('.dmb_main').prev().hasClass('dmb_main')){ // If there's a previous row.
/* Clones the row. */
var movingRow = $(this).closest('.dmb_main').clone(true);
/* Inserts it before previous row. */
movingRow.insertBefore($(this).closest('.dmb_main').prev());
/* Removes original row. */
$(this).closest('.dmb_main').remove();
}
return false;
});
/* Duplicates a row. */
$('.dmb_clone_row').click(function(e) {
/* Clones the row. */
var clone = $(this).closest('.dmb_main').clone(true);
/* Inserts it after original row. */
clone.insertAfter($(this).closest('.dmb_main'));
/* Adds 'copy' to title. */
clone.find('.dmb_handle_title').html(clone.find('.dmb_firstname_of_member').val() + ' ('+objectL10n.copy+')');
clone.find('.dmb_firstname_of_member').focus();
updateHandleTitle(clone.find('.dmb_firstname_of_member'), true);
refreshRowCountRelatedUI();
return false;
});
/* Adds row title to handle. */
$('.dmb_main').not('.dmb_empty_row').each(function(i, obj){
if($(this).find('.dmb_firstname_of_member').val() != ''){
var handleTitle = $(this).find('.dmb_handle_title'),
firstname = $(this).find('.dmb_firstname_of_member').val(),
lastname = $(this).find('.dmb_lastname_of_member').val();
handleTitle.html($.parseHTML(firstname + ' ' + lastname));
}
});
function encodeHTML(dirtyString) {
var container = document.createElement('div');
var text = document.createTextNode(dirtyString);
container.appendChild(text);
return dirtyString;
return container.innerHTML; // innerHTML will be a xss safe string
}
/* Updates handle bar title. */
function updateHandleTitle(firstnameField, wasCloned) {
if (!wasCloned) { wasCloned = false; }
/* Makes current title. */
var firstnameField = firstnameField,
lastname = firstnameField.closest('.dmb_main').find('.dmb_lastname_of_member').val() || '';
firstname = firstnameField.val() || '';
handleTitle = firstnameField.closest('.dmb_main').find('.dmb_handle_title');
cloneCopyText = '';
(wasCloned) ? cloneCopyText = ' copy' : cloneCopyText = '';
title = firstname + ' ' + lastname + cloneCopyText;
/* Updates handle title. */
(firstnameField.val() != '')
? handleTitle.html(encodeHTML(title))
: handleTitle.html(objectL10n.untitled + cloneCopyText);
}
/* Watches member firstname/lastname and updates handle. */
$('body').on('keyup', '.dmb_firstname_of_member', function(e) { updateHandleTitle($(this)) });
$('body').on('keyup', '.dmb_lastname_of_member', function(e) {
firstnameField = $(this).closest('.dmb_main').find('.dmb_firstname_of_member');
updateHandleTitle(firstnameField);
});
/* Previews team. */
$('.dmb_show_preview_team').click(function(){
var settings = {};
var team = {};
var preview_html = '';
settings.columns = $("select[name='team_columns'] option:selected").val();
settings.bio_alignment = $("select[name='team_bio_align'] option:selected").val();
settings.piclink_beh = $("select[name='team_piclink_beh'] option:selected").val();
settings.piclink_beh == 'new' ? team.plb = 'target="_blank"' : team.plb = '';
settings.color = dmb_rgb2hex($('.dmb_color_of_team').find(".wp-color-result").css('backgroundColor')) || '#8dba09';
/* Counts the members. */
team.memberCount = $('.dmb_main').not('.dmb_empty_row').length;
/* Prepares the output. */
preview_html += '<div class="tmm" style="margin-top: 100px;">';
preview_html += '<div class="tmm_' + settings.columns + '_columns tmm_wrap tmm_plugin_f">';
$('.dmb_main').not('.dmb_empty_row').each(function(i, obj){
/* Gets row fields. */
var fields = {};
fields.firstname = encodeHTML($(this).find(".dmb_firstname_of_member").val());
fields.lastname = encodeHTML($(this).find(".dmb_lastname_of_member").val());
fields.job = encodeHTML($(this).find(".dmb_job_of_member").val());
if ($('#acf-fallback-bio').length ) {
fields.bio = $.trim($(this).find('.dmb_description_of_member_fb').text()) || '';
} else {
fields.bio = $.trim($(this).find('.dmb_description_of_member').html()) || '';
}
fields.scl_type1 = $(this).find(".dmb_scl_type1_of_member").find(":selected").val();
fields.scl_title1 = encodeHTML($(this).find(".dmb_scl_title1_of_member").val());
fields.scl_url1 = encodeHTML($(this).find(".dmb_scl_url1_of_member").val());
fields.scl_type2 = $(this).find(".dmb_scl_type2_of_member").find(":selected").val();
fields.scl_title2 = encodeHTML($(this).find(".dmb_scl_title2_of_member").val());
fields.scl_url2 = encodeHTML($(this).find(".dmb_scl_url2_of_member").val());
fields.scl_type3 = $(this).find(".dmb_scl_type3_of_member").find(":selected").val();
fields.scl_title3 = encodeHTML($(this).find(".dmb_scl_title3_of_member").val());
fields.scl_url3 = encodeHTML($(this).find(".dmb_scl_url3_of_member").val());
fields.photoUrl = $(this).find(".dmb_img").attr('src');
fields.photoLinkUrl = encodeHTML($(this).find(".dmb_photo_url_of_member").val());
/* Creates team container. */
if(i%2 == 0) {
/* If group of two (alignment). */
preview_html += '<span class="tmm_two_containers_tablet"></span>';
}
if(i%settings.columns == 0) {
/* If first member of group. */
if(i > 0) {
preview_html += '</div><span class="tmm_columns_containers_desktop"></span>';
}
preview_html += '<div class="tmm_container">';
}
preview_html += '<div class="tmm_member" style="border-top:' + settings.color + ' solid 5px;">';
/* Displays photo. */
if (fields.photoLinkUrl)
preview_html += '<a ' + settings.piclink_beh + ' href="' + fields.photoLinkUrl + '" title="' + fields.firstname + ' ' + fields.lastname + '">';
if (fields.photoUrl)
preview_html += '<div class="tmm_photo tmm_pic_' + i + '" style="background: url(' + fields.photoUrl + '); margin-left: auto; margin-right:auto; background-size:cover !important;"></div>';
if (fields.photoLinkUrl)
preview_html += '</a>';
/* Creates text block. */
preview_html += '<div class="tmm_textblock">';
/* Displays names. */
preview_html += '<div class="tmm_names">';
if (fields.firstname) {
preview_html += '<span class="tmm_fname">' + fields.firstname + '</span> ';
}
if (fields.lastname) {
preview_html += '<span class="tmm_lname">' + fields.lastname + '</span>';
}
preview_html += '</div>';
/* Displays jobs. */
if (fields.job) {
preview_html += '<div class="tmm_job">' + fields.job + '</div>';
}
/* Displays bio. */
if (fields.bio) {
preview_html += '<div class="tmm_desc" style="text-align:' + settings.bio_alignment + '">' + fields.bio + '</div>';
}
/* Creates social block. */
preview_html += '<div class="tmm_scblock">';
/* Displays social links. */
for (var j = 1; j <= 3; j++) {
if (fields['scl_type' + j] != 'nada') {
var currentUrl = (fields['scl_url' + j]) ? fields['scl_url' + j] : '';
var currentTitle = (fields['scl_title' + i]) ? fields['scl_title' + j] : '';
if (fields['scl_type' + j] == 'email') {
preview_html += '<a class="tmm_sociallink" href="mailto:' + currentUrl + '" title="' + currentTitle + '"><img alt="' + currentTitle + '" src="../wp-content/plugins/' + pluginFolderSlug + '/inc/img/links/' + fields['scl_type' + j] + '.png"/></a>';
} else {
preview_html += '<a target="_blank" class="tmm_sociallink" href="' + currentUrl + '" title="' + currentTitle + '"><img alt="' + currentTitle + '" src="../wp-content/plugins/' + pluginFolderSlug + '/inc/img/links/' +fields['scl_type' + j] + '.png"/></a>';
}
}
}
preview_html += '</div>'; // Closes social block.
preview_html += '</div>'; // Closes text block.
preview_html += '</div>'; // Closes member.
if (i == (team.memberCount - 1))
preview_html += '<div style="clear:both;"></div>';
});
preview_html += '</div>'; // Closes container.
preview_html += '</div>'; // Closes wrap.
preview_html += '</div>'; // Closes tmm.
preview_html += '<div style="clear:both;"></div>';
preview_html += '<div class="dmb_accuracy_preview_notice">' + objectL10n.previewAccuracy + '</div>';
/* Attaches content the preview to container. */
(team.memberCount == 0)
? $('#dmb_preview_team').append('<div class="dmb_no_row_preview_notice">' + objectL10n.noMemberNotice + '</div>')
: $('#dmb_preview_team').append(preview_html);
/* Shows the preview box. */
$('#dmb_preview_team').fadeIn(100);
});
/* Closes the preview. */
$('.dmb_preview_team_close').click(function(){
$('#dmb_preview_team .tmm, .dmb_accuracy_preview_notice, .dmb_no_row_preview_notice').remove();
$('#dmb_preview_team').fadeOut(100);
});
/* Unique editor. */
if (!$('#acf-fallback-bio').length) {
var lastEditedBio = '';
/* Opens the UE to edit bios. */
$('.dmb_edit_description_of_member').click(function(){
lastEditedBio = $(this).parent().find('.dmb_description_of_member');
var currentContent = lastEditedBio.text();
if ($("#wp-dmb_editor-wrap").hasClass("tmce-active")){
tinymce.activeEditor.setContent(currentContent);
} else {
$('#dmb_editor').val($.trim(currentContent));
}
$('#dmb_unique_editor').fadeIn(100);
if (tinyMCE.activeEditor !== null) { tinyMCE.activeEditor.focus(); }
});
}
/* Saves the UE data. */
if (!$('#acf-fallback-bio').length ) {
$('.dmb_ue_update').click(function(){
if ($("#wp-dmb_editor-wrap").hasClass("tmce-active")){
var dmb_ue_content = tinyMCE.activeEditor.getContent();
} else {
var dmb_ue_content = $('#dmb_editor').val();
}
/* Hides bio block if empty. */
(!dmb_ue_content) ? lastEditedBio.hide() : lastEditedBio.show();
/* Adds bio content if there is. */
lastEditedBio.text(dmb_ue_content);
/* Closes and empties UE. */
$('#dmb_unique_editor').fadeOut(100);
if (tinymce.activeEditor !== null) { tinymce.activeEditor.setContent(''); }
dmbGatherData(lastEditedBio);
return false;
});
}
/* Cancels the UE updates. */
if (!$('#acf-fallback-bio').length ) {
$('.dmb_ue_cancel').click(function(){
$('#dmb_unique_editor').fadeOut(100);
});
}
/* Debounce function for fallback keyup. */
// http://davidwalsh.name/javascript-debounce-function
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
/* Fallback editor (keyup) */
$('body').on('paste keyup', '#acf-fallback-bio', debounce(function(){
$(this).siblings('.dmb_description_of_member_fb').text($(this).val());
dmbGatherData($(this));
}, 600));
});
})(jQuery);
Directory Contents
Dirs: 0 × Files: 4