|
|
(14 intermediate revisions by the same user not shown) |
Line 24: |
Line 24: |
| } | | } |
| }); | | }); |
| mw.loader.load( '//www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-UTCLiveClock.js&action=raw&ctype=text/javascript' );
| |
| $.fx.off = true;
| |
| var CommentsInLocalTime, runScript;
| |
|
| |
|
| CommentsInLocalTime = (function() {
| | // Add links into the toolbar |
| var LocalComments, language;
| |
|
| |
|
| function CommentsInLocalTime() {}
| | mw.loader.load( '//www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-UTCLiveClock.js&action=raw&ctype=text/javascript' ); |
| | | var addtoolbarlinks = "p-personal" |
| language = '';
| |
| | |
| LocalComments = {};
| |
| | |
| CommentsInLocalTime.settings = function() {
| |
| if (window.LocalComments != null) {
| |
| LocalComments = window.LocalComments;
| |
| }
| |
| | |
| /*
| |
| Language
| |
|
| |
| LOCALIZING THIS SCRIPT
| |
| To localize this script, change the terms below,
| |
| to the RIGHT of the colons, to the correct term used in that language.
| |
|
| |
| For example, in the French language,
| |
|
| |
| 'Today' : 'Today',
| |
|
| |
| would be
| |
|
| |
| 'Today' : "Aujourd'hui",
| |
| */
| |
| return LocalComments.language = {
| |
| | |
| /* relative terms */
| |
| 'Today': 'Today',
| |
| 'Yesterday': 'Yesterday',
| |
| 'Tomorrow': 'Tomorrow',
| |
| 'last': 'last',
| |
| 'this': 'this',
| |
| | |
| /* days of the week */
| |
| 'Sunday': 'Sunday',
| |
| 'Monday': 'Monday',
| |
| 'Tuesday': 'Tuesday',
| |
| 'Wednesday': 'Wednesday',
| |
| 'Thursday': 'Thursday',
| |
| 'Friday': 'Friday',
| |
| 'Saturday': 'Saturday',
| |
| | |
| /* months of the year */
| |
| 'January': 'January',
| |
| 'February': 'February',
| |
| 'March': 'March',
| |
| 'April': 'April',
| |
| 'May': 'May',
| |
| 'June': 'June',
| |
| 'July': 'July',
| |
| 'August': 'August',
| |
| 'September': 'September',
| |
| 'October': 'October',
| |
| 'November': 'November',
| |
| 'December': 'December',
| |
| | |
| /* difference words */
| |
| 'ago': 'ago',
| |
| 'from now': 'from now',
| |
| | |
| /* date phrases */
| |
| 'year': 'year',
| |
| 'years': 'years',
| |
| 'month': 'month',
| |
| 'months': 'months',
| |
| 'day': 'day',
| |
| 'days': 'days'
| |
| };
| |
| };
| |
| | |
| | |
| /*
| |
| APPLICATION
| |
| */
| |
| | |
| CommentsInLocalTime.init = function() {
| |
| | |
| /*
| |
| Settings
| |
| */
| |
| var contentText, namespace, pageAction;
| |
| this.settings();
| |
| if (LocalComments.language == null) {
| |
| return false;
| |
| }
| |
| language = this.setDefaultSetting('language', LocalComments.language);
| |
| this.setDefaultSetting({
| |
| 'dateDifference': true,
| |
| 'dateFormat': 'dmy',
| |
| 'dayOfWeek': true,
| |
| 'dropDays': 0,
| |
| 'dropMonths': 0,
| |
| 'timeFirst': true,
| |
| 'twentyFourHours': false
| |
| });
| |
| | |
| /*
| |
| End Settings
| |
| */
| |
| namespace = mw.config.get('wgCanonicalNamespace');
| |
| pageAction = mw.config.get('wgAction');
| |
| if (['', 'MediaWiki', 'Special'].indexOf(namespace) > -1 || pageAction === 'history') {
| |
| return false;
| |
| }
| |
| contentText = document.getElementById('mw-content-text');
| |
| if (mw.config.get('wgAction') !== 'view' || (contentText == null)) {
| |
| return false;
| |
| }
| |
| return this.replaceText(contentText, /(\d{1,2}):(\d{2}), (\d{1,2}) ([A-Z][a-z]+) (\d{4}) \(UTC\)/);
| |
| };
| |
| | |
| CommentsInLocalTime.replaceText = function(node, search) {
| |
| var after, afterMatch, before, beforeMatch, child, children, length, match, matches, parent, parentNodeName, position, span, timeArray, timestamp, value, _i, _len, _results;
| |
| if (!node) {
| |
| return false;
| |
| }
| |
| if (node.nodeType === 3) {
| |
| parent = node.parentNode;
| |
| parentNodeName = parent.nodeName;
| |
| if (['CODE', 'PRE'].indexOf(parentNodeName) > -1) {
| |
| return false;
| |
| }
| |
| value = node.nodeValue;
| |
| matches = value.match(search);
| |
| if (matches != null) {
| |
| match = matches[0];
| |
| position = value.search(search);
| |
| length = match.toString().length;
| |
| beforeMatch = value.substring(0, position);
| |
| afterMatch = value.substring(position + length);
| |
| timeArray = this.adjustTime(match.toString(), search);
| |
| timestamp = timeArray[1] ? timeArray[1].getTime() : '';
| |
| span = document.createElement('span');
| |
| span.className = 'localcomments';
| |
| span.style.fontSize = '95%';
| |
| span.style.whiteSpace = 'nowrap';
| |
| span.setAttribute('timestamp', timestamp);
| |
| span.title = match;
| |
| span.appendChild(document.createTextNode(timeArray[0]));
| |
| parent = node.parentNode;
| |
| parent.replaceChild(span, node);
| |
| before = document.createElement('span');
| |
| before.className = 'before-localcomments';
| |
| before.appendChild(document.createTextNode(beforeMatch));
| |
| after = document.createElement('span');
| |
| after.className = 'after-localcomments';
| |
| after.appendChild(document.createTextNode(afterMatch));
| |
| parent.insertBefore(before, span);
| |
| return parent.insertBefore(after, span.nextSibling);
| |
| }
| |
| } else {
| |
| children = [];
| |
| child = node.childNodes[0];
| |
| while (child) {
| |
| children.push(child);
| |
| child = child.nextSibling;
| |
| }
| |
| _results = [];
| |
| for (_i = 0, _len = children.length; _i < _len; _i++) {
| |
| child = children[_i];
| |
| _results.push(this.replaceText(child, search));
| |
| }
| |
| return _results;
| |
| }
| |
| };
| |
| | |
| CommentsInLocalTime.adjustTime = function(originalTimestamp, search) {
| |
| var ampm, date, day, dayNames, dayOfTheWeek, descriptiveDifference, finalTime, formattedDate, formattedDayOfTheWeek, hour, last, minute, month, monthName, oldDay, oldHour, oldMinute, oldMonth, oldYear, returnDate, time, today, tomorrow, utcOffset, year, yesterday, _ref, _ref1;
| |
| time = originalTimestamp.match(search);
| |
| _ref = [time[1], time[2], time[3], time[4], time[5]], oldHour = _ref[0], oldMinute = _ref[1], oldDay = _ref[2], oldMonth = _ref[3], oldYear = _ref[4];
| |
| today = new Date();
| |
| yesterday = new Date();
| |
| tomorrow = new Date();
| |
| yesterday.setDate(yesterday.getDate() - 1);
| |
| tomorrow.setDate(tomorrow.getDate() + 1);
| |
| time = new Date();
| |
| time.setUTCFullYear(oldYear, this.convertMonthToNumber(oldMonth), oldDay);
| |
| time.setUTCHours(oldHour);
| |
| time.setUTCMinutes(oldMinute);
| |
| if (isNaN(time)) {
| |
| return [originalTimestamp, ''];
| |
| }
| |
| utcOffset = -1 * time.getTimezoneOffset() / 60;
| |
| utcOffset = utcOffset >= 0 ? '+' + utcOffset : '−' + Math.abs(utcOffset);
| |
| year = time.getFullYear();
| |
| month = this.addLeadingZero(time.getMonth() + 1);
| |
| day = time.getDate();
| |
| hour = parseInt(time.getHours());
| |
| minute = this.addLeadingZero(time.getMinutes());
| |
| ampm = '';
| |
| if (LocalComments.twentyFourHours) {
| |
| hour = this.addLeadingZero(hour);
| |
| } else {
| |
| ampm = hour <= 11 ? ' am' : ' pm';
| |
| if (hour > 12) {
| |
| hour -= 12;
| |
| } else if (hour === 0) {
| |
| hour = 12;
| |
| }
| |
| }
| |
| if (year === today.getFullYear() && month === this.addLeadingZero(today.getMonth() + 1) && day === today.getDate()) {
| |
| date = language['Today'];
| |
| } else if (year === yesterday.getFullYear() && month === this.addLeadingZero(yesterday.getMonth() + 1) && day === yesterday.getDate()) {
| |
| date = language['Yesterday'];
| |
| } else if (year === tomorrow.getFullYear() && month === this.addLeadingZero(tomorrow.getMonth() + 1) && day === tomorrow.getDate()) {
| |
| date = language['Tomorrow'];
| |
| } else {
| |
| dayNames = [language['Sunday'], language['Monday'], language['Tuesday'], language['Wednesday'], language['Thursday'], language['Friday'], language['Saturday']];
| |
| dayOfTheWeek = dayNames[time.getDay()];
| |
| descriptiveDifference = '';
| |
| last = '';
| |
| if (LocalComments.dateDifference) {
| |
| _ref1 = this.createRelativeDate(today, time), descriptiveDifference = _ref1.descriptiveDifference, last = _ref1.last;
| |
| }
| |
| formattedDate = '';
| |
| monthName = this.convertNumberToMonth(time.getMonth());
| |
| formattedDate = (function() {
| |
| switch (LocalComments.dateFormat.toLowerCase()) {
| |
| case 'dmy':
| |
| return day + ' ' + monthName + ' ' + year;
| |
| case 'mdy':
| |
| return monthName + ' ' + day + ', ' + year;
| |
| default:
| |
| return year + '-' + month + '-' + this.addLeadingZero(day);
| |
| }
| |
| }).call(this);
| |
| formattedDayOfTheWeek = '';
| |
| if (LocalComments.dayOfWeek) {
| |
| formattedDayOfTheWeek = ', ' + last + dayOfTheWeek;
| |
| }
| |
| date = formattedDate + formattedDayOfTheWeek + descriptiveDifference;
| |
| }
| |
| finalTime = hour + ':' + minute + ampm;
| |
| if (LocalComments.timeFirst) {
| |
| returnDate = finalTime + ', ' + date + ' (UTC' + utcOffset + ')';
| |
| } else {
| |
| returnDate = date + ', ' + finalTime + ' (UTC' + utcOffset + ')';
| |
| }
| |
| return [returnDate, time];
| |
| };
| |
| | |
| CommentsInLocalTime.createRelativeDate = function(today, time) {
| |
| var daysAgo, descriptiveParts, differenceWord, fmtDays, fmtMonths, fmtYears, last, millisecondsAgo, monthsAgo, totalMonthsAgo, yearsAgo;
| |
| millisecondsAgo = today.getTime() - time.getTime();
| |
| daysAgo = Math.abs(Math.round(millisecondsAgo / 1000 / 60 / 60 / 24));
| |
| differenceWord = '';
| |
| last = '';
| |
| if (millisecondsAgo >= 0) {
| |
| differenceWord = language['ago'];
| |
| if (daysAgo <= 7) {
| |
| last = language['last'] + ' ';
| |
| }
| |
| } else {
| |
| differenceWord = language['from now'];
| |
| if (daysAgo <= 7) {
| |
| last = language['this'] + ' ';
| |
| }
| |
| }
| |
| monthsAgo = Math.floor(daysAgo / 365 * 12);
| |
| totalMonthsAgo = monthsAgo;
| |
| yearsAgo = Math.floor(monthsAgo / 12);
| |
| if (monthsAgo < LocalComments.dropMonths) {
| |
| yearsAgo = 0;
| |
| } else if (LocalComments.dropMonths > 0) {
| |
| monthsAgo = 0;
| |
| } else {
| |
| monthsAgo = monthsAgo - yearsAgo * 12;
| |
| }
| |
| if (daysAgo < LocalComments.dropDays) {
| |
| monthsAgo = 0;
| |
| yearsAgo = 0;
| |
| } else if (LocalComments.dropDays > 0) {
| |
| daysAgo = 0;
| |
| } else {
| |
| daysAgo = daysAgo - Math.floor(totalMonthsAgo * 365 / 12);
| |
| }
| |
| descriptiveParts = [];
| |
| if (yearsAgo > 0) {
| |
| fmtYears = yearsAgo + ' ' + this.pluralize(language['year'], yearsAgo, language['years']);
| |
| descriptiveParts.push(fmtYears);
| |
| }
| |
| if (monthsAgo > 0) {
| |
| fmtMonths = monthsAgo + ' ' + this.pluralize(language['month'], monthsAgo, language['months']);
| |
| descriptiveParts.push(fmtMonths);
| |
| }
| |
| if (daysAgo > 0) {
| |
| fmtDays = daysAgo + ' ' + this.pluralize(language['day'], daysAgo, language['days']);
| |
| descriptiveParts.push(fmtDays);
| |
| }
| |
| return {
| |
| descriptiveDifference: ' (' + descriptiveParts.join(', ') + ' ' + differenceWord + ')',
| |
| last: last
| |
| };
| |
| };
| |
| | |
| | |
| /*
| |
| HELPERS
| |
| */
| |
| | |
| CommentsInLocalTime.addLeadingZero = function(number) {
| |
| if (number < 10) {
| |
| number = '0' + number;
| |
| }
| |
| return number;
| |
| };
| |
| | |
| CommentsInLocalTime.convertMonthToNumber = function(month) {
| |
| return (new Date(month + ' 1, 2001')).getMonth();
| |
| };
| |
| | |
| CommentsInLocalTime.convertNumberToMonth = function(number) {
| |
| return [language['January'], language['February'], language['March'], language['April'], language['May'], language['June'], language['July'], language['August'], language['September'], language['October'], language['November'], language['December']][number];
| |
| };
| |
| | |
| CommentsInLocalTime.pluralize = function(term, count, plural) {
| |
| if (plural === null) {
| |
| plural = term + 's';
| |
| }
| |
| if (count === 1) {
| |
| return term;
| |
| } else {
| |
| return plural;
| |
| }
| |
| };
| |
| | |
| CommentsInLocalTime.setDefaultSetting = function() {
| |
| var defaultSetting, name, settings;
| |
| if (!arguments.length) {
| |
| return false;
| |
| }
| |
| if (typeof arguments[0] === 'object') {
| |
| settings = arguments[0];
| |
| for (name in settings) {
| |
| defaultSetting = settings[name];
| |
| if (LocalComments[name] == null) {
| |
| LocalComments[name] = defaultSetting;
| |
| }
| |
| }
| |
| return settings;
| |
| } else if (typeof arguments[0] === 'string') {
| |
| name = arguments[0];
| |
| defaultSetting = arguments[1];
| |
| if (LocalComments[name] == null) {
| |
| LocalComments[name] = defaultSetting;
| |
| }
| |
| return LocalComments[name];
| |
| }
| |
| };
| |
| | |
| return CommentsInLocalTime;
| |
| | |
| })();
| |
| | |
| runScript = function() {
| |
| return $(window).load(function() {
| |
| if (window.location.href.indexOf('&disable=loco') === -1) {
| |
| return CommentsInLocalTime.init();
| |
| }
| |
| });
| |
| };
| |
| | |
| if (typeof waitForScripts === 'function') {
| |
| waitForScripts(runScript);
| |
| } else {
| |
| runScript();
| |
| };
| |
| // <source lang="javascript">
| |
| // License: PD
| |
| // rollback "in place", using API
| |
| "use strict";
| |
| if (
| |
| mw.config.get( 'wgAction' ) === 'history'
| |
| || ( $.inArray( mw.config.get( 'wgCanonicalSpecialPageName' ), ['Recentchanges', 'Watchlist', 'Contributions'] ) + 1 )
| |
| || mw.util.getParamValue( 'diff' )
| |
| )
| |
| mw.loader.using( [ 'jquery.ui.dialog', 'jquery.jStorage', 'mediawiki.api', 'mediawiki.user' ], function() { $(function() {
| |
| var summaryStorageKey = 'rollback summary',
| |
| userTalkStorageKey = 'rollback user talk message',
| |
| historyDepth = 20,
| |
| api = new mw.Api(),
| |
| onRollbackClick = function(e) {
| |
| var $this = $(this),
| |
| href = $this.attr( 'href' ),
| |
| token = decodeURIComponent( href.replace( /.*[&\?]token=/, '' ).replace( /&.*/, '' ) ),
| |
| title = decodeURIComponent( href.replace( /.*[&\?]title=/, '' ).replace( /&.*/, '' ).replace(/_/g, ' ') ),
| |
| from = decodeURIComponent( href.replace( /.*[&\?]from=/, '' ).replace( /&.*/, '' ).replace( /\+/g, ' ' ) ),
| |
| talkPageMessage,
| |
| rbParams = { action: 'rollback', token: token, title: title, user: from },
| |
| replaceTokens = function( str ) {
| |
| return str.replace( /\$1/g, title ).replace( /\$2/g, from ).replace( /\$3/g, $this.text() );
| |
| },
| |
| rollback = function( watchArticle, watchTalk ) {
| |
| if ( watchArticle )
| |
| rbParams.watchlist = 'watch';
| |
| api.post( rbParams, function() {
| |
| var match = $this.text().match( /:(.*)/ ),
| |
| edits = ( match && match.length > 1 ) ? match[1] : $this.text(),
| |
| userLink = $this.closest('span').parent().find( '.mw-usertoollinks' ),
| |
| talkPageLink = $this.closest( 'span' ).parent()
| |
| .find( '.mw-usertoollinks a' )
| |
| .filter( function() { return $( this ).text() == "Talk" } ),
| |
| talkHref = talkPageLink.attr( 'href' ),
| |
| vanarticle = 'vanarticle=' + mw.util.rawurlencode( title );
| |
| | |
| talkPageLink
| |
| .attr( 'href', talkHref + ( /\?/.test( talkHref ) ? '&' : '?' ) + vanarticle )
| |
| .css( 'font-weight', 'bold' );
| |
| | |
| mw.util.jsMessage( i18n( 'success', edits, from ) );
| |
| $this.remove();
| |
| if ( talkPageMessage )
| |
| api.post(
| |
| { action: 'edit',
| |
| token: mw.user.tokens.get( 'editToken' ),
| |
| appendtext: talkPageMessage,
| |
| title: i18n('user talk', from),
| |
| summary: replaceTokens( talkPageSummaryInputbox.val() ),
| |
| watchlist: watchTalk ? 'watch' : 'preferences'
| |
| },
| |
| function() { mw.util.jsMessage( i18n( 'talk success', talkPageMessage, from ) ); }
| |
| );
| |
| } );
| |
| };
| |
| | |
| e.preventDefault();
| |
|
| |
|
| if ( e.type == 'click' ) // left click
| | addOnloadHook( |
| rollback( mw.config.get( 'watchOnRollback' ) );
| | function() { |
| else { // right click.
| | addPortletLink(addtoolbarlinks, 'http://www.ssbwiki.com/index.php?title=Special:Mypage/common.css&action=edit', 'Edit css', 'pt-mycss') |
| var dialog,
| | } |
| summary,
| | ); |
| summaries = $.jStorage.get( summaryStorageKey ) || [],
| | addOnloadHook( |
| talkPageMessages = $.jStorage.get( userTalkStorageKey ) || {},
| | function() { |
| summaryInputbox = $( '<input>', { width: '40em' } ),
| | addPortletLink(addtoolbarlinks, 'http://www.ssbwiki.com/index.php?title=Special:Mypage/common.js&action=edit', 'Edit js', 'pt-myjs') |
| summarySelector = $( '<select>' ).append( $( '<option>' ) ).change( function() { summaryInputbox.val( this.value ); } ),
| | } |
| watchArticleCheckbox = $( '<input>', { type: 'checkbox' } ).prop( 'checked', mw.config.get( 'watchOnRollback' ) ),
| | ); |
| talkPageInputbox = $( '<input>', { width: '40em' } ),
| | addOnloadHook( |
| talkPageTextbox = $( '<textarea>', { rows: 5 } ),
| | function() { |
| talkPageSummaryInputbox = $( '<input>', { width: '40em' } ),
| | addPortletLink(addtoolbarlinks, 'http://www.ssbwiki.com/index.php?title=Special:Log', 'View logs', 'pt-logs') |
| talkPageSelector = $( '<select>' ).change( function() {
| | } |
| talkPageInputbox.val( this.value );
| | ); |
| talkPageTextbox.val( talkPageMessages[this.value].m || '' );
| |
| talkPageSummaryInputbox.val( talkPageMessages[this.value].s || '' );
| |
|
| |
| } ),
| |
| watchTalkpageCheckbox = $( '<input>', { type: 'checkbox' }).prop( 'checked', mw.config.get( 'watchTalkpageOnRollbackMessage' ) ),
| |
| prepareTalkpageSelector = function() {
| |
| talkPageSelector.find( '*' ).remove();
| |
| talkPageSelector.append( $( '<option>' ) );
| |
| for ( var talkMessageName in talkPageMessages ) {
| |
| var option = $( '<option>', { value: talkMessageName, text: talkMessageName} );
| |
| if ( /^=/.test( talkMessageName ) )
| |
| option.attr( 'disabled', 'diabled' );
| |
| talkPageSelector.append( option );
| |
| }
| |
| talkPageInputbox.val( '' );
| |
| talkPageTextbox.val( '' );
| |
| };
| |
|
| |
| $( summaries ).each( function( index, item ) { summarySelector.append( $( '<option>', { value: item, text: item } ) ); } );
| |
| prepareTalkpageSelector();
| |
| dialog = $( '<div>' ).dialog( {
| |
| title: i18n( 'dialogtitle' ),
| |
| modal: true,
| |
| buttons: [
| |
| { text: i18n('ok'), click: function() {
| |
| summary = $.trim( summaryInputbox.val() );
| |
| talkPageMessage = $.trim( talkPageTextbox.val() );
| |
| if ( !summary && !talkPageMessage )
| |
| return;
| |
| if ( summary ) {
| |
| var old = $.inArray( summary, summaries );
| |
| if ( old + 1 )
| |
| summaries.splice( old, 1 );
| |
| summaries.splice( 1, 0, summary );
| |
| if ( summaries.length > 20 )
| |
| summaries.pop();
| |
| $.jStorage.set( summaryStorageKey, summaries );
| |
| rbParams.summary = replaceTokens( summary );
| |
| }
| |
| var talkPageMessageName = $.trim( talkPageInputbox.val() ),
| |
| talkPageSummary = $.trim( talkPageSummaryInputbox.val() );
| |
| if ( talkPageMessageName ) {
| |
| if ( talkPageMessage ) {
| |
| talkPageMessages[ talkPageMessageName ] = { m: talkPageMessage, s: talkPageSummary };
| |
| } else
| |
| delete talkPageMessages[ talkPageMessageName ];
| |
| $.jStorage.set( userTalkStorageKey, talkPageMessages );
| |
| }
| |
| if ( talkPageMessage )
| |
| talkPageMessage = '\n' + replaceTokens( talkPageMessage );
| |
| rollback( watchArticleCheckbox.prop( 'checked' ), watchTalkpageCheckbox.prop( 'checked' ) );
| |
| $(this).dialog( 'close' );
| |
| } },
| |
| { text: i18n( 'read boilerplate button' ), click: function() {
| |
| var source = prompt( i18n( 'enter boilerplate source' ), i18n( 'default boilerplate page') );
| |
| if ( source ) {
| |
| $.ajax( {
| |
| url: mw.util.wikiScript(),
| |
| cache: false,
| |
| data: {title: source, action: 'raw', ctype: 'text/x-wiki'},
| |
| success: function( data ) {
| |
| try {
| |
| eval( 'talkPageMessages = ' + data );
| |
| prepareTalkpageSelector();
| |
| $.jStorage.set( userTalkStorageKey, talkPageMessages );
| |
| } catch(e) {
| |
| alert( i18n( 'exception reading boilerplates', source, e ) );
| |
| }
| |
| }
| |
| } );
| |
| }
| |
| } },
| |
| { text: i18n( 'cancel' ), click: function() { $( this ).dialog( 'close' ); } }
| |
| ]
| |
| } )
| |
| .append( $( '<p>' ).html( i18n( 'description', title, from, $this.text() ) ) )
| |
| .append( $( '<table>' )
| |
| .append( $( '<tr>' )
| |
| .append( $( '<td>', { text: i18n( 'summary' ) } ) )
| |
| .append( summaryInputbox )
| |
| )
| |
| .append( $( '<tr>' )
| |
| .append( $( '<td>', { text: i18n( 'summaryhist' ) } ) )
| |
| .append( summarySelector )
| |
| )
| |
| .append( $( '<tr>' )
| |
| .append( $( '<td>', { text: i18n( 'watch article', title ) } ) )
| |
| .append( watchArticleCheckbox )
| |
| )
| |
| .append( $( '<tr>' )
| |
| .append( $( '<td>', { text: i18n( 'talkpagename' ) } ) )
| |
| .append( talkPageInputbox )
| |
| )
| |
| .append( $( '<tr>' )
| |
| .append( $( '<td>', { text: i18n( 'talkpagemessage', from ) } ) )
| |
| .append( talkPageTextbox )
| |
| )
| |
| .append( $( '<tr>' )
| |
| .append( $( '<td>', { text: i18n( 'talkpagesummary', from ) } ) )
| |
| .append( talkPageSummaryInputbox )
| |
| )
| |
| .append( $( '<tr>' )
| |
| .append( $( '<td>', {text: i18n( 'talkpagemessagehist' ) } ) )
| |
| .append( talkPageSelector )
| |
| )
| |
| .append( $( '<tr>' )
| |
| .append( $( '<td>', { text: i18n( 'watch talkpage', from ) } ) )
| |
| .append( watchTalkpageCheckbox )
| |
| )
| |
| );
| |
| dialog.dialog( 'option', { width: 'auto', height: 'auto' } );
| |
| dialog.dialog( 'option', { position: { my: 'center', at: 'center', of: window } } );
| |
| dialog.dialog( 'option', { width: '100', height: '100' } ); // this perversion is for rtl: we need to force a redraw.
| |
| dialog.dialog( 'option', { width: 'auto', height: 'auto' } );
| |
| dialog.dialog( 'option', { position: { my: 'center', at: 'center', of: window } } ); // ditto.
| |
| } // e.type == contextmenu
| |
| }, // onRollbackClick
| |
|
| |
|
| i18n = function () {
| | // Add links into the sidebar |
| var str = arguments[0];
| |
| switch ( mw.config.get( 'wgUserLanguage' ) ) {
| |
| case 'he':
| |
| switch ( str ) {
| |
| case 'description':
| |
| str = 'ניתן (אין חובה) להזין תקציר עריכה לשחזור, ו/או הודעה שתישמר בדף השיחה של %2.<br />'
| |
| + '$1 יוחלף בשם הדף (%1),<br />'
| |
| + '$2 יוחלף בשם המשתמש (%2)<br />'
| |
| + '$3 יוחלף בכותרת הקישור (%3)'
| |
|
| |
|
| break;
| | var addtoolboxlinks = "p-tb" |
| case 'dialogtitle':
| |
| return 'שחזור עריכה';
| |
| case 'success':
| |
| str = '%1 של %2 בוצע';
| |
| break;
| |
| case 'ok':
| |
| return 'אישור';
| |
| case 'cancel':
| |
| return 'ביטול';
| |
| case 'rightclick':
| |
| return 'לחיצה בכפתור ימני מאפשרת להוסיף תקציר.'
| |
| case 'summary':
| |
| return 'תקציר עריכה:';
| |
| case 'summaryhist':
| |
| return 'תקצירים קודמים:';
| |
| case 'talkpagename':
| |
| return 'שם ההודעה בדף שיחה:';
| |
| case 'talkpagemessagehist':
| |
| return 'הודעות דף שיחה קודמות:';
| |
| case 'talkpagemessage':
| |
| str = 'הודעה לדף השיחה של %1:';
| |
| break;
| |
| case 'read boilerplate button':
| |
| return 'קריאת ההודעות מדף';
| |
| case 'enter boilerplate source':
| |
| return 'הזינו את שם הדף בו נמצאות ההודעות המוכנות';
| |
| case 'default boilerplate page':
| |
| return 'משתמש:Neukoln/msgs.js';
| |
| case 'exception reading boilerplates':
| |
| str = 'שגיאה בניסיון לקריאת תבניות מדף "%1". השגיאה היא: %2';
| |
| break;
| |
| case 'watch article':
| |
| str = 'הוסף את הדף %1 לרשימת המעקב';
| |
| break;
| |
| case 'watch talkpage':
| |
| str = 'הוסף את דף השיחה של משתמש:%1 לרשימת המעקב';
| |
| break;
| |
| case 'user talk':
| |
| str = 'שיחת משתמש:%1';
| |
| break;
| |
| case 'talkpagesummary':
| |
| return 'תקציר להודעה בשיחת משתמש';
| |
| case 'talk success':
| |
| str = 'ההודעה:<br />%1<br />נשמרה בהצלחה בדף "שיחת משתמש:%2"';
| |
| break;
| |
| }
| |
| break;
| |
| default:
| |
| switch ( str ) {
| |
| case 'description':
| |
| str = 'You can enter a summary for the rollback instead of the default, '
| |
| + 'and an optional message to be added to %2 talk page<br />'
| |
| + '$1 will be replaced by page name (%1),<br />'
| |
| + '$2 will be replaced by user name (%2),<br />'
| |
| + '$3 will be replaced by rollover text (%3).';
| |
| break;
| |
| case 'dialogtitle' :
| |
| return 'Rollback summary';
| |
| case 'success':
| |
| str = 'Successfully rolled back %1 by %2';
| |
| break;
| |
| case 'ok':
| |
| return 'OK';
| |
| case 'cancel':
| |
| return 'Cancel';
| |
| case 'rightclick':
| |
| return 'Use right mouse button to add summary.'
| |
| case 'summary':
| |
| return 'Summary:';
| |
| case 'summaryhist':
| |
| return 'Summary history:';
| |
| case 'talkpagename':
| |
| return 'Talk page message name:';
| |
| case 'talkpagemessagehist':
| |
| return 'Talk page message name history:';
| |
| case 'talkpagemessage':
| |
| return 'Talk page message:';
| |
| case 'talk success':
| |
| str = 'Message %1 was successfuly saved in %2 talkpage';
| |
| break;
| |
| case 'read boilerplate button':
| |
| return 'Read messages';
| |
| case 'enter boilerplate source':
| |
| return 'Please enter page name from which to read boilerplate messages';
| |
| case 'default boilerplate page':
| |
| return '';
| |
| case 'exception reading boilerplates':
| |
| str = 'Exception trying to interpret Page "%1". Exception is: %2';
| |
| break;
| |
| case 'watch article':
| |
| str = 'Add page "%1" to your watchlist';
| |
| break;
| |
| case 'watch talkpage':
| |
| str = 'Add "User talk:%1" to your watchlist';
| |
| break;
| |
| case 'user talk':
| |
| str = 'User talk:%1';
| |
| break;
| |
| case 'talkpagesummary':
| |
| return 'Summary for talk page message';
| |
| case 'talk success':
| |
| str = 'Successfuly added<br />%1<br />To page User talk:%2';
| |
| break;
| |
| }
| |
| break;
| |
| }
| |
| for ( var arg = 1; arg < arguments.length; arg++ )
| |
| str = str.replace( new RegExp( '%' + arg, 'g' ), arguments[ arg ] );
| |
| return str;
| |
| };
| |
|
| |
|
| $( 'a[href *= "action=rollback"]' ).on( 'click contextmenu', onRollbackClick );
| | addOnloadHook( |
| var tries = 0,
| | function() { |
| timer = setInterval( function() {
| | addPortletLink(addtoolboxlinks, 'http://www.ssbwiki.com/index.php?title=SmashWiki:Sandbox&action=edit', 'SmashWiki Sandbox') |
| if ( window.removeTooltip ) {
| | } |
| $( 'a[href *= "action=rollback"]' ).each( function() {
| | ); |
| window.removeTooltip( this );
| | addOnloadHook( |
| this.title += " \n" + i18n( 'rightclick' );
| | function() { |
| })
| | addPortletLink(addtoolboxlinks, 'http://www.ssbwiki.com/index.php?title=User:INoMed/sandbox&action=edit', 'Personal Sandbox') |
| clearInterval( timer );
| | } |
| } else if ( tries++ > 30 )
| | ); |
| clearInterval( timer );
| | addOnloadHook( |
| }, 100 );
| | function() { |
| } ); // document ready | | addPortletLink(addtoolboxlinks, 'http://www.ssbwiki.com/index.php?title=Special:PrefixIndex/User:INoMed/', 'Show my subpages') |
| } ); // using </source>
| | } |
| | ); |