User:Gifted9/common.js: Difference between revisions
Content added Content deleted
No edit summary |
(rm scrollupbutton - home and end keys do same function in chrome) |
||
Line 34: | Line 34: | ||
}); |
}); |
||
}); |
}); |
||
/* |
|||
* @name ScrollUpButton (stolen from [[wikia:dev:ScrollUpButton]]) |
|||
* @desc Add arrow buttons to jump to the top or bottom of the current page; appears at bottom right when in the middle of a page |
|||
* @rev 3 (2019-28-07) |
|||
* @upstream fandom-zhcc-1 (2021-06-14) |
|||
* @fork fandom-dev-1 (2021-06-14) |
|||
* @author Kwj2772 |
|||
* @contributor Perhelion |
|||
* @contributor [wikipedia:ko:] Ykhwong |
|||
* @contributor [wikipedia:zh:] AnYiLin |
|||
* @contributor [wikia:zh:] Winston Sung |
|||
* |
|||
* No internationalisation required |
|||
* |
|||
* [kowiki] Fixed an issue with help-panel-button. (wikipedia:ko:User:Ykhwong) |
|||
* [zhwiki] Add a timer to autohide button, check more gadgets. Add scrollDownButton. |
|||
* [fandom-zhcc] Adding compatibility with Toolbar/QuickBar. (wikia:zh:User:Winston Sung) |
|||
* |
|||
* @from https://ko.wikipedia.org/?oldid=25440719 |
|||
* @zhwikipedia_maintainer 安忆 (wikipedia:zh:User:AnYiLin) |
|||
* @fandom-zhcc Winston Sung (wikia:zh:User:Winston Sung) |
|||
*/ |
|||
(function($, mw) { |
|||
var scrollDownButtonId = 'scrollDownButton', |
|||
scrollUpButtonId = 'scrollUpButton'; |
|||
var scrollButtonIcon = '//upload.wikimedia.org/wikipedia/commons/5/59/Font_Awesome_5_regular_arrow-circle-up_blue.svg'; |
|||
if (!document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#Image', '1.1')) |
|||
scrollButtonIcon = '//upload.wikimedia.org/wikipedia/commons/thumb/5/59/Font_Awesome_5_regular_arrow-circle-up_blue.svg/32px-Font_Awesome_5_regular_arrow-circle-up_blue.svg.png'; |
|||
$scrollDownButton = $('<img>', { |
|||
src: scrollButtonIcon, |
|||
id: scrollDownButtonId |
|||
}).css({ |
|||
cursor: 'pointer', |
|||
opacity: 0.7, |
|||
position: 'fixed', |
|||
display: 'none', |
|||
right: '18px', |
|||
transform: 'rotate(180deg)', |
|||
'-webkit-transform': 'rotate(180deg)', |
|||
'-moz-transform': 'rotate(180deg)', |
|||
'-o-transform': 'rotate(180deg)', |
|||
'-ms-transform': 'rotate(180deg)' |
|||
}).on('click', function() { |
|||
$('html, body').animate({ |
|||
scrollTop: $(document).height() - $(window).height() |
|||
}, 660) |
|||
}).on('mouseenter mouseleave', function(e) { |
|||
this.style.opacity = e.type === 'mouseenter' ? 1 : 0.7 |
|||
}).appendTo('body'); |
|||
$scrollUpButton = $('<img>', { |
|||
src: scrollButtonIcon, |
|||
id: scrollUpButtonId |
|||
}).css({ |
|||
cursor: 'pointer', |
|||
opacity: 0.7, |
|||
position: 'fixed', |
|||
display: 'none', |
|||
right: '18px' |
|||
}).on('click', function() { |
|||
$('html, body').animate({ |
|||
scrollTop: 0 |
|||
}, 660) |
|||
}).on('mouseenter mouseleave', function(e) { |
|||
this.style.opacity = e.type === 'mouseenter' ? 1 : 0.7 |
|||
}).appendTo('body'); |
|||
var scrollButtonTimer; |
|||
$(window).on('scroll', function() { |
|||
var dingHeight = $('#bluedeck_ding>div').height() ? $('#bluedeck_ding>div').height() : 0; |
|||
$('#mw-ge-help-panel-cta-button').length > 0 ? |
|||
$scrollDownButton.css('bottom', dingHeight + 75 + 'px') && $scrollUpButton.css('bottom', dingHeight + 116 + 'px') : |
|||
$('.skin-fandomdesktop').length > 0 ? |
|||
$scrollDownButton.css('bottom', dingHeight + 54 + 'px') && $scrollUpButton.css('bottom', dingHeight + 95 + 'px') : |
|||
$scrollDownButton.css('bottom', dingHeight + 24 + 'px') && $scrollUpButton.css('bottom', dingHeight + 65 + 'px'); |
|||
$('#cat_a_lot').length > 0 || $('#proveit').length > 0 || $('.wordcount').length > 0 ? $scrollDownButton.css('left', '10px') && $scrollUpButton.css('left', '10px') : $scrollDownButton.css('left', 'unset') && $scrollUpButton.css('left', 'unset'); |
|||
$(this).scrollTop() > 60 ? $scrollDownButton.fadeIn('slow') && $scrollUpButton.fadeIn('slow') : $scrollDownButton.fadeOut('slow') && $scrollUpButton.fadeOut('slow'); |
|||
this.clearTimeout(scrollButtonTimer); |
|||
scrollButtonTimer = this.setTimeout(function() { |
|||
$scrollDownButton.fadeOut('slow'); |
|||
$scrollUpButton.fadeOut('slow') |
|||
}, 2000) |
|||
}); |
|||
$scrollDownButton.on('mouseenter', function() { |
|||
window.clearTimeout(scrollButtonTimer) |
|||
}); |
|||
$scrollUpButton.on('mouseenter', function() { |
|||
window.clearTimeout(scrollButtonTimer) |
|||
}) |
|||
})(jQuery, mw); |
|||
/*** Restorer ***/ |
/*** Restorer ***/ |
Revision as of 16:57, 23 March 2023
// javascript wiki browser: autowikibrowser but slightly uglier and in-browser, for when i'm not on my home computer
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Joeytje50/JWB.js/load.js&action=raw&ctype=text/javascript');
// add somewhat sensitive stuff to my user tools dropdown so it's more accessible to me and less accessible to everyone reading my userpage
// documentation at [[mw:ResourceLoader/Core modules]] and https://doc.wikimedia.org/mediawiki-core/master/js/#!/api/mw.util-method-addPortletLink
// First wait for mediawiki.util to load, and the page to be ready.
mw.loader.using('mediawiki.util', function() {
// General usage pattern: mw.util.addPortletLink( portletId, href, text /* Optional: , id, tooltip, accesskey, nextnode */ );
// personal common.js
mw.util.addPortletLink(
'p-personal',
mw.util.getUrl('User:Gifted9/common.js'),
'User:Gifted9/common.js');
// all subpages of my userpage
mw.util.addPortletLink(
'p-personal',
mw.util.getUrl('Special:PrefixIndex/User:Gifted9'),
'Special:PrefixIndex/User:Gifted9');
/**
* adds history and delete links to Special:WhatLinksHere
* @source: https://www.mediawiki.org/wiki/Snippets/Special:WhatLinksHere_history_link
* @rev: 2
*/
$( '#mw-whatlinkshere-list li' ).each( function() {
var url = mw.config.get( 'wgScript' ) + '?title=' + encodeURIComponent( $( 'a:first', this ).text() ) + '&action=';
$( '.mw-whatlinkshere-tools a:last', this )
.after( $( '<a>' ).attr( 'href', url + 'delete' ).text( 'delete' ) ).after( ' | ' )
.after( $( '<a>' ).attr( 'href', url + 'history' ).text( 'hist' ) ).after( ' | ' )
});
});
/*** Restorer ***/
// Easily restore an older version of a page
// Documentation at [[w:User:BrandonXLF/Restorer]]
// By [[w:User:BrandonXLF]]
$(function() {
if (mw.config.get('wgAction') != 'history') return;
window.restorerSummary = window.restorerSummary ||
'Restored revision $ID by [[Special:Contributions/$USER|$USER]] ([[w:User:BrandonXLF/Restorer|Restorer]])';
function restore(revid) {
var api = new mw.Api();
return api.get({
action: 'query',
revids: revid,
prop: 'revisions',
rvprop: 'user',
format: 'json',
formatversion: '2'
}).then(function(res) {
var user = res.query.pages[0].revisions[0].user;
return api.postWithEditToken({
action: 'edit',
pageid: mw.config.get('wgArticleId'),
undo: mw.config.get('wgCurRevisionId'),
undoafter: revid,
summary: window.restorerSummary.replace(/\$ID/g, revid).replace(/\$USER/g, user)
});
}).then(
function() {
mw.notify('Restored revision successfully.');
location.reload();
},
function(_, data) {
mw.notify(api.getErrorMessage(data), {type: 'error'});
}
);
}
function addLink(item) {
var revid = item.getAttribute('data-mw-revid');
if (revid == mw.config.get('wgCurRevisionId')) return;
var links = item.querySelector('.comment + .mw-changeslist-links');
if (!links) return;
var parent = document.createElement('span'),
el = document.createElement('a');
el.addEventListener('click', function() {
el.className = 'restorer-loading';
restore(revid).always(function() {
el.className = '';
});
});
el.textContent = 'restore';
parent.appendChild(el);
links.appendChild(parent);
}
var parents = document.querySelectorAll('li[data-mw-revid]');
for (var i = 0; i < parents.length; i++) {
addLink(parents[i]);
}
mw.loader.addStyleTag(
'@keyframes restorer-loading {' +
'0%, 100% {content: " ⡁"} 16% {content: " ⡈"} 33% {content: " ⠔"} 50% {content: " ⠒"} 66% {content: " ⠢"} 83% {content: " ⢁"}}' +
'.restorer-loading::after {white-space: pre; content: ""; animation: restorer-loading 0.5s infinite}'
);
});