From a07cc445d16e2bf128901449ca7d682d0f805463 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Fri, 22 Oct 2021 12:29:08 +0200 Subject: [PATCH] add prism via npm --- app/views/layouts/default.phtml | 2 - docker-compose.yml | 1 - gulpfile.js | 26 ++ package-lock.json | 11 + package.json | 1 + public/styles/default.less | 2 +- public/styles/dependencies/prism.less | 358 -------------------------- public/styles/ide.less | 349 +++++++++++++++++++++++++ 8 files changed, 388 insertions(+), 362 deletions(-) delete mode 100644 public/styles/dependencies/prism.less create mode 100644 public/styles/ide.less diff --git a/app/views/layouts/default.phtml b/app/views/layouts/default.phtml index 665e47a7f..2818e4d92 100644 --- a/app/views/layouts/default.phtml +++ b/app/views/layouts/default.phtml @@ -103,8 +103,6 @@ if(!empty($platforms)) { }); - - exec($this->getParam('head', [])); ?> diff --git a/docker-compose.yml b/docker-compose.yml index 2a86fc575..08a1b9b3e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -73,7 +73,6 @@ services: - ./app:/usr/src/code/app # - ./vendor:/usr/src/code/vendor - ./docs:/usr/src/code/docs - - ./public:/usr/src/code/public - ./src:/usr/src/code/src - ./debug:/tmp - ./dev:/usr/local/dev diff --git a/gulpfile.js b/gulpfile.js index 15af05dbf..3a1b0fe37 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -99,6 +99,32 @@ const configDep = { 'node_modules/markdown-it/dist/markdown-it.js', 'node_modules/pell/dist/pell.js', 'node_modules/turndown/dist/turndown.js', + // PrismJS Core + 'node_modules/prismjs/components/prism-core.min.js', + // PrismJS Languages + 'node_modules/prismjs/components/prism-markup.min.js', + 'node_modules/prismjs/components/prism-css.min.js', + 'node_modules/prismjs/components/prism-clike.min.js', + 'node_modules/prismjs/components/prism-javascript.min.js', + 'node_modules/prismjs/components/prism-bash.min.js', + 'node_modules/prismjs/components/prism-csharp.min.js', + 'node_modules/prismjs/components/prism-dart.min.js', + 'node_modules/prismjs/components/prism-go.min.js', + 'node_modules/prismjs/components/prism-graphql.min.js', + 'node_modules/prismjs/components/prism-http.min.js', + 'node_modules/prismjs/components/prism-java.min.js', + 'node_modules/prismjs/components/prism-json.min.js', + 'node_modules/prismjs/components/prism-kotlin.min.js', + 'node_modules/prismjs/components/prism-markup-templating.min.js', + 'node_modules/prismjs/components/prism-php.min.js', + 'node_modules/prismjs/components/prism-powershell.min.js', + 'node_modules/prismjs/components/prism-python.min.js', + 'node_modules/prismjs/components/prism-ruby.min.js', + 'node_modules/prismjs/components/prism-swift.min.js', + 'node_modules/prismjs/components/prism-typescript.min.js', + 'node_modules/prismjs/components/prism-yaml.min.js', + // PrismJS Plugins + 'node_modules/prismjs/plugins/line-numbers/prism-line-numbers.min.js', ], dest: './public/dist/scripts' }; diff --git a/package-lock.json b/package-lock.json index 674df2262..9d83c0ded 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "chart.js": "^3.5.1", "markdown-it": "^12.2.0", "pell": "^1.0.6", + "prismjs": "^1.25.0", "turndown": "^7.1.1" }, "devDependencies": { @@ -3564,6 +3565,11 @@ "node": ">= 0.8" } }, + "node_modules/prismjs": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz", + "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==" + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -7971,6 +7977,11 @@ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", "dev": true }, + "prismjs": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz", + "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==" + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", diff --git a/package.json b/package.json index 5c2255d2f..6c71f23a6 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "chart.js": "^3.5.1", "markdown-it": "^12.2.0", "pell": "^1.0.6", + "prismjs": "^1.25.0", "turndown": "^7.1.1" } } diff --git a/public/styles/default.less b/public/styles/default.less index 817e7ba5e..660895a22 100644 --- a/public/styles/default.less +++ b/public/styles/default.less @@ -19,6 +19,7 @@ img[src=""] { @import "icons"; @import "polyfills"; @import "forms"; +@import "ide"; @import "scopes/console"; @import "scopes/home"; @import "comps/alerts"; @@ -32,7 +33,6 @@ img[src=""] { @import "comps/modal"; @import "comps/scroll"; @import "comps/tabs"; -@import "dependencies/prism"; html { padding: 0; diff --git a/public/styles/dependencies/prism.less b/public/styles/dependencies/prism.less deleted file mode 100644 index fcad3f69d..000000000 --- a/public/styles/dependencies/prism.less +++ /dev/null @@ -1,358 +0,0 @@ -/* PrismJS 1.15.0 -https://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clike+javascript+ruby+markup-templating+php&plugins=line-numbers */ -/** - * okaidia theme for JavaScript, CSS and HTML - * Loosely based on Monokai textmate theme by http://www.monokai.nl/ - * @author ocodia - */ - -.ide { - background-color: var(--config-prism-background); - overflow: hidden; - position: relative; - z-index: 1; - box-shadow: 0 2px 4px 0 rgba(50,50,93,.3); - border-radius: 10px; - margin-bottom: 30px; - &:extend(.force-left); - &:extend(.force-ltr); - - * { - font-family: 'Source Code Pro', monospace; - } - - &[data-lang]::after { - content: attr(data-lang-label); - display: inline-block; - background: #ffffff; - color: #000000; - position: absolute; - top: 15px; - padding: 5px 10px; - border-radius: 15px; - font-size: 10px; - right: 10px; // should be right for both ltr and rtl - opacity: 0.95; - } - - &[data-lang="bash"]::after { - background: var(--config-language-bash); - color: var(--config-language-bash-contrast); - } - - &[data-lang="javascript"]::after { - background: var(--config-language-javascript); - color: var(--config-language-javascript-contrast); - } - - &[data-lang="web"]::after { - background: var(--config-language-web); - color: var(--config-language-web-contrast); - } - - &[data-lang="html"]::after { - background: var(--config-language-html); - color: var(--config-language-html-contrast); - } - - &[data-lang="php"]::after { - background: var(--config-language-php); - color: var(--config-language-php-contrast); - } - - &[data-lang="nodejs"]::after { - background: var(--config-language-nodejs); - color: var(--config-language-nodejs-contrast); - } - - &[data-lang="ruby"]::after { - background: var(--config-language-ruby); - color: var(--config-language-ruby-contrast); - } - - &[data-lang="python"]::after { - background: var(--config-language-python); - color: var(--config-language-python-contrast); - } - - &[data-lang="go"]::after { - background: var(--config-language-go); - color: var(--config-language-go-contrast); - } - - &[data-lang="dart"]::after { - background: var(--config-language-dart); - color: var(--config-language-dart-contrast); - } - - &[data-lang="flutter"]::after { - background: var(--config-language-flutter); - color: var(--config-language-flutter-contrast); - } - - &[data-lang="android"]::after { - background: var(--config-language-android); - color: var(--config-language-android-contrast); - } - - &[data-lang="kotlin"]::after { - background: var(--config-language-kotlin); - color: var(--config-language-kotlin-contrast); - } - - &[data-lang="java"]::after { - background: var(--config-language-java); - color: var(--config-language-java-contrast); - } - - &[data-lang="yaml"]::after { - background: var(--config-language-yaml); - color: var(--config-language-yaml-contrast); - } - - .tag { - color: inherit!important; - background: transparent!important; - padding: inherit!important; - font-size: inherit!important; - line-height: 14px; - } - - .copy { - cursor: pointer; - content: attr(data-lang); - display: inline-block; - background: #ffffff; - color: #000000; - position: absolute; - transform: translateX(-50%); - bottom: -20px; - padding: 5px 10px; - border-radius: 15px; - font-size: 10px; - font-style: normal; - .func-start(50%); - opacity: 0; - transition: bottom .3s, opacity .3s; - line-height: normal; - font-family: 'Poppins', sans-serif; - - &::before { - .func-padding-end(5px); - } - } - - &:hover { - .copy { - transition: bottom .3s, opacity .3s; - opacity: 0.90; - bottom: 16px; - } - } - - pre { - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; - color: #e6ebf1; - font-weight: 400; - line-height: 20px; - font-size: 13px; - margin: 0; - padding: 20px; - padding-left: 60px; - } - - &.light { - box-shadow: 0 2px 4px 0 rgba(50,50,93,.1); - background-color: #ffffff; - - pre { - color: #414770; - } - - .token.comment, - .token.prolog, - .token.doctype, - .token.cdata { - color: #91a2b0; - } - - .token.selector, - .token.attr-name, - .token.string, - .token.char, - .token.builtin, - .token.inserted { - color: #149570; - } - - .token.punctuation { - color: #414770; - } - - .token.operator, - .token.entity, - .token.url, - .language-css .token.string, - .style .token.string, - .token.variable { - color: #414770; - } - - .line-numbers .line-numbers-rows { - background: #f2feef; - } - - .line-numbers-rows > span:before { - color: #5dc79e; - } - - .token.keyword { - color: #6772e4; - font-weight: 500; - } - } -} - -code[class*="language-"], -pre[class*="language-"] { -text-align: left; -white-space: pre; -word-spacing: normal; -word-break: normal; -word-wrap: normal; --moz-tab-size: 4; --o-tab-size: 4; -tab-size: 4; -} - -/* Code blocks */ -pre[class*="language-"] { - overflow: auto; -} - -/* Inline code */ -:not(pre) > code[class*="language-"] { - padding: .1em; - white-space: normal; -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: #6b7c93; -} - -.token.punctuation { - color: #f8f8f2; -} - -.namespace { - opacity: .7; -} - -.token.property, -.token.tag, -.token.constant, -.token.symbol, -.token.deleted { - color: #f92672; -} - -.token.boolean, -.token.number { - color: #f79a59; -} - -.token.selector, -.token.attr-name, -.token.string, -.token.char, -.token.builtin, -.token.inserted { - color: #3ecf8e; -} - -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string, -.token.variable { - color: #f8f8f2; -} - -.token.atrule, -.token.attr-value, -.token.function, -.token.class-name { - color: #45b2e8; -} - -.token.keyword { - color: #7795f8; -} - -.token.regex, -.token.important { - color: #fd971f; -} - -.token.important, -.token.bold { - //font-weight: bold; -} -.token.italic { - font-style: italic; -} - -.token.entity { - cursor: help; -} - -pre[class*="language-"].line-numbers { - position: relative; - padding-left: 60px; - counter-reset: linenumber; -} - -pre[class*="language-"].line-numbers > code { - position: relative; - white-space: inherit; -} - -.line-numbers .line-numbers-rows { - background: var(--config-prism-numbers); - position: absolute; - pointer-events: none; - top: -20px; - bottom: -21px; - padding: 20px 0; - font-size: 100%; - left: -60px; - width: 40px; /* works for line-numbers below 1000 lines */ - letter-spacing: -1px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.line-numbers-rows > span { - .func-padding-end(5px); - pointer-events: none; - display: block; - counter-increment: linenumber; -} - -.line-numbers-rows > span:before { - content: counter(linenumber); - color: #636365; - display: block; - padding-right: 0.8em; - text-align: right; -} - diff --git a/public/styles/ide.less b/public/styles/ide.less new file mode 100644 index 000000000..ea8ff683e --- /dev/null +++ b/public/styles/ide.less @@ -0,0 +1,349 @@ +.ide { + background-color: var(--config-prism-background); + overflow: hidden; + position: relative; + z-index: 1; + box-shadow: 0 2px 4px 0 rgba(50, 50, 93, 0.3); + border-radius: 10px; + margin-bottom: 30px; + &:extend(.force-left); + &:extend(.force-ltr); + + * { + font-family: "Source Code Pro", monospace; + } + + &[data-lang]::after { + content: attr(data-lang-label); + display: inline-block; + background: #ffffff; + color: #000000; + position: absolute; + top: 15px; + padding: 5px 10px; + border-radius: 15px; + font-size: 10px; + right: 10px; // should be right for both ltr and rtl + opacity: 0.95; + } + + &[data-lang="bash"]::after { + background: var(--config-language-bash); + color: var(--config-language-bash-contrast); + } + + &[data-lang="javascript"]::after { + background: var(--config-language-javascript); + color: var(--config-language-javascript-contrast); + } + + &[data-lang="web"]::after { + background: var(--config-language-web); + color: var(--config-language-web-contrast); + } + + &[data-lang="html"]::after { + background: var(--config-language-html); + color: var(--config-language-html-contrast); + } + + &[data-lang="php"]::after { + background: var(--config-language-php); + color: var(--config-language-php-contrast); + } + + &[data-lang="nodejs"]::after { + background: var(--config-language-nodejs); + color: var(--config-language-nodejs-contrast); + } + + &[data-lang="ruby"]::after { + background: var(--config-language-ruby); + color: var(--config-language-ruby-contrast); + } + + &[data-lang="python"]::after { + background: var(--config-language-python); + color: var(--config-language-python-contrast); + } + + &[data-lang="go"]::after { + background: var(--config-language-go); + color: var(--config-language-go-contrast); + } + + &[data-lang="dart"]::after { + background: var(--config-language-dart); + color: var(--config-language-dart-contrast); + } + + &[data-lang="flutter"]::after { + background: var(--config-language-flutter); + color: var(--config-language-flutter-contrast); + } + + &[data-lang="android"]::after { + background: var(--config-language-android); + color: var(--config-language-android-contrast); + } + + &[data-lang="kotlin"]::after { + background: var(--config-language-kotlin); + color: var(--config-language-kotlin-contrast); + } + + &[data-lang="java"]::after { + background: var(--config-language-java); + color: var(--config-language-java-contrast); + } + + &[data-lang="yaml"]::after { + background: var(--config-language-yaml); + color: var(--config-language-yaml-contrast); + } + + .tag { + color: inherit !important; + background: transparent !important; + padding: inherit !important; + font-size: inherit !important; + line-height: 14px; + } + + .copy { + cursor: pointer; + content: attr(data-lang); + display: inline-block; + background: #ffffff; + color: #000000; + position: absolute; + transform: translateX(-50%); + bottom: -20px; + padding: 5px 10px; + border-radius: 15px; + font-size: 10px; + font-style: normal; + .func-start(50%); + opacity: 0; + transition: bottom 0.3s, opacity 0.3s; + line-height: normal; + font-family: "Poppins", sans-serif; + + &::before { + .func-padding-end(5px); + } + } + + &:hover { + .copy { + transition: bottom 0.3s, opacity 0.3s; + opacity: 0.9; + bottom: 16px; + } + } + + pre { + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + color: #e6ebf1; + font-weight: 400; + line-height: 20px; + font-size: 13px; + margin: 0; + padding: 20px; + padding-left: 60px; + } + + &.light { + box-shadow: 0 2px 4px 0 rgba(50, 50, 93, 0.1); + background-color: #ffffff; + + pre { + color: #414770; + } + + .token.comment, + .token.prolog, + .token.doctype, + .token.cdata { + color: #91a2b0; + } + + .token.selector, + .token.attr-name, + .token.string, + .token.char, + .token.builtin, + .token.inserted { + color: #149570; + } + + .token.punctuation { + color: #414770; + } + + .token.operator, + .token.entity, + .token.url, + .language-css .token.string, + .style .token.string, + .token.variable { + color: #414770; + } + + .line-numbers .line-numbers-rows { + background: #f2feef; + } + + .line-numbers-rows > span:before { + color: #5dc79e; + } + + .token.keyword { + color: #6772e4; + font-weight: 500; + } + } +} + +code[class*="language-"], +pre[class*="language-"] { + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; +} + +/* Code blocks */ +pre[class*="language-"] { + overflow: auto; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0.1em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #6b7c93; +} + +.token.punctuation { + color: #f8f8f2; +} + +.namespace { + opacity: 0.7; +} + +.token.property, +.token.tag, +.token.constant, +.token.symbol, +.token.deleted { + color: #f92672; +} + +.token.boolean, +.token.number { + color: #f79a59; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #3ecf8e; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable { + color: #f8f8f2; +} + +.token.atrule, +.token.attr-value, +.token.function, +.token.class-name { + color: #45b2e8; +} + +.token.keyword { + color: #7795f8; +} + +.token.regex, +.token.important { + color: #fd971f; +} + +.token.important, +.token.bold { + //font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +pre[class*="language-"].line-numbers { + position: relative; + padding-left: 60px; + counter-reset: linenumber; +} + +pre[class*="language-"].line-numbers > code { + position: relative; + white-space: inherit; +} + +.line-numbers .line-numbers-rows { + background: var(--config-prism-numbers); + position: absolute; + pointer-events: none; + top: -20px; + bottom: -21px; + padding: 20px 0; + font-size: 100%; + left: -60px; + width: 40px; /* works for line-numbers below 1000 lines */ + letter-spacing: -1px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.line-numbers-rows > span { + .func-padding-end(5px); + pointer-events: none; + display: block; + counter-increment: linenumber; +} + +.line-numbers-rows > span:before { + content: counter(linenumber); + color: #636365; + display: block; + padding-right: 0.8em; + text-align: right; +}