X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fcore%2Fmodules%2Fcomment%2Fjs%2Fnode-new-comments-link.js;h=b7439940f61ac81bc5739ca3ef73af8ea865bcdc;hb=0bf8d09d2542548982e81a441b1f16e75873a04f;hp=291bcbd11613a104e4fbd11c2931e4e3325269eb;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/web/core/modules/comment/js/node-new-comments-link.js b/web/core/modules/comment/js/node-new-comments-link.js index 291bcbd11..b7439940f 100644 --- a/web/core/modules/comment/js/node-new-comments-link.js +++ b/web/core/modules/comment/js/node-new-comments-link.js @@ -1,120 +1,27 @@ /** - * @file - * Attaches behaviors for the Comment module's "X new comments" link. - * - * May only be loaded for authenticated users, with the History module - * installed. - */ +* DO NOT EDIT THIS FILE. +* See the following change record for more information, +* https://www.drupal.org/node/2815083 +* @preserve +**/ (function ($, Drupal, drupalSettings) { - - 'use strict'; - - /** - * Render "X new comments" links wherever necessary. - * - * @type {Drupal~behavior} - * - * @prop {Drupal~behaviorAttach} attach - * Attaches new comment links behavior. - */ - Drupal.behaviors.nodeNewCommentsLink = { - attach: function (context) { - // Collect all "X new comments" node link placeholders (and their - // corresponding node IDs) newer than 30 days ago that have not already - // been read after their last comment timestamp. - var nodeIDs = []; - var $placeholders = $(context) - .find('[data-history-node-last-comment-timestamp]') - .once('history') - .filter(function () { - var $placeholder = $(this); - var lastCommentTimestamp = parseInt($placeholder.attr('data-history-node-last-comment-timestamp'), 10); - var nodeID = $placeholder.closest('[data-history-node-id]').attr('data-history-node-id'); - if (Drupal.history.needsServerCheck(nodeID, lastCommentTimestamp)) { - nodeIDs.push(nodeID); - // Hide this placeholder link until it is certain we'll need it. - hide($placeholder); - return true; - } - else { - // Remove this placeholder link from the DOM because we won't need - // it. - remove($placeholder); - return false; - } - }); - - if ($placeholders.length === 0) { - return; - } - - // Perform an AJAX request to retrieve node read timestamps. - Drupal.history.fetchTimestamps(nodeIDs, function () { - processNodeNewCommentLinks($placeholders); - }); - } - }; - - /** - * Hides a "new comment" element. - * - * @param {jQuery} $placeholder - * The placeholder element of the new comment link. - * - * @return {jQuery} - * The placeholder element passed in as a parameter. - */ function hide($placeholder) { - return $placeholder - // Find the parent
  • . - .closest('.comment-new-comments') - // Find the preceding
  • , if any, and give it the 'last' class. - .prev().addClass('last') - // Go back to the parent
  • and hide it. - .end().hide(); + return $placeholder.closest('.comment-new-comments').prev().addClass('last').end().hide(); } - /** - * Removes a "new comment" element. - * - * @param {jQuery} $placeholder - * The placeholder element of the new comment link. - */ function remove($placeholder) { hide($placeholder).remove(); } - /** - * Shows a "new comment" element. - * - * @param {jQuery} $placeholder - * The placeholder element of the new comment link. - * - * @return {jQuery} - * The placeholder element passed in as a parameter. - */ function show($placeholder) { - return $placeholder - // Find the parent
  • . - .closest('.comment-new-comments') - // Find the preceding
  • , if any, and remove its 'last' class, if any. - .prev().removeClass('last') - // Go back to the parent
  • and show it. - .end().show(); + return $placeholder.closest('.comment-new-comments').prev().removeClass('last').end().show(); } - /** - * Processes new comment links and adds appropriate text in relevant cases. - * - * @param {jQuery} $placeholders - * The placeholder elements of the current page. - */ function processNodeNewCommentLinks($placeholders) { - // Figure out which placeholders need the "x new comments" links. var $placeholdersToUpdate = {}; var fieldName = 'comment'; - var $placeholder; + var $placeholder = void 0; $placeholders.each(function (index, placeholder) { $placeholder = $(placeholder); var timestamp = parseInt($placeholder.attr('data-history-node-last-comment-timestamp'), 10); @@ -122,56 +29,65 @@ var nodeID = $placeholder.closest('[data-history-node-id]').attr('data-history-node-id'); var lastViewTimestamp = Drupal.history.getLastRead(nodeID); - // Queue this placeholder's "X new comments" link to be downloaded from - // the server. if (timestamp > lastViewTimestamp) { $placeholdersToUpdate[nodeID] = $placeholder; - } - // No "X new comments" link necessary; remove it from the DOM. - else { - remove($placeholder); - } + } else { + remove($placeholder); + } }); - // Perform an AJAX request to retrieve node view timestamps. var nodeIDs = Object.keys($placeholdersToUpdate); if (nodeIDs.length === 0) { return; } - /** - * Renders the "X new comments" links. - * - * Either use the data embedded in the page or perform an AJAX request to - * retrieve the same data. - * - * @param {object} results - * Data about new comment links indexed by nodeID. - */ function render(results) { - for (var nodeID in results) { - if (results.hasOwnProperty(nodeID) && $placeholdersToUpdate.hasOwnProperty(nodeID)) { - $placeholdersToUpdate[nodeID] - .attr('href', results[nodeID].first_new_comment_link) - .text(Drupal.formatPlural(results[nodeID].new_comment_count, '1 new comment', '@count new comments')) - .removeClass('hidden'); + Object.keys(results || {}).forEach(function (nodeID) { + if ($placeholdersToUpdate.hasOwnProperty(nodeID)) { + $placeholdersToUpdate[nodeID].attr('href', results[nodeID].first_new_comment_link).text(Drupal.formatPlural(results[nodeID].new_comment_count, '1 new comment', '@count new comments')).removeClass('hidden'); show($placeholdersToUpdate[nodeID]); } - } + }); } if (drupalSettings.comment && drupalSettings.comment.newCommentsLinks) { render(drupalSettings.comment.newCommentsLinks.node[fieldName]); - } - else { + } else { $.ajax({ url: Drupal.url('comments/render_new_comments_node_links'), type: 'POST', - data: {'node_ids[]': nodeIDs, 'field_name': fieldName}, + data: { 'node_ids[]': nodeIDs, field_name: fieldName }, dataType: 'json', success: render }); } } -})(jQuery, Drupal, drupalSettings); + Drupal.behaviors.nodeNewCommentsLink = { + attach: function attach(context) { + var nodeIDs = []; + var $placeholders = $(context).find('[data-history-node-last-comment-timestamp]').once('history').filter(function () { + var $placeholder = $(this); + var lastCommentTimestamp = parseInt($placeholder.attr('data-history-node-last-comment-timestamp'), 10); + var nodeID = $placeholder.closest('[data-history-node-id]').attr('data-history-node-id'); + if (Drupal.history.needsServerCheck(nodeID, lastCommentTimestamp)) { + nodeIDs.push(nodeID); + + hide($placeholder); + return true; + } + + remove($placeholder); + return false; + }); + + if ($placeholders.length === 0) { + return; + } + + Drupal.history.fetchTimestamps(nodeIDs, function () { + processNodeNewCommentLinks($placeholders); + }); + } + }; +})(jQuery, Drupal, drupalSettings); \ No newline at end of file