mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-11-13 17:57:21 +00:00
7dbc05fd8b
* Use LinksUpdateComplete instead of the unusual hook LinksUpdateAfterInsert, which I want to deprecate. * Fix the fixme regarding revert detection in link events. It's not pretty but I confirmed that it works with undo and rollback. Bug: T297011 Change-Id: Ic0092a55e85a3db78db98f1a3dfdce74a7fa2b29
1174 lines
34 KiB
JSON
1174 lines
34 KiB
JSON
{
|
|
"name": "Echo",
|
|
"author": [
|
|
"Andrew Garrett",
|
|
"Ryan Kaldari",
|
|
"Benny Situ",
|
|
"Luke Welling",
|
|
"Kunal Mehta",
|
|
"Moriel Schottlender",
|
|
"Jon Robson",
|
|
"Roan Kattouw"
|
|
],
|
|
"url": "https://www.mediawiki.org/wiki/Extension:Echo",
|
|
"descriptionmsg": "echo-desc",
|
|
"license-name": "MIT",
|
|
"type": "specialpage",
|
|
"requires": {
|
|
"MediaWiki": ">= 1.37.0"
|
|
},
|
|
"APIMetaModules": {
|
|
"notifications": {
|
|
"class": "ApiEchoNotifications",
|
|
"services": [ "MainConfig" ]
|
|
},
|
|
"unreadnotificationpages": {
|
|
"class": "ApiEchoUnreadNotificationPages",
|
|
"services": [ "PageStore", "TitleFactory" ]
|
|
}
|
|
},
|
|
"APIModules": {
|
|
"echomarkread": "ApiEchoMarkRead",
|
|
"echomarkseen": "ApiEchoMarkSeen",
|
|
"echoarticlereminder": "ApiEchoArticleReminder",
|
|
"echomute": {
|
|
"class": "ApiEchoMute",
|
|
"services": [
|
|
"CentralIdLookup",
|
|
"UserOptionsManager"
|
|
]
|
|
}
|
|
},
|
|
"DefaultUserOptions": {
|
|
"echo-email-frequency": 0,
|
|
"echo-dont-email-read-notifications": false
|
|
},
|
|
"ExtensionFunctions": [
|
|
"EchoHooks::initEchoExtension"
|
|
],
|
|
"JobClasses": {
|
|
"EchoNotificationJob": "EchoNotificationJob",
|
|
"EchoNotificationDeleteJob": "EchoNotificationDeleteJob",
|
|
"EchoPushNotificationRequest": "EchoPush\\NotificationRequestJob"
|
|
},
|
|
"SpecialPages": {
|
|
"Notifications": "SpecialNotifications",
|
|
"DisplayNotificationsConfiguration": {
|
|
"class": "SpecialDisplayNotificationsConfiguration",
|
|
"services": [
|
|
"EchoAttributeManager",
|
|
"UserOptionsManager"
|
|
]
|
|
},
|
|
"NotificationsMarkRead": "SpecialNotificationsMarkRead"
|
|
},
|
|
"AvailableRights": [
|
|
"manage-all-push-subscriptions"
|
|
],
|
|
"GroupPermissions": {
|
|
"push-subscription-manager": {
|
|
"manage-all-push-subscriptions": true
|
|
}
|
|
},
|
|
"MessagesDirs": {
|
|
"Echo": [
|
|
"i18n",
|
|
"i18n/api"
|
|
]
|
|
},
|
|
"ExtensionMessagesFiles": {
|
|
"EchoAliases": "Echo.alias.php"
|
|
},
|
|
"QUnitTestModule": {
|
|
"localBasePath": "",
|
|
"remoteExtPath": "Echo",
|
|
"templates": {
|
|
"NotificationBadge.mustache": "modules/mobile/NotificationBadge.mustache"
|
|
},
|
|
"packageFiles": [
|
|
"tests/qunit/index.js",
|
|
"tests/qunit/mobile/test_NotificationBadge.js",
|
|
"modules/mobile/NotificationBadge.js",
|
|
"tests/qunit/model/test_mw.echo.dm.BundleNotificationItem.js",
|
|
"tests/qunit/model/test_mw.echo.dm.CrossWikiNotificationItem.js",
|
|
"tests/qunit/model/test_mw.echo.dm.FiltersModel.js",
|
|
"tests/qunit/model/test_mw.echo.dm.NotificationGroupsList.js",
|
|
"tests/qunit/model/test_mw.echo.dm.NotificationItem.js",
|
|
"tests/qunit/model/test_mw.echo.dm.NotificationsList.js",
|
|
"tests/qunit/model/test_mw.echo.dm.PaginationModel.js",
|
|
"tests/qunit/model/test_mw.echo.dm.SeenTimeModel.js",
|
|
"tests/qunit/model/test_mw.echo.dm.SourcePagesModel.js",
|
|
"tests/qunit/model/test_mw.echo.dm.UnreadNotificationCounter.js"
|
|
]
|
|
},
|
|
"ResourceModules": {
|
|
"ext.echo.logger": {
|
|
"packageFiles": [
|
|
"logger/mw.echo.Logger.js",
|
|
{
|
|
"name": "logger/config.json",
|
|
"callback": "EchoHooks::getLoggerConfigVars"
|
|
}
|
|
],
|
|
"dependencies": [
|
|
"oojs",
|
|
"mediawiki.user"
|
|
],
|
|
"targets": [
|
|
"desktop",
|
|
"mobile"
|
|
]
|
|
},
|
|
"ext.echo.ui.desktop": {
|
|
"scripts": [
|
|
"ui/mw.echo.ui.BadgeLinkWidget.js",
|
|
"ui/mw.echo.ui.NotificationBadgeWidget.js"
|
|
],
|
|
"styles": [
|
|
"styles/mw.echo.ui.NotificationBadgeWidget.less"
|
|
],
|
|
"dependencies": [
|
|
"ext.echo.ui",
|
|
"ext.echo.styles.badge",
|
|
"mediawiki.util",
|
|
"mediawiki.api"
|
|
],
|
|
"targets": [
|
|
"desktop"
|
|
]
|
|
},
|
|
"ext.echo.ui": {
|
|
"scripts": [
|
|
"controller/mw.echo.Controller.js",
|
|
"ui/mw.echo.ui.js",
|
|
"ui/mw.echo.ui.SortedListWidget.js",
|
|
"ui/mw.echo.ui.SubGroupListWidget.js",
|
|
"ui/mw.echo.ui.NotificationsListWidget.js",
|
|
"ui/mw.echo.ui.PlaceholderItemWidget.js",
|
|
"ui/mw.echo.ui.ToggleReadCircleButtonWidget.js",
|
|
"ui/mw.echo.ui.NotificationItemWidget.js",
|
|
"ui/mw.echo.ui.SingleNotificationItemWidget.js",
|
|
"ui/mw.echo.ui.CrossWikiNotificationItemWidget.js",
|
|
"ui/mw.echo.ui.BundleNotificationItemWidget.js",
|
|
"ui/mw.echo.ui.ClonedNotificationItemWidget.js",
|
|
"ui/mw.echo.ui.ActionMenuPopupWidget.js",
|
|
"ui/mw.echo.ui.MenuItemWidget.js",
|
|
"ui/mw.echo.ui.NotificationsWrapper.js",
|
|
"ui/mw.echo.ui.ConfirmationPopupWidget.js",
|
|
"ext.echo.moment-hack.js"
|
|
],
|
|
"styles": [
|
|
"styles/mw.echo.ui.mobile.less",
|
|
"styles/mw.echo.ui.overlay.less",
|
|
"styles/mw.echo.ui.NotificationItemWidget.less",
|
|
"styles/mw.echo.ui.ToggleReadCircleButtonWidget.less",
|
|
"styles/mw.echo.ui.CrossWikiNotificationItemWidget.less",
|
|
"styles/mw.echo.ui.NotificationsListWidget.less",
|
|
"styles/mw.echo.ui.PlaceholderItemWidget.less",
|
|
"styles/mw.echo.ui.SubGroupListWidget.less",
|
|
"styles/mw.echo.ui.ActionMenuPopupWidget.less",
|
|
"styles/mw.echo.ui.MenuItemWidget.less",
|
|
"styles/mw.echo.ui.NotificationsWrapper.less",
|
|
"styles/mw.echo.ui.ConfirmationPopupWidget.less"
|
|
],
|
|
"skinStyles": {
|
|
"modern": [
|
|
"styles/mw.echo.ui.overlay.monobook.less"
|
|
],
|
|
"monobook": [
|
|
"styles/mw.echo.ui.overlay.monobook.less"
|
|
],
|
|
"vector": [
|
|
"styles/mw.echo.ui.overlay.vector.less"
|
|
],
|
|
"minerva": [
|
|
"styles/mw.echo.ui.overlay.minerva.less"
|
|
],
|
|
"wikimediaapiportal": [
|
|
"styles/mw.echo.ui.overlay.wikimediaapiportal.less"
|
|
]
|
|
},
|
|
"dependencies": [
|
|
"ext.echo.api",
|
|
"ext.echo.dm",
|
|
"ext.echo.logger",
|
|
"ext.echo.secondaryicons",
|
|
"oojs",
|
|
"oojs-ui-core",
|
|
"oojs-ui-widgets",
|
|
"moment",
|
|
"mediawiki.jqueryMsg",
|
|
"mediawiki.language",
|
|
"mediawiki.Title",
|
|
"oojs-ui.styles.icons-user",
|
|
"oojs-ui.styles.icons-alerts",
|
|
"oojs-ui.styles.icons-content",
|
|
"oojs-ui.styles.icons-interactions",
|
|
"oojs-ui.styles.icons-moderation",
|
|
"oojs-ui.styles.icons-movement"
|
|
],
|
|
"messages": [
|
|
"echo-badge-count",
|
|
"echo-overlay-link",
|
|
"echo-mark-all-as-read",
|
|
"echo-mark-wiki-as-read",
|
|
"echo-notification-alert",
|
|
"echo-notification-notice",
|
|
"echo-notification-loginrequired",
|
|
"echo-notification-popup-loginrequired",
|
|
"notification-link-text-expand-all",
|
|
"notification-link-text-collapse-all",
|
|
"notification-link-text-expand-alert-count",
|
|
"notification-link-text-expand-notice-count",
|
|
"notification-link-text-expand-all-count",
|
|
"notification-timestamp-ago-seconds",
|
|
"notification-timestamp-ago-minutes",
|
|
"notification-timestamp-ago-hours",
|
|
"notification-timestamp-ago-days",
|
|
"notification-timestamp-ago-months",
|
|
"notification-timestamp-ago-years",
|
|
"notification-timestamp-today",
|
|
"notification-timestamp-yesterday",
|
|
"echo-notification-markasread",
|
|
"echo-notification-markasunread",
|
|
"echo-notification-markasread-tooltip",
|
|
"echo-notification-more-options-tooltip",
|
|
"echo-notification-alert-text-only",
|
|
"echo-notification-notice-text-only",
|
|
"echo-email-batch-bullet",
|
|
"echo-notification-placeholder",
|
|
"tooltip-pt-notifications-alert",
|
|
"tooltip-pt-notifications-notice",
|
|
"mytalk",
|
|
"mypreferences",
|
|
"sunday",
|
|
"monday",
|
|
"tuesday",
|
|
"wednesday",
|
|
"thursday",
|
|
"friday",
|
|
"saturday"
|
|
],
|
|
"targets": [
|
|
"desktop",
|
|
"mobile"
|
|
]
|
|
},
|
|
"ext.echo.dm": {
|
|
"scripts": [
|
|
"model/mw.echo.dm.js",
|
|
"model/mw.echo.dm.SourcePagesModel.js",
|
|
"model/mw.echo.dm.PaginationModel.js",
|
|
"model/mw.echo.dm.FiltersModel.js",
|
|
"model/mw.echo.dm.SeenTimeModel.js",
|
|
"model/mw.echo.dm.ModelManager.js",
|
|
"model/mw.echo.dm.SortedList.js",
|
|
"model/mw.echo.dm.NotificationItem.js",
|
|
"model/mw.echo.dm.CrossWikiNotificationItem.js",
|
|
"model/mw.echo.dm.BundleNotificationItem.js",
|
|
"model/mw.echo.dm.NotificationsList.js",
|
|
"model/mw.echo.dm.NotificationGroupsList.js",
|
|
"model/mw.echo.dm.UnreadNotificationCounter.js"
|
|
],
|
|
"dependencies": [
|
|
"oojs",
|
|
"ext.echo.init",
|
|
"ext.echo.api",
|
|
"moment"
|
|
],
|
|
"messages": [
|
|
"echo-api-failure",
|
|
"echo-notification-loginrequired",
|
|
"echo-api-failure-cross-wiki"
|
|
],
|
|
"targets": [
|
|
"desktop",
|
|
"mobile"
|
|
]
|
|
},
|
|
"ext.echo.api": {
|
|
"scripts": [
|
|
"api/mw.echo.api.js",
|
|
"api/mw.echo.api.PromisePrioritizer.js",
|
|
"api/mw.echo.api.EchoApi.js",
|
|
"api/mw.echo.api.APIHandler.js",
|
|
"api/mw.echo.api.LocalAPIHandler.js",
|
|
"api/mw.echo.api.ForeignAPIHandler.js",
|
|
"api/mw.echo.api.NetworkHandler.js"
|
|
],
|
|
"dependencies": [
|
|
"mediawiki.api",
|
|
"mediawiki.ForeignApi",
|
|
"oojs"
|
|
],
|
|
"targets": [
|
|
"desktop",
|
|
"mobile"
|
|
]
|
|
},
|
|
"ext.echo.mobile": {
|
|
"templates": {
|
|
"NotificationBadge.mustache": "mobile/NotificationBadge.mustache"
|
|
},
|
|
"styles": [
|
|
"mobile/overlay.less",
|
|
"mobile/notificationsFilterOverlay.less"
|
|
],
|
|
"messages": [
|
|
"notifications",
|
|
"echo-mobile-notifications-filter-title",
|
|
"echo-mark-all-as-read-confirmation"
|
|
],
|
|
"dependencies": [
|
|
"mediawiki.util",
|
|
"mediawiki.router",
|
|
"ext.echo.ui",
|
|
"oojs-ui.styles.icons-interactions"
|
|
],
|
|
"packageFiles": [
|
|
"mobile/notifications.js",
|
|
"mobile/list.js",
|
|
"mobile/overlay.js",
|
|
"mobile/NotificationBadge.js",
|
|
"mobile/notificationsFilterOverlay.js"
|
|
],
|
|
"targets": [
|
|
"desktop",
|
|
"mobile"
|
|
]
|
|
},
|
|
"ext.echo.init": {
|
|
"packageFiles": [
|
|
"ext.echo.init.js",
|
|
{
|
|
"name": "config.json",
|
|
"callback": "EchoHooks::getConfigVars"
|
|
}
|
|
],
|
|
"dependencies": [
|
|
"ext.echo.api",
|
|
"mediawiki.jqueryMsg",
|
|
"mediawiki.Uri"
|
|
],
|
|
"messages": [
|
|
"echo-badge-count",
|
|
"echo-displaysnippet-title",
|
|
"parentheses"
|
|
],
|
|
"targets": [
|
|
"desktop",
|
|
"mobile"
|
|
]
|
|
},
|
|
"ext.echo.styles.badge": {
|
|
"styles": [
|
|
"nojs/mw.echo.badge.less"
|
|
],
|
|
"skinStyles": {
|
|
"minerva": [
|
|
"nojs/mw.echo.badge.minerva.less"
|
|
],
|
|
"monobook": [
|
|
"nojs/mw.echo.badge.monobook.less"
|
|
],
|
|
"vector": [
|
|
"nojs/mw.echo.badge.vector.less"
|
|
]
|
|
},
|
|
"targets": [
|
|
"desktop",
|
|
"mobile"
|
|
]
|
|
},
|
|
"ext.echo.styles.notifications": {
|
|
"styles": [
|
|
"nojs/mw.echo.notifications.less",
|
|
"styles/LabelIconWidget.less"
|
|
],
|
|
"targets": [
|
|
"desktop",
|
|
"mobile"
|
|
]
|
|
},
|
|
"ext.echo.styles.alert": {
|
|
"styles": [
|
|
"nojs/mw.echo.alert.less"
|
|
],
|
|
"skinStyles": {
|
|
"monobook": [
|
|
"nojs/mw.echo.alert.monobook.less"
|
|
]
|
|
},
|
|
"targets": [
|
|
"desktop",
|
|
"mobile"
|
|
]
|
|
},
|
|
"ext.echo.special": {
|
|
"scripts": [
|
|
"ui/mw.echo.ui.PaginationWidget.js",
|
|
"ui/mw.echo.ui.DatedSubGroupListWidget.js",
|
|
"ui/mw.echo.ui.DatedNotificationsWidget.js",
|
|
"ui/mw.echo.ui.ReadStateButtonSelectWidget.js",
|
|
"ui/mw.echo.ui.PageNotificationsOptionWidget.js",
|
|
"ui/mw.echo.ui.PageFilterWidget.js",
|
|
"ui/mw.echo.ui.CrossWikiUnreadFilterWidget.js",
|
|
"ui/mw.echo.ui.NotificationsInboxWidget.js",
|
|
"ui/mw.echo.ui.SpecialHelpMenuWidget.js",
|
|
"special/ext.echo.special.js"
|
|
],
|
|
"styles": [
|
|
"styles/mw.echo.ui.PaginationWidget.less",
|
|
"styles/mw.echo.ui.DatedSubGroupListWidget.less",
|
|
"styles/mw.echo.ui.DatedNotificationsWidget.less",
|
|
"styles/mw.echo.ui.NotificationsInboxWidget.less",
|
|
"styles/mw.echo.ui.PageNotificationsOptionWidget.less",
|
|
"styles/mw.echo.ui.PageFilterWidget.less",
|
|
"styles/mw.echo.ui.CrossWikiUnreadFilterWidget.less",
|
|
"styles/mw.echo.ui.SpecialHelpMenuWidget.less"
|
|
],
|
|
"skinStyles": {
|
|
"minerva": [
|
|
"styles/mw.echo.ui.NotificationsInboxWidget.minerva.less"
|
|
]
|
|
},
|
|
"dependencies": [
|
|
"ext.echo.ui",
|
|
"mediawiki.Uri",
|
|
"ext.echo.styles.special"
|
|
],
|
|
"messages": [
|
|
"notification-inbox-filter-read",
|
|
"notification-inbox-filter-unread",
|
|
"notification-inbox-filter-all",
|
|
"echo-notification-placeholder-filters",
|
|
"echo-specialpage-pagination-numnotifications",
|
|
"echo-specialpage-pagination-range",
|
|
"echo-specialpage-pagefilters-title",
|
|
"echo-specialpage-pagefilters-subtitle",
|
|
"echo-mark-all-as-read",
|
|
"echo-learn-more",
|
|
"mypreferences",
|
|
"echo-specialpage-section-markread",
|
|
"echo-specialpage-pagefilterwidget-aria-label",
|
|
"echo-specialpage-special-help-menu-widget-aria-label"
|
|
],
|
|
"targets": [
|
|
"desktop",
|
|
"mobile"
|
|
]
|
|
},
|
|
"ext.echo.styles.special": {
|
|
"styles": [
|
|
"nojs/mw.echo.special.less"
|
|
],
|
|
"targets": [
|
|
"desktop",
|
|
"mobile"
|
|
]
|
|
}
|
|
},
|
|
"ResourceFileModulePaths": {
|
|
"localBasePath": "modules",
|
|
"remoteExtPath": "Echo/modules"
|
|
},
|
|
"Hooks": {
|
|
"SkinMinervaReplaceNotificationsBadge": "EchoHooks::onSkinMinervaReplaceNotificationsBadge",
|
|
"LoadExtensionSchemaUpdates": "EchoHooks::onLoadExtensionSchemaUpdates",
|
|
"GetPreferences": "EchoHooks::getPreferences",
|
|
"BeforePageDisplay": "EchoHooks::beforePageDisplay",
|
|
"ResourceLoaderRegisterModules": "EchoHooks::onResourceLoaderRegisterModules",
|
|
"UserGroupsChanged": "EchoHooks::onUserGroupsChanged",
|
|
"LoadUserOptions": "EchoHooks::onLoadUserOptions",
|
|
"SaveUserOptions": "EchoHooks::onSaveUserOptions",
|
|
"UserGetDefaultOptions": "EchoHooks::onUserGetDefaultOptions",
|
|
"UserClearNewTalkNotification": "EchoHooks::onUserClearNewTalkNotification",
|
|
"EmailUserComplete": "EchoHooks::onEmailUserComplete",
|
|
"LoginFormValidErrorMessages": "EchoHooks::onLoginFormValidErrorMessages",
|
|
"OutputPageCheckLastModified": "EchoHooks::onOutputPageCheckLastModified",
|
|
"ArticleDeleteComplete": "EchoHooks::onArticleDeleteComplete",
|
|
"ArticleUndelete": "EchoHooks::onArticleUndelete",
|
|
"UserMergeAccountFields": "EchoHooks::onUserMergeAccountFields",
|
|
"MergeAccountFromTo": "EchoHooks::onMergeAccountFromTo",
|
|
"UserMergeAccountDeleteTables": "EchoHooks::onUserMergeAccountDeleteTables",
|
|
"EchoGetBundleRules": "EchoHooks::onEchoGetBundleRules",
|
|
"EchoAbortEmailNotification": "EchoHooks::onEchoAbortEmailNotification",
|
|
"PageSaveComplete": "EchoHooks::onPageSaveComplete",
|
|
"LocalUserCreated": "EchoHooks::onLocalUserCreated",
|
|
"RollbackComplete": "EchoHooks::onRollbackComplete",
|
|
"UserSaveSettings": "EchoHooks::onUserSaveSettings",
|
|
"AbortTalkPageEmailNotification": "EchoHooks::onAbortTalkPageEmailNotification",
|
|
"SendWatchlistEmailNotification": "EchoHooks::onSendWatchlistEmailNotification",
|
|
"GetNewMessagesAlert": "EchoHooks::abortNewMessagesAlert",
|
|
"LinksUpdateComplete": "EchoHooks::onLinksUpdateComplete",
|
|
"SpecialMuteModifyFormFields": "EchoHooks::onSpecialMuteModifyFormFields",
|
|
"RecentChange_save": "main",
|
|
"ApiMain::moduleManager": "EchoHooks::onApiMainModuleManager",
|
|
"SkinTemplateNavigation::Universal": "EchoHooks::onSkinTemplateNavigationUniversal"
|
|
},
|
|
"HookHandlers": {
|
|
"main": {
|
|
"class": "\\EchoHooks",
|
|
"services": [ "MainConfig" ]
|
|
}
|
|
},
|
|
"config": {
|
|
"EchoEnableEmailBatch": {
|
|
"value": true
|
|
},
|
|
"EchoUseJobQueue": {
|
|
"value": false
|
|
},
|
|
"EchoEmailFooterAddress": {
|
|
"value": ""
|
|
},
|
|
"EchoCluster": {
|
|
"value": false
|
|
},
|
|
"EchoSharedTrackingDB": {
|
|
"value": false
|
|
},
|
|
"EchoSharedTrackingCluster": {
|
|
"value": false
|
|
},
|
|
"EchoSeenTimeCacheType": {
|
|
"value": null
|
|
},
|
|
"EchoMaxUpdateCount": {
|
|
"value": 2000
|
|
},
|
|
"EchoMaxMentionsCount": {
|
|
"value": 50
|
|
},
|
|
"EchoMentionStatusNotifications": {
|
|
"value": false
|
|
},
|
|
"EchoMentionsOnMultipleSectionEdits": {
|
|
"value": true
|
|
},
|
|
"EchoMentionOnChanges": {
|
|
"value": true
|
|
},
|
|
"EchoBundleEmailInterval": {
|
|
"value": 0
|
|
},
|
|
"DefaultNotifyTypeAvailability": {
|
|
"value": {
|
|
"web": true,
|
|
"email": true
|
|
}
|
|
},
|
|
"NotifyTypeAvailabilityByCategory": {
|
|
"value": {
|
|
"system-noemail": {
|
|
"web": true,
|
|
"email": false
|
|
},
|
|
"system-emailonly": {
|
|
"web": false,
|
|
"email": true
|
|
},
|
|
"emailuser": {
|
|
"web": true,
|
|
"email": false
|
|
},
|
|
"article-linked": {
|
|
"web": true,
|
|
"email": false
|
|
},
|
|
"mention-failure": {
|
|
"web": true,
|
|
"email": false
|
|
},
|
|
"mention-success": {
|
|
"web": true,
|
|
"email": false
|
|
},
|
|
"thank-you-edit": {
|
|
"web": true,
|
|
"email": false
|
|
}
|
|
},
|
|
"merge_strategy": "array_plus_2d"
|
|
},
|
|
"EchoNotifiers": {
|
|
"value": {
|
|
"web": [
|
|
"EchoNotifier",
|
|
"notifyWithNotification"
|
|
],
|
|
"email": [
|
|
"EchoNotifier",
|
|
"notifyWithEmail"
|
|
]
|
|
}
|
|
},
|
|
"EchoAgentBlacklist": {
|
|
"value": []
|
|
},
|
|
"EchoOnWikiBlacklist": {
|
|
"value": "Echo-blacklist"
|
|
},
|
|
"EchoPerUserBlacklist": {
|
|
"value": false
|
|
},
|
|
"EchoPerUserWhitelistFormat": {
|
|
"value": "%s/Echo-whitelist"
|
|
},
|
|
"EchoCrossWikiNotifications": {
|
|
"value": false
|
|
},
|
|
"EchoNotificationCategories": {
|
|
"value": {
|
|
"system": {
|
|
"priority": 9,
|
|
"no-dismiss": [
|
|
"all"
|
|
]
|
|
},
|
|
"system-noemail": {
|
|
"priority": 9,
|
|
"no-dismiss": [
|
|
"all"
|
|
]
|
|
},
|
|
"system-emailonly": {
|
|
"priority": 9,
|
|
"no-dismiss": [
|
|
"all"
|
|
]
|
|
},
|
|
"user-rights": {
|
|
"priority": 9,
|
|
"tooltip": "echo-pref-tooltip-user-rights"
|
|
},
|
|
"other": {
|
|
"no-dismiss": [
|
|
"all"
|
|
]
|
|
},
|
|
"edit-user-talk": {
|
|
"priority": 1,
|
|
"no-dismiss": [
|
|
"web"
|
|
],
|
|
"tooltip": "echo-pref-tooltip-edit-user-talk"
|
|
},
|
|
"reverted": {
|
|
"priority": 9,
|
|
"tooltip": "echo-pref-tooltip-reverted"
|
|
},
|
|
"article-linked": {
|
|
"priority": 5,
|
|
"tooltip": "echo-pref-tooltip-article-linked"
|
|
},
|
|
"mention": {
|
|
"priority": 4,
|
|
"tooltip": "echo-pref-tooltip-mention"
|
|
},
|
|
"mention-failure": {
|
|
"priority": 4,
|
|
"tooltip": "echo-pref-tooltip-mention-failure"
|
|
},
|
|
"mention-success": {
|
|
"priority": 4,
|
|
"tooltip": "echo-pref-tooltip-mention-success"
|
|
},
|
|
"emailuser": {
|
|
"priority": 9,
|
|
"tooltip": "echo-pref-tooltip-emailuser"
|
|
},
|
|
"article-reminder": {
|
|
"priority": 1,
|
|
"tooltip": "echo-pref-tooltip-article-reminder"
|
|
},
|
|
"thank-you-edit": {
|
|
"priority": 9,
|
|
"tooltip": "echo-pref-tooltip-thank-you-edit"
|
|
},
|
|
"watchlist": {
|
|
"priority": 5,
|
|
"tooltip": "echo-pref-tooltip-watchlist"
|
|
},
|
|
"minor-watchlist": {
|
|
"priority": 6,
|
|
"tooltip": "echo-pref-tooltip-minor-watchlist"
|
|
}
|
|
},
|
|
"merge_strategy": "array_plus_2d"
|
|
},
|
|
"EchoNotificationIcons": {
|
|
"value": {
|
|
"placeholder": {
|
|
"path": "Echo/modules/icons/notice.svg"
|
|
},
|
|
"chat": {
|
|
"path": {
|
|
"ltr": "Echo/modules/icons/speechBubbles-ltr-progressive.svg",
|
|
"rtl": "Echo/modules/icons/speechBubbles-rtl-progressive.svg"
|
|
}
|
|
},
|
|
"edit": {
|
|
"path": "Echo/modules/icons/edit-progressive.svg"
|
|
},
|
|
"edit-user-talk": {
|
|
"path": "Echo/modules/icons/edit-user-talk-progressive.svg"
|
|
},
|
|
"linked": {
|
|
"path": "Echo/modules/icons/link-progressive.svg"
|
|
},
|
|
"mention": {
|
|
"path": "Echo/modules/icons/mention-progressive.svg"
|
|
},
|
|
"mention-failure": {
|
|
"path": "Echo/modules/icons/mention-failure.svg"
|
|
},
|
|
"mention-success": {
|
|
"path": "Echo/modules/icons/mention-success-constructive.svg"
|
|
},
|
|
"mention-status-bundle": {
|
|
"path": "Echo/modules/icons/mention-status-bundle-progressive.svg"
|
|
},
|
|
"reviewed": {
|
|
"path": "Echo/modules/icons/articleCheck-progressive.svg"
|
|
},
|
|
"revert": {
|
|
"path": "Echo/modules/icons/revert.svg"
|
|
},
|
|
"user-rights": {
|
|
"path": "Echo/modules/icons/user-rights-progressive.svg"
|
|
},
|
|
"emailuser": {
|
|
"path": "Echo/modules/icons/message-constructive.svg"
|
|
},
|
|
"help": {
|
|
"path": {
|
|
"ltr": "Echo/modules/icons/helpNotice-ltr.svg",
|
|
"rtl": "Echo/modules/icons/helpNotice-rtl.svg"
|
|
}
|
|
},
|
|
"global": {
|
|
"path": "Echo/modules/icons/global-progressive.svg"
|
|
},
|
|
"site": {
|
|
"url": false
|
|
},
|
|
"article-reminder": {
|
|
"path": "Echo/modules/icons/global-progressive.svg"
|
|
}
|
|
},
|
|
"merge_strategy": "array_plus_2d"
|
|
},
|
|
"EchoSecondaryIcons": {
|
|
"value": {
|
|
"linked": {
|
|
"path": "Echo/modules/icons/link-progressive.svg"
|
|
},
|
|
"changes": {
|
|
"path": "Echo/modules/icons/changes.svg"
|
|
},
|
|
"thanks": {
|
|
"path": {
|
|
"ltr": "Echo/modules/icons/userTalk-ltr.svg",
|
|
"rtl": "Echo/modules/icons/userTalk-rtl.svg"
|
|
}
|
|
},
|
|
"unbell": {
|
|
"path": "Echo/modules/icons/unbell.svg"
|
|
},
|
|
"userSpeechBubble": {
|
|
"path": "Echo/modules/icons/user-speech-bubble.svg"
|
|
}
|
|
},
|
|
"merge_strategy": "array_plus_2d"
|
|
},
|
|
"EchoNotifications": {
|
|
"value": {
|
|
"welcome": {
|
|
"user-locators": [
|
|
"EchoUserLocator::locateEventAgent"
|
|
],
|
|
"canNotifyAgent": true,
|
|
"category": "system-noemail",
|
|
"group": "positive",
|
|
"section": "message",
|
|
"presentation-model": "EchoWelcomePresentationModel"
|
|
},
|
|
"edit-user-talk": {
|
|
"presentation-model": "EchoEditUserTalkPresentationModel",
|
|
"user-locators": [
|
|
"EchoUserLocator::locateTalkPageOwner"
|
|
],
|
|
"category": "edit-user-talk",
|
|
"group": "interactive",
|
|
"section": "alert",
|
|
"bundle": {
|
|
"web": true,
|
|
"email": false,
|
|
"expandable": true
|
|
},
|
|
"immediate": true
|
|
},
|
|
"reverted": {
|
|
"presentation-model": "EchoRevertedPresentationModel",
|
|
"user-locators": [
|
|
[
|
|
"EchoUserLocator::locateFromEventExtra",
|
|
[
|
|
"reverted-user-id"
|
|
]
|
|
]
|
|
],
|
|
"category": "reverted",
|
|
"group": "negative",
|
|
"section": "alert"
|
|
},
|
|
"page-linked": {
|
|
"presentation-model": "EchoPageLinkedPresentationModel",
|
|
"user-locators": [
|
|
"EchoUserLocator::locateArticleCreator"
|
|
],
|
|
"category": "article-linked",
|
|
"group": "neutral",
|
|
"section": "message",
|
|
"bundle": {
|
|
"web": true,
|
|
"email": true,
|
|
"expandable": true
|
|
}
|
|
},
|
|
"minor-watchlist-change": {
|
|
"user-locators": [
|
|
"EchoUserLocator::locateUsersWatchingTitle"
|
|
],
|
|
"category": "minor-watchlist",
|
|
"group": "interactive",
|
|
"presentation-model": "EchoWatchlistChangePresentationModel",
|
|
"bundle": {
|
|
"web": true,
|
|
"email": true,
|
|
"expandable": true
|
|
}
|
|
},
|
|
"watchlist-change": {
|
|
"user-locators": [
|
|
"EchoUserLocator::locateUsersWatchingTitle"
|
|
],
|
|
"category": "watchlist",
|
|
"group": "interactive",
|
|
"presentation-model": "EchoWatchlistChangePresentationModel",
|
|
"bundle": {
|
|
"web": true,
|
|
"email": true,
|
|
"expandable": true
|
|
}
|
|
},
|
|
"mention": {
|
|
"user-locators": [
|
|
[
|
|
"EchoUserLocator::locateFromEventExtra",
|
|
[
|
|
"mentioned-users"
|
|
]
|
|
]
|
|
],
|
|
"category": "mention",
|
|
"group": "interactive",
|
|
"section": "alert",
|
|
"presentation-model": "EchoMentionPresentationModel"
|
|
},
|
|
"mention-summary": {
|
|
"user-locators": [
|
|
[
|
|
"EchoUserLocator::locateFromEventExtra",
|
|
[
|
|
"mentioned-users"
|
|
]
|
|
]
|
|
],
|
|
"category": "mention",
|
|
"group": "interactive",
|
|
"section": "alert",
|
|
"presentation-model": "EchoMentionInSummaryPresentationModel"
|
|
},
|
|
"mention-failure": {
|
|
"user-locators": [
|
|
[
|
|
"EchoUserLocator::locateEventAgent"
|
|
]
|
|
],
|
|
"canNotifyAgent": true,
|
|
"category": "mention-failure",
|
|
"bundle": {
|
|
"web": true,
|
|
"expandable": true
|
|
},
|
|
"group": "negative",
|
|
"section": "alert",
|
|
"presentation-model": "EchoMentionStatusPresentationModel"
|
|
},
|
|
"mention-failure-too-many": {
|
|
"user-locators": [
|
|
[
|
|
"EchoUserLocator::locateEventAgent"
|
|
]
|
|
],
|
|
"canNotifyAgent": true,
|
|
"category": "mention-failure",
|
|
"group": "negative",
|
|
"section": "alert",
|
|
"presentation-model": "EchoMentionStatusPresentationModel"
|
|
},
|
|
"mention-success": {
|
|
"user-locators": [
|
|
[
|
|
"EchoUserLocator::locateEventAgent"
|
|
]
|
|
],
|
|
"canNotifyAgent": true,
|
|
"category": "mention-success",
|
|
"bundle": {
|
|
"web": true,
|
|
"expandable": true
|
|
},
|
|
"group": "positive",
|
|
"section": "alert",
|
|
"presentation-model": "EchoMentionStatusPresentationModel"
|
|
},
|
|
"user-rights": {
|
|
"user-locators": [
|
|
[
|
|
"EchoUserLocator::locateFromEventExtra",
|
|
[
|
|
"user"
|
|
]
|
|
]
|
|
],
|
|
"category": "user-rights",
|
|
"group": "neutral",
|
|
"section": "alert",
|
|
"presentation-model": "EchoUserRightsPresentationModel"
|
|
},
|
|
"emailuser": {
|
|
"presentation-model": "EchoEmailUserPresentationModel",
|
|
"user-locators": [
|
|
[
|
|
"EchoUserLocator::locateFromEventExtra",
|
|
[
|
|
"to-user-id"
|
|
]
|
|
]
|
|
],
|
|
"category": "emailuser",
|
|
"group": "neutral",
|
|
"section": "alert"
|
|
},
|
|
"foreign": {
|
|
"presentation-model": "EchoForeignPresentationModel",
|
|
"user-locators": [
|
|
"EchoUserLocator::locateEventAgent"
|
|
],
|
|
"category": "foreign",
|
|
"group": "positive",
|
|
"section": "alert"
|
|
},
|
|
"thank-you-edit": {
|
|
"user-locators": [
|
|
"EchoUserLocator::locateEventAgent"
|
|
],
|
|
"canNotifyAgent": true,
|
|
"category": "thank-you-edit",
|
|
"group": "positive",
|
|
"presentation-model": "EchoEditThresholdPresentationModel",
|
|
"section": "message"
|
|
},
|
|
"article-reminder": {
|
|
"user-locators": [
|
|
"EchoUserLocator::locateEventAgent"
|
|
],
|
|
"canNotifyAgent": true,
|
|
"category": "article-reminder",
|
|
"group": "positive",
|
|
"presentation-model": "EchoArticleReminderPresentationModel",
|
|
"section": "message"
|
|
}
|
|
},
|
|
"merge_strategy": "array_plus_2d"
|
|
},
|
|
"EchoCacheVersion": {
|
|
"value": "1.12"
|
|
},
|
|
"EchoEventLoggingVersion": {
|
|
"value": "1.12"
|
|
},
|
|
"EchoEventLoggingSchemas": {
|
|
"value": {
|
|
"Echo": {
|
|
"enabled": false
|
|
},
|
|
"EchoMail": {
|
|
"enabled": false
|
|
},
|
|
"EchoInteraction": {
|
|
"enabled": false
|
|
}
|
|
},
|
|
"merge_strategy": "array_plus_2d"
|
|
},
|
|
"AllowArticleReminderNotification": {
|
|
"value": false,
|
|
"description": "This is a feature flag to the Article Reminder notification"
|
|
},
|
|
"EchoMaxMentionsInEditSummary": {
|
|
"value": 0,
|
|
"description": "Maximum nubmer of users that will be notified that they were linked from an edit summary or 0 for no notifications"
|
|
},
|
|
"EchoPollForUpdates": {
|
|
"value": 0,
|
|
"description": "This is the polling rate i.e. the time after which we check for notifications count on the client side. It also controls whether notification count will be displayed in browser title. If polling rate is 0 this means polling is disabled and notification count is also not shown in browser title"
|
|
},
|
|
"EchoWatchlistNotifications": {
|
|
"value": false,
|
|
"description": "Feature flag to enable Echo notifications whenever a page on a user's watchlist is changed, replacing the built-in preference to send emails in that circumstance."
|
|
},
|
|
"EchoWatchlistEmailOncePerPage": {
|
|
"value": true,
|
|
"description": "Whether to send email notifications each time a watched page is edited (if false) or only the first time the page is changed before being visited again by the user (if true)"
|
|
},
|
|
"EchoEnablePush": {
|
|
"value": false,
|
|
"description": "Whether to enable push notifications"
|
|
},
|
|
"EchoPushServiceBaseUrl": {
|
|
"value": false,
|
|
"description": "Request endpoint URL for the push notification service"
|
|
},
|
|
"EchoPushMaxSubscriptionsPerUser": {
|
|
"value": 0,
|
|
"description": "Maximum number of push subscriptions that may be stored in the DB at any given time for a single central user ID."
|
|
}
|
|
},
|
|
"attributes": {
|
|
"EventLogging": {
|
|
"Schemas": {
|
|
"EchoInteraction": "/analytics/legacy/echointeraction/1.0.0",
|
|
"EchoMail": "/analytics/legacy/echomail/1.0.0"
|
|
}
|
|
}
|
|
},
|
|
"manifest_version": 2,
|
|
"AutoloadClasses": {
|
|
"ApiCrossWiki": "includes/api/ApiCrossWiki.php",
|
|
"ApiEchoArticleReminder": "includes/api/ApiEchoArticleReminder.php",
|
|
"ApiEchoMarkRead": "includes/api/ApiEchoMarkRead.php",
|
|
"ApiEchoMarkSeen": "includes/api/ApiEchoMarkSeen.php",
|
|
"ApiEchoMute": "includes/api/ApiEchoMute.php",
|
|
"ApiEchoNotifications": "includes/api/ApiEchoNotifications.php",
|
|
"ApiEchoUnreadNotificationPages": "includes/api/ApiEchoUnreadNotificationPages.php",
|
|
"BackfillUnreadWikis": "maintenance/backfillUnreadWikis.php",
|
|
"Bundleable": "includes/Bundleable.php",
|
|
"Bundler": "includes/Bundler.php",
|
|
"EchoAbstractEntity": "includes/model/AbstractEntity.php",
|
|
"EchoAbstractMapper": "includes/mapper/AbstractMapper.php",
|
|
"EchoArrayList": "includes/EchoArrayList.php",
|
|
"EchoAttributeManager": "includes/AttributeManager.php",
|
|
"EchoCachedList": "includes/EchoCachedList.php",
|
|
"EchoCallbackIterator": "includes/iterator/CallbackIterator.php",
|
|
"EchoCatchableFatalErrorException": "includes/exception/CatchableFatalErrorException.php",
|
|
"EchoContainmentList": "includes/EchoContainmentList.php",
|
|
"EchoContainmentSet": "includes/EchoContainmentSet.php",
|
|
"EchoDataOutputFormatter": "includes/DataOutputFormatter.php",
|
|
"EchoDeferredMarkAsDeletedUpdate": "includes/DeferredMarkAsDeletedUpdate.php",
|
|
"EchoDiffGroup": "includes/EchoDiffGroup.php",
|
|
"EchoDiffParser": "includes/EchoDiffParser.php",
|
|
"EchoDiscussionParser": "includes/DiscussionParser.php",
|
|
"EchoEditThresholdPresentationModel": "includes/formatters/EditThresholdPresentationModel.php",
|
|
"EchoEditUserTalkPresentationModel": "includes/formatters/EditUserTalkPresentationModel.php",
|
|
"EchoArticleReminderPresentationModel": "includes/formatters/ArticleReminderPresentationModel.php",
|
|
"EchoEmailFormat": "includes/EmailFormat.php",
|
|
"EchoEmailFrequency": "includes/EmailFrequency.php",
|
|
"EchoEmailUserPresentationModel": "includes/formatters/EmailUserPresentationModel.php",
|
|
"EchoEvent": "includes/model/Event.php",
|
|
"EchoEventDigestFormatter": "includes/formatters/EchoEventDigestFormatter.php",
|
|
"EchoEventFormatter": "includes/formatters/EchoEventFormatter.php",
|
|
"EchoEventMapper": "includes/mapper/EventMapper.php",
|
|
"EchoEventPresentationModel": "includes/formatters/EventPresentationModel.php",
|
|
"EchoFilteredSequentialIterator": "includes/iterator/FilteredSequentialIterator.php",
|
|
"EchoFlyoutFormatter": "includes/formatters/EchoFlyoutFormatter.php",
|
|
"EchoForeignNotifications": "includes/ForeignNotifications.php",
|
|
"EchoForeignPresentationModel": "includes/formatters/EchoForeignPresentationModel.php",
|
|
"EchoForeignWikiRequest": "includes/ForeignWikiRequest.php",
|
|
"EchoHooks": "includes/EchoHooks.php",
|
|
"EchoHtmlDigestEmailFormatter": "includes/formatters/EchoHtmlDigestEmailFormatter.php",
|
|
"EchoHtmlEmailFormatter": "includes/formatters/EchoHtmlEmailFormatter.php",
|
|
"EchoIcon": "includes/formatters/EchoIcon.php",
|
|
"EchoIteratorDecorator": "includes/iterator/IteratorDecorator.php",
|
|
"EchoLocalCache": "includes/cache/LocalCache.php",
|
|
"EchoMentionInSummaryPresentationModel": "includes/formatters/MentionInSummaryPresentationModel.php",
|
|
"EchoMentionPresentationModel": "includes/formatters/MentionPresentationModel.php",
|
|
"EchoMentionStatusPresentationModel": "includes/formatters/MentionStatusPresentationModel.php",
|
|
"EchoModelFormatter": "includes/formatters/EchoModelFormatter.php",
|
|
"EchoModerationController": "includes/controller/ModerationController.php",
|
|
"EchoMultipleIterator": "includes/iterator/MultipleIterator.php",
|
|
"EchoNotRecursiveIterator": "includes/iterator/NotRecursiveIterator.php",
|
|
"EchoNotification": "includes/model/Notification.php",
|
|
"EchoNotificationController": "includes/controller/NotificationController.php",
|
|
"EchoNotificationDeleteJob": "includes/jobs/NotificationDeleteJob.php",
|
|
"EchoNotificationJob": "includes/jobs/NotificationJob.php",
|
|
"EchoNotificationMapper": "includes/mapper/NotificationMapper.php",
|
|
"EchoNotifier": "includes/Notifier.php",
|
|
"EchoOnWikiList": "includes/EchoOnWikiList.php",
|
|
"EchoPageLinkedPresentationModel": "includes/formatters/PageLinkedPresentationModel.php",
|
|
"EchoPlainTextDigestEmailFormatter": "includes/formatters/EchoPlainTextDigestEmailFormatter.php",
|
|
"EchoPlainTextEmailFormatter": "includes/formatters/EchoPlainTextEmailFormatter.php",
|
|
"EchoPresentationModelSection": "includes/formatters/PresentationModelSection.php",
|
|
"EchoRevertedPresentationModel": "includes/formatters/RevertedPresentationModel.php",
|
|
"EchoRevisionLocalCache": "includes/cache/RevisionLocalCache.php",
|
|
"EchoSeenTime": "includes/SeenTime.php",
|
|
"EchoServices": "includes/EchoServices.php",
|
|
"EchoSummaryParser": "includes/EchoSummaryParser.php",
|
|
"EchoSuppressionRowUpdateGenerator": "includes/schemaUpdate.php",
|
|
"EchoTargetPage": "includes/model/TargetPage.php",
|
|
"EchoTargetPageMapper": "includes/mapper/TargetPageMapper.php",
|
|
"EchoTitleLocalCache": "includes/cache/TitleLocalCache.php",
|
|
"EchoUnreadWikis": "includes/UnreadWikis.php",
|
|
"EchoUserLocator": "includes/UserLocator.php",
|
|
"EchoUserNotificationGateway": "includes/gateway/UserNotificationGateway.php",
|
|
"EchoUserRightsPresentationModel": "includes/formatters/UserRightsPresentationModel.php",
|
|
"EchoWelcomePresentationModel": "includes/formatters/WelcomePresentationModel.php",
|
|
"EchoWatchlistChangePresentationModel": "includes/formatters/WatchlistChangePresentationModel.php",
|
|
"GenerateSampleNotifications": "maintenance/generateSampleNotifications.php",
|
|
"MWEchoDbFactory": "includes/EchoDbFactory.php",
|
|
"MWEchoEmailBatch": "includes/EmailBatch.php",
|
|
"MWEchoEventLogging": "includes/EventLogging.php",
|
|
"MWEchoNotifUser": "includes/NotifUser.php",
|
|
"NotificationPager": "includes/special/NotificationPager.php",
|
|
"ProcessEchoEmailBatch": "maintenance/processEchoEmailBatch.php",
|
|
"RecomputeNotifCounts": "maintenance/recomputeNotifCounts.php",
|
|
"RemoveInvalidNotification": "maintenance/removeInvalidNotification.php",
|
|
"RemoveOrphanedEvents": "maintenance/removeOrphanedEvents.php",
|
|
"ResourceLoaderEchoImageModule": "includes/ResourceLoaderEchoImageModule.php",
|
|
"SpecialDisplayNotificationsConfiguration": "includes/special/SpecialDisplayNotificationsConfiguration.php",
|
|
"SpecialNotifications": "includes/special/SpecialNotifications.php",
|
|
"SpecialNotificationsFormatter": "includes/formatters/SpecialNotificationsFormatter.php",
|
|
"SpecialNotificationsMarkRead": "includes/special/SpecialNotificationsMarkRead.php",
|
|
"UpdateEchoSchemaForSuppression": "maintenance/updateEchoSchemaForSuppression.php",
|
|
"EchoUpdatePerUserBlacklist": "maintenance/updatePerUserBlacklist.php"
|
|
},
|
|
"AutoloadNamespaces": {
|
|
"EchoOOUI\\": "includes/ooui/",
|
|
"EchoPush\\": "includes/Push/",
|
|
"EchoPush\\Api\\": "includes/api/Push/"
|
|
},
|
|
"TestAutoloadClasses": {
|
|
"EchoAbstractMapperStub": "tests/phpunit/mapper/EchoAbstractMapperStub.php",
|
|
"EchoExecuteFirstArgumentStub": "tests/phpunit/mapper/EchoExecuteFirstArgumentStub.php"
|
|
},
|
|
"ServiceWiringFiles": [
|
|
"ServiceWiring.php"
|
|
],
|
|
"ConfigRegistry": {
|
|
"Echo": "GlobalVarConfig::newInstance"
|
|
}
|
|
}
|