mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-24 10:27:10 +02:00
Clipper: Resolves #1669: Handle special case of code block used on Microsoft website
This commit is contained in:
parent
5796dd2098
commit
21897a3cd4
62
CliClient/package-lock.json
generated
62
CliClient/package-lock.json
generated
@ -165,6 +165,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||||
},
|
},
|
||||||
|
"atob": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
|
||||||
|
},
|
||||||
"aws-sign2": {
|
"aws-sign2": {
|
||||||
"version": "0.7.0",
|
"version": "0.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
|
||||||
@ -453,6 +458,24 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"css": {
|
||||||
|
"version": "2.2.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz",
|
||||||
|
"integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==",
|
||||||
|
"requires": {
|
||||||
|
"inherits": "^2.0.3",
|
||||||
|
"source-map": "^0.6.1",
|
||||||
|
"source-map-resolve": "^0.5.2",
|
||||||
|
"urix": "^0.1.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"source-map": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"cssom": {
|
"cssom": {
|
||||||
"version": "0.3.6",
|
"version": "0.3.6",
|
||||||
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz",
|
||||||
@ -517,6 +540,11 @@
|
|||||||
"ms": "2.0.0"
|
"ms": "2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"decode-uri-component": {
|
||||||
|
"version": "0.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
|
||||||
|
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
|
||||||
|
},
|
||||||
"decompress-response": {
|
"decompress-response": {
|
||||||
"version": "3.3.0",
|
"version": "3.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
|
||||||
@ -1437,10 +1465,11 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"joplin-turndown": {
|
"joplin-turndown": {
|
||||||
"version": "4.0.12",
|
"version": "4.0.15",
|
||||||
"resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.12.tgz",
|
"resolved": "https://registry.npmjs.org/joplin-turndown/-/joplin-turndown-4.0.15.tgz",
|
||||||
"integrity": "sha512-HlxkcIiNFSMLBvYktoXqLLHFGuwQYlcPclo0Peeatw3cPe6iFqSsEgEGY/0bYM/fubA/zpPULrJcjST99BO9wQ==",
|
"integrity": "sha512-68ukx19XFbKtJ5hfPfPX6IDLFZ1+NI+CpxJZyDEXAN5rPkyGXDw9xnEfo1IYRd+fq56upjo5Fn7J1hTCQTVTIA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
|
"css": "^2.2.4",
|
||||||
"html-entities": "^1.2.1",
|
"html-entities": "^1.2.1",
|
||||||
"jsdom": "^11.9.0"
|
"jsdom": "^11.9.0"
|
||||||
}
|
}
|
||||||
@ -2441,6 +2470,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
|
||||||
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
|
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
|
||||||
},
|
},
|
||||||
|
"resolve-url": {
|
||||||
|
"version": "0.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
|
||||||
|
"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
|
||||||
|
},
|
||||||
"retry": {
|
"retry": {
|
||||||
"version": "0.10.1",
|
"version": "0.10.1",
|
||||||
"resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz",
|
"resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz",
|
||||||
@ -2598,6 +2632,23 @@
|
|||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
||||||
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
|
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
|
||||||
},
|
},
|
||||||
|
"source-map-resolve": {
|
||||||
|
"version": "0.5.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
|
||||||
|
"integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
|
||||||
|
"requires": {
|
||||||
|
"atob": "^2.1.1",
|
||||||
|
"decode-uri-component": "^0.2.0",
|
||||||
|
"resolve-url": "^0.2.1",
|
||||||
|
"source-map-url": "^0.4.0",
|
||||||
|
"urix": "^0.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source-map-url": {
|
||||||
|
"version": "0.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
|
||||||
|
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
|
||||||
|
},
|
||||||
"split-skip": {
|
"split-skip": {
|
||||||
"version": "0.0.2",
|
"version": "0.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.2.tgz",
|
||||||
@ -3114,6 +3165,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"urix": {
|
||||||
|
"version": "0.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
|
||||||
|
"integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
|
||||||
|
},
|
||||||
"url-parse": {
|
"url-parse": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz",
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
"html-minifier": "^3.5.15",
|
"html-minifier": "^3.5.15",
|
||||||
"image-data-uri": "^2.0.0",
|
"image-data-uri": "^2.0.0",
|
||||||
"image-type": "^3.0.0",
|
"image-type": "^3.0.0",
|
||||||
"joplin-turndown": "^4.0.12",
|
"joplin-turndown": "^4.0.15",
|
||||||
"joplin-turndown-plugin-gfm": "^1.0.8",
|
"joplin-turndown-plugin-gfm": "^1.0.8",
|
||||||
"jssha": "^2.3.0",
|
"jssha": "^2.3.0",
|
||||||
"levenshtein": "^1.0.5",
|
"levenshtein": "^1.0.5",
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
def ma_fonction():
|
```
|
||||||
"""
|
def ma_fonction():
|
||||||
C'est une super fonction
|
"""
|
||||||
"""
|
C'est une super fonction
|
||||||
pass
|
"""
|
||||||
|
pass
|
||||||
|
```
|
2
CliClient/tests/html_to_md/code_2.html
Normal file
2
CliClient/tests/html_to_md/code_2.html
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
<pre style="font-family: Menlo, Monaco, Consolas, "Courier New", monospace;"><strong><font color="#008080">thatsCode();</font></strong></pre>
|
||||||
|
<pre>thatsJustPre(); // In that case we do not have enough info to know if it is a codeblock or not, so we leave it as plain text</pre>
|
5
CliClient/tests/html_to_md/code_2.md
Normal file
5
CliClient/tests/html_to_md/code_2.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
```
|
||||||
|
thatsCode();
|
||||||
|
```
|
||||||
|
|
||||||
|
thatsJustPre(); // In that case we do not have enough info to know if it is a codeblock or not, so we leave it as plain text
|
@ -6,4 +6,6 @@ Some text, not an image, so it should remain escaped:
|
|||||||
|
|
||||||
But this is code so it can be unescaped:
|
But this is code so it can be unescaped:
|
||||||
|
|
||||||
<img src="http://test.com/image.png" />
|
```
|
||||||
|
<img src="http://test.com/image.png" />
|
||||||
|
```
|
@ -114,6 +114,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This sets the PRE elements computed style to the style attribute, so that
|
||||||
|
// the info can be exported and later processed by the htmlToMd converter
|
||||||
|
// to detect code blocks.
|
||||||
|
function hardcodePreStyles(doc) {
|
||||||
|
const preElements = doc.getElementsByTagName('pre');
|
||||||
|
|
||||||
|
for (const preElement of preElements) {
|
||||||
|
const fontFamily = getComputedStyle(preElement).getPropertyValue('font-family');
|
||||||
|
const fontFamilyArray = fontFamily.split(',').map(f => f.toLowerCase().trim());
|
||||||
|
if (fontFamilyArray.indexOf('monospace') >= 0) {
|
||||||
|
preElement.style.fontFamily = fontFamily;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function documentForReadability() {
|
function documentForReadability() {
|
||||||
// Readability directly change the passed document so clone it so as
|
// Readability directly change the passed document so clone it so as
|
||||||
// to preserve the original web page.
|
// to preserve the original web page.
|
||||||
@ -180,6 +195,7 @@
|
|||||||
|
|
||||||
} else if (command.name === "completePageHtml") {
|
} else if (command.name === "completePageHtml") {
|
||||||
|
|
||||||
|
hardcodePreStyles(document);
|
||||||
const cleanDocument = document.body.cloneNode(true);
|
const cleanDocument = document.body.cloneNode(true);
|
||||||
const imageSizes = getImageSizes(document, true);
|
const imageSizes = getImageSizes(document, true);
|
||||||
cleanUpElement(cleanDocument, imageSizes);
|
cleanUpElement(cleanDocument, imageSizes);
|
||||||
@ -187,6 +203,7 @@
|
|||||||
|
|
||||||
} else if (command.name === "selectedHtml") {
|
} else if (command.name === "selectedHtml") {
|
||||||
|
|
||||||
|
hardcodePreStyles(document);
|
||||||
const range = window.getSelection().getRangeAt(0);
|
const range = window.getSelection().getRangeAt(0);
|
||||||
const container = document.createElement('div');
|
const container = document.createElement('div');
|
||||||
container.appendChild(range.cloneContents());
|
container.appendChild(range.cloneContents());
|
||||||
|
@ -101,7 +101,7 @@
|
|||||||
"highlight.js": "^9.15.6",
|
"highlight.js": "^9.15.6",
|
||||||
"html-entities": "^1.2.1",
|
"html-entities": "^1.2.1",
|
||||||
"image-type": "^3.0.0",
|
"image-type": "^3.0.0",
|
||||||
"joplin-turndown": "^4.0.12",
|
"joplin-turndown": "^4.0.15",
|
||||||
"joplin-turndown-plugin-gfm": "^1.0.8",
|
"joplin-turndown-plugin-gfm": "^1.0.8",
|
||||||
"jssha": "^2.3.1",
|
"jssha": "^2.3.1",
|
||||||
"katex": "^0.10.0",
|
"katex": "^0.10.0",
|
||||||
|
@ -8,6 +8,7 @@ class HtmlToMd {
|
|||||||
const turndown = new TurndownService({
|
const turndown = new TurndownService({
|
||||||
headingStyle: 'atx',
|
headingStyle: 'atx',
|
||||||
anchorNames: options.anchorNames ? options.anchorNames.map(n => n.trim().toLowerCase()) : [],
|
anchorNames: options.anchorNames ? options.anchorNames.map(n => n.trim().toLowerCase()) : [],
|
||||||
|
codeBlockStyle: 'fenced',
|
||||||
})
|
})
|
||||||
turndown.use(turndownPluginGfm)
|
turndown.use(turndownPluginGfm)
|
||||||
turndown.remove('script');
|
turndown.remove('script');
|
||||||
|
Loading…
Reference in New Issue
Block a user