1+ <!DOCTYPE html>
2+ < html >
3+ < head >
4+ < title > Choose a File</ title >
5+ < style >
6+ .center {
7+ position : absolute;
8+ left : 50% ;
9+ top : 50% ;
10+ transform : translate (-50% , -50% );
11+ margin : 0px ;
12+ text-align : center;
13+ }
14+ </ style >
15+ </ head >
16+ < body >
17+ < div class ="center ">
18+ < h1 > Choose a file...</ h1 >
19+ < h2 > Make sure you have popups enabled!</ h2 >
20+ </ div >
21+ < script src ="https://www.dropbox.com/static/api/2/dropins.js "> </ script >
22+ < script src ="https://js.live.net/v7.2/OneDrive.js "> </ script >
23+ < script src ="tokens.js "> </ script >
24+ < script >
25+ var queries = Object . fromEntries ( window . location . search . substring ( 1 ) . split ( "&" ) . map ( i => i . split ( "=" ) ) . map ( i => i . map ( i => i && decodeURIComponent ( i ) ) ) ) ;
26+
27+ var fileTypes = queries . exts ? queries . exts . split ( "," ) : [ ] ;
28+
29+ var receiverFrame = document . createElement ( "iframe" ) ;
30+ receiverFrame . style . display = "none" ;
31+ receiverFrame . crossorigin = "anonymous" ; // soon...
32+ receiverFrame . src = queries . returnurl ;
33+
34+ var receiverLoaded = false ;
35+ var frameTimer = setTimeout ( function ( ) {
36+ alert ( "The file receiver is taking an unusually long time to respond. This could be the result of Content-Security-Policy: frame-ancestors or X-Frame-Options blocking it. The frame is now shown:" ) ;
37+ receiverFrame . style . display = "block" ;
38+ } , 5000 ) ;
39+
40+ receiverFrame . onload = function ( ) {
41+ receiverLoaded = true ;
42+ clearTimeout ( frameTimer ) ;
43+ }
44+ document . body . appendChild ( receiverFrame ) ;
45+
46+ function finish ( message , name , data ) {
47+ function waitForReceiverLoad ( ) {
48+ if ( receiverLoaded ) {
49+ receiverFrame . contentWindow . postMessage ( { webretro : { timestamp : parseInt ( queries . timestamp ) , message : message , name : name , data : data } } , "*" ) ;
50+ } else {
51+ setTimeout ( waitForReceiverLoad , 500 ) ;
52+ }
53+ }
54+ waitForReceiverLoad ( ) ;
55+ }
56+
57+ window . addEventListener ( "unload" , function ( ) {
58+ if ( queries . type ) finish ( "cancelled" ) ;
59+ } , false ) ;
60+
61+ window . addEventListener ( "message" , function ( e ) {
62+ if ( e . data == "acknowledged" ) window . close ( ) ; // with coop, this window has "ownership" over itself
63+ } , false ) ;
64+
65+ function xhr ( loc , success , error ) {
66+ var xhr = new XMLHttpRequest ( ) ;
67+ xhr . open ( "GET" , loc , true ) ;
68+ xhr . responseType = "arraybuffer" ;
69+ xhr . onload = function ( ) {
70+ success ( this . response ) ;
71+ }
72+ xhr . onerror = function ( e ) {
73+ if ( error ) error ( e ) ;
74+ }
75+ xhr . send ( ) ;
76+ }
77+
78+ // Pass on data from Google Drive picker
79+ window . addEventListener ( "message" , function ( e ) {
80+ if ( e . origin == window . location . origin && e . data . webretro ) finish ( e . data . webretro . message , e . data . webretro . name , e . data . webretro . data ) ;
81+ } , false ) ;
82+
83+ if ( queries . type == "drive" ) {
84+ // Google Drive
85+
86+ var dwidth = window . screen . width - 320 ;
87+ var dheight = window . screen . height - 240 ;
88+ var dleft = 160 ;
89+ var dtop = 120 ;
90+ window . open ( "drive.html?exts=" + fileTypes . join ( "," ) , "Choose a File" , "left=" + dleft + ",top=" + dtop + ",width=" + dwidth + ",height=" + dheight ) ;
91+ } else if ( queries . type == "dropbox" ) {
92+ // Dropbox
93+
94+ Dropbox . appKey = dropboxAppKey ;
95+ Dropbox . choose ( {
96+ success : function ( files ) {
97+ var file = files [ 0 ] ;
98+ xhr ( file . link , function ( data ) {
99+ finish ( "success" , file . name , data ) ;
100+ } , function ( ) {
101+ finish ( "error" ) ;
102+ } ) ;
103+ } ,
104+ cancel : function ( ) {
105+ finish ( "cancelled" ) ;
106+ } ,
107+ linkType : "direct" ,
108+ multiselect : false ,
109+ folderselect : false
110+ } ) ;
111+ } else if ( queries . type == "onedrive" ) {
112+ // OneDrive
113+
114+ OneDrive . open ( {
115+ clientId : onedriveClientId ,
116+ action : "download" ,
117+ multiSelect : false ,
118+ advanced : {
119+ filter : fileTypes . join ( "," )
120+ } ,
121+ success : function ( response ) {
122+ var name = response . value [ 0 ] . name ;
123+ var link = response . value [ 0 ] [ "@microsoft.graph.downloadUrl" ] ;
124+ xhr ( link , function ( data ) {
125+ finish ( "success" , name , data ) ;
126+ } , function ( ) {
127+ finish ( "error" ) ;
128+ } ) ;
129+ } ,
130+ cancel : function ( ) {
131+ finish ( "cancelled" ) ;
132+ } ,
133+ error : function ( error ) {
134+ finish ( "error" ) ;
135+ }
136+ } ) ;
137+ }
138+ </ script >
139+ </ body >
140+ </ html >
0 commit comments