mbeditor 0.1.0

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 (94) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +127 -0
  3. data/app/assets/javascripts/mbeditor/application.js +19 -0
  4. data/app/assets/javascripts/mbeditor/components/CodeReviewPanel.js +202 -0
  5. data/app/assets/javascripts/mbeditor/components/CollapsibleSection.js +71 -0
  6. data/app/assets/javascripts/mbeditor/components/CombinedDiffViewer.js +139 -0
  7. data/app/assets/javascripts/mbeditor/components/CommitGraph.js +65 -0
  8. data/app/assets/javascripts/mbeditor/components/DiffViewer.js +142 -0
  9. data/app/assets/javascripts/mbeditor/components/EditorPanel.js +363 -0
  10. data/app/assets/javascripts/mbeditor/components/FileHistoryPanel.js +112 -0
  11. data/app/assets/javascripts/mbeditor/components/FileTree.js +304 -0
  12. data/app/assets/javascripts/mbeditor/components/GitPanel.js +416 -0
  13. data/app/assets/javascripts/mbeditor/components/MbeditorApp.js +2335 -0
  14. data/app/assets/javascripts/mbeditor/components/QuickOpenDialog.js +118 -0
  15. data/app/assets/javascripts/mbeditor/components/ShortcutHelp.js +186 -0
  16. data/app/assets/javascripts/mbeditor/components/TabBar.js +123 -0
  17. data/app/assets/javascripts/mbeditor/editor_plugins.js +282 -0
  18. data/app/assets/javascripts/mbeditor/editor_store.js +53 -0
  19. data/app/assets/javascripts/mbeditor/file_service.js +77 -0
  20. data/app/assets/javascripts/mbeditor/git_service.js +104 -0
  21. data/app/assets/javascripts/mbeditor/search_service.js +53 -0
  22. data/app/assets/javascripts/mbeditor/tab_manager.js +461 -0
  23. data/app/assets/stylesheets/mbeditor/application.css +705 -0
  24. data/app/assets/stylesheets/mbeditor/editor.css +1264 -0
  25. data/app/controllers/mbeditor/application_controller.rb +10 -0
  26. data/app/controllers/mbeditor/editors_controller.rb +695 -0
  27. data/app/controllers/mbeditor/git_controller.rb +188 -0
  28. data/app/services/mbeditor/git_blame_service.rb +98 -0
  29. data/app/services/mbeditor/git_commit_graph_service.rb +60 -0
  30. data/app/services/mbeditor/git_diff_service.rb +71 -0
  31. data/app/services/mbeditor/git_file_history_service.rb +42 -0
  32. data/app/services/mbeditor/git_service.rb +82 -0
  33. data/app/services/mbeditor/redmine_service.rb +86 -0
  34. data/app/views/layouts/mbeditor/application.html.erb +71 -0
  35. data/app/views/mbeditor/editors/index.html.erb +1 -0
  36. data/config/environments/development.rb +53 -0
  37. data/config/initializers/assets.rb +9 -0
  38. data/config/routes.rb +37 -0
  39. data/lib/mbeditor/configuration.rb +16 -0
  40. data/lib/mbeditor/engine.rb +28 -0
  41. data/lib/mbeditor/version.rb +3 -0
  42. data/lib/mbeditor.rb +19 -0
  43. data/mbeditor.gemspec +30 -0
  44. data/public/min-maps/vs/base/worker/workerMain.js.map +1 -0
  45. data/public/monaco-editor/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  46. data/public/monaco-editor/vs/base/worker/workerMain.js +31 -0
  47. data/public/monaco-editor/vs/basic-languages/cameligo/cameligo.js +10 -0
  48. data/public/monaco-editor/vs/basic-languages/css/css.js +12 -0
  49. data/public/monaco-editor/vs/basic-languages/dart/dart.js +10 -0
  50. data/public/monaco-editor/vs/basic-languages/flow9/flow9.js +10 -0
  51. data/public/monaco-editor/vs/basic-languages/go/go.js +10 -0
  52. data/public/monaco-editor/vs/basic-languages/handlebars/handlebars.js +440 -0
  53. data/public/monaco-editor/vs/basic-languages/javascript/javascript.js +10 -0
  54. data/public/monaco-editor/vs/basic-languages/markdown/markdown.js +10 -0
  55. data/public/monaco-editor/vs/basic-languages/msdax/msdax.js +10 -0
  56. data/public/monaco-editor/vs/basic-languages/postiats/postiats.js +10 -0
  57. data/public/monaco-editor/vs/basic-languages/pug/pug.js +412 -0
  58. data/public/monaco-editor/vs/basic-languages/restructuredtext/restructuredtext.js +10 -0
  59. data/public/monaco-editor/vs/basic-languages/ruby/ruby.js +10 -0
  60. data/public/monaco-editor/vs/basic-languages/sb/sb.js +10 -0
  61. data/public/monaco-editor/vs/basic-languages/typespec/typespec.js +10 -0
  62. data/public/monaco-editor/vs/basic-languages/yaml/yaml.js +10 -0
  63. data/public/monaco-editor/vs/editor/editor.main.css +8 -0
  64. data/public/monaco-editor/vs/editor/editor.main.js +797 -0
  65. data/public/monaco-editor/vs/language/typescript/tsMode.js +20 -0
  66. data/public/monaco-editor/vs/language/typescript/tsWorker.js +51328 -0
  67. data/public/monaco-editor/vs/loader.js +10 -0
  68. data/public/monaco-editor/vs/nls.messages.de.js +20 -0
  69. data/public/monaco-editor/vs/nls.messages.es.js +20 -0
  70. data/public/monaco-editor/vs/nls.messages.fr.js +18 -0
  71. data/public/monaco-editor/vs/nls.messages.it.js +18 -0
  72. data/public/monaco-editor/vs/nls.messages.ja.js +20 -0
  73. data/public/monaco-editor/vs/nls.messages.ko.js +18 -0
  74. data/public/monaco-editor/vs/nls.messages.ru.js +20 -0
  75. data/public/monaco-editor/vs/nls.messages.zh-cn.js +20 -0
  76. data/public/monaco-editor/vs/nls.messages.zh-tw.js +18 -0
  77. data/public/monaco_worker.js +5 -0
  78. data/vendor/assets/javascripts/axios.min.js +2 -0
  79. data/vendor/assets/javascripts/lodash.min.js +140 -0
  80. data/vendor/assets/javascripts/marked.min.js +6 -0
  81. data/vendor/assets/javascripts/minisearch.min.js +2044 -0
  82. data/vendor/assets/javascripts/prettier-plugin-babel.js +16 -0
  83. data/vendor/assets/javascripts/prettier-plugin-estree.js +35 -0
  84. data/vendor/assets/javascripts/prettier-plugin-html.js +19 -0
  85. data/vendor/assets/javascripts/prettier-plugin-markdown.js +59 -0
  86. data/vendor/assets/javascripts/prettier-plugin-postcss.js +52 -0
  87. data/vendor/assets/javascripts/prettier-standalone.js +37 -0
  88. data/vendor/assets/javascripts/react-dom.min.js +267 -0
  89. data/vendor/assets/javascripts/react.min.js +31 -0
  90. data/vendor/assets/stylesheets/fontawesome.min.css +9 -0
  91. data/vendor/assets/webfonts/fa-brands-400.woff2 +0 -0
  92. data/vendor/assets/webfonts/fa-regular-400.woff2 +0 -0
  93. data/vendor/assets/webfonts/fa-solid-900.woff2 +0 -0
  94. metadata +173 -0
@@ -0,0 +1,71 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <meta name="turbo-visit-control" content="reload" />
7
+ <title>Mbeditor — <%= Rails.root.basename %></title>
8
+
9
+ <!-- ── Fonts and Styles ──────────────────────────────── -->
10
+ <%= stylesheet_link_tag "fontawesome.min", media: "all" %>
11
+ <%= stylesheet_link_tag "mbeditor/application", media: "all" %>
12
+
13
+ <!-- ── Vendor JS (order matters) ─────────────────────── -->
14
+ <script src="<%= asset_path('react.min.js') %>"></script>
15
+ <script src="<%= asset_path('react-dom.min.js') %>"></script>
16
+ <script src="<%= asset_path('axios.min.js') %>"></script>
17
+ <script src="<%= asset_path('lodash.min.js') %>"></script>
18
+ <script src="<%= asset_path('minisearch.min.js') %>"></script>
19
+ <script src="<%= asset_path('marked.min.js') %>"></script>
20
+ <script src="<%= asset_path('prettier-standalone.js') %>"></script>
21
+ <script src="<%= asset_path('prettier-plugin-babel.js') %>"></script>
22
+ <script src="<%= asset_path('prettier-plugin-estree.js') %>"></script>
23
+ <script src="<%= asset_path('prettier-plugin-html.js') %>"></script>
24
+ <script src="<%= asset_path('prettier-plugin-postcss.js') %>"></script>
25
+ <script src="<%= asset_path('prettier-plugin-markdown.js') %>"></script>
26
+
27
+ <!-- ── Monaco loader ─────────────────────────────────── -->
28
+ <% base_path = request.script_name.to_s.sub(%r{/$}, '') %>
29
+ <script>var require = { paths: { vs: '<%= json_escape("#{base_path}/monaco-editor/vs") %>' } };</script>
30
+ <script src="<%= "#{base_path}/monaco-editor/vs/loader.js" %>"></script>
31
+ </head>
32
+ <body data-rails-root="<%= Rails.root.to_s %>">
33
+ <script>
34
+ window.MBEDITOR_BASE_PATH = "<%= json_escape(base_path) %>";
35
+ window.prettierPlugins = {
36
+ babel: window.prettierPluginsBabel,
37
+ estree: window.prettierPluginsEstree,
38
+ html: window.prettierPluginsHtml,
39
+ postcss: window.prettierPluginsPostcss,
40
+ markdown: window.prettierPluginsMarkdown
41
+ };
42
+ </script>
43
+
44
+ <div id="mbeditor-root">
45
+ <%= yield %>
46
+ </div>
47
+
48
+ <script>
49
+ window.MonacoEnvironment = {
50
+ getWorkerUrl: function(workerId, label) {
51
+ return (window.MBEDITOR_BASE_PATH || '') + '/monaco_worker.js';
52
+ }
53
+ };
54
+
55
+ // Wait for Monaco to load before initializing application scripts
56
+ require(['vs/editor/editor.main'], function() {
57
+ var appScript = document.createElement('script');
58
+ appScript.src = '<%= asset_path("mbeditor/application.js") %>';
59
+ appScript.onload = function() {
60
+ var root = document.getElementById('mbeditor-root');
61
+ if (window.MbeditorApp && window.ReactDOM) {
62
+ window.ReactDOM.render(React.createElement(window.MbeditorApp), root);
63
+ } else {
64
+ console.error("Failed to mount: MbeditorApp or ReactDOM is undefined.");
65
+ }
66
+ };
67
+ document.body.appendChild(appScript);
68
+ });
69
+ </script>
70
+ </body>
71
+ </html>
@@ -0,0 +1 @@
1
+ <!-- Mounted automatically by layout script -->
@@ -0,0 +1,53 @@
1
+ require "active_support/core_ext/integer/time"
2
+
3
+ Rails.application.configure do
4
+ # Settings specified here will take precedence over those in config/application.rb.
5
+
6
+ # Make code changes take effect immediately without server restart.
7
+ config.enable_reloading = true
8
+
9
+ # Do not eager load code on boot.
10
+ config.eager_load = false
11
+
12
+ # Show full error reports.
13
+ config.consider_all_requests_local = true
14
+
15
+ # Enable server timing.
16
+ config.server_timing = true
17
+
18
+ # Enable/disable Action Controller caching. By default Action Controller caching is disabled.
19
+ # Run rails dev:cache to toggle Action Controller caching.
20
+ if Rails.root.join("tmp/caching-dev.txt").exist?
21
+ config.action_controller.perform_caching = true
22
+ config.action_controller.enable_fragment_cache_logging = true
23
+ config.public_file_server.headers = { "cache-control" => "public, max-age=#{2.days.to_i}" }
24
+ else
25
+ config.action_controller.perform_caching = false
26
+ end
27
+
28
+ # Change to :null_store to avoid any caching.
29
+ config.cache_store = :memory_store
30
+
31
+ # Print deprecation notices to the Rails logger.
32
+ config.active_support.deprecation = :log
33
+
34
+ if config.respond_to?(:active_record)
35
+ # Raise an error on page load if there are pending migrations.
36
+ config.active_record.migration_error = :page_load
37
+
38
+ # Highlight code that triggered database queries in logs.
39
+ config.active_record.verbose_query_logs = true
40
+
41
+ # Append comments with runtime information tags to SQL queries in logs.
42
+ config.active_record.query_log_tags_enabled = true
43
+ end
44
+
45
+ # Raises error for missing translations.
46
+ # config.i18n.raise_on_missing_translations = true
47
+
48
+ # Annotate rendered view with file names.
49
+ config.action_view.annotate_rendered_view_with_filenames = true
50
+
51
+ # Raise error when a before_action's only/except options reference missing actions.
52
+ config.action_controller.raise_on_missing_callback_actions = true
53
+ end
@@ -0,0 +1,9 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Version of your assets, change this if you want to expire all your assets.
4
+ if Rails.application.config.respond_to?(:assets)
5
+ Rails.application.config.assets.version = "1.0"
6
+ end
7
+
8
+ # Add additional assets to the asset load path.
9
+ # Rails.application.config.assets.paths << Emoji.images_path
data/config/routes.rb ADDED
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ Mbeditor::Engine.routes.draw do
4
+ root to: 'editors#index'
5
+
6
+ get 'ping', to: 'editors#ping'
7
+ get 'workspace', to: 'editors#workspace'
8
+ get 'files', to: 'editors#files'
9
+ get 'file', to: 'editors#show'
10
+ get 'raw', to: 'editors#raw'
11
+ post 'file', to: 'editors#save'
12
+ post 'create_file', to: 'editors#create_file'
13
+ post 'create_dir', to: 'editors#create_dir'
14
+ patch 'rename', to: 'editors#rename'
15
+ delete 'delete', to: 'editors#destroy_path'
16
+ get 'state', to: 'editors#state'
17
+ post 'state', to: 'editors#save_state'
18
+ get 'search', to: 'editors#search'
19
+ get 'git_info', to: 'editors#git_info'
20
+ get 'git_status', to: 'editors#git_status'
21
+ get 'monaco_worker.js', to: 'editors#monaco_worker'
22
+ get 'monaco-editor/*asset_path', to: 'editors#monaco_asset', format: false
23
+ get 'min-maps/*asset_path', to: 'editors#monaco_asset', format: false
24
+ post 'lint', to: 'editors#lint'
25
+ post 'format', to: 'editors#format_file'
26
+
27
+ # ── Git & Code Review ──────────────────────────────────────────────────────
28
+ get 'git/diff', to: 'git#diff'
29
+ get 'git/blame', to: 'git#blame'
30
+ get 'git/file_history', to: 'git#file_history'
31
+ get 'git/commit_graph', to: 'git#commit_graph'
32
+ get 'git/commit_detail', to: 'git#commit_detail'
33
+ get 'git/combined_diff', to: 'git#combined_diff'
34
+
35
+ # Redmine integration (enabled via config.mbeditor.redmine_enabled)
36
+ get 'redmine/issue/:id', to: 'git#redmine_issue', as: :redmine_issue
37
+ end
@@ -0,0 +1,16 @@
1
+ module Mbeditor
2
+ class Configuration
3
+ attr_accessor :allowed_environments, :workspace_root, :excluded_paths, :rubocop_command,
4
+ :redmine_enabled, :redmine_url, :redmine_api_key
5
+
6
+ def initialize
7
+ @allowed_environments = [:development]
8
+ @workspace_root = nil
9
+ @excluded_paths = %w[.git tmp log node_modules .bundle coverage vendor/bundle]
10
+ @rubocop_command = "rubocop"
11
+ @redmine_enabled = false
12
+ @redmine_url = nil
13
+ @redmine_api_key = nil
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,28 @@
1
+ module Mbeditor
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace Mbeditor
4
+
5
+ initializer "mbeditor.assets.precompile" do |app|
6
+ app.config.assets.precompile += %w[
7
+ mbeditor/application.css
8
+ mbeditor/application.js
9
+ fontawesome.min.css
10
+ react.min.js
11
+ react-dom.min.js
12
+ axios.min.js
13
+ lodash.min.js
14
+ minisearch.min.js
15
+ marked.min.js
16
+ prettier-standalone.js
17
+ prettier-plugin-babel.js
18
+ prettier-plugin-estree.js
19
+ prettier-plugin-html.js
20
+ prettier-plugin-postcss.js
21
+ prettier-plugin-markdown.js
22
+ fa-brands-400.woff2
23
+ fa-regular-400.woff2
24
+ fa-solid-900.woff2
25
+ ]
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,3 @@
1
+ module Mbeditor
2
+ VERSION = "0.1.0"
3
+ end
data/lib/mbeditor.rb ADDED
@@ -0,0 +1,19 @@
1
+ require "mbeditor/version"
2
+ require "mbeditor/configuration"
3
+ require "mbeditor/engine"
4
+
5
+ module Mbeditor
6
+ class << self
7
+ attr_writer :configuration
8
+
9
+ def configuration
10
+ @configuration ||= Configuration.new
11
+ end
12
+
13
+ def configure
14
+ yield(configuration)
15
+ end
16
+ end
17
+ end
18
+
19
+ MBEditor = Mbeditor unless defined?(MBEditor)
data/mbeditor.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ require_relative "lib/mbeditor/version"
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "mbeditor"
5
+ spec.version = Mbeditor::VERSION
6
+ spec.authors = ["Oliver Noonan"]
7
+ spec.email = ["ojnoonan@gmail.com"]
8
+ spec.summary = "Mini Browser Editor (mbeditor) mountable Rails engine"
9
+ spec.description = "Mbeditor provides an in-browser code editor with split panes, git insights, search, and optional RuboCop linting for Rails apps."
10
+ spec.homepage = "https://github.com/ojnoonan/mbeditor"
11
+ spec.license = "MIT"
12
+ spec.required_ruby_version = ">= 3.0.0"
13
+
14
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
15
+ Dir["app/**/*", "config/**/*", "lib/**/*", "public/**/*",
16
+ "vendor/assets/**/*", "README.md", "mbeditor.gemspec"]
17
+ end
18
+
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.metadata = {
22
+ "homepage_uri" => "https://github.com/ojnoonan/mbeditor",
23
+ "source_code_uri" => "https://github.com/ojnoonan/mbeditor",
24
+ "bug_tracker_uri" => "https://github.com/ojnoonan/mbeditor/issues"
25
+ }
26
+
27
+ spec.add_dependency "rails", ">= 7.1", "< 9.0"
28
+ spec.add_dependency "sprockets-rails", ">= 3.4"
29
+
30
+ end