/**
jQuery Awselect
Developed by: Prev Wong
Documentation: https://prevwong.github.io/awesome-select/
Github: https://github.com/prevwong/awesome-select/
**/
awselect_count = 0;
(function($) {
$(document).mouseup(function(e) {
var awselect = $(".awselect");
if (!awselect.is(e.target) && awselect.has(e.target).length === 0)
{
deanimate();
}
});
$.fn.awselect = function(options) {
var element = $(this);
var opts = $.extend({}, $.fn.awselect.defaults, options);
element.each(function() {
awselect_count += 1;
build($(this), opts);
});
this.on("click", function() {
animate(getawselectElement($(this)));
});
this.on("change", function() {
setValue(this);
});
console.log(element.attr("id"));
return {
blue: function() {
element.css("color", "blue");
}
};
};
$.fn.awselect.defaults = {
background: "#e5e5e5",
active_background: "#fff",
placeholder_color: "#000",
placeholder_active_color: "#000",
option_color: "#000",
vertical_padding: "15px",
horizontal_padding: "40px"
};
function getawselectElement(select) {
return $('.awselect[data-select="' + select.attr("id") + '"]');
}
function build(element, opts) {
var placeholder = element.attr("data-placeholder");
var id = element.attr("id");
var options = element.children("option");
var selected = false;
var classes = "awselect";
var options_html = "";
var background = opts["background"];
var active_background = opts["active_background"];
var placeholder_color = opts["placeholder_color"];
var placeholder_active_color = opts["placeholder_active_color"];
var option_color = opts["option_color"];
var vertical_padding = opts["vertical_padding"];
var horizontal_padding = opts["horizontal_padding"];
options.each(function() {
if ($(this).attr("selected") == "selected") {
selected = $(this).text();
}
options_html += "
" + $(this).text() + "";
});
if (selected !== false) {
classes += " hasValue";
}
if (typeof id !== typeof undefined && id !== false) {
id_html = id;
} else {
id_html = "awselect_" + awselect_count;
$(element).attr("id", id_html);
}
var awselect_html = '';
awselect_html += '
';
awselect_html += '
';
awselect_html += '
';
if (selected !== false) {
awselect_html += '' + selected + "";
}
awselect_html += '' + placeholder + "";
awselect_html += '' + icon(placeholder_color) + "";
awselect_html += "
";
awselect_html += "
";
awselect_html += '
';
awselect_html += options_html;
awselect_html += "
";
awselect_html += "
";
$(awselect_html).insertAfter(element);
//$('#euler_' + id_html).css("height", $('#euler_' + id_html).outerHeight() - $('#euler_' + id_html).find('.back_face').outerHeight() )
element.hide();
}
function animate(element) {
if (element.hasClass("animating") == false) {
element.addClass("animating");
if ($(".awselect.animate").length > 0) {
deanimate($(".awselect").not(element));
var timeout = 600;
} else {
var timeout = 100;
}
setTimeout(function() {
var back_face = element.find(".back_face");
back_face.show();
var bg = element.find("> .bg");
bg.css({
height: element.outerHeight() + back_face.outerHeight()
});
back_face.css({
"margin-top": $(element).outerHeight()
});
element.addClass("placeholder_animate");
setTimeout(function() {
switchPlaceholderColor(element);
if (back_face.outerHeight() == 200) {
back_face.addClass("overflow");
}
element.addClass("placeholder_animate2");
element.addClass("animate");
element.addClass("animate2");
element.removeClass("animating");
}, 100);
}, timeout);
}
}
function deanimate(awselects) {
if (awselects == null) {
var awselect = $(".awselect");
} else {
var awselect = awselects;
}
$(awselect).each(function() {
var element = $(this);
if (element.hasClass("animate")) {
setTimeout(function() {
element.removeClass("animate2");
setTimeout(function() {
element.find(".back_face").hide();
element.removeClass("animate");
switchPlaceholderColor(element);
element.children(".bg").css({
height: 0
});
element.removeClass("placeholder_animate2");
setTimeout(function() {
element.removeClass("placeholder_animate");
}, 100);
}, 200);
}, 400);
}
});
}
function switchPlaceholderColor(element) {
var placeholder_inactive_color = element.find(".front_face .content").attr("data-inactive-color");
var placeholder_normal_color = element.find(".front_face .content").css("color");
element.find(".front_face .content").attr("data-inactive-color", placeholder_normal_color);
element.find(".front_face .content").css("color", placeholder_inactive_color);
element.find(".front_face .icon svg").css("fill", placeholder_inactive_color);
}
function setValue(select) {
var val = $(select).val();
var euler_awselect = getawselectElement($(select));
var option_value = $(select).children('option[value="' + val + '"]').eq(0);
var callback = $(select).attr("data-callback");
$(euler_awselect).find(".current_value").remove();
$(euler_awselect).find(".front_face .content").prepend('' + option_value.text() + "");
$(euler_awselect).addClass("hasValue");
if (typeof callback !== typeof undefined && callback !== false) {
window[callback](option_value.val());
}
setTimeout(function() {
deanimate();
}, 200);
}
function icon(color) {
return '';
}
function change(elem) {
elem.css("color", "green");
}
})(jQuery);
$(document).ready(function() {
$("body").on("click", ".awselect", function() {
if ($(this).hasClass("animate") == false) {
$("select#" + $(this).attr("id").replace("euler_", "")).trigger("click");
}
});
$("body").on("click", ".awselect ul li a", function() {
var awselect = $(this).parents(".awselect");
var value_index = $(this).parent("li").index();
var id = awselect.attr("data-select");
var select = $("select#" + id);
var option_value = $(select).children("option").eq(value_index);
var callback = $(select).attr("data-callback");
$(select).val(option_value.val());
$(select).trigger("change");
});
});