* Remove floats;
* Get rid of margin collapsing so that the space is easy to understand;
* Fix invalid rules.
Bug: T135629
Change-Id: I3bfaf137e4d02f0dc809c809edac9b28cb4bdc3a
Changes:
* Disable the desktop target by default
* If the user is in the experiment condition, then enable the desktop
target
* Add PopupsExperiment config var, which, if set to true, causes: the
experiment config to be added to the output as config vars, as well as
the ext.popups.desktop Resource Loader module
Bug: T132604
Change-Id: Ia71ca924c3e2ec2ee0b0191ea2573fa7ff5e8a7e
As there are an unmanageable amount of synchronous checks of
mw.popups.enabled, convert mw.popups.experiment.isUserInCondition to a
synchronous method.
Follow on I4959749.
Bug: T132604
Change-Id: Ide07e62868c77bfcd78af58dcec7303a35a72157
Breaks EventLogging as the old schema is not compatible with these
new properties. We will reapply the patch later when in a better state.
My bad for merging.
This reverts commit ca20031a0e.
Change-Id: Ia961e0f99339f9045af9d0a4653599a48518cc95
Changes:
* Add the ext.popups.experiment module
* Add the mw.popups.experiment.isUserInCondition function, which
returns a promise that resolves with true if the user is in the
experimental condition, otherwise false
* If the experiment isn't configured, i.e. wgPopupsExperimentConfig is
null or undefined, then the user isn't entered into the experiment,
providing a kill switch
Bug: T132604
Change-Id: I49597494273e3862711a32e4951c8598e6c8bf59
IE9 does support SVG if you use setAttributeNS.
Thus stop whitelisting SVG support there.
Don't worry about fallback rendering of SVG for IE < 9
- those that do not support SVG also do not
enjoy ResourceLoader JavaScript support.
Bug: T134979
Change-Id: I1d3d9c4c622e98df19a5e9dc4101b44242e07178
This change is an intermediate step in our transition
to logging a variety of events easily.
Also:
* Some events may need sendBeacon support and may not be
logged if the navigator does not support sendBeacon.
* Do not load schema code if EventLogging is not available.
Bug: T131315
Change-Id: Iff939577f65f1c6c71701dd6967939445385fb70
* The classes in ext.popups.core.less apply to the thumbnail
which reside in .mwe-popups > div > a.popups-discreet
The thumbnail is thus not a direct child of the div parent of
popups-discreet.
* The margin-top is unnecessary.
Change-Id: If91140a55baa1aef36483002de681503c2690cf6
Popups currently makes use of a render cache. Using a cache in this
way without protection causes problems (I will look at cleaning this up)
The hack below it
`mw.popups.$popup.html( mw.popups.$popup.html() );`
will lead to the html of the cached object being wiped out on IE9 meaning
future loads will show an empty popup.
Add a unit test (which previously would fail in IE9) to protect against this
in future.
Bug: T68496
Change-Id: Icef784fb389b0ab1856e2ba7464c9423ebcd62ab
Changes:
* Extract survey link element creation into
mw.popups.render.renderers.article#createSurveyLink
* Make #createSurveyLink throw an error if the URL doesn't start with
https or http
* Add unit tests that cover the new behaviour of #createSurveyLink
Bug: T129177
Change-Id: I8b61cb0e94ab4e30bc894c279bb05918ecc7719e
Changes:
* Quote the URL with double quotes when generating the background-image
rule
Bug: T129177
Change-Id: I74748c7efe67954272ce0a539455b0b00001a26a
1. Add comment for empty SPAN when there is no thumbnail
2. Use footer instead of div.timestamp-* as it also contains
the settings icon now.
Change-Id: Ia6fca32770596c980b33a9a6e58bb08b661b90d1
Test pieces that make sense, everything else is already
covered in cucumber tests. See the following commit for more
info: I55f311b6b8845e6ebf4cc5698758afd1f9042a45.
Bug: T133025
Change-Id: I474c1569494601ae5865dcfba22ea728220ff8df
API requests to fetch the hovercards data now include
`X-Analytics: preview=1` header so that HoverCard hovers are
easily distinguishable in Hive.
Bug: T129425
Change-Id: I69df51a627951c4373b3b7463ab5b2c0a129faa1
Linkpreview will try to fetch a text extract using the api and, if this
doesn't fail, show the extract as a drawer with a button "Continue to
article". If the query fails, it will redirect the user to the article
directly.
Bug: T113243
Depends-On: I6d8c5b80e70c3d8d1a92a70cc91e1b90d598cb0f
Change-Id: Idbaae9fe2decd89b73e623a25fbd39464c316fb2
Zopfli is the most efficient DEFLATE compression algorithm, trading run-time
performance for file sizes that are typically 3-8% smaller than those produced
by zlib with the maximum compression setting. Its output is Deflate-compatible,
so no specialized decoder is needed.
This change was created by running zopflipng against all the PNG files in this
repository. The exact invocation was:
git ls-files --exclude-per-directory=.gitignore -- '*.png' \|
parallel zopflipng -m -y {} {} \;
Files which zopflipng was not able to compress more efficiently were left unmodified.
Bug: T127608
Change-Id: I3ec96a8e75ea521315b5944e91ead5e60297c6df
Zopfli is the most efficient DEFLATE compression algorithm, trading run-time
performance for file sizes that are typically 3-8% smaller than those produced
by zlib with the maximum compression setting. Its output is Deflate-compatible,
so no specialized decoder is needed.
This change was created by running zopflipng against all the PNG files in this
repository. The exact invocation was:
git ls-files --exclude-per-directory=.gitignore -- '*.png' \|
parallel zopflipng -m -y {} {} \;
Files which zopflipng was not able to compress more efficiently were left unmodified.
Bug: T127608
Change-Id: I0bcc35a4d27a7589cd1a3f6569ef8089e8b6ec02
For the work on T113243, the Popups extension should be structured in a
more flexible way. This is achieved with this change.
Following has changed:
* The main/core logic of Popups now lives in ext.popups.core to be shareable
between implementations
* The desktop specific logic lives in ext.popups.desktop now, the frontend init
code in ext.popups.desktopTarget and the desktop renderer in
ext.popups.renderer.desktopRenderer
This change doesn't change the functionality of Popups.
Change-Id: I72121e0a1e4b2952f85dc1bc8cf59d06b8d22f47
This doesn't need to be a property. Its being used exactly once, and
because we try to test for NavigationPopup's availability so soon we
mostly get an incorrect answer.
Moving the condition to the render method instead. Chances of NavPop
being loaded when the settings' screen is being rendered are much
higher.
Bug: T109912
Change-Id: I3723dc1e3e9400b6ed2e0160104c849a25a71881
mw.RegExp.escape() is already used in ext.popups.core.js and
the dependency to module 'mediawiki.RegExp' is set.
Change-Id: Iaa7ab6902693c787234fd589276fa38ce75b82da
Right now the main renderer always picks the article renderer, no matter
if any other renderers is registered. It will now run the 'matcher'
method in the rendered, and if it returns true, we use that renderer.
Not sure how we'll avoid matchers stepping on each other.
Bug: T69434
Bug: T102921
Change-Id: Ib06812836cdbd3a5bfd54d4bc6147012fb891694
Adds the jscs and jshint packages for development and their tasks in
Grunt. Also fixes all the code convention errors.
Change-Id: If1c9dfdbe22d4912d78b6a51b1292866970a85cc
The global disablePopups function from NavigationPopups got scoped to
pg.fn.disabledPopups at some point. We were relying on that function
to both detect and disable the gadget.
Bug: T109912
Change-Id: I3d6de60ca2a387e45675ddb04cdc45b0f967e46a
Don't request unused prop=info and its rvprop=watched;
use formatversion=2 instead of indexpageids to simplify processing the
returned query object.
Bug: T103981
Change-Id: I1c0f9b0245a823413f5fed78bc1d0d46ef978cef
Popups' API query request specifies the string 'true' as the value for
some boolean request parameters, but that's functionally identical to
specifying boolean true -- both get encoded as param=true in the HTTP
request.
Change-Id: Icc5f4b8ef6faaffe4a23c964f8cd8c2582d28381
Replace $.escapeRE from 'jquery.mwExtension' by
mw.RegExp.escape from 'mediawiki.RegExp'.
Bug: T103610
Change-Id: I1d23e4c02d92828291b98a52b4e8050fbebc06d9
mw.Uri throws an exception when dealing with -
href="javascript:void(0);"
href="mailto:abc@example.com"
etc.
Using a try…catch to return undefined in this case.
Bug: T95215
Change-Id: I632e9dc0e70a5fddf9f2573572bfc8e7f6232923
This is needed for wikis that use LanguageConverter, since the title
attribute is converted to the user's variant, and the canonical title is
needed for the API unless converttitles is specified.
For filtering, instead of comparing linkHref and expectedHref, filter
out links that have other query parameters or aren't in content
namespaces.
Bug: T93605
Change-Id: I5534753307ed5e1d4b27c52c616fd143b2a397e1
Based on the comments this is what it supposed to be.
mw.popups.render.article does the API-queries on init, so do that after
the API_DELAY-timer fired.
Change-Id: Ia235cbe1eb86fc774edda84208d320843401624e
Both the title and the extract were being html escaped thus producing
string like ' and " when used with .text(). So, we now use
document.createTextNode() for the normal text and .text() with the bolded
one.
Bug: T93720
Change-Id: I6bbc52e427dc636b7b0be1ad4f749d9273ff61b3
If the URL of the thumbnail has suspicious characters like ', " or \
return a <span> instead of trying to render a thumbnail.
Bug: T88171
Change-Id: Ide052ea2a7de166599d077a385a6e788bfa63302
Instead of replacing all instances of the title in the extract -
'$1<b>$2</b>$3'
We now put symbolic strings there which we use to split the string
and then make an array of text and <b> elements that get appended
to $contentbox.
Bug: T76378
Change-Id: I02222bbff84532f63cac67af1bf889c328ec6ff2
Use proven technology to create and compare URLs.
This will display popups also on anchored links again.
Change-Id: Ic010ca027017435f666782e709e641cf3bbb8767
Hotfix for Ie34064860a81c7866b8e8b86858d2e12a8a196f4
Still won't show up popups for anchored links, but dunno if intended.
Change-Id: I91a15153cb8bcae6d8ef2e5616855e4d45be6d78
Use the getUrl method to check that the <a> actually links
to the article that it has the title of. Only those elements
are returned by selectPopupElements.
Bug: T70039
Bug: T72512
Change-Id: Ie34064860a81c7866b8e8b86858d2e12a8a196f4
This is a subset of patch Ie340648. If reviewing and merging the much
larger other patch (it does much more things) is a problem, we can
merge this first, rebase the other one and have a much more focussed
discussion.
Change-Id: I4549fb1810c7dd36df8a70983d9508015c2bfadf
HTML5 allows <a> elements with no href="..." attribute. We do this in
Wikibase/Wikidata in a few places. Hovering these <a> elements causes
TypeErrors.
This is a hotfix. Please see Ie340648 for a much more advanced fix.
Change-Id: Ib20ef8348c964a6ba736d0fc76909fd4d496c11e
- Don't prevent the link click event.
- Check with the currentLink element rather than jQuery selectoin.
- Add click handler to images (used to be only extract).
- Stop the 'closePopup' if 'reset' has already been run.
Bug: T86378
Change-Id: I8748ecffe55954425656c5103fa9ddc99b6f3f72
This <div> had been sitting visible at the bottom of the page
and went unnoticed till it caused problems with the ContentTranslation
extension.
Hiding it using 'display: none;' causes issues with the masking
of the images, thus putting the div out of the view port.
Bug: T76718
Change-Id: I731128c827aa093e0ffab52dc378aea386b0bb3c
Currently .mwe-popups-extract keeps some empty space after the last
line. This shifts a little when zooming in causing part of the text
of the next line to be visible. Reducing this to have lesser extra
empty space solves the problem.
Bug: 73551
Change-Id: I968fca23fe2de04cb3f73ba4e7d4f676fbf88536
When zooming in the border of the div is visible over the :after
pseudo element.
- Update top and bottom triangle mixins to include @extra argument
- Update pseudo elements to use the new mixin and position them
correctly according the extra size
Bug: 73550
Change-Id: I05b9c74a675c69e407c4c78771504f447da754c5
Hovercards is currently at 5 z-index which causes
it to be rendered behind the compact personal bar.
Changing this also effects the border triangles and
masked SVGs, thus incrementing them too.
Bug: 72882
Change-Id: Ib3c889c748a9c919754d8281e68fd0664db7c408
This was happening due to:
* Stale CSS selector
* Incorrect margin values
Also added missing triangle pokey for a particular
orientation of the hovercard.
Bug: 71872
Change-Id: Ic4986f9cee2a92b29548ef21f9bec3f2c2117e98
This code has not been working because processAllPopups does
not execute. Test the change with:
https://en.wikipedia.org/wiki/User:Prtksxna/common.js
Bug: 62952
Change-Id: I3c8b5590b89693743c85c006fc0ee0a50e8b8342
The script depends on a title being present in title attribute. So
skip links without title attributes (which were getting empty
attributes due to the implementation of removeTooltips) and bail on
trying to open a preview for links without a title.
Bug: 67728
Change-Id: I4cc744bea10af34741681f11e03d77b3d53e3a3b
removeBracketsFromText doesn't count it tracks nesting level, and
brackets are [] not (). Minor detail.
Change-Id: I8f42b1ccae5233d7b6062bb311eced6ef3085d4a
Per discussion on the bug, the current values of 150ms/100ms cause a
lot of unintended actions.
Bug: 64234
Change-Id: I6fe2d89ad97630ec5c7f47d3e3b9b71d7cfc5d3f
In combination with other gadgets the error
TypeError: re.query is undefined
can occur because the request contains titles:'' and the response is [].
Change-Id: I46d02e7c48a55cd9af20fd7ef729b4d26f69a8c0
Casees:
1) Hello (and welcome)
2) Hello )and welcome(
3) (Hello (and) welcome)
The current RegExp only takes care of (1). The new code should
take care of all the cases.
Bug: 65138
Change-Id: I39f38beed0cf612067d6fc61b18295d1d38fcc22
These links were not ignored due to a typo. This also threw an error,
because these links produced query.interwiki and not in query.pages.
Change-Id: I3b5c5b900209323e3e72b41e3b02e90f1f53b4eb
Instead of the current incomprehensible mixture of em's and px's.
This will help resolve other positioning bugs with relative ease.
Change-Id: I9d7659736489c461ab8c0f4aa660a3ce2846bd5d
The setting is called 'underline' and defaults to 'Skin or
browser default' (= 2). If set to 'Always' (= 1), which is what
I personally like and do, ;-) all text in hovercards is
underlined (and the underlines disappear if you hover the
hovercard, which is a bit tricky but possible).
This simple fix removes the dependency from the default style
(which only shows underlines on hover). I think this is the most
straightforward solution.
Change-Id: Ide54ffd1949a50184d8d2a680bf1a0d35e24d563
Increase the extract font-size. Also increase
the max-height of .mwe-popups-extract so that
the text does not get cut.
Bug: 63508
Change-Id: Icde0ca8af44e68cab71816f4c89fe9a68f66b472
The title here is not percent-encoded or anything, it's just text.
Calling decodeURI() can cause errors to be thrown if it doesn't happen
to be a valid URI.
Bug: 64236
Change-Id: Iee7c1db0c01cba405f0a2a03b0de58e9edb9a171
Previously we would wait 150ms if the data was cached,
or 50ms + [API request time] if it was not.
Using some promise magic to achieve this without decreasing
performance. The behavior of sendRequest() was changed a bit.
Bug: 64235
Change-Id: Ibe6e1a5f4ac02f538dac686476ac95ba506a1a86
The old version would iterate over all links on the page (try that on
[[Barack Obama]]), the new one should be optimized by the browser and
poly-filled by jQuery if unavailable.
We can't do `:not(.extiw, .image, .new, .internal, [title=""])` –
while some browsers support it, CSS specification doesn't allow
compount selectors inside :not().
Change-Id: I0e4b18752905604ebf1b7f41a9b7ac2edd8b42e0
* Do not escape double-quotes in single-quotes string
* Remove repeated <defs/> tags, one is enough
* Reindent
Change-Id: I6a5b53384b8d5604bee11cb993d040282accf999
Browsers like Safari and IE9 alias <image> tags to <img>
tags and thus don't display hovercards correctly. By creating
the `image` in the svg namespace we solve this problem.
Bug: 62985
Change-Id: Iff92d59ea231d1208eea149cc8c182a5fe87701a
* Consistant whitespace after keywords
* Misc whitespace cleanup as per JS coding guidelines
https://www.mediawiki.org/wiki/Manual:Coding_conventions/JavaScript
* pass mw to IIFE and use the function arguments close to function body
( function ( $, mw ) {
...
}( jQuery, mediaWiki ) )
* Moved prefined moment to .jshintrc. Move browser:true too
Change-Id: If488974e8e5987916bc4043e4e70bb6c60472b30
Prevent popups from showing up when the mouse cursor accidentally
ends up hovering a link after scrolling.
Change-Id: I07a95d9eabdc22a045a97b07f98fb0d632a276c1
- Only text popups
- Portrait popups
- Landscape popups
Had to convert the landscape popup's img into an svg:image
too. 2 new SVG masks were made to take care of the flipped
states.
Change-Id: Ib30bb7f5ff9857f6a470b07db05ab50fb0ca8a5d
* Triangles using the border hack for the white part of the popups
* SVG clipPath on FF and Chrome, using SVG <image>
* Fallback to <img> on browsers with not SVG support
Change-Id: I3b1226051436652edbffe4642176c9a0e405243c
This is the only way we can properly truncate text.
We can't do it on the basis of characters as it'll
take up different amount of space based on the script.
Change-Id: I77f8304315beb42eb2120c633d3befb5f83432f9