80 lines
1.8 KiB
JavaScript
80 lines
1.8 KiB
JavaScript
/* global Flash */
|
|
import axios from 'axios';
|
|
import Store from '../stores/repo_store';
|
|
import Api from '../../api';
|
|
import Helper from '../helpers/repo_helper';
|
|
|
|
const RepoService = {
|
|
url: '',
|
|
options: {
|
|
params: {
|
|
format: 'json',
|
|
},
|
|
},
|
|
richExtensionRegExp: /md/,
|
|
|
|
getRaw(url) {
|
|
return axios.get(url, {
|
|
// Stop Axios from parsing a JSON file into a JS object
|
|
transformResponse: [res => res],
|
|
});
|
|
},
|
|
|
|
buildParams(url = this.url) {
|
|
// shallow clone object without reference
|
|
const params = Object.assign({}, this.options.params);
|
|
|
|
if (this.urlIsRichBlob(url)) params.viewer = 'rich';
|
|
|
|
return params;
|
|
},
|
|
|
|
urlIsRichBlob(url = this.url) {
|
|
const extension = Helper.getFileExtension(url);
|
|
|
|
return this.richExtensionRegExp.test(extension);
|
|
},
|
|
|
|
getContent(url = this.url) {
|
|
const params = this.buildParams(url);
|
|
|
|
return axios.get(url, {
|
|
params,
|
|
});
|
|
},
|
|
|
|
getBase64Content(url = this.url) {
|
|
const request = axios.get(url, {
|
|
responseType: 'arraybuffer',
|
|
});
|
|
|
|
return request.then(response => this.bufferToBase64(response.data));
|
|
},
|
|
|
|
bufferToBase64(data) {
|
|
return new Buffer(data, 'binary').toString('base64');
|
|
},
|
|
|
|
blobURLtoParentTree(url) {
|
|
const urlArray = url.split('/');
|
|
urlArray.pop();
|
|
const blobIndex = urlArray.lastIndexOf('blob');
|
|
|
|
if (blobIndex > -1) urlArray[blobIndex] = 'tree';
|
|
|
|
return urlArray.join('/');
|
|
},
|
|
|
|
commitFiles(payload, cb) {
|
|
Api.commitMultiple(Store.projectId, payload, (data) => {
|
|
if (data.short_id && data.stats) {
|
|
Flash(`Your changes have been committed. Commit ${data.short_id} with ${data.stats.additions} additions, ${data.stats.deletions} deletions.`, 'notice');
|
|
} else {
|
|
Flash(data.message);
|
|
}
|
|
cb();
|
|
});
|
|
},
|
|
};
|
|
|
|
export default RepoService;
|