Fetch — це бібліотека для отримання та кешування запитів API. Він також включає спеціальну підтримку отримання та обробки системних повідомлень.
Usage[]
Імпортування[]
Щоб імпортувати та використовувати бібліотеку Fetch усередині вашого скрипта, використовуйте таке:
mw.hook('dev.fetch').add(function (fetch) {
// your code here
});
importArticle({
type: 'script',
article: 'u:dev:MediaWiki:Fetch.js'
});
Методи[]
Бібліотека експортує метод window.dev.fetch, який приймає один параметр. Цей параметр може бути відформатований трьома способами.
- Якщо параметром є рядок, бібліотека отримає це повідомлення та поверне його як рядок. Якщо рядок містить кілька повідомлень, розділених
|(наприклад,block|userrights), він отримає кожне з повідомлень і поверне їх як функція. Виклик функції без параметра поверне об'єкт усіх повідомлень, тоді як надання параметра поверне значення цього ключа в об'єкті. Ключем може бути як ім'я повідомлення, так і його індекс. - Якщо параметром є масив, бібліотека отримає вказані повідомлення та поверне їх як функцію, що викликається (див. Вище).
- Якщо параметр є об'єктом, він може мати такі властивості, усі з яких є необов'язковими.
| Назва | Опис | За замовчуванням | Тип |
|---|---|---|---|
lang
|
Мова для отримання системних повідомлень. Використовувати лише з messages.
|
wgUserLanguage
|
рядок |
messages
|
Повідомлення системи, які потрібно отримати. | Не застосовується | рядок або масив |
process
|
Обробка, яка повинна бути застосована до даних перед їх поверненням. | Не застосовується | функція |
request
|
Виконання запиту API та зворотного виклику. | Не застосовується | функція |
time
|
Час у мілісекундах, протягом якого запит слід кешувати. | Один день | номер |
noCache
|
Чи слід запит кешувати. Не рекомендується, за винятком особистих цілей налагодження. | false
|
логічна |
After completing the API request or retrieving the cache, the library returns a promise.
Приклади[]
- Це отримує одне повідомлення.
mw.hook('dev.fetch').add(function (fetch) {
fetch('block').then(function (msg) {
$('.wds-list').append('<li>' + msg + '</li>');
});
});
- Це отримує кілька повідомлень.
mw.hook('dev.fetch').add(function (fetch) {
fetch('block|userrights').then(function (msg) {
$('.wds-list').append('<li>' + msg()[0] + msg('userrights') + '</li>');
});
});
- Це отримує кілька повідомлень німецькою мовою із затримкою на два дні.
mw.hook('dev.fetch').add(function (fetch) {
fetch({
lang: 'de',
messages: ['block', 'userrights'],
time: 2 * 24 * 60 * 60 * 1000
}).then(function (msg) {
$('.wds-list').append('<li>' + msg('block') + msg()[1] + '</li>');
});
});
- Це виконує та кешує запит API. Зверніть увагу, що функція
requestприймає два параметри, які слід використовувати для вирішення обіцянки бібліотеки.
mw.hook('dev.fetch').add(function (fetch) {
fetch({
request: function (resolve, reject) {
new mw.Api().get({
action: 'query',
titles: 'MediaWiki:ImportJS'
}).done(function (d) {
if (d.error) {
reject(d.error.code);
} else {
resolve(d.query.pages);
}
}).fail(function () {
reject();
});
},
name: 'PageExists'
}).then(function (d) {
if (!d[-1]) {
console.log('MediaWiki:ImportJS exists!');
}
});
});
Кеш[]
Кожен кеш за замовчуванням триває одну добу, після чого він оновлюється. Весь кеш Fetch також регулярно очищається приблизно кожні 100 завантажень сторінки. Щоб обійти цей кеш, просто додайте ?debug=1 до URL-адреси, яка вилучить кожен елемент Fetch і повторно запустить кожен запит API. В якості альтернативи використовуйте команди на клавіатурі Ctrl + F5 або Ctrl + ⇧ Shift + R, які зроблять те саме і перезавантажать сторінку. Щоб обійти кеш лише для одного сценарію, просто встановіть для параметра noCache значення true.
Утриманці[]
Журнал змін[]
| Version | Date | Description | Author |
|---|---|---|---|
| 1.0 | March 25, 2019 | Initial revision. | TheGoldenPatrik1 |
| 1.1 | April 2, 2019 | Cache messages. | TheGoldenPatrik1 |
| 1.2 | September 17, 2019 | Return a promise, cache API requests, add more parameters, support cache clearing. | TheGoldenPatrik1 |