User talk:Mervil

From Guild Wars 2 Wiki
Jump to: navigation, search

wikicode questions from your userpage[edit]

  1. How does {{#if: }} remove white space?
    • #if is a parser function whose first parameter is the value to test for "truth"; the second and third parameters are the "then" and "else" output, respectively. By placing the #var derivations within the first parameter and omitting the second/third parameters, all of the #vars are still derived, but the #if produces no output. It allows for cleaner formatting of the #var derivations (code indentation, etc.) without having to use HTML comment tags to hide the whitespace.
  2. How does the property [[Has game icon]] have a parameter that gets passed, like |40px in this code: [[Has game icon::File:{{#ifeq:{{lc:{{{rarity|}}}}}|ascended|ascended}} recipe sheet.png|40px]]
    • If you leave out the annotation, that become a simple File: inclusion: [[File:{{#ifeq:{{lc:{{{rarity|}}}}}|ascended|ascended}} recipe sheet.png|40px]]. The annotation sets the property value to the File: pagename; everything else is parameters for the File: inclusion. It works the same if you pipe a non-file page link, e.g. [[Requires discipline::Armorsmith]] versus [[Requires discipline::Armorsmith|foo]] - the property gets the same value, but the second one displays "foo" for the link text.
  3. in the code exampled in #2 above, what does the page parser do with the white space in front of the text "recipe sheet" if "rarity" is not equal to ascended?
    • Whitespace between a namespace (i.e. File:) and a pagename is ignored by MediaWiki.
  4. how are properties actually set in this wiki? is it using infoboxes? what about an item's icon property, is that also set with the infoboxes?
  5. in the following code, [[Has game icon::File:{{{icon}}}|40px]], how is this handled compared to code that contains the pipe after the parameter name, as in {{{icon|}}}
    • A pipe following a parameter name is for supplying a default value if the parameter was not defined in the template invocation. I.e. {{{icon|foo}}} would return the value "foo" if the icon parameter were not defined. Using a pipe but not giving any default value will make the parameter default to the "empty string", which is useful when using #if functions to test for a non-blank parameter. Typically we only reference a parameter without that empty default within an #if block where we've already tested the parameter, so there's no need to default it again.
  6. how does the #arraymap function work?

Dr Ishmael User Dr ishmael Diablo the chicken.png 05:01, 5 November 2015 (UTC)

Thank you for your responses. They helped!
  1. So the annotation after the pipe for the file page link (40px), is specific to the file: namespace, so the base mediawiki code knows how to handle it, right? It's not something that is a parameter passed to a template, right? Just like text after a pipe in a page link is automatically understood by the wiki software to be the displayed link text?
  2. Can you help me understand the [[Template:Achievement]] template a little better? It appears that the "infobox" for achievements is the Template:Achievement_table_row template. Is this table row template linked to the achievement template in any way?

Thanks! ~Mervil User Mervil Sig.png 07:40, 5 November 2015 (UTC)

  1. Yes, the file namespace is a special namespace for files and has its own syntax in wiki markup. Mediawiki is smart enough to know the 40px means the size of the image.
  2. The achievement template looks up any achievements that identify the page has the Property:Has achievement page. Usually, a single achievement will have a single page. Most don't have a page. Some pages can have multiple achievement point to them. This is typically for use on pages where you are giving a walkthrough for the achievement and want to display the achievement information. If you specify a name, it will list all achievements with that name. All the data is stored in a subobject generated by Achievement table row. There is an entire write up for it on Guild Wars 2 Wiki:Achievement formatting.
--Relyk ~ talk < 08:16, 5 November 2015 (UTC)
For more on images, see mw:Help:Images. —Dr Ishmael User Dr ishmael Diablo the chicken.png 14:48, 5 November 2015 (UTC)

#arraymap help[edit]

I've been reading the webpage provided above, as well as looking at code that utilizes the #arraymap function, but I'm still not understanding it. I'm familiar with the concept of arrays in other programming software--storing multiple variables in one variable, set with dimensions. Is the concept the same here? What are valid values to use for #arraymaps? What is the use of @@@? Thanks. ~Mervil User Mervil Sig.png 19:34, 5 November 2015 (UTC)

{{#arraymap:<delimited string>|<delimiter>|<placehoder pattern>|<array-mapped wikicode>|<new delimiter>}}
  • <delimited string> is the string you want to treat as an array. Typically, it looks something like 1, 2, 3
  • <delimiter> is the text pattern you want to split the <delimited string> on, i.e. ,
  • <placeholder pattern> is the text pattern you will use within the next parameter to refer to each array element, typically a string of punctuation that would never occur in normal wikicode like @@@
  • <array-mapped wikicode> is the code that will be applied to each array element. The value of the element is referenced using the <placeholder pattern>.
  • <new delimiter> is the text pattern you want to be inserted between each <array-mapped wikicode> output. Usually this is either blank or a newline.
Example: {{#arraymap:1,2,3|,|@@@|* blah: @@@|\n}}
  • blah: 1
  • blah: 2
  • blah: 3
Dr Ishmael User Dr ishmael Diablo the chicken.png 19:47, 5 November 2015 (UTC)

Calling a template in an inline query[edit]

I've read about result formatting in inline queries by following a link in the GW2:Semantic Wiki page. I thought I understood the concept, but then I found an example of code on the Template:Achievement table header template, as follows:
{{#ask:[[Has achievement category::{{{1|{{PAGENAME}}}}}]]|?Has achievement tiers|?Has AP cap#|mainlabel=-|format=template|template=Parse tier}}
I have several questions about this code.

  1. How is the parameter {{{1}}} functioning in this specific line of code? It appears that the template is using named parameters, so wouldn't this parameter be unavailable?
  2. Don't #ask functions usually produce an output, usually a table? Even with the mainlabel turned off (mainlabel = -), shouldn't this produce a table of some kind when the table header template is called?
  3. This #ask query is going to find all pages that have a value for the property "Has achievement category" that is equal to {{{1|{{PAGENAME}}}}}, correct? (which will essentially be {{PAGENAME}} since {{{1}}} is non-existant, I assume). So the template "Parse tier" gets called everytime one such page is found, correct?
  4. The "Pars tier" template also handles two parameters: {{{1}}} and {{{2}}}. It doesn't appear that when the template is called (|template=Parse tier) that any parameters are passed, yet this whole function seems to be working appropriately. What is being passed to the template "Parse tier"? is it the values of the properties being requested in the initial #ask function (?Has achievement tiers and ?Has AP cap#)?

You guys have been very helpful! Thank you!

~Mervil User Mervil Sig.png 21:23, 5 November 2015 (UTC)

  1. I don't know, Relyk's the one who worked most on that template. I'd guess it's either undocumented or supposed to be name.
  2. SMW actually does a sort of "internal arraymap" when it produces output. It selects a list of pages based on the query conditions, then for each page, it produces formatted output based on a) the format specified and b) the properties requested to be returned (with |?<prop name> notation).
    • With | format = ul, the "internal arraymap" produces a <li> element for each page within a <ul> wrapper.
    • With | format = table, it produces a table row for each page.
    • With | format = template | template = <template name>, it instead sends the pagename and all of the requested properties as unnamed (numbered) input parameters to the specified template, and the template then produces the output for each page.
  3. Yes, exactly.
  4. As I said above, SMW passes the pagename as parameter 1, then all returned properties as subsequent unnamed parameters. In this case, Has achievement tiers will be 2, and Has AP cap will be 3. Usually, the format template documents these input parameters like Template:Trait table row.
Dr Ishmael User Dr ishmael Diablo the chicken.png 21:42, 5 November 2015 (UTC)
Thanks Doc! One more question regarding your response to #4 above. Looking at the code for the "Parse tier" template, the code runs an #arraymap function on parameter {{{1}}}. This wouldn't make sense to me if {{{1}}} was the pagename, but does make sense if {{{1}}} is the first returned property Has achievement tiers. So, it appears that {{{1}}} may be the first returned property. If this is the case, does the pagename actually get passed as a parameter? If so, as what? Since all the template code is transcluded to the calling page anyway, wouldn't pagename be the same no matter which template code is being operated at any given time, therefore negating the need to pass a pagename parameter? Thanks, again! ~Mervil User Mervil Sig.png 21:59, 5 November 2015 (UTC)
Ah, I missed that - the #ask setting |mainlabel=- means to not return the main column (pagename) at all. So in this case, pagename is not passed to the formatting template, and the two returned properties are parameters 1 and 2 (instead of 2 and 3).
What I'm calling "pagename" here is referring to the object identifiers that #ask selected based on the query conditions. Usually, the object identifier is a pagename (out of the list of pagenames selected by #ask based on the query conditions). But in this case, it's a subobject identifier - Template:Achievement table row is called once per achievement on an achievement category page (e.g. Explorer), and each instance creates a subobject that contains the properties for that achievement alone, in order to keep them distinct from each other. We do the same thing with Template:Recipe since there can be multiple recipes that produce the same output item, like Iron Ingot.
In any case, a subobject identifier can't really be used for much of anything, so there's no point passing it to the formatting template here. —Dr Ishmael User Dr ishmael Diablo the chicken.png 22:27, 5 November 2015 (UTC)

Order of template operations and property assignment[edit]

I noticed in the "Achievement table header" template, that it makes an #ask query for Has achievement category, but this property isn't set until the "Achievement table row" template is run. The header template "runs" before the row template, so how does this end up working? ~Mervil User Mervil Sig.png 23:13, 5 November 2015 (UTC)

It won't, the first time you save the page. But if you then purge the page (the "refresh" tab at the top), it will be able to read the property values that were set by the row template on the initial save, and it will work. —Dr Ishmael User Dr ishmael Diablo the chicken.png 23:39, 5 November 2015 (UTC)

Questions about specific lines of code[edit]

Parse Tier template[edit]

This code is from the "Parse tier" template:
{{#arraymap:{{{1}}}|~|@@@|{{#vardefine:table_tier_total|{{#expr:{{#var:table_tier_total|0}} + {{#if:{{#explode:@@@|;|1}}|{{#replace:{{#explode:@@@|;|1}}|?|0}}|0}} }}}}|}}

This code all makes sense to me now (thanks to Dr. Ishmael for explaining #arraymap!), until the #replace function. Focusing just on the piece of replacing code:
The question mark in this code--is it serving as a wildcard, so that all numbers are going to be replaced with a zero, or is it looking for an actual question mark string "?" that it replaces with a value of zero? ~Mervil User Mervil Sig.png 23:13, 5 November 2015 (UTC)

I think that's intended to handle cases where people write up the page before they have all the data, and they leave "?" as the AP value for some of the tiers. It just says "if I see a ?, treat it as a 0 so the #expr doesn't throw an error." —Dr Ishmael User Dr ishmael Diablo the chicken.png 23:41, 5 November 2015 (UTC)

Achievement table row: anchors and subobjects[edit]

  1. OK. This one has got me bewildered. The code for the Achievement table row template is interesting, but confusing. It uses the wiki template anchor. What exactly does "anchor" do? It appears that each time "Achievement table row" is ran on a page, a new anchor is created with name of achievment1, achievment2, achievment3, etc. That much I can tell, but still, what does this anchoring do?
  2. What is happening here with this code?
  | meta = [[File:Tournament Master (map icon).png|20px|link=Achievement|This is the meta achievement for this category]]
  | repeatable
  | parent = {{#if:{{#ask:[[Has achievement category::{{PAGENAME}}]][[Has achievement type::meta]]}}|[[File:Icon No ingame.png|20px|link=Achievement|This achievement does not count towards the category's meta achievement]]}}
In particular, the "parent =" switch option is what is causing confusion here. If the type is already specified to be "parent" in the template call, how can Has achievement type equal meta?
  1. What does the "#" do in the following code between {{PAGENAME}} and {{{parent}}}?
    {{#if:{{{parent|}}}|({{#if:{{#show:{{PAGENAME}}#{{{parent}}}|?Has canonical name}}|[[{{#show:{{PAGENAME}}#{{{parent}}}|?Has canonical name}}|{{{parent}}}]]|{{{parent}}}}})}}
  2. How do subobjects work?
    {{#if: {{NAMESPACE}} | <!-- no subobject if outside mainspace --> | {{#subobject:achievement{{#var:achievement_count}}
  3. How do I get the numbering to work right here, lol.

~Mervil User Mervil Sig.png 00:00, 7 November 2015 (UTC)

  1. All it's doing is creating an HTML anchor <a id="anchor name"> that you can link to, just like section headers already have. See mw:Help:Magic_words#URL_data.
  2. It's querying the database to see if there is any meta achievement for the category. If there is one, then it displays the icon to indicate that this repeatable achievement doesn't count towards the meta.
<number reset>
  1. That's how subobjects are referenced. This is trying to lookup the canonical name of the parent achievement, as documented in the parent achievement's subobject.
  2. A subobject is a "page within a page." See smw:Help:Adding subobjects. They only exist in the semantic universe; they aren't actual wiki pages. It's a way of documenting multiple "things" together on a single wiki page, so we don't have to create individual pages for every one of them. See Iron Axe (loot) - every row in that table creates a subobject to document that specific variant of the item, so that we don't have to create 150 pages for each of the 150 variants.
  3. You have to have a # sign at the beginning of every single line. Any break will make MW close the </ol> and then start a new <ol> when it sees another one.
Dr Ishmael User Dr ishmael Diablo the chicken.png 00:33, 7 November 2015 (UTC)
  1. So, it creates those anchors. Can you refer to these anchors outside of the page that creates them? Are these anchors stored in the data of the page or does the wiki create actual page links for them?
  2. I'm sorry, but I'm still confused here. Using Bazaar of the Four Winds (achievements) and the Learn to Kite achievement as an example:
| meta = [[File:Tournament Master (map icon).png|20px|link=Achievement|This is the meta achievement for this category]]
| repeatable
| parent = {{#if:{{#ask:[[Has achievement category::{{PAGENAME}}]][[Has achievement type::meta]]}}|[[File:Icon No ingame.png|20px|link=Achievement|This achievement does not count towards the category's meta achievement]]}}
In the above code, {{{type}}}=parent. {{PAGENAME}}=Bazaar of the Four Winds (achievements). It doesn't appear that the page Bazaar of the Four Winds (achievements) has any achievement-related property values assigned, let alone Has achievement type. So, this code shouldn't work at all, but it does. I don't understand how.
  1. So if a subobject is being referenced here, when/where is it created? There is no preceding code in the "Achievement table row" template that defines a subobject.
~Mervil User Mervil Sig.png 01:44, 7 November 2015 (UTC)
  1. Anytime you see a URL that ends with #stuff (whether on the wiki or on any other website), that URL is linking to an anchor within the page. It's what makes the browser automatically scroll the page to a specific location. As I said, the wiki automatically creates anchors for section headers; the {{anchorencode:}} magic word allows you to define additional anchors wherever you want.
  2. You really need to try running these queries outside of all the complicated templates and formatting. Just run the #ask by itself to see what it returns:
    {{#ask:[[Has achievement category::Bazaar of the Four Winds (achievements)]][[Has achievement type::meta]]}} = Bazaar of the Four Winds (achievements)#achievement696
    As I mentioned above, this is the way that SMW references subobjects. Also as I said above, this query is looking for the meta achievement within the category, which is Bazaar Ambassador, which is where that anchored link takes you.
    (It looks like an anchor link, but it (normally) doesn't work because SMW doesn't create an anchor when it creates a subobject. However, this template creates one with the same name as the subobject by calling {{anchor}} on line 10.)
    This might help it make more sense: There's a special page, Special:Browse, for looking at the semantic properties of pages. Special:Browse/Bazaar of the Four Winds (achievements) shows you the properties and their values for the B4W page. Under Has subobject, it lists all of the subobjects that exist within that page; click on the eye icon to browse the properties of the subobjects.
  3. The subobject is created with a #subobject function. In this template, it's at the end of the code, just before the </includeonly><noinclude> tags.
Dr Ishmael User Dr ishmael Diablo the chicken.png 03:38, 7 November 2015 (UTC)
Thank you for your answers to these questions. They have been very helpful. A few more points of clarification:
  1. I understand the anchor use, and purpose now, but there's one last thing that isn't clear yet. That is, in the Achievement table row template, the anchors are assigned to "achievement1" and "achievement2", etc. rather than the names of those achievements, such as "Diverse Trader" or "Learn to Kite". It appears that "achievement1", "achievement2", etc. are indeed anchored, and I can navigate to those specific table rows using #achievement1, etc. So where/how do "Diverse Trade" and "Learn to Kite" etc get anchored?
~Mervil User Mervil Sig.png 14:06, 7 November 2015 (UTC)
On line 9 of the template, just before the {{anchor}} call, it sets the table row's id attribute to the achievement name. Like I said above, you can use any element's id as an anchor, not just <a> elements (if you look at the code in our anchor template, you'll see it's just creating an empty <span> element with an id). —Dr Ishmael User Dr ishmael Diablo the chicken.png 16:17, 7 November 2015 (UTC)

Has suggested locations property[edit]

In the achievement table row template, at the end when the subobjects' properties are set, I found this line of code:

Has suggested location ={{{location|{{#var:location}}}}}.

I'm not quite sure what the {{#var:location}} is doing here. Obviously, its setting the default for if there is no data stored in {{{location}}}, however, there is also no variable for location defined on the page either. #1) Is this an error, or is it doing something special?

While we're on the subject of this property, I noticed that if more than one location is listed for this property, the wiki is handling it differently than other properties that are storing more than one value, for example, the Has achievement tiers. In the "Achievement table row" template when Has achievement tiers property is set, an #arraymap function is used to separate each individual value by a "~", rather than a page break "\n". #2) Why don't we do this for Has suggested location? Here's what the value looks like for Has suggested location that has more than one location listed:

Whereas, this is what it looks like for "Has achievement tiers" when there is more than one tier given:

There is clear demarcation so that the data can easily be grabbed and separated again. There ain't no way that can happen with the Has suggested locations property.

Another oddity about this Has suggested locations property, is that I don't even know how the data becomes stored like that. When the "Achievement table row" template is called, and the {{{location}}} parameter is passed, each location entry is on individual lines. #3)So how does the data become stored in one line? ~Mervil User Mervil Sig.png 06:38, 9 November 2015 (UTC)

fyi, I worked on a lot the code for the achievement templates.
A property can be multi-valued. A page can have a single property with multiple values. If I do [[Has property::1]] and [[Has property::2]], the page will show [[Has Property:1,2]]. The values have no notion of ordering. If I ask the page for Has property, it can give me 1,2 or 2,1 depending on how it was stored.
For Property:Has achievement tiers, the tiers are sequential so the ordering needs to be preserved. For the sake of simplicity, the values are stored in a single format string that can be parsed and formatted. The other option would be to have a set of records with an index value to be sorted, which is ugly, hard to deal with, and isn't useful for queries.
Has suggested location wasn't implemented correctly in the subobject. Malgalad added that code and the version of SMW didn't allow multi-valued properties in subobjects. Instead, it just stores the value of the parameter. Those spaces between values are actually newline characters. The issue is #arraymap and the rest of the wiki hates newline characters, hence replacing the newline with a tilde in the achievement tiers property. I think I was waiting on the SMW update when I cleaned up the code for parsing suggested location. You can fix this with |Has suggested location={{{location|}}}|+sep=, in the subobject ,which is supported in the current SMW version.--Relyk ~ talk < 08:22, 9 November 2015 (UTC)
Excellent. So is using a named separator via |+sep= preferable to changing the separator using #arraymap? Could the Has achievement tiers property be "re-coded" to use this function, ie: |Has achievement tiers={{{tiers|}}}|+sep=~?
Also, what is with this piece of code?
Has suggested location ={{{location|{{#var:location}}}}}
--~Mervil User Mervil Sig.png 08:49, 9 November 2015 (UTC)
In the context of setting variables, |+sep=~ means that it stores each value separately to a property. So rather than:
 | Has property value = abc
 | Has property value = def
 | Has property value = ghi
we can write
 | Has property value = abc~def~ghi|+sep=~
which produces the same result. (namely 3 separately stored values for the same property on the same page). We can't use arraymaps for this because the | (pipe) symbol can't be used in semantic templates.
In the context of querying for variables, |sep=~ means something a bit different, in that the output query results are separated with the ~ (tilde) symbol. For outputs we could change the separator later with arraymaps. -Chieftain AlexUser Chieftain Alex sig.png 10:26, 9 November 2015 (UTC)

Unexpected display of "...further results"[edit]

I've been practicing with coding functions on my sandbox, and I ran into something unexpected. While practicing with the #arraymap function and an #ask function that calls a template (here), the page ended up displaying a box with "... further results" displayed. Clicking the link takes you to an empty page, without any further results displayed. The code I used here is very similar to the code found on the Parse Tiers template. The Parse Tiers template does NOT display any such results. I imagine its because in my code, I use the "anything" wildcard (+), rather than specifying a specific property value, thereby returning many more results than the Parse Tiers template. Am I correct?
I know I can turn off the display of this text by adding "|searchlabel=" to my #ask function, but my question is, why did it appear in the first place? ~Mervil User Mervil Sig.png 22:09, 6 November 2015 (UTC)

Yes, it's because you're selecting all pages with that property. Try running the same query with a table format, it should make more sense. By default, #ask will only return 50 results; if there are more than 50 results, it displays that link which takes you to the Special:Ask interface. You can change the threshold number with the | limit = <number> parameter, up to a hard limit of 500.
The reason you see no output on that page is because your formatting template produces no output. —Dr Ishmael User Dr ishmael Diablo the chicken.png 23:36, 6 November 2015 (UTC)
How do you run it with a table format at the same time as a template format? ~Mervil User Mervil Sig.png 00:06, 7 November 2015 (UTC)
You can't. Just do {{#ask:[[Has achievement category::+]]|?Has achievement tiers|format=table}} (same query, different output). —Dr Ishmael User Dr ishmael Diablo the chicken.png 00:14, 7 November 2015 (UTC)

format=count vs. format=template to manually count[edit]

So I was running some code to practice some concepts I've learned, and I ran into a snafu. Here's the code:

{{#ask:[[Has achievement category::+]][[Has suggested location::+]]|?Has suggested location|format=count}} <nowiki>{{#ask:[[Has achievement category::+]][[Has suggested location::+]]|?Has suggested location|mainlabel=-|searchlabel=|format=template|template=User:Mervil/Sandbox3}}

Total number:Empty </nowiki>

And here are the results:
{{#ask:[[Has achievement category::+]][[Has suggested location::+]]|?Has suggested location|format=count}} {{#ask:[[Has achievement category::+]][[Has suggested location::+]]|?Has suggested location|mainlabel=-|searchlabel=|format=template|template=User:Mervil/Sandbox3}} Total number:Empty

Why are these results different? For all intents and purposes, it seems the results should be the same. ~Mervil User Mervil Sig.png 03:02, 9 November 2015 (UTC)

Add | limit = 269 (or any number larger than that) to your second query. Remember, SMW only returns 50 results by default, regardless of what the output format is. —Dr Ishmael User Dr ishmael Diablo the chicken.png 03:21, 9 November 2015 (UTC)
The only exception are formats like count and sum as they produce very limited output.--Relyk ~ talk < 04:41, 9 November 2015 (UTC)
True. Those are aggregate formats that don't produce "per-result" output, so they're able to operate over the full results at once. In a technical sense, they produce only 1 output record. —Dr Ishmael User Dr ishmael Diablo the chicken.png 04:56, 9 November 2015 (UTC)

Use of <includeonly></includeonly> causing extra spacing[edit]

My sandbox shows a project I'm working on to display a list of items in a collection. The code calls a template that sets up a table, and then runs an #ask function, with format=template, which subsequently accesses a 2nd template to display the queried data. I placed <includeonly> </includeonly> tags around the code of the 2nd template, but after I did this, the 2nd header row in the table (the one that says Item and Description) gained extra space/margins/lines. I can't figure out how to fix it except to remove the <includeonly> </includeonly> tags. Any thoughts? ~Mervil User Mervil Sig.png 10:33, 13 November 2015 (UTC)

This is what you have and why we use #if to hide newline characters:
{{#if: <!-- Hide blank space -->
{| {{STDT|item}}
Remove the newline characters:
<includeonly>{{#if: <!-- Hide blank space -->
}}{| {{STDT|item}}
--Relyk ~ talk < 12:59, 13 November 2015 (UTC)
Well what do ya know, it worked. All these little nuances... Thanks Relyk. ~Mervil User Mervil Sig.png 18:50, 13 November 2015 (UTC)


^Late reply--Relyk ~ talk < 00:02, 13 November 2017 (UTC)

Pages appearing as #[edit]

Hi Mervil. You have no custom user JS or CSS active on the wiki, so it can't be that. I've had no other reports of other users encountering the same problem either.

I suggest you try a different browser - if you find the bug to be specific to your usual browser, perhaps you have some malfunctioning browser extensions active. -Chieftain AlexUser Chieftain Alex sig.png 19:04, 9 August 2018 (UTC)

Thank you, Alex. It does seem to be specific to Edge browser. I just updated Windows 10 to the latest build several days ago, perhaps it has something to do with that (as that is when the issue started occurring). Thanks for getting back with me! ~Mervil User Mervil Sig.png 21:05, 9 August 2018 (UTC)
Oh excellent I can now reproduce the bug now that you've told me what browser it is. I'll file a bug report and get someone to look into it. -Chieftain AlexUser Chieftain Alex sig.png 21:42, 9 August 2018 (UTC)
I had a bit of an email conversation with Anet's wiki guy and unfortunately it appears to be a browser fault specific to this version of Edge -- I've disabled the show preview and show changes buttons until a future point where Edge gets updated... -Chieftain AlexUser Chieftain Alex sig.png 10:19, 20 August 2018 (UTC)