From e0df4a9eb19fb9a65ab5b560672c2a9903dddae3 Mon Sep 17 00:00:00 2001 From: Jacob Schatz Date: Thu, 28 Sep 2017 10:05:38 -0400 Subject: Removes the target branch and only uses the source branch. --- app/assets/javascripts/repo/index.js | 3 --- 1 file changed, 3 deletions(-) (limited to 'app/assets/javascripts/repo/index.js') diff --git a/app/assets/javascripts/repo/index.js b/app/assets/javascripts/repo/index.js index 6c1d468e937..b32939336c0 100644 --- a/app/assets/javascripts/repo/index.js +++ b/app/assets/javascripts/repo/index.js @@ -11,9 +11,6 @@ function initDropdowns() { } function addEventsForNonVueEls() { - $(document).on('change', '.dropdown', () => { - Store.targetBranch = $('.project-refs-target-form input[name="ref"]').val(); - }); window.onbeforeunload = function confirmUnload(e) { const hasChanged = Store.openedFiles -- cgit v1.2.3 From a94f2ea915f9a15c8d9ce1a7d7b5fbe6b76fee40 Mon Sep 17 00:00:00 2001 From: Jacob Schatz Date: Thu, 28 Sep 2017 21:38:14 -0400 Subject: Fix static analysis. --- app/assets/javascripts/repo/index.js | 1 - 1 file changed, 1 deletion(-) (limited to 'app/assets/javascripts/repo/index.js') diff --git a/app/assets/javascripts/repo/index.js b/app/assets/javascripts/repo/index.js index b32939336c0..7d0123e3d3a 100644 --- a/app/assets/javascripts/repo/index.js +++ b/app/assets/javascripts/repo/index.js @@ -11,7 +11,6 @@ function initDropdowns() { } function addEventsForNonVueEls() { - window.onbeforeunload = function confirmUnload(e) { const hasChanged = Store.openedFiles .some(file => file.changed); -- cgit v1.2.3 From c3195e83a8ba7ac54516fa9f08340e4dd442f63b Mon Sep 17 00:00:00 2001 From: Jacob Schatz Date: Thu, 12 Oct 2017 21:04:17 +0000 Subject: Add create merge checkbox. --- app/assets/javascripts/repo/index.js | 3 +++ 1 file changed, 3 insertions(+) (limited to 'app/assets/javascripts/repo/index.js') diff --git a/app/assets/javascripts/repo/index.js b/app/assets/javascripts/repo/index.js index 7d0123e3d3a..1a09f411b22 100644 --- a/app/assets/javascripts/repo/index.js +++ b/app/assets/javascripts/repo/index.js @@ -31,8 +31,11 @@ function setInitialStore(data) { Store.projectUrl = data.projectUrl; Store.canCommit = data.canCommit; Store.onTopOfBranch = data.onTopOfBranch; + Store.newMrTemplateUrl = decodeURIComponent(data.newMrTemplateUrl); + Store.customBranchURL = decodeURIComponent(data.blobUrl); Store.currentBranch = $('button.dropdown-menu-toggle').attr('data-ref'); Store.checkIsCommitable(); + Store.setBranchHash(); } function initRepo(el) { -- cgit v1.2.3 From b1b91aa0658d81107327884ca56f579cf6146078 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 13 Oct 2017 10:08:10 +0100 Subject: Refactored multi-file data structure This moves away from storing in a single array just to render the table. It now stores in a multi-dimensional array/object type where each entry in the array can have its own tree. This makes storing the data for future feature a little easier as there is only one way to store the data. Previously to insert a directory the code had to insert the directory & then the file at the right point in the array. Now the directory can be inserted anywhere & then a file can be quickly added into this directory. The rendering is still done with a single array, but this is handled through underscore. Underscore takes the array & then goes through each item to flatten it into one. It is done this way to save changing the markup away from table, keeping it as a table keeps it semantically correct. --- app/assets/javascripts/repo/index.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'app/assets/javascripts/repo/index.js') diff --git a/app/assets/javascripts/repo/index.js b/app/assets/javascripts/repo/index.js index 1a09f411b22..f0a059d7ae3 100644 --- a/app/assets/javascripts/repo/index.js +++ b/app/assets/javascripts/repo/index.js @@ -1,5 +1,6 @@ import $ from 'jquery'; import Vue from 'vue'; +import { convertPermissionToBoolean } from '../lib/utils/common_utils'; import Service from './services/repo_service'; import Store from './stores/repo_store'; import Repo from './components/repo.vue'; @@ -33,6 +34,7 @@ function setInitialStore(data) { Store.onTopOfBranch = data.onTopOfBranch; Store.newMrTemplateUrl = decodeURIComponent(data.newMrTemplateUrl); Store.customBranchURL = decodeURIComponent(data.blobUrl); + Store.isRoot = convertPermissionToBoolean(data.root); Store.currentBranch = $('button.dropdown-menu-toggle').attr('data-ref'); Store.checkIsCommitable(); Store.setBranchHash(); -- cgit v1.2.3 From ddc0f837a019ce7140dc5c84fdef4ff4094f5cab Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Mon, 16 Oct 2017 14:19:22 +0100 Subject: made serializing generic fixed previous directory showing when it shouldnt --- app/assets/javascripts/repo/index.js | 1 + 1 file changed, 1 insertion(+) (limited to 'app/assets/javascripts/repo/index.js') diff --git a/app/assets/javascripts/repo/index.js b/app/assets/javascripts/repo/index.js index f0a059d7ae3..65dee7d5fd1 100644 --- a/app/assets/javascripts/repo/index.js +++ b/app/assets/javascripts/repo/index.js @@ -35,6 +35,7 @@ function setInitialStore(data) { Store.newMrTemplateUrl = decodeURIComponent(data.newMrTemplateUrl); Store.customBranchURL = decodeURIComponent(data.blobUrl); Store.isRoot = convertPermissionToBoolean(data.root); + Store.isInitialRoot = convertPermissionToBoolean(data.root); Store.currentBranch = $('button.dropdown-menu-toggle').attr('data-ref'); Store.checkIsCommitable(); Store.setBranchHash(); -- cgit v1.2.3 From caee9d5882050b3998f05edf7aff8bd3c36591c3 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Thu, 12 Oct 2017 10:55:11 +0100 Subject: Add new files & directories in the multi-file editor Closes #38614 --- app/assets/javascripts/repo/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'app/assets/javascripts/repo/index.js') diff --git a/app/assets/javascripts/repo/index.js b/app/assets/javascripts/repo/index.js index 65dee7d5fd1..b1b40d8b8cc 100644 --- a/app/assets/javascripts/repo/index.js +++ b/app/assets/javascripts/repo/index.js @@ -5,6 +5,7 @@ import Service from './services/repo_service'; import Store from './stores/repo_store'; import Repo from './components/repo.vue'; import RepoEditButton from './components/repo_edit_button.vue'; +import newDropdown from './components/new_dropdown/index.vue'; import Translate from '../vue_shared/translate'; function initDropdowns() { @@ -62,9 +63,22 @@ function initRepoEditButton(el) { }); } +function initNewDropdown(el) { + return new Vue({ + el, + components: { + newDropdown, + }, + render(createElement) { + return createElement('new-dropdown'); + }, + }); +} + function initRepoBundle() { const repo = document.getElementById('repo'); const editButton = document.querySelector('.editable-mode'); + const newDropdownHolder = document.querySelector('.js-new-dropdown'); setInitialStore(repo.dataset); addEventsForNonVueEls(); initDropdowns(); @@ -73,6 +87,7 @@ function initRepoBundle() { initRepo(repo); initRepoEditButton(editButton); + initNewDropdown(newDropdownHolder); } $(initRepoBundle); -- cgit v1.2.3 From 389c852d1210f07d34f2235423235a8ac1cff27b Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Thu, 19 Oct 2017 08:58:06 +0100 Subject: correctly creates file in currently viewed directory specs --- app/assets/javascripts/repo/index.js | 1 + 1 file changed, 1 insertion(+) (limited to 'app/assets/javascripts/repo/index.js') diff --git a/app/assets/javascripts/repo/index.js b/app/assets/javascripts/repo/index.js index b1b40d8b8cc..3586b5fea67 100644 --- a/app/assets/javascripts/repo/index.js +++ b/app/assets/javascripts/repo/index.js @@ -28,6 +28,7 @@ function setInitialStore(data) { Store.service = Service; Store.service.url = data.url; Store.service.refsUrl = data.refsUrl; + Store.path = data.currentPath; Store.projectId = data.projectId; Store.projectName = data.projectName; Store.projectUrl = data.projectUrl; -- cgit v1.2.3 From 07a8c54355d3b5d51319edcef397fd998d9d5999 Mon Sep 17 00:00:00 2001 From: Jacob Schatz Date: Mon, 23 Oct 2017 10:57:23 +0000 Subject: Create new branch from dropdown. --- app/assets/javascripts/repo/index.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'app/assets/javascripts/repo/index.js') diff --git a/app/assets/javascripts/repo/index.js b/app/assets/javascripts/repo/index.js index 65dee7d5fd1..85e960df497 100644 --- a/app/assets/javascripts/repo/index.js +++ b/app/assets/javascripts/repo/index.js @@ -5,6 +5,7 @@ import Service from './services/repo_service'; import Store from './stores/repo_store'; import Repo from './components/repo.vue'; import RepoEditButton from './components/repo_edit_button.vue'; +import newBranchForm from './components/new_branch_form.vue'; import Translate from '../vue_shared/translate'; function initDropdowns() { @@ -62,6 +63,26 @@ function initRepoEditButton(el) { }); } +function initNewBranchForm() { + const el = document.querySelector('.js-new-branch-dropdown'); + + if (!el) return null; + + return new Vue({ + el, + components: { + newBranchForm, + }, + render(createElement) { + return createElement('new-branch-form', { + props: { + currentBranch: Store.currentBranch, + }, + }); + }, + }); +} + function initRepoBundle() { const repo = document.getElementById('repo'); const editButton = document.querySelector('.editable-mode'); @@ -73,6 +94,7 @@ function initRepoBundle() { initRepo(repo); initRepoEditButton(editButton); + initNewBranchForm(); } $(initRepoBundle); -- cgit v1.2.3 From 05728e785ce7cd39c4c517aa0ea50b3bba44d537 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Thu, 26 Oct 2017 11:14:31 +0100 Subject: [WIP] Move multi-file editor store to Vuex --- app/assets/javascripts/repo/index.js | 82 ++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 40 deletions(-) (limited to 'app/assets/javascripts/repo/index.js') diff --git a/app/assets/javascripts/repo/index.js b/app/assets/javascripts/repo/index.js index 72fc5a70648..475d53e5765 100644 --- a/app/assets/javascripts/repo/index.js +++ b/app/assets/javascripts/repo/index.js @@ -1,5 +1,5 @@ -import $ from 'jquery'; import Vue from 'vue'; +import { mapActions } from 'vuex'; import { convertPermissionToBoolean } from '../lib/utils/common_utils'; import Service from './services/repo_service'; import Store from './stores/repo_store'; @@ -7,27 +7,11 @@ import Repo from './components/repo.vue'; import RepoEditButton from './components/repo_edit_button.vue'; import newBranchForm from './components/new_branch_form.vue'; import newDropdown from './components/new_dropdown/index.vue'; +import vStore from './stores'; import Translate from '../vue_shared/translate'; -function initDropdowns() { - $('.js-tree-ref-target-holder').hide(); -} - -function addEventsForNonVueEls() { - window.onbeforeunload = function confirmUnload(e) { - const hasChanged = Store.openedFiles - .some(file => file.changed); - if (!hasChanged) return undefined; - const event = e || window.event; - if (event) event.returnValue = 'Are you sure you want to lose unsaved changes?'; - // For Safari - return 'Are you sure you want to lose unsaved changes?'; - }; -} - function setInitialStore(data) { Store.service = Service; - Store.service.url = data.url; Store.service.refsUrl = data.refsUrl; Store.path = data.currentPath; Store.projectId = data.projectId; @@ -47,9 +31,37 @@ function setInitialStore(data) { function initRepo(el) { return new Vue({ el, + store: vStore, components: { repo: Repo, }, + methods: { + ...mapActions([ + 'setInitialData', + ]), + }, + created() { + const data = el.dataset; + + this.setInitialData({ + project: { + id: data.projectId, + name: data.projectName, + }, + endpoints: { + rootEndpoint: data.url, + newMergeRequestUrl: data.newMergeRequestUrl, + rootUrl: data.rootUrl, + }, + canCommit: convertPermissionToBoolean(data.canCommit), + onTopOfBranch: convertPermissionToBoolean(data.onTopOfBranch), + currentRef: data.ref, + // TODO: get through data attribute + currentBranch: document.querySelector('.js-project-refs-dropdown').dataset.ref, + isRoot: convertPermissionToBoolean(data.root), + isInitialRoot: convertPermissionToBoolean(data.root), + }); + }, render(createElement) { return createElement('repo'); }, @@ -59,6 +71,7 @@ function initRepo(el) { function initRepoEditButton(el) { return new Vue({ el, + store: vStore, components: { repoEditButton: RepoEditButton, }, @@ -87,32 +100,21 @@ function initNewBranchForm() { components: { newBranchForm, }, + store: vStore, render(createElement) { - return createElement('new-branch-form', { - props: { - currentBranch: Store.currentBranch, - }, - }); + return createElement('new-branch-form'); }, }); } -function initRepoBundle() { - const repo = document.getElementById('repo'); - const editButton = document.querySelector('.editable-mode'); - const newDropdownHolder = document.querySelector('.js-new-dropdown'); - setInitialStore(repo.dataset); - addEventsForNonVueEls(); - initDropdowns(); - - Vue.use(Translate); - - initRepo(repo); - initRepoEditButton(editButton); - initNewBranchForm(); - initNewDropdown(newDropdownHolder); -} +const repo = document.getElementById('repo'); +const editButton = document.querySelector('.editable-mode'); +const newDropdownHolder = document.querySelector('.js-new-dropdown'); +setInitialStore(repo.dataset); -$(initRepoBundle); +Vue.use(Translate); -export default initRepoBundle; +initRepo(repo); +initRepoEditButton(editButton); +initNewBranchForm(); +initNewDropdown(newDropdownHolder); -- cgit v1.2.3 From b4f7496b1c82f54e0fd94d0335526e37a0a20996 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Thu, 26 Oct 2017 15:12:34 +0100 Subject: moved new file/directory into new store removed old store, helper & monaco loader moved monaco loader into editor component because it is the only component that requires monaco [ci skip] --- app/assets/javascripts/repo/index.js | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) (limited to 'app/assets/javascripts/repo/index.js') diff --git a/app/assets/javascripts/repo/index.js b/app/assets/javascripts/repo/index.js index 475d53e5765..8ca5bb45d05 100644 --- a/app/assets/javascripts/repo/index.js +++ b/app/assets/javascripts/repo/index.js @@ -1,8 +1,6 @@ import Vue from 'vue'; import { mapActions } from 'vuex'; import { convertPermissionToBoolean } from '../lib/utils/common_utils'; -import Service from './services/repo_service'; -import Store from './stores/repo_store'; import Repo from './components/repo.vue'; import RepoEditButton from './components/repo_edit_button.vue'; import newBranchForm from './components/new_branch_form.vue'; @@ -10,24 +8,6 @@ import newDropdown from './components/new_dropdown/index.vue'; import vStore from './stores'; import Translate from '../vue_shared/translate'; -function setInitialStore(data) { - Store.service = Service; - Store.service.refsUrl = data.refsUrl; - Store.path = data.currentPath; - Store.projectId = data.projectId; - Store.projectName = data.projectName; - Store.projectUrl = data.projectUrl; - Store.canCommit = data.canCommit; - Store.onTopOfBranch = data.onTopOfBranch; - Store.newMrTemplateUrl = decodeURIComponent(data.newMrTemplateUrl); - Store.customBranchURL = decodeURIComponent(data.blobUrl); - Store.isRoot = convertPermissionToBoolean(data.root); - Store.isInitialRoot = convertPermissionToBoolean(data.root); - Store.currentBranch = $('button.dropdown-menu-toggle').attr('data-ref'); - Store.checkIsCommitable(); - Store.setBranchHash(); -} - function initRepo(el) { return new Vue({ el, @@ -47,6 +27,7 @@ function initRepo(el) { project: { id: data.projectId, name: data.projectName, + url: data.projectUrl, }, endpoints: { rootEndpoint: data.url, @@ -56,6 +37,7 @@ function initRepo(el) { canCommit: convertPermissionToBoolean(data.canCommit), onTopOfBranch: convertPermissionToBoolean(data.onTopOfBranch), currentRef: data.ref, + path: data.currentPath, // TODO: get through data attribute currentBranch: document.querySelector('.js-project-refs-dropdown').dataset.ref, isRoot: convertPermissionToBoolean(data.root), @@ -81,6 +63,7 @@ function initRepoEditButton(el) { function initNewDropdown(el) { return new Vue({ el, + store: vStore, components: { newDropdown, }, @@ -110,7 +93,6 @@ function initNewBranchForm() { const repo = document.getElementById('repo'); const editButton = document.querySelector('.editable-mode'); const newDropdownHolder = document.querySelector('.js-new-dropdown'); -setInitialStore(repo.dataset); Vue.use(Translate); -- cgit v1.2.3 From 5c0c345a3a8a022b0bfdbab2efd125c42b297373 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Thu, 26 Oct 2017 17:36:27 +0100 Subject: various different performance improvements [ci skip] --- app/assets/javascripts/repo/index.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'app/assets/javascripts/repo/index.js') diff --git a/app/assets/javascripts/repo/index.js b/app/assets/javascripts/repo/index.js index 8ca5bb45d05..480d46eab81 100644 --- a/app/assets/javascripts/repo/index.js +++ b/app/assets/javascripts/repo/index.js @@ -5,13 +5,13 @@ import Repo from './components/repo.vue'; import RepoEditButton from './components/repo_edit_button.vue'; import newBranchForm from './components/new_branch_form.vue'; import newDropdown from './components/new_dropdown/index.vue'; -import vStore from './stores'; +import store from './stores'; import Translate from '../vue_shared/translate'; function initRepo(el) { return new Vue({ el, - store: vStore, + store, components: { repo: Repo, }, @@ -53,17 +53,20 @@ function initRepo(el) { function initRepoEditButton(el) { return new Vue({ el, - store: vStore, + store, components: { repoEditButton: RepoEditButton, }, + render(createElement) { + return createElement('repo-edit-button'); + }, }); } function initNewDropdown(el) { return new Vue({ el, - store: vStore, + store, components: { newDropdown, }, @@ -83,7 +86,7 @@ function initNewBranchForm() { components: { newBranchForm, }, - store: vStore, + store, render(createElement) { return createElement('new-branch-form'); }, -- cgit v1.2.3 From 307883a5eb582ac203fe0777fcb11fa7d6c3ddca Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 31 Oct 2017 10:18:56 +0000 Subject: get branch name from the DOM --- app/assets/javascripts/repo/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'app/assets/javascripts/repo/index.js') diff --git a/app/assets/javascripts/repo/index.js b/app/assets/javascripts/repo/index.js index 480d46eab81..b6801af7fcb 100644 --- a/app/assets/javascripts/repo/index.js +++ b/app/assets/javascripts/repo/index.js @@ -9,6 +9,8 @@ import store from './stores'; import Translate from '../vue_shared/translate'; function initRepo(el) { + if (!el) return null; + return new Vue({ el, store, @@ -38,8 +40,7 @@ function initRepo(el) { onTopOfBranch: convertPermissionToBoolean(data.onTopOfBranch), currentRef: data.ref, path: data.currentPath, - // TODO: get through data attribute - currentBranch: document.querySelector('.js-project-refs-dropdown').dataset.ref, + currentBranch: data.currentBranch, isRoot: convertPermissionToBoolean(data.root), isInitialRoot: convertPermissionToBoolean(data.root), }); -- cgit v1.2.3