Constructor
new Section(parser, heading, targets, subscriptions)
- Source:
Create a section object.
Parameters:
Name | Type | Description |
---|---|---|
parser |
Parser | |
heading |
object | Heading object returned by Parser#findHeadings. |
targets |
Array.<object> | Sorted target objects returned by Parser#findSignatures + Parser#findHeadings. |
subscriptions |
Subscriptions |
Throws:
Extends
Members
$actions :external:jQuery
- Source:
Actions element under the 2-level section heading or to the right of headings of other levels.
Type:
$addSubsectionButtonContainer :external:jQuery|undefined
- Source:
"Add subsection" button container.
Type:
- external:jQuery | undefined
$authorCountWrapper :external:jQuery|undefined
- Source:
Author count wrapper element in the metadata element.
Type:
- external:jQuery | undefined
$bar :external:jQuery|undefined
- Source:
Bar element under a 2-level section heading.
Type:
- external:jQuery | undefined
$heading :external:jQuery
- Source:
Heading element as a jQuery element.
Type:
$headline :external:jQuery
- Source:
Headline element as a jQuery object.
Type:
$latestCommentWrapper :external:jQuery|undefined
- Source:
Latest comment date wrapper element in the metadata element.
Type:
- external:jQuery | undefined
$metadata :external:jQuery|undefined
- Source:
Metadata element in the bar element.
Type:
- external:jQuery | undefined
$replyButtonContainer :external:jQuery|undefined
- Source:
Reply button container and part-time reply comment form container, a list element. It is wrapped around the reply button wrapper, but it is created by the script only when there is no suitable element that already exists. If there is, it can contain other elements (and comments) too.
Type:
- external:jQuery | undefined
$replyButtonWrapper :external:jQuery|undefined
- Source:
Reply button wrapper and part-time reply comment form wrapper, an item element.
Type:
- external:jQuery | undefined
actions :object
- Source:
Section actions object. It contains widgets (buttons, menus) triggering the actions of the section.
Type:
- object
addSubsectionButton :Button|undefined
- Source:
"Add subsection" button at the end of the section.
Type:
- Button | undefined
addSubsectionForm :CommentForm|undefined
- Source:
"Add subsection" form related to the section.
Type:
- CommentForm | undefined
authorsPopup :external:OO.ui.PopupWidget|undefined
- Source:
Popup with the list of users who have posted in the section.
Type:
- external:OO.ui.PopupWidget | undefined
code :string|undefined
- Source:
Section code. Filled upon running Section#loadCode.
Type:
- string | undefined
comments :Array.<Comment>
- Source:
- Overrides:
Comments contained in the section.
Type:
- Array.<Comment>
commentsInFirstChunk :Array.<Comment>
- Source:
- Overrides:
Comments contained in the first chunk of the section, i.e. all elements up to the first subheading if it is present, or all elements if it is not.
Type:
- Array.<Comment>
editUrl :string
- Source:
- Overrides:
URL to edit the section.
Type:
- string
headingElement :Element|external:Element
- Source:
- Overrides:
Heading element (.mw-heading
or <h1>
- <h6>
).
Type:
- Element | external:Element
headline :string
- Source:
- Overrides:
Section headline as it appears on the page.
Foreign elements can get there, add the classes of these elements to module:defaultConfig.excludeFromHeadlineClasses to filter them out.
Type:
- string
headlineElement :Element|external:Element
- Source:
- Overrides:
Headline element.
Type:
- Element | external:Element
hElement :Element|external:Element
- Source:
- Overrides:
H1...6
element.
Type:
- Element | external:Element
id :string
- Source:
- Overrides:
Section id.
Type:
- string
index :number
- Source:
- Overrides:
Section index. Same as the index in the array returned by module:sectionRegistry.getAll.
Type:
- number
isActionable :boolean
- Source:
Is the section actionable. (If it is in a closed discussion or on an old version page, then no).
Type:
- boolean
isHidden :boolean
- Source:
Is the section visible (visibility: visible
as opposed to visibility: hidden
). Can be
true
when the improvePerformance
setting is enabled.
Type:
- boolean
isLastSection :boolean
- Source:
Is the section the last section on the page.
Type:
- boolean
isTranscludedFromTemplate :boolean
- Source:
Is the section transcluded from a template (usually, that template in turn transludes content, like here: https://ru.wikipedia.org/wiki/Project:Выборы_арбитров/Лето_2021/Вопросы/Кандидатские_заявления.)
Type:
- boolean
lastElement :Element|external:Element
- Source:
- Overrides:
Last element in the section.
Type:
- Element | external:Element
lastElementInFirstChunk :Element|external:Element
- Source:
- Overrides:
Last element in the first chunk of the section, i.e. all elements up to the first subheading if it is present or just all elements if it is not.
Type:
- Element | external:Element
(nullable) latestComment :Comment|undefined
- Source:
Latest comment in a 2-level section.
Type:
- Comment | undefined
level :number
- Source:
- Overrides:
Section level. A level is a number representing the number of =
characters in the section
heading's code.
Type:
- number
(nullable) liveSectionNumber :number
- Source:
Automatically updated sequental number of the section.
Type:
- number
liveSectionNumberRevisionId :number
- Source:
Revision ID of Section#liveSectionNumber.
Type:
- number
newComments :Array.<Comment>
- Source:
List of new comments in the section. ("New" actually means "unseen at the moment of load".)
Type:
- Array.<Comment>
oldestComment :CommentSkeleton
- Source:
- Overrides:
Oldest comment in the section.
Type:
queryTimestamp :string|undefined
- Source:
Time when Section#code was queried (as the server reports it). Filled upon running Section#loadCode.
Type:
- string | undefined
replyButton :Button|undefined
- Source:
Reply button at the bottom of the first chunk of the section.
Type:
- Button | undefined
replyForm :CommentForm|undefined
- Source:
Reply form related to the section.
Type:
- CommentForm | undefined
revisionId :number|undefined
- Source:
ID of the revision that has Section#code. Filled upon running Section#loadCode.
Type:
- number | undefined
(nullable) sectionNumber :number
- Source:
- Overrides:
Sequental number of the section at the time of the page load.
Type:
- number
(nullable) source :SectionSource|undefined
- Source:
Section's source code object.
Type:
- SectionSource | undefined
sourcePage :module:pageRegistry.Page
- Source:
Wiki page that has the source code of the section (may be different from the current page if the section is transcluded from another page). This property may be wrong on old version pages where there are no edit section links.
Type:
subscribeId :string|undefined
- Source:
The section subscribe ID, either in the DiscussionTools format or just a headline if legacy subscriptions are used.
Type:
- string | undefined
(nullable) subscriptionState :boolean
- Source:
Subscription state of the section. Currently, true
stands for "subscribed", false
for
"unsubscribed", null
for n/a.
Type:
- boolean
Methods
(static) initPrototypes()
- Source:
For internal use. Create element and widget prototypes to reuse them instead of creating new elements from scratch (which is more expensive).
addCommentFormToPage(mode, commentForm)
- Source:
Add a comment form targeted at this section to the page.
Parameters:
Name | Type | Description |
---|---|---|
mode |
string | |
commentForm |
CommentForm |
addMetadataAndActions()
- Source:
Add the metadata and actions elements below or to the right of the section heading.
addNewCommentCountMetadata()
- Source:
Add the new comment count to the metadata element. ("New" actually means "unseen at the moment of load".)
addSubscribeButton()
- Source:
For internal use. Add a "Subscribe" / "Unsubscribe" button to the actions element.
Fires:
addSubsection(initialStateopt, commentFormopt)
- Source:
Create an add subsection form form or focus an existing one.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
initialState |
object |
<optional> |
|
commentForm |
CommentForm |
<optional> |
Throws:
canBeMoved() → {boolean}
- Source:
Check whether the user should get the affordance to move the section to another page.
Returns:
- Type
- boolean
canBeReplied() → {boolean}
- Source:
Check whether the user should get the affordance to add a reply to the section.
Returns:
- Type
- boolean
canBeSubsectioned() → {boolean}
- Source:
Check whether the user should get the affordance to add a subsection to the section.
Returns:
- Type
- boolean
canFirstCommentBeEdited() → {boolean}
- Source:
Check whether the user should get the affordance to edit the first comment from the section menu.
Returns:
- Type
- boolean
cleanUpCommentFormTraces(mode)
- Source:
Clean up traces of a comment form targeted at this section from the page.
Parameters:
Name | Type | Description |
---|---|---|
mode |
string |
copyLink(e)
- Source:
Copy a link to the section or open a copy link dialog.
Parameters:
Name | Type | Description |
---|---|---|
e |
Event |
ensureSubscribeIdPresent(editTimestamp)
- Source:
Generate a DT subscribe ID from the oldest timestamp in the section and the current user's name if there is no.
Parameters:
Name | Type | Description |
---|---|---|
editTimestamp |
string | Timestamp of the edit just made. |
extractSubscribeId()
- Source:
Extract the section's subscribe ID.
findNewSelf() → (nullable) {Section}
- Source:
After the page is reloaded and this instance doesn't relate to a rendered section on the page, get the instance of this section that does.
Returns:
- Type
- Section
findRealLastElement(additionalConditionopt) → {Element}
- Source:
Find the last element of the section including
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
additionalCondition |
function |
<optional> |
Returns:
- Type
- Element
getAncestors() → {Array.<SectionSkeleton>}
- Source:
- Overrides:
Get the chain of ancestors of the section as an array, starting with the parent section.
The returned value is cached, so don't change the array in-place. (That's ugly, need to check if running .slice() on the array slows anything down. To be clear – this method is run very frequently.)
Returns:
- Type
- Array.<SectionSkeleton>
getBase(force2Levelopt) → (nullable) {Section}
- Source:
Get the base section, i.e. a section of level 2 that is an ancestor of the section, or the section itself if it is of level 2 (even if there is a level 1 section) or if there is no higher level section (the current section may be of level 3 or 1, for example).
Parameters:
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
force2Level |
boolean |
<optional> |
false
|
Guarantee a 2-level section is returned. |
Returns:
- Type
- Section
getChildren(indirectopt) → {Array.<Section>}
- Source:
Get the collection of the section's subsections.
Parameters:
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
indirect |
boolean |
<optional> |
false
|
Whether to include subsections of subsections and so on (return descendants, in a word). |
Returns:
- Type
- Array.<Section>
getClosestSectionSubscribedTo(includeCurrentopt) → (nullable) {Section}
- Source:
Get the first upper level section relative to the current section that is subscribed to.
Parameters:
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
includeCurrent |
boolean |
<optional> |
false
|
Check the current section too. |
Returns:
- Type
- Section
getCommentAboveReply(commentForm) → {Comment}
- Source:
If this section is replied to, get the comment that will end up directly above the reply.
Parameters:
Name | Type | Description |
---|---|---|
commentForm |
CommentForm |
Returns:
- Type
- Comment
getCommentFormMethodName(mode) → {string}
- Source:
Get the name of the section's method creating a comment form with the specified mode.
Parameters:
Name | Type | Description |
---|---|---|
mode |
string |
Returns:
- Type
- string
getIdentifyingData() → {object}
- Source:
Get the data identifying the section when restoring a comment form. (Used for polymorphism with Comment#getRelevantComment and Page#getIdentifyingData.)
Returns:
- Type
- object
getLastElement(followingHeadingElement, treeWalker) → {Element|external:Element}
- Source:
- Overrides:
Get the last element in the section based on a following (directly or not) section's heading element.
Sometimes sections are nested trickily in some kind of container elements, so a following structure may take place:
== Heading 1 ==
<p>Paragraph 1.</p>
<div>
<p>Paragraph 2.</p>
== Heading 2 ==
<p>Paragraph 3.</p>
</div>
<p>Paragraph 4.</p>
== Heading 3 ==
In this case, section 1 has paragraphs 1 and 2 as the first and last, and section 2 has paragraphs 3 and 4 as such. Our code must capture that.
Parameters:
Name | Type | Description |
---|---|---|
followingHeadingElement |
Element | external:Element | undefined | |
treeWalker |
TreeWalker |
Returns:
- Type
- Element | external:Element
getParent(ignoreFirstLevelopt) → (nullable) {SectionSkeleton}
- Source:
- Overrides:
Get the parent section of the section.
Parameters:
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
ignoreFirstLevel |
boolean |
<optional> |
true
|
Don't consider sections of the first level parent sections; stop at second level sections. |
Returns:
- Type
- SectionSkeleton
getRelevantComment() → (nullable) {Section}
- Source:
Get a comment relevant to this section, which means the first comment if it is opening the section. (Used for polymorphism with Comment#getRelevantComment and Page#getRelevantComment.)
Returns:
- Type
- Section
getRelevantSection() → {Section}
- Source:
Get a section relevant to this section, which means the section itself. (Used for polymorphism with Comment#getRelevantSection and Page#getRelevantSection.)
Returns:
- Type
- Section
getSectionSubscribedTo() → (nullable) {Section}
- Source:
Get the section used to subscribe to new comments in this section if available.
Returns:
- Type
- Section
getSourcePage() → {module:pageRegistry.Page}
- Source:
Get the wiki page that has the source code of the section (may be different from the current page if the section is transcluded from another page).
Returns:
getTocItem() → (nullable) {module:toc~TocItem}
- Source:
Get the TOC item for the section if present.
Returns:
- Type
- module:toc~TocItem
getUrl(permanent) → {string}
- Source:
Get a link to the section with Unicode sequences decoded.
Parameters:
Name | Type | Description |
---|---|---|
permanent |
boolean | Get a permanent URL. |
Returns:
- Type
- string
getWikilinkFragment() → {string}
- Source:
Get the fragment for use in a section wikilink.
Returns:
- Type
- string
(async) loadCode(commentFormopt)
- Source:
Load the section wikitext. See also Section#requestCode.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
commentForm |
CommentForm |
<optional> |
Comment form, if it is submitted or code changes are viewed. |
Throws:
locateInCode(useSectionCode)
- Source:
Locate the section in the source code and set the result to the Section#source property.
It is expected that the section or page code is loaded (using Page#loadCode) before this method is called. Otherwise, the method will throw an error.
Parameters:
Name | Type | Description |
---|---|---|
useSectionCode |
boolean | Is the section code available to locate the section in instead of the page code. |
Throws:
maybeAddAddSubsectionButton()
- Source:
For internal use. Add an "Add subsection" button that appears when hovering over a "Reply in section" button.
maybeAddReplyButton()
- Source:
For internal use. Add a "Reply in section" button to the end of the first chunk of the section.
move()
- Source:
Show a move section dialog.
parseHeadline()
- Source:
- Overrides:
For internal use. Parse the headline of the section and fill the headline property that contains no HTML tags.
reply(initialStateopt, commentFormopt)
- Source:
Create an add reply form.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
initialState |
object |
<optional> |
|
commentForm |
CommentForm |
<optional> |
(async) requestCode()
- Source:
Request the wikitext of the section by its number using the API and set some properties of the section (and also the page). Section#loadCode is a more general method.
Throws:
resubscribeIfRenamed(currentCommentData, oldCommentData)
- Source:
Resubscribe to a renamed section if legacy topic subscriptions are used.
Parameters:
Name | Type | Description |
---|---|---|
currentCommentData |
object | |
oldCommentData |
object |
showAddSubsectionButtonOnReplyButtonHover(baseSection)
- Source:
For internal use. Make it so that when the user hovers over a reply button at the end of the section for a second, an "Add subsection" button shows up under it.
Parameters:
Name | Type | Description |
---|---|---|
baseSection |
Section |
subscribe(modeopt, renamedFromopt)
- Source:
Add the section to the subscription list.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
mode |
'quiet' | 'silent' |
<optional> |
|
renamedFrom |
string |
<optional> |
If DiscussionTools' topic subscriptions API is not used and the section was renamed, the previous section headline. It is unwatched together with watching the current headline if there are no other coinciding headlines on the page. |
unsubscribe(modeopt)
- Source:
Remove the section from the subscription list.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
mode |
'quiet' | 'silent' |
<optional> |
|
update($html)
- Source:
For internal use. When the section's headline is live-updated in Comment#update, also update some aspects of the section.
Parameters:
Name | Type | Description |
---|---|---|
$html |
external:jQuery |
updateNewCommentsData()
- Source:
For internal use. Update the new comments data for the section and render the updates.
updateTocLink()
- Source:
Add/remove the section's TOC link according to its subscription state and update the title
attribute.
updateVisibility(show)
- Source:
For internal use. Set the visibility
CSS value to the section.
Parameters:
Name | Type | Description |
---|---|---|
show |
boolean | Show or hide. |