@@ -55,28 +55,137 @@ require([
5555] , function ( $ , jqueryui , base , tippy , bootstrap ) {
5656 A11y . Core ( ) ;
5757
58+ tippy ( '.manifest-size-warning' , {
59+ content : 'Your cohort is too large to be downloaded in its entirety, and will be truncated at 65,000 records ' +
60+ 'ordered by PatientID, StudyID, SeriesID, and InstanceID.' ,
61+ theme : 'light' ,
62+ placement : 'left' ,
63+ arrow : false
64+ } ) ;
65+
5866 var downloadToken = new Date ( ) . getTime ( ) ;
59- $ ( '#download-manifest' ) . prop ( "href" , $ ( '#download-manifest' ) . prop ( "href" ) + "?downloadToken=" + downloadToken ) ;
60- $ ( '#download-manifest' ) . data ( 'downloadToken' , downloadToken ) ;
6167
62- $ ( '#download-manifest' ) . on ( 'click' , function ( ) {
63- var self = $ ( this ) ;
68+ $ ( '#download-csv' ) . on ( 'click' , function ( e ) {
69+ download_manifest ( "csv" , $ ( this ) , e )
70+ } ) ;
71+
72+ $ ( '#download-tsv' ) . on ( 'click' , function ( e ) {
73+ download_manifest ( "tsv" , $ ( this ) , e )
74+ } ) ;
75+
76+ $ ( '#download-json' ) . on ( 'click' , function ( e ) {
77+ download_manifest ( "json" , $ ( this ) , e )
78+ } ) ;
79+
80+ var download_manifest = function ( file_type , clicked_button , e ) {
81+ $ ( '#unallowed-chars-alert' ) . hide ( ) ;
82+ $ ( '#name-too-long-alert-modal' ) . hide ( ) ;
83+
84+ var name = $ ( '#export-manifest-name' ) . val ( ) ;
85+ var unallowed = ( name . match ( base . blacklist ) || [ ] ) ;
86+
87+ if ( name . length == 0 ) {
88+ $ ( '#download-csv' ) . prop ( 'title' , 'Please input the name.' ) ;
89+ $ ( '#export-manifest-name' ) [ 0 ] . focus ( ) ;
90+ e . preventDefault ( ) ;
91+ return false ;
92+ }
6493
65- self . attr ( 'disabled' , 'disabled' ) ;
94+ if ( clicked_button . is ( '[disabled=disabled]' ) ) {
95+ e . preventDefault ( ) ;
96+ return false ;
97+ }
98+
99+ if ( unallowed . length > 0 ) {
100+ $ ( '.unallowed-chars' ) . text ( unallowed . join ( ", " ) ) ;
101+ $ ( '#unallowed-chars-alert' ) . show ( ) ;
102+ e . preventDefault ( ) ;
103+ return false ;
104+ }
105+
106+ if ( name . length > 255 ) {
107+ $ ( '#name-too-long-alert-modal' ) . show ( ) ;
108+ e . preventDefault ( ) ;
109+ return false ;
110+ }
111+
112+ $ ( '#export-manifest-form' ) . submit ( ) ;
113+
114+ $ ( '#download-csv' ) . attr ( 'disabled' , 'disabled' ) ;
115+ $ ( '#download-tsv' ) . attr ( 'disabled' , 'disabled' ) ;
116+ $ ( '#download-json' ) . attr ( 'disabled' , 'disabled' ) ;
66117
67118 $ ( '#download-in-progress' ) . modal ( 'show' ) ;
68119
69120 base . blockResubmit ( function ( ) {
70- self . removeAttr ( 'disabled' ) ;
121+ $ ( '#download-csv' ) . removeAttr ( 'disabled' ) ;
122+ $ ( '#download-tsv' ) . removeAttr ( 'disabled' ) ;
123+ $ ( '#download-json' ) . removeAttr ( 'disabled' ) ;
71124 $ ( '#download-in-progress' ) . modal ( 'hide' ) ;
72125 } , downloadToken , 'downloadToken' ) ;
126+
127+ var checked_fields = [ ] ;
128+ $ ( '.field-checkbox' ) . each ( function ( )
129+ {
130+ var cb = $ ( this ) [ 0 ] ;
131+ if ( cb . checked )
132+ {
133+ checked_fields . push ( cb . value ) ;
134+ }
135+ } ) ;
136+
137+ var checked_columns = [ ] ;
138+ $ ( '.column-checkbox' ) . each ( function ( )
139+ {
140+ var cb = $ ( this ) [ 0 ] ;
141+ if ( cb . checked )
142+ {
143+ checked_columns . push ( cb . value ) ;
144+ }
145+ } ) ;
146+
147+ var url = BASE_URL + '/cohorts/download_manifest/' + cohort_id + '/' ;
148+ url += ( "?file_type=" + file_type ) ;
149+ url += ( "&file_name=" + name ) ;
150+ url += ( "&header_fields=" + JSON . stringify ( checked_fields ) ) ;
151+ url += ( "&columns=" + JSON . stringify ( checked_columns ) ) ;
152+ url += ( "&downloadToken=" + downloadToken ) ;
153+
154+ location . href = url ;
155+ } ;
156+
157+ $ ( '.column-checkbox' ) . change ( function ( ) {
158+ update_download_manifest_buttons ( ) ;
73159 } ) ;
74160
75- tippy ( '.manifest-size-warning' , {
76- content : 'Your cohort is too large to be downloaded in its entirety, and will be truncated at 65,000 records ' +
77- 'ordered by PatientID, StudyID, SeriesID, and InstanceID.' ,
78- theme : 'light' ,
79- placement : 'left' ,
80- arrow : false
161+ $ ( "#export-manifest-name" ) . change ( function ( ) {
162+ update_download_manifest_buttons ( ) ;
81163 } ) ;
164+
165+ var update_download_manifest_buttons = function ( ) {
166+ var num_selected_column = $ ( '.column-checkbox:checked' ) . length ;
167+ var input_cohort_name_len = $ ( '#export-manifest-name' ) . val ( ) . length ;
168+
169+ if ( input_cohort_name_len == 0 || num_selected_column == 0 ) {
170+ $ ( '#download-csv' ) . attr ( 'disabled' , 'disabled' ) ;
171+ $ ( '#download-tsv' ) . attr ( 'disabled' , 'disabled' ) ;
172+ $ ( '#download-json' ) . attr ( 'disabled' , 'disabled' ) ;
173+ }
174+ else
175+ {
176+ $ ( '#download-csv' ) . removeAttr ( 'disabled' ) ;
177+ $ ( '#download-tsv' ) . removeAttr ( 'disabled' ) ;
178+ $ ( '#download-json' ) . removeAttr ( 'disabled' ) ;
179+ }
180+
181+ if ( num_selected_column == 0 ) {
182+ $ ( '#no-column-alert-modal' ) . show ( ) ;
183+ }
184+ else
185+ {
186+ $ ( '#no-column-alert-modal' ) . hide ( ) ;
187+ }
188+ } ;
189+
190+ update_download_manifest_buttons ( ) ;
82191} ) ;
0 commit comments