hyde_admin 0.0.1 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) 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 +35 -0
  6. data/README.md +23 -0
  7. data/TODO.md +3 -0
  8. data/bin/admin_views/admin_layout.html.erb +204 -108
  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/partials/image_element.html.erb +4 -0
  16. data/bin/admin_views/partials/images_page.html.erb +8 -0
  17. data/bin/admin_views/posts/edit.erb +158 -0
  18. data/bin/admin_views/posts/listing.erb +37 -0
  19. data/bin/admin_views/upload_image_form.erb +45 -0
  20. data/bin/fslightbox/fslightbox.js +1 -0
  21. data/bin/hyde_admin +3 -0
  22. data/bin/hyde_admin.ru +306 -56
  23. data/bin/hyde_admin.yml +12 -5
  24. data/bin/hyde_assets/hyde_admin.css +37 -0
  25. data/bin/hyde_assets/hyde_admin.js +24 -0
  26. data/bin/i18n/en.yml +77 -1
  27. data/bin/i18n/fr.yml +77 -1
  28. data/bin/lib/codemirror.css +349 -0
  29. data/bin/lib/codemirror.js +9833 -0
  30. data/bin/mode/css/css.js +864 -0
  31. data/bin/mode/css/gss.html +104 -0
  32. data/bin/mode/css/gss_test.js +17 -0
  33. data/bin/mode/css/index.html +81 -0
  34. data/bin/mode/css/less.html +152 -0
  35. data/bin/mode/css/less_test.js +54 -0
  36. data/bin/mode/css/scss.html +158 -0
  37. data/bin/mode/css/scss_test.js +110 -0
  38. data/bin/mode/css/test.js +217 -0
  39. data/bin/mode/htmlembedded/htmlembedded.js +37 -0
  40. data/bin/mode/htmlembedded/index.html +60 -0
  41. data/bin/mode/htmlmixed/htmlmixed.js +153 -0
  42. data/bin/mode/htmlmixed/index.html +100 -0
  43. data/bin/mode/javascript/index.html +118 -0
  44. data/bin/mode/javascript/javascript.js +959 -0
  45. data/bin/mode/javascript/json-ld.html +72 -0
  46. data/bin/mode/javascript/test.js +521 -0
  47. data/bin/mode/javascript/typescript.html +62 -0
  48. data/bin/mode/markdown/index.html +418 -0
  49. data/bin/mode/markdown/markdown.js +886 -0
  50. data/bin/mode/markdown/test.js +1319 -0
  51. data/bin/mode/ruby/index.html +183 -0
  52. data/bin/mode/ruby/ruby.js +303 -0
  53. data/bin/mode/ruby/test.js +23 -0
  54. data/bin/mode/sass/index.html +68 -0
  55. data/bin/mode/sass/sass.js +459 -0
  56. data/bin/mode/sass/test.js +122 -0
  57. data/bin/mode/spreadsheet/index.html +42 -0
  58. data/bin/mode/spreadsheet/spreadsheet.js +112 -0
  59. data/bin/mode/xml/index.html +61 -0
  60. data/bin/mode/xml/test.js +51 -0
  61. data/bin/mode/xml/xml.js +417 -0
  62. data/bin/mode/yaml/index.html +80 -0
  63. data/bin/mode/yaml/yaml.js +120 -0
  64. data/bin/mode/yaml-frontmatter/index.html +121 -0
  65. data/bin/mode/yaml-frontmatter/yaml-frontmatter.js +72 -0
  66. data/hyde_admin.gemspec +7 -1
  67. data/lib/hyde_admin/version.rb +1 -1
  68. metadata +131 -7
  69. data/bin/admin_views/edit.erb +0 -57
  70. data/bin/admin_views/listing.erb +0 -32
  71. data/bin/hyde_admin.sh +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 86a33a78224ec1d89dfeeff5a08fe950a70239c86619da735ec6334077e09a70
4
- data.tar.gz: 6e2e187ee97382f101be3cc47de763dd0d2b9d8afc5856d546d9c02b60a088c1
3
+ metadata.gz: 8ef51602655e92300fd16efb61fc625738e962b8708146c702666fefe759d582
4
+ data.tar.gz: 695738c9eb64ff85aaa643fb2b06ac8219d9ed1abec97cd9fc2ca7a4b99014f8
5
5
  SHA512:
6
- metadata.gz: 1591e20b85a070ea7d992233c0e63b1f92283392b1f713f1754be3fdc5669dc7cd2476404c4a266ac1ab2f3d9a5dfb805e23a1c5f63c5ab8b8374d17818f9318
7
- data.tar.gz: 0f99763e3a04d7829c4768da18cfc0fab9b6d6a0ee80a2fb47faf0f08aecd214be58dd12c1897e44572adeed602b04d9c467d6fcbbd17509a2a51fd12059673b
6
+ metadata.gz: 1076b6a7a5cd25e24715a5bfc27f5cc7ddb2f2a88c3406d6ca2affeb45e391cab4e74f734ef0036a6c33ae1f2fa61e977b63e8446cd26139aacafabcacbbde7e
7
+ data.tar.gz: 29719bfc0e10609a22b45590031c5e4fea57d9e190ba158a186d2fa523953d0c37df8e204ff8d846296b915fb108d9a0a7d61b0bb2ae8b9991dccc2175d0c519
data/.gitattributes ADDED
@@ -0,0 +1,3 @@
1
+ bin/fslightbox/* linguist-vendored
2
+ bin/lib/* linguist-vendored
3
+ bin/mode/*/* linguist-vendored
data/.idea/hyde_admin.iml CHANGED
@@ -11,6 +11,8 @@
11
11
  </content>
12
12
  <orderEntry type="inheritedJdk" />
13
13
  <orderEntry type="sourceFolder" forTests="false" />
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="i18n (v1.8.10, RVM: ruby-2.7.0) [gem]" level="application" />
14
16
  </component>
15
17
  <component name="RModuleSettingsStorage">
16
18
  <LOAD_PATH number="0" />
data/.idea/vcs.xml ADDED
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
+ </component>
6
+ </project>
data/CHANGELOG.md ADDED
@@ -0,0 +1,35 @@
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
+
19
+ # 0.0.4
20
+
21
+ Correct images selector
22
+ Some refactoring
23
+ Escape translations
24
+
25
+ # 0.0.3
26
+
27
+ Bugfix (see commits)
28
+
29
+ # 0.0.2
30
+
31
+ First usable version
32
+
33
+ # 0.0.1
34
+
35
+ PoC
data/README.md ADDED
@@ -0,0 +1,23 @@
1
+ ## Getting Started with Hyde Admin
2
+
3
+ Add
4
+
5
+ `gem 'hyde_admin'`
6
+
7
+ In the Gemfile of your jekyll site.
8
+
9
+ Run
10
+
11
+ `bundle update`
12
+
13
+ When run
14
+
15
+ `hyde_admin`
16
+
17
+ in your jekyll directory.
18
+ You can visit localhost:9292 !
19
+
20
+ hyde_admin.yml is automatically generated in your jekyll directory.
21
+ (you can change settings with hyde_admin ou directly)
22
+
23
+ Hyde_admin allow ssh deployment.
data/TODO.md ADDED
@@ -0,0 +1,3 @@
1
+ Overview btn for posts/drafts/pages (save && rebuild && open in new tab)
2
+ See TINYmce for wysiwyg editor
3
+ Add defaults class for images injected by editor
@@ -1,5 +1,5 @@
1
1
  <!DOCTYPE html>
2
- <html lang="en">
2
+ <html lang="<%= @hyde_parameters['hyde_admin_language'] %>">
3
3
  <head>
4
4
  <meta charset="utf-8">
5
5
  <title>Hyde for Jekyll</title>
@@ -11,121 +11,217 @@
11
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
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
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
-
14
+
15
+ <script src="/lib/codemirror.js"></script>
16
+ <link rel="stylesheet" href="/lib/codemirror.css">
17
+ <script src="/mode/javascript/javascript.js"></script>
18
+ <script src="/mode/css/css.js"></script>
19
+ <script src="/mode/sass/sass.js"></script>
20
+ <script src="/mode/ruby/ruby.js"></script>
21
+ <script src="/mode/yaml/yaml.js"></script>
22
+ <script src="/mode/xml/xml.js"></script>
23
+ <script src="/mode/markdown/markdown.js"></script>
24
+ <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
25
+
26
+ <link rel="stylesheet" href="/hyde_assets/hyde_admin.css">
27
+ <script src="/hyde_assets/hyde_admin.js"></script>
15
28
  </head>
16
29
  <body>
17
-
18
- <div class="container-fluid">
19
- <div class="row">
20
- <nav id="sidebarMenu" class="col-md-3 col-lg-2 d-md-block bg-light sidebar collapse">
21
- <div class="position-sticky pt-3">
22
- <ul class="nav flex-column">
23
- <li class="nav-item">
24
- <a class="nav-link active" aria-current="page" href="/">
25
- <span data-feather="home"></span>
26
- Site
27
- </a>
28
- </li>
29
- <li class="nav-item">
30
- <a class="nav-link active" aria-current="page" href="/dashboard">
31
- <span data-feather="home"></span>
32
- <%= t.dashboard %>
33
- </a>
34
- </li>
35
- <li class="nav-item">
36
- <a class="nav-link active" aria-current="page" href="/deploy">
37
- <span data-feather="home"></span>
38
- <%= t.deploy %>
39
- </a>
40
- </li>
41
- <li class="nav-item">
42
- <a class="nav-link active" aria-current="page" href="/rebuild">
43
- <span data-feather="home"></span>
44
- <%= t.rebuild %>
45
- </a>
46
- </li>
47
- <li class="nav-item">
48
- <a class="nav-link" href="/pages/index">
49
- <span data-feather="file"></span>
50
- <%= t.pages %>
51
- </a>
52
- </li>
53
- <li class="nav-item">
54
- <a class="nav-link" href="/drafts/index">
55
- <span data-feather="shopping-cart"></span>
56
- <%= t.drafts %>
57
- </a>
58
- </li>
59
- <li class="nav-item">
60
- <a class="nav-link" href="/posts/index">
61
- <span data-feather="users"></span>
62
- <%= t.posts %>
63
- </a>
64
- </li>
65
- <li class="nav-item">
66
- <a class="nav-link" href="/configuration">
67
- <span data-feather="layers"></span>
68
- <%= t.configuration %>
69
- </a>
70
- </li>
71
- </ul>
72
-
73
- <!--
74
- <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted">
75
- <span>Saved reports</span>
76
- <a class="link-secondary" href="#" aria-label="Add a new report">
77
- <span data-feather="plus-circle"></span>
78
- </a>
79
- </h6>
80
- <ul class="nav flex-column mb-2">
81
- <li class="nav-item">
82
- <a class="nav-link" href="#">
83
- <span data-feather="file-text"></span>
84
- Current month
85
- </a>
86
- </li>
87
- <li class="nav-item">
88
- <a class="nav-link" href="#">
89
- <span data-feather="file-text"></span>
90
- Last quarter
91
- </a>
92
- </li>
93
- <li class="nav-item">
94
- <a class="nav-link" href="#">
95
- <span data-feather="file-text"></span>
96
- Social engagement
97
- </a>
98
- </li>
99
- <li class="nav-item">
100
- <a class="nav-link" href="#">
101
- <span data-feather="file-text"></span>
102
- Year-end sale
103
- </a>
104
- </li>
105
- </ul>
106
- -->
30
+ <div class="container-fluid">
31
+ <div class="row">
32
+ <nav id="sidebarMenu" class="col-md-3 col-lg-2 d-md-block bg-light sidebar collapse">
33
+ <div class="position-sticky pt-3">
34
+ <ul class="nav flex-column">
35
+ <li class="nav-item">
36
+ </li>
37
+ <li class="nav-item">
38
+ <a class="nav-link active" aria-current="page" href="/dashboard">
39
+ <span data-feather="home" class="fas fa-tachometer-alt"></span>
40
+ <%= EscapeUtils.escape_html t.dashboard.capitalize %>
41
+ </a>
42
+ </li>
43
+ <li class="nav-item">
44
+ <a class="nav-link" href="/pages/index">
45
+ <span data-feather="file" class="fas fa-file"></span>
46
+ <%= EscapeUtils.escape_html t.pages.capitalize %>
47
+ </a>
48
+ </li>
49
+ <li class="nav-item">
50
+ <a class="nav-link" href="/drafts/index">
51
+ <span data-feather="shopping-cart" class="fas fa-file"></span>
52
+ <%= EscapeUtils.escape_html t.drafts.capitalize %>
53
+ </a>
54
+ </li>
55
+ <li class="nav-item">
56
+ <a class="nav-link" href="/posts/index">
57
+ <span data-feather="users" class="fas fa-file"></span>
58
+ <%= EscapeUtils.escape_html t.posts.capitalize %>
59
+ </a>
60
+ </li>
61
+ <li class="nav-item">
62
+ <a class="nav-link" href="/files/index">
63
+ <span data-feather="users" class="fas fa-copy"></span>
64
+ <%= EscapeUtils.escape_html t.files.capitalize %>
65
+ </a>
66
+ </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
+ <li class="nav-item">
76
+ <a class="nav-link active" aria-current="page" href="/rebuild" id="btn-rebuild">
77
+ <span data-feather="home" class="fas fa-hammer"></span>
78
+ <%= EscapeUtils.escape_html t.rebuild.capitalize %>
79
+ </a>
80
+ </li>
81
+ <li class="nav-item">
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
+ </a>
86
+ </li>
87
+ <li class="nav-item">
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 %>
91
+ </a>
92
+ </li>
93
+ </ul>
94
+ <p class="text-center text-muted"><br><br><em>Hyde Admin V.<%= HydeAdmin::VERSION %></em>&nbsp;&nbsp;&nbsp;<a href="https://github.com/rivsc/hyde_admin" class="link-secondary"><i class="fab fa-github"></i></a></p>
95
+ </div>
96
+ </nav>
97
+ <main class="col-md-9 ms-sm-auto col-lg-10 px-md-4">
98
+ <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
99
+ <h1 class="h2">Hyde Admin for Jekyll</h1>
100
+ <!--
101
+ <div class="btn-toolbar mb-2 mb-md-0">
102
+ <div class="btn-group me-2">
103
+ <button type="button" class="btn btn-sm btn-outline-secondary"><%= t.backup_zip %></button>
104
+ <button type="button" class="btn btn-sm btn-outline-secondary">Export</button>
105
+ </div>
106
+ <button type="button" class="btn btn-sm btn-outline-secondary dropdown-toggle">
107
+ <span data-feather="calendar"></span>
108
+ This week
109
+ </button>
110
+ </div>
111
+ -->
112
+ </div>
113
+ <%= yield %>
114
+ </main>
107
115
  </div>
108
- </nav>
116
+ </div>
117
+
118
+ <div id="waiting" style="width:100vw;height:100vh;display:none;text-align:center;background-color:rgba(0,0,0,0.5);position: fixed;top:0px;left:0px">
119
+ <i class="fas fa-circle-notch fa-10x fa-spin" style="margin-top:40vh;"></i>
120
+ </div>
109
121
 
110
- <main class="col-md-9 ms-sm-auto col-lg-10 px-md-4">
111
- <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
112
- <h1 class="h2">Dashboard</h1>
113
- <div class="btn-toolbar mb-2 mb-md-0">
114
- <div class="btn-group me-2">
115
- <button type="button" class="btn btn-sm btn-outline-secondary">Share</button>
116
- <button type="button" class="btn btn-sm btn-outline-secondary">Export</button>
122
+ <div class="modal modal-image" tabindex="-1" role="dialog">
123
+ <div class="modal-dialog" role="document">
124
+ <div class="modal-content">
125
+ <div class="modal-header">
126
+ <h5 class="modal-title"><%= t.images.capitalize %></h5>
127
+ <!--
128
+ <button type="button" class="btn btn-default close" data-dismiss="modal" aria-label="Close">
129
+ <span aria-hidden="true">&times;</span>
130
+ </button>
131
+ -->
132
+ <button type="button" class="btn btn-outline-secondary btn-sm load-image">
133
+ <%= t.load_images.capitalize %>
134
+ </button>
135
+ </div>
136
+ <div class="modal-body">
137
+ <div>
138
+ <div class="image-selector-search d-block" data-page="0">
139
+ <form action="" class="form-inline">
140
+ <div class="form-group mb-2">
141
+ <label>
142
+ <input class="form-check-input" type="radio" name="sort_date" value="asc"> <%= EscapeUtils.escape_html t.newer.capitalize %>
143
+ </label>
144
+ &nbsp;&nbsp;&nbsp;
145
+ <label>
146
+ <input class="form-check-input" type="radio" name="sort_date" value="desc" checked> <%= EscapeUtils.escape_html t.older.capitalize %>
147
+ </label>
148
+ </div>
149
+ <div class="form-group mb-2">
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 %>">
152
+ </div>
153
+ <button type="submit" class="btn btn-primary image-selector-search-submit d-block mb-2"><%= EscapeUtils.escape_html t.search.capitalize %></button>
154
+ </form>
155
+ </div>
156
+ <div class="image-selector-content">
157
+ <% path = File.join(Pathname.new(Mid.gem_source_path), 'admin_views', 'partials', 'images_page.html.erb') %>
158
+ <%= ERB.new(File.read(path)).result(binding) %>
159
+ </div>
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">
162
+ <i class="fas fa-chevron-left"></i>
163
+ </a>
164
+ <a href="#" title="<%= EscapeUtils.escape_html t.next_images %>" class="btn btn-secondary image-selector-page-next px-4">
165
+ <i class="fas fa-chevron-right"></i>
166
+ </a>
167
+ </div>
168
+ </div>
117
169
  </div>
118
- <button type="button" class="btn btn-sm btn-outline-secondary dropdown-toggle">
119
- <span data-feather="calendar"></span>
120
- This week
121
- </button>
122
170
  </div>
123
171
  </div>
124
- <%= yield %>
172
+ </div>
173
+
174
+ <script type="text/javascript" charset="utf-8">
175
+ <% if @file %>
176
+ if(window.document.getElementById('i-content')){
177
+ window.myCodeMirror = CodeMirror.fromTextArea(window.document.getElementById('i-content'), {
178
+ lineNumbers: true,
179
+ tabSize: 2,
180
+ indentWithTabs: false,
181
+ mode: "<%= {'.js' => 'javascript', '.json' => 'javascript', '.xml' => 'xml', '.svg' => 'xml', '.css' => 'css', '.yml' => 'yaml', '.sass' => 'sass', '.rb' => 'ruby', '.md' => 'markdown'}[File.extname(@file)] || 'markdown' %>"
182
+ });
183
+ }
184
+ <% end %>
185
+
186
+ function search(offset_page){
187
+ let sort_date = $('.image-selector-search input[name=sort_date]:checked').val();
188
+ let filename = $('.image-selector-search input[name=filename]').val();
189
+ let page = $('.image-selector-search').attr('data-page');
190
+ let new_page = parseInt(page) + offset_page;
191
+
192
+ if(new_page < 0){
193
+ new_page = 0;
194
+ }
195
+
196
+ $.post( "/ajax/images", { sort_date: sort_date, filename: filename, page: new_page })
197
+ .done(function( data ) {
198
+ $('.image-selector-content').html(data);
199
+ });
125
200
 
126
- </main>
127
- </div>
128
- </div>
201
+ $('.image-selector-search').attr('data-page', new_page);
202
+ return false;
203
+ }
129
204
 
205
+ $(document).on('click', '.image-selector-search-submit', function(){
206
+ search(0);
207
+ return false;
208
+ });
209
+ $(document).on('click', '.image-selector-page-prev', function(){
210
+ search(-1);
211
+ return false;
212
+ });
213
+ $(document).on('click', '.image-selector-page-next', function(){
214
+ search(1);
215
+ return false;
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
+ }
224
+ </script>
225
+ <script src="/fslightbox/fslightbox.js"></script>
130
226
  </body>
131
227
  </html>
@@ -0,0 +1,13 @@
1
+ <h2><%= EscapeUtils.escape_html t.configuration.capitalize %></h2>
2
+
3
+ <form action="/configuration" method="post">
4
+ <% @hyde_parameters.each_pair do |setting, value| %>
5
+ <div class="mb-3">
6
+ <label for="i-<%= setting %>" class="form-label"><%= EscapeUtils.escape_html t.send(setting).capitalize %></label>
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>
9
+ </div>
10
+ <% end %>
11
+ <button type="submit" class="btn btn-primary"><%= EscapeUtils.escape_html t.submit.capitalize %></button>
12
+ </form>
13
+
@@ -1 +1 @@
1
- dashboard
1
+ <h2><%= EscapeUtils.escape_html t.dashboard.capitalize %></h2>
@@ -0,0 +1,24 @@
1
+ <div class="codemirror-toolbar btn-toolbar" role="toolbar">
2
+ <div class="btn-group mr-2" role="group" aria-label="Undo/redo">
3
+ <button type="button" class="btn btn-light"><i class="fas fa-undo-alt" title="<%= EscapeUtils.escape_html t.editor_undo %>"></i></button>
4
+ <button type="button" class="btn btn-light"><i class="fas fa-redo-alt" title="<%= EscapeUtils.escape_html t.editor_redo %>"></i></button>
5
+ </div>
6
+ <div class="btn-group mr-2" role="group" aria-label="Structural tags">
7
+ <button type="button" class="btn btn-light"><i class="fas fa-file-image" title="<%= EscapeUtils.escape_html t.editor_file %>"></i></button>
8
+ <button type="button" class="btn btn-light"><i class="fas fa-list cmt-replace" title="<%= EscapeUtils.escape_html t.editor_list %>"></i></button>
9
+ <button type="button" class="btn btn-light"><i class="fas fa-list-ol cmt-replace" title="<%= EscapeUtils.escape_html t.editor_list_ol %>"></i></button>
10
+ <button type="button" class="btn btn-light"><i class="fas fa-link cmt-replace" title="<%= EscapeUtils.escape_html t.editor_link %>"></i></button>
11
+ <button type="button" class="btn btn-light"><i class="fas fa-quote-left cmt-replace" title="<%= EscapeUtils.escape_html t.editor_quote %>"></i></button>
12
+ </div>
13
+ <div class="btn-group mr-2" role="group" aria-label="Style tags">
14
+ <button type="button" class="btn btn-light"><i class="fas fa-heading cmt-heading-1" title="<%= EscapeUtils.escape_html t.editor_title_h1 %>">1</i></button>
15
+ <button type="button" class="btn btn-light"><i class="fas fa-heading cmt-heading-2" title="<%= EscapeUtils.escape_html t.editor_title_h2 %>">2</i></button>
16
+ <button type="button" class="btn btn-light"><i class="fas fa-heading cmt-heading-3" title="<%= EscapeUtils.escape_html t.editor_title_h3 %>">3</i></button>
17
+ <button type="button" class="btn btn-light"><i class="fas fa-heading cmt-heading-4" title="<%= EscapeUtils.escape_html t.editor_title_h4 %>">4</i></button>
18
+ <button type="button" class="btn btn-light"><i class="fas fa-heading cmt-heading-5" title="<%= EscapeUtils.escape_html t.editor_title_h5 %>">5</i></button>
19
+ <button type="button" class="btn btn-light"><i class="fas fa-underline cmt-replace" title="<%= EscapeUtils.escape_html t.editor_underline %>"></i></button>
20
+ <button type="button" class="btn btn-light"><i class="fas fa-bold cmt-replace" title="<%= EscapeUtils.escape_html t.editor_bold %>"></i></button>
21
+ <button type="button" class="btn btn-light"><i class="fas fa-italic cmt-replace" title="<%= EscapeUtils.escape_html t.editor_italic %>"></i></button>
22
+ <button type="button" class="btn btn-light"><i class="fas fa-strikethrough cmt-replace" title="<%= EscapeUtils.escape_html t.editor_strikethrough %>"></i></button>
23
+ </div>
24
+ </div>
@@ -0,0 +1,120 @@
1
+ $(document).on('click', '.codemirror-toolbar .fa-undo-alt', function(){
2
+ window.myCodeMirror.undo();
3
+ });
4
+ $(document).on('click', '.codemirror-toolbar .fa-redo-alt', function(){
5
+ window.myCodeMirror.redo();
6
+ });
7
+ $(document).on('click', '.codemirror-toolbar .fa-file-image', function(){
8
+ $('.modal-image').modal('show');
9
+ });
10
+ $(document).on('click', '.modal-image img', function(){
11
+ let img_src = '<img src="' + $(this).attr('src') + '" alt="<%= EscapeUtils.escape_html t.default_alt_img %>" title="<%= EscapeUtils.escape_html t.default_title_img %>" />';
12
+ if(window.mode_markdown){
13
+ img_src = '![<%= EscapeUtils.escape_html t.default_alt_img %>](' + $(this).attr('src') + ')';
14
+ }
15
+ window.myCodeMirror.replaceSelection(img_src);
16
+ $('.modal-image').modal('hide');
17
+ });
18
+ $(document).on('click', '.codemirror-toolbar .fa-heading', function(){
19
+ let obj_cursor = window.myCodeMirror.getCursor();
20
+
21
+ let heading_number = 0;
22
+ if($(this).hasClass('cmt-heading-1')){
23
+ heading_number = 1;
24
+ }else if($(this).hasClass('cmt-heading-2')){
25
+ heading_number = 2;
26
+ }else if($(this).hasClass('cmt-heading-3')){
27
+ heading_number = 3;
28
+ }else if($(this).hasClass('cmt-heading-4')){
29
+ heading_number = 4;
30
+ }else if($(this).hasClass('cmt-heading-5')){
31
+ heading_number = 5;
32
+ }
33
+
34
+ let begin_str = '<h' + heading_number + '>';
35
+ let end_str = '</h' + heading_number + '>';
36
+ if(window.mode_markdown){
37
+ begin_str = '#';
38
+ for (let i = 1; i < heading_number; i++) {
39
+ begin_str = begin_str + '#';
40
+ }
41
+ begin_str = begin_str + ' ';
42
+ end_str = '';
43
+ }
44
+ window.myCodeMirror.replaceSelection(begin_str + window.myCodeMirror.getSelection() + end_str);
45
+ if(!window.myCodeMirror.somethingSelected()){
46
+ window.myCodeMirror.setCursor({ line: obj_cursor.line, ch: obj_cursor.ch + begin_str.length });
47
+ }
48
+ window.myCodeMirror.focus();
49
+ });
50
+ $(document).on('click', '.codemirror-toolbar .cmt-replace', function(){
51
+ let begin_str = '';
52
+ let end_str = '';
53
+
54
+ if($(this).hasClass('fa-underline')){
55
+ begin_str = '<u>';
56
+ end_str = '</u>';
57
+ /*if(window.mode_markdown){
58
+ begin_str = '';
59
+ end_str = '';
60
+ }*/
61
+ }else if($(this).hasClass('fa-bold')){
62
+ begin_str = '<b>';
63
+ end_str = '</b>';
64
+ if(window.mode_markdown){
65
+ begin_str = '**';
66
+ end_str = '**';
67
+ }
68
+ }else if($(this).hasClass('fa-italic')){
69
+ begin_str = '<i>';
70
+ end_str = '</i>';
71
+ if(window.mode_markdown){
72
+ begin_str = '*';
73
+ end_str = '*';
74
+ }
75
+ }else if($(this).hasClass('fa-strikethrough')){
76
+ begin_str = '<s>';
77
+ end_str = '</s>';
78
+ if(window.mode_markdown){
79
+ begin_str = '~~';
80
+ end_str = '~~';
81
+ }
82
+ }else if($(this).hasClass('fa-link')){
83
+ begin_str = '<a href="https://www.example.com/">';
84
+ end_str = '</a>';
85
+ if(window.mode_markdown){
86
+ begin_str = '[';
87
+ end_str = '](https://www.example.com/)';
88
+ }
89
+ }else if($(this).hasClass('fa-quote-left')){
90
+ begin_str = '<blockquote>\n <p>';
91
+ end_str = '</p>\n</blockquote>';
92
+ if(window.mode_markdown){
93
+ begin_str = '>';
94
+ end_str = '';
95
+ }
96
+ }else if($(this).hasClass('fa-list')){
97
+ begin_str = '<ul>\n <li>';
98
+ end_str = '</li>\n</ul>';
99
+ if(window.mode_markdown){
100
+ begin_str = '- ';
101
+ end_str = '';
102
+ }
103
+ }else if($(this).hasClass('fa-list-ol')){
104
+ begin_str = '<ol>\n <li>';
105
+ end_str = '</li>\n</ol>';
106
+ if(window.mode_markdown){
107
+ begin_str = '1. ';
108
+ end_str = '';
109
+ }
110
+ }
111
+
112
+ let obj_cursor = window.myCodeMirror.getCursor();
113
+ window.myCodeMirror.replaceSelection(begin_str + window.myCodeMirror.getSelection() + end_str);
114
+ if(!window.myCodeMirror.somethingSelected()){
115
+ let moreline = (begin_str.split('\n').length > 1 ? begin_str.split('\n').length / 2 : 0);
116
+ let morech = (moreline > 0 ? begin_str.split('\n')[begin_str.split('\n').length - 1].length : begin_str.length);
117
+ window.myCodeMirror.setCursor({ line: obj_cursor.line + moreline, ch: obj_cursor.ch + morech });
118
+ }
119
+ window.myCodeMirror.focus();
120
+ });
@@ -0,0 +1,30 @@
1
+ <h2><%= EscapeUtils.escape_html t.edit.capitalize %></h2>
2
+
3
+ <form action="/files/update?file=<%= @file %>" method="post">
4
+ <% if @has_header %>
5
+ <div class="mb-3">
6
+ <label for="i-header" class="form-label"><%= EscapeUtils.escape_html t.header.capitalize %></label>
7
+ <textarea class="form-control text-editor" id="i-header" rows="3" name="header" style="font-family: <%= (['.html', '.xml', '.yml', '.js', '.md'].include?(File.extname(@file)) ? 'monospace' : 'inherit') %>"><%= @header %></textarea>
8
+ </div>
9
+ <% end %>
10
+ <div class="mb-3">
11
+ <label for="i-content" class="form-label"><%= EscapeUtils.escape_html t.content.capitalize %>
12
+ <% if ['.html','.md'].include?(File.extname(@file)) %>
13
+ <a href="https://jekyllrb.com/docs/liquid/" class="text-secondary" target="_blank"><i class="fas fa-question-circle"></i></a>
14
+ <% end %>
15
+ </label>
16
+
17
+ <% if @has_editor %>
18
+ <% path = File.join(Pathname.new(Mid.gem_source_path), 'admin_views', 'editor_html.erb') %>
19
+ <%= ERB.new(File.read(path)).result(binding) %>
20
+ <% end %>
21
+
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
+
24
+ <script type="text/javascript" charset="utf-8">
25
+ <% path = File.join(Pathname.new(Mid.gem_source_path), 'admin_views', 'editor_js.erb') %>
26
+ <%= ERB.new(File.read(path)).result(binding) %>
27
+ </script>
28
+ </div>
29
+ <button type="submit" class="btn btn-primary"><%= EscapeUtils.escape_html t.submit.capitalize %></button>
30
+ </form>