Commit dbd50b6e authored by GitLab Bot's avatar GitLab Bot

Add latest changes from gitlab-org/gitlab@master

parent 8a1c3b6e
...@@ -170,7 +170,7 @@ Crossplane runs inside your Kubernetes cluster and supports secure connectivity ...@@ -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"> target="_blank" rel="noopener noreferrer">
${_.escape(s__('ClusterIntegration|Gitlab Integration'))}</a>`, ${_.escape(s__('ClusterIntegration|Gitlab Integration'))}</a>`,
kubectl: `<code>kubectl</code>`, kubectl: `<code>kubectl</code>`,
......
/* 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 $ from 'jquery';
import { insertText } from '~/lib/utils/common_utils'; import { insertText } from '~/lib/utils/common_utils';
...@@ -13,8 +13,7 @@ function addBlockTags(blockTag, selected) { ...@@ -13,8 +13,7 @@ function addBlockTags(blockTag, selected) {
} }
function lineBefore(text, textarea) { function lineBefore(text, textarea) {
var split; const split = text
split = text
.substring(0, textarea.selectionStart) .substring(0, textarea.selectionStart)
.trim() .trim()
.split('\n'); .split('\n');
...@@ -80,7 +79,7 @@ function moveCursor({ ...@@ -80,7 +79,7 @@ function moveCursor({
editorSelectionStart, editorSelectionStart,
editorSelectionEnd, editorSelectionEnd,
}) { }) {
var pos; let pos;
if (textArea && !textArea.setSelectionRange) { if (textArea && !textArea.setSelectionRange) {
return; return;
} }
...@@ -132,18 +131,13 @@ export function insertMarkdownText({ ...@@ -132,18 +131,13 @@ export function insertMarkdownText({
select, select,
editor, editor,
}) { }) {
var textToInsert, let removedLastNewLine = false;
selectedSplit, let removedFirstNewLine = false;
startChar, let currentLineEmpty = false;
removedLastNewLine, let editorSelectionStart;
removedFirstNewLine, let editorSelectionEnd;
currentLineEmpty, let lastNewLine;
lastNewLine, let textToInsert;
editorSelectionStart,
editorSelectionEnd;
removedLastNewLine = false;
removedFirstNewLine = false;
currentLineEmpty = false;
if (editor) { if (editor) {
const selectionRange = editor.getSelectionRange(); const selectionRange = editor.getSelectionRange();
...@@ -186,7 +180,7 @@ export function insertMarkdownText({ ...@@ -186,7 +180,7 @@ export function insertMarkdownText({
} }
} }
selectedSplit = selected.split('\n'); const selectedSplit = selected.split('\n');
if (editor && !wrap) { if (editor && !wrap) {
lastNewLine = editor.getValue().split('\n')[editorSelectionStart.row]; lastNewLine = editor.getValue().split('\n')[editorSelectionStart.row];
...@@ -207,8 +201,7 @@ export function insertMarkdownText({ ...@@ -207,8 +201,7 @@ export function insertMarkdownText({
(textArea && textArea.selectionStart === 0) || (textArea && textArea.selectionStart === 0) ||
(editor && editorSelectionStart.column === 0 && editorSelectionStart.row === 0); (editor && editorSelectionStart.column === 0 && editorSelectionStart.row === 0);
startChar = !wrap && !currentLineEmpty && !isBeginning ? '\n' : ''; const startChar = !wrap && !currentLineEmpty && !isBeginning ? '\n' : '';
const textPlaceholder = '{text}'; const textPlaceholder = '{text}';
if (selectedSplit.length > 1 && (!wrap || (blockTag != null && blockTag !== ''))) { if (selectedSplit.length > 1 && (!wrap || (blockTag != null && blockTag !== ''))) {
...@@ -263,11 +256,10 @@ export function insertMarkdownText({ ...@@ -263,11 +256,10 @@ export function insertMarkdownText({
} }
function updateText({ textArea, tag, cursorOffset, blockTag, wrap, select, tagContent }) { function updateText({ textArea, tag, cursorOffset, blockTag, wrap, select, tagContent }) {
var $textArea, selected, text; const $textArea = $(textArea);
$textArea = $(textArea);
textArea = $textArea.get(0); textArea = $textArea.get(0);
text = $textArea.val(); const text = $textArea.val();
selected = selectedText(text, textArea) || tagContent; const selected = selectedText(text, textArea) || tagContent;
$textArea.focus(); $textArea.focus();
return insertMarkdownText({ return insertMarkdownText({
textArea, textArea,
......
<script> <script>
/* global katex */
import marked from 'marked'; import marked from 'marked';
import sanitize from 'sanitize-html'; import sanitize from 'sanitize-html';
import katex from 'katex';
import Prompt from './prompt.vue'; import Prompt from './prompt.vue';
const renderer = new marked.Renderer(); const renderer = new marked.Renderer();
...@@ -70,7 +70,6 @@ renderer.paragraph = t => { ...@@ -70,7 +70,6 @@ renderer.paragraph = t => {
}; };
marked.setOptions({ marked.setOptions({
sanitize: true,
renderer, renderer,
}); });
...@@ -87,9 +86,66 @@ export default { ...@@ -87,9 +86,66 @@ export default {
computed: { computed: {
markdown() { markdown() {
return sanitize(marked(this.cell.source.join('').replace(/\\/g, '\\\\')), { 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: { allowedAttributes: {
'*': ['class'], '*': ['class', 'style'],
a: ['href'],
img: ['src'],
}, },
}); });
}, },
...@@ -105,6 +161,15 @@ export default { ...@@ -105,6 +161,15 @@ export default {
</template> </template>
<style> <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 { .markdown .katex {
display: block; display: block;
text-align: center; text-align: center;
......
...@@ -58,6 +58,6 @@ ...@@ -58,6 +58,6 @@
= f.text_field :default_ci_config_path, class: 'form-control', placeholder: '.gitlab-ci.yml' = f.text_field :default_ci_config_path, class: 'form-control', placeholder: '.gitlab-ci.yml'
%p.form-text.text-muted %p.form-text.text-muted
= _("The default CI configuration path for new projects.").html_safe = _("The default CI configuration path for new projects.").html_safe
= link_to icon('question-circle'), help_page_path('user/project/pipelines/settings', anchor: 'custom-ci-config-path'), target: '_blank' = link_to icon('question-circle'), help_page_path('user/project/pipelines/settings', anchor: 'custom-ci-configuration-path'), target: '_blank'
= f.submit _('Save changes'), class: "btn btn-success" = f.submit _('Save changes'), class: "btn btn-success"
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
= f.text_field :ci_config_path, class: 'form-control', placeholder: '.gitlab-ci.yml' = f.text_field :ci_config_path, class: 'form-control', placeholder: '.gitlab-ci.yml'
%p.form-text.text-muted %p.form-text.text-muted
= _("The path to the CI configuration file. Defaults to <code>.gitlab-ci.yml</code>").html_safe = _("The path to the CI configuration file. Defaults to <code>.gitlab-ci.yml</code>").html_safe
= link_to icon('question-circle'), help_page_path('user/project/pipelines/settings', anchor: 'custom-ci-config-path'), target: '_blank' = link_to icon('question-circle'), help_page_path('user/project/pipelines/settings', anchor: 'custom-ci-configuration-path'), target: '_blank'
%hr %hr
.form-group .form-group
......
---
title: Fix Crossplane help link in cluster applications page
merge_request: 20668
author:
type: fixed
...@@ -161,6 +161,11 @@ but commented out to help encourage others to add to it in the future. --> ...@@ -161,6 +161,11 @@ but commented out to help encourage others to add to it in the future. -->
## Required pipeline configuration **(PREMIUM ONLY)** ## Required pipeline configuration **(PREMIUM ONLY)**
CAUTION: **Caution:**
The Required Pipeline Configuration feature is deprecated and will be removed when an
[improved compliance solution](https://gitlab.com/gitlab-org/gitlab/issues/34830)
is added to GitLab. It is recommended to avoid using this feature.
GitLab administrators can force a pipeline configuration to run on every GitLab administrators can force a pipeline configuration to run on every
pipeline. pipeline.
......
...@@ -417,6 +417,18 @@ install Crossplane using the ...@@ -417,6 +417,18 @@ install Crossplane using the
[`values.yaml`](https://github.com/crossplaneio/crossplane/blob/master/cluster/charts/crossplane/values.yaml.tmpl) [`values.yaml`](https://github.com/crossplaneio/crossplane/blob/master/cluster/charts/crossplane/values.yaml.tmpl)
file. file.
#### Enabling installation
This is a preliminary release of Crossplane as a GitLab-managed application. By default,
the ability to install it is disabled.
To allow installation of Crossplane as a GitLab-managed application, ask a GitLab
administrator to run following command within a Rails console:
```ruby
Feature.enable(:enable_cluster_application_crossplane)
```
## Upgrading applications ## Upgrading applications
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/24789) in GitLab 11.8. > [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/24789) in GitLab 11.8.
......
...@@ -49,7 +49,7 @@ describe('Markdown component', () => { ...@@ -49,7 +49,7 @@ describe('Markdown component', () => {
}); });
Vue.nextTick(() => { Vue.nextTick(() => {
expect(vm.$el.querySelector('a')).toBeNull(); expect(vm.$el.querySelector('a').getAttribute('href')).toBeNull();
done(); done();
}); });
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment