https://de.wikipedia.org/w/index.php?action=history&feed=atom&title=Benutzer%3ALadsgroup%2Fdashboard.js
Benutzer:Ladsgroup/dashboard.js - Versionsgeschichte
2025-05-04T20:45:10Z
Versionsgeschichte dieser Seite in Wikipedia
MediaWiki 1.44.0-wmf.27
https://de.wikipedia.org/w/index.php?title=Benutzer:Ladsgroup/dashboard.js&diff=238096758&oldid=prev
Ladsgroup: AZ: Die Seite wurde neu angelegt: // License: GPL-v3 or later // Keep in sync with https://gitlab.wikimedia.org/ladsgroup/dashboard-gadget/-/blob/main/main.js function dashboardGadget() { function msg( key ){ const i18n = { 'en': { 'dashboard': 'Dashboard', 'dashboard-message': 'Go to the dashboard', 'loading': 'Loading...', 'diff': 'Diff',…
2023-10-12T19:13:38Z
<p><a href="/wiki/Hilfe:Zusammenfassung_und_Quellen#Auto-Zusammenfassung" title="Hilfe:Zusammenfassung und Quellen">AZ</a>: Die Seite wurde neu angelegt: // License: GPL-v3 or later // Keep in sync with https://gitlab.wikimedia.org/ladsgroup/dashboard-gadget/-/blob/main/main.js function dashboardGadget() { function msg( key ){ const i18n = { 'en': { 'dashboard': 'Dashboard', 'dashboard-message': 'Go to the dashboard', 'loading': 'Loading...', 'diff': 'Diff',…</p>
<p><b>Neue Seite</b></p><div>// License: GPL-v3 or later<br />
// Keep in sync with https://gitlab.wikimedia.org/ladsgroup/dashboard-gadget/-/blob/main/main.js<br />
<br />
function dashboardGadget() {<br />
function msg( key ){<br />
const i18n = {<br />
'en': {<br />
'dashboard': 'Dashboard',<br />
'dashboard-message': 'Go to the dashboard',<br />
'loading': 'Loading...',<br />
'diff': 'Diff',<br />
'refresh': 'Refresh',<br />
'configuration': 'Configuration',<br />
'pending-since': 'Pending since',<br />
'default-config': 'User:Ladsgroup/defaultDashboardConfig.json'<br />
},<br />
'fa': {<br />
'dashboard': 'پیشخوان',<br />
'dashboard-message': 'رفتن به صفحهٔ پیشخوان عمومی',<br />
'loading': 'در حال بارگذاری...',<br />
'diff': 'تفاوت',<br />
'refresh': 'بروزرسانی',<br />
'configuration': 'تنظیمات',<br />
'pending-since': 'در حال انتظار از',<br />
'default-config': 'مدیاویکی:Gadget-dashboard/defaultConfig.json'<br />
},<br />
'de': {<br />
'dashboard': 'Dashboard',<br />
'dashboard-message': 'Go to the dashboard',<br />
'loading': 'Laden...',<br />
'diff': 'Unterschied',<br />
'refresh': 'Neuladen',<br />
'configuration': 'Einstellungen',<br />
'pending-since': 'Ungesichtet seit',<br />
'default-config': 'User:Ladsgroup/defaultConfig.json'<br />
}<br />
};<br />
return i18n[ mw.config.get( 'wgUserLanguage' ).split('-')[0] ][ key ] || i18n.en[ key ];<br />
}<br />
<br />
// inject the link<br />
if ($('.vector-user-links').length) {<br />
// new vector<br />
let dashboardLinkDiv = $('<div></div>');<br />
dashboardLinkDiv.css('margin', '5px');<br />
let link = $('<a></a>');<br />
link.attr('href', '/wiki/Special:BlankPage/Dashboard');<br />
link.text(msg('dashboard'))<br />
dashboardLinkDiv.append(link);<br />
dashboardLinkDiv.append(' - ');<br />
$('.vector-user-links').prepend(dashboardLinkDiv);<br />
} else {<br />
// old vector<br />
mw.util.addPortletLink('p-personal', '/wiki/Special:BlankPage/Dashboard', msg('dashboard'), 'p-dashboard', msg('dashboard-message'), null, '#pt-userpage');<br />
}<br />
<br />
if (<br />
mw.config.get( 'wgCanonicalNamespace' ) != 'Special' ||<br />
mw.config.get( 'wgCanonicalSpecialPageName' ) != 'Blankpage' ||<br />
mw.config.get( 'wgPageName' ).search( '/Dashboard' ) == -1<br />
) {<br />
return;<br />
}<br />
document.documentElement.classList.remove('vector-feature-limited-width-clientpref-1');<br />
document.documentElement.classList.add('vector-feature-limited-width-clientpref-0');<br />
document.documentElement.classList.remove('vector-feature-page-tools-pinned-enabled');<br />
document.documentElement.classList.add('vector-feature-page-tools-pinned-disabled');<br />
$('.vector-page-toolbar').remove();<br />
window.dispatchEvent( new Event( 'resize' ) );<br />
$('.mw-first-heading').text(msg('dashboard'));<br />
document.title = msg('dashboard');<br />
$('.mw-body-content').text(msg('loading'));<br />
<br />
async function loadConfig( title ) {<br />
let response = await fetch("/wiki/" + encodeURIComponent(title) + '?action=raw');<br />
return response.text();<br />
}<br />
<br />
async function contentForPageType( box ) {<br />
let response = await fetch("/api/rest_v1/page/html/" + encodeURIComponent(box.pageTitle));<br />
return response.text();<br />
}<br />
<br />
async function contentForRC( box ) {<br />
let response = await fetch(box.url);<br />
let data = await response.json();<br />
data = data.query.recentchanges;<br />
let content = $('<ul></ul>');<br />
for ( i in data ) {<br />
let diff = $('<a></a>');<br />
diff.attr('href', '/wiki/Special:Diff/' + Number(data[i].revid));<br />
diff.text(msg('diff'));<br />
<br />
let liObj = $('<li></li>');<br />
liObj.append('(');<br />
liObj.append(diff);<br />
liObj.append(') - ');<br />
liObj.append(getPageLink(data[i].title));<br />
liObj.append(' ');<br />
liObj.append(getUser(data[i].user));<br />
liObj.append( ' (' + data[i].parsedcomment + ')' );<br />
<br />
content.append(liObj);<br />
}<br />
return content;<br />
}<br />
<br />
async function contentForWatchlist( box ) {<br />
let response = await fetch(box.url);<br />
let data = await response.json();<br />
data = data.query.watchlist;<br />
let content = $('<ul></ul>');<br />
for ( i in data ) {<br />
let diff = $('<a></a>');<br />
diff.attr('href', '/wiki/Special:Diff/' + Number(data[i].revid));<br />
diff.text(msg('diff'));<br />
<br />
let liObj = $('<li></li>');<br />
liObj.append('(');<br />
liObj.append(diff);<br />
liObj.append(') - ');<br />
liObj.append(getPageLink(data[i].title));<br />
liObj.append(' ');<br />
liObj.append(getUser(data[i].user));<br />
liObj.append( ' (' + data[i].parsedcomment + ')' );<br />
<br />
content.append(liObj);<br />
}<br />
<br />
return content;<br />
}<br />
<br />
async function contentForPending( box ) {<br />
let response = await fetch(box.url);<br />
let data = await response.json();<br />
data = data.query.oldreviewedpages;<br />
if ( !data ) {<br />
return 'Nothing to review!';<br />
}<br />
let content = $('<ul></ul>');<br />
for ( i in data ) {<br />
let diff = $('<a></a>');<br />
diff.attr('href', '/wiki/Special:Diff/' + Number(data[i].revid));<br />
diff.text(msg('diff'));<br />
<br />
let liObj = $('<li></li>');<br />
liObj.append('(');<br />
liObj.append(diff);<br />
liObj.append(') - ');<br />
liObj.append(getPageLink(data[i].title));<br />
liObj.append( ' (' + msg('pending-since') + ': ' + data[i].pending_since + ')' );<br />
<br />
content.append(liObj);<br />
}<br />
<br />
return content;<br />
}<br />
<br />
async function contentForCategory( box ) {<br />
let api = new mw.Api();<br />
if (box.norandom) {<br />
limit = 10;<br />
} else {<br />
limit = 100;<br />
}<br />
let data = await api.get( {<br />
action: 'query',<br />
list: 'categorymembers',<br />
cmprop: 'title',<br />
cmlimit: limit,<br />
cmtitle: box.categoryTitle<br />
} );<br />
data = getMultipleRandom(data.query.categorymembers, 10);<br />
let content = $('<ul></ul>');<br />
for ( i in data ) {<br />
let liObj = $('<li></li>');<br />
liObj.append(getPageLink(data[i].title));<br />
content.append(liObj);<br />
}<br />
return content;<br />
}<br />
<br />
async function contentForLinks( box ) {<br />
let content = $('<ul></ul>');<br />
for ( i in box.links ) {<br />
let link = box.links[i];<br />
if ( link.page ) {<br />
let liObj = $('<li></li>');<br />
liObj.append(getPageLink(link.page));<br />
content.append(liObj);<br />
} else if ( link.url ) {<br />
let link = $('<a>');<br />
link.attr('href', encodeURIComponent(link.url));<br />
link.text(link.text);<br />
let liObj = $('<li></li>');<br />
liObj.append(link);<br />
content.append(liObj);<br />
}<br />
}<br />
<br />
return content;<br />
}<br />
<br />
async function contnetForStats() {<br />
let api = new mw.Api();<br />
let data = await api.get( {<br />
action: 'query',<br />
meta: 'siteinfo',<br />
siprop: 'statistics',<br />
} );<br />
let content = '<ul>';<br />
content += '<li>تعداد مقالات: ' + mw.language.convertNumber(data.query.statistics.articles) + '</li>';<br />
content += '<li>تعداد صفحات: ' + mw.language.convertNumber(data.query.statistics.pages) + '</li>';<br />
content += '<li>تعداد ویرایشها: ' + mw.language.convertNumber(data.query.statistics.edits) + '</li>';<br />
content += '<li>تعداد تصاویر: ' + mw.language.convertNumber(data.query.statistics.images) + '</li>';<br />
content += '<li>تعداد کاربران فعال: ' + mw.language.convertNumber(data.query.statistics.activeusers) + '</li>';<br />
return content + '</ul>';<br />
}<br />
<br />
async function contnetForCx() {<br />
let api = new mw.Api();<br />
let data = await api.get( {<br />
action: 'query',<br />
assert: 'user',<br />
list: 'contenttranslationsuggestions',<br />
from: 'en',<br />
to: 'fa',<br />
limit: 10,<br />
seed: Math.floor(Math.random() * 100)<br />
} );<br />
data = data.query.contenttranslationsuggestions.lists;<br />
let content = $('<ul></ul>');<br />
for ( i in data ) {<br />
for (j in data[i].suggestions) {<br />
let link = $('<a>');<br />
link.attr('href', 'https://en.wikipedia.org/wiki/' + encodeURIComponent(data[i].suggestions[j].title));<br />
link.text(data[i].suggestions[j].title);<br />
<br />
let liObj = $('<li></li>');<br />
liObj.append(link);<br />
content.append(liObj);<br />
}<br />
}<br />
let divObj = $('<div direction="ltr"></div>');<br />
divObj.append(content);<br />
return divObj;<br />
}<br />
<br />
const handlers = {<br />
'page': contentForPageType,<br />
'rc': contentForRC,<br />
'watchlist': contentForWatchlist,<br />
'category': contentForCategory,<br />
'pending': contentForPending,<br />
'links': contentForLinks,<br />
'stats': contnetForStats,<br />
'cx': contnetForCx,<br />
};<br />
<br />
function getUser(username) {<br />
let link = $('<a>');<br />
link.attr('href', '/wiki/User:' + encodeURIComponent(username));<br />
link.text(username);<br />
return link;<br />
}<br />
<br />
function getPageLink( title ) {<br />
let link = $('<a>');<br />
link.attr('href', '/wiki/' + encodeURIComponent(title));<br />
link.text(title);<br />
return link;<br />
}<br />
<br />
function getMultipleRandom(arr, num) {<br />
const shuffled = [...arr].sort(() => 0.5 - Math.random());<br />
<br />
return shuffled.slice(0, num);<br />
}<br />
<br />
function loadBoxes() {<br />
$('.mw-body-content').text(msg('loading'));<br />
let tabs = $('<div class="cdx-tabs"></div>');<br />
let tabsHeader = $('<div class="cdx-tabs__header"><div class="cdx-tabs__list"></div></div>');<br />
let tabsContent = $( '<div class="cdx-tabs__content"></div>');<br />
for ( let tabIndex in window.dashboardConfig.tabs ) {<br />
let tabConfig = window.dashboardConfig.tabs[tabIndex]; <br />
let headerElement = $('<span class="cdx-tabs__list__item"></span>');<br />
headerElement.text( tabConfig.title );<br />
headerElement.on( 'click', () => { <br />
window.dashboardActiveTab = tabIndex;<br />
loadBoxes();<br />
});<br />
if ( tabIndex == ( window.dashboardActiveTab || 0 ) ) {<br />
headerElement.attr('aria-selected', true);<br />
}<br />
tabsHeader.append(headerElement);<br />
<br />
let tabContent = $( '<div class="cdx-tab"></div>');<br />
tabContent.attr( 'id', 'tab-content-' + tabIndex );<br />
tabContent.css('display', 'flex');<br />
tabContent.css('flex-wrap', 'wrap');<br />
tabContent.css('align-items', 'flex-start');<br />
for (let i in tabConfig.boxes) {<br />
i = Number(i);<br />
let box = tabConfig.boxes[i];<br />
let element = $('<span class="cdx-card__text"></span>');<br />
let titleElement = $('<span class="cdx-card__text__title"></span>');<br />
titleElement.text(box.title);<br />
element.append(titleElement);<br />
let contentElement = $('<span></span>');<br />
contentElement.attr('class', 'cdx-card__text__supporting-text');<br />
contentElement.attr('id', 'dashboard-box-' + i);<br />
contentElement.append('<span class="cdx-css-icon--clock"></span>');<br />
contentElement.append(msg('loading'));<br />
contentElement.css('width', box.width || '300px' );<br />
contentElement.css('height', box.height || '300px' );<br />
contentElement.css('overflow', 'scroll' );<br />
element.append(contentElement);<br />
let wrapper = $( '<span class="cdx-card"></span>' );<br />
wrapper.append(element);<br />
wrapper.css('padding', '15px' );<br />
wrapper.css('margin', '15px' );<br />
const activeTab = window.dashboardActiveTab || 0;<br />
if ( tabIndex == activeTab ) {<br />
wrapper.css('display', 'inline-flex');<br />
tabsContent.append(wrapper);<br />
if ( handlers[box.type] ) {<br />
handlerPromise = handlers[box.type](box);<br />
} else {<br />
handlerPromise = new Promise(() => { return 'No handler has been found' } );<br />
}<br />
handlerPromise.then( ( content ) => { $( '#dashboard-box-' + i).html( content )});<br />
} else {<br />
wrapper.css('display', 'none');<br />
}<br />
}<br />
}<br />
tabs.append(tabsHeader);<br />
let direction = 'left';<br />
if (document.dir == 'rtl') {<br />
direction = 'right';<br />
}<br />
<br />
let refreshButton = $('<button class="cdx-button cdx-button--action-progressive"></button>');<br />
refreshButton.append('<span class="cdx-button__icon cdx-css-icon--reload"></span>');<br />
refreshButton.text(msg('refresh'));<br />
refreshButton.css( 'align-self', 'flex-end' );<br />
refreshButton.css( 'margin-bottom', '5px' );<br />
refreshButton.css( 'margin-' + direction, '5px' );<br />
refreshButton.on('click', loadBoxes );<br />
<br />
let configButton = $('<button class="cdx-button cdx-button--action-progressive"></button>');<br />
configButton.append('<span class="cdx-button__icon cdx-css-icon--reload"></span>');<br />
configButton.text(msg('configuration'));<br />
<br />
let configLink = $('<a></a>');<br />
configLink.attr('href', '/wiki/ ' + encodeURIComponent( window.dashboardConfigLocation ));<br />
configLink.attr('target', '_blank');<br />
configLink.append(configButton);<br />
configLink.css( 'margin-bottom', '5px' );<br />
configLink.css( 'margin-' + direction, 'auto'); <br />
tabsHeader.append( configLink );<br />
tabsHeader.append( refreshButton );<br />
tabs.append(tabsContent);<br />
$('.mw-body-content').html(tabs);<br />
}<br />
let configPromise = null;<br />
if ( mw.util.getParamValue( 'dashboardConfig' ) ) {<br />
configPromise = loadConfig( mw.util.getParamValue( 'dashboardConfig' ) );<br />
window.dashboardConfigLocation = mw.util.getParamValue( 'dashboardConfig' );<br />
} else {<br />
configPromise = loadConfig('User:' + mw.config.get('wgUserName') + '/dashboardConfig.json' )<br />
.then( function (res) {<br />
try {<br />
JSON.parse(res);<br />
window.dashboardConfigLocation = 'User:' + mw.config.get('wgUserName') + '/dashboardConfig.json';<br />
return res;<br />
} catch (erorr) {<br />
window.dashboardConfigLocation = msg('default-config');<br />
return loadConfig(msg('default-config'));<br />
}<br />
} );<br />
}<br />
configPromise.then( function (res) {<br />
let config = JSON.parse(res);<br />
window.dashboardConfig = config;<br />
mw.loader.using('codex-styles').then( loadBoxes() );<br />
});<br />
};<br />
<br />
(function ($, mw) {<br />
dashboardGadget();<br />
}(jQuery, mediaWiki));</div>
Ladsgroup