Follow TV Tropes

Following

Context Administrivia / TwoPointZero

Go To

12.0 is the name of a planned overhaul of the Website/TVTropes database and page handling systems.
2
3The key concept is that where nowadays pages are each one database object, in the future system they will instead be assembled from many database objects. Each of these objects is editable and has a history associated with it, similar to how pages work today. In technical terms, the wiki will be constructed from "relational database" elements rather than unstructured text.
4
5Other design goals are Unicode compatibility and integrated multi-language/translation support. All pages of the same trope or work will automatically link to the cross-language (identified as "same page ID, different language ID") versions thereof.
6
7[[foldercontrol]]
8
9[[folder:Core Concept]]
10* The wiki structure will move from flat text objects that are analyzed by a parser to a relational, data-driven system.
11* Articles, article components, and individual examples will be structured data elements.
12* Pages will be generated dynamically, allowing alternative views, sorting, filtering, and pagination, which can be controlled by individual user preferences (e.g. number of examples displayed per page).
13* Indexing, media tags, and other meta-data expressed as relationships.
14* Relationships between wiki objects in code rather than in text.
15* Integrated comment sections that permit conversations to be attached to any wiki element, but still viewed at the main article level.
16[[/folder]]
17
18[[folder:Purpose]]
19* Examples will automatically appear on both work and trope pages, making Administrivia/{{Crosswicking}} superfluous.
20* Tropes and works are now identified by an ID rather than by their name, which should facilitate renames.
21* Many editing rules (e.g Administrivia/ExampleIndentationInTropeLists or Administrivia/WhatGoesWhereOnTheWiki) will be enforceable by the software rather than by hand.
22* Administrivia/ConversationInTheMainPage would be diverted into comment threads, making it much less likely to be inserted into the article body.
23* There will no longer be a need to hard-split articles, as pagination, filtering, and grouping would allow a given article to handle any amount of content.
24* Actions (e.g editing, cutting) can be done now on a per-object basis without the need to apply them to the whole page.
25* Checks that rely on "diffs", such as spam filtering, text-replacer detection, and so on, can be applied only to a user's individual edits, not to the entire body of each article.
26* Articles would no longer be at hard-coded text [=URLs=]; rather, the parser would take a submitted URL and treat it as a database query, looking up the closest match. Disambiguation and prioritization would be automatic.
27* Article subpages would no longer be hard-coded but rather based on the user’s filtering selection. Certain types of subpages could have predefined style/layout.
28[[/folder]]
29
30[[folder:[=URLs=]]]
31Article linking (URL construction and querying)
32In the new system, an article will have an internal ID value that forms its permanent URL. Examples: https://tvtropes.org/wiki/3885774 = The Lord of the Rings, Literature. https://tvtropes.org/wiki/549437 = Big Bad.
33
34All other wiki [=URLs=], other than to static objects like AskTheTropers, will be treated as database queries. These queries will contain parameter elements that identify the search terms. Certain parameter elements will also modify the display of the article, such as sorting, filtering, subpage display, etc.
35
36A “human friendly” URL will contain textual parameter elements separated by slashes, which the parser will take a “best guess” at, returning the element with the highest probability if there are insufficient secondary matches, or a list of elements that the user must choose from if the ambiguity is above a certain threshold.
37
38Human-readable default URL
39* All articles should have a human-readable default URL that contains all the information needed to uniquely disambiguate it. The wick component (everything after https://tvtropes.org/wiki) would be used in the editor instead of the ID to avoid confusion.
40
41Complex [=URLs=]
42* The expanded destination URL will look something like https://tvtropes.org/wiki/search.php. May have synonyms.
43
44Search parameters may include any of the following:
45* id -- Article ID. If found and valid, this will generate an exclusive result.
46* title (t) -- Article title. This will generate a fuzzy query against the title repository.
47* type -- Article type. Allows all page types.
48* medium (m) -- Medium. Reference against medium index, smart enough to understand nesting.
49* genre (g) -- Genre. Reference against genre index, smart enough to understand nesting.
50* author (a) -- Author. Reference against Creator articles related to work page.
51* year (y) -- Publication year.
52
53Presentation parameters may include any of the following:
54* subpage (sub) -- Subpage: could be YMMV, WMG, Characters, or any supported subpage filter.
55* filter (f) -- Synonym for subpage.
56* sort (s) -- Sort: choose from sort options (alpha, date added, date modified)
57* group (grp) -- Group: choose grouping: medium, genre, trope category, etc.
58* page (p) -- Page number in a paginated article.
59* length (l) -- Number of examples listed on each page.
60* view (v) -- Read (default), Edit, Comments, Images, Quotes, History
61
62Examples of complex [=URLs=]:
63* https://tvtropes.org/wiki/search.php?id=3885774
64:: Resolves uniquely to The Lord of the Rings, Literature
65* https://tvtropes.org/wiki/search.php?title=The%20Lord%20of%20%the%20Rings
66:: Finds multiple hits, shows disambiguation or franchise landing page if available.
67* https://tvtropes.org/wiki/search.php?t=LordOfTheRings&a=Tolkien
68:: Titles without spaces are acceptable in [=URLs=], so are partial names of authors. This will resolve to the LOTR book article.
69* https://tvtropes.org/wiki/search.php?id=3885774&grp=tropecategory&l=50
70:: This will return the LOTR article with 50 examples per page, grouped by trope category (plot, character, production, etc.)
71* https://tvtropes.org/wiki/search.php?t=LordOfTheRings&y=1954&v=Comments
72:: This will return the LOTR literature article in the Comments view.
73* https://tvtropes.org/wiki/search.php?t=BigBad&type=trope
74:: This will find the Big Bad trope article.
75
76Friendly [=URLs=]
77The wiki parser should also understand [=URLs=] submitted in a more reader friendly format, using fuzzy logic to handle them. Rather than using parameter elements, forward slashes will separate terms that will be fed to a search engine.
78
79Examples of friendly [=URLs=] and handling:
80* https://tvtropes.org/wiki/LordOfTheRings
81::[=URLs=] with a single text object will assume a title search. This will resolve to a disambiguation page or a franchise landing page.
82* https://tvtropes.org/wiki/LordOfTheRings/film
83:: [=URLs=] with two components will assume one to be the title and the other to be an author, genre, type, medium, or year keyword. This will find two hits: the Bakshi animated film and the Jackson live action film, and generate a disambiguation.
84* https://tvtropes.org/wiki/LordOfTheRings/1955
85:: This will match one of the publication dates of the original LOTR books and so will resolve to the literature page.
86* https://tvtropes.org/wiki/LordOfTheRings/edit
87:: This will recognize the ‘edit’ keyword asking for the page to be shown in edit mode.
88* https://tvtropes.org/wiki/Literature/LordOfTheRings/Characters/Legolas
89:: This will find the Lord of the Rings literature article, open it to the Characters view, and drill down to the tropes associated with the character Legolas.
90* https://tvtropes.org/wiki/Characters/Legolas
91:: This will arrive at (a) the work-agnostic general article for the character Legolas, (b) a disambiguation page showing all matching character articles, (c) the Lord of the Rings character, Legolas, if there is only one such entry.
92
93Search and Indexing
94* It should be possible to enter queries without a title element; this would be interpreted as an index search.
95** https://tvtropes.org/wiki/search.php?genre=Fantasy&medium=Literature&year=1950-1959
96** https://tvtropes.org/wiki/Fantasy/Literature/1950-1959
97* Both of these queries will enumerate all works in the Fantasy genre and the Literature medium published between 1950 and 1959.
98
99Note that some degree of prioritization is implied in the “fuzzy” searches; it will be necessary to rank indexes higher than tropes and works, for example.
100[[/folder]]
101
102[[folder:Article/Page]]
103When a page is parsed a query calls all these elements and the parser assembles the final HTML. This HTML may be cached so that it doesn't need to be re-parsed with each request. Several types exist, all with particular element types that can be associated with them:
104* Administrivia (Just a description element)
105* Trope.
106* Work.
107
108RealLife will be a special work page, with additional restrictions. These page types are hard coded and cannot be changed.
109
110Then the wiki would gather all the relational elements of the article and assemble them.
111* The displayed title would be the Title element identified.
112* The header would contain a set of controls to visit its related sub-elements. For example, if an article has an associated Analysis text element, it would be available to click on. This is similar to current buttons. The header would contain an automatically generated subpage filter for examples. For example, if there are any examples on a work article linked to tropes flagged as YMMV, then those would not appear on the main article display, but instead there would be a “YMMV” filter available to select.
113* For articles that are parents (they index child articles, as a trope index, author index, etc.; they have child relationships such as a franchise with sub-works or a serial work with episode/volume articles), a list of child articles will be displayed. This should be collapsible and sortable. Some form of control over the organization of the list may be useful, as would some form of nesting.
114* In the examples section (if that section is not hidden by mod control), up to [X] examples would be shown based on defaults and/or the user’s preferences in alphabetized form. If more than [X] examples are present, pagination controls would appear. Folders would appear for tropes based on the medium categories of the works linked to its examples. \
115(Note: Discuss how/whether to automatically folderize work articles.)
116* Examples would be automatically indented as appropriate. When more than one example for a trope/work is present, the nested examples should be organized by the relationship hierarchy (see below for more).
117* At the top of the examples section, sorting and filtering controls would be present. Possible sorts: alphabetical, by medium (for trope articles), by trope category (for work articles), by character (for work articles), by date added, etc.
118* In the footer of the article, additional [=URLs=] would be shown along with the Stinger text element, if present.
119
120[[/folder]]
121
122[[folder:Objects, also named "elements"]]
123%%
124%% When adding new elements here, remember to update other sections. Especially per element functions!
125%%
126Each of these is created either during page creation or by an addelement function. Individual elements each have an ID that cannot be reused. They have a history page and an edit page associated with them.
127* Analysis: Several per page, can be created by an addelement function. Allows bullet points.
128* Description: One per page, contains the description text and is created during page creation. Deleting a description is what "cuts" a page. Allows bullet points.
129* Example: These contain example text and are connected each to a trope and a work. They can be flagged with PlayingWithATrope, potentially also through the markup. Also, there will optionally be two versions of the example text, for work page and trope page.
130* ImageLinks: Several per page, allow links to image [=URLs=]. Need a dedicated addImageLinks function.
131* Laconic: One per page, can be created during page creation or afterwards, displays a laconic. Automatically formatted.
132* PlayingWith: For tropes, allows a formatted list of PlayingWith elements.
133* Quote: Formatted like quotations, these hold quotes. Each is attached to a trope ''or'' work.
134* Self-Demo: A free form page, sort of an equivalent to description. Allows bullet points.
135* Settings: One of each exists for each page/article and is created during page creation. It applies cross-language. By default only editable by moderators, it includes all per-page settings:
136** "Global lock" (elements associated with that article are only moderator editable), "Google ads" (for whether to display Google ads), "Fake redlink" (overriding the blue link colour for [=URLs=] pointing at the article), "Funky markup" (allowing text colours and strikethrough), "Spoiler tags" (whether to allow spoiler tags on associated elements to work)
137** For works, "Published" (for DarthWiki/UnpublishedWorks, disables crosswicks)
138** For tropes, "Trope" (AudienceReaction, Administrivia/ExampleSectionectomy, FlameBait, Trivia, Trope, UsefulNotes; each controls the appearance and induces filtering in default appearances, plus setting banners) and "RealLife examples allowed?" (implements Administrivia/NoRealLifeExamplesPlease)
139* Stinger: One for each page, is an optional element that can be added. Each page can only have one visible stinger element. Formatted like a quote.
140* Title: One for each page, is created during page creation and only moderator editable afterwards. It contains the appearance of the article title (similar to a Administrivia/CustomTitle).
141[[/folder]]
142
143[[folder:Per-element functions]]
144Aside from standard editing, there are functions associated with elements. They are all subject to locks and edit bans. Some of them will be assisted with AJAX (e.g ) but there will be non-scripting fallbacks. All such functions generate an entry both in the edit history of the element and the troper in question.
145* Change Play: For examples, it allows the Playing With status of an example to be changed.
146* Edit: Obvious.
147* Delete: Available for moderators on most elements save for Settings and Title, it automatically hides the element text and its history behind a splash page "Element X was deleted by Y on date Z for reason: A" for anyone who isn't a moderator. This element is automatically excluded from queries.
148* Delist: Available for everybody on examples, ImageLinks, quotes and Analysis, it hides the element from queries, thus also from example and quote lists. A banner named "Element X was delisted by Y on date Z for reason: A" appears above the element. It generates an entry both in the edit history of the element and the troper in question.
149* History: Obvious.
150* Lock: Done by moderators. It generates an entry both in the edit history of the element and the troper in question.
151** A plain lock does prevent non-moderators from modifying the element in question.
152** A "cascading lock" (which does not imply a plain lock!) tells the addelement function to not permit to add elements that feature the metadata (elementtype+work+trope combination).
153** A button to simultaneously perform "delete" and "cascading lock" - "salt"? - is also good.
154* Move: For quote, Analysis, ImageLinks, example elements, it allows one to change the trope or work the element is associated with.
155* Relist: It automatically creates a clone of a delisted element (including its history) but set to "not delisted". Allowed everywhere delisting is allowed.
156* Revert: A moderator button which allows older versions of an element to be restored.
157* Translate: Applies to all elements save for Settings, it allows elements to be translated in different languages while forking the element. It automatically assigns the correct language ID while keeping the page ID(s) identical. It needs to check that no elements are created for tropes whose descriptions weren't yet translated in the given language.
158* Undelete: It automatically creates a clone of a deleted element (including its history) but set to "not deleted". Allowed everywhere deletion is allowed.
159
160Some markups may be allowed only in particular elements. Direct links to elements are excluded from search engines.
161[[/folder]]
162
163[[folder:Other functions]]
164The "New Edits" function needs to be filterable on per-element and per-action (e.g Delete) basis. And perhaps per troper - having two different functions for edit lists is rather pointless.
165
166Related To pages:
167* Element ought to be assessed individually by the Related To page. In other words, the page would no longer list wicks on a per-article basis, but on a per-elements one.
168* It also should link to the edit page for each section linked to.
169* A function to remove "ghost wicks" from there.
170* Wicks should be listed by element and page type, not by alphabet.
171* There are other requests in various threads, which can be found in the forum search "related" - of course, some might not be feasible for performance reasons.
172
173A function to rename tropers may be desirable, it will need a system in the backend.
174
175A way to have Edit Notices for pages meeting particular criteria? They would replace the standard edit tips on the pages concerned.
176
177A way to merge one page ID into another. This is a moderator tool that works irreversibly to reassign elements from one page ID to another. Useful to handle translation goofs as well as duplicates.
178[[/folder]]
179
180[[folder:Troper permissions]]
181* Global moderator: They have all the non-wiki tools as well as the ability to grant and revoke local moderator status on a per language basis.
182* Local moderator: Assigned per language domain, they have the ability to (un)lock and (un)delete elements as well as to edit them in the locked and view them in the deleted state. They are limited to their assigned language domain.
183[[/folder]]
184
185[[folder:Save element edit actions]]
186Aside from standard editing, there are functions associated with elements. They are all subject to locks and edit bans. Some functions will be assisted with AJAX (e.g ) but there will be non-scripting fallbacks. Edit pages are accessible by an unique URL addon to the element ID URL.
187* It checks any added links that they resolve to an unique function
188* For examples, it checks that the trope exists
189* For examples, it checks that the example text is sufficiently long
190* It checks whether the entry text contains Administrivia/WordCruft, Administrivia/FirstPersonWriting and other problem items. Needs a configuration function.
191[[/folder]]
192
193[[folder:Createpage and createlement actions]]
194Aside from standard editing, there are functions associated with elements. Aside from standard edit bans, special bans may apply to both. Some functions will be assisted with AJAX (e.g ) but there will be non-scripting fallbacks. In the following order:
195# For all elements, it needs to check whether they have at least one page they are attached to.
196# For examples, it needs to check whether the trope exists; the work existing is not so important.
197# It needs to check whether the submitted element clashes with a "cascading lock", and reject it if it clashes and is submitted by a non moderator.
198# It checks whether the entry text contains Administrivia/WordCruft, Administrivia/FirstPersonWriting and other problem items. Needs a configuration function.
199
200One idea is to have addexample be only linked from trope pages, to force people to read the description. Also, maybe having a function that can convert free-form text into structured elements is useful. Perhaps reuse the Conversion script?
201[[/folder]]
202
203[[folder:Mass edit function]]
204# Access to the function is granteable by moderators, but is not assigned to anybody by default. Access adds a "Mass Edit Query" form in the sidebar.
205# The form allows one to fetch all elements containing a) a link to a given page or b) a given text string (e.g "This troper"). Perhaps make it so that it allows wildcards, case sensitive or insensitive selection or markup- or view-specific search.
206# Saving the query generates a list of elements, each of them displayed in edit mode. The initial page contains as many elements as can be a) loaded by a browser and b) as can be saved in one go without causing server lag. If too large, the list should be paginated with paginated [=URLs=] so that the entire query can be displayed in tabbed form.
207# Each element can be edited (during the save process, unedited elements are not altered) and has checkboxes allowing for actions (e.g "Delist", "Put into Maintenance mode" or "Move", equivalent to the element action buttons).
208# Each page has a Save button and an edit reason input box. Saving causes all the elements be modified if they were edited or some action was selected, using the input edit reason. The other pages part of the paginated query can be edited/modified afterwards (the save affects only the elements on a particular pagination, not all queried elements).
209[[/folder]]
210
211[[folder:Convert]]
212Presumably, we'll write a script that will go through all current wiki articles and convert them into the new database structure. For a substantial percentage of articles, there will be markup that an automated parser is not able to understand. How shall we deal with this problem?
213The proposal:
214* Don't convert everything all at once. Instead, the new and old designs will run parallel for a while.
215* Articles will be, over time, entered (automatically or manually?) into a transport queue.
216* The agent driving the queue will come up with a "confidence" value indicating how much of the content was successfully converted.
217* Articles over a certain confidence value will get converted automatically.
218* Articles below this confidence value will be flagged for user attention.
219* Articles in the queue should be automatically locked to (a) prevent data conflicts, (b) encourage editors to participate in the conversion process.
220* User attention would involve any/all of:
221** Cancelling the conversion to spend more time cleaning the article.
222** Correcting the article's destination (example: subpages merging with main article, proper medium tags for works, etc.).
223** Fixing markup in the article that is not recognized by the parser.
224* When an article is converted, the existing article is removed from view, automatically redirects to the new article, and generates a HTTP 301 code for referrers.
225** The old content should be archived in case a reversion (or re-conversion) is needed.
226** The old history and discussion pages would be archived in a read-only mode.
227* Converted articles would contain an "unconverted markup" section that would show any markup that was not successfully transported.
228* In the conversion queue, prioritize high level docum
229
230[[/folder]]
231
232[[folder:Open questions]]
233* Adaptations and franchises, how to make a hierarchy of them.
234* Substitute for commenting out elements?
235* Compare/Contrast element? See [[https://tvtropes.org/pmwiki/posts.php?discussion=14556697700A23839500 thread]].
236* Connecting article ID with an URL or several
237* Creator pages?
238* Createpage restrictions for Administrivia?
239* Crosslanguage links?
240* "Curator" user right?
241* Customizability of the example section header?
242* Decide on how to handle languages.
243* Discussion as well as whether to put a link to it on edit forms
244* How to handle character pages?
245* ID thing creates some hairy problems if a page is cut then recreated (say, for having insufficient examples) ... examples would become disconnected from the new page. Basically, how the createarticle function for works would "catch" already existing examples for that work.
246* Images: Markup things or individual elements?
247* Indexes and Categories?
248* Laconic as hovertext?
249* Language specific bans?
250* Media categories?
251* Merge ID function?
252* Meta information: Authors, Genres, Publication for works and Trope Attributes (e.g Appearance Trope, not the same thing as Trope Types in "Settings"). Some could be tied to particular example types in the addexample function.
253* Old histories: AKA the old edits by troper, page histories and "combined history". These should be archived in watch-only mode, linked from the appropriate new pages.
254* Page creation: When to trigger it
255* Post-expand article size: How many elements of how much length can be parsed before pagination.
256* Administrivia/PermanentRedLinkClub: How to enforce it?
257* Administrivia/PermanentRedLinkClub: Allow examples from works in there?
258* Recap pages?
259* Red links?
260* Report function
261* Rotation of images
262* Sandbox namespace
263* Selective deletion: The deletion system should apply to edit reasons as well, hiding them from non-moderators but still displaying to staff (with the red border and note as mentioned under Deletion, as well as the ability of restoring). Maybe such a system could apply to old versions of elements, hiding the history entries around the deleted version. Same stipulations as before regarding visibility to staff, red border and note/un-deletion ability.
264* Spoilers
265* SugarWiki/SugarWiki and DarthWiki/DarthWiki
266* Tagging: Characters? See also [[https://tvtropes.org/pmwiki/posts.php?discussion=14478420050A97600200&page=5#108 here]].
267* Translations: [[https://tvtropes.org/pmwiki/posts.php?discussion=14509679370A24783300&page=1 One proposal]], another exists.
268* Troper pages
269* Examples for nonexistent works
270* Integrated voting feature for sections like Quotes, Images, and Moments.
271* How to work with Recap, Timeline and Fanworks namespace pages.
272* Watchlist.
273* Wicks: Current standard link to URL or internally replaced with an ID?
274* WMG and Headscratchers
275* ZCE rule exemption?
276[[/folder]]

Top