summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/blob
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/blob')
-rw-r--r--app/assets/javascripts/blob/components/blob_header.vue2
-rw-r--r--app/assets/javascripts/blob/file_template_mediator.js90
-rw-r--r--app/assets/javascripts/blob/notebook/index.js6
-rw-r--r--app/assets/javascripts/blob/openapi/index.js4
-rw-r--r--app/assets/javascripts/blob/template_selectors/type_selector.js24
-rw-r--r--app/assets/javascripts/blob/viewer/index.js4
6 files changed, 24 insertions, 106 deletions
diff --git a/app/assets/javascripts/blob/components/blob_header.vue b/app/assets/javascripts/blob/components/blob_header.vue
index 361d736f740..4e47aa99fd8 100644
--- a/app/assets/javascripts/blob/components/blob_header.vue
+++ b/app/assets/javascripts/blob/components/blob_header.vue
@@ -66,7 +66,7 @@ export default {
return !this.hideDefaultActions;
},
isEmpty() {
- return this.blob.rawSize === 0;
+ return this.blob.rawSize === '0';
},
blobSwitcherDocIcon() {
return this.blob.richViewer?.fileType === 'csv' ? 'table' : 'document';
diff --git a/app/assets/javascripts/blob/file_template_mediator.js b/app/assets/javascripts/blob/file_template_mediator.js
index adc2649e5df..2ea3c93625d 100644
--- a/app/assets/javascripts/blob/file_template_mediator.js
+++ b/app/assets/javascripts/blob/file_template_mediator.js
@@ -11,7 +11,6 @@ import DockerfileSelector from './template_selectors/dockerfile_selector';
import GitignoreSelector from './template_selectors/gitignore_selector';
import LicenseSelector from './template_selectors/license_selector';
import MetricsDashboardSelector from './template_selectors/metrics_dashboard_selector';
-import FileTemplateTypeSelector from './template_selectors/type_selector';
export default class FileTemplateMediator {
constructor({ editor, currentAction, projectId }) {
@@ -20,7 +19,6 @@ export default class FileTemplateMediator {
this.projectId = projectId;
this.initTemplateSelectors();
- this.initTemplateTypeSelector();
this.initDomElements();
this.initDropdowns();
this.initPageEvents();
@@ -38,26 +36,6 @@ export default class FileTemplateMediator {
].map((TemplateSelectorClass) => new TemplateSelectorClass({ mediator: this }));
}
- initTemplateTypeSelector() {
- this.typeSelector = new FileTemplateTypeSelector({
- mediator: this,
- dropdownData: this.templateSelectors
- .map((templateSelector) => {
- const cfg = templateSelector.config;
-
- return {
- name: cfg.name,
- key: cfg.key,
- id: cfg.key,
- };
- })
- .reduce(
- (acc, current) => (acc.find((item) => item.id === current.id) ? acc : [...acc, current]),
- [],
- ),
- });
- }
-
initDomElements() {
const $templatesMenu = $('.template-selectors-menu');
const $undoMenu = $templatesMenu.find('.template-selectors-undo-menu');
@@ -71,13 +49,10 @@ export default class FileTemplateMediator {
this.$fileContent = $fileEditor.find('#file-content');
this.$commitForm = $fileEditor.find('form');
this.$navLinks = $fileEditor.find('.nav-links');
- this.$templateTypes = this.$templateSelectors.find('.template-type-selector');
}
initDropdowns() {
- if (this.currentAction === 'create') {
- this.typeSelector.show();
- } else {
+ if (this.currentAction !== 'create') {
this.hideTemplateSelectorMenu();
}
@@ -101,32 +76,12 @@ export default class FileTemplateMediator {
const hash = urlPieces[1];
if (hash === 'preview') {
this.hideTemplateSelectorMenu();
- } else if (hash === 'editor' && !this.typeSelector.isHidden()) {
+ } else if (hash === 'editor' && this.templateSelectors.find((sel) => sel.dropdown !== null)) {
this.showTemplateSelectorMenu();
}
});
}
- selectTemplateType(item, e) {
- if (e) {
- e.preventDefault();
- }
-
- this.templateSelectors.forEach((selector) => {
- if (selector.config.key === item.key) {
- selector.show();
- } else {
- selector.hide();
- }
- });
- this.setTypeSelectorToggleText(item.name);
- this.cacheToggleText();
- }
-
- selectTemplateTypeOptions(options) {
- this.selectTemplateType(options.selectedObj, options.e);
- }
-
selectTemplateFile(selector, query, data) {
const self = this;
const { name } = selector.config;
@@ -139,7 +94,7 @@ export default class FileTemplateMediator {
this.setEditorContent(file);
this.setFilename(name);
selector.renderLoaded();
- this.typeSelector.setToggleText(name);
+
toast(__(`${query} template applied`), {
action: {
text: __('Undo'),
@@ -163,15 +118,20 @@ export default class FileTemplateMediator {
displayMatchedTemplateSelector() {
const currentInput = this.getFilename();
- this.templateSelectors.forEach((selector) => {
- const match = selector.config.pattern.test(currentInput);
-
- if (match) {
- this.typeSelector.show();
- this.selectTemplateType(selector.config);
- this.showTemplateSelectorMenu();
+ const matchedSelector = this.templateSelectors.find((sel) =>
+ sel.config.pattern.test(currentInput),
+ );
+ const currentSelector = this.templateSelectors.find((sel) => !sel.isHidden());
+
+ if (matchedSelector) {
+ if (currentSelector) {
+ currentSelector.hide();
}
- });
+ matchedSelector.show();
+ this.showTemplateSelectorMenu();
+ } else {
+ this.hideTemplateSelectorMenu();
+ }
}
fetchFileTemplate(type, query, data = {}) {
@@ -194,16 +154,13 @@ export default class FileTemplateMediator {
this.editor.navigateFileStart();
}
- findTemplateSelectorByKey(key) {
- return this.templateSelectors.find((selector) => selector.config.key === key);
- }
-
hideTemplateSelectorMenu() {
this.$templatesMenu.hide();
}
showTemplateSelectorMenu() {
this.$templatesMenu.show();
+ this.cacheToggleText();
}
cacheToggleText() {
@@ -219,7 +176,6 @@ export default class FileTemplateMediator {
this.setEditorContent(this.cachedContent);
this.setFilename(this.cachedFilename);
this.setTemplateSelectorToggleText();
- this.setTypeSelectorToggleText(__('Select a template type'));
}
getTemplateSelectorToggleText() {
@@ -234,14 +190,6 @@ export default class FileTemplateMediator {
.text(this.cachedToggleText);
}
- getTypeSelectorToggleText() {
- return this.typeSelector.getToggleText();
- }
-
- setTypeSelectorToggleText(text) {
- this.typeSelector.setToggleText(text);
- }
-
getFilename() {
return this.$filenameInput.val();
}
@@ -253,8 +201,4 @@ export default class FileTemplateMediator {
input.dispatchEvent(new Event('change'));
}
}
-
- getSelected() {
- return this.templateSelectors.find((selector) => selector.selected);
- }
}
diff --git a/app/assets/javascripts/blob/notebook/index.js b/app/assets/javascripts/blob/notebook/index.js
index 25fe29c4fbe..9259827edf1 100644
--- a/app/assets/javascripts/blob/notebook/index.js
+++ b/app/assets/javascripts/blob/notebook/index.js
@@ -1,13 +1,11 @@
import Vue from 'vue';
import NotebookViewer from './notebook_viewer.vue';
-export default () => {
- const el = document.getElementById('js-notebook-viewer');
-
+export default ({ el = document.getElementById('js-notebook-viewer'), relativeRawPath }) => {
return new Vue({
el,
provide: {
- relativeRawPath: el.dataset.relativeRawPath,
+ relativeRawPath: relativeRawPath || el.dataset.relativeRawPath,
},
render(createElement) {
return createElement(NotebookViewer, {
diff --git a/app/assets/javascripts/blob/openapi/index.js b/app/assets/javascripts/blob/openapi/index.js
index 8cfdc00bb40..2386508aef5 100644
--- a/app/assets/javascripts/blob/openapi/index.js
+++ b/app/assets/javascripts/blob/openapi/index.js
@@ -15,8 +15,8 @@ const createSandbox = () => {
return iframeEl;
};
-export default async () => {
- const wrapperEl = document.getElementById('js-openapi-viewer');
+export default async (el = document.getElementById('js-openapi-viewer')) => {
+ const wrapperEl = el;
const sandboxEl = createSandbox();
const { data } = await axios.get(wrapperEl.dataset.endpoint);
diff --git a/app/assets/javascripts/blob/template_selectors/type_selector.js b/app/assets/javascripts/blob/template_selectors/type_selector.js
deleted file mode 100644
index 65e7ff0594c..00000000000
--- a/app/assets/javascripts/blob/template_selectors/type_selector.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import initDeprecatedJQueryDropdown from '~/deprecated_jquery_dropdown';
-import FileTemplateSelector from '../file_template_selector';
-
-export default class FileTemplateTypeSelector extends FileTemplateSelector {
- constructor({ mediator, dropdownData }) {
- super(mediator);
- this.mediator = mediator;
- this.config = {
- dropdown: '.js-template-type-selector',
- wrapper: '.js-template-type-selector-wrap',
- dropdownData,
- };
- }
-
- initDropdown() {
- initDeprecatedJQueryDropdown(this.$dropdown, {
- data: this.config.dropdownData,
- filterable: false,
- selectable: true,
- clicked: (options) => this.mediator.selectTemplateTypeOptions(options),
- text: (item) => item.name,
- });
- }
-}
diff --git a/app/assets/javascripts/blob/viewer/index.js b/app/assets/javascripts/blob/viewer/index.js
index 439c4258805..5e85e4cea38 100644
--- a/app/assets/javascripts/blob/viewer/index.js
+++ b/app/assets/javascripts/blob/viewer/index.js
@@ -1,5 +1,5 @@
import $ from 'jquery';
-import '~/behaviors/markdown/init_gfm';
+import { renderGFM } from '~/behaviors/markdown/render_gfm';
import { createAlert } from '~/flash';
import { __ } from '~/locale';
import {
@@ -195,7 +195,7 @@ export class BlobViewer {
this.toggleCopyButtonState();
loadViewer(newViewer)
.then((viewer) => {
- $(viewer).renderGFM();
+ renderGFM(viewer);
window.requestIdleCallback(() => {
this.$fileHolder.trigger('highlight:line');
handleLocationHash();