awselect_count = 0;
(function ( $ ) {
$(document).mouseup(function (e)
{
var awselect = $(".awselect");
if (!awselect.is(e.target) // if the target of the click isn't the container...
&& awselect.has(e.target).length === 0) // ... nor a descendant of the container
{
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 ));
function hello(value){
console.log("hello world! the selected value is " + value)
}
$(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')
})
})