browser_app_base 0.0.9 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +3 -2
- data/bin/start_sample.rb +25 -0
- data/lib/browser_app_base/version.rb +1 -1
- data/lib/browser_app_base.rb +12 -7
- data/lib/template/config/setting.json +50 -50
- data/lib/template/config.ru +15 -3
- data/lib/template/css/index.css +9 -0
- data/lib/template/{index.html → html/index.html} +4 -4
- data/lib/template/html/test.html +85 -0
- data/lib/template/js/main.js +21 -9
- data/lib/template/server_app_base.rb +3 -2
- data/lib/template/start.rb +25 -8
- data/lib/template/wsserver.rb +5 -3
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c449614e4619060aa9e9f5799bc67822e61c1f603ff099914aff5e60593828dd
|
4
|
+
data.tar.gz: c146b0df93c05a64dceb9d6987895635bef0d733f9421581aa421c51d7077fd9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed31b5268858c2ac45a01f20924cfe569c0f360797bfad8650a37cf07eff9452b229dbc30ecd0b3200ac5ebcbddc20fcca8f485d4a49440573ee0c6c6a6b7cd2
|
7
|
+
data.tar.gz: 00fa73805f8d27f12464fea9bee92720c9303960890e23a02d804f060b6e1429f5b9b02c0dc58ff1bd0ae90ffd4f8ed38c918bdc45e843e203f68563dbce9009
|
data/README.md
CHANGED
data/bin/start_sample.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "fileutils"
|
4
|
+
require "facter"
|
5
|
+
require "tmpdir"
|
6
|
+
|
7
|
+
# tmpdirディレクトリにコピー
|
8
|
+
dir = File.dirname(File.expand_path(__FILE__)) + "/../"
|
9
|
+
Dir.mktmpdir { |tmpdir|
|
10
|
+
puts tmpdir
|
11
|
+
Dir.glob("#{dir}/lib/*") do |f|
|
12
|
+
puts "#{f} => #{tmpdir}"
|
13
|
+
FileUtils.cp_r f, "#{tmpdir}"
|
14
|
+
end
|
15
|
+
|
16
|
+
FileUtils.cd "#{tmpdir}"
|
17
|
+
kernel = Facter.value(:kernel)
|
18
|
+
if kernel == "windows"
|
19
|
+
system "rubyw ./start.rb"
|
20
|
+
elsif kernel == "Linux"
|
21
|
+
system "ruby ./start.rb"
|
22
|
+
else
|
23
|
+
system "ruby ./start.rb"
|
24
|
+
end
|
25
|
+
}
|
data/lib/browser_app_base.rb
CHANGED
@@ -37,28 +37,33 @@ module BrowserAppBase
|
|
37
37
|
puts "create application base #{dir}"
|
38
38
|
|
39
39
|
FileUtils.mkdir_p dir
|
40
|
+
FileUtils.mkdir_p dir + "/lib/"
|
41
|
+
FileUtils.mkdir_p dir + "/bin/"
|
40
42
|
|
41
|
-
path = File.dirname(File.expand_path(__FILE__))
|
42
|
-
Dir.glob("#{path}/template/*") do |f|
|
43
|
-
puts "#{f} => #{dir}"
|
44
|
-
FileUtils.cp_r f, "#{dir}/"
|
43
|
+
path = File.dirname(File.expand_path(__FILE__)) + "/../"
|
44
|
+
Dir.glob("#{path}/lib/template/*") do |f|
|
45
|
+
puts "#{f} => #{dir}/lib"
|
46
|
+
FileUtils.cp_r f, "#{dir}/lib"
|
45
47
|
end
|
46
48
|
|
47
49
|
if app
|
48
50
|
app_file = get_app_file(app)
|
49
51
|
|
52
|
+
puts "#{path}/bin/start_sample.rb #{dir}/bin/start_#{app_file}"
|
53
|
+
FileUtils.cp_r "#{path}/bin/start_sample.rb", "#{dir}/bin/start_#{app_file}"
|
54
|
+
|
50
55
|
load_app = <<"EOS"
|
51
56
|
require '#{app_file}'
|
52
57
|
$app = #{get_app_name(app)}.new
|
53
58
|
EOS
|
54
59
|
|
55
|
-
File.open("#{dir}/app_load.rb", "w") do |f|
|
60
|
+
File.open("#{dir}/lib/app_load.rb", "w") do |f|
|
56
61
|
f.write load_app
|
57
62
|
end
|
58
63
|
|
59
64
|
puts "create #{app_file}"
|
60
|
-
new_file = "#{dir}/#{app_file}"
|
61
|
-
FileUtils.cp("#{dir}/my_app_sample.rb", new_file)
|
65
|
+
new_file = "#{dir}/lib/#{app_file}"
|
66
|
+
FileUtils.cp("#{dir}/lib/my_app_sample.rb", new_file)
|
62
67
|
buf = File.binread(new_file)
|
63
68
|
File.binwrite(new_file, buf.gsub(/MyApp/, get_app_name(app)))
|
64
69
|
end
|
@@ -1,50 +1,50 @@
|
|
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
|
-
]
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"name": "name1",
|
4
|
+
"value": "value1 2 3 4",
|
5
|
+
"type": "input",
|
6
|
+
"select": "",
|
7
|
+
"description": "設定項目1"
|
8
|
+
},
|
9
|
+
{
|
10
|
+
"name": "name2",
|
11
|
+
"value": true,
|
12
|
+
"type": "checkbox",
|
13
|
+
"select": "",
|
14
|
+
"description": "有効にする場合はチェック"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"name": "name3",
|
18
|
+
"value": "2",
|
19
|
+
"type": "select",
|
20
|
+
"select": [
|
21
|
+
"1",
|
22
|
+
"2",
|
23
|
+
"3",
|
24
|
+
"4",
|
25
|
+
"5"
|
26
|
+
],
|
27
|
+
"description": "選択項目"
|
28
|
+
},
|
29
|
+
{
|
30
|
+
"name": "name4",
|
31
|
+
"value": "value4",
|
32
|
+
"type": "input",
|
33
|
+
"select": "",
|
34
|
+
"description": "設定項目4"
|
35
|
+
},
|
36
|
+
{
|
37
|
+
"name": "name5",
|
38
|
+
"value": "value5",
|
39
|
+
"type": "input",
|
40
|
+
"select": "",
|
41
|
+
"description": "設定項目5"
|
42
|
+
},
|
43
|
+
{
|
44
|
+
"name": "name6",
|
45
|
+
"value": "value6",
|
46
|
+
"type": "input",
|
47
|
+
"select": "",
|
48
|
+
"description": "設定項目6"
|
49
|
+
}
|
50
|
+
]
|
data/lib/template/config.ru
CHANGED
@@ -8,8 +8,20 @@ require "json"
|
|
8
8
|
require "./server"
|
9
9
|
require "./wsserver"
|
10
10
|
|
11
|
+
temp_dir = ENV["temp"]
|
12
|
+
temp_dir = "/tmp" if temp_dir == nil
|
13
|
+
puts "temp_dir=#{temp_dir}"
|
14
|
+
access_log = File.new("#{temp_dir}/logs/sinatra.log", "a+")
|
15
|
+
access_log.sync = true
|
16
|
+
use Rack::CommonLogger, access_log
|
17
|
+
|
11
18
|
get "/" do
|
12
|
-
File.read("index.html")
|
19
|
+
File.read("html/index.html")
|
20
|
+
end
|
21
|
+
|
22
|
+
get "*.html" do |file|
|
23
|
+
content_type "text/html", :charset => "utf-8"
|
24
|
+
File.read "./html/#{file}.html"
|
13
25
|
end
|
14
26
|
|
15
27
|
get "/css/:name.css" do
|
@@ -80,7 +92,7 @@ end
|
|
80
92
|
|
81
93
|
configure do
|
82
94
|
set :DoNotReverseLookup, true
|
83
|
-
set :logging,
|
95
|
+
set :logging, true
|
84
96
|
set :default_encoding, "utf-8"
|
85
97
|
set :server, :thin
|
86
98
|
|
@@ -89,6 +101,6 @@ configure do
|
|
89
101
|
|
90
102
|
end
|
91
103
|
|
92
|
-
#\ --port
|
104
|
+
#\ --port 36809
|
93
105
|
|
94
106
|
run Sinatra::Application
|
data/lib/template/css/index.css
CHANGED
@@ -66,6 +66,15 @@ textarea.long {
|
|
66
66
|
color: black;
|
67
67
|
}
|
68
68
|
|
69
|
+
.ui-autocomplete.ui-front {
|
70
|
+
max-height: 250px;
|
71
|
+
overflow-y: auto;
|
72
|
+
/* prevent horizontal scrollbar */
|
73
|
+
overflow-x: hidden;
|
74
|
+
/* add padding to account for vertical scrollbar */
|
75
|
+
z-index: 1000 !important;
|
76
|
+
}
|
77
|
+
|
69
78
|
.ui-dialog {
|
70
79
|
position: absolute;
|
71
80
|
top: 0;
|
@@ -11,8 +11,8 @@
|
|
11
11
|
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
|
12
12
|
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
|
13
13
|
|
14
|
-
<script src="http://localhost:
|
15
|
-
<link rel="stylesheet" href="http://localhost:
|
14
|
+
<script src="http://localhost:36809/js/main.js"></script>
|
15
|
+
<link rel="stylesheet" href="http://localhost:36809/css/index.css" type="text/css">
|
16
16
|
</head>
|
17
17
|
|
18
18
|
<body>
|
@@ -39,7 +39,7 @@
|
|
39
39
|
</table>
|
40
40
|
|
41
41
|
<div id="dialog1" style="display:none;">
|
42
|
-
<input class="inarea" type="
|
42
|
+
<input class="inarea" type="search" name="search_str" id="search_str">
|
43
43
|
</div>
|
44
44
|
<table>
|
45
45
|
<tr>
|
@@ -49,7 +49,7 @@
|
|
49
49
|
</table>
|
50
50
|
|
51
51
|
<div id="dialog2" style="display:none;">
|
52
|
-
<input class="inarea" type="
|
52
|
+
<input class="inarea" type="search" name="search_str2" id="search_str2">
|
53
53
|
</div>
|
54
54
|
<table>
|
55
55
|
<tr>
|
@@ -0,0 +1,85 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="ja">
|
3
|
+
|
4
|
+
<head>
|
5
|
+
<meta charset="UTF-8">
|
6
|
+
<title>modalをcomponentで作る</title>
|
7
|
+
</head>
|
8
|
+
|
9
|
+
<style>
|
10
|
+
#content {
|
11
|
+
z-index: 10;
|
12
|
+
width: 50%;
|
13
|
+
padding: 1em;
|
14
|
+
background: #fff;
|
15
|
+
}
|
16
|
+
|
17
|
+
#overlay {
|
18
|
+
/* 要素を重ねた時の順番 */
|
19
|
+
|
20
|
+
z-index: 1;
|
21
|
+
|
22
|
+
/* 画面全体を覆う設定 */
|
23
|
+
position: fixed;
|
24
|
+
top: 0;
|
25
|
+
left: 0;
|
26
|
+
width: 100%;
|
27
|
+
height: 100%;
|
28
|
+
background-color: rgba(0, 0, 0, 0.5);
|
29
|
+
|
30
|
+
/* 画面の中央に要素を表示させる設定 */
|
31
|
+
display: flex;
|
32
|
+
align-items: center;
|
33
|
+
justify-content: center;
|
34
|
+
|
35
|
+
}
|
36
|
+
</style>
|
37
|
+
|
38
|
+
<body>
|
39
|
+
<div id="app">
|
40
|
+
|
41
|
+
<button v-on:click="openModal">Click</button>
|
42
|
+
|
43
|
+
<open-modal v-show="showContent" v-on:from-child="closeModal">slotからモーダルウィンドウへ</open-modal>
|
44
|
+
|
45
|
+
</div>
|
46
|
+
|
47
|
+
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
|
48
|
+
<script>
|
49
|
+
Vue.component('open-modal', {
|
50
|
+
template: `
|
51
|
+
<div id="overlay" v-on:click="clickEvent">
|
52
|
+
<div id="content" v-on:click="stopEvent">
|
53
|
+
<p><slot></slot></p>
|
54
|
+
<button v-on:click="clickEvent">close</button>
|
55
|
+
</div>
|
56
|
+
</div>
|
57
|
+
`,
|
58
|
+
methods: {
|
59
|
+
clickEvent: function () {
|
60
|
+
this.$emit('from-child')
|
61
|
+
},
|
62
|
+
stopEvent: function () {
|
63
|
+
event.stopPropagation()
|
64
|
+
}
|
65
|
+
}
|
66
|
+
})
|
67
|
+
|
68
|
+
new Vue({
|
69
|
+
el: '#app',
|
70
|
+
data: {
|
71
|
+
showContent: false
|
72
|
+
},
|
73
|
+
methods: {
|
74
|
+
openModal: function () {
|
75
|
+
this.showContent = true
|
76
|
+
},
|
77
|
+
closeModal: function () {
|
78
|
+
this.showContent = false
|
79
|
+
},
|
80
|
+
}
|
81
|
+
})
|
82
|
+
</script>
|
83
|
+
</body>
|
84
|
+
|
85
|
+
</html>
|
data/lib/template/js/main.js
CHANGED
@@ -3,26 +3,35 @@
|
|
3
3
|
var $ws = null;
|
4
4
|
var $auto_scroll = true;
|
5
5
|
var dialog = null;
|
6
|
+
var dialog_timeout = null;
|
6
7
|
|
7
|
-
function open_dialog(msg) {
|
8
|
+
function open_dialog(msg, timeout = 0) {
|
8
9
|
console.log("msg=" + msg);
|
9
10
|
$("#msg_text").html(msg);
|
10
|
-
$("#msg_dialog").dialog({
|
11
|
+
d = $("#msg_dialog").dialog({
|
11
12
|
modal: true
|
12
13
|
, show: "slide" //表示時のアニメーション
|
13
14
|
, hide: "slide" //閉じた時のアニメーション
|
14
15
|
, title: "Message" //ダイアログのタイトル
|
15
|
-
, width:
|
16
|
-
, height:
|
16
|
+
, width: 500 //ダイアログの横幅
|
17
|
+
, height: 300 //ダイアログの高さ
|
17
18
|
, resizable: true //リサイズ可
|
18
19
|
, closeOnEscape: false //[ESC]キーで閉じられなくする
|
19
20
|
, draggable: true //ダイアログの移動を可に
|
20
21
|
, buttons: {
|
21
22
|
"OK": function () { //Cancelボタン
|
23
|
+
if (dialog_timeout != null) {
|
24
|
+
clearTimeout(dialog_timeout);
|
25
|
+
}
|
22
26
|
$(this).dialog("close");
|
23
27
|
}
|
24
28
|
}
|
25
29
|
});
|
30
|
+
if (timeout != 0) {
|
31
|
+
dialog_timeout = setTimeout(function () {
|
32
|
+
d.dialog("close");
|
33
|
+
}, timeout);
|
34
|
+
}
|
26
35
|
}
|
27
36
|
|
28
37
|
function open_dialog_org(msg) {
|
@@ -62,11 +71,14 @@ function server_connect(url) {
|
|
62
71
|
else if (evt.data.match(/^app_end:normal/)) {
|
63
72
|
open_dialog("終了しました");
|
64
73
|
}
|
74
|
+
else if (evt.data.match(/^app_end:stop/)) {
|
75
|
+
open_dialog("中止しました");
|
76
|
+
}
|
65
77
|
else if (evt.data.match(/^app_end:error/)) {
|
66
78
|
open_dialog("<font color='red'>エラーが発生しました</font>");
|
67
79
|
}
|
68
80
|
else if (evt.data.match(/^popup:/)) {
|
69
|
-
open_dialog(evt.data.replace(/^popup:/, ""));
|
81
|
+
open_dialog(evt.data.replace(/^popup:/, ""), 3000);
|
70
82
|
} else {
|
71
83
|
var log = "<li>" + evt.data + "</li>";
|
72
84
|
$('#log').append(log);
|
@@ -103,7 +115,7 @@ function autocomp(id, file_kind) {
|
|
103
115
|
},
|
104
116
|
source: function (req, resp) {
|
105
117
|
$.ajax({
|
106
|
-
url: "http://localhost:
|
118
|
+
url: "http://localhost:36809/search?path=" + $("#" + id).val() + "&kind=" + file_kind,
|
107
119
|
type: "GET",
|
108
120
|
cache: false,
|
109
121
|
dataType: "json",
|
@@ -136,7 +148,7 @@ function autocomp_history(id, file_name) {
|
|
136
148
|
},
|
137
149
|
source: function (req, resp) {
|
138
150
|
$.ajax({
|
139
|
-
url: "http://localhost:
|
151
|
+
url: "http://localhost:36809/history/" + file_name,
|
140
152
|
type: "POST",
|
141
153
|
cache: false,
|
142
154
|
dataType: "json",
|
@@ -197,7 +209,7 @@ function setting_dialog(open_id, dialog_id, json_file) {
|
|
197
209
|
if (s[i].type == "input") {
|
198
210
|
var h = "<table><tr>"
|
199
211
|
+ "<td class='setting_name'>" + s[i].description + "</td>"
|
200
|
-
+ "<td><input class='setting_value' type='text' " + "id=" + s[i].name + "_value " + "value=" + s[i].value + ">"
|
212
|
+
+ "<td><input class='setting_value' type='text' " + "id=" + s[i].name + "_value " + "value=" + "'" + s[i].value + "'" + ">"
|
201
213
|
+ "</td></tr></table>"
|
202
214
|
$("dl#wrap").append(h);
|
203
215
|
} else if (s[i].type == "checkbox") {
|
@@ -314,7 +326,7 @@ $(document).ready(function () {
|
|
314
326
|
window.onload = function (e) {
|
315
327
|
console.log("onload");
|
316
328
|
// サーバに接続
|
317
|
-
server_connect("ws://localhost:
|
329
|
+
server_connect("ws://localhost:36809/wsserver")
|
318
330
|
}
|
319
331
|
|
320
332
|
// ウインドウサイズ
|
@@ -40,7 +40,7 @@ class AppMainBase
|
|
40
40
|
end
|
41
41
|
|
42
42
|
# 履歴の保存
|
43
|
-
def add_history(file, history_data)
|
43
|
+
def add_history(file, history_data, max = 10)
|
44
44
|
buf = File.read "history/#{file}"
|
45
45
|
data = eval(buf)
|
46
46
|
if data == nil
|
@@ -49,8 +49,9 @@ class AppMainBase
|
|
49
49
|
if history_data.to_s != ""
|
50
50
|
data.prepend history_data
|
51
51
|
end
|
52
|
+
data = data.uniq[0..max - 1]
|
52
53
|
File.open("history/#{file}", "w") do |f|
|
53
|
-
f.write JSON.pretty_generate data
|
54
|
+
f.write JSON.pretty_generate data
|
54
55
|
end
|
55
56
|
end
|
56
57
|
end
|
data/lib/template/start.rb
CHANGED
@@ -12,33 +12,50 @@ require "facter"
|
|
12
12
|
|
13
13
|
# ログ出力
|
14
14
|
module Output
|
15
|
-
def self.console_and_file(output_file)
|
16
|
-
|
15
|
+
def self.console_and_file(output_file, stdout = true)
|
16
|
+
begin
|
17
|
+
defout = File.new(output_file, "a+")
|
18
|
+
rescue
|
19
|
+
puts $!
|
20
|
+
puts $@
|
21
|
+
return nil
|
22
|
+
end
|
17
23
|
class << defout
|
18
24
|
alias_method :write_org, :write
|
19
25
|
|
26
|
+
def initialize(stdout)
|
27
|
+
@stdout = false
|
28
|
+
end
|
29
|
+
|
30
|
+
attr_accessor :stdout
|
31
|
+
|
20
32
|
def puts(str)
|
21
|
-
STDOUT.write(str.to_s + "\n")
|
33
|
+
STDOUT.write(str.to_s + "\n") if @stdout
|
22
34
|
self.write_org(str.to_s + "\n")
|
23
35
|
self.flush
|
24
36
|
end
|
25
37
|
|
26
38
|
def write(str)
|
27
|
-
STDOUT.write(str)
|
39
|
+
STDOUT.write(str) if @stdout
|
28
40
|
self.write_org(str)
|
29
41
|
self.flush
|
30
42
|
end
|
31
43
|
end
|
32
44
|
$stdout = defout
|
45
|
+
$stdout.stdout = stdout
|
33
46
|
end
|
34
47
|
end
|
35
48
|
|
36
|
-
Output.console_and_file("log.txt")
|
37
|
-
|
38
49
|
# ディレクトリ移動
|
39
50
|
dir = File.dirname(File.expand_path(__FILE__))
|
40
51
|
FileUtils.cd dir
|
41
52
|
|
53
|
+
temp_dir = ENV["temp"]
|
54
|
+
temp_dir = "/tmp" if temp_dir == nil
|
55
|
+
puts "temp_dir=#{temp_dir}"
|
56
|
+
FileUtils.mkdir_p("#{temp_dir}/logs")
|
57
|
+
Output.console_and_file("#{temp_dir}/logs/app.log", true)
|
58
|
+
|
42
59
|
# 空きポートを取得
|
43
60
|
def get_unused_port
|
44
61
|
s = TCPServer.open(0)
|
@@ -62,9 +79,9 @@ buf.gsub!(/localhost:[0-9]+\//, "localhost:#{port}/")
|
|
62
79
|
File.binwrite("js/main.js", buf)
|
63
80
|
|
64
81
|
# index.htaの編集
|
65
|
-
buf = File.binread("index.html").toutf8
|
82
|
+
buf = File.binread("html/index.html").toutf8
|
66
83
|
buf.gsub!(/localhost:[0-9]+\//, "localhost:#{port}/")
|
67
|
-
File.binwrite("index.html", buf)
|
84
|
+
File.binwrite("html/index.html", buf)
|
68
85
|
|
69
86
|
begin
|
70
87
|
Thread.start {
|
data/lib/template/wsserver.rb
CHANGED
@@ -51,11 +51,11 @@ class WsServer < Sinatra::Base
|
|
51
51
|
end
|
52
52
|
ws.onmessage do |msg|
|
53
53
|
puts msg
|
54
|
+
json = JSON.parse(File.read("config/setting.json"))
|
55
|
+
json_config = config_json_hash(json)
|
56
|
+
$app.set_config(json_config)
|
54
57
|
if msg =~ /^exec:/
|
55
58
|
if exec_thread == nil
|
56
|
-
json = JSON.parse(File.read("config/setting.json"))
|
57
|
-
json_config = config_json_hash(json)
|
58
|
-
$app.set_config(json_config)
|
59
59
|
argv = msg.gsub(/^exec:/, "")
|
60
60
|
exec_thread = Thread.new {
|
61
61
|
begin
|
@@ -80,6 +80,8 @@ class WsServer < Sinatra::Base
|
|
80
80
|
end
|
81
81
|
if msg =~ /^stop/
|
82
82
|
if exec_thread
|
83
|
+
Thread.kill exec_thread
|
84
|
+
ws_send("app_end:stop")
|
83
85
|
$app.stop
|
84
86
|
end
|
85
87
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: browser_app_base
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- masataka kuwayama
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -99,6 +99,7 @@ email:
|
|
99
99
|
- masataka.kuwayama@gmail.com
|
100
100
|
executables:
|
101
101
|
- create_browser_app.rb
|
102
|
+
- start_sample.rb
|
102
103
|
extensions: []
|
103
104
|
extra_rdoc_files: []
|
104
105
|
files:
|
@@ -110,6 +111,7 @@ files:
|
|
110
111
|
- README.md
|
111
112
|
- Rakefile
|
112
113
|
- bin/create_browser_app.rb
|
114
|
+
- bin/start_sample.rb
|
113
115
|
- browser_app_base.gemspec
|
114
116
|
- lib/browser_app_base.rb
|
115
117
|
- lib/browser_app_base/version.rb
|
@@ -119,7 +121,8 @@ files:
|
|
119
121
|
- lib/template/config/setting.json
|
120
122
|
- lib/template/css/index.css
|
121
123
|
- lib/template/history/history.json
|
122
|
-
- lib/template/index.html
|
124
|
+
- lib/template/html/index.html
|
125
|
+
- lib/template/html/test.html
|
123
126
|
- lib/template/js/main.js
|
124
127
|
- lib/template/my_app_sample.rb
|
125
128
|
- lib/template/server.rb
|