hyde_admin 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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