Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.

  • Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
  • Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
  • Internet Explorer / Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5
  • Opera: натисніть Ctrl-F5
/*
Всілякі корисні функції для роботи з вікіпедією. 

importScript('Користувач:Bunyk/utils.js');

Створює два об’єкти - window.wlib, та window.utils.
<nowiki>
*/

if (typeof(window.wlib) == 'undefined') {
	window.wlib = {
		get_current_page_categories: function() {
			return mw.config.get('wgCategories');
		},
		get_page_namespace: function() {
			return mw.config.get('wgNamespaceNumber');
		},
		get_current_page_name: function () {
			return mw.config.get('wgPageName');
		},
		add_menu_item: function (div_id, text, action, item_id, item_hint) {
			// div_id: p-cactions - для пункту в меню вкладки "ще" сторінки
			//         p-views - для вкладок вгорі сторінки (редагувати, історія, додати до вибраного)
			//         p-tb - для меню "панель інструментів"
			// text:   текст меню
			// action: функція що виконається при натисненні
			// item_id: ідентифікатор пункту меню
			// item_hint: підказка меню
			var link = mw.util.addPortletLink(div_id, '#',  text, item_id, item_hint);
			$(link).click(function (e) {
				e.preventDefault();
				action();
			});
		},
		EDIT_ERRORS:  {
			'editconflict': 'Конфлікт редагувань на сторінці {PAGENAME}.' +
				'Відкиньте редагування, зроблені цим додатком за останні ' +
				'декілька секунд та спробуйте ще раз',

			'protectedtitle': 'Сторінка {PAGENAME} захищена. Зв\'яжіться з ' +
				'адміністраторами на сторінці ВП:Запити до адміністраторів',
				
			'spamdetected': 'При редагуванні сторінки {PAGENAME} ' +
				'автоматичний фільтр визначив ваш текст, як спам',
			
			'blocked': 'Ви заблоковані у цій вікі. Спробуйте, будь ласка, пізніше',
			
			'filtered': 'Автоматичний фільтр заборонив редагування сторінки {PAGENAME}',
			'abusefilter-disallowed': 'Автоматичний фільтр заборонив редагування сторінки {PAGENAME}',
			
			'notoken': 'Неможливо отримати токен. Зверніться, будь ласка, у «Кнайпу (адміністрування)»',
		},
		write_page: function(title, content, summary, section, success, timestamp, bot) {
			var param = {
				action: 'edit',
				title: title, 
				summary: summary,
				text: content,
				watchlist: 'watch',
				basetimestamp: timestamp,
				bot: bot,
				token: mw.user.tokens.get('editToken'),
				format: 'json'
			};
			if (section || section === 0) 
				param.section = section;
			console.log('API: ', param);
			$.post(mw.util.wikiScript('api'), param).done( function(data) {
				if (data.hasOwnProperty('edit') && data.edit.result == 'Success') {
					success();
				} else if (data.hasOwnProperty('edit') && data.edit.result == 'Failure') {
					if(data.edit.hasOwnProperty('code')) {
						var code = data.edit.code;
						alert(utils.getattr(
							wlib.EDIT_ERRORS, code, 
							'Невідома помилка при редагуванні сторінки {PAGENAME}. Відкиньте редагування, зроблені цим додатком за останні декілька секунд та спробуйте пізніше'
						).replace('{PAGENAME}', title));
					} else if(data.edit.hasOwnProperty(captcha)) {
						alert('API Вікіпедії повернув капчу, яку цей додаток поки що не підтримує. Можливо ви занадто часто робите редагування? Спробуйте, будь ласка, через декілька хвилин');
					}
				}
			});
		},
		get_last_page_revision: function(title, on_success) {
			var param = {
				action: 'query',
				prop: 'revisions',
				format: 'json',
				rvprop: 'content|timestamp',
				rvlimit: '1',
				titles: title,
				indexpageids: ''
			};
			$.get(mw.util.wikiScript('api'), param).done(function(data) {
				on_success(data.query.pages[data.query.pageids[0]].revisions[0]);
			});
		},
	};

	console.log('Installed wlib');
}
if (typeof(window.utils) == 'undefined') {
	window.utils = {
		getattr: function(o, prop, def) {
    		if (o[prop] !== undefined) return o[prop];
			else return def;
		},
		monthNames: [
  			"січня", "лютого",
  			"березня", "квітня", "травня",
  			"червня", "липня", "серпня",
  			"вересня", "жовтня", "листопада",
  			"грудня"
  		],
  		format_date: function(date) {
			var day = date.getDate();
			var monthIndex = date.getMonth();
			var year = date.getFullYear();
			return day + ' ' + utils.monthNames[monthIndex] + ' ' + year;
		}
	};
	console.log('Installed utils');
}