Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F946571
dom.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
18 KB
Subscribers
None
dom.js
View Options
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if
(
!
dojo
.
_hasResource
[
"dojox.dtl.dom"
]){
dojo
.
_hasResource
[
"dojox.dtl.dom"
]
=
true
;
dojo
.
provide
(
"dojox.dtl.dom"
);
dojo
.
require
(
"dojox.dtl._base"
);
dojo
.
require
(
"dojox.dtl.Context"
);
(
function
(){
var
dd
=
dojox
.
dtl
;
dd
.
BOOLS
=
{
checked
:
1
,
disabled
:
1
,
readonly
:
1
};
dd
.
TOKEN_CHANGE
=-
11
;
dd
.
TOKEN_ATTR
=-
12
;
dd
.
TOKEN_CUSTOM
=-
13
;
dd
.
TOKEN_NODE
=
1
;
var
_1
=
dd
.
text
;
var
_2
=
dd
.
dom
=
{
_attributes
:
{},
_uppers
:
{},
_re4
:
/^function anonymous\(\)\s*{\s*(.*)\s*}$/
,
_reTrim
:
/(?:^[\n\s]*(\{%)?\s*|\s*(%\})?[\n\s]*$)/g
,
_reSplit
:
/\s*%\}[\n\s]*\{%\s*/g
,
getTemplate
:
function
(
_3
){
if
(
typeof
this
.
_commentable
==
"undefined"
){
this
.
_commentable
=
false
;
var
_4
=
document
.
createElement
(
"div"
);
_4
.
innerHTML
=
"<!--Test comment handling, and long comments, using comments whenever possible.-->"
;
if
(
_4
.
childNodes
.
length
&&
_4
.
childNodes
[
0
].
nodeType
==
8
&&
_4
.
childNodes
[
0
].
data
==
"comment"
){
this
.
_commentable
=
true
;
}
}
if
(
!
this
.
_commentable
){
_3
=
_3
.
replace
(
/<!--({({|%).*?(%|})})-->/g
,
"$1"
);
}
if
(
dojo
.
isIE
){
_3
=
_3
.
replace
(
/\b(checked|disabled|readonly|style)="/g
,
"t$1=\""
);
}
_3
=
_3
.
replace
(
/\bstyle="/g
,
"tstyle=\""
);
var
_5
;
var
_6
=
dojo
.
isWebKit
;
var
_7
=
[[
true
,
"select"
,
"option"
],[
_6
,
"tr"
,
"td|th"
],[
_6
,
"thead"
,
"tr"
,
"th"
],[
_6
,
"tbody"
,
"tr"
,
"td"
],[
_6
,
"table"
,
"tbody|thead|tr"
,
"tr"
,
"td"
]];
var
_8
=
[];
for
(
var
i
=
0
,
_9
;
_9
=
_7
[
i
];
i
++
){
if
(
!
_9
[
0
]){
continue
;
}
if
(
_3
.
indexOf
(
"<"
+
_9
[
1
])
!=-
1
){
var
_a
=
new
RegExp
(
"<"
+
_9
[
1
]
+
"(?:.|\n)*?>((?:.|\n)+?)</"
+
_9
[
1
]
+
">"
,
"ig"
);
tagLoop
:
while
(
_5
=
_a
.
exec
(
_3
)){
var
_b
=
_9
[
2
].
split
(
"|"
);
var
_c
=
[];
for
(
var
j
=
0
,
_d
;
_d
=
_b
[
j
];
j
++
){
_c
.
push
(
"<"
+
_d
+
"(?:.|\n)*?>(?:.|\n)*?</"
+
_d
+
">"
);
}
var
_e
=
[];
var
_f
=
dojox
.
string
.
tokenize
(
_5
[
1
],
new
RegExp
(
"("
+
_c
.
join
(
"|"
)
+
")"
,
"ig"
),
function
(
_10
){
var
tag
=
/<(\w+)/
.
exec
(
_10
)[
1
];
if
(
!
_e
[
tag
]){
_e
[
tag
]
=
true
;
_e
.
push
(
tag
);
}
return
{
data
:
_10
};
});
if
(
_e
.
length
){
var
tag
=
(
_e
.
length
==
1
)
?
_e
[
0
]
:
_9
[
2
].
split
(
"|"
)[
0
];
var
_11
=
[];
for
(
var
j
=
0
,
jl
=
_f
.
length
;
j
<
jl
;
j
++
){
var
_12
=
_f
[
j
];
if
(
dojo
.
isObject
(
_12
)){
_11
.
push
(
_12
.
data
);
}
else
{
var
_13
=
_12
.
replace
(
this
.
_reTrim
,
""
);
if
(
!
_13
){
continue
;
}
_12
=
_13
.
split
(
this
.
_reSplit
);
for
(
var
k
=
0
,
kl
=
_12
.
length
;
k
<
kl
;
k
++
){
var
_14
=
""
;
for
(
var
p
=
2
,
pl
=
_9
.
length
;
p
<
pl
;
p
++
){
if
(
p
==
2
){
_14
+=
"<"
+
tag
+
" dtlinstruction=\"{% "
+
_12
[
k
].
replace
(
"\""
,
"\\\""
)
+
" %}\">"
;
}
else
{
if
(
tag
==
_9
[
p
]){
continue
;
}
else
{
_14
+=
"<"
+
_9
[
p
]
+
">"
;
}
}
}
_14
+=
"DTL"
;
for
(
var
p
=
_9
.
length
-
1
;
p
>
1
;
p
--
){
if
(
p
==
2
){
_14
+=
"</"
+
tag
+
">"
;
}
else
{
if
(
tag
==
_9
[
p
]){
continue
;
}
else
{
_14
+=
"</"
+
_9
[
p
]
+
">"
;
}
}
}
_11
.
push
(
"ÿ"
+
_8
.
length
);
_8
.
push
(
_14
);
}
}
}
_3
=
_3
.
replace
(
_5
[
1
],
_11
.
join
(
""
));
}
}
}
}
for
(
var
i
=
_8
.
length
;
i
--
;){
_3
=
_3
.
replace
(
"ÿ"
+
i
,
_8
[
i
]);
}
var
re
=
/\b([a-zA-Z_:][a-zA-Z0-9_\-\.:]*)=['"]/g
;
while
(
_5
=
re
.
exec
(
_3
)){
var
_15
=
_5
[
1
].
toLowerCase
();
if
(
_15
==
"dtlinstruction"
){
continue
;
}
if
(
_15
!=
_5
[
1
]){
this
.
_uppers
[
_15
]
=
_5
[
1
];
}
this
.
_attributes
[
_15
]
=
true
;
}
var
_4
=
document
.
createElement
(
"div"
);
_4
.
innerHTML
=
_3
;
var
_16
=
{
nodes
:
[]};
while
(
_4
.
childNodes
.
length
){
_16
.
nodes
.
push
(
_4
.
removeChild
(
_4
.
childNodes
[
0
]));
}
return
_16
;
},
tokenize
:
function
(
_17
){
var
_18
=
[];
for
(
var
i
=
0
,
_19
;
_19
=
_17
[
i
++
];){
if
(
_19
.
nodeType
!=
1
){
this
.
__tokenize
(
_19
,
_18
);
}
else
{
this
.
_tokenize
(
_19
,
_18
);
}
}
return
_18
;
},
_swallowed
:
[],
_tokenize
:
function
(
_1a
,
_1b
){
var
_1c
=
false
;
var
_1d
=
this
.
_swallowed
;
var
i
,
j
,
tag
,
_1e
;
if
(
!
_1b
.
first
){
_1c
=
_1b
.
first
=
true
;
var
_1f
=
dd
.
register
.
getAttributeTags
();
for
(
i
=
0
;
tag
=
_1f
[
i
];
i
++
){
try
{
(
tag
[
2
])({
swallowNode
:
function
(){
throw
1
;
}},
new
dd
.
Token
(
dd
.
TOKEN_ATTR
,
""
));
}
catch
(
e
){
_1d
.
push
(
tag
);
}
}
}
for
(
i
=
0
;
tag
=
_1d
[
i
];
i
++
){
var
_20
=
_1a
.
getAttribute
(
tag
[
0
]);
if
(
_20
){
var
_1d
=
false
;
var
_21
=
(
tag
[
2
])({
swallowNode
:
function
(){
_1d
=
true
;
return
_1a
;
}},
new
dd
.
Token
(
dd
.
TOKEN_ATTR
,
tag
[
0
]
+
" "
+
_20
));
if
(
_1d
){
if
(
_1a
.
parentNode
&&
_1a
.
parentNode
.
removeChild
){
_1a
.
parentNode
.
removeChild
(
_1a
);
}
_1b
.
push
([
dd
.
TOKEN_CUSTOM
,
_21
]);
return
;
}
}
}
var
_22
=
[];
if
(
dojo
.
isIE
&&
_1a
.
tagName
==
"SCRIPT"
){
_22
.
push
({
nodeType
:
3
,
data
:
_1a
.
text
});
_1a
.
text
=
""
;
}
else
{
for
(
i
=
0
;
_1e
=
_1a
.
childNodes
[
i
];
i
++
){
_22
.
push
(
_1e
);
}
}
_1b
.
push
([
dd
.
TOKEN_NODE
,
_1a
]);
var
_23
=
false
;
if
(
_22
.
length
){
_1b
.
push
([
dd
.
TOKEN_CHANGE
,
_1a
]);
_23
=
true
;
}
for
(
var
key
in
this
.
_attributes
){
var
_24
=
false
;
var
_25
=
""
;
if
(
key
==
"class"
){
_25
=
_1a
.
className
||
_25
;
}
else
{
if
(
key
==
"for"
){
_25
=
_1a
.
htmlFor
||
_25
;
}
else
{
if
(
key
==
"value"
&&
_1a
.
value
==
_1a
.
innerHTML
){
continue
;
}
else
{
if
(
_1a
.
getAttribute
){
_25
=
_1a
.
getAttribute
(
key
,
2
)
||
_25
;
if
(
key
==
"href"
||
key
==
"src"
){
if
(
dojo
.
isIE
){
var
_26
=
location
.
href
.
lastIndexOf
(
location
.
hash
);
var
_27
=
location
.
href
.
substring
(
0
,
_26
).
split
(
"/"
);
_27
.
pop
();
_27
=
_27
.
join
(
"/"
)
+
"/"
;
if
(
_25
.
indexOf
(
_27
)
==
0
){
_25
=
_25
.
replace
(
_27
,
""
);
}
_25
=
decodeURIComponent
(
_25
);
}
}
else
{
if
(
key
==
"tstyle"
){
_24
=
key
;
key
=
"style"
;
}
else
{
if
(
dd
.
BOOLS
[
key
.
slice
(
1
)]
&&
dojo
.
trim
(
_25
)){
key
=
key
.
slice
(
1
);
}
else
{
if
(
this
.
_uppers
[
key
]
&&
dojo
.
trim
(
_25
)){
_24
=
this
.
_uppers
[
key
];
}
}
}
}
}
}
}
}
if
(
_24
){
_1a
.
setAttribute
(
_24
,
""
);
_1a
.
removeAttribute
(
_24
);
}
if
(
typeof
_25
==
"function"
){
_25
=
_25
.
toString
().
replace
(
this
.
_re4
,
"$1"
);
}
if
(
!
_23
){
_1b
.
push
([
dd
.
TOKEN_CHANGE
,
_1a
]);
_23
=
true
;
}
_1b
.
push
([
dd
.
TOKEN_ATTR
,
_1a
,
key
,
_25
]);
}
for
(
i
=
0
,
_1e
;
_1e
=
_22
[
i
];
i
++
){
if
(
_1e
.
nodeType
==
1
){
var
_28
=
_1e
.
getAttribute
(
"dtlinstruction"
);
if
(
_28
){
_1e
.
parentNode
.
removeChild
(
_1e
);
_1e
=
{
nodeType
:
8
,
data
:
_28
};
}
}
this
.
__tokenize
(
_1e
,
_1b
);
}
if
(
!
_1c
&&
_1a
.
parentNode
&&
_1a
.
parentNode
.
tagName
){
if
(
_23
){
_1b
.
push
([
dd
.
TOKEN_CHANGE
,
_1a
,
true
]);
}
_1b
.
push
([
dd
.
TOKEN_CHANGE
,
_1a
.
parentNode
]);
_1a
.
parentNode
.
removeChild
(
_1a
);
}
else
{
_1b
.
push
([
dd
.
TOKEN_CHANGE
,
_1a
,
true
,
true
]);
}
},
__tokenize
:
function
(
_29
,
_2a
){
var
_2b
=
_29
.
data
;
switch
(
_29
.
nodeType
){
case
1
:
this
.
_tokenize
(
_29
,
_2a
);
return
;
case
3
:
if
(
_2b
.
match
(
/[^\s\n]/
)
&&
(
_2b
.
indexOf
(
"{{"
)
!=-
1
||
_2b
.
indexOf
(
"{%"
)
!=-
1
)){
var
_2c
=
_1
.
tokenize
(
_2b
);
for
(
var
j
=
0
,
_2d
;
_2d
=
_2c
[
j
];
j
++
){
if
(
typeof
_2d
==
"string"
){
_2a
.
push
([
dd
.
TOKEN_TEXT
,
_2d
]);
}
else
{
_2a
.
push
(
_2d
);
}
}
}
else
{
_2a
.
push
([
_29
.
nodeType
,
_29
]);
}
if
(
_29
.
parentNode
){
_29
.
parentNode
.
removeChild
(
_29
);
}
return
;
case
8
:
if
(
_2b
.
indexOf
(
"{%"
)
==
0
){
var
_2d
=
dojo
.
trim
(
_2b
.
slice
(
2
,
-
2
));
if
(
_2d
.
substr
(
0
,
5
)
==
"load "
){
var
_2e
=
dojo
.
trim
(
_2d
).
split
(
/\s+/g
);
for
(
var
i
=
1
,
_2f
;
_2f
=
_2e
[
i
];
i
++
){
dojo
[
"require"
](
_2f
);
}
}
_2a
.
push
([
dd
.
TOKEN_BLOCK
,
_2d
]);
}
if
(
_2b
.
indexOf
(
"{{"
)
==
0
){
_2a
.
push
([
dd
.
TOKEN_VAR
,
dojo
.
trim
(
_2b
.
slice
(
2
,
-
2
))]);
}
if
(
_29
.
parentNode
){
_29
.
parentNode
.
removeChild
(
_29
);
}
return
;
}
}};
dd
.
DomTemplate
=
dojo
.
extend
(
function
(
obj
){
if
(
!
obj
.
nodes
){
var
_30
=
dojo
.
byId
(
obj
);
if
(
_30
&&
_30
.
nodeType
==
1
){
dojo
.
forEach
([
"class"
,
"src"
,
"href"
,
"name"
,
"value"
],
function
(
_31
){
_2
.
_attributes
[
_31
]
=
true
;
});
obj
=
{
nodes
:
[
_30
]};
}
else
{
if
(
typeof
obj
==
"object"
){
obj
=
_1
.
getTemplateString
(
obj
);
}
obj
=
_2
.
getTemplate
(
obj
);
}
}
var
_32
=
_2
.
tokenize
(
obj
.
nodes
);
if
(
dd
.
tests
){
this
.
tokens
=
_32
.
slice
(
0
);
}
var
_33
=
new
dd
.
_DomParser
(
_32
);
this
.
nodelist
=
_33
.
parse
();
},{
_count
:
0
,
_re
:
/\bdojo:([a-zA-Z0-9_]+)\b/g
,
setClass
:
function
(
str
){
this
.
getRootNode
().
className
=
str
;
},
getRootNode
:
function
(){
return
this
.
buffer
.
rootNode
;
},
getBuffer
:
function
(){
return
new
dd
.
DomBuffer
();
},
render
:
function
(
_34
,
_35
){
_35
=
this
.
buffer
=
_35
||
this
.
getBuffer
();
this
.
rootNode
=
null
;
var
_36
=
this
.
nodelist
.
render
(
_34
||
new
dd
.
Context
({}),
_35
);
for
(
var
i
=
0
,
_37
;
_37
=
_35
.
_cache
[
i
];
i
++
){
if
(
_37
.
_cache
){
_37
.
_cache
.
length
=
0
;
}
}
return
_36
;
},
unrender
:
function
(
_38
,
_39
){
return
this
.
nodelist
.
unrender
(
_38
,
_39
);
}});
dd
.
DomBuffer
=
dojo
.
extend
(
function
(
_3a
){
this
.
_parent
=
_3a
;
this
.
_cache
=
[];
},{
concat
:
function
(
_3b
){
var
_3c
=
this
.
_parent
;
if
(
_3c
&&
_3b
.
parentNode
&&
_3b
.
parentNode
===
_3c
&&!
_3c
.
_dirty
){
return
this
;
}
if
(
_3b
.
nodeType
==
1
&&!
this
.
rootNode
){
this
.
rootNode
=
_3b
||
true
;
return
this
;
}
if
(
!
_3c
){
if
(
_3b
.
nodeType
==
3
&&
dojo
.
trim
(
_3b
.
data
)){
throw
new
Error
(
"Text should not exist outside of the root node in template"
);
}
return
this
;
}
if
(
this
.
_closed
){
if
(
_3b
.
nodeType
==
3
&&!
dojo
.
trim
(
_3b
.
data
)){
return
this
;
}
else
{
throw
new
Error
(
"Content should not exist outside of the root node in template"
);
}
}
if
(
_3c
.
_dirty
){
if
(
_3b
.
_drawn
&&
_3b
.
parentNode
==
_3c
){
var
_3d
=
_3c
.
_cache
;
if
(
_3d
){
for
(
var
i
=
0
,
_3e
;
_3e
=
_3d
[
i
];
i
++
){
this
.
onAddNode
&&
this
.
onAddNode
(
_3e
);
_3c
.
insertBefore
(
_3e
,
_3b
);
this
.
onAddNodeComplete
&&
this
.
onAddNodeComplete
(
_3e
);
}
_3d
.
length
=
0
;
}
}
_3c
.
_dirty
=
false
;
}
if
(
!
_3c
.
_cache
){
_3c
.
_cache
=
[];
this
.
_cache
.
push
(
_3c
);
}
_3c
.
_dirty
=
true
;
_3c
.
_cache
.
push
(
_3b
);
return
this
;
},
remove
:
function
(
obj
){
if
(
typeof
obj
==
"string"
){
if
(
this
.
_parent
){
this
.
_parent
.
removeAttribute
(
obj
);
}
}
else
{
if
(
obj
.
nodeType
==
1
&&!
this
.
getRootNode
()
&&!
this
.
_removed
){
this
.
_removed
=
true
;
return
this
;
}
if
(
obj
.
parentNode
){
this
.
onRemoveNode
&&
this
.
onRemoveNode
(
obj
);
if
(
obj
.
parentNode
){
obj
.
parentNode
.
removeChild
(
obj
);
}
}
}
return
this
;
},
setAttribute
:
function
(
key
,
_3f
){
var
old
=
dojo
.
attr
(
this
.
_parent
,
key
);
if
(
this
.
onChangeAttribute
&&
old
!=
_3f
){
this
.
onChangeAttribute
(
this
.
_parent
,
key
,
old
,
_3f
);
}
if
(
key
==
"style"
){
this
.
_parent
.
style
.
cssText
=
_3f
;
}
else
{
dojo
.
attr
(
this
.
_parent
,
key
,
_3f
);
}
return
this
;
},
addEvent
:
function
(
_40
,
_41
,
fn
,
_42
){
if
(
!
_40
.
getThis
()){
throw
new
Error
(
"You must use Context.setObject(instance)"
);
}
this
.
onAddEvent
&&
this
.
onAddEvent
(
this
.
getParent
(),
_41
,
fn
);
var
_43
=
fn
;
if
(
dojo
.
isArray
(
_42
)){
_43
=
function
(
e
){
this
[
fn
].
apply
(
this
,[
e
].
concat
(
_42
));
};
}
return
dojo
.
connect
(
this
.
getParent
(),
_41
,
_40
.
getThis
(),
_43
);
},
setParent
:
function
(
_44
,
up
,
_45
){
if
(
!
this
.
_parent
){
this
.
_parent
=
this
.
_first
=
_44
;
}
if
(
up
&&
_45
&&
_44
===
this
.
_first
){
this
.
_closed
=
true
;
}
if
(
up
){
var
_46
=
this
.
_parent
;
var
_47
=
""
;
var
ie
=
dojo
.
isIE
&&
_46
.
tagName
==
"SCRIPT"
;
if
(
ie
){
_46
.
text
=
""
;
}
if
(
_46
.
_dirty
){
var
_48
=
_46
.
_cache
;
var
_49
=
(
_46
.
tagName
==
"SELECT"
&&!
_46
.
options
.
length
);
for
(
var
i
=
0
,
_4a
;
_4a
=
_48
[
i
];
i
++
){
if
(
_4a
!==
_46
){
this
.
onAddNode
&&
this
.
onAddNode
(
_4a
);
if
(
ie
){
_47
+=
_4a
.
data
;
}
else
{
_46
.
appendChild
(
_4a
);
if
(
_49
&&
_4a
.
defaultSelected
&&
i
){
_49
=
i
;
}
}
this
.
onAddNodeComplete
&&
this
.
onAddNodeComplete
(
_4a
);
}
}
if
(
_49
){
_46
.
options
.
selectedIndex
=
(
typeof
_49
==
"number"
)
?
_49
:
0
;
}
_48
.
length
=
0
;
_46
.
_dirty
=
false
;
}
if
(
ie
){
_46
.
text
=
_47
;
}
}
this
.
_parent
=
_44
;
this
.
onSetParent
&&
this
.
onSetParent
(
_44
,
up
,
_45
);
return
this
;
},
getParent
:
function
(){
return
this
.
_parent
;
},
getRootNode
:
function
(){
return
this
.
rootNode
;
}});
dd
.
_DomNode
=
dojo
.
extend
(
function
(
_4b
){
this
.
contents
=
_4b
;
},{
render
:
function
(
_4c
,
_4d
){
this
.
_rendered
=
true
;
return
_4d
.
concat
(
this
.
contents
);
},
unrender
:
function
(
_4e
,
_4f
){
if
(
!
this
.
_rendered
){
return
_4f
;
}
this
.
_rendered
=
false
;
return
_4f
.
remove
(
this
.
contents
);
},
clone
:
function
(
_50
){
return
new
this
.
constructor
(
this
.
contents
);
}});
dd
.
_DomNodeList
=
dojo
.
extend
(
function
(
_51
){
this
.
contents
=
_51
||
[];
},{
push
:
function
(
_52
){
this
.
contents
.
push
(
_52
);
},
unshift
:
function
(
_53
){
this
.
contents
.
unshift
(
_53
);
},
render
:
function
(
_54
,
_55
,
_56
){
_55
=
_55
||
dd
.
DomTemplate
.
prototype
.
getBuffer
();
if
(
_56
){
var
_57
=
_55
.
getParent
();
}
for
(
var
i
=
0
;
i
<
this
.
contents
.
length
;
i
++
){
_55
=
this
.
contents
[
i
].
render
(
_54
,
_55
);
if
(
!
_55
){
throw
new
Error
(
"Template node render functions must return their buffer"
);
}
}
if
(
_57
){
_55
.
setParent
(
_57
);
}
return
_55
;
},
dummyRender
:
function
(
_58
,
_59
,
_5a
){
var
div
=
document
.
createElement
(
"div"
);
var
_5b
=
_59
.
getParent
();
var
old
=
_5b
.
_clone
;
_5b
.
_clone
=
div
;
var
_5c
=
this
.
clone
(
_59
,
div
);
if
(
old
){
_5b
.
_clone
=
old
;
}
else
{
_5b
.
_clone
=
null
;
}
_59
=
dd
.
DomTemplate
.
prototype
.
getBuffer
();
_5c
.
unshift
(
new
dd
.
ChangeNode
(
div
));
_5c
.
unshift
(
new
dd
.
_DomNode
(
div
));
_5c
.
push
(
new
dd
.
ChangeNode
(
div
,
true
));
_5c
.
render
(
_58
,
_59
);
if
(
_5a
){
return
_59
.
getRootNode
();
}
var
_5d
=
div
.
innerHTML
;
return
(
dojo
.
isIE
)
?
_5d
.
replace
(
/\s*_(dirty|clone)="[^"]*"/g
,
""
)
:
_5d
;
},
unrender
:
function
(
_5e
,
_5f
,
_60
){
if
(
_60
){
var
_61
=
_5f
.
getParent
();
}
for
(
var
i
=
0
;
i
<
this
.
contents
.
length
;
i
++
){
_5f
=
this
.
contents
[
i
].
unrender
(
_5e
,
_5f
);
if
(
!
_5f
){
throw
new
Error
(
"Template node render functions must return their buffer"
);
}
}
if
(
_61
){
_5f
.
setParent
(
_61
);
}
return
_5f
;
},
clone
:
function
(
_62
){
var
_63
=
_62
.
getParent
();
var
_64
=
this
.
contents
;
var
_65
=
new
dd
.
_DomNodeList
();
var
_66
=
[];
for
(
var
i
=
0
;
i
<
_64
.
length
;
i
++
){
var
_67
=
_64
[
i
].
clone
(
_62
);
if
(
_67
instanceof
dd
.
ChangeNode
||
_67
instanceof
dd
.
_DomNode
){
var
_68
=
_67
.
contents
.
_clone
;
if
(
_68
){
_67
.
contents
=
_68
;
}
else
{
if
(
_63
!=
_67
.
contents
&&
_67
instanceof
dd
.
_DomNode
){
var
_69
=
_67
.
contents
;
_67
.
contents
=
_67
.
contents
.
cloneNode
(
false
);
_62
.
onClone
&&
_62
.
onClone
(
_69
,
_67
.
contents
);
_66
.
push
(
_69
);
_69
.
_clone
=
_67
.
contents
;
}
}
}
_65
.
push
(
_67
);
}
for
(
var
i
=
0
,
_67
;
_67
=
_66
[
i
];
i
++
){
_67
.
_clone
=
null
;
}
return
_65
;
},
rtrim
:
function
(){
while
(
1
){
var
i
=
this
.
contents
.
length
-
1
;
if
(
this
.
contents
[
i
]
instanceof
dd
.
_DomTextNode
&&
this
.
contents
[
i
].
isEmpty
()){
this
.
contents
.
pop
();
}
else
{
break
;
}
}
return
this
;
}});
dd
.
_DomVarNode
=
dojo
.
extend
(
function
(
str
){
this
.
contents
=
new
dd
.
_Filter
(
str
);
},{
render
:
function
(
_6a
,
_6b
){
var
str
=
this
.
contents
.
resolve
(
_6a
);
var
_6c
=
"text"
;
if
(
str
){
if
(
str
.
render
&&
str
.
getRootNode
){
_6c
=
"injection"
;
}
else
{
if
(
str
.
safe
){
if
(
str
.
nodeType
){
_6c
=
"node"
;
}
else
{
if
(
str
.
toString
){
str
=
str
.
toString
();
_6c
=
"html"
;
}
}
}
}
}
if
(
this
.
_type
&&
_6c
!=
this
.
_type
){
this
.
unrender
(
_6a
,
_6b
);
}
this
.
_type
=
_6c
;
switch
(
_6c
){
case
"text"
:
this
.
_rendered
=
true
;
this
.
_txt
=
this
.
_txt
||
document
.
createTextNode
(
str
);
if
(
this
.
_txt
.
data
!=
str
){
var
old
=
this
.
_txt
.
data
;
this
.
_txt
.
data
=
str
;
_6b
.
onChangeData
&&
_6b
.
onChangeData
(
this
.
_txt
,
old
,
this
.
_txt
.
data
);
}
return
_6b
.
concat
(
this
.
_txt
);
case
"injection"
:
var
_6d
=
str
.
getRootNode
();
if
(
this
.
_rendered
&&
_6d
!=
this
.
_root
){
_6b
=
this
.
unrender
(
_6a
,
_6b
);
}
this
.
_root
=
_6d
;
var
_6e
=
this
.
_injected
=
new
dd
.
_DomNodeList
();
_6e
.
push
(
new
dd
.
ChangeNode
(
_6b
.
getParent
()));
_6e
.
push
(
new
dd
.
_DomNode
(
_6d
));
_6e
.
push
(
str
);
_6e
.
push
(
new
dd
.
ChangeNode
(
_6b
.
getParent
()));
this
.
_rendered
=
true
;
return
_6e
.
render
(
_6a
,
_6b
);
case
"node"
:
this
.
_rendered
=
true
;
if
(
this
.
_node
&&
this
.
_node
!=
str
&&
this
.
_node
.
parentNode
&&
this
.
_node
.
parentNode
===
_6b
.
getParent
()){
this
.
_node
.
parentNode
.
removeChild
(
this
.
_node
);
}
this
.
_node
=
str
;
return
_6b
.
concat
(
str
);
case
"html"
:
if
(
this
.
_rendered
&&
this
.
_src
!=
str
){
_6b
=
this
.
unrender
(
_6a
,
_6b
);
}
this
.
_src
=
str
;
if
(
!
this
.
_rendered
){
this
.
_rendered
=
true
;
this
.
_html
=
this
.
_html
||
[];
var
div
=
(
this
.
_div
=
this
.
_div
||
document
.
createElement
(
"div"
));
div
.
innerHTML
=
str
;
var
_6f
=
div
.
childNodes
;
while
(
_6f
.
length
){
var
_70
=
div
.
removeChild
(
_6f
[
0
]);
this
.
_html
.
push
(
_70
);
_6b
=
_6b
.
concat
(
_70
);
}
}
return
_6b
;
default
:
return
_6b
;
}
},
unrender
:
function
(
_71
,
_72
){
if
(
!
this
.
_rendered
){
return
_72
;
}
this
.
_rendered
=
false
;
switch
(
this
.
_type
){
case
"text"
:
return
_72
.
remove
(
this
.
_txt
);
case
"injection"
:
return
this
.
_injection
.
unrender
(
_71
,
_72
);
case
"node"
:
if
(
this
.
_node
.
parentNode
===
_72
.
getParent
()){
return
_72
.
remove
(
this
.
_node
);
}
return
_72
;
case
"html"
:
for
(
var
i
=
0
,
l
=
this
.
_html
.
length
;
i
<
l
;
i
++
){
_72
=
_72
.
remove
(
this
.
_html
[
i
]);
}
return
_72
;
default
:
return
_72
;
}
},
clone
:
function
(){
return
new
this
.
constructor
(
this
.
contents
.
getExpression
());
}});
dd
.
ChangeNode
=
dojo
.
extend
(
function
(
_73
,
up
,
_74
){
this
.
contents
=
_73
;
this
.
up
=
up
;
this
.
root
=
_74
;
},{
render
:
function
(
_75
,
_76
){
return
_76
.
setParent
(
this
.
contents
,
this
.
up
,
this
.
root
);
},
unrender
:
function
(
_77
,
_78
){
if
(
!
_78
.
getParent
()){
return
_78
;
}
return
_78
.
setParent
(
this
.
contents
);
},
clone
:
function
(){
return
new
this
.
constructor
(
this
.
contents
,
this
.
up
,
this
.
root
);
}});
dd
.
AttributeNode
=
dojo
.
extend
(
function
(
key
,
_79
){
this
.
key
=
key
;
this
.
value
=
_79
;
this
.
contents
=
_79
;
if
(
this
.
_pool
[
_79
]){
this
.
nodelist
=
this
.
_pool
[
_79
];
}
else
{
if
(
!
(
this
.
nodelist
=
dd
.
quickFilter
(
_79
))){
this
.
nodelist
=
(
new
dd
.
Template
(
_79
,
true
)).
nodelist
;
}
this
.
_pool
[
_79
]
=
this
.
nodelist
;
}
this
.
contents
=
""
;
},{
_pool
:
{},
render
:
function
(
_7a
,
_7b
){
var
key
=
this
.
key
;
var
_7c
=
this
.
nodelist
.
dummyRender
(
_7a
);
if
(
dd
.
BOOLS
[
key
]){
_7c
=!
(
_7c
==
"false"
||
_7c
==
"undefined"
||!
_7c
);
}
if
(
_7c
!==
this
.
contents
){
this
.
contents
=
_7c
;
return
_7b
.
setAttribute
(
key
,
_7c
);
}
return
_7b
;
},
unrender
:
function
(
_7d
,
_7e
){
this
.
contents
=
""
;
return
_7e
.
remove
(
this
.
key
);
},
clone
:
function
(
_7f
){
return
new
this
.
constructor
(
this
.
key
,
this
.
value
);
}});
dd
.
_DomTextNode
=
dojo
.
extend
(
function
(
str
){
this
.
contents
=
document
.
createTextNode
(
str
);
this
.
upcoming
=
str
;
},{
set
:
function
(
_80
){
this
.
upcoming
=
_80
;
return
this
;
},
render
:
function
(
_81
,
_82
){
if
(
this
.
contents
.
data
!=
this
.
upcoming
){
var
old
=
this
.
contents
.
data
;
this
.
contents
.
data
=
this
.
upcoming
;
_82
.
onChangeData
&&
_82
.
onChangeData
(
this
.
contents
,
old
,
this
.
upcoming
);
}
return
_82
.
concat
(
this
.
contents
);
},
unrender
:
function
(
_83
,
_84
){
return
_84
.
remove
(
this
.
contents
);
},
isEmpty
:
function
(){
return
!
dojo
.
trim
(
this
.
contents
.
data
);
},
clone
:
function
(){
return
new
this
.
constructor
(
this
.
contents
.
data
);
}});
dd
.
_DomParser
=
dojo
.
extend
(
function
(
_85
){
this
.
contents
=
_85
;
},{
i
:
0
,
parse
:
function
(
_86
){
var
_87
=
{};
var
_88
=
this
.
contents
;
if
(
!
_86
){
_86
=
[];
}
for
(
var
i
=
0
;
i
<
_86
.
length
;
i
++
){
_87
[
_86
[
i
]]
=
true
;
}
var
_89
=
new
dd
.
_DomNodeList
();
while
(
this
.
i
<
_88
.
length
){
var
_8a
=
_88
[
this
.
i
++
];
var
_8b
=
_8a
[
0
];
var
_8c
=
_8a
[
1
];
if
(
_8b
==
dd
.
TOKEN_CUSTOM
){
_89
.
push
(
_8c
);
}
else
{
if
(
_8b
==
dd
.
TOKEN_CHANGE
){
var
_8d
=
new
dd
.
ChangeNode
(
_8c
,
_8a
[
2
],
_8a
[
3
]);
_8c
[
_8d
.
attr
]
=
_8d
;
_89
.
push
(
_8d
);
}
else
{
if
(
_8b
==
dd
.
TOKEN_ATTR
){
var
fn
=
_1
.
getTag
(
"attr:"
+
_8a
[
2
],
true
);
if
(
fn
&&
_8a
[
3
]){
if
(
_8a
[
3
].
indexOf
(
"{%"
)
!=-
1
||
_8a
[
3
].
indexOf
(
"{{"
)
!=-
1
){
_8c
.
setAttribute
(
_8a
[
2
],
""
);
}
_89
.
push
(
fn
(
null
,
new
dd
.
Token
(
_8b
,
_8a
[
2
]
+
" "
+
_8a
[
3
])));
}
else
{
if
(
dojo
.
isString
(
_8a
[
3
])){
if
(
_8a
[
2
]
==
"style"
||
_8a
[
3
].
indexOf
(
"{%"
)
!=-
1
||
_8a
[
3
].
indexOf
(
"{{"
)
!=-
1
){
_89
.
push
(
new
dd
.
AttributeNode
(
_8a
[
2
],
_8a
[
3
]));
}
else
{
if
(
dojo
.
trim
(
_8a
[
3
])){
try
{
dojo
.
attr
(
_8c
,
_8a
[
2
],
_8a
[
3
]);
}
catch
(
e
){
}
}
}
}
}
}
else
{
if
(
_8b
==
dd
.
TOKEN_NODE
){
var
fn
=
_1
.
getTag
(
"node:"
+
_8c
.
tagName
.
toLowerCase
(),
true
);
if
(
fn
){
_89
.
push
(
fn
(
null
,
new
dd
.
Token
(
_8b
,
_8c
),
_8c
.
tagName
.
toLowerCase
()));
}
_89
.
push
(
new
dd
.
_DomNode
(
_8c
));
}
else
{
if
(
_8b
==
dd
.
TOKEN_VAR
){
_89
.
push
(
new
dd
.
_DomVarNode
(
_8c
));
}
else
{
if
(
_8b
==
dd
.
TOKEN_TEXT
){
_89
.
push
(
new
dd
.
_DomTextNode
(
_8c
.
data
||
_8c
));
}
else
{
if
(
_8b
==
dd
.
TOKEN_BLOCK
){
if
(
_87
[
_8c
]){
--
this
.
i
;
return
_89
;
}
var
cmd
=
_8c
.
split
(
/\s+/g
);
if
(
cmd
.
length
){
cmd
=
cmd
[
0
];
var
fn
=
_1
.
getTag
(
cmd
);
if
(
typeof
fn
!=
"function"
){
throw
new
Error
(
"Function not found for "
+
cmd
);
}
var
tpl
=
fn
(
this
,
new
dd
.
Token
(
_8b
,
_8c
));
if
(
tpl
){
_89
.
push
(
tpl
);
}
}
}
}
}
}
}
}
}
}
if
(
_86
.
length
){
throw
new
Error
(
"Could not find closing tag(s): "
+
_86
.
toString
());
}
return
_89
;
},
next_token
:
function
(){
var
_8e
=
this
.
contents
[
this
.
i
++
];
return
new
dd
.
Token
(
_8e
[
0
],
_8e
[
1
]);
},
delete_first_token
:
function
(){
this
.
i
++
;
},
skip_past
:
function
(
_8f
){
return
dd
.
_Parser
.
prototype
.
skip_past
.
call
(
this
,
_8f
);
},
create_variable_node
:
function
(
_90
){
return
new
dd
.
_DomVarNode
(
_90
);
},
create_text_node
:
function
(
_91
){
return
new
dd
.
_DomTextNode
(
_91
||
""
);
},
getTemplate
:
function
(
loc
){
return
new
dd
.
DomTemplate
(
_2
.
getTemplate
(
loc
));
}});
})();
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 26, 07:43 (1 d, 5 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26345
Default Alt Text
dom.js (18 KB)
Attached To
rZED Zed
Event Timeline
Log In to Comment