browser_app_base 0.1.0 → 0.1.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c449614e4619060aa9e9f5799bc67822e61c1f603ff099914aff5e60593828dd
4
- data.tar.gz: c146b0df93c05a64dceb9d6987895635bef0d733f9421581aa421c51d7077fd9
3
+ metadata.gz: a22a122d81077a56ab0c76ef5faa6bcff0df41828eb333087735243890835f1a
4
+ data.tar.gz: 8360c3f68edf2eb31783ed4dcef383b3bba6c53ebc2924fb4023cb265bc1775a
5
5
  SHA512:
6
- metadata.gz: ed31b5268858c2ac45a01f20924cfe569c0f360797bfad8650a37cf07eff9452b229dbc30ecd0b3200ac5ebcbddc20fcca8f485d4a49440573ee0c6c6a6b7cd2
7
- data.tar.gz: 00fa73805f8d27f12464fea9bee92720c9303960890e23a02d804f060b6e1429f5b9b02c0dc58ff1bd0ae90ffd4f8ed38c918bdc45e843e203f68563dbce9009
6
+ metadata.gz: 7ee58439f8cec945ab9577fe7f2d27770a69ea070ef1ee00ce49d4a106bd114d0a3d0a1eae971b89532c64a3a3c435989cc92a39b03bf3c9f7697106b46d7856
7
+ data.tar.gz: a477e7007e72552b287078b76e19760896a19360ea31229ee34841d7171397b87b1b80a871a7e55d0e8cf2f07f06171aebad88a0cdf32801179fe941b0349184
data/.gitignore CHANGED
@@ -10,3 +10,5 @@ Gemfile.lock
10
10
 
11
11
  # rspec failure tracking
12
12
  .rspec_status
13
+ /lib/template/logs
14
+ /history/history.json
data/.vscode/launch.json CHANGED
@@ -15,6 +15,7 @@
15
15
  "type": "Ruby",
16
16
  "request": "launch",
17
17
  "cwd": "${workspaceRoot}/lib/template",
18
+ "args": [ "test" ],
18
19
  "program": "${workspaceRoot}/lib/template/start.rb"
19
20
  }
20
21
  ]
data/README.md CHANGED
@@ -62,9 +62,11 @@ ui application sample
62
62
  $ /tmp/test/bin/start_my_app.rb
63
63
  ```
64
64
 
65
+ ![app](img/app.png)
66
+
65
67
  ## browser setting
66
68
 
67
- config/browser.json
69
+ ${home}/${app_nane}/config/browser.json
68
70
  Set the path for your Windows or Linux Chrome browser
69
71
 
70
72
  ```json
@@ -103,6 +105,85 @@ class MyApp < AppMainBase
103
105
  end
104
106
  ```
105
107
 
108
+ ## Application Setting
109
+
110
+ ${home}/${app_nane}/config/setting.json
111
+
112
+
113
+ ```json
114
+ [
115
+ {
116
+ "name": "name1",
117
+ "value": "value1 2 3 4",
118
+ "type": "input",
119
+ "select": "",
120
+ "description": "設定項目1"
121
+ },
122
+ {
123
+ "name": "name2",
124
+ "value": true,
125
+ "type": "checkbox",
126
+ "select": "",
127
+ "description": "有効にする場合はチェック"
128
+ },
129
+ {
130
+ "name": "name3",
131
+ "value": "2",
132
+ "type": "select",
133
+ "select": [
134
+ "1",
135
+ "2",
136
+ "3",
137
+ "4",
138
+ "5"
139
+ ],
140
+ "description": "選択項目"
141
+ },
142
+ {
143
+ "name": "name4",
144
+ "value": "value4",
145
+ "type": "input",
146
+ "select": "",
147
+ "description": "設定項目4"
148
+ },
149
+ {
150
+ "name": "name5",
151
+ "value": "value5",
152
+ "type": "input",
153
+ "select": "",
154
+ "description": "設定項目5"
155
+ },
156
+ {
157
+ "name": "name6",
158
+ "value": "value6",
159
+ "type": "input",
160
+ "select": "",
161
+ "description": "設定項目6"
162
+ }
163
+ ]
164
+ ```
165
+ ```ruby
166
+ class MyApp < AppMainBase
167
+ def start(argv)
168
+ # popup message
169
+ app_send("popup:message string")
170
+
171
+ # log message
172
+ yield "log message"
173
+ end
174
+
175
+ # read setting
176
+ puts @config["name1"]
177
+ end
178
+ ```
179
+
180
+ Setting menu
181
+ ![app](img/setting_menu.png)
182
+
183
+
184
+ Setting screen
185
+ ![app](img/setting.png)
186
+
106
187
  ## Development
107
188
 
108
189
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
data/bin/start_sample.rb CHANGED
@@ -5,15 +5,28 @@ require "facter"
5
5
  require "tmpdir"
6
6
 
7
7
  # tmpdirディレクトリにコピー
8
- dir = File.dirname(File.expand_path(__FILE__)) + "/../"
8
+ dir = File.dirname(File.expand_path(__FILE__ + "/../"))
9
+ home_dir = ENV["HOME"] + "/" + dir.split("/")[-1]
10
+ puts "home_dir=#{$home_dir}"
9
11
  Dir.mktmpdir { |tmpdir|
10
- puts tmpdir
12
+ outdir = tmpdir + "/" + dir.split("/")[-1]
13
+ FileUtils.mkdir_p outdir
14
+ FileUtils.mkdir_p home_dir
15
+ puts outdir
11
16
  Dir.glob("#{dir}/lib/*") do |f|
12
- puts "#{f} => #{tmpdir}"
13
- FileUtils.cp_r f, "#{tmpdir}"
17
+ if f =~ /config$/
18
+ # configはhomeにコピー
19
+ if !File.exists? "#{home_dir}/config"
20
+ puts "#{f} => #{home_dir}/"
21
+ FileUtils.cp_r f, "#{home_dir}/"
22
+ end
23
+ else
24
+ puts "#{f} => #{outdir}/"
25
+ FileUtils.cp_r f, "#{outdir}/"
26
+ end
14
27
  end
15
28
 
16
- FileUtils.cd "#{tmpdir}"
29
+ FileUtils.cd "#{outdir}"
17
30
  kernel = Facter.value(:kernel)
18
31
  if kernel == "windows"
19
32
  system "rubyw ./start.rb"
@@ -22,4 +35,5 @@ Dir.mktmpdir { |tmpdir|
22
35
  else
23
36
  system "ruby ./start.rb"
24
37
  end
38
+ FileUtils.cd ENV["HOME"]
25
39
  }
data/img/app.png ADDED
Binary file
data/img/setting.png ADDED
Binary file
Binary file
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BrowserAppBase
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.3"
5
5
  end
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "chrome_win": "start chrome",
3
- "chrome_linux": "/bin/google-chrome"
4
- }
3
+ "chrome_linux": "google-chrome"
4
+ }
@@ -8,10 +8,7 @@ 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+")
11
+ access_log = File.new("#{$home_dir}/logs/sinatra.log", "a+")
15
12
  access_log.sync = true
16
13
  use Rack::CommonLogger, access_log
17
14
 
@@ -39,14 +36,18 @@ end
39
36
  get "/config/*.*" do |file, ext|
40
37
  content_type "text/json", :charset => "utf-8"
41
38
  puts "#{file}.#{ext}"
42
- File.read "config/#{file}.#{ext}"
39
+ File.read "#{$home_dir}/config/#{file}.#{ext}"
43
40
  end
44
41
 
45
42
  post "/history/*.*" do |file, ext|
46
43
  content_type "text/json", :charset => "utf-8"
47
44
  puts "#{file}.#{ext}"
48
45
  p = params[:param1]
49
- buf = File.read "history/#{file}.#{ext}"
46
+ begin
47
+ buf = File.read "#{$home_dir}/history/#{file}.#{ext}"
48
+ rescue
49
+ buf = ""
50
+ end
50
51
  data = eval(buf)
51
52
  if data != nil
52
53
  if p != ""
@@ -101,6 +102,6 @@ configure do
101
102
 
102
103
  end
103
104
 
104
- #\ --port 36809
105
+ #\ --port 40173
105
106
 
106
107
  run Sinatra::Application
@@ -121,4 +121,58 @@ input[type="search"] {
121
121
 
122
122
  input[type="search"]::-webkit-search-cancel-button {
123
123
  -webkit-appearance: searchfield-cancel-button;
124
+ }
125
+
126
+ /* menu */
127
+ .menu {
128
+ display: flex;
129
+ justify-content: flex-start;
130
+ list-style-type: none;
131
+ color: #393737;
132
+ padding: 0;
133
+ font-size: 16px;
134
+ font-weight: bold;
135
+ }
136
+
137
+ .menu li {
138
+ position: relative;
139
+ width: 100px;
140
+ margin-left: 1px;
141
+ padding: 5px;
142
+ background: #d8dada;
143
+ list-style-type: none;
144
+ }
145
+
146
+ .menu li a {
147
+ color: rgb(20, 114, 192);
148
+ }
149
+
150
+ .menu li a:hover {
151
+ background: #eba399;
152
+ }
153
+
154
+ .menuSub {
155
+ position: absolute;
156
+ margin-left: -6px;
157
+ padding: 0;
158
+ display: none;
159
+ }
160
+
161
+ /*.openが付与された時、表示の設定*/
162
+ .menuSub.open {
163
+ display: block;
164
+ }
165
+
166
+ .menuSub li a {
167
+ padding: 5px;
168
+ margin-left: -5px;
169
+ margin-right: -5px;
170
+ margin-bottom: -5px;
171
+ display: block;
172
+ color: rgb(20, 114, 192);
173
+ text-decoration: none;
174
+ }
175
+
176
+ .menuSub li a:hover {
177
+ background: #eba399;
124
178
  }
@@ -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:36809/js/main.js"></script>
15
- <link rel="stylesheet" href="http://localhost:36809/css/index.css" type="text/css">
14
+ <script src="js/main.js"></script>
15
+ <link rel="stylesheet" href="css/index.css" type="text/css">
16
16
  </head>
17
17
 
18
18
  <body>
@@ -21,22 +21,33 @@
21
21
  </div>
22
22
  <h4>RubyAppBase</h4>
23
23
  <hr>
24
- <table>
25
- <tr>
26
- <td>
27
- <input type="button" id="exec" name="exec" value="実行">
28
- </td>
29
- <td>
30
- <input type="button" id="stop" name="stop" value="停止">
31
- </td>
32
- <td>
33
- <div id="setting_dialog" style="display:none;">
34
- <dl id="wrap"></dl>
35
- </div>
36
- <input type="button" id="setting" value="設定" />
37
- </td>
38
- </tr>
39
- </table>
24
+ <!-- menu -->
25
+ <div id="setting_dialog" style="display:none;">
26
+ <dl id="wrap"></dl>
27
+ </div>
28
+ <div>
29
+ <ul class="menu">
30
+ <Li><a href="#" id="exec" name="exec">実行</a></li>
31
+ <li><a href="#" id="stop" name="stop">停止</a></li>
32
+ <li>
33
+ 設定
34
+ <ul class="menuSub">
35
+ <li><a href="#" id="setting">設定</a></li>
36
+ <li><a href="#" id="save_setting">設定保存</a></li>
37
+ <li><a href="#" id="load_setting">設定読み込み</a></li>
38
+ </ul>
39
+ </li>
40
+ <!--
41
+ <li>
42
+ menu3
43
+ <ul class="menuSub">
44
+ <li><a href="#">menu3-1</a></li>
45
+ <li><a href="#">menu3-2</a></li>
46
+ </ul>
47
+ </li>
48
+ -->
49
+ </ul>
50
+ </div>
40
51
 
41
52
  <div id="dialog1" style="display:none;">
42
53
  <input class="inarea" type="search" name="search_str" id="search_str">
@@ -1,85 +0,0 @@
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>
@@ -115,7 +115,7 @@ function autocomp(id, file_kind) {
115
115
  },
116
116
  source: function (req, resp) {
117
117
  $.ajax({
118
- url: "http://localhost:36809/search?path=" + $("#" + id).val() + "&kind=" + file_kind,
118
+ url: "search?path=" + $("#" + id).val() + "&kind=" + file_kind,
119
119
  type: "GET",
120
120
  cache: false,
121
121
  dataType: "json",
@@ -148,7 +148,7 @@ function autocomp_history(id, file_name) {
148
148
  },
149
149
  source: function (req, resp) {
150
150
  $.ajax({
151
- url: "http://localhost:36809/history/" + file_name,
151
+ url: "history/" + file_name,
152
152
  type: "POST",
153
153
  cache: false,
154
154
  dataType: "json",
@@ -291,6 +291,7 @@ function setting_dialog(open_id, dialog_id, json_file) {
291
291
  //console.log("type=" + s[i].type);
292
292
  }
293
293
  }
294
+ // Jsonデータをサーバに送信
294
295
  $ws.send("setting:" + JSON.stringify(json_data));
295
296
  });
296
297
  $(this).dialog("close");
@@ -303,6 +304,57 @@ function setting_dialog(open_id, dialog_id, json_file) {
303
304
  });
304
305
  }
305
306
 
307
+ // 設定読み込み
308
+ function load_setting(open_id) {
309
+ document.getElementById(open_id).onclick = async () => {
310
+ [fileHandle] = await window.showOpenFilePicker();
311
+ const file = await fileHandle.getFile();
312
+ const json_data = await file.text();
313
+ console.log(json_data);
314
+ // Jsonデータをサーバに送信
315
+ $ws.send("setting:" + json_data);
316
+ };
317
+ }
318
+
319
+ // 設定保存
320
+ function save_setting(open_id, json_file) {
321
+ document.getElementById(open_id).onclick = async () => {
322
+ var json_data = ""
323
+ $.ajax({
324
+ // jsonの読み込み
325
+ type: "GET",
326
+ url: json_file, // ファイルパス(相対パス)
327
+ dataType: "json", // ファイル形式
328
+ async: false // 非同期通信フラグ
329
+ }).then(
330
+ function (json) {
331
+ // 読み込み成功時の処理
332
+ json_data = JSON.stringify(json, null, 2);
333
+ console.log("json=" + json_data);
334
+ },
335
+ function () {
336
+ // 読み込み失敗時の処理
337
+ console.log("読み込みに失敗しました");
338
+ }
339
+ );
340
+ // Jsonを保存
341
+ const opts = {
342
+ suggestedName: 'setting.json',
343
+ types: [{
344
+ description: 'Text file',
345
+ accept: { 'text/plain': ['.json'] },
346
+ }],
347
+ };
348
+ // ファイルをどこにどんな名前で保存するか訊くダイアログを表示
349
+ const saveHandle = await window.showSaveFilePicker(opts)
350
+ // 保存先ファイルに書き込み準備
351
+ const writable = await saveHandle.createWritable();
352
+ // 先程同様に書き込んで終了
353
+ await writable.write(json_data);
354
+ await writable.close();
355
+ };
356
+ }
357
+
306
358
  function get_dirname(path) {
307
359
  var result = path.replace(/\\/g, '/').replace(/\/[^\/]*$/, '');
308
360
  if (result.match(/^[^\/]*\.[^\/\.]*$/)) {
@@ -323,12 +375,27 @@ function openFile(file) {
323
375
  // 起動時の処理
324
376
  $(document).ready(function () {
325
377
 
378
+ // サーバに接続
379
+ server_connect("ws://localhost:40173/wsserver")
326
380
  window.onload = function (e) {
327
- console.log("onload");
328
381
  // サーバに接続
329
- server_connect("ws://localhost:36809/wsserver")
382
+ //server_connect("ws://localhost:40173/wsserver")
330
383
  }
331
384
 
385
+ // menu
386
+ $(function () {
387
+ $(".menu li").hover(
388
+ function () {
389
+ //クラス名「open」を付与する
390
+ $(this).children(".menuSub").addClass("open");
391
+ //hoverが外れた場合
392
+ }, function () {
393
+ //クラス名「open」を取り除く
394
+ $(this).children(".menuSub").removeClass("open");
395
+ }
396
+ );
397
+ });
398
+
332
399
  // ウインドウサイズ
333
400
  var width = 800;
334
401
  var height = 600;
@@ -357,6 +424,15 @@ $(document).ready(function () {
357
424
  //console.log("auto_scroll=" + $auto_scroll);
358
425
  });
359
426
 
427
+ // 設定ダイアログ
428
+ setting_dialog("setting", "setting_dialog", "config/setting.json");
429
+
430
+ // 設定保存
431
+ save_setting("save_setting", "config/setting.json");
432
+
433
+ // 設定読み込み
434
+ load_setting("load_setting");
435
+
360
436
  // ハンドラ登録
361
437
  $("#stop").click(function () {
362
438
  send_message("stop");
@@ -367,12 +443,11 @@ $(document).ready(function () {
367
443
  send_message("exec:" + $("#upFile").val());
368
444
  });
369
445
 
446
+
370
447
  select_file_dialog("search_str", "file", "dialog1", "select_file", "upFile");
371
448
 
372
449
  select_file_dialog("search_str2", "dir", "dialog2", "select_dir", "upDir");
373
450
 
374
- setting_dialog("setting", "setting_dialog", "config/setting.json");
375
-
376
451
  autocomp_history("upFile", "history.json")
377
452
 
378
453
  });
@@ -41,7 +41,11 @@ class AppMainBase
41
41
 
42
42
  # 履歴の保存
43
43
  def add_history(file, history_data, max = 10)
44
- buf = File.read "history/#{file}"
44
+ begin
45
+ buf = File.read "#{$home_dir}history/#{file}"
46
+ rescue
47
+ buf = ""
48
+ end
45
49
  data = eval(buf)
46
50
  if data == nil
47
51
  data = []
@@ -50,7 +54,7 @@ class AppMainBase
50
54
  data.prepend history_data
51
55
  end
52
56
  data = data.uniq[0..max - 1]
53
- File.open("history/#{file}", "w") do |f|
57
+ File.open("#{$home_dir}history/#{file}", "w") do |f|
54
58
  f.write JSON.pretty_generate data
55
59
  end
56
60
  end
@@ -50,11 +50,18 @@ end
50
50
  dir = File.dirname(File.expand_path(__FILE__))
51
51
  FileUtils.cd dir
52
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)
53
+ # ディレクトリ作成
54
+ pp ARGV
55
+ if ARGV[0] == "test"
56
+ $home_dir = "./"
57
+ ARGV = []
58
+ else
59
+ $home_dir = ENV["HOME"] + "/" + dir.split("/")[-1] + "/"
60
+ end
61
+ puts "home_dir=#{$home_dir}"
62
+ FileUtils.mkdir_p("#{$home_dir}/logs")
63
+ FileUtils.mkdir_p("#{$home_dir}/history")
64
+ Output.console_and_file("#{$home_dir}/logs/app.log", true)
58
65
 
59
66
  # 空きポートを取得
60
67
  def get_unused_port
@@ -98,7 +105,7 @@ begin
98
105
  end
99
106
 
100
107
  puts "start browser"
101
- json_file = File.dirname(File.expand_path(__FILE__)) + "/config/browser.json"
108
+ json_file = "#{$home_dir}/config/browser.json"
102
109
  json = JSON.parse(File.read json_file)
103
110
  puts json
104
111
  kernel = Facter.value(:kernel)
@@ -51,7 +51,7 @@ 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"))
54
+ json = JSON.parse(File.read("#{$home_dir}/config/setting.json"))
55
55
  json_config = config_json_hash(json)
56
56
  $app.set_config(json_config)
57
57
  if msg =~ /^exec:/
@@ -97,12 +97,17 @@ class WsServer < Sinatra::Base
97
97
  end
98
98
  if msg =~ /^setting:/
99
99
  json_string = msg.gsub(/^setting:/, "")
100
- json = JSON.parse(json_string)
101
- File.open("config/setting.json", "w") do |w|
102
- w.puts JSON.pretty_generate(json)
100
+ begin
101
+ json = JSON.parse(json_string)
102
+ File.open("#{$home_dir}/config/setting.json", "w") do |w|
103
+ w.puts JSON.pretty_generate(json)
104
+ end
105
+ json_config = config_json_hash(json)
106
+ $app.set_config(json_config)
107
+ rescue
108
+ # jsonファイルではない
109
+ ws_send("app_end:error")
103
110
  end
104
- json_config = config_json_hash(json)
105
- $app.set_config(json_config)
106
111
  end
107
112
  if msg =~ /^openfile:/
108
113
  file = msg.gsub(/^openfile:/, "")
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.1.0
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - masataka kuwayama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-19 00:00:00.000000000 Z
11
+ date: 2022-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
@@ -113,6 +113,9 @@ files:
113
113
  - bin/create_browser_app.rb
114
114
  - bin/start_sample.rb
115
115
  - browser_app_base.gemspec
116
+ - img/app.png
117
+ - img/setting.png
118
+ - img/setting_menu.png
116
119
  - lib/browser_app_base.rb
117
120
  - lib/browser_app_base/version.rb
118
121
  - lib/template/app_load.rb