summaryrefslogtreecommitdiff
path: root/public/js/index.js
diff options
context:
space:
mode:
authorCheng-Han, Wu2016-03-04 23:17:35 +0800
committerCheng-Han, Wu2016-03-04 23:17:35 +0800
commit845ef9bad6b9f5ff471b62505f9e39300297a3a4 (patch)
tree8ee0bcd9a2b0ba22330d7ca4015c681bf4ad2bcf /public/js/index.js
parentc183002c14397c8b6e1ef26c1367197d987d7c62 (diff)
Support export to and import from Google Drive
Diffstat (limited to 'public/js/index.js')
-rw-r--r--public/js/index.js106
1 files changed, 103 insertions, 3 deletions
diff --git a/public/js/index.js b/public/js/index.js
index ec62f440..fd85d6db 100644
--- a/public/js/index.js
+++ b/public/js/index.js
@@ -486,10 +486,12 @@ var ui = {
},
export: {
dropbox: $(".ui-save-dropbox"),
+ googleDrive: $(".ui-save-google-drive"),
gist: $(".ui-save-gist")
},
import: {
dropbox: $(".ui-import-dropbox"),
+ googleDrive: $(".ui-import-google-drive"),
clipboard: $(".ui-import-clipboard")
},
beta: {
@@ -994,6 +996,22 @@ function closestIndex(arr, closestTo) {
return index; // return the value
}
+function showMessageModal(title, header, href, text, success) {
+ var modal = $('.message-modal');
+ modal.find('.modal-title').html(title);
+ modal.find('.modal-body h5').html(header);
+ if (href)
+ modal.find('.modal-body a').attr('href', href).text(text);
+ else
+ modal.find('.modal-body a').removeAttr('href').text(text);
+ modal.find('.modal-footer button').removeClass('btn-default btn-success btn-danger')
+ if (success)
+ modal.find('.modal-footer button').addClass('btn-success');
+ else
+ modal.find('.modal-footer button').addClass('btn-danger');
+ modal.modal('show');
+}
+
//button actions
//share
ui.toolbar.publish.attr("href", noteurl + "/publish");
@@ -1031,6 +1049,53 @@ ui.toolbar.export.dropbox.click(function () {
};
Dropbox.save(options);
});
+function uploadToGoogleDrive(accessToken) {
+ ui.spinner.show();
+ var filename = renderFilename(ui.area.markdown) + '.md';
+ var markdown = editor.getValue();
+ var blob = new Blob([markdown], {
+ type: "text/markdown;charset=utf-8"
+ });
+ blob.name = filename;
+ var uploader = new MediaUploader({
+ file: blob,
+ token: accessToken,
+ onComplete: function(data) {
+ data = JSON.parse(data);
+ showMessageModal('<i class="fa fa-cloud-upload"></i> Export to Google Drive', 'Export Complete!', data.alternateLink, 'Click here to view your file', true);
+ ui.spinner.hide();
+ },
+ onError: function(data) {
+ var modal = $('.export-modal');
+ showMessageModal('<i class="fa fa-cloud-upload"></i> Export to Google Drive', 'Export Error :(', '', data, false);
+ ui.spinner.hide();
+ }
+ });
+ uploader.upload();
+}
+function googleApiAuth(immediate, callback) {
+ gapi.auth.authorize(
+ {
+ 'client_id': GOOGLE_CLIENT_ID,
+ 'scope': 'https://www.googleapis.com/auth/drive.file',
+ 'immediate': immediate
+ }, callback ? callback : function() {});
+}
+function onGoogleClientLoaded() {
+ googleApiAuth(true);
+ buildImportFromGoogleDrive();
+}
+// export to google drive
+ui.toolbar.export.googleDrive.click(function (e) {
+ var token = gapi.auth.getToken();
+ if (token) {
+ uploadToGoogleDrive(token.access_token);
+ } else {
+ googleApiAuth(false, function(result) {
+ uploadToGoogleDrive(result.access_token);
+ });
+ }
+});
//export to gist
ui.toolbar.export.gist.attr("href", noteurl + "/gist");
//import from dropbox
@@ -1047,6 +1112,41 @@ ui.toolbar.import.dropbox.click(function () {
};
Dropbox.choose(options);
});
+// import from google drive
+var picker = null;
+function buildImportFromGoogleDrive() {
+ picker = new FilePicker({
+ apiKey: GOOGLE_API_KEY,
+ clientId: GOOGLE_CLIENT_ID,
+ buttonEl: ui.toolbar.import.googleDrive,
+ onSelect: function(file) {
+ if (file.downloadUrl) {
+ ui.spinner.show();
+ var accessToken = gapi.auth.getToken().access_token;
+ $.ajax({
+ type: 'GET',
+ beforeSend: function (request)
+ {
+ request.setRequestHeader('Authorization', 'Bearer ' + accessToken);
+ },
+ url: file.downloadUrl,
+ success: function(data) {
+ if (file.fileExtension == 'html')
+ parseToEditor(data);
+ else
+ replaceAll(data);
+ },
+ error: function (data) {
+ showMessageModal('<i class="fa fa-cloud-download"></i> Import from Google Drive', 'Import failed :(', '', data, false);
+ },
+ complete: function () {
+ ui.spinner.hide();
+ }
+ });
+ }
+ }
+ });
+}
//import from clipboard
ui.toolbar.import.clipboard.click(function () {
//na
@@ -1188,7 +1288,7 @@ function importFromUrl(url) {
//console.log(url);
if (url == null) return;
if (!isValidURL(url)) {
- alert('Not valid URL :(');
+ showMessageModal('<i class="fa fa-cloud-download"></i> Import from URL', 'Not valid URL :(', '', '', false);
return;
}
$.ajax({
@@ -1201,8 +1301,8 @@ function importFromUrl(url) {
else
replaceAll(data);
},
- error: function () {
- alert('Import failed :(');
+ error: function (data) {
+ showMessageModal('<i class="fa fa-cloud-download"></i> Import from URL', 'Import failed :(', '', data, false);
},
complete: function () {
ui.spinner.hide();