Jump to content

Wikipedia:Village pump (technical)

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by 47.138.165.200 (talk) at 23:46, 31 October 2016 (→‎Emoji usernames). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

 Policy Technical Proposals Idea lab WMF Miscellaneous 
The technical section of the village pump is used to discuss technical issues about Wikipedia. Bug reports and feature requests should be made in Phabricator (see how to report a bug). Bugs with security implications should be reported differently (see how to report security bugs).

Newcomers to the technical village pump are encouraged to read these guidelines prior to posting here. Questions about MediaWiki in general should be posted at the MediaWiki support desk.


Sort watchlist by...

I've been thinking more lately about how to better manage the watchlist. Until we get expiring watchlist entries, it would be nice if I could take my list of watchlist entries and sort by 1) last edit date; 2) last vandalism date; 3) how many are watching (if over 30). These sorts could help me make up my mind about pages to no longer watch. My watchlist isn't exactly out of control at this point, but I'd like to have better control to prevent that, without having to go through all my entries one-by-one and determining these aspects. Are there any scripts/gadgets that can assist me here? Stevie is the man! TalkWork 16:25, 24 October 2016 (UTC)[reply]

Note that this doesn't have to be a script/gadget that works within the watchlist itself. I can easily generate a list of pages that happen to be on my watchlist. So, basically, what I need is a tool that can sort pages by the above criteria. Stevie is the man! TalkWork 16:49, 25 October 2016 (UTC)[reply]

Just some thougths:
  1. last edit date - could be done with an sql query (see below), but you would need to specify all of the pages on your watchlist, as it is not available, or at least not in the public table.
  2. last vandalism date - this would take a while to do. Probably you would need to query ORES with edits on a specific page until an edit that has an high probability of being vandalism is found. Below is an query that lists links to the assessment of ORES on the latest edit on each page. Someone that knows anything about api (not me) should be able to make something better than this.
  3. how many are watching - I don't think this can be done with either sql or api.

1)

use enwiki_p;
select page_title, rev_timestamp from revision
join page on page_latest = rev_id and page_title in ('article_1', 'article_2')
order by rev_timestamp

2)

use enwiki_p;
select concat("*https://ores.wmflabs.org/v2/scores/enwiki/damaging/", page_latest, "/") from page
where page_title in ('article_1', 'article_2')

"Article 1" and "Article 2" are examples of entries in your watchlist. Expand that list as needed. Note that any spaces need to be replaced by underscores. You can run these queries on quarry.wmflabs.org.--Snaevar (talk) 19:04, 29 October 2016 (UTC)[reply]

References preview on mobile devices

Why are standard external link icons not displayed in preview of references on a mobile device? Instead, there is a space between a last character of a title and a dot that separates citation units, for example "Title . Publisher.".

One more thing I've noticed is that links that should be red are blue in preview of references on a mobile device (at least mine). --Obsuser (talk) 04:21, 25 October 2016 (UTC)[reply]

It would help if you linked to an article and let us know what mobile browser and OS you are using. – Jonesey95 (talk) 10:47, 25 October 2016 (UTC)[reply]
@Jonesey95: It is for every article, every external link; mobile browser is the only one available on Nokia Lumia 520 – I guess HTML5; OS is Microsoft Windows Phone v8.1.
I understand it is not possible to fit all needs; I see now on my PC (Google Chrome, Win7) that mobile version displays icon for external link as it should – so it is not error for all mobile versions but only some (specially cheaper and older ones)... --Obsuser (talk) 06:45, 30 October 2016 (UTC)[reply]

Pie charts

Why pie charts ({{pie chart}}) on mobile devices have some vertical line at their right side (next to the cirle itself)? That line is colored in colors used by pie; segments of this line are made as if one drew lines from the center of the pie towards right and where those lines intersect with the line I'm asking about (vertical one, it is thin) – colors change at that place. Was this intentional; problably not, but if it was what is its purpose? --Obsuser (talk) 04:21, 25 October 2016 (UTC)[reply]

There is a 2 pixel size difference somewhere.. Haven't exactly traced the cause yet. —TheDJ (talkcontribs) 08:28, 25 October 2016 (UTC)[reply]
Template has some white space on its inner side (on the left) when in mobile view, too.
Also, template contains a lot of spaces (used in legend boxes and for indentation) so selection is not looking nice as it could. --Obsuser (talk) 09:53, 25 October 2016 (UTC)[reply]
Should be fixed I think. —TheDJ (talkcontribs) 11:48, 25 October 2016 (UTC)[reply]
Yes, thanks. --Obsuser (talk) 06:45, 30 October 2016 (UTC)[reply]

Citation templates missing from Commons

I naively attempted to copy across {{cite thesis}} to Wikimedia Commons, but there seem to be some lua modules missing over there. Could someone versed in these things copy them across? T.Shafee(Evo&Evo)talk 23:05, 25 October 2016 (UTC)[reply]

Why does commons need citation templates? Pppery 23:26, 25 October 2016 (UTC)[reply]
Just looking at your recent edits over there. If you believe that you need a full citation format for a source parameter in the information section, you don't. A simple link to the source will do. --Majora (talk) 23:29, 25 October 2016 (UTC)[reply]
Commons does not use modules for citations. Doing this is a big step you would have to discuss at Commons. Previewing {{cite thesis|title=Example}} here shows seven citation modules at "Templates used in this preview" at the bottom of the edit window. It produces: Example (Thesis). See commons:Category:Citation templates for other options. I don't know whether they all work. Commons uses citations far less than us. PrimeHunter (talk) 23:34, 25 October 2016 (UTC)[reply]
@Pppery: They are useful for formatting source attributions from which images have been taken and uploaded. For example PLOS licenses their content under creative commons (example category) - when images are uploaded from them people use {{cite journal}} to attribute, without putting it in <ref> tags. Other sources are similarly used, the range of citation templates available is pretty limited (available templates).
@Majora: Although simple link is sufficient, it can help people wanting to re-use the image to attribute it back to the original source to have it formatted by a citation template rather than just a raw url. T.Shafee(Evo&Evo)talk 23:41, 25 October 2016 (UTC)[reply]
@PrimeHunter: Thanks for the module explanation. Do you happen to know where the sensible place would be to ask about this over at commons (their main help page sent me here)? T.Shafee(Evo&Evo)talk 23:40, 25 October 2016 (UTC)[reply]
You can ask at Commons:Help desk. I'm sure there's a citation template that will suffice, even if it's not an exact match to {{cite thesis}}. clpo13(talk) 23:48, 25 October 2016 (UTC)[reply]
Here at en.wiki, the thing that distinguishes {{cite thesis}} from other cs1 templates is the automatic insertion of the title type (the (Thesis) in Editor PrimeHunter's example). None of the templates that I looked at over at commons support that parameter. If you can get along without it, then perhaps their {{citation}} will do for you.
Trappist the monk (talk) 00:18, 26 October 2016 (UTC)[reply]
Thanks all, since it is a niche issue, I've implemented a quick-fix over at commons:template:cite thesis. T.Shafee(Evo&Evo)talk 05:33, 26 October 2016 (UTC)[reply]
@User:Evolution and evolvability: what is |audegrethor2=? See here.
Trappist the monk (talk) 09:02, 26 October 2016 (UTC)[reply]
Ha, apparently a typo where I started writing "degree" in the middle of "author2". Fixed now! T.Shafee(Evo&Evo)talk 09:09, 26 October 2016 (UTC)[reply]

Add "Random redirect" to sidebar as an option

While the Random redirect itself has no problems, the fact that it is hard to repeat (like how you can control-option-x and keep scrolling through articles, the only way to get to random redirect is to either have it bookmarked or go to special pages each time. While I understand that many people wouldn't use the feature, it would be helpful. Iazyges Consermonor Opus meum 02:47, 26 October 2016 (UTC)[reply]

If only you or a few users are going to use this, could it be in your personal js file or made into a gadget? --TerraCodes (talk to me) 03:35, 26 October 2016 (UTC)[reply]
@TerraCodes: Hm, that might make sense. Would this still be the right avenue to request this? Iazyges Consermonor Opus meum 03:53, 26 October 2016 (UTC)[reply]
@Iazyges: Hm, I'm not 100% what the right place would be, but I'm sure that someone who knows more than me will know. --TerraCodes (talk to me) 04:08, 26 October 2016 (UTC)[reply]
@Iazyges and TerraCodes: I just made a script to do this for you. You can load it by putting importScript('User:Mr. Stradivarius/gadgets/RandomRedirect.js') // Linkback: [[User:Mr. Stradivarius/gadgets/RandomRedirect.js]] in your Special:MyPage/common.js. — Mr. Stradivarius ♪ talk ♪ 05:06, 26 October 2016 (UTC)[reply]
It also lets you load a random redirect by using Alt+I (that's an upper-case i, not a lower-case L). — Mr. Stradivarius ♪ talk ♪ 05:17, 26 October 2016 (UTC)[reply]

Owner-only OAuth consumers no longer work

It would appear that this commit deployed earlier today seems to have broken the ability to identify with owner only consumers. IABot is now dead in the water because of this.—cyberpowerTrick or Treat:Offline 03:38, 26 October 2016 (UTC)[reply]

Pinging @Tgr:, he wrote the commit and can likely shed light :) ^demon[omg plz] 07:28, 26 October 2016 (UTC)[reply]

See mw:How to report a bug. (My owner-only test consumer works fine, and neither C678 nor IABot has any owner-only consumer registered for it.) --Tgr (WMF) (talk) 08:43, 26 October 2016 (UTC)[reply]

@Tgr: Try InternetArchiveBot which is the bot's actual name. You'll find a consumer there. Since yesterday morning the bot has been dead in the water getting this error, when it tries to run an identify request

ERROR: Invalid header in identify response: {"error":"mwoauth-invalid-authorization-not-approved","message":"The app that you are trying to connect seems to be set up incorrectly. Contact the author of \"InternetArchiveBot AUTH v2\" for help."

}
Considering that exact error throw was added yesterday, it's clearly catching something it shouldn't.—cyberpowerTrick or Treat:Online 12:47, 26 October 2016 (UTC)[reply]

Twinkle + revision slider

In page histories, when the revision slider beta feature is used to change the diff(s) being viewed, the Twinkle reversion / restoration links disappear. Is this supposed to happen? Jc86035 (talk) Use {{re|Jc86035}}
to reply to me
11:33, 26 October 2016 (UTC)[reply]

This is a known bug. See this discussion for more information. Sarahj2107 (talk) 13:27, 26 October 2016 (UTC)[reply]
@Sarahj2107: Thanks. The Twinkle devs seem to have gone on holiday for quite a while. Jc86035 (talk) Use {{re|Jc86035}}
to reply to me
13:52, 26 October 2016 (UTC)[reply]
We're not on holiday :) We're still listening, but we're too busy with other stuff to fix issues like this at the moment. — This, that and the other (talk) 13:56, 27 October 2016 (UTC)[reply]

Trials and tribulatons in Javascript

A previous discussion here inspired me to experiment with Javascript. I'd like to toggle the annotations of bulleted list items, without having to add wikicode to them in the page they are on (to avoid making the markup on those pages harder to read).

So that:

  • Moving a pawn – pawns move straight forward one space at a time, but capture diagonally (within a one-square range). On its first move, a pawn may move two squares forward instead (with no capturing allowed in a two-square move). Also, pawns are subject to the en passant and promotion movement rules (see below).
    • En passant – on the very next move after a player moves a pawn two squares forward from its starting position, an opposing pawn that is guarding the skipped square may capture the pawn (taking it "as it passes"), by moving to the passed square as if the pawn had stopped there.
    • Pawn promotion – when a pawn reaches its eighth rank it is exchanged for the player's choice of a queen, rook, bishop or knight (usually a queen, since it is the most powerful piece).
  • Moving a knight – knights move two squares horizontally and one square vertically, or two squares vertically and one square horizontally, jumping directly to the destination while ignoring intervening spaces.

Gets presented as:

The experiments explore how aspects of hiding works. I've described my experiments below, with some questions:

My first experiment was to search and replace endashes:

(Note: the N in &Ndash; is capitalized because I didn't know how to escape the actual special character code so it doesn't render as an endash. Which it does even if you use "nowiki".)

var content = document.getElementById('mw-content-text');
var whattohide = content.innerHTML.replace(/&Ndash;/g,'');
content.innerHTML = whattohide;

This didn't have any affect. My guess was that it didn't see the code "&Ndash;" on the screen, and therefore it couldn't have been accessing the wikicode.

Question 1: What do I need to put in the above script to have it access the wikicode before the page is rendered?


Next, I tried this:

var content = document.getElementById('mw-content-text');
var whattohide = content.innerHTML.replace(/Chess/g,'');
content.innerHTML = whattohide;

Which stripped out all occurrences of the word "Chess" when I viewed the Outline of chess. But something unexpected happened. When I went to edit the script for the next experiment, the script stripped "Chess" out of itself!

Question 2: Why did it strip out "Chess" and not "&Ndash;" ?


I tried escaping the "&" and ";", with no effect.

Question 3: What is the difference between mw-content-text and mw-body-content?

Question 4: What is the sequence of events from the time the script is accessed and the page is displayed on the screen for the user to read?

Question 5: Where in that process can a script access the material for modification?

Question 6: Is there more than one opportunity in the process to do this, and if so, what are they?


Out of curiosity, I tried stripping out all spaces, like this:

var content = document.getElementById('mw-content-text');
var whattohide = content.innerHTML.replace(/ /g,'');
content.innerHTML = whattohide;

Which made all pages practically unreadable, and blasted the edit window out of existence, so that I couldn't edit the script to undo the configuration. Fortunately, my connection was slow, and I was able to click on x (stop loading page) after the regular edit page was displayed but before the script was executed. Disaster averted.

That was a close call. I'll be using auxiliary accounts to test scripts in the future.

Question 7: Can admins delete a user's js pages? (For example, to undo an account corruption).

Question 8: How do you affect just the article content and not the edit box and surrounding text?


Next I tried to use regex strings anchored to the bullets in the list items, but I couldn't find a way to select them using the cursor to copy and paste them into the script.

Question 9: How can regex be used to find the bullets in list items?


Nor could I find a way to anchor the regex on the "<li>" string in the html.

Question 10: How could the script access the HTML so it can regex for "<li>"?


I'm hoping you could shed some light upon the mysteries confronting a Javascript newb.

I look forward to your replies. Any and all feedback is welcome. The Transhumanist 15:28, 26 October 2016 (UTC)[reply]

Answering a couple: yes, admins can delete/modify any user's js or css pages, so you can always ask one to help you undo changes. For a lot of what you're doing (searching through the html body), there are libraries thst make things much easier. Try taking a look at the JQuery library; Wikipedia automatically loads it for you, and it has a lot of functions that should be helpful. I know that throwing a whole library at a newbie is overwhelming, and I'll take a closer look at stuff that might help your situation specifically in a bit if no ody else has, but that might help you get a start. Good luck! Writ Keeper  17:22, 26 October 2016 (UTC)[reply]
Actually, taking a stab at an in-depth answer. First, what you're trying to do is going to be very difficult to accomplish without some unpleasant side effects, because programmatically, there's not really any difference between an annotated list as you've defined it and any other list. So whatever code we write is unlikely to be able to distiguish between the two unless we make changes to the wikicode source (to add identifier classes, perhaps).
now, to your questions:
1) the problem with your first example is your regex itself. You can't operate on the wikicode before it's rendered, you can only operate on the result of the page. So you shouldn't look for &Ndash;, you should look for , because that's what it is in the end result of the page. So, your regex should look like content.innerHTML.replace(/–/g,); instead of content.innerHTML.replace(/&Ndash;/g,);.
2) An extension of 1); the code still sees Chess, because Chess is what it is in the final page result, but &Ndash; isn't.
3)mw-content-text and mw-body-content are two ids of elements within the HTML structure of the final page. mw-body-content contains mw-content-text, along with some other things (like the footer that contains categories, for example). For your purposes, you're going to want mw-content-text; it's more specific.
4-6) This gets pretty in-depth, and honestly I don't really know all of it off the top of my head. Suffice to say, your hunch is correct, and the time during the page render in which the scripts get executed is an important thing to keep in mind. Generally, you want your scripts to run last, when the page is already rendered. Generally, the way I do this is through handlers, which are functions that you specify to be called when certain things happen. In this case, we want the "ready" handler, which runs a function when the page becomes ready to display. Using jQuery, this is pretty easy to do:
$(document).ready(function(){
    //your code here
});
You can treat most of this as magic words, but basically, this will execute your code when the page is ready to be shown to the user.
7) As I said above, yes, admins can delete or modify other users' JS and CSS pages, so that shouldn't be a problem. We can always help you fix anything. :)
8) -- leaving this for later --
9-10) You can do this through regex, but the aforementioned jQuery actually gives us an easier way. jQuery allows us to use CSS selectors to discover HTML elements. W3Schools has a pretty good reference source for CSS selectors (and most other things, really, it's a great site to start at for learning this stuff), but if all we want is to find all the li elements on a page, then all we need is the li selector. The way we actually call it through jQuery is like this: $("li"). That will give us an object that contains pointers to all the li elements on the page.
Now, if we want to be more specific, we can be, and this is what's great about CSS selectors and jQuery. We only care about stuff that's in the mw-content-text element, since that's where all the text on the page is, and anything outside of the page text we don't care about. So, we can combine selectors like this: $("#mw-content-text li"). What that means is: "give me all of the li elements that are contained within the element with the id "mw-content-text" ". (The "#" is what tells it that we're looking for an id.) And there's more you can do with it, too.
HTH, Writ Keeper  18:03, 26 October 2016 (UTC)[reply]
@Writ Keeper: 2) But "&Ndash;" was in the edit window, rather than "–". So, why was it not stripped out, even though it was literal, while "Chess" was stripped out? Never mind. It's looking for the rendered character because the code has already been accepted. The Transhumanist 18:47, 26 October 2016 (UTC)[reply]
@Writ Keeper:   4-6) Is there a handler that makes your script (or part of it) run *first*, on the wikicode, before the page is rendered? The Transhumanist 19:00, 26 October 2016 (UTC)[reply]
@Writ Keeper: What did you mean by "You can treat most of this as magic words,"? The Transhumanist 19:12, 26 October 2016 (UTC)[reply]
Okay, first of all, I definitely recommend reading TheDJ's response; he knows his stuff. :) But to answer your questions: first of all, no, there is no way to get your scripts to operate on the wikicode. This is because of how Wikipedia works. JavaScript runs strictly on the client side, which is to say on your computer, within your browser, on whatever your browser has to look at. The parsing of wikicode, however, is a server-side operation; the Wikimedia servers, in Florida or California or wherever they are these days, take the wikicode, turn it into HTML, and then send it to your browser. This means that you can't run your Javascript on the wikicode, because your browser never even sees the wikicode; by the time it gets to you, it's already been turned into HTML.
For your second question, "magic words" are kind of a term of art in programming--it basically just means that you can use the words by rote, without having to understand the ins and outs of how they work. Basically, you just assume they work by magic (hence the term) and use them without understanding them. It sounds backwards, and it can get you into trouble, but it's how many people start out programming (or at least, it's how I learned). You start by using magic words, and as your experience and knowledge grow, you learn what they mean, and they stop being so mysterious. :) Writ Keeper  19:44, 26 October 2016 (UTC)[reply]
@Writ Keeper:   9-10) How can you do this through regex?   The Transhumanist 20:17, 26 October 2016 (UTC)[reply]
@Writ Keeper:   concerning the li selector: How would that fit in to the code below?
$(document).ready(function(){
var content = document.getElementById('mw-content-text');
var whattohide = content.innerHTML.replace(/–/g,'');
content.innerHTML = whattohide;
});

I'm gonna answer this, because it's always good when people are eager to learn. I want to start by talk about something else that is much more important (and a bit related to question 4). HTML is a markup language in which we write webpages. It is important to realize however, that a browser basically only looks at HTML once, when it loads the page. After that, the browser will turn the HTML into a Document Object Model (DOM), a standardized method to represent a webpage using a definition of objects. For instance, when you write in HTML the <table> element, the browser reads that into HTMLTableElement. Those DOM elements are the webpage, and for this purpose, you can assume that the original HTML document no longer exists after this interpretation by the browser has been made. This model is also what you see, if you open the browser's web inspector and go to the 'elements' tab. If you write Javascript to make changes, then that model is what you change (you can move things around). Any event handlers like button click listeners and what not, also attach to this model. When you apply CSS using selectors, the selectors match the DOM structure (a topic in itself btw).

Now the questions:

  1. You are using innerHTML of an existing element. As a rule of thumb. Don't ever use 'innerHTML' to modify an element. When you get the innerHTML of something, you are telling the browser, turn your DOM representation of this object into HTML. When you then assign a new value, you tell it: throw away all your children and replace it with the DOM representation of this piece of HTML language. There are three major problems with that:
    1. It is terribly inefficient on larger pieces of HTML
    2. You will loose all information (state, event handlers etc) that was attached to the original DOM elements, and that scripts and thus functionality of the website might depend on
    3. You assume that no one changed the DOM between the time you read it and the time you wrote something back to it.
    Instead, you should use jquery selectors to get 'collections' of DOM objects, that you try to manipulate by moving, adding, removing other objects to, or by assigning values to their properties (FYI, attributes in HTML are converted to properties in DOM). This is more efficient, safer and most of the time will avoid conflicts with other pieces of Javascript
  2. You are asking it to manipulate anything in the document. When you edit, that value is part of the DOM, you replaced it, so it's gone (you changed it after delivery). The browser doesn't know what an edit page is, it cannot make assumptions :)
  3. The following is for Vector; some of these things can change depending on the skin you use. There are several elements inside mediawiki pages. We have what you call 'chrome', which is everything of the user interface controls, that is part of the interface surrounding the body that looks the same across the different pages. Then there is #content or .mw-body, this sort of the twilight zone between chrome and body. Easily speaking, it is the collection of all elements making up the content (including title, indicators, categories etc). Then there is mw-content-text, which is mostly the area in which rendered the actual content of the page ends up. The differences are hard to point out, but you will learn them by experience. In general you should just look at the DOM and think, what is the element that excludes everything that I DONT need to touch, and work down from that point.
  4. That is a tough question. Browsers have become very complicated. When your HTML page arrives, first it needs to be turned into this DOM representation. While it is doing that, it is already starting to download JS, CSS and images. These latter three can arrive in any order, and especially with JS, that means you cannot make assumptions about execution order. You need to guarantee things. So if your script runs, it might be that your HTML page isn't even fully rendered by the browser yet. So when you want to change what is in the browser, you first need to wait for this DOM processing to finish (You wait for "document ready"), and only THEN you can start changing things. And then you have to remember that other scripts will be running at the same time, and will potentially make changes to the exact same area as you want to make changes to (again, don't use innerHTML).
    This document.ready is perfect if you want to change something in the 'chrome' part of the UI, and it works on any page. However, MediaWiki is no longer loading just pages, sometimes it loads parts of pages (for instance after you save in VisualEditor). So there are many more hooks that you can attach to, and one common one is wikipage.content hook (And for your case, that is the one you are looking for).
  5. The beauty of the complexity above is also the power to question #5, almost everywhere, all the time, as long as you make sure that all the prerequisites for success are guaranteed.
  6. To avoid cases like this, make sure that your code only runs on pages that you want it to run on. For example, you can easily add something like:
    if( mw.config.get( 'wgPageName' ) !== 'User:The_Transhumanist/sandbox' ) {
      return;
    }
    
    which will make sure that your code only runs when you visit your personal sandbox page. (and wgAction === view/edit/submit to only run on view, edit or preview/showchanges
  7. yes
  8. Again, by making sure you target as little as possible, only those pages/actions that you need it to run, only query those elements that are as unique as possible for your situation
  9. and 10 By not using a regex, but by selecting the right elements out of the dom with selectors as Writ explained and only modifying those.

Hope that helps a bit. Just keep experimenting, it's the best way to learn. Also, try using a live HTML editor like plunker to improve your HTML and JS basics. You can't use all the MediaWiki/Wikipedia specific stuff there, but it is great for improving your basic skills. —TheDJ (talkcontribs) 19:27, 26 October 2016 (UTC)[reply]

So, user javascripts don't get run before the user's browser receives the page? The Transhumanist 20:12, 26 October 2016 (UTC)[reply]
Correct, they will always be later, because they are referenced from this page. Until the browser has the document, it wouldn't know what JS to load. —TheDJ (talkcontribs) 20:18, 26 October 2016 (UTC)[reply]
@TheDJ, Writ Keeper, Thespaceface, and Murph9000: Pertaining to 1), it was mentioned above not to use "innerHTML". Does that mean I should replace "content.innterHTML" on the 2nd and 3rd lines, with just "content", as below?
$(document).ready(function(){
var content = document.getElementById('mw-content-text');
var whattohide = content.replace(/–/g,'');
content = whattohide;
});
What contents will that script work on, since it isn't working on the contents of innerHTML? The Transhumanist 20:50, 26 October 2016 (UTC)[reply]
No, you use the DOM manipulation functions.
I'll make you an example for this particular case. Its a bit complicated though, because you picked an example that is complicated.. (Mostly because your human eyes see structure where there is little actually structure for the browser). —TheDJ (talkcontribs) 21:15, 26 October 2016 (UTC)[reply]

Writ Keeper test script

Here's something like what I was thinking of:

//This selector grabs all of the <li> elements that are within #mw-content-text, and then does something for each of them
$("#mw-content-text li").each( function (ind, el) 
{ 
  //first, grab the text from the current li element; we want only the top level text, so filter out all of the other stuff.
  var currentText = $(el).contents().filter(function(){return this.nodeType === 3; });

  //Don't bother processing if there's nothing to process
  if(currentText.text().length > 0)
  {
     //replace the character
     var newText = currentText.text().replace(/–/g,'');  
     
     //reinsert the updated string back into the DOM
     currentText.replaceWith(newText);
  }
});

Again, this is going to be pretty messy; there's nothing distinguishing the lis you want to change from the lis you don't. But that's more like what you'd need to do (though TheDJ will probably have a better yet way of doing it). Writ Keeper  21:44, 26 October 2016 (UTC)[reply]

@Writ Keeper: The li's I want are distinguished by having " – " (space-ndash-space) in them. The only format ambiguity I can think of would be an li with " – " used in a different context. The Transhumanist 22:09, 26 October 2016 (UTC)[reply]
@Writ Keeper: What did you mean by "top level text"   and   "all the other stuff"?   The Transhumanist 22:17, 26 October 2016 (UTC)[reply]
YEah, i'm getting towards something like this User:TheDJ/thetranshumanist.js, but it breaks sublists.
"The li's I want are distinguished by having " – " (space-ndash-space) in them". For a human yes. For a computer it's like saying: Hi, please find me a red ball in your christmas tree. Now cut the christmas tree in half exactly at that ball, so that it can still stand up on it's own, and still looks like a christmas tree to humans. Please don't break the ball.. Now if you are a human carpenter, you might be able to do that, but try programming an industrial robot to do it, and he will fail miserably :) —TheDJ (talkcontribs) 22:31, 26 October 2016 (UTC)[reply]
@TheDJ: Isn't that what regex is for? I was thinking about this search/replace sequence: (/ – .*?$/g,'')   The Transhumanist 22:48, 26 October 2016 (UTC)[reply]
No its' not. —TheDJ (talkcontribs) 23:11, 26 October 2016 (UTC)[reply]
In any case, that's not really the regex you would want. You might want to try: (/ – .*?\n/g,'\n'). -- The Voidwalker Whispers 23:33, 26 October 2016 (UTC)[reply]
@The Voidwalker: Thank you. Is that because single-line is the default, and the multi-line parameter is usually needed for the ^ and $ anchors? The Transhumanist 19:56, 27 October 2016 (UTC)[reply]
@Writ Keeper: I tested the above script using (/ – /g,' XXX ') as the search/replace to be easier to see. Then I looked at Outline of chess, comparing before and after (in 2 different windows). It looks like the filter is filtering out stuff that it shouldn't. Because when I changed the search/replace string to (/ – /g,' – '), replacing nothing, there's still stuff missing. The Transhumanist 22:44, 26 October 2016 (UTC)[reply]
I've no doubt; it wasn't a functional script. It was just to illustrate the most basic principles one might use.
I know you said you don't want to add to the wikicode, Transhumanist, but that's really the correct way of doing this sort of thing. Like TheDJ alluded to in his comments on the example page, trying to find a certain element in an HTML page that doesn't have any class, id, or other identifying markers is like trying to find a needle in a stack of other needles. Ideally, you would encase the text that you want to be able to hide in an HTML element and assign it a class. Classes are the standard way of connecting similar things, and they make this all much, much easier (not least of which because a human will have made the decision of what should and shouldn't be hidden, rather than having to rely on rules and regexes). This would probably look something like [[Knight (chess)#Movement|Moving a knight]] <span class="annotation">– knights move two squares horizontally and one square vertically, or two squares vertically and one square horizontally, jumping directly to the destination while ignoring intervening spaces.</span>. That way, we can access the elements we want to modify directly (through $(".annotation") in this example), rather than having to traverse the entire body of the page and possibly get it wrong. Then, it's as simple as hiding them all (perhaps through $(".annotation").css("display","none"), which would keep the information in the page while hiding it from the viewer, which would let us then call it back if we want to via $(".annotation").css("display", "initial")). Writ Keeper  22:59, 26 October 2016 (UTC)[reply]
@Writ Keeper: A non-intrusive script would be far less cumbersome, and would require no added maintenance of the pages it viewed. Which would be really cool, if it were possible. The question is, "Is it possible?" So, if you can access the "LI" elements, then stripping out annotations (without having to add wikicode) should be easy.
The script is partially functional. It seems to be doing the regex portion without a hitch. Please explain the filter:
  //first, grab the text from the current li element; we want only the top level text, so filter out all of the other stuff.
  var currentText = $(el).contents().filter(function(){return this.nodeType === 3; });
What did you mean by "top level text"   and   "all the other stuff"?
Can you get the li element without filtering anything out of it? The Transhumanist 23:45, 26 October 2016 (UTC)[reply]

Okay, so. Say we have the following list:

<ul>
  <li class="note1">
    Testing text
  </li>
  <li class="note2">
    <a href="http://www.example.com">
      A link
    </a>
    more text
  </li>
</ul>

This would look something like:

  • Testing text
  • A link more text

Now, say we want to retrieve the text from these elements, while ignoring the links. (Which is of course what we want to do in your above example.) The usual way of retrieving the plain text within an element is through the text() function. So, for the first li element (note1), we can retrieve the text simply by calling $(".note1").text(). This will return us Testing text, and we can continue to use the same method to modify the text too. All well and good. Things change, though, for note2. We might expect $(".note2").text() to return more text, since that's the plain text contained within the note2 element. But it doesn't: it actually returns A link more text. It included the plain text that's within the <a> element. We didn't want that, because in the examples you gave, the text within the link was what we wanted to keep unchanged. So what that filter line does is it goes through and takes anything that's not in and of itself plain text--in this case, the <a> element--and takes it out of consideration, so that we don't even try to modify its text. Writ Keeper  23:54, 26 October 2016 (UTC)[reply]

@Writ Keeper: Very interesting. When I used the script without any regex changes being made, and viewed Outline of chess, it looked like it was filtering stuff out and putting it back in, slightly scrambled, with a second copy of the whole list item, sans link, appended to the end of the item. Here's a sample:
  • Form of entertainment – form of activity that holds the attention and interest of an audience, or gives pleasure and delight.

became this:

  • Form of – form of activity that holds the attention and interest of an audience, or gives pleasure and delight. entertainmentForm of – form of activity that holds the attention and interest of an audience, or gives pleasure and delight.


Any idea what is happening there? If we can fix that, then perhaps the script will be done! The Transhumanist 00:54, 27 October 2016 (UTC)[reply]


@Writ Keeper: Out of curiosity, how do you grab the text from the current li element without filtering it?

  var currentText = what goes here?;
I look forward to your reply. The Transhumanist 08:23, 27 October 2016 (UTC)[reply]

TheDJ test script

/*
Test script by TheDJ
For processing list items:
To hide annotations
*/


if ( mw.config.get('wgAction') === 'view' ) {
	mw.hook( 'wikipage.content').add( function ($contents ) {
		var listItems = $contents.find( 'li:not([class]):not([id])' );
		listItems.each( function( index, li ) {
			var nodes = $(li).contents();
			var marker = false;
			var ul = false;
			for ( var i = 0; i < nodes.length; i++ ) {
				if ( nodes[i].nodeType === Node.TEXT_NODE && 
					nodes[i].textContent.indexOf(' – ') >= 0)
				{
					marker = i;
					break;
				}
			}
			if( nodes[nodes.length-1].tagName === "UL" ) {
				ul = nodes[nodes.length-1];
			}
			if( marker > 0 ) {
				var wrapper = $('<span>').addClass('myscript-wrapper');
				wrapper.append(nodes.slice(marker, ul ? nodes.length-1 : nodes.length));
				$(li).append(wrapper);
				if ( ul ) {
					$(li).append( ul );
				}
			}
		});
		$( '.myscript-wrapper' ).hide();
	});
}

// //////////////////////////////////////////////////////////////////////////

/* Walk through of above code (with extensive remarks)

// Run only on view (not edit) pages. See [[mw:Manual:Interface/JavaScript#Page-specific]]
if ( mw.config.get('wgAction') === 'view' ) {

	// Attach a function to be run once the 'wikipage.content' part of a page is available
	mw.hook( 'wikipage.content').add( function ($contents ) {
		// Like document.ready, this will run, once that part of the page is
		// ready/updated.
		// $contents is a jQuery list of DOM elements, that has just become available.
		// See also: http://api.jquery.com/jquery/

		// Get all the <li> elements from $contents, but skip those with a class or ID,
		// because they might have special functionality that you don't want to break.
		// We generally avoid things like this, because they will break easily.
		// Wikipedia is so diverse and big, that to do anything,
		// your content really needs a class or ID.
		var listItems = $contents.find( 'li:not([class]):not([id])' );
		
		// Iterate over each of the <li> items
		listItems.each( function( index, li ) {
			// This part is complicated, because we need to look at text
			// and text is not structured. Get the li item, and wrap it with jquery
			// Then get all the direct children nodes
			var nodes = $(li).contents();
			var marker = false;
			var ul = false;
			for ( var i = 0; i < nodes.length; i++ ) {
				// We need to find text nodes, that have our - marker.
				if ( nodes[i].nodeType === Node.TEXT_NODE && 
					nodes[i].textContent.indexOf(' – ') >= 0)
				{
					// We found the node which contains our marker
					marker = i;
					break;
				}
			}
			// Check to see if the last node is an UL, so we don't break nesting
			if( nodes[nodes.length-1].tagName === "UL" ) {
				ul = nodes[nodes.length-1];
			}
			
			// only useful if it's the second element or later
			if( marker > 0 ) {
				// Use jquery to create a new span
				// We use span, because it is an inline element.
				// We give it a class so we can find it back later
				// This element is already part of the document, but it is not attached to anything visible yet.
				var wrapper = $('<span>').addClass('myscript-wrapper');
				// Move the node with our marker, and all nodes that follow it into this new wrapper.
				// This removes them from the original <li>
				wrapper.append(nodes.slice(marker, ul ? nodes.length-1 : nodes.length));
				// Append the wrapper to our original list item to make the wrapper visible.
				$(li).append(wrapper);
				if ( ul ) {
					$(li).append( ul );
				}
			}
		});
		
		// Now we have structure, and we can apply our manipulations and functionality
		// We simply hide all our elements
		$( '.myscript-wrapper' ).hide();
		// You would now add controls to show them etc. etc.
	});
}
*/

/* Further notes (tutorial)

var i = 0;
i++;
// This runs immediately.
// It is safe to do things like this, UNLESS they need to change something in the page.
// You CAN use it to do data processing, start requests to the api etc.

// An anonymous function block wrapped inside $()
$( function() {
	// do stuff to change the page
});
// $() is an alias for jQuery(), the main function of the jQuery library,
// which is always available for script writers on Wikipedia
// When used like this, it is a shortcut for $( document ).ready(), and it will
// execute your anonymous function as soon as the page is ready to be
// manipulated by JS, or immediately if it is ready now.
// See also: http://api.jquery.com/jquery/#jQuery3

// Attach a function to be run once the 'wikipage.content' part of a page is available
mw.hook( 'wikipage.content').add( function ($content ) {
	// Like document.ready, this will run once that part of the page is
	// ready/updated.
	// $content is a jQuery list of DOM elements, that has just become available.
	// See also: http://api.jquery.com/jquery/
});
// This is used by many scripts in MediaWiki, because it also works after
// saving with Visual Editor, or when previewing with Live preview tools etc.
// There are several such named hooks like:
// wikipage.diff, wikipage.editform, wikipage.categories

// mw, an alias for mediaWiki, is another javascript libary that is always
// available to MediaWiki and Wikipedia scripters.
// See also: https://doc.wikimedia.org/mediawiki-core/master/js/#!/api/mw
// For the hook specific part of this library, which we use above, see:
// https://doc.wikimedia.org/mediawiki-core/master/js/#!/api/mw.hook

// Note that large parts of this mw library are not ready for usage by default,
// and you might have to load some parts using mw.loader, before they can be used.
// For loading dependencies and guaranteeing order between dependencies,
// use ResourceLoader.
// See also: https://www.mediawiki.org/wiki/ResourceLoader/Developing_with_ResourceLoader#Client-side_.28dynamically.29
*/
I made a correction: changed "$content" to "$contents". That was a typo, right?
I also copied the active part of the script, stripped out the comments, and placed it at the top of the script for those who wish to inspect the bare code.
I posted the code here, because I shall have plenty of questions about it, and in case anybody would like to make observations or ask questions.
I installed the script and viewed Outline of chess. The script hides most, but not all annotations. I'll see if I can track down what is keeping the other annotations from disappearing.
Thank you for this sample plus tutorial. This should help immensely. The Transhumanist 13:23, 27 October 2016 (UTC)[reply]
Have you seen some other work on chess boards? Wikipedia:Village pump (proposals)/Archive 132#Interactive chess boards talks about two different approaches. Whatamidoing (WMF) (talk) 16:32, 27 October 2016 (UTC)[reply]
@Whatamidoing (WMF): Thank you for the heads up. By the way, skimming over that discussion, the 2 approaches escaped me. What are they? The Transhumanist 01:16, 28 October 2016 (UTC)[reply]
It looks like a more complete list is at Wikipedia:WikiProject Chess/Interactive chess boards. There have been some questions about how to code such a thing (e.g., Lua vs not) and which form of notation to use. At least one of the scripts has some WP:PERF concerns (see Wikipedia talk:WikiProject Chess/Interactive chess boards#UX and Performance for a review). Whatamidoing (WMF) (talk) 04:16, 29 October 2016 (UTC)[reply]

Testing, and further development

The script is a damn good start. Thank you!

So I installed it, by including the following line on my vector.js page:

importScript("User:The Transhumanist/anno.js");

Then I went to Outline of chess and hit "x" (stop loading page) before the script was run to process the page. That gave me an unchanged base page for comparison.

Then I loaded the Outline of chess in another window, letting the script do its thing.

Then I switched back and forth between the two verions of the outline, looking for differences.

The script missed the annotations of list items that don't have bullets (such as the top-level list items in outlines). And it missed annotations in which the marker (" – ") included a no-break space. It also missed hanging en dashes (en dashes in place waiting for annotations to be added after them. They have a preceding space but no succeeding space, which is why the script did not find them).

Functionality for hiding the above should be fairly easy to code.

But, the script was hiding something it shouldn't have: all but the topmost level of bullet items. Bullet items that were children of a bullet item disappeared. I'm not sure yet what is causing that, but I'm looking into it. It'll be slow, because I'm learning Javascript as I go. If you discover what's causing it before I do, please let me know!

I couldn't figure out why it was doing that, so I switched to trying to adding a toggle.

@TheDJ: I spent several hours trying to adapt code from User:PleaseStand/hide-vector-sidebar.js, modifying it and pasting it in, in place of the line $( '.myscript-wrapper' ).hide();. So far, I haven't been able to get it to work. Check out the attempt at https://en.wikipedia.org/w/index.php?title=User:The_Transhumanist/anno.js&oldid=746595354 I have no idea why it didn't work. The Transhumanist 11:35, 28 October 2016 (UTC)[reply]

Mandatory citation for every sentence in an article

Finding representative pages in various languages

I'm working on a new implementation of character encoding converters for Firefox. For benchmarking purposes, I'd like to use real Wikipedia pages, because

  • Wikipedia is an actual top site, so its performance matters.
  • Wikipedia has human-written content in various languages. (E.g. Google Translate injects its own markup, which messes up the natural interleave of ASCII and non-ASCII, and that interleaving is the crucial thing I'm looking for in the test data.)
  • Wikipedia is hypertext, so it has a Webby mix of markup and human-readable text (unlike obvious passages of text with translations to multiple languages).
  • Wikipedia is suitably licensed.

It turns out that it's quite hard to find a single Wikipedia topic that has representative content in multiple languages. (So far tried: A popular food item: apple. Not actually popular everywhere. Basic elements like iron and gold. Not actually inspiring substantial articles globally. Globally-interesting calamity: World War II. While long in all languages I tried, varies in length and has more dense hyperlinking than a typical article, AFAICT.)

What would be a good way to find examples of articles in various languages such that are representative: not stubs, not excessively long, typical number of references, typical level of outgoing links, hopefully not a controversial/offensive topic?

I'm thinking that for a given language, finding a median-length featured article (median among the lengths of featured articles, that is) might be a good way to select. Is there a practical way to actually perform that kind of selection? What kind of selection would be practical to perform?

The list of languages I want to test is ar, cs, de, el, en, es, fr, he, ja, ko, ru, th, tr, vi, zh-cn, zh-tw. (In case you are wondering, why that list: It contains a language of each script that has an associated Web-relevant legacy encoding, then the list contains multiple Latin-script languages with different interleaves of ASCII and non-ASCII.)

Note: I don't want to use massive XML dumps as test data, because you don't normally load those in a browser. I'm looking for HTML as rendered on the site. I'm also not looking to do scientific comparatives between languages. Rather, I'm looking for something representative enough for a given language so that I can track performance for that language compared to other libraries and across converter changesets. So I'm looking for one article per language, not a huge dump.

Hsivonen (talk) 10:36, 27 October 2016 (UTC)[reply]

I would start by running a SPARQL query on Wikidata (sparql.wikidata.org), looking for:
  • All of those languages
  • One or more articles have an FA/GA badge.
That should help you get started. If you don't know how to write the query, d:WD:Request a query will get you started. --Izno (talk) 12:14, 27 October 2016 (UTC)[reply]
Hello Henri! You might want to talk to User:SSastry (WMF) in the mw:Parsing team. I think they've got a few collections of articles, and he might be able to give you some advice. However, articles in the two Chinese scripts may be more difficult than expected.
Is your idea case same subject/same length/same complexity for each of the languages, or just any article that's reasonably typical for each of the named languages? If you want "matching" articles, then it's possible that searching for articles that were created with the mw:Content translation tool would be your best approach, but even with that, you're unlikely to find the same article in a dozen or more languages. Whatamidoing (WMF) (talk) 16:49, 27 October 2016 (UTC)[reply]
Initially I was hoping for the same amount of logical content (i.e. fewer characters in Chinese than in German) and same complexity, but then I gave up on that goal being too hard and not essential for tracking optimization progress for a given converter over time. For now, instead of bothering a specific user, I posted a request to the "Request a query" page. Thank you. Hsivonen (talk) 06:30, 28 October 2016 (UTC)[reply]
It turns out that Wikidata doesn't carry Wikipedia data in the form I thought, but still, I was pointed to the topic Mars (the planet) being the most featured topic across languages and, indeed, the various language version of that topic seem good enough for my purposes. Thanks again! Hsivonen (talk) 10:26, 28 October 2016 (UTC)[reply]

"Nasty woman" article in The Federalist - another template hack?

Try clicking anywhere on this article? For me and at least one other user, it directs you to [1]. Ed [talk] [majestic titan] 17:46, 27 October 2016 (UTC)[reply]

Yep. this is the template. Reverted, template protected, and editor blocked. --Floquenbeam (talk) 17:51, 27 October 2016 (UTC)[reply]
Many thanks, Floq. Ed [talk] [majestic titan] 17:52, 27 October 2016 (UTC)[reply]
Is it just my perception, or has there been more template vandalism than usual as of late, particularly involving politics? These exposed templates (particularly ones used on lots of articles) need to be protected. Dustin (talk) 19:47, 27 October 2016 (UTC)[reply]
Template vandalism has always been too easy and too far-reaching. It's a huge hole that needs to be fixed. --Bongwarrior (talk) 19:50, 27 October 2016 (UTC)[reply]
There should be clear guidelines for what constitutes a highly-used template (probably in percentage terms of all articles/non-mainspace pages depending on a template's primary use) and then all templates above that threshold should be protected as a result. There's been the "random" batch done here and there from what I can tell but there's e.g. nothing in WP:Protection policy which describes what makes a template high-use (just the "conditions"). (And the use of the {{high-use}} template is ad hoc at best.) --Izno (talk) 20:00, 27 October 2016 (UTC)[reply]
I'd like any template edit by a non-admin or non-template editor that adds a div, a picture, or an external link to either be restricted or require review of some sort. I'm not sure how feasible it would be, but I think it would eliminate the problem and wouldn't impede most normal template editing. --Bongwarrior (talk) 20:18, 27 October 2016 (UTC)[reply]
An abuse filter would probably do the job. — foxj 20:20, 27 October 2016 (UTC)[reply]
So then they add a <span> instead of a <div>, or a <b>, or a <i>, etc. Anomie 20:32, 27 October 2016 (UTC)[reply]
@Anomie and Foxj: How about checking for "position:fixed", which should catch more of this. Pppery 20:38, 27 October 2016 (UTC)[reply]
Edit filter 139 already checks for fixed position vandalism. I'm trying to work out why it didn't catch this. Pinging @Rich Farmbrough: who was the last to edit it. Black Kite (talk) 21:29, 27 October 2016 (UTC)[reply]
The edit filter tester says it matches. All the best: Rich Farmbrough, 22:02, 27 October 2016 (UTC).[reply]
(E/C) We already have 139 (hist · log) that does that, but it is bypassed or the condition limit is reached. See also a related discussion about potential solutions to this, including pending changes. In the long term, we can't template protect every template with a couple hundred of transclusions... Cenarium (talk) 21:34, 27 October 2016 (UTC)[reply]
Filter 701 (hist · log) seems relevant in this instance. There's also a filter (which i can't find) that looks for a high value for the z-index: property. --Redrose64 (talk) 22:23, 27 October 2016 (UTC)[reply]

Error when using Alert template

I'm not sure if this is something that goes to Phabricator or not, so I'll post here first. I posted a discretionary sanctions alert using {{alert}} (substituted). Typically when you use this template it alerts you to check this logs for past notifications. Instead I got a jumble of error code instead of the alert. The text of the error is below:

Error code text; collapsed for readability
The following discussion has been closed. Please do not modify it.

Error: {| class="messagebox plainlinks" style="width: 100%; background: #ffdbdb; border: 2px dotted black; padding: 0.5em;" |style="padding-right: 1em; padding-left: 0.5em;"| <img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/f/f1/Stop_hand_nuvola.svg/50px-Stop_hand_nuvola.svg.png" width="50" height="50" srcset="//upload.wikimedia.org/wikipedia/en/thumb/f/f1/Stop_hand_nuvola.svg/75px-Stop_hand_nuvola.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/f/f1/Stop_hand_nuvola.svg/100px-Stop_hand_nuvola.svg.png 2x" data-file-width="240" data-file-height="240" /> <img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Balance_icon.svg/50px-Balance_icon.svg.png" width="50" height="41" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Balance_icon.svg/75px-Balance_icon.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Balance_icon.svg/100px-Balance_icon.svg.png 2x" data-file-width="256" data-file-height="208" /> |A system filter has identified you are trying to <a href="/wiki/Template:Ds/alert" title="Template:Ds/alert">alert</a> <a href="/wiki/User:EvergreenFir" title="User:EvergreenFir">EvergreenFir</a> (<a href="/wiki/Special:Contributions/EvergreenFir" title="Special:Contributions/EvergreenFir">contribs</a> · <a href="/wiki/Special:Log/EvergreenFir" title="Special:Log/EvergreenFir">logs</a> · <a class="external text" href="//en.wikipedia.org/w/index.php?title=Special%3ALog%2Fblock&page=User%3AEvergreenFir">block log</a>) to the existence of <a href="/wiki/Wikipedia:Arbitration_Committee/Discretionary_sanctions" title="Wikipedia:Arbitration Committee/Discretionary sanctions">arbitration discretionary sanctions</a>. Special rules govern alerts. You must not duplicate an alert given in the past year. Please now check that this user has not already been alerted: Search logs: <a class="external text" href="//en.wikipedia.org/w/index.php?title=User_talk:EvergreenFir&action=history&tagfilter=discretionary+sanctions+alert">in user talk history</a> • <a class="external text" href="//en.wikipedia.org/w/index.php?title=Special:AbuseLog&wpSearchFilter=602&wpSearchTitle=User+talk%3AEvergreenFir">in system log</a>. Search elsewhere (optional): <a class="external text" href="//en.wikipedia.org/w/index.php?title=Special:Search&search=EvergreenFir&prefix=Wikipedia%3AArbitration%2FRequests%2FEnforcement&fulltext=Search+archives&fulltext=Search">in AE</a> • <a class="external text" href="//tools.wmflabs.org/sigma/usersearch.py?name=EvergreenFir&page=Wikipedia%3AArbitration%2FRequests%2FEnforcement&server=enwiki&max=100">in AE contribs</a>. Do you wish to alert this user? If so, click 'Save page' again. If not, click 'Cancel'. <a href="/wiki/MediaWiki:Abusefilter-warning-DS" title="MediaWiki:Abusefilter-warning-DS">v</a><a href="/wiki/MediaWiki_talk:Abusefilter-warning-DS" class="mw-redirect" title="MediaWiki talk:Abusefilter-warning-DS">t</a><a class="external text" href="//en.wikipedia.org/w/index.php?title=MediaWiki:Abusefilter-warning-DS&action=edit">e</a> Please <a href="/wiki/Template_talk:Ds" title="Template talk:Ds">submit a false positives report</a> if you received this message in error. |}

Please ping me if this is something that should be reported somewhere else. Thank you! EvergreenFir (talk) 21:58, 27 October 2016 (UTC)[reply]

Steps to reproduce: Try to save (not preview) this code on a user talk page: {{subst:alert|ap}} ~~~~. It's caught by Special:AbuseFilter/602 which deliberately prevents the save and apparently tries to display MediaWiki:Abusefilter-warning-DS, but the user sees the above code with visible html. It includes the text: "Do you wish to alert this user? If so, click 'Save page' again. If not, click 'Cancel'." If you click Save again then the save goes through like a normal edit. PrimeHunter (talk) 00:38, 28 October 2016 (UTC)[reply]
Thank you PrimeHunter for clarifying. That is indeed what I experienced. EvergreenFir (talk) 04:37, 28 October 2016 (UTC)[reply]

This was reported to Phabricator by Matěj Suchánek a few moments ago. --Martin Urbanec (talk) 08:47, 29 October 2016 (UTC)[reply]

This appears to have been resolved. Thank you. EvergreenFir (talk) 05:16, 31 October 2016 (UTC)[reply]

Page doesn't show up in suggestions

When I type gamergate in the search box, I get three suggestions:

What's missing in the suggestions is Gamergate controversy.

Note that there is a redirect from the CamelCase "GamerGate" to "Gamergate controversy", which I suspect might be the trigger for the bug, but I haven't looked if similar cases also trigger the bug.

--Distelfinck (talk) 22:03, 27 October 2016 (UTC)[reply]

I get Gamergate, Gamergate controversy, and Gamergate (disambiguation). Brightgalrs (/braɪtˈɡæl.ərˌɛs/)[1] 06:37, 28 October 2016 (UTC)[reply]
I was also missing Gamergate controversy after the original post but it's included now. PrimeHunter (talk) 09:03, 28 October 2016 (UTC)[reply]

Help requested re botched portal move

I tried to help out with what I thought was a routine move of a portal Portal:Molecular and cellular biology but there was a problem — the move had three components and it may have been that they had to be done in a particular order. In any event, the initial move didn't work correctly, and my initial attempts to correct it made it worse. Rather than dig myself in deeper I thought I'd check and see if someone would be willing to help out.

There is more information on my talk page: User_talk:Sphilbrick#Molecular_biology_portal @John of Reading: --S Philbrick(Talk) 14:44, 28 October 2016 (UTC)[reply]

I may have fixed it, not sure.--S Philbrick(Talk) 15:55, 28 October 2016 (UTC)[reply]

Could someone fix the cite error at Atsede Kidanu? I don't know what the issue is. ~EDDY (talk/contribs)~ 16:17, 28 October 2016 (UTC)[reply]

 Done [2] See Help:CS1_errors#invisible_char - NQ (talk) 16:25, 28 October 2016 (UTC)[reply]

python replace.py

Hello. I am using python replace.py -cat:Β΄_κατηγορία_πετοσφαίρισης_ανδρών_Κύπρου "[[Εθνικός Λατσιών|" "[[Εθνικός Λατσιών (πετοσφαίριση ανδρών)|" -always -pt:0

Greek words. Is it possible to have 2 or more categories to search in to? In parameter -cat: . Xaris333 (talk) 21:14, 28 October 2016 (UTC)[reply]

@Xaris333: What is "python replace.py"? Is this a question about Pywikibot? --Malyacko (talk) 11:58, 30 October 2016 (UTC)[reply]

Its ok. Solved. Xaris333 (talk) 15:41, 30 October 2016 (UTC)[reply]

{{efn}} error

Is there anything wrong with this markup?

Example text.<ref name="number1" /><ref name="number2" />{{efn|name=efn1}}{{efn|name=efn2}}

; Endnotes
{{Notelist|refs=
{{efn |name=efn1 | Explanatory footnote 1.<ref name="number1" /><ref name="number2" /> }}
{{efn |name=efn2 | Explanatory footnote 2.<ref name="number1" /><ref name="number2" /> }}
}}

; Footnotes
{{reflist|refs=
<ref name="number1">Footnote 1</ref>
<ref name="number2">Footnote 2</ref>
}}

--Namoroka (talk) 14:17, 27 October 2016 (UTC)[reply]

Don't know. Where are you using it? Examples always help. --Redrose64 (talk) 18:42, 27 October 2016 (UTC)[reply]
Could you check these links? Special:diff/746591080 and ko:Special:diff/17441679.--Namoroka (talk) 09:46, 28 October 2016 (UTC)[reply]
WP:LDR is not my forté. I avoid such refs as much as possible. --Redrose64 (talk) 19:47, 28 October 2016 (UTC)[reply]
  • Try this:
Example text.<ref name="number1" /><ref name="number2" />{{efn|Explanatory footnote 1.<ref name="number1" /><ref name="number2" />}}{{efn|Explanatory footnote 2.<ref name="number1" /><ref name="number2" />}}

; Endnotes
{{Notelist}}

; Footnotes
{{reflist|refs=
<ref name="number1">Footnote 1</ref>
<ref name="number2">Footnote 2</ref>
}}

There are two issues with the first form. Firstly (as is an ancient problem in computer programming language parsing) the parser doesn't do enough passes to correctly parse it all. It does enough that references in bare wikitext can reference items defined in lists, but not enough that references in one list can themselves reference items defined through a list. So the linkage from within one list to within another list fails.

Secondly, you get a rather confusing error message. And more confusingly, just the one of them, not two. This is because the processor (after the parser) gives up after just one message (later messages are rarely helpful).

The solution isn't a solution, it's a work-around. It is to define the footnotes in-line, with embedded citations too if needed. This isn't a problem - unlike references, footnotes are very rarely shared, so there's little benefit to defining them in a list. Andy Dingley (talk) 20:54, 28 October 2016 (UTC)[reply]

Thanks.--Namoroka (talk) 09:15, 29 October 2016 (UTC)[reply]

Help with vandalism from an IPv6 range

About half a year ago, I noticed that one of the pages on my watchlist about the One pound (British coin) had been vandalised by somebody changing the mintage numbers around. Looking through the histories of the other pages, I found similar activity, so they've all been on my watchlist so I can check on them every now and then. Below is a sample of the vandal's edits:

  • as 2a02:c7d:bf3c:6f00:bc65:8817:542e:5cf7 : [3]
  • as 2a02:c7d:bf3c:6f00:3d9b:918f:62a7:f1e2 : [4]
  • as 2a02:c7d:bf3c:6f00:6809:59:6fdc:79cc : [5]
  • as 2a02:c7d:bf3c:6f00:4404:b600:2b4c:d1cf : [6]
  • as 2a02:c7d:bf3c:6f00:8d32:79ee:6770:76b5 : [7]
  • as 2a02:c7d:bf3c:6f00:dddc:f02d:3454:6f25 : [8]
  • as 2a02:c7d:bf3c:6f00:c8c:f3e7:cf34:58c : [9]
  • as 2a02:c7d:bf3c:6f00:8c86:c749:58f:2634 : [10]
  • as 2a02:c7d:bf3c:6f00:9da3:8ed:6986:724 : [11]
  • as 2a02:c7d:bf3c:6f00:dc45:4d50:4183:d447 : [12]
  • as 2a02:c7d:bf3c:6f00:8149:88:88:586b : [13]
  • as 2a02:c7d:bf3c:6f00:ddbc:e9e4:1664:b72d : [14]

I assume these are all the same vandal with an ever-changing IPv6 address, but I'm not sure how to deal with this, because:

  • I can't post a warning, because the address changes almost daily
  • Is it possible to block all IPv6 addresses starting with 2a02:c7d:bf3c:6f00? If so, what's the collateral damage?
  • How can I find other edits by this block? I only extended my search for his edits to other British coins because it seemed logical, but now I'm stuck.

EditorInTheRye (talk) 19:56, 29 October 2016 (UTC)[reply]

At first glance there seems to be no collateral. There are 40 IP addresses which have been used in that range, all but one on coin articles. As a Sky range it's likely to be assigned to and remain with one household. To check the range, enable "range/CIDR contribs" gadget in your preferences (under advanced). Someone might also post a helpful link to an external range contribs checker. Blocks can normally be obtained by posting to WP:AN or WP:ANI, but before you do that I'll have a check through the contribs to see if there's any non-vandalism, as at first glance it probably merits a block. -- zzuuzz (talk) 20:15, 29 October 2016 (UTC)[reply]
{{blockcalc}} is pretty useful here:
blockcalc output

Sorted 12 IPv6 addresses:

2a02:c7d:bf3c:6f00:c8c:f3e7:cf34:58c
2a02:c7d:bf3c:6f00:3d9b:918f:62a7:f1e2
2a02:c7d:bf3c:6f00:4404:b600:2b4c:d1cf
2a02:c7d:bf3c:6f00:6809:59:6fdc:79cc
2a02:c7d:bf3c:6f00:8149:88:88:586b
2a02:c7d:bf3c:6f00:8c86:c749:58f:2634
2a02:c7d:bf3c:6f00:8d32:79ee:6770:76b5
2a02:c7d:bf3c:6f00:9da3:8ed:6986:724
2a02:c7d:bf3c:6f00:bc65:8817:542e:5cf7
2a02:c7d:bf3c:6f00:dc45:4d50:4183:d447
2a02:c7d:bf3c:6f00:ddbc:e9e4:1664:b72d
2a02:c7d:bf3c:6f00:dddc:f02d:3454:6f25
Total
affected
Affected
addresses
Given
addresses
Range Contribs
1 /64 1 /64 12 2a02:c7d:bf3c:6f00::/64 contribs
and will provide both the range (2a02:c7d:bf3c:6f00::/64) and a contribs link -- samtar talk or stalk 20:30, 29 October 2016 (UTC)[reply]
The link from the template output defaults to the last month, whereas this guy has been going since April. This is the link once the gadget is enabled. I've now blocked it for 3 months. Drop me a line (or post to the admin board) if there's a recurrence. -- zzuuzz (talk) 20:55, 29 October 2016 (UTC)[reply]
Wow, I didn't actually expect any useful answer to this question, so this is actually awesome, thanks! EditorInTheRye (talk) 22:16, 29 October 2016 (UTC)[reply]
IPv6 addresses are 128 bits long. Virtually all ISPs hand them out to individual subscribers as a /64 range, so it's safe to block a /64 range and assume it only affect a single individual. The general idea is that a /64 range is assigned to a single subscriber, then every single device (computers, phones, refrigerators, toasters, vacuum cleaners, whatever) are reallocated uniquely from that. Network address translation on IPv6 is highly discouraged. --Unready (talk) 23:18, 29 October 2016 (UTC)[reply]

Watchlist: "Are you sure you want to mark all pages as visited?"

I am probably at the wrong place...

What just happened to me: I tried to click on one of the "hist" links in my Watchlist, when the browser finished updating the page and inserted the button "Mark all pages as visited" directly under my mouse. I had found the information I accidentally deleted pretty helpful, so I am sure I did not want this to happen.

I think an "Are you sure?" question at this point would be vastly more useful than the unnecessary "Are you sure" question when you add or remove articles from your watchlist. After all, that one is reversible, and I have difficulties imagining a user saying "oh no! I accidentally added this article to my watchlist!". Maybe both questions should have a checkbox in the Preferences, so I could activate the one I want and deactivate the one I don't want? Just an idea. --Hob Gadling (talk) 19:38, 30 October 2016 (UTC)[reply]

You can hide the button with the below in your CSS. PrimeHunter (talk) 20:15, 30 October 2016 (UTC)[reply]
#mw-watchlist-resetbutton {display: none;}
Cool! Thanks! --Hob Gadling (talk) 21:17, 30 October 2016 (UTC)[reply]
@Hob Gadling: If you copy importScript('User:NQ/WatchlistResetConfirm.js'); to your common.js, it should provide you with a confirmation prompt. - NQ (talk) 21:34, 30 October 2016 (UTC)[reply]
Thanks, but the problem is already solved now. --Hob Gadling (talk) 09:43, 31 October 2016 (UTC)[reply]

Impact of title tag change

The suffix "the free encyclopedia" was dropped from the title tag of all articles a couple of weeks ago, per this pump proposal. A/B testing was touched on before the discussion was closed - is there any meaningful way to measure whether inbound Wikipedia traffic might have been affected (specifically on a country-by-country basis) as a result of the title change? --McGeddon (talk) 21:50, 30 October 2016 (UTC)[reply]

Double quotes in reason parameter of Citation needed template

I noticed that if double quotes are used in {{citation needed}}, the reason ends up displaying malformed (only the first word), like this:[citation needed] Escaping it as &quot; fixes it,[citation needed] is it possible to do that on the template's side? — Preceding unsigned comment added by Nyuszika7H (talkcontribs) 21:51, 30 October 2016 (UTC)[reply]

See Template:Citation_needed#Use and Template talk:Citation needed/Archive 11#Double quote marks break "reason=" parameter - NQ (talk) 21:56, 30 October 2016 (UTC)[reply]
This is technically possible by calling a lua module from the template, which I've done it the sandbox: {{citation needed/sandbox|reason=The "quick" brown fox jumps over the "lazy" dog.}}[citation needed] - Evad37 [talk] 02:47, 31 October 2016 (UTC)[reply]

DYK template transclusions on nomination page

This problem has existed for a few months on Template talk:Did you know. Once you get down to the newest subsection dates, the templates don't transclude very well. We were told back in September that the problem was that page is exceeding Template limits Post expand include size. At that time, we had a large special occasion holding area for various special events. The holding area has very little in it now, and the number of nominations we have are otherwise a lot less. The problem is worse than ever. Regardless of what is causing this, can it be fixed? As the internet expands, so does the size of everything programmed into it, and DYK won't be the only ones this happens to. How do we fix it for the future? — Maile (talk) 21:52, 30 October 2016 (UTC)[reply]

Abandoning Template limits would be a decision that would need to be taken at WMF level, and they're vanishingly unlikely to authorise it since it's not a bug, it's an intentional feature to prevent DDOS attacks. The way around it is to use fewer transclusions; remember that each DYK nomination includes {{DYK conditions}}, {{DYK nompage links}}, {{main page image}}, {{DYKsubpage}} and {{DYKmake}} plus whatever else the reviewing bot adds, so each transcluded nomination counts as six or more transcluded templates. ‑ Iridescent 22:02, 30 October 2016 (UTC)[reply]
The standard fix for template size problems is to substitute templates and to remove any nested transclusions. Jo-Jo Eumerus (talk, contributions) 22:13, 30 October 2016 (UTC)[reply]
Exactly how would DYK go about that? — Maile (talk) 22:23, 30 October 2016 (UTC)[reply]
On a quick skim, the {{DYK conditions}} template doesn't appear to have any great use and has three nested templates of its own, so getting rid of that would save four templates-per-nomination immediately (with the current 53 nominations, that's an instant saving of over 200 templates, which will probably solve the problem on its own). Basically, go through the five templates I list above, and anything that's not actually both essential to your process, and essential that it remains unsubstituted, think about whether it would be possible to do without it or enforce substitution of it. You could also probably shave quite a bit off by ruthlessly enforcing a "no untranscluded templates in discussions" rule, and clamping down on anyone who uses {{od}}, {{tq}}, {{done}} etc in discussions. ‑ Iridescent 22:41, 30 October 2016 (UTC)[reply]
Neither {{DYKmake}} nor {{DYKnom}} should be of concern, since they're commented out. I imagine that increased use of the {{DYK checklist}} for reviews is also contributing to the problem. Does the use of the {{*}} template contribute to the problem or not? It's currently being used by the DYKReviewBot. One template that we absolutely need to retain is the {{DYKsubpage}} template, since it is the final substitution of that template that closes the nomination. BlueMoonset (talk) 04:14, 31 October 2016 (UTC)[reply]
Every time this happens I hope it will finally be the motivating factor to do the seemingly obvious and move the reviewed/approved nominations to a different page. DYK that nobody can read that thing on a phone? Opabinia regalis (talk) 05:12, 31 October 2016 (UTC)[reply]
Oh, and the answer is yes, templates that are actually transcluded all count, so if there's a bunch of templated bullets then that's definitely contributing. Opabinia regalis (talk) 05:19, 31 October 2016 (UTC)[reply]
Then calling Intelligentsium, to see whether the templated bullets can come out of the reviews done by the DYKReviewBot, and any other avoidable templates. Also pinging John Cline, who created {{DYK conditions}}, to see whether there is some way to get the job done more efficiently templatewise, assuming that the job still needs to be done. I have no idea whether the 2015 conversion of {{NewDYKnomination}} to invoke a Module with the same name rather than do the work in a template would have affected the need for DYK conditions or not. BlueMoonset (talk) 07:52, 31 October 2016 (UTC)[reply]
Thank you BlueMoonset for your kindness and astute manner; inviting me to join this discussion. I was not aware of it until now, nor did I know anything of the circumstances forbearing it. I am therefore disadvantaged from giving an answer; ore the research I've yet to do.
When I catch up with the topic, however, I am confident that the answers being sought will be found.
If I wasn't so Spock-like, I can imagine myself getting all butt-hurt about not being notified of questions being asked of these templates, perhaps others as well. I was told in the past, things about my style in writing; and before that, of many ill effects that style was cursed to engender. Here, it seems that enduring months of template malfeasance was preferable to enduring discussion where I would invariably be. Being all Spock-like; and all: I feel terrible that this may in fact be. I really do.--John Cline (talk) 11:24, 31 October 2016 (UTC)[reply]
@BlueMoonset, Opabinia regalis, Intelligentsium, Shubinator, EEng, Iridescent, and Jo-Jo Eumerus: Keeping this here so we don't jump back and forth on threads in two different places. OK, so we know that an approved hook does not always stay approved upon a glance by a different editor/promoter. How would this work if we did it this way:
  • The nomination page stays but only includes those which have received no approval whatsoever.
  • Reviewers who only are only interested in non-problem hooks have less to scroll through to find something of interest.
  • This would make a cleaner page for first-time reviewers who get confused by the glut we now have.
  • A new subpage is created where any nomination that receives an approval is moved there by a bot (or human).
  • Special occasion holding areas, including April Fools' Day, appears at the bottom of this page. It stays consistently as is, in the fact that hooks are only moved here after approved on the main nominations page.
  • Prep promoters draw from this page.
  • Reviewers who like to check for problem areas on approved nominations look here.
  • Any disputed approval and any post-approval ALT hooks added are worked out on this subpage
  • Any hooks pulled from Prep, Queue, or the main page are put back here.
This idea is a start. Input from the community? If this sounds workable, maybe we could open an RFC at DYK. — Maile (talk) 12:12, 31 October 2016 (UTC)[reply]
Yep, sounds like an excellent idea to me too. Opabinia regalis (talk) 21:44, 31 October 2016 (UTC)[reply]

Emoji usernames

So I was curious the other day as to whether or not the system would allow creation of usernames with emoji, and it turns out it does (but only when you click the checkmark to bypass anti-spoofing features). Now that I'm stuck with User:🌪, I kinda want to use it as my main alternate account, but I hesitate because I know emoji show up differently across different platforms and I'm unsure of how they would work technically with the MediaWiki software, gadgets, etc. Is there any policy or technical reason that I shouldn't use 🌪 as my alternate account, or would I be in the clear to go ahead and do that? Ks0stm (TCGE) 00:36, 31 October 2016 (UTC)[reply]

One thing that might apply is Wikipedia:Username policy#Confusing usernames. I don't have the correct support to see what emoji you are using so if we have a number of editors all using different emoji then some editors are going to have no idea which is which. CambridgeBayWeather, Uqaqtuq (talk), Sunasuttuq 00:48, 31 October 2016 (UTC)[reply]
That was one thing that worried me. For reference, the emoji I'm using is cloud with tornado. Ks0stm (TCGE) 00:53, 31 October 2016 (UTC)[reply]
I think the answer is in how you got the username to begin with. The fact that you need to click a special button (override antispoof) to acquire such a username should tell you that we do not want such usernames being created to begin with. -- The Voidwalker Whispers 00:54, 31 October 2016 (UTC)[reply]
I don't know about that. The anti-spoofing is more to prevent similar looking usernames from being created. Those are sometimes created, but they require a certain user right (not sure which) to create. The ones we just flat don't want created are the ones on the title blacklist, which I didn't have to bypass. Ks0stm (TCGE) 00:57, 31 October 2016 (UTC)[reply]
I suppose so, but to more answer your question, I have no device with the ability to add that emoji easily. It displays, but it is not easily accessible for me on my keyboard or mobile devices. Thus I stand by recommending not using the symbol. However, I am unaware of any potential technical limitation related to emoji usernames. -- The Voidwalker Whispers 01:04, 31 October 2016 (UTC)[reply]
Typing it is rather easy to get around; I'd just have to do something like User:Sigma, perhaps with User:Tornado (which I'd have to usurp) or put on the userpage a place to copy the symbol for pasting or something similar. I don't think it would be that different from users with Chinese/Japanese usernames or other non-latin scripts in that respect. I'm more worried about the variance in how it displays to users. Ks0stm (TCGE) 01:09, 31 October 2016 (UTC)[reply]
Here are some links to different user names: 🌪 and 🙰 and 🙱 and 🤴 and 😮 and 😯 and 🤵. Such names seem undesirable to me, but I suppose we would have to battle it out at WT:Username policy. Johnuniq (talk) 02:44, 31 October 2016 (UTC)[reply]
The above usernames all appear as little boxes for me:
That's with Google Chrome on Windows 7 - Evad37 [talk] 03:02, 31 October 2016 (UTC)[reply]
the first four and the last in Johnuniq examples are boxes fifth and sixth are round faces. Using FF on Linux Mint. CambridgeBayWeather, Uqaqtuq (talk), Sunasuttuq 03:36, 31 October 2016 (UTC)[reply]
They all appear as boxes for me as well (also using Chrome / Windows 7). Dustin (talk) 03:39, 31 October 2016 (UTC)[reply]
None of those display for me, on 3 different computers with 3 different browsers - and your examples all look pretty much the same - so from an "antispoofing" point of view - those are displaying as practically the same username - for different users - and as such do not appear to be appropriate to use. — xaosflux Talk 03:57, 31 October 2016 (UTC)[reply]
Can y'all see  (talk · contribs)? Ks0stm (TCGE) 04:35, 31 October 2016 (UTC)[reply]
I can (Safari on OS X 10.10.5). — Yellow Dingo (talk) 08:32, 31 October 2016 (UTC)[reply]
I can see ☈. CambridgeBayWeather, Uqaqtuq (talk), Sunasuttuq 10:57, 31 October 2016 (UTC)[reply]
Hmm. If ☈ is more universally visible to users I would be more than happy to rename the emoji username to ☈, which would solve this problem pretty easily. I just want to make sure that ☈ doesn't have the same sort of visibility issues as the emoji, first. Ks0stm (TCGE) 11:00, 31 October 2016 (UTC)[reply]
What the above looks like to me
Remember, these things look totally different depending on a user's hardware and software configuration. I'm assuming from the context of this thread that you're aiming for a pretty picture of a cloud, but on my system (Chrome on OSX) I'm seeing the US symbol for "thunderstorm without precipitation" (see right) which isn't going to mean anything to 99.9% of readers and I'm assuming isn't what you're aiming for; you don't need to just ask "Can y'all see it", you need to ask what everyone is seeing. ‑ Iridescent 11:26, 31 October 2016 (UTC)[reply]
@Iridescent: Actually, judging by your screenshot you see exactly what I see. I specifically chose because it's not an emoji and I figured it would be less prone to display variance. Ks0stm (TCGE) 11:32, 31 October 2016 (UTC)[reply]
FF on OSX
In Firefox on the same OSX machine on which the above screenshot was taken I just get a Unicode box (see right). ‑ Iridescent 11:47, 31 October 2016 (UTC)[reply]
I don't know then, to be honest. WP:UNICODE seems to suggest that most browsers should support it, and I would assume that's the case since the symbol has been in unicode since 1993 and can be typed on Windows computers using Alt+2608 (or so I see...my laptop doesn't have number lock with which to do that). Ks0stm (TCGE) 12:00, 31 October 2016 (UTC)[reply]
Chances are it's more a question of which fonts that the browser uses, rather than the browser itself. Anomie 16:32, 31 October 2016 (UTC)[reply]
Correct, it's about fonts, not browsers. You need to have a font installed that supports the desired characters, and the browser needs to be using that font to render said characters. Here's a Unicode primer. --47.138.165.200 (talk) 23:46, 31 October 2016 (UTC)[reply]
Emoji usernames will be hard to ping on mobile devices. They really aren't userfriendly and IMHO we shouldn't allow them. Doug Weller talk 18:32, 31 October 2016 (UTC)[reply]
Mobile devices usually have good emoji support. We manage with non-Latin usernames just fine, and have no evidence that emoji usernames would cause any more of a problem than any other unusual characters, so prohibiting them preemptively sounds pointless to me.
Besides, I couldn't resist. My cat now has User:🐱 ;) Whoever registers User:💩 had better not waste it.... Opabinia regalis (talk) 22:00, 31 October 2016 (UTC)[reply]

Preference re-setting

On an older mac with 10.6.8, and firefox 48, when I re-set preferences to include the 'D' setting to see Data edits - it was great!

But then when the bots started warming up, my watchlist flooded... so tried reverting (disabling in preferences) but it looks like it doesnt want to revert to no "d" - I still keep geting them showing on watchlist. I am on older equipment which support older things which might not want to do things, but curious whether which side this is - mine or the other, so to speak.

Also, sometimes when I am trying to see what is happening the 'save' button on the bottom of the page is not 'live' - maybe this relatesdirectly to the issue. Any clues as to the possible issues would be appreciated, thanks JarrahTree 10:52, 31 October 2016 (UTC)[reply]

Have you remembered to check the "Hide Wikidata" checkbox at the top of your watchlist? ‑ Iridescent 11:33, 31 October 2016 (UTC)[reply]
(edit conflict) If "Show Wikidata edits in your watchlist" is enabled at the bottom of Special:Preferences#mw-prefsection-watchlist then disable it and save preferences. If the "Wikidata" box is enabled at the top of the watchlist after "Hide:" then disable it. Note that preferences and watchlist are opposite. In preferences you disable to say you don't want to show Wikidata. In the watchlist you enable to say you want to hide Wikidata. Does this help? PrimeHunter (talk) 11:39, 31 October 2016 (UTC)[reply]

Thank you both! fixed - thanks again, embarrassing :) 11:48, 31 October 2016 (UTC)

16:18, 31 October 2016 (UTC)