hyde_admin 0.0.5 → 0.0.7
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/CHANGELOG.md +18 -0
- data/bin/admin_views/admin_layout.html.erb +34 -26
- data/bin/admin_views/files/edit.erb +2 -2
- data/bin/admin_views/partials/image_element.html.erb +1 -1
- data/bin/admin_views/partials/images_page.html.erb +1 -1
- data/bin/admin_views/posts/edit.erb +26 -24
- data/bin/admin_views/posts/listing.erb +5 -2
- data/bin/admin_views/upload_image_form.erb +45 -0
- data/bin/hyde_admin.ru +41 -9
- data/bin/hyde_assets/hyde_admin.css +8 -2
- data/bin/i18n/en.yml +14 -6
- data/bin/i18n/fr.yml +15 -7
- data/lib/hyde_admin/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8ef51602655e92300fd16efb61fc625738e962b8708146c702666fefe759d582
|
|
4
|
+
data.tar.gz: 695738c9eb64ff85aaa643fb2b06ac8219d9ed1abec97cd9fc2ca7a4b99014f8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1076b6a7a5cd25e24715a5bfc27f5cc7ddb2f2a88c3406d6ca2affeb45e391cab4e74f734ef0036a6c33ae1f2fa61e977b63e8446cd26139aacafabcacbbde7e
|
|
7
|
+
data.tar.gz: 29719bfc0e10609a22b45590031c5e4fea57d9e190ba158a186d2fa523953d0c37df8e204ff8d846296b915fb108d9a0a7d61b0bb2ae8b9991dccc2175d0c519
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
# 0.0.7
|
|
2
|
+
|
|
3
|
+
Post edit : bugfix, keep layout & format when we don't show input.
|
|
4
|
+
CodeMirror editor : form-control style
|
|
5
|
+
Locales shows possible value for config.
|
|
6
|
+
|
|
7
|
+
# 0.0.6
|
|
8
|
+
|
|
9
|
+
Form upload image + style images selector
|
|
10
|
+
Menu follows workflow
|
|
11
|
+
Configuration remove beforeSend
|
|
12
|
+
Rsync params
|
|
13
|
+
Publish only for drafts
|
|
14
|
+
|
|
15
|
+
# 0.0.5
|
|
16
|
+
|
|
17
|
+
Sometimes no tags
|
|
18
|
+
|
|
1
19
|
# 0.0.4
|
|
2
20
|
|
|
3
21
|
Correct images selector
|
|
@@ -32,12 +32,6 @@
|
|
|
32
32
|
<nav id="sidebarMenu" class="col-md-3 col-lg-2 d-md-block bg-light sidebar collapse">
|
|
33
33
|
<div class="position-sticky pt-3">
|
|
34
34
|
<ul class="nav flex-column">
|
|
35
|
-
<li class="nav-item">
|
|
36
|
-
<a class="nav-link active" aria-current="page" href="/<%= @hyde_parameters['site_index'] %>">
|
|
37
|
-
<span data-feather="home" class="fas fa-eye"></span>
|
|
38
|
-
<%= EscapeUtils.escape_html t.overview.capitalize %>
|
|
39
|
-
</a>
|
|
40
|
-
</li>
|
|
41
35
|
<li class="nav-item">
|
|
42
36
|
</li>
|
|
43
37
|
<li class="nav-item">
|
|
@@ -64,14 +58,20 @@
|
|
|
64
58
|
<%= EscapeUtils.escape_html t.posts.capitalize %>
|
|
65
59
|
</a>
|
|
66
60
|
</li>
|
|
67
|
-
<li class="nav-item"></li>
|
|
68
61
|
<li class="nav-item">
|
|
69
62
|
<a class="nav-link" href="/files/index">
|
|
70
63
|
<span data-feather="users" class="fas fa-copy"></span>
|
|
71
64
|
<%= EscapeUtils.escape_html t.files.capitalize %>
|
|
72
65
|
</a>
|
|
73
66
|
</li>
|
|
74
|
-
<li
|
|
67
|
+
<li></li>
|
|
68
|
+
<li class="nav-item mb-4 mt-4">
|
|
69
|
+
<a class="nav-link" href="/configuration">
|
|
70
|
+
<span data-feather="layers" class="fas fa-tools"></span>
|
|
71
|
+
<%= EscapeUtils.escape_html t.configuration.capitalize %>
|
|
72
|
+
</a>
|
|
73
|
+
</li>
|
|
74
|
+
<li></li>
|
|
75
75
|
<li class="nav-item">
|
|
76
76
|
<a class="nav-link active" aria-current="page" href="/rebuild" id="btn-rebuild">
|
|
77
77
|
<span data-feather="home" class="fas fa-hammer"></span>
|
|
@@ -79,16 +79,15 @@
|
|
|
79
79
|
</a>
|
|
80
80
|
</li>
|
|
81
81
|
<li class="nav-item">
|
|
82
|
-
<a class="nav-link active" aria-current="page"
|
|
83
|
-
<span data-feather="home" class="fas fa-
|
|
84
|
-
<%= EscapeUtils.escape_html t.
|
|
82
|
+
<a class="nav-link active" aria-current="page" target="_blank" href="/<%= @hyde_parameters['site_index'] %>">
|
|
83
|
+
<span data-feather="home" class="fas fa-eye"></span>
|
|
84
|
+
<%= EscapeUtils.escape_html t.overview.capitalize %>
|
|
85
85
|
</a>
|
|
86
86
|
</li>
|
|
87
|
-
<li class="nav-item"></li>
|
|
88
87
|
<li class="nav-item">
|
|
89
|
-
<a class="nav-link" href="/
|
|
90
|
-
<span data-feather="
|
|
91
|
-
<%= EscapeUtils.escape_html t.
|
|
88
|
+
<a class="nav-link active" aria-current="page" href="/deploy" id="btn-deploy">
|
|
89
|
+
<span data-feather="home" class="fas fa-cloud-upload-alt"></span>
|
|
90
|
+
<%= EscapeUtils.escape_html t.deploy.capitalize %>
|
|
92
91
|
</a>
|
|
93
92
|
</li>
|
|
94
93
|
</ul>
|
|
@@ -124,43 +123,45 @@
|
|
|
124
123
|
<div class="modal-dialog" role="document">
|
|
125
124
|
<div class="modal-content">
|
|
126
125
|
<div class="modal-header">
|
|
127
|
-
<h5 class="modal-title"
|
|
126
|
+
<h5 class="modal-title"><%= t.images.capitalize %></h5>
|
|
128
127
|
<!--
|
|
129
128
|
<button type="button" class="btn btn-default close" data-dismiss="modal" aria-label="Close">
|
|
130
129
|
<span aria-hidden="true">×</span>
|
|
131
130
|
</button>
|
|
132
131
|
-->
|
|
132
|
+
<button type="button" class="btn btn-outline-secondary btn-sm load-image">
|
|
133
|
+
<%= t.load_images.capitalize %>
|
|
134
|
+
</button>
|
|
133
135
|
</div>
|
|
134
136
|
<div class="modal-body">
|
|
135
137
|
<div>
|
|
136
138
|
<div class="image-selector-search d-block" data-page="0">
|
|
137
139
|
<form action="" class="form-inline">
|
|
138
140
|
<div class="form-group mb-2">
|
|
139
|
-
<label for="inputPassword2" class="sr-only"><%= EscapeUtils.escape_html t.sort_by_date %></label>
|
|
140
141
|
<label>
|
|
141
|
-
<input class="form-check-input" type="radio" name="sort_date" value="asc"> <%= EscapeUtils.escape_html t.
|
|
142
|
+
<input class="form-check-input" type="radio" name="sort_date" value="asc"> <%= EscapeUtils.escape_html t.newer.capitalize %>
|
|
142
143
|
</label>
|
|
143
144
|
|
|
144
145
|
<label>
|
|
145
|
-
<input class="form-check-input" type="radio" name="sort_date" value="desc"> <%= EscapeUtils.escape_html t.
|
|
146
|
+
<input class="form-check-input" type="radio" name="sort_date" value="desc" checked> <%= EscapeUtils.escape_html t.older.capitalize %>
|
|
146
147
|
</label>
|
|
147
148
|
</div>
|
|
148
149
|
<div class="form-group mb-2">
|
|
149
|
-
<label for="inputFilename" class="sr-only"><%= EscapeUtils.escape_html t.filename %></label>
|
|
150
|
-
<input type="text" class="form-control" name="filename" id="inputFilename" placeholder="
|
|
150
|
+
<label for="inputFilename" class="sr-only"><%= EscapeUtils.escape_html t.filename.capitalize %></label>
|
|
151
|
+
<input type="text" class="form-control" name="filename" id="inputFilename" placeholder="<%= EscapeUtils.escape_html t.filename_placeholder.capitalize %>">
|
|
151
152
|
</div>
|
|
152
|
-
<button type="submit" class="btn btn-primary image-selector-search-submit d-block mb-2"><%= EscapeUtils.escape_html t.search %></button>
|
|
153
|
+
<button type="submit" class="btn btn-primary image-selector-search-submit d-block mb-2"><%= EscapeUtils.escape_html t.search.capitalize %></button>
|
|
153
154
|
</form>
|
|
154
155
|
</div>
|
|
155
156
|
<div class="image-selector-content">
|
|
156
|
-
<% path = File.join(Pathname.new(
|
|
157
|
+
<% path = File.join(Pathname.new(Mid.gem_source_path), 'admin_views', 'partials', 'images_page.html.erb') %>
|
|
157
158
|
<%= ERB.new(File.read(path)).result(binding) %>
|
|
158
159
|
</div>
|
|
159
|
-
<div class="image-selector-page">
|
|
160
|
-
<a href="#" title="<%= EscapeUtils.escape_html t.previous_images %>" class="btn btn-secondary image-selector-page-prev">
|
|
160
|
+
<div class="image-selector-page text-center">
|
|
161
|
+
<a href="#" title="<%= EscapeUtils.escape_html t.previous_images %>" class="btn btn-secondary image-selector-page-prev px-4">
|
|
161
162
|
<i class="fas fa-chevron-left"></i>
|
|
162
163
|
</a>
|
|
163
|
-
<a href="#" title="<%= EscapeUtils.escape_html t.next_images %>"class="btn btn-secondary image-selector-page-next">
|
|
164
|
+
<a href="#" title="<%= EscapeUtils.escape_html t.next_images %>" class="btn btn-secondary image-selector-page-next px-4">
|
|
164
165
|
<i class="fas fa-chevron-right"></i>
|
|
165
166
|
</a>
|
|
166
167
|
</div>
|
|
@@ -213,6 +214,13 @@
|
|
|
213
214
|
search(1);
|
|
214
215
|
return false;
|
|
215
216
|
});
|
|
217
|
+
$(document).on('click', '.load-image', function(){
|
|
218
|
+
var windowObjectReference = window.open("/upload_image_form", "update_image", "dialog=yes,menubar=no,location=no,resizable=no,scrollbars=yes,status=yes,outerWidth=800,innerHeight=300,width=800,height=300");
|
|
219
|
+
return false;
|
|
220
|
+
});
|
|
221
|
+
function reload_image(){
|
|
222
|
+
$('.load-image').click();
|
|
223
|
+
}
|
|
216
224
|
</script>
|
|
217
225
|
<script src="/fslightbox/fslightbox.js"></script>
|
|
218
226
|
</body>
|
|
@@ -15,14 +15,14 @@
|
|
|
15
15
|
</label>
|
|
16
16
|
|
|
17
17
|
<% if @has_editor %>
|
|
18
|
-
<% path = File.join(Pathname.new(
|
|
18
|
+
<% path = File.join(Pathname.new(Mid.gem_source_path), 'admin_views', 'editor_html.erb') %>
|
|
19
19
|
<%= ERB.new(File.read(path)).result(binding) %>
|
|
20
20
|
<% end %>
|
|
21
21
|
|
|
22
22
|
<textarea class="form-control text-editor" id="i-content" rows="3" name="content" style="font-family: <%= (['.html', '.xml', '.yml', '.js', '.md'].include?(File.extname(@file)) ? 'monospace' : 'inherit') %>"><%= @content %></textarea>
|
|
23
23
|
|
|
24
24
|
<script type="text/javascript" charset="utf-8">
|
|
25
|
-
<% path = File.join(Pathname.new(
|
|
25
|
+
<% path = File.join(Pathname.new(Mid.gem_source_path), 'admin_views', 'editor_js.erb') %>
|
|
26
26
|
<%= ERB.new(File.read(path)).result(binding) %>
|
|
27
27
|
</script>
|
|
28
28
|
</div>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<% path = File.join(Pathname.new(
|
|
1
|
+
<% path = File.join(Pathname.new(Mid.gem_source_path), 'admin_views', 'partials', 'image_element.html.erb') %>
|
|
2
2
|
<% myerb = ERB.new(File.read(path), eoutvar: "@bidule") %>
|
|
3
3
|
<% # Why %= don't work !? Need to do a loop concat... %>
|
|
4
4
|
<% $stderr.puts @images %>
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
<div id="i-path-help" class="form-text"><%= EscapeUtils.escape_html t.help_path %></div>
|
|
19
19
|
</div>
|
|
20
20
|
<% end %>
|
|
21
|
+
|
|
21
22
|
<div class="mb-3">
|
|
22
23
|
<label for="i-title" class="form-label"><%= EscapeUtils.escape_html t.title.capitalize %></label>
|
|
23
24
|
<input type="text" value="<%= @headers.delete('title') %>" class="form-control" name="title" id="i-title">
|
|
@@ -33,49 +34,50 @@
|
|
|
33
34
|
</div>
|
|
34
35
|
<div class="mb-3">
|
|
35
36
|
<label for="i-tags" class="form-label"><%= EscapeUtils.escape_html t.tags.capitalize %></label>
|
|
36
|
-
<input type="text" value="<%=
|
|
37
|
-
<div id="i-tags-help" class="form-text"><%= EscapeUtils.escape_html t.help_tags %></div>
|
|
38
|
-
</div>
|
|
39
|
-
<div class="mb-3 form-check">
|
|
40
|
-
<input type="checkbox" class="form-check-input" name="publish" value="publish" id="i-publish">
|
|
41
|
-
<label class="form-check-label" for="i-publish"><%= EscapeUtils.escape_html t.publish.capitalize %></label>
|
|
37
|
+
<input type="text" value="<%= Mid.extract_tags(@headers.delete('tags')).join(',') %>" class="form-control" name="tags" id="i-tags">
|
|
38
|
+
<div id="i-tags-help" class="form-text"><%= EscapeUtils.escape_html t.help_tags.capitalize %></div>
|
|
42
39
|
</div>
|
|
43
40
|
|
|
41
|
+
<% if @type_file == 'drafts' %>
|
|
42
|
+
<div class="mb-3 form-check">
|
|
43
|
+
<input type="checkbox" class="form-check-input" name="publish" value="publish" id="i-publish">
|
|
44
|
+
<label class="form-check-label" for="i-publish"><%= EscapeUtils.escape_html t.publish.capitalize %></label>
|
|
45
|
+
</div>
|
|
46
|
+
<% end %>
|
|
47
|
+
|
|
48
|
+
<% selected_layout = @headers.delete('layout') %>
|
|
49
|
+
<% selected_layout = @hyde_parameters['default_layout'] if selected_layout.nil? || selected_layout.empty? %>
|
|
44
50
|
<% if @hyde_parameters['display_layout'].to_s == 'true' %>
|
|
45
51
|
<div class="mb-3">
|
|
46
52
|
<label for="i-layout" class="form-label"><%= EscapeUtils.escape_html t.layout.capitalize %></label>
|
|
47
53
|
<select class="form-select" aria-label="Choice layout" name="layout">
|
|
48
54
|
<% Dir.glob(File.join(Dir.pwd, '_layouts', '*')).each do |f| %>
|
|
49
|
-
<%
|
|
50
|
-
<option <%= (
|
|
55
|
+
<% layout_loop = File.basename(f, File.extname(f)) %>
|
|
56
|
+
<option <%= (layout_loop == selected_layout ? 'selected' : '') %> value="<%= layout_loop %>"><%= layout_loop %></option>
|
|
51
57
|
<% end %>
|
|
52
58
|
</select>
|
|
53
59
|
</div>
|
|
54
|
-
<% @headers.delete('layout') %>
|
|
55
60
|
<% else %>
|
|
56
|
-
<input type="hidden" name="layout" value="<%=
|
|
61
|
+
<input type="hidden" name="layout" value="<%= selected_layout %>">
|
|
57
62
|
<% end %>
|
|
58
63
|
|
|
64
|
+
<% selected_format = File.extname(@file) %>
|
|
65
|
+
<% selected_format = ".#{@hyde_parameters['default_format']}" if selected_format.empty? %>
|
|
59
66
|
<% if @hyde_parameters['display_format'].to_s == 'true' %>
|
|
60
67
|
<div class="mb-3">
|
|
61
68
|
<label for="i-format" class="form-label"><%= EscapeUtils.escape_html t.format.capitalize %></label>
|
|
62
69
|
<select class="form-select" id="select-format" aria-label="Choice format" name="format">
|
|
63
|
-
<% format = File.extname(@file) %>
|
|
64
|
-
<% format = ".#{@hyde_parameters['default_format']}" if format.empty? %>
|
|
65
70
|
<% { 'html' => 'html', 'markdown' => 'md' }.each do |k, v| %>
|
|
66
|
-
<option <%= (
|
|
71
|
+
<option <%= (selected_format == ".#{v}" ? 'selected' : '') %> value="<%= v %>"><%= k %></option>
|
|
67
72
|
<% end %>
|
|
68
73
|
</select>
|
|
69
74
|
</div>
|
|
70
|
-
<script type="text/javascript" charset="utf-8">
|
|
71
|
-
window.mode_markdown = '<%= format %>' === '.md';
|
|
72
|
-
</script>
|
|
73
75
|
<% else %>
|
|
74
|
-
<input type="hidden" name="format" value="<%=
|
|
75
|
-
<script type="text/javascript" charset="utf-8">
|
|
76
|
-
window.mode_markdown = '<%= @hyde_parameters['default_format'] %>' === 'md';
|
|
77
|
-
</script>
|
|
76
|
+
<input type="hidden" name="format" value="<%= selected_format.gsub('.','') %>">
|
|
78
77
|
<% end %>
|
|
78
|
+
<script type="text/javascript" charset="utf-8">
|
|
79
|
+
window.mode_markdown = '<%= selected_format %>' === '.md';
|
|
80
|
+
</script>
|
|
79
81
|
|
|
80
82
|
<% @headers.each do |k,v| %>
|
|
81
83
|
<div class="mb-3">
|
|
@@ -89,8 +91,8 @@
|
|
|
89
91
|
|
|
90
92
|
<div class="mb-3 template-header" style="display: none">
|
|
91
93
|
<div class="row">
|
|
92
|
-
<div class="col-sm-4"><input type="text" class="col-sm-6 form-control header-name" name="" placeholder="
|
|
93
|
-
<div class="col-sm-8"><input type="text" class="col-sm-6 form-control header-value" name="" placeholder="
|
|
94
|
+
<div class="col-sm-4"><input type="text" class="col-sm-6 form-control header-name" name="" placeholder="<%= EscapeUtils.escape_html t.header_name.capitalize %>"></div>
|
|
95
|
+
<div class="col-sm-8"><input type="text" class="col-sm-6 form-control header-value" name="" placeholder="<%= EscapeUtils.escape_html t.header_value.capitalize %>"></div>
|
|
94
96
|
</div>
|
|
95
97
|
</div>
|
|
96
98
|
|
|
@@ -111,7 +113,7 @@
|
|
|
111
113
|
<div class="mb-3">
|
|
112
114
|
<label for="i-content" class="form-label"><%= EscapeUtils.escape_html t.content.capitalize %> <a href="https://jekyllrb.com/docs/liquid/" class="text-secondary" target="_blank"><i class="fas fa-question-circle"></i></a></label>
|
|
113
115
|
|
|
114
|
-
<% path = File.join(Pathname.new(
|
|
116
|
+
<% path = File.join(Pathname.new(Mid.gem_source_path), 'admin_views', 'editor_html.erb') %>
|
|
115
117
|
<%= ERB.new(File.read(path)).result(binding) %>
|
|
116
118
|
|
|
117
119
|
<textarea class="form-control text-editor" id="i-content" rows="3" name="content"><%= @content %></textarea>
|
|
@@ -150,7 +152,7 @@
|
|
|
150
152
|
return false;
|
|
151
153
|
});
|
|
152
154
|
|
|
153
|
-
<% path = File.join(Pathname.new(
|
|
155
|
+
<% path = File.join(Pathname.new(Mid.gem_source_path), 'admin_views', 'editor_js.erb') %>
|
|
154
156
|
<%= ERB.new(File.read(path)).result(binding) %>
|
|
155
157
|
|
|
156
158
|
</script>
|
|
@@ -14,12 +14,15 @@
|
|
|
14
14
|
</th>
|
|
15
15
|
</tr>
|
|
16
16
|
<% @files.each do |f| %>
|
|
17
|
+
<% edit_path = "/#{@type_file}?file=#{f}" %>
|
|
17
18
|
<tr>
|
|
18
19
|
<td>
|
|
19
|
-
<%=
|
|
20
|
+
<a href="<%= edit_path %>" class="link-dark">
|
|
21
|
+
<%= f.gsub(File.join(Dir.pwd, ''),'') %>
|
|
22
|
+
</a>
|
|
20
23
|
</td>
|
|
21
24
|
<td>
|
|
22
|
-
<a href="
|
|
25
|
+
<a href="<%= edit_path %>" class="btn btn-default"><i class="fa fa-edit" title="<%= EscapeUtils.escape_html t.edit.capitalize %>"></i></a>
|
|
23
26
|
</td>
|
|
24
27
|
<td>
|
|
25
28
|
<form method="post" action="/<%= @type_file %>/delete" class="inline form-confirm" data-confirm="<%= EscapeUtils.escape_html t.are_you_sure %>">
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="fr">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>Hyde for Jekyll</title>
|
|
6
|
+
|
|
7
|
+
<meta name="description" content="Hyde for Jekyll">
|
|
8
|
+
<meta name="author" content="Sylvain Claudel (https://blog.rivsc.ovh)">
|
|
9
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
10
|
+
|
|
11
|
+
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous">
|
|
12
|
+
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-/bQdsTh/da6pkI1MST/rWKFNjaCP5gBSY4sEBT38Q/9RBh9AH40zEOg7Hlq2THRZ" crossorigin="anonymous"></script>
|
|
13
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" integrity="sha512-1ycn6IcaQQ40/MKBW2W4Rhis/DbILU74C1vSrLJxCq57o941Ym01SwNsOMqvEBFlcgUa6xLiPY/NS5R+E6ztJQ==" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
|
14
|
+
|
|
15
|
+
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
|
|
16
|
+
|
|
17
|
+
<script type="text/javascript" charset="utf-8">
|
|
18
|
+
$(function(){
|
|
19
|
+
$(document).on('click', '.btn-return-to-editor', function(){
|
|
20
|
+
//don't work
|
|
21
|
+
//window.opener.reload_image();
|
|
22
|
+
window.close();
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
</script>
|
|
26
|
+
</head>
|
|
27
|
+
<body style="width:800px;" class="p-4">
|
|
28
|
+
<h1><%= t.upload_image_form.capitalize %></h1>
|
|
29
|
+
|
|
30
|
+
<% if @filenames %>
|
|
31
|
+
<%= t.pictures_has_been_uploaded.capitalize %> : <%= @filenames.join(', ') %>
|
|
32
|
+
<% end %>
|
|
33
|
+
|
|
34
|
+
<form enctype="multipart/form-data" method="post" action="/upload_image" class="row g-3">
|
|
35
|
+
<div class="col-10">
|
|
36
|
+
<input type="file" name="files[]" multiple class="form-control">
|
|
37
|
+
</div>
|
|
38
|
+
<div class="col-2">
|
|
39
|
+
<button class="btn btn-primary"><%= t.upload.capitalize %></button>
|
|
40
|
+
</div>
|
|
41
|
+
</form>
|
|
42
|
+
|
|
43
|
+
<button class="btn btn-secondary btn-return-to-editor fixed-bottom mb-4 ms-4"><%= t.quit.capitalize %></button>
|
|
44
|
+
</body>
|
|
45
|
+
</html>
|
data/bin/hyde_admin.ru
CHANGED
|
@@ -9,8 +9,11 @@ require 'escape_utils'
|
|
|
9
9
|
require_relative '../lib/hyde_admin/version'
|
|
10
10
|
|
|
11
11
|
# TODO détecter format nouveau post (pour codemirror)
|
|
12
|
+
# Serve
|
|
13
|
+
|
|
14
|
+
class Mid < Roda
|
|
15
|
+
plugin :middleware
|
|
12
16
|
|
|
13
|
-
class App < Roda
|
|
14
17
|
YML_FILE_NAME = "hyde_admin.yml"
|
|
15
18
|
|
|
16
19
|
plugin :render,
|
|
@@ -56,7 +59,7 @@ class App < Roda
|
|
|
56
59
|
end
|
|
57
60
|
|
|
58
61
|
def self.extract_header(str)
|
|
59
|
-
headers =
|
|
62
|
+
headers = Mid.extract_header_str(str).to_s.split("\n")
|
|
60
63
|
headers = headers.select{ |header| !header.empty? }.map{ |header| header.scan(/([a-zA-Z0-9]*): (.*)/).flatten }.select{ |header| !header.empty? }
|
|
61
64
|
hsh_headers = {}
|
|
62
65
|
if !headers.flatten.empty?
|
|
@@ -114,12 +117,13 @@ class App < Roda
|
|
|
114
117
|
end
|
|
115
118
|
|
|
116
119
|
r.on "deploy" do
|
|
117
|
-
`#{@hyde_parameters['rsync_fullpath']} #{Dir.pwd}/_site/ #{@hyde_parameters['deploy_dest_user']}@#{@hyde_parameters['deploy_dest_address']}:#{@hyde_parameters['deploy_dest_path']}`
|
|
120
|
+
`#{@hyde_parameters['rsync_fullpath']} -avzr #{Dir.pwd}/_site/ #{@hyde_parameters['deploy_dest_user']}@#{@hyde_parameters['deploy_dest_address']}:#{@hyde_parameters['deploy_dest_path']}`
|
|
118
121
|
r.redirect "/dashboard"
|
|
119
122
|
end
|
|
120
123
|
|
|
121
124
|
r.post "configuration" do
|
|
122
125
|
r.params.each_pair do |k,v|
|
|
126
|
+
next if k.to_s == "beforeSend"
|
|
123
127
|
@hyde_parameters[k] = v
|
|
124
128
|
end
|
|
125
129
|
File.open(File.join(Dir.pwd, YML_FILE_NAME),"w+") do |f|
|
|
@@ -136,6 +140,26 @@ class App < Roda
|
|
|
136
140
|
view("dashboard")
|
|
137
141
|
end
|
|
138
142
|
|
|
143
|
+
r.on "upload_image_form" do
|
|
144
|
+
render("upload_image_form")
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
r.post "upload_image" do
|
|
148
|
+
files = [r.params['files']].flatten # 1 or more files
|
|
149
|
+
@filenames = []
|
|
150
|
+
files.each do |file|
|
|
151
|
+
filename = file[:filename]
|
|
152
|
+
while File.exist?(File.join(@hyde_parameters['images_path'], filename))
|
|
153
|
+
filename = "#{File.basename(filename, File.extname(filename))}_#{File.extname(filename)}"
|
|
154
|
+
end
|
|
155
|
+
@filenames << filename
|
|
156
|
+
File.open(File.join(@hyde_parameters['images_path'], filename), 'wb') do |f|
|
|
157
|
+
f.write(file[:tempfile].read)
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
render("upload_image_form")
|
|
161
|
+
end
|
|
162
|
+
|
|
139
163
|
r.on "files" do
|
|
140
164
|
@dir_path = r.params['dir_path'] || Dir.pwd
|
|
141
165
|
|
|
@@ -150,6 +174,7 @@ class App < Roda
|
|
|
150
174
|
r.post "create" do
|
|
151
175
|
files = [r.params['files']].flatten # 1 or more files
|
|
152
176
|
files.each do |file|
|
|
177
|
+
# TODO rename file if exist
|
|
153
178
|
File.open(File.join(@dir_path, file[:filename]), 'wb') do |f|
|
|
154
179
|
f.write(file[:tempfile].read)
|
|
155
180
|
end
|
|
@@ -176,8 +201,8 @@ class App < Roda
|
|
|
176
201
|
r.get "edit" do
|
|
177
202
|
@file = r.params['file']
|
|
178
203
|
@content = File.read(@file)
|
|
179
|
-
@header =
|
|
180
|
-
@content =
|
|
204
|
+
@header = Mid.extract_header_str(@content)
|
|
205
|
+
@content = Mid.remove_header(@content)
|
|
181
206
|
@has_header = (!@header.nil? && !@header.empty?)
|
|
182
207
|
@has_editor = ['.html','.md'].include?(File.extname(@file))
|
|
183
208
|
view("files/edit")
|
|
@@ -219,7 +244,7 @@ class App < Roda
|
|
|
219
244
|
path = r.params['path']
|
|
220
245
|
title = r.params['title']
|
|
221
246
|
I18n.config.available_locales = :en
|
|
222
|
-
new_path = path.gsub(REGEXP_EXTRACT_DATE_TITLE_FROM_FILENAME, "\\1#{
|
|
247
|
+
new_path = path.gsub(REGEXP_EXTRACT_DATE_TITLE_FROM_FILENAME, "\\1#{Mid.transliterate_title_for_url(title)}\\3")
|
|
223
248
|
response.write(new_path)
|
|
224
249
|
end
|
|
225
250
|
r.post "update_date_today" do
|
|
@@ -242,7 +267,7 @@ class App < Roda
|
|
|
242
267
|
all_images = all_images.reverse if sort_date == 'asc'
|
|
243
268
|
@images = all_images[start_elts, nb_elements_per_page]
|
|
244
269
|
|
|
245
|
-
path = File.join(Pathname.new(
|
|
270
|
+
path = File.join(Pathname.new(Mid.gem_source_path), 'admin_views', 'partials', 'images_page.html.erb')
|
|
246
271
|
data = ERB.new(File.read(path)).result(binding)
|
|
247
272
|
|
|
248
273
|
response.write(data)
|
|
@@ -286,7 +311,7 @@ class App < Roda
|
|
|
286
311
|
@file = r.params['file']
|
|
287
312
|
|
|
288
313
|
content_file = File.read(@file)
|
|
289
|
-
@headers =
|
|
314
|
+
@headers = Mid.extract_header(content_file)
|
|
290
315
|
@content = File.read(@file).gsub(/---(.*?)---/m, "")
|
|
291
316
|
|
|
292
317
|
# for page
|
|
@@ -316,7 +341,7 @@ class App < Roda
|
|
|
316
341
|
#$stderr.puts "---->"
|
|
317
342
|
|
|
318
343
|
if @new_file.nil? || @new_file.empty?
|
|
319
|
-
filename =
|
|
344
|
+
filename = Mid.urlize(@date, @title, (@type_file != 'pages'))
|
|
320
345
|
@new_file = File.join(Dir.pwd,"_#{@type_file}", "#{filename}.#{@format}")
|
|
321
346
|
end
|
|
322
347
|
|
|
@@ -358,4 +383,11 @@ class App < Roda
|
|
|
358
383
|
end
|
|
359
384
|
end
|
|
360
385
|
|
|
386
|
+
# https://roda.jeremyevans.net/rdoc/classes/Roda/RodaPlugins/Middleware.html
|
|
387
|
+
class App < Roda
|
|
388
|
+
use Mid
|
|
389
|
+
use Rack::Static, :urls => [''], root: Dir.pwd # allow to match all files in Dir.pwd
|
|
390
|
+
end
|
|
391
|
+
|
|
361
392
|
run App.freeze.app
|
|
393
|
+
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
height: 100%;
|
|
13
13
|
object-fit: contain;
|
|
14
14
|
overflow: hidden;
|
|
15
|
+
border:2px solid white;
|
|
15
16
|
}
|
|
16
17
|
.image-selector-content .image-element img:hover{
|
|
17
18
|
border:2px solid gray;
|
|
@@ -23,9 +24,14 @@
|
|
|
23
24
|
|
|
24
25
|
.image-element span{
|
|
25
26
|
position: absolute;
|
|
26
|
-
bottom:
|
|
27
|
+
bottom:0px;
|
|
27
28
|
left:5px;
|
|
28
29
|
z-index: 10;
|
|
29
30
|
font-weight: bold;
|
|
30
|
-
|
|
31
|
+
margin-bottom: -20px;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.CodeMirror{
|
|
35
|
+
border: 1px solid #ced4da;
|
|
36
|
+
border-radius: 4px;
|
|
31
37
|
}
|
data/bin/i18n/en.yml
CHANGED
|
@@ -39,7 +39,7 @@ help_default_layout: default layout for jekyll posts/pages
|
|
|
39
39
|
deploy_dest_user: deploy remote user
|
|
40
40
|
help_deploy_dest_user: Ssh user for rsync
|
|
41
41
|
deploy_dest_address: deploy remote domain
|
|
42
|
-
help_deploy_dest_address: remote domain for ssh deployment
|
|
42
|
+
help_deploy_dest_address: remote domain for ssh deployment (example.com)
|
|
43
43
|
deploy_dest_path: deploy remote path
|
|
44
44
|
help_deploy_dest_path: remote path on disk for ssh deployment
|
|
45
45
|
rsync_fullpath: rsync path
|
|
@@ -47,24 +47,24 @@ help_rsync_fullpath: if rsync is not in PATH, othervise just let 'rsync'
|
|
|
47
47
|
site_index: index file name of site
|
|
48
48
|
help_site_index: link to open when we click on overview
|
|
49
49
|
hyde_admin_language: hyde admin language
|
|
50
|
-
help_hyde_admin_language: To change hyde admin language interface
|
|
50
|
+
help_hyde_admin_language: To change hyde admin language interface (fr = french, en = english)
|
|
51
51
|
set_date_today: set date at today
|
|
52
52
|
change_date_path: update date in path
|
|
53
53
|
change_title_path: update title in path
|
|
54
54
|
directory_input_placeholder: directory name to create
|
|
55
55
|
file_input_placeholder: file name to create
|
|
56
56
|
hyde_admin_auth: enable BasicAuth
|
|
57
|
-
help_hyde_admin_auth: enable BasicAuth
|
|
57
|
+
help_hyde_admin_auth: enable BasicAuth (true/false)
|
|
58
58
|
hyde_admin_user: BasicAuth user
|
|
59
59
|
help_hyde_admin_user: BasicAuth user
|
|
60
60
|
hyde_admin_password: BasicAuth password
|
|
61
61
|
help_hyde_admin_password: BasicAuth password
|
|
62
62
|
default_format: default format
|
|
63
|
-
help_default_format: default format
|
|
63
|
+
help_default_format: default format (html = html, md = markdown)
|
|
64
64
|
display_layout: display the layout input on edit form
|
|
65
|
-
help_display_layout: display the layout input on edit form
|
|
65
|
+
help_display_layout: display the layout input on edit form (true/false)
|
|
66
66
|
display_format: display the format input on edit form
|
|
67
|
-
help_display_format: display the format input on edit form
|
|
67
|
+
help_display_format: display the format input on edit form (true/false)
|
|
68
68
|
images_path: pictures path
|
|
69
69
|
help_images_path: relative local picture path
|
|
70
70
|
editor_undo: Undo
|
|
@@ -93,3 +93,11 @@ previous_images: previous images
|
|
|
93
93
|
next_images: next images
|
|
94
94
|
search: search
|
|
95
95
|
filename: filename
|
|
96
|
+
filename_placeholder: filename...
|
|
97
|
+
upload_image_form: upload image form
|
|
98
|
+
pictures_has_been_uploaded: pictures has been uploaded
|
|
99
|
+
quit: quit
|
|
100
|
+
header_name: header name
|
|
101
|
+
header_value: header value
|
|
102
|
+
images: images
|
|
103
|
+
load_images: load images
|
data/bin/i18n/fr.yml
CHANGED
|
@@ -39,7 +39,7 @@ help_default_layout: présentation par défaut pour les posts et pages
|
|
|
39
39
|
deploy_dest_user: Utilisateur pour déploiement
|
|
40
40
|
help_deploy_dest_user: Utilisateur pour déploiement par ssh
|
|
41
41
|
deploy_dest_address: Adresse pour déploiement
|
|
42
|
-
help_deploy_dest_address: Domaine ou adresse IP pour déploiement à travers ssh
|
|
42
|
+
help_deploy_dest_address: Domaine ou adresse IP pour déploiement à travers ssh (example.com)
|
|
43
43
|
deploy_dest_path: chemin distant pour déploiement
|
|
44
44
|
help_deploy_dest_path: chemin distant pour déploiement du site
|
|
45
45
|
rsync_fullpath: chemin rsync
|
|
@@ -47,24 +47,24 @@ help_rsync_fullpath: si rsync n'est pas dans le PATH, sinon laissez 'rsync'
|
|
|
47
47
|
site_index: nom du fichier index pour le site
|
|
48
48
|
help_site_index: Lien pour le lien aperçu, pensez à l'extention si nécessaire
|
|
49
49
|
hyde_admin_language: hyde admin langue
|
|
50
|
-
help_hyde_admin_language: Pour changer la langue d'interface de hyde admin
|
|
50
|
+
help_hyde_admin_language: Pour changer la langue d'interface de hyde admin (fr = français, en = anglais)
|
|
51
51
|
set_date_today: mets la date du jour
|
|
52
52
|
change_date_path: mets à jour la date dans le chemin de fichier
|
|
53
53
|
change_title_path: mets à jour le titre dans le chemin de fichier
|
|
54
54
|
directory_input_placeholder: nom du dossier à créer
|
|
55
55
|
file_input_placeholder: nom du fichier à créer
|
|
56
56
|
hyde_admin_auth: enable BasicAuth
|
|
57
|
-
help_hyde_admin_auth: enable BasicAuth
|
|
57
|
+
help_hyde_admin_auth: enable BasicAuth (true/false)
|
|
58
58
|
hyde_admin_user: BasicAuth user
|
|
59
59
|
help_hyde_admin_user: BasicAuth user
|
|
60
60
|
hyde_admin_password: BasicAuth password
|
|
61
61
|
help_hyde_admin_password: BasicAuth password
|
|
62
62
|
default_format: format par défaut
|
|
63
|
-
help_default_format: format par défaut pour les posts
|
|
63
|
+
help_default_format: format par défaut pour les posts (html = html, md = markdown)
|
|
64
64
|
display_layout: affiche le choix du layout sur le formulaire d'édition
|
|
65
|
-
help_display_layout: affiche le choix du layout sur le formulaire d'édition
|
|
65
|
+
help_display_layout: affiche le choix du layout sur le formulaire d'édition (true/false)
|
|
66
66
|
display_format: affiche le choix du format sur le formulaire d'édition
|
|
67
|
-
help_display_format: affiche le choix du format sur le formulaire d'édition
|
|
67
|
+
help_display_format: affiche le choix du format sur le formulaire d'édition (true/false)
|
|
68
68
|
images_path: chemin des images
|
|
69
69
|
help_images_path: chemin local relatif des images
|
|
70
70
|
editor_undo: Annuler
|
|
@@ -92,4 +92,12 @@ newer: récente d'abord
|
|
|
92
92
|
previous_images: images précédentes " lol
|
|
93
93
|
next_images: images suivantes
|
|
94
94
|
search: recherche
|
|
95
|
-
filename: nom de fichier
|
|
95
|
+
filename: nom de fichier
|
|
96
|
+
filename_placeholder: nom de fichier...
|
|
97
|
+
upload_image_form: formulaire d'upload d'image
|
|
98
|
+
pictures_has_been_uploaded: les images ont été uploadées
|
|
99
|
+
quit: quitter
|
|
100
|
+
header_name: nom d'entête
|
|
101
|
+
header_value: valeur d'entête
|
|
102
|
+
images: images
|
|
103
|
+
load_images: charger images
|
data/lib/hyde_admin/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hyde_admin
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sylvain Claudel
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-10-
|
|
11
|
+
date: 2021-10-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: roda
|
|
@@ -107,6 +107,7 @@ files:
|
|
|
107
107
|
- bin/admin_views/partials/images_page.html.erb
|
|
108
108
|
- bin/admin_views/posts/edit.erb
|
|
109
109
|
- bin/admin_views/posts/listing.erb
|
|
110
|
+
- bin/admin_views/upload_image_form.erb
|
|
110
111
|
- bin/fslightbox/fslightbox.js
|
|
111
112
|
- bin/hyde_admin
|
|
112
113
|
- bin/hyde_admin.ru
|