MDL-54778 form: Fix lots of issues with form dependencies
commita9972ecea006385f9c3bfb7de9c328e69d25a934
authorAndrew Nicols <andrew@nicols.co.uk>
Tue, 7 Jun 2016 05:26:42 +0000 (7 13:26 +0800)
committerAndrew Nicols <andrew@nicols.co.uk>
Tue, 21 Jun 2016 00:07:56 +0000 (21 08:07 +0800)
treede20b7405c41d4ecd5487bd463e43a7d379ea2d7
parent364329af40cb892a8ee8daa0406798afbc5a4ca8
MDL-54778 form: Fix lots of issues with form dependencies

The original issue here was that each loop of the named values did not
check for prototypal properties. As a result, if there were input fields
with names such as 'sort', 'valueOf', 'constructor', etc. these would
return their prototypal functions instead of a falsy value, and be treated
as though they are array - hence the 'Cannot push to Function' type error.

Following on from this I discovered that the data stores were being created
as arrays, but used as objects. This can also cause issues with some form
input names -- e.g. if they are numeric.

These two issues were resolved together by correctly storing them in
objects, and checking that those objects had real properties
(hasOwnProperty). This itself has to use the prototypal function to cater
for the potential of a field name called 'hasOwnProperty'.

I also found that the instance value stores were being initialised in the
prototype (and therefore shared), which meant that there were numerous
issues if two forms were present on the same page, or one form replaced an
existing one (e.g. forms initialised in JS).

In addition, it also became apparant that several values were being used
outside of scope, or in the wrong scope. This caused further issues when
creating multiple forms on a page.
lib/form/form.js