setTimeout(_resizeIframe, 100, obj, ch);
}
+function initWidget(inflated, deflated) {
+ var elInf = document.getElementById(inflated);
+ var elDef = document.getElementById(deflated);
+
+ if (!elInf || !elDef) {
+ return;
+ }
+ if (localStorage.getItem(window.location.pathname.split("/")[1] + ":" + inflated) != "none") {
+ elInf.style.display = "block";
+ elDef.style.display = "none";
+ } else {
+ elInf.style.display = "none";
+ elDef.style.display = "block";
+ }
+}
+
+function openCloseWidget(inflated, deflated) {
+ var elInf = document.getElementById(inflated);
+ var elDef = document.getElementById(deflated);
+
+ if (!elInf || !elDef) {
+ return;
+ }
+
+ if (window.getComputedStyle(elInf).display === "none") {
+ elInf.style.display = "block";
+ elDef.style.display = "none";
+ localStorage.setItem(window.location.pathname.split("/")[1] + ":" + inflated, "block");
+ } else {
+ elInf.style.display = "none";
+ elDef.style.display = "block";
+ localStorage.setItem(window.location.pathname.split("/")[1] + ":" + inflated, "none");
+ }
+}
+
function openClose(theID) {
var el = document.getElementById(theID);
if (el) {
return txt.value;
}
+/**
+ * Retrieves a single named query string parameter
+ *
+ * @param {string} name
+ * @returns {string}
+ * @see https://davidwalsh.name/query-string-javascript
+ */
+function getUrlParameter(name) {
+ name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
+ var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
+ var results = regex.exec(location.search);
+ return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
+};
+
var src = null;
var prev = null;
var livetime = null;
var last_popup_menu = null;
var last_popup_button = null;
var lockLoadContent = false;
+var originalTitle = document.title;
const urlRegex = /^(?:https?:\/\/|\s)[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})(?:\/+[a-z0-9_.:;-]*)*(?:\?[&%|+a-z0-9_=,.:;-]*)?(?:[&%|+&a-z0-9_=,:;.-]*)(?:[!#\/&%|+a-z0-9_=,:;.-]*)}*$/i;
$(textarea).trigger('change');
});
- /* setup onoff widgets */
- $(".onoff input").each(function() {
- val = $(this).val();
- id = $(this).attr("id");
- $("#"+id+"_onoff ." + (val == 0 ? "on":"off")).addClass("hidden");
- });
+ $(".comment-edit-wrapper textarea, .wall-item-comment-wrapper textarea")
+ .editor_autocomplete(baseurl + '/search/acl')
+ .bbco_autocomplete('bbcode');
- $(".onoff > a").click(function(event) {
- event.preventDefault();
- var input = $(this).siblings("input");
- var val = 1-input.val();
- var id = input.attr("id");
- $("#"+id+"_onoff ." + (val == 0 ? "on":"off")).addClass("hidden");
- $("#"+id+"_onoff ." + (val == 1 ? "on":"off")).removeClass("hidden");
- input.val(val);
+ // Ensures asynchronously-added comment forms recognize mentions, tags and BBCodes as well
+ document.addEventListener("postprocess_liveupdate", function() {
+ $(".comment-edit-wrapper textarea, .wall-item-comment-wrapper textarea")
+ .editor_autocomplete(baseurl + '/search/acl')
+ .bbco_autocomplete('bbcode');
});
/* popup menus */
window.location.href=window.location.href
}
- ['net', 'home', 'intro', 'mail', 'events', 'birthdays', 'notify'].forEach(function(type) {
+ let tabNotifications = data.mail + data.notification;
+ if (tabNotifications > 0) {
+ document.title = '(' + tabNotifications + ') ' + originalTitle;
+ } else {
+ document.title = originalTitle;
+ }
+
+ ['net', 'home', 'intro', 'mail', 'events', 'birthdays', 'notification'].forEach(function(type) {
var number = data[type];
if (number == 0) {
number = '';
var notification_id = 0;
// Insert notifs into the notifications-menu
- $(data.notifications).each(function(key, notif) {
- var text = notif.message.format('<span class="contactname">' + notif.name + '</span>');
- var contact = ('<a href="' + notif.url + '"><span class="contactname">' + notif.name + '</span></a>');
- var seenclass = (notif.seen == 1) ? "notify-seen" : "notify-unseen";
+ $(data.notifications).each(function(key, notification) {
+ var text = notification.message.format('<span class="contactname">' + notification.name + '</span>');
+ var contact = ('<a href="' + notification.url + '"><span class="contactname">' + notification.name + '</span></a>');
+ var seenclass = (notification.seen == 1) ? "notification-seen" : "notification-unseen";
var html = notifications_tpl.format(
- notif.href, // {0} // link to the source
- notif.photo, // {1} // photo of the contact
+ notification.href, // {0} // link to the source
+ notification.photo, // {1} // photo of the contact
text, // {2} // preformatted text (autor + text)
- notif.date, // {3} // date of notification (time ago)
+ notification.date, // {3} // date of notification (time ago)
seenclass, // {4} // visited status of the notification
- new Date(notif.timestamp*1000), // {5} // date of notification
- notif.url, // {6} // profile url of the contact
- notif.message.format(contact), // {7} // preformatted html (text including author profile url)
+ new Date(notification.timestamp*1000), // {5} // date of notification
+ notification.url, // {6} // profile url of the contact
+ notification.message.format(contact), // {7} // preformatted html (text including author profile url)
'' // {8} // Deprecated
);
nnm.append(html);
});
}
- var notif = data['notify'];
+ var notif = data['notification'];
if (notif > 0) {
$("#nav-notifications-linkmenu").addClass("on");
} else {
function NavUpdate() {
if (!stopped) {
- var pingCmd = 'ping?format=json' + ((localUser != 0) ? '&f=&uid=' + localUser : '');
+ var pingCmd = 'ping?format=json' + ((localUser != 0) ? '&uid=' + localUser : '');
$.get(pingCmd, function(data) {
if (data.result) {
// send nav-update event
var ident = $(this).attr('id');
// Add new top-level item.
- if ($('#' + ident).length == 0 && profile_page == 1) {
+ if ($('#' + ident).length === 0
+ && (!getUrlParameter('page')
+ && !getUrlParameter('max_id')
+ && !getUrlParameter('min_id')
+ || getUrlParameter('page') === '1'
+ )
+ ) {
$('#' + prev).after($(this));
// Replace already existing thread.
commentBusy = false;
$('body').css('cursor', 'auto');
}
- /* autocomplete @nicknames */
- $(".comment-edit-form textarea").editor_autocomplete(baseurl + '/search/acl');
- /* autocomplete bbcode */
- $(".comment-edit-form textarea").bbco_autocomplete('bbcode');
}
function liveUpdate(src) {
in_progress = true;
- if ($(document).scrollTop() == 0) {
- force_update = true;
- }
+ let force = force_update || $(document).scrollTop() === 0;
var orgHeight = $("section").height();
var udargs = ((netargs.length) ? '/' + netargs : '');
- var update_url = 'update_' + src + udargs + '&p=' + profile_uid + '&page=' + profile_page + '&force=' + ((force_update) ? 1 : 0) + '&item=' + update_item;
- $.get(update_url,function(data) {
- in_progress = false;
+ var update_url = 'update_' + src + udargs + '&p=' + profile_uid + '&force=' + (force ? 1 : 0) + '&item=' + update_item;
+
+ if (force_update) {
force_update = false;
+ }
+
+ if (getUrlParameter('page')) {
+ update_url += '&page=' + getUrlParameter('page');
+ }
+ if (getUrlParameter('min_id')) {
+ update_url += '&min_id=' + getUrlParameter('min_id');
+ }
+ if (getUrlParameter('max_id')) {
+ update_url += '&max_id=' + getUrlParameter('max_id');
+ }
+
+ $.get(update_url, function(data) {
+ in_progress = false;
update_item = 0;
+ if ($('.wall-item-body', data).length == 0) {
+ return;
+ }
+
$('.wall-item-body', data).imagesLoaded(function() {
updateConvItems(data);
// trickery. This still could cause confusion if the "like" ajax call
// is delayed and NavUpdate runs before it completes.
-function dolike(ident,verb) {
+/**
+ * @param {int} ident The id of the relevant item
+ * @param {string} verb The verb of the action
+ * @param {boolean} un Whether to perform an activity removal instead of creation
+ */
+function doActivityItem(ident, verb, un) {
unpause();
$('#like-rotator-' + ident.toString()).show();
- $.get('like/' + ident.toString() + '?verb=' + verb, NavUpdate);
+ verb = un ? 'un' + verb : verb;
+ $.post('item/' + ident.toString() + '/activity/' + verb, NavUpdate);
liking = 1;
force_update = true;
update_item = ident.toString();
}
-function dosubthread(ident) {
+function doFollowThread(ident) {
unpause();
$('#like-rotator-' + ident.toString()).show();
- $.get('subthread/' + ident.toString(), NavUpdate);
+ $.post('item/' + ident.toString() + '/follow', NavUpdate);
liking = 1;
+ force_update = true;
+ update_item = ident.toString();
}
-function dostar(ident) {
+function doStar(ident) {
ident = ident.toString();
$('#like-rotator-' + ident).show();
- $.get('starred/' + ident, function(data) {
- if (data.match(/1/)) {
- $('#starred-' + ident).addClass('starred');
- $('#starred-' + ident).removeClass('unstarred');
+ $.post('item/' + ident + '/star')
+ .then(function(data) {
+ if (data.state === 1) {
+ $('#starred-' + ident)
+ .addClass('starred')
+ .removeClass('unstarred');
$('#star-' + ident).addClass('hidden');
$('#unstar-' + ident).removeClass('hidden');
} else {
- $('#starred-' + ident).addClass('unstarred');
- $('#starred-' + ident).removeClass('starred');
+ $('#starred-' + ident)
+ .addClass('unstarred')
+ .removeClass('starred');
$('#star-' + ident).removeClass('hidden');
$('#unstar-' + ident).addClass('hidden');
}
+ })
+ .always(function () {
$('#like-rotator-' + ident).hide();
});
}
-function dopin(ident) {
+function doPin(ident) {
ident = ident.toString();
$('#like-rotator-' + ident).show();
- $.get('pinned/' + ident, function(data) {
- if (data.match(/1/)) {
- $('#pinned-' + ident).addClass('pinned');
- $('#pinned-' + ident).removeClass('unpinned');
+ $.post('item/' + ident + '/pin')
+ .then(function(data) {
+ if (data.state === 1) {
+ $('#pinned-' + ident)
+ .addClass('pinned')
+ .removeClass('unpinned');
$('#pin-' + ident).addClass('hidden');
$('#unpin-' + ident).removeClass('hidden');
} else {
- $('#pinned-' + ident).addClass('unpinned');
- $('#pinned-' + ident).removeClass('pinned');
+ $('#pinned-' + ident)
+ .addClass('unpinned')
+ .removeClass('pinned');
$('#pin-' + ident).removeClass('hidden');
$('#unpin-' + ident).addClass('hidden');
}
+ })
+ .always(function () {
$('#like-rotator-' + ident).hide();
});
}
-function doignore(ident) {
+function doIgnoreThread(ident) {
ident = ident.toString();
$('#like-rotator-' + ident).show();
- $.get('item/ignore/' + ident, function(data) {
- if (data === 1) {
+ $.post('item/' + ident + '/ignore', function(data) {
+ if (data.state === 1) {
$('#ignored-' + ident)
.addClass('ignored')
.removeClass('unignored');
var lockvisible = false;
-function lockview(event,id) {
+function lockview(event, type, id) {
event = event || window.event;
cursor = getPosition(event);
if (lockvisible) {
- lockviewhide();
+ lockvisible = false;
+ $('#panel').hide();
} else {
lockvisible = true;
- $.get('lockview/' + id, function(data) {
- $('#panel').html(data);
- $('#panel').css({'left': cursor.x + 5 , 'top': cursor.y + 5});
- $('#panel').show();
+ $.get('permission/tooltip/' + type + '/' + id, function(data) {
+ $('#panel')
+ .html(data)
+ .css({'left': cursor.x + 5 , 'top': cursor.y + 5})
+ .show();
});
}
}
-function lockviewhide() {
- lockvisible = false;
- $('#panel').hide();
-}
-
function post_comment(id) {
unpause();
commentBusy = true;
$("#scroll-loader").fadeIn('normal');
- // the page number to load is one higher than the actual
- // page number
- infinite_scroll.pageno+=1;
-
match = $("span.received").last();
if (match.length > 0) {
received = match[0].innerHTML;
commented = "0000-00-00 00:00:00";
}
- match = $("span.id").last();
+ match = $("span.uriid").last();
if (match.length > 0) {
- id = match[0].innerHTML;
+ uriid = match[0].innerHTML;
} else {
- id = "0";
+ uriid = "0";
}
// get the raw content from the next page and insert this content
// right before "#conversation-end"
- $.get(infinite_scroll.reload_uri + '&mode=raw&last_received=' + received + '&last_commented=' + commented + '&last_created=' + created + '&last_id=' + id + '&page=' + infinite_scroll.pageno, function(data) {
+ $.get({
+ url: infinite_scroll.reload_uri,
+ data: {
+ 'mode' : 'raw',
+ 'last_received' : received,
+ 'last_commented': commented,
+ 'last_created' : created,
+ 'last_uriid' : uriid
+ }
+ })
+ .done(function(data) {
$("#scroll-loader").hide();
if ($(data).length > 0) {
$(data).insertBefore('#conversation-end');
- lockLoadContent = false;
} else {
$("#scroll-end").fadeIn('normal');
}
document.dispatchEvent(new Event('postprocess_liveupdate'));
+ })
+ .always(function () {
+ $("#scroll-loader").hide();
+ lockLoadContent = false;
});
}
});
}
-function profChangeMember(gid,cid) {
- $('body .fakelink').css('cursor', 'wait');
- $.get('profperm/' + gid + '/' + cid, function(data) {
- $('#prof-update-wrapper').html(data);
- $('body .fakelink').css('cursor', 'auto');
- });
-}
-
function contactgroupChangeMember(checkbox, gid, cid) {
let url;
// checkbox.checked is the checkbox state after the click
}
}
-function notifyMarkAll() {
- $.get('notify/mark/all', function(data) {
+function notificationMarkAll() {
+ $.get('notification/mark/all', function(data) {
if (timer) {
clearTimeout(timer);
}
function previewTheme(elm) {
theme = $(elm).val();
- $.getJSON('pretheme?f=&theme=' + theme,function(data) {
+ $.getJSON('pretheme?theme=' + theme,function(data) {
$('#theme-preview').html('<div id="theme-desc">' + data.desc + '</div><div id="theme-version">' + data.version + '</div><div id="theme-credits">' + data.credits + '</div><a href="' + data.img + '"><img src="' + data.img + '" width="320" height="240" alt="' + theme + '" /></a>');
});