1var SAFARI=window.SAFARI||{};$(document).ready(function(){if(SAFARI.csrfToken){$.ajaxSetup({headers:{'X-CSRF-Token':SAFARI.csrfToken}});} 2var notificationsElement=SAFARI.notificationsElement;if(notificationsElement){var useMarkNotificationsAsNotified=SAFARI.useMarkNotificationsAsNotified||window.useMarkNotificationsAsNotified||0;loadNotifications(notificationsElement,useMarkNotificationsAsNotified);} 3$('.uploadProfilePicture').on('click',function(){launchPublicImageUpload('profilePicture',0);});});function confirmMessage(title,message,actionLabel,callback){BootstrapDialog.show({title:title,message:message,buttons:[{label:'Cancel',action:function(dialogItself){dialogItself.close();}},{label:actionLabel,action:function(dialogItself){callback();dialogItself.close();}}]});} 4function statusMessage(title,message,nl2br,buttons,hideButtons,hideTitle){var buttonsFinal=(hideButtons)?[]:[{label:'OK',action:function(dialogItself){dialogItself.close();}}];if(buttons){buttonsFinal=[].concat(buttons,buttonsFinal);} 5var dialog=BootstrapDialog.show({id:'statusMessageDialog',title:title,message:message,nl2br:nl2br,buttons:buttonsFinal});if(!title||hideTitle){dialog.getModalHeader().hide();} 6return dialog;} 7function buildDefaultSearchBox(){var actionUrl=SAFARI.searchBoxActionUrl||'/search';var currentValue=SAFARI.searchBoxCurrentValue||'';return'<div class="searchBox"><form action="'+actionUrl+'"><input type="search" class="form-control ds-input" id="searchBoxInput" placeholder="Search..." aria-label="Search for..." value="'+currentValue+'" name="fullText"></form></div>';} 8var popUpSearchBox=(function(){var cache;return function(){if(!cache){var configuredSearchBoxHtml=SAFARI.searchBoxHtml||window.searchBoxHtml;cache=configuredSearchBoxHtml?configuredSearchBoxHtml:buildDefaultSearchBox();} 9var dialog=statusMessage('Search',cache,null,null,1,1);dialog.whenShown(function(){var searchInput=document.getElementById('searchBoxInput');if(searchInput){searchInput.focus();}});};}());function loadNotifications(targetElement,markNotificationsAsNotified,unreadNotificationCount){markNotificationsAsNotified=(markNotificationsAsNotified)?1:0;if((!SAFARI.uid)||(SAFARI.uid===-1)){return;} 10$(targetElement).html('<li><img src="'+SAFARI.safariResourcePath+'/images/loading.svg"></li>');var startIndex=0;var range=(targetElement==='#notificationMenu')?6:50;$.ajax({url:"/safari/json/responder/?action=loadNotifications&mode=json&markNotificationsAsNotified="+markNotificationsAsNotified+"&unreadNotificationCount="+unreadNotificationCount+"&startIndex="+startIndex+"&range="+range,dataType:"json",}) 11.done(function(json){if(json.error){console.log(json.errorDetails);} 12else{$(targetElement).empty();if(json.notifications.length===0){$(targetElement).append('<li class="notification">You do not have any notifications.</li>');} 13else{var entryNumber=0;$.each(json.notifications,function(i,entry){entryNumber++;if(entryNumber>5&&targetElement==='#notificationMenu'){return false;} 14var read=(entry.cachedate)?' readNotification':' unreadNotification';$(targetElement).append('<li class="notification '+read+'">'+entry.description.html+'</li>');});if(entryNumber>5&&targetElement==='#notificationMenu'){$(targetElement).append('<li class="notification moreNotificationsLink"><a href="'+SAFARI.notificationUrl+'">See All Notifications</a></li>');} 15if($('#notificationsBadge').length){var quantity=json.unreadNotificationCount||0;$('#notificationsBadge').html(quantity);if(quantity===0){$('#notificationsBadge').hide();} 16else{$('#notificationsBadge').show();}}}}});} 17function launchPublicImageUpload(mode,articleId,callback,targetUid){var title="Upload a File";fileUploadPanel=new BootstrapDialog({title:title,});var fileUploadContents='<div class="alert alert-danger" id="fileUploadErrorMessage"></div>';fileUploadContents+='<div class="dropzone" id="fileUploadDropzone"></div>';fileUploadPanel.setMessage(fileUploadContents);fileUploadPanel.setType(BootstrapDialog.TYPE_INFO);fileUploadPanel.open();$("#fileUploadErrorMessage").css('display','none');checkElement('#fileUploadDropzone').then(function(selector){Dropzone.prototype.defaultOptions.dictDefaultMessage="Drag files here to upload or tap/click here to select a file.";let targetUidURI=(targetUid)?"&targetUid="+targetUid:'';let uploadUrl=appendCSRFTokenToURL("/safari/json/responder/?action=uploadFile&aid="+articleId+"&mode="+mode+targetUidURI);$("#fileUploadDropzone").dropzone({url:uploadUrl,paramName:"file",maxFiles:1,init:function(){this.on("maxfilesexceeded",function(file){this.removeAllFiles();this.addFile(file);}),this.on("addedfile",function(file){$("#fileUploadErrorMessage").css('display','none');}),this.on("success",function(file,response){if(response.error){this.removeAllFiles();$("#fileUploadErrorMessage").text(response.error);$("#fileUploadErrorMessage").css('display','block');} 18else{let newUid=(targetUid)?targetUid:SAFARI.uid;let newUsername=(targetUid)?SAFARI.editUsername:SAFARI.username;$("#editorProfilePicture").attr("src","/safari/profilePicture/"+newUsername+'-'+newUid+'-'+response.lastModified+'-m');fileUploadPanel.close();if(typeof callback==='function'){callback(mode,articleId);}}})},transformFile:function(file,done){var myDropZone=$("#fileUploadDropzone").get(0).dropzone;var editor=document.createElement('div');editor.style.position='fixed';editor.style.left=0;editor.style.right=0;editor.style.top=0;editor.style.bottom=0;editor.style.zIndex=9999;editor.style.backgroundColor='#000';document.body.appendChild(editor);$(editor).append("<div style='left: 10px; top: 10px; position: absolute; z-index: 9999;'><button class='btn btn-secondary' id='buttonConfirm'>Confirm</button><button class='btn btn-secondary' id='buttonCancel'>Cancel</button></div>");$('#buttonConfirm').on('click',function(){var canvas=cropper.getCroppedCanvas({width:256,height:256});canvas.toBlob(function(blob){myDropZone.createThumbnail(blob,myDropZone.options.thumbnailWidth,myDropZone.options.thumbnailHeight,myDropZone.options.thumbnailMethod,false,function(dataURL){myDropZone.emit('thumbnail',file,dataURL);done(blob);});done(blob);});$(editor).remove();});$('#buttonCancel').on('click',function(){$(editor).remove();myDropZone.removeAllFiles(true);fileUploadPanel.close();});var image=new Image();image.onload=function(){};image.onerror=function(){alert('Invalid image');$("#fileUploadErrorMessage").text("Invalid image file.");$("#fileUploadErrorMessage").css('display','block');$(editor).remove();myDropZone.removeAllFiles(true);done(file);};image.src=URL.createObjectURL(file);editor.appendChild(image);var cropper=new Cropper(image,{aspectRatio:1});}});});} 19function toggleButtonCreate(buttonName,currentValue,menuMode,toggles){currentValue=currentValue??0;$('#'+buttonName+'Button').on('click',function(){toggleButtonStatus(buttonName,null,menuMode,toggles);});$('<input type="hidden" id="'+buttonName+'" name="'+buttonName+'" value="'+currentValue+'">').insertAfter('#'+buttonName+'Button');checkElement('#'+buttonName).then(function(selector){toggleButtonStatus(buttonName,1,menuMode,toggles);});} 20function toggleButtonStatus(buttonName,noAction,menuMode,toggles){let currentStatus=$('#'+buttonName).val();let onLabel=$('#'+buttonName+'Button').data('onLabel')||$('#'+buttonName+'Button').html();
20let offLabel=$('#'+buttonName+'Button').data('offLabel')||$('#'+buttonName+'Button').html();let advancedActions;if(noAction!==1){if(currentStatus<1){$('#'+buttonName).val(1);currentStatus=1;if(toggles&&toggles['on']){advancedActions=toggles['on']};} 21else{$('#'+buttonName).val(0);currentStatus=0;if(toggles&&toggles['off']){advancedActions=toggles['off']};} 22$("#save").prop('disabled',false);} 23if(currentStatus<1){$('#'+buttonName+'Button').html(offLabel);if(menuMode){$("#"+buttonName+"Button .bi").removeClass("bi-check-lg");$("#"+buttonName+"Button .bi").addClass("d-none");} 24else{$('#'+buttonName+'Button').removeClass("btn-success");$('#'+buttonName+'Button').addClass("btn-secondary");}} 25else{$('#'+buttonName+'Button').html(onLabel);if(menuMode){$("#"+buttonName+"Button .bi").addClass("bi-check-lg");$("#"+buttonName+"Button .bi").removeClass("d-none");} 26else{$('#'+buttonName+'Button').addClass("btn-success");$('#'+buttonName+'Button').removeClass("btn-secondary");}} 27if(advancedActions&&advancedActions['toggleOn']){$.each(advancedActions['toggleOn'],function(index,value){$('#'+value).val(1);toggleButtonStatus(value,1,1);});} 28if(advancedActions&&advancedActions['toggleOff']){$.each(advancedActions['toggleOff'],function(index,value){$('#'+value).val(0);toggleButtonStatus(value,1,1);});}} 29function markNotificationsAsNotified(){$.ajax({url:"/safari/json/responder/?action=markNotificationsAsNotified&mode=json",dataType:"json",}) 30.done(function(json){if(json.error){statusMessage(json.error,json.errorDetails);}});} 31function drawYearsForBirthdaySelector(element){var minYear=new Date().getFullYear()-115;var maxYear=new Date().getFullYear();var html='<option value="0000">Year (Optional)</option>';for(var i=maxYear;i>=minYear;i--){html+='<option value="'+i+'">'+i+'</option>';} 32$(element+'Year').html(html);var birthday=$('#birthday').val();var dateParts=(birthday===undefined||birthday===null||birthday==='')?['0000','00','00']:birthday.split("-");var year=dateParts[0];var month=dateParts[1];var day=dateParts[2];$('#birthdayYear').val(year);$('#birthdayMonth').val(month);$('#birthdayDay').val(day);let watchElements=element+'Month, '+element+'Day, '+element+'Year';$(watchElements).off('change');$(watchElements).on('change',function(){var year=$(element+'Year').val();var month=$(element+'Month').val();var day=$(element+'Day').val();var date=(month==='00'&&day==='00')?'0000-00-00':year+'-'+month+'-'+day;$(element).val(date);});} 33function appendCSRFTokenToURL(url){if(!SAFARI.csrfToken){return url;} 34var separator=(url.indexOf('?')===-1)?'?':'&';return url+separator+'csrfToken='+encodeURIComponent(SAFARI.csrfToken);} 35const checkElement=async selector=>{while(document.querySelector(selector)===null){await new Promise(resolve=>requestAnimationFrame(resolve))} 36return document.querySelector(selector);};function insertAtCaret(el,text){el=($(el))[0];var caretPos=el.selectionStart;var caretEnd=el.selectionEnd;var textAreaTxt=el.value;el.value=textAreaTxt.substring(0,caretPos)+text+textAreaTxt.substring(caretEnd);};function resolveShareAction(element){if(!element){return'';} 37var shareElement=element;if(shareElement.closest){shareElement=shareElement.closest('[data-target], [data-bs-target]')||shareElement;} 38if(!shareElement.dataset){return'';} 39return shareElement.dataset.target||shareElement.dataset.bsTarget||'';} 40function launchSocialShare(element){var action=resolveShareAction(element);var shareText=SAFARI.shareText;if(!action||!shareText){return;} 41var canonicalLink=SAFARI.canonicalLink;var shortenedLink=SAFARI.shortenedLink;var linkToUse=canonicalLink||window.location.href;if(shortenedLink&&shortenedLink.length<linkToUse.length-10){linkToUse=shortenedLink;} 42var encodedUrl=encodeURIComponent(linkToUse);var encodedTweet=encodeURIComponent(shareText);var shareUrl={};shareUrl['facebook']='https://www.facebook.com/sharer/sharer.php?u='+encodedUrl;shareUrl['twitter']='https://x.com/intent/tweet/?text='+encodedTweet;windowPopup(shareUrl[action],500,300);} 43function windowPopup(url,width,height){if(!url){return;} 44var left=(screen.width/2)-(width/2),top=(screen.height/2)-(height/2);var socialShare=window.open(url,'SocialShare','menubar=no,toolbar=no,resizable=yes,scrollbars=yes,width='+width+',height='+height+',top='+top+',left='+left);if(!socialShare){location.href=url;}}
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.