Page MenuHomePhabricator

Provide linkable anchors to line indicators in diff view
Open, LowPublic

Description

It would be of use to be able to link to a specific change of any given diff, especially in the case of a complex diff. For example, in this diff between two versions of the article "Wikipedia" on the English Wikipedia that I selected at random:

https://en.wikipedia.org/w/index.php?title=Wikipedia&diff=594765035&oldid=590925507

the sentence "Also, all pie-charts may be displayed properly in desktop view, but not in mobile view." has been added to the article at what was previously line 449. If I want to direct someone to that particular change, I need to instruct them to either scroll down to the "Line 449" indicator or search for the text in question. This is inefficient.

So, I suggest that every change in the diff (displayed with a "+" or "-" indicator) is accompanied with an anchor link (preferably using an icon of the chain type commonly used online for permanent links). These would be simply calculated as integers starting at 1.

Let's pretend that in the case of the example above, the change I refer to was the 56th in the diff (it wasn't - actually counting what it was would take a long time). An anchor link for that change would generate the following URL:

https://en.wikipedia.org/w/index.php?title=Wikipedia&diff=594765035&oldid=590925507#56


Version: 1.23.0
See Also:
T4313: Provide linkable anchors in diff view to the affected content, or highlight the changes in the content

Event Timeline

bzimport raised the priority of this task from to Low.Nov 22 2014, 3:02 AM
bzimport set Reference to bz61486.
bzimport added a subscriber: Unknown Object (MLST).

Would this disrupt the UI? Should it be enabled for all users? Would the anchor be to the left, right, above, or below the +/- ?

What if we just make the + and - symbols into links (and add hover text)?

That could work. I do quite like having a definite visible icon for discoverability, but some people might see that as clutter. If there were, I would suggest that they be slightly lower contrast until mouseover, to reduce visual noise. Would be interesting to hear from design people about this.

This might break links if the diffing algorithm is changed significantly, although I do like this idea in general.

Rats, that's a really good point. Well, I can think of a way to avoid breakage - if the anchor URL specifies what kind of diff is in use, and that particular diff algorithms are always kept available.

In that case, my example URL from above would look something like the following (pretending that our current diff algo is called "diff1"):

https://en.wikipedia.org/w/index.php?title=Wikipedia&diff=594765035&oldid=590925507&difftype=diff1#56

A diff without difftype= would always use the latest algorithm, whatever it may be. Obviously this raises the complexity somewhat; I don't know what the internal policy with regards to diff algorithms is. I would like to imagine that access could still be provided to older ones in the event of changes. Someone who's actually a developer, unlike me, can hopefully shed some light on that.

(re to comment 5)
Sounds like a reasonable idea, but I'm not sure if the devs would like it.

Hi Scott. Thanks for taking the time to report this!
This particular problem has already been reported into our bug tracking system, but please feel free to report any further issues you find.

  • This bug has been marked as a duplicate of bug 2313 ***

(In reply to Andre Klapper from comment #9)

AFAIU, bug 2313 and bug 63707 are about linking line indicators to related paragraphs in the content view, while this bug is about anchors to line indicators themselves.

Comment 10 is correct. This bug is not a duplicate of bug 2313, so I'm unsetting that.

gerritbot subscribed.

Change 185569 had a related patch set uploaded (by Nemo bis):
Add linkable anchor #L<N> to (original text) line number in diff

https://gerrit.wikimedia.org/r/185569

Patch-For-Review

Change 185569 merged by jenkins-bot:
Add linkable anchor #L<N> to (original text) line number in diff

https://gerrit.wikimedia.org/r/185569

@Nemo_bis @Legoktm I suppose that change does not affect most/all Wikimedia sites, which use the wikidiff2 PHP extension? Why are IDs added only for lines on the left, not on the right? How would you avoid duplicate IDs when a page contains more than one diff? What about the concern raised in T63486#668897 -- that links could potentially break when the diff algorithm, or even the format in which the diff is presented (split vs. unified vs. something else) is changed? What if the new style of diff doesn't use wikitext at all?

PleaseStand, this patch is just a minimal first step which changes the header in which the actual diff content is wrapped (TableDiffFormatter::blockHeader()).
$r = '<tr><td colspan="2" class="diff-lineno" id="L' . $xbeg . '" ><!--LINE ' . $xbeg . "--></td>\n" .

How can a change in this HTML aspect "break" something? Is something relying on this exact HTML structure? That would seem fragile, as the header itself is altered in later stages by DifferenceEngine. Similarly, in what cases two diff tables are combined in one page, causing a possibility of ID reuse?

As for radically different diff engines, probably they wouldn't be using TableDiffFormatter at all. If they do, the only requirement would be that they have a table structure (of course, that's the name) and that they present the diff in a series of chunks headed by a line number: this was already there, nothing new.

How could this work with T15644: Add automatic line numbering capability to <poem> tag if users choose to show the page content below the diff?

Change 197868 had a related patch set uploaded (by Ricordisamoa):
Use more specific and less ambiguous ids for line numbers in diffs

https://gerrit.wikimedia.org/r/197868

How could this work with T15644: Add automatic line numbering capability to <poem> tag if users choose to show the page content below the diff?

Simply by choosing a different ID? Is there some convention which uses L$N as anchor for poems already?

Change 197868 had a related patch set uploaded (by Ricordisamoa):
Use more specific and less ambiguous ids for line numbers in diffs

https://gerrit.wikimedia.org/r/197868

mw-diff-left-l-$N ? Who is going to discover and remember such an anchor? If the anchor is not meant to be found and remembered, what's its purpose? Is any other web application using such a pattern for line diff anchors? Is it valuable or not to use something similar to what gitblit, GitHub and others do?

It seems to me that we don't really want to fix this bug, removing myself.

Catrope subscribed.

The ID is already implemented, but it's not yet discoverable (i.e. there's no link to it anywhere). That's probably something that a design person should weigh in on.

Change 197868 merged by jenkins-bot:
Use more specific and less ambiguous ids for line numbers in diffs

https://gerrit.wikimedia.org/r/197868

Change 197868 merged by jenkins-bot:
Use more specific and less ambiguous ids for line numbers in diffs

https://gerrit.wikimedia.org/r/197868

This is how such anchors now look like in vanilla MediaWiki: http://wiki.wikimedia.it/index.php?title=Diario_di_bordo&type=revision&diff=239621&oldid=233071#mw-diff-left-l76

As @Catrope commented a year ago, these need to be made discoverable. Has this fallen by the wayside?

Dunno. I don't care any longer since the anchors were made ugly.