122 lines
4.0 KiB
JavaScript
122 lines
4.0 KiB
JavaScript
// NOTE: These will get set from loadPicker...
|
|
// Go to: https://console.developers.google.com/apis/credentials/oauthclient/
|
|
// The Browser API key obtained from the Google API Console.
|
|
// Replace with your own Browser API key, or your own key.
|
|
let developerKey = '';
|
|
// The Client ID obtained from the Google API Console. Replace with your own Client ID.
|
|
let clientId = ""
|
|
// Replace with your own project number from console.developers.google.com.
|
|
// See "Project number" under "IAM & Admin" > "Settings"
|
|
let appId = "";
|
|
|
|
|
|
// Scope to use to access user's Drive items.
|
|
let scope = ['https://www.googleapis.com/auth/drive.file'];
|
|
|
|
let pickerApiLoaded = false;
|
|
let picker = null;
|
|
let oauthToken;
|
|
|
|
// Use the Google API Loader script to load the google.picker script.
|
|
async function loadPicker() {
|
|
let message = "[Google Drive Picker Setup Error] Check console for error..."
|
|
try {
|
|
const data = await fetchData( formatURL('static/google-api-data.json') )
|
|
if (data.developerKey == "" || data.clientId == "" || data.appId == "") {
|
|
message = "[Google Drive Picker Setup Error] Set the fields in static/google-api-data.json file...";
|
|
throw message
|
|
}
|
|
|
|
developerKey = data.developerKey;
|
|
clientId = data.clientId;
|
|
appId = data.appId;
|
|
} catch (e) {
|
|
console.log(e);
|
|
displayMessage(message, "warning");
|
|
return ;
|
|
}
|
|
|
|
gapi.load('auth', {'callback': onAuthApiLoad});
|
|
gapi.load('picker', {'callback': onPickerApiLoad});
|
|
}
|
|
|
|
|
|
function onAuthApiLoad() {
|
|
window.gapi.auth.authorize(
|
|
{
|
|
'client_id': clientId,
|
|
'scope': scope,
|
|
'immediate': true
|
|
},
|
|
handleAuthResult);
|
|
}
|
|
|
|
function onPickerApiLoad() {
|
|
pickerApiLoaded = true;
|
|
console.log("Picker Api Loaded");
|
|
createPicker();
|
|
}
|
|
|
|
function handleAuthResult(authResult) {
|
|
if (authResult && !authResult.error) {
|
|
oauthToken = authResult.access_token;
|
|
console.log("Got auth...");
|
|
createPicker();
|
|
} else {
|
|
console.log("Auth issue...");
|
|
console.log(authResult.error);
|
|
}
|
|
}
|
|
|
|
// Create and render a Picker object for searching files.
|
|
function createPicker() {
|
|
if (pickerApiLoaded && oauthToken) {
|
|
let ulView = new google.picker.DocsUploadView()
|
|
.setIncludeFolders(true);
|
|
|
|
let docsView = new google.picker.DocsView()
|
|
.setIncludeFolders(true)
|
|
.setSelectFolderEnabled(true)
|
|
.setIncludeFolders(true)
|
|
.setParent("ROOT");
|
|
|
|
picker = new google.picker.PickerBuilder()
|
|
.enableFeature(google.picker.Feature.MULTISELECT_ENABLED)
|
|
.setAppId(appId)
|
|
.setOAuthToken(oauthToken)
|
|
.addView(docsView)
|
|
.addView(ulView)
|
|
.setDeveloperKey(developerKey)
|
|
.setCallback(pickerCallback)
|
|
.build();
|
|
console.log("Created Picker...");
|
|
}
|
|
}
|
|
|
|
function showGooglePicker() {
|
|
try {
|
|
picker.setVisible(true);
|
|
setTimeout(function () {
|
|
const picker = document.getElementsByClassName('picker shr-q-shr-r picker-dialog')[0];
|
|
const pickerBgs = document.getElementsByClassName('picker shr-q-shr-r-shr-xb picker-dialog-bg');
|
|
|
|
|
|
pickerBgs[0].style.display = "none";
|
|
pickerBgs[1].style.display = "none";
|
|
picker.style.top = "4em";
|
|
picker.stylezIndex = "999";
|
|
}, 1200);
|
|
} catch (e) {
|
|
displayMessage("No Google API Picker object setup...", "warning");
|
|
return ;
|
|
}
|
|
}
|
|
|
|
// A simple callback implementation.
|
|
function pickerCallback(data) {
|
|
if (data.action == google.picker.Action.PICKED) {
|
|
var fileId = data.docs[0].id;
|
|
console.log('The user selected: ' + fileId);
|
|
}
|
|
}
|