ezii-os 1.0.0 → 1.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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/Aptfile +2 -0
  3. data/Gemfile +3 -1
  4. data/Gemfile.lock +27 -0
  5. data/Procfile +2 -1
  6. data/app/assets/stylesheets/banal/brainstorms.scss +3 -0
  7. data/app/assets/stylesheets/banal/projects.scss +3 -0
  8. data/app/assets/stylesheets/tasks.scss +3 -0
  9. data/app/controllers/application_controller.rb +9 -0
  10. data/app/controllers/banal/brainstorms_controller.rb +74 -0
  11. data/app/controllers/banal/projects_controller.rb +74 -0
  12. data/app/controllers/directories_controller.rb +2 -2
  13. data/app/controllers/ezii_os_files_controller.rb +17 -0
  14. data/app/controllers/tasks_controller.rb +74 -0
  15. data/app/helpers/banal/brainstorms_helper.rb +2 -0
  16. data/app/helpers/banal/projects_helper.rb +2 -0
  17. data/app/helpers/tasks_helper.rb +2 -0
  18. data/app/models/banal/brainstorm.rb +2 -0
  19. data/app/models/banal/project.rb +4 -0
  20. data/app/models/banal.rb +5 -0
  21. data/app/models/ezii_os_path.rb +2 -1
  22. data/app/models/task.rb +2 -0
  23. data/app/views/application/_navbar.html.erb +20 -0
  24. data/app/views/banal/brainstorms/_banal_brainstorm.json.jbuilder +2 -0
  25. data/app/views/banal/brainstorms/_form.html.erb +47 -0
  26. data/app/views/banal/brainstorms/edit.html.erb +6 -0
  27. data/app/views/banal/brainstorms/index.html.erb +37 -0
  28. data/app/views/banal/brainstorms/index.json.jbuilder +1 -0
  29. data/app/views/banal/brainstorms/new.html.erb +5 -0
  30. data/app/views/banal/brainstorms/show.html.erb +34 -0
  31. data/app/views/banal/brainstorms/show.json.jbuilder +1 -0
  32. data/app/views/banal/projects/_banal_project.json.jbuilder +2 -0
  33. data/app/views/banal/projects/_form.html.erb +22 -0
  34. data/app/views/banal/projects/edit.html.erb +6 -0
  35. data/app/views/banal/projects/index.html.erb +27 -0
  36. data/app/views/banal/projects/index.json.jbuilder +1 -0
  37. data/app/views/banal/projects/new.html.erb +5 -0
  38. data/app/views/banal/projects/show.html.erb +9 -0
  39. data/app/views/banal/projects/show.json.jbuilder +1 -0
  40. data/app/views/directories/show.html.erb +8 -4
  41. data/app/views/ezii_os_files/_entity_visual_selection.html.erb +66 -0
  42. data/app/views/ezii_os_files/_wit_ai_widget.html.erb +80 -72
  43. data/app/views/layouts/application.html.erb +26 -197
  44. data/app/views/layouts/application_legacy.html.erb +212 -0
  45. data/app/views/tasks/_form.html.erb +37 -0
  46. data/app/views/tasks/_task.json.jbuilder +2 -0
  47. data/app/views/tasks/edit.html.erb +6 -0
  48. data/app/views/tasks/index.html.erb +33 -0
  49. data/app/views/tasks/index.json.jbuilder +1 -0
  50. data/app/views/tasks/new.html.erb +5 -0
  51. data/app/views/tasks/show.html.erb +12 -0
  52. data/app/views/tasks/show.json.jbuilder +1 -0
  53. data/config/routes.rb +7 -0
  54. data/db/development.sqlite3 +0 -0
  55. data/db/migrate/20190912113509_create_tasks.rb +12 -0
  56. data/db/migrate/20190912173649_create_banal_projects.rb +9 -0
  57. data/db/migrate/20190912173916_create_banal_brainstorms.rb +14 -0
  58. data/db/seeds.rb +7 -0
  59. data/ezii-os.gemspec +1 -1
  60. data/lib/tasks/rgeo_supports_geos.rake +6 -0
  61. data/lib/tasks/task.rake +5 -5
  62. data/log/development.log +8016 -0
  63. data/test/controllers/banal/brainstorms_controller_test.rb +48 -0
  64. data/test/controllers/banal/projects_controller_test.rb +48 -0
  65. data/test/controllers/tasks_controller_test.rb +48 -0
  66. data/test/fixtures/banal/brainstorms.yml +17 -0
  67. data/test/fixtures/banal/projects.yml +7 -0
  68. data/test/fixtures/tasks.yml +13 -0
  69. data/test/models/banal/brainstorm_test.rb +7 -0
  70. data/test/models/banal/project_test.rb +7 -0
  71. data/test/models/task_test.rb +7 -0
  72. data/test/system/banal/brainstorms_test.rb +53 -0
  73. data/test/system/banal/projects_test.rb +43 -0
  74. data/test/system/tasks_test.rb +49 -0
  75. metadata +58 -4
  76. data/app/assets/stylesheets/scaffolds.scss +0 -84
  77. data/ezii-os-0.0.0.0.1.gem +0 -0
  78. data/ezii-os-0.0.0.1.0.gem +0 -0
@@ -0,0 +1,6 @@
1
+ <h1>Editing Banal Project</h1>
2
+
3
+ <%= render 'form', banal_project: @banal_project %>
4
+
5
+ <%= link_to 'Show', @banal_project %> |
6
+ <%= link_to 'Back', banal_projects_path %>
@@ -0,0 +1,27 @@
1
+ <p id="notice"><%= notice %></p>
2
+
3
+ <h1>Banal Projects</h1>
4
+
5
+ <table>
6
+ <thead>
7
+ <tr>
8
+ <th>Name</th>
9
+ <th colspan="3"></th>
10
+ </tr>
11
+ </thead>
12
+
13
+ <tbody>
14
+ <% @banal_projects.each do |banal_project| %>
15
+ <tr>
16
+ <td><%= banal_project.name %></td>
17
+ <td><%= link_to 'Show', banal_project %></td>
18
+ <td><%= link_to 'Edit', edit_banal_project_path(banal_project) %></td>
19
+ <td><%= link_to 'Destroy', banal_project, method: :delete, data: { confirm: 'Are you sure?' } %></td>
20
+ </tr>
21
+ <% end %>
22
+ </tbody>
23
+ </table>
24
+
25
+ <br>
26
+
27
+ <%= link_to 'New Banal Project', new_banal_project_path %>
@@ -0,0 +1 @@
1
+ json.array! @banal_projects, partial: "banal_projects/banal_project", as: :banal_project
@@ -0,0 +1,5 @@
1
+ <h1>New Banal Project</h1>
2
+
3
+ <%= render 'form', banal_project: @banal_project %>
4
+
5
+ <%= link_to 'Back', banal_projects_path %>
@@ -0,0 +1,9 @@
1
+ <p id="notice"><%= notice %></p>
2
+
3
+ <p>
4
+ <strong>Name:</strong>
5
+ <%= @banal_project.name %>
6
+ </p>
7
+
8
+ <%= link_to 'Edit', edit_banal_project_path(@banal_project) %> |
9
+ <%= link_to 'Back', banal_projects_path %>
@@ -0,0 +1 @@
1
+ json.partial! "banal_projects/banal_project", banal_project: @banal_project
@@ -1,6 +1,6 @@
1
- <ul>
1
+ <ul class="list-group">
2
2
  <% @paths.each do |path| %>
3
- <li>
3
+ <li class="list-group-item">
4
4
  <%= path %>
5
5
  <% if path.modified_at.present? %>
6
6
  was modified
@@ -11,13 +11,17 @@
11
11
  <% end %>
12
12
 
13
13
  <% if path.file? %>
14
- <%= link_to('Show INLINE (admin only)', ezii_os_file_path(path.global_path, admin: true)) %>
15
-
16
14
  <% case File.extname(path.file_system_path) %>
15
+ <% when '.shp' %>
16
+ <%= link_to 'View', ezii_os_file_path(path.global_path) %>
17
+ <% when '.xlsx' %>
18
+ <%= link_to 'View', ezii_os_file_path(path.global_path) %>
17
19
  <% when '.pdf' %>
18
20
  <%= link_to 'View', ezii_os_file_path(path.global_path) %>
19
21
  <% when '.jpg' %>
20
22
  <%= link_to 'View', ezii_os_file_path(path.global_path) %>
23
+ <% when '.erb' %>
24
+ <%= link_to('Show INLINE (admin only)', ezii_os_file_path(path.global_path, admin: true)) %>
21
25
  <% end %>
22
26
  <% else %>
23
27
  <%= link_to 'Change directory (cd)', directory_path(path.global_path) %>
@@ -0,0 +1,66 @@
1
+
2
+ <div id="entity-value-marking" style="display: none;">
3
+ <%=
4
+ File.read(file_path.global_path)
5
+
6
+ res = ""
7
+
8
+ Dir.mktmpdir do |dir|
9
+ Docsplit.extract_text([file_path.global_path], :ocr => false, :output => dir)
10
+
11
+ res = Dir.glob('*.txt', base: dir).map { |f| File.read(File.join(dir, f)) }
12
+ end
13
+
14
+ raw_text = res[0]
15
+
16
+ raw_text.each_char.with_index.map { |char,i| "<span data-index=#{i}>#{char}</span>" }.join('').gsub("\n", "<br />").html_safe
17
+ %>
18
+ </div>
19
+
20
+
21
+ <dl>
22
+
23
+ <p>
24
+ Specify an entity you want to annotate (either select previous or create a new one) and click the Search button.
25
+
26
+ Then you will see the raw text from the PDF and can select one occurence of the entity.
27
+
28
+ Just mark the text like you would mark text before copy & pasting something.
29
+
30
+ Once you confirm the text selection, the training data example will be automagically created for you.
31
+ </p>
32
+ <% 1.times do %>
33
+ <%= form_with model: WitAiParseModelExample.new do |f| %>
34
+ <%= f.hidden_field :parsable_resource, value: file_path %>
35
+ <%= f.hidden_field :parsable_resource_text, value: raw_text %>
36
+ <%= f.hidden_field :parsable_resource_entity_value_start_index %>
37
+ <%= f.hidden_field :parsable_resource_entity_value_end_index %>
38
+
39
+ <dt>
40
+ <b>Property name</b>
41
+ <i>Either select from previously used entity names or type to add a new one.</i>
42
+ <%= f.text_field :entity_name,
43
+ list: "entity_names"
44
+ %>
45
+
46
+ <datalist id="entity_names">
47
+ <% WitAiParseModelExample.pluck(:entity_name).uniq.each do |entity_name| %>
48
+ <option value="<%= entity_name %>">
49
+ <% end %>
50
+ </datalist>
51
+ </dt>
52
+ <dd>
53
+ <div style="display: none;">
54
+ Search for the property
55
+ <%= f.text_field :parsable_resource_query %>
56
+ </div>
57
+
58
+ <div style="display: none;">
59
+ What is the correct value for this file?
60
+ <%= f.text_field :entity_value %>
61
+ </div>
62
+ </dd>
63
+ <%= f.submit "Search" %>
64
+ <% end %>
65
+ <% end %>
66
+ </dl>
@@ -7,8 +7,8 @@
7
7
 
8
8
  <% if params[:admin].present? %>
9
9
  <textarea
10
- onclick="$.post('/cookie_changes', {cookie_change: {identifier: 'erb_dummy_data', value: event.target.value}}, (data, status)=> { this.value = data;alert(this.value); });">
11
- @code_links = []
10
+ onclick="$.post('/cookie_changes', {cookie_change: {identifier: 'erb_dummy_data', value: event.target.value}}, (data, status)=> { alert(this.value); });">
11
+ <%= cookies[:erb_dummy_data] %>
12
12
  </textarea>
13
13
 
14
14
  <pre><code>
@@ -17,6 +17,83 @@
17
17
  <% end %>
18
18
 
19
19
  <% case File.extname(file_path.global_path) %>
20
+ <% when '.shp' %>
21
+ <%
22
+ require 'rgeo/shapefile'
23
+ str = ""
24
+ leafletScript_geojson_features = []
25
+ str += RGeo::Shapefile::Reader.open(file_path.global_path) do |file|
26
+ str += "File contains #{file.num_records} records."
27
+ file.each do |record|
28
+
29
+ geojson_ruby_hash = RGeo::GeoJSON.encode(record.geometry)
30
+ geojson_ruby_hash["coordinates"][0][0].map! do |coordinates|
31
+ [coordinates[0] / 100000, coordinates[1] / 100000]
32
+ end
33
+
34
+ leafletScript_geojson_features.push("L.geoJSON(#{geojson_ruby_hash.to_json}).addTo(map);")
35
+ str += "Record number #{record.index}:"
36
+ str += " Geometry: #{record.geometry.as_text}"
37
+ str += " Attributes: #{record.attributes.inspect}"
38
+ end
39
+ file.rewind
40
+ record = file.next
41
+ str += "First record geometry was: #{record.geometry.as_text}"
42
+ end
43
+ str
44
+
45
+
46
+
47
+ leafletScript = """
48
+ setTimeout(function() {
49
+ var map = L.map('map', { center: [37.0, 45.0], zoom: 0 });
50
+ #{leafletScript_geojson_features.join("\n")}
51
+ }, 1500)
52
+ """
53
+
54
+ %>
55
+ <div id="map" style="height: 200px"></div>
56
+
57
+ <script><%= leafletScript.html_safe %></script>
58
+
59
+ <% when '.xlsx' %>
60
+ <%
61
+ b = Workbook::Book.open(file_path.global_path)
62
+ %>
63
+
64
+ <h3><%= b.title %></h3>
65
+ <!--
66
+ <ul class="list-group">
67
+ <% b.each do |sheet| %>
68
+ <li class="list-group-item">
69
+ <a href="#"><%= sheet.name %></a>
70
+ </li>
71
+ <% end %>
72
+ </ul>
73
+ -->
74
+
75
+ <div class="accordion" id="accordionXLSX">
76
+ <% b.each.with_index do |sheet, i| %>
77
+ <div class="card">
78
+ <div class="card-header" id="heading<%= i %>">
79
+ <h2 class="mb-0">
80
+ <button class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapse<%= i %>" aria-expanded="false" aria-controls="collapse<%= i %>">
81
+ <%= sheet.name %>
82
+ </button>
83
+ </h2>
84
+ </div>
85
+ <div id="collapse<%= i %>" class="collapse" aria-labelledby="heading<%= i %>" data-parent="#accordionXLSX">
86
+ <div class="card-body">
87
+ <pre><code>
88
+ <%= sheet.table.to_html.html_safe %>
89
+ </pre></code>
90
+ </div>
91
+ </div>
92
+ </div>
93
+ <% end %>
94
+ </div>
95
+
96
+
20
97
  <% when '.erb' %>
21
98
  <% if params[:admin].present? %>
22
99
  <h3>ERB output</h3>
@@ -66,7 +143,7 @@
66
143
  # characters, it's just a MUST, that they don't appear in the string or
67
144
  # ar properly escaped if they appear in the string
68
145
 
69
- dummy_binding = Object.new.instance_exec { eval(erb_dummy_data); notice = "test"; binding };
146
+ dummy_binding = Object.new.instance_eval(erb_dummy_data + ';binding');
70
147
  template = ::ERB.new @last_file_input
71
148
  template.result(dummy_binding).html_safe
72
149
 
@@ -81,76 +158,7 @@
81
158
  </pre>
82
159
  <% end %>
83
160
  <% when '.pdf' %>
84
- <br />
85
-
86
161
  <iframe src="data:application/pdf;base64,<%= Base64.encode64(open(file_path.global_path) { |io| io.read }) %>" width="600" height="780" style="border: none;"> </iframe>
87
-
88
- # TODO: should be a partial
89
- <div id="entity-value-marking" style="display: none;">
90
- <%=
91
- File.read(file_path.global_path)
92
-
93
- res = ""
94
-
95
- Dir.mktmpdir do |dir|
96
- Docsplit.extract_text([file_path.global_path], :ocr => false, :output => dir)
97
-
98
- res = Dir.glob('*.txt', base: dir).map { |f| File.read(File.join(dir, f)) }
99
- end
100
-
101
- raw_text = res[0]
102
-
103
- raw_text.each_char.with_index.map { |char,i| "<span data-index=#{i}>#{char}</span>" }.join('').gsub("\n", "<br />").html_safe
104
- %>
105
- </div>
106
-
107
-
108
- <dl>
109
-
110
- <p>
111
- Specify an entity you want to annotate (either select previous or create a new one) and click the Search button.
112
-
113
- Then you will see the raw text from the PDF and can select one occurence of the entity.
114
-
115
- Just mark the text like you would mark text before copy & pasting something.
116
-
117
- Once you confirm the text selection, the training data example will be automagically created for you.
118
- </p>
119
- <% 1.times do %>
120
- <%= form_with model: WitAiParseModelExample.new do |f| %>
121
- <%= f.hidden_field :parsable_resource, value: file_path %>
122
- <%= f.hidden_field :parsable_resource_text, value: raw_text %>
123
- <%= f.hidden_field :parsable_resource_entity_value_start_index %>
124
- <%= f.hidden_field :parsable_resource_entity_value_end_index %>
125
-
126
- <dt>
127
- <b>Property name</b>
128
- <i>Either select from previously used entity names or type to add a new one.</i>
129
- <%= f.text_field :entity_name,
130
- list: "entity_names"
131
- %>
132
-
133
- <datalist id="entity_names">
134
- <% WitAiParseModelExample.pluck(:entity_name).uniq.each do |entity_name| %>
135
- <option value="<%= entity_name %>">
136
- <% end %>
137
- </datalist>
138
- </dt>
139
- <dd>
140
- <div style="display: none;">
141
- Search for the property
142
- <%= f.text_field :parsable_resource_query %>
143
- </div>
144
-
145
- <div style="display: none;">
146
- What is the correct value for this file?
147
- <%= f.text_field :entity_value %>
148
- </div>
149
- </dd>
150
- <%= f.submit "Search" %>
151
- <% end %>
152
- <% end %>
153
- </dl>
154
162
  <% when '.jpg' %>
155
163
  <img
156
164
  usemap="#planetmap"
@@ -1,212 +1,41 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
- <title>BanalTodo1</title>
4
+ <title>Banal Data</title>
5
5
  <%= csrf_meta_tags %>
6
6
  <%= csp_meta_tag %>
7
-
7
+
8
8
  <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
9
- <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
9
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
10
+ <link rel="stylesheet" href="https://unpkg.com/leaflet@1.5.1/dist/leaflet.css" />
10
11
  </head>
11
- <% if Time.now.strftime('%M').to_i < 5 %>
12
-
13
- <% if cookies['level'].to_s == '2' || (ENV['ALLOWED_LISTED_FOR_SECOND_LEVEL'] || '').split(',').include?(request.remote_ip) %>
14
-
15
12
 
16
13
  <body>
17
- <div class="content">
18
- <header>
19
- <h5 style="background-color: green; color: white;">BE CONSERVATIVELY SECURE</h5>
20
- <h4 style="background-color: yellow; color: black">FIRST SIMULATE, THEN DEPLOY A PASSIVE (EXTREMELY PASSIVE) SYSTEM TO REAL WORLD, FINALLY MAKE IT ACTIVE IN A <b>SECURE</b> WAY</h4>
21
- <h3 style="background-color: red; color: white">If you don't know what this is please only take the survey if you want to help and then leave this site again, thanks.</h3>
22
- <script>(function(t,e,s,o){var n,a,c;t.SMCX=t.SMCX||[],e.getElementById(o)||(n=e.getElementsByTagName(s),a=n[n.length-1],c=e.createElement(s),c.type="text/javascript",c.async=!0,c.id=o,c.src=["https:"===location.protocol?"https://":"http://","widget.surveymonkey.com/collect/website/js/tRaiETqnLgj758hTBazgd1xa5A9y8yPlVJPl45ILXuqWKd1oAWzR0gaU37YaYtdR.js"].join(""),a.parentNode.insertBefore(c,a))})(window,document,"script","smcx-sdk");</script>
14
+ <header style="margin-bottom: 100px;">
15
+ <%= render 'navbar' %>
16
+ </header>
23
17
 
24
- <h2 onclick="window.location = '/searches'">Search</h2>
25
- <h1><a href="/">eZii Operating System Start</a></h1>
26
- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
27
-
28
- </header>
29
-
30
- <main>
31
- <%= yield %>
32
- </main>
33
-
34
-
35
- <script>
36
- Turbolinks.__visit = Turbolinks.visit
37
- Turbolinks.visit = false;
38
- </script>
39
- <textarea
40
- id="story" name="story"
41
- rows="5" cols="33"
42
-
43
- onClick="if(!confirm()) { return; };$.post('/code_change_requests', {code_change_request: {text: this.value}}, (data, status)=> { this.value = data;alert(this.value) });"
44
- >
45
- </textarea>
46
-
47
- <div>
48
- <button style="background-color: blue; color: white;" onclick="alert('Button 1')">Button 1</button>
49
- <button style="background-color: black; color: white;" onclick="alert('Button 2')">Button 2</button>
50
- <button style="background-color: yellow" onclick="alert('Button 3')">Button 3</button>
51
- <button style="background-color: pink; color: red;" onclick="alert('Button 4')">Button 4</button>
52
- </div>
53
- <%- if ENV['HEROKU_FEATURE_SWITCH_GLITCH_APP_LAYOUT_EMBED'] == '1' %>
54
- <!-- Copy and Paste Me -->
55
- <!-- Copy and Paste Me -->
56
- <div class="glitch-embed-wrap" style="height: 420px; width: 100%;">
57
- <iframe
58
- src="https://glitch.com/embed/#!/embed/like-bladder?path=views/index.html&previewSize=100"
59
- title="like-bladder on Glitch"
60
- allow="geolocation; microphone; camera; midi; vr; encrypted-media"
61
- style="height: 100%; width: 100%; border: 0;">
62
- </iframe>
63
- </div>
64
- <% end %>
65
- </br>
66
- </br>
67
- </br>
68
- </br>
69
- </br>
70
-
71
- </br>
72
- </br>
73
- </br>
74
- </br>
75
- </br>
76
- </br>
77
- </br>
78
- </br>
79
- </br>
80
- </br>
81
- </br>
82
- </br>
83
- </br>
84
- </br>
85
- </br>
86
- <footer>
87
- <img src="data:image/png;base64,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" />
88
-
89
- <script
90
- src="https://code.jquery.com/jquery-3.4.1.js"
91
- integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU="
92
- crossorigin="anonymous"></script>
18
+ <main class="container" role="main">
19
+ <br />
93
20
 
21
+ <%= yield %>
94
22
 
95
- <!-- <span class='quora-content-embed' data-name='When-will-there-be-drones-that-taser-people-instead-of-killing-them-non-lethal-drone-eliminations/answer/David-Hambling'>Read <a class='quora-content-link' data-width='560' data-height='260' href='https://www.quora.com/When-will-there-be-drones-that-taser-people-instead-of-killing-them-non-lethal-drone-eliminations/answer/David-Hambling' data-type='answer' data-id='163921462' data-key='ee9e46a83d2467afb2fb815b9424ade1' load-full-answer='False' data-embed='bzrcecw'><a href='https://www.quora.com/David-Hambling'>David Hambling</a>&#039;s <a href='/When-will-there-be-drones-that-taser-people-instead-of-killing-them-non-lethal-drone-eliminations#ans163921462'>answer</a> to <a href='/When-will-there-be-drones-that-taser-people-instead-of-killing-them-non-lethal-drone-eliminations' ref='canonical'><span class="rendered_qtext">When will there be drones that taser people instead of killing them (non-lethal drone eliminations)?</span></a></a> on <a href='https://www.quora.com'>Quora</a><script type="text/javascript" src="https://www.quora.com/widgets/content"></script></span> -->
23
+ <br />
24
+ <br />
25
+ <br />
26
+ <br />
27
+ <br />
28
+ <br />
96
29
 
97
- <span
98
- onclick="
99
- alert('Do u want to work? Write an email to manu@korfmann.info and ask for our Discord')
100
- fetch('/code_change_requests/1')
101
- "
102
- class="pickaxe" style="font-size: 10em;">⛏️
103
- </span>
104
-
105
- <span
106
- onclick="alert('Do u want to work? Write an email to manu@korfmann.info and ask for our Discord')
107
- fetch('/code_change_requests/1')"
108
- >
109
- By using this website, you agree to the following: We show you your ip
110
- </span>
111
-
112
- <span
113
- style="background-color: red"
114
- onclick="confirm('Do you want peace? Peaceeful eliminations are a key, non-lethal weapons, like a drone that tasers, but without 80000 volt which could kill a being.');fetch('/code_change_requests/1');">
115
- Do you want to get to the next level?
116
- </span>
117
-
118
- <div>
119
- <span class="level-slider" style="font-size: 10em;">
120
- 🎚️<%= cookies['level'] %>
121
- </span>
122
-
123
- <span>
124
- <input
125
- type="range"
126
- name="level"
127
- min="0"
128
- max="10"
129
- onchange="$.post('/cookie_changes', {cookie_change: {identifier: 'level', value: event.target.value}}, (data, status)=> { this.value = data;alert(this.value); });"
130
- >
131
- </span>
132
- </div>
133
- <%# RUSSIAN DOLL %>
134
- YOUR IP
135
-
136
- <%= request.remote_ip %>
137
- <span class='yellow' style="background-color: yellow">
138
- <% case cookies['level'] %>
139
- <% when nil %>
140
- Please select a level
141
- <% when '1' %>
142
- <p> Landing Page (glitch + discord) </p>
143
- <% when '2' %>
144
- <p>eZii OS</p>
145
- <% when '3' %>
146
- <p>GAM download (github.com/ezii123/gam)</p>
147
- <% when '4' %>
148
- <p>DEVIL IS IMPOSSIBLE TO UNDERSTAND</p>
149
-
150
- <span>BRAINFREEZER VIA NEURALINK</span>
151
-
152
- <span>Understanding ideas is often simple, translate it to your native language</span>
153
- <% when '5' %>
154
- <p>GAM in browser via artichoke</p>
155
- <% when '6' %>
156
- <p>GOD IS IMPOSSIBLE TO UNDERSTAND</p>
157
- <% when '7' %>
158
- <p>LIFE IS IMPOSSIBLE TO UNDERSTAND</p>
159
- <% when '8' %>
160
- <p>IMPOSSIBLE BURGER</p>
161
- <% when '9' %>
162
- <p>MAC DONALDS</p>
163
- <% when '10' %>
164
- <p>eZii</p>
165
- <% end %>
166
- </span>
167
-
168
-
169
-
170
- <!-- I wish i could render the following in the web browser somehow and then display it with an erb conditional -->
171
- <!-- Maybe it could work using artichoke -->
172
- <!--
173
- <widgetbot
174
- server="<%= ENV['DISCORD_SERVER_ID'] %>"
175
- channel="<%= ENV['DISCORD_CHANNEL_ID'] %>"
176
- width="800"
177
- height="600"
178
- shard="https://disweb.deploys.io"
179
- >
180
- </widgetbot>
181
- <script src="https://cdn.jsdelivr.net/npm/@widgetbot/html-embed"></script>
182
- -->
183
- </footer>
30
+ </main>
31
+ </body>
184
32
 
185
- <% elsif false %>
186
- <div class="glitch-embed-wrap" style="height: 420px; width: 100%;">
187
- <iframe
188
- src="https://glitch.com/embed/#!/embed/like-bladder?path=views/index.html&previewSize=100"
189
- title="like-bladder on Glitch"
190
- allow="geolocation; microphone; camera; midi; vr; encrypted-media"
191
- style="height: 100%; width: 100%; border: 0;">
192
- </iframe>
193
- </div>
33
+ <foot>
34
+ <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
35
+ <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
36
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
37
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
38
+ <script src="https://unpkg.com/leaflet@1.5.1/dist/leaflet.js"></script>
39
+ </foot>
40
+ </html>
194
41
 
195
- <widgetbot
196
- server="<%= ENV['DISCORD_SERVER_ID'] %>"
197
- channel="<%= ENV['DISCORD_CHANNEL_ID'] %>"
198
- width="800"
199
- height="600"
200
- shard="https://disweb.deploys.io"
201
- >
202
- </widgetbot>
203
- <script src="https://cdn.jsdelivr.net/npm/@widgetbot/html-embed"></script>
204
- <% end %>
205
- </div>
206
- </body>
207
- <% else %>
208
- <body>
209
- <h1>Get back to work</h1>
210
- </body>
211
- <% end %>
212
- </html>