From a74ab6924ec6f00c8ab5d0d744748fc4c8cd2585 Mon Sep 17 00:00:00 2001 From: yash-chowdhary Date: Sat, 15 Feb 2020 22:26:28 +0800 Subject: [PATCH 01/10] Add copy code block functionality --- asset/css/markbind.css | 47 ++++++++++++++++ asset/js/clipboard.min.js | 7 +++ src/constants.js | 8 +++ src/plugins/copyCode.js | 53 +++++++++++++++++++ .../expected/markbind/css/markbind.css | 47 ++++++++++++++++ .../expected/markbind/css/markbind.css | 47 ++++++++++++++++ .../expected/markbind/css/markbind.css | 47 ++++++++++++++++ .../expected/markbind/css/markbind.css | 47 ++++++++++++++++ .../expected/markbind/css/markbind.css | 47 ++++++++++++++++ .../expected/markbind/css/markbind.css | 47 ++++++++++++++++ 10 files changed, 397 insertions(+) create mode 100644 asset/js/clipboard.min.js create mode 100644 src/plugins/copyCode.js diff --git a/asset/css/markbind.css b/asset/css/markbind.css index d38eb2b900..20c91acc16 100644 --- a/asset/css/markbind.css +++ b/asset/css/markbind.css @@ -369,3 +369,50 @@ li.footnote-item:target { transform: scale(1); opacity: 1; } + +/* "Copy" code block button */ +pre { + position: relative; +} + +pre > .copy-btn-icon { + background-color: #b4b4b9; + border-radius: 0.25rem; + color: #f8f8ff; + display: inline-block; + font-size: 75%; + line-height: 1; + padding: 0.25em 0.4em; + position: absolute; + right: 0.3em; + text-align: center; + top: 0.4em; + vertical-align: baseline; + white-space: nowrap; +} + +pre .copy-btn-icon:hover { + color: #555; +} + +.copy-btn-body { + align-items: center; + display: flex; +} + +.copy-btn-icon svg { + fill: currentColor; + margin-right: 0.4em; +} + +.copy-btn-label { + font-size: 11px; +} + +.copy-btn { + right: 10px; +} + +.copy-btn:focus { + outline: none; +} diff --git a/asset/js/clipboard.min.js b/asset/js/clipboard.min.js new file mode 100644 index 0000000000..02c549e35c --- /dev/null +++ b/asset/js/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.4 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n' + + '', + COPY_TO_CLIPBOARD: 'Copy', + // src/plugins/default/markbind-plugin-anchors.js ANCHOR_HTML: '', HEADER_TAGS: 'h1, h2, h3, h4, h5, h6', diff --git a/src/plugins/copyCode.js b/src/plugins/copyCode.js new file mode 100644 index 0000000000..fa7a0464fc --- /dev/null +++ b/src/plugins/copyCode.js @@ -0,0 +1,53 @@ +const cheerio = module.parent.require('cheerio'); + +const { + COPIED_TO_CLIPBOARD, + COPY_ICON, + COPY_TO_CLIPBOARD, +} = require('../constants'); + +function getButtonHTML() { + const html = ``; + return html; +} + +function buildCopyCodeBlockScript() { + return ` + + `; +} + + +module.exports = { + getScripts: () => buildCopyCodeBlockScript(), + postRender: (content) => { + const $ = cheerio.load(content, { xmlMode: false }); + const codeBlockSelector = 'pre'; + const buttonHTML = getButtonHTML(); + $(codeBlockSelector).each((i, codeBlock) => { + $(codeBlock).append(buttonHTML); + }); + return $.html(); + }, +}; diff --git a/test/functional/test_site/expected/markbind/css/markbind.css b/test/functional/test_site/expected/markbind/css/markbind.css index d38eb2b900..de00fcd86b 100644 --- a/test/functional/test_site/expected/markbind/css/markbind.css +++ b/test/functional/test_site/expected/markbind/css/markbind.css @@ -369,3 +369,50 @@ li.footnote-item:target { transform: scale(1); opacity: 1; } + +/* "Copy" code block button */ +pre { + position: relative; +} + +pre > .btnIcon { + background-color: #b4b4b9; + border-radius: 0.25rem; + color: #f8f8ff; + display: inline-block; + font-size: 75%; + line-height: 1; + padding: 0.25em 0.4em; + position: absolute; + right: 0.3em; + text-align: center; + top: 0.4em; + vertical-align: baseline; + white-space: nowrap; +} + +pre .btnIcon:hover { + color: #555; +} + +.copy-btn-body { + align-items: center; + display: flex; +} + +.btnIcon svg { + fill: currentColor; + margin-right: 0.4em; +} + +.copy-btn-label { + font-size: 11px; +} + +.btnCopy { + right: 10px; +} + +.btnCopy:focus { + outline: none; +} diff --git a/test/functional/test_site_algolia_plugin/expected/markbind/css/markbind.css b/test/functional/test_site_algolia_plugin/expected/markbind/css/markbind.css index d38eb2b900..de00fcd86b 100644 --- a/test/functional/test_site_algolia_plugin/expected/markbind/css/markbind.css +++ b/test/functional/test_site_algolia_plugin/expected/markbind/css/markbind.css @@ -369,3 +369,50 @@ li.footnote-item:target { transform: scale(1); opacity: 1; } + +/* "Copy" code block button */ +pre { + position: relative; +} + +pre > .btnIcon { + background-color: #b4b4b9; + border-radius: 0.25rem; + color: #f8f8ff; + display: inline-block; + font-size: 75%; + line-height: 1; + padding: 0.25em 0.4em; + position: absolute; + right: 0.3em; + text-align: center; + top: 0.4em; + vertical-align: baseline; + white-space: nowrap; +} + +pre .btnIcon:hover { + color: #555; +} + +.copy-btn-body { + align-items: center; + display: flex; +} + +.btnIcon svg { + fill: currentColor; + margin-right: 0.4em; +} + +.copy-btn-label { + font-size: 11px; +} + +.btnCopy { + right: 10px; +} + +.btnCopy:focus { + outline: none; +} diff --git a/test/functional/test_site_convert/expected/markbind/css/markbind.css b/test/functional/test_site_convert/expected/markbind/css/markbind.css index d38eb2b900..de00fcd86b 100644 --- a/test/functional/test_site_convert/expected/markbind/css/markbind.css +++ b/test/functional/test_site_convert/expected/markbind/css/markbind.css @@ -369,3 +369,50 @@ li.footnote-item:target { transform: scale(1); opacity: 1; } + +/* "Copy" code block button */ +pre { + position: relative; +} + +pre > .btnIcon { + background-color: #b4b4b9; + border-radius: 0.25rem; + color: #f8f8ff; + display: inline-block; + font-size: 75%; + line-height: 1; + padding: 0.25em 0.4em; + position: absolute; + right: 0.3em; + text-align: center; + top: 0.4em; + vertical-align: baseline; + white-space: nowrap; +} + +pre .btnIcon:hover { + color: #555; +} + +.copy-btn-body { + align-items: center; + display: flex; +} + +.btnIcon svg { + fill: currentColor; + margin-right: 0.4em; +} + +.copy-btn-label { + font-size: 11px; +} + +.btnCopy { + right: 10px; +} + +.btnCopy:focus { + outline: none; +} diff --git a/test/functional/test_site_expressive_layout/expected/markbind/css/markbind.css b/test/functional/test_site_expressive_layout/expected/markbind/css/markbind.css index d38eb2b900..de00fcd86b 100644 --- a/test/functional/test_site_expressive_layout/expected/markbind/css/markbind.css +++ b/test/functional/test_site_expressive_layout/expected/markbind/css/markbind.css @@ -369,3 +369,50 @@ li.footnote-item:target { transform: scale(1); opacity: 1; } + +/* "Copy" code block button */ +pre { + position: relative; +} + +pre > .btnIcon { + background-color: #b4b4b9; + border-radius: 0.25rem; + color: #f8f8ff; + display: inline-block; + font-size: 75%; + line-height: 1; + padding: 0.25em 0.4em; + position: absolute; + right: 0.3em; + text-align: center; + top: 0.4em; + vertical-align: baseline; + white-space: nowrap; +} + +pre .btnIcon:hover { + color: #555; +} + +.copy-btn-body { + align-items: center; + display: flex; +} + +.btnIcon svg { + fill: currentColor; + margin-right: 0.4em; +} + +.copy-btn-label { + font-size: 11px; +} + +.btnCopy { + right: 10px; +} + +.btnCopy:focus { + outline: none; +} diff --git a/test/functional/test_site_templates/test_default/expected/markbind/css/markbind.css b/test/functional/test_site_templates/test_default/expected/markbind/css/markbind.css index d38eb2b900..de00fcd86b 100644 --- a/test/functional/test_site_templates/test_default/expected/markbind/css/markbind.css +++ b/test/functional/test_site_templates/test_default/expected/markbind/css/markbind.css @@ -369,3 +369,50 @@ li.footnote-item:target { transform: scale(1); opacity: 1; } + +/* "Copy" code block button */ +pre { + position: relative; +} + +pre > .btnIcon { + background-color: #b4b4b9; + border-radius: 0.25rem; + color: #f8f8ff; + display: inline-block; + font-size: 75%; + line-height: 1; + padding: 0.25em 0.4em; + position: absolute; + right: 0.3em; + text-align: center; + top: 0.4em; + vertical-align: baseline; + white-space: nowrap; +} + +pre .btnIcon:hover { + color: #555; +} + +.copy-btn-body { + align-items: center; + display: flex; +} + +.btnIcon svg { + fill: currentColor; + margin-right: 0.4em; +} + +.copy-btn-label { + font-size: 11px; +} + +.btnCopy { + right: 10px; +} + +.btnCopy:focus { + outline: none; +} diff --git a/test/functional/test_site_templates/test_minimal/expected/markbind/css/markbind.css b/test/functional/test_site_templates/test_minimal/expected/markbind/css/markbind.css index d38eb2b900..de00fcd86b 100644 --- a/test/functional/test_site_templates/test_minimal/expected/markbind/css/markbind.css +++ b/test/functional/test_site_templates/test_minimal/expected/markbind/css/markbind.css @@ -369,3 +369,50 @@ li.footnote-item:target { transform: scale(1); opacity: 1; } + +/* "Copy" code block button */ +pre { + position: relative; +} + +pre > .btnIcon { + background-color: #b4b4b9; + border-radius: 0.25rem; + color: #f8f8ff; + display: inline-block; + font-size: 75%; + line-height: 1; + padding: 0.25em 0.4em; + position: absolute; + right: 0.3em; + text-align: center; + top: 0.4em; + vertical-align: baseline; + white-space: nowrap; +} + +pre .btnIcon:hover { + color: #555; +} + +.copy-btn-body { + align-items: center; + display: flex; +} + +.btnIcon svg { + fill: currentColor; + margin-right: 0.4em; +} + +.copy-btn-label { + font-size: 11px; +} + +.btnCopy { + right: 10px; +} + +.btnCopy:focus { + outline: none; +} From 7de98310417d1e35c9001527d60f007a6b4acebc Mon Sep 17 00:00:00 2001 From: yash-chowdhary Date: Sat, 15 Feb 2020 22:48:06 +0800 Subject: [PATCH 02/10] Add dist files in /test --- .../test_site/expected/markbind/js/clipboard.min.js | 7 +++++++ .../expected/markbind/js/clipboard.min.js | 7 +++++++ .../expected/markbind/js/clipboard.min.js | 7 +++++++ .../expected/markbind/js/clipboard.min.js | 7 +++++++ .../test_default/expected/markbind/js/clipboard.min.js | 7 +++++++ .../test_minimal/expected/markbind/js/clipboard.min.js | 7 +++++++ 6 files changed, 42 insertions(+) create mode 100644 test/functional/test_site/expected/markbind/js/clipboard.min.js create mode 100644 test/functional/test_site_algolia_plugin/expected/markbind/js/clipboard.min.js create mode 100644 test/functional/test_site_convert/expected/markbind/js/clipboard.min.js create mode 100644 test/functional/test_site_expressive_layout/expected/markbind/js/clipboard.min.js create mode 100644 test/functional/test_site_templates/test_default/expected/markbind/js/clipboard.min.js create mode 100644 test/functional/test_site_templates/test_minimal/expected/markbind/js/clipboard.min.js diff --git a/test/functional/test_site/expected/markbind/js/clipboard.min.js b/test/functional/test_site/expected/markbind/js/clipboard.min.js new file mode 100644 index 0000000000..02c549e35c --- /dev/null +++ b/test/functional/test_site/expected/markbind/js/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.4 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n Date: Sat, 15 Feb 2020 23:18:48 +0800 Subject: [PATCH 03/10] Document plugin in user guide --- docs/images/copyCode.png | Bin 0 -> 48375 bytes docs/userGuide/plugins/copyCode.mbdf | 20 ++++++++++++++++++++ docs/userGuide/usingPlugins.md | 1 + 3 files changed, 21 insertions(+) create mode 100644 docs/images/copyCode.png create mode 100644 docs/userGuide/plugins/copyCode.mbdf diff --git a/docs/images/copyCode.png b/docs/images/copyCode.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd900728ab94d1aef1d6c7e29b1af36d98cf561 GIT binary patch literal 48375 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 + diff --git a/docs/userGuide/usingPlugins.md b/docs/userGuide/usingPlugins.md index 4ae21f7376..7b6d567e4e 100644 --- a/docs/userGuide/usingPlugins.md +++ b/docs/userGuide/usingPlugins.md @@ -207,6 +207,7 @@ Disabling the `anchors` plugin: MarkBind has a set of built-in plugins that can be used immediately without installation. + From 39e772d1fd23c20f43f4701c645916a3843a8999 Mon Sep 17 00:00:00 2001 From: yash-chowdhary Date: Sat, 15 Feb 2020 23:27:31 +0800 Subject: [PATCH 04/10] Update site test css --- .../test_site/expected/markbind/css/markbind.css | 10 +++++----- .../expected/markbind/css/markbind.css | 10 +++++----- .../expected/markbind/css/markbind.css | 10 +++++----- .../expected/markbind/css/markbind.css | 10 +++++----- .../test_default/expected/markbind/css/markbind.css | 10 +++++----- .../test_minimal/expected/markbind/css/markbind.css | 10 +++++----- 6 files changed, 30 insertions(+), 30 deletions(-) diff --git a/test/functional/test_site/expected/markbind/css/markbind.css b/test/functional/test_site/expected/markbind/css/markbind.css index de00fcd86b..20c91acc16 100644 --- a/test/functional/test_site/expected/markbind/css/markbind.css +++ b/test/functional/test_site/expected/markbind/css/markbind.css @@ -375,7 +375,7 @@ pre { position: relative; } -pre > .btnIcon { +pre > .copy-btn-icon { background-color: #b4b4b9; border-radius: 0.25rem; color: #f8f8ff; @@ -391,7 +391,7 @@ pre > .btnIcon { white-space: nowrap; } -pre .btnIcon:hover { +pre .copy-btn-icon:hover { color: #555; } @@ -400,7 +400,7 @@ pre .btnIcon:hover { display: flex; } -.btnIcon svg { +.copy-btn-icon svg { fill: currentColor; margin-right: 0.4em; } @@ -409,10 +409,10 @@ pre .btnIcon:hover { font-size: 11px; } -.btnCopy { +.copy-btn { right: 10px; } -.btnCopy:focus { +.copy-btn:focus { outline: none; } diff --git a/test/functional/test_site_algolia_plugin/expected/markbind/css/markbind.css b/test/functional/test_site_algolia_plugin/expected/markbind/css/markbind.css index de00fcd86b..20c91acc16 100644 --- a/test/functional/test_site_algolia_plugin/expected/markbind/css/markbind.css +++ b/test/functional/test_site_algolia_plugin/expected/markbind/css/markbind.css @@ -375,7 +375,7 @@ pre { position: relative; } -pre > .btnIcon { +pre > .copy-btn-icon { background-color: #b4b4b9; border-radius: 0.25rem; color: #f8f8ff; @@ -391,7 +391,7 @@ pre > .btnIcon { white-space: nowrap; } -pre .btnIcon:hover { +pre .copy-btn-icon:hover { color: #555; } @@ -400,7 +400,7 @@ pre .btnIcon:hover { display: flex; } -.btnIcon svg { +.copy-btn-icon svg { fill: currentColor; margin-right: 0.4em; } @@ -409,10 +409,10 @@ pre .btnIcon:hover { font-size: 11px; } -.btnCopy { +.copy-btn { right: 10px; } -.btnCopy:focus { +.copy-btn:focus { outline: none; } diff --git a/test/functional/test_site_convert/expected/markbind/css/markbind.css b/test/functional/test_site_convert/expected/markbind/css/markbind.css index de00fcd86b..20c91acc16 100644 --- a/test/functional/test_site_convert/expected/markbind/css/markbind.css +++ b/test/functional/test_site_convert/expected/markbind/css/markbind.css @@ -375,7 +375,7 @@ pre { position: relative; } -pre > .btnIcon { +pre > .copy-btn-icon { background-color: #b4b4b9; border-radius: 0.25rem; color: #f8f8ff; @@ -391,7 +391,7 @@ pre > .btnIcon { white-space: nowrap; } -pre .btnIcon:hover { +pre .copy-btn-icon:hover { color: #555; } @@ -400,7 +400,7 @@ pre .btnIcon:hover { display: flex; } -.btnIcon svg { +.copy-btn-icon svg { fill: currentColor; margin-right: 0.4em; } @@ -409,10 +409,10 @@ pre .btnIcon:hover { font-size: 11px; } -.btnCopy { +.copy-btn { right: 10px; } -.btnCopy:focus { +.copy-btn:focus { outline: none; } diff --git a/test/functional/test_site_expressive_layout/expected/markbind/css/markbind.css b/test/functional/test_site_expressive_layout/expected/markbind/css/markbind.css index de00fcd86b..20c91acc16 100644 --- a/test/functional/test_site_expressive_layout/expected/markbind/css/markbind.css +++ b/test/functional/test_site_expressive_layout/expected/markbind/css/markbind.css @@ -375,7 +375,7 @@ pre { position: relative; } -pre > .btnIcon { +pre > .copy-btn-icon { background-color: #b4b4b9; border-radius: 0.25rem; color: #f8f8ff; @@ -391,7 +391,7 @@ pre > .btnIcon { white-space: nowrap; } -pre .btnIcon:hover { +pre .copy-btn-icon:hover { color: #555; } @@ -400,7 +400,7 @@ pre .btnIcon:hover { display: flex; } -.btnIcon svg { +.copy-btn-icon svg { fill: currentColor; margin-right: 0.4em; } @@ -409,10 +409,10 @@ pre .btnIcon:hover { font-size: 11px; } -.btnCopy { +.copy-btn { right: 10px; } -.btnCopy:focus { +.copy-btn:focus { outline: none; } diff --git a/test/functional/test_site_templates/test_default/expected/markbind/css/markbind.css b/test/functional/test_site_templates/test_default/expected/markbind/css/markbind.css index de00fcd86b..20c91acc16 100644 --- a/test/functional/test_site_templates/test_default/expected/markbind/css/markbind.css +++ b/test/functional/test_site_templates/test_default/expected/markbind/css/markbind.css @@ -375,7 +375,7 @@ pre { position: relative; } -pre > .btnIcon { +pre > .copy-btn-icon { background-color: #b4b4b9; border-radius: 0.25rem; color: #f8f8ff; @@ -391,7 +391,7 @@ pre > .btnIcon { white-space: nowrap; } -pre .btnIcon:hover { +pre .copy-btn-icon:hover { color: #555; } @@ -400,7 +400,7 @@ pre .btnIcon:hover { display: flex; } -.btnIcon svg { +.copy-btn-icon svg { fill: currentColor; margin-right: 0.4em; } @@ -409,10 +409,10 @@ pre .btnIcon:hover { font-size: 11px; } -.btnCopy { +.copy-btn { right: 10px; } -.btnCopy:focus { +.copy-btn:focus { outline: none; } diff --git a/test/functional/test_site_templates/test_minimal/expected/markbind/css/markbind.css b/test/functional/test_site_templates/test_minimal/expected/markbind/css/markbind.css index de00fcd86b..20c91acc16 100644 --- a/test/functional/test_site_templates/test_minimal/expected/markbind/css/markbind.css +++ b/test/functional/test_site_templates/test_minimal/expected/markbind/css/markbind.css @@ -375,7 +375,7 @@ pre { position: relative; } -pre > .btnIcon { +pre > .copy-btn-icon { background-color: #b4b4b9; border-radius: 0.25rem; color: #f8f8ff; @@ -391,7 +391,7 @@ pre > .btnIcon { white-space: nowrap; } -pre .btnIcon:hover { +pre .copy-btn-icon:hover { color: #555; } @@ -400,7 +400,7 @@ pre .btnIcon:hover { display: flex; } -.btnIcon svg { +.copy-btn-icon svg { fill: currentColor; margin-right: 0.4em; } @@ -409,10 +409,10 @@ pre .btnIcon:hover { font-size: 11px; } -.btnCopy { +.copy-btn { right: 10px; } -.btnCopy:focus { +.copy-btn:focus { outline: none; } From 7019772b262d8cf27464f0ba3c95a31ba7a37399 Mon Sep 17 00:00:00 2001 From: yash-chowdhary Date: Mon, 17 Feb 2020 00:33:50 +0800 Subject: [PATCH 05/10] Remove dependency on clipboardJS --- asset/js/clipboard.min.js | 7 -- src/constants.js | 9 +-- src/plugins/copyCode.js | 66 +++++++++++++------ .../expected/markbind/js/clipboard.min.js | 7 -- .../expected/markbind/js/clipboard.min.js | 7 -- .../expected/markbind/js/clipboard.min.js | 7 -- .../expected/markbind/js/clipboard.min.js | 7 -- .../expected/markbind/js/clipboard.min.js | 7 -- .../expected/markbind/js/clipboard.min.js | 7 -- 9 files changed, 50 insertions(+), 74 deletions(-) delete mode 100644 asset/js/clipboard.min.js delete mode 100644 test/functional/test_site/expected/markbind/js/clipboard.min.js delete mode 100644 test/functional/test_site_algolia_plugin/expected/markbind/js/clipboard.min.js delete mode 100644 test/functional/test_site_convert/expected/markbind/js/clipboard.min.js delete mode 100644 test/functional/test_site_expressive_layout/expected/markbind/js/clipboard.min.js delete mode 100644 test/functional/test_site_templates/test_default/expected/markbind/js/clipboard.min.js delete mode 100644 test/functional/test_site_templates/test_minimal/expected/markbind/js/clipboard.min.js diff --git a/asset/js/clipboard.min.js b/asset/js/clipboard.min.js deleted file mode 100644 index 02c549e35c..0000000000 --- a/asset/js/clipboard.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * clipboard.js v2.0.4 - * https://zenorocha.github.io/clipboard.js - * - * Licensed MIT © Zeno Rocha - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n' - + '', + COPY_ICON: '', COPY_TO_CLIPBOARD: 'Copy', // src/plugins/default/markbind-plugin-anchors.js diff --git a/src/plugins/copyCode.js b/src/plugins/copyCode.js index fa7a0464fc..e36519d69d 100644 --- a/src/plugins/copyCode.js +++ b/src/plugins/copyCode.js @@ -16,31 +16,55 @@ function getButtonHTML() { return html; } -function buildCopyCodeBlockScript() { - return ` - - `; +function getCopyCodeBlockScript() { + return ``; } module.exports = { - getScripts: () => buildCopyCodeBlockScript(), + getScripts: () => getCopyCodeBlockScript(), postRender: (content) => { const $ = cheerio.load(content, { xmlMode: false }); const codeBlockSelector = 'pre'; diff --git a/test/functional/test_site/expected/markbind/js/clipboard.min.js b/test/functional/test_site/expected/markbind/js/clipboard.min.js deleted file mode 100644 index 02c549e35c..0000000000 --- a/test/functional/test_site/expected/markbind/js/clipboard.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * clipboard.js v2.0.4 - * https://zenorocha.github.io/clipboard.js - * - * Licensed MIT © Zeno Rocha - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n Date: Mon, 17 Feb 2020 18:17:11 +0800 Subject: [PATCH 06/10] Address review changes --- asset/css/markbind.css | 12 +-- ...opyCode.mbdf => codeBlockCopyButtons.mbdf} | 6 +- docs/userGuide/usingPlugins.md | 2 +- src/constants.js | 9 --- src/plugins/codeBlockCopyButtons.js | 79 +++++++++++++++++++ src/plugins/copyCode.js | 77 ------------------ .../expected/markbind/css/markbind.css | 12 +-- .../expected/markbind/css/markbind.css | 12 +-- .../expected/markbind/css/markbind.css | 12 +-- .../expected/markbind/css/markbind.css | 12 +-- .../expected/markbind/css/markbind.css | 12 +-- .../expected/markbind/css/markbind.css | 12 +-- 12 files changed, 111 insertions(+), 146 deletions(-) rename docs/userGuide/plugins/{copyCode.mbdf => codeBlockCopyButtons.mbdf} (59%) create mode 100644 src/plugins/codeBlockCopyButtons.js delete mode 100644 src/plugins/copyCode.js diff --git a/asset/css/markbind.css b/asset/css/markbind.css index 20c91acc16..259349fdf1 100644 --- a/asset/css/markbind.css +++ b/asset/css/markbind.css @@ -375,7 +375,7 @@ pre { position: relative; } -pre > .copy-btn-icon { +.copy-btn { background-color: #b4b4b9; border-radius: 0.25rem; color: #f8f8ff; @@ -384,14 +384,14 @@ pre > .copy-btn-icon { line-height: 1; padding: 0.25em 0.4em; position: absolute; - right: 0.3em; + right: 0.5em; text-align: center; top: 0.4em; vertical-align: baseline; white-space: nowrap; } -pre .copy-btn-icon:hover { +.copy-btn:hover { color: #555; } @@ -400,7 +400,7 @@ pre .copy-btn-icon:hover { display: flex; } -.copy-btn-icon svg { +.copy-btn svg { fill: currentColor; margin-right: 0.4em; } @@ -409,10 +409,6 @@ pre .copy-btn-icon:hover { font-size: 11px; } -.copy-btn { - right: 10px; -} - .copy-btn:focus { outline: none; } diff --git a/docs/userGuide/plugins/copyCode.mbdf b/docs/userGuide/plugins/codeBlockCopyButtons.mbdf similarity index 59% rename from docs/userGuide/plugins/copyCode.mbdf rename to docs/userGuide/plugins/codeBlockCopyButtons.mbdf index f8d3f03561..4681894ab1 100644 --- a/docs/userGuide/plugins/copyCode.mbdf +++ b/docs/userGuide/plugins/codeBlockCopyButtons.mbdf @@ -1,15 +1,15 @@ -#### `copyCode`: Enabling code-blocks to be copied +#### `codeBlockCopyButtons`: Enabling code-blocks to be copied This plugin allows you to copy code in code-blocks on a button-click. -To enable it, simply add `copyCode` to your site's plugins. +To enable it, simply add `codeBlockCopyButtons` to your site's plugins. ```js site.json { ... "plugins": [ - "copyCode" + "codeBlockCopyButtons" ], } ``` diff --git a/docs/userGuide/usingPlugins.md b/docs/userGuide/usingPlugins.md index 7b6d567e4e..86687a1ad6 100644 --- a/docs/userGuide/usingPlugins.md +++ b/docs/userGuide/usingPlugins.md @@ -207,7 +207,7 @@ Disabling the `anchors` plugin: MarkBind has a set of built-in plugins that can be used immediately without installation. - + diff --git a/src/constants.js b/src/constants.js index 4297d20790..35d7c0a41e 100644 --- a/src/constants.js +++ b/src/constants.js @@ -66,15 +66,6 @@ module.exports = { ALGOLIA_JS_URL: 'https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js', ALGOLIA_INPUT_SELECTOR: '#algolia-search-input', - // src/plugins/copyCode.js - COPIED_TO_CLIPBOARD: 'Copied!', - COPY_ICON: '', - COPY_TO_CLIPBOARD: 'Copy', - // src/plugins/default/markbind-plugin-anchors.js ANCHOR_HTML: '', HEADER_TAGS: 'h1, h2, h3, h4, h5, h6', diff --git a/src/plugins/codeBlockCopyButtons.js b/src/plugins/codeBlockCopyButtons.js new file mode 100644 index 0000000000..1dea1dc216 --- /dev/null +++ b/src/plugins/codeBlockCopyButtons.js @@ -0,0 +1,79 @@ +const cheerio = module.parent.require('cheerio'); + +const COPIED_TO_CLIPBOARD = 'Copied!'; +const COPY_ICON = ''; +const COPY_TO_CLIPBOARD = 'Copy'; + +function getButtonHTML() { + const html = ``; + return html; +} + +function getCopyCodeBlockScript() { + return ``; +} + + +module.exports = { + getScripts: () => getCopyCodeBlockScript(), + postRender: (content) => { + const $ = cheerio.load(content, { xmlMode: false }); + const codeBlockSelector = 'pre'; + const buttonHTML = getButtonHTML(); + $(codeBlockSelector).each((i, codeBlock) => { + $(codeBlock).append(buttonHTML); + }); + return $.html(); + }, +}; diff --git a/src/plugins/copyCode.js b/src/plugins/copyCode.js deleted file mode 100644 index e36519d69d..0000000000 --- a/src/plugins/copyCode.js +++ /dev/null @@ -1,77 +0,0 @@ -const cheerio = module.parent.require('cheerio'); - -const { - COPIED_TO_CLIPBOARD, - COPY_ICON, - COPY_TO_CLIPBOARD, -} = require('../constants'); - -function getButtonHTML() { - const html = ``; - return html; -} - -function getCopyCodeBlockScript() { - return ``; -} - - -module.exports = { - getScripts: () => getCopyCodeBlockScript(), - postRender: (content) => { - const $ = cheerio.load(content, { xmlMode: false }); - const codeBlockSelector = 'pre'; - const buttonHTML = getButtonHTML(); - $(codeBlockSelector).each((i, codeBlock) => { - $(codeBlock).append(buttonHTML); - }); - return $.html(); - }, -}; diff --git a/test/functional/test_site/expected/markbind/css/markbind.css b/test/functional/test_site/expected/markbind/css/markbind.css index 20c91acc16..259349fdf1 100644 --- a/test/functional/test_site/expected/markbind/css/markbind.css +++ b/test/functional/test_site/expected/markbind/css/markbind.css @@ -375,7 +375,7 @@ pre { position: relative; } -pre > .copy-btn-icon { +.copy-btn { background-color: #b4b4b9; border-radius: 0.25rem; color: #f8f8ff; @@ -384,14 +384,14 @@ pre > .copy-btn-icon { line-height: 1; padding: 0.25em 0.4em; position: absolute; - right: 0.3em; + right: 0.5em; text-align: center; top: 0.4em; vertical-align: baseline; white-space: nowrap; } -pre .copy-btn-icon:hover { +.copy-btn:hover { color: #555; } @@ -400,7 +400,7 @@ pre .copy-btn-icon:hover { display: flex; } -.copy-btn-icon svg { +.copy-btn svg { fill: currentColor; margin-right: 0.4em; } @@ -409,10 +409,6 @@ pre .copy-btn-icon:hover { font-size: 11px; } -.copy-btn { - right: 10px; -} - .copy-btn:focus { outline: none; } diff --git a/test/functional/test_site_algolia_plugin/expected/markbind/css/markbind.css b/test/functional/test_site_algolia_plugin/expected/markbind/css/markbind.css index 20c91acc16..259349fdf1 100644 --- a/test/functional/test_site_algolia_plugin/expected/markbind/css/markbind.css +++ b/test/functional/test_site_algolia_plugin/expected/markbind/css/markbind.css @@ -375,7 +375,7 @@ pre { position: relative; } -pre > .copy-btn-icon { +.copy-btn { background-color: #b4b4b9; border-radius: 0.25rem; color: #f8f8ff; @@ -384,14 +384,14 @@ pre > .copy-btn-icon { line-height: 1; padding: 0.25em 0.4em; position: absolute; - right: 0.3em; + right: 0.5em; text-align: center; top: 0.4em; vertical-align: baseline; white-space: nowrap; } -pre .copy-btn-icon:hover { +.copy-btn:hover { color: #555; } @@ -400,7 +400,7 @@ pre .copy-btn-icon:hover { display: flex; } -.copy-btn-icon svg { +.copy-btn svg { fill: currentColor; margin-right: 0.4em; } @@ -409,10 +409,6 @@ pre .copy-btn-icon:hover { font-size: 11px; } -.copy-btn { - right: 10px; -} - .copy-btn:focus { outline: none; } diff --git a/test/functional/test_site_convert/expected/markbind/css/markbind.css b/test/functional/test_site_convert/expected/markbind/css/markbind.css index 20c91acc16..259349fdf1 100644 --- a/test/functional/test_site_convert/expected/markbind/css/markbind.css +++ b/test/functional/test_site_convert/expected/markbind/css/markbind.css @@ -375,7 +375,7 @@ pre { position: relative; } -pre > .copy-btn-icon { +.copy-btn { background-color: #b4b4b9; border-radius: 0.25rem; color: #f8f8ff; @@ -384,14 +384,14 @@ pre > .copy-btn-icon { line-height: 1; padding: 0.25em 0.4em; position: absolute; - right: 0.3em; + right: 0.5em; text-align: center; top: 0.4em; vertical-align: baseline; white-space: nowrap; } -pre .copy-btn-icon:hover { +.copy-btn:hover { color: #555; } @@ -400,7 +400,7 @@ pre .copy-btn-icon:hover { display: flex; } -.copy-btn-icon svg { +.copy-btn svg { fill: currentColor; margin-right: 0.4em; } @@ -409,10 +409,6 @@ pre .copy-btn-icon:hover { font-size: 11px; } -.copy-btn { - right: 10px; -} - .copy-btn:focus { outline: none; } diff --git a/test/functional/test_site_expressive_layout/expected/markbind/css/markbind.css b/test/functional/test_site_expressive_layout/expected/markbind/css/markbind.css index 20c91acc16..259349fdf1 100644 --- a/test/functional/test_site_expressive_layout/expected/markbind/css/markbind.css +++ b/test/functional/test_site_expressive_layout/expected/markbind/css/markbind.css @@ -375,7 +375,7 @@ pre { position: relative; } -pre > .copy-btn-icon { +.copy-btn { background-color: #b4b4b9; border-radius: 0.25rem; color: #f8f8ff; @@ -384,14 +384,14 @@ pre > .copy-btn-icon { line-height: 1; padding: 0.25em 0.4em; position: absolute; - right: 0.3em; + right: 0.5em; text-align: center; top: 0.4em; vertical-align: baseline; white-space: nowrap; } -pre .copy-btn-icon:hover { +.copy-btn:hover { color: #555; } @@ -400,7 +400,7 @@ pre .copy-btn-icon:hover { display: flex; } -.copy-btn-icon svg { +.copy-btn svg { fill: currentColor; margin-right: 0.4em; } @@ -409,10 +409,6 @@ pre .copy-btn-icon:hover { font-size: 11px; } -.copy-btn { - right: 10px; -} - .copy-btn:focus { outline: none; } diff --git a/test/functional/test_site_templates/test_default/expected/markbind/css/markbind.css b/test/functional/test_site_templates/test_default/expected/markbind/css/markbind.css index 20c91acc16..259349fdf1 100644 --- a/test/functional/test_site_templates/test_default/expected/markbind/css/markbind.css +++ b/test/functional/test_site_templates/test_default/expected/markbind/css/markbind.css @@ -375,7 +375,7 @@ pre { position: relative; } -pre > .copy-btn-icon { +.copy-btn { background-color: #b4b4b9; border-radius: 0.25rem; color: #f8f8ff; @@ -384,14 +384,14 @@ pre > .copy-btn-icon { line-height: 1; padding: 0.25em 0.4em; position: absolute; - right: 0.3em; + right: 0.5em; text-align: center; top: 0.4em; vertical-align: baseline; white-space: nowrap; } -pre .copy-btn-icon:hover { +.copy-btn:hover { color: #555; } @@ -400,7 +400,7 @@ pre .copy-btn-icon:hover { display: flex; } -.copy-btn-icon svg { +.copy-btn svg { fill: currentColor; margin-right: 0.4em; } @@ -409,10 +409,6 @@ pre .copy-btn-icon:hover { font-size: 11px; } -.copy-btn { - right: 10px; -} - .copy-btn:focus { outline: none; } diff --git a/test/functional/test_site_templates/test_minimal/expected/markbind/css/markbind.css b/test/functional/test_site_templates/test_minimal/expected/markbind/css/markbind.css index 20c91acc16..259349fdf1 100644 --- a/test/functional/test_site_templates/test_minimal/expected/markbind/css/markbind.css +++ b/test/functional/test_site_templates/test_minimal/expected/markbind/css/markbind.css @@ -375,7 +375,7 @@ pre { position: relative; } -pre > .copy-btn-icon { +.copy-btn { background-color: #b4b4b9; border-radius: 0.25rem; color: #f8f8ff; @@ -384,14 +384,14 @@ pre > .copy-btn-icon { line-height: 1; padding: 0.25em 0.4em; position: absolute; - right: 0.3em; + right: 0.5em; text-align: center; top: 0.4em; vertical-align: baseline; white-space: nowrap; } -pre .copy-btn-icon:hover { +.copy-btn:hover { color: #555; } @@ -400,7 +400,7 @@ pre .copy-btn-icon:hover { display: flex; } -.copy-btn-icon svg { +.copy-btn svg { fill: currentColor; margin-right: 0.4em; } @@ -409,10 +409,6 @@ pre .copy-btn-icon:hover { font-size: 11px; } -.copy-btn { - right: 10px; -} - .copy-btn:focus { outline: none; } From e13cad3cb9127e7bfd4c9134831f6da46faea5c8 Mon Sep 17 00:00:00 2001 From: yash-chowdhary Date: Mon, 17 Feb 2020 22:35:18 +0800 Subject: [PATCH 07/10] Remove redundant code --- src/plugins/codeBlockCopyButtons.js | 49 ++++++++--------------------- 1 file changed, 13 insertions(+), 36 deletions(-) diff --git a/src/plugins/codeBlockCopyButtons.js b/src/plugins/codeBlockCopyButtons.js index 1dea1dc216..6f74c53fc6 100644 --- a/src/plugins/codeBlockCopyButtons.js +++ b/src/plugins/codeBlockCopyButtons.js @@ -9,7 +9,7 @@ const COPY_ICON = ' + const html = `
${COPY_ICON} ${COPY_TO_CLIPBOARD} @@ -18,55 +18,32 @@ function getButtonHTML() { return html; } -function getCopyCodeBlockScript() { - return ``; -} module.exports = { - getScripts: () => getCopyCodeBlockScript(), + getScripts: () => copyCodeBlockScript, postRender: (content) => { const $ = cheerio.load(content, { xmlMode: false }); const codeBlockSelector = 'pre'; From fa496dd6a99680fc4f69c6fdb75b6e5571ffdc6a Mon Sep 17 00:00:00 2001 From: yash-chowdhary Date: Sun, 23 Feb 2020 09:03:09 +0530 Subject: [PATCH 08/10] Remove redundant css property --- asset/css/markbind.css | 1 - test/functional/test_site/expected/markbind/css/markbind.css | 1 - .../test_site_algolia_plugin/expected/markbind/css/markbind.css | 1 - .../test_site_convert/expected/markbind/css/markbind.css | 1 - .../expected/markbind/css/markbind.css | 1 - .../test_default/expected/markbind/css/markbind.css | 1 - .../test_minimal/expected/markbind/css/markbind.css | 1 - 7 files changed, 7 deletions(-) diff --git a/asset/css/markbind.css b/asset/css/markbind.css index 259349fdf1..01a4dc15dd 100644 --- a/asset/css/markbind.css +++ b/asset/css/markbind.css @@ -387,7 +387,6 @@ pre { right: 0.5em; text-align: center; top: 0.4em; - vertical-align: baseline; white-space: nowrap; } diff --git a/test/functional/test_site/expected/markbind/css/markbind.css b/test/functional/test_site/expected/markbind/css/markbind.css index 259349fdf1..01a4dc15dd 100644 --- a/test/functional/test_site/expected/markbind/css/markbind.css +++ b/test/functional/test_site/expected/markbind/css/markbind.css @@ -387,7 +387,6 @@ pre { right: 0.5em; text-align: center; top: 0.4em; - vertical-align: baseline; white-space: nowrap; } diff --git a/test/functional/test_site_algolia_plugin/expected/markbind/css/markbind.css b/test/functional/test_site_algolia_plugin/expected/markbind/css/markbind.css index 259349fdf1..01a4dc15dd 100644 --- a/test/functional/test_site_algolia_plugin/expected/markbind/css/markbind.css +++ b/test/functional/test_site_algolia_plugin/expected/markbind/css/markbind.css @@ -387,7 +387,6 @@ pre { right: 0.5em; text-align: center; top: 0.4em; - vertical-align: baseline; white-space: nowrap; } diff --git a/test/functional/test_site_convert/expected/markbind/css/markbind.css b/test/functional/test_site_convert/expected/markbind/css/markbind.css index 259349fdf1..01a4dc15dd 100644 --- a/test/functional/test_site_convert/expected/markbind/css/markbind.css +++ b/test/functional/test_site_convert/expected/markbind/css/markbind.css @@ -387,7 +387,6 @@ pre { right: 0.5em; text-align: center; top: 0.4em; - vertical-align: baseline; white-space: nowrap; } diff --git a/test/functional/test_site_expressive_layout/expected/markbind/css/markbind.css b/test/functional/test_site_expressive_layout/expected/markbind/css/markbind.css index 259349fdf1..01a4dc15dd 100644 --- a/test/functional/test_site_expressive_layout/expected/markbind/css/markbind.css +++ b/test/functional/test_site_expressive_layout/expected/markbind/css/markbind.css @@ -387,7 +387,6 @@ pre { right: 0.5em; text-align: center; top: 0.4em; - vertical-align: baseline; white-space: nowrap; } diff --git a/test/functional/test_site_templates/test_default/expected/markbind/css/markbind.css b/test/functional/test_site_templates/test_default/expected/markbind/css/markbind.css index 259349fdf1..01a4dc15dd 100644 --- a/test/functional/test_site_templates/test_default/expected/markbind/css/markbind.css +++ b/test/functional/test_site_templates/test_default/expected/markbind/css/markbind.css @@ -387,7 +387,6 @@ pre { right: 0.5em; text-align: center; top: 0.4em; - vertical-align: baseline; white-space: nowrap; } diff --git a/test/functional/test_site_templates/test_minimal/expected/markbind/css/markbind.css b/test/functional/test_site_templates/test_minimal/expected/markbind/css/markbind.css index 259349fdf1..01a4dc15dd 100644 --- a/test/functional/test_site_templates/test_minimal/expected/markbind/css/markbind.css +++ b/test/functional/test_site_templates/test_minimal/expected/markbind/css/markbind.css @@ -387,7 +387,6 @@ pre { right: 0.5em; text-align: center; top: 0.4em; - vertical-align: baseline; white-space: nowrap; } From 01a2e45077a69515a5b3e536dde99b1f7d3626c6 Mon Sep 17 00:00:00 2001 From: yash-chowdhary Date: Wed, 26 Feb 2020 10:41:06 +0530 Subject: [PATCH 09/10] Revert versioning change --- test/functional/test_site/expected/testCodeBlocks.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/functional/test_site/expected/testCodeBlocks.html b/test/functional/test_site/expected/testCodeBlocks.html index 30abcfb11a..20f339a8c6 100644 --- a/test/functional/test_site/expected/testCodeBlocks.html +++ b/test/functional/test_site/expected/testCodeBlocks.html @@ -5,7 +5,7 @@ - + Code Blocks Line Splitting From e070b625ad96c41ca426a7ab5d44cdb2435bf739 Mon Sep 17 00:00:00 2001 From: yash-chowdhary Date: Wed, 26 Feb 2020 16:27:49 +0530 Subject: [PATCH 10/10] Revert previous commit --- test/functional/test_site/expected/testCodeBlocks.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/functional/test_site/expected/testCodeBlocks.html b/test/functional/test_site/expected/testCodeBlocks.html index 20f339a8c6..30abcfb11a 100644 --- a/test/functional/test_site/expected/testCodeBlocks.html +++ b/test/functional/test_site/expected/testCodeBlocks.html @@ -5,7 +5,7 @@ - + Code Blocks Line Splitting