1(function($) { 2 3 // Get parameter from current URL. Source: https://stackoverflow.com/questions/5448545/how-to-retrieve-get-parameters-from-javascript 4 5 function findGetParameter(parameterName) { 6 var result = null, 7 tmp = []; 8 location.search 9 .substr(1) 10 .split("&") 11 .forEach(function (item) { 12 tmp = item.split("="); 13 if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]); 14 }); 15 return result; 16 } 17 18 // Replace parameter within a given URL. Source: https://stackoverflow.com/questions/7171099/how-to-replace-url-parameter-with-javascript-jquery 19 20 function replaceUrlParam(url, paramName, paramValue) 21 { 22 if (paramValue == null) { 23 paramValue = ''; 24 } 25 var pattern = new RegExp('\\b('+paramName+'=).*?(&|#|$)'); 26 if (url.search(pattern)>=0) { 27 return url.replace(pattern,'$1' + paramValue + '$2'); 28 } 29 url = url.replace(/[?#]$/,''); 30 return url + (url.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue; 31 } 32 33 $(document).ready(function() { 34 var layoutSetting = findGetParameter('browse_layout'); 35 var layoutHiddenInput = $('<input type="hidden" name="browse_layout">'); 36 37 if (layoutSetting) { 38 $('.layout-toggle button').attr('disabled', false); 39 var currentLayoutButton = $('.layout-toggle button.' + layoutSetting); 40 currentLayoutButton.attr('disabled', true); 41 $('.resources').attr('class', 'resources resource-' + layoutSetting); 42 if (layoutSetting == 'list') { 43 $('.resources .resource').addClass('media-object'); 44 $('.resource-meta, .resource-image').addClass('media-object-section'); 45 } else { 46 $('.resources .resource').removeClass('media-object'); 47 $('.resource-meta, .resource-image').removeClass('media-object-section'); 48 } 49 } 50 51 $('.layout-toggle button').click(function() { 52 const newLayoutName = $(this).attr('aria-label').toLowerCase(); 53 $('.layout-toggle button:disabled').removeAttr('disabled'); 54 $(this).attr('disabled', 'disabled'); 55 $('.resources').toggleClass('resource-list').toggleClass('resource-grid'); 56 $('.resources .resource').toggleClass('media-object'); 57 $('.resource-meta, .resource-image').toggleClass('media-object-section'); 58 59 // Update URLs. 60 var queryParams = new URLSearchParams(window.location.search); 61 queryParams.set('browse_layout', newLayoutName); 62 history.replaceState('', '', "?"+queryParams.toString()); 63 $('.omeka-pagination a').each(function() { 64 var paginationLink = $(this); 65 var currentUrl = paginationLink.attr('href'); 66 var newUrl = replaceUrlParam(currentUrl, 'browse_layout', newLayoutName); 67 paginationLink.attr('href', newUrl); 68 }); 69 if ($('.omeka-pagination [name="browse_layout"]').length > 0) { 70 $('.omeka-pagination [name="browse_layout"]').each(function() { 71 $(this).val(newLayoutName); 72 }); 73 } else { 74 $('.omeka-pagination form').each(function() { 75 var newLayoutHiddenInput = layoutHiddenInput.clone(); 76 newLayoutHiddenInput.val(newLayoutName); 77 $(this).prepend(newLayoutHiddenInput); 78 }); 79 } 80 $('.sorting [name="browse_layout"]').val(newLayoutName); 81 }); 82 83 $('.browse-toggle').click(function() { 84 $('.browse-controls').toggleClass('open closed'); 85 $(this).toggleClass('open closed'); 86 }); 87 }); 88})(jQuery)
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.