2021-05-26 23:23:53 +00:00
/ * *
* @ external MenuDefinition
2021-06-21 19:30:11 +00:00
* @ external UserLinksDefinition
2021-05-26 23:23:53 +00:00
* /
2021-06-02 22:57:43 +00:00
import mustache from 'mustache' ;
2021-05-26 23:23:53 +00:00
import { menuTemplate } from './Menu.stories.data' ;
import userLinksTemplateLegacy from '!!raw-loader!../includes/templates/legacy/UserLinks.mustache' ;
import userLinksTemplate from '!!raw-loader!../includes/templates/UserLinks.mustache' ;
2021-06-02 22:57:43 +00:00
import userLinksMoreTemplate from '!!raw-loader!../includes/templates/UserLinks__more.mustache' ;
2021-05-27 21:47:55 +00:00
import { helperClassName , helperMakeMenuData } from './utils' ;
2021-05-26 23:23:53 +00:00
/ * *
* @ type { MenuDefinition }
* /
const loggedOut = helperMakeMenuData (
'personal' ,
` <li id="pt-anonuserpage">Not logged in</li><li id="pt-anontalk"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [⌃⌥n]" accesskey="n">Talk</a></li><li id="pt-anoncontribs"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [⌃⌥y]" accesskey="y">Contributions</a></li><li id="pt-createaccount"><a href="/w/index.php?title=Special:CreateAccount&returnto=Main+Page" title="You are encouraged to create an account and log in; however, it is not mandatory">Create account</a></li><li id="pt-login"><a href="/w/index.php?title=Special:UserLogin&returnto=Main+Page" title="You're encouraged to log in; however, it's not mandatory. [⌃⌥o]" accesskey="o">Log in</a></li> ` ,
2021-05-27 21:47:55 +00:00
helperClassName ( 'vector-user-menu-legacy' )
2021-05-26 23:23:53 +00:00
) ;
const ECHO _ITEMS = ` <li id="pt-notifications-alert"><a href="/wiki/Special:Notifications" class="mw-echo-notifications-badge mw-echo-notification-badge-nojs oo-ui-icon-bell mw-echo-notifications-badge-all-read" data-counter-num="0" data-counter-text="0" title="Your alerts">Alerts (0)</a></li><li id="pt-notifications-notice"><a href="/wiki/Special:Notifications" class="mw-echo-notifications-badge mw-echo-notification-badge-nojs oo-ui-icon-tray" data-counter-num="3" data-counter-text="3" title="Your notices">Notices (3)</a></li> ` ;
const USERNAME _ITEM = ` <li id="pt-userpage"><a href="/wiki/User:WikiUser" dir="auto" title="Your user page [⌃⌥.]" accesskey=".">WikiUser</a></li> ` ;
const REST _ITEMS = ` <li id="pt-mytalk"><a href="/wiki/User_talk:WikiUser" title="Your talk page [⌃⌥n]" accesskey="n">Talk</a></li><li id="pt-sandbox"><a href="/wiki/User:WikiUser/sandbox" title="Your sandbox">Sandbox</a></li><li id="pt-preferences"><a href="/wiki/Special:Preferences" title="Your preferences">Preferences</a></li><li id="pt-betafeatures"><a href="/wiki/Special:Preferences#mw-prefsection-betafeatures" title="Beta features">Beta</a></li><li id="pt-watchlist"><a href="/wiki/Special:Watchlist" title="A list of pages you are monitoring for changes [⌃⌥l]" accesskey="l">Watchlist</a></li><li id="pt-mycontris"><a href="/wiki/Special:Contributions/WikiUser" title="A list of your contributions [⌃⌥y]" accesskey="y">Contributions</a></li> ` ;
const LOGOUT _ITEM = ` <li id="pt-logout"><a href="/w/index.php?title=Special:UserLogout&returnto=Main+Page&returntoquery=useskin%3Dvector" title="Log out">Log out</a></li> ` ;
const ULS _LANGUAGE _SELECTOR = '<li class="uls-trigger active"><a href="#">English</a></li>' ;
2021-06-22 16:12:50 +00:00
const USER _LINKS _ITEMS = `
< li id = "pt-mytalk" > < a class = "mw-ui-icon mw-ui-icon-before mw-ui-icon-wikimedia-userTalk" href = "/wiki/User_talk:WikiUser" title = "Your talk page [⌃⌥n]" accesskey = "n" > Talk < / a > < / l i >
< li id = "pt-sandbox" > < a class = "mw-ui-icon mw-ui-icon-before mw-ui-icon-wikimedia-markup" href = "/wiki/User:WikiUser/sandbox" title = "Your sandbox" > Sandbox < / a > < / l i >
< li id = "pt-preferences" > < a class = "mw-ui-icon mw-ui-icon-before mw-ui-icon-wikimedia-settings" href = "/wiki/Special:Preferences" title = "Your preferences" > Preferences < / a > < / l i >
< li id = "pt-watchlist" > < a class = "mw-ui-icon mw-ui-icon-before mw-ui-icon-wikimedia-unStar" href = "/wiki/Special:Watchlist" title = "A list of pages you are monitoring for changes [⌃⌥l]" accesskey = "l" > Watchlist < / a > < / l i >
< li id = "pt-mycontris" > < a class = "mw-ui-icon mw-ui-icon-before mw-ui-icon-wikimedia-userContributions" href = "/wiki/Special:Contributions/WikiUser" title = "A list of your contributions [⌃⌥y]" accesskey = "y" > Contributions < / a > < / l i >
` ;
const ANON _USER _LINKS _ITEMS = `
< li id = "pt-mytalk" > < a class = "mw-ui-icon mw-ui-icon-before mw-ui-icon-wikimedia-userTalk" href = "/wiki/User_talk:WikiUser" title = "Your talk page [⌃⌥n]" accesskey = "n" > Talk < / a > < / l i >
< li id = "pt-mycontris" > < a class = "mw-ui-icon mw-ui-icon-before mw-ui-icon-wikimedia-userContributions" href = "/wiki/Special:Contributions/WikiUser" title = "A list of your contributions [⌃⌥y]" accesskey = "y" > Contributions < / a > < / l i >
` ;
2021-05-26 23:23:53 +00:00
/ * *
* @ type { MenuDefinition }
* /
const loggedInWithEcho = helperMakeMenuData (
'personal' ,
` ${ USERNAME _ITEM } ${ ECHO _ITEMS } ${ REST _ITEMS } ${ LOGOUT _ITEM } ` ,
2021-05-27 21:47:55 +00:00
helperClassName ( 'vector-user-menu-legacy' )
2021-05-26 23:23:53 +00:00
) ;
/ * *
* @ type { MenuDefinition }
* /
const loggedInWithULS = helperMakeMenuData (
'personal' ,
` ${ ULS _LANGUAGE _SELECTOR } ${ USERNAME _ITEM } ${ ECHO _ITEMS } ${ REST _ITEMS } ${ LOGOUT _ITEM } ` ,
2021-05-27 21:47:55 +00:00
helperClassName ( 'vector-user-menu-legacy' )
2021-05-26 23:23:53 +00:00
) ;
/ * *
* @ type { Object . < string , MenuDefinition > }
* /
const PERSONAL _MENU _TEMPLATE _DATA = {
loggedOut ,
loggedInWithEcho ,
loggedInWithULS
} ;
2021-06-02 22:57:43 +00:00
const additionalUserMoreData = {
class : 'vector-menu vector-user-menu-more' ,
"heading-class" : 'vector-menu-heading' ,
"is-dropdown" : false
} ;
const userMoreHtmlItems = ( isAnon = true ) => mustache . render ( userLinksMoreTemplate , {
'is-anon' : isAnon ,
'html-create-account' : ` <a href="/w/index.php?title=Special:CreateAccount&returnto=Main+Page" class="mw-ui-button mw-ui-quiet" title="You are encouraged to create an account and log in; however, it is not mandatory">Create account</a> ` ,
'data-user-page' : helperMakeMenuData ( 'user-page' , USERNAME _ITEM ) ,
'data-notifications' : helperMakeMenuData ( 'notifications' , ECHO _ITEMS )
} ) ;
2021-06-03 21:37:01 +00:00
const loggedInData = {
2021-06-24 19:13:20 +00:00
class : 'vector-user-menu vector-menu-dropdown vector-user-menu-logged-in' ,
'heading-class' : 'mw-ui-icon mw-ui-icon-element mw-ui-icon-wikimedia-userAvatar' ,
'is-anon' : false ,
2021-06-21 19:30:11 +00:00
'html-after-portal' : `
< div id = "pt-logout" class = "vector-user-menu-login" >
2021-06-22 16:12:50 +00:00
< a class = "vector-menu-content-item mw-ui-icon mw-ui-icon-before mw-ui-icon-wikimedia-logOut" data - mw = "interface" href = "/w/index.php?title=Special:UserLogout&returnto=Main+Page" > Log out < / a >
2021-06-21 19:30:11 +00:00
< / d i v >
2021-06-24 19:13:20 +00:00
` ,
'is-dropdown' : true
2021-06-03 21:37:01 +00:00
} ;
const loggedOutData = {
2021-06-24 19:13:20 +00:00
class : 'vector-user-menu vector-menu-dropdown vector-user-menu-logged-out' ,
'heading-class' : 'mw-ui-icon mw-ui-icon-element mw-ui-icon-wikimedia-ellipsis' ,
2021-06-03 21:37:01 +00:00
'is-anon' : true ,
2021-06-21 19:30:11 +00:00
'html-before-portal' : `
2021-06-03 21:37:01 +00:00
< div class = "vector-user-menu-login" >
2021-06-22 16:12:50 +00:00
< a class = "vector-menu-content-item mw-ui-icon mw-ui-icon-before mw-ui-icon-wikimedia-logIn" href = "/w/index.php?title=Special:UserLogin&returnto=Main+Page" title = "You are encouraged to log in; however, it is not mandatory [ctrl-option-o]" accesskey = "o" > Log in < / a >
2021-06-03 21:37:01 +00:00
< / d i v >
< div class = "vector-user-menu-anon-editor" >
< p >
Pages for logged out editors ( < a href = "/wiki/Help:Introduction" > learn more < / a > ) :
< / p >
< / d i v >
2021-06-24 19:13:20 +00:00
` ,
'is-dropdown' : true
2021-06-03 21:37:01 +00:00
} ;
2021-05-27 21:47:55 +00:00
/ * *
* @ type { UserLinksDefinition }
2021-05-26 23:23:53 +00:00
* /
const USER _LINKS _LOGGED _IN _TEMPLATE _DATA = {
2021-06-02 22:57:43 +00:00
'data-user-more' : helperMakeMenuData ( 'personal-more' , userMoreHtmlItems ( false ) , additionalUserMoreData ) ,
2021-06-24 19:13:20 +00:00
'data-user-menu' : helperMakeMenuData ( 'new-personal' , USER _LINKS _ITEMS , loggedInData )
2021-05-26 23:23:53 +00:00
} ;
2021-05-27 21:47:55 +00:00
/ * *
* @ type { UserLinksDefinition }
* /
const USER _LINKS _LOGGED _OUT _TEMPLATE _DATA = {
2021-06-02 22:57:43 +00:00
'data-user-more' : helperMakeMenuData ( 'personal-more' , userMoreHtmlItems ( true ) , additionalUserMoreData ) ,
2021-06-24 19:13:20 +00:00
'data-user-menu' : helperMakeMenuData ( 'new-personal' , ANON _USER _LINKS _ITEMS , loggedOutData )
2021-05-27 21:47:55 +00:00
} ;
export {
PERSONAL _MENU _TEMPLATE _DATA ,
2021-05-26 23:23:53 +00:00
USER _LINKS _LOGGED _IN _TEMPLATE _DATA ,
2021-05-27 21:47:55 +00:00
USER _LINKS _LOGGED _OUT _TEMPLATE _DATA ,
menuTemplate ,
userLinksTemplateLegacy ,
2021-06-03 21:37:01 +00:00
userLinksTemplate
2021-05-27 21:47:55 +00:00
} ;