Skip to content
Snippets Groups Projects
Commit 404314c6 authored by Phil Hughes's avatar Phil Hughes Committed by Filipa Lacerda
Browse files

Setup Vue app for repository file listing

parent 2f613f28
No related branches found
No related tags found
No related merge requests found
Showing
with 157 additions and 4 deletions
Loading
Loading
@@ -46,4 +46,12 @@ document.addEventListener('DOMContentLoaded', () => {
 
GpgBadges.fetch();
leaveByUrl('project');
if (document.getElementById('js-tree-list')) {
import('~/repository')
.then(m => m.default())
.catch(e => {
throw e;
});
}
});
Loading
Loading
@@ -40,4 +40,12 @@ document.addEventListener('DOMContentLoaded', () => {
}
 
GpgBadges.fetch();
if (document.getElementById('js-tree-list')) {
import('~/repository')
.then(m => m.default())
.catch(e => {
throw e;
});
}
});
<template>
<router-view />
</template>
import Vue from 'vue';
import VueApollo from 'vue-apollo';
import createDefaultClient from '~/lib/graphql';
Vue.use(VueApollo);
const defaultClient = createDefaultClient({});
export default new VueApollo({
defaultClient,
});
import Vue from 'vue';
import createRouter from './router';
import App from './components/app.vue';
import apolloProvider from './graphql';
export default function setupVueRepositoryList() {
const el = document.getElementById('js-tree-list');
const { projectPath, ref } = el.dataset;
apolloProvider.clients.defaultClient.cache.writeData({
data: {
projectPath,
ref,
},
});
return new Vue({
el,
router: createRouter(projectPath, ref),
apolloProvider,
render(h) {
return h(App);
},
});
}
<script>
import getRef from '../queries/getRef.graphql';
export default {
apollo: {
ref: {
query: getRef,
},
},
data() {
return {
ref: '',
};
},
};
</script>
<template>
<div>
<router-link :to="{ path: `/tree/${ref}/app` }">
Go to tree
</router-link>
</div>
</template>
<script>
export default {
props: {
path: {
type: String,
required: false,
default: '/',
},
},
};
</script>
<template>
<div>{{ path }}</div>
</template>
query getRef {
ref @client
}
import Vue from 'vue';
import VueRouter from 'vue-router';
import { joinPaths } from '../lib/utils/url_utility';
import IndexPage from './pages/index.vue';
import TreePage from './pages/tree.vue';
Vue.use(VueRouter);
export default function createRouter(base, baseRef) {
return new VueRouter({
mode: 'history',
base: joinPaths(gon.relative_url_root || '', base),
routes: [
{
path: '/',
name: 'projectRoot',
component: IndexPage,
},
{
path: `/tree/${baseRef}(/.*)?`,
name: 'treePath',
component: TreePage,
props: route => ({
path: route.params.pathMatch,
}),
beforeEnter(to, from, next) {
document
.querySelectorAll('.js-hide-on-navigation')
.forEach(el => el.classList.add('hidden'));
next();
},
},
],
});
}
Loading
Loading
@@ -4,6 +4,7 @@
- project = local_assigns.fetch(:project) { @project }
- content_url = local_assigns.fetch(:content_url) { @tree.readme ? project_blob_path(@project, tree_join(@ref, @tree.readme.path)) : project_tree_path(@project, @ref) }
- show_auto_devops_callout = show_auto_devops_callout?(@project)
- vue_file_list = Feature.enabled?(:vue_file_list, @project)
 
#tree-holder.tree-holder.clearfix
.nav-block
Loading
Loading
@@ -13,7 +14,12 @@
= render 'shared/commit_well', commit: commit, ref: ref, project: project
 
- if is_project_overview
.project-buttons.append-bottom-default
.project-buttons.append-bottom-default{ class: ("js-hide-on-navigation" if vue_file_list) }
= render 'stat_anchor_list', anchors: @project.statistics_buttons(show_auto_devops_callout: show_auto_devops_callout)
 
= render 'projects/tree/tree_content', tree: @tree, content_url: content_url
- if vue_file_list
#js-tree-list{ data: { project_path: @project.full_path, ref: ref } }
- if @tree.readme
= render "projects/tree/readme", readme: @tree.readme
- else
= render 'projects/tree/tree_content', tree: @tree, content_url: content_url
- empty_repo = @project.empty_repo?
- show_auto_devops_callout = show_auto_devops_callout?(@project)
- max_project_topic_length = 15
.project-home-panel{ class: ("empty-project" if empty_repo) }
.project-home-panel{ class: [("empty-project" if empty_repo), ("js-hide-on-navigation" if Feature.enabled?(:vue_file_list, @project))] }
.row.append-bottom-8
.home-panel-title-row.col-md-12.col-lg-6.d-flex
.avatar-container.rect-avatar.s64.home-panel-avatar.append-right-default.float-none
Loading
Loading
- if readme.rich_viewer
%article.file-holder.readme-holder{ id: 'readme', class: ("limited-width-container" unless fluid_layout) }
%article.file-holder.readme-holder{ id: 'readme', class: [("limited-width-container" unless fluid_layout), ("js-hide-on-navigation" if Feature.enabled?(:vue_file_list, @project))] }
.js-file-title.file-title
= blob_icon readme.mode, readme.name
= link_to project_blob_path(@project, tree_join(@ref, readme.path)) do
Loading
Loading
Loading
Loading
@@ -5,6 +5,8 @@ describe 'Projects > Files > User views files page' do
let(:user) { project.owner }
 
before do
stub_feature_flags(vue_file_list: false)
sign_in user
visit project_tree_path(project, project.repository.root_ref)
end
Loading
Loading
Loading
Loading
@@ -11,6 +11,7 @@ describe "User browses files" do
let(:user) { project.owner }
 
before do
stub_feature_flags(vue_file_list: false)
stub_feature_flags(csslab: false)
sign_in(user)
end
Loading
Loading
Loading
Loading
@@ -5,6 +5,8 @@ describe 'Projects > Files > User browses LFS files' do
let(:user) { project.owner }
 
before do
stub_feature_flags(vue_file_list: false)
sign_in(user)
end
 
Loading
Loading
Loading
Loading
@@ -11,6 +11,8 @@ describe 'Projects > Files > User creates a directory', :js do
let(:user) { create(:user) }
 
before do
stub_feature_flags(vue_file_list: false)
project.add_developer(user)
sign_in(user)
visit project_tree_path(project, 'master')
Loading
Loading
Loading
Loading
@@ -12,6 +12,8 @@ describe 'Projects > Files > User deletes files', :js do
let(:user) { create(:user) }
 
before do
stub_feature_flags(vue_file_list: false)
sign_in(user)
end
 
Loading
Loading
Loading
Loading
@@ -10,6 +10,7 @@ describe 'Projects > Files > User edits files', :js do
 
before do
stub_feature_flags(web_ide_default: false)
stub_feature_flags(vue_file_list: false)
 
sign_in(user)
end
Loading
Loading
Loading
Loading
@@ -14,6 +14,8 @@ describe 'Projects > Files > User replaces files', :js do
let(:user) { create(:user) }
 
before do
stub_feature_flags(vue_file_list: false)
sign_in(user)
end
 
Loading
Loading
Loading
Loading
@@ -14,6 +14,8 @@ describe 'Projects > Files > User uploads files' do
let(:project2_tree_path_root_ref) { project_tree_path(project2, project2.repository.root_ref) }
 
before do
stub_feature_flags(vue_file_list: false)
project.add_maintainer(user)
sign_in(user)
end
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment