diff --git a/app/assets/javascripts/repo/components/repo.vue b/app/assets/javascripts/repo/components/repo.vue
index 81cdf06b3abb49fdc0d969affdf67fe5e72b3492..89ba5889dd06b7ad4ca9073c4e9c8c930f161aa1 100644
--- a/app/assets/javascripts/repo/components/repo.vue
+++ b/app/assets/javascripts/repo/components/repo.vue
@@ -4,9 +4,11 @@ import RepoCommitSection from './repo_commit_section.vue';
import RepoTabs from './repo_tabs.vue';
import RepoFileButtons from './repo_file_buttons.vue';
import RepoBinaryViewer from './repo_binary_viewer.vue';
+import RepoPreview from './repo_preview.vue';
import RepoMixin from '../mixins/repo_mixin';
import PopupDialog from '../../vue_shared/components/popup_dialog.vue';
import Store from '../stores/repo_store';
+import RepoHelper from '../helpers/repo_helper';
import MonacoLoaderHelper from '../helpers/monaco_loader_helper';
export default {
@@ -20,6 +22,11 @@ export default {
'repo-editor': MonacoLoaderHelper.repoEditorLoader,
'repo-commit-section': RepoCommitSection,
'popup-dialog': PopupDialog,
+ 'repo-preview': RepoPreview,
+ },
+
+ mounted() {
+ RepoHelper.getContent().catch(RepoHelper.loadingError);
},
methods: {
@@ -31,6 +38,8 @@ export default {
this.dialog.open = false;
this.dialog.status = status;
},
+
+ toggleBlobView: Store.toggleBlobView,
},
};
@@ -40,8 +49,8 @@ export default {
-
-
+
+
-
+
+
diff --git a/app/assets/javascripts/repo/components/repo_editor.vue b/app/assets/javascripts/repo/components/repo_editor.vue
index 97b6172353e63551727ffeca8f2f6b5acadac10f..aa0f50f6c14f04100c7856a2c2f85f6717bdec42 100644
--- a/app/assets/javascripts/repo/components/repo_editor.vue
+++ b/app/assets/javascripts/repo/components/repo_editor.vue
@@ -1,29 +1,34 @@
+
+
+
+
diff --git a/app/assets/javascripts/repo/helpers/repo_helper.js b/app/assets/javascripts/repo/helpers/repo_helper.js
index f27f1d3426d4277a318108933120f2989ed23c5c..839167b09bcf4385c6fc3bda310666b71c860ffc 100644
--- a/app/assets/javascripts/repo/helpers/repo_helper.js
+++ b/app/assets/javascripts/repo/helpers/repo_helper.js
@@ -160,23 +160,20 @@ const RepoHelper = {
Store.binaryMimeType = data.mime_type;
// file might be undefined
RepoHelper.setBinaryDataAsBase64(data);
- data.binary = true;
- } else {
+ const rawUrl = RepoHelper.getRawURLFromBlobURL(file.url || Service.url);
+ RepoHelper.setBinaryDataAsBase64(rawUrl, data);
+ Store.setViewToPreview();
+ } else if (!Store.isPreviewView()) {
Service.getRaw(data.raw_path)
- .then(response => {
- Store.blobRaw = response.data;
- })
- // Store.blobRaw = data.plain;
- data.binary = false;
- }
-
- if (!file.url) file.url = location.pathname;
+ .then((rawResponse) => {
+ Store.blobRaw = rawResponse.data;
+ data.plain = rawResponse.data;
- data.url = file.url;
- data.newContent = '';
+ RepoHelper.setFile(data, file);
+ }).catch(RepoHelper.loadingError);
+ }
- Store.addToOpenedFiles(data);
- Store.setActiveFiles(data);
+ if (Store.isPreviewView()) RepoHelper.setFile(data, file);
// if the file tree is empty
if (Store.files.length === 0) {
@@ -192,8 +189,18 @@ const RepoHelper = {
Store.addFilesToDirectory(file, Store.files, newDirectory);
Store.prevURL = Service.blobURLtoParentTree(Service.url);
}
- })
- .catch(RepoHelper.loadingError);
+ }).catch(RepoHelper.loadingError);
+ },
+
+ setFile(data, file) {
+ const newFile = data;
+
+ newFile.url = file.url || location.pathname;
+ newFile.url = file.url;
+ newFile.newContent = '';
+
+ Store.addToOpenedFiles(newFile);
+ Store.setActiveFiles(newFile);
},
toFA(icon) {
diff --git a/app/assets/javascripts/repo/services/repo_service.js b/app/assets/javascripts/repo/services/repo_service.js
index dc81b8bf618aa77c38c7aceff2ac10243ad2b589..6cc8321deb5d940986b7f3433c53abd9d3e65f31 100644
--- a/app/assets/javascripts/repo/services/repo_service.js
+++ b/app/assets/javascripts/repo/services/repo_service.js
@@ -19,7 +19,9 @@ const RepoService = {
},
getRaw(url) {
- return axios.get(url);
+ return axios.get(url, {
+ transformResponse: [res => res],
+ });
},
buildParams(url = this.url) {
diff --git a/app/assets/javascripts/repo/stores/repo_store.js b/app/assets/javascripts/repo/stores/repo_store.js
index dbb2f719d32bf8bd60964379902391cc2927a02c..512bda4adb1febeda572cf4b9447708730c34e07 100644
--- a/app/assets/javascripts/repo/stores/repo_store.js
+++ b/app/assets/javascripts/repo/stores/repo_store.js
@@ -20,6 +20,7 @@ const RepoStore = {
submodules: [],
blobRaw: '',
blobRendered: '',
+ currentBlobView: 'repo-preview',
openedFiles: [],
tabSize: 100,
defaultTabSize: 100,
@@ -211,10 +212,22 @@ const RepoStore = {
currentFile.newContent = contents;
},
+ toggleBlobView() {
+ RepoStore.currentBlobView = RepoStore.isPreviewView() ? 'repo-editor' : 'repo-preview';
+ },
+
+ setViewToPreview() {
+ RepoStore.currentBlobView = 'repo-preview';
+ },
+
// getters
isActiveFile(file) {
return file && file.url === RepoStore.activeFile.url;
},
+
+ isPreviewView() {
+ return RepoStore.currentBlobView === 'repo-preview';
+ },
};
export default RepoStore;
diff --git a/app/assets/stylesheets/pages/repo.scss b/app/assets/stylesheets/pages/repo.scss
index 8eaf710e346759109c856a542c59f350ab82a0f9..24413e82ffc0cef369110095ec0f6026699e50a1 100644
--- a/app/assets/stylesheets/pages/repo.scss
+++ b/app/assets/stylesheets/pages/repo.scss
@@ -38,6 +38,10 @@
@include truncate(250px);
}
+#editable-mode {
+ display: inline-block;
+}
+
.tree-content-holder {
border: 1px solid $border-color;
border-radius: $border-radius-default;
diff --git a/app/views/shared/repo/_editable_mode.html.haml b/app/views/shared/repo/_editable_mode.html.haml
index 2946afa1b0de377dbad98d3bef875d9f020fe877..a265352cd81ac22a23fdea49acf2b2faa232a20b 100644
--- a/app/views/shared/repo/_editable_mode.html.haml
+++ b/app/views/shared/repo/_editable_mode.html.haml
@@ -1,2 +1,2 @@
-%a.btn.btn-default#editable-mode
+#editable-mode
%repo-edit-button