dropdown_count = 0;
(function ( $ ) {
$(document).mouseup(function (e)
{
var dropdown = $(".dropdown");
if (!dropdown.is(e.target) // if the target of the click isn't the container...
&& dropdown.has(e.target).length === 0) // ... nor a descendant of the container
{
deanimate()
}
});
$.fn.dropdown = function(options){
var element = $(this);
var opts = $.extend({}, $.fn.dropdown.defaults, options)
element.each(function(){
build($(this), opts);
})
this.on('click', function(){
animate(getDropdownElement($(this)));
})
this.on('change', function(){
setValue(this);
})
console.log(element.attr('id'))
return {
blue: function(){
element.css('color', 'blue')
}
}
};
$.fn.dropdown.defaults = {
background: "#e5e5e5",
active_background: "#fff",
placeholder_color: "#000",
placeholder_active_color: "#000",
link_color: "#000"
}
function getDropdownElement(select){
return $('.dropdown[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 = "dropdown";
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 link_color = opts["link_color"]
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 = 'dropdown_' + dropdown_count;
$(element).attr('id', id_html)
}
var dropdown_html = '';
dropdown_html += '
'
dropdown_html += '
'
dropdown_html += '
'
if ( selected !== false ) {
dropdown_html += ''+ selected +'';
}
dropdown_html += ''+ placeholder +''
dropdown_html += ''+ icon(placeholder_color) +''
dropdown_html += '
'
dropdown_html += '
';
dropdown_html += '
'
dropdown_html += options_html
dropdown_html += '
';
dropdown_html += '
';
$(dropdown_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 ( $('.dropdown.animate').length > 0 ) {
deanimate($('.dropdown').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()
})
switchPlaceholderColor(element)
element.addClass('placeholder_animate')
setTimeout(function(){
if ( back_face.outerHeight() == 200 ) {
back_face.addClass('overflow')
}
element.addClass('placeholder_animate2')
element.addClass('animate')
element.addClass('animate2')
}, 100)
}, timeout)
}
function deanimate(dropdowns){
if (dropdowns == null ) {
var dropdown = $('.dropdown')
} else {
var dropdown = dropdowns
}
$(dropdown).each(function(){
var element = $(this);
if ( element.hasClass('animate2') ) {
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_dropdown = getDropdownElement($(select))
var option_value = $(select).children('option[value="'+ val +'"]').eq(0)
var callback = $(select).attr('data-callback')
$(euler_dropdown).find('.current_value').remove()
$(euler_dropdown).find('.front_face .content').prepend(''+ option_value.text() + '')
$(euler_dropdown).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', '.dropdown', function(){
if ( $(this).hasClass('animate2') == false ) {
$('select#' + $(this).attr('id').replace('euler_', '')).trigger('click')
}
})
$('body').on('click', '.dropdown ul li a', function(){
var dropdown = $(this).parents('.dropdown')
var value_index = $(this).parent('li').index()
var id = dropdown.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')
})
})