Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9343608
notebook.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
11 KB
Subscribers
None
notebook.js
View Options
// http://github.com/jsvine/notebookjs
// notebook.js may be freely distributed under the MIT license.
(
function
()
{
var
VERSION
=
"0.6.7"
;
var
root
=
this
;
var
isBrowser
=
root
.
window
!==
undefined
;
var
doc
;
// Get browser or JSDOM document
if
(
isBrowser
)
{
doc
=
root
.
document
;
}
else
{
var
jsdom
=
require
(
"jsdom"
);
var
dom
=
new
jsdom
.
JSDOM
();
doc
=
dom
.
window
.
document
;
}
// Helper functions
var
ident
=
function
(
x
)
{
return
x
;
};
var
makeElement
=
function
(
tag
,
classNames
)
{
var
el
=
doc
.
createElement
(
tag
);
el
.
className
=
(
classNames
||
[]).
map
(
function
(
cn
)
{
return
nb
.
prefix
+
cn
;
}).
join
(
" "
);
return
el
;
};
var
escapeHTML
=
function
(
raw
)
{
var
replaced
=
raw
.
replace
(
/</g
,
"<"
)
.
replace
(
/>/g
,
">"
);
return
replaced
;
};
var
joinText
=
function
(
text
)
{
if
(
text
.
join
)
{
return
text
.
map
(
joinText
).
join
(
""
);
}
else
{
return
text
;
}
};
// Get supporting libraries
var
getMarkdown
=
function
()
{
return
root
.
marked
||
(
typeof
require
===
"function"
&&
require
(
"marked"
));
};
var
getAnsi
=
function
()
{
var
lib
=
root
.
ansi_up
||
(
typeof
require
===
"function"
&&
require
(
"ansi_up"
));
return
lib
&&
lib
.
ansi_to_html
;
};
var
getSanitizer
=
function
()
{
var
lib
=
root
.
DOMPurify
||
(
typeof
require
===
"function"
&&
require
(
"dompurify"
));
if
(
isBrowser
)
{
return
lib
&&
lib
.
sanitize
;
}
else
{
return
lib
(
dom
.
window
).
sanitize
;
}
};
// Set up `nb` namespace
var
nb
=
{
prefix
:
"nb-"
,
markdown
:
getMarkdown
()
||
ident
,
ansi
:
getAnsi
()
||
ident
,
sanitizer
:
getSanitizer
()
||
ident
,
highlighter
:
ident
,
VERSION
:
VERSION
};
// Inputs
nb
.
Input
=
function
(
raw
,
cell
)
{
this
.
raw
=
raw
;
this
.
cell
=
cell
;
};
nb
.
Input
.
prototype
.
render
=
function
()
{
if
(
!
this
.
raw
.
length
)
{
return
makeElement
(
"div"
);
}
var
holder
=
makeElement
(
"div"
,
[
"input"
]);
var
cell
=
this
.
cell
;
if
(
typeof
cell
.
number
===
"number"
)
{
holder
.
setAttribute
(
"data-prompt-number"
,
this
.
cell
.
number
);
}
var
pre_el
=
makeElement
(
"pre"
);
var
code_el
=
makeElement
(
"code"
);
var
notebook
=
cell
.
worksheet
.
notebook
;
var
m
=
notebook
.
metadata
;
var
lang
=
this
.
cell
.
raw
.
language
||
m
.
language
||
(
m
.
kernelspec
&&
m
.
kernelspec
.
language
)
||
(
m
.
language_info
&&
m
.
language_info
.
name
);
code_el
.
setAttribute
(
"data-language"
,
lang
);
code_el
.
className
=
"lang-"
+
lang
;
code_el
.
innerHTML
=
nb
.
highlighter
(
escapeHTML
(
joinText
(
this
.
raw
)),
pre_el
,
code_el
,
lang
);
pre_el
.
appendChild
(
code_el
);
holder
.
appendChild
(
pre_el
);
this
.
el
=
holder
;
return
holder
;
};
// Outputs and output-renderers
var
imageCreator
=
function
(
format
)
{
return
function
(
data
)
{
var
el
=
makeElement
(
"img"
,
[
"image-output"
]);
el
.
src
=
"data:image/"
+
format
+
";base64,"
+
joinText
(
data
).
replace
(
/\n/g
,
""
);
return
el
;
};
};
nb
.
display
=
{};
nb
.
display
.
text
=
function
(
text
)
{
var
el
=
makeElement
(
"pre"
,
[
"text-output"
]);
el
.
innerHTML
=
nb
.
highlighter
(
nb
.
ansi
(
joinText
(
text
)),
el
);
return
el
;
};
nb
.
display
[
"text/plain"
]
=
nb
.
display
.
text
;
nb
.
display
.
html
=
function
(
html
)
{
var
el
=
makeElement
(
"div"
,
[
"html-output"
]);
el
.
innerHTML
=
nb
.
sanitizer
(
joinText
(
html
));
return
el
;
};
nb
.
display
[
"text/html"
]
=
nb
.
display
.
html
;
nb
.
display
.
marked
=
function
(
md
)
{
return
nb
.
display
.
html
(
nb
.
markdown
(
joinText
(
md
)));
};
nb
.
display
[
"text/markdown"
]
=
nb
.
display
.
marked
;
nb
.
display
.
svg
=
function
(
svg
)
{
var
el
=
makeElement
(
"div"
,
[
"svg-output"
]);
el
.
innerHTML
=
joinText
(
svg
);
return
el
;
};
nb
.
display
[
"text/svg+xml"
]
=
nb
.
display
.
svg
;
nb
.
display
[
"image/svg+xml"
]
=
nb
.
display
.
svg
;
nb
.
display
.
latex
=
function
(
latex
)
{
var
el
=
makeElement
(
"div"
,
[
"latex-output"
]);
el
.
innerHTML
=
joinText
(
latex
);
return
el
;
};
nb
.
display
[
"text/latex"
]
=
nb
.
display
.
latex
;
nb
.
display
.
javascript
=
function
(
js
)
{
var
el
=
makeElement
(
"script"
);
el
.
innerHTML
=
joinText
(
js
);
return
el
;
};
nb
.
display
[
"application/javascript"
]
=
nb
.
display
.
javascript
;
nb
.
display
.
png
=
imageCreator
(
"png"
);
nb
.
display
[
"image/png"
]
=
nb
.
display
.
png
;
nb
.
display
.
jpeg
=
imageCreator
(
"jpeg"
);
nb
.
display
[
"image/jpeg"
]
=
nb
.
display
.
jpeg
;
nb
.
display_priority
=
[
"png"
,
"image/png"
,
"jpeg"
,
"image/jpeg"
,
"svg"
,
"image/svg+xml"
,
"text/svg+xml"
,
"html"
,
"text/html"
,
"text/markdown"
,
"latex"
,
"text/latex"
,
"javascript"
,
"application/javascript"
,
"text"
,
"text/plain"
];
var
render_display_data
=
function
()
{
var
o
=
this
;
var
formats
=
nb
.
display_priority
.
filter
(
function
(
d
)
{
return
o
.
raw
.
data
?
o
.
raw
.
data
[
d
]
:
o
.
raw
[
d
];
});
var
format
=
formats
[
0
];
if
(
format
)
{
if
(
nb
.
display
[
format
])
{
return
nb
.
display
[
format
](
o
.
raw
[
format
]
||
o
.
raw
.
data
[
format
]);
}
}
return
makeElement
(
"div"
,
[
"empty-output"
]);
};
var
render_error
=
function
()
{
var
el
=
makeElement
(
"pre"
,
[
"pyerr"
]);
var
raw
=
this
.
raw
.
traceback
.
join
(
"\n"
);
el
.
innerHTML
=
nb
.
highlighter
(
nb
.
ansi
(
escapeHTML
(
raw
)),
el
);
return
el
;
};
nb
.
Output
=
function
(
raw
,
cell
)
{
this
.
raw
=
raw
;
this
.
cell
=
cell
;
this
.
type
=
raw
.
output_type
;
};
nb
.
Output
.
prototype
.
renderers
=
{
"display_data"
:
render_display_data
,
"execute_result"
:
render_display_data
,
"pyout"
:
render_display_data
,
"pyerr"
:
render_error
,
"error"
:
render_error
,
"stream"
:
function
()
{
var
el
=
makeElement
(
"pre"
,
[
(
this
.
raw
.
stream
||
this
.
raw
.
name
)
]);
var
raw
=
joinText
(
this
.
raw
.
text
);
el
.
innerHTML
=
nb
.
highlighter
(
nb
.
ansi
(
escapeHTML
(
raw
)),
el
);
return
el
;
}
};
nb
.
Output
.
prototype
.
render
=
function
()
{
var
outer
=
makeElement
(
"div"
,
[
"output"
]);
if
(
typeof
this
.
cell
.
number
===
"number"
)
{
outer
.
setAttribute
(
"data-prompt-number"
,
this
.
cell
.
number
);
}
var
inner
=
this
.
renderers
[
this
.
type
].
call
(
this
);
outer
.
appendChild
(
inner
);
this
.
el
=
outer
;
return
outer
;
};
// Post-processing
nb
.
coalesceStreams
=
function
(
outputs
)
{
if
(
!
outputs
.
length
)
{
return
outputs
;
}
var
last
=
outputs
[
0
];
var
new_outputs
=
[
last
];
outputs
.
slice
(
1
).
forEach
(
function
(
o
)
{
if
(
o
.
raw
.
output_type
===
"stream"
&&
last
.
raw
.
output_type
===
"stream"
&&
o
.
raw
.
stream
===
last
.
raw
.
stream
&&
o
.
raw
.
name
===
last
.
raw
.
name
)
{
last
.
raw
.
text
=
last
.
raw
.
text
.
concat
(
o
.
raw
.
text
);
}
else
{
new_outputs
.
push
(
o
);
last
=
o
;
}
});
return
new_outputs
;
};
// Cells
nb
.
Cell
=
function
(
raw
,
worksheet
)
{
var
cell
=
this
;
cell
.
raw
=
raw
;
cell
.
worksheet
=
worksheet
;
cell
.
type
=
raw
.
cell_type
;
if
(
cell
.
type
===
"code"
)
{
cell
.
number
=
raw
.
prompt_number
>
-
1
?
raw
.
prompt_number
:
raw
.
execution_count
;
var
source
=
raw
.
input
||
[
raw
.
source
];
cell
.
input
=
new
nb
.
Input
(
source
,
cell
);
var
raw_outputs
=
(
cell
.
raw
.
outputs
||
[]).
map
(
function
(
o
)
{
return
new
nb
.
Output
(
o
,
cell
);
});
cell
.
outputs
=
nb
.
coalesceStreams
(
raw_outputs
);
}
};
var
math_delimiters
=
[
{
left
:
"$$"
,
right
:
"$$"
,
display
:
true
},
{
left
:
"\\["
,
right
:
"\\]"
,
display
:
true
},
{
left
:
"\\("
,
right
:
"\\)"
,
display
:
false
},
{
left
:
"$"
,
right
:
"$"
,
display
:
false
}
];
nb
.
Cell
.
prototype
.
renderers
=
{
markdown
:
function
()
{
var
el
=
makeElement
(
"div"
,
[
"cell"
,
"markdown-cell"
]);
var
joined
=
joinText
(
this
.
raw
.
source
);
// Pre-render math via KaTeX's auto-render extension, if available
if
(
root
.
renderMathInElement
!=
null
)
{
el
.
innerHTML
=
nb
.
sanitizer
(
joined
);
root
.
renderMathInElement
(
el
,
{
delimiters
:
math_delimiters
});
el
.
innerHTML
=
nb
.
sanitizer
(
nb
.
markdown
(
el
.
innerHTML
.
replace
(
/>/g
,
">"
)
// Necessary to enable blockquote syntax
));
}
else
{
el
.
innerHTML
=
nb
.
sanitizer
(
nb
.
markdown
(
joined
));
}
return
el
;
},
heading
:
function
()
{
var
el
=
makeElement
(
"h"
+
this
.
raw
.
level
,
[
"cell"
,
"heading-cell"
]);
el
.
innerHTML
=
nb
.
sanitizer
(
joinText
(
this
.
raw
.
source
));
return
el
;
},
raw
:
function
()
{
var
el
=
makeElement
(
"div"
,
[
"cell"
,
"raw-cell"
]);
el
.
innerHTML
=
escapeHTML
(
joinText
(
this
.
raw
.
source
));
return
el
;
},
code
:
function
()
{
var
cell_el
=
makeElement
(
"div"
,
[
"cell"
,
"code-cell"
]);
cell_el
.
appendChild
(
this
.
input
.
render
());
var
output_els
=
this
.
outputs
.
forEach
(
function
(
o
)
{
cell_el
.
appendChild
(
o
.
render
());
});
return
cell_el
;
}
};
nb
.
Cell
.
prototype
.
render
=
function
()
{
var
el
=
this
.
renderers
[
this
.
type
].
call
(
this
);
this
.
el
=
el
;
return
el
;
};
// Worksheets
nb
.
Worksheet
=
function
(
raw
,
notebook
)
{
var
worksheet
=
this
;
this
.
raw
=
raw
;
this
.
notebook
=
notebook
;
this
.
cells
=
raw
.
cells
.
map
(
function
(
c
)
{
return
new
nb
.
Cell
(
c
,
worksheet
);
});
this
.
render
=
function
()
{
var
worksheet_el
=
makeElement
(
"div"
,
[
"worksheet"
]);
worksheet
.
cells
.
forEach
(
function
(
c
)
{
worksheet_el
.
appendChild
(
c
.
render
());
});
this
.
el
=
worksheet_el
;
return
worksheet_el
;
};
};
// Notebooks
nb
.
Notebook
=
function
(
raw
,
config
)
{
var
notebook
=
this
;
this
.
raw
=
raw
;
this
.
config
=
config
;
var
meta
=
this
.
metadata
=
raw
.
metadata
||
{};
this
.
title
=
meta
.
title
||
meta
.
name
;
var
_worksheets
=
raw
.
worksheets
||
[
{
cells
:
raw
.
cells
}
];
this
.
worksheets
=
_worksheets
.
map
(
function
(
ws
)
{
return
new
nb
.
Worksheet
(
ws
,
notebook
);
});
this
.
sheet
=
this
.
worksheets
[
0
];
};
nb
.
Notebook
.
prototype
.
render
=
function
()
{
var
notebook_el
=
makeElement
(
"div"
,
[
"notebook"
]);
this
.
worksheets
.
forEach
(
function
(
w
)
{
notebook_el
.
appendChild
(
w
.
render
());
});
this
.
el
=
notebook_el
;
return
notebook_el
;
};
nb
.
parse
=
function
(
nbjson
,
config
)
{
return
new
nb
.
Notebook
(
nbjson
,
config
);
};
// Exports
if
(
typeof
define
===
'function'
&&
define
.
amd
)
{
define
(
function
()
{
return
nb
;
});
}
if
(
typeof
exports
!==
'undefined'
)
{
if
(
typeof
module
!==
'undefined'
&&
module
.
exports
)
{
exports
=
module
.
exports
=
nb
;
}
exports
.
nb
=
nb
;
}
else
{
root
.
nb
=
nb
;
}
}).
call
(
this
);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Jul 4, 1:40 PM (4 d, 3 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3440491
Attached To
rDWAPPS Web applications
Event Timeline
Log In to Comment