Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
T
todomvc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Eugene Shen
todomvc
Commits
e24da2bc
Commit
e24da2bc
authored
Mar 15, 2015
by
TasteBot
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update the build files for gh-pages [ci skip]
parent
27dcb0d2
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
8797 additions
and
5044 deletions
+8797
-5044
examples/dijon/bower.json
examples/dijon/bower.json
+0
-9
examples/dijon/bower_components/todomvc-common/bg.png
examples/dijon/bower_components/todomvc-common/bg.png
+0
-0
examples/dijon/index.html
examples/dijon/index.html
+5
-4
examples/dijon/node_modules/handlebars/dist/handlebars.js
examples/dijon/node_modules/handlebars/dist/handlebars.js
+2746
-0
examples/dijon/node_modules/jquery/dist/jquery.js
examples/dijon/node_modules/jquery/dist/jquery.js
+5481
-5031
examples/dijon/node_modules/todomvc-app-css/index.css
examples/dijon/node_modules/todomvc-app-css/index.css
+388
-0
examples/dijon/node_modules/todomvc-common/base.css
examples/dijon/node_modules/todomvc-common/base.css
+141
-0
examples/dijon/node_modules/todomvc-common/base.js
examples/dijon/node_modules/todomvc-common/base.js
+27
-0
examples/dijon/package.json
examples/dijon/package.json
+9
-0
No files found.
examples/dijon/bower.json
deleted
100644 → 0
View file @
27dcb0d2
{
"name"
:
"todomvc-dijon"
,
"version"
:
"0.0.0"
,
"dependencies"
:
{
"jquery"
:
"~2.0.0"
,
"handlebars.js"
:
"~1.0.0-rc.3"
,
"todomvc-common"
:
"~0.3.0"
}
}
examples/dijon/bower_components/todomvc-common/bg.png
deleted
100644 → 0
View file @
27dcb0d2
2.08 KB
examples/dijon/index.html
View file @
e24da2bc
...
@@ -3,7 +3,8 @@
...
@@ -3,7 +3,8 @@
<head>
<head>
<meta
charset=
"utf-8"
>
<meta
charset=
"utf-8"
>
<title>
Dijon • TodoMVC
</title>
<title>
Dijon • TodoMVC
</title>
<link
rel=
"stylesheet"
href=
"bower_components/todomvc-common/base.css"
>
<link
rel=
"stylesheet"
href=
"node_modules/todomvc-common/base.css"
>
<link
rel=
"stylesheet"
href=
"node_modules/todomvc-app-css/index.css"
>
</head>
</head>
<body>
<body>
<section
id=
"todoapp"
>
<section
id=
"todoapp"
>
...
@@ -39,9 +40,9 @@
...
@@ -39,9 +40,9 @@
<
/li
>
<
/li
>
{{
/
this
}}
{{
/
this
}}
</script>
</script>
<script
src=
"
bower_component
s/todomvc-common/base.js"
></script>
<script
src=
"
node_module
s/todomvc-common/base.js"
></script>
<script
src=
"
bower_components/jquery
/jquery.js"
></script>
<script
src=
"
node_modules/jquery/dist
/jquery.js"
></script>
<script
src=
"
bower_components/handlebars.js
/handlebars.js"
></script>
<script
src=
"
node_modules/handlebars/dist
/handlebars.js"
></script>
<script
src=
"js/lib/dijon-0.5.3.min.js"
></script>
<script
src=
"js/lib/dijon-0.5.3.min.js"
></script>
<script
src=
"js/config.js"
></script>
<script
src=
"js/config.js"
></script>
<script
src=
"js/models/TodosModel.js"
></script>
<script
src=
"js/models/TodosModel.js"
></script>
...
...
examples/dijon/
bower_components/handlebars.js
/handlebars.js
→
examples/dijon/
node_modules/handlebars/dist
/handlebars.js
View file @
e24da2bc
/*
/*!
handlebars v1.3.0
Copyright (C) 2011 by Yehuda Katz
Copyright (C) 2011 by Yehuda Katz
...
@@ -20,114 +22,254 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
...
@@ -20,114 +22,254 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
THE SOFTWARE.
@license
*/
*/
/* exported Handlebars */
var
Handlebars
=
(
function
()
{
// handlebars/safe-string.js
var
__module4__
=
(
function
()
{
"
use strict
"
;
var
__exports__
;
// Build out our basic SafeString type
function
SafeString
(
string
)
{
this
.
string
=
string
;
}
SafeString
.
prototype
.
toString
=
function
()
{
return
""
+
this
.
string
;
};
__exports__
=
SafeString
;
return
__exports__
;
})();
// handlebars/utils.js
var
__module3__
=
(
function
(
__dependency1__
)
{
"
use strict
"
;
var
__exports__
=
{};
/*jshint -W004 */
var
SafeString
=
__dependency1__
;
var
escape
=
{
"
&
"
:
"
&
"
,
"
<
"
:
"
<
"
,
"
>
"
:
"
>
"
,
'
"
'
:
"
"
"
,
"
'
"
:
"
'
"
,
"
`
"
:
"
`
"
};
// lib/handlebars/base.js
var
badChars
=
/
[
&<>"'`
]
/g
;
var
possible
=
/
[
&<>"'`
]
/
;
function
escapeChar
(
chr
)
{
return
escape
[
chr
]
||
"
&
"
;
}
function
extend
(
obj
,
value
)
{
for
(
var
key
in
value
)
{
if
(
Object
.
prototype
.
hasOwnProperty
.
call
(
value
,
key
))
{
obj
[
key
]
=
value
[
key
];
}
}
}
__exports__
.
extend
=
extend
;
var
toString
=
Object
.
prototype
.
toString
;
__exports__
.
toString
=
toString
;
// Sourced from lodash
// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
var
isFunction
=
function
(
value
)
{
return
typeof
value
===
'
function
'
;
};
// fallback for older versions of Chrome and Safari
if
(
isFunction
(
/x/
))
{
isFunction
=
function
(
value
)
{
return
typeof
value
===
'
function
'
&&
toString
.
call
(
value
)
===
'
[object Function]
'
;
};
}
var
isFunction
;
__exports__
.
isFunction
=
isFunction
;
var
isArray
=
Array
.
isArray
||
function
(
value
)
{
return
(
value
&&
typeof
value
===
'
object
'
)
?
toString
.
call
(
value
)
===
'
[object Array]
'
:
false
;
};
__exports__
.
isArray
=
isArray
;
function
escapeExpression
(
string
)
{
// don't escape SafeStrings, since they're already safe
if
(
string
instanceof
SafeString
)
{
return
string
.
toString
();
}
else
if
(
!
string
&&
string
!==
0
)
{
return
""
;
}
// Force a string conversion as this will be done by the append regardless and
// the regex test will do this transparently behind the scenes, causing issues if
// an object's to string has escaped characters in it.
string
=
""
+
string
;
if
(
!
possible
.
test
(
string
))
{
return
string
;
}
return
string
.
replace
(
badChars
,
escapeChar
);
}
__exports__
.
escapeExpression
=
escapeExpression
;
function
isEmpty
(
value
)
{
if
(
!
value
&&
value
!==
0
)
{
return
true
;
}
else
if
(
isArray
(
value
)
&&
value
.
length
===
0
)
{
return
true
;
}
else
{
return
false
;
}
}
__exports__
.
isEmpty
=
isEmpty
;
return
__exports__
;
})(
__module4__
);
// handlebars/exception.js
var
__module5__
=
(
function
()
{
"
use strict
"
;
var
__exports__
;
var
errorProps
=
[
'
description
'
,
'
fileName
'
,
'
lineNumber
'
,
'
message
'
,
'
name
'
,
'
number
'
,
'
stack
'
];
function
Exception
(
message
,
node
)
{
var
line
;
if
(
node
&&
node
.
firstLine
)
{
line
=
node
.
firstLine
;
message
+=
'
-
'
+
line
+
'
:
'
+
node
.
firstColumn
;
}
var
tmp
=
Error
.
prototype
.
constructor
.
call
(
this
,
message
);
// Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
for
(
var
idx
=
0
;
idx
<
errorProps
.
length
;
idx
++
)
{
this
[
errorProps
[
idx
]]
=
tmp
[
errorProps
[
idx
]];
}
if
(
line
)
{
this
.
lineNumber
=
line
;
this
.
column
=
node
.
firstColumn
;
}
}
/*jshint eqnull:true*/
Exception
.
prototype
=
new
Error
();
this
.
Handlebars
=
{};
(
function
(
Handlebars
)
{
__exports__
=
Exception
;
return
__exports__
;
})();
Handlebars
.
VERSION
=
"
1.0.0-rc.3
"
;
// handlebars/base.js
Handlebars
.
COMPILER_REVISION
=
2
;
var
__module2__
=
(
function
(
__dependency1__
,
__dependency2__
)
{
"
use strict
"
;
var
__exports__
=
{};
var
Utils
=
__dependency1__
;
var
Exception
=
__dependency2__
;
Handlebars
.
REVISION_CHANGES
=
{
var
VERSION
=
"
1.3.0
"
;
__exports__
.
VERSION
=
VERSION
;
var
COMPILER_REVISION
=
4
;
__exports__
.
COMPILER_REVISION
=
COMPILER_REVISION
;
var
REVISION_CHANGES
=
{
1
:
'
<= 1.0.rc.2
'
,
// 1.0.rc.2 is actually rev2 but doesn't report it
1
:
'
<= 1.0.rc.2
'
,
// 1.0.rc.2 is actually rev2 but doesn't report it
2
:
'
>= 1.0.0-rc.3
'
2
:
'
== 1.0.0-rc.3
'
,
};
3
:
'
== 1.0.0-rc.4
'
,
4
:
'
>= 1.0.0
'
};
__exports__
.
REVISION_CHANGES
=
REVISION_CHANGES
;
var
isArray
=
Utils
.
isArray
,
isFunction
=
Utils
.
isFunction
,
toString
=
Utils
.
toString
,
objectType
=
'
[object Object]
'
;
function
HandlebarsEnvironment
(
helpers
,
partials
)
{
this
.
helpers
=
helpers
||
{};
this
.
partials
=
partials
||
{};
registerDefaultHelpers
(
this
);
}
Handlebars
.
helpers
=
{};
__exports__
.
HandlebarsEnvironment
=
HandlebarsEnvironment
;
HandlebarsEnvironment
.
prototype
=
{
Handlebars
.
partials
=
{};
constructor
:
HandlebarsEnvironment
,
Handlebars
.
registerHelper
=
function
(
name
,
fn
,
inverse
)
{
logger
:
logger
,
if
(
inverse
)
{
fn
.
not
=
inverse
;
}
log
:
log
,
registerHelper
:
function
(
name
,
fn
,
inverse
)
{
if
(
toString
.
call
(
name
)
===
objectType
)
{
if
(
inverse
||
fn
)
{
throw
new
Exception
(
'
Arg not supported with multiple helpers
'
);
}
Utils
.
extend
(
this
.
helpers
,
name
);
}
else
{
if
(
inverse
)
{
fn
.
not
=
inverse
;
}
this
.
helpers
[
name
]
=
fn
;
this
.
helpers
[
name
]
=
fn
;
};
}
},
Handlebars
.
registerPartial
=
function
(
name
,
str
)
{
registerPartial
:
function
(
name
,
str
)
{
if
(
toString
.
call
(
name
)
===
objectType
)
{
Utils
.
extend
(
this
.
partials
,
name
);
}
else
{
this
.
partials
[
name
]
=
str
;
this
.
partials
[
name
]
=
str
;
};
}
}
};
Handlebars
.
registerHelper
(
'
helperMissing
'
,
function
(
arg
)
{
function
registerDefaultHelpers
(
instance
)
{
instance
.
registerHelper
(
'
helperMissing
'
,
function
(
arg
)
{
if
(
arguments
.
length
===
2
)
{
if
(
arguments
.
length
===
2
)
{
return
undefined
;
return
undefined
;
}
else
{
}
else
{
throw
new
Error
(
"
Could not find property
'
"
+
arg
+
"
'
"
);
throw
new
Exception
(
"
Missing helper:
'
"
+
arg
+
"
'
"
);
}
}
});
});
var
toString
=
Object
.
prototype
.
toString
,
functionType
=
"
[object Function]
"
;
Handlebars
.
registerHelper
(
'
blockHelperMissing
'
,
function
(
context
,
options
)
{
instance
.
registerHelper
(
'
blockHelperMissing
'
,
function
(
context
,
options
)
{
var
inverse
=
options
.
inverse
||
function
()
{},
fn
=
options
.
fn
;
var
inverse
=
options
.
inverse
||
function
()
{},
fn
=
options
.
fn
;
if
(
isFunction
(
context
))
{
context
=
context
.
call
(
this
);
}
var
ret
=
""
;
var
type
=
toString
.
call
(
context
);
if
(
type
===
functionType
)
{
context
=
context
.
call
(
this
);
}
if
(
context
===
true
)
{
if
(
context
===
true
)
{
return
fn
(
this
);
return
fn
(
this
);
}
else
if
(
context
===
false
||
context
==
null
)
{
}
else
if
(
context
===
false
||
context
==
null
)
{
return
inverse
(
this
);
return
inverse
(
this
);
}
else
if
(
type
===
"
[object Array]
"
)
{
}
else
if
(
isArray
(
context
)
)
{
if
(
context
.
length
>
0
)
{
if
(
context
.
length
>
0
)
{
return
Handlebars
.
helpers
.
each
(
context
,
options
);
return
instance
.
helpers
.
each
(
context
,
options
);
}
else
{
}
else
{
return
inverse
(
this
);
return
inverse
(
this
);
}
}
}
else
{
}
else
{
return
fn
(
context
);
return
fn
(
context
);
}
}
});
});
Handlebars
.
K
=
function
()
{};
Handlebars
.
createFrame
=
Object
.
create
||
function
(
object
)
{
Handlebars
.
K
.
prototype
=
object
;
var
obj
=
new
Handlebars
.
K
();
Handlebars
.
K
.
prototype
=
null
;
return
obj
;
};
Handlebars
.
logger
=
{
DEBUG
:
0
,
INFO
:
1
,
WARN
:
2
,
ERROR
:
3
,
level
:
3
,
methodMap
:
{
0
:
'
debug
'
,
1
:
'
info
'
,
2
:
'
warn
'
,
3
:
'
error
'
},
// can be overridden in the host environment
log
:
function
(
level
,
obj
)
{
if
(
Handlebars
.
logger
.
level
<=
level
)
{
var
method
=
Handlebars
.
logger
.
methodMap
[
level
];
if
(
typeof
console
!==
'
undefined
'
&&
console
[
method
])
{
console
[
method
].
call
(
console
,
obj
);
}
}
}
};
Handlebars
.
log
=
function
(
level
,
obj
)
{
Handlebars
.
logger
.
log
(
level
,
obj
);
};
Handlebars
.
registerHelper
(
'
each
'
,
function
(
context
,
options
)
{
instance
.
registerHelper
(
'
each
'
,
function
(
context
,
options
)
{
var
fn
=
options
.
fn
,
inverse
=
options
.
inverse
;
var
fn
=
options
.
fn
,
inverse
=
options
.
inverse
;
var
i
=
0
,
ret
=
""
,
data
;
var
i
=
0
,
ret
=
""
,
data
;
if
(
isFunction
(
context
))
{
context
=
context
.
call
(
this
);
}
if
(
options
.
data
)
{
if
(
options
.
data
)
{
data
=
Handlebars
.
createFrame
(
options
.
data
);
data
=
createFrame
(
options
.
data
);
}
}
if
(
context
&&
typeof
context
===
'
object
'
)
{
if
(
context
&&
typeof
context
===
'
object
'
)
{
if
(
context
instanceof
Array
)
{
if
(
isArray
(
context
))
{
for
(
var
j
=
context
.
length
;
i
<
j
;
i
++
)
{
for
(
var
j
=
context
.
length
;
i
<
j
;
i
++
)
{
if
(
data
)
{
data
.
index
=
i
;
}
if
(
data
)
{
data
.
index
=
i
;
data
.
first
=
(
i
===
0
);
data
.
last
=
(
i
===
(
context
.
length
-
1
));
}
ret
=
ret
+
fn
(
context
[
i
],
{
data
:
data
});
ret
=
ret
+
fn
(
context
[
i
],
{
data
:
data
});
}
}
}
else
{
}
else
{
for
(
var
key
in
context
)
{
for
(
var
key
in
context
)
{
if
(
context
.
hasOwnProperty
(
key
))
{
if
(
context
.
hasOwnProperty
(
key
))
{
if
(
data
)
{
data
.
key
=
key
;
}
if
(
data
)
{
data
.
key
=
key
;
data
.
index
=
i
;
data
.
first
=
(
i
===
0
);
}
ret
=
ret
+
fn
(
context
[
key
],
{
data
:
data
});
ret
=
ret
+
fn
(
context
[
key
],
{
data
:
data
});
i
++
;
i
++
;
}
}
...
@@ -140,152 +282,595 @@ Handlebars.registerHelper('each', function(context, options) {
...
@@ -140,152 +282,595 @@ Handlebars.registerHelper('each', function(context, options) {
}
}
return
ret
;
return
ret
;
});
});
Handlebars
.
registerHelper
(
'
if
'
,
function
(
context
,
options
)
{
instance
.
registerHelper
(
'
if
'
,
function
(
conditional
,
options
)
{
var
type
=
toString
.
call
(
context
);
if
(
isFunction
(
conditional
))
{
conditional
=
conditional
.
call
(
this
);
}
if
(
type
===
functionType
)
{
context
=
context
.
call
(
this
);
}
if
(
!
context
||
Handlebars
.
Utils
.
isEmpty
(
context
))
{
// Default behavior is to render the positive path if the value is truthy and not empty.
// The `includeZero` option may be set to treat the condtional as purely not empty based on the
// behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.
if
((
!
options
.
hash
.
includeZero
&&
!
conditional
)
||
Utils
.
isEmpty
(
conditional
))
{
return
options
.
inverse
(
this
);
return
options
.
inverse
(
this
);
}
else
{
}
else
{
return
options
.
fn
(
this
);
return
options
.
fn
(
this
);
}
}
});
});
Handlebars
.
registerHelper
(
'
unless
'
,
function
(
context
,
options
)
{
instance
.
registerHelper
(
'
unless
'
,
function
(
conditional
,
options
)
{
var
fn
=
options
.
fn
,
inverse
=
options
.
inverse
;
return
instance
.
helpers
[
'
if
'
].
call
(
this
,
conditional
,
{
fn
:
options
.
inverse
,
inverse
:
options
.
fn
,
hash
:
options
.
hash
});
options
.
fn
=
inverse
;
});
options
.
inverse
=
fn
;
return
Handlebars
.
helpers
[
'
if
'
].
call
(
this
,
context
,
options
);
instance
.
registerHelper
(
'
with
'
,
function
(
context
,
options
)
{
});
if
(
isFunction
(
context
))
{
context
=
context
.
call
(
this
);
}
Handlebars
.
registerHelper
(
'
with
'
,
function
(
context
,
options
)
{
if
(
!
Utils
.
isEmpty
(
context
))
return
options
.
fn
(
context
);
return
options
.
fn
(
context
);
});
});
Handlebars
.
registerHelper
(
'
log
'
,
function
(
context
,
options
)
{
instance
.
registerHelper
(
'
log
'
,
function
(
context
,
options
)
{
var
level
=
options
.
data
&&
options
.
data
.
level
!=
null
?
parseInt
(
options
.
data
.
level
,
10
)
:
1
;
var
level
=
options
.
data
&&
options
.
data
.
level
!=
null
?
parseInt
(
options
.
data
.
level
,
10
)
:
1
;
Handlebars
.
log
(
level
,
context
);
instance
.
log
(
level
,
context
);
});
});
}
}(
this
.
Handlebars
));
;
var
logger
=
{
// lib/handlebars/compiler/parser.js
methodMap
:
{
0
:
'
debug
'
,
1
:
'
info
'
,
2
:
'
warn
'
,
3
:
'
error
'
},
/* Jison generated parser */
var
handlebars
=
(
function
(){
// State enum
var
parser
=
{
trace
:
function
trace
()
{
},
DEBUG
:
0
,
yy
:
{},
INFO
:
1
,
symbols_
:
{
"
error
"
:
2
,
"
root
"
:
3
,
"
program
"
:
4
,
"
EOF
"
:
5
,
"
simpleInverse
"
:
6
,
"
statements
"
:
7
,
"
statement
"
:
8
,
"
openInverse
"
:
9
,
"
closeBlock
"
:
10
,
"
openBlock
"
:
11
,
"
mustache
"
:
12
,
"
partial
"
:
13
,
"
CONTENT
"
:
14
,
"
COMMENT
"
:
15
,
"
OPEN_BLOCK
"
:
16
,
"
inMustache
"
:
17
,
"
CLOSE
"
:
18
,
"
OPEN_INVERSE
"
:
19
,
"
OPEN_ENDBLOCK
"
:
20
,
"
path
"
:
21
,
"
OPEN
"
:
22
,
"
OPEN_UNESCAPED
"
:
23
,
"
OPEN_PARTIAL
"
:
24
,
"
partialName
"
:
25
,
"
params
"
:
26
,
"
hash
"
:
27
,
"
DATA
"
:
28
,
"
param
"
:
29
,
"
STRING
"
:
30
,
"
INTEGER
"
:
31
,
"
BOOLEAN
"
:
32
,
"
hashSegments
"
:
33
,
"
hashSegment
"
:
34
,
"
ID
"
:
35
,
"
EQUALS
"
:
36
,
"
PARTIAL_NAME
"
:
37
,
"
pathSegments
"
:
38
,
"
SEP
"
:
39
,
"
$accept
"
:
0
,
"
$end
"
:
1
},
WARN
:
2
,
terminals_
:
{
2
:
"
error
"
,
5
:
"
EOF
"
,
14
:
"
CONTENT
"
,
15
:
"
COMMENT
"
,
16
:
"
OPEN_BLOCK
"
,
18
:
"
CLOSE
"
,
19
:
"
OPEN_INVERSE
"
,
20
:
"
OPEN_ENDBLOCK
"
,
22
:
"
OPEN
"
,
23
:
"
OPEN_UNESCAPED
"
,
24
:
"
OPEN_PARTIAL
"
,
28
:
"
DATA
"
,
30
:
"
STRING
"
,
31
:
"
INTEGER
"
,
32
:
"
BOOLEAN
"
,
35
:
"
ID
"
,
36
:
"
EQUALS
"
,
37
:
"
PARTIAL_NAME
"
,
39
:
"
SEP
"
},
ERROR
:
3
,
productions_
:
[
0
,[
3
,
2
],[
4
,
2
],[
4
,
3
],[
4
,
2
],[
4
,
1
],[
4
,
1
],[
4
,
0
],[
7
,
1
],[
7
,
2
],[
8
,
3
],[
8
,
3
],[
8
,
1
],[
8
,
1
],[
8
,
1
],[
8
,
1
],[
11
,
3
],[
9
,
3
],[
10
,
3
],[
12
,
3
],[
12
,
3
],[
13
,
3
],[
13
,
4
],[
6
,
2
],[
17
,
3
],[
17
,
2
],[
17
,
2
],[
17
,
1
],[
17
,
1
],[
26
,
2
],[
26
,
1
],[
29
,
1
],[
29
,
1
],[
29
,
1
],[
29
,
1
],[
29
,
1
],[
27
,
1
],[
33
,
2
],[
33
,
1
],[
34
,
3
],[
34
,
3
],[
34
,
3
],[
34
,
3
],[
34
,
3
],[
25
,
1
],[
21
,
1
],[
38
,
3
],[
38
,
1
]],
level
:
3
,
performAction
:
function
anonymous
(
yytext
,
yyleng
,
yylineno
,
yy
,
yystate
,
$$
,
_$
)
{
// can be overridden in the host environment
var
$0
=
$$
.
length
-
1
;
log
:
function
(
level
,
obj
)
{
switch
(
yystate
)
{
if
(
logger
.
level
<=
level
)
{
case
1
:
return
$$
[
$0
-
1
];
var
method
=
logger
.
methodMap
[
level
];
break
;
if
(
typeof
console
!==
'
undefined
'
&&
console
[
method
])
{
case
2
:
this
.
$
=
new
yy
.
ProgramNode
([],
$$
[
$0
]);
console
[
method
].
call
(
console
,
obj
);
break
;
}
case
3
:
this
.
$
=
new
yy
.
ProgramNode
(
$$
[
$0
-
2
],
$$
[
$0
]);
}
break
;
}
case
4
:
this
.
$
=
new
yy
.
ProgramNode
(
$$
[
$0
-
1
],
[]);
};
break
;
__exports__
.
logger
=
logger
;
case
5
:
this
.
$
=
new
yy
.
ProgramNode
(
$$
[
$0
]);
function
log
(
level
,
obj
)
{
logger
.
log
(
level
,
obj
);
}
break
;
case
6
:
this
.
$
=
new
yy
.
ProgramNode
([],
[]);
__exports__
.
log
=
log
;
var
createFrame
=
function
(
object
)
{
break
;
var
obj
=
{};
case
7
:
this
.
$
=
new
yy
.
ProgramNode
([]);
Utils
.
extend
(
obj
,
object
);
break
;
return
obj
;
case
8
:
this
.
$
=
[
$$
[
$0
]];
};
break
;
__exports__
.
createFrame
=
createFrame
;
case
9
:
$$
[
$0
-
1
].
push
(
$$
[
$0
]);
this
.
$
=
$$
[
$0
-
1
];
return
__exports__
;
break
;
})(
__module3__
,
__module5__
);
case
10
:
this
.
$
=
new
yy
.
BlockNode
(
$$
[
$0
-
2
],
$$
[
$0
-
1
].
inverse
,
$$
[
$0
-
1
],
$$
[
$0
]);
break
;
// handlebars/runtime.js
case
11
:
this
.
$
=
new
yy
.
BlockNode
(
$$
[
$0
-
2
],
$$
[
$0
-
1
],
$$
[
$0
-
1
].
inverse
,
$$
[
$0
]);
var
__module6__
=
(
function
(
__dependency1__
,
__dependency2__
,
__dependency3__
)
{
break
;
"
use strict
"
;
case
12
:
this
.
$
=
$$
[
$0
];
var
__exports__
=
{};
break
;
var
Utils
=
__dependency1__
;
case
13
:
this
.
$
=
$$
[
$0
];
var
Exception
=
__dependency2__
;
break
;
var
COMPILER_REVISION
=
__dependency3__
.
COMPILER_REVISION
;
case
14
:
this
.
$
=
new
yy
.
ContentNode
(
$$
[
$0
]);
var
REVISION_CHANGES
=
__dependency3__
.
REVISION_CHANGES
;
break
;
case
15
:
this
.
$
=
new
yy
.
CommentNode
(
$$
[
$0
]);
function
checkRevision
(
compilerInfo
)
{
break
;
var
compilerRevision
=
compilerInfo
&&
compilerInfo
[
0
]
||
1
,
case
16
:
this
.
$
=
new
yy
.
MustacheNode
(
$$
[
$0
-
1
][
0
],
$$
[
$0
-
1
][
1
]);
currentRevision
=
COMPILER_REVISION
;
break
;
case
17
:
this
.
$
=
new
yy
.
MustacheNode
(
$$
[
$0
-
1
][
0
],
$$
[
$0
-
1
][
1
]);
if
(
compilerRevision
!==
currentRevision
)
{
break
;
if
(
compilerRevision
<
currentRevision
)
{
case
18
:
this
.
$
=
$$
[
$0
-
1
];
var
runtimeVersions
=
REVISION_CHANGES
[
currentRevision
],
break
;
compilerVersions
=
REVISION_CHANGES
[
compilerRevision
];
case
19
:
this
.
$
=
new
yy
.
MustacheNode
(
$$
[
$0
-
1
][
0
],
$$
[
$0
-
1
][
1
]);
throw
new
Exception
(
"
Template was precompiled with an older version of Handlebars than the current runtime.
"
+
break
;
"
Please update your precompiler to a newer version (
"
+
runtimeVersions
+
"
) or downgrade your runtime to an older version (
"
+
compilerVersions
+
"
).
"
);
case
20
:
this
.
$
=
new
yy
.
MustacheNode
(
$$
[
$0
-
1
][
0
],
$$
[
$0
-
1
][
1
],
true
);
}
else
{
break
;
// Use the embedded version info since the runtime doesn't know about this revision yet
case
21
:
this
.
$
=
new
yy
.
PartialNode
(
$$
[
$0
-
1
]);
throw
new
Exception
(
"
Template was precompiled with a newer version of Handlebars than the current runtime.
"
+
break
;
"
Please update your runtime to a newer version (
"
+
compilerInfo
[
1
]
+
"
).
"
);
case
22
:
this
.
$
=
new
yy
.
PartialNode
(
$$
[
$0
-
2
],
$$
[
$0
-
1
]);
}
break
;
}
case
23
:
}
break
;
case
24
:
this
.
$
=
[[
$$
[
$0
-
2
]].
concat
(
$$
[
$0
-
1
]),
$$
[
$0
]];
__exports__
.
checkRevision
=
checkRevision
;
// TODO: Remove this line and break up compilePartial
break
;
case
25
:
this
.
$
=
[[
$$
[
$0
-
1
]].
concat
(
$$
[
$0
]),
null
];
function
template
(
templateSpec
,
env
)
{
break
;
if
(
!
env
)
{
case
26
:
this
.
$
=
[[
$$
[
$0
-
1
]],
$$
[
$0
]];
throw
new
Exception
(
"
No environment passed to template
"
);
break
;
}
case
27
:
this
.
$
=
[[
$$
[
$0
]],
null
];
break
;
// Note: Using env.VM references rather than local var references throughout this section to allow
case
28
:
this
.
$
=
[[
new
yy
.
DataNode
(
$$
[
$0
])],
null
];
// for external users to override these as psuedo-supported APIs.
break
;
var
invokePartialWrapper
=
function
(
partial
,
name
,
context
,
helpers
,
partials
,
data
)
{
case
29
:
$$
[
$0
-
1
].
push
(
$$
[
$0
]);
this
.
$
=
$$
[
$0
-
1
];
var
result
=
env
.
VM
.
invokePartial
.
apply
(
this
,
arguments
);
break
;
if
(
result
!=
null
)
{
return
result
;
}
case
30
:
this
.
$
=
[
$$
[
$0
]];
break
;
if
(
env
.
compile
)
{
case
31
:
this
.
$
=
$$
[
$0
];
var
options
=
{
helpers
:
helpers
,
partials
:
partials
,
data
:
data
};
break
;
partials
[
name
]
=
env
.
compile
(
partial
,
{
data
:
data
!==
undefined
},
env
);
case
32
:
this
.
$
=
new
yy
.
StringNode
(
$$
[
$0
]);
return
partials
[
name
](
context
,
options
);
break
;
}
else
{
case
33
:
this
.
$
=
new
yy
.
IntegerNode
(
$$
[
$0
]);
throw
new
Exception
(
"
The partial
"
+
name
+
"
could not be compiled when running in runtime-only mode
"
);
break
;
}
case
34
:
this
.
$
=
new
yy
.
BooleanNode
(
$$
[
$0
]);
};
break
;
case
35
:
this
.
$
=
new
yy
.
DataNode
(
$$
[
$0
]);
// Just add water
break
;
var
container
=
{
case
36
:
this
.
$
=
new
yy
.
HashNode
(
$$
[
$0
]);
escapeExpression
:
Utils
.
escapeExpression
,
break
;
invokePartial
:
invokePartialWrapper
,
case
37
:
$$
[
$0
-
1
].
push
(
$$
[
$0
]);
this
.
$
=
$$
[
$0
-
1
];
programs
:
[],
break
;
program
:
function
(
i
,
fn
,
data
)
{
case
38
:
this
.
$
=
[
$$
[
$0
]];
var
programWrapper
=
this
.
programs
[
i
];
break
;
if
(
data
)
{
case
39
:
this
.
$
=
[
$$
[
$0
-
2
],
$$
[
$0
]];
programWrapper
=
program
(
i
,
fn
,
data
);
break
;
}
else
if
(
!
programWrapper
)
{
case
40
:
this
.
$
=
[
$$
[
$0
-
2
],
new
yy
.
StringNode
(
$$
[
$0
])];
programWrapper
=
this
.
programs
[
i
]
=
program
(
i
,
fn
);
break
;
}
case
41
:
this
.
$
=
[
$$
[
$0
-
2
],
new
yy
.
IntegerNode
(
$$
[
$0
])];
return
programWrapper
;
break
;
},
case
42
:
this
.
$
=
[
$$
[
$0
-
2
],
new
yy
.
BooleanNode
(
$$
[
$0
])];
merge
:
function
(
param
,
common
)
{
break
;
var
ret
=
param
||
common
;
case
43
:
this
.
$
=
[
$$
[
$0
-
2
],
new
yy
.
DataNode
(
$$
[
$0
])];
break
;
if
(
param
&&
common
&&
(
param
!==
common
))
{
case
44
:
this
.
$
=
new
yy
.
PartialNameNode
(
$$
[
$0
]);
ret
=
{};
break
;
Utils
.
extend
(
ret
,
common
);
case
45
:
this
.
$
=
new
yy
.
IdNode
(
$$
[
$0
]);
Utils
.
extend
(
ret
,
param
);
break
;
}
case
46
:
$$
[
$0
-
2
].
push
(
$$
[
$0
]);
this
.
$
=
$$
[
$0
-
2
];
return
ret
;
break
;
},
case
47
:
this
.
$
=
[
$$
[
$0
]];
programWithDepth
:
env
.
VM
.
programWithDepth
,
break
;
noop
:
env
.
VM
.
noop
,
}
compilerInfo
:
null
},
};
table
:
[{
3
:
1
,
4
:
2
,
5
:[
2
,
7
],
6
:
3
,
7
:
4
,
8
:
6
,
9
:
7
,
11
:
8
,
12
:
9
,
13
:
10
,
14
:[
1
,
11
],
15
:[
1
,
12
],
16
:[
1
,
13
],
19
:[
1
,
5
],
22
:[
1
,
14
],
23
:[
1
,
15
],
24
:[
1
,
16
]},{
1
:[
3
]},{
5
:[
1
,
17
]},{
5
:[
2
,
6
],
7
:
18
,
8
:
6
,
9
:
7
,
11
:
8
,
12
:
9
,
13
:
10
,
14
:[
1
,
11
],
15
:[
1
,
12
],
16
:[
1
,
13
],
19
:[
1
,
19
],
20
:[
2
,
6
],
22
:[
1
,
14
],
23
:[
1
,
15
],
24
:[
1
,
16
]},{
5
:[
2
,
5
],
6
:
20
,
8
:
21
,
9
:
7
,
11
:
8
,
12
:
9
,
13
:
10
,
14
:[
1
,
11
],
15
:[
1
,
12
],
16
:[
1
,
13
],
19
:[
1
,
5
],
20
:[
2
,
5
],
22
:[
1
,
14
],
23
:[
1
,
15
],
24
:[
1
,
16
]},{
17
:
23
,
18
:[
1
,
22
],
21
:
24
,
28
:[
1
,
25
],
35
:[
1
,
27
],
38
:
26
},{
5
:[
2
,
8
],
14
:[
2
,
8
],
15
:[
2
,
8
],
16
:[
2
,
8
],
19
:[
2
,
8
],
20
:[
2
,
8
],
22
:[
2
,
8
],
23
:[
2
,
8
],
24
:[
2
,
8
]},{
4
:
28
,
6
:
3
,
7
:
4
,
8
:
6
,
9
:
7
,
11
:
8
,
12
:
9
,
13
:
10
,
14
:[
1
,
11
],
15
:[
1
,
12
],
16
:[
1
,
13
],
19
:[
1
,
5
],
20
:[
2
,
7
],
22
:[
1
,
14
],
23
:[
1
,
15
],
24
:[
1
,
16
]},{
4
:
29
,
6
:
3
,
7
:
4
,
8
:
6
,
9
:
7
,
11
:
8
,
12
:
9
,
13
:
10
,
14
:[
1
,
11
],
15
:[
1
,
12
],
16
:[
1
,
13
],
19
:[
1
,
5
],
20
:[
2
,
7
],
22
:[
1
,
14
],
23
:[
1
,
15
],
24
:[
1
,
16
]},{
5
:[
2
,
12
],
14
:[
2
,
12
],
15
:[
2
,
12
],
16
:[
2
,
12
],
19
:[
2
,
12
],
20
:[
2
,
12
],
22
:[
2
,
12
],
23
:[
2
,
12
],
24
:[
2
,
12
]},{
5
:[
2
,
13
],
14
:[
2
,
13
],
15
:[
2
,
13
],
16
:[
2
,
13
],
19
:[
2
,
13
],
20
:[
2
,
13
],
22
:[
2
,
13
],
23
:[
2
,
13
],
24
:[
2
,
13
]},{
5
:[
2
,
14
],
14
:[
2
,
14
],
15
:[
2
,
14
],
16
:[
2
,
14
],
19
:[
2
,
14
],
20
:[
2
,
14
],
22
:[
2
,
14
],
23
:[
2
,
14
],
24
:[
2
,
14
]},{
5
:[
2
,
15
],
14
:[
2
,
15
],
15
:[
2
,
15
],
16
:[
2
,
15
],
19
:[
2
,
15
],
20
:[
2
,
15
],
22
:[
2
,
15
],
23
:[
2
,
15
],
24
:[
2
,
15
]},{
17
:
30
,
21
:
24
,
28
:[
1
,
25
],
35
:[
1
,
27
],
38
:
26
},{
17
:
31
,
21
:
24
,
28
:[
1
,
25
],
35
:[
1
,
27
],
38
:
26
},{
17
:
32
,
21
:
24
,
28
:[
1
,
25
],
35
:[
1
,
27
],
38
:
26
},{
25
:
33
,
37
:[
1
,
34
]},{
1
:[
2
,
1
]},{
5
:[
2
,
2
],
8
:
21
,
9
:
7
,
11
:
8
,
12
:
9
,
13
:
10
,
14
:[
1
,
11
],
15
:[
1
,
12
],
16
:[
1
,
13
],
19
:[
1
,
19
],
20
:[
2
,
2
],
22
:[
1
,
14
],
23
:[
1
,
15
],
24
:[
1
,
16
]},{
17
:
23
,
21
:
24
,
28
:[
1
,
25
],
35
:[
1
,
27
],
38
:
26
},{
5
:[
2
,
4
],
7
:
35
,
8
:
6
,
9
:
7
,
11
:
8
,
12
:
9
,
13
:
10
,
14
:[
1
,
11
],
15
:[
1
,
12
],
16
:[
1
,
13
],
19
:[
1
,
19
],
20
:[
2
,
4
],
22
:[
1
,
14
],
23
:[
1
,
15
],
24
:[
1
,
16
]},{
5
:[
2
,
9
],
14
:[
2
,
9
],
15
:[
2
,
9
],
16
:[
2
,
9
],
19
:[
2
,
9
],
20
:[
2
,
9
],
22
:[
2
,
9
],
23
:[
2
,
9
],
24
:[
2
,
9
]},{
5
:[
2
,
23
],
14
:[
2
,
23
],
15
:[
2
,
23
],
16
:[
2
,
23
],
19
:[
2
,
23
],
20
:[
2
,
23
],
22
:[
2
,
23
],
23
:[
2
,
23
],
24
:[
2
,
23
]},{
18
:[
1
,
36
]},{
18
:[
2
,
27
],
21
:
41
,
26
:
37
,
27
:
38
,
28
:[
1
,
45
],
29
:
39
,
30
:[
1
,
42
],
31
:[
1
,
43
],
32
:[
1
,
44
],
33
:
40
,
34
:
46
,
35
:[
1
,
47
],
38
:
26
},{
18
:[
2
,
28
]},{
18
:[
2
,
45
],
28
:[
2
,
45
],
30
:[
2
,
45
],
31
:[
2
,
45
],
32
:[
2
,
45
],
35
:[
2
,
45
],
39
:[
1
,
48
]},{
18
:[
2
,
47
],
28
:[
2
,
47
],
30
:[
2
,
47
],
31
:[
2
,
47
],
32
:[
2
,
47
],
35
:[
2
,
47
],
39
:[
2
,
47
]},{
10
:
49
,
20
:[
1
,
50
]},{
10
:
51
,
20
:[
1
,
50
]},{
18
:[
1
,
52
]},{
18
:[
1
,
53
]},{
18
:[
1
,
54
]},{
18
:[
1
,
55
],
21
:
56
,
35
:[
1
,
27
],
38
:
26
},{
18
:[
2
,
44
],
35
:[
2
,
44
]},{
5
:[
2
,
3
],
8
:
21
,
9
:
7
,
11
:
8
,
12
:
9
,
13
:
10
,
14
:[
1
,
11
],
15
:[
1
,
12
],
16
:[
1
,
13
],
19
:[
1
,
19
],
20
:[
2
,
3
],
22
:[
1
,
14
],
23
:[
1
,
15
],
24
:[
1
,
16
]},{
14
:[
2
,
17
],
15
:[
2
,
17
],
16
:[
2
,
17
],
19
:[
2
,
17
],
20
:[
2
,
17
],
22
:[
2
,
17
],
23
:[
2
,
17
],
24
:[
2
,
17
]},{
18
:[
2
,
25
],
21
:
41
,
27
:
57
,
28
:[
1
,
45
],
29
:
58
,
30
:[
1
,
42
],
31
:[
1
,
43
],
32
:[
1
,
44
],
33
:
40
,
34
:
46
,
35
:[
1
,
47
],
38
:
26
},{
18
:[
2
,
26
]},{
18
:[
2
,
30
],
28
:[
2
,
30
],
30
:[
2
,
30
],
31
:[
2
,
30
],
32
:[
2
,
30
],
35
:[
2
,
30
]},{
18
:[
2
,
36
],
34
:
59
,
35
:[
1
,
60
]},{
18
:[
2
,
31
],
28
:[
2
,
31
],
30
:[
2
,
31
],
31
:[
2
,
31
],
32
:[
2
,
31
],
35
:[
2
,
31
]},{
18
:[
2
,
32
],
28
:[
2
,
32
],
30
:[
2
,
32
],
31
:[
2
,
32
],
32
:[
2
,
32
],
35
:[
2
,
32
]},{
18
:[
2
,
33
],
28
:[
2
,
33
],
30
:[
2
,
33
],
31
:[
2
,
33
],
32
:[
2
,
33
],
35
:[
2
,
33
]},{
18
:[
2
,
34
],
28
:[
2
,
34
],
30
:[
2
,
34
],
31
:[
2
,
34
],
32
:[
2
,
34
],
35
:[
2
,
34
]},{
18
:[
2
,
35
],
28
:[
2
,
35
],
30
:[
2
,
35
],
31
:[
2
,
35
],
32
:[
2
,
35
],
35
:[
2
,
35
]},{
18
:[
2
,
38
],
35
:[
2
,
38
]},{
18
:[
2
,
47
],
28
:[
2
,
47
],
30
:[
2
,
47
],
31
:[
2
,
47
],
32
:[
2
,
47
],
35
:[
2
,
47
],
36
:[
1
,
61
],
39
:[
2
,
47
]},{
35
:[
1
,
62
]},{
5
:[
2
,
10
],
14
:[
2
,
10
],
15
:[
2
,
10
],
16
:[
2
,
10
],
19
:[
2
,
10
],
20
:[
2
,
10
],
22
:[
2
,
10
],
23
:[
2
,
10
],
24
:[
2
,
10
]},{
21
:
63
,
35
:[
1
,
27
],
38
:
26
},{
5
:[
2
,
11
],
14
:[
2
,
11
],
15
:[
2
,
11
],
16
:[
2
,
11
],
19
:[
2
,
11
],
20
:[
2
,
11
],
22
:[
2
,
11
],
23
:[
2
,
11
],
24
:[
2
,
11
]},{
14
:[
2
,
16
],
15
:[
2
,
16
],
16
:[
2
,
16
],
19
:[
2
,
16
],
20
:[
2
,
16
],
22
:[
2
,
16
],
23
:[
2
,
16
],
24
:[
2
,
16
]},{
5
:[
2
,
19
],
14
:[
2
,
19
],
15
:[
2
,
19
],
16
:[
2
,
19
],
19
:[
2
,
19
],
20
:[
2
,
19
],
22
:[
2
,
19
],
23
:[
2
,
19
],
24
:[
2
,
19
]},{
5
:[
2
,
20
],
14
:[
2
,
20
],
15
:[
2
,
20
],
16
:[
2
,
20
],
19
:[
2
,
20
],
20
:[
2
,
20
],
22
:[
2
,
20
],
23
:[
2
,
20
],
24
:[
2
,
20
]},{
5
:[
2
,
21
],
14
:[
2
,
21
],
15
:[
2
,
21
],
16
:[
2
,
21
],
19
:[
2
,
21
],
20
:[
2
,
21
],
22
:[
2
,
21
],
23
:[
2
,
21
],
24
:[
2
,
21
]},{
18
:[
1
,
64
]},{
18
:[
2
,
24
]},{
18
:[
2
,
29
],
28
:[
2
,
29
],
30
:[
2
,
29
],
31
:[
2
,
29
],
32
:[
2
,
29
],
35
:[
2
,
29
]},{
18
:[
2
,
37
],
35
:[
2
,
37
]},{
36
:[
1
,
61
]},{
21
:
65
,
28
:[
1
,
69
],
30
:[
1
,
66
],
31
:[
1
,
67
],
32
:[
1
,
68
],
35
:[
1
,
27
],
38
:
26
},{
18
:[
2
,
46
],
28
:[
2
,
46
],
30
:[
2
,
46
],
31
:[
2
,
46
],
32
:[
2
,
46
],
35
:[
2
,
46
],
39
:[
2
,
46
]},{
18
:[
1
,
70
]},{
5
:[
2
,
22
],
14
:[
2
,
22
],
15
:[
2
,
22
],
16
:[
2
,
22
],
19
:[
2
,
22
],
20
:[
2
,
22
],
22
:[
2
,
22
],
23
:[
2
,
22
],
24
:[
2
,
22
]},{
18
:[
2
,
39
],
35
:[
2
,
39
]},{
18
:[
2
,
40
],
35
:[
2
,
40
]},{
18
:[
2
,
41
],
35
:[
2
,
41
]},{
18
:[
2
,
42
],
35
:[
2
,
42
]},{
18
:[
2
,
43
],
35
:[
2
,
43
]},{
5
:[
2
,
18
],
14
:[
2
,
18
],
15
:[
2
,
18
],
16
:[
2
,
18
],
19
:[
2
,
18
],
20
:[
2
,
18
],
22
:[
2
,
18
],
23
:[
2
,
18
],
24
:[
2
,
18
]}],
defaultActions
:
{
17
:[
2
,
1
],
25
:[
2
,
28
],
38
:[
2
,
26
],
57
:[
2
,
24
]},
return
function
(
context
,
options
)
{
parseError
:
function
parseError
(
str
,
hash
)
{
options
=
options
||
{};
var
namespace
=
options
.
partial
?
options
:
env
,
helpers
,
partials
;
if
(
!
options
.
partial
)
{
helpers
=
options
.
helpers
;
partials
=
options
.
partials
;
}
var
result
=
templateSpec
.
call
(
container
,
namespace
,
context
,
helpers
,
partials
,
options
.
data
);
if
(
!
options
.
partial
)
{
env
.
VM
.
checkRevision
(
container
.
compilerInfo
);
}
return
result
;
};
}
__exports__
.
template
=
template
;
function
programWithDepth
(
i
,
fn
,
data
/*, $depth */
)
{
var
args
=
Array
.
prototype
.
slice
.
call
(
arguments
,
3
);
var
prog
=
function
(
context
,
options
)
{
options
=
options
||
{};
return
fn
.
apply
(
this
,
[
context
,
options
.
data
||
data
].
concat
(
args
));
};
prog
.
program
=
i
;
prog
.
depth
=
args
.
length
;
return
prog
;
}
__exports__
.
programWithDepth
=
programWithDepth
;
function
program
(
i
,
fn
,
data
)
{
var
prog
=
function
(
context
,
options
)
{
options
=
options
||
{};
return
fn
(
context
,
options
.
data
||
data
);
};
prog
.
program
=
i
;
prog
.
depth
=
0
;
return
prog
;
}
__exports__
.
program
=
program
;
function
invokePartial
(
partial
,
name
,
context
,
helpers
,
partials
,
data
)
{
var
options
=
{
partial
:
true
,
helpers
:
helpers
,
partials
:
partials
,
data
:
data
};
if
(
partial
===
undefined
)
{
throw
new
Exception
(
"
The partial
"
+
name
+
"
could not be found
"
);
}
else
if
(
partial
instanceof
Function
)
{
return
partial
(
context
,
options
);
}
}
__exports__
.
invokePartial
=
invokePartial
;
function
noop
()
{
return
""
;
}
__exports__
.
noop
=
noop
;
return
__exports__
;
})(
__module3__
,
__module5__
,
__module2__
);
// handlebars.runtime.js
var
__module1__
=
(
function
(
__dependency1__
,
__dependency2__
,
__dependency3__
,
__dependency4__
,
__dependency5__
)
{
"
use strict
"
;
var
__exports__
;
/*globals Handlebars: true */
var
base
=
__dependency1__
;
// Each of these augment the Handlebars object. No need to setup here.
// (This is done to easily share code between commonjs and browse envs)
var
SafeString
=
__dependency2__
;
var
Exception
=
__dependency3__
;
var
Utils
=
__dependency4__
;
var
runtime
=
__dependency5__
;
// For compatibility and usage outside of module systems, make the Handlebars object a namespace
var
create
=
function
()
{
var
hb
=
new
base
.
HandlebarsEnvironment
();
Utils
.
extend
(
hb
,
base
);
hb
.
SafeString
=
SafeString
;
hb
.
Exception
=
Exception
;
hb
.
Utils
=
Utils
;
hb
.
VM
=
runtime
;
hb
.
template
=
function
(
spec
)
{
return
runtime
.
template
(
spec
,
hb
);
};
return
hb
;
};
var
Handlebars
=
create
();
Handlebars
.
create
=
create
;
__exports__
=
Handlebars
;
return
__exports__
;
})(
__module2__
,
__module4__
,
__module5__
,
__module3__
,
__module6__
);
// handlebars/compiler/ast.js
var
__module7__
=
(
function
(
__dependency1__
)
{
"
use strict
"
;
var
__exports__
;
var
Exception
=
__dependency1__
;
function
LocationInfo
(
locInfo
){
locInfo
=
locInfo
||
{};
this
.
firstLine
=
locInfo
.
first_line
;
this
.
firstColumn
=
locInfo
.
first_column
;
this
.
lastColumn
=
locInfo
.
last_column
;
this
.
lastLine
=
locInfo
.
last_line
;
}
var
AST
=
{
ProgramNode
:
function
(
statements
,
inverseStrip
,
inverse
,
locInfo
)
{
var
inverseLocationInfo
,
firstInverseNode
;
if
(
arguments
.
length
===
3
)
{
locInfo
=
inverse
;
inverse
=
null
;
}
else
if
(
arguments
.
length
===
2
)
{
locInfo
=
inverseStrip
;
inverseStrip
=
null
;
}
LocationInfo
.
call
(
this
,
locInfo
);
this
.
type
=
"
program
"
;
this
.
statements
=
statements
;
this
.
strip
=
{};
if
(
inverse
)
{
firstInverseNode
=
inverse
[
0
];
if
(
firstInverseNode
)
{
inverseLocationInfo
=
{
first_line
:
firstInverseNode
.
firstLine
,
last_line
:
firstInverseNode
.
lastLine
,
last_column
:
firstInverseNode
.
lastColumn
,
first_column
:
firstInverseNode
.
firstColumn
};
this
.
inverse
=
new
AST
.
ProgramNode
(
inverse
,
inverseStrip
,
inverseLocationInfo
);
}
else
{
this
.
inverse
=
new
AST
.
ProgramNode
(
inverse
,
inverseStrip
);
}
this
.
strip
.
right
=
inverseStrip
.
left
;
}
else
if
(
inverseStrip
)
{
this
.
strip
.
left
=
inverseStrip
.
right
;
}
},
MustacheNode
:
function
(
rawParams
,
hash
,
open
,
strip
,
locInfo
)
{
LocationInfo
.
call
(
this
,
locInfo
);
this
.
type
=
"
mustache
"
;
this
.
strip
=
strip
;
// Open may be a string parsed from the parser or a passed boolean flag
if
(
open
!=
null
&&
open
.
charAt
)
{
// Must use charAt to support IE pre-10
var
escapeFlag
=
open
.
charAt
(
3
)
||
open
.
charAt
(
2
);
this
.
escaped
=
escapeFlag
!==
'
{
'
&&
escapeFlag
!==
'
&
'
;
}
else
{
this
.
escaped
=
!!
open
;
}
if
(
rawParams
instanceof
AST
.
SexprNode
)
{
this
.
sexpr
=
rawParams
;
}
else
{
// Support old AST API
this
.
sexpr
=
new
AST
.
SexprNode
(
rawParams
,
hash
);
}
this
.
sexpr
.
isRoot
=
true
;
// Support old AST API that stored this info in MustacheNode
this
.
id
=
this
.
sexpr
.
id
;
this
.
params
=
this
.
sexpr
.
params
;
this
.
hash
=
this
.
sexpr
.
hash
;
this
.
eligibleHelper
=
this
.
sexpr
.
eligibleHelper
;
this
.
isHelper
=
this
.
sexpr
.
isHelper
;
},
SexprNode
:
function
(
rawParams
,
hash
,
locInfo
)
{
LocationInfo
.
call
(
this
,
locInfo
);
this
.
type
=
"
sexpr
"
;
this
.
hash
=
hash
;
var
id
=
this
.
id
=
rawParams
[
0
];
var
params
=
this
.
params
=
rawParams
.
slice
(
1
);
// a mustache is an eligible helper if:
// * its id is simple (a single part, not `this` or `..`)
var
eligibleHelper
=
this
.
eligibleHelper
=
id
.
isSimple
;
// a mustache is definitely a helper if:
// * it is an eligible helper, and
// * it has at least one parameter or hash segment
this
.
isHelper
=
eligibleHelper
&&
(
params
.
length
||
hash
);
// if a mustache is an eligible helper but not a definite
// helper, it is ambiguous, and will be resolved in a later
// pass or at runtime.
},
PartialNode
:
function
(
partialName
,
context
,
strip
,
locInfo
)
{
LocationInfo
.
call
(
this
,
locInfo
);
this
.
type
=
"
partial
"
;
this
.
partialName
=
partialName
;
this
.
context
=
context
;
this
.
strip
=
strip
;
},
BlockNode
:
function
(
mustache
,
program
,
inverse
,
close
,
locInfo
)
{
LocationInfo
.
call
(
this
,
locInfo
);
if
(
mustache
.
sexpr
.
id
.
original
!==
close
.
path
.
original
)
{
throw
new
Exception
(
mustache
.
sexpr
.
id
.
original
+
"
doesn't match
"
+
close
.
path
.
original
,
this
);
}
this
.
type
=
'
block
'
;
this
.
mustache
=
mustache
;
this
.
program
=
program
;
this
.
inverse
=
inverse
;
this
.
strip
=
{
left
:
mustache
.
strip
.
left
,
right
:
close
.
strip
.
right
};
(
program
||
inverse
).
strip
.
left
=
mustache
.
strip
.
right
;
(
inverse
||
program
).
strip
.
right
=
close
.
strip
.
left
;
if
(
inverse
&&
!
program
)
{
this
.
isInverse
=
true
;
}
},
ContentNode
:
function
(
string
,
locInfo
)
{
LocationInfo
.
call
(
this
,
locInfo
);
this
.
type
=
"
content
"
;
this
.
string
=
string
;
},
HashNode
:
function
(
pairs
,
locInfo
)
{
LocationInfo
.
call
(
this
,
locInfo
);
this
.
type
=
"
hash
"
;
this
.
pairs
=
pairs
;
},
IdNode
:
function
(
parts
,
locInfo
)
{
LocationInfo
.
call
(
this
,
locInfo
);
this
.
type
=
"
ID
"
;
var
original
=
""
,
dig
=
[],
depth
=
0
;
for
(
var
i
=
0
,
l
=
parts
.
length
;
i
<
l
;
i
++
)
{
var
part
=
parts
[
i
].
part
;
original
+=
(
parts
[
i
].
separator
||
''
)
+
part
;
if
(
part
===
"
..
"
||
part
===
"
.
"
||
part
===
"
this
"
)
{
if
(
dig
.
length
>
0
)
{
throw
new
Exception
(
"
Invalid path:
"
+
original
,
this
);
}
else
if
(
part
===
"
..
"
)
{
depth
++
;
}
else
{
this
.
isScoped
=
true
;
}
}
else
{
dig
.
push
(
part
);
}
}
this
.
original
=
original
;
this
.
parts
=
dig
;
this
.
string
=
dig
.
join
(
'
.
'
);
this
.
depth
=
depth
;
// an ID is simple if it only has one part, and that part is not
// `..` or `this`.
this
.
isSimple
=
parts
.
length
===
1
&&
!
this
.
isScoped
&&
depth
===
0
;
this
.
stringModeValue
=
this
.
string
;
},
PartialNameNode
:
function
(
name
,
locInfo
)
{
LocationInfo
.
call
(
this
,
locInfo
);
this
.
type
=
"
PARTIAL_NAME
"
;
this
.
name
=
name
.
original
;
},
DataNode
:
function
(
id
,
locInfo
)
{
LocationInfo
.
call
(
this
,
locInfo
);
this
.
type
=
"
DATA
"
;
this
.
id
=
id
;
},
StringNode
:
function
(
string
,
locInfo
)
{
LocationInfo
.
call
(
this
,
locInfo
);
this
.
type
=
"
STRING
"
;
this
.
original
=
this
.
string
=
this
.
stringModeValue
=
string
;
},
IntegerNode
:
function
(
integer
,
locInfo
)
{
LocationInfo
.
call
(
this
,
locInfo
);
this
.
type
=
"
INTEGER
"
;
this
.
original
=
this
.
integer
=
integer
;
this
.
stringModeValue
=
Number
(
integer
);
},
BooleanNode
:
function
(
bool
,
locInfo
)
{
LocationInfo
.
call
(
this
,
locInfo
);
this
.
type
=
"
BOOLEAN
"
;
this
.
bool
=
bool
;
this
.
stringModeValue
=
bool
===
"
true
"
;
},
CommentNode
:
function
(
comment
,
locInfo
)
{
LocationInfo
.
call
(
this
,
locInfo
);
this
.
type
=
"
comment
"
;
this
.
comment
=
comment
;
}
};
// Must be exported as an object rather than the root of the module as the jison lexer
// most modify the object to operate properly.
__exports__
=
AST
;
return
__exports__
;
})(
__module5__
);
// handlebars/compiler/parser.js
var
__module9__
=
(
function
()
{
"
use strict
"
;
var
__exports__
;
/* jshint ignore:start */
/* Jison generated parser */
var
handlebars
=
(
function
(){
var
parser
=
{
trace
:
function
trace
()
{
},
yy
:
{},
symbols_
:
{
"
error
"
:
2
,
"
root
"
:
3
,
"
statements
"
:
4
,
"
EOF
"
:
5
,
"
program
"
:
6
,
"
simpleInverse
"
:
7
,
"
statement
"
:
8
,
"
openInverse
"
:
9
,
"
closeBlock
"
:
10
,
"
openBlock
"
:
11
,
"
mustache
"
:
12
,
"
partial
"
:
13
,
"
CONTENT
"
:
14
,
"
COMMENT
"
:
15
,
"
OPEN_BLOCK
"
:
16
,
"
sexpr
"
:
17
,
"
CLOSE
"
:
18
,
"
OPEN_INVERSE
"
:
19
,
"
OPEN_ENDBLOCK
"
:
20
,
"
path
"
:
21
,
"
OPEN
"
:
22
,
"
OPEN_UNESCAPED
"
:
23
,
"
CLOSE_UNESCAPED
"
:
24
,
"
OPEN_PARTIAL
"
:
25
,
"
partialName
"
:
26
,
"
partial_option0
"
:
27
,
"
sexpr_repetition0
"
:
28
,
"
sexpr_option0
"
:
29
,
"
dataName
"
:
30
,
"
param
"
:
31
,
"
STRING
"
:
32
,
"
INTEGER
"
:
33
,
"
BOOLEAN
"
:
34
,
"
OPEN_SEXPR
"
:
35
,
"
CLOSE_SEXPR
"
:
36
,
"
hash
"
:
37
,
"
hash_repetition_plus0
"
:
38
,
"
hashSegment
"
:
39
,
"
ID
"
:
40
,
"
EQUALS
"
:
41
,
"
DATA
"
:
42
,
"
pathSegments
"
:
43
,
"
SEP
"
:
44
,
"
$accept
"
:
0
,
"
$end
"
:
1
},
terminals_
:
{
2
:
"
error
"
,
5
:
"
EOF
"
,
14
:
"
CONTENT
"
,
15
:
"
COMMENT
"
,
16
:
"
OPEN_BLOCK
"
,
18
:
"
CLOSE
"
,
19
:
"
OPEN_INVERSE
"
,
20
:
"
OPEN_ENDBLOCK
"
,
22
:
"
OPEN
"
,
23
:
"
OPEN_UNESCAPED
"
,
24
:
"
CLOSE_UNESCAPED
"
,
25
:
"
OPEN_PARTIAL
"
,
32
:
"
STRING
"
,
33
:
"
INTEGER
"
,
34
:
"
BOOLEAN
"
,
35
:
"
OPEN_SEXPR
"
,
36
:
"
CLOSE_SEXPR
"
,
40
:
"
ID
"
,
41
:
"
EQUALS
"
,
42
:
"
DATA
"
,
44
:
"
SEP
"
},
productions_
:
[
0
,[
3
,
2
],[
3
,
1
],[
6
,
2
],[
6
,
3
],[
6
,
2
],[
6
,
1
],[
6
,
1
],[
6
,
0
],[
4
,
1
],[
4
,
2
],[
8
,
3
],[
8
,
3
],[
8
,
1
],[
8
,
1
],[
8
,
1
],[
8
,
1
],[
11
,
3
],[
9
,
3
],[
10
,
3
],[
12
,
3
],[
12
,
3
],[
13
,
4
],[
7
,
2
],[
17
,
3
],[
17
,
1
],[
31
,
1
],[
31
,
1
],[
31
,
1
],[
31
,
1
],[
31
,
1
],[
31
,
3
],[
37
,
1
],[
39
,
3
],[
26
,
1
],[
26
,
1
],[
26
,
1
],[
30
,
2
],[
21
,
1
],[
43
,
3
],[
43
,
1
],[
27
,
0
],[
27
,
1
],[
28
,
0
],[
28
,
2
],[
29
,
0
],[
29
,
1
],[
38
,
1
],[
38
,
2
]],
performAction
:
function
anonymous
(
yytext
,
yyleng
,
yylineno
,
yy
,
yystate
,
$$
,
_$
)
{
var
$0
=
$$
.
length
-
1
;
switch
(
yystate
)
{
case
1
:
return
new
yy
.
ProgramNode
(
$$
[
$0
-
1
],
this
.
_$
);
break
;
case
2
:
return
new
yy
.
ProgramNode
([],
this
.
_$
);
break
;
case
3
:
this
.
$
=
new
yy
.
ProgramNode
([],
$$
[
$0
-
1
],
$$
[
$0
],
this
.
_$
);
break
;
case
4
:
this
.
$
=
new
yy
.
ProgramNode
(
$$
[
$0
-
2
],
$$
[
$0
-
1
],
$$
[
$0
],
this
.
_$
);
break
;
case
5
:
this
.
$
=
new
yy
.
ProgramNode
(
$$
[
$0
-
1
],
$$
[
$0
],
[],
this
.
_$
);
break
;
case
6
:
this
.
$
=
new
yy
.
ProgramNode
(
$$
[
$0
],
this
.
_$
);
break
;
case
7
:
this
.
$
=
new
yy
.
ProgramNode
([],
this
.
_$
);
break
;
case
8
:
this
.
$
=
new
yy
.
ProgramNode
([],
this
.
_$
);
break
;
case
9
:
this
.
$
=
[
$$
[
$0
]];
break
;
case
10
:
$$
[
$0
-
1
].
push
(
$$
[
$0
]);
this
.
$
=
$$
[
$0
-
1
];
break
;
case
11
:
this
.
$
=
new
yy
.
BlockNode
(
$$
[
$0
-
2
],
$$
[
$0
-
1
].
inverse
,
$$
[
$0
-
1
],
$$
[
$0
],
this
.
_$
);
break
;
case
12
:
this
.
$
=
new
yy
.
BlockNode
(
$$
[
$0
-
2
],
$$
[
$0
-
1
],
$$
[
$0
-
1
].
inverse
,
$$
[
$0
],
this
.
_$
);
break
;
case
13
:
this
.
$
=
$$
[
$0
];
break
;
case
14
:
this
.
$
=
$$
[
$0
];
break
;
case
15
:
this
.
$
=
new
yy
.
ContentNode
(
$$
[
$0
],
this
.
_$
);
break
;
case
16
:
this
.
$
=
new
yy
.
CommentNode
(
$$
[
$0
],
this
.
_$
);
break
;
case
17
:
this
.
$
=
new
yy
.
MustacheNode
(
$$
[
$0
-
1
],
null
,
$$
[
$0
-
2
],
stripFlags
(
$$
[
$0
-
2
],
$$
[
$0
]),
this
.
_$
);
break
;
case
18
:
this
.
$
=
new
yy
.
MustacheNode
(
$$
[
$0
-
1
],
null
,
$$
[
$0
-
2
],
stripFlags
(
$$
[
$0
-
2
],
$$
[
$0
]),
this
.
_$
);
break
;
case
19
:
this
.
$
=
{
path
:
$$
[
$0
-
1
],
strip
:
stripFlags
(
$$
[
$0
-
2
],
$$
[
$0
])};
break
;
case
20
:
this
.
$
=
new
yy
.
MustacheNode
(
$$
[
$0
-
1
],
null
,
$$
[
$0
-
2
],
stripFlags
(
$$
[
$0
-
2
],
$$
[
$0
]),
this
.
_$
);
break
;
case
21
:
this
.
$
=
new
yy
.
MustacheNode
(
$$
[
$0
-
1
],
null
,
$$
[
$0
-
2
],
stripFlags
(
$$
[
$0
-
2
],
$$
[
$0
]),
this
.
_$
);
break
;
case
22
:
this
.
$
=
new
yy
.
PartialNode
(
$$
[
$0
-
2
],
$$
[
$0
-
1
],
stripFlags
(
$$
[
$0
-
3
],
$$
[
$0
]),
this
.
_$
);
break
;
case
23
:
this
.
$
=
stripFlags
(
$$
[
$0
-
1
],
$$
[
$0
]);
break
;
case
24
:
this
.
$
=
new
yy
.
SexprNode
([
$$
[
$0
-
2
]].
concat
(
$$
[
$0
-
1
]),
$$
[
$0
],
this
.
_$
);
break
;
case
25
:
this
.
$
=
new
yy
.
SexprNode
([
$$
[
$0
]],
null
,
this
.
_$
);
break
;
case
26
:
this
.
$
=
$$
[
$0
];
break
;
case
27
:
this
.
$
=
new
yy
.
StringNode
(
$$
[
$0
],
this
.
_$
);
break
;
case
28
:
this
.
$
=
new
yy
.
IntegerNode
(
$$
[
$0
],
this
.
_$
);
break
;
case
29
:
this
.
$
=
new
yy
.
BooleanNode
(
$$
[
$0
],
this
.
_$
);
break
;
case
30
:
this
.
$
=
$$
[
$0
];
break
;
case
31
:
$$
[
$0
-
1
].
isHelper
=
true
;
this
.
$
=
$$
[
$0
-
1
];
break
;
case
32
:
this
.
$
=
new
yy
.
HashNode
(
$$
[
$0
],
this
.
_$
);
break
;
case
33
:
this
.
$
=
[
$$
[
$0
-
2
],
$$
[
$0
]];
break
;
case
34
:
this
.
$
=
new
yy
.
PartialNameNode
(
$$
[
$0
],
this
.
_$
);
break
;
case
35
:
this
.
$
=
new
yy
.
PartialNameNode
(
new
yy
.
StringNode
(
$$
[
$0
],
this
.
_$
),
this
.
_$
);
break
;
case
36
:
this
.
$
=
new
yy
.
PartialNameNode
(
new
yy
.
IntegerNode
(
$$
[
$0
],
this
.
_$
));
break
;
case
37
:
this
.
$
=
new
yy
.
DataNode
(
$$
[
$0
],
this
.
_$
);
break
;
case
38
:
this
.
$
=
new
yy
.
IdNode
(
$$
[
$0
],
this
.
_$
);
break
;
case
39
:
$$
[
$0
-
2
].
push
({
part
:
$$
[
$0
],
separator
:
$$
[
$0
-
1
]});
this
.
$
=
$$
[
$0
-
2
];
break
;
case
40
:
this
.
$
=
[{
part
:
$$
[
$0
]}];
break
;
case
43
:
this
.
$
=
[];
break
;
case
44
:
$$
[
$0
-
1
].
push
(
$$
[
$0
]);
break
;
case
47
:
this
.
$
=
[
$$
[
$0
]];
break
;
case
48
:
$$
[
$0
-
1
].
push
(
$$
[
$0
]);
break
;
}
},
table
:
[{
3
:
1
,
4
:
2
,
5
:[
1
,
3
],
8
:
4
,
9
:
5
,
11
:
6
,
12
:
7
,
13
:
8
,
14
:[
1
,
9
],
15
:[
1
,
10
],
16
:[
1
,
12
],
19
:[
1
,
11
],
22
:[
1
,
13
],
23
:[
1
,
14
],
25
:[
1
,
15
]},{
1
:[
3
]},{
5
:[
1
,
16
],
8
:
17
,
9
:
5
,
11
:
6
,
12
:
7
,
13
:
8
,
14
:[
1
,
9
],
15
:[
1
,
10
],
16
:[
1
,
12
],
19
:[
1
,
11
],
22
:[
1
,
13
],
23
:[
1
,
14
],
25
:[
1
,
15
]},{
1
:[
2
,
2
]},{
5
:[
2
,
9
],
14
:[
2
,
9
],
15
:[
2
,
9
],
16
:[
2
,
9
],
19
:[
2
,
9
],
20
:[
2
,
9
],
22
:[
2
,
9
],
23
:[
2
,
9
],
25
:[
2
,
9
]},{
4
:
20
,
6
:
18
,
7
:
19
,
8
:
4
,
9
:
5
,
11
:
6
,
12
:
7
,
13
:
8
,
14
:[
1
,
9
],
15
:[
1
,
10
],
16
:[
1
,
12
],
19
:[
1
,
21
],
20
:[
2
,
8
],
22
:[
1
,
13
],
23
:[
1
,
14
],
25
:[
1
,
15
]},{
4
:
20
,
6
:
22
,
7
:
19
,
8
:
4
,
9
:
5
,
11
:
6
,
12
:
7
,
13
:
8
,
14
:[
1
,
9
],
15
:[
1
,
10
],
16
:[
1
,
12
],
19
:[
1
,
21
],
20
:[
2
,
8
],
22
:[
1
,
13
],
23
:[
1
,
14
],
25
:[
1
,
15
]},{
5
:[
2
,
13
],
14
:[
2
,
13
],
15
:[
2
,
13
],
16
:[
2
,
13
],
19
:[
2
,
13
],
20
:[
2
,
13
],
22
:[
2
,
13
],
23
:[
2
,
13
],
25
:[
2
,
13
]},{
5
:[
2
,
14
],
14
:[
2
,
14
],
15
:[
2
,
14
],
16
:[
2
,
14
],
19
:[
2
,
14
],
20
:[
2
,
14
],
22
:[
2
,
14
],
23
:[
2
,
14
],
25
:[
2
,
14
]},{
5
:[
2
,
15
],
14
:[
2
,
15
],
15
:[
2
,
15
],
16
:[
2
,
15
],
19
:[
2
,
15
],
20
:[
2
,
15
],
22
:[
2
,
15
],
23
:[
2
,
15
],
25
:[
2
,
15
]},{
5
:[
2
,
16
],
14
:[
2
,
16
],
15
:[
2
,
16
],
16
:[
2
,
16
],
19
:[
2
,
16
],
20
:[
2
,
16
],
22
:[
2
,
16
],
23
:[
2
,
16
],
25
:[
2
,
16
]},{
17
:
23
,
21
:
24
,
30
:
25
,
40
:[
1
,
28
],
42
:[
1
,
27
],
43
:
26
},{
17
:
29
,
21
:
24
,
30
:
25
,
40
:[
1
,
28
],
42
:[
1
,
27
],
43
:
26
},{
17
:
30
,
21
:
24
,
30
:
25
,
40
:[
1
,
28
],
42
:[
1
,
27
],
43
:
26
},{
17
:
31
,
21
:
24
,
30
:
25
,
40
:[
1
,
28
],
42
:[
1
,
27
],
43
:
26
},{
21
:
33
,
26
:
32
,
32
:[
1
,
34
],
33
:[
1
,
35
],
40
:[
1
,
28
],
43
:
26
},{
1
:[
2
,
1
]},{
5
:[
2
,
10
],
14
:[
2
,
10
],
15
:[
2
,
10
],
16
:[
2
,
10
],
19
:[
2
,
10
],
20
:[
2
,
10
],
22
:[
2
,
10
],
23
:[
2
,
10
],
25
:[
2
,
10
]},{
10
:
36
,
20
:[
1
,
37
]},{
4
:
38
,
8
:
4
,
9
:
5
,
11
:
6
,
12
:
7
,
13
:
8
,
14
:[
1
,
9
],
15
:[
1
,
10
],
16
:[
1
,
12
],
19
:[
1
,
11
],
20
:[
2
,
7
],
22
:[
1
,
13
],
23
:[
1
,
14
],
25
:[
1
,
15
]},{
7
:
39
,
8
:
17
,
9
:
5
,
11
:
6
,
12
:
7
,
13
:
8
,
14
:[
1
,
9
],
15
:[
1
,
10
],
16
:[
1
,
12
],
19
:[
1
,
21
],
20
:[
2
,
6
],
22
:[
1
,
13
],
23
:[
1
,
14
],
25
:[
1
,
15
]},{
17
:
23
,
18
:[
1
,
40
],
21
:
24
,
30
:
25
,
40
:[
1
,
28
],
42
:[
1
,
27
],
43
:
26
},{
10
:
41
,
20
:[
1
,
37
]},{
18
:[
1
,
42
]},{
18
:[
2
,
43
],
24
:[
2
,
43
],
28
:
43
,
32
:[
2
,
43
],
33
:[
2
,
43
],
34
:[
2
,
43
],
35
:[
2
,
43
],
36
:[
2
,
43
],
40
:[
2
,
43
],
42
:[
2
,
43
]},{
18
:[
2
,
25
],
24
:[
2
,
25
],
36
:[
2
,
25
]},{
18
:[
2
,
38
],
24
:[
2
,
38
],
32
:[
2
,
38
],
33
:[
2
,
38
],
34
:[
2
,
38
],
35
:[
2
,
38
],
36
:[
2
,
38
],
40
:[
2
,
38
],
42
:[
2
,
38
],
44
:[
1
,
44
]},{
21
:
45
,
40
:[
1
,
28
],
43
:
26
},{
18
:[
2
,
40
],
24
:[
2
,
40
],
32
:[
2
,
40
],
33
:[
2
,
40
],
34
:[
2
,
40
],
35
:[
2
,
40
],
36
:[
2
,
40
],
40
:[
2
,
40
],
42
:[
2
,
40
],
44
:[
2
,
40
]},{
18
:[
1
,
46
]},{
18
:[
1
,
47
]},{
24
:[
1
,
48
]},{
18
:[
2
,
41
],
21
:
50
,
27
:
49
,
40
:[
1
,
28
],
43
:
26
},{
18
:[
2
,
34
],
40
:[
2
,
34
]},{
18
:[
2
,
35
],
40
:[
2
,
35
]},{
18
:[
2
,
36
],
40
:[
2
,
36
]},{
5
:[
2
,
11
],
14
:[
2
,
11
],
15
:[
2
,
11
],
16
:[
2
,
11
],
19
:[
2
,
11
],
20
:[
2
,
11
],
22
:[
2
,
11
],
23
:[
2
,
11
],
25
:[
2
,
11
]},{
21
:
51
,
40
:[
1
,
28
],
43
:
26
},{
8
:
17
,
9
:
5
,
11
:
6
,
12
:
7
,
13
:
8
,
14
:[
1
,
9
],
15
:[
1
,
10
],
16
:[
1
,
12
],
19
:[
1
,
11
],
20
:[
2
,
3
],
22
:[
1
,
13
],
23
:[
1
,
14
],
25
:[
1
,
15
]},{
4
:
52
,
8
:
4
,
9
:
5
,
11
:
6
,
12
:
7
,
13
:
8
,
14
:[
1
,
9
],
15
:[
1
,
10
],
16
:[
1
,
12
],
19
:[
1
,
11
],
20
:[
2
,
5
],
22
:[
1
,
13
],
23
:[
1
,
14
],
25
:[
1
,
15
]},{
14
:[
2
,
23
],
15
:[
2
,
23
],
16
:[
2
,
23
],
19
:[
2
,
23
],
20
:[
2
,
23
],
22
:[
2
,
23
],
23
:[
2
,
23
],
25
:[
2
,
23
]},{
5
:[
2
,
12
],
14
:[
2
,
12
],
15
:[
2
,
12
],
16
:[
2
,
12
],
19
:[
2
,
12
],
20
:[
2
,
12
],
22
:[
2
,
12
],
23
:[
2
,
12
],
25
:[
2
,
12
]},{
14
:[
2
,
18
],
15
:[
2
,
18
],
16
:[
2
,
18
],
19
:[
2
,
18
],
20
:[
2
,
18
],
22
:[
2
,
18
],
23
:[
2
,
18
],
25
:[
2
,
18
]},{
18
:[
2
,
45
],
21
:
56
,
24
:[
2
,
45
],
29
:
53
,
30
:
60
,
31
:
54
,
32
:[
1
,
57
],
33
:[
1
,
58
],
34
:[
1
,
59
],
35
:[
1
,
61
],
36
:[
2
,
45
],
37
:
55
,
38
:
62
,
39
:
63
,
40
:[
1
,
64
],
42
:[
1
,
27
],
43
:
26
},{
40
:[
1
,
65
]},{
18
:[
2
,
37
],
24
:[
2
,
37
],
32
:[
2
,
37
],
33
:[
2
,
37
],
34
:[
2
,
37
],
35
:[
2
,
37
],
36
:[
2
,
37
],
40
:[
2
,
37
],
42
:[
2
,
37
]},{
14
:[
2
,
17
],
15
:[
2
,
17
],
16
:[
2
,
17
],
19
:[
2
,
17
],
20
:[
2
,
17
],
22
:[
2
,
17
],
23
:[
2
,
17
],
25
:[
2
,
17
]},{
5
:[
2
,
20
],
14
:[
2
,
20
],
15
:[
2
,
20
],
16
:[
2
,
20
],
19
:[
2
,
20
],
20
:[
2
,
20
],
22
:[
2
,
20
],
23
:[
2
,
20
],
25
:[
2
,
20
]},{
5
:[
2
,
21
],
14
:[
2
,
21
],
15
:[
2
,
21
],
16
:[
2
,
21
],
19
:[
2
,
21
],
20
:[
2
,
21
],
22
:[
2
,
21
],
23
:[
2
,
21
],
25
:[
2
,
21
]},{
18
:[
1
,
66
]},{
18
:[
2
,
42
]},{
18
:[
1
,
67
]},{
8
:
17
,
9
:
5
,
11
:
6
,
12
:
7
,
13
:
8
,
14
:[
1
,
9
],
15
:[
1
,
10
],
16
:[
1
,
12
],
19
:[
1
,
11
],
20
:[
2
,
4
],
22
:[
1
,
13
],
23
:[
1
,
14
],
25
:[
1
,
15
]},{
18
:[
2
,
24
],
24
:[
2
,
24
],
36
:[
2
,
24
]},{
18
:[
2
,
44
],
24
:[
2
,
44
],
32
:[
2
,
44
],
33
:[
2
,
44
],
34
:[
2
,
44
],
35
:[
2
,
44
],
36
:[
2
,
44
],
40
:[
2
,
44
],
42
:[
2
,
44
]},{
18
:[
2
,
46
],
24
:[
2
,
46
],
36
:[
2
,
46
]},{
18
:[
2
,
26
],
24
:[
2
,
26
],
32
:[
2
,
26
],
33
:[
2
,
26
],
34
:[
2
,
26
],
35
:[
2
,
26
],
36
:[
2
,
26
],
40
:[
2
,
26
],
42
:[
2
,
26
]},{
18
:[
2
,
27
],
24
:[
2
,
27
],
32
:[
2
,
27
],
33
:[
2
,
27
],
34
:[
2
,
27
],
35
:[
2
,
27
],
36
:[
2
,
27
],
40
:[
2
,
27
],
42
:[
2
,
27
]},{
18
:[
2
,
28
],
24
:[
2
,
28
],
32
:[
2
,
28
],
33
:[
2
,
28
],
34
:[
2
,
28
],
35
:[
2
,
28
],
36
:[
2
,
28
],
40
:[
2
,
28
],
42
:[
2
,
28
]},{
18
:[
2
,
29
],
24
:[
2
,
29
],
32
:[
2
,
29
],
33
:[
2
,
29
],
34
:[
2
,
29
],
35
:[
2
,
29
],
36
:[
2
,
29
],
40
:[
2
,
29
],
42
:[
2
,
29
]},{
18
:[
2
,
30
],
24
:[
2
,
30
],
32
:[
2
,
30
],
33
:[
2
,
30
],
34
:[
2
,
30
],
35
:[
2
,
30
],
36
:[
2
,
30
],
40
:[
2
,
30
],
42
:[
2
,
30
]},{
17
:
68
,
21
:
24
,
30
:
25
,
40
:[
1
,
28
],
42
:[
1
,
27
],
43
:
26
},{
18
:[
2
,
32
],
24
:[
2
,
32
],
36
:[
2
,
32
],
39
:
69
,
40
:[
1
,
70
]},{
18
:[
2
,
47
],
24
:[
2
,
47
],
36
:[
2
,
47
],
40
:[
2
,
47
]},{
18
:[
2
,
40
],
24
:[
2
,
40
],
32
:[
2
,
40
],
33
:[
2
,
40
],
34
:[
2
,
40
],
35
:[
2
,
40
],
36
:[
2
,
40
],
40
:[
2
,
40
],
41
:[
1
,
71
],
42
:[
2
,
40
],
44
:[
2
,
40
]},{
18
:[
2
,
39
],
24
:[
2
,
39
],
32
:[
2
,
39
],
33
:[
2
,
39
],
34
:[
2
,
39
],
35
:[
2
,
39
],
36
:[
2
,
39
],
40
:[
2
,
39
],
42
:[
2
,
39
],
44
:[
2
,
39
]},{
5
:[
2
,
22
],
14
:[
2
,
22
],
15
:[
2
,
22
],
16
:[
2
,
22
],
19
:[
2
,
22
],
20
:[
2
,
22
],
22
:[
2
,
22
],
23
:[
2
,
22
],
25
:[
2
,
22
]},{
5
:[
2
,
19
],
14
:[
2
,
19
],
15
:[
2
,
19
],
16
:[
2
,
19
],
19
:[
2
,
19
],
20
:[
2
,
19
],
22
:[
2
,
19
],
23
:[
2
,
19
],
25
:[
2
,
19
]},{
36
:[
1
,
72
]},{
18
:[
2
,
48
],
24
:[
2
,
48
],
36
:[
2
,
48
],
40
:[
2
,
48
]},{
41
:[
1
,
71
]},{
21
:
56
,
30
:
60
,
31
:
73
,
32
:[
1
,
57
],
33
:[
1
,
58
],
34
:[
1
,
59
],
35
:[
1
,
61
],
40
:[
1
,
28
],
42
:[
1
,
27
],
43
:
26
},{
18
:[
2
,
31
],
24
:[
2
,
31
],
32
:[
2
,
31
],
33
:[
2
,
31
],
34
:[
2
,
31
],
35
:[
2
,
31
],
36
:[
2
,
31
],
40
:[
2
,
31
],
42
:[
2
,
31
]},{
18
:[
2
,
33
],
24
:[
2
,
33
],
36
:[
2
,
33
],
40
:[
2
,
33
]}],
defaultActions
:
{
3
:[
2
,
2
],
16
:[
2
,
1
],
50
:[
2
,
42
]},
parseError
:
function
parseError
(
str
,
hash
)
{
throw
new
Error
(
str
);
throw
new
Error
(
str
);
},
},
parse
:
function
parse
(
input
)
{
parse
:
function
parse
(
input
)
{
var
self
=
this
,
stack
=
[
0
],
vstack
=
[
null
],
lstack
=
[],
table
=
this
.
table
,
yytext
=
""
,
yylineno
=
0
,
yyleng
=
0
,
recovering
=
0
,
TERROR
=
2
,
EOF
=
1
;
var
self
=
this
,
stack
=
[
0
],
vstack
=
[
null
],
lstack
=
[],
table
=
this
.
table
,
yytext
=
""
,
yylineno
=
0
,
yyleng
=
0
,
recovering
=
0
,
TERROR
=
2
,
EOF
=
1
;
this
.
lexer
.
setInput
(
input
);
this
.
lexer
.
setInput
(
input
);
this
.
lexer
.
yy
=
this
.
yy
;
this
.
lexer
.
yy
=
this
.
yy
;
...
@@ -387,19 +972,28 @@ parse: function parse(input) {
...
@@ -387,19 +972,28 @@ parse: function parse(input) {
}
}
}
}
return
true
;
return
true
;
}
}
};
};
/* Jison generated lexer */
var
lexer
=
(
function
(){
var
lexer
=
({
EOF
:
1
,
function
stripFlags
(
open
,
close
)
{
parseError
:
function
parseError
(
str
,
hash
)
{
return
{
left
:
open
.
charAt
(
2
)
===
'
~
'
,
right
:
close
.
charAt
(
0
)
===
'
~
'
||
close
.
charAt
(
1
)
===
'
~
'
};
}
/* Jison generated lexer */
var
lexer
=
(
function
(){
var
lexer
=
({
EOF
:
1
,
parseError
:
function
parseError
(
str
,
hash
)
{
if
(
this
.
yy
.
parser
)
{
if
(
this
.
yy
.
parser
)
{
this
.
yy
.
parser
.
parseError
(
str
,
hash
);
this
.
yy
.
parser
.
parseError
(
str
,
hash
);
}
else
{
}
else
{
throw
new
Error
(
str
);
throw
new
Error
(
str
);
}
}
},
},
setInput
:
function
(
input
)
{
setInput
:
function
(
input
)
{
this
.
_input
=
input
;
this
.
_input
=
input
;
this
.
_more
=
this
.
_less
=
this
.
done
=
false
;
this
.
_more
=
this
.
_less
=
this
.
done
=
false
;
this
.
yylineno
=
this
.
yyleng
=
0
;
this
.
yylineno
=
this
.
yyleng
=
0
;
...
@@ -410,7 +1004,7 @@ setInput:function (input) {
...
@@ -410,7 +1004,7 @@ setInput:function (input) {
this
.
offset
=
0
;
this
.
offset
=
0
;
return
this
;
return
this
;
},
},
input
:
function
()
{
input
:
function
()
{
var
ch
=
this
.
_input
[
0
];
var
ch
=
this
.
_input
[
0
];
this
.
yytext
+=
ch
;
this
.
yytext
+=
ch
;
this
.
yyleng
++
;
this
.
yyleng
++
;
...
@@ -429,7 +1023,7 @@ input:function () {
...
@@ -429,7 +1023,7 @@ input:function () {
this
.
_input
=
this
.
_input
.
slice
(
1
);
this
.
_input
=
this
.
_input
.
slice
(
1
);
return
ch
;
return
ch
;
},
},
unput
:
function
(
ch
)
{
unput
:
function
(
ch
)
{
var
len
=
ch
.
length
;
var
len
=
ch
.
length
;
var
lines
=
ch
.
split
(
/
(?:\r\n?
|
\n)
/g
);
var
lines
=
ch
.
split
(
/
(?:\r\n?
|
\n)
/g
);
...
@@ -457,30 +1051,30 @@ unput:function (ch) {
...
@@ -457,30 +1051,30 @@ unput:function (ch) {
}
}
return
this
;
return
this
;
},
},
more
:
function
()
{
more
:
function
()
{
this
.
_more
=
true
;
this
.
_more
=
true
;
return
this
;
return
this
;
},
},
less
:
function
(
n
)
{
less
:
function
(
n
)
{
this
.
unput
(
this
.
match
.
slice
(
n
));
this
.
unput
(
this
.
match
.
slice
(
n
));
},
},
pastInput
:
function
()
{
pastInput
:
function
()
{
var
past
=
this
.
matched
.
substr
(
0
,
this
.
matched
.
length
-
this
.
match
.
length
);
var
past
=
this
.
matched
.
substr
(
0
,
this
.
matched
.
length
-
this
.
match
.
length
);
return
(
past
.
length
>
20
?
'
...
'
:
''
)
+
past
.
substr
(
-
20
).
replace
(
/
\n
/g
,
""
);
return
(
past
.
length
>
20
?
'
...
'
:
''
)
+
past
.
substr
(
-
20
).
replace
(
/
\n
/g
,
""
);
},
},
upcomingInput
:
function
()
{
upcomingInput
:
function
()
{
var
next
=
this
.
match
;
var
next
=
this
.
match
;
if
(
next
.
length
<
20
)
{
if
(
next
.
length
<
20
)
{
next
+=
this
.
_input
.
substr
(
0
,
20
-
next
.
length
);
next
+=
this
.
_input
.
substr
(
0
,
20
-
next
.
length
);
}
}
return
(
next
.
substr
(
0
,
20
)
+
(
next
.
length
>
20
?
'
...
'
:
''
)).
replace
(
/
\n
/g
,
""
);
return
(
next
.
substr
(
0
,
20
)
+
(
next
.
length
>
20
?
'
...
'
:
''
)).
replace
(
/
\n
/g
,
""
);
},
},
showPosition
:
function
()
{
showPosition
:
function
()
{
var
pre
=
this
.
pastInput
();
var
pre
=
this
.
pastInput
();
var
c
=
new
Array
(
pre
.
length
+
1
).
join
(
"
-
"
);
var
c
=
new
Array
(
pre
.
length
+
1
).
join
(
"
-
"
);
return
pre
+
this
.
upcomingInput
()
+
"
\n
"
+
c
+
"
^
"
;
return
pre
+
this
.
upcomingInput
()
+
"
\n
"
+
c
+
"
^
"
;
},
},
next
:
function
()
{
next
:
function
()
{
if
(
this
.
done
)
{
if
(
this
.
done
)
{
return
this
.
EOF
;
return
this
.
EOF
;
}
}
...
@@ -534,7 +1128,7 @@ next:function () {
...
@@ -534,7 +1128,7 @@ next:function () {
{
text
:
""
,
token
:
null
,
line
:
this
.
yylineno
});
{
text
:
""
,
token
:
null
,
line
:
this
.
yylineno
});
}
}
},
},
lex
:
function
lex
()
{
lex
:
function
lex
()
{
var
r
=
this
.
next
();
var
r
=
this
.
next
();
if
(
typeof
r
!==
'
undefined
'
)
{
if
(
typeof
r
!==
'
undefined
'
)
{
return
r
;
return
r
;
...
@@ -542,324 +1136,155 @@ lex:function lex() {
...
@@ -542,324 +1136,155 @@ lex:function lex() {
return
this
.
lex
();
return
this
.
lex
();
}
}
},
},
begin
:
function
begin
(
condition
)
{
begin
:
function
begin
(
condition
)
{
this
.
conditionStack
.
push
(
condition
);
this
.
conditionStack
.
push
(
condition
);
},
},
popState
:
function
popState
()
{
popState
:
function
popState
()
{
return
this
.
conditionStack
.
pop
();
return
this
.
conditionStack
.
pop
();
},
},
_currentRules
:
function
_currentRules
()
{
_currentRules
:
function
_currentRules
()
{
return
this
.
conditions
[
this
.
conditionStack
[
this
.
conditionStack
.
length
-
1
]].
rules
;
return
this
.
conditions
[
this
.
conditionStack
[
this
.
conditionStack
.
length
-
1
]].
rules
;
},
},
topState
:
function
()
{
topState
:
function
()
{
return
this
.
conditionStack
[
this
.
conditionStack
.
length
-
2
];
return
this
.
conditionStack
[
this
.
conditionStack
.
length
-
2
];
},
},
pushState
:
function
begin
(
condition
)
{
pushState
:
function
begin
(
condition
)
{
this
.
begin
(
condition
);
this
.
begin
(
condition
);
}});
}});
lexer
.
options
=
{};
lexer
.
options
=
{};
lexer
.
performAction
=
function
anonymous
(
yy
,
yy_
,
$avoiding_name_collisions
,
YY_START
)
{
lexer
.
performAction
=
function
anonymous
(
yy
,
yy_
,
$avoiding_name_collisions
,
YY_START
)
{
var
YYSTATE
=
YY_START
switch
(
$avoiding_name_collisions
)
{
case
0
:
if
(
yy_
.
yytext
.
slice
(
-
1
)
!==
"
\\
"
)
this
.
begin
(
"
mu
"
);
if
(
yy_
.
yytext
.
slice
(
-
1
)
===
"
\\
"
)
yy_
.
yytext
=
yy_
.
yytext
.
substr
(
0
,
yy_
.
yyleng
-
1
),
this
.
begin
(
"
emu
"
);
if
(
yy_
.
yytext
)
return
14
;
break
;
case
1
:
return
14
;
break
;
case
2
:
if
(
yy_
.
yytext
.
slice
(
-
1
)
!==
"
\\
"
)
this
.
popState
();
if
(
yy_
.
yytext
.
slice
(
-
1
)
===
"
\\
"
)
yy_
.
yytext
=
yy_
.
yytext
.
substr
(
0
,
yy_
.
yyleng
-
1
);
return
14
;
break
;
case
3
:
yy_
.
yytext
=
yy_
.
yytext
.
substr
(
0
,
yy_
.
yyleng
-
4
);
this
.
popState
();
return
15
;
break
;
case
4
:
this
.
begin
(
"
par
"
);
return
24
;
break
;
case
5
:
return
16
;
break
;
case
6
:
return
20
;
break
;
case
7
:
return
19
;
break
;
case
8
:
return
19
;
break
;
case
9
:
return
23
;
break
;
case
10
:
return
23
;
break
;
case
11
:
this
.
popState
();
this
.
begin
(
'
com
'
);
break
;
case
12
:
yy_
.
yytext
=
yy_
.
yytext
.
substr
(
3
,
yy_
.
yyleng
-
5
);
this
.
popState
();
return
15
;
break
;
case
13
:
return
22
;
break
;
case
14
:
return
36
;
break
;
case
15
:
return
35
;
break
;
case
16
:
return
35
;
break
;
case
17
:
return
39
;
break
;
case
18
:
/*ignore whitespace*/
break
;
case
19
:
this
.
popState
();
return
18
;
break
;
case
20
:
this
.
popState
();
return
18
;
break
;
case
21
:
yy_
.
yytext
=
yy_
.
yytext
.
substr
(
1
,
yy_
.
yyleng
-
2
).
replace
(
/
\\
"/g
,
'
"
'
);
return
30
;
break
;
case
22
:
yy_
.
yytext
=
yy_
.
yytext
.
substr
(
1
,
yy_
.
yyleng
-
2
).
replace
(
/
\\
'/g
,
"
'
"
);
return
30
;
break
;
case
23
:
yy_
.
yytext
=
yy_
.
yytext
.
substr
(
1
);
return
28
;
break
;
case
24
:
return
32
;
break
;
case
25
:
return
32
;
break
;
case
26
:
return
31
;
break
;
case
27
:
return
35
;
break
;
case
28
:
yy_
.
yytext
=
yy_
.
yytext
.
substr
(
1
,
yy_
.
yyleng
-
2
);
return
35
;
break
;
case
29
:
return
'
INVALID
'
;
break
;
case
30
:
/*ignore whitespace*/
break
;
case
31
:
this
.
popState
();
return
37
;
break
;
case
32
:
return
5
;
break
;
}
};
lexer
.
rules
=
[
/^
(?:[^\x
00
]
*
?(?=(\{\{)))
/
,
/^
(?:[^\x
00
]
+
)
/
,
/^
(?:[^\x
00
]{2,}?(?=(\{\{
|$
)))
/
,
/^
(?:[\s\S]
*
?
--
\}\})
/
,
/^
(?:\{\{
>
)
/
,
/^
(?:\{\{
#
)
/
,
/^
(?:\{\{\/)
/
,
/^
(?:\{\{\^)
/
,
/^
(?:\{\{\s
*else
\b)
/
,
/^
(?:\{\{\{)
/
,
/^
(?:\{\{
&
)
/
,
/^
(?:\{\{
!--
)
/
,
/^
(?:\{\{
!
[\s\S]
*
?\}\})
/
,
/^
(?:\{\{)
/
,
/^
(?:
=
)
/
,
/^
(?:\.(?=[
}
]))
/
,
/^
(?:\.\.)
/
,
/^
(?:[\/
.
])
/
,
/^
(?:\s
+
)
/
,
/^
(?:\}\}\})
/
,
/^
(?:\}\})
/
,
/^
(?:
"
(\\[
"
]
|
[^
"
])
*"
)
/
,
/^
(?:
'
(\\[
'
]
|
[^
'
])
*'
)
/
,
/^
(?:
@
[
a-zA-Z
]
+
)
/
,
/^
(?:
true
(?=[
}
\s]))
/
,
/^
(?:
false
(?=[
}
\s]))
/
,
/^
(?:[
0-9
]
+
(?=[
}
\s]))
/
,
/^
(?:[
a-zA-Z0-9_$-
]
+
(?=[
=}
\s\/
.
]))
/
,
/^
(?:\[[^\]]
*
\])
/
,
/^
(?:
.
)
/
,
/^
(?:\s
+
)
/
,
/^
(?:[
a-zA-Z0-9_$-
/]
+
)
/
,
/^
(?:
$
)
/
];
lexer
.
conditions
=
{
"
mu
"
:{
"
rules
"
:[
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
,
16
,
17
,
18
,
19
,
20
,
21
,
22
,
23
,
24
,
25
,
26
,
27
,
28
,
29
,
32
],
"
inclusive
"
:
false
},
"
emu
"
:{
"
rules
"
:[
2
],
"
inclusive
"
:
false
},
"
com
"
:{
"
rules
"
:[
3
],
"
inclusive
"
:
false
},
"
par
"
:{
"
rules
"
:[
30
,
31
],
"
inclusive
"
:
false
},
"
INITIAL
"
:{
"
rules
"
:[
0
,
1
,
32
],
"
inclusive
"
:
true
}};
return
lexer
;})()
parser
.
lexer
=
lexer
;
function
Parser
()
{
this
.
yy
=
{};
}
Parser
.
prototype
=
parser
;
parser
.
Parser
=
Parser
;
return
new
Parser
;
})();;
// lib/handlebars/compiler/base.js
Handlebars
.
Parser
=
handlebars
;
Handlebars
.
parse
=
function
(
input
)
{
// Just return if an already-compile AST was passed in.
if
(
input
.
constructor
===
Handlebars
.
AST
.
ProgramNode
)
{
return
input
;
}
Handlebars
.
Parser
.
yy
=
Handlebars
.
AST
;
function
strip
(
start
,
end
)
{
return
Handlebars
.
Parser
.
parse
(
input
);
return
yy_
.
yytext
=
yy_
.
yytext
.
substr
(
start
,
yy_
.
yyleng
-
end
);
};
Handlebars
.
print
=
function
(
ast
)
{
return
new
Handlebars
.
PrintVisitor
().
accept
(
ast
);
};;
// lib/handlebars/compiler/ast.js
(
function
()
{
Handlebars
.
AST
=
{};
Handlebars
.
AST
.
ProgramNode
=
function
(
statements
,
inverse
)
{
this
.
type
=
"
program
"
;
this
.
statements
=
statements
;
if
(
inverse
)
{
this
.
inverse
=
new
Handlebars
.
AST
.
ProgramNode
(
inverse
);
}
};
Handlebars
.
AST
.
MustacheNode
=
function
(
rawParams
,
hash
,
unescaped
)
{
this
.
type
=
"
mustache
"
;
this
.
escaped
=
!
unescaped
;
this
.
hash
=
hash
;
var
id
=
this
.
id
=
rawParams
[
0
];
var
params
=
this
.
params
=
rawParams
.
slice
(
1
);
// a mustache is an eligible helper if:
// * its id is simple (a single part, not `this` or `..`)
var
eligibleHelper
=
this
.
eligibleHelper
=
id
.
isSimple
;
// a mustache is definitely a helper if:
// * it is an eligible helper, and
// * it has at least one parameter or hash segment
this
.
isHelper
=
eligibleHelper
&&
(
params
.
length
||
hash
);
// if a mustache is an eligible helper but not a definite
// helper, it is ambiguous, and will be resolved in a later
// pass or at runtime.
};
Handlebars
.
AST
.
PartialNode
=
function
(
partialName
,
context
)
{
this
.
type
=
"
partial
"
;
this
.
partialName
=
partialName
;
this
.
context
=
context
;
};
var
verifyMatch
=
function
(
open
,
close
)
{
if
(
open
.
original
!==
close
.
original
)
{
throw
new
Handlebars
.
Exception
(
open
.
original
+
"
doesn't match
"
+
close
.
original
);
}
};
Handlebars
.
AST
.
BlockNode
=
function
(
mustache
,
program
,
inverse
,
close
)
{
verifyMatch
(
mustache
.
id
,
close
);
this
.
type
=
"
block
"
;
this
.
mustache
=
mustache
;
this
.
program
=
program
;
this
.
inverse
=
inverse
;
if
(
this
.
inverse
&&
!
this
.
program
)
{
this
.
isInverse
=
true
;
}
};
Handlebars
.
AST
.
ContentNode
=
function
(
string
)
{
this
.
type
=
"
content
"
;
this
.
string
=
string
;
};
Handlebars
.
AST
.
HashNode
=
function
(
pairs
)
{
this
.
type
=
"
hash
"
;
this
.
pairs
=
pairs
;
};
Handlebars
.
AST
.
IdNode
=
function
(
parts
)
{
this
.
type
=
"
ID
"
;
this
.
original
=
parts
.
join
(
"
.
"
);
var
dig
=
[],
depth
=
0
;
for
(
var
i
=
0
,
l
=
parts
.
length
;
i
<
l
;
i
++
)
{
var
part
=
parts
[
i
];
if
(
part
===
"
..
"
||
part
===
"
.
"
||
part
===
"
this
"
)
{
if
(
dig
.
length
>
0
)
{
throw
new
Handlebars
.
Exception
(
"
Invalid path:
"
+
this
.
original
);
}
else
if
(
part
===
"
..
"
)
{
depth
++
;
}
else
{
this
.
isScoped
=
true
;
}
}
else
{
dig
.
push
(
part
);
}
}
this
.
parts
=
dig
;
this
.
string
=
dig
.
join
(
'
.
'
);
this
.
depth
=
depth
;
// an ID is simple if it only has one part, and that part is not
// `..` or `this`.
this
.
isSimple
=
parts
.
length
===
1
&&
!
this
.
isScoped
&&
depth
===
0
;
this
.
stringModeValue
=
this
.
string
;
};
Handlebars
.
AST
.
PartialNameNode
=
function
(
name
)
{
this
.
type
=
"
PARTIAL_NAME
"
;
this
.
name
=
name
;
};
Handlebars
.
AST
.
DataNode
=
function
(
id
)
{
this
.
type
=
"
DATA
"
;
this
.
id
=
id
;
};
Handlebars
.
AST
.
StringNode
=
function
(
string
)
{
this
.
type
=
"
STRING
"
;
this
.
string
=
string
;
this
.
stringModeValue
=
string
;
};
Handlebars
.
AST
.
IntegerNode
=
function
(
integer
)
{
this
.
type
=
"
INTEGER
"
;
this
.
integer
=
integer
;
this
.
stringModeValue
=
Number
(
integer
);
};
Handlebars
.
AST
.
BooleanNode
=
function
(
bool
)
{
this
.
type
=
"
BOOLEAN
"
;
this
.
bool
=
bool
;
this
.
stringModeValue
=
bool
===
"
true
"
;
};
Handlebars
.
AST
.
CommentNode
=
function
(
comment
)
{
this
.
type
=
"
comment
"
;
this
.
comment
=
comment
;
};
})();;
// lib/handlebars/utils.js
var
errorProps
=
[
'
description
'
,
'
fileName
'
,
'
lineNumber
'
,
'
message
'
,
'
name
'
,
'
number
'
,
'
stack
'
];
Handlebars
.
Exception
=
function
(
message
)
{
var
tmp
=
Error
.
prototype
.
constructor
.
apply
(
this
,
arguments
);
// Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
for
(
var
idx
=
0
;
idx
<
errorProps
.
length
;
idx
++
)
{
this
[
errorProps
[
idx
]]
=
tmp
[
errorProps
[
idx
]];
}
};
Handlebars
.
Exception
.
prototype
=
new
Error
();
// Build out our basic SafeString type
Handlebars
.
SafeString
=
function
(
string
)
{
this
.
string
=
string
;
};
Handlebars
.
SafeString
.
prototype
.
toString
=
function
()
{
return
this
.
string
.
toString
();
};
(
function
()
{
var
escape
=
{
"
&
"
:
"
&
"
,
"
<
"
:
"
<
"
,
"
>
"
:
"
>
"
,
'
"
'
:
"
"
"
,
"
'
"
:
"
'
"
,
"
`
"
:
"
`
"
};
var
badChars
=
/
[
&<>"'`
]
/g
;
var
possible
=
/
[
&<>"'`
]
/
;
var
escapeChar
=
function
(
chr
)
{
return
escape
[
chr
]
||
"
&
"
;
};
Handlebars
.
Utils
=
{
escapeExpression
:
function
(
string
)
{
// don't escape SafeStrings, since they're already safe
if
(
string
instanceof
Handlebars
.
SafeString
)
{
return
string
.
toString
();
}
else
if
(
string
==
null
||
string
===
false
)
{
return
""
;
}
}
if
(
!
possible
.
test
(
string
))
{
return
string
;
}
return
string
.
replace
(
badChars
,
escapeChar
);
},
isEmpty
:
function
(
value
)
{
var
YYSTATE
=
YY_START
if
(
!
value
&&
value
!==
0
)
{
switch
(
$avoiding_name_collisions
)
{
return
true
;
case
0
:
}
else
if
(
Object
.
prototype
.
toString
.
call
(
value
)
===
"
[object Array]
"
&&
value
.
length
===
0
)
{
if
(
yy_
.
yytext
.
slice
(
-
2
)
===
"
\\\\
"
)
{
return
true
;
strip
(
0
,
1
);
this
.
begin
(
"
mu
"
);
}
else
if
(
yy_
.
yytext
.
slice
(
-
1
)
===
"
\\
"
)
{
strip
(
0
,
1
);
this
.
begin
(
"
emu
"
);
}
else
{
}
else
{
return
false
;
this
.
begin
(
"
mu
"
)
;
}
}
if
(
yy_
.
yytext
)
return
14
;
break
;
case
1
:
return
14
;
break
;
case
2
:
this
.
popState
();
return
14
;
break
;
case
3
:
strip
(
0
,
4
);
this
.
popState
();
return
15
;
break
;
case
4
:
return
35
;
break
;
case
5
:
return
36
;
break
;
case
6
:
return
25
;
break
;
case
7
:
return
16
;
break
;
case
8
:
return
20
;
break
;
case
9
:
return
19
;
break
;
case
10
:
return
19
;
break
;
case
11
:
return
23
;
break
;
case
12
:
return
22
;
break
;
case
13
:
this
.
popState
();
this
.
begin
(
'
com
'
);
break
;
case
14
:
strip
(
3
,
5
);
this
.
popState
();
return
15
;
break
;
case
15
:
return
22
;
break
;
case
16
:
return
41
;
break
;
case
17
:
return
40
;
break
;
case
18
:
return
40
;
break
;
case
19
:
return
44
;
break
;
case
20
:
// ignore whitespace
break
;
case
21
:
this
.
popState
();
return
24
;
break
;
case
22
:
this
.
popState
();
return
18
;
break
;
case
23
:
yy_
.
yytext
=
strip
(
1
,
2
).
replace
(
/
\\
"/g
,
'
"
'
);
return
32
;
break
;
case
24
:
yy_
.
yytext
=
strip
(
1
,
2
).
replace
(
/
\\
'/g
,
"
'
"
);
return
32
;
break
;
case
25
:
return
42
;
break
;
case
26
:
return
34
;
break
;
case
27
:
return
34
;
break
;
case
28
:
return
33
;
break
;
case
29
:
return
40
;
break
;
case
30
:
yy_
.
yytext
=
strip
(
1
,
2
);
return
40
;
break
;
case
31
:
return
'
INVALID
'
;
break
;
case
32
:
return
5
;
break
;
}
}
};
};
})();;
lexer
.
rules
=
[
/^
(?:[^\x
00
]
*
?(?=(\{\{)))
/
,
/^
(?:[^\x
00
]
+
)
/
,
/^
(?:[^\x
00
]{2,}?(?=(\{\{
|
\\\{\{
|
\\\\\{\{
|$
)))
/
,
/^
(?:[\s\S]
*
?
--
\}\})
/
,
/^
(?:\()
/
,
/^
(?:\))
/
,
/^
(?:\{\{(
~
)?
>
)
/
,
/^
(?:\{\{(
~
)?
#
)
/
,
/^
(?:\{\{(
~
)?\/)
/
,
/^
(?:\{\{(
~
)?\^)
/
,
/^
(?:\{\{(
~
)?\s
*else
\b)
/
,
/^
(?:\{\{(
~
)?\{)
/
,
/^
(?:\{\{(
~
)?
&
)
/
,
/^
(?:\{\{
!--
)
/
,
/^
(?:\{\{
!
[\s\S]
*
?\}\})
/
,
/^
(?:\{\{(
~
)?)
/
,
/^
(?:
=
)
/
,
/^
(?:\.\.)
/
,
/^
(?:\.(?=([
=~}
\s\/
.)
])))
/
,
/^
(?:[\/
.
])
/
,
/^
(?:\s
+
)
/
,
/^
(?:\}(
~
)?\}\})
/
,
/^
(?:(
~
)?\}\})
/
,
/^
(?:
"
(\\[
"
]
|
[^
"
])
*"
)
/
,
/^
(?:
'
(\\[
'
]
|
[^
'
])
*'
)
/
,
/^
(?:
@
)
/
,
/^
(?:
true
(?=([
~}
\s
)
])))
/
,
/^
(?:
false
(?=([
~}
\s
)
])))
/
,
/^
(?:
-
?[
0-9
]
+
(?=([
~}
\s
)
])))
/
,
/^
(?:([^\s
!"#%-,
\.\/
;->@
\[
-
\^
`
\{
-~
]
+
(?=([
=~}
\s\/
.)
]))))
/
,
/^
(?:\[[^\]]
*
\])
/
,
/^
(?:
.
)
/
,
/^
(?:
$
)
/
];
// lib/handlebars/compiler/compiler.js
lexer
.
conditions
=
{
"
mu
"
:{
"
rules
"
:[
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
,
16
,
17
,
18
,
19
,
20
,
21
,
22
,
23
,
24
,
25
,
26
,
27
,
28
,
29
,
30
,
31
,
32
],
"
inclusive
"
:
false
},
"
emu
"
:{
"
rules
"
:[
2
],
"
inclusive
"
:
false
},
"
com
"
:{
"
rules
"
:[
3
],
"
inclusive
"
:
false
},
"
INITIAL
"
:{
"
rules
"
:[
0
,
1
,
32
],
"
inclusive
"
:
true
}};
return
lexer
;})()
parser
.
lexer
=
lexer
;
function
Parser
()
{
this
.
yy
=
{};
}
Parser
.
prototype
=
parser
;
parser
.
Parser
=
Parser
;
return
new
Parser
;
})();
__exports__
=
handlebars
;
/* jshint ignore:end */
return
__exports__
;
})();
// handlebars/compiler/base.js
var
__module8__
=
(
function
(
__dependency1__
,
__dependency2__
)
{
"
use strict
"
;
var
__exports__
=
{};
var
parser
=
__dependency1__
;
var
AST
=
__dependency2__
;
__exports__
.
parser
=
parser
;
function
parse
(
input
)
{
// Just return if an already-compile AST was passed in.
if
(
input
.
constructor
===
AST
.
ProgramNode
)
{
return
input
;
}
parser
.
yy
=
AST
;
return
parser
.
parse
(
input
);
}
/*jshint eqnull:true*/
__exports__
.
parse
=
parse
;
Handlebars
.
Compiler
=
function
()
{}
;
return
__exports__
;
Handlebars
.
JavaScriptCompiler
=
function
()
{}
;
})(
__module9__
,
__module7__
)
;
(
function
(
Compiler
,
JavaScriptCompiler
)
{
// handlebars/compiler/compiler.js
// the foundHelper register will disambiguate helper lookup from finding a
var
__module10__
=
(
function
(
__dependency1__
)
{
"
use strict
"
;
var
__exports__
=
{};
var
Exception
=
__dependency1__
;
function
Compiler
()
{}
__exports__
.
Compiler
=
Compiler
;
// the foundHelper register will disambiguate helper lookup from finding a
// function in a context. This is necessary for mustache compatibility, which
// function in a context. This is necessary for mustache compatibility, which
// requires that context functions in blocks are evaluated by blockHelperMissing,
// requires that context functions in blocks are evaluated by blockHelperMissing,
// and then proceed as if the resulting value was provided to blockHelperMissing.
// and then proceed as if the resulting value was provided to blockHelperMissing.
...
@@ -890,6 +1315,7 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -890,6 +1315,7 @@ Handlebars.JavaScriptCompiler = function() {};
return
out
.
join
(
"
\n
"
);
return
out
.
join
(
"
\n
"
);
},
},
equals
:
function
(
other
)
{
equals
:
function
(
other
)
{
var
len
=
this
.
opcodes
.
length
;
var
len
=
this
.
opcodes
.
length
;
if
(
other
.
opcodes
.
length
!==
len
)
{
if
(
other
.
opcodes
.
length
!==
len
)
{
...
@@ -908,12 +1334,24 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -908,12 +1334,24 @@ Handlebars.JavaScriptCompiler = function() {};
}
}
}
}
}
}
len
=
this
.
children
.
length
;
if
(
other
.
children
.
length
!==
len
)
{
return
false
;
}
for
(
i
=
0
;
i
<
len
;
i
++
)
{
if
(
!
this
.
children
[
i
].
equals
(
other
.
children
[
i
]))
{
return
false
;
}
}
return
true
;
return
true
;
},
},
guid
:
0
,
guid
:
0
,
compile
:
function
(
program
,
options
)
{
compile
:
function
(
program
,
options
)
{
this
.
opcodes
=
[];
this
.
children
=
[];
this
.
children
=
[];
this
.
depths
=
{
list
:
[]};
this
.
depths
=
{
list
:
[]};
this
.
options
=
options
;
this
.
options
=
options
;
...
@@ -935,20 +1373,30 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -935,20 +1373,30 @@ Handlebars.JavaScriptCompiler = function() {};
}
}
}
}
return
this
.
program
(
program
);
return
this
.
accept
(
program
);
},
},
accept
:
function
(
node
)
{
accept
:
function
(
node
)
{
return
this
[
node
.
type
](
node
);
var
strip
=
node
.
strip
||
{},
ret
;
if
(
strip
.
left
)
{
this
.
opcode
(
'
strip
'
);
}
ret
=
this
[
node
.
type
](
node
);
if
(
strip
.
right
)
{
this
.
opcode
(
'
strip
'
);
}
return
ret
;
},
},
program
:
function
(
program
)
{
program
:
function
(
program
)
{
var
statements
=
program
.
statements
,
statement
;
var
statements
=
program
.
statements
;
this
.
opcodes
=
[];
for
(
var
i
=
0
,
l
=
statements
.
length
;
i
<
l
;
i
++
)
{
for
(
var
i
=
0
,
l
=
statements
.
length
;
i
<
l
;
i
++
)
{
statement
=
statements
[
i
];
this
.
accept
(
statements
[
i
]);
this
[
statement
.
type
](
statement
);
}
}
this
.
isSimple
=
l
===
1
;
this
.
isSimple
=
l
===
1
;
...
@@ -990,12 +1438,13 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -990,12 +1438,13 @@ Handlebars.JavaScriptCompiler = function() {};
inverse
=
this
.
compileProgram
(
inverse
);
inverse
=
this
.
compileProgram
(
inverse
);
}
}
var
type
=
this
.
classifyMustache
(
mustache
);
var
sexpr
=
mustache
.
sexpr
;
var
type
=
this
.
classifySexpr
(
sexpr
);
if
(
type
===
"
helper
"
)
{
if
(
type
===
"
helper
"
)
{
this
.
helper
Mustache
(
mustache
,
program
,
inverse
);
this
.
helper
Sexpr
(
sexpr
,
program
,
inverse
);
}
else
if
(
type
===
"
simple
"
)
{
}
else
if
(
type
===
"
simple
"
)
{
this
.
simple
Mustache
(
mustache
);
this
.
simple
Sexpr
(
sexpr
);
// now that the simple mustache is resolved, we need to
// now that the simple mustache is resolved, we need to
// evaluate it by executing `blockHelperMissing`
// evaluate it by executing `blockHelperMissing`
...
@@ -1004,7 +1453,7 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1004,7 +1453,7 @@ Handlebars.JavaScriptCompiler = function() {};
this
.
opcode
(
'
emptyHash
'
);
this
.
opcode
(
'
emptyHash
'
);
this
.
opcode
(
'
blockValue
'
);
this
.
opcode
(
'
blockValue
'
);
}
else
{
}
else
{
this
.
ambiguous
Mustache
(
mustache
,
program
,
inverse
);
this
.
ambiguous
Sexpr
(
sexpr
,
program
,
inverse
);
// now that the simple mustache is resolved, we need to
// now that the simple mustache is resolved, we need to
// evaluate it by executing `blockHelperMissing`
// evaluate it by executing `blockHelperMissing`
...
@@ -1027,7 +1476,17 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1027,7 +1476,17 @@ Handlebars.JavaScriptCompiler = function() {};
val
=
pair
[
1
];
val
=
pair
[
1
];
if
(
this
.
options
.
stringParams
)
{
if
(
this
.
options
.
stringParams
)
{
if
(
val
.
depth
)
{
this
.
addDepth
(
val
.
depth
);
}
this
.
opcode
(
'
getContext
'
,
val
.
depth
||
0
);
this
.
opcode
(
'
pushStringParam
'
,
val
.
stringModeValue
,
val
.
type
);
this
.
opcode
(
'
pushStringParam
'
,
val
.
stringModeValue
,
val
.
type
);
if
(
val
.
type
===
'
sexpr
'
)
{
// Subexpressions get evaluated and passed in
// in string params mode.
this
.
sexpr
(
val
);
}
}
else
{
}
else
{
this
.
accept
(
val
);
this
.
accept
(
val
);
}
}
...
@@ -1056,26 +1515,17 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1056,26 +1515,17 @@ Handlebars.JavaScriptCompiler = function() {};
},
},
mustache
:
function
(
mustache
)
{
mustache
:
function
(
mustache
)
{
var
options
=
this
.
options
;
this
.
sexpr
(
mustache
.
sexpr
);
var
type
=
this
.
classifyMustache
(
mustache
);
if
(
type
===
"
simple
"
)
{
this
.
simpleMustache
(
mustache
);
}
else
if
(
type
===
"
helper
"
)
{
this
.
helperMustache
(
mustache
);
}
else
{
this
.
ambiguousMustache
(
mustache
);
}
if
(
mustache
.
escaped
&&
!
options
.
noEscape
)
{
if
(
mustache
.
escaped
&&
!
this
.
options
.
noEscape
)
{
this
.
opcode
(
'
appendEscaped
'
);
this
.
opcode
(
'
appendEscaped
'
);
}
else
{
}
else
{
this
.
opcode
(
'
append
'
);
this
.
opcode
(
'
append
'
);
}
}
},
},
ambiguous
Mustache
:
function
(
mustache
,
program
,
inverse
)
{
ambiguous
Sexpr
:
function
(
sexpr
,
program
,
inverse
)
{
var
id
=
mustache
.
id
,
var
id
=
sexpr
.
id
,
name
=
id
.
parts
[
0
],
name
=
id
.
parts
[
0
],
isBlock
=
program
!=
null
||
inverse
!=
null
;
isBlock
=
program
!=
null
||
inverse
!=
null
;
...
@@ -1087,8 +1537,8 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1087,8 +1537,8 @@ Handlebars.JavaScriptCompiler = function() {};
this
.
opcode
(
'
invokeAmbiguous
'
,
name
,
isBlock
);
this
.
opcode
(
'
invokeAmbiguous
'
,
name
,
isBlock
);
},
},
simple
Mustache
:
function
(
mustache
)
{
simple
Sexpr
:
function
(
sexpr
)
{
var
id
=
mustache
.
id
;
var
id
=
sexpr
.
id
;
if
(
id
.
type
===
'
DATA
'
)
{
if
(
id
.
type
===
'
DATA
'
)
{
this
.
DATA
(
id
);
this
.
DATA
(
id
);
...
@@ -1104,16 +1554,28 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1104,16 +1554,28 @@ Handlebars.JavaScriptCompiler = function() {};
this
.
opcode
(
'
resolvePossibleLambda
'
);
this
.
opcode
(
'
resolvePossibleLambda
'
);
},
},
helper
Mustache
:
function
(
mustache
,
program
,
inverse
)
{
helper
Sexpr
:
function
(
sexpr
,
program
,
inverse
)
{
var
params
=
this
.
setupFullMustacheParams
(
mustache
,
program
,
inverse
),
var
params
=
this
.
setupFullMustacheParams
(
sexpr
,
program
,
inverse
),
name
=
mustache
.
id
.
parts
[
0
];
name
=
sexpr
.
id
.
parts
[
0
];
if
(
this
.
options
.
knownHelpers
[
name
])
{
if
(
this
.
options
.
knownHelpers
[
name
])
{
this
.
opcode
(
'
invokeKnownHelper
'
,
params
.
length
,
name
);
this
.
opcode
(
'
invokeKnownHelper
'
,
params
.
length
,
name
);
}
else
if
(
this
.
knownHelpersOnly
)
{
}
else
if
(
this
.
options
.
knownHelpersOnly
)
{
throw
new
Error
(
"
You specified knownHelpersOnly, but used the unknown helper
"
+
name
);
throw
new
Exception
(
"
You specified knownHelpersOnly, but used the unknown helper
"
+
name
,
sexpr
);
}
else
{
this
.
opcode
(
'
invokeHelper
'
,
params
.
length
,
name
,
sexpr
.
isRoot
);
}
},
sexpr
:
function
(
sexpr
)
{
var
type
=
this
.
classifySexpr
(
sexpr
);
if
(
type
===
"
simple
"
)
{
this
.
simpleSexpr
(
sexpr
);
}
else
if
(
type
===
"
helper
"
)
{
this
.
helperSexpr
(
sexpr
);
}
else
{
}
else
{
this
.
opcode
(
'
invokeHelper
'
,
params
.
length
,
name
);
this
.
ambiguousSexpr
(
sexpr
);
}
}
},
},
...
@@ -1135,7 +1597,15 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1135,7 +1597,15 @@ Handlebars.JavaScriptCompiler = function() {};
DATA
:
function
(
data
)
{
DATA
:
function
(
data
)
{
this
.
options
.
data
=
true
;
this
.
options
.
data
=
true
;
this
.
opcode
(
'
lookupData
'
,
data
.
id
);
if
(
data
.
id
.
isScoped
||
data
.
id
.
depth
)
{
throw
new
Exception
(
'
Scoped data references are not supported:
'
+
data
.
original
,
data
);
}
this
.
opcode
(
'
lookupData
'
);
var
parts
=
data
.
id
.
parts
;
for
(
var
i
=
0
,
l
=
parts
.
length
;
i
<
l
;
i
++
)
{
this
.
opcode
(
'
lookup
'
,
parts
[
i
]);
}
},
},
STRING
:
function
(
string
)
{
STRING
:
function
(
string
)
{
...
@@ -1162,7 +1632,6 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1162,7 +1632,6 @@ Handlebars.JavaScriptCompiler = function() {};
},
},
addDepth
:
function
(
depth
)
{
addDepth
:
function
(
depth
)
{
if
(
isNaN
(
depth
))
{
throw
new
Error
(
"
EWOT
"
);
}
if
(
depth
===
0
)
{
return
;
}
if
(
depth
===
0
)
{
return
;
}
if
(
!
this
.
depths
[
depth
])
{
if
(
!
this
.
depths
[
depth
])
{
...
@@ -1171,14 +1640,14 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1171,14 +1640,14 @@ Handlebars.JavaScriptCompiler = function() {};
}
}
},
},
classify
Mustache
:
function
(
mustache
)
{
classify
Sexpr
:
function
(
sexpr
)
{
var
isHelper
=
mustache
.
isHelper
;
var
isHelper
=
sexpr
.
isHelper
;
var
isEligible
=
mustache
.
eligibleHelper
;
var
isEligible
=
sexpr
.
eligibleHelper
;
var
options
=
this
.
options
;
var
options
=
this
.
options
;
// if ambiguous, we can possibly resolve the ambiguity now
// if ambiguous, we can possibly resolve the ambiguity now
if
(
isEligible
&&
!
isHelper
)
{
if
(
isEligible
&&
!
isHelper
)
{
var
name
=
mustache
.
id
.
parts
[
0
];
var
name
=
sexpr
.
id
.
parts
[
0
];
if
(
options
.
knownHelpers
[
name
])
{
if
(
options
.
knownHelpers
[
name
])
{
isHelper
=
true
;
isHelper
=
true
;
...
@@ -1205,61 +1674,130 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1205,61 +1674,130 @@ Handlebars.JavaScriptCompiler = function() {};
this
.
opcode
(
'
getContext
'
,
param
.
depth
||
0
);
this
.
opcode
(
'
getContext
'
,
param
.
depth
||
0
);
this
.
opcode
(
'
pushStringParam
'
,
param
.
stringModeValue
,
param
.
type
);
this
.
opcode
(
'
pushStringParam
'
,
param
.
stringModeValue
,
param
.
type
);
if
(
param
.
type
===
'
sexpr
'
)
{
// Subexpressions get evaluated and passed in
// in string params mode.
this
.
sexpr
(
param
);
}
}
else
{
}
else
{
this
[
param
.
type
](
param
);
this
[
param
.
type
](
param
);
}
}
}
}
},
},
setup
MustacheParams
:
function
(
mustach
e
)
{
setup
FullMustacheParams
:
function
(
sexpr
,
program
,
invers
e
)
{
var
params
=
mustache
.
params
;
var
params
=
sexpr
.
params
;
this
.
pushParams
(
params
);
this
.
pushParams
(
params
);
if
(
mustache
.
hash
)
{
this
.
opcode
(
'
pushProgram
'
,
program
);
this
.
hash
(
mustache
.
hash
);
this
.
opcode
(
'
pushProgram
'
,
inverse
);
if
(
sexpr
.
hash
)
{
this
.
hash
(
sexpr
.
hash
);
}
else
{
}
else
{
this
.
opcode
(
'
emptyHash
'
);
this
.
opcode
(
'
emptyHash
'
);
}
}
return
params
;
return
params
;
},
}
};
// this will replace setupMustacheParams when we're done
function
precompile
(
input
,
options
,
env
)
{
setupFullMustacheParams
:
function
(
mustache
,
program
,
inverse
)
{
if
(
input
==
null
||
(
typeof
input
!==
'
string
'
&&
input
.
constructor
!==
env
.
AST
.
ProgramNode
)
)
{
var
params
=
mustache
.
params
;
throw
new
Exception
(
"
You must pass a string or Handlebars AST to Handlebars.precompile. You passed
"
+
input
)
;
this
.
pushParams
(
params
);
}
this
.
opcode
(
'
pushProgram
'
,
program
);
options
=
options
||
{};
this
.
opcode
(
'
pushProgram
'
,
inverse
);
if
(
!
(
'
data
'
in
options
))
{
options
.
data
=
true
;
}
if
(
mustache
.
hash
)
{
var
ast
=
env
.
parse
(
input
);
this
.
hash
(
mustache
.
hash
);
var
environment
=
new
env
.
Compiler
().
compile
(
ast
,
options
);
}
else
{
return
new
env
.
JavaScriptCompiler
().
compile
(
environment
,
options
);
this
.
opcode
(
'
emptyHash
'
);
}
}
return
params
;
__exports__
.
precompile
=
precompile
;
function
compile
(
input
,
options
,
env
)
{
if
(
input
==
null
||
(
typeof
input
!==
'
string
'
&&
input
.
constructor
!==
env
.
AST
.
ProgramNode
))
{
throw
new
Exception
(
"
You must pass a string or Handlebars AST to Handlebars.compile. You passed
"
+
input
);
}
options
=
options
||
{};
if
(
!
(
'
data
'
in
options
))
{
options
.
data
=
true
;
}
var
compiled
;
function
compileInput
()
{
var
ast
=
env
.
parse
(
input
);
var
environment
=
new
env
.
Compiler
().
compile
(
ast
,
options
);
var
templateSpec
=
new
env
.
JavaScriptCompiler
().
compile
(
environment
,
options
,
undefined
,
true
);
return
env
.
template
(
templateSpec
);
}
// Template is only compiled on first use and cached after that point.
return
function
(
context
,
options
)
{
if
(
!
compiled
)
{
compiled
=
compileInput
();
}
}
return
compiled
.
call
(
this
,
context
,
options
);
};
};
}
__exports__
.
compile
=
compile
;
return
__exports__
;
})(
__module5__
);
var
Literal
=
function
(
value
)
{
// handlebars/compiler/javascript-compiler.js
var
__module11__
=
(
function
(
__dependency1__
,
__dependency2__
)
{
"
use strict
"
;
var
__exports__
;
var
COMPILER_REVISION
=
__dependency1__
.
COMPILER_REVISION
;
var
REVISION_CHANGES
=
__dependency1__
.
REVISION_CHANGES
;
var
log
=
__dependency1__
.
log
;
var
Exception
=
__dependency2__
;
function
Literal
(
value
)
{
this
.
value
=
value
;
this
.
value
=
value
;
};
}
function
JavaScriptCompiler
()
{}
JavaScriptCompiler
.
prototype
=
{
JavaScriptCompiler
.
prototype
=
{
// PUBLIC API: You can override these methods in a subclass to provide
// PUBLIC API: You can override these methods in a subclass to provide
// alternative compiled forms for name lookup and buffering semantics
// alternative compiled forms for name lookup and buffering semantics
nameLookup
:
function
(
parent
,
name
/* , type*/
)
{
nameLookup
:
function
(
parent
,
name
/* , type*/
)
{
var
wrap
,
ret
;
if
(
parent
.
indexOf
(
'
depth
'
)
===
0
)
{
wrap
=
true
;
}
if
(
/^
[
0-9
]
+$/
.
test
(
name
))
{
if
(
/^
[
0-9
]
+$/
.
test
(
name
))
{
ret
urn
parent
+
"
[
"
+
name
+
"
]
"
;
ret
=
parent
+
"
[
"
+
name
+
"
]
"
;
}
else
if
(
JavaScriptCompiler
.
isValidJavaScriptVariableName
(
name
))
{
}
else
if
(
JavaScriptCompiler
.
isValidJavaScriptVariableName
(
name
))
{
ret
urn
parent
+
"
.
"
+
name
;
ret
=
parent
+
"
.
"
+
name
;
}
}
else
{
else
{
return
parent
+
"
['
"
+
name
+
"
']
"
;
ret
=
parent
+
"
['
"
+
name
+
"
']
"
;
}
if
(
wrap
)
{
return
'
(
'
+
parent
+
'
&&
'
+
ret
+
'
)
'
;
}
else
{
return
ret
;
}
}
},
},
compilerInfo
:
function
()
{
var
revision
=
COMPILER_REVISION
,
versions
=
REVISION_CHANGES
[
revision
];
return
"
this.compilerInfo = [
"
+
revision
+
"
,'
"
+
versions
+
"
'];
\n
"
;
},
appendToBuffer
:
function
(
string
)
{
appendToBuffer
:
function
(
string
)
{
if
(
this
.
environment
.
isSimple
)
{
if
(
this
.
environment
.
isSimple
)
{
return
"
return
"
+
string
+
"
;
"
;
return
"
return
"
+
string
+
"
;
"
;
...
@@ -1283,7 +1821,7 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1283,7 +1821,7 @@ Handlebars.JavaScriptCompiler = function() {};
this
.
environment
=
environment
;
this
.
environment
=
environment
;
this
.
options
=
options
||
{};
this
.
options
=
options
||
{};
Handlebars
.
log
(
Handlebars
.
logger
.
DEBUG
,
this
.
environment
.
disassemble
()
+
"
\n\n
"
);
log
(
'
debug
'
,
this
.
environment
.
disassemble
()
+
"
\n\n
"
);
this
.
name
=
this
.
environment
.
name
;
this
.
name
=
this
.
environment
.
name
;
this
.
isChild
=
!!
context
;
this
.
isChild
=
!!
context
;
...
@@ -1298,6 +1836,7 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1298,6 +1836,7 @@ Handlebars.JavaScriptCompiler = function() {};
this
.
stackSlot
=
0
;
this
.
stackSlot
=
0
;
this
.
stackVars
=
[];
this
.
stackVars
=
[];
this
.
registers
=
{
list
:
[]
};
this
.
registers
=
{
list
:
[]
};
this
.
hashes
=
[];
this
.
compileStack
=
[];
this
.
compileStack
=
[];
this
.
inlineStack
=
[];
this
.
inlineStack
=
[];
...
@@ -1307,7 +1846,7 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1307,7 +1846,7 @@ Handlebars.JavaScriptCompiler = function() {};
this
.
i
=
0
;
this
.
i
=
0
;
for
(
l
=
opcodes
.
length
;
this
.
i
<
l
;
this
.
i
++
)
{
for
(
var
l
=
opcodes
.
length
;
this
.
i
<
l
;
this
.
i
++
)
{
opcode
=
opcodes
[
this
.
i
];
opcode
=
opcodes
[
this
.
i
];
if
(
opcode
.
opcode
===
'
DECLARE
'
)
{
if
(
opcode
.
opcode
===
'
DECLARE
'
)
{
...
@@ -1315,18 +1854,21 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1315,18 +1854,21 @@ Handlebars.JavaScriptCompiler = function() {};
}
else
{
}
else
{
this
[
opcode
.
opcode
].
apply
(
this
,
opcode
.
args
);
this
[
opcode
.
opcode
].
apply
(
this
,
opcode
.
args
);
}
}
// Reset the stripNext flag if it was not set by this operation.
if
(
opcode
.
opcode
!==
this
.
stripNext
)
{
this
.
stripNext
=
false
;
}
}
}
return
this
.
createFunctionContext
(
asObject
);
// Flush any trailing content that might be pending.
},
this
.
pushSource
(
''
);
nextOpcode
:
function
()
{
if
(
this
.
stackSlot
||
this
.
inlineStack
.
length
||
this
.
compileStack
.
length
)
{
var
opcodes
=
this
.
environment
.
opcodes
;
throw
new
Exception
(
'
Compile completed with content left on stack
'
);
return
opcodes
[
this
.
i
+
1
];
}
},
eat
:
function
()
{
return
this
.
createFunctionContext
(
asObject
);
this
.
i
=
this
.
i
+
1
;
},
},
preamble
:
function
()
{
preamble
:
function
()
{
...
@@ -1334,8 +1876,9 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1334,8 +1876,9 @@ Handlebars.JavaScriptCompiler = function() {};
if
(
!
this
.
isChild
)
{
if
(
!
this
.
isChild
)
{
var
namespace
=
this
.
namespace
;
var
namespace
=
this
.
namespace
;
var
copies
=
"
helpers = helpers ||
"
+
namespace
+
"
.helpers;
"
;
if
(
this
.
environment
.
usePartial
)
{
copies
=
copies
+
"
partials = partials ||
"
+
namespace
+
"
.partials;
"
;
}
var
copies
=
"
helpers = this.merge(helpers,
"
+
namespace
+
"
.helpers);
"
;
if
(
this
.
environment
.
usePartial
)
{
copies
=
copies
+
"
partials = this.merge(partials,
"
+
namespace
+
"
.partials);
"
;
}
if
(
this
.
options
.
data
)
{
copies
=
copies
+
"
data = data || {};
"
;
}
if
(
this
.
options
.
data
)
{
copies
=
copies
+
"
data = data || {};
"
;
}
out
.
push
(
copies
);
out
.
push
(
copies
);
}
else
{
}
else
{
...
@@ -1364,9 +1907,11 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1364,9 +1907,11 @@ Handlebars.JavaScriptCompiler = function() {};
// Generate minimizer alias mappings
// Generate minimizer alias mappings
if
(
!
this
.
isChild
)
{
if
(
!
this
.
isChild
)
{
for
(
var
alias
in
this
.
context
.
aliases
)
{
for
(
var
alias
in
this
.
context
.
aliases
)
{
if
(
this
.
context
.
aliases
.
hasOwnProperty
(
alias
))
{
this
.
source
[
1
]
=
this
.
source
[
1
]
+
'
,
'
+
alias
+
'
=
'
+
this
.
context
.
aliases
[
alias
];
this
.
source
[
1
]
=
this
.
source
[
1
]
+
'
,
'
+
alias
+
'
=
'
+
this
.
context
.
aliases
[
alias
];
}
}
}
}
}
if
(
this
.
source
[
1
])
{
if
(
this
.
source
[
1
])
{
this
.
source
[
1
]
=
"
var
"
+
this
.
source
[
1
].
substring
(
2
)
+
"
;
"
;
this
.
source
[
1
]
=
"
var
"
+
this
.
source
[
1
].
substring
(
2
)
+
"
;
"
;
...
@@ -1378,7 +1923,7 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1378,7 +1923,7 @@ Handlebars.JavaScriptCompiler = function() {};
}
}
if
(
!
this
.
environment
.
isSimple
)
{
if
(
!
this
.
environment
.
isSimple
)
{
this
.
source
.
push
(
"
return buffer;
"
);
this
.
pushSource
(
"
return buffer;
"
);
}
}
var
params
=
this
.
isChild
?
[
"
depth0
"
,
"
data
"
]
:
[
"
Handlebars
"
,
"
depth0
"
,
"
helpers
"
,
"
partials
"
,
"
data
"
];
var
params
=
this
.
isChild
?
[
"
depth0
"
,
"
data
"
]
:
[
"
Handlebars
"
,
"
depth0
"
,
"
helpers
"
,
"
partials
"
,
"
data
"
];
...
@@ -1391,9 +1936,7 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1391,9 +1936,7 @@ Handlebars.JavaScriptCompiler = function() {};
var
source
=
this
.
mergeSource
();
var
source
=
this
.
mergeSource
();
if
(
!
this
.
isChild
)
{
if
(
!
this
.
isChild
)
{
var
revision
=
Handlebars
.
COMPILER_REVISION
,
source
=
this
.
compilerInfo
()
+
source
;
versions
=
Handlebars
.
REVISION_CHANGES
[
revision
];
source
=
"
this.compilerInfo = [
"
+
revision
+
"
,'
"
+
versions
+
"
'];
\n
"
+
source
;
}
}
if
(
asObject
)
{
if
(
asObject
)
{
...
@@ -1402,7 +1945,7 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1402,7 +1945,7 @@ Handlebars.JavaScriptCompiler = function() {};
return
Function
.
apply
(
this
,
params
);
return
Function
.
apply
(
this
,
params
);
}
else
{
}
else
{
var
functionSource
=
'
function
'
+
(
this
.
name
||
''
)
+
'
(
'
+
params
.
join
(
'
,
'
)
+
'
) {
\n
'
+
source
+
'
}
'
;
var
functionSource
=
'
function
'
+
(
this
.
name
||
''
)
+
'
(
'
+
params
.
join
(
'
,
'
)
+
'
) {
\n
'
+
source
+
'
}
'
;
Handlebars
.
log
(
Handlebars
.
logger
.
DEBUG
,
functionSource
+
"
\n\n
"
);
log
(
'
debug
'
,
functionSource
+
"
\n\n
"
);
return
functionSource
;
return
functionSource
;
}
}
},
},
...
@@ -1466,10 +2009,7 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1466,10 +2009,7 @@ Handlebars.JavaScriptCompiler = function() {};
var
current
=
this
.
topStack
();
var
current
=
this
.
topStack
();
params
.
splice
(
1
,
0
,
current
);
params
.
splice
(
1
,
0
,
current
);
// Use the options value generated from the invocation
this
.
pushSource
(
"
if (!
"
+
this
.
lastHelper
+
"
) {
"
+
current
+
"
= blockHelperMissing.call(
"
+
params
.
join
(
"
,
"
)
+
"
); }
"
);
params
[
params
.
length
-
1
]
=
'
options
'
;
this
.
source
.
push
(
"
if (!
"
+
this
.
lastHelper
+
"
) {
"
+
current
+
"
= blockHelperMissing.call(
"
+
params
.
join
(
"
,
"
)
+
"
); }
"
);
},
},
// [appendContent]
// [appendContent]
...
@@ -1479,7 +2019,28 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1479,7 +2019,28 @@ Handlebars.JavaScriptCompiler = function() {};
//
//
// Appends the string value of `content` to the current buffer
// Appends the string value of `content` to the current buffer
appendContent
:
function
(
content
)
{
appendContent
:
function
(
content
)
{
this
.
source
.
push
(
this
.
appendToBuffer
(
this
.
quotedString
(
content
)));
if
(
this
.
pendingContent
)
{
content
=
this
.
pendingContent
+
content
;
}
if
(
this
.
stripNext
)
{
content
=
content
.
replace
(
/^
\s
+/
,
''
);
}
this
.
pendingContent
=
content
;
},
// [strip]
//
// On stack, before: ...
// On stack, after: ...
//
// Removes any trailing whitespace from the prior content node and flags
// the next operation for stripping if it is a content node.
strip
:
function
()
{
if
(
this
.
pendingContent
)
{
this
.
pendingContent
=
this
.
pendingContent
.
replace
(
/
\s
+$/
,
''
);
}
this
.
stripNext
=
'
strip
'
;
},
},
// [append]
// [append]
...
@@ -1496,9 +2057,9 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1496,9 +2057,9 @@ Handlebars.JavaScriptCompiler = function() {};
// when we examine local
// when we examine local
this
.
flushInline
();
this
.
flushInline
();
var
local
=
this
.
popStack
();
var
local
=
this
.
popStack
();
this
.
source
.
push
(
"
if(
"
+
local
+
"
||
"
+
local
+
"
=== 0) {
"
+
this
.
appendToBuffer
(
local
)
+
"
}
"
);
this
.
pushSource
(
"
if(
"
+
local
+
"
||
"
+
local
+
"
=== 0) {
"
+
this
.
appendToBuffer
(
local
)
+
"
}
"
);
if
(
this
.
environment
.
isSimple
)
{
if
(
this
.
environment
.
isSimple
)
{
this
.
source
.
push
(
"
else {
"
+
this
.
appendToBuffer
(
"
''
"
)
+
"
}
"
);
this
.
pushSource
(
"
else {
"
+
this
.
appendToBuffer
(
"
''
"
)
+
"
}
"
);
}
}
},
},
...
@@ -1511,7 +2072,7 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1511,7 +2072,7 @@ Handlebars.JavaScriptCompiler = function() {};
appendEscaped
:
function
()
{
appendEscaped
:
function
()
{
this
.
context
.
aliases
.
escapeExpression
=
'
this.escapeExpression
'
;
this
.
context
.
aliases
.
escapeExpression
=
'
this.escapeExpression
'
;
this
.
source
.
push
(
this
.
appendToBuffer
(
"
escapeExpression(
"
+
this
.
popStack
()
+
"
)
"
));
this
.
pushSource
(
this
.
appendToBuffer
(
"
escapeExpression(
"
+
this
.
popStack
()
+
"
)
"
));
},
},
// [getContext]
// [getContext]
...
@@ -1579,11 +2140,11 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1579,11 +2140,11 @@ Handlebars.JavaScriptCompiler = function() {};
// [lookupData]
// [lookupData]
//
//
// On stack, before: ...
// On stack, before: ...
// On stack, after: data
[id]
, ...
// On stack, after: data, ...
//
//
// Push the
result of looking up `id` on the current data
// Push the
data lookup operator
lookupData
:
function
(
id
)
{
lookupData
:
function
()
{
this
.
push
(
this
.
nameLookup
(
'
data
'
,
id
,
'
data
'
)
);
this
.
push
StackLiteral
(
'
data
'
);
},
},
// [pushStringParam]
// [pushStringParam]
...
@@ -1599,30 +2160,40 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1599,30 +2160,40 @@ Handlebars.JavaScriptCompiler = function() {};
this
.
pushString
(
type
);
this
.
pushString
(
type
);
// If it's a subexpression, the string result
// will be pushed after this opcode.
if
(
type
!==
'
sexpr
'
)
{
if
(
typeof
string
===
'
string
'
)
{
if
(
typeof
string
===
'
string
'
)
{
this
.
pushString
(
string
);
this
.
pushString
(
string
);
}
else
{
}
else
{
this
.
pushStackLiteral
(
string
);
this
.
pushStackLiteral
(
string
);
}
}
}
},
},
emptyHash
:
function
()
{
emptyHash
:
function
()
{
this
.
pushStackLiteral
(
'
{}
'
);
this
.
pushStackLiteral
(
'
{}
'
);
if
(
this
.
options
.
stringParams
)
{
if
(
this
.
options
.
stringParams
)
{
this
.
register
(
'
hashTypes
'
,
'
{}
'
);
this
.
push
(
'
{}
'
);
// hashContexts
this
.
push
(
'
{}
'
);
// hashTypes
}
}
},
},
pushHash
:
function
()
{
pushHash
:
function
()
{
this
.
hash
=
{
values
:
[],
types
:
[]};
if
(
this
.
hash
)
{
this
.
hashes
.
push
(
this
.
hash
);
}
this
.
hash
=
{
values
:
[],
types
:
[],
contexts
:
[]};
},
},
popHash
:
function
()
{
popHash
:
function
()
{
var
hash
=
this
.
hash
;
var
hash
=
this
.
hash
;
this
.
hash
=
undefined
;
this
.
hash
=
this
.
hashes
.
pop
()
;
if
(
this
.
options
.
stringParams
)
{
if
(
this
.
options
.
stringParams
)
{
this
.
register
(
'
hashTypes
'
,
'
{
'
+
hash
.
types
.
join
(
'
,
'
)
+
'
}
'
);
this
.
push
(
'
{
'
+
hash
.
contexts
.
join
(
'
,
'
)
+
'
}
'
);
this
.
push
(
'
{
'
+
hash
.
types
.
join
(
'
,
'
)
+
'
}
'
);
}
}
this
.
push
(
'
{
\n
'
+
hash
.
values
.
join
(
'
,
\n
'
)
+
'
\n
}
'
);
this
.
push
(
'
{
\n
'
+
hash
.
values
.
join
(
'
,
\n
'
)
+
'
\n
}
'
);
},
},
...
@@ -1684,17 +2255,31 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1684,17 +2255,31 @@ Handlebars.JavaScriptCompiler = function() {};
// and pushes the helper's return value onto the stack.
// and pushes the helper's return value onto the stack.
//
//
// If the helper is not found, `helperMissing` is called.
// If the helper is not found, `helperMissing` is called.
invokeHelper
:
function
(
paramSize
,
name
)
{
invokeHelper
:
function
(
paramSize
,
name
,
isRoot
)
{
this
.
context
.
aliases
.
helperMissing
=
'
helpers.helperMissing
'
;
this
.
context
.
aliases
.
helperMissing
=
'
helpers.helperMissing
'
;
this
.
useRegister
(
'
helper
'
);
var
helper
=
this
.
lastHelper
=
this
.
setupHelper
(
paramSize
,
name
,
true
);
var
helper
=
this
.
lastHelper
=
this
.
setupHelper
(
paramSize
,
name
,
true
);
var
nonHelper
=
this
.
nameLookup
(
'
depth
'
+
this
.
lastContext
,
name
,
'
context
'
);
this
.
push
(
helper
.
name
);
var
lookup
=
'
helper =
'
+
helper
.
name
+
'
||
'
+
nonHelper
;
this
.
replaceStack
(
function
(
name
)
{
if
(
helper
.
paramsInit
)
{
return
name
+
'
?
'
+
name
+
'
.call(
'
+
lookup
+=
'
,
'
+
helper
.
paramsInit
;
helper
.
callParams
+
"
)
"
+
"
: helperMissing.call(
"
+
}
helper
.
helperMissingParams
+
"
)
"
;
});
this
.
push
(
'
(
'
+
lookup
+
'
,helper
'
+
'
? helper.call(
'
+
helper
.
callParams
+
'
)
'
+
'
: helperMissing.call(
'
+
helper
.
helperMissingParams
+
'
))
'
);
// Always flush subexpressions. This is both to prevent the compounding size issue that
// occurs when the code has to be duplicated for inlining and also to prevent errors
// due to the incorrect options object being passed due to the shared register.
if
(
!
isRoot
)
{
this
.
flushInline
();
}
},
},
// [invokeKnownHelper]
// [invokeKnownHelper]
...
@@ -1723,8 +2308,9 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1723,8 +2308,9 @@ Handlebars.JavaScriptCompiler = function() {};
// `knownHelpersOnly` flags at compile-time.
// `knownHelpersOnly` flags at compile-time.
invokeAmbiguous
:
function
(
name
,
helperCall
)
{
invokeAmbiguous
:
function
(
name
,
helperCall
)
{
this
.
context
.
aliases
.
functionType
=
'
"function"
'
;
this
.
context
.
aliases
.
functionType
=
'
"function"
'
;
this
.
useRegister
(
'
helper
'
);
this
.
pushStackLiteral
(
'
{}
'
);
// Hash value
this
.
emptyHash
();
var
helper
=
this
.
setupHelper
(
0
,
name
,
helperCall
);
var
helper
=
this
.
setupHelper
(
0
,
name
,
helperCall
);
var
helperName
=
this
.
lastHelper
=
this
.
nameLookup
(
'
helpers
'
,
name
,
'
helper
'
);
var
helperName
=
this
.
lastHelper
=
this
.
nameLookup
(
'
helpers
'
,
name
,
'
helper
'
);
...
@@ -1732,8 +2318,11 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1732,8 +2318,11 @@ Handlebars.JavaScriptCompiler = function() {};
var
nonHelper
=
this
.
nameLookup
(
'
depth
'
+
this
.
lastContext
,
name
,
'
context
'
);
var
nonHelper
=
this
.
nameLookup
(
'
depth
'
+
this
.
lastContext
,
name
,
'
context
'
);
var
nextStack
=
this
.
nextStack
();
var
nextStack
=
this
.
nextStack
();
this
.
source
.
push
(
'
if (
'
+
nextStack
+
'
=
'
+
helperName
+
'
) {
'
+
nextStack
+
'
=
'
+
nextStack
+
'
.call(
'
+
helper
.
callParams
+
'
); }
'
);
if
(
helper
.
paramsInit
)
{
this
.
source
.
push
(
'
else {
'
+
nextStack
+
'
=
'
+
nonHelper
+
'
;
'
+
nextStack
+
'
= typeof
'
+
nextStack
+
'
=== functionType ?
'
+
nextStack
+
'
.apply(depth0) :
'
+
nextStack
+
'
; }
'
);
this
.
pushSource
(
helper
.
paramsInit
);
}
this
.
pushSource
(
'
if (helper =
'
+
helperName
+
'
) {
'
+
nextStack
+
'
= helper.call(
'
+
helper
.
callParams
+
'
); }
'
);
this
.
pushSource
(
'
else { helper =
'
+
nonHelper
+
'
;
'
+
nextStack
+
'
= typeof helper === functionType ? helper.call(
'
+
helper
.
callParams
+
'
) : helper; }
'
);
},
},
// [invokePartial]
// [invokePartial]
...
@@ -1763,14 +2352,18 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1763,14 +2352,18 @@ Handlebars.JavaScriptCompiler = function() {};
// and pushes the hash back onto the stack.
// and pushes the hash back onto the stack.
assignToHash
:
function
(
key
)
{
assignToHash
:
function
(
key
)
{
var
value
=
this
.
popStack
(),
var
value
=
this
.
popStack
(),
context
,
type
;
type
;
if
(
this
.
options
.
stringParams
)
{
if
(
this
.
options
.
stringParams
)
{
type
=
this
.
popStack
();
type
=
this
.
popStack
();
this
.
popStack
();
context
=
this
.
popStack
();
}
}
var
hash
=
this
.
hash
;
var
hash
=
this
.
hash
;
if
(
context
)
{
hash
.
contexts
.
push
(
"
'
"
+
key
+
"
':
"
+
context
);
}
if
(
type
)
{
if
(
type
)
{
hash
.
types
.
push
(
"
'
"
+
key
+
"
':
"
+
type
);
hash
.
types
.
push
(
"
'
"
+
key
+
"
':
"
+
type
);
}
}
...
@@ -1831,17 +2424,12 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1831,17 +2424,12 @@ Handlebars.JavaScriptCompiler = function() {};
else
{
programParams
.
push
(
"
depth
"
+
(
depth
-
1
));
}
else
{
programParams
.
push
(
"
depth
"
+
(
depth
-
1
));
}
}
}
if
(
depths
.
length
===
0
)
{
return
(
depths
.
length
===
0
?
"
self.program(
"
:
"
self.programWithDepth(
"
)
+
programParams
.
join
(
"
,
"
)
+
"
)
"
;
return
"
self.program(
"
+
programParams
.
join
(
"
,
"
)
+
"
)
"
;
}
else
{
programParams
.
shift
();
return
"
self.programWithDepth(
"
+
programParams
.
join
(
"
,
"
)
+
"
)
"
;
}
},
},
register
:
function
(
name
,
val
)
{
register
:
function
(
name
,
val
)
{
this
.
useRegister
(
name
);
this
.
useRegister
(
name
);
this
.
source
.
push
(
name
+
"
=
"
+
val
+
"
;
"
);
this
.
pushSource
(
name
+
"
=
"
+
val
+
"
;
"
);
},
},
useRegister
:
function
(
name
)
{
useRegister
:
function
(
name
)
{
...
@@ -1855,12 +2443,23 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1855,12 +2443,23 @@ Handlebars.JavaScriptCompiler = function() {};
return
this
.
push
(
new
Literal
(
item
));
return
this
.
push
(
new
Literal
(
item
));
},
},
pushSource
:
function
(
source
)
{
if
(
this
.
pendingContent
)
{
this
.
source
.
push
(
this
.
appendToBuffer
(
this
.
quotedString
(
this
.
pendingContent
)));
this
.
pendingContent
=
undefined
;
}
if
(
source
)
{
this
.
source
.
push
(
source
);
}
},
pushStack
:
function
(
item
)
{
pushStack
:
function
(
item
)
{
this
.
flushInline
();
this
.
flushInline
();
var
stack
=
this
.
incrStack
();
var
stack
=
this
.
incrStack
();
if
(
item
)
{
if
(
item
)
{
this
.
source
.
push
(
stack
+
"
=
"
+
item
+
"
;
"
);
this
.
pushSource
(
stack
+
"
=
"
+
item
+
"
;
"
);
}
}
this
.
compileStack
.
push
(
stack
);
this
.
compileStack
.
push
(
stack
);
return
stack
;
return
stack
;
...
@@ -1869,7 +2468,9 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1869,7 +2468,9 @@ Handlebars.JavaScriptCompiler = function() {};
replaceStack
:
function
(
callback
)
{
replaceStack
:
function
(
callback
)
{
var
prefix
=
''
,
var
prefix
=
''
,
inline
=
this
.
isInline
(),
inline
=
this
.
isInline
(),
stack
;
stack
,
createdStack
,
usedLiteral
;
// If we are currently inline then we want to merge the inline statement into the
// If we are currently inline then we want to merge the inline statement into the
// replacement statement via ','
// replacement statement via ','
...
@@ -1879,9 +2480,11 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1879,9 +2480,11 @@ Handlebars.JavaScriptCompiler = function() {};
if
(
top
instanceof
Literal
)
{
if
(
top
instanceof
Literal
)
{
// Literals do not need to be inlined
// Literals do not need to be inlined
stack
=
top
.
value
;
stack
=
top
.
value
;
usedLiteral
=
true
;
}
else
{
}
else
{
// Get or create the current stack name for use by the inline
// Get or create the current stack name for use by the inline
var
name
=
this
.
stackSlot
?
this
.
topStackName
()
:
this
.
incrStack
();
createdStack
=
!
this
.
stackSlot
;
var
name
=
!
createdStack
?
this
.
topStackName
()
:
this
.
incrStack
();
prefix
=
'
(
'
+
this
.
push
(
name
)
+
'
=
'
+
top
+
'
),
'
;
prefix
=
'
(
'
+
this
.
push
(
name
)
+
'
=
'
+
top
+
'
),
'
;
stack
=
this
.
topStack
();
stack
=
this
.
topStack
();
...
@@ -1893,9 +2496,12 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1893,9 +2496,12 @@ Handlebars.JavaScriptCompiler = function() {};
var
item
=
callback
.
call
(
this
,
stack
);
var
item
=
callback
.
call
(
this
,
stack
);
if
(
inline
)
{
if
(
inline
)
{
if
(
this
.
inlineStack
.
length
||
this
.
compileStack
.
length
)
{
if
(
!
usedLiteral
)
{
this
.
popStack
();
this
.
popStack
();
}
}
if
(
createdStack
)
{
this
.
stackSlot
--
;
}
this
.
push
(
'
(
'
+
prefix
+
item
+
'
)
'
);
this
.
push
(
'
(
'
+
prefix
+
item
+
'
)
'
);
}
else
{
}
else
{
// Prevent modification of the context depth variable. Through replaceStack
// Prevent modification of the context depth variable. Through replaceStack
...
@@ -1903,7 +2509,7 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1903,7 +2509,7 @@ Handlebars.JavaScriptCompiler = function() {};
stack
=
this
.
nextStack
();
stack
=
this
.
nextStack
();
}
}
this
.
source
.
push
(
stack
+
"
= (
"
+
prefix
+
item
+
"
);
"
);
this
.
pushSource
(
stack
+
"
= (
"
+
prefix
+
item
+
"
);
"
);
}
}
return
stack
;
return
stack
;
},
},
...
@@ -1946,6 +2552,9 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1946,6 +2552,9 @@ Handlebars.JavaScriptCompiler = function() {};
return
item
.
value
;
return
item
.
value
;
}
else
{
}
else
{
if
(
!
inline
)
{
if
(
!
inline
)
{
if
(
!
this
.
stackSlot
)
{
throw
new
Exception
(
'
Invalid stack pop
'
);
}
this
.
stackSlot
--
;
this
.
stackSlot
--
;
}
}
return
item
;
return
item
;
...
@@ -1968,29 +2577,35 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -1968,29 +2577,35 @@ Handlebars.JavaScriptCompiler = function() {};
.
replace
(
/
\\
/g
,
'
\\\\
'
)
.
replace
(
/
\\
/g
,
'
\\\\
'
)
.
replace
(
/"/g
,
'
\\
"
'
)
.
replace
(
/"/g
,
'
\\
"
'
)
.
replace
(
/
\n
/g
,
'
\\
n
'
)
.
replace
(
/
\n
/g
,
'
\\
n
'
)
.
replace
(
/
\r
/g
,
'
\\
r
'
)
+
'
"
'
;
.
replace
(
/
\r
/g
,
'
\\
r
'
)
.
replace
(
/
\u
2028/g
,
'
\\
u2028
'
)
// Per Ecma-262 7.3 + 7.8.4
.
replace
(
/
\u
2029/g
,
'
\\
u2029
'
)
+
'
"
'
;
},
},
setupHelper
:
function
(
paramSize
,
name
,
missingParams
)
{
setupHelper
:
function
(
paramSize
,
name
,
missingParams
)
{
var
params
=
[]
;
var
params
=
[]
,
this
.
setupParams
(
paramSize
,
params
,
missingParams
);
paramsInit
=
this
.
setupParams
(
paramSize
,
params
,
missingParams
);
var
foundHelper
=
this
.
nameLookup
(
'
helpers
'
,
name
,
'
helper
'
);
var
foundHelper
=
this
.
nameLookup
(
'
helpers
'
,
name
,
'
helper
'
);
return
{
return
{
params
:
params
,
params
:
params
,
paramsInit
:
paramsInit
,
name
:
foundHelper
,
name
:
foundHelper
,
callParams
:
[
"
depth0
"
].
concat
(
params
).
join
(
"
,
"
),
callParams
:
[
"
depth0
"
].
concat
(
params
).
join
(
"
,
"
),
helperMissingParams
:
missingParams
&&
[
"
depth0
"
,
this
.
quotedString
(
name
)].
concat
(
params
).
join
(
"
,
"
)
helperMissingParams
:
missingParams
&&
[
"
depth0
"
,
this
.
quotedString
(
name
)].
concat
(
params
).
join
(
"
,
"
)
};
};
},
},
// the params and contexts arguments are passed in arrays
setupOptions
:
function
(
paramSize
,
params
)
{
// to fill in
setupParams
:
function
(
paramSize
,
params
,
useRegister
)
{
var
options
=
[],
contexts
=
[],
types
=
[],
param
,
inverse
,
program
;
var
options
=
[],
contexts
=
[],
types
=
[],
param
,
inverse
,
program
;
options
.
push
(
"
hash:
"
+
this
.
popStack
());
options
.
push
(
"
hash:
"
+
this
.
popStack
());
if
(
this
.
options
.
stringParams
)
{
options
.
push
(
"
hashTypes:
"
+
this
.
popStack
());
options
.
push
(
"
hashContexts:
"
+
this
.
popStack
());
}
inverse
=
this
.
popStack
();
inverse
=
this
.
popStack
();
program
=
this
.
popStack
();
program
=
this
.
popStack
();
...
@@ -2024,21 +2639,28 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -2024,21 +2639,28 @@ Handlebars.JavaScriptCompiler = function() {};
if
(
this
.
options
.
stringParams
)
{
if
(
this
.
options
.
stringParams
)
{
options
.
push
(
"
contexts:[
"
+
contexts
.
join
(
"
,
"
)
+
"
]
"
);
options
.
push
(
"
contexts:[
"
+
contexts
.
join
(
"
,
"
)
+
"
]
"
);
options
.
push
(
"
types:[
"
+
types
.
join
(
"
,
"
)
+
"
]
"
);
options
.
push
(
"
types:[
"
+
types
.
join
(
"
,
"
)
+
"
]
"
);
options
.
push
(
"
hashTypes:hashTypes
"
);
}
}
if
(
this
.
options
.
data
)
{
if
(
this
.
options
.
data
)
{
options
.
push
(
"
data:data
"
);
options
.
push
(
"
data:data
"
);
}
}
options
=
"
{
"
+
options
.
join
(
"
,
"
)
+
"
}
"
;
return
options
;
},
// the params and contexts arguments are passed in arrays
// to fill in
setupParams
:
function
(
paramSize
,
params
,
useRegister
)
{
var
options
=
'
{
'
+
this
.
setupOptions
(
paramSize
,
params
).
join
(
'
,
'
)
+
'
}
'
;
if
(
useRegister
)
{
if
(
useRegister
)
{
this
.
register
(
'
options
'
,
options
);
this
.
useRegister
(
'
options
'
);
params
.
push
(
'
options
'
);
params
.
push
(
'
options
'
);
return
'
options=
'
+
options
;
}
else
{
}
else
{
params
.
push
(
options
);
params
.
push
(
options
);
return
''
;
}
}
return
params
.
join
(
"
,
"
);
}
}
};
};
...
@@ -2067,135 +2689,58 @@ Handlebars.JavaScriptCompiler = function() {};
...
@@ -2067,135 +2689,58 @@ Handlebars.JavaScriptCompiler = function() {};
}
}
JavaScriptCompiler
.
isValidJavaScriptVariableName
=
function
(
name
)
{
JavaScriptCompiler
.
isValidJavaScriptVariableName
=
function
(
name
)
{
if
(
!
JavaScriptCompiler
.
RESERVED_WORDS
[
name
]
&&
/^
[
a-zA-Z_$
][
0-9a-zA-Z_$
]
+
$/
.
test
(
name
))
{
if
(
!
JavaScriptCompiler
.
RESERVED_WORDS
[
name
]
&&
/^
[
a-zA-Z_$
][
0-9a-zA-Z_$
]
*
$/
.
test
(
name
))
{
return
true
;
return
true
;
}
}
return
false
;
return
false
;
};
};
})(
Handlebars
.
Compiler
,
Handlebars
.
JavaScriptCompiler
);
__exports__
=
JavaScriptCompiler
;
return
__exports__
;
Handlebars
.
precompile
=
function
(
input
,
options
)
{
})(
__module2__
,
__module5__
);
if
(
!
input
||
(
typeof
input
!==
'
string
'
&&
input
.
constructor
!==
Handlebars
.
AST
.
ProgramNode
))
{
throw
new
Handlebars
.
Exception
(
"
You must pass a string or Handlebars AST to Handlebars.compile. You passed
"
+
input
);
// handlebars.js
}
var
__module0__
=
(
function
(
__dependency1__
,
__dependency2__
,
__dependency3__
,
__dependency4__
,
__dependency5__
)
{
"
use strict
"
;
options
=
options
||
{};
var
__exports__
;
if
(
!
(
'
data
'
in
options
))
{
/*globals Handlebars: true */
options
.
data
=
true
;
var
Handlebars
=
__dependency1__
;
}
var
ast
=
Handlebars
.
parse
(
input
);
// Compiler imports
var
environment
=
new
Handlebars
.
Compiler
().
compile
(
ast
,
options
);
var
AST
=
__dependency2__
;
return
new
Handlebars
.
JavaScriptCompiler
().
compile
(
environment
,
options
);
var
Parser
=
__dependency3__
.
parser
;
};
var
parse
=
__dependency3__
.
parse
;
var
Compiler
=
__dependency4__
.
Compiler
;
Handlebars
.
compile
=
function
(
input
,
options
)
{
var
compile
=
__dependency4__
.
compile
;
if
(
!
input
||
(
typeof
input
!==
'
string
'
&&
input
.
constructor
!==
Handlebars
.
AST
.
ProgramNode
))
{
var
precompile
=
__dependency4__
.
precompile
;
throw
new
Handlebars
.
Exception
(
"
You must pass a string or Handlebars AST to Handlebars.compile. You passed
"
+
input
);
var
JavaScriptCompiler
=
__dependency5__
;
}
var
_create
=
Handlebars
.
create
;
options
=
options
||
{};
var
create
=
function
()
{
if
(
!
(
'
data
'
in
options
))
{
var
hb
=
_create
();
options
.
data
=
true
;
}
hb
.
compile
=
function
(
input
,
options
)
{
var
compiled
;
return
compile
(
input
,
options
,
hb
);
function
compile
()
{
var
ast
=
Handlebars
.
parse
(
input
);
var
environment
=
new
Handlebars
.
Compiler
().
compile
(
ast
,
options
);
var
templateSpec
=
new
Handlebars
.
JavaScriptCompiler
().
compile
(
environment
,
options
,
undefined
,
true
);
return
Handlebars
.
template
(
templateSpec
);
}
// Template is only compiled on first use and cached after that point.
return
function
(
context
,
options
)
{
if
(
!
compiled
)
{
compiled
=
compile
();
}
return
compiled
.
call
(
this
,
context
,
options
);
};
};
;
// lib/handlebars/runtime.js
Handlebars
.
VM
=
{
template
:
function
(
templateSpec
)
{
// Just add water
var
container
=
{
escapeExpression
:
Handlebars
.
Utils
.
escapeExpression
,
invokePartial
:
Handlebars
.
VM
.
invokePartial
,
programs
:
[],
program
:
function
(
i
,
fn
,
data
)
{
var
programWrapper
=
this
.
programs
[
i
];
if
(
data
)
{
return
Handlebars
.
VM
.
program
(
fn
,
data
);
}
else
if
(
programWrapper
)
{
return
programWrapper
;
}
else
{
programWrapper
=
this
.
programs
[
i
]
=
Handlebars
.
VM
.
program
(
fn
);
return
programWrapper
;
}
},
programWithDepth
:
Handlebars
.
VM
.
programWithDepth
,
noop
:
Handlebars
.
VM
.
noop
,
compilerInfo
:
null
};
};
hb
.
precompile
=
function
(
input
,
options
)
{
return
function
(
context
,
options
)
{
return
precompile
(
input
,
options
,
hb
);
options
=
options
||
{};
var
result
=
templateSpec
.
call
(
container
,
Handlebars
,
context
,
options
.
helpers
,
options
.
partials
,
options
.
data
);
var
compilerInfo
=
container
.
compilerInfo
||
[],
compilerRevision
=
compilerInfo
[
0
]
||
1
,
currentRevision
=
Handlebars
.
COMPILER_REVISION
;
if
(
compilerRevision
!==
currentRevision
)
{
if
(
compilerRevision
<
currentRevision
)
{
var
runtimeVersions
=
Handlebars
.
REVISION_CHANGES
[
currentRevision
],
compilerVersions
=
Handlebars
.
REVISION_CHANGES
[
compilerRevision
];
throw
"
Template was precompiled with an older version of Handlebars than the current runtime.
"
+
"
Please update your precompiler to a newer version (
"
+
runtimeVersions
+
"
) or downgrade your runtime to an older version (
"
+
compilerVersions
+
"
).
"
;
}
else
{
// Use the embedded version info since the runtime doesn't know about this revision yet
throw
"
Template was precompiled with a newer version of Handlebars than the current runtime.
"
+
"
Please update your runtime to a newer version (
"
+
compilerInfo
[
1
]
+
"
).
"
;
}
}
return
result
;
};
};
},
programWithDepth
:
function
(
fn
,
data
,
$depth
)
{
hb
.
AST
=
AST
;
var
args
=
Array
.
prototype
.
slice
.
call
(
arguments
,
2
)
;
hb
.
Compiler
=
Compiler
;
hb
.
JavaScriptCompiler
=
JavaScriptCompiler
;
return
function
(
context
,
options
)
{
hb
.
Parser
=
Parser
;
options
=
options
||
{}
;
hb
.
parse
=
parse
;
return
fn
.
apply
(
this
,
[
context
,
options
.
data
||
data
].
concat
(
args
))
;
return
hb
;
};
};
},
program
:
function
(
fn
,
data
)
{
return
function
(
context
,
options
)
{
options
=
options
||
{};
return
fn
(
context
,
options
.
data
||
data
);
Handlebars
=
create
();
};
Handlebars
.
create
=
create
;
},
noop
:
function
()
{
return
""
;
},
invokePartial
:
function
(
partial
,
name
,
context
,
helpers
,
partials
,
data
)
{
var
options
=
{
helpers
:
helpers
,
partials
:
partials
,
data
:
data
};
if
(
partial
===
undefined
)
{
__exports__
=
Handlebars
;
throw
new
Handlebars
.
Exception
(
"
The partial
"
+
name
+
"
could not be found
"
);
return
__exports__
;
}
else
if
(
partial
instanceof
Function
)
{
})(
__module1__
,
__module7__
,
__module8__
,
__module10__
,
__module11__
);
return
partial
(
context
,
options
);
}
else
if
(
!
Handlebars
.
compile
)
{
throw
new
Handlebars
.
Exception
(
"
The partial
"
+
name
+
"
could not be compiled when running in runtime-only mode
"
);
}
else
{
partials
[
name
]
=
Handlebars
.
compile
(
partial
,
{
data
:
data
!==
undefined
});
return
partials
[
name
](
context
,
options
);
}
}
};
Handlebars
.
template
=
Handlebars
.
VM
.
template
;
return
__module0__
;
;
})()
;
examples/dijon/
bower_components/jquery
/jquery.js
→
examples/dijon/
node_modules/jquery/dist
/jquery.js
View file @
e24da2bc
This source diff could not be displayed because it is too large. You can
view the blob
instead.
examples/dijon/
bower_components/todomvc-common/base
.css
→
examples/dijon/
node_modules/todomvc-app-css/index
.css
View file @
e24da2bc
...
@@ -12,25 +12,27 @@ button {
...
@@ -12,25 +12,27 @@ button {
font-size
:
100%
;
font-size
:
100%
;
vertical-align
:
baseline
;
vertical-align
:
baseline
;
font-family
:
inherit
;
font-family
:
inherit
;
font-weight
:
inherit
;
color
:
inherit
;
color
:
inherit
;
-webkit-appearance
:
none
;
-webkit-appearance
:
none
;
-ms-appearance
:
none
;
-o-appearance
:
none
;
appearance
:
none
;
appearance
:
none
;
-webkit-font-smoothing
:
antialiased
;
-moz-font-smoothing
:
antialiased
;
font-smoothing
:
antialiased
;
}
}
body
{
body
{
font
:
14px
'Helvetica Neue'
,
Helvetica
,
Arial
,
sans-serif
;
font
:
14px
'Helvetica Neue'
,
Helvetica
,
Arial
,
sans-serif
;
line-height
:
1.4em
;
line-height
:
1.4em
;
background
:
#
eaeaea
url('bg.png')
;
background
:
#
f5f5f5
;
color
:
#4d4d4d
;
color
:
#4d4d4d
;
width
:
550px
;
min-width
:
230px
;
max-width
:
550px
;
margin
:
0
auto
;
margin
:
0
auto
;
-webkit-font-smoothing
:
antialiased
;
-webkit-font-smoothing
:
antialiased
;
-moz-font-smoothing
:
antialiased
;
-moz-font-smoothing
:
antialiased
;
-ms-font-smoothing
:
antialiased
;
-o-font-smoothing
:
antialiased
;
font-smoothing
:
antialiased
;
font-smoothing
:
antialiased
;
font-weight
:
300
;
}
}
button
,
button
,
...
@@ -38,78 +40,49 @@ input[type="checkbox"] {
...
@@ -38,78 +40,49 @@ input[type="checkbox"] {
outline
:
none
;
outline
:
none
;
}
}
.hidden
{
display
:
none
;
}
#todoapp
{
#todoapp
{
background
:
#fff
;
background
:
#fff
;
background
:
rgba
(
255
,
255
,
255
,
0.9
);
margin
:
130px
0
40px
0
;
margin
:
130px
0
40px
0
;
border
:
1px
solid
#ccc
;
position
:
relative
;
position
:
relative
;
border-top-left-radius
:
2px
;
box-shadow
:
0
2px
4px
0
rgba
(
0
,
0
,
0
,
0.2
),
border-top-right-radius
:
2px
;
0
25px
50px
0
rgba
(
0
,
0
,
0
,
0.1
);
box-shadow
:
0
2px
6px
0
rgba
(
0
,
0
,
0
,
0.2
),
0
25px
50px
0
rgba
(
0
,
0
,
0
,
0.15
);
}
#todoapp
:before
{
content
:
''
;
border-left
:
1px
solid
#f5d6d6
;
border-right
:
1px
solid
#f5d6d6
;
width
:
2px
;
position
:
absolute
;
top
:
0
;
left
:
40px
;
height
:
100%
;
}
}
#todoapp
input
::-webkit-input-placeholder
{
#todoapp
input
::-webkit-input-placeholder
{
font-style
:
italic
;
font-style
:
italic
;
font-weight
:
300
;
color
:
#e6e6e6
;
}
}
#todoapp
input
::-moz-placeholder
{
#todoapp
input
::-moz-placeholder
{
font-style
:
italic
;
font-style
:
italic
;
color
:
#a9a9a9
;
font-weight
:
300
;
color
:
#e6e6e6
;
}
#todoapp
input
::input-placeholder
{
font-style
:
italic
;
font-weight
:
300
;
color
:
#e6e6e6
;
}
}
#todoapp
h1
{
#todoapp
h1
{
position
:
absolute
;
position
:
absolute
;
top
:
-1
20
px
;
top
:
-1
55
px
;
width
:
100%
;
width
:
100%
;
font-size
:
7
0px
;
font-size
:
10
0px
;
font-weight
:
bold
;
font-weight
:
100
;
text-align
:
center
;
text-align
:
center
;
color
:
#b3b3b3
;
color
:
rgba
(
175
,
47
,
47
,
0.15
);
color
:
rgba
(
255
,
255
,
255
,
0.3
);
text-shadow
:
-1px
-1px
rgba
(
0
,
0
,
0
,
0.2
);
-webkit-text-rendering
:
optimizeLegibility
;
-webkit-text-rendering
:
optimizeLegibility
;
-moz-text-rendering
:
optimizeLegibility
;
-moz-text-rendering
:
optimizeLegibility
;
-ms-text-rendering
:
optimizeLegibility
;
-o-text-rendering
:
optimizeLegibility
;
text-rendering
:
optimizeLegibility
;
text-rendering
:
optimizeLegibility
;
}
}
#header
{
padding-top
:
15px
;
border-radius
:
inherit
;
}
#header
:before
{
content
:
''
;
position
:
absolute
;
top
:
0
;
right
:
0
;
left
:
0
;
height
:
15px
;
z-index
:
2
;
border-bottom
:
1px
solid
#6c615c
;
background
:
#8d7d77
;
background
:
-webkit-gradient
(
linear
,
left
top
,
left
bottom
,
from
(
rgba
(
132
,
110
,
100
,
0.8
)),
to
(
rgba
(
101
,
84
,
76
,
0.8
)));
background
:
-webkit-linear-gradient
(
top
,
rgba
(
132
,
110
,
100
,
0.8
),
rgba
(
101
,
84
,
76
,
0.8
));
background
:
linear-gradient
(
top
,
rgba
(
132
,
110
,
100
,
0.8
),
rgba
(
101
,
84
,
76
,
0.8
));
filter
:
progid
:
DXImageTransform
.
Microsoft
.
gradient
(
GradientType
=
0
,
StartColorStr
=
'#9d8b83'
,
EndColorStr
=
'#847670'
);
border-top-left-radius
:
1px
;
border-top-right-radius
:
1px
;
}
#new-todo
,
#new-todo
,
.edit
{
.edit
{
position
:
relative
;
position
:
relative
;
...
@@ -117,6 +90,7 @@ input[type="checkbox"] {
...
@@ -117,6 +90,7 @@ input[type="checkbox"] {
width
:
100%
;
width
:
100%
;
font-size
:
24px
;
font-size
:
24px
;
font-family
:
inherit
;
font-family
:
inherit
;
font-weight
:
inherit
;
line-height
:
1.4em
;
line-height
:
1.4em
;
border
:
0
;
border
:
0
;
outline
:
none
;
outline
:
none
;
...
@@ -124,29 +98,23 @@ input[type="checkbox"] {
...
@@ -124,29 +98,23 @@ input[type="checkbox"] {
padding
:
6px
;
padding
:
6px
;
border
:
1px
solid
#999
;
border
:
1px
solid
#999
;
box-shadow
:
inset
0
-1px
5px
0
rgba
(
0
,
0
,
0
,
0.2
);
box-shadow
:
inset
0
-1px
5px
0
rgba
(
0
,
0
,
0
,
0.2
);
-moz-box-sizing
:
border-box
;
-ms-box-sizing
:
border-box
;
-o-box-sizing
:
border-box
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
-webkit-font-smoothing
:
antialiased
;
-webkit-font-smoothing
:
antialiased
;
-moz-font-smoothing
:
antialiased
;
-moz-font-smoothing
:
antialiased
;
-ms-font-smoothing
:
antialiased
;
-o-font-smoothing
:
antialiased
;
font-smoothing
:
antialiased
;
font-smoothing
:
antialiased
;
}
}
#new-todo
{
#new-todo
{
padding
:
16px
16px
16px
60px
;
padding
:
16px
16px
16px
60px
;
border
:
none
;
border
:
none
;
background
:
rgba
(
0
,
0
,
0
,
0.02
);
background
:
rgba
(
0
,
0
,
0
,
0.003
);
z-index
:
2
;
box-shadow
:
inset
0
-2px
1px
rgba
(
0
,
0
,
0
,
0.03
);
box-shadow
:
none
;
}
}
#main
{
#main
{
position
:
relative
;
position
:
relative
;
z-index
:
2
;
z-index
:
2
;
border-top
:
1px
dotted
#adadad
;
border-top
:
1px
solid
#e6e6e6
;
}
}
label
[
for
=
'toggle-all'
]
{
label
[
for
=
'toggle-all'
]
{
...
@@ -155,19 +123,19 @@ label[for='toggle-all'] {
...
@@ -155,19 +123,19 @@ label[for='toggle-all'] {
#toggle-all
{
#toggle-all
{
position
:
absolute
;
position
:
absolute
;
top
:
-42px
;
top
:
-55px
;
left
:
-4px
;
left
:
-12px
;
width
:
40px
;
width
:
60px
;
height
:
34px
;
text-align
:
center
;
text-align
:
center
;
/* Mobile Safari */
border
:
none
;
/* Mobile Safari */
border
:
none
;
}
}
#toggle-all
:before
{
#toggle-all
:before
{
content
:
'
»
'
;
content
:
'
❯
'
;
font-size
:
2
8
px
;
font-size
:
2
2
px
;
color
:
#
d9d9d9
;
color
:
#
e6e6e6
;
padding
:
0
25px
7px
;
padding
:
10px
27px
10px
2
7px
;
}
}
#toggle-all
:checked:before
{
#toggle-all
:checked:before
{
...
@@ -183,7 +151,7 @@ label[for='toggle-all'] {
...
@@ -183,7 +151,7 @@ label[for='toggle-all'] {
#todo-list
li
{
#todo-list
li
{
position
:
relative
;
position
:
relative
;
font-size
:
24px
;
font-size
:
24px
;
border-bottom
:
1px
dotted
#ccc
;
border-bottom
:
1px
solid
#ededed
;
}
}
#todo-list
li
:last-child
{
#todo-list
li
:last-child
{
...
@@ -215,28 +183,17 @@ label[for='toggle-all'] {
...
@@ -215,28 +183,17 @@ label[for='toggle-all'] {
top
:
0
;
top
:
0
;
bottom
:
0
;
bottom
:
0
;
margin
:
auto
0
;
margin
:
auto
0
;
/* Mobile Safari */
border
:
none
;
/* Mobile Safari */
border
:
none
;
-webkit-appearance
:
none
;
-webkit-appearance
:
none
;
-ms-appearance
:
none
;
-o-appearance
:
none
;
appearance
:
none
;
appearance
:
none
;
}
}
#todo-list
li
.toggle
:after
{
#todo-list
li
.toggle
:after
{
content
:
'✔'
;
content
:
url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#ededed" stroke-width="3"/></svg>')
;
/* 40 + a couple of pixels visual adjustment */
line-height
:
43px
;
font-size
:
20px
;
color
:
#d9d9d9
;
text-shadow
:
0
-1px
0
#bfbfbf
;
}
}
#todo-list
li
.toggle
:checked:after
{
#todo-list
li
.toggle
:checked:after
{
color
:
#85ada7
;
content
:
url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#bddad5" stroke-width="3"/><path fill="#5dc2af" d="M72 25L42 71 27 56l-4 4 20 20 34-52z"/></svg>')
;
text-shadow
:
0
1px
0
#669991
;
bottom
:
1px
;
position
:
relative
;
}
}
#todo-list
li
label
{
#todo-list
li
label
{
...
@@ -246,12 +203,11 @@ label[for='toggle-all'] {
...
@@ -246,12 +203,11 @@ label[for='toggle-all'] {
margin-left
:
45px
;
margin-left
:
45px
;
display
:
block
;
display
:
block
;
line-height
:
1.2
;
line-height
:
1.2
;
-webkit-transition
:
color
0.4s
;
transition
:
color
0.4s
;
transition
:
color
0.4s
;
}
}
#todo-list
li
.completed
label
{
#todo-list
li
.completed
label
{
color
:
#
a9a9a
9
;
color
:
#
d9d9d
9
;
text-decoration
:
line-through
;
text-decoration
:
line-through
;
}
}
...
@@ -264,21 +220,18 @@ label[for='toggle-all'] {
...
@@ -264,21 +220,18 @@ label[for='toggle-all'] {
width
:
40px
;
width
:
40px
;
height
:
40px
;
height
:
40px
;
margin
:
auto
0
;
margin
:
auto
0
;
font-size
:
22
px
;
font-size
:
30
px
;
color
:
#
a88a8
a
;
color
:
#
cc9a9
a
;
-webkit-transition
:
all
0.2s
;
margin-bottom
:
11px
;
transition
:
all
0.2s
;
transition
:
color
0.2s
ease-out
;
}
}
#todo-list
li
.destroy
:hover
{
#todo-list
li
.destroy
:hover
{
text-shadow
:
0
0
1px
#000
,
color
:
#af5b5e
;
0
0
10px
rgba
(
199
,
107
,
107
,
0.8
);
-webkit-transform
:
scale
(
1.3
);
transform
:
scale
(
1.3
);
}
}
#todo-list
li
.destroy
:after
{
#todo-list
li
.destroy
:after
{
content
:
'
✖
'
;
content
:
'
×
'
;
}
}
#todo-list
li
:hover
.destroy
{
#todo-list
li
:hover
.destroy
{
...
@@ -295,29 +248,25 @@ label[for='toggle-all'] {
...
@@ -295,29 +248,25 @@ label[for='toggle-all'] {
#footer
{
#footer
{
color
:
#777
;
color
:
#777
;
padding
:
0
15px
;
padding
:
10px
15px
;
position
:
absolute
;
right
:
0
;
bottom
:
-31px
;
left
:
0
;
height
:
20px
;
height
:
20px
;
z-index
:
1
;
text-align
:
center
;
text-align
:
center
;
border-top
:
1px
solid
#e6e6e6
;
}
}
#footer
:before
{
#footer
:before
{
content
:
''
;
content
:
''
;
position
:
absolute
;
position
:
absolute
;
right
:
0
;
right
:
0
;
bottom
:
31px
;
bottom
:
0
;
left
:
0
;
left
:
0
;
height
:
50px
;
height
:
50px
;
z-index
:
-1
;
overflow
:
hidden
;
box-shadow
:
0
1px
1px
rgba
(
0
,
0
,
0
,
0.
3
),
box-shadow
:
0
1px
1px
rgba
(
0
,
0
,
0
,
0.
2
),
0
6px
0
-3px
rgba
(
255
,
255
,
255
,
0.8
)
,
0
8px
0
-3px
#f6f6f6
,
0
7px
1px
-3px
rgba
(
0
,
0
,
0
,
0.3
),
0
9px
1px
-3px
rgba
(
0
,
0
,
0
,
0.2
),
0
43px
0
-6px
rgba
(
255
,
255
,
255
,
0.8
)
,
0
16px
0
-6px
#f6f6f6
,
0
44
px
2px
-6px
rgba
(
0
,
0
,
0
,
0.2
);
0
17
px
2px
-6px
rgba
(
0
,
0
,
0
,
0.2
);
}
}
#todo-count
{
#todo-count
{
...
@@ -325,6 +274,10 @@ label[for='toggle-all'] {
...
@@ -325,6 +274,10 @@ label[for='toggle-all'] {
text-align
:
left
;
text-align
:
left
;
}
}
#todo-count
strong
{
font-weight
:
300
;
}
#filters
{
#filters
{
margin
:
0
;
margin
:
0
;
padding
:
0
;
padding
:
0
;
...
@@ -339,49 +292,73 @@ label[for='toggle-all'] {
...
@@ -339,49 +292,73 @@ label[for='toggle-all'] {
}
}
#filters
li
a
{
#filters
li
a
{
color
:
#83756f
;
color
:
inherit
;
margin
:
2px
;
margin
:
3px
;
padding
:
3px
7px
;
text-decoration
:
none
;
text-decoration
:
none
;
border
:
1px
solid
transparent
;
border-radius
:
3px
;
}
#filters
li
a
.selected
,
#filters
li
a
:hover
{
border-color
:
rgba
(
175
,
47
,
47
,
0.1
);
}
}
#filters
li
a
.selected
{
#filters
li
a
.selected
{
font-weight
:
bold
;
border-color
:
rgba
(
175
,
47
,
47
,
0.2
)
;
}
}
#clear-completed
{
#clear-completed
,
html
#clear-completed
:active
{
float
:
right
;
float
:
right
;
position
:
relative
;
position
:
relative
;
line-height
:
20px
;
line-height
:
20px
;
text-decoration
:
none
;
text-decoration
:
none
;
background
:
rgba
(
0
,
0
,
0
,
0.1
);
cursor
:
pointer
;
font-size
:
11px
;
visibility
:
hidden
;
padding
:
0
10px
;
position
:
relative
;
border-radius
:
3px
;
}
box-shadow
:
0
-1px
0
0
rgba
(
0
,
0
,
0
,
0.2
);
#clear-completed
::after
{
visibility
:
visible
;
content
:
'Clear completed'
;
position
:
absolute
;
top
:
0
;
right
:
0
;
white-space
:
nowrap
;
}
}
#clear-completed
:hover
{
#clear-completed
:hover::after
{
background
:
rgba
(
0
,
0
,
0
,
0.15
);
text-decoration
:
underline
;
box-shadow
:
0
-1px
0
0
rgba
(
0
,
0
,
0
,
0.3
);
}
}
#info
{
#info
{
margin
:
65px
auto
0
;
margin
:
65px
auto
0
;
color
:
#
a6a6a6
;
color
:
#
bfbfbf
;
font-size
:
1
2
px
;
font-size
:
1
0
px
;
text-shadow
:
0
1px
0
rgba
(
255
,
255
,
255
,
0.
7
);
text-shadow
:
0
1px
0
rgba
(
255
,
255
,
255
,
0.
5
);
text-align
:
center
;
text-align
:
center
;
}
}
#info
p
{
line-height
:
1
;
}
#info
a
{
#info
a
{
color
:
inherit
;
color
:
inherit
;
text-decoration
:
none
;
font-weight
:
400
;
}
#info
a
:hover
{
text-decoration
:
underline
;
}
}
/*
/*
Hack to remove background from Mobile Safari.
Hack to remove background from Mobile Safari.
Can't use it globally since it destroys checkboxes in Firefox
and Opera
Can't use it globally since it destroys checkboxes in Firefox
*/
*/
@media
screen
and
(
-webkit-min-device-pixel-ratio
:
0
)
{
@media
screen
and
(
-webkit-min-device-pixel-ratio
:
0
)
{
#toggle-all
,
#toggle-all
,
#todo-list
li
.toggle
{
#todo-list
li
.toggle
{
...
@@ -393,10 +370,6 @@ label[for='toggle-all'] {
...
@@ -393,10 +370,6 @@ label[for='toggle-all'] {
}
}
#toggle-all
{
#toggle-all
{
top
:
-56px
;
left
:
-15px
;
width
:
65px
;
height
:
41px
;
-webkit-transform
:
rotate
(
90deg
);
-webkit-transform
:
rotate
(
90deg
);
transform
:
rotate
(
90deg
);
transform
:
rotate
(
90deg
);
-webkit-appearance
:
none
;
-webkit-appearance
:
none
;
...
@@ -404,151 +377,12 @@ label[for='toggle-all'] {
...
@@ -404,151 +377,12 @@ label[for='toggle-all'] {
}
}
}
}
.hidden
{
@media
(
max-width
:
430px
)
{
display
:
none
;
#footer
{
}
height
:
50px
;
hr
{
margin
:
20px
0
;
border
:
0
;
border-top
:
1px
dashed
#C5C5C5
;
border-bottom
:
1px
dashed
#F7F7F7
;
}
.learn
a
{
font-weight
:
normal
;
text-decoration
:
none
;
color
:
#b83f45
;
}
.learn
a
:hover
{
text-decoration
:
underline
;
color
:
#787e7e
;
}
.learn
h3
,
.learn
h4
,
.learn
h5
{
margin
:
10px
0
;
font-weight
:
500
;
line-height
:
1.2
;
color
:
#000
;
}
.learn
h3
{
font-size
:
24px
;
}
.learn
h4
{
font-size
:
18px
;
}
.learn
h5
{
margin-bottom
:
0
;
font-size
:
14px
;
}
.learn
ul
{
padding
:
0
;
margin
:
0
0
30px
25px
;
}
.learn
li
{
line-height
:
20px
;
}
.learn
p
{
font-size
:
15px
;
font-weight
:
300
;
line-height
:
1.3
;
margin-top
:
0
;
margin-bottom
:
0
;
}
.quote
{
border
:
none
;
margin
:
20px
0
60px
0
;
}
.quote
p
{
font-style
:
italic
;
}
.quote
p
:before
{
content
:
'“'
;
font-size
:
50px
;
opacity
:
.15
;
position
:
absolute
;
top
:
-20px
;
left
:
3px
;
}
.quote
p
:after
{
content
:
'”'
;
font-size
:
50px
;
opacity
:
.15
;
position
:
absolute
;
bottom
:
-42px
;
right
:
3px
;
}
.quote
footer
{
position
:
absolute
;
bottom
:
-40px
;
right
:
0
;
}
.quote
footer
img
{
border-radius
:
3px
;
}
.quote
footer
a
{
margin-left
:
5px
;
vertical-align
:
middle
;
}
.speech-bubble
{
position
:
relative
;
padding
:
10px
;
background
:
rgba
(
0
,
0
,
0
,
.04
);
border-radius
:
5px
;
}
.speech-bubble
:after
{
content
:
''
;
position
:
absolute
;
top
:
100%
;
right
:
30px
;
border
:
13px
solid
transparent
;
border-top-color
:
rgba
(
0
,
0
,
0
,
.04
);
}
.learn-bar
>
.learn
{
position
:
absolute
;
width
:
272px
;
top
:
8px
;
left
:
-300px
;
padding
:
10px
;
border-radius
:
5px
;
background-color
:
rgba
(
255
,
255
,
255
,
.6
);
-webkit-transition-property
:
left
;
transition-property
:
left
;
-webkit-transition-duration
:
500ms
;
transition-duration
:
500ms
;
}
@media
(
min-width
:
899px
)
{
.learn-bar
{
width
:
auto
;
margin
:
0
0
0
300px
;
}
.learn-bar
>
.learn
{
left
:
8px
;
}
}
.learn-bar
#todoapp
{
#filters
{
width
:
550px
;
bottom
:
10px
;
margin
:
130px
auto
40px
auto
;
}
}
}
}
examples/dijon/node_modules/todomvc-common/base.css
0 → 100644
View file @
e24da2bc
hr
{
margin
:
20px
0
;
border
:
0
;
border-top
:
1px
dashed
#c5c5c5
;
border-bottom
:
1px
dashed
#f7f7f7
;
}
.learn
a
{
font-weight
:
normal
;
text-decoration
:
none
;
color
:
#b83f45
;
}
.learn
a
:hover
{
text-decoration
:
underline
;
color
:
#787e7e
;
}
.learn
h3
,
.learn
h4
,
.learn
h5
{
margin
:
10px
0
;
font-weight
:
500
;
line-height
:
1.2
;
color
:
#000
;
}
.learn
h3
{
font-size
:
24px
;
}
.learn
h4
{
font-size
:
18px
;
}
.learn
h5
{
margin-bottom
:
0
;
font-size
:
14px
;
}
.learn
ul
{
padding
:
0
;
margin
:
0
0
30px
25px
;
}
.learn
li
{
line-height
:
20px
;
}
.learn
p
{
font-size
:
15px
;
font-weight
:
300
;
line-height
:
1.3
;
margin-top
:
0
;
margin-bottom
:
0
;
}
#issue-count
{
display
:
none
;
}
.quote
{
border
:
none
;
margin
:
20px
0
60px
0
;
}
.quote
p
{
font-style
:
italic
;
}
.quote
p
:before
{
content
:
'“'
;
font-size
:
50px
;
opacity
:
.15
;
position
:
absolute
;
top
:
-20px
;
left
:
3px
;
}
.quote
p
:after
{
content
:
'”'
;
font-size
:
50px
;
opacity
:
.15
;
position
:
absolute
;
bottom
:
-42px
;
right
:
3px
;
}
.quote
footer
{
position
:
absolute
;
bottom
:
-40px
;
right
:
0
;
}
.quote
footer
img
{
border-radius
:
3px
;
}
.quote
footer
a
{
margin-left
:
5px
;
vertical-align
:
middle
;
}
.speech-bubble
{
position
:
relative
;
padding
:
10px
;
background
:
rgba
(
0
,
0
,
0
,
.04
);
border-radius
:
5px
;
}
.speech-bubble
:after
{
content
:
''
;
position
:
absolute
;
top
:
100%
;
right
:
30px
;
border
:
13px
solid
transparent
;
border-top-color
:
rgba
(
0
,
0
,
0
,
.04
);
}
.learn-bar
>
.learn
{
position
:
absolute
;
width
:
272px
;
top
:
8px
;
left
:
-300px
;
padding
:
10px
;
border-radius
:
5px
;
background-color
:
rgba
(
255
,
255
,
255
,
.6
);
transition-property
:
left
;
transition-duration
:
500ms
;
}
@media
(
min-width
:
899px
)
{
.learn-bar
{
width
:
auto
;
padding-left
:
300px
;
}
.learn-bar
>
.learn
{
left
:
8px
;
}
}
examples/dijon/
bower_component
s/todomvc-common/base.js
→
examples/dijon/
node_module
s/todomvc-common/base.js
View file @
e24da2bc
/* global _ */
(
function
()
{
(
function
()
{
'
use strict
'
;
'
use strict
'
;
/* jshint ignore:start */
// Underscore's Template Module
// Underscore's Template Module
// Courtesy of underscorejs.org
// Courtesy of underscorejs.org
var
_
=
(
function
(
_
)
{
var
_
=
(
function
(
_
)
{
...
@@ -114,6 +116,7 @@
...
@@ -114,6 +116,7 @@
if
(
location
.
hostname
===
'
todomvc.com
'
)
{
if
(
location
.
hostname
===
'
todomvc.com
'
)
{
window
.
_gaq
=
[[
'
_setAccount
'
,
'
UA-31081062-1
'
],[
'
_trackPageview
'
]];(
function
(
d
,
t
){
var
g
=
d
.
createElement
(
t
),
s
=
d
.
getElementsByTagName
(
t
)[
0
];
g
.
src
=
'
//www.google-analytics.com/ga.js
'
;
s
.
parentNode
.
insertBefore
(
g
,
s
)}(
document
,
'
script
'
));
window
.
_gaq
=
[[
'
_setAccount
'
,
'
UA-31081062-1
'
],[
'
_trackPageview
'
]];(
function
(
d
,
t
){
var
g
=
d
.
createElement
(
t
),
s
=
d
.
getElementsByTagName
(
t
)[
0
];
g
.
src
=
'
//www.google-analytics.com/ga.js
'
;
s
.
parentNode
.
insertBefore
(
g
,
s
)}(
document
,
'
script
'
));
}
}
/* jshint ignore:end */
function
redirect
()
{
function
redirect
()
{
if
(
location
.
hostname
===
'
tastejs.github.io
'
)
{
if
(
location
.
hostname
===
'
tastejs.github.io
'
)
{
...
@@ -175,13 +178,17 @@
...
@@ -175,13 +178,17 @@
if
(
learnJSON
.
backend
)
{
if
(
learnJSON
.
backend
)
{
this
.
frameworkJSON
=
learnJSON
.
backend
;
this
.
frameworkJSON
=
learnJSON
.
backend
;
this
.
frameworkJSON
.
issueLabel
=
framework
;
this
.
append
({
this
.
append
({
backend
:
true
backend
:
true
});
});
}
else
if
(
learnJSON
[
framework
])
{
}
else
if
(
learnJSON
[
framework
])
{
this
.
frameworkJSON
=
learnJSON
[
framework
];
this
.
frameworkJSON
=
learnJSON
[
framework
];
this
.
frameworkJSON
.
issueLabel
=
framework
;
this
.
append
();
this
.
append
();
}
}
this
.
fetchIssueCount
();
}
}
Learn
.
prototype
.
append
=
function
(
opts
)
{
Learn
.
prototype
.
append
=
function
(
opts
)
{
...
@@ -212,6 +219,26 @@
...
@@ -212,6 +219,26 @@
document
.
body
.
insertAdjacentHTML
(
'
afterBegin
'
,
aside
.
outerHTML
);
document
.
body
.
insertAdjacentHTML
(
'
afterBegin
'
,
aside
.
outerHTML
);
};
};
Learn
.
prototype
.
fetchIssueCount
=
function
()
{
var
issueLink
=
document
.
getElementById
(
'
issue-count-link
'
);
if
(
issueLink
)
{
var
url
=
issueLink
.
href
.
replace
(
'
https://github.com
'
,
'
https://api.github.com/repos
'
);
var
xhr
=
new
XMLHttpRequest
();
xhr
.
open
(
'
GET
'
,
url
,
true
);
xhr
.
onload
=
function
(
e
)
{
var
parsedResponse
=
JSON
.
parse
(
e
.
target
.
responseText
);
if
(
parsedResponse
instanceof
Array
)
{
var
count
=
parsedResponse
.
length
if
(
count
!==
0
)
{
issueLink
.
innerHTML
=
'
This app has
'
+
count
+
'
open issues
'
;
document
.
getElementById
(
'
issue-count
'
).
style
.
display
=
'
inline
'
;
}
}
};
xhr
.
send
();
}
};
redirect
();
redirect
();
getFile
(
'
learn.json
'
,
Learn
);
getFile
(
'
learn.json
'
,
Learn
);
})();
})();
examples/dijon/package.json
0 → 100644
View file @
e24da2bc
{
"private"
:
true
,
"dependencies"
:
{
"jquery"
:
"^2.0.0"
,
"handlebars"
:
"^1.0.0"
,
"todomvc-common"
:
"^1.0.1"
,
"todomvc-app-css"
:
"^1.0.1"
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment