Skip to content

Commit

Permalink
feat(routes/html/txt): add extractHidden query string param (#1831)
Browse files Browse the repository at this point in the history
  • Loading branch information
Fdawgs committed Apr 14, 2024
1 parent ceb249d commit 38ae2d6
Show file tree
Hide file tree
Showing 4 changed files with 201 additions and 6 deletions.
3 changes: 1 addition & 2 deletions src/routes/html/txt/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,9 @@ async function route(server, options) {
},
handler: async (req, res) => {
const tidiedHtml = await server.tidyHtml(req.body, {
removeHidden: true,
removeHidden: req.query.extractHidden !== true,
});

console.log(tidiedHtml);
res.type("text/plain; charset=utf-8");
return server.htmlToTxt(tidiedHtml);
},
Expand Down
30 changes: 27 additions & 3 deletions src/routes/html/txt/route.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,24 +38,48 @@ describe("HTML-to-TXT route", () => {

it.each([
{
testName: "HTML file",
testName: "HTML file converted to TXT",
filePath: "./test_resources/test_files/html_valid.html",
headers: {
"content-type": "text/html",
},
},
{
testName: "XHTML file",
testName: "XHTML file file converted to TXT",
filePath: "./test_resources/test_files/xhtml_valid.xhtml",
headers: {
"content-type": "application/xhtml+xml",
},
},
])("Returns $testName converted to TXT", async ({ filePath, headers }) => {
{
testName: "HTML converted to TXT with hidden elements extracted",
filePath: "./test_resources/test_files/html_valid.html",
headers: {
"content-type": "text/html",
},
query: {
extractHidden: "true",
},
},
{
testName:
"XHTML file converted to TXT with hidden elements extracted",
filePath: "./test_resources/test_files/xhtml_valid.xhtml",
headers: {
"content-type": "application/xhtml+xml",
},
query: {
extractHidden: "true",
},
},
])("Returns $testName", async ({ filePath, headers, query }) => {
const response = await server.inject({
method: "POST",
url: "/",
body: await readFile(filePath),
query: {
...query,
},
headers: {
accept: "application/json, text/plain",
...headers,
Expand Down
168 changes: 167 additions & 1 deletion src/routes/html/txt/route.test.js.snap
Original file line number Diff line number Diff line change
@@ -1,5 +1,88 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`HTML-to-TXT route Returns HTML converted to TXT with hidden elements extracted 1`] = `
"I am a header
Lorem ipsum
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ac faucibus odio.
Vestibulum neque massa, scelerisque sit amet ligula eu, congue molestie mi. Praesent ut varius sem. Nullam at porttitor arcu, nec lacinia nisi. Ut ac dolor vitae odio interdum condimentum. Vivamus dapibus sodales ex, vitae malesuada ipsum cursus convallis. Maecenas sed egestas nulla, ac condimentum orci. Mauris diam felis, vulputate ac suscipit et, iaculis non est. Curabitur semper arcu ac ligula semper, nec luctus nisl blandit. Integer lacinia ante ac libero lobortis imperdiet. Nullam mollis convallis ipsum, ac accumsan nunc vehicula vitae. Nulla eget justo in felis tristique fringilla. Morbi sit amet tortor quis risus auctor condimentum. Morbi in ullamcorper elit. Nulla iaculis tellus sit amet mauris tempus fringilla.
Maecenas mauris lectus, lobortis et purus mattis, blandit dictum tellus.
* Maecenas non lorem quis tellus placerat varius.
* Nulla facilisi.
* Aenean congue fringilla justo ut aliquam.
* Mauris id ex erat. Nunc vulputate neque vitae justo facilisis, non condimentum ante sagittis.
* Morbi viverra semper lorem nec molestie.
* Maecenas tincidunt est efficitur ligula euismod, sit amet ornare est vulputate.
In non mauris justo. Duis vehicula mi vel mi pretium, a viverra erat efficitur. Cras aliquam est ac eros varius, id iaculis dui auctor. Duis pretium neque ligula, et pulvinar mi placerat et. Nulla nec nunc sit amet nunc posuere vestibulum. Ut id neque eget tortor mattis tristique. Donec ante est, blandit sit amet tristique vel, lacinia pulvinar arcu. Pellentesque scelerisque fermentum erat, id posuere justo pulvinar ut. Cras id eros sed enim aliquam lobortis. Sed lobortis nisl ut eros efficitur tincidunt. Cras justo mi, porttitor quis mattis vel, ultricies ut purus. Ut facilisis et lacus eu cursus.
Cras fringilla ipsum magna, in fringilla dui commodo a.
Lorem ipsum Lorem ipsum Lorem ipsum
1 In eleifend velit vitae libero sollicitudin euismod. Lorem
2 Cras fringilla ipsum magna, in fringilla dui commodo a. Ipsum
3 Aliquam erat volutpat. Lorem
4 Fusce vitae vestibulum velit. Lorem
5 Etiam vehicula luctus fermentum. Ipsum
Etiam vehicula luctus fermentum. In vel metus congue, pulvinar lectus vel, fermentum dui. Maecenas ante orci, egestas ut aliquet sit amet, sagittis a magna. Aliquam ante quam, pellentesque ut dignissim quis, laoreet eget est. Aliquam erat volutpat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Ut ullamcorper justo sapien, in cursus libero viverra eget. Vivamus auctor imperdiet urna, at pulvinar leo posuere laoreet. Suspendisse neque nisl, fringilla at iaculis scelerisque, ornare vel dolor. Ut et pulvinar nunc. Pellentesque fringilla mollis efficitur. Nullam venenatis commodo imperdiet. Morbi velit neque, semper quis lorem quis, efficitur dignissim ipsum. Ut ac lorem sed turpis imperdiet eleifend sit amet id sapien
This paragraph should not be displayed.
This paragraph should also not be displayed.
This paragraph should not be visible.
This paragraph should also not be visible.
I am a footer"
`;

exports[`HTML-to-TXT route Returns HTML file converted to TXT 1`] = `
"I am a header
Expand Down Expand Up @@ -75,7 +158,90 @@ Etiam vehicula luctus fermentum. In vel metus congue, pulvinar lectus vel, ferme
I am a footer"
`;

exports[`HTML-to-TXT route Returns XHTML file converted to TXT 1`] = `
exports[`HTML-to-TXT route Returns XHTML file converted to TXT with hidden elements extracted 1`] = `
"I am a header
Lorem ipsum
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ac faucibus odio.
Vestibulum neque massa, scelerisque sit amet ligula eu, congue molestie mi. Praesent ut varius sem. Nullam at porttitor arcu, nec lacinia nisi. Ut ac dolor vitae odio interdum condimentum. Vivamus dapibus sodales ex, vitae malesuada ipsum cursus convallis. Maecenas sed egestas nulla, ac condimentum orci. Mauris diam felis, vulputate ac suscipit et, iaculis non est. Curabitur semper arcu ac ligula semper, nec luctus nisl blandit. Integer lacinia ante ac libero lobortis imperdiet. Nullam mollis convallis ipsum, ac accumsan nunc vehicula vitae. Nulla eget justo in felis tristique fringilla. Morbi sit amet tortor quis risus auctor condimentum. Morbi in ullamcorper elit. Nulla iaculis tellus sit amet mauris tempus fringilla.
Maecenas mauris lectus, lobortis et purus mattis, blandit dictum tellus.
* Maecenas non lorem quis tellus placerat varius.
* Nulla facilisi.
* Aenean congue fringilla justo ut aliquam.
* Mauris id ex erat. Nunc vulputate neque vitae justo facilisis, non condimentum ante sagittis.
* Morbi viverra semper lorem nec molestie.
* Maecenas tincidunt est efficitur ligula euismod, sit amet ornare est vulputate.
In non mauris justo. Duis vehicula mi vel mi pretium, a viverra erat efficitur. Cras aliquam est ac eros varius, id iaculis dui auctor. Duis pretium neque ligula, et pulvinar mi placerat et. Nulla nec nunc sit amet nunc posuere vestibulum. Ut id neque eget tortor mattis tristique. Donec ante est, blandit sit amet tristique vel, lacinia pulvinar arcu. Pellentesque scelerisque fermentum erat, id posuere justo pulvinar ut. Cras id eros sed enim aliquam lobortis. Sed lobortis nisl ut eros efficitur tincidunt. Cras justo mi, porttitor quis mattis vel, ultricies ut purus. Ut facilisis et lacus eu cursus.
Cras fringilla ipsum magna, in fringilla dui commodo a.
Lorem ipsum Lorem ipsum Lorem ipsum
1 In eleifend velit vitae libero sollicitudin euismod. Lorem
2 Cras fringilla ipsum magna, in fringilla dui commodo a. Ipsum
3 Aliquam erat volutpat. Lorem
4 Fusce vitae vestibulum velit. Lorem
5 Etiam vehicula luctus fermentum. Ipsum
Etiam vehicula luctus fermentum. In vel metus congue, pulvinar lectus vel, fermentum dui. Maecenas ante orci, egestas ut aliquet sit amet, sagittis a magna. Aliquam ante quam, pellentesque ut dignissim quis, laoreet eget est. Aliquam erat volutpat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Ut ullamcorper justo sapien, in cursus libero viverra eget. Vivamus auctor imperdiet urna, at pulvinar leo posuere laoreet. Suspendisse neque nisl, fringilla at iaculis scelerisque, ornare vel dolor. Ut et pulvinar nunc. Pellentesque fringilla mollis efficitur. Nullam venenatis commodo imperdiet. Morbi velit neque, semper quis lorem quis, efficitur dignissim ipsum. Ut ac lorem sed turpis imperdiet eleifend sit amet id sapien
This paragraph should not be displayed.
This paragraph should also not be displayed.
This paragraph should not be visible.
This paragraph should also not be visible.
I am a footer"
`;

exports[`HTML-to-TXT route Returns XHTML file file converted to TXT 1`] = `
"I am a header
Lorem ipsum
Expand Down
6 changes: 6 additions & 0 deletions src/routes/html/txt/schema.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ const htmlToTxtPostSchema = {
operationId: "postHtmlToTxt",
consumes: ["application/xhtml+xml", "text/html"],
produces: ["application/json", "application/xml"],
query: S.object()
.additionalProperties(false)
.prop(
"extractHidden",
S.boolean().description("Force hidden text extraction")
),
response: {
200: {
content: {
Expand Down

0 comments on commit 38ae2d6

Please sign in to comment.