@@ -3005,16 +3005,16 @@ class WindowViewManager():
30053005
30063006 window_views = {}
30073007
3008- def add (self , view_id_caller , window_view ):
3009- if not view_id_caller in self .window_views :
3010- self .window_views [view_id_caller ] = window_view
3008+ def add (self , view_id , window_view ):
3009+ if not view_id in self .window_views :
3010+ self .window_views [view_id ] = window_view
30113011
3012- def get (self , view_id_caller ):
3013- return self .window_views [view_id_caller ]
3012+ def get (self , view_id ):
3013+ return self .window_views [view_id ] if view_id in self . window_views else None
30143014
3015- def remove (self , view_id_caller ):
3016- if view_id_caller in self .window_views :
3017- del self .window_views [view_id_caller ]
3015+ def remove (self , view_id ):
3016+ if view_id in self .window_views :
3017+ del self .window_views [view_id ]
30183018
30193019windowViewManager = WindowViewManager ()
30203020
@@ -3033,7 +3033,6 @@ def __init__(self, title="WindowView", window=None, view=None, use_compare_layou
30333033 else :
30343034 self .layout_before = None
30353035
3036-
30373036 self .view = ( self .window .new_file () if not window else window .new_file () ) if not view else view
30383037 self .view .set_name (title )
30393038 self .view .set_read_only (True )
@@ -3053,15 +3052,20 @@ def __init__(self, title="WindowView", window=None, view=None, use_compare_layou
30533052 self .events = dict ()
30543053 self .region_ids = []
30553054 self .region_input_ids = []
3055+ self .input_state = {}
3056+ self .undo_state = False
3057+ self .redo_state = False
30563058
30573059 windowViewManager .add (self .view_id_caller , self )
3060+ windowViewManager .add (self .view .id (), self )
30583061 Hook .add ("javascript_enhancements_window_view_close_" + str (self .view .id ()), self .destroy )
30593062
30603063 def __del__ (self ):
30613064 if self .use_compare_layout and self .layout_before :
30623065 self .window .set_layout (self .layout_before )
30633066 self .window .focus_group (0 )
30643067 windowViewManager .remove (self .view_id_caller )
3068+ windowViewManager .remove (self .view .id ())
30653069 Hook .removeAllHook ("javascript_enhancements_window_view_close_" + str (self .view .id ()))
30663070 for event in self .events .keys ():
30673071 for eventRegionKey in self .events [event ].keys ():
@@ -3104,6 +3108,9 @@ def addTitle(self, text, key="", scope="javascriptenhancements.title", icon="",
31043108 text = space_row + "\n " + space_padding + text + space_padding + "\n " + space_row + " "
31053109 self .add (text , key = key , scope = scope , icon = icon , flags = flags , region_id = region_id , padding = 0 , display_block = display_block , insert_point = insert_point , replace_points = replace_points )
31063110
3111+ self .add ("\n \n NOTE: See the keymap " )
3112+ self .addLink ("here" , "https://github.com/pichillilorenzo/JavaScriptEnhancements/wiki" , "link" )
3113+
31073114 def addSubTitle (self , text , key = "" , scope = "javascriptenhancements.subtitle" , icon = "" , flags = sublime .DRAW_EMPTY | sublime .DRAW_NO_OUTLINE , region_id = "" , padding = 1 , display_block = True , insert_point = None , replace_points = []):
31083115 self .add (text , key = key , scope = scope , icon = icon , flags = flags , region_id = region_id , padding = padding , display_block = display_block , insert_point = insert_point , replace_points = replace_points )
31093116
@@ -3129,6 +3136,18 @@ def addInput(self, value=" ", label=None, key="input", scope="javascriptenhancem
31293136 self .add (value , key = key , scope = scope , icon = icon , flags = flags , region_id = region_id , padding = padding , display_block = display_block , insert_point = insert_point , replace_points = replace_points )
31303137 self .region_input_ids .append (region_id )
31313138
3139+ def updateInput (self , value , key = "input" , scope = "javascriptenhancements.input" , icon = "" , flags = sublime .DRAW_EMPTY | sublime .DRAW_NO_OUTLINE , region_id = "" , padding = 1 , display_block = False , insert_point = None , replace_points = []):
3140+
3141+ self .replaceById (region_id , value , key = key , scope = scope , icon = icon , flags = flags , region_id = region_id , padding = padding , display_block = display_block , insert_point = insert_point , replace_points = replace_points )
3142+
3143+ if not region_id :
3144+ raise Exception ("Error: ID isn't setted." )
3145+
3146+ if region_id in self .region_input_ids :
3147+ raise Exception ("Error: ID " + region_id + " already used." )
3148+
3149+ self .region_input_ids .append (region_id )
3150+
31323151 def addSelect (self , default_option , options , label = None , key = "select" , scope = "javascriptenhancements.input" , icon = "" , flags = sublime .DRAW_EMPTY | sublime .DRAW_NO_OUTLINE , region_id = "" , padding = 1 , display_block = False , insert_point = None , replace_points = []):
31333152
31343153 if not region_id :
@@ -3243,6 +3262,58 @@ def setColorScheme(self):
32433262 if self .view .settings ().get ('color_scheme' ) != color_scheme :
32443263 self .view .settings ().set ('color_scheme' , color_scheme )
32453264
3265+ def setInputState (self , delta ):
3266+ self .undo_state = True
3267+ self .redo_state = True
3268+
3269+ for region_input_id in self .region_input_ids :
3270+ region = self .view .get_regions (region_input_id )
3271+ if region :
3272+ region = region [0 ]
3273+ if region .contains (self .view .sel ()[0 ]) and region_input_id in self .input_state :
3274+ if self .input_state [region_input_id ]["index" ] + delta >= 0 and self .input_state [region_input_id ]["index" ] + delta < len (self .input_state [region_input_id ]["state" ]):
3275+ self .input_state [region_input_id ]["index" ] = self .input_state [region_input_id ]["index" ] + delta
3276+ index = self .input_state [region_input_id ]["index" ]
3277+ self .updateInput (self .input_state [region_input_id ]["state" ][ index ], region_id = region_input_id )
3278+ if region .contains (self .input_state [region_input_id ]["selections" ][ index ][0 ]):
3279+ self .view .sel ().clear ()
3280+ self .view .sel ().add_all (self .input_state [region_input_id ]["selections" ][ index ])
3281+ break
3282+
3283+ self .undo_state = False
3284+ self .redo_state = False
3285+
3286+ def updateInputState (self ):
3287+ if self .undo_state or self .redo_state :
3288+ return
3289+
3290+ inputs = self .getInputs ()
3291+
3292+ for k , v in inputs .items ():
3293+
3294+ if k in self .input_state :
3295+
3296+ if self .input_state [k ]["index" ] != len (self .input_state [k ]["state" ]) - 1 :
3297+ self .input_state [k ]["state" ] = self .input_state [k ]["state" ][:self .input_state [k ]["index" ]+ 1 ]
3298+ self .input_state [k ]["selections" ] = self .input_state [k ]["selections" ][:self .input_state [k ]["index" ]+ 1 ]
3299+
3300+ if self .input_state [k ]["state" ][- 1 ] != v :
3301+ self .input_state [k ]["state" ].append (v )
3302+ selections = []
3303+ for sel in self .view .sel ():
3304+ selections .append (sel )
3305+ self .input_state [k ]["selections" ].append (selections )
3306+ self .input_state [k ]["index" ] = len (self .input_state [k ]["state" ]) - 1
3307+
3308+ else :
3309+ self .input_state [k ] = {}
3310+ self .input_state [k ]["state" ] = [v ]
3311+ selections = []
3312+ for sel in self .view .sel ():
3313+ selections .append (sel )
3314+ self .input_state [k ]["selections" ] = [selections ]
3315+ self .input_state [k ]["index" ] = len (self .input_state [k ]["state" ]) - 1
3316+
32463317 def close (self ):
32473318 self .view .close ()
32483319 self .destroy ()
@@ -3350,7 +3421,7 @@ def run(self, edit, **args):
33503421 view .sel ().clear ()
33513422 view .sel ().add (input_regions [0 ].begin ()+ 1 )
33523423
3353- if key == "ctrl +alt+a" :
3424+ if key == "super +alt+a" :
33543425 input_regions = view .get_regions ("input.javascriptenhancements.input" )
33553426 for region in input_regions :
33563427 if region .contains (view .sel ()[0 ]):
@@ -3362,6 +3433,12 @@ class WindowViewEventListener(sublime_plugin.EventListener):
33623433 def on_activated_async (self , view ):
33633434 self .on_selection_modified (view )
33643435
3436+ def on_modified (self , view ):
3437+ if view .settings ().get ("javascript_enhancements_window_view" ):
3438+ windowView = windowViewManager .get (view .id ())
3439+ if windowView :
3440+ windowView .updateInputState ()
3441+
33653442 def on_selection_modified (self , view ):
33663443 if view .settings ().get ("javascript_enhancements_window_view" ):
33673444
@@ -3386,12 +3463,24 @@ def on_text_command(self, view, command_name, args):
33863463 if view .settings ().get ("javascript_enhancements_window_view" ):
33873464 Hook .apply (command_name , view , args )
33883465
3466+ if command_name == "undo" or command_name == "redo_or_repeat" or command_name == "redo" :
3467+ windowView = windowViewManager .get (view .id ())
3468+ if windowView :
3469+ windowView .setInputState ( (- 1 if command_name == "undo" else + 1 ) )
3470+ self .on_selection_modified (view )
3471+ return ("noop" , {})
3472+
3473+ if command_name == "soft_undo" or command_name == "soft_redo" :
3474+ return ("noop" , {})
3475+
33893476 for region in view .get_regions ("input.javascriptenhancements.input" ):
33903477 if view .sel ()[0 ].begin () == view .sel ()[0 ].end ():
33913478 if command_name == "left_delete" and view .sel ()[0 ].begin () == region .begin () + 1 :
33923479 return ("noop" , {})
33933480 elif command_name == "right_delete" and view .sel ()[0 ].end () == region .end () - 1 :
33943481 return ("noop" , {})
3482+ if command_name == "insert" :
3483+ return ("noop" , {})
33953484
33963485 def on_close (self , view ):
33973486 if view .settings ().get ("javascript_enhancements_window_view" ):
@@ -4018,6 +4107,10 @@ def on_text_command(self, view, command_name, args):
40184107 view .hide_popup ()
40194108
40204109 def on_post_text_command (self , view , command_name , args ):
4110+
4111+ if len (view .sel ()) <= 0 :
4112+ return
4113+
40214114 sel = view .sel ()[0 ]
40224115 if not view .match_selector (
40234116 sel .begin (),
@@ -6052,7 +6145,7 @@ def run(self, edit, **args):
60526145 windowView .add (text = "\n " )
60536146 windowView .addSelect (default_option = 0 , options = select_options , label = "Scope: " , region_id = "scope" )
60546147 windowView .add (text = "\n \n " )
6055- windowView .addCloseButton (text = "OK " , scope = "javascriptenhancements.button_ok" , callback = lambda view : self .view .run_command ("refactor_extract_method" , args = {"inputs" : windowView .getInputs ()}))
6148+ windowView .addCloseButton (text = "CREATE " , scope = "javascriptenhancements.button_ok" , callback = lambda view : self .view .run_command ("refactor_extract_method" , args = {"inputs" : windowView .getInputs ()}))
60566149 windowView .add (text = " " )
60576150 windowView .addCloseButton (text = "CANCEL" , scope = "javascriptenhancements.button_cancel" )
60586151 windowView .add (text = " \n " )
@@ -6082,7 +6175,7 @@ def run(self, edit, **args):
60826175 windowView .add (text = "\n " )
60836176 windowView .addSelect (default_option = 0 , options = select_options , label = "Scope: " , region_id = "scope" )
60846177 windowView .add (text = "\n \n " )
6085- windowView .addCloseButton (text = "OK " , scope = "javascriptenhancements.button_ok" , callback = lambda view : self .view .run_command ("refactor_extract_field" , args = {"inputs" : windowView .getInputs ()}))
6178+ windowView .addCloseButton (text = "CREATE " , scope = "javascriptenhancements.button_ok" , callback = lambda view : self .view .run_command ("refactor_extract_field" , args = {"inputs" : windowView .getInputs ()}))
60866179 windowView .add (text = " " )
60876180 windowView .addCloseButton (text = "CANCEL" , scope = "javascriptenhancements.button_cancel" )
60886181 windowView .add (text = " \n " )
@@ -6114,6 +6207,10 @@ def run(self, edit, **args):
61146207 sublime .error_message ("Cannot move this file. File name is empty." )
61156208 return
61166209
6210+ if not new_path :
6211+ sublime .error_message ("The File path is empty." )
6212+ return
6213+
61176214 if new_path == file_name :
61186215 sublime .message_dialog ("The file path is the same as before." )
61196216 return
@@ -6335,6 +6432,10 @@ def run(self, edit, **args):
63356432 sublime .error_message ("Cannot copy this file. File name is empty." )
63366433 return
63376434
6435+ if not new_path :
6436+ sublime .error_message ("The File path is empty." )
6437+ return
6438+
63386439 if new_path == file_name :
63396440 sublime .message_dialog ("The file path is the same as before." )
63406441 return
@@ -7000,7 +7101,7 @@ def run(self, edit, **args):
70007101 inputs = args .get ("inputs" )
70017102 content = view .substr (selection ).strip ()
70027103 content = content [:- 1 ] if content [- 1 ] == ";" else content
7003- field_name = inputs ["field_name" ]
7104+ field_name = inputs ["field_name" ]. strip ()
70047105
70057106 flow_cli = "flow"
70067107 is_from_bin = True
0 commit comments