Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 45670b1

Browse files
committed
Externalize client-to-server connection code to a separate file.
1 parent 3f6f48f commit 45670b1

6 files changed

Lines changed: 242 additions & 227 deletions

File tree

public/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
<script src="js/external/mode/clike/clike.js"></script>
2828
<script src="js/external/mode/xml/xml.js"></script>
2929

30+
<script src="js/ServerConnection.js"></script>
3031
<script src="js/nide.js"></script>
3132
<script src="js/CodeEditor.js"></script>
3233
<script src="js/DirectoryEditor.js"></script>

public/js/CodeEditor.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,13 @@
8888
$(actionsBar.renameButton).click(function(e) {
8989
var newName = prompt('New filename:', entry.name)
9090
if (newName) {
91-
renameFile(entry.path, entry.path.replace(/\/[^\/]+$/, '/' + newName))
91+
connection.renameFile(entry.path, entry.path.replace(/\/[^\/]+$/, '/' + newName))
9292
}
9393
})
9494

9595
var loadVersionNumbered = function(i) {
9696
if (!versions[i].content) {
97-
loadVersion(versions[i].uuid, function(err, contents) {
97+
connection.loadVersion(versions[i].uuid, function(err, contents) {
9898
if (err) {
9999
contents = '<ERROR: Could not load file contents>'
100100
}
@@ -255,7 +255,7 @@
255255
}
256256

257257
$(actionsBar.versionsButton).click(function(e) {
258-
loadVersions(entry.path, function(err, v) {
258+
connection.loadVersions(entry.path, function(err, v) {
259259
if (err) {
260260
alert('Could not load versions: ' + err)
261261
} else {
@@ -272,7 +272,7 @@
272272
editor.appendChild(actionsBar)
273273
editor.className = 'code-editor'
274274

275-
loadFile(entry.path, function(err, file) {
275+
connection.loadFile(entry.path, function(err, file) {
276276
codeMirror = createCodeMirror(editor, file, entry.path, { onChange: function(editor) {
277277
content = editor.getValue()
278278
changed = true
@@ -288,7 +288,7 @@
288288
saving = true;
289289
var selected = $('.selected')
290290
selected.addClass('syncing')
291-
saveFile(entry.path, content, function(err){
291+
connection.saveFile(entry.path, content, function(err){
292292
if (!err) {
293293
changed = false
294294
done = true;

public/js/DirectoryEditor.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ var DirectoryEditor = function(entry) {
99
$(renameButton).click(function(e) {
1010
var newName = prompt('New folder name:', entry.name)
1111
if (newName) {
12-
renameFile(entry.path, entry.path.replace(/\/[^\/]+$/, '/' + newName))
12+
connection.renameFile(entry.path, entry.path.replace(/\/[^\/]+$/, '/' + newName))
1313
}
1414
})
1515
actionsBar.appendChild(renameButton)

public/js/NPMEditor.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ var NPMEditor = function(entry) {
3232
var package = prompt('Package to be installed:', 'package-name')
3333
var save = $(".save", editor)[0].checked
3434
if (package) {
35-
socket.emit('install', { package: package, save: save })
35+
connection.installPackage(package, save);
3636
sidebarEntry.addClass('syncing')
3737
}
3838
})
@@ -47,13 +47,13 @@ var NPMEditor = function(entry) {
4747
}
4848
if (selected.length > 0) {
4949
var save = $(".save", editor)[0].checked
50-
socket.emit('uninstall', { package: selected.join(' '), save: save })
50+
connection.uninstallPackage(selected, save);
5151
sidebarEntry.addClass('syncing')
5252
}
5353
}
5454
})
5555
$(".refresh", editor).click(function(){
56-
socket.emit('packages-refresh')
56+
connection.refreshPackages()
5757
sidebarEntry.addClass('syncing')
5858
})
5959
return editor

public/js/ServerConnection.js

Lines changed: 228 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
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

Comments
 (0)