hyde_admin 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +3 -0
  3. data/.idea/hyde_admin.iml +2 -0
  4. data/.idea/vcs.xml +6 -0
  5. data/CHANGELOG.md +11 -0
  6. data/README.md +23 -0
  7. data/TODO.md +1 -0
  8. data/bin/admin_views/admin_layout.html.erb +138 -109
  9. data/bin/admin_views/configuration.erb +13 -0
  10. data/bin/admin_views/dashboard.erb +1 -1
  11. data/bin/admin_views/editor_html.erb +24 -0
  12. data/bin/admin_views/editor_js.erb +120 -0
  13. data/bin/admin_views/files/edit.erb +30 -0
  14. data/bin/admin_views/files/listing.erb +111 -0
  15. data/bin/admin_views/posts/edit.erb +156 -0
  16. data/bin/admin_views/posts/listing.erb +34 -0
  17. data/bin/fslightbox/fslightbox.js +1 -0
  18. data/bin/hyde_admin +3 -0
  19. data/bin/hyde_admin.ru +243 -55
  20. data/bin/hyde_admin.yml +12 -5
  21. data/bin/hyde_assets/hyde_admin.css +18 -0
  22. data/bin/hyde_assets/hyde_admin.js +24 -0
  23. data/bin/i18n/en.yml +62 -1
  24. data/bin/i18n/fr.yml +62 -1
  25. data/bin/lib/codemirror.css +349 -0
  26. data/bin/lib/codemirror.js +9833 -0
  27. data/bin/mode/css/css.js +864 -0
  28. data/bin/mode/css/gss.html +104 -0
  29. data/bin/mode/css/gss_test.js +17 -0
  30. data/bin/mode/css/index.html +81 -0
  31. data/bin/mode/css/less.html +152 -0
  32. data/bin/mode/css/less_test.js +54 -0
  33. data/bin/mode/css/scss.html +158 -0
  34. data/bin/mode/css/scss_test.js +110 -0
  35. data/bin/mode/css/test.js +217 -0
  36. data/bin/mode/htmlembedded/htmlembedded.js +37 -0
  37. data/bin/mode/htmlembedded/index.html +60 -0
  38. data/bin/mode/htmlmixed/htmlmixed.js +153 -0
  39. data/bin/mode/htmlmixed/index.html +100 -0
  40. data/bin/mode/javascript/index.html +118 -0
  41. data/bin/mode/javascript/javascript.js +959 -0
  42. data/bin/mode/javascript/json-ld.html +72 -0
  43. data/bin/mode/javascript/test.js +521 -0
  44. data/bin/mode/javascript/typescript.html +62 -0
  45. data/bin/mode/markdown/index.html +418 -0
  46. data/bin/mode/markdown/markdown.js +886 -0
  47. data/bin/mode/markdown/test.js +1319 -0
  48. data/bin/mode/ruby/index.html +183 -0
  49. data/bin/mode/ruby/ruby.js +303 -0
  50. data/bin/mode/ruby/test.js +23 -0
  51. data/bin/mode/sass/index.html +68 -0
  52. data/bin/mode/sass/sass.js +459 -0
  53. data/bin/mode/sass/test.js +122 -0
  54. data/bin/mode/spreadsheet/index.html +42 -0
  55. data/bin/mode/spreadsheet/spreadsheet.js +112 -0
  56. data/bin/mode/xml/index.html +61 -0
  57. data/bin/mode/xml/test.js +51 -0
  58. data/bin/mode/xml/xml.js +417 -0
  59. data/bin/mode/yaml/index.html +80 -0
  60. data/bin/mode/yaml/yaml.js +120 -0
  61. data/bin/mode/yaml-frontmatter/index.html +121 -0
  62. data/bin/mode/yaml-frontmatter/yaml-frontmatter.js +72 -0
  63. data/hyde_admin.gemspec +6 -1
  64. data/lib/hyde_admin/version.rb +1 -1
  65. metadata +114 -7
  66. data/bin/admin_views/edit.erb +0 -57
  67. data/bin/admin_views/listing.erb +0 -32
  68. data/bin/hyde_admin.sh +0 -3
data/bin/hyde_admin.ru CHANGED
@@ -2,86 +2,251 @@
2
2
  # lancer avec rackup
3
3
  require "roda"
4
4
  require 'yaml'
5
+ require 'fileutils'
6
+ require 'i18n'
7
+ require 'date'
8
+ require_relative '../lib/hyde_admin/version'
9
+
10
+ # TODO détecter format nouveau post (pour codemirror)
5
11
 
6
12
  class App < Roda
7
13
  YML_FILE_NAME = "hyde_admin.yml"
8
14
 
9
15
  plugin :render,
10
16
  #escape: true, # Automatically escape output in erb templates using Erubi's escaping support
11
- views: 'admin_views', # Default views directory
17
+ views: File.join(File.expand_path(File.dirname(__FILE__)),'admin_views'), # Default views directory
12
18
  layout_opts: {template: 'admin_layout', engine: 'html.erb'}, # Default layout options
13
19
  template_opts: {default_encoding: 'UTF-8'} # Default template options
14
-
15
- plugin :i18n, translations: './i18n' # gem 'roda-i18n'
16
-
17
- opts[:root] = Dir.pwd
18
-
19
- plugin :public, root: "#{YAML.load(File.read(YML_FILE_NAME))['path_to_jekyll_src']}/_site" # permet de simuler le serveur jekyll
20
-
21
- # TODO load option (default_layout, deploy_dest_address, deploy_dest_path, path_to_jekyll_src, rsync_fullpath)
22
- # expliquer dans la doc le hyde.yml (voir une commande pour le prégénérer)
20
+ plugin :i18n, translations: File.join(File.expand_path(File.dirname(__FILE__)), 'i18n') # gem 'roda-i18n'
21
+ opts[:root] = Dir.pwd
22
+ plugin :public, root: File.join(Dir.pwd, '_site') # simulate jekyll site
23
+ plugin :static, ['/mode', '/lib', '/fslightbox', '/hyde_assets'], :root => File.join(File.expand_path(File.dirname(__FILE__)))
24
+ plugin :http_auth
25
+ plugin :common_logger
23
26
 
24
27
  def initialize(param)
25
- puts "============> #{Dir.pwd}"
26
28
  yml_in_current_dir = File.join(Dir.pwd, YML_FILE_NAME)
27
29
  yml_in_gem = File.expand_path(File.join(File.dirname(__FILE__), YML_FILE_NAME))
28
30
 
29
- puts yml_in_current_dir
30
- puts yml_in_gem
31
-
32
31
  # Generate default YML for hyde_admin
33
32
  if !File.exist?(yml_in_current_dir)
34
- File.cp(yml_in_gem, yml_in_current_dir)
33
+ FileUtils.cp(yml_in_gem, yml_in_current_dir)
35
34
  end
36
35
  @hyde_parameters ||= YAML.load(File.read(yml_in_current_dir))
37
36
  super(param)
38
37
  end
39
38
 
39
+ def self.transliterate_title_for_url(title)
40
+ I18n.config.available_locales = :en
41
+ I18n.transliterate(title).downcase.gsub(/[^a-zA-Z ]/,'').gsub(' ','-')
42
+ end
43
+
44
+ def self.urlize(date_str, title, with_date = true)
45
+ url_str = ""
46
+ if with_date
47
+ url_str += "#{Date.parse(date_str).strftime('%Y-%m-%d')}-"
48
+ end
49
+ url_str += "#{self.transliterate_title_for_url(title)}"
50
+ url_str
51
+ end
52
+
53
+ def self.extract_header_str(str)
54
+ str.scan(/---(.*?)---/m).flatten.first
55
+ end
56
+
57
+ def self.extract_header(str)
58
+ headers = App.extract_header_str(str).to_s.split("\n")
59
+ headers = headers.select{ |header| !header.empty? }.map{ |header| header.scan(/([a-zA-Z0-9]*): (.*)/).flatten }.select{ |header| !header.empty? }
60
+ hsh_headers = {}
61
+ if !headers.flatten.empty?
62
+ #$stderr.puts "==============="
63
+ #$stderr.puts headers.inspect
64
+ hsh_headers = Hash[headers]
65
+ end
66
+ hsh_headers
67
+ end
68
+
69
+ def self.remove_header(str)
70
+ str.gsub(/---(.*?)---/m, "")
71
+ end
72
+
73
+ FORMAT_DATE_FILENAME = '%Y-%m-%d'
74
+ FORMAT_DATE_INPUT_FILENAME = '%Y-%m-%d %H:%M:%S %z'
75
+
76
+ REGEXP_EXTRACT_DATE_FROM_FILENAME = /\d{4}-\d{2}-\d{2}-/
77
+ REGEXP_EXTRACT_DATE_TITLE_FROM_FILENAME = /(\d{4}-\d{2}-\d{2}-)(.*)(\.[^.]*)$/
78
+
40
79
  route do |r|
41
- # GET serve static blog (chercher l'url index.html dans le navigateur
80
+ @page = r.params['page']
81
+
82
+ if @hyde_parameters['hyde_admin_auth'].to_s == 'true'
83
+ http_auth {|u, p| [u, p] == [@hyde_parameters['hyde_admin_user'], @hyde_parameters['hyde_admin_password']] }
84
+ end
85
+
86
+ # GET serve jekyll site
42
87
  r.public
43
88
 
89
+ r.i18n_set_locale(@hyde_parameters['hyde_admin_language']) do
90
+
44
91
  r.root do
45
92
  r.redirect "/dashboard"
46
93
  end
47
94
 
95
+ # Redirect to jekyll index site
48
96
  r.on "overview" do
49
97
  r.redirect @hyde_parameters['site_index']
50
98
  end
51
-
52
- # need to install jekyll (version bundlé avec le site
99
+
100
+ # Rebuild static files
53
101
  r.on "rebuild" do
54
- puts @hyde_parameters['path_to_jekyll_src']
55
- `cd #{@hyde_parameters['path_to_jekyll_src']} && jekyll b && sleep 10`
102
+ puts Dir.pwd
103
+ `cd #{Dir.pwd} && jekyll b`
56
104
  r.redirect "/dashboard"
57
105
  end
58
106
 
59
107
  r.on "deploy" do
60
- `#{@hyde_parameters['rsync_fullpath']} #{@hyde_parameters['path_to_jekyll_src']}/_site/ #{@hyde_parameters['deploy_dest_user']}@#{@hyde_parameters['deploy_dest_address']}:#{@hyde_parameters['deploy_dest_path']}`
108
+ `#{@hyde_parameters['rsync_fullpath']} #{Dir.pwd}/_site/ #{@hyde_parameters['deploy_dest_user']}@#{@hyde_parameters['deploy_dest_address']}:#{@hyde_parameters['deploy_dest_path']}`
61
109
  r.redirect "/dashboard"
62
110
  end
63
111
 
64
- r.on "configuration" do
65
- File.open("hyde.yml","w+") do |f|
112
+ r.post "configuration" do
113
+ r.params.each_pair do |k,v|
114
+ @hyde_parameters[k] = v
115
+ end
116
+ File.open(File.join(Dir.pwd, YML_FILE_NAME),"w+") do |f|
66
117
  f.write(@hyde_parameters.to_yaml)
67
118
  end
68
- r.redirect "/dashboard"
119
+ r.redirect "/configuration"
120
+ end
121
+
122
+ r.get "configuration" do
123
+ view("configuration")
69
124
  end
70
125
 
71
126
  r.on "dashboard" do
72
127
  view("dashboard")
73
128
  end
74
129
 
130
+ r.on "files" do
131
+ @dir_path = r.params['dir_path'] || Dir.pwd
132
+
133
+ # List files
134
+ r.get "index" do
135
+ @files = Dir[File.join(@dir_path, '*')].sort(&:casecmp).reverse
136
+ @parent_dir = (@dir_path != Dir.pwd)
137
+ view("files/listing")
138
+ end
139
+
140
+ # Upload files
141
+ r.post "create" do
142
+ files = [r.params['files']].flatten # 1 or more files
143
+ files.each do |file|
144
+ File.open(File.join(@dir_path, file[:filename]), 'wb') do |f|
145
+ f.write(file[:tempfile].read)
146
+ end
147
+ end
148
+ r.redirect "/files/index?dir_path=#{@dir_path}"
149
+ end
150
+
151
+ # Create directory
152
+ r.post "create_dir" do
153
+ Dir.mkdir(File.join(@dir_path, r.params['directory_name']))
154
+ r.redirect "/files/index?dir_path=#{@dir_path}"
155
+ end
156
+
157
+ # Create file
158
+ r.post "create_file" do
159
+ fullpath = File.join(@dir_path, r.params['file_name'])
160
+ File.open(fullpath, 'w+') do |f|
161
+ f.write("")
162
+ end
163
+ r.redirect "/files/edit?dir_path=#{@dir_path}&file=#{fullpath}"
164
+ end
165
+
166
+ # Edit text files
167
+ r.get "edit" do
168
+ @file = r.params['file']
169
+ @content = File.read(@file)
170
+ @header = App.extract_header_str(@content)
171
+ @content = App.remove_header(@content)
172
+ @has_header = (!@header.nil? && !@header.empty?)
173
+ @has_editor = ['.html','.md'].include?(File.extname(@file))
174
+ view("files/edit")
175
+ end
176
+
177
+ # Update file
178
+ r.post "update" do
179
+ @file = r.params['file']
180
+ @content = r.params['content']
181
+ @header = r.params['header']
182
+ File.open(@file,"w+") do |f|
183
+ if !@header.nil? and !@header.empty?
184
+ f.write("---")
185
+ f.write(@header)
186
+ f.write("---")
187
+ f.write("")
188
+ end
189
+ f.write(@content)
190
+ end
191
+ view("files/edit")
192
+ end
193
+
194
+ # Delete
195
+ r.post "delete" do
196
+ file = r.params['file']
197
+ File.unlink(file)
198
+ r.redirect "/files/index?dir_path=#{@dir_path}"
199
+ end
200
+ end
201
+
202
+ r.on "ajax" do
203
+ r.post "update_path_date" do
204
+ path = r.params['path']
205
+ date = Date.parse(r.params['date'])
206
+ new_path = path.gsub(REGEXP_EXTRACT_DATE_FROM_FILENAME, date.strftime("#{FORMAT_DATE_FILENAME}-"))
207
+ response.write(new_path)
208
+ end
209
+ r.post "update_path_title" do
210
+ path = r.params['path']
211
+ title = r.params['title']
212
+ I18n.config.available_locales = :en
213
+ new_path = path.gsub(REGEXP_EXTRACT_DATE_TITLE_FROM_FILENAME, "\\1#{App.transliterate_title_for_url(title)}\\3")
214
+ response.write(new_path)
215
+ end
216
+ r.post "update_date_today" do
217
+ date = Time.now.strftime(FORMAT_DATE_INPUT_FILENAME)
218
+ response.write(date)
219
+ end
220
+ end
221
+
75
222
  # Posts/pages/drafts
76
223
  r.on /posts|pages|drafts/ do
77
224
  # Set variable for all routes in /hello branch
78
225
  @type_file = r.matched_path.split('/').compact.select{ |elt| elt != '' }.first
79
226
 
227
+ # Mkdir _pages _drafts _posts if they not exist
228
+ FileUtils.mkdir_p(File.join(Dir.pwd, "_#{@type_file}"))
229
+
80
230
  # GET /posts/index request
81
231
  # list all posts...
82
232
  r.get "index" do
83
- @files = Dir[File.join(@hyde_parameters['path_to_jekyll_src'], "_#{@type_file}", '*')].sort
84
- view("listing")
233
+ @files = Dir[File.join(Dir.pwd, "_#{@type_file}", '*')].sort.reverse
234
+ view("posts/listing")
235
+ end
236
+
237
+ r.get "new" do
238
+ @file = ""
239
+ @headers = {}
240
+ @new_record = @file.empty?
241
+ view("posts/edit")
242
+ end
243
+
244
+ # POST /posts/delete?file=truc request
245
+ # save the truc post
246
+ r.post "delete" do
247
+ @file = r.params['file']
248
+ File.unlink(@file)
249
+ r.redirect "/#{@type_file}/index?dir_path=#{File.dirname(@file)}"
85
250
  end
86
251
 
87
252
  r.is do
@@ -91,52 +256,75 @@ class App < Roda
91
256
  @file = r.params['file']
92
257
 
93
258
  content_file = File.read(@file)
94
- @headers = content_file.scan(/---(.*?)---/m).flatten.first.split("\n")
95
- @headers = @headers.select{ |header| !header.empty? }.map{ |header| header.scan(/([a-zA-Z]*): (.*)/).flatten }
96
- pp @headers
97
- @headers = Hash[@headers]
98
-
99
- view("edit")
259
+ @headers = App.extract_header(content_file)
260
+ @content = File.read(@file).gsub(/---(.*?)---/m, "")
261
+
262
+ # for page
263
+ if @headers.empty?
264
+ r.redirect "/files/edit?dir_path=#{r.params['dir_path']}&file=#{@file}"
265
+ else
266
+ @new_record = @file.empty?
267
+ view("posts/edit")
268
+ end
100
269
  end
101
270
 
102
271
  # POST /posts?file=truc request
103
272
  # save the truc post
104
273
  r.post do
105
- @file = r.params['file']
106
- @content = r.params['content']
107
- @filename = r.params['filename']
108
- @tags = r.params['tags']
109
- @content = r.params['content']
110
- @date = r.params['date']
111
- @meta = r.params['meta']
112
- @format = r.params['format']
113
- @publish = r.params['publish']
114
- @layout = r.params['layout']
274
+ @file = r.params.delete('file') # in a route (new record : empty ELSE old filename)
275
+ @content = r.params.delete('content')
276
+ @filename = r.params.delete('filename')
277
+ @tags = r.params.delete('tags')
278
+ @date = r.params.delete('date')
279
+ @meta = r.params.delete('meta')
280
+ @format = r.params.delete('format')
281
+ @publish = r.params.delete('publish')
282
+ @layout = r.params.delete('layout')
283
+ @title = r.params.delete('title')
284
+ @new_file = r.params.delete('new_file') # form (new record : empty ELSE new filename)
285
+
286
+ #$stderr.puts "---->"
287
+
288
+ if @new_file.nil? || @new_file.empty?
289
+ filename = App.urlize(@date, @title, (@type_file != 'pages'))
290
+ @new_file = File.join(Dir.pwd,"_#{@type_file}", "#{filename}.#{@format}")
291
+ end
115
292
 
116
293
  @headers = ['---']
117
- @headers << ['tags', @tags.join(',')].join(': ')
294
+ @headers << ['tags', @tags.split(',').map(&:strip).join(',')].join(': ')
118
295
  @headers << ['layout', @layout].join(': ')
119
296
  @headers << ['date', @date.to_s].join(': ')
120
- #@headers << ['meta', @tags.join(',')].join(': ')
297
+ @headers << ['title', @title.to_s].join(': ')
298
+ r.params.each do |k,v|
299
+ if k.start_with?('header')
300
+ @headers << [v.first, v.last.to_s].join(': ')
301
+ else
302
+ @headers << [k, v.to_s].join(': ')
303
+ end
304
+ end
121
305
  @headers << ['---']
306
+ @headers << ['']
122
307
 
123
- File.open(File.join(@hyde_parameters['path_to_jekyll_src'], "#{@file}.#{@format}"), "w+") do |f|
308
+ File.open(@new_file, "w+") do |f|
124
309
  f.write(@headers.join("\n"))
125
- f.write("")
126
- f.write(content)
310
+ f.write(@content)
127
311
  end
128
- end
129
312
 
130
- # POST /posts/delete?file=truc request
131
- # save the truc post
132
- r.post "delete" do
133
- @file = r.params['file']
134
- File.unlink(File.join(@hyde_parameters['path_to_jekyll_src'],@file))
313
+ # Change path of file
314
+ if !@file.to_s.empty? && @new_file.to_s != @file.to_s
315
+ File.unlink(@file)
316
+ end
317
+
318
+ # publish : move draft to post
319
+ if @publish == 'publish' && @new_file.to_s.include?('_drafts')
320
+ FileUtils.mv(@new_file, @new_file.gsub('_drafts','_posts'))
321
+ end
322
+
323
+ r.redirect "/#{@type_file}/index?dir_path=#{File.dirname(@new_file)}"
135
324
  end
136
325
  end
137
326
  end
138
-
139
- # TODO faire un jekyll serve
327
+ end
140
328
  end
141
329
  end
142
330
 
data/bin/hyde_admin.yml CHANGED
@@ -1,8 +1,15 @@
1
1
  ---
2
- default_layout:
3
- deploy_dest_user: pi
4
- deploy_dest_address: guerin.rivsc.ovh
5
- deploy_dest_path: "/home/pi/testblog"
6
- path_to_jekyll_src: "/Users/scl/blog/rivscblog-zolan"
2
+ default_layout: default
3
+ deploy_dest_user: root
4
+ deploy_dest_address: example.com
5
+ deploy_dest_path: "/absolute/remote/path/mysite"
7
6
  rsync_fullpath: rsync
8
7
  site_index: index.html
8
+ hyde_admin_language: en
9
+ hyde_admin_auth: false
10
+ hyde_admin_user: admin
11
+ hyde_admin_password: admin
12
+ default_format: html
13
+ display_layout: true
14
+ display_format: true
15
+ images_path: assets/images/
@@ -0,0 +1,18 @@
1
+ /* modal pictures */
2
+ .modal-body-image{
3
+ display: grid;
4
+ grid-template-columns: 1fr 1fr 1fr;
5
+ }
6
+ .modal-body-image .image-element{
7
+ width: 150px;
8
+ height: 150px;
9
+ }
10
+ .modal-body-image .image-element img{
11
+ width: 100%;
12
+ height: 100%;
13
+ object-fit: contain;
14
+ overflow: hidden;
15
+ }
16
+ .modal-body-image .image-element img:hover{
17
+ border:2px solid gray;
18
+ }
@@ -0,0 +1,24 @@
1
+ $(function(){
2
+ $(document).on('click','#btn-deploy,#btn-rebuild',function(elt){
3
+ let path = '';
4
+
5
+ if(elt.id === 'btn-deploy'){
6
+ path = '/deploy';
7
+ }else if(elt.id === 'btn-rebuild'){
8
+ path = '/rebuild';
9
+ }
10
+
11
+ $.post( path, {
12
+ beforeSend: function( xhr ) {
13
+ $('#waiting').show();
14
+ }
15
+ })
16
+ .done(function( data ) {
17
+ $('#waiting').hide();
18
+ return false;
19
+ });
20
+ });
21
+ $(document).on('click','.form-confirm',function(){
22
+ return window.confirm($(this).attr('data-confirm'));
23
+ });
24
+ });
data/bin/i18n/en.yml CHANGED
@@ -5,11 +5,17 @@ pages: pages
5
5
  post: post
6
6
  posts: posts
7
7
  save: save
8
+ new: new
8
9
  edit: edit
9
10
  delete: delete
10
- are_you_sure: are you sure
11
+ create: create
12
+ upload: upload
13
+ header: header
14
+ add_header: add header
15
+ are_you_sure: are you sure ?
11
16
  tag: tag
12
17
  tags: tags
18
+ help_tags: set tags separate by comma
13
19
  layout: layout
14
20
  configuration: configuration
15
21
  files: files
@@ -25,3 +31,58 @@ date: date
25
31
  content: content
26
32
  publish: publish
27
33
  path: path
34
+ help_path: You can move the file by changing the path. Change the path can affect SEO or causing 404 errors. For a new file, this is automatically filled at submit.
35
+ overview: overview
36
+ submit: submit
37
+ default_layout: default layout
38
+ help_default_layout: default layout for jekyll posts/pages
39
+ deploy_dest_user: deploy remote user
40
+ help_deploy_dest_user: Ssh user for rsync
41
+ deploy_dest_address: deploy remote domain
42
+ help_deploy_dest_address: remote domain for ssh deployment
43
+ deploy_dest_path: deploy remote path
44
+ help_deploy_dest_path: remote path on disk for ssh deployment
45
+ rsync_fullpath: rsync path
46
+ help_rsync_fullpath: if rsync is not in PATH, othervise just let 'rsync'
47
+ site_index: index file name of site
48
+ help_site_index: link to open when we click on overview
49
+ hyde_admin_language: hyde admin language
50
+ help_hyde_admin_language: To change hyde admin language interface
51
+ set_date_today: set date at today
52
+ change_date_path: update date in path
53
+ change_title_path: update title in path
54
+ directory_input_placeholder: directory name to create
55
+ file_input_placeholder: file name to create
56
+ hyde_admin_auth: enable BasicAuth
57
+ help_hyde_admin_auth: enable BasicAuth
58
+ hyde_admin_user: BasicAuth user
59
+ help_hyde_admin_user: BasicAuth user
60
+ hyde_admin_password: BasicAuth password
61
+ help_hyde_admin_password: BasicAuth password
62
+ default_format: default format
63
+ help_default_format: default format
64
+ display_layout: display the layout input on edit form
65
+ help_display_layout: display the layout input on edit form
66
+ display_format: display the format input on edit form
67
+ help_display_format: display the format input on edit form
68
+ images_path: pictures path
69
+ help_images_path: relative local picture path
70
+ editor_undo: Undo
71
+ editor_redo: Redo
72
+ editor_file: Add picture
73
+ editor_list: List
74
+ editor_list_ol: Numbered List
75
+ editor_link: Add link
76
+ editor_quote: Quote
77
+ editor_title_h1: Title H1
78
+ editor_title_h2: Title H2
79
+ editor_title_h3: Title H3
80
+ editor_title_h4: Title H4
81
+ editor_title_h5: Title H5
82
+ editor_underline: Underline
83
+ editor_bold: Bold
84
+ editor_italic: Italic
85
+ editor_strikethrough: Strikethrough
86
+ default_alt_img: Alt text
87
+ default_title_img: Title text
88
+ parent_dir: dossier parent
data/bin/i18n/fr.yml CHANGED
@@ -5,11 +5,17 @@ pages: pages
5
5
  post: article
6
6
  posts: articles
7
7
  save: sauvegarder
8
+ new: nouveau
8
9
  edit: éditer
9
10
  delete: supprimer
10
- are_you_sure: êtes-vous sûr
11
+ create: créer
12
+ upload: uploader
13
+ header: Entête
14
+ are_you_sure: êtes-vous sûr ?
15
+ add_header: ajouter un entête
11
16
  tag: mot-clé
12
17
  tags: mots-clés
18
+ help_tags: Mettez les tags séparés par des virgules
13
19
  layout: présentation
14
20
  configuration: configuration
15
21
  files: fichiers
@@ -25,3 +31,58 @@ date: date
25
31
  content: contenu
26
32
  publish: publier
27
33
  path: chemin
34
+ help_path: Vous pouvez déplacer le fichier en changeant le chemin. Changer le chemin peut affecter le SEO et provoquer des erreurs 404. Pour un nouveau fichier, c'est automatiquement remplit à la sousmission du formulaire.
35
+ overview: aperçu
36
+ submit: valider
37
+ default_layout: présentation par défaut
38
+ help_default_layout: présentation par défaut pour les posts et pages
39
+ deploy_dest_user: Utilisateur pour déploiement
40
+ help_deploy_dest_user: Utilisateur pour déploiement par ssh
41
+ deploy_dest_address: Adresse pour déploiement
42
+ help_deploy_dest_address: Domaine ou adresse IP pour déploiement à travers ssh
43
+ deploy_dest_path: chemin distant pour déploiement
44
+ help_deploy_dest_path: chemin distant pour déploiement du site
45
+ rsync_fullpath: chemin rsync
46
+ help_rsync_fullpath: si rsync n'est pas dans le PATH, sinon laissez 'rsync'
47
+ site_index: nom du fichier index pour le site
48
+ help_site_index: Lien pour le lien aperçu, pensez à l'extention si nécessaire
49
+ hyde_admin_language: hyde admin langue
50
+ help_hyde_admin_language: Pour changer la langue d'interface de hyde admin
51
+ set_date_today: mets la date du jour
52
+ change_date_path: mets à jour la date dans le chemin de fichier
53
+ change_title_path: mets à jour le titre dans le chemin de fichier
54
+ directory_input_placeholder: nom du dossier à créer
55
+ file_input_placeholder: nom du fichier à créer
56
+ hyde_admin_auth: enable BasicAuth
57
+ help_hyde_admin_auth: enable BasicAuth
58
+ hyde_admin_user: BasicAuth user
59
+ help_hyde_admin_user: BasicAuth user
60
+ hyde_admin_password: BasicAuth password
61
+ help_hyde_admin_password: BasicAuth password
62
+ default_format: format par défaut
63
+ help_default_format: format par défaut pour les posts
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
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
68
+ images_path: chemin des images
69
+ help_images_path: chemin local relatif des images
70
+ editor_undo: Annuler
71
+ editor_redo: Refaire
72
+ editor_file: Ajouter image
73
+ editor_list: Liste
74
+ editor_list_ol: Liste numéroté
75
+ editor_link: Ajouter lien
76
+ editor_quote: Citation
77
+ editor_title_h1: Titre H1
78
+ editor_title_h2: Titre H2
79
+ editor_title_h3: Titre H3
80
+ editor_title_h4: Titre H4
81
+ editor_title_h5: Titre H5
82
+ editor_underline: Souligner
83
+ editor_bold: Gras
84
+ editor_italic: Italique
85
+ editor_strikethrough: Barré
86
+ default_alt_img: Texte alternatif
87
+ default_title_img: Titre image
88
+ parent_dir: dossier parent