-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathLiveTemplates.monkey2
164 lines (112 loc) · 2.86 KB
/
LiveTemplates.monkey2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
Namespace ted2go
#Import "assets/liveTemplates.json"
Const LiveTemplates:=New LiveTemplatesClass
Class LiveTemplatesClass
Field DataChanged:Void( lang:String )
Method Load()
' merge two files
Load( DefaultPath )
Load( CustomPath )
End
Method Save()
If Not _dirty Return
_dirty=False
NotifyDataChanged()
Local json:=New JsonObject
For Local map:=Eachin _items.All()
Local obj:=New JsonObject
json[map.Key]=obj
For Local i:=Eachin map.Value.All()
obj[i.Key]=New JsonString( i.Value )
Next
Next
Local txt:=json.ToJson()
SaveString( txt,DefaultPath )
SaveString( txt,CustomPath )
End
Operator []:StringMap<String>( fileType:String )
Return _items[fileType]
End
Operator []:String( fileType:String,name:String )
Local map:=_items[fileType]
Return map ? map[name] Else Null
End
Operator []=( fileType:String,name:String,value:String )
Local map:=_items[fileType]
If map
map[name]=value
OnChanged( fileType )
Endif
End
Method All:StringMap<StringMap<String>>.Iterator()
Return _items.All()
End
Method All:StringMap<String>.Iterator( fileType:String )
Local map:=_items[fileType]
Return map ? map.All() Else Null
End
Method Add( fileType:String,name:String,value:String )
Local map:=_items[fileType]
If map
map[name]=value
OnChanged( fileType )
Endif
End
Method Remove( fileType:String,name:String )
Local map:=_items[fileType]
If map
map.Remove( name )
OnChanged( fileType )
Endif
End
Private
Field _items:=New StringMap<StringMap<String>>
Field _dirty:Bool
Field _filesTime:=New StringMap<Long>
Property DefaultPath:String()
Return "asset::liveTemplates.json"
End
Property CustomPath:String()
Return Prefs.IdeHomeDir+"customTemplates.json"
End
Method Load( jsonPath:String )
If Not FileExists( jsonPath ) Return
Local t:=_filesTime[jsonPath]
Local t2:=GetFileTime( jsonPath )
If t2=t Return
_filesTime[jsonPath]=t2
Local langs:=Json_LoadObject( jsonPath ).All()
For Local i:=Eachin langs
Local lang:=i.Key
Local map:=New StringMap<String>
_items[lang]=map
Local all:=i.Value.ToObject().All()
For Local j:=Eachin all
map[j.Key]=j.Value.ToString().Replace( "~r~n","~n" ).Replace( "~r","~n" )
Next
Next
NotifyDataChanged()
End
Method OnChanged( lang:String )
_dirty=True
End
Method NotifyDataChanged()
For Local it:=Eachin All()
DataChanged( it.Key )
Next
End
End
Class TemplateListViewItem Extends ListViewItem
Field name:String
Field value:String
Method New( name:String,value:String )
Super.New( GetCaption( name,value ) )
Self.name=name
Self.value=value
End
Private
Method GetCaption:String( name:String,value:String )
Local s:=value.Replace( "~n"," ... " ).Replace( "~t","" ).Replace( "${Cursor}","" )
Return name+" "+s
End
End