hyde_admin 0.0.4 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.idea/hyde_admin.iml +4 -0
- data/CHANGELOG.md +27 -0
- data/README.md +11 -1
- data/bin/admin_views/admin_layout.html.erb +39 -29
- data/bin/admin_views/configuration.erb +2 -2
- 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 +49 -0
- data/bin/hyde_admin.ru +66 -10
- data/bin/hyde_admin.yml +7 -4
- data/bin/hyde_admin_config +16 -0
- data/bin/hyde_assets/hyde_admin.css +8 -2
- data/bin/i18n/en.yml +20 -6
- data/bin/i18n/fr.yml +21 -7
- data/hyde_admin.gemspec +2 -1
- data/lib/hyde_admin/version.rb +1 -1
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b6c1b4aa57c65ae8ea48b7317b4d8c53b6dacc5162f9cf413b086213e8d16b9
|
4
|
+
data.tar.gz: e92ce331dd7fcb499084f1aff3dda0db7ac2093bb864c7a024068aa9ab29d0b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 76426f6867cebd4884ab7cd5e589e3a72c0f14e7b8b5df64d16c3d98c08890c38d708cb4e55a840070604e957afcd6285818b82a7d0961375f17cf3ef5d000db
|
7
|
+
data.tar.gz: f94cb4bd9aa9d8337c5ebf7d86dc1e77ff257192bd724c84bb0fb2fd7190b9ffb2741e529d0c9ee4efe0d541f21630cba4685cefe4283df0d588252ee33854de
|
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
*.gem
|
data/.idea/hyde_admin.iml
CHANGED
@@ -12,7 +12,11 @@
|
|
12
12
|
<orderEntry type="inheritedJdk" />
|
13
13
|
<orderEntry type="sourceFolder" forTests="false" />
|
14
14
|
<orderEntry type="library" scope="PROVIDED" name="concurrent-ruby (v1.1.9, RVM: ruby-2.7.0) [gem]" level="application" />
|
15
|
+
<orderEntry type="library" scope="PROVIDED" name="ffi (v1.15.4, RVM: ruby-2.7.0) [gem]" level="application" />
|
15
16
|
<orderEntry type="library" scope="PROVIDED" name="i18n (v1.8.10, RVM: ruby-2.7.0) [gem]" level="application" />
|
17
|
+
<orderEntry type="library" scope="PROVIDED" name="image_processing (v1.12.1, RVM: ruby-2.7.0) [gem]" level="application" />
|
18
|
+
<orderEntry type="library" scope="PROVIDED" name="mini_magick (v4.11.0, RVM: ruby-2.7.0) [gem]" level="application" />
|
19
|
+
<orderEntry type="library" scope="PROVIDED" name="ruby-vips (v2.0.17, RVM: ruby-2.7.0) [gem]" level="application" />
|
16
20
|
</component>
|
17
21
|
<component name="RModuleSettingsStorage">
|
18
22
|
<LOAD_PATH number="0" />
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,30 @@
|
|
1
|
+
# 0.0.9
|
2
|
+
|
3
|
+
Hide deploy button if 'deploy_dest_address' is empty.
|
4
|
+
hyde_admin_config allow you to install the latest default config file.
|
5
|
+
|
6
|
+
# 0.0.8
|
7
|
+
|
8
|
+
Resize image at upload with ImageProcessing (MiniMagick)
|
9
|
+
|
10
|
+
# 0.0.7
|
11
|
+
|
12
|
+
Post edit : bugfix, keep layout & format when we don't show input.
|
13
|
+
CodeMirror editor : form-control style
|
14
|
+
Locales shows possible value for config.
|
15
|
+
|
16
|
+
# 0.0.6
|
17
|
+
|
18
|
+
Form upload image + style images selector
|
19
|
+
Menu follows workflow
|
20
|
+
Configuration remove beforeSend
|
21
|
+
Rsync params
|
22
|
+
Publish only for drafts
|
23
|
+
|
24
|
+
# 0.0.5
|
25
|
+
|
26
|
+
Sometimes no tags
|
27
|
+
|
1
28
|
# 0.0.4
|
2
29
|
|
3
30
|
Correct images selector
|
data/README.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## Hyde admin
|
2
|
+
|
3
|
+
Hyde_admin is a administration frontend for Jekyll (static site generator in Ruby).
|
4
|
+
|
1
5
|
## Getting Started with Hyde Admin
|
2
6
|
|
3
7
|
Add
|
@@ -20,4 +24,10 @@ You can visit localhost:9292 !
|
|
20
24
|
hyde_admin.yml is automatically generated in your jekyll directory.
|
21
25
|
(you can change settings with hyde_admin ou directly)
|
22
26
|
|
23
|
-
Hyde_admin allow ssh deployment.
|
27
|
+
Hyde_admin allow ssh deployment.
|
28
|
+
|
29
|
+
## New version of hyde_admin ?
|
30
|
+
|
31
|
+
Just install the lastest config file (your config file will be renamed, and latest config file will be installed), run :
|
32
|
+
|
33
|
+
`hyde_admin_config`
|
@@ -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,18 +79,19 @@
|
|
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.
|
85
|
-
</a>
|
86
|
-
</li>
|
87
|
-
<li class="nav-item"></li>
|
88
|
-
<li class="nav-item">
|
89
|
-
<a class="nav-link" href="/configuration">
|
90
|
-
<span data-feather="layers" class="fas fa-tools"></span>
|
91
|
-
<%= EscapeUtils.escape_html t.configuration.capitalize %>
|
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 %>
|
92
85
|
</a>
|
93
86
|
</li>
|
87
|
+
<% if !@hyde_parameters['deploy_dest_address'].blank? %>
|
88
|
+
<li class="nav-item">
|
89
|
+
<a class="nav-link active" aria-current="page" href="/deploy" id="btn-deploy">
|
90
|
+
<span data-feather="home" class="fas fa-cloud-upload-alt"></span>
|
91
|
+
<%= EscapeUtils.escape_html t.deploy.capitalize %>
|
92
|
+
</a>
|
93
|
+
</li>
|
94
|
+
<% end %>
|
94
95
|
</ul>
|
95
96
|
<p class="text-center text-muted"><br><br><em>Hyde Admin V.<%= HydeAdmin::VERSION %></em> <a href="https://github.com/rivsc/hyde_admin" class="link-secondary"><i class="fab fa-github"></i></a></p>
|
96
97
|
</div>
|
@@ -124,43 +125,45 @@
|
|
124
125
|
<div class="modal-dialog" role="document">
|
125
126
|
<div class="modal-content">
|
126
127
|
<div class="modal-header">
|
127
|
-
<h5 class="modal-title"
|
128
|
+
<h5 class="modal-title"><%= t.images.capitalize %></h5>
|
128
129
|
<!--
|
129
130
|
<button type="button" class="btn btn-default close" data-dismiss="modal" aria-label="Close">
|
130
131
|
<span aria-hidden="true">×</span>
|
131
132
|
</button>
|
132
133
|
-->
|
134
|
+
<button type="button" class="btn btn-outline-secondary btn-sm load-image">
|
135
|
+
<%= t.load_images.capitalize %>
|
136
|
+
</button>
|
133
137
|
</div>
|
134
138
|
<div class="modal-body">
|
135
139
|
<div>
|
136
140
|
<div class="image-selector-search d-block" data-page="0">
|
137
141
|
<form action="" class="form-inline">
|
138
142
|
<div class="form-group mb-2">
|
139
|
-
<label for="inputPassword2" class="sr-only"><%= EscapeUtils.escape_html t.sort_by_date %></label>
|
140
143
|
<label>
|
141
|
-
<input class="form-check-input" type="radio" name="sort_date" value="asc"> <%= EscapeUtils.escape_html t.
|
144
|
+
<input class="form-check-input" type="radio" name="sort_date" value="asc"> <%= EscapeUtils.escape_html t.newer.capitalize %>
|
142
145
|
</label>
|
143
146
|
|
144
147
|
<label>
|
145
|
-
<input class="form-check-input" type="radio" name="sort_date" value="desc"> <%= EscapeUtils.escape_html t.
|
148
|
+
<input class="form-check-input" type="radio" name="sort_date" value="desc" checked> <%= EscapeUtils.escape_html t.older.capitalize %>
|
146
149
|
</label>
|
147
150
|
</div>
|
148
151
|
<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="
|
152
|
+
<label for="inputFilename" class="sr-only"><%= EscapeUtils.escape_html t.filename.capitalize %></label>
|
153
|
+
<input type="text" class="form-control" name="filename" id="inputFilename" placeholder="<%= EscapeUtils.escape_html t.filename_placeholder.capitalize %>">
|
151
154
|
</div>
|
152
|
-
<button type="submit" class="btn btn-primary image-selector-search-submit d-block mb-2"><%= EscapeUtils.escape_html t.search %></button>
|
155
|
+
<button type="submit" class="btn btn-primary image-selector-search-submit d-block mb-2"><%= EscapeUtils.escape_html t.search.capitalize %></button>
|
153
156
|
</form>
|
154
157
|
</div>
|
155
158
|
<div class="image-selector-content">
|
156
|
-
<% path = File.join(Pathname.new(
|
159
|
+
<% path = File.join(Pathname.new(Mid.gem_source_path), 'admin_views', 'partials', 'images_page.html.erb') %>
|
157
160
|
<%= ERB.new(File.read(path)).result(binding) %>
|
158
161
|
</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">
|
162
|
+
<div class="image-selector-page text-center">
|
163
|
+
<a href="#" title="<%= EscapeUtils.escape_html t.previous_images %>" class="btn btn-secondary image-selector-page-prev px-4">
|
161
164
|
<i class="fas fa-chevron-left"></i>
|
162
165
|
</a>
|
163
|
-
<a href="#" title="<%= EscapeUtils.escape_html t.next_images %>"class="btn btn-secondary image-selector-page-next">
|
166
|
+
<a href="#" title="<%= EscapeUtils.escape_html t.next_images %>" class="btn btn-secondary image-selector-page-next px-4">
|
164
167
|
<i class="fas fa-chevron-right"></i>
|
165
168
|
</a>
|
166
169
|
</div>
|
@@ -213,6 +216,13 @@
|
|
213
216
|
search(1);
|
214
217
|
return false;
|
215
218
|
});
|
219
|
+
$(document).on('click', '.load-image', function(){
|
220
|
+
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");
|
221
|
+
return false;
|
222
|
+
});
|
223
|
+
function reload_image(){
|
224
|
+
$('.load-image').click();
|
225
|
+
}
|
216
226
|
</script>
|
217
227
|
<script src="/fslightbox/fslightbox.js"></script>
|
218
228
|
</body>
|
@@ -3,9 +3,9 @@
|
|
3
3
|
<form action="/configuration" method="post">
|
4
4
|
<% @hyde_parameters.each_pair do |setting, value| %>
|
5
5
|
<div class="mb-3">
|
6
|
-
<label for="i-<%= setting %>" class="form-label"><%= EscapeUtils.escape_html t.send(setting).capitalize %></label>
|
6
|
+
<label for="i-<%= setting %>" class="form-label"><%= (EscapeUtils.escape_html t.send(setting).capitalize rescue setting) %></label>
|
7
7
|
<input type="text" class="form-control" value="<%= value %>" name="<%= setting %>" id="i-<%= setting %>">
|
8
|
-
<div id="i-<%= setting %>-help" class="form-text"><%= EscapeUtils.escape_html t.send("help_#{setting}").capitalize %></div>
|
8
|
+
<div id="i-<%= setting %>-help" class="form-text"><%= (EscapeUtils.escape_html t.send("help_#{setting}").capitalize rescue '') %></div>
|
9
9
|
</div>
|
10
10
|
<% end %>
|
11
11
|
<button type="submit" class="btn btn-primary"><%= EscapeUtils.escape_html t.submit.capitalize %></button>
|
@@ -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,49 @@
|
|
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
|
+
<div class="container-fluid">
|
29
|
+
<div class="row">
|
30
|
+
<h1><%= t.upload_image_form.capitalize %></h1>
|
31
|
+
|
32
|
+
<% if @filenames %>
|
33
|
+
<%= t.pictures_has_been_uploaded.capitalize %> : <%= @filenames.join(', ') %>
|
34
|
+
<% end %>
|
35
|
+
|
36
|
+
<form enctype="multipart/form-data" method="post" action="/upload_image" class="row g-3">
|
37
|
+
<div class="col-10">
|
38
|
+
<input type="file" name="files[]" multiple class="form-control">
|
39
|
+
</div>
|
40
|
+
<div class="col-2">
|
41
|
+
<button class="btn btn-primary"><%= t.upload.capitalize %></button>
|
42
|
+
</div>
|
43
|
+
</form>
|
44
|
+
|
45
|
+
<button class="btn btn-secondary btn-return-to-editor fixed-bottom mb-4 ms-4"><%= t.quit.capitalize %></button>
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
</body>
|
49
|
+
</html>
|
data/bin/hyde_admin.ru
CHANGED
@@ -6,11 +6,15 @@ require 'fileutils'
|
|
6
6
|
require 'i18n'
|
7
7
|
require 'date'
|
8
8
|
require 'escape_utils'
|
9
|
+
require 'image_processing/mini_magick'
|
9
10
|
require_relative '../lib/hyde_admin/version'
|
10
11
|
|
11
12
|
# TODO détecter format nouveau post (pour codemirror)
|
13
|
+
# Serve
|
14
|
+
|
15
|
+
class Mid < Roda
|
16
|
+
plugin :middleware
|
12
17
|
|
13
|
-
class App < Roda
|
14
18
|
YML_FILE_NAME = "hyde_admin.yml"
|
15
19
|
|
16
20
|
plugin :render,
|
@@ -56,7 +60,7 @@ class App < Roda
|
|
56
60
|
end
|
57
61
|
|
58
62
|
def self.extract_header(str)
|
59
|
-
headers =
|
63
|
+
headers = Mid.extract_header_str(str).to_s.split("\n")
|
60
64
|
headers = headers.select{ |header| !header.empty? }.map{ |header| header.scan(/([a-zA-Z0-9]*): (.*)/).flatten }.select{ |header| !header.empty? }
|
61
65
|
hsh_headers = {}
|
62
66
|
if !headers.flatten.empty?
|
@@ -76,7 +80,27 @@ class App < Roda
|
|
76
80
|
end
|
77
81
|
|
78
82
|
def self.extract_tags(str)
|
79
|
-
str.scan(/^\[?(.*?)\]?$/).flatten.first.split(',')
|
83
|
+
str.to_s.scan(/^\[?(.*?)\]?$/).flatten.first.split(',')
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.resize_image(image_path,params)
|
87
|
+
dir = File.dirname(image_path)
|
88
|
+
basename = File.basename(image_path, File.extname(image_path))
|
89
|
+
while File.exist?("#{File.join(dir, "#{basename}_#{params['resize_size']}")}.#{params['resize_format']}")
|
90
|
+
basename += '_'
|
91
|
+
end
|
92
|
+
output_path = "#{File.join(dir, "#{basename}_#{params['resize_size']}")}.#{params['resize_format']}"
|
93
|
+
|
94
|
+
width,height = params['resize_size'].split("x")
|
95
|
+
ip = ImageProcessing::MiniMagick
|
96
|
+
.source(image_path)
|
97
|
+
.convert(params['resize_format'])
|
98
|
+
.resize_to_limit(width.to_i, height.to_i)
|
99
|
+
if params['resize_format'] == 'jpg'
|
100
|
+
ip = ip.saver(quality: 80, interlace: "Line")
|
101
|
+
end
|
102
|
+
|
103
|
+
ip.call(destination: output_path)
|
80
104
|
end
|
81
105
|
|
82
106
|
FORMAT_DATE_FILENAME = '%Y-%m-%d'
|
@@ -114,12 +138,13 @@ class App < Roda
|
|
114
138
|
end
|
115
139
|
|
116
140
|
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']}`
|
141
|
+
`#{@hyde_parameters['rsync_fullpath']} -avzr #{Dir.pwd}/_site/ #{@hyde_parameters['deploy_dest_user']}@#{@hyde_parameters['deploy_dest_address']}:#{@hyde_parameters['deploy_dest_path']}`
|
118
142
|
r.redirect "/dashboard"
|
119
143
|
end
|
120
144
|
|
121
145
|
r.post "configuration" do
|
122
146
|
r.params.each_pair do |k,v|
|
147
|
+
next if k.to_s == "beforeSend"
|
123
148
|
@hyde_parameters[k] = v
|
124
149
|
end
|
125
150
|
File.open(File.join(Dir.pwd, YML_FILE_NAME),"w+") do |f|
|
@@ -136,6 +161,29 @@ class App < Roda
|
|
136
161
|
view("dashboard")
|
137
162
|
end
|
138
163
|
|
164
|
+
r.on "upload_image_form" do
|
165
|
+
render("upload_image_form")
|
166
|
+
end
|
167
|
+
|
168
|
+
r.post "upload_image" do
|
169
|
+
files = [r.params['files']].flatten # 1 or more files
|
170
|
+
@filenames = []
|
171
|
+
files.each do |file|
|
172
|
+
filename = file[:filename]
|
173
|
+
while File.exist?(File.join(@hyde_parameters['images_path'], filename))
|
174
|
+
filename = "#{File.basename(filename, File.extname(filename))}_#{File.extname(filename)}"
|
175
|
+
end
|
176
|
+
@filenames << filename
|
177
|
+
File.open(File.join(@hyde_parameters['images_path'], filename), 'wb') do |f|
|
178
|
+
f.write(file[:tempfile].read)
|
179
|
+
end
|
180
|
+
if @hyde_parameters['resize_enable'] == 'true'
|
181
|
+
Mid.resize_image(File.join(@hyde_parameters['images_path'], filename), @hyde_parameters)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
render("upload_image_form")
|
185
|
+
end
|
186
|
+
|
139
187
|
r.on "files" do
|
140
188
|
@dir_path = r.params['dir_path'] || Dir.pwd
|
141
189
|
|
@@ -150,6 +198,7 @@ class App < Roda
|
|
150
198
|
r.post "create" do
|
151
199
|
files = [r.params['files']].flatten # 1 or more files
|
152
200
|
files.each do |file|
|
201
|
+
# TODO rename file if exist
|
153
202
|
File.open(File.join(@dir_path, file[:filename]), 'wb') do |f|
|
154
203
|
f.write(file[:tempfile].read)
|
155
204
|
end
|
@@ -176,8 +225,8 @@ class App < Roda
|
|
176
225
|
r.get "edit" do
|
177
226
|
@file = r.params['file']
|
178
227
|
@content = File.read(@file)
|
179
|
-
@header =
|
180
|
-
@content =
|
228
|
+
@header = Mid.extract_header_str(@content)
|
229
|
+
@content = Mid.remove_header(@content)
|
181
230
|
@has_header = (!@header.nil? && !@header.empty?)
|
182
231
|
@has_editor = ['.html','.md'].include?(File.extname(@file))
|
183
232
|
view("files/edit")
|
@@ -219,7 +268,7 @@ class App < Roda
|
|
219
268
|
path = r.params['path']
|
220
269
|
title = r.params['title']
|
221
270
|
I18n.config.available_locales = :en
|
222
|
-
new_path = path.gsub(REGEXP_EXTRACT_DATE_TITLE_FROM_FILENAME, "\\1#{
|
271
|
+
new_path = path.gsub(REGEXP_EXTRACT_DATE_TITLE_FROM_FILENAME, "\\1#{Mid.transliterate_title_for_url(title)}\\3")
|
223
272
|
response.write(new_path)
|
224
273
|
end
|
225
274
|
r.post "update_date_today" do
|
@@ -242,7 +291,7 @@ class App < Roda
|
|
242
291
|
all_images = all_images.reverse if sort_date == 'asc'
|
243
292
|
@images = all_images[start_elts, nb_elements_per_page]
|
244
293
|
|
245
|
-
path = File.join(Pathname.new(
|
294
|
+
path = File.join(Pathname.new(Mid.gem_source_path), 'admin_views', 'partials', 'images_page.html.erb')
|
246
295
|
data = ERB.new(File.read(path)).result(binding)
|
247
296
|
|
248
297
|
response.write(data)
|
@@ -286,7 +335,7 @@ class App < Roda
|
|
286
335
|
@file = r.params['file']
|
287
336
|
|
288
337
|
content_file = File.read(@file)
|
289
|
-
@headers =
|
338
|
+
@headers = Mid.extract_header(content_file)
|
290
339
|
@content = File.read(@file).gsub(/---(.*?)---/m, "")
|
291
340
|
|
292
341
|
# for page
|
@@ -316,7 +365,7 @@ class App < Roda
|
|
316
365
|
#$stderr.puts "---->"
|
317
366
|
|
318
367
|
if @new_file.nil? || @new_file.empty?
|
319
|
-
filename =
|
368
|
+
filename = Mid.urlize(@date, @title, (@type_file != 'pages'))
|
320
369
|
@new_file = File.join(Dir.pwd,"_#{@type_file}", "#{filename}.#{@format}")
|
321
370
|
end
|
322
371
|
|
@@ -358,4 +407,11 @@ class App < Roda
|
|
358
407
|
end
|
359
408
|
end
|
360
409
|
|
410
|
+
# https://roda.jeremyevans.net/rdoc/classes/Roda/RodaPlugins/Middleware.html
|
411
|
+
class App < Roda
|
412
|
+
use Mid
|
413
|
+
use Rack::Static, :urls => [''], root: Dir.pwd # allow to match all files in Dir.pwd
|
414
|
+
end
|
415
|
+
|
361
416
|
run App.freeze.app
|
417
|
+
|
data/bin/hyde_admin.yml
CHANGED
@@ -6,10 +6,13 @@ deploy_dest_path: "/absolute/remote/path/mysite"
|
|
6
6
|
rsync_fullpath: rsync
|
7
7
|
site_index: index.html
|
8
8
|
hyde_admin_language: en
|
9
|
-
hyde_admin_auth: false
|
9
|
+
hyde_admin_auth: 'false'
|
10
10
|
hyde_admin_user: admin
|
11
11
|
hyde_admin_password: admin
|
12
12
|
default_format: html
|
13
|
-
display_layout: true
|
14
|
-
display_format: true
|
15
|
-
images_path: assets/images/
|
13
|
+
display_layout: 'true'
|
14
|
+
display_format: 'true'
|
15
|
+
images_path: assets/images/
|
16
|
+
resize_format: jpg
|
17
|
+
resize_size: 1500x1000
|
18
|
+
resize_enable: 'true'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/bin/env ruby
|
2
|
+
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
local_config_file = File.join(Dir.pwd, 'hyde_admin.yml')
|
6
|
+
old_filename = "hyde_admin_old_#{Time.now.strftime('%Y_%m_%d')}.yml"
|
7
|
+
|
8
|
+
# Backup actual config file
|
9
|
+
if File.exist?(local_config_file)
|
10
|
+
FileUtils.mv(local_config_file, old_filename)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Copy the default config file
|
14
|
+
FileUtils.copy(File.join(File.expand_path(File.dirname(__FILE__)), 'hyde_admin.yml'), local_config_file)
|
15
|
+
|
16
|
+
puts "#{local_config_file} copied, you can find your old config file here : #{old_filename} !"
|
@@ -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,17 @@ 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
|
104
|
+
resize_format: jpg
|
105
|
+
help_resize_format: jpg or png
|
106
|
+
resize_size: "size to fit, example : 1500x1000"
|
107
|
+
help_resize_size: Downsize to fit to the specified size (resize preserve ratio), example 1500x1000
|
108
|
+
resize_enable: Enable resizing for images
|
109
|
+
help_resize_enable: enable feature resize image at upload
|
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,18 @@ 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
|
104
|
+
resize_format: jpg
|
105
|
+
help_resize_format: jpg ou png
|
106
|
+
resize_size: "Recadrer en (example : 1500x1000)"
|
107
|
+
help_resize_size: Réduit les image pour coller à la taille spécifiée (le redimensionnement préserve le ratio), exemple 1500x1000
|
108
|
+
resize_enable: activer redimensionnement
|
109
|
+
help_resize_enable: active la fonctionnalité de redimensionnement d'image à l'upload
|
data/hyde_admin.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
all_files = `git ls-files`.split("\n").reject{ |filepath| filepath.start_with? 'test/' }
|
12
12
|
s.files = all_files
|
13
13
|
|
14
|
-
s.executables = ['hyde_admin']
|
14
|
+
s.executables = ['hyde_admin','hyde_admin_config']
|
15
15
|
s.bindir = "bin"
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
|
@@ -31,4 +31,5 @@ Gem::Specification.new do |s|
|
|
31
31
|
s.add_runtime_dependency("escape_utils") # escape_javascript / escape_html
|
32
32
|
#s.add_runtime_dependency("i18n", "~> 0.4.0") # I18n.transliterate (already required by jekyll)
|
33
33
|
s.add_runtime_dependency('jekyll') # Because we call jekyll binary
|
34
|
+
s.add_runtime_dependency('image_processing') # JPEG quality
|
34
35
|
end
|
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.9
|
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-
|
11
|
+
date: 2021-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: roda
|
@@ -80,14 +80,30 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: image_processing
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
description: A Jekyll admin interface
|
84
98
|
email: claudel.sylvain@gmail.com
|
85
99
|
executables:
|
86
100
|
- hyde_admin
|
101
|
+
- hyde_admin_config
|
87
102
|
extensions: []
|
88
103
|
extra_rdoc_files: []
|
89
104
|
files:
|
90
105
|
- ".gitattributes"
|
106
|
+
- ".gitignore"
|
91
107
|
- ".idea/.gitignore"
|
92
108
|
- ".idea/hyde_admin.iml"
|
93
109
|
- ".idea/misc.xml"
|
@@ -107,10 +123,12 @@ files:
|
|
107
123
|
- bin/admin_views/partials/images_page.html.erb
|
108
124
|
- bin/admin_views/posts/edit.erb
|
109
125
|
- bin/admin_views/posts/listing.erb
|
126
|
+
- bin/admin_views/upload_image_form.erb
|
110
127
|
- bin/fslightbox/fslightbox.js
|
111
128
|
- bin/hyde_admin
|
112
129
|
- bin/hyde_admin.ru
|
113
130
|
- bin/hyde_admin.yml
|
131
|
+
- bin/hyde_admin_config
|
114
132
|
- bin/hyde_assets/hyde_admin.css
|
115
133
|
- bin/hyde_assets/hyde_admin.js
|
116
134
|
- bin/i18n/en.yml
|