This script/stylesheet is for PERSONAL use only!
You are free to install this script/stylesheet for yourself, but it is not allowed to be used wiki-wide (e.g., in MediaWiki:ImportJS, MediaWiki:Common.js, MediaWiki:Common.css, MediaWiki:Fandomdesktop.js, MediaWiki:Fandomdesktop.css, or MediaWiki:FandomMobile.css), as it would violate Fandom's Terms of Use.
(See the customization policy)
IgnoreNotifications kullanıcıların, belirtilen kriterlere göre OnSiteNotifications'tan gelen bildirimleri otomatik olarak okundu olarak işaretlemesine olanak tanır. OnSiteNotifications, oturum açmış kullanıcılar için genel gezinme çubuğundaki zil simgesinin altında görünen yeni bildirim sistemidir. IgnoreNotifications, AnnouncementsIgnore tarafından kullanılan kavramı alır, tüm bildirim türlerine genişletir ve wiki, kullanıcı, bildirim türü, zaman ve istisnalara dayalı karmaşık kriterler oluşturma yeteneği ekler.
Installation
Configuration
Bu bölüm, yapılandırma ayarlarını kısaca açıklamaya ayrılmıştır. Betiğinin hangi bildirimlerin reddedileceğini nasıl belirlediği hakkında daha fazla ayrıntı için lütfen filtre ve bildirim işleme hakkındaki ayrı bölüme bakın.
Bu betik, kendi yapılandırma ayarlarına sahip olan GetOnSiteNotifications'a bağlıdır. GetOnSiteNotifications yapılandırma ayarları, bu betiğinin bazı yapılandırma ayarları ve/veya bu betiğinin alabileceği veriler için izin verilen değerleri sınırlayarak bu betiğini etkileyebilir. GetOnSiteNotifications'ı yapılandırma yönergeleri için lütfen kendi belgelerindeki yapılandırma bölümüne bakın.
Bu betiğinin yapılandırma seçenekleri, bireylerin bir bildirimin reddedilip reddedilmeyeceğini (yani okundu olarak işaretlenip işaretlenmediğini) belirlemek için kullanılan verileri ve filtreleri (yani ölçütleri) kontrol etmesine olanak tanır. Seçenekler, betiğinin içe aktarılmasının üzerinde aşağıdaki kod satırlarıyla bir kullanıcının kişisel JS'si içinde oluşturulabilen betiğinin yapılandırma nesnesinin özellikleridir.
if (!window.andrewds1021) {
window.andrewds1021 = {
ignore_notifications: {}
};
} else if (!window.andrewds1021.ignore_notifications) {
window.andrewds1021.ignore_notifications = {};
}
Belirli bir seçeneği ayarlamak için, betiğinin yapılandırma nesnesi ile betiği içe aktarması arasına bir kod satırı yerleştirin. Aşağıdaki biçimi takip etmelidir; burada property, aşağıdaki tabloda listelendiği gibi seçenek adıyla değiştirilir ve value, istenen değerle değiştirilir.
window.andrewds1021.ignore_notifications.property = value;
Bu örnek, no_conversion ögesini true olarak ayarlar. Bu, betiğinin AnnouncementsIgnore için önceden var olan ayarları bir filtreye dönüştürmesini engeller.
window.andrewds1021.ignore_notifications.no_conversion = true;
| Seçenek adı | Veri türü | Varsayılan değer | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Açıklama | ||||||||||||||||||||||||||
no_conversion |
boole | false
| ||||||||||||||||||||||||
false ise, betik AnnouncementsIgnore ayarlarını kontrol eder. Geçerli ayarlar bulunursa, betik bu ayarları bir filtreye dönüştürür ve bu filtreyi diğer filtreler listesine ekler. Bu, AnnouncementsIgnore ögesinin bu betikle değiştirilmesinin herhangi bir ayar değişikliği gerektirmediği anlamına gelir. true ise, bu betik, mevcut ve geçerli olsalar bile AnnouncementsIgnore ayarlarını dönüştürmez.
| ||||||||||||||||||||||||||
limit |
sayı | GetOnSiteNotifications üzerinden default_limit
| ||||||||||||||||||||||||
Bu seçenek, Fandom'un sunucularına istek başına alınan maksimum bildirim sayısını ayarlar. Tüm geçerli bildirimler alınana kadar ek istekler yapılacaktır. Daha düşük bir sınır, istek başına daha az veri, ancak daha fazla istek anlamına gelir. Daha yüksek bir limit tam tersi anlamına gelir; istek başına daha fazla veri ancak daha az istek. Yükleme süresini en aza indirmek istiyorsanız, yüksek limitler muhtemelen alt limitlerden daha iyidir. Sınır pozitif bir tam sayı olmalıdır ve Fandom tarafından belirlenen katı sınırı (şu anda 50) geçmemelidir.
| ||||||||||||||||||||||||||
all_users |
boole | false
| ||||||||||||||||||||||||
false ise, betik yalnızca Fandom'un sunucuları tarafından döndürülen ilk bilgileri alır. Bu, her bildirim için en fazla 5 kullanıcının döndürüleceği anlamına gelir. Bildirim 5'ten fazla kullanıcıyı içeriyorsa, kapatılmayacaktır. true ise, betik her bildirim için tüm kullanıcıları almaya çalışır. Denemenin başarılı olduğu varsayılarak, 5'ten fazla kullanıcıya sahip bildirimler, tam kullanıcı listesi kullanılarak işten çıkarılma için değerlendirilecektir. Ancak bu, Fandom'un sunucularına gönderilen isteklerin sayısını artıracak ve böylece sayfa yükleme ile bildirimin kapatılması arasındaki gecikmeyi artıracaktır.
| ||||||||||||||||||||||||||
ignore_errors |
boole | false
| ||||||||||||||||||||||||
Fandom sunucularının mevcut durumu nedeniyle, bildirim verilerini almaya çalışırken hatalarla karşılaşmak yaygındır. Bu seçenek false olarak ayarlanırsa, bildirim verileri alınırken hatalarla karşılaşılırsa betik hiçbir bildirimi reddetmez. Çok sayıda bildirimi olan kullanıcılar için, bir hata oluşması neredeyse garantidir ve bu nedenle betiğinin bir bildirimi reddetmesi pek olası değildir. true olarak ayarlanırsa, betik, eksiksiz bir bildirim verisi seti elde edememiş olsa bile, işten çıkarma bildirimlerini değerlendirmeye devam edecektir. Bu, betiğin her seferinde ilerlemesine izin verecek olsa da, tutulması gereken bir bildirimi reddetme riskini de beraberinde getirir.
| ||||||||||||||||||||||||||
whitelist |
boole | false
| ||||||||||||||||||||||||
false ise, filtrelerin en üst düzeyi kara liste olarak kabul edilir. Başka bir deyişle, filtrelerle eşleşirse bir bildirim reddedilecektir. true ise, filtrelerin en üst düzeyi beyaz liste olarak kabul edilir. Bu, filtrelerle eşleşmemeleri durumunda bildirimlerin reddedileceği anlamına gelir.
| ||||||||||||||||||||||||||
delay |
sayı veya nesne | 0
| ||||||||||||||||||||||||
Bir bildirim reddedildikten sonra, aynı hedefle ilgili ek olaylar yeni bir ayrı bildirimde sunulur. Bildirimler hemen reddedilirse, bu her olaya kendi bildiriminin verileceği anlamına gelir. Belirli bir hedef çok aktifse, bu, kullanıcının bildirim açılır menüsünü taşabilir. Bu sorunu önlemek için bu seçenek, kullanıcının bir gecikme ayarlamasına olanak tanır. En son olay belirtilen yaştan daha gençse betik bir bildirimi reddetmez. Sayı olarak belirtilirse, birimler milisaniyedir (1000 milisaniye = 1 saniye). Sayı, pozitif bir tam sayı veya 0 olmalıdır. Bir nesne olarak belirtilirse, gecikme, nesnenin seçenekleri (yani özellikler) tarafından belirtilen sürelerin toplamıdır. Aşağıdaki tablo, tümü pozitif sonlu sayılar veya 0 olması gereken tanınan seçenekleri açıklar. Bildirimlerin 30 gün sonra Fandom'un sunucularından silindiğini unutmayın. Bu nedenle, gecikmeyi 30 günden fazla ayarlamak, betiği etkin bir şekilde devre dışı bırakacaktır.
| ||||||||||||||||||||||||||
filters |
nesne veya nesne dizisi | hiçbiri | ||||||||||||||||||||||||
Bu, filtrelerin en üst seviyesidir. Tek bir filtre veya bir filtre listesi (yani dizi) olabilir. Bir bildirim, filtrelerden en az biriyle eşleşiyorsa, bir filtre listesiyle eşleşir. Her filtre, aşağıdaki tabloda açıklanan seçeneklerden bir veya daha fazlasına sahip bir nesnedir. Bildirimler işlenirken kimlikler ve adlar tek bir liste olarak kabul edilir. Bir viki/kullanıcı kimliği ile belirtilmişse, adın verilmesi gerekli değildir. Tersi de doğrudur; isim belirtilmişse kimliğin verilmesi gerekli değildir. Karar süreciyle ilgili daha fazla ayrıntı için lütfen filtre ve bildirim işlemeyle ilgili ayrı bölüme bakın.
| ||||||||||||||||||||||||||
Vikiler/kullanıcılar, adları veya sayısal kimlikleri kullanılarak filtrelerde belirtilebilir. Bir ad vermek daha kolay olsa da, bir kimlik sağlamak biraz daha etkilidir. Bunun nedeni, vikilerin/kullanıcıların adlarını değiştirebilmeleridir. Bir viki/kullanıcı adını değiştirirse, düzgün çalışmaya devam etmek için filtrelerin yeni adla güncellenmesi gerekir. Ancak, yeniden adlandırma kimliği değiştirmez. Bu nedenle, adlar yerine kimliklerin sağlanması, bir wiki/kullanıcının yeniden adlandırma yapması durumunda filtrelerin güncellenmesi gerekmeyeceği anlamına gelir. Bir vikinin kimliğini bulmanın en kolay yolu Special:Version sayfasına gitmektir. Kimlik "city_id" olarak etiketlenmiştir ve özel sayfanın "Yüklü Yazılım" bölümünde bulunabilir. Aşağıda kırmızı bir kutu ile işaretlenmiş wiki kimliğine sahip bir resim bulunmaktadır.

Bir kullanıcının kimliğini bulmanın en az iki yolu vardır. İlki, Tartışmalar'daki gönderilerin listesini görüntülemektir (örnek). URL'nin sonundaki sayı, kullanıcının kimliğidir. Bir Tartışmalar gönderisindeki avatarlarına veya adlarına tıklayarak bu listeye ulaşabilirsiniz. Bir gönderi bulmakta sorun yaşıyorsanız Special:UserProfileActivity kullanarak bir gönderi bulabilirsiniz. İkinci yöntem api.php kullanmaktır (örnek). Aşağıda, kullanıcı kimliğinin kırmızı bir kutu ile işaretlenmiş olduğu bir resim bulunmaktadır. Kullanıcı yeni bir hesap oluşturursa, o hesabın farklı bir kimliğe sahip olacağını unutmayın.

Example
Bu örnek, betiğini veri alma hatalarını yok sayacak, tam kullanıcı listeleri talep edecek ve Topluluk Merkezi'nden gelen duyuruları hemen engelleyecek şekilde yapılandırır.
window.announcementsIgnore.option = "opt-in-all";
window.announcementsIgnore.exceptWikiIds = [177];
window.andrewds1021.ignore_notifications.ignore_errors = true;
window.andrewds1021.ignore_notifications.all_users = true;
Bu örnek, öncekiyle aynı şeyi yapar ancak AnnouncementsIgnore'daki ayarların otomatik olarak dönüştürülmesini kullanmaz.
window.andrewds1021.ignore_notifications.ignore_errors = true;
window.andrewds1021.ignore_notifications.all_users = true;
window.andrewds1021.ignore_notifications.filters = {
types: "announcement-target",
wiki_ids: 177
};
Bu örnek, Topluluk Merkezi'nden gelenler dışındaki tüm duyuruları engeller.
window.andrewds1021.ignore_notifications.filters = {
types: "announcement-target",
not: {wiki_ids: 177}
};
Bu örnek, olumlu oylar dışında tüm bildirimleri engeller. Ayrıca, Topluluk Merkezi'nden olmayan Andrewds1021 kullanıcıdan gelen yükseltmeleri de engeller.
window.andrewds1021.ignore_notifications.whitelist = true;
window.andrewds1021.ignore_notifications.filters = {
types: "discussion-upvote",
not: {
user_ids: 9605025,
not: {wiki_ids: 177}
}
};
Yalnızca eğlence için, işte önceki örneği yazmanın başka bir yolu.
window.andrewds1021.ignore_notifications.whitelist = true;
window.andrewds1021.ignore_notifications.filters = [
{
types: "discussion-upvote",
not: {user_ids: 9605025}
},
{
types: "discussion-upvote",
user_ids: 9605025,
wiki_ids: 177
}
];
İşte aynı sonucu elde etmenin başka bir yolu. Bununla birlikte, bu biraz daha fazla yazma gerektiriyor.
window.andrewds1021.ignore_notifications.filters = [
{
types: [
"announcement-target",
"article-comment-at-mention",
"article-comment-reply",
"article-comment-reply-at-mention",
"discussion-post",
"message-wall-post",
"message-wall-thread",
"post-at-mention",
"talk-page-message",
"thread-at-mention"
]
},
{
types: "discussion-upvote",
user_ids: 9605025,
not: {wiki_ids: 177}
}
];
Filtre ve bildirim süreci
Başlangıçta, betik kullanıcı tarafından sağlanan filtreleri kopyalayacak ve temizleyecektir. Listedeki her filtre için wiki_ids, wiki_names, user_ids, user_names ve types kontrol edecek ve filtreleyecektir dize veya sayı olmayan tüm değerleri çıkarır. Ardından age ayrıştırılacak ve not kopyalanacak ve sterilize edilecektir. Betik bir filtre dalında ilerlerken, o daldaki ataları takip eder. değil bir üst ögeye kaynak içeriyorsa, üst öge not öğesinden kaldırılır ve o dal bağlamında daha fazla işlenmez. Bu, filtre döngülerini önlemek için yapılır.
Betik, mevcut verilere dayanarak işten çıkarma kararları verir. Eksik veriler varsa, yanlış bir karar verebilir. Eksik verilerin iki ana olası nedeni, GetOnSiteNotifications yapılandırması tarafından belirlenen kısıtlamalar ve veri alımı sırasında karşılaşılan hatalardır.
Betiğinin, bir bildirimin reddedilmesini otomatik olarak önleyecek kontrol ettiği bazı koşulları vardır.
delaybelirtildi ve en son olay belirtilen yaştan daha genç- bildirim için alınan veriler tam bir kullanıcı listesi içermiyor
- bildirimi reddetmek, saklanması gereken başka bir bildirimi de reddeder
- Bildirim sisteminin şu anda çalışma şekli, yalnızca tek bir bildirimi reddetmek her zaman mümkün değildir. Örneğin, bir kullanıcı başlattığınız bir konuya olumlu oy verir ve yanıt verirse, iki bildirim alırsınız; biri olumlu oy için, diğeri yanıt için. Bu durumda tebligat sistemi iki tebligattan yalnızca birinin reddine izin vermemektedir.
Yukarıdaki kriterlerden hiçbirinin karşılanmadığını varsayarsak, betik, filtre moduna (kara listeye karşı beyaz listeye) ve bir bildirimin filtrelerle eşleşip eşleşmediğine bağlı olarak işten çıkarma kararları alacaktır. Bildirim, kara listedeki filtrelerle eşleşirse veya beyaz listedeki filtrelerle eşleşmezse reddedilir. Bildirim, listedeki filtrelerden en az biriyle eşleşiyorsa, bir filtre listesiyle eşleşir. Bildirimin tek bir filtreyle eşleşip eşleşmediğini belirlerken 5 kriter vardır: viki, kullanıcı, bildirim türü, yaş ve istisnalar.
Bildirim istisnalar listesiyle eşleşiyorsa, filtreyle eşleşmez. Bir filtrenin istisnalar listesi, filtrenin karşıt liste türü olarak değerlendirilir. Başka bir deyişle, kara liste filtresinin istisnaları beyaz liste filtreleri olarak, beyaz liste filtresinin istisnaları ise kara liste filtreleri olarak kabul edilir. Herhangi bir istisna listelenmemişse, bildirim istisnalar listesiyle eşleşmez.
Bildirimin geldiği vikiyi kontrol ederken, wiki_ids ve wiki_names hangi vikilerin aranacağını açıklayan tek bir listede etkin bir şekilde birleştirilir. Kimliği veya adı listeleniyorsa veya hiçbir wiki listelenmemişse, bildirimin vikinin eşleştiği kabul edilir.
Bir bildirimin kullanıcı listesini kontrol ederken, user_ids ve user_names benzer şekilde birleştirilir ve filtrede hiçbir kullanıcı listelenmemişse bildirim listesinin eşleştiği kabul edilir. Kullanıcılar filtrede listeleniyorsa, eşleştirme kriterleri filtre moduna bağlıdır. Kara liste filtresi için, bildirim listesindeki tüm kullanıcıların da filtre listesinde olması gerekir. Beyaz liste filtresi için bildirim kullanıcılarından en az birinin filtre listesinde olması gerekir.
Bildirim türünü kontrol etmek basittir. Bildirimin türü, filtrenin tür listesindeyse veya filtrede herhangi bir tür listelenmemişse eşleşir. Bildirimin wiki'si, kullanıcı listesi ve türü filtreyle eşleşiyorsa ve bildirim filtrenin istisnalar listesiyle eşleşmiyorsa, bildirim filtreyle eşleşir.
Bir bildirimin en son olayının yaşı, age ile kontrol edilir. Bildirim verisi isteğinin başlangıç zamanı, 0 yaşı olarak kabul edilir. Bir kara liste için, en son olay belirtilen yaştan daha eskiyse bildirim yaş kriterleriyle eşleşir. Beyaz liste için, en son olay belirtilen yaştan daha gençse bildirim yaş kriterleriyle eşleşir. Yaş belirtilmemişse, eşleşme olarak kabul edilir.
Bağımlılıklar
NOT: Bu betik tüm bağımlılıkların içe aktarılmasını yönetir.
Geriye dönük uyumlu olmayan değişiklikler
- 3 Haziran 2021: FandomDesktop görünümü ile ilk uyumluluk eklemesi tamamlandı. Ancak, FandomDesktop'taki bildirimlerin mevcut durumu nedeniyle, Duyuru bildirimlerinin benzersiz olarak tanımlanamayacağı bir köşe durumu vardır. Bu, aynı hedef URL ile iki veya daha fazla farklı bildirim yayınlandığında meydana gelir. Bu, aşağıdaki kriterlerin tümü karşılandığında sorunlara neden olacaktır.
- Aynı hedef URL'ye sahip birden fazla okunmamış duyuru var
- En az biri bu betik tarafından okundu olarak işaretlenmelidir
- En az biri bu betik tarafından okundu olarak işaretlenmemelidir
- Neden olan sorun, okundu olarak işaretlenmemesi gereken yüklenen bildirimlerin ekranda okundu olarak işaretlenmesidir. Ancak, veritabanında okunmamış olarak kalacaklar ve sonraki sayfa yüklendiğinde olduğu gibi görüntülenmelidirler.
- 2 Haziran 2021: Eski platform (MediaWiki 1.19.24) için uyumluluk kaldırıldı. Bu, artık kullanıcılara yönelik eski wiki kalmadığı için yapıldı.
- 1 Nisan 2021: Gerekli API uç noktasının güvenilir olmaması nedeniyle engellenemeyen kullanıcılar listesi kaldırıldı. Bu betiğinin kullanıcıları bunun farkında olmalı ve bu betik Fandom Personeli, Yardımcılar, SOAP ve Viki Yöneticileri/Temsilcileri gibi küresel kullanıcı gruplarının üyelerinden gelen iletişimleri okumamak veya yanıtlamamak için bir bahane olarak kullanmamalıdır.