X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fresources%2Fstatic%2Fjavascript%2Fsone.js;h=d9f3bf112ec43537145743e514d7eebb76a37aa1;hb=feb4aeda86e2c3d7deff163eda53191d6baa5650;hp=8798aae1c8d1f2d3a2851b8f767dbeb017e2f596;hpb=3335cbf7681220fcf95cff4895e025251211bf8e;p=Sone.git diff --git a/src/main/resources/static/javascript/sone.js b/src/main/resources/static/javascript/sone.js index 8798aae..d9f3bf1 100644 --- a/src/main/resources/static/javascript/sone.js +++ b/src/main/resources/static/javascript/sone.js @@ -495,74 +495,6 @@ function unlikeReply(replyId) { } /** - * Trusts the Sone with the given ID. - * - * @param soneId - * The ID of the Sone to trust - */ -function trustSone(soneId) { - ajaxGet("trustSone.ajax", { "formPassword" : getFormPassword(), "sone" : soneId }, function(data) { - if ((data != null) && data.success) { - updateTrustControls(soneId, data.trustValue); - } - }); -} - -/** - * Distrusts the Sone with the given ID, i.e. assigns a negative trust value. - * - * @param soneId - * The ID of the Sone to distrust - */ -function distrustSone(soneId) { - ajaxGet("distrustSone.ajax", { "formPassword" : getFormPassword(), "sone" : soneId }, function(data) { - if ((data != null) && data.success) { - updateTrustControls(soneId, data.trustValue); - } - }); -} - -/** - * Untrusts the Sone with the given ID, i.e. removes any trust assignment. - * - * @param soneId - * The ID of the Sone to untrust - */ -function untrustSone(soneId) { - ajaxGet("untrustSone.ajax", { "formPassword" : getFormPassword(), "sone" : soneId }, function(data) { - if ((data != null) && data.success) { - updateTrustControls(soneId, data.trustValue); - } - }); -} - -/** - * Updates the trust controls for all posts and replies of the given Sone, - * according to the given trust value. - * - * @param soneId - * The ID of the Sone to update all trust controls for - * @param trustValue - * The trust value for the Sone - */ -function updateTrustControls(soneId, trustValue) { - sone.find(".post").each(function() { - if (getPostAuthor(this) === soneId) { - getPostElement(this).find(".post-trust").toggleClass("hidden", trustValue != null); - getPostElement(this).find(".post-distrust").toggleClass("hidden", trustValue != null); - getPostElement(this).find(".post-untrust").toggleClass("hidden", trustValue == null); - } - }); - sone.find(".reply").each(function() { - if (getReplyAuthor(this) === soneId) { - getReplyElement(this).find(".reply-trust").toggleClass("hidden", trustValue != null); - getReplyElement(this).find(".reply-distrust").toggleClass("hidden", trustValue != null); - getReplyElement(this).find(".reply-untrust").toggleClass("hidden", trustValue == null); - } - }); -} - -/** * Bookmarks the post with the given ID. * * @param postId @@ -773,20 +705,6 @@ function ajaxifyPost(postElement) { return false; }); - /* convert trust control buttons to javascript functions. */ - $(postElement).find(".post-trust").submit(function() { - trustSone(getPostAuthor(this)); - return false; - }); - $(postElement).find(".post-distrust").submit(function() { - distrustSone(getPostAuthor(this)); - return false; - }); - $(postElement).find(".post-untrust").submit(function() { - untrustSone(getPostAuthor(this)); - return false; - }); - /* convert bookmark/unbookmark buttons to javascript functions. */ $(postElement).find(".bookmark").submit(function() { bookmarkPost(getPostId(this)); @@ -972,20 +890,6 @@ function ajaxifyReply(replyElement) { $(replyElement).find(".expand-reply-text").each(toggleShowMore); $(replyElement).find(".shrink-reply-text").each(toggleShowMore); - /* convert trust control buttons to javascript functions. */ - $(replyElement).find(".reply-trust").submit(function() { - trustSone(getReplyAuthor(this)); - return false; - }); - $(replyElement).find(".reply-distrust").submit(function() { - distrustSone(getReplyAuthor(this)); - return false; - }); - $(replyElement).find(".reply-untrust").submit(function() { - untrustSone(getReplyAuthor(this)); - return false; - }); - /* show Sone menu when hovering over the avatar. */ $(replyElement).find(".reply-avatar").mouseover(function() { if (typeof currentSoneMenuTimeoutHandler !== undefined) { @@ -1154,12 +1058,47 @@ function checkForRemovedReplies(oldNotification, newNotification) { }); } +/** + * The URLs of not-loaded elements are part of the GET request’s URL. As + * both browsers and HTTP servers do have differing limits on URL length + * (the HTTP 1.1 RFC states 8000 bytes but most browsers only support up + * to 2000 bytes) we will return a random selection of not-loaded URLs we + * want to refresh the status from up until we are at approximately 1000 + * bytes (as the rest of the URL also needs some space). + * + * @return An array of not-loaded element URLs that will have a total length + * of 1000 bytes or fewer + */ +function getRandomSelectionOfElementsToUpdate() { + const notLoadedElementUrls = $(".linked-element.not-loaded").map(function(_, element) { + return $(element).prop("title"); + }).toArray(); + shuffleArray(notLoadedElementUrls); + const selectedElementUrls = Array(); + let currentCombinedStringLength = 0; + $(notLoadedElementUrls).each(function(_, elementUrl) { + if ((currentCombinedStringLength + elementUrl.length) <= 1000) { + selectedElementUrls.push(elementUrl); + currentCombinedStringLength += elementUrl.length; + } + }); + return selectedElementUrls; +} + +// shamelessly stolen from https://stackoverflow.com/a/12646864/43582 +function shuffleArray(array) { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + const temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } +} + function getStatus() { const parameters = isViewSonePage() ? {"soneIds": getShownSoneId()} : isKnownSonesPage() ? {"soneIds": getShownSoneIds()} : {}; $.extend(parameters, { - "elements": JSON.stringify($(".linked-element.not-loaded").map(function () { - return $(this).prop("title"); - }).toArray()) + "elements": JSON.stringify(getRandomSelectionOfElementsToUpdate()) }); ajaxGet("getStatus.ajax", parameters, function(data) { if ((data != null) && data.success) {