Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Schatz <jschatz1@gmail.com>2017-04-12 01:03:50 +0300
committerJacob Schatz <jschatz1@gmail.com>2017-04-12 01:03:50 +0300
commit13a4075a771cb94678dbd530c94594a3309b01c7 (patch)
treec2a65def67be44104832d83a66c7ccae1b62926d
parent069c54a7d7a1d1d6ec1dc48c4212139eff6735df (diff)
Initial word docx rendering
-rw-r--r--app/assets/javascripts/blob/docx/docx.js0
-rw-r--r--app/assets/javascripts/blob/docx/index.js59
-rw-r--r--app/assets/javascripts/blob/docx_viewer.js6
-rw-r--r--app/assets/stylesheets/framework/docx.scss0
-rw-r--r--app/models/blob.rb6
-rw-r--r--app/views/projects/blob/_docx.html.haml6
-rw-r--r--config/webpack.config.js1
7 files changed, 78 insertions, 0 deletions
diff --git a/app/assets/javascripts/blob/docx/docx.js b/app/assets/javascripts/blob/docx/docx.js
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/app/assets/javascripts/blob/docx/docx.js
diff --git a/app/assets/javascripts/blob/docx/index.js b/app/assets/javascripts/blob/docx/index.js
new file mode 100644
index 00000000000..3d2319160fd
--- /dev/null
+++ b/app/assets/javascripts/blob/docx/index.js
@@ -0,0 +1,59 @@
+import JSZip from 'jszip';
+import JSZipUtils from 'jszip-utils';
+import DocX from './docx';
+
+export default class DocxRenderer {
+ constructor(container) {
+ this.el = container;
+ this.loader = this.el.querySelector('i');
+ this.endpoint = this.el.dataset.endpoint;
+ this.loadFile();
+ this.loader.style = 'display:none;';
+ this
+ }
+
+ loadFile(file) {
+ return this.getZipFile()
+ .then(data => {
+ return JSZip.loadAsync(data)
+ })
+ .then(asyncResult => {
+ return asyncResult.files['word/document.xml'].async('string')
+ })
+ .then((content) => {
+ const $xml = $($.parseXML(content));
+ const $textNodes = $xml.find('t');
+ $textNodes.each((i, el) => {
+ const p = document.createElement('p');
+ p.innerText = $(el).text();
+ this.el.appendChild(p);
+ })
+ })
+ .catch(this.error.bind(this));
+ }
+
+ error(e) {
+ console.log(e)
+ const errorMsg = document.createElement('p');
+
+ errorMsg.className = 'prepend-top-default append-bottom-default text-center';
+ errorMsg.textContent = 'Cannot show preview.';
+ this.el.appendChild(errorMsg);
+ }
+
+ getZipFile() {
+ return new JSZip.external.Promise((resolve, reject) => {
+ JSZipUtils.getBinaryContent(this.el.dataset.endpoint, (err, data) => {
+ if (err) {
+ reject(err);
+ } else {
+ resolve(data);
+ }
+ });
+ });
+ }
+
+ renderFile(e) {
+ console.log('renderFile', e.target.response)
+ }
+} \ No newline at end of file
diff --git a/app/assets/javascripts/blob/docx_viewer.js b/app/assets/javascripts/blob/docx_viewer.js
new file mode 100644
index 00000000000..c15d1c9bee8
--- /dev/null
+++ b/app/assets/javascripts/blob/docx_viewer.js
@@ -0,0 +1,6 @@
+import DocxRenderer from './docx';
+
+document.addEventListener('DOMContentLoaded', () => {
+ const viewer = new DocxRenderer(document.getElementById('js-docx-viewer'));
+ console.log('viewer',viewer)
+}); \ No newline at end of file
diff --git a/app/assets/stylesheets/framework/docx.scss b/app/assets/stylesheets/framework/docx.scss
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/app/assets/stylesheets/framework/docx.scss
diff --git a/app/models/blob.rb b/app/models/blob.rb
index 55872acef51..b7445a76ec1 100644
--- a/app/models/blob.rb
+++ b/app/models/blob.rb
@@ -62,6 +62,10 @@ class Blob < SimpleDelegator
binary? && extension == 'sketch'
end
+ def docx?
+ binary? && extension == 'docx'
+ end
+
def stl?
extension == 'stl'
end
@@ -95,6 +99,8 @@ class Blob < SimpleDelegator
'notebook'
elsif sketch?
'sketch'
+ elsif docx?
+ 'docx'
elsif stl?
'stl'
elsif markup?
diff --git a/app/views/projects/blob/_docx.html.haml b/app/views/projects/blob/_docx.html.haml
new file mode 100644
index 00000000000..632ef5822d3
--- /dev/null
+++ b/app/views/projects/blob/_docx.html.haml
@@ -0,0 +1,6 @@
+- content_for :page_specific_javascripts do
+ = page_specific_javascript_bundle_tag('docx_viewer')
+
+.file-content.is-docx-loading
+ .text-center#js-docx-viewer{ data: { endpoint: namespace_project_raw_path(@project.namespace, @project, @id) } }
+ = icon('spinner spin 2x', class: 'prepend-top-default append-bottom-default', 'aria-hidden' => 'true', 'aria-label' => 'Loading') \ No newline at end of file
diff --git a/config/webpack.config.js b/config/webpack.config.js
index 0fea3f8222b..3b1102f48c2 100644
--- a/config/webpack.config.js
+++ b/config/webpack.config.js
@@ -45,6 +45,7 @@ var config = {
protected_tags: './protected_tags',
snippet: './snippet/snippet_bundle.js',
stl_viewer: './blob/stl_viewer.js',
+ docx_viewer: './blob/docx_viewer.js',
terminal: './terminal/terminal_bundle.js',
u2f: ['vendor/u2f'],
users: './users/users_bundle.js',