Commit graph

4758 commits

Author SHA1 Message Date
Roan Kattouw ede989445e Make dm.Surface's 'select' event more useful
It was previously emitted before the selection was updated and with the
old selection as a parameter. Instead, emit it afterwards, and make sure
it's emitted even if the selection changes because it was translated
for a transaction.

Also correct its event documentation, which seems to have been copied
from a UI class somewhere.

Change-Id: I521eff0095959572587c0ecffd24dbf322e12d82
2013-10-23 11:28:09 -07:00
Zeljko Filipin 904c5a48ad [browser test] Moving shared code to mediawiki-selenium Ruby gem
Bug: 53579
Change-Id: I4ef8b63f485b0274f252cf95e566f0484615e8cf
2013-10-23 16:43:51 +00:00
jenkins-bot 1b13df5155 Merge "Use update rather than show in focusable node re-render" 2013-10-23 15:57:19 +00:00
Roan Kattouw febc0f567f Defer selection-triggered updates in ve.ui.Context
Move selection change handling (closing the popup if open, and updating
the context toolbar) to .afterChange(). Every time .onChange() detects
a selection change, it schedules a call to afterChange(). These calls
are batched so that multiple selection changes in the same tick cause
afterChange() to be called only once.

Deferring these updates causes them to no longer occur while a 'change'
event is being emitted. This means that if an inspectors' close handler
calls .change(), that call is now no longer nested inside another
.change() call and doesn't run afoul of any render locks set by the
caller of the outer .change().

Bug: 54675
Change-Id: Iae2f41a83b5d64251a54e42303100e84a5c25561
2013-10-23 15:12:47 +00:00
Roan Kattouw a12446d795 Ignore change events while opening and closing inspectors
AnnotationInspector changes the selection from both its open and close
handlers, which can cause recursive calls to .hide() and .update()

Change-Id: Ic334f9b8b335fe1aaac2dc98dc6ea9fd9d5707ff
2013-10-23 14:41:24 +00:00
jenkins-bot fad9ae6c50 Merge "Use a sane recursion guard in ve.ui.Context.prototype.hide()" 2013-10-23 13:49:45 +00:00
jenkins-bot 7f7c29cde2 Merge "Fix typo in documentation for ve.ce.View.prototype.getModel" 2013-10-23 13:45:26 +00:00
Ed Sanders ac2a839607 Use update rather than show in focusable node re-render
Update checks if there's actually a context menu to show. We also need
to pass through the parameters for show.

This was causing the last-shown context menu to appears after resizing
an inline image (which has no context menu).

Change-Id: I8f46f71e2fba6896fe10054f0d2a679c6f23eb9c
2013-10-23 14:35:55 +01:00
jenkins-bot f3565f2ed8 Merge "Followup 1878c7c5: fix check for nonexistent property .draggingAndDropping" 2013-10-23 12:49:01 +00:00
Timo Tijhof 6560cfda2b Remove simpleArray utilities from ve.js and use oojs instead
Change-Id: I23710ff50378f4069b8a0dea89f0491884acd377
2013-10-23 03:26:53 +02:00
jenkins-bot 5bd6ea0e93 Merge "Update oojs to v1.0.5" 2013-10-23 01:19:27 +00:00
Timo Tijhof b7a4dcdbdf Update oojs to v1.0.5
Code:
  http://trevorparscal.github.io/oojs/releases/oojs-1.0.5.js

Release notes:
  https://github.com/trevorparscal/oojs/blob/v1.0.5/History.md

Change-Id: I1117bd5bef70783039db18849f85215fcb346ada
2013-10-23 03:16:21 +02:00
Roan Kattouw 20bdb78512 Followup bb03e8f: fix toolbar floating
Small mistake splitting the ooui commit, whoops

Change-Id: I166df38234f432ab2ef00e7d156e49cba16ede99
2013-10-22 23:19:22 +00:00
jenkins-bot f2be711ee0 Merge "Rename ui.Tool.static.canEditModel to isCompatibleWith" 2013-10-22 20:53:46 +00:00
jenkins-bot 30c429bd9d Merge "Rename oo.js to oojs.js per library name" 2013-10-22 20:52:53 +00:00
jenkins-bot a011603ef2 Merge "Remove oo from ve.js closure" 2013-10-22 20:52:01 +00:00
jenkins-bot ad8a95ead5 Merge "Remove ve.Factory and ve.Registry and use oojs instead" 2013-10-22 20:51:09 +00:00
jenkins-bot 6c6fcf1dbd Merge "Cache multiple requests for $resizable's offset" 2013-10-22 20:30:18 +00:00
jenkins-bot a2587ce927 Merge "Recalculate $resizable offset when positioning resize label" 2013-10-22 20:28:27 +00:00
Ed Sanders c543fef85f Cache multiple requests for $resizable's offset
Both the resize handles and the size label position themselves
using $resizable's relative offset, so we can optimise by
caching that result.

Change-Id: Ic225b15cfcece8d5c2e782e1e667d854f805c6fb
2013-10-22 20:27:36 +00:00
Ed Sanders 1efa327121 Recalculate $resizable offset when positioning resize label
Because it can change. Currently the resize label is not
positioned correctly if you use three of four resize handles.

Change-Id: I1a28bc57fda1097c94047fd7690ad8d403cdd478
2013-10-22 20:23:42 +00:00
Trevor Parscal e41d4d470f Rename ui.Tool.static.canEditModel to isCompatibleWith
Change-Id: Ic7583f0966946c870f38a2e7ad06e558238c8794
2013-10-22 21:20:09 +02:00
Roan Kattouw 36fc3b5911 Rename oo.js to oojs.js per library name
Change-Id: I9f02a4438a18243022506b5a2fcc445af03aa945
2013-10-22 19:18:32 +00:00
Trevor Parscal fae7f130e4 Remove oo from ve.js closure
Instead use OO directly. Also remove ve.createObject, which is
unused now that ve.Registry and ve.Factory have been moved to oojs.

Change-Id: I3470b6660107ddd0bdf4a43c50d191a1bb1cc4d8
2013-10-22 19:18:27 +00:00
Trevor Parscal 26a1d8986b Remove ve.Factory and ve.Registry and use oojs instead
Change-Id: I2717300e6cc6102296a2b8d063d344fa5897c825
2013-10-22 19:15:18 +00:00
Trevor Parscal b635541de2 Remove ve.getHash and use getHash from oojs instead
Change-Id: Ib688a3ba0ab07e0d0dc328a3878440756d1103fe
2013-10-22 19:14:23 +00:00
Timo Tijhof 27078af21e Update oojs to v1.0.4
Changes since v1.0.2:
* Added oo.getHash
* Added oo.Registry
* Added oo.Factory
* Bug fixes for oo.EventEmitter

Code:
  http://trevorparscal.github.io/oojs/releases/oojs-1.0.4.js

Release notes:
  https://github.com/trevorparscal/oojs/blob/v1.0.4/History.md

Change-Id: Iafc49bd148a50b19e5e9f0a0add056ad858533de
2013-10-22 19:13:47 +00:00
Timo Tijhof 7db65f386c Rename @emits to @fires so we're forward compatible with JSDuck 5
Instead of using @emits in both, use our custom @fires in
production (JSDuck 4), and in the future it'll just naturally
use the native one.

This way we can also index oojs without issues, which seems to
have started using @fires already.

Change-Id: I7c3b56dd112626d57fa87ab995d205fb782a0149
2013-10-22 19:11:16 +00:00
jenkins-bot b017dcef30 Merge "Fix save dialog crash on load error" 2013-10-22 17:26:21 +00:00
Trevor Parscal 6018e77d70 Use OO.EventEmitter instead of ve.EventEmitter
Change-Id: Ie35e5f51a8d3c0d7f4fa46230b7b37112df610b9
2013-10-22 16:57:33 +00:00
Roan Kattouw 9d915aca2d Fix save dialog crash on load error
If there was an error loading the HTML from Parsoid, ViewPageTarget
would try to tear down the save dialog, which caused a crash because
the save dialog doesn't exist yet at that point.

Change-Id: Ia50756a19cb775be96b90e87b642eb2a38f254ce
2013-10-22 01:15:35 +02:00
Roan Kattouw a34e0fd6e2 Fix typo in documentation for ve.ce.View.prototype.getModel
Change-Id: I176898bc6714bd240ca0776406d11c60f2b2fd96
2013-10-21 17:35:08 +02:00
jenkins-bot 324b04137b Merge "Add requirements to BetaFeatures hook" 2013-10-21 15:18:24 +00:00
Zeljko Filipin 421924bd69 [browser test] cursor feature was not tagged @login
Change-Id: I587ad033c93078d8e626840de3b3eedc73b83516
2013-10-21 13:04:43 +00:00
Roan Kattouw 3f5486a43f Use a sane recursion guard in ve.ui.Context.prototype.hide()
The previous recursion "guard" relied on the recursion to occur for
the function to work correctly, which was very confusing. Additionally,
it didn't actually work: if the inspector's onClose handler changed
the selection (which is common), .hide() would recurse and the recursion
guard didn't catch this (inspector wasn't undefined yet). Fortunately
all that did was call .close() on the inspector again, which was caught
by .close()'s own recursion guard.

Instead, simply use this.hiding as a recursion guard, and refactor the
function so it doesn't do two different things depending on whether it's
expecting recursion or not.

Change-Id: I09eb9229530468ee319ca53b730784a3f632375d
2013-10-21 14:10:23 +02:00
Roan Kattouw 9eac0c8c91 Followup 1878c7c5: fix check for nonexistent property .draggingAndDropping
It's always been named .relocating

Change-Id: I2fcb28cdad037880759420986d8010ee5711d691
2013-10-21 13:40:28 +02:00
Roan Kattouw d3c706ff93 Add a node type for numbered external links
Since I0f0a826c in Parsoid, numbered external links are now empty
<a rel="mw:ExtLink"></a> tags. This means we have to put in a node type
for them to prevent them from being considered empty annotations and
getting converted to alienMeta.

MWNumberedExternalLinkNode is protected and focusable to avoid making
the link text (which isn't editable) clickable. It isn't inspectable
yet, we need to work on that.

Bug: 53505
Change-Id: I83f69695f3974089e51a84e799f31ab6ed879e05
2013-10-18 22:31:45 +02:00
Trevor Parscal efafed3231 Remove ve.{inheritClass,mixinClass} and use OO instead
Change-Id: I8df9226a358a76b661eab6e967ff0d63d361f691
2013-10-18 18:58:08 +02:00
jenkins-bot 40a8e9ef12 Merge "Document constructor params for dm.MWMathNode and dm.MWExtensionNode" 2013-10-18 12:52:19 +00:00
Timo Tijhof 832f8e1e11 Document constructor params for dm.MWMathNode and dm.MWExtensionNode
Follows-up Ib909c5fb02.

Change-Id: Ia3dfbabc8dde9f1e65e8fbb0e4d67f868031247a
2013-10-18 12:44:50 +00:00
Tongbo Sui 838eddaedb Expand highlighting support for syntaxhighlight module
Part of the ongoing effort to expand the amount of languages that can be
highlighted by syntaxhighlight module to match that of SyntaxHighlight
GeSHi extension.
The module now separates language names with their file names.

Change-Id: Iaf907ebeadc9432719a45f4e9e8d580bb32ca668
2013-10-17 22:42:52 -04:00
cmcmahon 828747f0f0 [Browser tests] identifier for anonymous warning changed for test2
Change-Id: Idfdd6db441205280373f8d24bf0a693b46eed1af
2013-10-18 01:31:47 +00:00
jenkins-bot b76f85c240 Merge "Split out popup functionality from ve.ui.PopupButtonWidget to ve.ui.PopuppableElement" 2013-10-17 22:15:41 +00:00
jenkins-bot 5dd44dab93 Merge "Rename performance.parsoid.domLoad to performance.domLoad" 2013-10-17 19:30:58 +00:00
jenkins-bot 8b3de827cb Merge "Use .done()/.fail() instead of 'success'/'error'" 2013-10-17 17:21:47 +00:00
Trevor Parscal 81bbba4932 Split out popup functionality from ve.ui.PopupButtonWidget to ve.ui.PopuppableElement
Change-Id: I522d852d81d9674723a3262da3f030417f4fc3be
2013-10-17 10:21:03 -07:00
jenkins-bot 107689087a Merge "Followup 8a4058584: use a single media source for rerendering images" 2013-10-17 17:20:13 +00:00
jenkins-bot d7b1cd9b4f Merge "Follow-up 8dfbc5baa: Really don't select unselectable items" 2013-10-17 17:16:03 +00:00
Zeljko Filipin a3ae0478ed [browser test] Updated Ruby gems
Change-Id: I78cbac61ca534957a39474a82306aaa954ab9de1
2013-10-17 16:19:03 +00:00
Roan Kattouw 4721367b61 Follow-up 8dfbc5baa: Really don't select unselectable items
SelectWidget would refuse to select unselectable items on mousedown or
mousemove, but would happily do so on mouseup. This meant unselectable
items weren't actually unselectable.

This broke the link inspector: if you clicked on the text
"External link", for instance (a ui.MenuSectionItemWidget), that "item"
would be selected, the link target input would be cleared, if you exited
the link inspector in any way the link would be unlinked, and any new
link inspector you opened would have a completely non-functional dropdown.

Change-Id: I7faa3d23b51b9cb93e68414584b9f433ea1f656a
2013-10-17 14:26:48 +00:00
Roan Kattouw 8fccb53afc Make category suggestions dropdown appear below the input box
Right now it's anchored to the bottom left of the category widget as a
whole, even if the text box is pushed farther to the right by existing
categories.

Change-Id: I7f2ca12b82d17c27fb3b87cb819a2a99a9fed108
2013-10-17 15:52:55 +02:00
Roan Kattouw 660e7c664a Don't corrupt categories/langlinks with new types
Parsoid changed these types from mw:WikiLink/{Category,Language}
to mw:PageProp/{Category,Language} in I0f0a826c. We had previously
added support for them in 4d91e4ed but code overwrote the new types
with the old ones on the way out, triggering the DOM corruption warning.

Change-Id: I768ec2ffd623e5a01f18959277786697603a97f0
2013-10-17 15:48:37 +02:00
Roan Kattouw f81de3e1e9 Initialize the save dialog correctly even if the sanity check failed
A very weird if statement caused pretty much all logic for displaying
the 'save' panel to be skipped if the sanity check had failed. The
result was that all buttons were displayed at the bottom of the
save dialog, even those that don't make sense in that context.

Change-Id: I628ebc05830fb25d67ff181852a1e56f0e25dee9
2013-10-17 15:29:03 +02:00
Roan Kattouw d3cd404877 Use .done()/.fail() instead of 'success'/'error'
'success' and 'error' are deprecated.

Also make all generateContents() promises abortable.

Change-Id: I8f95e9386f7749e635ce3715389896a0ccdb7523
2013-10-17 14:03:37 +02:00
Roan Kattouw 7035c8de01 Followup 8a4058584: use a single media source for rerendering images
The code asked all media sources for a rerender and used whichever one
came in first, which meant that it might potentially render the wrong
image, or reject the promise if one source served an error response
before a good response from another source arrived.

Also reject the promise if we can't find an image source in the response.

Change-Id: I6b516ad41b8a9e2abd440625bb76f3e1abb54520
2013-10-17 14:02:51 +02:00
Roan Kattouw fb4dcf3030 Followup c41f96c: doc parameter in ve.dm.InternalList constructor is not optional, remove check
Change-Id: I2d699483330d84647cb256272535dde6b8f2437c
2013-10-17 13:17:33 +02:00
jenkins-bot 7ffc900a7f Merge "Show a label with the current dimensions while resizing" 2013-10-17 10:57:34 +00:00
Trevor Parscal 580c5be915 Use CSS for handling empty labels
Objective:
* Use CSS to control the styling of empty labels

Changes:

ve.ui.LabeledElement.js
* Remove emptyHtml static property
* Add/remove ve-ui-labeledElement-empty class when setting label

ve.ui.ToolGroup.css
* Hide empty labels inside popup tool group handles

ve.ui.Widget.css
* Hide empty labels inside icon button widgets

ve.ui.Toolbar.js
* Only apply default catch-all tool group properties if they were previously undefined

ve.ui.IconButtonWidget.js
* Remove emptyHtml static property

Change-Id: Icd3f772942e74b547e926829c181e914182feb75
2013-10-16 17:41:53 -07:00
Moriel Schottlender 81ca18ecc8 Add a placeholder into an empty transclusion
If a template was setup without a default output and returns an empty result
to the transclusion, the user could not access the template dialog because
there was nowhere to hover over to get it visible. This commit checks the
output from the template after it was rendered with the given parameters
and if it returns empty, it adds a placeholder to the output so to give
the users way to access that template's transclusion dialog and edit
or remove it.

Bug: 55810
Change-Id: Ib842b401e74d79b6382cada6bb7c6048b713977c
2013-10-16 16:33:08 -07:00
jenkins-bot 47cccb4feb Merge "Cleanup on save dialog cruft & fix updateWatchLink" 2013-10-16 23:17:22 +00:00
Rob Moen 351bf3195f Cleanup on save dialog cruft & fix updateWatchLink
Change-Id: I730003726db0164e1bef8bddcd45e31df1373618
2013-10-16 15:32:39 -07:00
jenkins-bot 3ab1023397 Merge "Re-render images after resize" 2013-10-16 22:03:38 +00:00
Gabriel Wicke 266603c3a1 Rename performance.parsoid.domLoad to performance.domLoad
See
https://gerrit.wikimedia.org/r/#/c/89347/2/modules/ve-mw/init/ve.init.mw.Target.js
for the reasoning. Ori offered to adjust the consumers for this.

Change-Id: I835f0752ab3a4c8ad56eec437668423ba8b81c24
2013-10-16 15:02:26 -07:00
jenkins-bot c7861c5564 Merge "ve.track: add topic-based analytic event subscription" 2013-10-16 18:04:17 +00:00
Ori Livneh 495f247570 ve.track: add topic-based analytic event subscription
Replace ve.trackRegisterHandler with two methods: ve.trackSubscribe and
ve.trackSubscribeAll. The former takes an additional string argument 'topic',
which specifies a string prefix on which to match event names. The callback is
only called on matching events. The latter, ve.trackSubscribeAll, binds a
handler to all track events, regardless of topic.

This patch simplifies argument-handling by eliminating variadic ve.track calls
in favor of a single object that encodes all event data. The loose coupling of
track event emitters and subscribers makes relying on unnamed positional
argument conventions brittle; property access works better.

Change-Id: I3b58ce0f48ad3c9b56fcaa9c2226cc79bbcd4051
2013-10-16 10:03:27 -07:00
Ed Sanders f9a2c75b21 Show a label with the current dimensions while resizing
* Add config option to disable if required
* Centre label within resize handles
* Only show when resizing
* Sexy opacity transitions, rounded corners and multiplication
  character

Bug: 54297
Change-Id: Ic49430ce3302f780ae4b05d1fa29e14db1192c84
2013-10-16 16:42:12 +01:00
Ed Sanders 8a40585847 Re-render images after resize
Using the MW APIs get a resized version of the image and use
GeneratedContentNode to cache the url.

Bug: 55697
Change-Id: I418f7e1464663f447d46de7ffc29aa5f52d23b12
2013-10-16 16:38:31 +01:00
Ed Sanders 3077be6d9c Remove -ms-transition
Because it never existed.

Change-Id: Iaae7e8f11efb0a9853130bcdad8b643c06a1eed8
2013-10-16 15:32:04 +00:00
jenkins-bot 1f8d2fd9a7 Merge "Log DOM save timing; update existing ve.track calls" 2013-10-16 14:50:16 +00:00
jenkins-bot cb5c1fca93 Merge "Match text selection background colour to node highlight" 2013-10-16 13:00:53 +00:00
jenkins-bot b0931109d1 Merge "Language widget ULS call fix" 2013-10-16 12:59:01 +00:00
jenkins-bot 5d772e1dae Merge "Misc UI fixes" 2013-10-16 12:42:19 +00:00
jenkins-bot 9500801848 Merge "Rename storeDomElements to storeGeneratedContents" 2013-10-16 12:36:27 +00:00
jenkins-bot e4c73c64e8 Merge "Resizable node live preview" 2013-10-16 12:35:37 +00:00
Ed Sanders 79f4755850 Resizable node live preview
Resizes the $resizable element as you drag.
Can be disabled by setting the 'outline' config option.

FocusableNode
* Redraw on resize

ProtectedNode
* Destroy and prevent creation of phantoms on resize

MWInlineImageNode
* Correctly pass this.$image to ResizableNode

Bug: 54298
Change-Id: I7d6d345af8bb4712bbf154072b4704943a5a620d
2013-10-16 14:25:00 +02:00
Timo Tijhof 4ba01f08c3 Regenerate static loaders to include newly added ui.layouts
Follows-up 4efc6ca.

Change-Id: I51f3c861c88f93bf76f6c0f16ab0c3928b30b839
2013-10-16 12:17:50 +00:00
jenkins-bot 6c045e3b6d Merge "Use dimensions cached in resizeInfo for resize calculations" 2013-10-16 11:44:31 +00:00
jenkins-bot fc599dc495 Merge "Split out setResizableHandlesPosition in ResizableNode" 2013-10-16 11:39:04 +00:00
jenkins-bot b74cb1d634 Merge "Add more resize events" 2013-10-16 11:34:08 +00:00
Trevor Parscal bb03e8f17e Misc UI fixes
* Followup 75270e24: use this.surface directly in MWMetaDialog
* Document that MWDialogTools need a SurfaceToolbar
* Namespace CE events and CSS classes with ve-ce- rather than ve-ui-
* Namespace SurfaceToolbar CSS classes correctly and put them in their
  own CSS file

Change-Id: I9e70917d9c220b39e68833f67ed49fae7f7cbe6a
2013-10-16 12:40:40 +02:00
Ed Sanders a1a448b6de Rename storeDomElements to storeGeneratedContents
The default is to store the entire generated DOM node, but in
general classes can store anything that can be held by the store.

Change-Id: Ia761079fadfb5a6cfa2f00e5b5e23d6c6d3468ac
2013-10-16 11:17:01 +01:00
jenkins-bot fdf40f1655 Merge "Convert MWBlockImage dimensions to numbers and update tests" 2013-10-16 09:56:43 +00:00
Rob Moen 87629a99e1 Use existing ve config for pluginModules
Change-Id: I16a50f342e0794a98e648afc7251e8341270e9c9
2013-10-15 11:36:06 -07:00
Ed Sanders c7b3d34017 Convert MWBlockImage dimensions to numbers and update tests
MWInlineImage already does this but it wasn't copied over to
MWBlockImage.

Change-Id: I9f34182b30ae72beb7b5c3d5fde2f08185cba663
2013-10-15 17:59:39 +01:00
jenkins-bot dd567f8b27 Merge "'clearMessage' is a method of MWSaveDialog, not ViewPageTarget" 2013-10-15 10:55:41 +00:00
Ori Livneh b001b2b976 'clearMessage' is a method of MWSaveDialog, not ViewPageTarget
Fixes a small casualty left behind by 972c9a46b7.

Bug: 55726
Change-Id: I8cf8418dede002068fb1090d940b09c3bb91c196
2013-10-15 10:53:44 +00:00
jenkins-bot 577e3b3924 Merge "Enable VisualEditor using Beta Features" 2013-10-14 18:16:22 +00:00
Ed Sanders d539fa1ea0 Use dimensions cached in resizeInfo for resize calculations
The logic requires the size of $resizable when the resizing started.
This is already stored in this.resizeInfo, but for some reason the
code recalculates every time, which is both inefficient and wrong
(but not a problem at the moment as $resizable doesn't change size
until resizeEnd).

Change-Id: I37a3c98e24b9e7d5e1970212975cef5ce9ef8a99
2013-10-14 12:21:59 +01:00
Ed Sanders 600110b9c5 Split out setResizableHandlesPosition in ResizableNode
Change-Id: I254fc1851abdc7477e2067d1a6b5406f286e8668
2013-10-14 12:19:17 +01:00
Ed Sanders e73c97154d Add more resize events
'resize' is actually 'resizeEnd'. Added 'resizeStart' and 'resizing'
which is triggered on mouse move.

Change-Id: I13c6e426cbcc965b3db50082c5294ca76979fe57
2013-10-14 12:18:57 +01:00
Ori Livneh c27661507b Log DOM save timing; update existing ve.track calls
* For consistency with target.loading, target.saving should be either a boolean
  false or a jqXHR, with the latter type indicating a pending save attempt.
* Rename 'DOM Retrieved' topic to 'performance.parsoid.domLoad' (and thus
  inaugurate a convention of hierarchical, dot-separated topic names).
* Add a 'performance.parsoid.domSave', which is a near-mirror of domLoad, but
  measures the time it takes to save a DOM.
* Remove three old ve.track events, because they are not used and because their
  name and signature are not consistent with current usage.
  - page-save-attempt
  - page-save-success
  - page-edit-impression

Change-Id: I54602394eee5d6d9229c01d868cb366c9f56b2c3
2013-10-11 15:16:05 -07:00
Trevor Parscal 395d5f563c Remove ve.isMixedIn(), it's unused and it's evil
Change-Id: I5a5fc4c8eb56530dbac3bc32122faf20b8c92aa5
2013-10-11 21:51:01 +00:00
jenkins-bot d826bc702e Merge changes I160e55ad,Idd0592d6,I4d403f1b
* changes:
  Remove ve.ce.Node.prototype.onAttributeChange
  Remove ve.ce.ImageNode.prototype.onUpdate
  Remove .tagName from ce.MWInlineImageNode
2013-10-11 17:30:18 +00:00
jenkins-bot 391057bcec Merge "[browser test] icons appear hovering when cursor is on object" 2013-10-11 15:21:55 +00:00
cmcmahon 22f409070b [browser test] icons appear hovering when cursor is on object
Change-Id: I296445d0ec11f375ddb30f293ec3542ccc6332d6
2013-10-11 17:19:01 +02:00
Roan Kattouw 1d7d19ff33 Remove ve.ce.Node.prototype.onAttributeChange
There was code in there once, but it's now empty. Removed it in favor
of adding explicit listeners in the handful of subclasses that
override it.

Change-Id: I160e55ad3c7d85c9f830a4bd7d42ec5dc18ad04f
2013-10-11 15:02:19 +00:00
jenkins-bot 7e399a6202 Merge "Fix empty document length check in MWReferenceDialog" 2013-10-11 14:35:38 +00:00
jenkins-bot 66615efc1f Merge "ve.ce.Surface.getSelectionRect() can return null" 2013-10-11 14:24:10 +00:00
jenkins-bot 873b190804 Merge "Add .isFocusable() to ve.ce.Node as a shortcut" 2013-10-11 14:22:46 +00:00
jenkins-bot 19c1e00446 Merge "Stop using ve.isMixedIn() to check if a node is focusable" 2013-10-11 14:21:55 +00:00
Roan Kattouw 7959ce9ca4 Add .isFocusable() to ve.ce.Node as a shortcut
Change-Id: Ia2d3023100859e94f25bf50ed7298370b8d57c42
2013-10-11 16:09:00 +02:00
Trevor Parscal d602724e83 Stop using ve.isMixedIn() to check if a node is focusable
* Moved isNodeFocusable to ve.ce.NodeFactory
* Added isFocusable static property to ve.ce.Node
* Set isFocusable to true on ve.ce.FocusableNode

Change-Id: I3cf666280abdfce55bf9b0710827bb25c40bfd51
2013-10-11 16:00:34 +02:00
Ed Sanders e8082ba968 Add requirements to BetaFeatures hook
Change-Id: Ifc809f49e1cf03015dbb295b6b092b4181edc38b
2013-10-11 14:50:41 +01:00
Ed Sanders 9cba9910c6 Enable VisualEditor using Beta Features
Change-Id: I76ba788751dacc24cdbc667b4d24f1656f0ade44
2013-10-11 14:50:24 +01:00
Ed Sanders 64a9449513 Match text selection background colour to node highlight
This was probably correct by default on OSX but Ubuntu's
default theme uses an orange highlight, and Windows uses
dark blue.

Change-Id: I601c2d27f6d928b38799f3a6502de5be1dccc199
2013-10-11 14:35:52 +01:00
jenkins-bot 4c9d22c7ca Merge "Generalise the way extra modules are loaded" 2013-10-11 13:33:30 +00:00
Roan Kattouw 1999ece918 Remove ve.ce.ImageNode.prototype.onUpdate
Was empty.

Bonus: consistently use object style for .attr(), was already
used for .css()

Change-Id: Idd0592d6f30388c9952e110ff6fff008bb465877
2013-10-11 15:09:21 +02:00
Roan Kattouw 0c6dadb605 Remove .tagName from ce.MWInlineImageNode
Was unused, because this.$ is always overwritten in the constructor

Change-Id: I4d403f1b89351fb7d23131f944406d5a088fdeef
2013-10-11 15:09:21 +02:00
Roan Kattouw 0901c0328a Generalise the way extra modules are loaded
Change-Id: Icd453421b022a6450d1358edbe2132e49ca0b3bf
2013-10-11 14:07:00 +01:00
jenkins-bot 8c44a53d3a Merge "Make MWInlineImages resizable" 2013-10-11 09:26:55 +00:00
jenkins-bot 06ee5b8e96 Merge "Resizeable node updates context after mouse up" 2013-10-11 09:11:16 +00:00
cmcmahon 50ffa7c40c [browser tests] remove cruft and order page.rb file
Change-Id: I7d7cba0256e1d2631cdc4b73026c89cb5c85e0f5
2013-10-10 07:35:50 -06:00
Ed Sanders a2b667c8f7 Make MWInlineImages resizable
Because they are.

Change-Id: Ib2ff3ac6e9c5ed896486c93c48697d232b892493
2013-10-10 13:35:59 +01:00
Ed Sanders 98230889ab Resizeable node updates context after mouse up
Was previously calling show(), which showed the context regardless
of whether one was required or not. Changed this to update().

Change-Id: I2c6c37b6b988cca60f3f3f2429476ab4b429184b
2013-10-10 13:34:54 +01:00
jenkins-bot 2183c35cf7 Merge "Use ve.ui.PushButton instead of ve.ui.Button in ve.ui.SyntaxHighlightDialog" 2013-10-09 23:28:43 +00:00
Trevor Parscal f1ab1f8119 Use ve.ui.PushButton instead of ve.ui.Button in ve.ui.SyntaxHighlightDialog
Change-Id: I1b30e300492e682a477615a70fc7319c1b6d794e
2013-10-09 23:25:46 +00:00
jenkins-bot e3a0ee5b6a Merge "Snap resizables to a grid when the shift key is held" 2013-10-09 23:24:06 +00:00
Ed Sanders 6445a77cec Snap resizables to a grid when the shift key is held
Defaults to 10px.

Change-Id: Idf760c446778b437edbc3cb209b04cbee1d96fb7
2013-10-10 01:10:28 +02:00
Moriel Schottlender 017699556b Language widget ULS call fix
Because of the change to ButtonWidget, the button returned false after
onClick and as a result, ULS dialog didn't open.

This fix adds a fake 'href' value to the PushButtonWidget instance
in ve.ui.LanguageInputWidget so clicking the 'change language' button
continues to evoke ULS.

(Notice, this widget will soon be split into ve-MW with a smaller fallback
widget in core, but for now, this fixes the fact ULS doesn't appear when it
should)

Change-Id: I32eabdc5ee1b3681c20c756f45a3257c7a0b5681
2013-10-09 15:45:37 -07:00
Timo Tijhof d9153a2f1d ui.MWLinkTargetInputWidget: Fix crash on invalid input
Though the initialisation works since core has been fixed, there
are still plently of cases where we take real user input that can
genuinely be invalid.

Most notably, you couldn't make a link to [[.com]] because the
link input widget would crash on an exception from mw.Title.

Even after core was fixed (and ".com" is now valid), one still
couldn't make that link. This time because '.' is an invalid title,
and we create a Title object for that while typing ".com".

ve.ui.MWLinkTargetInputWidget#getLookupMenuItemsFromData:
* Guarded against mw.Title throwing by using newFromText
  and checking it first.

ve.ui.MWLinkInspector#static.legalTitle:
* Removed in favour of checking whether newFromText returns a
  truthy value.

Change-Id: I580bfccb83f86be3ad7e83d31f0834e1cde7df9c
2013-10-09 21:29:48 +00:00
Timo Tijhof eb515188ec Convert try/catch uses of mw.Title to newFromText
`new mw.Title` throws on invalid input. Converting uses to
mw.Title.newFromText instead and converting try/catch to if/else.

mw.Title in general (regardless of which constructor) has been
improved in core. It will no longer crash on pages where the page
title was a false hit for invalid (e.g. we couldn't load VE on
[[.com]] because the js parser thought it was invalid).

However, though the initialisation works since core has been
fixed, there are still plently of cases where we take real user
input that can genuinely be invalid.

In cases where the code did not catch exceptions and there was
no obvious way to handle it, I left it as is (let's revisit them
in a separate commit). It would be an exception either way, and
I'd rather see "mw.Title: Parser error" than
"TypeError: null does not have method getNamespaceId".

Change-Id: I5b1b23d56d39cdb7ecb0809e3d721992e0c30f54
2013-10-09 21:21:25 +00:00
jenkins-bot 3d55c6a081 Merge "Fixes for Trevor's crazy half-baked commit" 2013-10-09 20:16:51 +00:00
Roan Kattouw 75270e24d5 Fixes for Trevor's crazy half-baked commit
Fix things that 4aa86d0f8 broke:
* Update surface parameter to windowSet in all ve.ui.SurfaceDialog subclasses
* Do the same for ve.ui.SurfaceInspector subclasses
* Fix @extends documentation for SurfaceDialog
* Fix documentation for ve.ui.SurfaceInspector, copypasta from SurfaceDialog

Bonus:
* Add .getMetaList() getter to dm.Surface

Change-Id: I843e99e45e9b013cb9cb559f050384d39bbbddf2
2013-10-09 22:08:13 +02:00
cmcmahon bd2b828555 [browser test] update references for proper iframes, new workflow
Change-Id: Icafbbcac9a70401bd87ea87e6dbb94ea9a6c3726
2013-10-09 13:29:58 -06:00
cmcmahon 46aed9debd [browser test] up arrow no longer exists, use X instead
Change-Id: I79684633b69ad48b4ce291e2bd6e12d14564cca6
2013-10-09 12:51:03 -06:00
cmcmahon 6c299ff2b3 [Browser tests] Sort all the elements for Links tests to proper iframes
Change-Id: I873cfaccf7211f379eadc6574edbe8de8c2e15f1
2013-10-09 18:26:48 +00:00
cmcmahon d3a75d0501 [browser tests] editing controls to proper iframe
Change-Id: Ifc24e4fcc0fe4688ee8e8b277f54fe2582dcadaf
2013-10-09 17:24:19 +00:00
jenkins-bot 39d5a1a9c4 Merge "Prevent deletion of FocusableNodes from a collapsed selection" 2013-10-09 17:22:45 +00:00
cmcmahon f8d4f10de7 [Browser tests] transclusion elements to new 3rd iframe
Change-Id: Ia1a02ece54c44d3bfb0dd985fec97e9c8d5b9d59
2013-10-09 16:55:03 +00:00
Ed Sanders bffa0df53f Prevent deletion of FocusableNodes from a collapsed selection
Instead select the node and require the user to press delete
again if they really meant to delete the node.

Also test cases!

Bug: 55336
Change-Id: I66520e18740e78ce6313f9b31bb575d06b91bea8
2013-10-09 17:41:31 +02:00
cmcmahon 46d14ca163 iframe
Change-Id: Id771991a89e1cf836c7f19083df22edb38ffc6c8
2013-10-08 16:38:44 -06:00
Roan Kattouw 74f9fe13ea Fix empty document length check in MWReferenceDialog
We now initialize the surface in the dialog with a 4-element linmod
(paragraph, /paragraph, internalList, /internalList) rather than a
2-element linmod. This broke the code that disables the Insert button
in the reference dialog when the surface is empty.

Change-Id: Id733e654a628b1294e697ad4ef3f2f6fe1a9c869
2013-10-08 21:39:25 +02:00
cmcmahon ad1a579197 dismiss latest warning iframe
Change-Id: Ic1c5099f1531174140c2033212da35632a6188cc
2013-10-08 11:17:14 -06:00
cmcmahon 971b026786 id for ip warning changed
Change-Id: I6623751228be1aa550ec8c7e1e3071a38563ada0
2013-10-08 06:00:43 -07:00
Roan Kattouw 5d7673ebc2 ve.ce.Surface.getSelectionRect() can return null
Document this fact and update callers to check for a null return value

Change-Id: I095041157cc0e24e48662f40690b4928bb8d829a
2013-10-08 11:35:17 +02:00
jenkins-bot 846414f215 Merge "Destroy test surfaces" 2013-10-08 09:19:03 +00:00
Ed Sanders c752215896 Destroy test surfaces
Also make sure surface observers are detached so they don't try to
poll the CE when it has been destroyed. This was causing exceptions
to be thrown in test runners.

Change-Id: Ic8864a73f3ee04da6018f552b1aa68748d7ffba7
2013-10-08 11:16:10 +02:00
jenkins-bot 3a9ca9260f Merge "Fix initialisation errors in EventSequencer" 2013-10-07 23:48:19 +00:00
David Chan 9004a66274 Fix initialisation errors in EventSequencer
ve.EventSequencer.js:
* Initialise listener lists to []
* Call afterLoop listeners even if there are no after listeners

Change-Id: I63a0bafa74f2c3135bd3ca75adc91a57c19319ed
2013-10-08 00:24:45 +01:00
Ed Sanders 972c9a46b7 Make the save dialog an actual dialog
Major changes:
* Create a MW specific save dialog class
* Widgetize save dialog elements
* Simplification of viewPageTarget

Minor changes:
* Added getWindow method to windowSet and setTitle methods to window class
* Add transition css properties to dialog styles

Bug: 48566
Bug: 50722
Bug: 51918
Bug: 52175
Bug: 53313
Change-Id: I8c0db01fb8477a9b3d3dfe2a6073ac67869ce40e
2013-10-07 15:59:00 -07:00
jenkins-bot 5a1a960b19 Merge "EventSequencer: New hooks for useful moments" 2013-10-07 22:24:13 +00:00
David Chan e515017827 EventSequencer: New hooks for useful moments
ve.EventSequencer.js - Implement new types of event listener:
* onLoop( f ) to set a listener for the start of the event loop
* afterLoop( f ) to set a listener for the end of the event loop
* afterOne( f ) to set a one-time listener for after an event
* afterLoopOne( f ) to set a one-time listener for the end of the event loop

Change-Id: Ie388e0e9edcfccaa20e04c649a8b85d028ddde9c
2013-10-07 22:21:21 +00:00
jenkins-bot bcbefc63cc Merge "Track DOM retrieved events" 2013-10-07 22:15:07 +00:00
jenkins-bot 574264d2d5 Merge "The amazing mystery of scrollTop and onscroll" 2013-10-07 20:37:44 +00:00
Trevor Parscal 9303648406 The amazing mystery of scrollTop and onscroll
What I learned today:
* Window doesn't have a scrollTop property, body does (that's why animate
  doesn't work on window)
* jQuery.scrollTop() doesn't work on body (in firefox) but works on
  window everywhere
* jQuery.scrollTop() uses scroll offset, not the scrollTop property
* Body doesn't have an onscroll event, window does

What I really learned today:
* Browsers are very poorly designed

Objective:
* Make clippable elements properly resize in Firefox when scrolled

Diagnosis:
* Scroll events were not being emitted from the scrollable container
  after the merge of Ifec0dae598f7fd99270588bd8ca77777a07e9669 because
  such events are not emitted from body tags, only scrollable divs and
  windows
* jQuery.scrollTop was giving incorrect values when called on the body
  instead of the window, so also due to the aforementioned change, the
  clipping was being calculated incorrectly

Treatment:
* Add $clippableScroller property, which is either a scrollable div or
  the window (could this have side-effects if someone did something
  ridiculous like made the body absolutely positioned and overflow:auto?
  Yes, but I have no other option and that's a strange edge case don't
  you think?)
* Use $clippableScroller for listening to scroll events and getting the
  scrollTop value from jQuery

Bug: 55343
Change-Id: I819aba60b200059886b347115fda437b3dc9cb7a
2013-10-07 13:25:02 -07:00
jenkins-bot 1e0c24da49 Merge "Make dialogs, inspectors windows and window sets generic" 2013-10-07 18:55:07 +00:00
Trevor Parscal 4aa86d0f87 Make dialogs, inspectors windows and window sets generic
Objective:
* Remove surface dependencies in dialogs, inspectors, windows and window sets
* Introduce surface-specific versions of dialogs, inspectors and window sets

Change-Id: I2db59127d2085b02e173a3605e174317e419e213
2013-10-07 10:37:47 -07:00
jenkins-bot ac0f2ba092 Merge "Refactor out data processing from ve.dm.Document constructor" 2013-10-07 16:36:02 +00:00
Ed Sanders a8d84db0e8 Refactor out data processing from ve.dm.Document constructor
Also make collection of metadata and construction of nodes optional.

Change-Id: I02ba6d2199caccaf9fe9dcfba58eefa7b52c52b1
2013-10-07 17:26:21 +01:00
jenkins-bot 00b6de429b Merge "Use FlatLinearData for storing converter results" 2013-10-07 14:47:21 +00:00