File: /home/elrashedytravel/www/wp-content/themes/bloglo/inc/customizer/controls/widget/widget.js
(function ($) {
"use strict";
wp.customize.controlConstructor["bloglo-widget"] =
wp.customize.Control.extend({
ready: function () {
"use strict";
var control = this;
control.widget_count = control.container.find(".widget").length;
control.setupSortable();
// Expand widget content on header click
control.container.on(
"click",
".bloglo-widget-container .widget-top",
function () {
$(this)
.closest(".widget")
.toggleClass("bloglo-expanded")
.find(".widget-inside")
.slideToggle(200);
}
);
// Minimize widget content when clicked on Done
control.container.on(
"click",
".bloglo-widget-container .widget-control-close",
function () {
$(this)
.closest(".widget")
.toggleClass("bloglo-expanded")
.find(".widget-inside")
.slideToggle(200);
}
);
// Show available widgets
control.container.on("click", ".bloglo-add-widget", function (e) {
e.preventDefault();
control.updateList();
});
control.container.on(
"change paste keyup",
"input, textarea, select",
function (e) {
control.update();
}
);
control.container.on("click", ".widget-control-remove", function () {
$(this).closest(".widget").remove();
control.update();
control.updateList();
});
control.container.on("click", ".bloglo-widget-edit-nav", function () {
wp.customize
.control(
"nav_menu_locations[" +
$(this)
.closest(".bloglo-widget-nav-container")
.data("menu-location") +
"]"
)
.focus();
control.close();
});
// Close the panel if the URL in the preview changes
wp.customize.previewer.bind("url", this.close);
$(control.container)
.find(".bloglo-widget-nav-container")
.each(function () {
var $this = $(this);
control.bindMenuLocation($this);
});
},
bindMenuLocation: function ($container) {
var menu_location = $container.data("menu-location");
// Bind menu location setting
wp.customize(
"nav_menu_locations[" + menu_location + "]",
function (value) {
value.bind(function (newval) {
if (newval) {
var menu_name = wp.customize
.control("nav_menu_locations[" + menu_location + "]")
.container.find("option:selected")
.html();
$container
.addClass("bloglo-widget-nav-has-menu")
.find(".bloglo-widget-nav-name")
.html(menu_name);
} else {
$container.removeClass("bloglo-widget-nav-has-menu");
}
});
}
);
},
// Changes visibility of available widgets
updateList: function () {
var widget,
self = this,
widgets = self.params.widgets;
// Filter which widgets are available.
if (widgets) {
// Hide all widgets.
$("#bloglo-available-widgets-list .bloglo-widget")
.hide()
.removeClass("disabled");
// Display allowed widgets.
$.each(widgets, function (index, el) {
widget = $(
"#bloglo-available-widgets-list #bloglo-widget-tpl-bloglo_customizer_widget_" +
index
);
widget.show();
if (
el.hasOwnProperty("max_uses") &&
el.max_uses > 0 &&
el.max_uses <=
$(self.container).find(
'.bloglo-widget-container [data-widget-type="' + index + '"]'
).length
) {
widget.addClass("disabled");
}
});
} else {
// Show all widgets
$("#bloglo-available-widgets-list .bloglo-widget").show();
}
},
addWidget: function (widget_id_base) {
var widget_html, widget_uuid;
widget_uuid = this.setting.id + "-" + this.widget_count;
// Get widget form
widget_html = $.trim(
$(this.container)
.find(".bloglo-widget-tpl-" + widget_id_base)
.html()
);
widget_html = widget_html.replace(/<[^<>]+>/g, function (m) {
return m.replace(/__i__|%i%/g, widget_uuid);
});
// Append new widget.
var $widget = $(widget_html).appendTo(
this.container.find(".bloglo-widget-container")
);
// Increase widget count.
this.widget_count++;
// Expand the widget and focus first setting.
$widget.find(".widget-top").trigger("click");
this.update();
if ($widget.find(".bloglo-widget-nav-container").length) {
this.bindMenuLocation($widget.find(".bloglo-widget-nav-container"));
}
},
close: function () {
$("body").removeClass("bloglo-adding-widget");
},
update: function () {
// Get all widgets in the area
var widgets = this.container.find(".bloglo-widget-container .widget");
var inputs,
widgetobj,
new_value = [],
option,
checked,
$widget;
if (widgets.length) {
// Get from each widfget
_.each(widgets, function (widget) {
$widget = $(widget);
widgetobj = {};
widgetobj.classname = $widget.data("widget-base");
widgetobj.type = $widget.data("widget-type");
widgetobj.values = {};
inputs = $widget.find("input, textarea, select");
_.each(inputs, function (input) {
option = $(input).attr("data-option-name");
// Save values.
if (typeof option !== typeof undefined && option !== false) {
widgetobj.values[$(input).attr("data-option-name")] =
$(input).val();
}
});
_.each($widget.find(".buttonset"), function (buttonset) {
// Save location if exist.
checked = $(buttonset).find('input[type="radio"]:checked');
// Save values.
if (typeof checked !== typeof undefined && checked !== false) {
widgetobj.values[checked.data("option-name")] = checked.val();
}
});
new_value.push(widgetobj);
});
this.setting.set(new_value);
} else {
this.setting.set(false);
}
},
setupSortable: function () {
var self = this;
$(this.container)
.find(".bloglo-widget-container")
.sortable({
items: "> .widget",
handle: ".widget-top",
intersect: "pointer",
axis: "y",
update: function () {
self.update();
},
});
},
});
$(document).ready(function () {
var control;
$(".wp-full-overlay").on(
"click",
".bloglo-add-widget, .bloglo-close-widgets-panel",
function (e) {
e.preventDefault();
$("body").toggleClass("bloglo-adding-widget");
if ($(this).data("location-title")) {
control = wp.customize.control($(this).data("control"));
$("#bloglo-available-widgets")
.attr("data-control", control.params.id)
.find(".bloglo-widget-caption")
.find("h3")
.html($(this).data("location-title"));
}
}
);
$(".wp-full-overlay").on("click", ".customize-section-back", function (e) {
$("body").removeClass("bloglo-adding-widget");
$("#bloglo-available-widgets").removeAttr("data-control");
});
// Add widget to widget control.
$("#bloglo-available-widgets").on("click", ".bloglo-widget", function (e) {
// Get active control.
control = wp.customize.control(
$("#bloglo-available-widgets").attr("data-control")
);
var widget_id = $(this).data("widget-id");
var widget_form = control.addWidget(widget_id);
control.close();
});
});
})(jQuery);