-
Notifications
You must be signed in to change notification settings - Fork 3
/
webedit
executable file
·66 lines (52 loc) · 1.17 KB
/
webedit
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
#!/usr/bin/env ruby
require 'sinatra'
require 'nokogiri'
require 'linguist'
set :environment, :production
filename = ARGV[0]
def gen_random_string(len)
(0...len).collect{rand(36).to_s(36)}.map{|x|
(rand<0.5)?x:x.upcase}.join
end
key = gen_random_string(24)
ip = "0.0.0.0"
set :public_folder, 'public'
set :views, '/usr/share/webedit/views'
puts "go to http://#{ip}:4567/code/#{key}"
project_dir = "/usr/share/webedit"
get '/code/' + key do
lang = ""
if File.exists? filename
lang = Linguist::FileBlob.new(filename).language.to_s.downcase
@file = File.open(filename, "r")
@data = @file.read
@file.close
else
@data = ""
lang = "text"
end
@title = filename
@ip = ip
@key = key
# @mode = "ace/mode/#{lang}"
@mode = lang
erb :edit
end
get '/js/:file' do
content_type "text/javascript"
File.read(project_dir + "/js/" + params["file"])
end
post '/edit/' + key do
@file = File.open(filename, "w")
new_data = params["new"]
parsed = Nokogiri::HTML(new_data).css(".ace_line")
for element in parsed do
if parsed.index(element) != (parsed.length - 1)
@file.write(element.text + "\n")
else
@file.write(element.text)
end
end
@file.close
"Worked"
end