@@ -5,56 +5,83 @@ define([
5
5
'base/js/namespace' ,
6
6
'jquery' ,
7
7
'base/js/utils' ,
8
+ 'services/config' ,
8
9
'base/js/events'
9
- ] , function ( IPython , $ , utils , events ) {
10
+ ] , function ( IPython , $ , utils , configmod , events ) {
10
11
"use strict" ;
11
12
if ( window . chrome === undefined ) return ;
12
13
14
+ var params = {
15
+ subdirectory : '' ,
16
+ } ;
17
+
18
+ var base_url = utils . get_body_data ( "baseUrl" ) ;
19
+ var config = new configmod . ConfigSection ( 'notebook' , { base_url : base_url } ) ;
20
+
13
21
/* http://stackoverflow.com/questions/3231459/create-unique-id-with-javascript */
14
- function uniqueid ( ) {
22
+ function uniqueid ( ) {
15
23
// always start with a letter (for DOM friendlyness)
16
- var idstr = String . fromCharCode ( Math . floor ( ( Math . random ( ) * 25 ) + 65 ) ) ;
24
+ var idstr = String . fromCharCode ( Math . floor ( ( Math . random ( ) * 25 ) + 65 ) ) ;
17
25
do {
18
26
// between numbers and characters (48 is 0 and 90 is Z (42-48 = 90)
19
- var ascicode = Math . floor ( ( Math . random ( ) * 42 ) + 48 ) ;
20
- if ( ascicode < 58 || ascicode > 64 ) {
27
+ var ascicode = Math . floor ( ( Math . random ( ) * 42 ) + 48 ) ;
28
+ if ( ascicode < 58 || ascicode > 64 ) {
21
29
// exclude all chars between : (58) and @ (64)
22
- idstr += String . fromCharCode ( ascicode ) ;
30
+ idstr += String . fromCharCode ( ascicode ) ;
23
31
}
24
- } while ( idstr . length < 32 ) ;
32
+ } while ( idstr . length < 32 ) ;
25
33
26
34
return ( idstr ) ;
27
35
}
28
36
29
- var send_to_server = function ( name , path , msg ) {
37
+ var create_dir = function ( path ) {
38
+ var options = { type :'directory' } ;
39
+
40
+ var data = JSON . stringify ( {
41
+ ext : options . ext ,
42
+ type : options . type
43
+ } ) ;
44
+
45
+ var settings = {
46
+ processData : false ,
47
+ type : "PUT" ,
48
+ data : data ,
49
+ contentType : 'application/json' ,
50
+ dataType : "json"
51
+ } ;
52
+ utils . promising_ajax ( IPython . contents . api_url ( path ) , settings ) ;
53
+ } ;
54
+
55
+ var send_to_server = function ( name , msg ) {
56
+ var path = utils . url_path_join ( utils . url_path_split ( IPython . notebook . notebook_path ) [ 0 ] , params . subdirectory ) ;
30
57
if ( name == '' ) {
31
58
name = uniqueid ( ) + '.' + msg . match ( / d a t a : i m a g e \/ ( \S + ) ; / ) [ 1 ] ;
32
- }
33
- var path = path . substring ( 0 , path . lastIndexOf ( '/' ) ) + '/' ;
34
- if ( path === '/' ) path = '' ;
35
- var url = '//' + location . host + '/api/contents/' + path + name ;
59
+ }
60
+ create_dir ( path ) ;
61
+ var url = '//' + location . host + utils . url_path_join ( base_url , 'api/contents' , path , name ) ;
62
+
36
63
var img = msg . replace ( / ( ^ \S + , ) / , '' ) ; // strip header
37
- var data = { 'name' : name , 'format' : 'base64' , 'content' : img , 'type' : 'file' } ;
64
+ //console.log("send_to_server:", url, img);
65
+ var data = { 'name' : name , 'format' :'base64' , 'content' : img , 'type' : 'file' } ;
38
66
var settings = {
39
- processData : false ,
40
- cache : false ,
41
- type : "PUT" ,
42
- dataType : "json" ,
43
- data : JSON . stringify ( data ) ,
44
- headers : { 'Content-Type' : 'text/plain' } ,
45
- async : false ,
46
- error : function ( ) { console . log ( 'Data transfer for copy-paste has failed.' ) ;
47
- }
67
+ processData : false ,
68
+ cache : false ,
69
+ type : "PUT" ,
70
+ dataType : "json" ,
71
+ data : JSON . stringify ( data ) ,
72
+ headers : { 'Content-Type' : 'text/plain' } ,
73
+ async : false ,
74
+ error : function ( ) { console . log ( 'Data transfer for clipboard paste failed.' ) ; }
48
75
} ;
49
- utils . promising_ajax ( url , settings ) . then (
76
+ utils . promising_ajax ( url , settings ) . then (
50
77
function on_success ( data , status , xhr ) {
51
78
var new_cell = IPython . notebook . insert_cell_below ( 'markdown' ) ;
52
- var str = '<img src=" ' + name + '"/> ' ;
79
+ var str = ' + ') ' ;
53
80
new_cell . set_text ( str ) ;
54
81
new_cell . execute ( ) ;
55
82
} ,
56
83
function on_error ( reason ) {
57
- console . log ( 'Data transfer for copy- paste has failed.' ) ;
84
+ console . log ( 'Data transfer for clipboard paste has failed.' ) ;
58
85
} ) ;
59
86
} ;
60
87
@@ -63,6 +90,15 @@ define([
63
90
*/
64
91
var load_ipython_extension = function ( ) {
65
92
93
+ config . load ( ) ;
94
+ config . loaded
95
+ . then ( function ( ) {
96
+ $ . extend ( true , params , config . data . dragdrop ) ; // update params
97
+ if ( params . subdirectory ) {
98
+ console . log ( 'subdir:' , params . subdirectory )
99
+ }
100
+ } )
101
+
66
102
/*
67
103
* override clipboard 'paste' and insert new cell from json data in clipboard
68
104
*/
@@ -71,84 +107,21 @@ define([
71
107
if ( cell . mode == "command" ) {
72
108
var items = event . clipboardData . items ;
73
109
for ( var i = 0 ; i < items . length ; i ++ ) {
74
- if ( items [ i ] . type == 'notebook-cell/json' ) {
75
- event . preventDefault ( ) ;
76
- /* json data adds a new notebook cell */
77
- var data = event . clipboardData . getData ( 'notebook-cell/json' ) . split ( "\n" ) . filter ( Boolean ) ;
78
- for ( var i = 0 ; i < data . length ; i ++ ) {
79
- var ix = data . length - 1 - i ;
80
- var new_cell_data = JSON . parse ( data [ ix ] ) ;
81
- var new_cell = IPython . notebook . insert_cell_below ( new_cell_data . cell_type ) ;
82
- new_cell . fromJSON ( new_cell_data ) ;
83
- if ( new_cell . cell_type === "markdown" ) {
84
- new_cell . execute ( ) ;
85
- } ;
86
- }
87
- } else if ( items [ i ] . type . indexOf ( 'image/' ) !== - 1 ) {
110
+ if ( items [ i ] . type . indexOf ( 'image/' ) !== - 1 ) {
88
111
event . preventDefault ( ) ;
89
112
/* images are transferred to the server as file and linked to */
90
113
var blob = items [ i ] . getAsFile ( ) ;
91
114
var reader = new FileReader ( ) ;
92
115
reader . onload = ( function ( evt ) {
93
116
var filename = '' ;
94
- send_to_server ( filename , IPython . notebook . notebook_path , evt . target . result ) ;
117
+ send_to_server ( filename , evt . target . result ) ;
95
118
event . preventDefault ( ) ;
96
119
} ) ;
97
120
reader . readAsDataURL ( blob ) ;
98
121
}
99
122
}
100
123
}
101
124
} ) ;
102
-
103
- /*
104
- * override clipboard 'copy' and copy current cell as json and text to clipboard
105
- */
106
- window . addEventListener ( 'copy' , function ( event ) {
107
- var cell = IPython . notebook . get_selected_cell ( ) ;
108
- if ( cell . mode == "command" ) {
109
- var sel = window . getSelection ( ) ;
110
- if ( sel . type == "Range" ) return ;
111
- /* default: copy marked text */
112
- event . preventDefault ( ) ;
113
- var json = "" ;
114
- var text = "" ;
115
- var selected_cells = IPython . notebook . get_selected_cells ( ) ;
116
- for ( var i in selected_cells ) {
117
- var j = selected_cells [ i ] . toJSON ( ) ;
118
- json += JSON . stringify ( j ) + '\n' ;
119
- text += selected_cells [ i ] . code_mirror . getValue ( ) + '\n' ;
120
- }
121
- /* copy cell as json and cell contents as text */
122
- event . clipboardData . setData ( 'notebook-cell/json' , json ) ;
123
- event . clipboardData . setData ( "Text" , text ) ;
124
- }
125
- } ) ;
126
-
127
- /*
128
- * override clipboard 'cut' and copy current cell as json and text to clipboard
129
- */
130
- window . addEventListener ( 'cut' , function ( event ) {
131
- var cell = IPython . notebook . get_selected_cell ( ) ;
132
- if ( cell . mode == "command" ) {
133
- var sel = window . getSelection ( ) ;
134
- if ( sel . type == "Range" ) return ;
135
- /* default: copy marked text */
136
- event . preventDefault ( ) ;
137
- var json = "" ;
138
- var text = "" ;
139
- var selected_cells = IPython . notebook . get_selected_cells ( ) ;
140
- for ( var i in selected_cells ) {
141
- var j = selected_cells [ i ] . toJSON ( ) ;
142
- json += JSON . stringify ( j ) + '\n' ;
143
- text += selected_cells [ i ] . code_mirror . getValue ( ) + '\n' ;
144
- IPython . notebook . delete_cell ( IPython . notebook . find_cell_index ( selected_cells [ i ] ) ) ;
145
- }
146
- /* copy cell as json and cell contents as text */
147
- event . clipboardData . setData ( 'notebook-cell/json' , json ) ;
148
- event . clipboardData . setData ( "Text" , text ) ;
149
- }
150
- } ) ;
151
-
152
125
} ;
153
126
154
127
var extension = {
0 commit comments