1/** 2 * Controller for managing dynamic fields. 3 */ 4YUI().use("scriptlibrary.Request", "event", "node", "cookie", "Admin.SiteAnnouncementRenderController.styles", function(Y) { 5 "use strict"; 6 7 var Request = Y.scriptlibrary.Request; 8 9 var SiteAnnouncementRenderController = function(contextPath) { 10 var me = this, 11 dismissedAnnouncementsMap = {}, 12 activeAnnouncements = {}, 13 container = Y.one(".site-announcements-container"); 14 15 var initialize = function() { 16 if (!container) { 17 container = Y.Node.create("<div class=\"site-announcements-container\"></div>"); 18 container.hide(); 19 Y.one("body").appendChild(container); 20 } 21 else { 22 container.hide(); 23 } 24 25 var dismissedAnnouncementIds = Y.Cookie.get("site-dismissed-announcement-ids"), 26 dismissedAnnouncements = dismissedAnnouncementIds 27 ? dismissedAnnouncementIds.split(",") 28 : []; 29 30 Y.Array.each(dismissedAnnouncements, function(id) { 31 dismissedAnnouncementsMap[id] = true; 32 }); 33 34 loadAnnouncements(); 35 }; 36 37 var loadAnnouncements = function() { 38 if(location.pathname.includes("editpage.htm")){ 39 const params = new URLSearchParams(window.location.search) 40 const hostname = params.get('hostname'); 41 new Request(contextPath + "/site-announcements?preview=1&host="+hostname) 42 .get() 43 .then(Request.processCmsResult) 44 .then(announcementsLoaded) 45 .then(undefined, function (error) { 46 if (console && console.log) { 47 console.log(error); 48 } 49 }); 50 } else { 51 new Request(contextPath + "/site-announcements") 52 .get() 53 .then(Request.processCmsResult) 54 .then(announcementsLoaded) 55 .then(undefined, function (error) { 56 if (console && console.log) { 57 console.log(error); 58 } 59 }); 60 } 61 }; 62 63 var attachAnnouncement = function(announcement) { 64 activeAnnouncements[announcement.id] = true; 65 66 if (dismissedAnnouncementsMap[announcement.id]) { 67 return; 68 } 69 70 var announcementContainer = Y.Node.create( 71 "<div class=\"site-announcement\">" + 72 "<div class=\"site-announcement-message\"></div>" + 73 "<div class=\"dismiss-announcement-button\">X</div>" + 74 "</div>"); 75 76 announcementContainer.one(".site-announcement-message").setHTML(announcement.message); 77 78 announcementContainer.setAttribute("data-announcement-id", announcement.id); 79 80 container.appendChild(announcementContainer); 81 82 announcementContainer.one(".dismiss-announcement-button").on("click", function() { 83 announcementContainer.hide(); 84 dismissedAnnouncementsMap[announcement.id] = true; 85 updateCookieValue(); 86 }); 87 }; 88 89 var updateCookieValue = function() { 90 var dismissed = []; 91 92 Y.Object.each(dismissedAnnouncementsMap, function(_, key) { 93 if (activeAnnouncements[key]) { 94 dismissed.push(key); 95 } 96 }); 97 98 Y.Cookie.set( 99 "site-dismissed-announcement-ids", 100 dismissed.length ? dismissed.join(",") : "", 101 { path: contextPath + "/" , "Max-Age": 31536000 }); 102 }; 103 104 var announcementsLoaded = function(announcements) { 105 container.empty(); 106 107 Y.Array.each(announcements, attachAnnouncement); 108 109 if (announcements.length) { 110 container.show(); 111 } 112 113 updateCookieValue(); 114 }; 115 116 initialize(); 117 }; 118 119 Y.on("domready", function () {
120 new SiteAnnouncementRenderController(contextPath); 121 }); 122});
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.