@@ -609,3 +609,186 @@ var adv_reset_page = function() {
609609 Hm_Utils . save_to_local_storage ( 'adv_search_params' , '' ) ;
610610 document . location . href = '?page=advanced_search' ;
611611} ;
612+
613+ var save_advanced_search = function ( ) {
614+ var search_name = $ ( '.advanced_search_name' ) . val ( ) . trim ( ) ;
615+ if ( ! search_name ) {
616+ alert ( 'Please enter a search name' ) ;
617+ return false ;
618+ }
619+
620+ var search_data = collect_advanced_search_data ( ) ;
621+ if ( ! search_data ) {
622+ alert ( 'Please configure search parameters first' ) ;
623+ return false ;
624+ }
625+
626+ $ ( '.save_advanced_search_btn' ) . prop ( 'disabled' , true ) ;
627+
628+ Hm_Ajax . request (
629+ [
630+ { 'name' : 'hm_ajax_hook' , 'value' : 'ajax_save_advanced_search' } ,
631+ { 'name' : 'search_name' , 'value' : search_name } ,
632+ { 'name' : 'adv_search_data' , 'value' : JSON . stringify ( search_data ) }
633+ ] ,
634+ function ( res ) {
635+ $ ( '.save_advanced_search_btn' ) . prop ( 'disabled' , false ) ;
636+ if ( res . advanced_search_result ) {
637+ $ ( '.current_advanced_search_name' ) . val ( search_name ) ;
638+ $ ( '.save_advanced_search_form' ) . hide ( ) ;
639+ $ ( '.show_save_advanced_search' ) . hide ( ) ;
640+ update_advanced_search_controls ( search_name ) ;
641+ Hm_Folders . reload_folders ( true , '.search_folders' ) ;
642+ }
643+ } ,
644+ [ ] ,
645+ false ,
646+ function ( ) {
647+ $ ( '.save_advanced_search_btn' ) . prop ( 'disabled' , false ) ;
648+ }
649+ ) ;
650+ return false ;
651+ } ;
652+
653+ var update_advanced_search = function ( ) {
654+ var search_name = $ ( '.current_advanced_search_name' ) . val ( ) ;
655+ if ( ! search_name ) {
656+ return false ;
657+ }
658+
659+ var search_data = collect_advanced_search_data ( ) ;
660+ if ( ! search_data ) {
661+ alert ( 'Please configure search parameters first' ) ;
662+ return false ;
663+ }
664+
665+ Hm_Ajax . request (
666+ [
667+ { 'name' : 'hm_ajax_hook' , 'value' : 'ajax_update_advanced_search' } ,
668+ { 'name' : 'search_name' , 'value' : search_name } ,
669+ { 'name' : 'adv_search_data' , 'value' : JSON . stringify ( search_data ) }
670+ ] ,
671+ function ( res ) {
672+ window . updating_advanced_search = false ;
673+ $ ( '.update_advanced_search_btn' ) . prop ( 'disabled' , false ) ;
674+ if ( res . advanced_search_result ) {
675+ Hm_Folders . reload_folders ( true , '.search_folders' ) ;
676+ }
677+ } ,
678+ [ ] ,
679+ false ,
680+ function ( ) {
681+ $ ( '.update_advanced_search_btn' ) . prop ( 'disabled' , false ) ;
682+ }
683+ ) ;
684+ return false ;
685+ } ;
686+
687+ var delete_advanced_search = function ( ) {
688+ var search_name = $ ( '.current_advanced_search_name' ) . val ( ) ;
689+ if ( ! search_name ) {
690+ return false ;
691+ }
692+
693+ if ( ! confirm ( 'Are you sure you want to delete this saved search?' ) ) {
694+ return false ;
695+ }
696+
697+ $ ( '.delete_advanced_search_btn' ) . prop ( 'disabled' , true ) ;
698+
699+ Hm_Ajax . request (
700+ [
701+ { 'name' : 'hm_ajax_hook' , 'value' : 'ajax_delete_advanced_search' } ,
702+ { 'name' : 'search_name' , 'value' : search_name }
703+ ] ,
704+ function ( res ) {
705+ $ ( '.delete_advanced_search_btn' ) . prop ( 'disabled' , false ) ;
706+ if ( res . advanced_search_result ) {
707+ $ ( '.current_advanced_search_name' ) . val ( '' ) ;
708+ update_advanced_search_controls ( '' ) ;
709+ Hm_Folders . reload_folders ( true , '.search_folders' ) ;
710+ window . location . href = '?page=advanced_search' ;
711+ }
712+ } ,
713+ [ ] ,
714+ false ,
715+ function ( ) {
716+ $ ( '.delete_advanced_search_btn' ) . prop ( 'disabled' , false ) ;
717+ }
718+ ) ;
719+ return false ;
720+ } ;
721+
722+ var load_advanced_search_from_data = function ( search_data , execute_search ) {
723+ if ( ! search_data ) {
724+ return ;
725+ }
726+
727+ Hm_Utils . save_to_local_storage ( 'adv_search_params' , JSON . stringify ( search_data ) ) ;
728+
729+ var tryPopulateForm = function ( attempts ) {
730+ attempts = attempts || 0 ;
731+
732+ if ( ! $ ( '#adv_term' ) . length || ! $ ( '.adv_source_list' ) . length ) {
733+ if ( attempts < 10 ) {
734+ setTimeout ( function ( ) {
735+ tryPopulateForm ( attempts + 1 ) ;
736+ } , 200 ) ;
737+ return ;
738+ } else {
739+ Hm_Notices . show ( 'Form elements not ready' , 'danger' ) ;
740+ return ;
741+ }
742+ }
743+
744+ Hm_Utils . save_to_local_storage ( 'adv_search_params' , JSON . stringify ( search_data ) ) ;
745+
746+ apply_saved_search ( ) ;
747+
748+ if ( execute_search ) {
749+ search_summary ( search_data ) ;
750+ send_requests ( build_adv_search_requests (
751+ search_data . terms ,
752+ search_data . sources ,
753+ search_data . targets ,
754+ search_data . times ,
755+ search_data . other
756+ ) ) ;
757+ }
758+ } ;
759+
760+ tryPopulateForm ( ) ;
761+ } ;
762+
763+ var collect_advanced_search_data = function ( ) {
764+ var terms = get_adv_terms ( ) ;
765+ var targets = get_adv_targets ( ) ;
766+ var sources = get_adv_sources ( ) ;
767+ var times = get_adv_times ( ) ;
768+ var other = get_adv_other ( ) ;
769+
770+ if ( terms . length === 0 || targets . length === 0 || sources . length === 0 ) {
771+ return false ;
772+ }
773+
774+ return {
775+ 'terms' : terms ,
776+ 'targets' : targets ,
777+ 'sources' : sources ,
778+ 'times' : times ,
779+ 'other' : other
780+ } ;
781+ } ;
782+
783+ var update_advanced_search_controls = function ( search_name ) {
784+ if ( search_name ) {
785+ $ ( '.current_search_name strong' ) . text ( search_name ) ;
786+ $ ( '.current_advanced_search_name' ) . val ( search_name ) ;
787+ $ ( '.advanced_search_update_controls, .advanced_search_delete_controls' ) . show ( ) ;
788+ $ ( '.advanced_search_save_controls' ) . hide ( ) ;
789+ } else {
790+ $ ( '.current_advanced_search_name' ) . val ( '' ) ;
791+ $ ( '.advanced_search_update_controls, .advanced_search_delete_controls' ) . hide ( ) ;
792+ $ ( '.advanced_search_save_controls' ) . show ( ) ;
793+ }
794+ } ;
0 commit comments