Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9339508
readme-rendering.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
2 KB
Subscribers
None
readme-rendering.js
View Options
/**
* Copyright (C) 2018-2019 The Software Heritage developers
* See the AUTHORS file at the top-level directory of this distribution
* License: GNU Affero General Public License version 3, or any later version
* See top-level LICENSE file for more information
*/
import
DOMPurify
from
'dompurify'
;
import
{
handleFetchError
}
from
'utils/functions'
;
DOMPurify
.
addHook
(
'uponSanitizeAttribute'
,
function
(
node
,
data
)
{
if
(
node
.
nodeName
===
'IMG'
&&
data
.
attrName
===
'src'
)
{
// remove leading slash from image src to fix rendering
if
(
data
.
attrValue
.
startsWith
(
'/'
))
{
data
.
attrValue
=
data
.
attrValue
.
slice
(
1
);
}
}
});
export
function
filterXSS
(
html
)
{
return
DOMPurify
.
sanitize
(
html
);
}
export
async
function
renderMarkdown
(
domElt
,
markdownDocUrl
)
{
let
showdown
=
await
import
(
/* webpackChunkName: "showdown" */
'utils/showdown'
);
$
(
document
).
ready
(()
=>
{
let
converter
=
new
showdown
.
Converter
({
tables
:
true
});
fetch
(
markdownDocUrl
)
.
then
(
handleFetchError
)
.
then
(
response
=>
response
.
text
())
.
then
(
data
=>
{
$
(
domElt
).
addClass
(
'swh-showdown'
);
$
(
domElt
).
html
(
filterXSS
(
converter
.
makeHtml
(
data
)));
})
.
catch
(()
=>
{
$
(
domElt
).
text
(
'Readme bytes are not available'
);
});
});
}
export
async
function
renderOrgData
(
domElt
,
orgDocData
)
{
let
org
=
await
import
(
/* webpackChunkName: "org" */
'utils/org'
);
let
parser
=
new
org
.
Parser
();
let
orgDocument
=
parser
.
parse
(
orgDocData
,
{
toc
:
false
});
let
orgHTMLDocument
=
orgDocument
.
convert
(
org
.
ConverterHTML
,
{});
$
(
domElt
).
addClass
(
'swh-org'
);
$
(
domElt
).
html
(
filterXSS
(
orgHTMLDocument
.
toString
()));
// remove toc and section numbers to get consistent
// with other readme renderings
$
(
'.swh-org ul'
).
first
().
remove
();
$
(
'.section-number'
).
remove
();
}
export
function
renderOrg
(
domElt
,
orgDocUrl
)
{
$
(
document
).
ready
(()
=>
{
fetch
(
orgDocUrl
)
.
then
(
handleFetchError
)
.
then
(
response
=>
response
.
text
())
.
then
(
data
=>
{
renderOrgData
(
domElt
,
data
);
})
.
catch
(()
=>
{
$
(
domElt
).
text
(
'Readme bytes are not available'
);
});
});
}
export
function
renderTxt
(
domElt
,
txtDocUrl
)
{
$
(
document
).
ready
(()
=>
{
fetch
(
txtDocUrl
)
.
then
(
handleFetchError
)
.
then
(
response
=>
response
.
text
())
.
then
(
data
=>
{
let
orgMode
=
'-*- mode: org -*-'
;
if
(
data
.
indexOf
(
orgMode
)
!==
-
1
)
{
renderOrgData
(
domElt
,
data
.
replace
(
orgMode
,
''
));
}
else
{
$
(
domElt
).
addClass
(
'swh-readme-txt'
);
$
(
domElt
)
.
html
(
''
)
.
append
(
$
(
'<pre></pre>'
).
text
(
data
));
}
})
.
catch
(()
=>
{
$
(
domElt
).
text
(
'Readme bytes are not available'
);
});
});
}
File Metadata
Details
Attached
Mime Type
text/x-java
Expires
Jul 4 2025, 9:43 AM (5 w, 3 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3297623
Attached To
rDWAPPS Web applications
Event Timeline
Log In to Comment