Commit graph

2764 commits

Author SHA1 Message Date
Roan Kattouw a34e0fd6e2 Fix typo in documentation for ve.ce.View.prototype.getModel
Change-Id: I176898bc6714bd240ca0776406d11c60f2b2fd96
2013-10-21 17:35:08 +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 b76f85c240 Merge "Split out popup functionality from ve.ui.PopupButtonWidget to ve.ui.PopuppableElement" 2013-10-17 22:15:41 +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
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
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
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 3077be6d9c Remove -ms-transition
Because it never existed.

Change-Id: Iaae7e8f11efb0a9853130bcdad8b643c06a1eed8
2013-10-16 15:32:04 +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
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
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
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
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 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 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
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
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 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
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
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
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 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