Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F100099913
form.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Tue, Jan 28, 04:50
Size
3 KB
Mime Type
text/x-Algol68
Expires
Thu, Jan 30, 04:50 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
23877751
Attached To
rOACCT Open Access Compliance Check Tool (OACCT)
form.js
View Options
/**
* Functions for manipulating web forms.
*
* @author David I. Lehn <dlehn@digitalbazaar.com>
* @author Dave Longley
* @author Mike Johnson
*
* Copyright (c) 2011-2014 Digital Bazaar, Inc. All rights reserved.
*/
var
forge
=
require
(
'./forge'
);
/* Form API */
var
form
=
module
.
exports
=
forge
.
form
=
forge
.
form
||
{};
(
function
(
$
)
{
/**
* Regex for parsing a single name property (handles array brackets).
*/
var
_regex
=
/([^\[]*?)\[(.*?)\]/g
;
/**
* Parses a single name property into an array with the name and any
* array indices.
*
* @param name the name to parse.
*
* @return the array of the name and its array indices in order.
*/
var
_parseName
=
function
(
name
)
{
var
rval
=
[];
var
matches
;
while
(
!!
(
matches
=
_regex
.
exec
(
name
)))
{
if
(
matches
[
1
].
length
>
0
)
{
rval
.
push
(
matches
[
1
]);
}
if
(
matches
.
length
>=
2
)
{
rval
.
push
(
matches
[
2
]);
}
}
if
(
rval
.
length
===
0
)
{
rval
.
push
(
name
);
}
return
rval
;
};
/**
* Adds a field from the given form to the given object.
*
* @param obj the object.
* @param names the field as an array of object property names.
* @param value the value of the field.
* @param dict a dictionary of names to replace.
*/
var
_addField
=
function
(
obj
,
names
,
value
,
dict
)
{
// combine array names that fall within square brackets
var
tmp
=
[];
for
(
var
i
=
0
;
i
<
names
.
length
;
++
i
)
{
// check name for starting square bracket but no ending one
var
name
=
names
[
i
];
if
(
name
.
indexOf
(
'['
)
!==
-
1
&&
name
.
indexOf
(
']'
)
===
-
1
&&
i
<
names
.
length
-
1
)
{
do
{
name
+=
'.'
+
names
[
++
i
];
}
while
(
i
<
names
.
length
-
1
&&
names
[
i
].
indexOf
(
']'
)
===
-
1
);
}
tmp
.
push
(
name
);
}
names
=
tmp
;
// split out array indexes
var
tmp
=
[];
$
.
each
(
names
,
function
(
n
,
name
)
{
tmp
=
tmp
.
concat
(
_parseName
(
name
));
});
names
=
tmp
;
// iterate over object property names until value is set
$
.
each
(
names
,
function
(
n
,
name
)
{
// do dictionary name replacement
if
(
dict
&&
name
.
length
!==
0
&&
name
in
dict
)
{
name
=
dict
[
name
];
}
// blank name indicates appending to an array, set name to
// new last index of array
if
(
name
.
length
===
0
)
{
name
=
obj
.
length
;
}
// value already exists, append value
if
(
obj
[
name
])
{
// last name in the field
if
(
n
==
names
.
length
-
1
)
{
// more than one value, so convert into an array
if
(
!
$
.
isArray
(
obj
[
name
]))
{
obj
[
name
]
=
[
obj
[
name
]];
}
obj
[
name
].
push
(
value
);
}
else
{
// not last name, go deeper into object
obj
=
obj
[
name
];
}
}
else
if
(
n
==
names
.
length
-
1
)
{
// new value, last name in the field, set value
obj
[
name
]
=
value
;
}
else
{
// new value, not last name, go deeper
// get next name
var
next
=
names
[
n
+
1
];
// blank next value indicates array-appending, so create array
if
(
next
.
length
===
0
)
{
obj
[
name
]
=
[];
}
else
{
// if next name is a number create an array, otherwise a map
var
isNum
=
((
next
-
0
)
==
next
&&
next
.
length
>
0
);
obj
[
name
]
=
isNum
?
[]
:
{};
}
obj
=
obj
[
name
];
}
});
};
/**
* Serializes a form to a JSON object. Object properties will be separated
* using the given separator (defaults to '.') and by square brackets.
*
* @param input the jquery form to serialize.
* @param sep the object-property separator (defaults to '.').
* @param dict a dictionary of names to replace (name=replace).
*
* @return the JSON-serialized form.
*/
form
.
serialize
=
function
(
input
,
sep
,
dict
)
{
var
rval
=
{};
// add all fields in the form to the object
sep
=
sep
||
'.'
;
$
.
each
(
input
.
serializeArray
(),
function
()
{
_addField
(
rval
,
this
.
name
.
split
(
sep
),
this
.
value
||
''
,
dict
);
});
return
rval
;
};
})(
jQuery
);
Event Timeline
Log In to Comment