Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
brainfood
/
rivets
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Graphs
Network
Create a new issue
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
39df93d7
authored
2014-01-25 18:26:58 -0800
by
Michael Richards
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Build 0.6.6.
1 parent
7cf13491
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
352 additions
and
322 deletions
component.json
dist/rivets.js
dist/rivets.min.js
package.json
component.json
View file @
39df93d
...
...
@@ -2,7 +2,7 @@
"name"
:
"rivets"
,
"repo"
:
"mikeric/rivets"
,
"description"
:
"Declarative data binding + templating solution."
,
"version"
:
"0.6.
5
"
,
"version"
:
"0.6.
6
"
,
"keywords"
:
[
"data binding"
,
"templating"
],
"scripts"
:
[
"dist/rivets.js"
],
"main"
:
"dist/rivets.js"
,
...
...
dist/rivets.js
View file @
39df93d
// Rivets.js
// version: 0.6.
5
// version: 0.6.
6
// author: Michael Richards
// license: MIT
(
function
()
{
var
Rivets
,
var
Rivets
,
bindMethod
,
unbindMethod
,
_ref
,
__bind
=
function
(
fn
,
me
){
return
function
(){
return
fn
.
apply
(
me
,
arguments
);
};
},
__indexOf
=
[].
indexOf
||
function
(
item
)
{
for
(
var
i
=
0
,
l
=
this
.
length
;
i
<
l
;
i
++
)
{
if
(
i
in
this
&&
this
[
i
]
===
item
)
return
i
;
}
return
-
1
;
},
__slice
=
[].
slice
,
...
...
@@ -26,71 +26,70 @@
}
};
Rivets
.
Util
=
{
bindEvent
:
function
(
el
,
event
,
handler
)
{
if
(
window
.
jQuery
!=
null
)
{
el
=
jQuery
(
el
);
if
(
el
.
on
!=
null
)
{
return
el
.
on
(
event
,
handler
);
if
(
'jQuery'
in
window
)
{
_ref
=
'on'
in
jQuery
?
[
'on'
,
'off'
]
:
[
'bind'
,
'unbind'
],
bindMethod
=
_ref
[
0
],
unbindMethod
=
_ref
[
1
];
Rivets
.
Util
=
{
bindEvent
:
function
(
el
,
event
,
handler
)
{
return
jQuery
(
el
)[
bindMethod
](
event
,
handler
);
},
unbindEvent
:
function
(
el
,
event
,
handler
)
{
return
jQuery
(
el
)[
unbindMethod
](
event
,
handler
);
},
getInputValue
:
function
(
el
)
{
var
$el
;
$el
=
jQuery
(
el
);
if
(
$el
.
attr
(
'type'
)
===
'checkbox'
)
{
return
$el
.
is
(
':checked'
);
}
else
{
return
el
.
bind
(
event
,
handler
);
return
$el
.
val
(
);
}
}
else
if
(
window
.
addEventListener
!=
null
)
{
return
el
.
addEventListener
(
event
,
handler
,
false
);
}
else
{
event
=
'on'
+
event
;
return
el
.
attachEvent
(
event
,
handler
);
}
}
,
unbindEvent
:
function
(
el
,
event
,
handler
)
{
if
(
window
.
jQuery
!=
null
)
{
el
=
jQuery
(
el
);
if
(
el
.
off
!=
null
)
{
return
el
.
off
(
event
,
handler
);
}
else
{
return
el
.
unbind
(
event
,
handler
)
;
}
;
}
else
{
Rivets
.
Util
=
{
bindEvent
:
(
function
()
{
if
(
'addEventListener'
in
window
)
{
return
function
(
el
,
event
,
handler
)
{
return
el
.
addEventListener
(
event
,
handler
,
false
);
}
;
}
}
else
if
(
window
.
removeEventListener
!=
null
)
{
return
el
.
removeEventListener
(
event
,
handler
,
false
);
}
else
{
event
=
'on'
+
event
;
return
el
.
detachEvent
(
event
,
handler
);
}
},
getInputValue
:
function
(
el
)
{
var
o
,
_i
,
_len
,
_results
;
if
(
window
.
jQuery
!=
null
)
{
el
=
jQuery
(
el
);
switch
(
el
[
0
].
type
)
{
case
'checkbox'
:
return
el
.
is
(
':checked'
);
default
:
return
el
.
val
();
return
function
(
el
,
event
,
handler
)
{
return
el
.
attachEvent
(
'on'
+
event
,
handler
);
};
})(),
unbindEvent
:
(
function
()
{
if
(
'removeEventListener'
in
window
)
{
return
function
(
el
,
event
,
handler
)
{
return
el
.
removeEventListener
(
event
,
handler
,
false
);
};
}
}
else
{
switch
(
el
.
type
)
{
case
'checkbox'
:
return
el
.
checked
;
case
'select-multiple'
:
_results
=
[];
for
(
_i
=
0
,
_len
=
el
.
length
;
_i
<
_len
;
_i
++
)
{
o
=
el
[
_i
];
if
(
o
.
selected
)
{
_results
.
push
(
o
.
value
);
}
return
function
(
el
,
event
,
handler
)
{
return
el
.
detachEvent
(
'on'
+
event
,
handler
);
};
})(),
getInputValue
:
function
(
el
)
{
var
o
,
_i
,
_len
,
_results
;
if
(
el
.
type
===
'checkbox'
)
{
return
el
.
checked
;
}
else
if
(
el
.
type
===
'select-multiple'
)
{
_results
=
[];
for
(
_i
=
0
,
_len
=
el
.
length
;
_i
<
_len
;
_i
++
)
{
o
=
el
[
_i
];
if
(
o
.
selected
)
{
_results
.
push
(
o
.
value
);
}
return
_results
;
break
;
default
:
return
el
.
value
;
}
return
_results
;
}
else
{
return
el
.
value
;
}
}
}
}
;
}
;
}
Rivets
.
View
=
(
function
()
{
function
View
(
els
,
models
,
options
)
{
var
k
,
option
,
v
,
_base
,
_i
,
_len
,
_ref
,
_ref1
,
_ref2
;
var
k
,
option
,
v
,
_base
,
_i
,
_len
,
_ref
1
,
_ref2
,
_ref3
;
this
.
els
=
els
;
this
.
models
=
models
;
this
.
options
=
options
!=
null
?
options
:
{};
...
...
@@ -106,20 +105,20 @@
if
(
!
(
this
.
els
.
jquery
||
this
.
els
instanceof
Array
))
{
this
.
els
=
[
this
.
els
];
}
_ref
=
[
'config'
,
'binders'
,
'formatters'
,
'adapters'
];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
option
=
_ref
[
_i
];
_ref
1
=
[
'config'
,
'binders'
,
'formatters'
,
'adapters'
];
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
option
=
_ref
1
[
_i
];
this
[
option
]
=
{};
if
(
this
.
options
[
option
])
{
_ref
1
=
this
.
options
[
option
];
for
(
k
in
_ref
1
)
{
v
=
_ref
1
[
k
];
_ref
2
=
this
.
options
[
option
];
for
(
k
in
_ref
2
)
{
v
=
_ref
2
[
k
];
this
[
option
][
k
]
=
v
;
}
}
_ref
2
=
Rivets
[
option
];
for
(
k
in
_ref
2
)
{
v
=
_ref
2
[
k
];
_ref
3
=
Rivets
[
option
];
for
(
k
in
_ref
3
)
{
v
=
_ref
3
[
k
];
if
((
_base
=
this
[
option
])[
k
]
==
null
)
{
_base
[
k
]
=
v
;
}
...
...
@@ -137,7 +136,7 @@
};
View
.
prototype
.
build
=
function
()
{
var
bindingRegExp
,
buildBinding
,
componentRegExp
,
el
,
parse
,
skipNodes
,
_i
,
_len
,
_ref
,
var
bindingRegExp
,
buildBinding
,
componentRegExp
,
el
,
parse
,
skipNodes
,
_i
,
_len
,
_ref
1
,
_this
=
this
;
this
.
bindings
=
[];
skipNodes
=
[];
...
...
@@ -147,21 +146,21 @@
var
context
,
ctx
,
dependencies
,
keypath
,
options
,
pipe
,
pipes
;
options
=
{};
pipes
=
(
function
()
{
var
_i
,
_len
,
_ref
,
_results
;
_ref
=
declaration
.
split
(
'|'
);
var
_i
,
_len
,
_ref
1
,
_results
;
_ref
1
=
declaration
.
split
(
'|'
);
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
pipe
=
_ref
[
_i
];
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
pipe
=
_ref
1
[
_i
];
_results
.
push
(
pipe
.
trim
());
}
return
_results
;
})();
context
=
(
function
()
{
var
_i
,
_len
,
_ref
,
_results
;
_ref
=
pipes
.
shift
().
split
(
'<'
);
var
_i
,
_len
,
_ref
1
,
_results
;
_ref
1
=
pipes
.
shift
().
split
(
'<'
);
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
ctx
=
_ref
[
_i
];
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
ctx
=
_ref
1
[
_i
];
_results
.
push
(
ctx
.
trim
());
}
return
_results
;
...
...
@@ -174,7 +173,7 @@
return
_this
.
bindings
.
push
(
new
Rivets
[
binding
](
_this
,
node
,
type
,
keypath
,
options
));
};
parse
=
function
(
node
)
{
var
attribute
,
attributes
,
binder
,
childNode
,
delimiters
,
identifier
,
n
,
parser
,
regexp
,
text
,
token
,
tokens
,
type
,
value
,
_i
,
_j
,
_k
,
_l
,
_len
,
_len1
,
_len2
,
_len3
,
_len4
,
_m
,
_ref
,
_ref1
,
_ref2
,
_ref3
,
_ref4
,
_results
;
var
attribute
,
attributes
,
binder
,
childNode
,
delimiters
,
identifier
,
n
,
parser
,
regexp
,
text
,
token
,
tokens
,
type
,
value
,
_i
,
_j
,
_k
,
_l
,
_len
,
_len1
,
_len2
,
_len3
,
_len4
,
_m
,
_ref
1
,
_ref2
,
_ref3
,
_ref4
,
_ref5
,
_results
;
if
(
__indexOf
.
call
(
skipNodes
,
node
)
<
0
)
{
if
(
node
.
nodeType
===
3
)
{
parser
=
Rivets
.
TextTemplateParser
;
...
...
@@ -197,15 +196,15 @@
type
=
node
.
tagName
.
replace
(
componentRegExp
,
''
).
toLowerCase
();
_this
.
bindings
.
push
(
new
Rivets
.
ComponentBinding
(
_this
,
node
,
type
));
}
else
if
(
node
.
attributes
!=
null
)
{
_ref
=
node
.
attributes
;
for
(
_j
=
0
,
_len1
=
_ref
.
length
;
_j
<
_len1
;
_j
++
)
{
attribute
=
_ref
[
_j
];
_ref
1
=
node
.
attributes
;
for
(
_j
=
0
,
_len1
=
_ref
1
.
length
;
_j
<
_len1
;
_j
++
)
{
attribute
=
_ref
1
[
_j
];
if
(
bindingRegExp
.
test
(
attribute
.
name
))
{
type
=
attribute
.
name
.
replace
(
bindingRegExp
,
''
);
if
(
!
(
binder
=
_this
.
binders
[
type
]))
{
_ref
1
=
_this
.
binders
;
for
(
identifier
in
_ref
1
)
{
value
=
_ref
1
[
identifier
];
_ref
2
=
_this
.
binders
;
for
(
identifier
in
_ref
2
)
{
value
=
_ref
2
[
identifier
];
if
(
identifier
!==
'*'
&&
identifier
.
indexOf
(
'*'
)
!==
-
1
)
{
regexp
=
new
RegExp
(
"^"
+
(
identifier
.
replace
(
'*'
,
'.+'
))
+
"$"
);
if
(
regexp
.
test
(
type
))
{
...
...
@@ -216,55 +215,55 @@
}
binder
||
(
binder
=
_this
.
binders
[
'*'
]);
if
(
binder
.
block
)
{
_ref
2
=
node
.
childNodes
;
for
(
_k
=
0
,
_len2
=
_ref
2
.
length
;
_k
<
_len2
;
_k
++
)
{
n
=
_ref
2
[
_k
];
_ref
3
=
node
.
childNodes
;
for
(
_k
=
0
,
_len2
=
_ref
3
.
length
;
_k
<
_len2
;
_k
++
)
{
n
=
_ref
3
[
_k
];
skipNodes
.
push
(
n
);
}
attributes
=
[
attribute
];
}
}
}
_ref
3
=
attributes
||
node
.
attributes
;
for
(
_l
=
0
,
_len3
=
_ref
3
.
length
;
_l
<
_len3
;
_l
++
)
{
attribute
=
_ref
3
[
_l
];
_ref
4
=
attributes
||
node
.
attributes
;
for
(
_l
=
0
,
_len3
=
_ref
4
.
length
;
_l
<
_len3
;
_l
++
)
{
attribute
=
_ref
4
[
_l
];
if
(
bindingRegExp
.
test
(
attribute
.
name
))
{
type
=
attribute
.
name
.
replace
(
bindingRegExp
,
''
);
buildBinding
(
'Binding'
,
node
,
type
,
attribute
.
value
);
}
}
}
_ref
4
=
(
function
()
{
var
_len4
,
_n
,
_ref
4
,
_results1
;
_ref
4
=
node
.
childNodes
;
_ref
5
=
(
function
()
{
var
_len4
,
_n
,
_ref
5
,
_results1
;
_ref
5
=
node
.
childNodes
;
_results1
=
[];
for
(
_n
=
0
,
_len4
=
_ref
4
.
length
;
_n
<
_len4
;
_n
++
)
{
n
=
_ref
4
[
_n
];
for
(
_n
=
0
,
_len4
=
_ref
5
.
length
;
_n
<
_len4
;
_n
++
)
{
n
=
_ref
5
[
_n
];
_results1
.
push
(
n
);
}
return
_results1
;
})();
_results
=
[];
for
(
_m
=
0
,
_len4
=
_ref
4
.
length
;
_m
<
_len4
;
_m
++
)
{
childNode
=
_ref
4
[
_m
];
for
(
_m
=
0
,
_len4
=
_ref
5
.
length
;
_m
<
_len4
;
_m
++
)
{
childNode
=
_ref
5
[
_m
];
_results
.
push
(
parse
(
childNode
));
}
return
_results
;
}
};
_ref
=
this
.
els
;
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
el
=
_ref
[
_i
];
_ref
1
=
this
.
els
;
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
el
=
_ref
1
[
_i
];
parse
(
el
);
}
};
View
.
prototype
.
select
=
function
(
fn
)
{
var
binding
,
_i
,
_len
,
_ref
,
_results
;
_ref
=
this
.
bindings
;
var
binding
,
_i
,
_len
,
_ref
1
,
_results
;
_ref
1
=
this
.
bindings
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
binding
=
_ref
[
_i
];
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
binding
=
_ref
1
[
_i
];
if
(
fn
(
binding
))
{
_results
.
push
(
binding
);
}
...
...
@@ -273,53 +272,53 @@
};
View
.
prototype
.
bind
=
function
()
{
var
binding
,
_i
,
_len
,
_ref
,
_results
;
_ref
=
this
.
bindings
;
var
binding
,
_i
,
_len
,
_ref
1
,
_results
;
_ref
1
=
this
.
bindings
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
binding
=
_ref
[
_i
];
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
binding
=
_ref
1
[
_i
];
_results
.
push
(
binding
.
bind
());
}
return
_results
;
};
View
.
prototype
.
unbind
=
function
()
{
var
binding
,
_i
,
_len
,
_ref
,
_results
;
_ref
=
this
.
bindings
;
var
binding
,
_i
,
_len
,
_ref
1
,
_results
;
_ref
1
=
this
.
bindings
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
binding
=
_ref
[
_i
];
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
binding
=
_ref
1
[
_i
];
_results
.
push
(
binding
.
unbind
());
}
return
_results
;
};
View
.
prototype
.
sync
=
function
()
{
var
binding
,
_i
,
_len
,
_ref
,
_results
;
_ref
=
this
.
bindings
;
var
binding
,
_i
,
_len
,
_ref
1
,
_results
;
_ref
1
=
this
.
bindings
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
binding
=
_ref
[
_i
];
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
binding
=
_ref
1
[
_i
];
_results
.
push
(
binding
.
sync
());
}
return
_results
;
};
View
.
prototype
.
publish
=
function
()
{
var
binding
,
_i
,
_len
,
_ref
,
_results
;
_ref
=
this
.
select
(
function
(
b
)
{
var
binding
,
_i
,
_len
,
_ref
1
,
_results
;
_ref
1
=
this
.
select
(
function
(
b
)
{
return
b
.
binder
.
publishes
;
});
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
binding
=
_ref
[
_i
];
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
binding
=
_ref
1
[
_i
];
_results
.
push
(
binding
.
publish
());
}
return
_results
;
};
View
.
prototype
.
update
=
function
(
models
)
{
var
binding
,
key
,
model
,
_i
,
_len
,
_ref
,
_results
;
var
binding
,
key
,
model
,
_i
,
_len
,
_ref
1
,
_results
;
if
(
models
==
null
)
{
models
=
{};
}
...
...
@@ -327,10 +326,10 @@
model
=
models
[
key
];
this
.
models
[
key
]
=
model
;
}
_ref
=
this
.
bindings
;
_ref
1
=
this
.
bindings
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
binding
=
_ref
[
_i
];
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
binding
=
_ref
1
[
_i
];
_results
.
push
(
binding
.
update
(
models
));
}
return
_results
;
...
...
@@ -355,20 +354,19 @@
this
.
set
=
__bind
(
this
.
set
,
this
);
this
.
eventHandler
=
__bind
(
this
.
eventHandler
,
this
);
this
.
formattedValue
=
__bind
(
this
.
formattedValue
,
this
);
this
.
setObserver
=
__bind
(
this
.
setObserver
,
this
);
this
.
setBinder
=
__bind
(
this
.
setBinder
,
this
);
this
.
formatters
=
this
.
options
.
formatters
||
[];
this
.
dependencies
=
[];
this
.
model
=
void
0
;
this
.
setBinder
();
this
.
setObserver
();
}
Binding
.
prototype
.
setBinder
=
function
()
{
var
identifier
,
regexp
,
value
,
_ref
;
var
identifier
,
regexp
,
value
,
_ref
1
;
if
(
!
(
this
.
binder
=
this
.
view
.
binders
[
this
.
type
]))
{
_ref
=
this
.
view
.
binders
;
for
(
identifier
in
_ref
)
{
value
=
_ref
[
identifier
];
_ref
1
=
this
.
view
.
binders
;
for
(
identifier
in
_ref
1
)
{
value
=
_ref
1
[
identifier
];
if
(
identifier
!==
'*'
&&
identifier
.
indexOf
(
'*'
)
!==
-
1
)
{
regexp
=
new
RegExp
(
"^"
+
(
identifier
.
replace
(
'*'
,
'.+'
))
+
"$"
);
if
(
regexp
.
test
(
this
.
type
))
{
...
...
@@ -387,27 +385,11 @@
}
};
Binding
.
prototype
.
setObserver
=
function
()
{
var
_this
=
this
;
this
.
observer
=
new
Rivets
.
KeypathObserver
(
this
.
view
,
this
.
view
.
models
,
this
.
keypath
,
function
(
obs
)
{
if
(
_this
.
key
)
{
_this
.
unbind
(
true
);
}
_this
.
model
=
obs
.
target
;
if
(
_this
.
key
)
{
_this
.
bind
(
true
);
}
return
_this
.
sync
();
});
this
.
key
=
this
.
observer
.
key
;
return
this
.
model
=
this
.
observer
.
target
;
};
Binding
.
prototype
.
formattedValue
=
function
(
value
)
{
var
args
,
formatter
,
id
,
_i
,
_len
,
_ref
;
_ref
=
this
.
formatters
;
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
formatter
=
_ref
[
_i
];
var
args
,
formatter
,
id
,
_i
,
_len
,
_ref
1
;
_ref
1
=
this
.
formatters
;
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
formatter
=
_ref
1
[
_i
];
args
=
formatter
.
split
(
/
\s
+/
);
id
=
args
.
shift
();
formatter
=
this
.
view
.
formatters
[
id
];
...
...
@@ -429,98 +411,87 @@
};
Binding
.
prototype
.
set
=
function
(
value
)
{
var
_ref
;
var
_ref
1
;
value
=
value
instanceof
Function
&&
!
this
.
binder
[
"function"
]
?
this
.
formattedValue
(
value
.
call
(
this
.
model
))
:
this
.
formattedValue
(
value
);
return
(
_ref
=
this
.
binder
.
routine
)
!=
null
?
_ref
.
call
(
this
,
this
.
el
,
value
)
:
void
0
;
return
(
_ref
1
=
this
.
binder
.
routine
)
!=
null
?
_ref1
.
call
(
this
,
this
.
el
,
value
)
:
void
0
;
};
Binding
.
prototype
.
sync
=
function
()
{
return
this
.
set
(
this
.
key
?
this
.
view
.
adapters
[
this
.
key
[
"interface"
]].
read
(
this
.
model
,
this
.
key
.
path
)
:
this
.
model
);
var
dependency
,
observer
,
_i
,
_j
,
_len
,
_len1
,
_ref1
,
_ref2
,
_ref3
;
if
(
this
.
model
!==
this
.
observer
.
target
)
{
_ref1
=
this
.
dependencies
;
for
(
_i
=
0
,
_len
=
_ref1
.
length
;
_i
<
_len
;
_i
++
)
{
observer
=
_ref1
[
_i
];
observer
.
unobserve
();
}
this
.
dependencies
=
[];
if
(((
this
.
model
=
this
.
observer
.
target
)
!=
null
)
&&
((
_ref2
=
this
.
options
.
dependencies
)
!=
null
?
_ref2
.
length
:
void
0
))
{
_ref3
=
this
.
options
.
dependencies
;
for
(
_j
=
0
,
_len1
=
_ref3
.
length
;
_j
<
_len1
;
_j
++
)
{
dependency
=
_ref3
[
_j
];
observer
=
new
Rivets
.
Observer
(
this
.
view
,
this
.
model
,
dependency
,
this
.
sync
);
this
.
dependencies
.
push
(
observer
);
}
}
}
return
this
.
set
(
this
.
observer
.
value
());
};
Binding
.
prototype
.
publish
=
function
()
{
var
args
,
formatter
,
id
,
value
,
_i
,
_len
,
_ref
,
_ref1
,
_ref2
;
var
args
,
formatter
,
id
,
value
,
_i
,
_len
,
_ref
1
,
_ref2
,
_ref3
;
value
=
Rivets
.
Util
.
getInputValue
(
this
.
el
);
_ref
=
this
.
formatters
.
slice
(
0
).
reverse
();
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
formatter
=
_ref
[
_i
];
_ref
1
=
this
.
formatters
.
slice
(
0
).
reverse
();
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
formatter
=
_ref
1
[
_i
];
args
=
formatter
.
split
(
/
\s
+/
);
id
=
args
.
shift
();
if
((
_ref
1
=
this
.
view
.
formatters
[
id
])
!=
null
?
_ref1
.
publish
:
void
0
)
{
value
=
(
_ref
2
=
this
.
view
.
formatters
[
id
]).
publish
.
apply
(
_ref2
,
[
value
].
concat
(
__slice
.
call
(
args
)));
if
((
_ref
2
=
this
.
view
.
formatters
[
id
])
!=
null
?
_ref2
.
publish
:
void
0
)
{
value
=
(
_ref
3
=
this
.
view
.
formatters
[
id
]).
publish
.
apply
(
_ref3
,
[
value
].
concat
(
__slice
.
call
(
args
)));
}
}
return
this
.
view
.
adapters
[
this
.
key
[
"interface"
]].
publish
(
this
.
model
,
this
.
key
.
path
,
value
);
return
this
.
observer
.
publish
(
value
);
};
Binding
.
prototype
.
bind
=
function
(
silent
)
{
var
dependency
,
key
,
observer
,
_i
,
_len
,
_ref
,
_ref1
,
_ref2
,
_results
,
_this
=
this
;
if
(
silent
==
null
)
{
silent
=
false
;
}
if
(
!
silent
)
{
if
((
_ref
=
this
.
binder
.
bind
)
!=
null
)
{
_ref
.
call
(
this
,
this
.
el
);
Binding
.
prototype
.
bind
=
function
()
{
var
dependency
,
observer
,
_i
,
_len
,
_ref1
,
_ref2
,
_ref3
;
if
((
_ref1
=
this
.
binder
.
bind
)
!=
null
)
{
_ref1
.
call
(
this
,
this
.
el
);
}
this
.
observer
=
new
Rivets
.
Observer
(
this
.
view
,
this
.
view
.
models
,
this
.
keypath
,
this
.
sync
);
this
.
model
=
this
.
observer
.
target
;
if
((
this
.
model
!=
null
)
&&
((
_ref2
=
this
.
options
.
dependencies
)
!=
null
?
_ref2
.
length
:
void
0
))
{
_ref3
=
this
.
options
.
dependencies
;
for
(
_i
=
0
,
_len
=
_ref3
.
length
;
_i
<
_len
;
_i
++
)
{
dependency
=
_ref3
[
_i
];
observer
=
new
Rivets
.
Observer
(
this
.
view
,
this
.
model
,
dependency
,
this
.
sync
);
this
.
dependencies
.
push
(
observer
);
}
}
if
(
this
.
key
)
{
this
.
view
.
adapters
[
this
.
key
[
"interface"
]].
subscribe
(
this
.
model
,
this
.
key
.
path
,
this
.
sync
);
}
if
(
!
silent
?
this
.
view
.
config
.
preloadData
:
void
0
)
{
this
.
sync
();
}
if
((
_ref1
=
this
.
options
.
dependencies
)
!=
null
?
_ref1
.
length
:
void
0
)
{
_ref2
=
this
.
options
.
dependencies
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref2
.
length
;
_i
<
_len
;
_i
++
)
{
dependency
=
_ref2
[
_i
];
observer
=
new
Rivets
.
KeypathObserver
(
this
.
view
,
this
.
model
,
dependency
,
function
(
obs
,
prev
)
{
var
key
;
key
=
obs
.
key
;
_this
.
view
.
adapters
[
key
[
"interface"
]].
unsubscribe
(
prev
,
key
.
path
,
_this
.
sync
);
_this
.
view
.
adapters
[
key
[
"interface"
]].
subscribe
(
obs
.
target
,
key
.
path
,
_this
.
sync
);
return
_this
.
sync
();
});
key
=
observer
.
key
;
this
.
view
.
adapters
[
key
[
"interface"
]].
subscribe
(
observer
.
target
,
key
.
path
,
this
.
sync
);
_results
.
push
(
this
.
dependencies
.
push
(
observer
));
}
return
_results
;
if
(
this
.
view
.
config
.
preloadData
)
{
return
this
.
sync
();
}
};
Binding
.
prototype
.
unbind
=
function
(
silent
)
{
var
key
,
obs
,
_i
,
_len
,
_ref
,
_ref1
;
if
(
silent
=
=
null
)
{
silent
=
false
;
Binding
.
prototype
.
unbind
=
function
()
{
var
observer
,
_i
,
_len
,
_ref1
,
_ref2
;
if
(
(
_ref1
=
this
.
binder
.
unbind
)
!
=
null
)
{
_ref1
.
call
(
this
,
this
.
el
)
;
}
if
(
!
silent
)
{
if
((
_ref
=
this
.
binder
.
unbind
)
!=
null
)
{
_ref
.
call
(
this
,
this
.
el
);
}
this
.
observer
.
unobserve
();
}
if
(
this
.
key
)
{
this
.
view
.
adapters
[
this
.
key
[
"interface"
]].
unsubscribe
(
this
.
model
,
this
.
key
.
path
,
this
.
sync
);
}
if
(
this
.
dependencies
.
length
)
{
_ref1
=
this
.
dependencies
;
for
(
_i
=
0
,
_len
=
_ref1
.
length
;
_i
<
_len
;
_i
++
)
{
obs
=
_ref1
[
_i
];
key
=
obs
.
key
;
this
.
view
.
adapters
[
key
[
"interface"
]].
unsubscribe
(
obs
.
target
,
key
.
path
,
this
.
sync
);
}
return
this
.
dependencies
=
[];
this
.
observer
.
unobserve
();
_ref2
=
this
.
dependencies
;
for
(
_i
=
0
,
_len
=
_ref2
.
length
;
_i
<
_len
;
_i
++
)
{
observer
=
_ref2
[
_i
];
observer
.
unobserve
();
}
return
this
.
dependencies
=
[];
};
Binding
.
prototype
.
update
=
function
(
models
)
{
var
_ref
;
var
_ref
1
;
if
(
models
==
null
)
{
models
=
{};
}
return
(
_ref
=
this
.
binder
.
update
)
!=
null
?
_ref
.
call
(
this
,
models
)
:
void
0
;
return
(
_ref
1
=
this
.
binder
.
update
)
!=
null
?
_ref1
.
call
(
this
,
models
)
:
void
0
;
};
return
Binding
;
...
...
@@ -531,7 +502,7 @@
__extends
(
ComponentBinding
,
_super
);
function
ComponentBinding
(
view
,
el
,
type
)
{
var
attribute
,
_i
,
_len
,
_ref
,
_ref1
;
var
attribute
,
_i
,
_len
,
_ref
1
,
_ref2
;
this
.
view
=
view
;
this
.
el
=
el
;
this
.
type
=
type
;
...
...
@@ -542,10 +513,10 @@
this
.
component
=
Rivets
.
components
[
this
.
type
];
this
.
attributes
=
{};
this
.
inflections
=
{};
_ref
=
this
.
el
.
attributes
||
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
attribute
=
_ref
[
_i
];
if
(
_ref
1
=
attribute
.
name
,
__indexOf
.
call
(
this
.
component
.
attributes
,
_ref1
)
>=
0
)
{
_ref
1
=
this
.
el
.
attributes
||
[];
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
attribute
=
_ref
1
[
_i
];
if
(
_ref
2
=
attribute
.
name
,
__indexOf
.
call
(
this
.
component
.
attributes
,
_ref2
)
>=
0
)
{
this
.
attributes
[
attribute
.
name
]
=
attribute
.
value
;
}
else
{
this
.
inflections
[
attribute
.
name
]
=
attribute
.
value
;
...
...
@@ -556,17 +527,17 @@
ComponentBinding
.
prototype
.
sync
=
function
()
{};
ComponentBinding
.
prototype
.
locals
=
function
(
models
)
{
var
inverse
,
key
,
model
,
path
,
result
,
_i
,
_len
,
_ref
,
_ref1
;
var
inverse
,
key
,
model
,
path
,
result
,
_i
,
_len
,
_ref
1
,
_ref2
;
if
(
models
==
null
)
{
models
=
this
.
view
.
models
;
}
result
=
{};
_ref
=
this
.
inflections
;
for
(
key
in
_ref
)
{
inverse
=
_ref
[
key
];
_ref
1
=
inverse
.
split
(
'.'
);
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
path
=
_ref
1
[
_i
];
_ref
1
=
this
.
inflections
;
for
(
key
in
_ref
1
)
{
inverse
=
_ref
1
[
key
];
_ref
2
=
inverse
.
split
(
'.'
);
for
(
_i
=
0
,
_len
=
_ref
2
.
length
;
_i
<
_len
;
_i
++
)
{
path
=
_ref
2
[
_i
];
result
[
key
]
=
(
result
[
key
]
||
models
)[
path
];
}
}
...
...
@@ -580,14 +551,14 @@
};
ComponentBinding
.
prototype
.
update
=
function
(
models
)
{
var
_ref
;
return
(
_ref
=
this
.
componentView
)
!=
null
?
_ref
.
update
(
this
.
locals
(
models
))
:
void
0
;
var
_ref
1
;
return
(
_ref
1
=
this
.
componentView
)
!=
null
?
_ref1
.
update
(
this
.
locals
(
models
))
:
void
0
;
};
ComponentBinding
.
prototype
.
bind
=
function
()
{
var
el
,
_ref
;
var
el
,
_ref
1
;
if
(
this
.
componentView
!=
null
)
{
return
(
_ref
=
this
.
componentView
)
!=
null
?
_ref
.
bind
()
:
void
0
;
return
(
_ref
1
=
this
.
componentView
)
!=
null
?
_ref1
.
bind
()
:
void
0
;
}
else
{
el
=
this
.
component
.
build
.
call
(
this
.
attributes
);
(
this
.
componentView
=
new
Rivets
.
View
(
el
,
this
.
locals
(),
this
.
view
.
options
)).
bind
();
...
...
@@ -596,8 +567,8 @@
};
ComponentBinding
.
prototype
.
unbind
=
function
()
{
var
_ref
;
return
(
_ref
=
this
.
componentView
)
!=
null
?
_ref
.
unbind
()
:
void
0
;
var
_ref
1
;
return
(
_ref
1
=
this
.
componentView
)
!=
null
?
_ref1
.
unbind
()
:
void
0
;
};
return
ComponentBinding
;
...
...
@@ -616,7 +587,6 @@
this
.
sync
=
__bind
(
this
.
sync
,
this
);
this
.
formatters
=
this
.
options
.
formatters
||
[];
this
.
dependencies
=
[];
this
.
setObserver
();
}
TextBinding
.
prototype
.
binder
=
{
...
...
@@ -637,14 +607,14 @@
function
KeypathParser
()
{}
KeypathParser
.
parse
=
function
(
keypath
,
interfaces
,
root
)
{
var
char
,
current
,
tokens
,
_i
,
_len
;
var
char
,
current
,
index
,
tokens
,
_i
,
_ref1
;
tokens
=
[];
current
=
{
"interface"
:
root
,
path
:
''
};
for
(
_i
=
0
,
_len
=
keypath
.
length
;
_i
<
_len
;
_i
++
)
{
char
=
keypath
[
_i
]
;
for
(
index
=
_i
=
0
,
_ref1
=
keypath
.
length
;
_i
<
_ref1
;
index
=
_i
+=
1
)
{
char
=
keypath
.
charAt
(
index
)
;
if
(
__indexOf
.
call
(
interfaces
,
char
)
>=
0
)
{
tokens
.
push
(
current
);
current
=
{
...
...
@@ -722,34 +692,39 @@
})();
Rivets
.
Keypath
Observer
=
(
function
()
{
function
Keypath
Observer
(
view
,
model
,
keypath
,
callback
)
{
Rivets
.
Observer
=
(
function
()
{
function
Observer
(
view
,
model
,
keypath
,
callback
)
{
this
.
view
=
view
;
this
.
model
=
model
;
this
.
keypath
=
keypath
;
this
.
callback
=
callback
;
this
.
unobserve
=
__bind
(
this
.
unobserve
,
this
);
this
.
realize
=
__bind
(
this
.
realize
,
this
);
this
.
value
=
__bind
(
this
.
value
,
this
);
this
.
publish
=
__bind
(
this
.
publish
,
this
);
this
.
read
=
__bind
(
this
.
read
,
this
);
this
.
set
=
__bind
(
this
.
set
,
this
);
this
.
adapter
=
__bind
(
this
.
adapter
,
this
);
this
.
update
=
__bind
(
this
.
update
,
this
);
this
.
initialize
=
__bind
(
this
.
initialize
,
this
);
this
.
parse
=
__bind
(
this
.
parse
,
this
);
this
.
parse
();
this
.
objectPath
=
[];
this
.
target
=
this
.
realize
();
this
.
initialize
();
}
Keypath
Observer
.
prototype
.
parse
=
function
()
{
var
interfaces
,
k
,
path
,
root
,
v
,
_ref
;
Observer
.
prototype
.
parse
=
function
()
{
var
interfaces
,
k
,
path
,
root
,
v
,
_ref
1
;
interfaces
=
(
function
()
{
var
_ref
,
_results
;
_ref
=
this
.
view
.
adapters
;
var
_ref
1
,
_results
;
_ref
1
=
this
.
view
.
adapters
;
_results
=
[];
for
(
k
in
_ref
)
{
v
=
_ref
[
k
];
for
(
k
in
_ref
1
)
{
v
=
_ref
1
[
k
];
_results
.
push
(
k
);
}
return
_results
;
}).
call
(
this
);
if
(
_ref
=
this
.
keypath
[
0
],
__indexOf
.
call
(
interfaces
,
_ref
)
>=
0
)
{
if
(
_ref
1
=
this
.
keypath
[
0
],
__indexOf
.
call
(
interfaces
,
_ref1
)
>=
0
)
{
root
=
this
.
keypath
[
0
];
path
=
this
.
keypath
.
substr
(
1
);
}
else
{
...
...
@@ -760,44 +735,99 @@
return
this
.
key
=
this
.
tokens
.
pop
();
};
KeypathObserver
.
prototype
.
update
=
function
()
{
var
next
,
prev
;
Observer
.
prototype
.
initialize
=
function
()
{
this
.
objectPath
=
[];
this
.
target
=
this
.
realize
();
if
(
this
.
target
!=
null
)
{
return
this
.
set
(
true
,
this
.
key
,
this
.
target
,
this
.
callback
);
}
};
Observer
.
prototype
.
update
=
function
()
{
var
next
,
oldValue
;
if
((
next
=
this
.
realize
())
!==
this
.
target
)
{
prev
=
this
.
target
;
if
(
this
.
target
!=
null
)
{
this
.
set
(
false
,
this
.
key
,
this
.
target
,
this
.
callback
);
}
if
(
next
!=
null
)
{
this
.
set
(
true
,
this
.
key
,
next
,
this
.
callback
);
}
oldValue
=
this
.
value
();
this
.
target
=
next
;
return
this
.
callback
(
this
,
prev
);
if
(
this
.
value
()
!==
oldValue
)
{
return
this
.
callback
();
}
}
};
KeypathObserver
.
prototype
.
realize
=
function
()
{
var
current
,
index
,
prev
,
token
,
_i
,
_len
,
_ref
;
Observer
.
prototype
.
adapter
=
function
(
key
)
{
return
this
.
view
.
adapters
[
key
[
"interface"
]];
};
Observer
.
prototype
.
set
=
function
(
active
,
key
,
obj
,
callback
)
{
var
action
;
action
=
active
?
'subscribe'
:
'unsubscribe'
;
return
this
.
adapter
(
key
)[
action
](
obj
,
key
.
path
,
callback
);
};
Observer
.
prototype
.
read
=
function
(
key
,
obj
)
{
return
this
.
adapter
(
key
).
read
(
obj
,
key
.
path
);
};
Observer
.
prototype
.
publish
=
function
(
value
)
{
if
(
this
.
target
!=
null
)
{
return
this
.
adapter
(
this
.
key
).
publish
(
this
.
target
,
this
.
key
.
path
,
value
);
}
};
Observer
.
prototype
.
value
=
function
()
{
if
(
this
.
target
!=
null
)
{
return
this
.
read
(
this
.
key
,
this
.
target
);
}
};
Observer
.
prototype
.
realize
=
function
()
{
var
current
,
index
,
prev
,
token
,
unreached
,
_i
,
_len
,
_ref1
;
current
=
this
.
model
;
_ref
=
this
.
tokens
;
for
(
index
=
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
index
=
++
_i
)
{
token
=
_ref
[
index
];
if
(
this
.
objectPath
[
index
]
!=
null
)
{
if
(
current
!==
(
prev
=
this
.
objectPath
[
index
]))
{
this
.
view
.
adapters
[
token
[
"interface"
]].
unsubscribe
(
prev
,
token
.
path
,
this
.
update
);
this
.
view
.
adapters
[
token
[
"interface"
]].
subscribe
(
current
,
token
.
path
,
this
.
update
);
unreached
=
null
;
_ref1
=
this
.
tokens
;
for
(
index
=
_i
=
0
,
_len
=
_ref1
.
length
;
_i
<
_len
;
index
=
++
_i
)
{
token
=
_ref1
[
index
];
if
(
current
!=
null
)
{
if
(
this
.
objectPath
[
index
]
!=
null
)
{
if
(
current
!==
(
prev
=
this
.
objectPath
[
index
]))
{
this
.
set
(
false
,
token
,
prev
,
this
.
update
);
this
.
set
(
true
,
token
,
current
,
this
.
update
);
this
.
objectPath
[
index
]
=
current
;
}
}
else
{
this
.
set
(
true
,
token
,
current
,
this
.
update
);
this
.
objectPath
[
index
]
=
current
;
}
current
=
this
.
read
(
token
,
current
);
}
else
{
this
.
view
.
adapters
[
token
[
"interface"
]].
subscribe
(
current
,
token
.
path
,
this
.
update
);
this
.
objectPath
[
index
]
=
current
;
if
(
unreached
==
null
)
{
unreached
=
index
;
}
if
(
prev
=
this
.
objectPath
[
index
])
{
this
.
set
(
false
,
token
,
prev
,
this
.
update
);
}
}
current
=
this
.
view
.
adapters
[
token
[
"interface"
]].
read
(
current
,
token
.
path
);
}
if
(
unreached
!=
null
)
{
this
.
objectPath
.
splice
(
unreached
);
}
return
current
;
};
Keypath
Observer
.
prototype
.
unobserve
=
function
()
{
var
index
,
obj
,
token
,
_i
,
_len
,
_ref
,
_results
;
_ref
=
this
.
tokens
;
Observer
.
prototype
.
unobserve
=
function
()
{
var
index
,
obj
,
token
,
_i
,
_len
,
_ref
1
,
_results
;
_ref
1
=
this
.
tokens
;
_results
=
[];
for
(
index
=
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
index
=
++
_i
)
{
token
=
_ref
[
index
];
for
(
index
=
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
index
=
++
_i
)
{
token
=
_ref
1
[
index
];
if
(
obj
=
this
.
objectPath
[
index
])
{
_results
.
push
(
this
.
view
.
adapters
[
token
[
"interface"
]].
unsubscribe
(
obj
,
token
.
path
,
this
.
update
));
_results
.
push
(
this
.
set
(
false
,
token
,
obj
,
this
.
update
));
}
else
{
_results
.
push
(
void
0
);
}
...
...
@@ -805,7 +835,7 @@
return
_results
;
};
return
Keypath
Observer
;
return
Observer
;
})();
...
...
@@ -846,9 +876,9 @@
return
Rivets
.
Util
.
unbindEvent
(
el
,
'change'
,
this
.
publish
);
},
routine
:
function
(
el
,
value
)
{
var
_ref
;
var
_ref
1
;
if
(
el
.
type
===
'radio'
)
{
return
el
.
checked
=
((
_ref
=
el
.
value
)
!=
null
?
_ref
.
toString
()
:
void
0
)
===
(
value
!=
null
?
value
.
toString
()
:
void
0
);
return
el
.
checked
=
((
_ref
1
=
el
.
value
)
!=
null
?
_ref1
.
toString
()
:
void
0
)
===
(
value
!=
null
?
value
.
toString
()
:
void
0
);
}
else
{
return
el
.
checked
=
!!
value
;
}
...
...
@@ -864,9 +894,9 @@
return
Rivets
.
Util
.
unbindEvent
(
el
,
'change'
,
this
.
publish
);
},
routine
:
function
(
el
,
value
)
{
var
_ref
;
var
_ref
1
;
if
(
el
.
type
===
'radio'
)
{
return
el
.
checked
=
((
_ref
=
el
.
value
)
!=
null
?
_ref
.
toString
()
:
void
0
)
!==
(
value
!=
null
?
value
.
toString
()
:
void
0
);
return
el
.
checked
=
((
_ref
1
=
el
.
value
)
!=
null
?
_ref1
.
toString
()
:
void
0
)
!==
(
value
!=
null
?
value
.
toString
()
:
void
0
);
}
else
{
return
el
.
checked
=
!
value
;
}
...
...
@@ -882,10 +912,10 @@
return
Rivets
.
Util
.
unbindEvent
(
el
,
'change'
,
this
.
publish
);
},
routine
:
function
(
el
,
value
)
{
var
o
,
_i
,
_len
,
_ref
,
_ref1
,
_ref2
,
_results
;
var
o
,
_i
,
_len
,
_ref
1
,
_ref2
,
_ref3
,
_results
;
if
(
window
.
jQuery
!=
null
)
{
el
=
jQuery
(
el
);
if
((
value
!=
null
?
value
.
toString
()
:
void
0
)
!==
((
_ref
=
el
.
val
())
!=
null
?
_ref
.
toString
()
:
void
0
))
{
if
((
value
!=
null
?
value
.
toString
()
:
void
0
)
!==
((
_ref
1
=
el
.
val
())
!=
null
?
_ref1
.
toString
()
:
void
0
))
{
return
el
.
val
(
value
!=
null
?
value
:
''
);
}
}
else
{
...
...
@@ -894,11 +924,11 @@
_results
=
[];
for
(
_i
=
0
,
_len
=
el
.
length
;
_i
<
_len
;
_i
++
)
{
o
=
el
[
_i
];
_results
.
push
(
o
.
selected
=
(
_ref
1
=
o
.
value
,
__indexOf
.
call
(
value
,
_ref1
)
>=
0
));
_results
.
push
(
o
.
selected
=
(
_ref
2
=
o
.
value
,
__indexOf
.
call
(
value
,
_ref2
)
>=
0
));
}
return
_results
;
}
}
else
if
((
value
!=
null
?
value
.
toString
()
:
void
0
)
!==
((
_ref
2
=
el
.
value
)
!=
null
?
_ref2
.
toString
()
:
void
0
))
{
}
else
if
((
value
!=
null
?
value
.
toString
()
:
void
0
)
!==
((
_ref
3
=
el
.
value
)
!=
null
?
_ref3
.
toString
()
:
void
0
))
{
return
el
.
value
=
value
!=
null
?
value
:
''
;
}
}
...
...
@@ -919,17 +949,17 @@
}
},
unbind
:
function
()
{
var
_ref
;
return
(
_ref
=
this
.
nested
)
!=
null
?
_ref
.
unbind
()
:
void
0
;
var
_ref
1
;
return
(
_ref
1
=
this
.
nested
)
!=
null
?
_ref1
.
unbind
()
:
void
0
;
},
routine
:
function
(
el
,
value
)
{
var
key
,
model
,
models
,
options
,
_ref
;
var
key
,
model
,
models
,
options
,
_ref
1
;
if
(
!!
value
===
(
this
.
nested
==
null
))
{
if
(
value
)
{
models
=
{};
_ref
=
this
.
view
.
models
;
for
(
key
in
_ref
)
{
model
=
_ref
[
key
];
_ref
1
=
this
.
view
.
models
;
for
(
key
in
_ref
1
)
{
model
=
_ref
1
[
key
];
models
[
key
]
=
model
;
}
options
=
{
...
...
@@ -948,8 +978,8 @@
}
},
update
:
function
(
models
)
{
var
_ref
;
return
(
_ref
=
this
.
nested
)
!=
null
?
_ref
.
update
(
models
)
:
void
0
;
var
_ref
1
;
return
(
_ref
1
=
this
.
nested
)
!=
null
?
_ref1
.
update
(
models
)
:
void
0
;
}
};
...
...
@@ -998,25 +1028,25 @@
}
},
unbind
:
function
(
el
)
{
var
view
,
_i
,
_len
,
_ref
,
_results
;
var
view
,
_i
,
_len
,
_ref
1
,
_results
;
if
(
this
.
iterated
!=
null
)
{
_ref
=
this
.
iterated
;
_ref
1
=
this
.
iterated
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
view
=
_ref
[
_i
];
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
view
=
_ref
1
[
_i
];
_results
.
push
(
view
.
unbind
());
}
return
_results
;
}
},
routine
:
function
(
el
,
collection
)
{
var
binding
,
data
,
i
,
index
,
k
,
key
,
model
,
modelName
,
options
,
previous
,
template
,
v
,
view
,
_i
,
_j
,
_k
,
_len
,
_len1
,
_len2
,
_ref
,
_ref1
,
_ref2
,
_ref3
,
_results
;
var
binding
,
data
,
i
,
index
,
k
,
key
,
model
,
modelName
,
options
,
previous
,
template
,
v
,
view
,
_i
,
_j
,
_k
,
_len
,
_len1
,
_len2
,
_ref
1
,
_ref2
,
_ref3
,
_ref4
,
_results
;
modelName
=
this
.
args
[
0
];
collection
=
collection
||
[];
if
(
this
.
iterated
.
length
>
collection
.
length
)
{
_ref
=
Array
(
this
.
iterated
.
length
-
collection
.
length
);
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
i
=
_ref
[
_i
];
_ref
1
=
Array
(
this
.
iterated
.
length
-
collection
.
length
);
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
i
=
_ref
1
[
_i
];
view
=
this
.
iterated
.
pop
();
view
.
unbind
();
this
.
marker
.
parentNode
.
removeChild
(
view
.
els
[
0
]);
...
...
@@ -1027,9 +1057,9 @@
data
=
{};
data
[
modelName
]
=
model
;
if
(
this
.
iterated
[
index
]
==
null
)
{
_ref
1
=
this
.
view
.
models
;
for
(
key
in
_ref
1
)
{
model
=
_ref
1
[
key
];
_ref
2
=
this
.
view
.
models
;
for
(
key
in
_ref
2
)
{
model
=
_ref
2
[
key
];
if
(
data
[
key
]
==
null
)
{
data
[
key
]
=
model
;
}
...
...
@@ -1041,9 +1071,9 @@
adapters
:
this
.
view
.
options
.
adapters
,
config
:
{}
};
_ref
2
=
this
.
view
.
options
.
config
;
for
(
k
in
_ref
2
)
{
v
=
_ref
2
[
k
];
_ref
3
=
this
.
view
.
options
.
config
;
for
(
k
in
_ref
3
)
{
v
=
_ref
3
[
k
];
options
.
config
[
k
]
=
v
;
}
options
.
config
.
preloadData
=
true
;
...
...
@@ -1057,10 +1087,10 @@
}
}
if
(
el
.
nodeName
===
'OPTION'
)
{
_ref
3
=
this
.
view
.
bindings
;
_ref
4
=
this
.
view
.
bindings
;
_results
=
[];
for
(
_k
=
0
,
_len2
=
_ref
3
.
length
;
_k
<
_len2
;
_k
++
)
{
binding
=
_ref
3
[
_k
];
for
(
_k
=
0
,
_len2
=
_ref
4
.
length
;
_k
<
_len2
;
_k
++
)
{
binding
=
_ref
4
[
_k
];
if
(
binding
.
el
===
this
.
marker
.
parentNode
&&
binding
.
type
===
'value'
)
{
_results
.
push
(
binding
.
sync
());
}
else
{
...
...
@@ -1071,7 +1101,7 @@
}
},
update
:
function
(
models
)
{
var
data
,
key
,
model
,
view
,
_i
,
_len
,
_ref
,
_results
;
var
data
,
key
,
model
,
view
,
_i
,
_len
,
_ref
1
,
_results
;
data
=
{};
for
(
key
in
models
)
{
model
=
models
[
key
];
...
...
@@ -1079,10 +1109,10 @@
data
[
key
]
=
model
;
}
}
_ref
=
this
.
iterated
;
_ref
1
=
this
.
iterated
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
view
=
_ref
[
_i
];
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
view
=
_ref
1
[
_i
];
_results
.
push
(
view
.
update
(
data
));
}
return
_results
;
...
...
@@ -1128,14 +1158,14 @@
map
=
this
.
weakReference
(
obj
);
weakmap
=
this
.
weakmap
;
return
obj
[
fn
]
=
function
()
{
var
callback
,
k
,
r
,
response
,
_i
,
_len
,
_ref
,
_ref1
,
_ref2
,
_ref3
;
var
callback
,
k
,
r
,
response
,
_i
,
_len
,
_ref
1
,
_ref2
,
_ref3
,
_ref4
;
response
=
original
.
apply
(
obj
,
arguments
);
_ref
=
map
.
pointers
;
for
(
r
in
_ref
)
{
k
=
_ref
[
r
];
_ref
3
=
(
_ref1
=
(
_ref2
=
weakmap
[
r
])
!=
null
?
_ref2
.
callbacks
[
k
]
:
void
0
)
!=
null
?
_ref1
:
[];
for
(
_i
=
0
,
_len
=
_ref
3
.
length
;
_i
<
_len
;
_i
++
)
{
callback
=
_ref
3
[
_i
];
_ref
1
=
map
.
pointers
;
for
(
r
in
_ref
1
)
{
k
=
_ref
1
[
r
];
_ref
4
=
(
_ref2
=
(
_ref3
=
weakmap
[
r
])
!=
null
?
_ref3
.
callbacks
[
k
]
:
void
0
)
!=
null
?
_ref2
:
[];
for
(
_i
=
0
,
_len
=
_ref
4
.
length
;
_i
<
_len
;
_i
++
)
{
callback
=
_ref
4
[
_i
];
callback
();
}
}
...
...
@@ -1163,9 +1193,9 @@
}
},
unobserveMutations
:
function
(
obj
,
ref
,
keypath
)
{
var
keypaths
,
_ref
;
var
keypaths
,
_ref
1
;
if
(
Array
.
isArray
(
obj
&&
(
obj
[
this
.
id
]
!=
null
)))
{
if
(
keypaths
=
(
_ref
=
this
.
weakReference
(
obj
).
pointers
)
!=
null
?
_ref
[
ref
]
:
void
0
)
{
if
(
keypaths
=
(
_ref
1
=
this
.
weakReference
(
obj
).
pointers
)
!=
null
?
_ref1
[
ref
]
:
void
0
)
{
return
keypaths
.
splice
(
keypaths
.
indexOf
(
keypath
),
1
);
}
}
...
...
@@ -1182,12 +1212,12 @@
return
value
;
},
set
:
function
(
newValue
)
{
var
_i
,
_len
,
_ref
;
var
_i
,
_len
,
_ref
1
;
if
(
newValue
!==
value
)
{
value
=
newValue
;
_ref
=
callbacks
[
keypath
];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
callback
=
_ref
[
_i
];
_ref
1
=
callbacks
[
keypath
];
for
(
_i
=
0
,
_len
=
_ref
1
.
length
;
_i
<
_len
;
_i
++
)
{
callback
=
_ref
1
[
_i
];
callback
();
}
return
_this
.
observeMutations
(
newValue
,
obj
[
_this
.
id
],
keypath
);
...
...
dist/rivets.min.js
View file @
39df93d
// Rivets.js
// version: 0.6.
5
// version: 0.6.
6
// author: Michael Richards
// license: MIT
(
function
(){
var
a
,
b
=
function
(
a
,
b
){
return
function
(){
return
a
.
apply
(
b
,
arguments
)}},
c
=
[].
indexOf
||
function
(
a
){
for
(
var
b
=
0
,
c
=
this
.
length
;
c
>
b
;
b
++
)
if
(
b
in
this
&&
this
[
b
]
===
a
)
return
b
;
return
-
1
},
d
=
[].
slice
,
e
=
{}.
hasOwnProperty
,
f
=
function
(
a
,
b
){
function
c
(){
this
.
constructor
=
a
}
for
(
var
d
in
b
)
e
.
call
(
b
,
d
)
&&
(
a
[
d
]
=
b
[
d
]);
return
c
.
prototype
=
b
.
prototype
,
a
.
prototype
=
new
c
,
a
.
__super__
=
b
.
prototype
,
a
};
a
=
{
binders
:{},
components
:{},
formatters
:{},
adapters
:{},
config
:{
prefix
:
"rv"
,
templateDelimiters
:[
"{"
,
"}"
],
rootInterface
:
"."
,
preloadData
:
!
0
,
handler
:
function
(
a
,
b
,
c
){
return
this
.
call
(
a
,
b
,
c
.
view
.
models
)}}},
a
.
Util
=
{
bindEvent
:
function
(
a
,
b
,
c
){
return
null
!=
window
.
jQuery
?(
a
=
jQuery
(
a
),
null
!=
a
.
on
?
a
.
on
(
b
,
c
):
a
.
bind
(
b
,
c
)):
null
!=
window
.
addEventListener
?
a
.
addEventListener
(
b
,
c
,
!
1
):(
b
=
"on"
+
b
,
a
.
attachEvent
(
b
,
c
))},
unbindEvent
:
function
(
a
,
b
,
c
){
return
null
!=
window
.
jQuery
?(
a
=
jQuery
(
a
),
null
!=
a
.
off
?
a
.
off
(
b
,
c
):
a
.
unbind
(
b
,
c
)):
null
!=
window
.
removeEventListener
?
a
.
removeEventListener
(
b
,
c
,
!
1
):(
b
=
"on"
+
b
,
a
.
detachEvent
(
b
,
c
))},
getInputValue
:
function
(
a
){
var
b
,
c
,
d
,
e
;
if
(
null
!=
window
.
jQuery
)
switch
(
a
=
jQuery
(
a
),
a
[
0
].
type
){
case
"checkbox"
:
return
a
.
is
(
":checked"
);
default
:
return
a
.
val
()}
else
switch
(
a
.
type
){
case
"checkbox"
:
return
a
.
checked
;
case
"select-multiple"
:
for
(
e
=
[],
c
=
0
,
d
=
a
.
length
;
d
>
c
;
c
++
)
b
=
a
[
c
],
b
.
selected
&&
e
.
push
(
b
.
value
);
return
e
;
default
:
return
a
.
value
}}},
a
.
View
=
function
(){
function
d
(
c
,
d
,
e
){
var
f
,
g
,
h
,
i
,
j
,
k
,
l
,
m
,
n
;
for
(
this
.
els
=
c
,
this
.
models
=
d
,
this
.
options
=
null
!=
e
?
e
:{},
this
.
update
=
b
(
this
.
update
,
this
),
this
.
publish
=
b
(
this
.
publish
,
this
),
this
.
sync
=
b
(
this
.
sync
,
this
),
this
.
unbind
=
b
(
this
.
unbind
,
this
),
this
.
bind
=
b
(
this
.
bind
,
this
),
this
.
select
=
b
(
this
.
select
,
this
),
this
.
build
=
b
(
this
.
build
,
this
),
this
.
componentRegExp
=
b
(
this
.
componentRegExp
,
this
),
this
.
bindingRegExp
=
b
(
this
.
bindingRegExp
,
this
),
this
.
els
.
jquery
||
this
.
els
instanceof
Array
||
(
this
.
els
=
[
this
.
els
]),
l
=
[
"config"
,
"binders"
,
"formatters"
,
"adapters"
],
j
=
0
,
k
=
l
.
length
;
k
>
j
;
j
++
){
if
(
g
=
l
[
j
],
this
[
g
]
=
{},
this
.
options
[
g
]){
m
=
this
.
options
[
g
];
for
(
f
in
m
)
h
=
m
[
f
],
this
[
g
][
f
]
=
h
}
n
=
a
[
g
];
for
(
f
in
n
)
h
=
n
[
f
],
null
==
(
i
=
this
[
g
])[
f
]
&&
(
i
[
f
]
=
h
)}
this
.
build
()}
return
d
.
prototype
.
bindingRegExp
=
function
(){
return
new
RegExp
(
"^"
+
this
.
config
.
prefix
+
"-"
)},
d
.
prototype
.
componentRegExp
=
function
(){
return
new
RegExp
(
"^"
+
this
.
config
.
prefix
.
toUpperCase
()
+
"-"
)},
d
.
prototype
.
build
=
function
(){
var
b
,
d
,
e
,
f
,
g
,
h
,
i
,
j
,
k
,
l
=
this
;
for
(
this
.
bindings
=
[],
h
=
[],
b
=
this
.
bindingRegExp
(),
e
=
this
.
componentRegExp
(),
d
=
function
(
b
,
c
,
d
,
e
){
var
f
,
g
,
h
,
i
,
j
,
k
,
m
;
return
j
=
{},
m
=
function
(){
var
a
,
b
,
c
,
d
;
for
(
c
=
e
.
split
(
"|"
),
d
=
[],
a
=
0
,
b
=
c
.
length
;
b
>
a
;
a
++
)
k
=
c
[
a
],
d
.
push
(
k
.
trim
());
return
d
}(),
f
=
function
(){
var
a
,
b
,
c
,
d
;
for
(
c
=
m
.
shift
().
split
(
"<"
),
d
=
[],
a
=
0
,
b
=
c
.
length
;
b
>
a
;
a
++
)
g
=
c
[
a
],
d
.
push
(
g
.
trim
());
return
d
}(),
i
=
f
.
shift
(),
j
.
formatters
=
m
,(
h
=
f
.
shift
())
&&
(
j
.
dependencies
=
h
.
split
(
/
\s
+/
)),
l
.
bindings
.
push
(
new
a
[
b
](
l
,
c
,
d
,
i
,
j
))},
g
=
function
(
f
){
var
i
,
j
,
k
,
m
,
n
,
o
,
p
,
q
,
r
,
s
,
t
,
u
,
v
,
w
,
x
,
y
,
z
,
A
,
B
,
C
,
D
,
E
,
F
,
G
,
H
,
I
,
J
,
K
,
L
,
M
;
if
(
c
.
call
(
h
,
f
)
<
0
){
if
(
3
===
f
.
nodeType
){
if
(
q
=
a
.
TextTemplateParser
,(
n
=
l
.
config
.
templateDelimiters
)
&&
(
u
=
q
.
parse
(
f
.
data
,
n
)).
length
&&
(
1
!==
u
.
length
||
u
[
0
].
type
!==
q
.
types
.
text
)){
for
(
x
=
0
,
B
=
u
.
length
;
B
>
x
;
x
++
)
t
=
u
[
x
],
s
=
document
.
createTextNode
(
t
.
value
),
f
.
parentNode
.
insertBefore
(
s
,
f
),
1
===
t
.
type
&&
d
(
"TextBinding"
,
s
,
null
,
t
.
value
);
f
.
parentNode
.
removeChild
(
f
)}}
else
if
(
e
.
test
(
f
.
tagName
))
v
=
f
.
tagName
.
replace
(
e
,
""
).
toLowerCase
(),
l
.
bindings
.
push
(
new
a
.
ComponentBinding
(
l
,
f
,
v
));
else
if
(
null
!=
f
.
attributes
){
for
(
H
=
f
.
attributes
,
y
=
0
,
C
=
H
.
length
;
C
>
y
;
y
++
)
if
(
i
=
H
[
y
],
b
.
test
(
i
.
name
)){
if
(
v
=
i
.
name
.
replace
(
b
,
""
),
!
(
k
=
l
.
binders
[
v
])){
I
=
l
.
binders
;
for
(
o
in
I
)
w
=
I
[
o
],
"*"
!==
o
&&-
1
!==
o
.
indexOf
(
"*"
)
&&
(
r
=
new
RegExp
(
"^"
+
o
.
replace
(
"*"
,
".+"
)
+
"$"
),
r
.
test
(
v
)
&&
(
k
=
w
))}
if
(
k
||
(
k
=
l
.
binders
[
"*"
]),
k
.
block
){
for
(
J
=
f
.
childNodes
,
z
=
0
,
D
=
J
.
length
;
D
>
z
;
z
++
)
p
=
J
[
z
],
h
.
push
(
p
);
j
=
[
i
]}}
for
(
K
=
j
||
f
.
attributes
,
A
=
0
,
E
=
K
.
length
;
E
>
A
;
A
++
)
i
=
K
[
A
],
b
.
test
(
i
.
name
)
&&
(
v
=
i
.
name
.
replace
(
b
,
""
),
d
(
"Binding"
,
f
,
v
,
i
.
value
))}
for
(
L
=
function
(){
var
a
,
b
,
c
,
d
;
for
(
c
=
f
.
childNodes
,
d
=
[],
b
=
0
,
a
=
c
.
length
;
a
>
b
;
b
++
)
p
=
c
[
b
],
d
.
push
(
p
);
return
d
}(),
M
=
[],
G
=
0
,
F
=
L
.
length
;
F
>
G
;
G
++
)
m
=
L
[
G
],
M
.
push
(
g
(
m
));
return
M
}},
k
=
this
.
els
,
i
=
0
,
j
=
k
.
length
;
j
>
i
;
i
++
)
f
=
k
[
i
],
g
(
f
)},
d
.
prototype
.
select
=
function
(
a
){
var
b
,
c
,
d
,
e
,
f
;
for
(
e
=
this
.
bindings
,
f
=
[],
c
=
0
,
d
=
e
.
length
;
d
>
c
;
c
++
)
b
=
e
[
c
],
a
(
b
)
&&
f
.
push
(
b
);
return
f
},
d
.
prototype
.
bind
=
function
(){
var
a
,
b
,
c
,
d
,
e
;
for
(
d
=
this
.
bindings
,
e
=
[],
b
=
0
,
c
=
d
.
length
;
c
>
b
;
b
++
)
a
=
d
[
b
],
e
.
push
(
a
.
bind
());
return
e
},
d
.
prototype
.
unbind
=
function
(){
var
a
,
b
,
c
,
d
,
e
;
for
(
d
=
this
.
bindings
,
e
=
[],
b
=
0
,
c
=
d
.
length
;
c
>
b
;
b
++
)
a
=
d
[
b
],
e
.
push
(
a
.
unbind
());
return
e
},
d
.
prototype
.
sync
=
function
(){
var
a
,
b
,
c
,
d
,
e
;
for
(
d
=
this
.
bindings
,
e
=
[],
b
=
0
,
c
=
d
.
length
;
c
>
b
;
b
++
)
a
=
d
[
b
],
e
.
push
(
a
.
sync
());
return
e
},
d
.
prototype
.
publish
=
function
(){
var
a
,
b
,
c
,
d
,
e
;
for
(
d
=
this
.
select
(
function
(
a
){
return
a
.
binder
.
publishes
}),
e
=
[],
b
=
0
,
c
=
d
.
length
;
c
>
b
;
b
++
)
a
=
d
[
b
],
e
.
push
(
a
.
publish
());
return
e
},
d
.
prototype
.
update
=
function
(
a
){
var
b
,
c
,
d
,
e
,
f
,
g
,
h
;
null
==
a
&&
(
a
=
{});
for
(
c
in
a
)
d
=
a
[
c
],
this
.
models
[
c
]
=
d
;
for
(
g
=
this
.
bindings
,
h
=
[],
e
=
0
,
f
=
g
.
length
;
f
>
e
;
e
++
)
b
=
g
[
e
],
h
.
push
(
b
.
update
(
a
));
return
h
},
d
}(),
a
.
Binding
=
function
(){
function
c
(
a
,
c
,
d
,
e
,
f
){
this
.
view
=
a
,
this
.
el
=
c
,
this
.
type
=
d
,
this
.
keypath
=
e
,
this
.
options
=
null
!=
f
?
f
:{},
this
.
update
=
b
(
this
.
update
,
this
),
this
.
unbind
=
b
(
this
.
unbind
,
this
),
this
.
bind
=
b
(
this
.
bind
,
this
),
this
.
publish
=
b
(
this
.
publish
,
this
),
this
.
sync
=
b
(
this
.
sync
,
this
),
this
.
set
=
b
(
this
.
set
,
this
),
this
.
eventHandler
=
b
(
this
.
eventHandler
,
this
),
this
.
formattedValue
=
b
(
this
.
formattedValue
,
this
),
this
.
setObserver
=
b
(
this
.
setObserver
,
this
),
this
.
setBinder
=
b
(
this
.
setBinder
,
this
),
this
.
formatters
=
this
.
options
.
formatters
||
[],
this
.
dependencies
=
[],
this
.
setBinder
(),
this
.
setObserver
()}
return
c
.
prototype
.
setBinder
=
function
(){
var
a
,
b
,
c
,
d
;
if
(
!
(
this
.
binder
=
this
.
view
.
binders
[
this
.
type
])){
d
=
this
.
view
.
binders
;
for
(
a
in
d
)
c
=
d
[
a
],
"*"
!==
a
&&-
1
!==
a
.
indexOf
(
"*"
)
&&
(
b
=
new
RegExp
(
"^"
+
a
.
replace
(
"*"
,
".+"
)
+
"$"
),
b
.
test
(
this
.
type
)
&&
(
this
.
binder
=
c
,
this
.
args
=
new
RegExp
(
"^"
+
a
.
replace
(
"*"
,
"(.+)"
)
+
"$"
).
exec
(
this
.
type
),
this
.
args
.
shift
()))}
return
this
.
binder
||
(
this
.
binder
=
this
.
view
.
binders
[
"*"
]),
this
.
binder
instanceof
Function
?
this
.
binder
=
{
routine
:
this
.
binder
}:
void
0
},
c
.
prototype
.
setObserver
=
function
(){
var
b
=
this
;
return
this
.
observer
=
new
a
.
KeypathObserver
(
this
.
view
,
this
.
view
.
models
,
this
.
keypath
,
function
(
a
){
return
b
.
key
&&
b
.
unbind
(
!
0
),
b
.
model
=
a
.
target
,
b
.
key
&&
b
.
bind
(
!
0
),
b
.
sync
()}),
this
.
key
=
this
.
observer
.
key
,
this
.
model
=
this
.
observer
.
target
},
c
.
prototype
.
formattedValue
=
function
(
a
){
var
b
,
c
,
e
,
f
,
g
,
h
;
for
(
h
=
this
.
formatters
,
f
=
0
,
g
=
h
.
length
;
g
>
f
;
f
++
)
c
=
h
[
f
],
b
=
c
.
split
(
/
\s
+/
),
e
=
b
.
shift
(),
c
=
this
.
view
.
formatters
[
e
],(
null
!=
c
?
c
.
read
:
void
0
)
instanceof
Function
?
a
=
c
.
read
.
apply
(
c
,[
a
].
concat
(
d
.
call
(
b
))):
c
instanceof
Function
&&
(
a
=
c
.
apply
(
null
,[
a
].
concat
(
d
.
call
(
b
))));
return
a
},
c
.
prototype
.
eventHandler
=
function
(
a
){
var
b
,
c
;
return
c
=
(
b
=
this
).
view
.
config
.
handler
,
function
(
d
){
return
c
.
call
(
a
,
this
,
d
,
b
)}},
c
.
prototype
.
set
=
function
(
a
){
var
b
;
return
a
=
a
instanceof
Function
&&!
this
.
binder
[
"function"
]?
this
.
formattedValue
(
a
.
call
(
this
.
model
)):
this
.
formattedValue
(
a
),
null
!=
(
b
=
this
.
binder
.
routine
)?
b
.
call
(
this
,
this
.
el
,
a
):
void
0
},
c
.
prototype
.
sync
=
function
(){
return
this
.
set
(
this
.
key
?
this
.
view
.
adapters
[
this
.
key
[
"interface"
]].
read
(
this
.
model
,
this
.
key
.
path
):
this
.
model
)},
c
.
prototype
.
publish
=
function
(){
var
b
,
c
,
e
,
f
,
g
,
h
,
i
,
j
,
k
;
for
(
f
=
a
.
Util
.
getInputValue
(
this
.
el
),
i
=
this
.
formatters
.
slice
(
0
).
reverse
(),
g
=
0
,
h
=
i
.
length
;
h
>
g
;
g
++
)
c
=
i
[
g
],
b
=
c
.
split
(
/
\s
+/
),
e
=
b
.
shift
(),(
null
!=
(
j
=
this
.
view
.
formatters
[
e
])?
j
.
publish
:
void
0
)
&&
(
f
=
(
k
=
this
.
view
.
formatters
[
e
]).
publish
.
apply
(
k
,[
f
].
concat
(
d
.
call
(
b
))));
return
this
.
view
.
adapters
[
this
.
key
[
"interface"
]].
publish
(
this
.
model
,
this
.
key
.
path
,
f
)},
c
.
prototype
.
bind
=
function
(
b
){
var
c
,
d
,
e
,
f
,
g
,
h
,
i
,
j
,
k
,
l
=
this
;
if
(
null
==
b
&&
(
b
=!
1
),
b
||
null
!=
(
h
=
this
.
binder
.
bind
)
&&
h
.
call
(
this
,
this
.
el
),
this
.
key
&&
this
.
view
.
adapters
[
this
.
key
[
"interface"
]].
subscribe
(
this
.
model
,
this
.
key
.
path
,
this
.
sync
),(
b
?
void
0
:
this
.
view
.
config
.
preloadData
)
&&
this
.
sync
(),
null
!=
(
i
=
this
.
options
.
dependencies
)?
i
.
length
:
void
0
){
for
(
j
=
this
.
options
.
dependencies
,
k
=
[],
f
=
0
,
g
=
j
.
length
;
g
>
f
;
f
++
)
c
=
j
[
f
],
e
=
new
a
.
KeypathObserver
(
this
.
view
,
this
.
model
,
c
,
function
(
a
,
b
){
var
c
;
return
c
=
a
.
key
,
l
.
view
.
adapters
[
c
[
"interface"
]].
unsubscribe
(
b
,
c
.
path
,
l
.
sync
),
l
.
view
.
adapters
[
c
[
"interface"
]].
subscribe
(
a
.
target
,
c
.
path
,
l
.
sync
),
l
.
sync
()}),
d
=
e
.
key
,
this
.
view
.
adapters
[
d
[
"interface"
]].
subscribe
(
e
.
target
,
d
.
path
,
this
.
sync
),
k
.
push
(
this
.
dependencies
.
push
(
e
));
return
k
}},
c
.
prototype
.
unbind
=
function
(
a
){
var
b
,
c
,
d
,
e
,
f
,
g
;
if
(
null
==
a
&&
(
a
=!
1
),
a
||
(
null
!=
(
f
=
this
.
binder
.
unbind
)
&&
f
.
call
(
this
,
this
.
el
),
this
.
observer
.
unobserve
()),
this
.
key
&&
this
.
view
.
adapters
[
this
.
key
[
"interface"
]].
unsubscribe
(
this
.
model
,
this
.
key
.
path
,
this
.
sync
),
this
.
dependencies
.
length
){
for
(
g
=
this
.
dependencies
,
d
=
0
,
e
=
g
.
length
;
e
>
d
;
d
++
)
c
=
g
[
d
],
b
=
c
.
key
,
this
.
view
.
adapters
[
b
[
"interface"
]].
unsubscribe
(
c
.
target
,
b
.
path
,
this
.
sync
);
return
this
.
dependencies
=
[]}},
c
.
prototype
.
update
=
function
(
a
){
var
b
;
return
null
==
a
&&
(
a
=
{}),
null
!=
(
b
=
this
.
binder
.
update
)?
b
.
call
(
this
,
a
):
void
0
},
c
}(),
a
.
ComponentBinding
=
function
(
d
){
function
e
(
d
,
e
,
f
){
var
g
,
h
,
i
,
j
,
k
;
for
(
this
.
view
=
d
,
this
.
el
=
e
,
this
.
type
=
f
,
this
.
unbind
=
b
(
this
.
unbind
,
this
),
this
.
bind
=
b
(
this
.
bind
,
this
),
this
.
update
=
b
(
this
.
update
,
this
),
this
.
locals
=
b
(
this
.
locals
,
this
),
this
.
component
=
a
.
components
[
this
.
type
],
this
.
attributes
=
{},
this
.
inflections
=
{},
j
=
this
.
el
.
attributes
||
[],
h
=
0
,
i
=
j
.
length
;
i
>
h
;
h
++
)
g
=
j
[
h
],
k
=
g
.
name
,
c
.
call
(
this
.
component
.
attributes
,
k
)
>=
0
?
this
.
attributes
[
g
.
name
]
=
g
.
value
:
this
.
inflections
[
g
.
name
]
=
g
.
value
}
return
f
(
e
,
d
),
e
.
prototype
.
sync
=
function
(){},
e
.
prototype
.
locals
=
function
(
a
){
var
b
,
c
,
d
,
e
,
f
,
g
,
h
,
i
,
j
;
null
==
a
&&
(
a
=
this
.
view
.
models
),
f
=
{},
i
=
this
.
inflections
;
for
(
c
in
i
)
for
(
b
=
i
[
c
],
j
=
b
.
split
(
"."
),
g
=
0
,
h
=
j
.
length
;
h
>
g
;
g
++
)
e
=
j
[
g
],
f
[
c
]
=
(
f
[
c
]
||
a
)[
e
];
for
(
c
in
a
)
d
=
a
[
c
],
null
==
f
[
c
]
&&
(
f
[
c
]
=
d
);
return
f
},
e
.
prototype
.
update
=
function
(
a
){
var
b
;
return
null
!=
(
b
=
this
.
componentView
)?
b
.
update
(
this
.
locals
(
a
)):
void
0
},
e
.
prototype
.
bind
=
function
(){
var
b
,
c
;
return
null
!=
this
.
componentView
?
null
!=
(
c
=
this
.
componentView
)?
c
.
bind
():
void
0
:(
b
=
this
.
component
.
build
.
call
(
this
.
attributes
),(
this
.
componentView
=
new
a
.
View
(
b
,
this
.
locals
(),
this
.
view
.
options
)).
bind
(),
this
.
el
.
parentNode
.
replaceChild
(
b
,
this
.
el
))},
e
.
prototype
.
unbind
=
function
(){
var
a
;
return
null
!=
(
a
=
this
.
componentView
)?
a
.
unbind
():
void
0
},
e
}(
a
.
Binding
),
a
.
TextBinding
=
function
(
a
){
function
c
(
a
,
c
,
d
,
e
,
f
){
this
.
view
=
a
,
this
.
el
=
c
,
this
.
type
=
d
,
this
.
keypath
=
e
,
this
.
options
=
null
!=
f
?
f
:{},
this
.
sync
=
b
(
this
.
sync
,
this
),
this
.
formatters
=
this
.
options
.
formatters
||
[],
this
.
dependencies
=
[],
this
.
setObserver
()}
return
f
(
c
,
a
),
c
.
prototype
.
binder
=
{
routine
:
function
(
a
,
b
){
return
a
.
data
=
null
!=
b
?
b
:
""
}},
c
.
prototype
.
sync
=
function
(){
return
c
.
__super__
.
sync
.
apply
(
this
,
arguments
)},
c
}(
a
.
Binding
),
a
.
KeypathParser
=
function
(){
function
a
(){}
return
a
.
parse
=
function
(
a
,
b
,
d
){
var
e
,
f
,
g
,
h
,
i
;
for
(
g
=
[],
f
=
{
"interface"
:
d
,
path
:
""
},
h
=
0
,
i
=
a
.
length
;
i
>
h
;
h
++
)
e
=
a
[
h
],
c
.
call
(
b
,
e
)
>=
0
?(
g
.
push
(
f
),
f
=
{
"interface"
:
e
,
path
:
""
}):
f
.
path
+=
e
;
return
g
.
push
(
f
),
g
},
a
}(),
a
.
TextTemplateParser
=
function
(){
function
a
(){}
return
a
.
types
=
{
text
:
0
,
binding
:
1
},
a
.
parse
=
function
(
a
,
b
){
var
c
,
d
,
e
,
f
,
g
,
h
,
i
;
for
(
h
=
[],
f
=
a
.
length
,
c
=
0
,
d
=
0
;
f
>
d
;){
if
(
c
=
a
.
indexOf
(
b
[
0
],
d
),
0
>
c
){
h
.
push
({
type
:
this
.
types
.
text
,
value
:
a
.
slice
(
d
)});
break
}
if
(
c
>
0
&&
c
>
d
&&
h
.
push
({
type
:
this
.
types
.
text
,
value
:
a
.
slice
(
d
,
c
)}),
d
=
c
+
b
[
0
].
length
,
c
=
a
.
indexOf
(
b
[
1
],
d
),
0
>
c
){
g
=
a
.
slice
(
d
-
b
[
1
].
length
),
e
=
h
[
h
.
length
-
1
],(
null
!=
e
?
e
.
type
:
void
0
)
===
this
.
types
.
text
?
e
.
value
+=
g
:
h
.
push
({
type
:
this
.
types
.
text
,
value
:
g
});
break
}
i
=
a
.
slice
(
d
,
c
).
trim
(),
h
.
push
({
type
:
this
.
types
.
binding
,
value
:
i
}),
d
=
c
+
b
[
1
].
length
}
return
h
},
a
}(),
a
.
KeypathObserver
=
function
(){
function
d
(
a
,
c
,
d
,
e
){
this
.
view
=
a
,
this
.
model
=
c
,
this
.
keypath
=
d
,
this
.
callback
=
e
,
this
.
unobserve
=
b
(
this
.
unobserve
,
this
),
this
.
realize
=
b
(
this
.
realize
,
this
),
this
.
update
=
b
(
this
.
update
,
this
),
this
.
parse
=
b
(
this
.
parse
,
this
),
this
.
parse
(),
this
.
objectPath
=
[],
this
.
target
=
this
.
realize
()}
return
d
.
prototype
.
parse
=
function
(){
var
b
,
d
,
e
,
f
,
g
,
h
;
return
b
=
function
(){
var
a
,
b
;
a
=
this
.
view
.
adapters
,
b
=
[];
for
(
d
in
a
)
g
=
a
[
d
],
b
.
push
(
d
);
return
b
}.
call
(
this
),
h
=
this
.
keypath
[
0
],
c
.
call
(
b
,
h
)
>=
0
?(
f
=
this
.
keypath
[
0
],
e
=
this
.
keypath
.
substr
(
1
)):(
f
=
this
.
view
.
config
.
rootInterface
,
e
=
this
.
keypath
),
this
.
tokens
=
a
.
KeypathParser
.
parse
(
e
,
b
,
f
),
this
.
key
=
this
.
tokens
.
pop
()},
d
.
prototype
.
update
=
function
(){
var
a
,
b
;
return
(
a
=
this
.
realize
())
!==
this
.
target
?(
b
=
this
.
target
,
this
.
target
=
a
,
this
.
callback
(
this
,
b
)):
void
0
},
d
.
prototype
.
realize
=
function
(){
var
a
,
b
,
c
,
d
,
e
,
f
,
g
;
for
(
a
=
this
.
model
,
g
=
this
.
tokens
,
b
=
e
=
0
,
f
=
g
.
length
;
f
>
e
;
b
=++
e
)
d
=
g
[
b
],
null
!=
this
.
objectPath
[
b
]?
a
!==
(
c
=
this
.
objectPath
[
b
])
&&
(
this
.
view
.
adapters
[
d
[
"interface"
]].
unsubscribe
(
c
,
d
.
path
,
this
.
update
),
this
.
view
.
adapters
[
d
[
"interface"
]].
subscribe
(
a
,
d
.
path
,
this
.
update
),
this
.
objectPath
[
b
]
=
a
):(
this
.
view
.
adapters
[
d
[
"interface"
]].
subscribe
(
a
,
d
.
path
,
this
.
update
),
this
.
objectPath
[
b
]
=
a
),
a
=
this
.
view
.
adapters
[
d
[
"interface"
]].
read
(
a
,
d
.
path
);
return
a
},
d
.
prototype
.
unobserve
=
function
(){
var
a
,
b
,
c
,
d
,
e
,
f
,
g
;
for
(
f
=
this
.
tokens
,
g
=
[],
a
=
d
=
0
,
e
=
f
.
length
;
e
>
d
;
a
=++
d
)
c
=
f
[
a
],(
b
=
this
.
objectPath
[
a
])?
g
.
push
(
this
.
view
.
adapters
[
c
[
"interface"
]].
unsubscribe
(
b
,
c
.
path
,
this
.
update
)):
g
.
push
(
void
0
);
return
g
},
d
}(),
a
.
binders
.
text
=
function
(
a
,
b
){
return
null
!=
a
.
textContent
?
a
.
textContent
=
null
!=
b
?
b
:
""
:
a
.
innerText
=
null
!=
b
?
b
:
""
},
a
.
binders
.
html
=
function
(
a
,
b
){
return
a
.
innerHTML
=
null
!=
b
?
b
:
""
},
a
.
binders
.
show
=
function
(
a
,
b
){
return
a
.
style
.
display
=
b
?
""
:
"none"
},
a
.
binders
.
hide
=
function
(
a
,
b
){
return
a
.
style
.
display
=
b
?
"none"
:
""
},
a
.
binders
.
enabled
=
function
(
a
,
b
){
return
a
.
disabled
=!
b
},
a
.
binders
.
disabled
=
function
(
a
,
b
){
return
a
.
disabled
=!!
b
},
a
.
binders
.
checked
=
{
publishes
:
!
0
,
bind
:
function
(
b
){
return
a
.
Util
.
bindEvent
(
b
,
"change"
,
this
.
publish
)},
unbind
:
function
(
b
){
return
a
.
Util
.
unbindEvent
(
b
,
"change"
,
this
.
publish
)},
routine
:
function
(
a
,
b
){
var
c
;
return
a
.
checked
=
"radio"
===
a
.
type
?(
null
!=
(
c
=
a
.
value
)?
c
.
toString
():
void
0
)
===
(
null
!=
b
?
b
.
toString
():
void
0
):
!!
b
}},
a
.
binders
.
unchecked
=
{
publishes
:
!
0
,
bind
:
function
(
b
){
return
a
.
Util
.
bindEvent
(
b
,
"change"
,
this
.
publish
)},
unbind
:
function
(
b
){
return
a
.
Util
.
unbindEvent
(
b
,
"change"
,
this
.
publish
)},
routine
:
function
(
a
,
b
){
var
c
;
return
a
.
checked
=
"radio"
===
a
.
type
?(
null
!=
(
c
=
a
.
value
)?
c
.
toString
():
void
0
)
!==
(
null
!=
b
?
b
.
toString
():
void
0
):
!
b
}},
a
.
binders
.
value
=
{
publishes
:
!
0
,
bind
:
function
(
b
){
return
a
.
Util
.
bindEvent
(
b
,
"change"
,
this
.
publish
)},
unbind
:
function
(
b
){
return
a
.
Util
.
unbindEvent
(
b
,
"change"
,
this
.
publish
)},
routine
:
function
(
a
,
b
){
var
d
,
e
,
f
,
g
,
h
,
i
,
j
;
if
(
null
!=
window
.
jQuery
){
if
(
a
=
jQuery
(
a
),(
null
!=
b
?
b
.
toString
():
void
0
)
!==
(
null
!=
(
g
=
a
.
val
())?
g
.
toString
():
void
0
))
return
a
.
val
(
null
!=
b
?
b
:
""
)}
else
if
(
"select-multiple"
===
a
.
type
){
if
(
null
!=
b
){
for
(
j
=
[],
e
=
0
,
f
=
a
.
length
;
f
>
e
;
e
++
)
d
=
a
[
e
],
j
.
push
(
d
.
selected
=
(
h
=
d
.
value
,
c
.
call
(
b
,
h
)
>=
0
));
return
j
}}
else
if
((
null
!=
b
?
b
.
toString
():
void
0
)
!==
(
null
!=
(
i
=
a
.
value
)?
i
.
toString
():
void
0
))
return
a
.
value
=
null
!=
b
?
b
:
""
}},
a
.
binders
[
"if"
]
=
{
block
:
!
0
,
bind
:
function
(
a
){
var
b
,
c
;
return
null
==
this
.
marker
?(
b
=
[
this
.
view
.
config
.
prefix
,
this
.
type
].
join
(
"-"
).
replace
(
"--"
,
"-"
),
c
=
a
.
getAttribute
(
b
),
this
.
marker
=
document
.
createComment
(
" rivets: "
+
this
.
type
+
" "
+
c
+
" "
),
a
.
removeAttribute
(
b
),
a
.
parentNode
.
insertBefore
(
this
.
marker
,
a
),
a
.
parentNode
.
removeChild
(
a
)):
void
0
},
unbind
:
function
(){
var
a
;
return
null
!=
(
a
=
this
.
nested
)?
a
.
unbind
():
void
0
},
routine
:
function
(
b
,
c
){
var
d
,
e
,
f
,
g
,
h
;
if
(
!!
c
==
(
null
==
this
.
nested
)){
if
(
c
){
f
=
{},
h
=
this
.
view
.
models
;
for
(
d
in
h
)
e
=
h
[
d
],
f
[
d
]
=
e
;
return
g
=
{
binders
:
this
.
view
.
options
.
binders
,
formatters
:
this
.
view
.
options
.
formatters
,
adapters
:
this
.
view
.
options
.
adapters
,
config
:
this
.
view
.
options
.
config
},(
this
.
nested
=
new
a
.
View
(
b
,
f
,
g
)).
bind
(),
this
.
marker
.
parentNode
.
insertBefore
(
b
,
this
.
marker
.
nextSibling
)}
return
b
.
parentNode
.
removeChild
(
b
),
this
.
nested
.
unbind
(),
delete
this
.
nested
}},
update
:
function
(
a
){
var
b
;
return
null
!=
(
b
=
this
.
nested
)?
b
.
update
(
a
):
void
0
}},
a
.
binders
.
unless
=
{
block
:
!
0
,
bind
:
function
(
b
){
return
a
.
binders
[
"if"
].
bind
.
call
(
this
,
b
)},
unbind
:
function
(){
return
a
.
binders
[
"if"
].
unbind
.
call
(
this
)},
routine
:
function
(
b
,
c
){
return
a
.
binders
[
"if"
].
routine
.
call
(
this
,
b
,
!
c
)},
update
:
function
(
b
){
return
a
.
binders
[
"if"
].
update
.
call
(
this
,
b
)}},
a
.
binders
[
"on-*"
]
=
{
"function"
:
!
0
,
unbind
:
function
(
b
){
return
this
.
handler
?
a
.
Util
.
unbindEvent
(
b
,
this
.
args
[
0
],
this
.
handler
):
void
0
},
routine
:
function
(
b
,
c
){
return
this
.
handler
&&
a
.
Util
.
unbindEvent
(
b
,
this
.
args
[
0
],
this
.
handler
),
a
.
Util
.
bindEvent
(
b
,
this
.
args
[
0
],
this
.
handler
=
this
.
eventHandler
(
c
))}},
a
.
binders
[
"each-*"
]
=
{
block
:
!
0
,
bind
:
function
(
a
){
var
b
;
return
null
==
this
.
marker
?(
b
=
[
this
.
view
.
config
.
prefix
,
this
.
type
].
join
(
"-"
).
replace
(
"--"
,
"-"
),
this
.
marker
=
document
.
createComment
(
" rivets: "
+
this
.
type
+
" "
),
this
.
iterated
=
[],
a
.
removeAttribute
(
b
),
a
.
parentNode
.
insertBefore
(
this
.
marker
,
a
),
a
.
parentNode
.
removeChild
(
a
)):
void
0
},
unbind
:
function
(){
var
a
,
b
,
c
,
d
,
e
;
if
(
null
!=
this
.
iterated
){
for
(
d
=
this
.
iterated
,
e
=
[],
b
=
0
,
c
=
d
.
length
;
c
>
b
;
b
++
)
a
=
d
[
b
],
e
.
push
(
a
.
unbind
());
return
e
}},
routine
:
function
(
b
,
c
){
var
d
,
e
,
f
,
g
,
h
,
i
,
j
,
k
,
l
,
m
,
n
,
o
,
p
,
q
,
r
,
s
,
t
,
u
,
v
,
w
,
x
,
y
,
z
,
A
;
if
(
k
=
this
.
args
[
0
],
c
=
c
||
[],
this
.
iterated
.
length
>
c
.
length
)
for
(
w
=
Array
(
this
.
iterated
.
length
-
c
.
length
),
q
=
0
,
t
=
w
.
length
;
t
>
q
;
q
++
)
f
=
w
[
q
],
p
=
this
.
iterated
.
pop
(),
p
.
unbind
(),
this
.
marker
.
parentNode
.
removeChild
(
p
.
els
[
0
]);
for
(
g
=
r
=
0
,
u
=
c
.
length
;
u
>
r
;
g
=++
r
)
if
(
j
=
c
[
g
],
e
=
{},
e
[
k
]
=
j
,
null
==
this
.
iterated
[
g
]){
x
=
this
.
view
.
models
;
for
(
i
in
x
)
j
=
x
[
i
],
null
==
e
[
i
]
&&
(
e
[
i
]
=
j
);
m
=
this
.
iterated
.
length
?
this
.
iterated
[
this
.
iterated
.
length
-
1
].
els
[
0
]:
this
.
marker
,
l
=
{
binders
:
this
.
view
.
options
.
binders
,
formatters
:
this
.
view
.
options
.
formatters
,
adapters
:
this
.
view
.
options
.
adapters
,
config
:{}},
y
=
this
.
view
.
options
.
config
;
for
(
h
in
y
)
o
=
y
[
h
],
l
.
config
[
h
]
=
o
;
l
.
config
.
preloadData
=!
0
,
n
=
b
.
cloneNode
(
!
0
),
p
=
new
a
.
View
(
n
,
e
,
l
),
p
.
bind
(),
this
.
iterated
.
push
(
p
),
this
.
marker
.
parentNode
.
insertBefore
(
n
,
m
.
nextSibling
)}
else
this
.
iterated
[
g
].
models
[
k
]
!==
j
&&
this
.
iterated
[
g
].
update
(
e
);
if
(
"OPTION"
===
b
.
nodeName
){
for
(
z
=
this
.
view
.
bindings
,
A
=
[],
s
=
0
,
v
=
z
.
length
;
v
>
s
;
s
++
)
d
=
z
[
s
],
d
.
el
===
this
.
marker
.
parentNode
&&
"value"
===
d
.
type
?
A
.
push
(
d
.
sync
()):
A
.
push
(
void
0
);
return
A
}},
update
:
function
(
a
){
var
b
,
c
,
d
,
e
,
f
,
g
,
h
,
i
;
b
=
{};
for
(
c
in
a
)
d
=
a
[
c
],
c
!==
this
.
args
[
0
]
&&
(
b
[
c
]
=
d
);
for
(
h
=
this
.
iterated
,
i
=
[],
f
=
0
,
g
=
h
.
length
;
g
>
f
;
f
++
)
e
=
h
[
f
],
i
.
push
(
e
.
update
(
b
));
return
i
}},
a
.
binders
[
"class-*"
]
=
function
(
a
,
b
){
var
c
;
return
c
=
" "
+
a
.
className
+
" "
,
!
b
==
(
-
1
!==
c
.
indexOf
(
" "
+
this
.
args
[
0
]
+
" "
))?
a
.
className
=
b
?
""
+
a
.
className
+
" "
+
this
.
args
[
0
]:
c
.
replace
(
" "
+
this
.
args
[
0
]
+
" "
,
" "
).
trim
():
void
0
},
a
.
binders
[
"*"
]
=
function
(
a
,
b
){
return
b
?
a
.
setAttribute
(
this
.
type
,
b
):
a
.
removeAttribute
(
this
.
type
)},
a
.
adapters
[
"."
]
=
{
id
:
"_rv"
,
counter
:
0
,
weakmap
:{},
weakReference
:
function
(
a
){
var
b
;
return
null
==
a
[
this
.
id
]
&&
(
b
=
this
.
counter
++
,
this
.
weakmap
[
b
]
=
{
callbacks
:{}},
Object
.
defineProperty
(
a
,
this
.
id
,{
value
:
b
})),
this
.
weakmap
[
a
[
this
.
id
]]},
stubFunction
:
function
(
a
,
b
){
var
c
,
d
,
e
;
return
d
=
a
[
b
],
c
=
this
.
weakReference
(
a
),
e
=
this
.
weakmap
,
a
[
b
]
=
function
(){
var
b
,
f
,
g
,
h
,
i
,
j
,
k
,
l
,
m
,
n
;
h
=
d
.
apply
(
a
,
arguments
),
k
=
c
.
pointers
;
for
(
g
in
k
)
for
(
f
=
k
[
g
],
n
=
null
!=
(
l
=
null
!=
(
m
=
e
[
g
])?
m
.
callbacks
[
f
]:
void
0
)?
l
:[],
i
=
0
,
j
=
n
.
length
;
j
>
i
;
i
++
)
b
=
n
[
i
],
b
();
return
h
}},
observeMutations
:
function
(
a
,
b
,
d
){
var
e
,
f
,
g
,
h
,
i
,
j
;
if
(
Array
.
isArray
(
a
)){
if
(
g
=
this
.
weakReference
(
a
),
null
==
g
.
pointers
)
for
(
g
.
pointers
=
{},
f
=
[
"push"
,
"pop"
,
"shift"
,
"unshift"
,
"sort"
,
"reverse"
,
"splice"
],
i
=
0
,
j
=
f
.
length
;
j
>
i
;
i
++
)
e
=
f
[
i
],
this
.
stubFunction
(
a
,
e
);
if
(
null
==
(
h
=
g
.
pointers
)[
b
]
&&
(
h
[
b
]
=
[]),
c
.
call
(
g
.
pointers
[
b
],
d
)
<
0
)
return
g
.
pointers
[
b
].
push
(
d
)}},
unobserveMutations
:
function
(
a
,
b
,
c
){
var
d
,
e
;
return
Array
.
isArray
(
a
&&
null
!=
a
[
this
.
id
])
&&
(
d
=
null
!=
(
e
=
this
.
weakReference
(
a
).
pointers
)?
e
[
b
]:
void
0
)?
d
.
splice
(
d
.
indexOf
(
c
),
1
):
void
0
},
subscribe
:
function
(
a
,
b
,
d
){
var
e
,
f
,
g
=
this
;
return
e
=
this
.
weakReference
(
a
).
callbacks
,
null
==
e
[
b
]
&&
(
e
[
b
]
=
[],
f
=
a
[
b
],
Object
.
defineProperty
(
a
,
b
,{
get
:
function
(){
return
f
},
set
:
function
(
c
){
var
h
,
i
,
j
;
if
(
c
!==
f
){
for
(
f
=
c
,
j
=
e
[
b
],
h
=
0
,
i
=
j
.
length
;
i
>
h
;
h
++
)
d
=
j
[
h
],
d
();
return
g
.
observeMutations
(
c
,
a
[
g
.
id
],
b
)}}})),
c
.
call
(
e
[
b
],
d
)
<
0
&&
e
[
b
].
push
(
d
),
this
.
observeMutations
(
a
[
b
],
a
[
this
.
id
],
b
)},
unsubscribe
:
function
(
a
,
b
,
c
){
var
d
;
return
d
=
this
.
weakmap
[
a
[
this
.
id
]].
callbacks
[
b
],
d
.
splice
(
d
.
indexOf
(
c
),
1
),
this
.
unobserveMutations
(
a
[
b
],
a
[
this
.
id
],
b
)},
read
:
function
(
a
,
b
){
return
a
[
b
]},
publish
:
function
(
a
,
b
,
c
){
return
a
[
b
]
=
c
}},
a
.
factory
=
function
(
b
){
return
b
.
_
=
a
,
b
.
binders
=
a
.
binders
,
b
.
components
=
a
.
components
,
b
.
formatters
=
a
.
formatters
,
b
.
adapters
=
a
.
adapters
,
b
.
config
=
a
.
config
,
b
.
configure
=
function
(
b
){
var
c
,
d
;
null
==
b
&&
(
b
=
{});
for
(
c
in
b
)
d
=
b
[
c
],
a
.
config
[
c
]
=
d
},
b
.
bind
=
function
(
b
,
c
,
d
){
var
e
;
return
null
==
c
&&
(
c
=
{}),
null
==
d
&&
(
d
=
{}),
e
=
new
a
.
View
(
b
,
c
,
d
),
e
.
bind
(),
e
}},
"object"
==
typeof
exports
?
a
.
factory
(
exports
):
"function"
==
typeof
define
&&
define
.
amd
?
define
([
"exports"
],
function
(
b
){
return
a
.
factory
(
this
.
rivets
=
b
),
b
}):
a
.
factory
(
this
.
rivets
=
{})}).
call
(
this
);
\ No newline at end of file
(
function
(){
var
a
,
b
,
c
,
d
,
e
=
function
(
a
,
b
){
return
function
(){
return
a
.
apply
(
b
,
arguments
)}},
f
=
[].
indexOf
||
function
(
a
){
for
(
var
b
=
0
,
c
=
this
.
length
;
c
>
b
;
b
++
)
if
(
b
in
this
&&
this
[
b
]
===
a
)
return
b
;
return
-
1
},
g
=
[].
slice
,
h
=
{}.
hasOwnProperty
,
i
=
function
(
a
,
b
){
function
c
(){
this
.
constructor
=
a
}
for
(
var
d
in
b
)
h
.
call
(
b
,
d
)
&&
(
a
[
d
]
=
b
[
d
]);
return
c
.
prototype
=
b
.
prototype
,
a
.
prototype
=
new
c
,
a
.
__super__
=
b
.
prototype
,
a
};
a
=
{
binders
:{},
components
:{},
formatters
:{},
adapters
:{},
config
:{
prefix
:
"rv"
,
templateDelimiters
:[
"{"
,
"}"
],
rootInterface
:
"."
,
preloadData
:
!
0
,
handler
:
function
(
a
,
b
,
c
){
return
this
.
call
(
a
,
b
,
c
.
view
.
models
)}}},
"jQuery"
in
window
?(
d
=
"on"
in
jQuery
?[
"on"
,
"off"
]:[
"bind"
,
"unbind"
],
b
=
d
[
0
],
c
=
d
[
1
],
a
.
Util
=
{
bindEvent
:
function
(
a
,
c
,
d
){
return
jQuery
(
a
)[
b
](
c
,
d
)},
unbindEvent
:
function
(
a
,
b
,
d
){
return
jQuery
(
a
)[
c
](
b
,
d
)},
getInputValue
:
function
(
a
){
var
b
;
return
b
=
jQuery
(
a
),
"checkbox"
===
b
.
attr
(
"type"
)?
b
.
is
(
":checked"
):
b
.
val
()}}):
a
.
Util
=
{
bindEvent
:
function
(){
return
"addEventListener"
in
window
?
function
(
a
,
b
,
c
){
return
a
.
addEventListener
(
b
,
c
,
!
1
)}:
function
(
a
,
b
,
c
){
return
a
.
attachEvent
(
"on"
+
b
,
c
)}}(),
unbindEvent
:
function
(){
return
"removeEventListener"
in
window
?
function
(
a
,
b
,
c
){
return
a
.
removeEventListener
(
b
,
c
,
!
1
)}:
function
(
a
,
b
,
c
){
return
a
.
detachEvent
(
"on"
+
b
,
c
)}}(),
getInputValue
:
function
(
a
){
var
b
,
c
,
d
,
e
;
if
(
"checkbox"
===
a
.
type
)
return
a
.
checked
;
if
(
"select-multiple"
===
a
.
type
){
for
(
e
=
[],
c
=
0
,
d
=
a
.
length
;
d
>
c
;
c
++
)
b
=
a
[
c
],
b
.
selected
&&
e
.
push
(
b
.
value
);
return
e
}
return
a
.
value
}},
a
.
View
=
function
(){
function
b
(
b
,
c
,
d
){
var
f
,
g
,
h
,
i
,
j
,
k
,
l
,
m
,
n
;
for
(
this
.
els
=
b
,
this
.
models
=
c
,
this
.
options
=
null
!=
d
?
d
:{},
this
.
update
=
e
(
this
.
update
,
this
),
this
.
publish
=
e
(
this
.
publish
,
this
),
this
.
sync
=
e
(
this
.
sync
,
this
),
this
.
unbind
=
e
(
this
.
unbind
,
this
),
this
.
bind
=
e
(
this
.
bind
,
this
),
this
.
select
=
e
(
this
.
select
,
this
),
this
.
build
=
e
(
this
.
build
,
this
),
this
.
componentRegExp
=
e
(
this
.
componentRegExp
,
this
),
this
.
bindingRegExp
=
e
(
this
.
bindingRegExp
,
this
),
this
.
els
.
jquery
||
this
.
els
instanceof
Array
||
(
this
.
els
=
[
this
.
els
]),
l
=
[
"config"
,
"binders"
,
"formatters"
,
"adapters"
],
j
=
0
,
k
=
l
.
length
;
k
>
j
;
j
++
){
if
(
g
=
l
[
j
],
this
[
g
]
=
{},
this
.
options
[
g
]){
m
=
this
.
options
[
g
];
for
(
f
in
m
)
h
=
m
[
f
],
this
[
g
][
f
]
=
h
}
n
=
a
[
g
];
for
(
f
in
n
)
h
=
n
[
f
],
null
==
(
i
=
this
[
g
])[
f
]
&&
(
i
[
f
]
=
h
)}
this
.
build
()}
return
b
.
prototype
.
bindingRegExp
=
function
(){
return
new
RegExp
(
"^"
+
this
.
config
.
prefix
+
"-"
)},
b
.
prototype
.
componentRegExp
=
function
(){
return
new
RegExp
(
"^"
+
this
.
config
.
prefix
.
toUpperCase
()
+
"-"
)},
b
.
prototype
.
build
=
function
(){
var
b
,
c
,
d
,
e
,
g
,
h
,
i
,
j
,
k
,
l
=
this
;
for
(
this
.
bindings
=
[],
h
=
[],
b
=
this
.
bindingRegExp
(),
d
=
this
.
componentRegExp
(),
c
=
function
(
b
,
c
,
d
,
e
){
var
f
,
g
,
h
,
i
,
j
,
k
,
m
;
return
j
=
{},
m
=
function
(){
var
a
,
b
,
c
,
d
;
for
(
c
=
e
.
split
(
"|"
),
d
=
[],
a
=
0
,
b
=
c
.
length
;
b
>
a
;
a
++
)
k
=
c
[
a
],
d
.
push
(
k
.
trim
());
return
d
}(),
f
=
function
(){
var
a
,
b
,
c
,
d
;
for
(
c
=
m
.
shift
().
split
(
"<"
),
d
=
[],
a
=
0
,
b
=
c
.
length
;
b
>
a
;
a
++
)
g
=
c
[
a
],
d
.
push
(
g
.
trim
());
return
d
}(),
i
=
f
.
shift
(),
j
.
formatters
=
m
,(
h
=
f
.
shift
())
&&
(
j
.
dependencies
=
h
.
split
(
/
\s
+/
)),
l
.
bindings
.
push
(
new
a
[
b
](
l
,
c
,
d
,
i
,
j
))},
g
=
function
(
e
){
var
i
,
j
,
k
,
m
,
n
,
o
,
p
,
q
,
r
,
s
,
t
,
u
,
v
,
w
,
x
,
y
,
z
,
A
,
B
,
C
,
D
,
E
,
F
,
G
,
H
,
I
,
J
,
K
,
L
,
M
;
if
(
f
.
call
(
h
,
e
)
<
0
){
if
(
3
===
e
.
nodeType
){
if
(
q
=
a
.
TextTemplateParser
,(
n
=
l
.
config
.
templateDelimiters
)
&&
(
u
=
q
.
parse
(
e
.
data
,
n
)).
length
&&
(
1
!==
u
.
length
||
u
[
0
].
type
!==
q
.
types
.
text
)){
for
(
x
=
0
,
B
=
u
.
length
;
B
>
x
;
x
++
)
t
=
u
[
x
],
s
=
document
.
createTextNode
(
t
.
value
),
e
.
parentNode
.
insertBefore
(
s
,
e
),
1
===
t
.
type
&&
c
(
"TextBinding"
,
s
,
null
,
t
.
value
);
e
.
parentNode
.
removeChild
(
e
)}}
else
if
(
d
.
test
(
e
.
tagName
))
v
=
e
.
tagName
.
replace
(
d
,
""
).
toLowerCase
(),
l
.
bindings
.
push
(
new
a
.
ComponentBinding
(
l
,
e
,
v
));
else
if
(
null
!=
e
.
attributes
){
for
(
H
=
e
.
attributes
,
y
=
0
,
C
=
H
.
length
;
C
>
y
;
y
++
)
if
(
i
=
H
[
y
],
b
.
test
(
i
.
name
)){
if
(
v
=
i
.
name
.
replace
(
b
,
""
),
!
(
k
=
l
.
binders
[
v
])){
I
=
l
.
binders
;
for
(
o
in
I
)
w
=
I
[
o
],
"*"
!==
o
&&-
1
!==
o
.
indexOf
(
"*"
)
&&
(
r
=
new
RegExp
(
"^"
+
o
.
replace
(
"*"
,
".+"
)
+
"$"
),
r
.
test
(
v
)
&&
(
k
=
w
))}
if
(
k
||
(
k
=
l
.
binders
[
"*"
]),
k
.
block
){
for
(
J
=
e
.
childNodes
,
z
=
0
,
D
=
J
.
length
;
D
>
z
;
z
++
)
p
=
J
[
z
],
h
.
push
(
p
);
j
=
[
i
]}}
for
(
K
=
j
||
e
.
attributes
,
A
=
0
,
E
=
K
.
length
;
E
>
A
;
A
++
)
i
=
K
[
A
],
b
.
test
(
i
.
name
)
&&
(
v
=
i
.
name
.
replace
(
b
,
""
),
c
(
"Binding"
,
e
,
v
,
i
.
value
))}
for
(
L
=
function
(){
var
a
,
b
,
c
,
d
;
for
(
c
=
e
.
childNodes
,
d
=
[],
b
=
0
,
a
=
c
.
length
;
a
>
b
;
b
++
)
p
=
c
[
b
],
d
.
push
(
p
);
return
d
}(),
M
=
[],
G
=
0
,
F
=
L
.
length
;
F
>
G
;
G
++
)
m
=
L
[
G
],
M
.
push
(
g
(
m
));
return
M
}},
k
=
this
.
els
,
i
=
0
,
j
=
k
.
length
;
j
>
i
;
i
++
)
e
=
k
[
i
],
g
(
e
)},
b
.
prototype
.
select
=
function
(
a
){
var
b
,
c
,
d
,
e
,
f
;
for
(
e
=
this
.
bindings
,
f
=
[],
c
=
0
,
d
=
e
.
length
;
d
>
c
;
c
++
)
b
=
e
[
c
],
a
(
b
)
&&
f
.
push
(
b
);
return
f
},
b
.
prototype
.
bind
=
function
(){
var
a
,
b
,
c
,
d
,
e
;
for
(
d
=
this
.
bindings
,
e
=
[],
b
=
0
,
c
=
d
.
length
;
c
>
b
;
b
++
)
a
=
d
[
b
],
e
.
push
(
a
.
bind
());
return
e
},
b
.
prototype
.
unbind
=
function
(){
var
a
,
b
,
c
,
d
,
e
;
for
(
d
=
this
.
bindings
,
e
=
[],
b
=
0
,
c
=
d
.
length
;
c
>
b
;
b
++
)
a
=
d
[
b
],
e
.
push
(
a
.
unbind
());
return
e
},
b
.
prototype
.
sync
=
function
(){
var
a
,
b
,
c
,
d
,
e
;
for
(
d
=
this
.
bindings
,
e
=
[],
b
=
0
,
c
=
d
.
length
;
c
>
b
;
b
++
)
a
=
d
[
b
],
e
.
push
(
a
.
sync
());
return
e
},
b
.
prototype
.
publish
=
function
(){
var
a
,
b
,
c
,
d
,
e
;
for
(
d
=
this
.
select
(
function
(
a
){
return
a
.
binder
.
publishes
}),
e
=
[],
b
=
0
,
c
=
d
.
length
;
c
>
b
;
b
++
)
a
=
d
[
b
],
e
.
push
(
a
.
publish
());
return
e
},
b
.
prototype
.
update
=
function
(
a
){
var
b
,
c
,
d
,
e
,
f
,
g
,
h
;
null
==
a
&&
(
a
=
{});
for
(
c
in
a
)
d
=
a
[
c
],
this
.
models
[
c
]
=
d
;
for
(
g
=
this
.
bindings
,
h
=
[],
e
=
0
,
f
=
g
.
length
;
f
>
e
;
e
++
)
b
=
g
[
e
],
h
.
push
(
b
.
update
(
a
));
return
h
},
b
}(),
a
.
Binding
=
function
(){
function
b
(
a
,
b
,
c
,
d
,
f
){
this
.
view
=
a
,
this
.
el
=
b
,
this
.
type
=
c
,
this
.
keypath
=
d
,
this
.
options
=
null
!=
f
?
f
:{},
this
.
update
=
e
(
this
.
update
,
this
),
this
.
unbind
=
e
(
this
.
unbind
,
this
),
this
.
bind
=
e
(
this
.
bind
,
this
),
this
.
publish
=
e
(
this
.
publish
,
this
),
this
.
sync
=
e
(
this
.
sync
,
this
),
this
.
set
=
e
(
this
.
set
,
this
),
this
.
eventHandler
=
e
(
this
.
eventHandler
,
this
),
this
.
formattedValue
=
e
(
this
.
formattedValue
,
this
),
this
.
setBinder
=
e
(
this
.
setBinder
,
this
),
this
.
formatters
=
this
.
options
.
formatters
||
[],
this
.
dependencies
=
[],
this
.
model
=
void
0
,
this
.
setBinder
()}
return
b
.
prototype
.
setBinder
=
function
(){
var
a
,
b
,
c
,
d
;
if
(
!
(
this
.
binder
=
this
.
view
.
binders
[
this
.
type
])){
d
=
this
.
view
.
binders
;
for
(
a
in
d
)
c
=
d
[
a
],
"*"
!==
a
&&-
1
!==
a
.
indexOf
(
"*"
)
&&
(
b
=
new
RegExp
(
"^"
+
a
.
replace
(
"*"
,
".+"
)
+
"$"
),
b
.
test
(
this
.
type
)
&&
(
this
.
binder
=
c
,
this
.
args
=
new
RegExp
(
"^"
+
a
.
replace
(
"*"
,
"(.+)"
)
+
"$"
).
exec
(
this
.
type
),
this
.
args
.
shift
()))}
return
this
.
binder
||
(
this
.
binder
=
this
.
view
.
binders
[
"*"
]),
this
.
binder
instanceof
Function
?
this
.
binder
=
{
routine
:
this
.
binder
}:
void
0
},
b
.
prototype
.
formattedValue
=
function
(
a
){
var
b
,
c
,
d
,
e
,
f
,
h
;
for
(
h
=
this
.
formatters
,
e
=
0
,
f
=
h
.
length
;
f
>
e
;
e
++
)
c
=
h
[
e
],
b
=
c
.
split
(
/
\s
+/
),
d
=
b
.
shift
(),
c
=
this
.
view
.
formatters
[
d
],(
null
!=
c
?
c
.
read
:
void
0
)
instanceof
Function
?
a
=
c
.
read
.
apply
(
c
,[
a
].
concat
(
g
.
call
(
b
))):
c
instanceof
Function
&&
(
a
=
c
.
apply
(
null
,[
a
].
concat
(
g
.
call
(
b
))));
return
a
},
b
.
prototype
.
eventHandler
=
function
(
a
){
var
b
,
c
;
return
c
=
(
b
=
this
).
view
.
config
.
handler
,
function
(
d
){
return
c
.
call
(
a
,
this
,
d
,
b
)}},
b
.
prototype
.
set
=
function
(
a
){
var
b
;
return
a
=
a
instanceof
Function
&&!
this
.
binder
[
"function"
]?
this
.
formattedValue
(
a
.
call
(
this
.
model
)):
this
.
formattedValue
(
a
),
null
!=
(
b
=
this
.
binder
.
routine
)?
b
.
call
(
this
,
this
.
el
,
a
):
void
0
},
b
.
prototype
.
sync
=
function
(){
var
b
,
c
,
d
,
e
,
f
,
g
,
h
,
i
,
j
;
if
(
this
.
model
!==
this
.
observer
.
target
){
for
(
h
=
this
.
dependencies
,
d
=
0
,
f
=
h
.
length
;
f
>
d
;
d
++
)
c
=
h
[
d
],
c
.
unobserve
();
if
(
this
.
dependencies
=
[],
null
!=
(
this
.
model
=
this
.
observer
.
target
)
&&
(
null
!=
(
i
=
this
.
options
.
dependencies
)?
i
.
length
:
void
0
))
for
(
j
=
this
.
options
.
dependencies
,
e
=
0
,
g
=
j
.
length
;
g
>
e
;
e
++
)
b
=
j
[
e
],
c
=
new
a
.
Observer
(
this
.
view
,
this
.
model
,
b
,
this
.
sync
),
this
.
dependencies
.
push
(
c
)}
return
this
.
set
(
this
.
observer
.
value
())},
b
.
prototype
.
publish
=
function
(){
var
b
,
c
,
d
,
e
,
f
,
h
,
i
,
j
,
k
;
for
(
e
=
a
.
Util
.
getInputValue
(
this
.
el
),
i
=
this
.
formatters
.
slice
(
0
).
reverse
(),
f
=
0
,
h
=
i
.
length
;
h
>
f
;
f
++
)
c
=
i
[
f
],
b
=
c
.
split
(
/
\s
+/
),
d
=
b
.
shift
(),(
null
!=
(
j
=
this
.
view
.
formatters
[
d
])?
j
.
publish
:
void
0
)
&&
(
e
=
(
k
=
this
.
view
.
formatters
[
d
]).
publish
.
apply
(
k
,[
e
].
concat
(
g
.
call
(
b
))));
return
this
.
observer
.
publish
(
e
)},
b
.
prototype
.
bind
=
function
(){
var
b
,
c
,
d
,
e
,
f
,
g
,
h
;
if
(
null
!=
(
f
=
this
.
binder
.
bind
)
&&
f
.
call
(
this
,
this
.
el
),
this
.
observer
=
new
a
.
Observer
(
this
.
view
,
this
.
view
.
models
,
this
.
keypath
,
this
.
sync
),
this
.
model
=
this
.
observer
.
target
,
null
!=
this
.
model
&&
(
null
!=
(
g
=
this
.
options
.
dependencies
)?
g
.
length
:
void
0
))
for
(
h
=
this
.
options
.
dependencies
,
d
=
0
,
e
=
h
.
length
;
e
>
d
;
d
++
)
b
=
h
[
d
],
c
=
new
a
.
Observer
(
this
.
view
,
this
.
model
,
b
,
this
.
sync
),
this
.
dependencies
.
push
(
c
);
return
this
.
view
.
config
.
preloadData
?
this
.
sync
():
void
0
},
b
.
prototype
.
unbind
=
function
(){
var
a
,
b
,
c
,
d
,
e
;
for
(
null
!=
(
d
=
this
.
binder
.
unbind
)
&&
d
.
call
(
this
,
this
.
el
),
this
.
observer
.
unobserve
(),
e
=
this
.
dependencies
,
b
=
0
,
c
=
e
.
length
;
c
>
b
;
b
++
)
a
=
e
[
b
],
a
.
unobserve
();
return
this
.
dependencies
=
[]},
b
.
prototype
.
update
=
function
(
a
){
var
b
;
return
null
==
a
&&
(
a
=
{}),
null
!=
(
b
=
this
.
binder
.
update
)?
b
.
call
(
this
,
a
):
void
0
},
b
}(),
a
.
ComponentBinding
=
function
(
b
){
function
c
(
b
,
c
,
d
){
var
g
,
h
,
i
,
j
,
k
;
for
(
this
.
view
=
b
,
this
.
el
=
c
,
this
.
type
=
d
,
this
.
unbind
=
e
(
this
.
unbind
,
this
),
this
.
bind
=
e
(
this
.
bind
,
this
),
this
.
update
=
e
(
this
.
update
,
this
),
this
.
locals
=
e
(
this
.
locals
,
this
),
this
.
component
=
a
.
components
[
this
.
type
],
this
.
attributes
=
{},
this
.
inflections
=
{},
j
=
this
.
el
.
attributes
||
[],
h
=
0
,
i
=
j
.
length
;
i
>
h
;
h
++
)
g
=
j
[
h
],
k
=
g
.
name
,
f
.
call
(
this
.
component
.
attributes
,
k
)
>=
0
?
this
.
attributes
[
g
.
name
]
=
g
.
value
:
this
.
inflections
[
g
.
name
]
=
g
.
value
}
return
i
(
c
,
b
),
c
.
prototype
.
sync
=
function
(){},
c
.
prototype
.
locals
=
function
(
a
){
var
b
,
c
,
d
,
e
,
f
,
g
,
h
,
i
,
j
;
null
==
a
&&
(
a
=
this
.
view
.
models
),
f
=
{},
i
=
this
.
inflections
;
for
(
c
in
i
)
for
(
b
=
i
[
c
],
j
=
b
.
split
(
"."
),
g
=
0
,
h
=
j
.
length
;
h
>
g
;
g
++
)
e
=
j
[
g
],
f
[
c
]
=
(
f
[
c
]
||
a
)[
e
];
for
(
c
in
a
)
d
=
a
[
c
],
null
==
f
[
c
]
&&
(
f
[
c
]
=
d
);
return
f
},
c
.
prototype
.
update
=
function
(
a
){
var
b
;
return
null
!=
(
b
=
this
.
componentView
)?
b
.
update
(
this
.
locals
(
a
)):
void
0
},
c
.
prototype
.
bind
=
function
(){
var
b
,
c
;
return
null
!=
this
.
componentView
?
null
!=
(
c
=
this
.
componentView
)?
c
.
bind
():
void
0
:(
b
=
this
.
component
.
build
.
call
(
this
.
attributes
),(
this
.
componentView
=
new
a
.
View
(
b
,
this
.
locals
(),
this
.
view
.
options
)).
bind
(),
this
.
el
.
parentNode
.
replaceChild
(
b
,
this
.
el
))},
c
.
prototype
.
unbind
=
function
(){
var
a
;
return
null
!=
(
a
=
this
.
componentView
)?
a
.
unbind
():
void
0
},
c
}(
a
.
Binding
),
a
.
TextBinding
=
function
(
a
){
function
b
(
a
,
b
,
c
,
d
,
f
){
this
.
view
=
a
,
this
.
el
=
b
,
this
.
type
=
c
,
this
.
keypath
=
d
,
this
.
options
=
null
!=
f
?
f
:{},
this
.
sync
=
e
(
this
.
sync
,
this
),
this
.
formatters
=
this
.
options
.
formatters
||
[],
this
.
dependencies
=
[]}
return
i
(
b
,
a
),
b
.
prototype
.
binder
=
{
routine
:
function
(
a
,
b
){
return
a
.
data
=
null
!=
b
?
b
:
""
}},
b
.
prototype
.
sync
=
function
(){
return
b
.
__super__
.
sync
.
apply
(
this
,
arguments
)},
b
}(
a
.
Binding
),
a
.
KeypathParser
=
function
(){
function
a
(){}
return
a
.
parse
=
function
(
a
,
b
,
c
){
var
d
,
e
,
g
,
h
,
i
,
j
;
for
(
h
=
[],
e
=
{
"interface"
:
c
,
path
:
""
},
g
=
i
=
0
,
j
=
a
.
length
;
j
>
i
;
g
=
i
+=
1
)
d
=
a
.
charAt
(
g
),
f
.
call
(
b
,
d
)
>=
0
?(
h
.
push
(
e
),
e
=
{
"interface"
:
d
,
path
:
""
}):
e
.
path
+=
d
;
return
h
.
push
(
e
),
h
},
a
}(),
a
.
TextTemplateParser
=
function
(){
function
a
(){}
return
a
.
types
=
{
text
:
0
,
binding
:
1
},
a
.
parse
=
function
(
a
,
b
){
var
c
,
d
,
e
,
f
,
g
,
h
,
i
;
for
(
h
=
[],
f
=
a
.
length
,
c
=
0
,
d
=
0
;
f
>
d
;){
if
(
c
=
a
.
indexOf
(
b
[
0
],
d
),
0
>
c
){
h
.
push
({
type
:
this
.
types
.
text
,
value
:
a
.
slice
(
d
)});
break
}
if
(
c
>
0
&&
c
>
d
&&
h
.
push
({
type
:
this
.
types
.
text
,
value
:
a
.
slice
(
d
,
c
)}),
d
=
c
+
b
[
0
].
length
,
c
=
a
.
indexOf
(
b
[
1
],
d
),
0
>
c
){
g
=
a
.
slice
(
d
-
b
[
1
].
length
),
e
=
h
[
h
.
length
-
1
],(
null
!=
e
?
e
.
type
:
void
0
)
===
this
.
types
.
text
?
e
.
value
+=
g
:
h
.
push
({
type
:
this
.
types
.
text
,
value
:
g
});
break
}
i
=
a
.
slice
(
d
,
c
).
trim
(),
h
.
push
({
type
:
this
.
types
.
binding
,
value
:
i
}),
d
=
c
+
b
[
1
].
length
}
return
h
},
a
}(),
a
.
Observer
=
function
(){
function
b
(
a
,
b
,
c
,
d
){
this
.
view
=
a
,
this
.
model
=
b
,
this
.
keypath
=
c
,
this
.
callback
=
d
,
this
.
unobserve
=
e
(
this
.
unobserve
,
this
),
this
.
realize
=
e
(
this
.
realize
,
this
),
this
.
value
=
e
(
this
.
value
,
this
),
this
.
publish
=
e
(
this
.
publish
,
this
),
this
.
read
=
e
(
this
.
read
,
this
),
this
.
set
=
e
(
this
.
set
,
this
),
this
.
adapter
=
e
(
this
.
adapter
,
this
),
this
.
update
=
e
(
this
.
update
,
this
),
this
.
initialize
=
e
(
this
.
initialize
,
this
),
this
.
parse
=
e
(
this
.
parse
,
this
),
this
.
parse
(),
this
.
initialize
()}
return
b
.
prototype
.
parse
=
function
(){
var
b
,
c
,
d
,
e
,
g
,
h
;
return
b
=
function
(){
var
a
,
b
;
a
=
this
.
view
.
adapters
,
b
=
[];
for
(
c
in
a
)
g
=
a
[
c
],
b
.
push
(
c
);
return
b
}.
call
(
this
),
h
=
this
.
keypath
[
0
],
f
.
call
(
b
,
h
)
>=
0
?(
e
=
this
.
keypath
[
0
],
d
=
this
.
keypath
.
substr
(
1
)):(
e
=
this
.
view
.
config
.
rootInterface
,
d
=
this
.
keypath
),
this
.
tokens
=
a
.
KeypathParser
.
parse
(
d
,
b
,
e
),
this
.
key
=
this
.
tokens
.
pop
()},
b
.
prototype
.
initialize
=
function
(){
return
this
.
objectPath
=
[],
this
.
target
=
this
.
realize
(),
null
!=
this
.
target
?
this
.
set
(
!
0
,
this
.
key
,
this
.
target
,
this
.
callback
):
void
0
},
b
.
prototype
.
update
=
function
(){
var
a
,
b
;
return
(
a
=
this
.
realize
())
!==
this
.
target
&&
(
null
!=
this
.
target
&&
this
.
set
(
!
1
,
this
.
key
,
this
.
target
,
this
.
callback
),
null
!=
a
&&
this
.
set
(
!
0
,
this
.
key
,
a
,
this
.
callback
),
b
=
this
.
value
(),
this
.
target
=
a
,
this
.
value
()
!==
b
)?
this
.
callback
():
void
0
},
b
.
prototype
.
adapter
=
function
(
a
){
return
this
.
view
.
adapters
[
a
[
"interface"
]]},
b
.
prototype
.
set
=
function
(
a
,
b
,
c
,
d
){
var
e
;
return
e
=
a
?
"subscribe"
:
"unsubscribe"
,
this
.
adapter
(
b
)[
e
](
c
,
b
.
path
,
d
)},
b
.
prototype
.
read
=
function
(
a
,
b
){
return
this
.
adapter
(
a
).
read
(
b
,
a
.
path
)},
b
.
prototype
.
publish
=
function
(
a
){
return
null
!=
this
.
target
?
this
.
adapter
(
this
.
key
).
publish
(
this
.
target
,
this
.
key
.
path
,
a
):
void
0
},
b
.
prototype
.
value
=
function
(){
return
null
!=
this
.
target
?
this
.
read
(
this
.
key
,
this
.
target
):
void
0
},
b
.
prototype
.
realize
=
function
(){
var
a
,
b
,
c
,
d
,
e
,
f
,
g
,
h
;
for
(
a
=
this
.
model
,
e
=
null
,
h
=
this
.
tokens
,
b
=
f
=
0
,
g
=
h
.
length
;
g
>
f
;
b
=++
f
)
d
=
h
[
b
],
null
!=
a
?(
null
!=
this
.
objectPath
[
b
]?
a
!==
(
c
=
this
.
objectPath
[
b
])
&&
(
this
.
set
(
!
1
,
d
,
c
,
this
.
update
),
this
.
set
(
!
0
,
d
,
a
,
this
.
update
),
this
.
objectPath
[
b
]
=
a
):(
this
.
set
(
!
0
,
d
,
a
,
this
.
update
),
this
.
objectPath
[
b
]
=
a
),
a
=
this
.
read
(
d
,
a
)):(
null
==
e
&&
(
e
=
b
),(
c
=
this
.
objectPath
[
b
])
&&
this
.
set
(
!
1
,
d
,
c
,
this
.
update
));
return
null
!=
e
&&
this
.
objectPath
.
splice
(
e
),
a
},
b
.
prototype
.
unobserve
=
function
(){
var
a
,
b
,
c
,
d
,
e
,
f
,
g
;
for
(
f
=
this
.
tokens
,
g
=
[],
a
=
d
=
0
,
e
=
f
.
length
;
e
>
d
;
a
=++
d
)
c
=
f
[
a
],(
b
=
this
.
objectPath
[
a
])?
g
.
push
(
this
.
set
(
!
1
,
c
,
b
,
this
.
update
)):
g
.
push
(
void
0
);
return
g
},
b
}(),
a
.
binders
.
text
=
function
(
a
,
b
){
return
null
!=
a
.
textContent
?
a
.
textContent
=
null
!=
b
?
b
:
""
:
a
.
innerText
=
null
!=
b
?
b
:
""
},
a
.
binders
.
html
=
function
(
a
,
b
){
return
a
.
innerHTML
=
null
!=
b
?
b
:
""
},
a
.
binders
.
show
=
function
(
a
,
b
){
return
a
.
style
.
display
=
b
?
""
:
"none"
},
a
.
binders
.
hide
=
function
(
a
,
b
){
return
a
.
style
.
display
=
b
?
"none"
:
""
},
a
.
binders
.
enabled
=
function
(
a
,
b
){
return
a
.
disabled
=!
b
},
a
.
binders
.
disabled
=
function
(
a
,
b
){
return
a
.
disabled
=!!
b
},
a
.
binders
.
checked
=
{
publishes
:
!
0
,
bind
:
function
(
b
){
return
a
.
Util
.
bindEvent
(
b
,
"change"
,
this
.
publish
)},
unbind
:
function
(
b
){
return
a
.
Util
.
unbindEvent
(
b
,
"change"
,
this
.
publish
)},
routine
:
function
(
a
,
b
){
var
c
;
return
a
.
checked
=
"radio"
===
a
.
type
?(
null
!=
(
c
=
a
.
value
)?
c
.
toString
():
void
0
)
===
(
null
!=
b
?
b
.
toString
():
void
0
):
!!
b
}},
a
.
binders
.
unchecked
=
{
publishes
:
!
0
,
bind
:
function
(
b
){
return
a
.
Util
.
bindEvent
(
b
,
"change"
,
this
.
publish
)},
unbind
:
function
(
b
){
return
a
.
Util
.
unbindEvent
(
b
,
"change"
,
this
.
publish
)},
routine
:
function
(
a
,
b
){
var
c
;
return
a
.
checked
=
"radio"
===
a
.
type
?(
null
!=
(
c
=
a
.
value
)?
c
.
toString
():
void
0
)
!==
(
null
!=
b
?
b
.
toString
():
void
0
):
!
b
}},
a
.
binders
.
value
=
{
publishes
:
!
0
,
bind
:
function
(
b
){
return
a
.
Util
.
bindEvent
(
b
,
"change"
,
this
.
publish
)},
unbind
:
function
(
b
){
return
a
.
Util
.
unbindEvent
(
b
,
"change"
,
this
.
publish
)},
routine
:
function
(
a
,
b
){
var
c
,
d
,
e
,
g
,
h
,
i
,
j
;
if
(
null
!=
window
.
jQuery
){
if
(
a
=
jQuery
(
a
),(
null
!=
b
?
b
.
toString
():
void
0
)
!==
(
null
!=
(
g
=
a
.
val
())?
g
.
toString
():
void
0
))
return
a
.
val
(
null
!=
b
?
b
:
""
)}
else
if
(
"select-multiple"
===
a
.
type
){
if
(
null
!=
b
){
for
(
j
=
[],
d
=
0
,
e
=
a
.
length
;
e
>
d
;
d
++
)
c
=
a
[
d
],
j
.
push
(
c
.
selected
=
(
h
=
c
.
value
,
f
.
call
(
b
,
h
)
>=
0
));
return
j
}}
else
if
((
null
!=
b
?
b
.
toString
():
void
0
)
!==
(
null
!=
(
i
=
a
.
value
)?
i
.
toString
():
void
0
))
return
a
.
value
=
null
!=
b
?
b
:
""
}},
a
.
binders
[
"if"
]
=
{
block
:
!
0
,
bind
:
function
(
a
){
var
b
,
c
;
return
null
==
this
.
marker
?(
b
=
[
this
.
view
.
config
.
prefix
,
this
.
type
].
join
(
"-"
).
replace
(
"--"
,
"-"
),
c
=
a
.
getAttribute
(
b
),
this
.
marker
=
document
.
createComment
(
" rivets: "
+
this
.
type
+
" "
+
c
+
" "
),
a
.
removeAttribute
(
b
),
a
.
parentNode
.
insertBefore
(
this
.
marker
,
a
),
a
.
parentNode
.
removeChild
(
a
)):
void
0
},
unbind
:
function
(){
var
a
;
return
null
!=
(
a
=
this
.
nested
)?
a
.
unbind
():
void
0
},
routine
:
function
(
b
,
c
){
var
d
,
e
,
f
,
g
,
h
;
if
(
!!
c
==
(
null
==
this
.
nested
)){
if
(
c
){
f
=
{},
h
=
this
.
view
.
models
;
for
(
d
in
h
)
e
=
h
[
d
],
f
[
d
]
=
e
;
return
g
=
{
binders
:
this
.
view
.
options
.
binders
,
formatters
:
this
.
view
.
options
.
formatters
,
adapters
:
this
.
view
.
options
.
adapters
,
config
:
this
.
view
.
options
.
config
},(
this
.
nested
=
new
a
.
View
(
b
,
f
,
g
)).
bind
(),
this
.
marker
.
parentNode
.
insertBefore
(
b
,
this
.
marker
.
nextSibling
)}
return
b
.
parentNode
.
removeChild
(
b
),
this
.
nested
.
unbind
(),
delete
this
.
nested
}},
update
:
function
(
a
){
var
b
;
return
null
!=
(
b
=
this
.
nested
)?
b
.
update
(
a
):
void
0
}},
a
.
binders
.
unless
=
{
block
:
!
0
,
bind
:
function
(
b
){
return
a
.
binders
[
"if"
].
bind
.
call
(
this
,
b
)},
unbind
:
function
(){
return
a
.
binders
[
"if"
].
unbind
.
call
(
this
)},
routine
:
function
(
b
,
c
){
return
a
.
binders
[
"if"
].
routine
.
call
(
this
,
b
,
!
c
)},
update
:
function
(
b
){
return
a
.
binders
[
"if"
].
update
.
call
(
this
,
b
)}},
a
.
binders
[
"on-*"
]
=
{
"function"
:
!
0
,
unbind
:
function
(
b
){
return
this
.
handler
?
a
.
Util
.
unbindEvent
(
b
,
this
.
args
[
0
],
this
.
handler
):
void
0
},
routine
:
function
(
b
,
c
){
return
this
.
handler
&&
a
.
Util
.
unbindEvent
(
b
,
this
.
args
[
0
],
this
.
handler
),
a
.
Util
.
bindEvent
(
b
,
this
.
args
[
0
],
this
.
handler
=
this
.
eventHandler
(
c
))}},
a
.
binders
[
"each-*"
]
=
{
block
:
!
0
,
bind
:
function
(
a
){
var
b
;
return
null
==
this
.
marker
?(
b
=
[
this
.
view
.
config
.
prefix
,
this
.
type
].
join
(
"-"
).
replace
(
"--"
,
"-"
),
this
.
marker
=
document
.
createComment
(
" rivets: "
+
this
.
type
+
" "
),
this
.
iterated
=
[],
a
.
removeAttribute
(
b
),
a
.
parentNode
.
insertBefore
(
this
.
marker
,
a
),
a
.
parentNode
.
removeChild
(
a
)):
void
0
},
unbind
:
function
(){
var
a
,
b
,
c
,
d
,
e
;
if
(
null
!=
this
.
iterated
){
for
(
d
=
this
.
iterated
,
e
=
[],
b
=
0
,
c
=
d
.
length
;
c
>
b
;
b
++
)
a
=
d
[
b
],
e
.
push
(
a
.
unbind
());
return
e
}},
routine
:
function
(
b
,
c
){
var
d
,
e
,
f
,
g
,
h
,
i
,
j
,
k
,
l
,
m
,
n
,
o
,
p
,
q
,
r
,
s
,
t
,
u
,
v
,
w
,
x
,
y
,
z
,
A
;
if
(
k
=
this
.
args
[
0
],
c
=
c
||
[],
this
.
iterated
.
length
>
c
.
length
)
for
(
w
=
Array
(
this
.
iterated
.
length
-
c
.
length
),
q
=
0
,
t
=
w
.
length
;
t
>
q
;
q
++
)
f
=
w
[
q
],
p
=
this
.
iterated
.
pop
(),
p
.
unbind
(),
this
.
marker
.
parentNode
.
removeChild
(
p
.
els
[
0
]);
for
(
g
=
r
=
0
,
u
=
c
.
length
;
u
>
r
;
g
=++
r
)
if
(
j
=
c
[
g
],
e
=
{},
e
[
k
]
=
j
,
null
==
this
.
iterated
[
g
]){
x
=
this
.
view
.
models
;
for
(
i
in
x
)
j
=
x
[
i
],
null
==
e
[
i
]
&&
(
e
[
i
]
=
j
);
m
=
this
.
iterated
.
length
?
this
.
iterated
[
this
.
iterated
.
length
-
1
].
els
[
0
]:
this
.
marker
,
l
=
{
binders
:
this
.
view
.
options
.
binders
,
formatters
:
this
.
view
.
options
.
formatters
,
adapters
:
this
.
view
.
options
.
adapters
,
config
:{}},
y
=
this
.
view
.
options
.
config
;
for
(
h
in
y
)
o
=
y
[
h
],
l
.
config
[
h
]
=
o
;
l
.
config
.
preloadData
=!
0
,
n
=
b
.
cloneNode
(
!
0
),
p
=
new
a
.
View
(
n
,
e
,
l
),
p
.
bind
(),
this
.
iterated
.
push
(
p
),
this
.
marker
.
parentNode
.
insertBefore
(
n
,
m
.
nextSibling
)}
else
this
.
iterated
[
g
].
models
[
k
]
!==
j
&&
this
.
iterated
[
g
].
update
(
e
);
if
(
"OPTION"
===
b
.
nodeName
){
for
(
z
=
this
.
view
.
bindings
,
A
=
[],
s
=
0
,
v
=
z
.
length
;
v
>
s
;
s
++
)
d
=
z
[
s
],
d
.
el
===
this
.
marker
.
parentNode
&&
"value"
===
d
.
type
?
A
.
push
(
d
.
sync
()):
A
.
push
(
void
0
);
return
A
}},
update
:
function
(
a
){
var
b
,
c
,
d
,
e
,
f
,
g
,
h
,
i
;
b
=
{};
for
(
c
in
a
)
d
=
a
[
c
],
c
!==
this
.
args
[
0
]
&&
(
b
[
c
]
=
d
);
for
(
h
=
this
.
iterated
,
i
=
[],
f
=
0
,
g
=
h
.
length
;
g
>
f
;
f
++
)
e
=
h
[
f
],
i
.
push
(
e
.
update
(
b
));
return
i
}},
a
.
binders
[
"class-*"
]
=
function
(
a
,
b
){
var
c
;
return
c
=
" "
+
a
.
className
+
" "
,
!
b
==
(
-
1
!==
c
.
indexOf
(
" "
+
this
.
args
[
0
]
+
" "
))?
a
.
className
=
b
?
""
+
a
.
className
+
" "
+
this
.
args
[
0
]:
c
.
replace
(
" "
+
this
.
args
[
0
]
+
" "
,
" "
).
trim
():
void
0
},
a
.
binders
[
"*"
]
=
function
(
a
,
b
){
return
b
?
a
.
setAttribute
(
this
.
type
,
b
):
a
.
removeAttribute
(
this
.
type
)},
a
.
adapters
[
"."
]
=
{
id
:
"_rv"
,
counter
:
0
,
weakmap
:{},
weakReference
:
function
(
a
){
var
b
;
return
null
==
a
[
this
.
id
]
&&
(
b
=
this
.
counter
++
,
this
.
weakmap
[
b
]
=
{
callbacks
:{}},
Object
.
defineProperty
(
a
,
this
.
id
,{
value
:
b
})),
this
.
weakmap
[
a
[
this
.
id
]]},
stubFunction
:
function
(
a
,
b
){
var
c
,
d
,
e
;
return
d
=
a
[
b
],
c
=
this
.
weakReference
(
a
),
e
=
this
.
weakmap
,
a
[
b
]
=
function
(){
var
b
,
f
,
g
,
h
,
i
,
j
,
k
,
l
,
m
,
n
;
h
=
d
.
apply
(
a
,
arguments
),
k
=
c
.
pointers
;
for
(
g
in
k
)
for
(
f
=
k
[
g
],
n
=
null
!=
(
l
=
null
!=
(
m
=
e
[
g
])?
m
.
callbacks
[
f
]:
void
0
)?
l
:[],
i
=
0
,
j
=
n
.
length
;
j
>
i
;
i
++
)
b
=
n
[
i
],
b
();
return
h
}},
observeMutations
:
function
(
a
,
b
,
c
){
var
d
,
e
,
g
,
h
,
i
,
j
;
if
(
Array
.
isArray
(
a
)){
if
(
g
=
this
.
weakReference
(
a
),
null
==
g
.
pointers
)
for
(
g
.
pointers
=
{},
e
=
[
"push"
,
"pop"
,
"shift"
,
"unshift"
,
"sort"
,
"reverse"
,
"splice"
],
i
=
0
,
j
=
e
.
length
;
j
>
i
;
i
++
)
d
=
e
[
i
],
this
.
stubFunction
(
a
,
d
);
if
(
null
==
(
h
=
g
.
pointers
)[
b
]
&&
(
h
[
b
]
=
[]),
f
.
call
(
g
.
pointers
[
b
],
c
)
<
0
)
return
g
.
pointers
[
b
].
push
(
c
)}},
unobserveMutations
:
function
(
a
,
b
,
c
){
var
d
,
e
;
return
Array
.
isArray
(
a
&&
null
!=
a
[
this
.
id
])
&&
(
d
=
null
!=
(
e
=
this
.
weakReference
(
a
).
pointers
)?
e
[
b
]:
void
0
)?
d
.
splice
(
d
.
indexOf
(
c
),
1
):
void
0
},
subscribe
:
function
(
a
,
b
,
c
){
var
d
,
e
,
g
=
this
;
return
d
=
this
.
weakReference
(
a
).
callbacks
,
null
==
d
[
b
]
&&
(
d
[
b
]
=
[],
e
=
a
[
b
],
Object
.
defineProperty
(
a
,
b
,{
get
:
function
(){
return
e
},
set
:
function
(
f
){
var
h
,
i
,
j
;
if
(
f
!==
e
){
for
(
e
=
f
,
j
=
d
[
b
],
h
=
0
,
i
=
j
.
length
;
i
>
h
;
h
++
)
c
=
j
[
h
],
c
();
return
g
.
observeMutations
(
f
,
a
[
g
.
id
],
b
)}}})),
f
.
call
(
d
[
b
],
c
)
<
0
&&
d
[
b
].
push
(
c
),
this
.
observeMutations
(
a
[
b
],
a
[
this
.
id
],
b
)},
unsubscribe
:
function
(
a
,
b
,
c
){
var
d
;
return
d
=
this
.
weakmap
[
a
[
this
.
id
]].
callbacks
[
b
],
d
.
splice
(
d
.
indexOf
(
c
),
1
),
this
.
unobserveMutations
(
a
[
b
],
a
[
this
.
id
],
b
)},
read
:
function
(
a
,
b
){
return
a
[
b
]},
publish
:
function
(
a
,
b
,
c
){
return
a
[
b
]
=
c
}},
a
.
factory
=
function
(
b
){
return
b
.
_
=
a
,
b
.
binders
=
a
.
binders
,
b
.
components
=
a
.
components
,
b
.
formatters
=
a
.
formatters
,
b
.
adapters
=
a
.
adapters
,
b
.
config
=
a
.
config
,
b
.
configure
=
function
(
b
){
var
c
,
d
;
null
==
b
&&
(
b
=
{});
for
(
c
in
b
)
d
=
b
[
c
],
a
.
config
[
c
]
=
d
},
b
.
bind
=
function
(
b
,
c
,
d
){
var
e
;
return
null
==
c
&&
(
c
=
{}),
null
==
d
&&
(
d
=
{}),
e
=
new
a
.
View
(
b
,
c
,
d
),
e
.
bind
(),
e
}},
"object"
==
typeof
exports
?
a
.
factory
(
exports
):
"function"
==
typeof
define
&&
define
.
amd
?
define
([
"exports"
],
function
(
b
){
return
a
.
factory
(
this
.
rivets
=
b
),
b
}):
a
.
factory
(
this
.
rivets
=
{})}).
call
(
this
);
\ No newline at end of file
...
...
package.json
View file @
39df93d
{
"name"
:
"rivets"
,
"description"
:
"Declarative data binding + templating solution."
,
"version"
:
"0.6.
5
"
,
"version"
:
"0.6.
6
"
,
"author"
:
"Michael Richards"
,
"url"
:
"http://rivetsjs.com"
,
"main"
:
"./dist/rivets.js"
,
...
...
Please
register
or
sign in
to post a comment