idecoder 0.1.1 → 0.1.2
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 +4 -4
- data/README.md +8 -25
- data/app/assets/config/canvas_manifest.js +1 -0
- data/app/assets/images/screen.png +0 -0
- data/app/assets/javascripts/idecoder.js +3 -2
- data/app/assets/stylesheets/idecoder.css +23 -6
- data/app/controllers/idecoder/application_controller.rb +4 -0
- data/app/controllers/idecoder/runners_controller.rb +28 -0
- data/app/helpers/idecoder/application_helper.rb +4 -0
- data/app/helpers/idecoder/runners_helper.rb +4 -0
- data/app/runners_factory.rb +22 -0
- data/app/runners_strategy.rb +51 -0
- data/app/views/idecoder/runners/test.html.erb +24 -0
- data/lib/idecoder.rb +5 -1
- data/lib/idecoder/engine.rb +7 -0
- data/lib/idecoder/rails.rb +4 -5
- data/lib/idecoder/rails/version.rb +1 -1
- data/lib/idecoder/templates/idecoder.erb +46 -17
- data/lib/tasks/idecoder_tasks.rake +4 -0
- metadata +27 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04f52af610cff78a702112a6639b4be104f9197dbe3d47c25df4ec3eaa5d4de0
|
4
|
+
data.tar.gz: e387e0a00a2a4842612b1e56043c9fcd2662445fe66ed39f1b1da673c73fa22d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0698d3eb911d591567b892f659a654c3bf4df0aa87f38eccd2988306c883a570143b2fc25fdfdc51515045e57a652a1fc7abb6f68c46f650ea0069d94fe841d
|
7
|
+
data.tar.gz: 7ded7959cecdb8b98261e8a4dfc4c791b03ce6862ca153918584746217577ad357b72888a7f7b58e74fb192744699bf6e23c2f3d2e19d1304a976e62a1b2db26
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[](http://badge.fury.io/rb/idecoder)
|
4
4
|
|
5
|
-
Idecoder was created for developers building web applications with coding editors. Idecoder
|
5
|
+
Idecoder was created for developers building web applications with coding editors. Idecoder provides a plugin that gives the developer a screen inside their own app
|
6
6
|
to give the users a way to develop codes.
|
7
7
|
|
8
8
|
## Installation
|
@@ -21,6 +21,9 @@ Or install it yourself as:
|
|
21
21
|
|
22
22
|
## Usage
|
23
23
|
Simply add the `render_idecoder` helper method to your Rails layout or to any specific page you wish.
|
24
|
+
after installing, go to "<host> / idecoder" for testing screen:
|
25
|
+
|
26
|
+

|
24
27
|
|
25
28
|
<pre>
|
26
29
|
<html>
|
@@ -57,7 +60,7 @@ If you wish to have Idecoder in your production and/or staging environment, pass
|
|
57
60
|
|
58
61
|
| Value | Default | Description |
|
59
62
|
|----------|----------|------------------------------------------|
|
60
|
-
|
|
63
|
+
| mode | ruby | See Language Options List |
|
61
64
|
| theme | monokai | See Themes Options List |
|
62
65
|
| height | 300px | Canvas height |
|
63
66
|
| width | 90% | Canvas width |
|
@@ -68,28 +71,9 @@ If you wish to have Idecoder in your production and/or staging environment, pass
|
|
68
71
|
|
69
72
|
| Value | Description |
|
70
73
|
|----------|------------------------------------------|
|
71
|
-
|
|
72
|
-
| asciidoc | AsciiDoc Language |
|
73
|
-
| c_cpp | C / C++ |
|
74
|
-
| coldfusion | Cold Fusion |
|
75
|
-
| csharp | C Sharp |
|
76
|
-
| css | CSS |
|
77
|
-
| dart | Dart Language |
|
78
|
-
| dot | .Net |
|
79
|
-
| haml | HAML |
|
80
|
-
| java | Java Language |
|
74
|
+
| html | Design Html |
|
81
75
|
| javascript | Javascript |
|
82
|
-
| json | Json |
|
83
|
-
| objectivec | Objective C |
|
84
|
-
| perl | Perl |
|
85
|
-
| pgsql | Language for PostgreSQL |
|
86
|
-
| php | PHP |
|
87
|
-
| python | Python Language |
|
88
76
|
| ruby | Ruby Language |
|
89
|
-
| sql | SQL Scripts |
|
90
|
-
| typescript | TypeScript |
|
91
|
-
| xml | XML |
|
92
|
-
| yaml | YAML |
|
93
77
|
|
94
78
|
|
95
79
|
### Theme Options
|
@@ -128,9 +112,8 @@ If you wish to have Idecoder in your production and/or staging environment, pass
|
|
128
112
|
|
129
113
|
**Dependencies**
|
130
114
|
|
131
|
-
|
132
|
-
1.
|
133
|
-
2. JQuery Ace Rails 1.0.1
|
115
|
+
Idecoder has a dependency on:
|
116
|
+
1. gem execjs (sstephenson/execjs)
|
134
117
|
|
135
118
|
|
136
119
|
## Contributing
|
@@ -0,0 +1 @@
|
|
1
|
+
//= link_directory ../stylesheets/canvas .css
|
Binary file
|
@@ -1,11 +1,11 @@
|
|
1
1
|
window.Idecoder = function(options) {
|
2
2
|
var _this = this;
|
3
|
-
this._url = "http://marxjs.com";
|
4
3
|
return _this.initialize(options);
|
5
4
|
};
|
6
5
|
|
7
6
|
$.extend(Idecoder.prototype, {
|
8
7
|
settings: {
|
8
|
+
theme: 'monokai',
|
9
9
|
language: 'ruby',
|
10
10
|
read_only: false,
|
11
11
|
height: "300px",
|
@@ -13,7 +13,8 @@ $.extend(Idecoder.prototype, {
|
|
13
13
|
border: "1px solid lightgray",
|
14
14
|
},
|
15
15
|
initialize: function(options) {
|
16
|
-
|
16
|
+
let sett = this.settings
|
17
|
+
$.extend(jQuery.extend(sett, options));
|
17
18
|
return this.create_canvas();
|
18
19
|
},
|
19
20
|
/*=========================
|
@@ -1,10 +1,27 @@
|
|
1
|
-
.
|
2
|
-
font-size:
|
1
|
+
.idecoder-button{
|
2
|
+
font-size: 10px;
|
3
3
|
padding: 3px;
|
4
4
|
opacity: 0.8;
|
5
5
|
cursor: pointer;
|
6
|
-
position:relative;
|
7
|
-
top: 0px;
|
8
|
-
right: 0px;
|
9
|
-
z-index: 100;
|
10
6
|
}
|
7
|
+
|
8
|
+
.idecoder-pre {
|
9
|
+
font-size: 14px;
|
10
|
+
border: 2px solid grey;
|
11
|
+
width: 650px;
|
12
|
+
border-left: 12px solid darkslategray;
|
13
|
+
border-radius: 5px;
|
14
|
+
padding: 14px;
|
15
|
+
|
16
|
+
/* Fixed line height */
|
17
|
+
line-height: 20px;
|
18
|
+
|
19
|
+
/* Use linear-gradient for background image */
|
20
|
+
background-color: lightgray;
|
21
|
+
|
22
|
+
/* Size background so that the height is 2x line-height */
|
23
|
+
background-size: 100% 48px;
|
24
|
+
|
25
|
+
/* Offset the background along the y-axis by top padding */
|
26
|
+
background-position: 0 14px;
|
27
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Idecoder
|
2
|
+
|
3
|
+
class RunnersController < ApplicationController
|
4
|
+
require_dependency "idecoder/application_controller"
|
5
|
+
require_relative '../../runners_strategy'
|
6
|
+
require_relative '../../runners_factory'
|
7
|
+
|
8
|
+
def test
|
9
|
+
@modes = RunFactory.list_types
|
10
|
+
@mode = params['mode'] || "ruby"
|
11
|
+
render layout: false
|
12
|
+
end
|
13
|
+
|
14
|
+
def run
|
15
|
+
begin
|
16
|
+
fabrica = RunFactory.for(params['mode'])
|
17
|
+
parser = CodeParser.new(params['code'], fabrica)
|
18
|
+
|
19
|
+
data = parser.parse
|
20
|
+
render json: {data: data, status: 200}, status: :ok
|
21
|
+
rescue Exception => ex
|
22
|
+
render json: {data: ex.message, status: 500}, status: :ok
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class RunFactory
|
2
|
+
|
3
|
+
TYPES = {
|
4
|
+
html: HTMLParser,
|
5
|
+
javascript: JAVASCRIPTParser,
|
6
|
+
ruby: RubyParser
|
7
|
+
}
|
8
|
+
|
9
|
+
def self.list_types
|
10
|
+
TYPES.keys
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.for(mode)
|
14
|
+
type_c = mode && TYPES[mode.to_sym]
|
15
|
+
if type_c.nil?
|
16
|
+
raise "Invalid mode selection"
|
17
|
+
else
|
18
|
+
return type_c.new
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
class RunParser
|
2
|
+
require 'execjs'
|
3
|
+
|
4
|
+
def parse(code)
|
5
|
+
raise 'Must implement!'
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
###
|
10
|
+
|
11
|
+
class RubyParser < RunParser
|
12
|
+
def parse(code)
|
13
|
+
begin
|
14
|
+
eval(code)
|
15
|
+
rescue Exception => ex
|
16
|
+
raise ex.message
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
###
|
22
|
+
|
23
|
+
class HTMLParser < RunParser
|
24
|
+
def parse(code)
|
25
|
+
code
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
###
|
30
|
+
|
31
|
+
class JAVASCRIPTParser < RunParser
|
32
|
+
def parse(code)
|
33
|
+
ExecJS.eval('"red yellow blue".split(" ")')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
###
|
38
|
+
|
39
|
+
class CodeParser
|
40
|
+
attr_reader :code, :parser
|
41
|
+
|
42
|
+
def initialize(code, parser)
|
43
|
+
@code = code
|
44
|
+
@parser = parser
|
45
|
+
end
|
46
|
+
|
47
|
+
def parse
|
48
|
+
parser.parse(code)
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
<small>Example:</small>
|
4
|
+
<pre style="font-size: 10px; padding-bottom: 20px; padding-top: 20px; background-color: #eee !important; border: lightgray thin; ">
|
5
|
+
<%= render_idecoder(theme: "vibrant_ink", mode: "<%= @mode %>" height: "100px", width: "90%", copy: false) %>
|
6
|
+
</pre>
|
7
|
+
|
8
|
+
|
9
|
+
Selected language:
|
10
|
+
<%= select_tag "mode", options_for_select(@modes, @mode) %>
|
11
|
+
<br /><br />
|
12
|
+
<hr>
|
13
|
+
|
14
|
+
|
15
|
+
<div style="margin: 20px;">
|
16
|
+
<%= render_idecoder(theme: "vibrant_ink", mode: @mode, height: "100px", width: "90%", copy: false) %>
|
17
|
+
</div>
|
18
|
+
|
19
|
+
|
20
|
+
<script>
|
21
|
+
$("#mode").on("change", function () {
|
22
|
+
window.location = "/idecoder?mode="+$("#mode").val();
|
23
|
+
});
|
24
|
+
</script>
|
data/lib/idecoder.rb
CHANGED
data/lib/idecoder/rails.rb
CHANGED
@@ -2,11 +2,10 @@ require "idecoder/rails/version"
|
|
2
2
|
require "idecoder/view_helpers"
|
3
3
|
|
4
4
|
module Idecoder
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
ActionView::Base.send :include, ViewHelpers
|
9
|
-
end
|
5
|
+
class Engine < ::Rails::Engine
|
6
|
+
initializer "idecoder.view_helpers" do
|
7
|
+
ActionView::Base.send :include, ViewHelpers
|
10
8
|
end
|
9
|
+
# isolate_namespace Idecoder
|
11
10
|
end
|
12
11
|
end
|
@@ -4,13 +4,13 @@
|
|
4
4
|
<% theme = options_hash[:theme].present? ? options_hash[:theme] : "monokai" %>
|
5
5
|
<% mode = options_hash[:mode].present? ? options_hash[:mode] : "ruby" %>
|
6
6
|
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
|
7
9
|
<script src="assets/jquery/jquery.min.js"></script>
|
8
10
|
<script src="assets/ace/ace.js"></script>
|
9
11
|
|
10
12
|
<script src="assets/ace/theme-<%= theme %>.js"></script>
|
11
|
-
|
12
|
-
<script src="assets/ace/mode-ruby.js"></script>
|
13
|
-
<script src="assets/jquery-ace.min.js"></script>
|
13
|
+
<script src="assets/ace/mode-<%= mode %>.js"></script>
|
14
14
|
|
15
15
|
<script src="assets/idecoder.js"></script>
|
16
16
|
|
@@ -28,43 +28,56 @@
|
|
28
28
|
|
29
29
|
if (key && key == '82' && e.shiftKey && !(e.altKey)){
|
30
30
|
e.preventDefault();
|
31
|
+
runCode();
|
31
32
|
return false;
|
32
33
|
}
|
33
34
|
return true;
|
34
35
|
});
|
35
36
|
</script>
|
36
37
|
|
38
|
+
|
39
|
+
<button id="idecoder_btn_copy" class='idecoder-button idecoder-copy border' onclick='javascrit:copyToClipboard()'>Copy source to clipboard
|
40
|
+
</button>
|
41
|
+
<button id="idecoder_btn_run" title="Run (shift+r)" class='idecoder-button idecoder-run' onclick='javascrit:runCode()'>
|
42
|
+
Run (shift+R)
|
43
|
+
</button>
|
44
|
+
|
37
45
|
<div class="idecoder-panel">
|
38
|
-
<a id="btn_copy" class='btn btn-sm btn-light border ace-clipboard' onclick='javascrit:copyToClipboard()'>Copy</a>
|
39
|
-
<div style="text-align: end">
|
40
|
-
<a id="btn_exec" title="Run (shift+r)" class='btn btn-sm btn-light border' style="width: 35px;" onclick='javascrit:runCode()'>
|
41
|
-
<i class="fa fa-play text-success"></i>
|
42
|
-
</a>
|
43
|
-
</div>
|
44
46
|
<pre id="editor-area" ></pre>
|
45
47
|
</div>
|
46
48
|
|
47
|
-
<
|
48
|
-
|
49
|
+
<br />
|
50
|
+
|
51
|
+
<pre class="idecoder-pre" id="editor-result-area" ></pre>
|
52
|
+
|
53
|
+
<div id="div_error" style="background-color: lightgray; padding: 10px; display: none">
|
54
|
+
<span id="error_message" style="color: red; font-size: 12px;"></span>
|
49
55
|
</div>
|
50
56
|
|
57
|
+
<input type="hidden" id="hide-editor-value">
|
58
|
+
|
51
59
|
<script>
|
60
|
+
|
52
61
|
var config = idecoder.settings;
|
62
|
+
|
53
63
|
$canvas = $("#editor-area");
|
54
64
|
$canvas.css("border", config.border);
|
55
65
|
$canvas.css("height", config.height);
|
56
66
|
$canvas.css("width", config.width);
|
57
67
|
resultCanvas = $("#editor-result-area");
|
58
|
-
resultCanvas.css("height", 200);
|
59
|
-
resultCanvas.css("width", config.width);
|
60
68
|
resultCanvas.css("margin-top", config.height);
|
61
69
|
|
62
|
-
var resultEditor = ace.edit("editor-result-area");
|
63
|
-
resultEditor.setReadOnly(true);
|
64
|
-
|
65
70
|
var editor = ace.edit("editor-area");
|
66
71
|
editor.setTheme("ace/theme/<%= theme %>")
|
67
72
|
editor.session.setMode("ace/mode/<%= mode %>")
|
73
|
+
editor.setShowPrintMargin(false);
|
74
|
+
editor.setBehavioursEnabled(true);
|
75
|
+
|
76
|
+
var textvalue = $('#hide-editor-value');
|
77
|
+
|
78
|
+
editor.getSession().on('change', function() {
|
79
|
+
textvalue.val(editor.getValue());
|
80
|
+
});
|
68
81
|
|
69
82
|
function copyToClipboard() {
|
70
83
|
var copyText = editor.getValue();
|
@@ -76,7 +89,23 @@
|
|
76
89
|
}
|
77
90
|
|
78
91
|
function runCode(){
|
79
|
-
|
92
|
+
$.ajax({
|
93
|
+
url: '/idecoder/run',
|
94
|
+
type: 'POST',
|
95
|
+
data: {authenticity_token: $('[name="csrf-token"]')[0].content, mode: '<%= mode %>', code: textvalue.val()}
|
96
|
+
}).done(function(data) {
|
97
|
+
if(data.status == 200){
|
98
|
+
<% if mode == "html" %>
|
99
|
+
$("#editor-result-area").html(data.data)
|
100
|
+
<% else %>
|
101
|
+
$("#editor-result-area").text(data.data)
|
102
|
+
<% end %>
|
103
|
+
$("#div_error").hide();
|
104
|
+
} else {
|
105
|
+
$("#div_error").show();
|
106
|
+
$("#error_message").text(data.data)
|
107
|
+
}
|
108
|
+
});
|
80
109
|
}
|
81
110
|
|
82
111
|
<% if options_hash[:copy].nil? || !options_hash[:copy] %>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: idecoder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michel Popolin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: execjs
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
description: 'Now you can easily put an editor inside your project. With environment
|
42
56
|
variables reader and autocompletes. '
|
43
57
|
email:
|
@@ -48,6 +62,8 @@ extra_rdoc_files: []
|
|
48
62
|
files:
|
49
63
|
- MIT-LICENSE
|
50
64
|
- README.md
|
65
|
+
- app/assets/config/canvas_manifest.js
|
66
|
+
- app/assets/images/screen.png
|
51
67
|
- app/assets/javascripts/ace/ace.js
|
52
68
|
- app/assets/javascripts/ace/ext-static_highlight.js
|
53
69
|
- app/assets/javascripts/ace/ext-textarea.js
|
@@ -152,11 +168,20 @@ files:
|
|
152
168
|
- app/assets/javascripts/jquery-ace.min.js
|
153
169
|
- app/assets/javascripts/jquery/jquery.min.js
|
154
170
|
- app/assets/stylesheets/idecoder.css
|
171
|
+
- app/controllers/idecoder/application_controller.rb
|
172
|
+
- app/controllers/idecoder/runners_controller.rb
|
173
|
+
- app/helpers/idecoder/application_helper.rb
|
174
|
+
- app/helpers/idecoder/runners_helper.rb
|
175
|
+
- app/runners_factory.rb
|
176
|
+
- app/runners_strategy.rb
|
177
|
+
- app/views/idecoder/runners/test.html.erb
|
155
178
|
- lib/idecoder.rb
|
179
|
+
- lib/idecoder/engine.rb
|
156
180
|
- lib/idecoder/rails.rb
|
157
181
|
- lib/idecoder/rails/version.rb
|
158
182
|
- lib/idecoder/templates/idecoder.erb
|
159
183
|
- lib/idecoder/view_helpers.rb
|
184
|
+
- lib/tasks/idecoder_tasks.rake
|
160
185
|
homepage: https://github.com/popolin/idecoder
|
161
186
|
licenses:
|
162
187
|
- MIT
|