$( document ).ready(function() {
$.fn.jarvan_select = function (options) {
if (!$.fn.jarvan_select.setup_done) {
$.fn.jarvan_select.setup();
}
var settings = $.extend({}, $.fn.jarvan_select.defaults, options);
return this.each(function () {
var $select = $(this);
$select.hide();
var id = $select[0].id;
$("#filters_"+id).val("");
//$("#"+id).val("");
var label = $select[0].dataset.label || "";
if(w.lang_translate) {
label = w.lang_translate(label);
}
try {
$('#'+id+' option[value='+$select.val()+']').attr('selected','selected');
} catch(e) {}
$.fn.jarvan_select.set("apply_action_" + id, settings.apply_action);
if($("#filter_" + id)[0]){
return;
}
var height = (settings.title == "" ? "35px" : "");
var width = settings.width + "px";
var html = `
`;
$select.replaceWith(html);
$.fn.jarvan_select.set("filter_field_name", id);
$.fn.jarvan_select.rebuild_filter_body();
$("#filter_container2").show();
});
};
$.fn.jarvan_select.defaults = {
apply_action: function () {
},
title: "__",
width: "100%"
};
$.fn.jarvan_select.setup = function () {
$.fn.jarvan_select.setup_done = true;
$('head').append(`
`);
$.fn.jarvan_select.values = {};
$.fn.jarvan_select.set = function (k, v) {
$.fn.jarvan_select.values[k] = v;
};
$.fn.jarvan_select.get = function (k) {
return ($.fn.jarvan_select.values[k] || null);
};
var d = document.createElement("div");
d.id = 'filter_box_container';
document.body.appendChild(d);
d3 = document.createElement("div");
d3.id = 'filter_layer';
document.body.appendChild(d3);
$("#filter_layer").click(function () {
$.fn.jarvan_select.toggle_layer("hide");
});
};
$.fn.jarvan_select.create_filter_box = function (field_name) {
var label = $("#"+field_name)[0].dataset.label || "";
if(w.lang_translate) {
label = w.lang_translate(label);
}
//console.log("create_filter_box");
var html = `
`;
$("#filter_box_container").html("");
var offset = $("#filters_" + field_name).offset();
$.fn.jarvan_select.set("filter_field_name", field_name);
//console.log("offset.top", offset.top);
$("#filter_box").css("width",$("#container_filters_" + field_name).width()+"px").css("z-index", 100).css("left", (offset.left) + "px").css("top", offset.top + "px").html(html);
window.setTimeout(function() {
$.fn.jarvan_select.toggle_layer("show");
$("#filter_search").focus();
var clickEvent;
if ('onpointerdown' in window) {
// use 'pointerdown' if pointerEvent API is supported
clickEvent = 'pointerdown';
//console.log('pointerEvents used');
} else if ('ontouchstart' in window) {
// use 'touchstart' if touch device
clickEvent = 'touchstart';
//console.log('touch device');
} else {
// else use mouse event
clickEvent = 'click';
//console.log('old fashioned mouse events');
}
$("#filter_layer").on(clickEvent, function(e) {
$.fn.jarvan_select.toggle_layer("hide");
});
},100);
$.fn.jarvan_select.rebuild_filter_body();
$.fn.jarvan_select.interval = window.setInterval(function() {
$.fn.jarvan_select.position_box(field_name);
},100);
$.fn.jarvan_select.position_box(field_name);
};
$.fn.jarvan_select.position_box = function() {
let is_mobile = (/Mobi/.test(navigator.userAgent));
let wh = $(window).height();
let b = document.querySelector("#filter_box").getBoundingClientRect().bottom;
//console.log("b", b, $("#filter_box").css("position"), $("#filter_box").css("bottom"));
let is_safari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
if(is_safari && is_mobile) {
let wh = $(window).height();
$("#filter_box").css("position", "fixed").css("bottom", "").css("top", "20px");
//$("#filter_layer").css("background-color", "red");
} else {
$("#filter_layer").css("background-color", "#ffffff22");
if(b>wh) {
$("#filter_box").css("position", "fixed").css("bottom", 5).css("top", "");
//$(document.body).height("300px").css("overflow", "hidden")
//console.log("fix bottom");
//window.scrollBy({top: b-wh+20, behavior: "instant"});
}
}
if($("#filter_search").val()) {
$("#filter_search_image").hide();
} else {
$("#filter_search_image").show();
}
}
$.fn.jarvan_select.toggle_layer = function(show_hide) {
if(show_hide=="show") {
window.setInterval(function() {
let wh = $(window).height();
//$("#filter_search").val(window.pageYOffset +"/"+window.scrollY + " / " + wh + " / " + document.querySelector("#filter_box").getBoundingClientRect().top + " / " + document.querySelector("#filter_box").getBoundingClientRect().bottom);
},500);
$.fn.jarvan_select.old_body_overflow = $("body").css("overflow");
$("#filter_layer").show();
$("#filter_box").show();
$("#filter_search").focus();
$("body").css("overflow", "hidden");
} else {
window.clearInterval($.fn.jarvan_select.interval);
$("#filter_search").blur();
$("#filter_layer").hide();
$("#filter_box").hide();
$("body").css("overflow", $.fn.jarvan_select.old_body_overflow);
}
}
$.fn.jarvan_select.rebuild_filter_body = function () {
var filter_search = $("#filter_search").val() || "";
var field_name = $.fn.jarvan_select.get("filter_field_name");
var filter_object = {
selected: [],
unselected: []
};
var options = document.getElementById(field_name).options;
var opt, i, iLen;
for (i = 0, iLen = options.length; i < iLen; i++) {
opt = options[i];
if (opt.selected) {
filter_object.selected.push({
value: opt.value,
text: opt.text
});
}
else {
if (filter_search == '' || opt.text.toLowerCase().indexOf(filter_search.toLowerCase()) >= 0) {
filter_object.unselected.push({
value: opt.value,
text: opt.text
});
}
}
}
var filters_text = "";
var html = "";
var show_clear_all = false;
for (i in filter_object.selected) {
if (filter_object.selected.hasOwnProperty(i)) {
opt = filter_object.selected[i];
var id = opt.text.substring(opt.text.length-3);
var premium="";
if(id>199) {
premium = "A";
} else if(id>99) {
premium = "S";
}
premium="";
html += ""+premium+"" + opt.text + "
";
filters_text += (filters_text == "" ? "" : ", ") + premium+"" +opt.text;
}
}
if (filter_object.selected.length > 0) {
show_clear_all = true;
}
for (i in filter_object.unselected) {
if (filter_object.unselected.hasOwnProperty(i)) {
opt = filter_object.unselected[i];
var id = opt.text.substring(opt.text.length-3);
var premium="";
if(id>199) {
premium = "A";
} else if(id>99) {
premium = "S";
}
premium="";
html += "" +premium+""+ opt.text +"
";
}
}
$("#filter_box_body").html(html);
$("#filter_clear_all").css("color", (show_clear_all ? '#000' : '#ccc'));
if ($("#filter_" + field_name)[0].onchange && $("#filter_" + field_name)[0].onchange != "") {
$("#filter_" + field_name)[0].onchange();
}
if (filters_text == "") {
filters_text = "";
}
$("#filters_" + field_name).val(filters_text.replace(/\ /g, " "));
$("#filter_box").css("height", (34+(Math.min(options.length+1,7)) *36)+"px")
$("#filter_box_body").css("height",-28+((Math.min(options.length+1,7)) *36)+"px")
/*
if(options.length<8) {
$("#filter_box").css("height", (34+options.length*36)+"px")
} else {
$("#filter_box").css("height", (34+options.Math.min(8,options.length)*36)+"px")
}
*/
};
$.fn.jarvan_select.filter_all = function (sel) {
var field_name = $.fn.jarvan_select.get("filter_field_name");
$('#' + field_name).children("option").prop("selected", sel);
$.fn.jarvan_select.rebuild_filter_body();
};
$.fn.jarvan_select.select_filter_option = function (option, selected) {
var field_name = $.fn.jarvan_select.get("filter_field_name");
var vals = $('#' + field_name).val() || [];
if(Array.isArray(vals)) {
if (!selected) {
$.fn.jarvan_select.remove(vals, option);
}
else {
vals.push(option);
}
} else {
vals = option;
}
$('#' + field_name).val(vals);
$.fn.jarvan_select.rebuild_filter_body();
$.fn.jarvan_select.apply();
};
$.fn.jarvan_select.remove = function (array, element) {
const index = array.indexOf(element);
array.splice(index, 1);
};
/*
$.fn.jarvan_select.draw_filter_field = function (field_name, field) {
// debugger;
var options = field.data;
var multiple = (field.multiple ? "multiple" : "");
var html = "" + field.title + "
Select >
" + "";
$("#filter_field_" + field_name).html(html);
$.fn.jarvan_select.changed_filter(field_name);
// w.sort_select("filter_" + field_name);
};
*/
$.fn.jarvan_select.apply = function () {
var field_name = $.fn.jarvan_select.get("filter_field_name");
$.fn.jarvan_select.get("apply_action_" + field_name)();
$.fn.jarvan_select.toggle_layer("hide");
if($('#' + field_name)[0].onchange) {
$('#' + field_name)[0].onchange();
}
};
});