X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fresources%2Fstatic%2Fjavascript%2Fsone.js;h=149520f3650ee0e46e379d3d820400b08831cce6;hb=51cdfee0b350955d9f858adb892f18b2a4fa8ab4;hp=e29c136f9df8f252555f17729158ee11ff1a047a;hpb=1c8961bd6350e6be218bfc59e3cf9ebce2e7399f;p=Sone.git diff --git a/src/main/resources/static/javascript/sone.js b/src/main/resources/static/javascript/sone.js index e29c136..149520f 100644 --- a/src/main/resources/static/javascript/sone.js +++ b/src/main/resources/static/javascript/sone.js @@ -99,6 +99,8 @@ function addCommentLink(postId, element) { }); } +var translations = {}; + /** * Retrieves the translation for the given key and calls the callback function. * The callback function takes a single parameter, the translated string. @@ -109,8 +111,13 @@ function addCommentLink(postId, element) { * The callback function */ function getTranslation(key, callback) { + if (key in translations) { + callback(translations[key]); + return; + } $.getJSON("ajax/getTranslation.ajax", {"key": key}, function(data, textStatus) { if ((data != null) && data.success) { + translations[key] = data.value; callback(data.value); } }, function(xmlHttpRequest, textStatus, error) { @@ -119,33 +126,6 @@ function getTranslation(key, callback) { } /** - * Fires off an AJAX request to retrieve the current status of a Sone. - * - * @param soneId - * The ID of the Sone - * @param local - * true if the Sone is local, false - * otherwise - */ -function getSoneStatus(soneId, local) { - $.getJSON("ajax/getSoneStatus.ajax", {"sone": soneId}, function(data, textStatus) { - if ((data != null) && data.success) { - updateSoneStatus(soneId, data.name, data.status, data.modified, data.locked, data.lastUpdated); - } - /* seconds! */ - updateInterval = 60; - if (local || (data!= null) && (data.modified || (data.status == "downloading") || (data.status == "inserting"))) { - updateInterval = 5; - } - setTimeout(function() { - getSoneStatus(soneId, local); - }, updateInterval * 1000); - }, function(xmlHttpRequest, textStatus, error) { - /* ignore error. */ - }); -} - -/** * Filters the given Sone ID, replacing all “~” characters by an underscore. * * @param soneId @@ -184,29 +164,6 @@ function updateSoneStatus(soneId, name, status, modified, locked, lastUpdated) { $("#sone .sone." + filterSoneId(soneId) + " .profile-link a").text(name); } -var watchedSones = {}; - -/** - * Watches this Sone for updates to its status. - * - * @param soneId - * The ID of the Sone to watch - * @param local - * true if the Sone is local, false - * otherwise - */ -function watchSone(soneId, local) { - if (watchedSones[soneId]) { - return; - } - watchedSones[soneId] = true; - (function(soneId) { - setTimeout(function() { - getSoneStatus(soneId, local); - }, 5000); - })(soneId); -} - /** * Enhances a “delete” button so that the confirmation is done on the same page. * @@ -325,7 +282,7 @@ function generateSoneList(sones) { var soneList = ""; $.each(sones, function() { if (soneList != "") { - soneList += "\n"; + soneList += ", "; } soneList += this.name; }); @@ -502,12 +459,14 @@ function ajaxifyNotification(notification) { return notification; } -/** - * Retrieves all changed notifications. - */ -function getNotifications() { - $.getJSON("ajax/getNotifications.ajax", {}, function(data, textStatus) { +function getStatus() { + $.getJSON("ajax/getStatus.ajax", {}, function(data, textStatus) { if ((data != null) && data.success) { + /* process Sone information. */ + $.each(data.sones, function(index, value) { + updateSoneStatus(value.id, value.name, value.status, value.modified, value.locked, value.lastUpdated); + }); + /* process notifications. */ $.each(data.notifications, function(index, value) { oldNotification = $("#sone #notification-area .notification#" + value.id); notification = ajaxifyNotification(createNotification(value.id, value.text, value.dismissable)).hide(); @@ -521,13 +480,16 @@ function getNotifications() { $.each(data.removedNotifications, function(index, value) { $("#sone #notification-area .notification#" + value.id).slideUp(); }); - setTimeout(getNotifications, 5000); + /* do it again in 5 seconds. */ + setTimeout(getStatus, 5000); } else { - setTimeout(getNotifications, 30000); + /* data.success was false, wait 30 seconds. */ + setTimeout(getStatus, 30000); } }, function(xmlHttpRequest, textStatus, error) { - /* ignore error. */ - }); + /* something really bad happend, wait a minute. */ + setTimeout(getStatus, 60000); + }) } /** @@ -563,11 +525,6 @@ $(document).ready(function() { registerInputTextareaSwap("#sone #update-status .status-input", text, "text", false, false); }) - /* these functions are necessary for updating Sone statuses. */ - $("#sone .sone").each(function() { - watchSone($(this).find(".id").text(), $(this).hasClass("local")); - }); - /* this initializes all reply input fields. */ getTranslation("WebInterface.DefaultText.Reply", function(text) { registerInputTextareaSwap("#sone input.reply-input", text, "text", false, false); @@ -716,6 +673,6 @@ $(document).ready(function() { ajaxifyNotification($(this)); }); - /* activate notification polling. */ - setTimeout(getNotifications, 5000); + /* activate status polling. */ + setTimeout(getStatus, 5000); });