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.
- checksums.yaml +7 -0
- data/README.md +127 -0
- data/app/assets/javascripts/mbeditor/application.js +19 -0
- data/app/assets/javascripts/mbeditor/components/CodeReviewPanel.js +202 -0
- data/app/assets/javascripts/mbeditor/components/CollapsibleSection.js +71 -0
- data/app/assets/javascripts/mbeditor/components/CombinedDiffViewer.js +139 -0
- data/app/assets/javascripts/mbeditor/components/CommitGraph.js +65 -0
- data/app/assets/javascripts/mbeditor/components/DiffViewer.js +142 -0
- data/app/assets/javascripts/mbeditor/components/EditorPanel.js +363 -0
- data/app/assets/javascripts/mbeditor/components/FileHistoryPanel.js +112 -0
- data/app/assets/javascripts/mbeditor/components/FileTree.js +304 -0
- data/app/assets/javascripts/mbeditor/components/GitPanel.js +416 -0
- data/app/assets/javascripts/mbeditor/components/MbeditorApp.js +2335 -0
- data/app/assets/javascripts/mbeditor/components/QuickOpenDialog.js +118 -0
- data/app/assets/javascripts/mbeditor/components/ShortcutHelp.js +186 -0
- data/app/assets/javascripts/mbeditor/components/TabBar.js +123 -0
- data/app/assets/javascripts/mbeditor/editor_plugins.js +282 -0
- data/app/assets/javascripts/mbeditor/editor_store.js +53 -0
- data/app/assets/javascripts/mbeditor/file_service.js +77 -0
- data/app/assets/javascripts/mbeditor/git_service.js +104 -0
- data/app/assets/javascripts/mbeditor/search_service.js +53 -0
- data/app/assets/javascripts/mbeditor/tab_manager.js +461 -0
- data/app/assets/stylesheets/mbeditor/application.css +705 -0
- data/app/assets/stylesheets/mbeditor/editor.css +1264 -0
- data/app/controllers/mbeditor/application_controller.rb +10 -0
- data/app/controllers/mbeditor/editors_controller.rb +695 -0
- data/app/controllers/mbeditor/git_controller.rb +188 -0
- data/app/services/mbeditor/git_blame_service.rb +98 -0
- data/app/services/mbeditor/git_commit_graph_service.rb +60 -0
- data/app/services/mbeditor/git_diff_service.rb +71 -0
- data/app/services/mbeditor/git_file_history_service.rb +42 -0
- data/app/services/mbeditor/git_service.rb +82 -0
- data/app/services/mbeditor/redmine_service.rb +86 -0
- data/app/views/layouts/mbeditor/application.html.erb +71 -0
- data/app/views/mbeditor/editors/index.html.erb +1 -0
- data/config/environments/development.rb +53 -0
- data/config/initializers/assets.rb +9 -0
- data/config/routes.rb +37 -0
- data/lib/mbeditor/configuration.rb +16 -0
- data/lib/mbeditor/engine.rb +28 -0
- data/lib/mbeditor/version.rb +3 -0
- data/lib/mbeditor.rb +19 -0
- data/mbeditor.gemspec +30 -0
- data/public/min-maps/vs/base/worker/workerMain.js.map +1 -0
- data/public/monaco-editor/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- data/public/monaco-editor/vs/base/worker/workerMain.js +31 -0
- data/public/monaco-editor/vs/basic-languages/cameligo/cameligo.js +10 -0
- data/public/monaco-editor/vs/basic-languages/css/css.js +12 -0
- data/public/monaco-editor/vs/basic-languages/dart/dart.js +10 -0
- data/public/monaco-editor/vs/basic-languages/flow9/flow9.js +10 -0
- data/public/monaco-editor/vs/basic-languages/go/go.js +10 -0
- data/public/monaco-editor/vs/basic-languages/handlebars/handlebars.js +440 -0
- data/public/monaco-editor/vs/basic-languages/javascript/javascript.js +10 -0
- data/public/monaco-editor/vs/basic-languages/markdown/markdown.js +10 -0
- data/public/monaco-editor/vs/basic-languages/msdax/msdax.js +10 -0
- data/public/monaco-editor/vs/basic-languages/postiats/postiats.js +10 -0
- data/public/monaco-editor/vs/basic-languages/pug/pug.js +412 -0
- data/public/monaco-editor/vs/basic-languages/restructuredtext/restructuredtext.js +10 -0
- data/public/monaco-editor/vs/basic-languages/ruby/ruby.js +10 -0
- data/public/monaco-editor/vs/basic-languages/sb/sb.js +10 -0
- data/public/monaco-editor/vs/basic-languages/typespec/typespec.js +10 -0
- data/public/monaco-editor/vs/basic-languages/yaml/yaml.js +10 -0
- data/public/monaco-editor/vs/editor/editor.main.css +8 -0
- data/public/monaco-editor/vs/editor/editor.main.js +797 -0
- data/public/monaco-editor/vs/language/typescript/tsMode.js +20 -0
- data/public/monaco-editor/vs/language/typescript/tsWorker.js +51328 -0
- data/public/monaco-editor/vs/loader.js +10 -0
- data/public/monaco-editor/vs/nls.messages.de.js +20 -0
- data/public/monaco-editor/vs/nls.messages.es.js +20 -0
- data/public/monaco-editor/vs/nls.messages.fr.js +18 -0
- data/public/monaco-editor/vs/nls.messages.it.js +18 -0
- data/public/monaco-editor/vs/nls.messages.ja.js +20 -0
- data/public/monaco-editor/vs/nls.messages.ko.js +18 -0
- data/public/monaco-editor/vs/nls.messages.ru.js +20 -0
- data/public/monaco-editor/vs/nls.messages.zh-cn.js +20 -0
- data/public/monaco-editor/vs/nls.messages.zh-tw.js +18 -0
- data/public/monaco_worker.js +5 -0
- data/vendor/assets/javascripts/axios.min.js +2 -0
- data/vendor/assets/javascripts/lodash.min.js +140 -0
- data/vendor/assets/javascripts/marked.min.js +6 -0
- data/vendor/assets/javascripts/minisearch.min.js +2044 -0
- data/vendor/assets/javascripts/prettier-plugin-babel.js +16 -0
- data/vendor/assets/javascripts/prettier-plugin-estree.js +35 -0
- data/vendor/assets/javascripts/prettier-plugin-html.js +19 -0
- data/vendor/assets/javascripts/prettier-plugin-markdown.js +59 -0
- data/vendor/assets/javascripts/prettier-plugin-postcss.js +52 -0
- data/vendor/assets/javascripts/prettier-standalone.js +37 -0
- data/vendor/assets/javascripts/react-dom.min.js +267 -0
- data/vendor/assets/javascripts/react.min.js +31 -0
- data/vendor/assets/stylesheets/fontawesome.min.css +9 -0
- data/vendor/assets/webfonts/fa-brands-400.woff2 +0 -0
- data/vendor/assets/webfonts/fa-regular-400.woff2 +0 -0
- data/vendor/assets/webfonts/fa-solid-900.woff2 +0 -0
- 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
|
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
|