Commit graph

20634 commits

Author SHA1 Message Date
Trevor Parscal 8169dbc085 Added notification on save
Change-Id: I362275eb38655401bc48b3209189776e9e37619a
2012-08-17 12:41:33 -07:00
Catrope 41b5244a46 Merge "There's no such thing as ghosts, just sneaky array references" 2012-08-17 18:27:29 +00:00
Trevor Parscal 1e2502a726 Added some unit tests for ve.dm.SurfaceFragment
Also:
* Made a fragment with a null range become a null fragment
* Fixed incorrect order of arguments for binding a handler to transact event
* Added getters for surface, document and range
* Fixed several instances of passing a document instead of a surface into the constructor of a new surface fragment
* Fixed closest mode in expandRange - needed to check if parent existed before checking for it's type
* Fixed uses of ve.Transaction (doesn't exist) that were supposed to be uses of ve.dm.Transaction (does exist)

Change-Id: Ide13d9d2d1637399188c98c2e8b6e0826caeecc4
2012-08-17 10:48:40 -07:00
Trevor Parscal 735c4cd20e Merge "Strip generated <p> tags in dataToDom" 2012-08-17 17:42:38 +00:00
Trevor Parscal c3c909d2ab Merge "Remove attributes from DocumentNode constructor" 2012-08-17 17:40:57 +00:00
Trevor Parscal 467c80fb44 Merge "Rename fringeWhitespace to internal" 2012-08-17 17:40:36 +00:00
Trevor Parscal 264b97df7f There's no such thing as ghosts, just sneaky array references
When a document is created, it should take it upon itself to make sure it has a new reference to the data using slice, not place this on the caller. Callers that do not use slice will often find strange and mysterious things going on and not know why. The real reason is that multiple documents sharing a reference to the same data array leads to seriously messed up behavior.

Change-Id: Ic4e25fcd9bf3f41a805003520a8f38e2768f5dbf
2012-08-17 10:37:28 -07:00
Translation updater bot 36635df683 Localisation updates from http://translatewiki.net.
Change-Id: I558a95e9778009f8b6f380e8f6e4e0e68b243ba5
2012-08-17 13:12:41 +00:00
Catrope 9ef82d3222 Remove attributes from DocumentNode constructor
'document' is an unwrapped node type, so a document cannot have
attributes in the linear model

Change-Id: Ifb0b5a189a65b71925b0fb379bd544d19102ed01
2012-08-16 16:21:13 -07:00
Catrope 7319038ed6 Strip generated <p> tags in dataToDom
domToData wraps bare content in paragraph elements, which were then
converted to <p> tags by domToData. With this fix, HTML with "missing"
<p> tags actually round-trips through the editor correctly now, rather
than having <p> tags added wherever VE believes they should exist.

* Mark generated paragraph elements with .internal.generated = 'wrapper'
** This signifies the wrapper was generated but its contents were not,
   so the right thing to do when converting back to HTML is to remove
   the wrapper and keep the contents. We might want to use other values
   of generated in the future.
* Unwrap nodes with generated=wrapper when converting to HTML

Tests:
* Add 'generated': 'wrapper' as appropriate. Only affects 1 test
* Remove 'normalizedHtml' for this test because it is no longer needed
** Need to keep 'normalizedHtml' for now because we normalize hrefs
* Eventually the main example should test bare content, but that
  requires touching a lot of stuff. The main example could use some
  beefing up anyway.

Change-Id: I277ad5fe3f64e07c1bbf49007d6bbaecc90b7466
2012-08-16 16:09:28 -07:00
Catrope ce60b54d33 Rename fringeWhitespace to internal
This allows us to put other internal data in there in the future. Also
passing it through the Node constructor properly now.

* ve.dm.Node
** Rename fringeWhitespace property to internal
** Add internal parameter to constructor
** Remove setFringeWhitespace()
* Increase the number of parameters passed through by ve.Factory to 3
* Pass through .internal from linmod to nodeFactory in ve.dm.Document
* ve.dm.Converter
** Rename .fringeWhitespace to .internal.whitespace and make it an array
** Store a temporary reference to .internal in domElement.veInternal
* Add internal to all node constructors except TextNode

Tests:
* Update for fringeWhitespace->internal rename
* Add third parameter to ve.Factory tests
* Add .internal to getNodeTreeSummary

Change-Id: If20c0bb78fee3efa55f72e51e7fc261283358de7
2012-08-16 15:14:01 -07:00
Translation updater bot 5d923e519d Merge "Localisation updates from http://translatewiki.net." 2012-08-16 20:35:10 +00:00
Translation updater bot 8936f3d849 Localisation updates from http://translatewiki.net.
Change-Id: Iea020c974b1ef1296a376443644a2739882c4c0a
2012-08-16 20:32:37 +00:00
Trevor Parscal 297b4568d8 Changed initial surface range to (0, 0)
This makes a lot more sense when you start making a surface fragment from a new surface, because a null range would seem to have unpredictable behavior.

Change-Id: I85210878deca3067960fa4a14e2a760e55f67e4e
2012-08-16 13:16:48 -07:00
Trevor Parscal d147504f49 Added support for apex skin
* Made vector specific styles only active in the vector skin
* Added apex specific styles
* Removed override of text size for document node
* Added stylesheet for stand-alone to specify text size for document node

Change-Id: I8a57918912499f9453a5692ff45a04a16ed34cde
2012-08-15 16:35:52 -07:00
Translation updater bot 38f5f7a0a8 Localisation updates from http://translatewiki.net.
Change-Id: I62837bf0a53c30136991c0dc08ff2d4ca656180f
2012-08-15 19:59:51 +00:00
Trevor Parscal c8b4a28936 Added key-sorting to make hashes referentially transparent
To do this, we are using the replacer callback of JSON.stringify, which is supported by all of our target browsers including IE8. We are also leaning on Object.keys and Array.reduce, the latter of which required adding a new fallback implementation for some browsers which do not support it yet.

Change-Id: Ifa285ca3da4d94d962464f09414591532bbea79c
2012-08-15 11:14:44 -07:00
Trevor Parscal e113ae3d9f Merge "Update LinkAnnotation for Parsoid href changes" 2012-08-14 20:08:58 +00:00
Translation updater bot 1cee43ca38 Localisation updates from http://translatewiki.net.
Change-Id: I1f9f93597c3f4dbbe1b2ec6fc2a264e005459158
2012-08-14 19:45:39 +00:00
Catrope 48777cceca Merge "Added setSelection to ve.dm.Surface" 2012-08-14 18:56:19 +00:00
Catrope 6f8307d5d2 Update LinkAnnotation for Parsoid href changes
Because the Parsoid prefix format changed from /mw:Foo to /mw/Foo , the
href format for internal links has changed from "/Foo" to "Foo". So the
href is now simply the title, except that it may be preceded by one or
more "../" if the title of the page we're on contains a '/'.

So instead of stripping the leading slash from internal link hrefs and
putting it back on the way out, only strip any leading "../"s and dump
the titles directly into the hrefs on the way out.

Also update the link test case for this, and add a test case for the ../
stripping.

Change-Id: I3e0bdde20f22cda34eb45fc351de5e780419b6a2
2012-08-14 11:03:37 -07:00
Trevor Parscal f0f409825e Merge "Update API for Parsoid prefix changes" 2012-08-14 15:51:37 +00:00
Trevor Parscal cc6f0d17ea Merge "Recognize ExtLink/URL and ExtLink/Numbered in LinkInspector" 2012-08-14 15:50:44 +00:00
Trevor Parscal 0db79e5154 Merge "SimpleWikiLink is no longer used by Parsoid, remove it from VE" 2012-08-14 15:49:27 +00:00
Trevor Parscal d7f99141a2 Added setSelection to ve.dm.Surface
This is a convenience method which also can improve code readability.

Change-Id: If71b83b2861d195b58915f81dc614e2718e75d95
2012-08-14 08:41:32 -07:00
Catrope 70fa9c8aeb Recognize annotation types with multiple slashes correctly
Annotation types with more than one slash such as 'link/ExtLink/URL'
weren't being processed correctly because .split( '/', 2 ) throws away
everything after the second slash. Instead, don't pass a limit to
.split(); the code for reconstructing a slash-separated string from
multiple components was already in place.

Also add test cases for URL links and numbered links.

(Do you like the lines-of-code to lines-of-test ratio in this commit,
Trevor? ;) )

Change-Id: I7add87396447a01b1c23a4f9bfd63d2e8fd861ce
2012-08-13 18:22:31 -07:00
Catrope 5b804df40f SimpleWikiLink is no longer used by Parsoid, remove it from VE
Change-Id: I7f19304dc8bd6819992756a704e215d31f8b2e7e
2012-08-13 18:05:10 -07:00
Catrope 826518c1e1 Recognize ExtLink/URL and ExtLink/Numbered in LinkInspector
Change-Id: Ib13fd3396132695a844db6151296c52fa5f96032
2012-08-13 18:03:34 -07:00
Catrope 20a5aa48b7 Update API for Parsoid prefix changes
The format for wiki prefixes in Parsoid has changed from /mw:Pagename to
/mw/Pagename . Update the API module and the config+docs for this
change. The default value of the prefix ('localhost') should still work
for stock localhost setups.

Change-Id: Ic6f3793d175106cc1fae17980d20add63c3f783f
2012-08-13 17:56:30 -07:00
Translation updater bot 5a40d90573 Localisation updates from http://translatewiki.net.
Change-Id: Ie0d1225ad71927cdbed90e6ba8f87c0298f5cad8
2012-08-13 19:56:45 +00:00
Trevor Parscal f99088b79f Merge "Strip and preserve inner leading&trailing whitespace in the linear model" 2012-08-13 16:56:50 +00:00
Trevor Parscal ea0467fb0e Merge "Refactor ve.js utilities and improve documentation" 2012-08-13 03:24:43 +00:00
Translation updater bot 43178eb1fc Localisation updates from http://translatewiki.net.
Change-Id: I325f7ef2b5292cf37193a3e5a2fb6eb842730786
2012-08-12 20:33:37 +00:00
Timo Tijhof f06952f2f3 Refactor ve.js utilities and improve documentation
Refactor:
* ve.indexOf
  Renamed from ve.inArray.
  This was named after the jQuery method which in turn has a longer
  story about why it is so unfortunately named. It doesn't return
  a boolean, but an index. Hence the native method being called
  indexOf as well.

* ve.bind
  Renamed from ve.proxy.
  I considered making it use Function.prototype.bind if available.
  As it performs better than $.proxy (which doesn't use to the native
  bind if available). However since bind needs to be bound itself in
  order to use it detached, it turns out with the "call()" and
  "bind()"  it is slower than the $.proxy shim:
  http://jsperf.com/function-bind-shim-perf
  It would've been like this:
  ve.bind = Function.prototype.bind ?
      Function.prototype.call.bind( Function.prototype.bind ) :
      $.proxy;
  But instead sticking to ve.bind = $.proxy;

* ve.extendObject
  Documented the parts of jQuery.extend that we use. This makes it
  easier to replace in the future.

Documentation:
* Added function documentation blocks.
* Added annotations to  functions that we will be able to remove
  in the future in favour of the native methods.
  With "@until + when/how".
  In this case "ES5". Meaning, whenever we drop support for browsers
  that don't support ES5. Although in the developer community ES5 is
  still fairly fresh, browsers have been aware for it long enough
  that thee moment we're able to drop it may be sooner than we think.
  The only blocker so far is IE8. The rest of the browsers have had
  it long enough that the traffic we need to support of non-IE
  supports it.

Misc.:
* Removed 'node: true' from .jshintrc since Parsoid is no longer in
  this repo and thus no more nodejs files.
 - This unraveled two lint errors: Usage of 'module' and 'console'.
   (both were considered 'safe globals' due to nodejs, but not in
   browser code).

* Replaced usage (before renaming):
 - $.inArray -> ve.inArray
 - Function.prototype.bind -> ve.proxy
 - Array.isArray -> ve.isArray
 - [].indexOf -> ve.inArray
 - $.fn.bind/live/delegate/unbind/die/delegate -> $.fn.on/off

Change-Id: Idcf1fa6a685b6ed3d7c99ffe17bd57a7bc586a2c
2012-08-12 20:32:45 +02:00
Translation updater bot 26431d7f1e Localisation updates from http://translatewiki.net.
Change-Id: I14cd9b220dea6589c073f1e0924c4e298116049d
2012-08-11 19:27:09 +00:00
Catrope 63e6702c52 Strip and preserve inner leading&trailing whitespace in the linear model
This makes things like
== Foo ==
* Bar
render without the leading and trailing spaces, while still
round-tripping those spaces.

* Added a .fringeWhitespace property to the linear model and ve.dm.Node
** Object containing innerPre, innerPost, outerPre, outerPost
** Only inner* are used right now, outer* are planned for future use
** Like .attributes , it's suppressed if it's an empty object
* In getDataFromDom():
** Store the stripped whitespace in .fringeWhitespace
** Move emptiness check up: empty elements with .fringeWhitespace have
   to be preserved
** Move paragraph wrapping up: .fringeWhitespace has to be applied to
   the generated paragraph, not its parent
** Add wrapperElement to keep track of the element .fringeWhitespace has
   to be added to; this is either dataElement or the generated paragraph
   or nothing, but we can't modify dataElement because it's used later
* In getDomFromData():
** When processing an opening, store the fringeWhitespace data in the
   generated DOM node
** When processing a closing, add the stored whitespace back in
* In the ve.dm.Document constructor, pass through .fringeWhitespace from
  the linear model data to the generated nodes

Tests:
* Change one existing test case to account for this change
* Add three new test cases for this behavior
* Add normalizedHtml field so I can test behavior with bare content

Change-Id: I0411544652dd72b923c831c495d69ee4322a2c14
2012-08-10 17:23:53 -07:00
Translation updater bot a71ebb1177 Merge "Localisation updates from http://translatewiki.net." 2012-08-11 00:11:32 +00:00
Translation updater bot 24e9c3b5f1 Localisation updates from http://translatewiki.net.
Change-Id: I242c44591ce116c751f1594859cdd1aeaf46128d
2012-08-11 00:07:30 +00:00
Catrope d93b82347b Clean up a few commas and some indentation
The commas were resulting from converting this:
var foo = 3,
	bar = 5;

to this:

foo = 3,
bar = 5;

Change-Id: I0223b34a30d947c6a51f0601727b0c3850239e66
2012-08-10 16:49:14 -07:00
Catrope 5d974ed1e1 Fix replaceNonBreakingSpace() to not modify the linear model
It was replacing spaces with &nbsp;s in its copy of a slice of linmod
data, but the copy was a shallow copy, so when modifying annotated
spaces it would modify the actual data. Fixed by detecting this case and
cloning the character's array before modifying it.

Change-Id: Ic96ed34605a302af18f274a0faa6d0f650f5b771
2012-08-10 15:47:13 -07:00
Trevor Parscal a0fa371481 Added isNoOp to ve.dm.Transaction
Also added some checks in content branch conversion to make sure that converting from and to the same thing results in a no-op

Change-Id: Ie47520d666e45a77d12c7ebb9457aef7ab6b8097
2012-08-10 15:35:48 -07:00
Trevor Parscal fed1a98dd7 Fixed reversal of next and previous polling results
Change-Id: I504040044721603ae48a844e3f78d735f2c3159d
2012-08-10 14:06:18 -07:00
Trevor Parscal 6e8cedca56 Merge "Fix up c0ea02c0bfc1a3d481a4e2e82c2dc779cab2ed66" 2012-08-10 20:50:51 +00:00
Catrope 8887a0731b Fix up c0ea02c0bf
Was stripping whitespace before and after annotations as well

Change-Id: Ie49319c15e68de6855fef2beadec0a11beea3ec6
2012-08-10 13:44:35 -07:00
Translation updater bot 9710664f0c Localisation updates from http://translatewiki.net.
Change-Id: Ie0f00988ceddd22a995782669570c554bb00b276
2012-08-10 19:27:26 +00:00
Trevor Parscal 17bf3ef756 Merge "Fix up 62d08588050f576b0728800067b97d41b7eec9fa" 2012-08-10 17:31:56 +00:00
Catrope 3f2a256f86 Fix up 62d0858805
* Per Krinkle's comment, be tolerant of missing .htmlAttributes
* Drop .htmlAttributes if no attributes, fixes some tests

Change-Id: I65589a8b489e19a7c8a41ba2f4a57e68fc52684c
2012-08-10 10:23:14 -07:00
Catrope 946a7e64d6 Rename external link RDFa types to keep up with Parsoid
Change-Id: Ie232a575339a16431cbd1ee216998d1f6bf52d78
2012-08-10 10:15:05 -07:00
Catrope baf965fc50 Merge "Make use of new jshint options" 2012-08-10 01:43:25 +00:00
Timo Tijhof 23c5b0d02c Make use of new jshint options
* Restricting "camelcase":
  No changes, we were passing all of these already

* Explicitly unrestricting "forin" and "plusplus"
  These are off by default in node-jshint, but some distro of jshint
  and editors that use their own wrapper around jshint instead of
  node-jshint (Eclipse?) may have different defaults. Therefor
  setting them to false explicitly. This also serves as a reminder
  for the future so we'll always know we don't pass that, in case
  we would want to change that.

* Fix order ("quotemark" before "regexp")

* Restricting "unused"
  We're not passing all of this, which is why I've set it to false
  for now. But I did put it in .jshintrc as placeholder.
  I've fixed most of them, there's some left where there is no clean
  solution.

* While at it fix a few issues:
 - Unused variables ($target, $window)
 - Bad practices (using jQuery context for find instead of creation)
 - Redundant /*global */ comments
 - Parameters that are not used and don't have documentation either
 - Lines longer than 100 chars @ 4 spaces/tab

* Note:
 - ve.ce.Surface.prototype.onChange takes two arguments but never
   uses the former. And even the second one can be null/undefined.
   Aside from that, the .change() function emits
   another event for the transaction already. Looks like this
   should be refactored a bit, two more separated events probably
   or one that is actually used better.
 - Also cleaned up a lot of comments, some of which were missing,
   others were incorrect
 - Reworked the contentChange event so we are no longer using the
   word new as an object key; expanded a complex object into multiple
   arguments being passed through the event to make it easier to work
   with and document

Change-Id: I8490815a508c6c379d5f9a743bb4aefd14576aa6
2012-08-10 02:50:30 +02:00