1+ var ServerConnection = function ( ) {
2+ var socket = io . connect ( window . location . origin , { 'connect timeout' : 25000 } ) ;
3+
4+ socket . on ( 'cwd' , function ( path ) {
5+ cwd = path
6+ } )
7+
8+ socket . on ( 'node-version' , function ( version ) {
9+ nodeVersion = version
10+ } )
11+
12+ socket . on ( 'packages' , function ( reportedPackages ) {
13+ packages = reportedPackages
14+ updatePackages ( )
15+ } )
16+
17+ socket . on ( 'welcome' , function ( ) {
18+ $ ( '#lightbox' ) . fadeIn ( )
19+ $ ( '.setup form' ) . bind ( 'submit' , function ( e ) {
20+ var name = $ ( ".setup input[name='name']" ) [ 0 ] . value ;
21+ var description = $ ( ".setup input[name='description']" ) [ 0 ] . value ;
22+ var author = $ ( ".setup input[name='author']" ) [ 0 ] . value ;
23+ var version = $ ( ".setup input[name='version']" ) [ 0 ] . value ;
24+ if ( ! version . match ( / ^ [ 0 - 9 ] + \. [ 0 - 9 ] + \. [ 0 - 9 ] + $ / ) ) {
25+ alert ( 'Please enter the version number in the X.Y.Z format.' )
26+ e . preventDefault ( ) ;
27+ return ;
28+ }
29+ e . preventDefault ( )
30+ socket . emit ( 'add' , '/package.json' )
31+ socket . emit ( 'save' , { path : '/package.json' , content : JSON . stringify ( {
32+ name : name ,
33+ description : description ,
34+ version : version ,
35+ author : author ,
36+ dependencies : { } ,
37+ devDependencies : { }
38+ } , undefined , ' ' ) } )
39+ $ ( '#lightbox' ) . fadeOut ( )
40+ socket . emit ( 'skip-welcome' )
41+ } )
42+ $ ( '.setup .skip' ) . click ( function ( ) {
43+ $ ( '#lightbox' ) . fadeOut ( )
44+ socket . emit ( 'skip-welcome' )
45+ } )
46+ } )
47+
48+ socket . on ( 'list' , function ( data ) {
49+ searchResultHtmlElementByPath = { }
50+ fileHtmlElementByPath = { }
51+ fileEntries = [ ]
52+ var ul = document . createElement ( "ul" )
53+ for ( var childEntry in data . children ) {
54+ addHTMLElementForFileEntry ( data . children [ childEntry ] , ul , fileEntries , fileHtmlElementByPath )
55+ }
56+ document . getElementById ( 'files' ) . innerHTML = '' ;
57+ document . getElementById ( 'files' ) . appendChild ( ul ) ;
58+ ul = document . createElement ( "ul" )
59+ for ( var i = 0 ; i < fileEntries . length ; i ++ ) {
60+ addHTMLElementForFileEntry ( fileEntries [ i ] , ul , null , searchResultHtmlElementByPath , true )
61+ }
62+ document . getElementById ( 'search-results' ) . innerHTML = '' ;
63+ document . getElementById ( 'search-results' ) . appendChild ( ul ) ;
64+ } ) ;
65+
66+ this . renameFile = function ( oldpath , newpath ) {
67+ socket . emit ( 'rename' , { oldpath : oldpath , newpath : newpath } )
68+ }
69+
70+ socket . on ( 'rename-success' , function ( data ) {
71+ selectFile ( {
72+ type : 'file' ,
73+ path : data . path
74+ } , fileHtmlElementByPath ) ;
75+ } )
76+
77+ this . removeFile = function ( ) {
78+ socket . emit ( 'remove' , currentFile . path )
79+ }
80+
81+ this . addFolder = function ( filename ) {
82+ var path ;
83+ if ( ! currentFile ) {
84+ path = '/'
85+ } else {
86+ switch ( currentFile . type ) {
87+ case 'directory' :
88+ path = currentFile . path + '/'
89+ break ;
90+ case 'file' :
91+ path = currentFile . path . replace ( / \/ [ ^ \/ ] + $ / , '/' )
92+ break ;
93+ default :
94+ path = '/'
95+ break ;
96+ }
97+ }
98+ socket . emit ( 'add-folder' , path + filename ) ;
99+ }
100+
101+ this . addFile = function ( filename ) {
102+ var path ;
103+ if ( ! currentFile ) {
104+ path = '/'
105+ } else {
106+ switch ( currentFile . type ) {
107+ case 'directory' :
108+ path = currentFile . path + '/'
109+ break ;
110+ case 'file' :
111+ path = currentFile . path . replace ( / \/ [ ^ \/ ] + $ / , '/' )
112+ break ;
113+ default :
114+ path = '/'
115+ break ;
116+ }
117+ }
118+ socket . emit ( 'add' , path + filename ) ;
119+ }
120+
121+ var loadFileCallbacks = { }
122+ this . loadFile = function ( path , callback ) {
123+ socket . emit ( 'load' , path )
124+ if ( ! loadFileCallbacks [ path ] ) {
125+ loadFileCallbacks [ path ] = [ callback ]
126+ } else {
127+ loadFileCallbacks [ path ] . push ( callback )
128+ }
129+ }
130+
131+ socket . on ( 'file' , function ( data ) {
132+ var callbacks = loadFileCallbacks [ data . path ] || [ ]
133+ for ( var i = 0 ; i < callbacks . length ; i ++ ) {
134+ callbacks [ i ] ( data . error , data . file )
135+ }
136+ delete loadFileCallbacks [ data . path ]
137+ } )
138+
139+ var saveFileCallbacks = { }
140+ this . saveFile = function ( path , content , callback ) {
141+ socket . emit ( 'save' , { path : path , content : content } )
142+ if ( ! saveFileCallbacks [ path ] ) {
143+ saveFileCallbacks [ path ] = [ callback ]
144+ } else {
145+ saveFileCallbacks [ path ] . push ( callback )
146+ }
147+ }
148+
149+ socket . on ( 'save-success' , function ( data ) {
150+ var callbacks = saveFileCallbacks [ data . path ] || [ ]
151+ for ( var i = 0 ; i < callbacks . length ; i ++ ) {
152+ callbacks [ i ] ( null )
153+ }
154+ delete saveFileCallbacks [ data . path ]
155+ } )
156+
157+ socket . on ( 'save-error' , function ( data ) {
158+ var callbacks = saveFileCallbacks [ data . path ] || [ ]
159+ for ( var i = 0 ; i < callbacks . length ; i ++ ) {
160+ callbacks [ i ] ( data . error )
161+ }
162+ delete saveFileCallbacks [ data . path ]
163+ } )
164+
165+ var versionsCallbacks = { }
166+ this . loadVersions = function ( path , callback ) {
167+ socket . emit ( 'versions' , path )
168+ if ( ! versionsCallbacks [ path ] ) {
169+ versionsCallbacks [ path ] = [ callback ]
170+ } else {
171+ versionsCallbacks [ path ] . push ( callback )
172+ }
173+ }
174+
175+ socket . on ( 'versions' , function ( data ) {
176+ var callbacks = versionsCallbacks [ data . path ] || [ ]
177+ for ( var i = 0 ; i < callbacks . length ; i ++ ) {
178+ callbacks [ i ] ( data . error , data . versions )
179+ }
180+ delete versionsCallbacks [ data . path ]
181+ } )
182+
183+ var versionCallbacks = { }
184+ this . loadVersion = function ( uuid , callback ) {
185+ socket . emit ( 'version' , uuid )
186+ if ( ! versionCallbacks [ uuid ] ) {
187+ versionCallbacks [ uuid ] = [ callback ]
188+ } else {
189+ versionCallbacks [ uuid ] . push ( callback )
190+ }
191+ }
192+
193+ socket . on ( 'version-success' , function ( data ) {
194+ var callbacks = versionCallbacks [ data . uuid ] || [ ]
195+ for ( var i = 0 ; i < callbacks . length ; i ++ ) {
196+ callbacks [ i ] ( null , data . content )
197+ }
198+ delete versionCallbacks [ data . uuid ]
199+ } )
200+
201+ socket . on ( 'version-error' , function ( data ) {
202+ var callbacks = versionCallbacks [ data . uuid ] || [ ]
203+ for ( var i = 0 ; i < callbacks . length ; i ++ ) {
204+ callbacks [ i ] ( data . error )
205+ }
206+ delete versionCallbacks [ data . uuid ]
207+ } )
208+
209+ socket . on ( 'install-error' , function ( message ) {
210+ alert ( 'Could not install package:\n\n' + message )
211+ } )
212+
213+ socket . on ( 'uninstall-error' , function ( message ) {
214+ alert ( 'Could not uninstall package:\n\n' + message )
215+ } )
216+
217+ this . installPackage = function ( package , shouldSaveOnPackageJson ) {
218+ socket . emit ( 'install' , { package : package , save : shouldSaveOnPackageJson } )
219+ }
220+
221+ this . uninstallPackage = function ( packages , shouldSaveOnPackageJson ) {
222+ socket . emit ( 'uninstall' , { package : packages . join ( ' ' ) , save : shouldSaveOnPackageJson } )
223+ }
224+
225+ this . refreshPackages = function ( ) {
226+ socket . emit ( 'packages-refresh' ) ;
227+ }
228+ }
0 commit comments