jekyll-admin 0.10.0 → 0.10.1

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 (56) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE +21 -21
  3. data/README.md +94 -94
  4. data/lib/jekyll-admin.rb +47 -47
  5. data/lib/jekyll-admin/apiable.rb +224 -224
  6. data/lib/jekyll-admin/data_file.rb +106 -106
  7. data/lib/jekyll-admin/directory.rb +72 -72
  8. data/lib/jekyll-admin/file_helper.rb +91 -91
  9. data/lib/jekyll-admin/path_helper.rb +87 -87
  10. data/lib/jekyll-admin/public/asset-manifest.json +27 -0
  11. data/lib/jekyll-admin/public/index.html +1 -13
  12. data/lib/jekyll-admin/public/precache-manifest.52de67482747a1012d0d27a209b930d0.js +78 -0
  13. data/lib/jekyll-admin/public/service-worker.js +39 -0
  14. data/lib/jekyll-admin/public/static/css/2.b74256fb.chunk.css +2 -0
  15. data/lib/jekyll-admin/public/static/css/2.b74256fb.chunk.css.map +1 -0
  16. data/lib/jekyll-admin/public/static/css/main.223e267c.chunk.css +5 -0
  17. data/lib/jekyll-admin/public/static/css/main.223e267c.chunk.css.map +1 -0
  18. data/lib/jekyll-admin/public/static/js/2.49911da2.chunk.js +3 -0
  19. data/lib/jekyll-admin/public/static/js/2.49911da2.chunk.js.LICENSE.txt +67 -0
  20. data/lib/jekyll-admin/public/static/js/2.49911da2.chunk.js.map +1 -0
  21. data/lib/jekyll-admin/public/static/js/main.dd81e877.chunk.js +2 -0
  22. data/lib/jekyll-admin/public/static/js/main.dd81e877.chunk.js.map +1 -0
  23. data/lib/jekyll-admin/public/static/js/runtime-main.95f94e60.js +2 -0
  24. data/lib/jekyll-admin/public/static/js/runtime-main.95f94e60.js.map +1 -0
  25. data/lib/jekyll-admin/public/{1dc35d25e61d819a9c357074014867ab.ttf → static/media/fontawesome-webfont.1dc35d25.ttf} +0 -0
  26. data/lib/jekyll-admin/public/{25a32416abee198dd821b0b17a198a8f.eot → static/media/fontawesome-webfont.25a32416.eot} +0 -0
  27. data/lib/jekyll-admin/public/{c8ddf1e5e5bf3682bc7bebf30f394148.woff → static/media/fontawesome-webfont.c8ddf1e5.woff} +0 -0
  28. data/lib/jekyll-admin/public/{24c601e721ebd8279d38e2cfa0d01bc6.svg → static/media/fontawesome-webfont.d7c63908.svg} +684 -684
  29. data/lib/jekyll-admin/public/{e6cf7c6ec7c2d6f670ae9d762604cb0b.woff2 → static/media/fontawesome-webfont.e6cf7c6e.woff2} +0 -0
  30. data/lib/jekyll-admin/public/{55131026930a0cd4539d1e2fdb92722d.ttf → static/media/lato-bold.55131026.ttf} +0 -0
  31. data/lib/jekyll-admin/public/{059514c92565e4045da1a69525dd9ec0.ttf → static/media/lato-regular.059514c9.ttf} +0 -0
  32. data/lib/jekyll-admin/public/{a770b6797b68e3f8920e473eb824bac0.gif → static/media/loader-big.a770b679.gif} +0 -0
  33. data/lib/jekyll-admin/public/{12f0820c451bdc75f4d1ef97732bf6e8.woff → static/media/rw-widgets.12f0820c.woff} +0 -0
  34. data/lib/jekyll-admin/public/{792dcd18baf5f544aabcad1883d673c2.svg → static/media/rw-widgets.792dcd18.svg} +0 -0
  35. data/lib/jekyll-admin/public/{bc7c4a59f924cf037aad6e1f9edba366.eot → static/media/rw-widgets.bc7c4a59.eot} +0 -0
  36. data/lib/jekyll-admin/public/{eceddf474df95d8d4a7e316668c3be85.ttf → static/media/rw-widgets.eceddf47.ttf} +0 -0
  37. data/lib/jekyll-admin/server.rb +108 -108
  38. data/lib/jekyll-admin/server/collections.rb +89 -89
  39. data/lib/jekyll-admin/server/configuration.rb +60 -60
  40. data/lib/jekyll-admin/server/data.rb +84 -84
  41. data/lib/jekyll-admin/server/drafts.rb +114 -114
  42. data/lib/jekyll-admin/server/pages.rb +109 -109
  43. data/lib/jekyll-admin/server/site_meta.rb +25 -25
  44. data/lib/jekyll-admin/server/static_files.rb +83 -83
  45. data/lib/jekyll-admin/static_server.rb +26 -26
  46. data/lib/jekyll-admin/urlable.rb +75 -75
  47. data/lib/jekyll-admin/version.rb +5 -5
  48. data/lib/jekyll/commands/serve.rb +30 -30
  49. metadata +30 -22
  50. data/lib/jekyll-admin/public/33a752211d05af6684e26ec63c2ed965.gif +0 -0
  51. data/lib/jekyll-admin/public/8b4968b70019a0551a72940c5a2020d3.png +0 -0
  52. data/lib/jekyll-admin/public/8ea28ca3bfdf27145068e81dd07a34c6.png +0 -0
  53. data/lib/jekyll-admin/public/bundle.js +0 -64
  54. data/lib/jekyll-admin/public/bundle.js.map +0 -1
  55. data/lib/jekyll-admin/public/styles.css +0 -106
  56. data/lib/jekyll-admin/public/styles.css.map +0 -1
@@ -1,25 +1,25 @@
1
- # frozen_string_literal: true
2
-
3
- module JekyllAdmin
4
- class Server < Sinatra::Base
5
- # Jekyll::Site instance method names that return a Hash.
6
- META_KEYS = [:categories, :layouts, :tags].freeze
7
- private_constant :META_KEYS
8
-
9
- namespace "/site_meta" do
10
- get "/?" do
11
- json site_meta
12
- end
13
-
14
- private
15
-
16
- # Stash a Hash generated with pre-determined keys.
17
- def site_meta
18
- @site_meta ||= META_KEYS.zip(META_KEYS.map { |k| site.send(k).keys }).to_h
19
- end
20
-
21
- # Reset memoization of `#site_meta` when the site regenerates
22
- Jekyll::Hooks.register(:site, :after_reset) { @site_meta = nil }
23
- end
24
- end
25
- end
1
+ # frozen_string_literal: true
2
+
3
+ module JekyllAdmin
4
+ class Server < Sinatra::Base
5
+ # Jekyll::Site instance method names that return a Hash.
6
+ META_KEYS = [:categories, :layouts, :tags].freeze
7
+ private_constant :META_KEYS
8
+
9
+ namespace "/site_meta" do
10
+ get "/?" do
11
+ json site_meta
12
+ end
13
+
14
+ private
15
+
16
+ # Stash a Hash generated with pre-determined keys.
17
+ def site_meta
18
+ @site_meta ||= META_KEYS.zip(META_KEYS.map { |k| site.send(k).keys }).to_h
19
+ end
20
+
21
+ # Reset memoization of `#site_meta` when the site regenerates
22
+ Jekyll::Hooks.register(:site, :after_reset) { @site_meta = nil }
23
+ end
24
+ end
25
+ end
@@ -1,83 +1,83 @@
1
- # frozen_string_literal: true
2
-
3
- module JekyllAdmin
4
- class Server < Sinatra::Base
5
- namespace "/static_files" do
6
- # End-point to retrieve all static-files in site
7
- get "/index" do
8
- json site.static_files.map(&:to_api)
9
- end
10
-
11
- # End-point to retrieve individual directories that contain static-files
12
- get "/?*" do
13
- render_404 unless File.exist?(path)
14
-
15
- if requested_file
16
- json requested_file.to_api(:include_content => true)
17
- else
18
- json entries.map(&:to_api)
19
- end
20
- end
21
-
22
- put "/*" do
23
- if renamed?
24
- ensure_requested_file
25
- delete_file_without_process path
26
- end
27
-
28
- write_file(write_path, static_file_body)
29
- json written_file.to_api(:include_content => true)
30
- end
31
-
32
- delete "/*" do
33
- ensure_requested_file
34
- delete_file path
35
- content_type :json
36
- status 200
37
- halt
38
- end
39
-
40
- private
41
-
42
- # returns relative path of root level directories that contain static files
43
- def dirs_at_root
44
- static_files.map do |file|
45
- File.dirname(file.path.sub("#{site.source}/", "")).split("/")[0]
46
- end.uniq
47
- end
48
-
49
- def directory_files
50
- static_files.find_all do |file|
51
- sanitized_path(File.dirname(file.path)) == directory_path
52
- end
53
- end
54
-
55
- def entries
56
- splat = params["splat"].first
57
- args = {
58
- :base => site.source,
59
- :content_type => "static_files",
60
- :splat => splat,
61
- }
62
- # get all directories inside the requested directory
63
- directory = JekyllAdmin::Directory.new(directory_path, args)
64
- directories = directory.directories
65
-
66
- # exclude root level directories which do not have static files
67
- directories = directories.select { |d| dirs_at_root.include? d.name.to_s } if splat.empty?
68
- directories.concat(directory_files)
69
- end
70
-
71
- def static_file_body
72
- raw_content = request_payload["raw_content"]
73
- return raw_content if raw_content.is_a?(String) && raw_content != ""
74
-
75
- Base64.decode64 request_payload["encoded_content"].to_s
76
- end
77
-
78
- def static_files
79
- site.static_files.select { |f| f.path.start_with? site.source }
80
- end
81
- end
82
- end
83
- end
1
+ # frozen_string_literal: true
2
+
3
+ module JekyllAdmin
4
+ class Server < Sinatra::Base
5
+ namespace "/static_files" do
6
+ # End-point to retrieve all static-files in site
7
+ get "/index" do
8
+ json site.static_files.map(&:to_api)
9
+ end
10
+
11
+ # End-point to retrieve individual directories that contain static-files
12
+ get "/?*" do
13
+ render_404 unless File.exist?(path)
14
+
15
+ if requested_file
16
+ json requested_file.to_api(:include_content => true)
17
+ else
18
+ json entries.map(&:to_api)
19
+ end
20
+ end
21
+
22
+ put "/*" do
23
+ if renamed?
24
+ ensure_requested_file
25
+ delete_file_without_process path
26
+ end
27
+
28
+ write_file(write_path, static_file_body)
29
+ json written_file.to_api(:include_content => true)
30
+ end
31
+
32
+ delete "/*" do
33
+ ensure_requested_file
34
+ delete_file path
35
+ content_type :json
36
+ status 200
37
+ halt
38
+ end
39
+
40
+ private
41
+
42
+ # returns relative path of root level directories that contain static files
43
+ def dirs_at_root
44
+ static_files.map do |file|
45
+ File.dirname(file.path.sub("#{site.source}/", "")).split("/")[0]
46
+ end.uniq
47
+ end
48
+
49
+ def directory_files
50
+ static_files.find_all do |file|
51
+ sanitized_path(File.dirname(file.path)) == directory_path
52
+ end
53
+ end
54
+
55
+ def entries
56
+ splat = params["splat"].first
57
+ args = {
58
+ :base => site.source,
59
+ :content_type => "static_files",
60
+ :splat => splat,
61
+ }
62
+ # get all directories inside the requested directory
63
+ directory = JekyllAdmin::Directory.new(directory_path, args)
64
+ directories = directory.directories
65
+
66
+ # exclude root level directories which do not have static files
67
+ directories = directories.select { |d| dirs_at_root.include? d.name.to_s } if splat.empty?
68
+ directories.concat(directory_files)
69
+ end
70
+
71
+ def static_file_body
72
+ raw_content = request_payload["raw_content"]
73
+ return raw_content if raw_content.is_a?(String) && raw_content != ""
74
+
75
+ Base64.decode64 request_payload["encoded_content"].to_s
76
+ end
77
+
78
+ def static_files
79
+ site.static_files.select { |f| f.path.start_with? site.source }
80
+ end
81
+ end
82
+ end
83
+ end
@@ -1,26 +1,26 @@
1
- # frozen_string_literal: true
2
-
3
- module JekyllAdmin
4
- class StaticServer < Sinatra::Base
5
- set :public_dir, File.expand_path("./public", File.dirname(__FILE__))
6
-
7
- MUST_BUILD_MESSAGE = "Front end not yet built. Run `script/build` to build."
8
-
9
- # Allow `/admin` and `/admin/`, and `/admin/*` to serve `/public/dist/index.html`
10
- get "/*" do
11
- send_file index_path
12
- end
13
-
14
- # Provide a descriptive error message in dev. if frontend is not build
15
- not_found do
16
- status 404
17
- MUST_BUILD_MESSAGE if settings.development? || settings.test?
18
- end
19
-
20
- private
21
-
22
- def index_path
23
- @index_path ||= File.join(settings.public_folder, "index.html")
24
- end
25
- end
26
- end
1
+ # frozen_string_literal: true
2
+
3
+ module JekyllAdmin
4
+ class StaticServer < Sinatra::Base
5
+ set :public_dir, File.expand_path("./public", File.dirname(__FILE__))
6
+
7
+ MUST_BUILD_MESSAGE = "Front end not yet built. Run `script/build` to build."
8
+
9
+ # Allow `/admin` and `/admin/`, and `/admin/*` to serve `/public/dist/index.html`
10
+ get "/*" do
11
+ send_file index_path
12
+ end
13
+
14
+ # Provide a descriptive error message in dev. if frontend is not build
15
+ not_found do
16
+ status 404
17
+ MUST_BUILD_MESSAGE if settings.development? || settings.test?
18
+ end
19
+
20
+ private
21
+
22
+ def index_path
23
+ @index_path ||= File.join(settings.public_folder, "index.html")
24
+ end
25
+ end
26
+ end
@@ -1,75 +1,75 @@
1
- # frozen_string_literal: true
2
-
3
- module JekyllAdmin
4
- # Abstract module to be included in Convertible and Document to provide
5
- # additional, URL-specific functionality without duplicating logic
6
- module URLable
7
- # Absolute URL to the HTTP(S) rendered/served representation of this resource
8
- def http_url
9
- return if is_a?(Jekyll::Collection) || is_a?(JekyllAdmin::DataFile)
10
- return if is_a?(Jekyll::Document) && !collection.write?
11
-
12
- @http_url ||= Addressable::URI.new(
13
- :scheme => scheme, :host => host, :port => port,
14
- :path => path_with_base(JekyllAdmin.site.config["baseurl"], url)
15
- ).normalize.to_s
16
- end
17
-
18
- # Absolute URL to the API representation of this resource
19
- def api_url
20
- @api_url ||= Addressable::URI.new(
21
- :scheme => scheme, :host => host, :port => port,
22
- :path => path_with_base("/_api", resource_path)
23
- ).normalize.to_s
24
- end
25
-
26
- def entries_url
27
- return unless is_a?(Jekyll::Collection)
28
-
29
- "#{api_url}/entries"
30
- end
31
-
32
- private
33
-
34
- # URL path relative to `_api/` to retreive the given resource via the API
35
- # Note: we can't use a case statement here, because === doesn't like includes
36
- #
37
- # rubocop:disable Metrics/CyclomaticComplexity
38
- # rubocop:disable Metrics/PerceivedComplexity
39
- def resource_path
40
- if is_a?(Jekyll::Document) && draft?
41
- "/#{relative_path.sub(%r!\A_!, "")}"
42
- elsif is_a?(Jekyll::Document)
43
- "/collections/#{relative_path.sub(%r!\A_!, "")}"
44
- elsif is_a?(Jekyll::Collection)
45
- "/collections/#{label}"
46
- elsif is_a?(JekyllAdmin::DataFile)
47
- "/data/#{relative_path}"
48
- elsif is_a?(Jekyll::StaticFile)
49
- "/static_files/#{relative_path}"
50
- elsif is_a?(Jekyll::Page)
51
- "/pages/#{relative_path}"
52
- end
53
- end
54
- # rubocop:enable Metrics/PerceivedComplexity
55
- # rubocop:enable Metrics/CyclomaticComplexity
56
-
57
- # URI.join doesn't like joining two relative paths, and File.join may join
58
- # with `\` rather than with `/` on windows
59
- def path_with_base(base, path)
60
- [base, path].join("/").squeeze("/")
61
- end
62
-
63
- def scheme
64
- JekyllAdmin.site.config["scheme"] || "http"
65
- end
66
-
67
- def host
68
- JekyllAdmin.site.config["host"].sub("127.0.0.1", "localhost")
69
- end
70
-
71
- def port
72
- JekyllAdmin.site.config["port"]
73
- end
74
- end
75
- end
1
+ # frozen_string_literal: true
2
+
3
+ module JekyllAdmin
4
+ # Abstract module to be included in Convertible and Document to provide
5
+ # additional, URL-specific functionality without duplicating logic
6
+ module URLable
7
+ # Absolute URL to the HTTP(S) rendered/served representation of this resource
8
+ def http_url
9
+ return if is_a?(Jekyll::Collection) || is_a?(JekyllAdmin::DataFile)
10
+ return if is_a?(Jekyll::Document) && !collection.write?
11
+
12
+ @http_url ||= Addressable::URI.new(
13
+ :scheme => scheme, :host => host, :port => port,
14
+ :path => path_with_base(JekyllAdmin.site.config["baseurl"], url)
15
+ ).normalize.to_s
16
+ end
17
+
18
+ # Absolute URL to the API representation of this resource
19
+ def api_url
20
+ @api_url ||= Addressable::URI.new(
21
+ :scheme => scheme, :host => host, :port => port,
22
+ :path => path_with_base("/_api", resource_path)
23
+ ).normalize.to_s
24
+ end
25
+
26
+ def entries_url
27
+ return unless is_a?(Jekyll::Collection)
28
+
29
+ "#{api_url}/entries"
30
+ end
31
+
32
+ private
33
+
34
+ # URL path relative to `_api/` to retreive the given resource via the API
35
+ # Note: we can't use a case statement here, because === doesn't like includes
36
+ #
37
+ # rubocop:disable Metrics/CyclomaticComplexity
38
+ # rubocop:disable Metrics/PerceivedComplexity
39
+ def resource_path
40
+ if is_a?(Jekyll::Document) && draft?
41
+ "/#{relative_path.sub(%r!\A_!, "")}"
42
+ elsif is_a?(Jekyll::Document)
43
+ "/collections/#{relative_path.sub(%r!\A_!, "")}"
44
+ elsif is_a?(Jekyll::Collection)
45
+ "/collections/#{label}"
46
+ elsif is_a?(JekyllAdmin::DataFile)
47
+ "/data/#{relative_path}"
48
+ elsif is_a?(Jekyll::StaticFile)
49
+ "/static_files/#{relative_path}"
50
+ elsif is_a?(Jekyll::Page)
51
+ "/pages/#{relative_path}"
52
+ end
53
+ end
54
+ # rubocop:enable Metrics/PerceivedComplexity
55
+ # rubocop:enable Metrics/CyclomaticComplexity
56
+
57
+ # URI.join doesn't like joining two relative paths, and File.join may join
58
+ # with `\` rather than with `/` on windows
59
+ def path_with_base(base, path)
60
+ [base, path].join("/").squeeze("/")
61
+ end
62
+
63
+ def scheme
64
+ JekyllAdmin.site.config["scheme"] || "http"
65
+ end
66
+
67
+ def host
68
+ JekyllAdmin.site.config["host"].sub("127.0.0.1", "localhost")
69
+ end
70
+
71
+ def port
72
+ JekyllAdmin.site.config["port"]
73
+ end
74
+ end
75
+ end
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
- module JekyllAdmin
4
- VERSION = "0.10.0"
5
- end
1
+ # frozen_string_literal: true
2
+
3
+ module JekyllAdmin
4
+ VERSION = "0.10.1"
5
+ end
@@ -1,30 +1,30 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Commands
5
- class Serve < Command
6
- class << self
7
- private
8
-
9
- def start_up_webrick(opts, destination)
10
- @reload_reactor.start(opts) if opts["livereload"]
11
-
12
- @server = WEBrick::HTTPServer.new(webrick_opts(opts)).tap { |o| o.unmount("") }
13
- @server.mount(opts["baseurl"].to_s, Servlet, destination, file_handler_opts)
14
-
15
- jekyll_admin_monkey_patch
16
-
17
- Jekyll.logger.info "Server address:", server_address(@server, opts)
18
- launch_browser @server, opts if opts["open_url"]
19
- boot_or_detach @server, opts
20
- end
21
-
22
- def jekyll_admin_monkey_patch
23
- @server.mount "/admin", Rack::Handler::WEBrick, JekyllAdmin::StaticServer
24
- @server.mount "/_api", Rack::Handler::WEBrick, JekyllAdmin::Server
25
- Jekyll.logger.info "JekyllAdmin mode:", ENV["RACK_ENV"] || "production"
26
- end
27
- end
28
- end
29
- end
30
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module Commands
5
+ class Serve < Command
6
+ class << self
7
+ private
8
+
9
+ def start_up_webrick(opts, destination)
10
+ @reload_reactor.start(opts) if opts["livereload"]
11
+
12
+ @server = WEBrick::HTTPServer.new(webrick_opts(opts)).tap { |o| o.unmount("") }
13
+ @server.mount(opts["baseurl"].to_s, Servlet, destination, file_handler_opts)
14
+
15
+ jekyll_admin_monkey_patch
16
+
17
+ Jekyll.logger.info "Server address:", server_address(@server, opts)
18
+ launch_browser @server, opts if opts["open_url"]
19
+ boot_or_detach @server, opts
20
+ end
21
+
22
+ def jekyll_admin_monkey_patch
23
+ @server.mount "/admin", Rack::Handler::WEBrick, JekyllAdmin::StaticServer
24
+ @server.mount "/_api", Rack::Handler::WEBrick, JekyllAdmin::Server
25
+ Jekyll.logger.info "JekyllAdmin mode:", ENV["RACK_ENV"] || "production"
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end