미디어위키:Gadget-siteNotice.js
보이기
참고: 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다. 구글 크롬, 파이어폭스, 마이크로소프트 엣지, 사파리: ⇧ Shift 키를 누른 채 "새로 고침" 버튼을 클릭하십시오. 더 자세한 정보를 보려면 위키백과:캐시 무시하기 항목을 참고하십시오.
/*
* siteNotice
* The contents of Mediawiki:Sitenotice are always exposed to search engines.
* This gadget fixes the problem.
* @author ykhwong
* Reference: https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/extensions/DismissableSiteNotice/+/master/modules/ext.dismissableSiteNotice.js
*/
/*jshint esversion: 6 */
const noticeGrpPage = '틀:소도구/noticeGrp';
const isBot = /bot|googlebot|crawler|spider|robot|crawling/i.test(navigator.userAgent);
const isMobile = /\.m\.wikipedia\.org/.test(window.location.host);
var tmpSiteNotice = "";
var cookieName = 'dismissNewSiteNotice';
var cookieData = {
noticeData: 'newSiteNoticeData',
dismissClicked: 'dismissClicked'
};
function procCache() {
if ((mw.storage.get( cookieData.dismissClicked ) === undefined ||
mw.storage.get( cookieData.dismissClicked ) === "false") &&
mw.storage.get( cookieData.noticeData ) !== undefined)
{
if ( $("#siteNotice").length > 0 ) {
tmpSiteNotice = $("#siteNotice").html();
$("#siteNotice").html(mw.storage.get( cookieData.noticeData ));
}
}
}
if (isBot) {
$("#siteNotice").html("");
$(".noprint").html("");
$(".mw-jump-link").html("");
} else {
/*
if (!isMobile) {
procCache();
}
*/
}
$(function () {
var sitenoticeId = '';
var dismissStr = '';
var sitenoticeStyle = '';
function html2text(html) {
var tag = document.createElement('div');
tag.innerHTML = html;
return tag.innerText;
}
function getDivHtml(html, target) {
var tag = document.createElement('div');
tag.innerHTML = html;
return $(tag).find(target).html();
}
function getDivText(html, target) {
var tag = document.createElement('div');
tag.innerHTML = html;
return $(tag).find(target).text().trim();
}
function procDismiss() {
$("#siteNoticeLocal").prepend('<div class="mw-dismissable-notice-close2">' +
'<a tabindex="0" role="button"><img style="display: block; opacity: 0.55; width: 17px; margin-left: 2px; margin-bottom: 2px;" src="data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3Eclose%3C/title%3E%3Cpath d=%22M4.34 2.93l12.73 12.73-1.41 1.41L2.93 4.35z%22/%3E%3Cpath d=%22M17.07 4.34L4.34 17.07l-1.41-1.41L15.66 1.93z%22/%3E%3C/svg%3E" title="' + dismissStr + '">' +
'</a></div>');
if (isMobile) {
$("#siteNoticeLocal").css(
{
'position': 'relative',
'padding-left': $("#siteNoticeLocal").css('padding-left') === '0px' ? '12px' : $("#siteNoticeLocal").css('padding-left'),
'padding-top': $("#siteNoticeLocal").css('padding-top') === '0px' ? '12px' : $("#siteNoticeLocal").css('padding-top'),
'padding-right': $("#siteNoticeLocal").css('padding-right') === '0px' ? '12px' : $("#siteNoticeLocal").css('padding-right'),
'padding-bottom': $("#siteNoticeLocal").css('padding-bottom') === '0px' ? '15px' : $("#siteNoticeLocal").css('padding-bottom'),
}
);
$(".mw-dismissable-notice-close2").css(
{
'position': 'relative',
'top': '0px',
'right': '0px',
'padding-left': '5px',
'text-align': 'right',
'float': 'right'
}
);
} else {
$("#siteNoticeLocal").css(
{
'padding-top': '5px',
'padding-bottom': '5px',
'margin-bottom': '15px'
}
);
$(".mw-dismissable-notice-close2").css(
{
'position': 'relative',
'top': '0px',
'right': '7px',
'padding-left': '5px',
'text-align': 'right',
'float': 'right'
}
);
}
$("#siteNoticeLocal ul").css({
"list-style": "none",
"text-align": "left",
"display": "table",
"margin": "0 auto",
"padding-left": "10px",
"max-width": "calc(100% - 20px)"
});
$( '.mw-dismissable-notice-close2' )
.css( 'visibility', 'visible' )
.find( 'a' )
.on( 'click keypress', function ( e ) {
if (
e.type === 'click' ||
e.type === 'keypress' && e.which === 13
) {
$("#siteNoticeLocal").hide();
mw.loader.using('mediawiki.cookie').then(function () {
mw.cookie.set( cookieName, sitenoticeId, {
path: '/'
} );
});
mw.storage.set( cookieData.dismissClicked, "true" );
}
});
mw.storage.set( cookieData.noticeData, $("#siteNotice").html() );
}
function procApi() {
if (isBot) {
return;
}
var api = new mw.Api();
api.parse(
new mw.Title( noticeGrpPage )
).then( function( html ) {
var gadgetSiteNotice = "";
var gadgetAnonnotice = "";
html = html.replace("mw-parser-output", "mw-dismissable-notice");
gadgetSiteNotice = getDivHtml(html, "#gadgetSiteNotice");
gadgetAnonnotice = getDivHtml(html, "#gadgetAnonnotice");
sitenoticeId = getDivText(html, "#sitenoticeId");
dismissStr = getDivText(html, "#dismissLabel");
sitenoticeStyle = getDivText(html, "#sitenoticeStyle");
if (/\S/.test(tmpSiteNotice)) {
$("#siteNotice").html(tmpSiteNotice);
}
if (mw.config.get('wgUserName') !== null) {
if(/\S/.test(html2text(gadgetSiteNotice).trim())) {
// If the user has the notice dismissal cookie set, exit.
mw.loader.using('mediawiki.cookie').then(function () {
if ( mw.cookie.get( cookieName ) !== sitenoticeId ) {
mw.storage.set( cookieData.dismissClicked, "false" );
$("#siteNotice").append('<div id="siteNoticeLocal" style="' + sitenoticeStyle + '">' + gadgetSiteNotice + '</div>');
procDismiss();
}
});
} else {
mw.storage.set( cookieData.noticeData, tmpSiteNotice );
}
return;
}
mw.storage.set( cookieData.noticeData, tmpSiteNotice );
if (html2text(gadgetAnonnotice).trim().length === 0) {
return;
} else if (/^\s*-\s*$/.test(html2text(gadgetAnonnotice).trim())) {
if(/\S/.test(html2text(gadgetSiteNotice).trim())) {
// If the user has the notice dismissal cookie set, exit.
mw.loader.using('mediawiki.cookie').then(function () {
if ( mw.cookie.get( cookieName ) !== sitenoticeId ) {
mw.storage.set( cookieData.dismissClicked, "false" );
$("#siteNotice").append('<div id="siteNoticeLocal" style="' + sitenoticeStyle + '">' + gadgetSiteNotice + '</div>');
procDismiss();
return;
} else {
return;
}
});
}
} else {
mw.storage.set( cookieData.dismissClicked, "false" );
$("#siteNotice").append('<div id="siteNoticeLocal" style="' + sitenoticeStyle + '">' + gadgetAnonnotice + '</div>');
procDismiss();
return;
}
});
}
procApi();
}());