dev

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.
Seçenek adı Veri türü Varsayılan değer Açıklama
days sayı 0 gün biriminde zaman
hours sayı 0 saat biriminde zaman
minutes sayı 0 dakika biriminde zaman
seconds sayı 0 saniye biriminde zaman
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.
Seçenek adı Veri türü Açıklama
wiki_ids sayı veya sayı dizisi bir vikinin kimliği veya eşleşecek viki kimliklerinin listesi
wiki_names dize veya dize dizisi the name of a wiki or a list of wiki names to match
user_ids sayı veya sayı dizisi bir kullanıcının kimliği veya eşleşecek kullanıcı kimliklerinin listesi
user_names dize veya dize dizisi bir kullanıcının adı veya eşleşecek kullanıcı adları listesi
types dize veya dize dizisi Bu, eşleşecek bildirim türü veya bildirim türlerinin listesidir. Bu tablo tanınan değerleri açıklar.
age sayı veya nesne Geçerli değerlerin açıklaması için lütfen dolay açıklamasına bakın. Aradaki fark, bu seçeneğin, belirtilmeden bırakılırsa veya geçersiz veya negatif bir sayı olarak belirtilirse varsayılan olarak 0 olarak ayarlanmamasıdır. Kara liste filtresi için, bildirimin reddedilebilmesi için bildirimin en son olayının belirtilen yaştan daha eski olması gerekir. Beyaz liste filtresi için, bildirimin tutulabilmesi için bildirimin en son olayının belirtilen yaştan küçük olması gerekir.
not nesne veya nesne dizisi Bu, ana filtreye istisna olarak davranan bir filtre veya filtre listesidir. Ana filtre bir kara listeye aitse, bunlar beyaz liste olarak kabul edilir. Ana filtre bir beyaz listeye aitse, bunlar kara liste olarak kabul edilir.

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.

IgnoreNotifications - Finding a Wiki ID

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.

IgnoreNotifications - Finding a User ID

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.

  1. delay belirtildi ve en son olay belirtilen yaştan daha genç
  2. bildirim için alınan veriler tam bir kullanıcı listesi içermiyor
  3. 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

  • 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.