Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-11-25 12:12:58 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2019-11-25 12:12:58 +0300
commitdbd50b6e203994cdb393494faa8fc1b2fb406487 (patch)
tree0627b8469d5ccbd5a5b306b2bf8b6de0bc4aecb9 /app/assets/javascripts
parent8a1c3b6e1ad7d80b5e8a5ddab26cffd9b8b06c66 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts')
-rw-r--r--app/assets/javascripts/clusters/components/applications.vue2
-rw-r--r--app/assets/javascripts/lib/utils/text_markdown.js38
-rw-r--r--app/assets/javascripts/notebook/cells/markdown.vue73
3 files changed, 85 insertions, 28 deletions
diff --git a/app/assets/javascripts/clusters/components/applications.vue b/app/assets/javascripts/clusters/components/applications.vue
index a951a6bfeea..a0ab20a97aa 100644
--- a/app/assets/javascripts/clusters/components/applications.vue
+++ b/app/assets/javascripts/clusters/components/applications.vue
@@ -170,7 +170,7 @@ Crossplane runs inside your Kubernetes cluster and supports secure connectivity
),
),
{
- gitlabIntegrationLink: `<a href="https://docs.gitlab.com/ce/user/project/integrations/crossplane.html"
+ gitlabIntegrationLink: `<a href="https://docs.gitlab.com/ee/user/clusters/applications.html#crossplane"
target="_blank" rel="noopener noreferrer">
${_.escape(s__('ClusterIntegration|Gitlab Integration'))}</a>`,
kubectl: `<code>kubectl</code>`,
diff --git a/app/assets/javascripts/lib/utils/text_markdown.js b/app/assets/javascripts/lib/utils/text_markdown.js
index 2e0270ee42f..cccf9ad311c 100644
--- a/app/assets/javascripts/lib/utils/text_markdown.js
+++ b/app/assets/javascripts/lib/utils/text_markdown.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, no-var, no-param-reassign, one-var, operator-assignment, no-else-return, consistent-return */
+/* eslint-disable func-names, no-param-reassign, operator-assignment, no-else-return, consistent-return */
import $ from 'jquery';
import { insertText } from '~/lib/utils/common_utils';
@@ -13,8 +13,7 @@ function addBlockTags(blockTag, selected) {
}
function lineBefore(text, textarea) {
- var split;
- split = text
+ const split = text
.substring(0, textarea.selectionStart)
.trim()
.split('\n');
@@ -80,7 +79,7 @@ function moveCursor({
editorSelectionStart,
editorSelectionEnd,
}) {
- var pos;
+ let pos;
if (textArea && !textArea.setSelectionRange) {
return;
}
@@ -132,18 +131,13 @@ export function insertMarkdownText({
select,
editor,
}) {
- var textToInsert,
- selectedSplit,
- startChar,
- removedLastNewLine,
- removedFirstNewLine,
- currentLineEmpty,
- lastNewLine,
- editorSelectionStart,
- editorSelectionEnd;
- removedLastNewLine = false;
- removedFirstNewLine = false;
- currentLineEmpty = false;
+ let removedLastNewLine = false;
+ let removedFirstNewLine = false;
+ let currentLineEmpty = false;
+ let editorSelectionStart;
+ let editorSelectionEnd;
+ let lastNewLine;
+ let textToInsert;
if (editor) {
const selectionRange = editor.getSelectionRange();
@@ -186,7 +180,7 @@ export function insertMarkdownText({
}
}
- selectedSplit = selected.split('\n');
+ const selectedSplit = selected.split('\n');
if (editor && !wrap) {
lastNewLine = editor.getValue().split('\n')[editorSelectionStart.row];
@@ -207,8 +201,7 @@ export function insertMarkdownText({
(textArea && textArea.selectionStart === 0) ||
(editor && editorSelectionStart.column === 0 && editorSelectionStart.row === 0);
- startChar = !wrap && !currentLineEmpty && !isBeginning ? '\n' : '';
-
+ const startChar = !wrap && !currentLineEmpty && !isBeginning ? '\n' : '';
const textPlaceholder = '{text}';
if (selectedSplit.length > 1 && (!wrap || (blockTag != null && blockTag !== ''))) {
@@ -263,11 +256,10 @@ export function insertMarkdownText({
}
function updateText({ textArea, tag, cursorOffset, blockTag, wrap, select, tagContent }) {
- var $textArea, selected, text;
- $textArea = $(textArea);
+ const $textArea = $(textArea);
textArea = $textArea.get(0);
- text = $textArea.val();
- selected = selectedText(text, textArea) || tagContent;
+ const text = $textArea.val();
+ const selected = selectedText(text, textArea) || tagContent;
$textArea.focus();
return insertMarkdownText({
textArea,
diff --git a/app/assets/javascripts/notebook/cells/markdown.vue b/app/assets/javascripts/notebook/cells/markdown.vue
index 9e4a92426ee..753aa96bb55 100644
--- a/app/assets/javascripts/notebook/cells/markdown.vue
+++ b/app/assets/javascripts/notebook/cells/markdown.vue
@@ -1,7 +1,7 @@
<script>
-/* global katex */
import marked from 'marked';
import sanitize from 'sanitize-html';
+import katex from 'katex';
import Prompt from './prompt.vue';
const renderer = new marked.Renderer();
@@ -70,7 +70,6 @@ renderer.paragraph = t => {
};
marked.setOptions({
- sanitize: true,
renderer,
});
@@ -87,9 +86,66 @@ export default {
computed: {
markdown() {
return sanitize(marked(this.cell.source.join('').replace(/\\/g, '\\\\')), {
- allowedTags: false,
+ // allowedTags from GitLab's inline HTML guidelines
+ // https://docs.gitlab.com/ee/user/markdown.html#inline-html
+ allowedTags: [
+ 'h1',
+ 'h2',
+ 'h3',
+ 'h4',
+ 'h5',
+ 'h6',
+ 'h7',
+ 'h8',
+ 'br',
+ 'b',
+ 'i',
+ 'strong',
+ 'em',
+ 'a',
+ 'pre',
+ 'code',
+ 'img',
+ 'tt',
+ 'div',
+ 'ins',
+ 'del',
+ 'sup',
+ 'sub',
+ 'p',
+ 'ol',
+ 'ul',
+ 'table',
+ 'thead',
+ 'tbody',
+ 'tfoot',
+ 'blockquote',
+ 'dl',
+ 'dt',
+ 'dd',
+ 'kbd',
+ 'q',
+ 'samp',
+ 'var',
+ 'hr',
+ 'ruby',
+ 'rt',
+ 'rp',
+ 'li',
+ 'tr',
+ 'td',
+ 'th',
+ 's',
+ 'strike',
+ 'span',
+ 'abbr',
+ 'abbr',
+ 'summary',
+ ],
allowedAttributes: {
- '*': ['class'],
+ '*': ['class', 'style'],
+ a: ['href'],
+ img: ['src'],
},
});
},
@@ -105,6 +161,15 @@ export default {
</template>
<style>
+/*
+ Importing the necessary katex stylesheet from the node_module folder rather
+ than copying the stylesheet into `app/assets/stylesheets/vendors` for
+ automatic importing via `app/assets/stylesheets/application.scss`. The reason
+ is that the katex stylesheet depends on many fonts that are in node_module
+ subfolders - moving all these fonts would make updating katex difficult.
+ */
+@import '~katex/dist/katex.min.css';
+
.markdown .katex {
display: block;
text-align: center;