Mobile view link: under Follow Us on articles, in the footer row after Contact on the main page |
Add Copyexempt footer attribution control |
||
| Line 134: | Line 134: | ||
footer.appendChild( wrap ); | footer.appendChild( wrap ); | ||
} ); | } ); | ||
/* Copyexempt: keep the plain Bharatpedia copyright line, with no | |||
imported-article attribution line, on (1) pages that use | |||
{{Copyexempt}} or are in Category:Copyexempt, (2) pages named in | |||
the central list on Bharatpedia:Copyexempt, and (3) articles | |||
created on or after 2 November 2026, including articles created | |||
by moving a draft into the main namespace on or after that date. */ | |||
( function () { | |||
if ( mw.config.get( 'wgNamespaceNumber' ) !== 0 || | |||
mw.config.get( 'wgAction' ) !== 'view' ) { | |||
return; | |||
} | |||
var CUTOFF = '2026-11-01T18:30:00Z'; | |||
var done = false; | |||
function clean() { | |||
var slot = document.querySelector( '.bp-import-attrib' ); | |||
if ( slot && slot.textContent ) { | |||
slot.textContent = ''; | |||
} | |||
var fb = document.querySelector( '.bp-footer-bottom' ); | |||
if ( !fb || fb.textContent.indexOf( 'may use material' ) === -1 ) { | |||
return; | |||
} | |||
var deleting = false; | |||
Array.prototype.slice.call( fb.childNodes ).forEach( function ( n ) { | |||
if ( n.nodeType === 1 && n.classList && | |||
n.classList.contains( 'bp-import-attrib' ) ) { | |||
n.textContent = ''; | |||
return; | |||
} | |||
if ( !deleting && n.nodeType === 3 && | |||
n.textContent.indexOf( 'This article may use material' ) !== -1 ) { | |||
var i = n.textContent.indexOf( 'This article may use material' ); | |||
n.textContent = n.textContent.slice( 0, i ); | |||
deleting = true; | |||
return; | |||
} | |||
if ( deleting ) { | |||
if ( n.nodeType === 3 && n.textContent.indexOf( ').' ) !== -1 ) { | |||
n.textContent = n.textContent.slice( n.textContent.indexOf( ').' ) + 2 ); | |||
deleting = false; | |||
} else if ( n.nodeType === 3 ) { | |||
n.textContent = ''; | |||
} else if ( n.nodeType === 1 ) { | |||
n.remove(); | |||
} | |||
} | |||
} ); | |||
} | |||
function suppress() { | |||
if ( done ) { | |||
clean(); | |||
return; | |||
} | |||
done = true; | |||
if ( !document.getElementById( 'bp-copyexempt-style' ) ) { | |||
var st = document.createElement( 'style' ); | |||
st.id = 'bp-copyexempt-style'; | |||
st.textContent = '.bp-import-attrib{display:none!important}'; | |||
document.head.appendChild( st ); | |||
} | |||
clean(); | |||
var slot = document.querySelector( '.bp-import-attrib' ); | |||
if ( slot && window.MutationObserver ) { | |||
var ob = new MutationObserver( function () { clean(); } ); | |||
ob.observe( slot, { childList: true, subtree: true } ); | |||
setTimeout( function () { ob.disconnect(); }, 20000 ); | |||
} | |||
var fb = document.querySelector( '.bp-footer-bottom' ); | |||
if ( fb && window.MutationObserver ) { | |||
var ob2 = new MutationObserver( function () { clean(); } ); | |||
ob2.observe( fb, { childList: true, subtree: true } ); | |||
setTimeout( function () { ob2.disconnect(); }, 20000 ); | |||
} | |||
} | |||
var cats = mw.config.get( 'wgCategories' ) || []; | |||
if ( cats.indexOf( 'Copyexempt' ) !== -1 ) { | |||
suppress(); | |||
return; | |||
} | |||
$( function () { | |||
if ( document.querySelector( '.bp-copyexempt-marker' ) ) { | |||
suppress(); | |||
} | |||
} ); | |||
function norm( s ) { | |||
s = String( s || '' ).replace( /_/g, ' ' ).trim(); | |||
return s ? s.charAt( 0 ).toUpperCase() + s.slice( 1 ) : s; | |||
} | |||
var current = norm( mw.config.get( 'wgPageName' ) ); | |||
mw.loader.using( [ 'mediawiki.api' ] ).then( function () { | |||
var api = new mw.Api(); | |||
api.get( { | |||
action: 'query', | |||
prop: 'revisions', | |||
titles: mw.config.get( 'wgPageName' ), | |||
rvlimit: 1, | |||
rvdir: 'newer', | |||
rvprop: 'timestamp', | |||
formatversion: 2 | |||
} ).then( function ( data ) { | |||
try { | |||
var rev = data.query.pages[ 0 ].revisions[ 0 ]; | |||
if ( rev && rev.timestamp >= CUTOFF ) { | |||
suppress(); | |||
} | |||
} catch ( e ) {} | |||
} ).catch( function () {} ); | |||
api.get( { | |||
action: 'query', | |||
prop: 'revisions', | |||
titles: 'Bharatpedia:Copyexempt', | |||
rvprop: 'content', | |||
rvslots: 'main', | |||
formatversion: 2 | |||
} ).then( function ( data ) { | |||
try { | |||
var text = data.query.pages[ 0 ].revisions[ 0 ].slots.main.content; | |||
var start = text.indexOf( 'COPYEXEMPT-LIST-START' ); | |||
var end = text.indexOf( 'COPYEXEMPT-LIST-END' ); | |||
if ( start === -1 || end === -1 || end <= start ) { | |||
return; | |||
} | |||
var part = text.slice( start, end ); | |||
var m; | |||
var re = /\[\[([^\]|#]+)/g; | |||
while ( ( m = re.exec( part ) ) !== null ) { | |||
if ( norm( m[ 1 ] ) === current ) { | |||
suppress(); | |||
return; | |||
} | |||
} | |||
} catch ( e ) {} | |||
} ).catch( function () {} ); | |||
} ); | |||
}() ); | |||
Revision as of 06:22, 2 November 2026
mw.loader.using(['mediawiki.util']).then(function () {
if (mw.config.get('wgUserGroups').indexOf('autoconfirmed') === -1 &&
mw.config.get('wgUserGroups').indexOf('confirmed') === -1) {
return;
}
var ITEMS = [
{ id: 'twinkle-tag', label: 'Tag', icon: 'ri-price-tag-3-line' },
{ id: 'twinkle-csd', label: 'CSD', icon: 'ri-delete-bin-6-line' },
{ id: 'twinkle-warn', label: 'Warn', icon: 'ri-alarm-warning-line' },
{ id: 'twinkle-block', label: 'Block', icon: 'ri-user-unfollow-line' },
{ id: 'twinkle-protect', label: 'Protect', icon: 'ri-shield-line' },
{ id: 'twinkle-unlink', label: 'Unlink', icon: 'ri-link-unlink' },
{ id: 'twinkle-xfd', label: 'XfD', icon: 'ri-chat-delete-line' },
{ id: 'twinkle-lastdiff', label: 'Last diff', icon: 'ri-git-branch-line' }
];
function ready() {
if (document.getElementById('bpneo-tw-wrap')) {
return true;
}
if (typeof Twinkle !== 'object') {
return false;
}
var bar = document.querySelector('.bpneo-title-actions');
if (!bar) {
return false;
}
var wrap = document.createElement('div');
wrap.id = 'bpneo-tw-wrap';
wrap.className = 'bpneo-action-wrap';
wrap.style.position = 'relative';
var btn = document.createElement('button');
btn.type = 'button';
btn.className = 'bpneo-title-btn';
btn.title = 'Twinkle';
btn.innerHTML = '<i class="ri-sparkling-2-line"></i>';
var menu = document.createElement('div');
menu.id = 'bpneo-tw-menu';
menu.className = 'bpneo-action-menu';
menu.style.display = 'none';
var added = 0;
ITEMS.forEach(function (item) {
var src = document.getElementById(item.id);
if (!src) {
return;
}
var a = document.createElement('a');
a.href = '#';
a.innerHTML = '<i class="' + item.icon + '"></i> ' + item.label;
a.addEventListener('click', function (e) {
e.preventDefault();
menu.style.display = 'none';
src.click();
});
menu.appendChild(a);
added++;
});
if (!added) {
return false;
}
btn.addEventListener('click', function (e) {
e.preventDefault();
e.stopPropagation();
menu.style.display = menu.style.display === 'none' ? 'block' : 'none';
});
document.addEventListener('click', function (e) {
if (!wrap.contains(e.target)) {
menu.style.display = 'none';
}
});
wrap.appendChild(btn);
wrap.appendChild(menu);
bar.appendChild(wrap);
return true;
}
var n = 0;
var t = setInterval(function () {
n++;
if (ready()) {
clearInterval(t);
}
if (n > 60) {
clearInterval(t);
}
}, 250);
});
/* Mobile view switch: BharatpediaNeo does not render the
MobileFrontend footer toggle, so add a Mobile view link.
Articles: under the footer's Follow Us section. The main
page's remix footer: in the links row, after Contact. */
$( function () {
if ( document.getElementById( 'bpneo-mobile-view-link' ) ) {
return;
}
var a = document.createElement( 'a' );
a.id = 'bpneo-mobile-view-link';
a.textContent = 'Mobile view';
a.href = '/w/index.php?title=' +
encodeURIComponent( mw.config.get( 'wgPageName' ) ) +
'&mobileaction=toggle_view_mobile';
var social = document.querySelector( '.bp-footer-social' );
if ( social && social.parentNode ) {
var box = document.createElement( 'div' );
box.style.marginTop = '1em';
box.appendChild( a );
social.parentNode.appendChild( box );
return;
}
var links = document.querySelector( '.bpneo-remix-footer-links' );
if ( links ) {
a.style.marginLeft = '1em';
links.appendChild( a );
return;
}
var footer = document.querySelector( 'footer' );
if ( !footer ) {
return;
}
var wrap = document.createElement( 'div' );
wrap.style.textAlign = 'center';
wrap.style.width = '100%';
wrap.style.marginTop = '0.5em';
wrap.appendChild( a );
footer.appendChild( wrap );
} );
/* Copyexempt: keep the plain Bharatpedia copyright line, with no
imported-article attribution line, on (1) pages that use
{{Copyexempt}} or are in Category:Copyexempt, (2) pages named in
the central list on Bharatpedia:Copyexempt, and (3) articles
created on or after 2 November 2026, including articles created
by moving a draft into the main namespace on or after that date. */
( function () {
if ( mw.config.get( 'wgNamespaceNumber' ) !== 0 ||
mw.config.get( 'wgAction' ) !== 'view' ) {
return;
}
var CUTOFF = '2026-11-01T18:30:00Z';
var done = false;
function clean() {
var slot = document.querySelector( '.bp-import-attrib' );
if ( slot && slot.textContent ) {
slot.textContent = '';
}
var fb = document.querySelector( '.bp-footer-bottom' );
if ( !fb || fb.textContent.indexOf( 'may use material' ) === -1 ) {
return;
}
var deleting = false;
Array.prototype.slice.call( fb.childNodes ).forEach( function ( n ) {
if ( n.nodeType === 1 && n.classList &&
n.classList.contains( 'bp-import-attrib' ) ) {
n.textContent = '';
return;
}
if ( !deleting && n.nodeType === 3 &&
n.textContent.indexOf( 'This article may use material' ) !== -1 ) {
var i = n.textContent.indexOf( 'This article may use material' );
n.textContent = n.textContent.slice( 0, i );
deleting = true;
return;
}
if ( deleting ) {
if ( n.nodeType === 3 && n.textContent.indexOf( ').' ) !== -1 ) {
n.textContent = n.textContent.slice( n.textContent.indexOf( ').' ) + 2 );
deleting = false;
} else if ( n.nodeType === 3 ) {
n.textContent = '';
} else if ( n.nodeType === 1 ) {
n.remove();
}
}
} );
}
function suppress() {
if ( done ) {
clean();
return;
}
done = true;
if ( !document.getElementById( 'bp-copyexempt-style' ) ) {
var st = document.createElement( 'style' );
st.id = 'bp-copyexempt-style';
st.textContent = '.bp-import-attrib{display:none!important}';
document.head.appendChild( st );
}
clean();
var slot = document.querySelector( '.bp-import-attrib' );
if ( slot && window.MutationObserver ) {
var ob = new MutationObserver( function () { clean(); } );
ob.observe( slot, { childList: true, subtree: true } );
setTimeout( function () { ob.disconnect(); }, 20000 );
}
var fb = document.querySelector( '.bp-footer-bottom' );
if ( fb && window.MutationObserver ) {
var ob2 = new MutationObserver( function () { clean(); } );
ob2.observe( fb, { childList: true, subtree: true } );
setTimeout( function () { ob2.disconnect(); }, 20000 );
}
}
var cats = mw.config.get( 'wgCategories' ) || [];
if ( cats.indexOf( 'Copyexempt' ) !== -1 ) {
suppress();
return;
}
$( function () {
if ( document.querySelector( '.bp-copyexempt-marker' ) ) {
suppress();
}
} );
function norm( s ) {
s = String( s || '' ).replace( /_/g, ' ' ).trim();
return s ? s.charAt( 0 ).toUpperCase() + s.slice( 1 ) : s;
}
var current = norm( mw.config.get( 'wgPageName' ) );
mw.loader.using( [ 'mediawiki.api' ] ).then( function () {
var api = new mw.Api();
api.get( {
action: 'query',
prop: 'revisions',
titles: mw.config.get( 'wgPageName' ),
rvlimit: 1,
rvdir: 'newer',
rvprop: 'timestamp',
formatversion: 2
} ).then( function ( data ) {
try {
var rev = data.query.pages[ 0 ].revisions[ 0 ];
if ( rev && rev.timestamp >= CUTOFF ) {
suppress();
}
} catch ( e ) {}
} ).catch( function () {} );
api.get( {
action: 'query',
prop: 'revisions',
titles: 'Bharatpedia:Copyexempt',
rvprop: 'content',
rvslots: 'main',
formatversion: 2
} ).then( function ( data ) {
try {
var text = data.query.pages[ 0 ].revisions[ 0 ].slots.main.content;
var start = text.indexOf( 'COPYEXEMPT-LIST-START' );
var end = text.indexOf( 'COPYEXEMPT-LIST-END' );
if ( start === -1 || end === -1 || end <= start ) {
return;
}
var part = text.slice( start, end );
var m;
var re = /\[\[([^\]|#]+)/g;
while ( ( m = re.exec( part ) ) !== null ) {
if ( norm( m[ 1 ] ) === current ) {
suppress();
return;
}
}
} catch ( e ) {}
} ).catch( function () {} );
} );
}() );