var buttonizer = {
settings: {
wpButtonSaveKey: 'buttonizer_buttons',
wpCategorySaveKey: 'buttonizer_page_categories',
windowNumber: 0,
hasChanges: false,
clickedButton: false
},
setTimouts: {
a: function() {
return setTimeout(function() { }, 0)
},
b: function() {
return setTimeout(function() { }, 0)
},
},
init: function() {
buttonizer.overwriteFavIcon();
buttonizer.faInit();
buttonizer.initButtons();
// WP color picker
jQuery('#button_unpushed').wpColorPicker();
jQuery('#button_pushed').wpColorPicker();
jQuery('#icon_color').wpColorPicker();
jQuery(".savebutton").each(function() {
jQuery(this).click(buttonizer.saveAnimation);
});
jQuery("input, textarea, select").change(function() {
buttonizer.settings.hasChanges = true;
});
var iconImage = jQuery.wpMediaUploader({
target : '.smartcat-uploader', // The class wrapping the textbox
uploaderTitle : 'Select or upload image', // The title of the media upload popup
uploaderButton : 'Set image', // the text of the button in the media upload popup
multiple : false, // Allow the user to select multiple images
buttonText : ' Upload image', // The text of the upload button
buttonClass : '.smartcat-upload', // the class of the upload button
previewSize : '32px', // The preview image size
modal : false, // is the upload button within a bootstrap modal ?
buttonStyle : { // style the button
},
});
setTimeout(function() {
// Init preview button
jQuery('.button-preview').css({
'background-color': jQuery("#button_unpushed").val()
});
jQuery(".button-preview").hover(function() {
jQuery(this).css({
'background-color': jQuery("#button_pushed").val()
});
}, function() {
jQuery(this).css({
'background-color': jQuery("#button_unpushed").val()
});
});
}, 500);
// Remove the spam from other plugins
setTimeout(function() {
var foundOurContent = false;
if(jQuery(".buttonizerWarning").length > 0) {
foundOurContent = true;
var buttonizerData = jQuery(".buttonizerWarning").html();
var buttonizerStyle = jQuery(".buttonizerWarning").attr('class');
}
jQuery("#wordpress-plugin-message-spam").remove();
if(foundOurContent) {
jQuery(".nav-tab-wrapper").after('
'+ buttonizerData +'
');
}
}, 1000);
jQuery(".icon-or-image").each(function() {
var type = jQuery(this).data("type");
var currentContainer = jQuery(this);
jQuery(this).find(".placeholder-choose a").click(function() {
if(type == 'image') {
type = 'icon';
currentContainer.find(".image-placeholder").hide();
currentContainer.find(".icon-placeholder").show();
currentContainer.find("input").val("");
}else {
type = 'image';
currentContainer.find(".image-placeholder").show();
currentContainer.find(".icon-placeholder").hide();
}
});
});
// Hash
if(document.location.hash != "") {
var tabKey = document.location.hash;
buttonizer.tabNavigate(tabKey.replace("#tab_", ""));
}
jQuery(".buttonizer-click-to-pro").each(function() {
jQuery(this).click(function(e) {
e.preventDefault();
buttonizer.proInfoWindow();
});
});
buttonizer.loadPageCategorie();
buttonizer.addSortable();
},
proInfoWindow: function() {
buttonizer.createWindow({
title: 'You like Buttonizer?',
text: 'Are you ready to try Buttonizer PRO?
What do you get?
'+
' Show on opening hours
' +
' Show buttons on specific pages: Use page rules
' +
' Unlimited page rules
' +
' Add custom image or button-icon
' +
' Exit intend
' +
' Show on scroll
' +
' Show on timeout
' +
'
' +
'Do you these features?
',
closeText: 'Upgrade',
callback: function() {
document.location.href = 'admin.php?page=Buttonizer-pricing';
}
});
},
overwriteFavIcon: function() {
(function() {
var link = document.querySelector("link[rel*='icon']") || document.createElement('link');
link.type = 'image/x-icon';
link.rel = 'shortcut icon';
link.href = faviconUrl;
document.getElementsByTagName('head')[0].appendChild(link);
})();
},
tabNavigate: function(key) {
jQuery(".vertical-tabs .tab-container").each(function() {
if(jQuery(this).attr('id') == "tab_container_" + key) {
jQuery(this).show();
}else{
jQuery(this).hide();
}
});
jQuery(".vertical-tabs .tabs a").each(function() {
if(jQuery(this).attr('id') == "tab_container_" + key) {
jQuery(this).addClass('nav-tab-active');
}else{
jQuery(this).removeClass('nav-tab-active');
}
});
// jQuery("type[name=_wp_http_referer]").val();
},
loadPageCategorie: function() {
jQuery(".page-categorie-styling").each(function() {
var maxLoaded = 10;
var isLoaded = 10;
var table = jQuery(this);
jQuery(this).addClass("initialized")
table.find("tr").each(function() {
jQuery(this).click(function(e) {
if(jQuery(e.target).attr("type") != "checkbox") {
jQuery(this).find("input").click();
}
});
});
jQuery(".categories-load-more[data-id="+ jQuery(this).attr("data-id") +"]").click(function() {
maxLoaded += 10;
isLoaded = 0;
table.find("tr").each(function() {
isLoaded++;
if(isLoaded <= maxLoaded) {
jQuery(this).show();
}else{
return;
}
});
if(jQuery(".page-categorie-styling[data-id="+ jQuery(this).attr("data-id") +"] tr").length < maxLoaded) {
jQuery(this).hide();
}
});
});
},
addSortable: function() {
var sortable = new Sortable(document.getElementById("button-rows"), {
group: "button-rows",
sort: true,
animation: 150,
scroll: true,
scrollSensitivity: 30,
scrollSpeed: 10,
onSort: function (evt) {
jQuery("#" + evt.clone.children[0].id + " .row-info").css({
opacity: .45,
}).delay(500).animate({
opacity: 1,
}, 500);
}
});
},
saveAnimation: function() {
jQuery(".savebutton").each(function() {
jQuery(this).html(' Saving');
});
buttonizer.settings.clickedButton = true;
jQuery('form#buttonizer').submit();
},
/*
* Buttons
*/
initButtons: function() {
jQuery(".button-row .savebutton").each(function() {
jQuery(this).click(buttonizer.saveAnimation);
});
jQuery(".button-row").each(function() {
var rowObj = jQuery(this);
var rowId = jQuery(this).attr("button-id")
var buttonTitle = rowObj.find(".row-info span .row-title");
var buttonEdit = rowObj.find(".row-info .pencil-edit");
var buttonTitleField = rowObj.find(".button_title");
var doubleClick = setTimeout(function() {}, 100);
var isCategory = rowObj.hasClass('is_category');
var clicked = 0;
buttonEdit.click(function(e) {
e.preventDefault();
buttonTitle.dblclick();
});
buttonTitle.html(buttonTitleField.val());
rowObj.find(".row-info").click(function(e) {
if(
jQuery(e.target).hasClass('fa-desktop') ||
jQuery(e.target).hasClass('fa-mobile') ||
jQuery(e.target).hasClass('fa-pencil') ||
jQuery(e.target).hasClass('mobiledesktop') ||
jQuery(e.target).hasClass('is-live-button') ||
jQuery(e.target).hasClass('must-save-button')
) {
return;
}
clicked = 0;
clearInterval(doubleClick);
doubleClick = setTimeout(function() {
if(clicked == 0) {
if(rowObj.hasClass("opened")) {
rowObj.removeClass("opened");
}else{
rowObj.addClass("opened");
}
}
clicked = 0;
}, 100);
});
buttonTitle.dblclick(function() {
buttonizer.updateTitle(buttonTitle, buttonTitleField, false);
clicked++;
});
rowObj.find(".button_showonphone").change(function(e) {
var isSelected = jQuery(this).is(":checked");
if(!isSelected) {
jQuery("#btn_row_" + rowId + " .row-info .mobile-button").addClass("selected");
}else {
jQuery("#btn_row_" + rowId + " .row-info .mobile-button").removeClass("selected");
}
});
rowObj.find('.button_title').change(function() {
newTitle = jQuery(this).val();
if(buttonizer.checkTitleDuplicate(newTitle, rowId)) {
buttonizer.updateTitle(buttonTitle, buttonTitleField, true, newTitle);
return;
}
buttonTitle.html(newTitle);
});
rowObj.find(".button_showondesktop").change(function(e) {
var isSelected = jQuery(this).is(":checked");
if(!isSelected) {
jQuery("#btn_row_" + rowId + " .row-info .desktop-button").addClass("selected");
}else {
jQuery("#btn_row_" + rowId + " .row-info .desktop-button").removeClass("selected");
}
});
jQuery("#button_"+ rowId +"_icon").change(function(e) {
console.log("test");
rowObj.find(".button-icon").attr('class', "fa "+ jQuery(this).val() +" button-icon");
});
jQuery("#btn_row_" + rowId + " input").change(function() {
jQuery("#btn_row_" + rowId + " .row-info .is-live-button").hide();
jQuery("#btn_row_" + rowId + " .row-info .must-save-button").show();
});
if(isCategory) {
var checked = false;
rowObj.find(".select-all").click(function() {
if(!checked) {
checked = true;
rowObj.find(".page-categorie-styling input[type=checkbox]").attr("checked", "checked");
}else{
checked = false;
rowObj.find(".page-categorie-styling input[type=checkbox]").removeAttr("checked");
}
});
}
});
},
updateTitle: function(buttonTitle, buttonTitleField, isDuplicate, text) {
if(!text) {
var text = '';
}
if(!isDuplicate) {
var newTitle = prompt("You can change the title of the button.\n\nNote: The visitor won't see this text - for internal use only:", buttonTitleField.val());
}else{
var newTitle = prompt("You can change the title of the button.\n\nNote: The visitor won't see this text - for internal use only:\n\nWARNING: This name is already in use. Please change the name of the button. Duplicates are not allowed due Google Analytics event names.", text);
}
if(!newTitle || newTitle == "") {
if(isDuplicate) {
buttonTitleField.val(buttonTitle.html());
}
return;
}
if(buttonizer.checkTitleDuplicate(newTitle)) {
buttonizer.updateTitle(buttonTitle, buttonTitleField, true, newTitle);
return;
}
buttonTitle.html(newTitle);
buttonTitleField.val(newTitle);
},
checkTitleDuplicate: function(text, allowRowId) {
isDuplicate = false;
if(!allowRowId) {
var allowRowId = -1;
}
jQuery(".button-row").each(function() {
if(jQuery(this).find('.button_title').val() == text && jQuery(this).attr("button-id") != allowRowId) {
isDuplicate = true;
}
});
return isDuplicate;
},
removeRow: function(id) {
var buttonName = jQuery("#btn_row_" +id + " .row-info span .row-title").html();
var wasCategory = jQuery("#btn_row_" + id).hasClass('is_category');
if(confirm("Are you sure you want to remove the row with the text: '"+ buttonName +"'?\n\nThis is not recoverable.")) {
jQuery("#btn_row_" +id).remove();
if(jQuery(".button-row").length > 1) {
jQuery(".buttonizer-no-buttons").hide();
}else{
jQuery(".buttonizer-no-buttons").show();
}
}
},
toggleMobile: function(id) {
var isSelected = jQuery("#button_"+ id +"_show_on_phone").is(":checked");
if(!isSelected) {
jQuery("#btn_row_" + id + " .row-info .mobile-button").removeClass("selected");
jQuery("#button_"+ id +"_show_on_phone").click();
}else {
jQuery("#btn_row_" + id + " .row-info .mobile-button").addClass("selected");
jQuery("#button_"+ id +"_show_on_phone").click();
}
jQuery("#btn_row_" + rowId + " .row-info .is-live-button").hide();
jQuery("#btn_row_" + rowId + " .row-info .must-save-button").show();
},
toggleDesktop: function(id) {
var isSelected = jQuery("#button_"+ id +"_show_on_desktop").is(":checked");
if(!isSelected) {
jQuery("#btn_row_" + id + " .row-info .desktop-button").removeClass("selected");
jQuery("#button_"+ id +"_show_on_desktop").click();
}else {
jQuery("#btn_row_" + id + " .row-info .desktop-button").addClass("selected");
jQuery("#button_"+ id +"_show_on_desktop").click();
}
jQuery("#btn_row_" + rowId + " .row-info .is-live-button").hide();
jQuery("#btn_row_" + rowId + " .row-info .must-save-button").show();
},
addRow: function() {
if(jQuery("#new-button").hasClass('disabled')) {
return;
}
jQuery(".buttonizer-no-buttons").hide();
var isCategory = jQuery(".button-row[button-id=-1]").hasClass("is_category");
jQuery("#new-button").attr('disabled', 'disabled').addClass('disabled');
var defaultRow = jQuery(".button-row[button-id=-1]").html();
var numberOfButtons = jQuery(".button-row").length - (isCategory ? 1 : 0);
numberOfButtons = Math.floor(Date.now() / 1000);
numberOfButtons = numberOfButtons + "-" + Math.floor((Math.random() * 999) + 100);
numberOfButtons = numberOfButtons.replace('-', '');
var newData = defaultRow.replace('/-1/g', numberOfButtons);
newData = newData.replace('-1', numberOfButtons);
jQuery("#button-rows, #page-categories").append((!isCategory ? '' : '') + '' + newData + '
' + (!isCategory ? '' : ''));
clearInterval(buttonizer.setTimouts.a);
clearInterval(buttonizer.setTimouts.b);
buttonizer.setTimouts.a = setTimeout(function() {
jQuery(".button-row *").unbind("click");
jQuery(".button-row").removeClass("opened");
jQuery(".fontawesome-searcher-clicker").remove();
jQuery("#btn_row_"+ numberOfButtons +" .button_title").val("New button " + numberOfButtons);
if(isCategory) {
jQuery("#btn_row_"+ numberOfButtons +" input").each(function() {
jQuery(this).attr("name", buttonizer.settings.wpCategorySaveKey + "[category_"+ numberOfButtons +"][]");
});
jQuery("#btn_row_"+ numberOfButtons + " select").attr("name", buttonizer.settings.wpCategorySaveKey + "[category_"+ numberOfButtons +"_type]");
}
}, 100);
buttonizer.setTimouts.b = setTimeout(function() {
buttonizer.initButtons();
if(!isCategory) {
buttonizer.updateRowInputNames(numberOfButtons);
jQuery("#btn_row_"+ numberOfButtons).addClass('opened');
jQuery("#btn_row_"+ numberOfButtons + " input.button_title").focus();
}else{
console.log("Initialize new page category");
jQuery("#btn_row_"+ numberOfButtons + " #categoryIsUsed").val(numberOfButtons);
jQuery("#btn_row_"+ numberOfButtons + " #categoryIsUsed").attr("name", buttonizer.settings.wpCategorySaveKey + '[categorieOrder][]');
jQuery("#btn_row_"+ numberOfButtons + " .delete-button").attr("href", "javascript:buttonizer.removeRow("+ numberOfButtons +")");
jQuery("#btn_row_"+ numberOfButtons + " .button_title").attr("name", buttonizer.settings.wpCategorySaveKey + "[category_"+ numberOfButtons +"_title]").val('New page category ' + (jQuery(".button-row").length - 1));
jQuery("#btn_row_"+ numberOfButtons + " .row-title").html("New page category " + (jQuery(".button-row").length - 1));
}
buttonizer.faInit();
buttonizer.loadPageCategorie();
jQuery("#new-button").removeAttr('disabled').removeClass('disabled');
jQuery("#btn_row_"+ numberOfButtons + " .savebutton").show();
}, 400);
},
updateRowInputNames: function(buttonId) {
// Textfield
jQuery("#btn_row_"+ buttonId + " .button_textfield")
.attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_text]")
.attr("id", "button_"+ buttonId +"_text").val("");
// Iconfield
jQuery("#btn_row_"+ buttonId + " .button_iconfield").attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_icon]");
// Button title
jQuery("#btn_row_"+ buttonId + " .button_title").attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_title]");
// Button show on page category
jQuery("#btn_row_"+ buttonId + " #button_category").attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_show_on_pages]");
// Show on phone
jQuery("#btn_row_"+ buttonId + " .button_showonphone")
.attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_show_on_phone]")
.attr("id", "button_"+ buttonId +"_show_on_phone");
jQuery("label[for='button_"+ -1 +"_show_on_phone']").attr("for", "button_"+ buttonId +"_show_on_phone");
// Show on desktop
jQuery("#btn_row_"+ buttonId + " .button_showondesktop")
.attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_show_on_desktop]")
.attr("id", "button_"+ buttonId +"_show_on_desktop");
jQuery("label[for='button_"+ -1 +"_show_on_desktop']").attr("for", "button_"+ buttonId +"_show_on_desktop");
// Url
jQuery("#btn_row_"+ buttonId + " .button_isurl")
.attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_url]")
.attr("id", "button_"+ buttonId +"_url");
jQuery("label[for='button_"+ -1 +"_url']").attr("for", "button_"+ buttonId +"_url");
// Is phone buttonId
jQuery("#btn_row_"+ buttonId + " .button_isphonenumber")
.attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_is_phonenumber]")
.attr("id", "button_"+ buttonId +"_is_phonenumber");
jQuery("label[for='button_"+ -1 +"_is_phonenumber']").attr("for", "button_"+ buttonId +"_is_phonenumber");
// New tab
jQuery("#btn_row_"+ buttonId + " .button_isnewtab")
.attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_url_newtab]")
.attr("id", "button_"+ buttonId +"_url_newtab");
jQuery("label[for='button_"+ -1 +"_url_newtab']").attr("for", "button_"+ buttonId +"_url_newtab");
// Show only on opening hours
jQuery("#btn_row_"+ buttonId + " .button_showwhenopened")
.attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_show_when_opened]")
.attr("id", "button_"+ buttonId +"_show_when_opened");
jQuery("label[for='button_"+ -1 +"_show_when_opened']").attr("for", "button_"+ buttonId +"_show_when_opened");
// Show only on opening hours
jQuery("#btn_row_"+ buttonId + " .button_hidelabel")
.attr("name", buttonizer.settings.wpButtonSaveKey + "[button_"+ buttonId +"_hide_label]")
.attr("id", "button_"+ buttonId +"_hide_label");
jQuery("label[for='button_"+ -1 +"_hide_label']").attr("for", "button_"+ buttonId +"_hide_label");
/*
* Link fixes
*/
// Delete button link
jQuery("#btn_row_"+ buttonId + " .delete-button").attr("href", "javascript:buttonizer.removeRow("+ buttonId +")");
// Show on mobile button link
jQuery("#btn_row_"+ buttonId + " .mobiledesktop.mobile-button").attr("href", "javascript:buttonizer.toggleMobile("+ buttonId +")");
// Show on desktop button link
jQuery("#btn_row_"+ buttonId + " .mobiledesktop.desktop-button").attr("href", "javascript:buttonizer.toggleDesktop("+ buttonId +")");
},
createWindow: function(data) {
this.settings.windowNumber++;
var currentWindow = this.settings.windowNumber;
if(!data.title) {
data.title = '';
}
if(!data.text) {
data.text = 'This dialog has not text.
Weird, isn\'t it?
';
}
if(!data.closeText) {
data.closeText = 'Close';
}
if(!data.callback) {
data.callback = function() {};
}
var windowStyle = '';
jQuery("body").append(windowStyle);
jQuery("#buttonizer-window-"+ currentWindow + " .fs-close, #buttonizer-window-"+ currentWindow + " button").click(function(e) {
e.preventDefault();
jQuery("#buttonizer-window-"+ currentWindow).fadeOut();
if(!jQuery(this).hasClass("fs-close")) {
data.callback();
}
})
},
/*
* Font awesome searcher
*/
faSettings: {
objects: 0,
currentSelect: {},
currentObject: {},
isGenerated: false,
isOpened: false
},
faInit: function() {
buttonizer.faSettings.isOpened = false;
if(buttonizer.faSettings.isGenerated == false) {
buttonizer.faSettings.isGenerated = true;
fontAwesome = jQuery.map(fontAwesome, function(value, index) {
return [index];
});
}
jQuery("body").click(function(e){
if(!jQuery(e.target).closest('.fontawesome-searcher').length && !jQuery(e.target).closest('.fontawesome-searcher-clicker').length){
jQuery(".fontawesome-searcher").hide();
buttonizer.faSettings.isOpened = false;
}
});
var typeTimeOut = setTimeout(function() { buttonizer.faSearchWord(''); }, 300);
var adminBody = jQuery("#wpbody");
jQuery(".fontawesome-searcher .fontawesome-searcher-searchbar input").keyup(function() {
clearInterval(typeTimeOut);
typeTimeOut = setTimeout(function() { buttonizer.faSearchWord(jQuery(".fontawesome-searcher .fontawesome-searcher-searchbar input").val()); }, 300);
});
jQuery("select.fa-chooser").each(function() {
buttonizer.faSettings.objects++;
var obj = jQuery(this);
obj.hide();
obj.parent().append("Icon: "+ obj.val() +" ");
var newObject = jQuery("#fa-chooser_" + buttonizer.faSettings.objects);
newObject.click(function(e) {
if(buttonizer.faSettings.isOpened == false || buttonizer.faSettings.currentSelect != obj) {
jQuery(".fontawesome-searcher .fontawesome-searcher-searchbar input").focus();
buttonizer.faSettings.isOpened = true;
// Update process
jQuery(".fontawesome-searcher").css({
"top": newObject.offset().top - 20 + newObject.height(),
"left": newObject.offset().left - adminBody.offset().left,
"width": newObject.width()
}).show();
buttonizer.faSettings.currentSelect = obj;
buttonizer.faSettings.currentObject = newObject;
}else{
buttonizer.faSettings.isOpened = false;
jQuery(".fontawesome-searcher").hide();
}
e.preventDefault();
});
});
},
faSearchWord: function(word) {
var foundMatches = [];
for(var i = 0; i < fontAwesome.length; i++) {
if(fontAwesome[i].indexOf(word) !== -1) {
foundMatches.push(fontAwesome[i]);
}
};
if(foundMatches.length == 0) {
jQuery(".fontawesome-searcher .no-matches-found").show();
jQuery(".fontawesome-searcher .fontawesome-searcher-icons").hide();
}else{
jQuery(".fontawesome-searcher .no-matches-found").hide();
jQuery(".fontawesome-searcher .fontawesome-searcher-icons").show();
var text = '';
for(var b = 0; b < foundMatches.length; b++) {
if(b % 4 == 0) {
text += "
";
}
text += ' | ';
};
text += '
';
jQuery(".fontawesome-searcher .fontawesome-searcher-icons").html(text);
}
},
faChooseIcon: function(icon) {
buttonizer.faSettings.currentSelect.val(icon).change();
buttonizer.faSettings.currentObject.html("Icon: "+ icon +" ");
jQuery("#" + buttonizer.faSettings.currentObject.attr("id")).click();
}
}
document.addEventListener('DOMContentLoaded', buttonizer.init, false);
window.onbeforeunload = function(){
if(buttonizer.settings.hasChanges && !buttonizer.settings.clickedButton) {
return 'You have unsaved data. Are you sure you want to leave?';
}
};