summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/repo/components/new_dropdown/upload.vue
diff options
context:
space:
mode:
authorPhil Hughes <me@iamphill.com>2017-10-31 10:47:10 +0000
committerFilipa Lacerda <filipa@gitlab.com>2017-10-31 10:47:10 +0000
commit68d1e9d1c42f34d3fb2d58779d862dcf47d5f17e (patch)
tree5bf4287612a089292ea950aff0e86f2ee158b2e2 /app/assets/javascripts/repo/components/new_dropdown/upload.vue
parent7e78db6e04c3760c90d676e9a797b1b16b1dff7b (diff)
downloadgitlab-ce-68d1e9d1c42f34d3fb2d58779d862dcf47d5f17e.tar.gz
Upload files through the multi-file editor
Diffstat (limited to 'app/assets/javascripts/repo/components/new_dropdown/upload.vue')
-rw-r--r--app/assets/javascripts/repo/components/new_dropdown/upload.vue67
1 files changed, 67 insertions, 0 deletions
diff --git a/app/assets/javascripts/repo/components/new_dropdown/upload.vue b/app/assets/javascripts/repo/components/new_dropdown/upload.vue
new file mode 100644
index 00000000000..cbea9c08249
--- /dev/null
+++ b/app/assets/javascripts/repo/components/new_dropdown/upload.vue
@@ -0,0 +1,67 @@
+<script>
+ import eventHub from '../../event_hub';
+
+ export default {
+ props: {
+ currentPath: {
+ type: String,
+ required: true,
+ },
+ },
+ methods: {
+ createFile(target, file, isText) {
+ const { name } = file;
+ const nameWithPath = `${this.currentPath !== '' ? `${this.currentPath}/` : ''}${name}`;
+ let { result } = target;
+
+ if (!isText) {
+ result = result.split('base64,')[1];
+ }
+
+ eventHub.$emit('createNewEntry', {
+ name: nameWithPath,
+ type: 'blob',
+ content: result,
+ toggleModal: false,
+ base64: !isText,
+ }, isText);
+ },
+ readFile(file) {
+ const reader = new FileReader();
+ const isText = file.type.match(/text.*/) !== null;
+
+ reader.addEventListener('load', e => this.createFile(e.target, file, isText), { once: true });
+
+ if (isText) {
+ reader.readAsText(file);
+ } else {
+ reader.readAsDataURL(file);
+ }
+ },
+ openFile() {
+ Array.from(this.$refs.fileUpload.files).forEach(file => this.readFile(file));
+ },
+ },
+ mounted() {
+ this.$refs.fileUpload.addEventListener('change', this.openFile);
+ },
+ beforeDestroy() {
+ this.$refs.fileUpload.removeEventListener('change', this.openFile);
+ },
+ };
+</script>
+
+<template>
+ <label
+ role="button"
+ class="menu-item"
+ >
+ {{ __('Upload file') }}
+ <input
+ id="file-upload"
+ type="file"
+ class="hidden"
+ ref="fileUpload"
+ />
+ </label>
+</template>