From 72fe6eb4697599f8a49894813505eb6acc2b2058 Mon Sep 17 00:00:00 2001 From: Karl Hasselbring <Karl Hasselbring> Date: Tue, 9 May 2017 10:27:28 +0200 Subject: [PATCH] Result page now only does a dry run on initial load if a custom focus is selected --- app/Http/Controllers/MetaGerSearch.php | 14 + .../build/js/scriptResultPage-011f2b799c.js | 501 +++++++++++ .../build/js/scriptResultPage-44152e1f00.js | 501 ----------- public/build/rev-manifest.json | 2 +- public/js/scriptResultPage.js | 810 +++++++++--------- 5 files changed, 921 insertions(+), 907 deletions(-) create mode 100644 public/build/js/scriptResultPage-011f2b799c.js delete mode 100644 public/build/js/scriptResultPage-44152e1f00.js diff --git a/app/Http/Controllers/MetaGerSearch.php b/app/Http/Controllers/MetaGerSearch.php index 54c87e5f1..340951deb 100644 --- a/app/Http/Controllers/MetaGerSearch.php +++ b/app/Http/Controllers/MetaGerSearch.php @@ -11,6 +11,14 @@ class MetaGerSearch extends Controller { public function search(Request $request, MetaGer $metager) { + $focus = $request->input("focus", "web"); + if ($focus !== "angepasst" && startsWith($focus, "focus_")) { + $metager->parseFormData($request); + if ($metager->doBotProtection($request->input('bot', ""))) { + return redirect(LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), url("/noaccess", ['redirect' => base64_encode(url()->full())]))); + } + return $metager->createView(); + } #die($request->header('User-Agent')); $time = microtime(); # Mit gelieferte Formulardaten parsen und abspeichern: @@ -255,4 +263,10 @@ class MetaGerSearch extends Controller { return file_get_contents($url); } + + private function startsWith($haystack, $needle) + { + $length = strlen($needle); + return (substr($haystack, 0, $length) === $needle); + } } diff --git a/public/build/js/scriptResultPage-011f2b799c.js b/public/build/js/scriptResultPage-011f2b799c.js new file mode 100644 index 000000000..0fda2cbfd --- /dev/null +++ b/public/build/js/scriptResultPage-011f2b799c.js @@ -0,0 +1,501 @@ +$(document).ready(function () { + createCustomFocuses() + var focus = $('#foki > li.active > a').attr('aria-controls') + var custom = $('#foki > li.active').hasClass('custom-focus-tab-selector') + getDocumentReadyForUse(focus, custom) +}) + +function tabs () { + $('#foki > li.tab-selector > a').each(function () { + if ($(this).attr('target') != '_blank') { + $(this).attr('href', '#' + $(this).attr('aria-controls')) + $(this).attr('role', 'tab') + $(this).attr('data-toggle', 'tab') + } + }) + $('#foki > li.tab-selector > a').off() + $('#foki > li.tab-selector > a').on('show.bs.tab', function (e) { + var fokus = $(this).attr('aria-controls') + var link = $('#' + fokus + 'TabSelector a').attr('data-href') + if ($('#' + fokus + 'TabSelector').attr('data-loaded') != '1') { + $.get(link, function (data) { + $('#' + fokus + 'TabSelector').attr('data-loaded', '1') + $('#' + fokus).html(data) + $('input[name=focus]').val($('#foki li.active a').attr('aria-controls')) + getDocumentReadyForUse(fokus) + }) + } else { + getDocumentReadyForUse(fokus) + } + }) +} + +function getDocumentReadyForUse (fokus, custom = false) { + clickLog() + popovers() + if (fokus === 'bilder') imageLoader() + if (custom) initialLoadContent(fokus) + // pagination() + tabs() + theme() + fokiChanger() + pluginInfo() + productWidget() + $('iframe:not(.resized)').iFrameResize() + $('iframe').addClass('resized') +} + +function pluginInfo () { + if (localStorage) { + if (localStorage.getItem('pluginInfo') == 'off') $('#searchplugin').css('display', 'none') + $('#searchplugin').on('close.bs.alert', function () { + $.get('/pluginClose') + localStorage.setItem('pluginInfo', 'off') + }) + $('#searchplugin a.btn').click(function () { + $.get('/pluginInstall') + }) + } +} + +function theme () { + if (localStorage) { + var theme = localStorage.getItem('theme') + if (theme != null) { + if ((theme.match(/,/g) || []).length != 3) { + localStorage.removeItem('theme') + } else { + theme = theme.split(',') + $('#theme').attr('href', '/css/theme.css.php?r=' + theme[0] + '&g=' + theme[1] + '&b=' + theme[2] + '&a=' + theme[3]) + } + } + } +} + +function clickLog () { + $('.result a.title, .result div.link-link a').off() + $('.result a.title, .result div.link-link a').click(function () { + $.get('/clickstats', { + i: $('meta[name=p]').attr('content'), + s: $(this).attr('data-hoster'), + q: $('meta[name=q]').attr('content'), + p: $(this).attr('data-count'), + url: $(this).attr('href') + }) + }) +} + +function popovers () { + $('[data-toggle=popover]').each(function (e) { + $(this).popover('destroy') + $(this).popover({ + // html : true, + // title : "<i class="fa fa-cog" aria-hidden="true"></i> Optionen", + content: $(this).parent().find('.content').html() + }) + }) +} + +function pagination () { + $('.pagination li:not(.active) > a').attr('href', '#') + $('.pagination li.disabled > a').removeAttr('href') + $('.pagination li:not(.active) > a').off() + $('.pagination li:not(.active) > a').click(paginationHandler) +} + +function paginationHandler () { + var link = $(this).attr('data-href') + if (link.length == 0) { + return + } + var tabPane = $('.tab-pane.active') + $(tabPane).html('<div class="loader"><img src="/img/ajax-loader.gif" alt="" /></div>') + $.get(link, function (data) { + $(tabPane).html(data) + $('.pagination li:not(.active) > a').attr('href', '#') + $('.pagination li.disabled > a').removeAttr('href') + $('.pagination li:not(.active) > a').off() + $('.pagination li:not(.active) > a').click(paginationHandler) + getDocumentReadyForUse() + }) +} + +function imageLoader () { + if (typeof $('#container').masonry == 'undefined') { + return + } + var $grid = $('#container').masonry({ + columnWidth: 150, + itemSelector: '.item', + gutter: 10, + isFitWidth: true + }) + $grid.imagesLoaded().progress(function (instance, image) { + $grid.masonry('layout') + }) +} + +function eliminateHost (host) { + $('.result:not(.ad)').each(function (e) { + var host2 = $(this).find('.link-link > a').attr('data-host') + if (host2.indexOf(host) === 0) { + $(this).css('display', 'none') + } + }) +} + +function fokiChanger () { + $('#fokiChanger ul > li').click(function () { + document.location.href = $(this).attr('data-href') + }) +} +// Polyfill for form attribute +(function ($) { + /** + * polyfill for html5 form attr + */ + // detect if browser supports this + var sampleElement = $('[form]').get(0) + var isIE11 = !(window.ActiveXObject) && 'ActiveXObject' in window + if (sampleElement && window.HTMLFormElement && sampleElement.form instanceof HTMLFormElement && !isIE11) { + // browser supports it, no need to fix + return + } + /** + * Append a field to a form + * + */ + $.fn.appendField = function (data) { + // for form only + if (!this.is('form')) return + // wrap data + if (!$.isArray(data) && data.name && data.value) { + data = [data] + } + var $form = this + // attach new params + $.each(data, function (i, item) { + $('<input/>').attr('type', 'hidden').attr('name', item.name).val(item.value).appendTo($form) + }) + return $form + } + /** + * Find all input fields with form attribute point to jQuery object + * + */ + $('form[id]').submit(function (e) { + var $form = $(this) + // serialize data + var data = $('[form=' + $form.attr('id') + ']').serializeArray() + // append data to form + $form.appendField(data) + }).each(function () { + var form = this, + $form = $(form), + $fields = $('[form=' + $form.attr('id') + ']') + $fields.filter('button, input').filter('[type=reset],[type=submit]').click(function () { + var type = this.type.toLowerCase() + if (type === 'reset') { + // reset form + form.reset() + // for elements outside form + $fields.each(function () { + this.value = this.defaultValue + this.checked = this.defaultChecked + }).filter('select').each(function () { + $(this).find('option').each(function () { + this.selected = this.defaultSelected + }) + }) + } else if (type.match(/^submit|image$/i)) { + $(form).appendField({ + name: this.name, + value: this.value + }).submit() + } + }) + }) +})(jQuery) + +function productWidget () { + var isMobile = false // initiate as false + // device detection + if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0, 4))) isMobile = true + if (isMobile) { + $('.lightSlider').lightSlider({ + item: 5, + loop: false, + slideMove: 2, + easing: 'cubic-bezier(0.25, 0, 0.25, 1)', + speed: 600, + pager: false, + prevHtml: '<i class="fa fa-chevron-left" aria-hidden="true"></i></span><span class="sr-only">Previous</span>', + nextHtml: '<i class="fa fa-chevron-right" aria-hidden="true"></i><span class="sr-only">Next</span>', + responsive: [{ + breakpoint: 1400, + settings: { + item: 4, + slideMove: 2 + } + }, { + breakpoint: 1200, + settings: { + item: 3, + slideMove: 2 + } + }, { + breakpoint: 980, + settings: { + item: 4, + slideMove: 2 + } + }, { + breakpoint: 720, + settings: { + item: 3, + slideMove: 1 + } + }, { + breakpoint: 520, + settings: { + item: 2, + slideMove: 1 + } + } ] + }) + } else { + $('.lightSlider').lightSlider({ + item: 5, + loop: false, + slideMove: 2, + easing: 'cubic-bezier(0.25, 0, 0.25, 1)', + speed: 600, + pager: false, + enableTouch: false, + enableDrag: false, + prevHtml: '<a class="fa fa-chevron-left" aria-hidden="true"></a><span class="sr-only">Previous</span>', + nextHtml: '<a class="fa fa-chevron-right" aria-hidden="true"></a><span class="sr-only">Next</span>', + responsive: [{ + breakpoint: 1400, + settings: { + item: 4, + slideMove: 2 + } + }, { + breakpoint: 1200, + settings: { + item: 3, + slideMove: 2 + } + }, { + breakpoint: 980, + settings: { + item: 4, + slideMove: 2 + } + }, { + breakpoint: 720, + settings: { + item: 3, + slideMove: 1 + } + }, { + breakpoint: 520, + settings: { + item: 2, + slideMove: 1 + } + } ] + }) + } + $('.lightSliderContainer').removeClass('hidden') +} +/** + * Creates focus tab and tab selector for every stored focus in local storage + */ +function createCustomFocuses () { + for (var key in localStorage) { + if (key.startsWith('focus_')) { + var focus = loadFocusById(key) + var active = false + if (getActiveFocusId() === getIdFromName(focus.name)) { + active = true + } + addFocus(focus, active) + addTab(focus, active) + } + } +} +/** + * Adds a focuses tab selector to the tab selector section + * + * @if( $metager->getFokus() === "produktsuche" ) + * <li id="produktsucheTabSelector" class="active tab-selector" role="presentation" data-loaded="1"> + * <a aria-controls="produktsuche" data-href="#produktsuche" href="#produktsuche"> + * <i class="fa fa-shopping-cart" aria-hidden="true"></i> + * <span class="hidden-xs">{{ trans('index.foki.produkte') }}</span> + * </a> + * </li> + * @else + * <li id="produktsucheTabSelector" class="tab-selector" role="presentation" data-loaded="0"> + * <a aria-controls="produktsuche" data-href="{!! $metager->generateSearchLink('produktsuche') !!}" href="{!! $metager->generateSearchLink('produktsuche', false) !!}"> + * <i class="fa fa-shopping-cart" aria-hidden="true"></i> + * <span class="hidden-xs">{{ trans('index.foki.produkte') }}</span> + * </a> + * </li> + * @endif + */ +function addFocus (focus, active = false) { + var id = getIdFromName(focus.name) + var foki = document.getElementById('foki') + // create <input> + var focusElement = document.createElement('li') + focusElement.id = id + 'TabSelector' + focusElement.classList.add('tab-selector') + focusElement.classList.add('custom-focus-tab-selector') + if (active) { + focusElement.classList.add('active') + focusElement.setAttribute('data-loaded', '1') + } else { + focusElement.setAttribute('data-loaded', '0') + } + focusElement.setAttribute('role', 'presentation') + // create <a> + var focusElementLink = document.createElement('a') + focusElementLink.setAttribute('aria-controls', id) + var searchLink = generateSearchLinkForFocus(focus) + focusElementLink.setAttribute('data-href', searchLink) + focusElementLink.setAttribute('href', searchLink) + // create <a> icon + var focusElementIcon = document.createElement('i') + focusElementIcon.classList.add('fa') + focusElementIcon.classList.add('fa-cog') + focusElementIcon.setAttribute('aria-hidden', 'true') + // create <span> focusname + var focusElementName = document.createElement('span') + focusElementName.classList.add('hidden-xs') + focusElementName.innerHTML = focus.name + // add new elements + var mapsTabSelector = document.getElementById('mapsTabSelector') + foki.insertBefore(focusElement, mapsTabSelector) + focusElement.appendChild(focusElementLink) + focusElementLink.appendChild(focusElementIcon) + focusElementLink.appendChild(focusElementName) +} +/** + * Adds a focuses tab to the tab section + * + * @if( $metager->getFokus() === "produktsuche" ) + * <div role="tabpanel" class="tab-pane active" id="produktsuche"> + * <div class="row"> + * @yield('results') + * </div> + * </div> + * @else + * <div role="tabpanel" class="tab-pane" id="produktsuche"> + * <div class="loader"> + * <img src="/img/ajax-loader.gif" alt="" /> + * </div> + * </div> + * @endif + */ +function addTab (focus, active = false) { + var id = getIdFromName(focus.name) + // create tab div + var tabPane = document.createElement('div') + tabPane.id = id + tabPane.classList.add('tab-pane') + if (active) { + tabPane.classList.add('active') + } + tabPane.setAttribute('role', 'tabpanel') + // create row div + var row = document.createElement('div') + row.classList.add('loader') + // create loader image + var img = document.createElement('img') + img.setAttribute('src', '/img/ajax-loader.gif') + img.setAttribute('alt', '') + row.appendChild(img) + // add new elements + var tabs = document.getElementById('main-content-tabs') + tabs.appendChild(tabPane) + tabPane.appendChild(row) +} +/** + * Turns a name into an id + * Converts special characters and spaces + */ +function getIdFromName (name) { + return 'focus_' + name.split(' ').join('_').toLowerCase() +} +/** + * Loads the focus object for the given id from local storage + */ +function loadFocusById (id) { + return JSON.parse(localStorage.getItem(id)) +} +/** + * Gets the id of the currently active focus + */ +function getActiveFocusId () { + var search = window.location.search + var from = search.indexOf('focus=') + 'focus='.length + var to = search.substring(from).indexOf('&') + from + if (to <= 0) { + to = search.substring(from).length + } + id = search.substring(from, to) + return id +} +/** + * Turns the link of the current page into a search link for the given focus + */ +// TODO catch error if link is http://localhost:8000/meta/meta.ger3? +function generateSearchLinkForFocus (focus) { + var link = document.location.href + // remove old engine settings + // not yet tested, only for compability problems with old versions of bookmarks and plugins + /* + while (link.indexOf("engine_") !== -1) { + var from = search.indexOf("engine_") + var to = search.substring(from).indexOf("&") + from + if (to === 0) { + to = search.substring(from).length + } + link = link.substring(0, from) + link.substring(to) + } + */ + // add new engine settings + for (var key in focus) { + if (key.startsWith('engine_')) { + var focusName = key.substring('engine_'.length) + link += '&' + focusName + '=' + focus[key] + } + } + link += '&out=results' + link = replaceFocusInUrl(link) + return link +} +/** + * Replaces the focus in a given url with the "angepasst" focus + */ +function replaceFocusInUrl (url) { + var from = url.indexOf('focus=') + var to = url.substring(from).indexOf('&') + from + if (to === 0) { + to = url.substring(from).length + } + url = url.substring(0, from) + url.substring(to) + return url + '&focus=angepasst' +} +/** + * Loads the content for a given fokus + */ +function initialLoadContent (fokus) { + var link = $('#' + fokus + 'TabSelector a').attr('data-href') + $.get(link, function (data) { + $('#' + fokus).html(data) + getDocumentReadyForUse(fokus) + }) +} diff --git a/public/build/js/scriptResultPage-44152e1f00.js b/public/build/js/scriptResultPage-44152e1f00.js deleted file mode 100644 index 910823795..000000000 --- a/public/build/js/scriptResultPage-44152e1f00.js +++ /dev/null @@ -1,501 +0,0 @@ -$(document).ready(function() { - createCustomFocuses(); - var focus = $("#foki > li.active > a").attr("aria-controls"); - var custom = $("#foki > li.active").hasClass("custom-focus-tab-selector"); - getDocumentReadyForUse(focus, custom); -}); - -function tabs() { - $("#foki > li.tab-selector > a").each(function() { - if ($(this).attr("target") != "_blank") { - $(this).attr("href", "#" + $(this).attr("aria-controls")); - $(this).attr("role", "tab"); - $(this).attr("data-toggle", "tab"); - } - }); - $("#foki > li.tab-selector > a").off(); - $("#foki > li.tab-selector > a").on("show.bs.tab", function(e) { - var fokus = $(this).attr("aria-controls"); - var link = $("#" + fokus + "TabSelector a").attr("data-href"); - if ($("#" + fokus + "TabSelector").attr("data-loaded") != "1") { - $.get(link, function(data) { - $("#" + fokus + "TabSelector").attr("data-loaded", "1"); - $("#" + fokus).html(data); - $("input[name=focus]").val($("#foki li.active a").attr("aria-controls")); - getDocumentReadyForUse(fokus); - }); - } else { - getDocumentReadyForUse(fokus); - } - }); -} - -function getDocumentReadyForUse(fokus, custom = false) { - clickLog(); - popovers(); - if (fokus === "bilder") imageLoader(); - if (custom) initialLoadContent(fokus); - //pagination(); - tabs(); - theme(); - fokiChanger(); - pluginInfo(); - productWidget(); - $('iframe:not(.resized)').iFrameResize(); - $('iframe').addClass("resized"); -} - -function pluginInfo() { - if (localStorage) { - if (localStorage.getItem('pluginInfo') == "off") $("#searchplugin").css("display", "none"); - $("#searchplugin").on('close.bs.alert', function() { - $.get('/pluginClose'); - localStorage.setItem('pluginInfo', 'off'); - }); - $("#searchplugin a.btn").click(function() { - $.get('/pluginInstall'); - }); - } -} - -function theme() { - if (localStorage) { - var theme = localStorage.getItem("theme"); - if (theme != null) { - if ((theme.match(/,/g) || []).length != 3) { - localStorage.removeItem("theme"); - } else { - theme = theme.split(","); - $("#theme").attr("href", "/css/theme.css.php?r=" + theme[0] + "&g=" + theme[1] + "&b=" + theme[2] + "&a=" + theme[3]); - } - } - } -} - -function clickLog() { - $(".result a.title, .result div.link-link a").off(); - $(".result a.title, .result div.link-link a").click(function() { - $.get("/clickstats", { - i: $("meta[name=p]").attr("content"), - s: $(this).attr("data-hoster"), - q: $("meta[name=q]").attr("content"), - p: $(this).attr("data-count"), - url: $(this).attr("href") - }); - }); -} - -function popovers() { - $("[data-toggle=popover]").each(function(e) { - $(this).popover("destroy"); - $(this).popover({ - //html : true, - //title : "<i class="fa fa-cog" aria-hidden="true"></i> Optionen", - content: $(this).parent().find(".content").html() - }); - }); -} - -function pagination() { - $(".pagination li:not(.active) > a").attr("href", "#"); - $(".pagination li.disabled > a").removeAttr("href"); - $(".pagination li:not(.active) > a").off(); - $(".pagination li:not(.active) > a").click(paginationHandler); -} - -function paginationHandler() { - var link = $(this).attr("data-href"); - if (link.length == 0) { - return; - } - var tabPane = $(".tab-pane.active"); - $(tabPane).html("<div class=\"loader\"><img src=\"/img/ajax-loader.gif\" alt=\"\" /></div>"); - $.get(link, function(data) { - $(tabPane).html(data); - $(".pagination li:not(.active) > a").attr("href", "#"); - $(".pagination li.disabled > a").removeAttr("href"); - $(".pagination li:not(.active) > a").off(); - $(".pagination li:not(.active) > a").click(paginationHandler); - getDocumentReadyForUse(); - }); -} - -function imageLoader() { - if (typeof $("#container").masonry == "undefined") { - return; - } - var $grid = $("#container").masonry({ - columnWidth: 150, - itemSelector: '.item', - gutter: 10, - isFitWidth: true - }); - $grid.imagesLoaded().progress(function(instance, image) { - $grid.masonry('layout'); - }); -} - -function eliminateHost(host) { - $(".result:not(.ad)").each(function(e) { - var host2 = $(this).find(".link-link > a").attr("data-host"); - if (host2.indexOf(host) === 0) { - $(this).css("display", "none"); - } - }); -} - -function fokiChanger() { - $("#fokiChanger ul > li").click(function() { - document.location.href = $(this).attr("data-href"); - }); -} -// Polyfill for form attribute -(function($) { - /** - * polyfill for html5 form attr - */ - // detect if browser supports this - var sampleElement = $('[form]').get(0); - var isIE11 = !(window.ActiveXObject) && "ActiveXObject" in window; - if (sampleElement && window.HTMLFormElement && sampleElement.form instanceof HTMLFormElement && !isIE11) { - // browser supports it, no need to fix - return; - } - /** - * Append a field to a form - * - */ - $.fn.appendField = function(data) { - // for form only - if (!this.is('form')) return; - // wrap data - if (!$.isArray(data) && data.name && data.value) { - data = [data]; - } - var $form = this; - // attach new params - $.each(data, function(i, item) { - $('<input/>').attr('type', 'hidden').attr('name', item.name).val(item.value).appendTo($form); - }); - return $form; - }; - /** - * Find all input fields with form attribute point to jQuery object - * - */ - $('form[id]').submit(function(e) { - var $form = $(this); - // serialize data - var data = $('[form=' + $form.attr('id') + ']').serializeArray(); - // append data to form - $form.appendField(data); - }).each(function() { - var form = this, - $form = $(form), - $fields = $('[form=' + $form.attr('id') + ']'); - $fields.filter('button, input').filter('[type=reset],[type=submit]').click(function() { - var type = this.type.toLowerCase(); - if (type === 'reset') { - // reset form - form.reset(); - // for elements outside form - $fields.each(function() { - this.value = this.defaultValue; - this.checked = this.defaultChecked; - }).filter('select').each(function() { - $(this).find('option').each(function() { - this.selected = this.defaultSelected; - }); - }); - } else if (type.match(/^submit|image$/i)) { - $(form).appendField({ - name: this.name, - value: this.value - }).submit(); - } - }); - }); -})(jQuery); - -function productWidget() { - var isMobile = false; //initiate as false - // device detection - if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0, 4))) isMobile = true; - if (isMobile) { - $('.lightSlider').lightSlider({ - item: 5, - loop: false, - slideMove: 2, - easing: 'cubic-bezier(0.25, 0, 0.25, 1)', - speed: 600, - pager: false, - prevHtml: '<i class="fa fa-chevron-left" aria-hidden="true"></i></span><span class="sr-only">Previous</span>', - nextHtml: '<i class="fa fa-chevron-right" aria-hidden="true"></i><span class="sr-only">Next</span>', - responsive: [{ - breakpoint: 1400, - settings: { - item: 4, - slideMove: 2, - } - }, { - breakpoint: 1200, - settings: { - item: 3, - slideMove: 2, - } - }, { - breakpoint: 980, - settings: { - item: 4, - slideMove: 2, - } - }, { - breakpoint: 720, - settings: { - item: 3, - slideMove: 1 - } - }, { - breakpoint: 520, - settings: { - item: 2, - slideMove: 1, - } - }, ] - }); - } else { - $('.lightSlider').lightSlider({ - item: 5, - loop: false, - slideMove: 2, - easing: 'cubic-bezier(0.25, 0, 0.25, 1)', - speed: 600, - pager: false, - enableTouch: false, - enableDrag: false, - prevHtml: '<a class="fa fa-chevron-left" aria-hidden="true"></a><span class="sr-only">Previous</span>', - nextHtml: '<a class="fa fa-chevron-right" aria-hidden="true"></a><span class="sr-only">Next</span>', - responsive: [{ - breakpoint: 1400, - settings: { - item: 4, - slideMove: 2, - } - }, { - breakpoint: 1200, - settings: { - item: 3, - slideMove: 2, - } - }, { - breakpoint: 980, - settings: { - item: 4, - slideMove: 2, - } - }, { - breakpoint: 720, - settings: { - item: 3, - slideMove: 1 - } - }, { - breakpoint: 520, - settings: { - item: 2, - slideMove: 1, - } - }, ] - }); - } - $(".lightSliderContainer").removeClass("hidden"); -} -/** - * Creates focus tab and tab selector for every stored focus in local storage - */ -function createCustomFocuses() { - for (var key in localStorage) { - if (key.startsWith("focus_")) { - var focus = loadFocusById(key); - var active = false; - if (getActiveFocusId() === getIdFromName(focus.name)) { - active = true; - } - addFocus(focus, active); - addTab(focus, active); - } - } -} -/** - * Adds a focuses tab selector to the tab selector section - * - * @if( $metager->getFokus() === "produktsuche" ) - * <li id="produktsucheTabSelector" class="active tab-selector" role="presentation" data-loaded="1"> - * <a aria-controls="produktsuche" data-href="#produktsuche" href="#produktsuche"> - * <i class="fa fa-shopping-cart" aria-hidden="true"></i> - * <span class="hidden-xs">{{ trans('index.foki.produkte') }}</span> - * </a> - * </li> - * @else - * <li id="produktsucheTabSelector" class="tab-selector" role="presentation" data-loaded="0"> - * <a aria-controls="produktsuche" data-href="{!! $metager->generateSearchLink('produktsuche') !!}" href="{!! $metager->generateSearchLink('produktsuche', false) !!}"> - * <i class="fa fa-shopping-cart" aria-hidden="true"></i> - * <span class="hidden-xs">{{ trans('index.foki.produkte') }}</span> - * </a> - * </li> - * @endif - */ -function addFocus(focus, active = false) { - var id = getIdFromName(focus.name); - var foki = document.getElementById("foki"); - // create <input> - var focusElement = document.createElement("li"); - focusElement.id = id + "TabSelector"; - focusElement.classList.add("tab-selector"); - focusElement.classList.add("custom-focus-tab-selector"); - if (active) { - focusElement.classList.add("active"); - focusElement.setAttribute("data-loaded", "1"); - } else { - focusElement.setAttribute("data-loaded", "0"); - } - focusElement.setAttribute("role", "presentation"); - // create <a> - var focusElementLink = document.createElement("a"); - focusElementLink.setAttribute("aria-controls", id); - var searchLink = generateSearchLinkForFocus(focus) - focusElementLink.setAttribute("data-href", searchLink); - focusElementLink.setAttribute("href", searchLink); - // create <a> icon - var focusElementIcon = document.createElement("i"); - focusElementIcon.classList.add("fa"); - focusElementIcon.classList.add("fa-cog"); - focusElementIcon.setAttribute("aria-hidden", "true"); - // create <span> focusname - var focusElementName = document.createElement("span"); - focusElementName.classList.add("hidden-xs"); - focusElementName.innerHTML = focus.name; - // add new elements - var mapsTabSelector = document.getElementById("mapsTabSelector"); - foki.insertBefore(focusElement, mapsTabSelector); - focusElement.appendChild(focusElementLink); - focusElementLink.appendChild(focusElementIcon); - focusElementLink.appendChild(focusElementName); -} -/** - * Adds a focuses tab to the tab section - * - * @if( $metager->getFokus() === "produktsuche" ) - * <div role="tabpanel" class="tab-pane active" id="produktsuche"> - * <div class="row"> - * @yield('results') - * </div> - * </div> - * @else - * <div role="tabpanel" class="tab-pane" id="produktsuche"> - * <div class="loader"> - * <img src="/img/ajax-loader.gif" alt="" /> - * </div> - * </div> - * @endif - */ -function addTab(focus, active = false) { - var id = getIdFromName(focus.name); - // create tab div - var tabPane = document.createElement("div"); - tabPane.id = id; - tabPane.classList.add("tab-pane"); - if (active) { - tabPane.classList.add("active"); - } - tabPane.setAttribute("role", "tabpanel"); - // create row div - var row = document.createElement("div"); - row.classList.add("loader"); - // create loader image - var img = document.createElement("img"); - img.setAttribute("src", "/img/ajax-loader.gif"); - img.setAttribute("alt", ""); - row.appendChild(img); - // add new elements - var tabs = document.getElementById("main-content-tabs"); - tabs.appendChild(tabPane) - tabPane.appendChild(row); -} -/** - * Turns a name into an id - * Converts special characters and spaces - */ -function getIdFromName(name) { - return "focus_" + name.split(" ").join("_").toLowerCase(); -} -/** - * Loads the focus object for the given id from local storage - */ -function loadFocusById(id) { - return JSON.parse(localStorage.getItem(id)); -} -/** - * Gets the id of the currently active focus - */ -function getActiveFocusId() { - var search = window.location.search; - var from = search.indexOf("focus=") + "focus=".length; - var to = search.substring(from).indexOf("&") + from; - if (to <= 0) { - to = search.substring(from).length; - } - id = search.substring(from, to); - return id; -} -/** - * Turns the link of the current page into a search link for the given focus - */ -// TODO catch error if link is http://localhost:8000/meta/meta.ger3? -function generateSearchLinkForFocus(focus) { - var link = document.location.href; - // remove old engine settings - // not yet tested, only for compability problems with old versions of bookmarks and plugins - /* - while (link.indexOf("engine_") !== -1) { - var from = search.indexOf("engine_"); - var to = search.substring(from).indexOf("&") + from; - if (to === 0) { - to = search.substring(from).length; - } - link = link.substring(0, from) + link.substring(to); - } - */ - // add new engine settings - for (var key in focus) { - if (key.startsWith("engine_")) { - var focusName = key.substring("engine_".length); - link += "&" + focusName + "=" + focus[key]; - } - } - link += "&out=results"; - link = replaceFocusInUrl(link); - return link; -} -/** - * Replaces the focus in a given url with the "angepasst" focus - */ -function replaceFocusInUrl(url) { - var from = url.indexOf("focus="); - var to = url.substring(from).indexOf("&") + from; - if (to === 0) { - to = url.substring(from).length; - } - url = url.substring(0, from) + url.substring(to); - return url + "&focus=angepasst"; -} -/** - * Loads the content for a given fokus - */ -function initialLoadContent(fokus) { - var link = $("#" + fokus + "TabSelector a").attr("data-href"); - $.get(link, function(data) { - $("#" + fokus).html(data); - getDocumentReadyForUse(fokus); - }); -} \ No newline at end of file diff --git a/public/build/rev-manifest.json b/public/build/rev-manifest.json index 705a4019a..53cab3cae 100644 --- a/public/build/rev-manifest.json +++ b/public/build/rev-manifest.json @@ -1,7 +1,7 @@ { "js/editLanguage.js": "js/editLanguage-7a1cbfb2ba.js", "js/kontakt.js": "js/kontakt-de49d68db3.js", - "js/scriptResultPage.js": "js/scriptResultPage-44152e1f00.js", + "js/scriptResultPage.js": "js/scriptResultPage-011f2b799c.js", "js/scriptStartPage.js": "js/scriptStartPage-fa42bed8ca.js", "js/settings.js": "js/settings-6ff0eab621.js", "js/widgets.js": "js/widgets-866379dd63.js" diff --git a/public/js/scriptResultPage.js b/public/js/scriptResultPage.js index 910823795..0fda2cbfd 100644 --- a/public/js/scriptResultPage.js +++ b/public/js/scriptResultPage.js @@ -1,330 +1,330 @@ -$(document).ready(function() { - createCustomFocuses(); - var focus = $("#foki > li.active > a").attr("aria-controls"); - var custom = $("#foki > li.active").hasClass("custom-focus-tab-selector"); - getDocumentReadyForUse(focus, custom); -}); +$(document).ready(function () { + createCustomFocuses() + var focus = $('#foki > li.active > a').attr('aria-controls') + var custom = $('#foki > li.active').hasClass('custom-focus-tab-selector') + getDocumentReadyForUse(focus, custom) +}) -function tabs() { - $("#foki > li.tab-selector > a").each(function() { - if ($(this).attr("target") != "_blank") { - $(this).attr("href", "#" + $(this).attr("aria-controls")); - $(this).attr("role", "tab"); - $(this).attr("data-toggle", "tab"); - } - }); - $("#foki > li.tab-selector > a").off(); - $("#foki > li.tab-selector > a").on("show.bs.tab", function(e) { - var fokus = $(this).attr("aria-controls"); - var link = $("#" + fokus + "TabSelector a").attr("data-href"); - if ($("#" + fokus + "TabSelector").attr("data-loaded") != "1") { - $.get(link, function(data) { - $("#" + fokus + "TabSelector").attr("data-loaded", "1"); - $("#" + fokus).html(data); - $("input[name=focus]").val($("#foki li.active a").attr("aria-controls")); - getDocumentReadyForUse(fokus); - }); - } else { - getDocumentReadyForUse(fokus); - } - }); +function tabs () { + $('#foki > li.tab-selector > a').each(function () { + if ($(this).attr('target') != '_blank') { + $(this).attr('href', '#' + $(this).attr('aria-controls')) + $(this).attr('role', 'tab') + $(this).attr('data-toggle', 'tab') + } + }) + $('#foki > li.tab-selector > a').off() + $('#foki > li.tab-selector > a').on('show.bs.tab', function (e) { + var fokus = $(this).attr('aria-controls') + var link = $('#' + fokus + 'TabSelector a').attr('data-href') + if ($('#' + fokus + 'TabSelector').attr('data-loaded') != '1') { + $.get(link, function (data) { + $('#' + fokus + 'TabSelector').attr('data-loaded', '1') + $('#' + fokus).html(data) + $('input[name=focus]').val($('#foki li.active a').attr('aria-controls')) + getDocumentReadyForUse(fokus) + }) + } else { + getDocumentReadyForUse(fokus) + } + }) } -function getDocumentReadyForUse(fokus, custom = false) { - clickLog(); - popovers(); - if (fokus === "bilder") imageLoader(); - if (custom) initialLoadContent(fokus); - //pagination(); - tabs(); - theme(); - fokiChanger(); - pluginInfo(); - productWidget(); - $('iframe:not(.resized)').iFrameResize(); - $('iframe').addClass("resized"); +function getDocumentReadyForUse (fokus, custom = false) { + clickLog() + popovers() + if (fokus === 'bilder') imageLoader() + if (custom) initialLoadContent(fokus) + // pagination() + tabs() + theme() + fokiChanger() + pluginInfo() + productWidget() + $('iframe:not(.resized)').iFrameResize() + $('iframe').addClass('resized') } -function pluginInfo() { - if (localStorage) { - if (localStorage.getItem('pluginInfo') == "off") $("#searchplugin").css("display", "none"); - $("#searchplugin").on('close.bs.alert', function() { - $.get('/pluginClose'); - localStorage.setItem('pluginInfo', 'off'); - }); - $("#searchplugin a.btn").click(function() { - $.get('/pluginInstall'); - }); - } +function pluginInfo () { + if (localStorage) { + if (localStorage.getItem('pluginInfo') == 'off') $('#searchplugin').css('display', 'none') + $('#searchplugin').on('close.bs.alert', function () { + $.get('/pluginClose') + localStorage.setItem('pluginInfo', 'off') + }) + $('#searchplugin a.btn').click(function () { + $.get('/pluginInstall') + }) + } } -function theme() { - if (localStorage) { - var theme = localStorage.getItem("theme"); - if (theme != null) { - if ((theme.match(/,/g) || []).length != 3) { - localStorage.removeItem("theme"); - } else { - theme = theme.split(","); - $("#theme").attr("href", "/css/theme.css.php?r=" + theme[0] + "&g=" + theme[1] + "&b=" + theme[2] + "&a=" + theme[3]); - } - } +function theme () { + if (localStorage) { + var theme = localStorage.getItem('theme') + if (theme != null) { + if ((theme.match(/,/g) || []).length != 3) { + localStorage.removeItem('theme') + } else { + theme = theme.split(',') + $('#theme').attr('href', '/css/theme.css.php?r=' + theme[0] + '&g=' + theme[1] + '&b=' + theme[2] + '&a=' + theme[3]) + } } + } } -function clickLog() { - $(".result a.title, .result div.link-link a").off(); - $(".result a.title, .result div.link-link a").click(function() { - $.get("/clickstats", { - i: $("meta[name=p]").attr("content"), - s: $(this).attr("data-hoster"), - q: $("meta[name=q]").attr("content"), - p: $(this).attr("data-count"), - url: $(this).attr("href") - }); - }); +function clickLog () { + $('.result a.title, .result div.link-link a').off() + $('.result a.title, .result div.link-link a').click(function () { + $.get('/clickstats', { + i: $('meta[name=p]').attr('content'), + s: $(this).attr('data-hoster'), + q: $('meta[name=q]').attr('content'), + p: $(this).attr('data-count'), + url: $(this).attr('href') + }) + }) } -function popovers() { - $("[data-toggle=popover]").each(function(e) { - $(this).popover("destroy"); - $(this).popover({ - //html : true, - //title : "<i class="fa fa-cog" aria-hidden="true"></i> Optionen", - content: $(this).parent().find(".content").html() - }); - }); +function popovers () { + $('[data-toggle=popover]').each(function (e) { + $(this).popover('destroy') + $(this).popover({ + // html : true, + // title : "<i class="fa fa-cog" aria-hidden="true"></i> Optionen", + content: $(this).parent().find('.content').html() + }) + }) } -function pagination() { - $(".pagination li:not(.active) > a").attr("href", "#"); - $(".pagination li.disabled > a").removeAttr("href"); - $(".pagination li:not(.active) > a").off(); - $(".pagination li:not(.active) > a").click(paginationHandler); +function pagination () { + $('.pagination li:not(.active) > a').attr('href', '#') + $('.pagination li.disabled > a').removeAttr('href') + $('.pagination li:not(.active) > a').off() + $('.pagination li:not(.active) > a').click(paginationHandler) } -function paginationHandler() { - var link = $(this).attr("data-href"); - if (link.length == 0) { - return; - } - var tabPane = $(".tab-pane.active"); - $(tabPane).html("<div class=\"loader\"><img src=\"/img/ajax-loader.gif\" alt=\"\" /></div>"); - $.get(link, function(data) { - $(tabPane).html(data); - $(".pagination li:not(.active) > a").attr("href", "#"); - $(".pagination li.disabled > a").removeAttr("href"); - $(".pagination li:not(.active) > a").off(); - $(".pagination li:not(.active) > a").click(paginationHandler); - getDocumentReadyForUse(); - }); +function paginationHandler () { + var link = $(this).attr('data-href') + if (link.length == 0) { + return + } + var tabPane = $('.tab-pane.active') + $(tabPane).html('<div class="loader"><img src="/img/ajax-loader.gif" alt="" /></div>') + $.get(link, function (data) { + $(tabPane).html(data) + $('.pagination li:not(.active) > a').attr('href', '#') + $('.pagination li.disabled > a').removeAttr('href') + $('.pagination li:not(.active) > a').off() + $('.pagination li:not(.active) > a').click(paginationHandler) + getDocumentReadyForUse() + }) } -function imageLoader() { - if (typeof $("#container").masonry == "undefined") { - return; - } - var $grid = $("#container").masonry({ - columnWidth: 150, - itemSelector: '.item', - gutter: 10, - isFitWidth: true - }); - $grid.imagesLoaded().progress(function(instance, image) { - $grid.masonry('layout'); - }); +function imageLoader () { + if (typeof $('#container').masonry == 'undefined') { + return + } + var $grid = $('#container').masonry({ + columnWidth: 150, + itemSelector: '.item', + gutter: 10, + isFitWidth: true + }) + $grid.imagesLoaded().progress(function (instance, image) { + $grid.masonry('layout') + }) } -function eliminateHost(host) { - $(".result:not(.ad)").each(function(e) { - var host2 = $(this).find(".link-link > a").attr("data-host"); - if (host2.indexOf(host) === 0) { - $(this).css("display", "none"); - } - }); +function eliminateHost (host) { + $('.result:not(.ad)').each(function (e) { + var host2 = $(this).find('.link-link > a').attr('data-host') + if (host2.indexOf(host) === 0) { + $(this).css('display', 'none') + } + }) } -function fokiChanger() { - $("#fokiChanger ul > li").click(function() { - document.location.href = $(this).attr("data-href"); - }); +function fokiChanger () { + $('#fokiChanger ul > li').click(function () { + document.location.href = $(this).attr('data-href') + }) } // Polyfill for form attribute -(function($) { - /** - * polyfill for html5 form attr - */ - // detect if browser supports this - var sampleElement = $('[form]').get(0); - var isIE11 = !(window.ActiveXObject) && "ActiveXObject" in window; - if (sampleElement && window.HTMLFormElement && sampleElement.form instanceof HTMLFormElement && !isIE11) { - // browser supports it, no need to fix - return; +(function ($) { + /** + * polyfill for html5 form attr + */ + // detect if browser supports this + var sampleElement = $('[form]').get(0) + var isIE11 = !(window.ActiveXObject) && 'ActiveXObject' in window + if (sampleElement && window.HTMLFormElement && sampleElement.form instanceof HTMLFormElement && !isIE11) { + // browser supports it, no need to fix + return + } + /** + * Append a field to a form + * + */ + $.fn.appendField = function (data) { + // for form only + if (!this.is('form')) return + // wrap data + if (!$.isArray(data) && data.name && data.value) { + data = [data] } - /** - * Append a field to a form - * - */ - $.fn.appendField = function(data) { - // for form only - if (!this.is('form')) return; - // wrap data - if (!$.isArray(data) && data.name && data.value) { - data = [data]; - } - var $form = this; - // attach new params - $.each(data, function(i, item) { - $('<input/>').attr('type', 'hidden').attr('name', item.name).val(item.value).appendTo($form); - }); - return $form; - }; - /** - * Find all input fields with form attribute point to jQuery object - * - */ - $('form[id]').submit(function(e) { - var $form = $(this); - // serialize data - var data = $('[form=' + $form.attr('id') + ']').serializeArray(); - // append data to form - $form.appendField(data); - }).each(function() { - var form = this, - $form = $(form), - $fields = $('[form=' + $form.attr('id') + ']'); - $fields.filter('button, input').filter('[type=reset],[type=submit]').click(function() { - var type = this.type.toLowerCase(); - if (type === 'reset') { - // reset form - form.reset(); - // for elements outside form - $fields.each(function() { - this.value = this.defaultValue; - this.checked = this.defaultChecked; - }).filter('select').each(function() { - $(this).find('option').each(function() { - this.selected = this.defaultSelected; - }); - }); - } else if (type.match(/^submit|image$/i)) { - $(form).appendField({ - name: this.name, - value: this.value - }).submit(); - } - }); - }); -})(jQuery); + var $form = this + // attach new params + $.each(data, function (i, item) { + $('<input/>').attr('type', 'hidden').attr('name', item.name).val(item.value).appendTo($form) + }) + return $form + } + /** + * Find all input fields with form attribute point to jQuery object + * + */ + $('form[id]').submit(function (e) { + var $form = $(this) + // serialize data + var data = $('[form=' + $form.attr('id') + ']').serializeArray() + // append data to form + $form.appendField(data) + }).each(function () { + var form = this, + $form = $(form), + $fields = $('[form=' + $form.attr('id') + ']') + $fields.filter('button, input').filter('[type=reset],[type=submit]').click(function () { + var type = this.type.toLowerCase() + if (type === 'reset') { + // reset form + form.reset() + // for elements outside form + $fields.each(function () { + this.value = this.defaultValue + this.checked = this.defaultChecked + }).filter('select').each(function () { + $(this).find('option').each(function () { + this.selected = this.defaultSelected + }) + }) + } else if (type.match(/^submit|image$/i)) { + $(form).appendField({ + name: this.name, + value: this.value + }).submit() + } + }) + }) +})(jQuery) -function productWidget() { - var isMobile = false; //initiate as false - // device detection - if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0, 4))) isMobile = true; - if (isMobile) { - $('.lightSlider').lightSlider({ - item: 5, - loop: false, - slideMove: 2, - easing: 'cubic-bezier(0.25, 0, 0.25, 1)', - speed: 600, - pager: false, - prevHtml: '<i class="fa fa-chevron-left" aria-hidden="true"></i></span><span class="sr-only">Previous</span>', - nextHtml: '<i class="fa fa-chevron-right" aria-hidden="true"></i><span class="sr-only">Next</span>', - responsive: [{ - breakpoint: 1400, - settings: { - item: 4, - slideMove: 2, - } - }, { - breakpoint: 1200, - settings: { - item: 3, - slideMove: 2, - } - }, { - breakpoint: 980, - settings: { - item: 4, - slideMove: 2, - } - }, { - breakpoint: 720, - settings: { - item: 3, - slideMove: 1 - } - }, { - breakpoint: 520, - settings: { - item: 2, - slideMove: 1, - } - }, ] - }); - } else { - $('.lightSlider').lightSlider({ - item: 5, - loop: false, - slideMove: 2, - easing: 'cubic-bezier(0.25, 0, 0.25, 1)', - speed: 600, - pager: false, - enableTouch: false, - enableDrag: false, - prevHtml: '<a class="fa fa-chevron-left" aria-hidden="true"></a><span class="sr-only">Previous</span>', - nextHtml: '<a class="fa fa-chevron-right" aria-hidden="true"></a><span class="sr-only">Next</span>', - responsive: [{ - breakpoint: 1400, - settings: { - item: 4, - slideMove: 2, - } - }, { - breakpoint: 1200, - settings: { - item: 3, - slideMove: 2, - } - }, { - breakpoint: 980, - settings: { - item: 4, - slideMove: 2, - } - }, { - breakpoint: 720, - settings: { - item: 3, - slideMove: 1 - } - }, { - breakpoint: 520, - settings: { - item: 2, - slideMove: 1, - } - }, ] - }); - } - $(".lightSliderContainer").removeClass("hidden"); +function productWidget () { + var isMobile = false // initiate as false + // device detection + if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0, 4))) isMobile = true + if (isMobile) { + $('.lightSlider').lightSlider({ + item: 5, + loop: false, + slideMove: 2, + easing: 'cubic-bezier(0.25, 0, 0.25, 1)', + speed: 600, + pager: false, + prevHtml: '<i class="fa fa-chevron-left" aria-hidden="true"></i></span><span class="sr-only">Previous</span>', + nextHtml: '<i class="fa fa-chevron-right" aria-hidden="true"></i><span class="sr-only">Next</span>', + responsive: [{ + breakpoint: 1400, + settings: { + item: 4, + slideMove: 2 + } + }, { + breakpoint: 1200, + settings: { + item: 3, + slideMove: 2 + } + }, { + breakpoint: 980, + settings: { + item: 4, + slideMove: 2 + } + }, { + breakpoint: 720, + settings: { + item: 3, + slideMove: 1 + } + }, { + breakpoint: 520, + settings: { + item: 2, + slideMove: 1 + } + } ] + }) + } else { + $('.lightSlider').lightSlider({ + item: 5, + loop: false, + slideMove: 2, + easing: 'cubic-bezier(0.25, 0, 0.25, 1)', + speed: 600, + pager: false, + enableTouch: false, + enableDrag: false, + prevHtml: '<a class="fa fa-chevron-left" aria-hidden="true"></a><span class="sr-only">Previous</span>', + nextHtml: '<a class="fa fa-chevron-right" aria-hidden="true"></a><span class="sr-only">Next</span>', + responsive: [{ + breakpoint: 1400, + settings: { + item: 4, + slideMove: 2 + } + }, { + breakpoint: 1200, + settings: { + item: 3, + slideMove: 2 + } + }, { + breakpoint: 980, + settings: { + item: 4, + slideMove: 2 + } + }, { + breakpoint: 720, + settings: { + item: 3, + slideMove: 1 + } + }, { + breakpoint: 520, + settings: { + item: 2, + slideMove: 1 + } + } ] + }) + } + $('.lightSliderContainer').removeClass('hidden') } /** * Creates focus tab and tab selector for every stored focus in local storage */ -function createCustomFocuses() { - for (var key in localStorage) { - if (key.startsWith("focus_")) { - var focus = loadFocusById(key); - var active = false; - if (getActiveFocusId() === getIdFromName(focus.name)) { - active = true; - } - addFocus(focus, active); - addTab(focus, active); - } +function createCustomFocuses () { + for (var key in localStorage) { + if (key.startsWith('focus_')) { + var focus = loadFocusById(key) + var active = false + if (getActiveFocusId() === getIdFromName(focus.name)) { + active = true + } + addFocus(focus, active) + addTab(focus, active) } + } } /** * Adds a focuses tab selector to the tab selector section @@ -345,42 +345,42 @@ function createCustomFocuses() { * </li> * @endif */ -function addFocus(focus, active = false) { - var id = getIdFromName(focus.name); - var foki = document.getElementById("foki"); - // create <input> - var focusElement = document.createElement("li"); - focusElement.id = id + "TabSelector"; - focusElement.classList.add("tab-selector"); - focusElement.classList.add("custom-focus-tab-selector"); - if (active) { - focusElement.classList.add("active"); - focusElement.setAttribute("data-loaded", "1"); - } else { - focusElement.setAttribute("data-loaded", "0"); - } - focusElement.setAttribute("role", "presentation"); - // create <a> - var focusElementLink = document.createElement("a"); - focusElementLink.setAttribute("aria-controls", id); - var searchLink = generateSearchLinkForFocus(focus) - focusElementLink.setAttribute("data-href", searchLink); - focusElementLink.setAttribute("href", searchLink); - // create <a> icon - var focusElementIcon = document.createElement("i"); - focusElementIcon.classList.add("fa"); - focusElementIcon.classList.add("fa-cog"); - focusElementIcon.setAttribute("aria-hidden", "true"); - // create <span> focusname - var focusElementName = document.createElement("span"); - focusElementName.classList.add("hidden-xs"); - focusElementName.innerHTML = focus.name; - // add new elements - var mapsTabSelector = document.getElementById("mapsTabSelector"); - foki.insertBefore(focusElement, mapsTabSelector); - focusElement.appendChild(focusElementLink); - focusElementLink.appendChild(focusElementIcon); - focusElementLink.appendChild(focusElementName); +function addFocus (focus, active = false) { + var id = getIdFromName(focus.name) + var foki = document.getElementById('foki') + // create <input> + var focusElement = document.createElement('li') + focusElement.id = id + 'TabSelector' + focusElement.classList.add('tab-selector') + focusElement.classList.add('custom-focus-tab-selector') + if (active) { + focusElement.classList.add('active') + focusElement.setAttribute('data-loaded', '1') + } else { + focusElement.setAttribute('data-loaded', '0') + } + focusElement.setAttribute('role', 'presentation') + // create <a> + var focusElementLink = document.createElement('a') + focusElementLink.setAttribute('aria-controls', id) + var searchLink = generateSearchLinkForFocus(focus) + focusElementLink.setAttribute('data-href', searchLink) + focusElementLink.setAttribute('href', searchLink) + // create <a> icon + var focusElementIcon = document.createElement('i') + focusElementIcon.classList.add('fa') + focusElementIcon.classList.add('fa-cog') + focusElementIcon.setAttribute('aria-hidden', 'true') + // create <span> focusname + var focusElementName = document.createElement('span') + focusElementName.classList.add('hidden-xs') + focusElementName.innerHTML = focus.name + // add new elements + var mapsTabSelector = document.getElementById('mapsTabSelector') + foki.insertBefore(focusElement, mapsTabSelector) + focusElement.appendChild(focusElementLink) + focusElementLink.appendChild(focusElementIcon) + focusElementLink.appendChild(focusElementName) } /** * Adds a focuses tab to the tab section @@ -399,103 +399,103 @@ function addFocus(focus, active = false) { * </div> * @endif */ -function addTab(focus, active = false) { - var id = getIdFromName(focus.name); - // create tab div - var tabPane = document.createElement("div"); - tabPane.id = id; - tabPane.classList.add("tab-pane"); - if (active) { - tabPane.classList.add("active"); - } - tabPane.setAttribute("role", "tabpanel"); - // create row div - var row = document.createElement("div"); - row.classList.add("loader"); - // create loader image - var img = document.createElement("img"); - img.setAttribute("src", "/img/ajax-loader.gif"); - img.setAttribute("alt", ""); - row.appendChild(img); - // add new elements - var tabs = document.getElementById("main-content-tabs"); - tabs.appendChild(tabPane) - tabPane.appendChild(row); +function addTab (focus, active = false) { + var id = getIdFromName(focus.name) + // create tab div + var tabPane = document.createElement('div') + tabPane.id = id + tabPane.classList.add('tab-pane') + if (active) { + tabPane.classList.add('active') + } + tabPane.setAttribute('role', 'tabpanel') + // create row div + var row = document.createElement('div') + row.classList.add('loader') + // create loader image + var img = document.createElement('img') + img.setAttribute('src', '/img/ajax-loader.gif') + img.setAttribute('alt', '') + row.appendChild(img) + // add new elements + var tabs = document.getElementById('main-content-tabs') + tabs.appendChild(tabPane) + tabPane.appendChild(row) } /** * Turns a name into an id * Converts special characters and spaces */ -function getIdFromName(name) { - return "focus_" + name.split(" ").join("_").toLowerCase(); +function getIdFromName (name) { + return 'focus_' + name.split(' ').join('_').toLowerCase() } /** * Loads the focus object for the given id from local storage */ -function loadFocusById(id) { - return JSON.parse(localStorage.getItem(id)); +function loadFocusById (id) { + return JSON.parse(localStorage.getItem(id)) } /** * Gets the id of the currently active focus */ -function getActiveFocusId() { - var search = window.location.search; - var from = search.indexOf("focus=") + "focus=".length; - var to = search.substring(from).indexOf("&") + from; - if (to <= 0) { - to = search.substring(from).length; - } - id = search.substring(from, to); - return id; +function getActiveFocusId () { + var search = window.location.search + var from = search.indexOf('focus=') + 'focus='.length + var to = search.substring(from).indexOf('&') + from + if (to <= 0) { + to = search.substring(from).length + } + id = search.substring(from, to) + return id } /** * Turns the link of the current page into a search link for the given focus */ // TODO catch error if link is http://localhost:8000/meta/meta.ger3? -function generateSearchLinkForFocus(focus) { - var link = document.location.href; - // remove old engine settings - // not yet tested, only for compability problems with old versions of bookmarks and plugins - /* - while (link.indexOf("engine_") !== -1) { - var from = search.indexOf("engine_"); - var to = search.substring(from).indexOf("&") + from; - if (to === 0) { - to = search.substring(from).length; - } - link = link.substring(0, from) + link.substring(to); +function generateSearchLinkForFocus (focus) { + var link = document.location.href + // remove old engine settings + // not yet tested, only for compability problems with old versions of bookmarks and plugins + /* + while (link.indexOf("engine_") !== -1) { + var from = search.indexOf("engine_") + var to = search.substring(from).indexOf("&") + from + if (to === 0) { + to = search.substring(from).length + } + link = link.substring(0, from) + link.substring(to) + } + */ + // add new engine settings + for (var key in focus) { + if (key.startsWith('engine_')) { + var focusName = key.substring('engine_'.length) + link += '&' + focusName + '=' + focus[key] } - */ - // add new engine settings - for (var key in focus) { - if (key.startsWith("engine_")) { - var focusName = key.substring("engine_".length); - link += "&" + focusName + "=" + focus[key]; - } - } - link += "&out=results"; - link = replaceFocusInUrl(link); - return link; + } + link += '&out=results' + link = replaceFocusInUrl(link) + return link } /** * Replaces the focus in a given url with the "angepasst" focus */ -function replaceFocusInUrl(url) { - var from = url.indexOf("focus="); - var to = url.substring(from).indexOf("&") + from; - if (to === 0) { - to = url.substring(from).length; - } - url = url.substring(0, from) + url.substring(to); - return url + "&focus=angepasst"; +function replaceFocusInUrl (url) { + var from = url.indexOf('focus=') + var to = url.substring(from).indexOf('&') + from + if (to === 0) { + to = url.substring(from).length + } + url = url.substring(0, from) + url.substring(to) + return url + '&focus=angepasst' } /** * Loads the content for a given fokus */ -function initialLoadContent(fokus) { - var link = $("#" + fokus + "TabSelector a").attr("data-href"); - $.get(link, function(data) { - $("#" + fokus).html(data); - getDocumentReadyForUse(fokus); - }); -} \ No newline at end of file +function initialLoadContent (fokus) { + var link = $('#' + fokus + 'TabSelector a').attr('data-href') + $.get(link, function (data) { + $('#' + fokus).html(data) + getDocumentReadyForUse(fokus) + }) +} -- GitLab