123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- <!DOCTYPE html>
- <html>
- <!-- This file is necessary for the contents of the google drive upload window, as it fully contains google's modal window. -->
- <head>
- <title>Choose a File</title>
- <style>
- .picker-dialog {
- left: 0px !important;
- top: 0px !important;
- outline: none !important;
- border: none !important;
- box-shadow: none !important;
- }
-
- .picker-dialog, .picker-dialog-content {
- width: 100% !important;
- height: 100% !important;
- }
-
- .center {
- position: absolute;
- left: 50%;
- top: 50%;
- transform: translate(-50%, -50%);
- margin: 0px;
- }
-
- #authorizebutton {
- font-size: 36px;
- }
- </style>
- </head>
- <body>
- <input type="button" id="authorizebutton" class="center" value="Authorize">
- <script src="https://apis.google.com/js/api.js"></script>
- <script src="https://accounts.google.com/gsi/client"></script>
- <script src="tokens.js"></script>
- <script>
- var queries = Object.fromEntries(window.location.search.substring(1).split("&").map(i => i.split("=")).map(i => i.map(i => i && decodeURIComponent(i))));
-
- var fileTypes = queries.exts ? queries.exts.split(",") : [];
-
- var scope = ["https://www.googleapis.com/auth/drive.readonly"];
-
- var pickerApiLoaded = false;
- var oauthToken;
-
- var authorizeButton = document.getElementById("authorizebutton");
- authorizeButton.onclick = loadPicker;
-
- function onPickerApiLoad() {
- pickerApiLoaded = true;
- tryCreatePicker();
- }
-
- function handleTokenResponse(tokenResponse) {
- if (tokenResponse && tokenResponse.access_token) {
- authorizeButton.style.display = "none";
- oauthToken = tokenResponse.access_token;
- tryCreatePicker();
- }
- }
-
- function getAuth() {
- google.accounts.oauth2.initTokenClient({"client_id": googleOauthClientId, "scope": scope.join(" "), callback: handleTokenResponse}).requestAccessToken();
- }
-
- function loadPicker() {
- gapi.load("picker", {"callback": onPickerApiLoad});
- getAuth();
- }
-
- function tryCreatePicker(config) {
- if (pickerApiLoaded && oauthToken) {
- var picker = new google.picker.PickerBuilder()
- .setAppId(googleProjectId)
- .setOAuthToken(oauthToken)
- .setDeveloperKey(googleApiKey)
- .addView(new google.picker.DocsView()
- .setIncludeFolders(true)
- .setQuery(fileTypes.join(" || "))
- )
- .enableFeature(google.picker.Feature.NAV_HIDDEN)
- .hideTitleBar()
- .setCallback(pickerCallback)
- .build();
- picker.setVisible(true);
- }
- }
-
- var isDone;
-
- function finish(message, name, data) {
- window.opener.postMessage({webretro: {message: message, name: name, data: data}}, "*");
- isDone = true;
- window.close();
- }
-
- window.addEventListener("unload", function() {
- if (!isDone) finish("cancelled");
- }, false);
-
- function pickerCallback(data) {
- if (data.action == google.picker.Action.PICKED) {
- document.body.innerHTML += "<h1 class='center'>Loading... Do not close this window.</h1>";
- var file = data.docs[0];
- var xhr = new XMLHttpRequest();
- xhr.open("GET", "https://www.googleapis.com/drive/v3/files/" + file.id + "?alt=media&source=downloadUrl", true);
- xhr.setRequestHeader("Authorization", "Bearer " + oauthToken);
- xhr.responseType = "arraybuffer";
- xhr.onload = function() {
- finish("success", file.name, this.response);
- }
- xhr.onerror = function() {
- finish("error");
- }
- xhr.send();
- } else if (data.action == google.picker.Action.CANCEL) {
- finish("cancelled");
- }
- }
-
- </script>
- </body>
- </html>
|