$( 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[0].outerHTML + `
`; $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(); } }; });