superconductor 0.0.3 → 0.0.4
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.
- data/app/assets/javascripts/jquery-linedtextarea.js +126 -0
- data/app/assets/javascripts/superconductor/panel.js.coffee +20 -0
- data/app/assets/javascripts/superconductor.js +1 -0
- data/app/assets/stylesheets/jquery-linedtextarea.css +68 -0
- data/app/assets/stylesheets/superconductor/panel.css.scss +38 -14
- data/app/assets/stylesheets/superconductor.css +1 -0
- data/app/controllers/file_controller.rb +11 -1
- data/app/views/superconductor/_panel.html.erb +66 -17
- data/config/routes.rb +2 -2
- data/lib/superconductor/engine.rb +4 -1
- data/lib/superconductor/version.rb +1 -1
- metadata +4 -3
- data/app/views/superconductor/file/edit.js.erb +0 -0
@@ -0,0 +1,126 @@
|
|
1
|
+
/**
|
2
|
+
* jQuery Lined Textarea Plugin
|
3
|
+
* http://alan.blog-city.com/jquerylinedtextarea.htm
|
4
|
+
*
|
5
|
+
* Copyright (c) 2010 Alan Williamson
|
6
|
+
*
|
7
|
+
* Version:
|
8
|
+
* $Id: jquery-linedtextarea.js 464 2010-01-08 10:36:33Z alan $
|
9
|
+
*
|
10
|
+
* Released under the MIT License:
|
11
|
+
* http://www.opensource.org/licenses/mit-license.php
|
12
|
+
*
|
13
|
+
* Usage:
|
14
|
+
* Displays a line number count column to the left of the textarea
|
15
|
+
*
|
16
|
+
* Class up your textarea with a given class, or target it directly
|
17
|
+
* with JQuery Selectors
|
18
|
+
*
|
19
|
+
* $(".lined").linedtextarea({
|
20
|
+
* selectedLine: 10,
|
21
|
+
* selectedClass: 'lineselect'
|
22
|
+
* });
|
23
|
+
*
|
24
|
+
* History:
|
25
|
+
* - 2010.01.08: Fixed a Google Chrome layout problem
|
26
|
+
* - 2010.01.07: Refactored code for speed/readability; Fixed horizontal sizing
|
27
|
+
* - 2010.01.06: Initial Release
|
28
|
+
*
|
29
|
+
*/
|
30
|
+
(function($) {
|
31
|
+
|
32
|
+
$.fn.linedtextarea = function(options) {
|
33
|
+
|
34
|
+
// Get the Options
|
35
|
+
var opts = $.extend({}, $.fn.linedtextarea.defaults, options);
|
36
|
+
|
37
|
+
|
38
|
+
/*
|
39
|
+
* Helper function to make sure the line numbers are always
|
40
|
+
* kept up to the current system
|
41
|
+
*/
|
42
|
+
var fillOutLines = function(codeLines, h, lineNo){
|
43
|
+
while ( (codeLines.height() - h ) <= 0 ){
|
44
|
+
if ( lineNo == opts.selectedLine )
|
45
|
+
codeLines.append("<div class='lineno lineselect'>" + lineNo + "</div>");
|
46
|
+
else
|
47
|
+
codeLines.append("<div class='lineno'>" + lineNo + "</div>");
|
48
|
+
|
49
|
+
lineNo++;
|
50
|
+
}
|
51
|
+
return lineNo;
|
52
|
+
};
|
53
|
+
|
54
|
+
|
55
|
+
/*
|
56
|
+
* Iterate through each of the elements are to be applied to
|
57
|
+
*/
|
58
|
+
return this.each(function() {
|
59
|
+
var lineNo = 1;
|
60
|
+
var textarea = $(this);
|
61
|
+
|
62
|
+
/* Turn off the wrapping of as we don't want to screw up the line numbers */
|
63
|
+
textarea.attr("wrap", "off");
|
64
|
+
textarea.css({resize:'none'});
|
65
|
+
var originalTextAreaWidth = textarea.outerWidth();
|
66
|
+
|
67
|
+
/* Wrap the text area in the elements we need */
|
68
|
+
textarea.wrap("<div class='linedtextarea'></div>");
|
69
|
+
var linedTextAreaDiv = textarea.parent().wrap("<div class='linedwrap' style='width:" + originalTextAreaWidth + "px'></div>");
|
70
|
+
var linedWrapDiv = linedTextAreaDiv.parent();
|
71
|
+
|
72
|
+
linedWrapDiv.prepend("<div class='lines' style='width:50px'></div>");
|
73
|
+
|
74
|
+
var linesDiv = linedWrapDiv.find(".lines");
|
75
|
+
linesDiv.height( textarea.height() + 6 );
|
76
|
+
|
77
|
+
|
78
|
+
/* Draw the number bar; filling it out where necessary */
|
79
|
+
linesDiv.append( "<div class='codelines'></div>" );
|
80
|
+
var codeLinesDiv = linesDiv.find(".codelines");
|
81
|
+
lineNo = fillOutLines( codeLinesDiv, linesDiv.height(), 1 );
|
82
|
+
|
83
|
+
/* Move the textarea to the selected line */
|
84
|
+
if ( opts.selectedLine != -1 && !isNaN(opts.selectedLine) ){
|
85
|
+
var fontSize = parseInt( textarea.height() / (lineNo-2) );
|
86
|
+
var position = parseInt( fontSize * opts.selectedLine ) - (textarea.height()/2);
|
87
|
+
textarea[0].scrollTop = position;
|
88
|
+
}
|
89
|
+
|
90
|
+
|
91
|
+
/* Set the width */
|
92
|
+
var sidebarWidth = linesDiv.outerWidth();
|
93
|
+
var paddingHorizontal = parseInt( linedWrapDiv.css("border-left-width") ) + parseInt( linedWrapDiv.css("border-right-width") ) + parseInt( linedWrapDiv.css("padding-left") ) + parseInt( linedWrapDiv.css("padding-right") );
|
94
|
+
var linedWrapDivNewWidth = originalTextAreaWidth - paddingHorizontal;
|
95
|
+
var textareaNewWidth = originalTextAreaWidth - sidebarWidth - paddingHorizontal - 20;
|
96
|
+
|
97
|
+
textarea.width( textareaNewWidth );
|
98
|
+
linedWrapDiv.width( linedWrapDivNewWidth );
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
/* React to the scroll event */
|
103
|
+
textarea.scroll( function(tn){
|
104
|
+
var domTextArea = $(this)[0];
|
105
|
+
var scrollTop = domTextArea.scrollTop;
|
106
|
+
var clientHeight = domTextArea.clientHeight;
|
107
|
+
codeLinesDiv.css( {'margin-top': (-1*scrollTop) + "px"} );
|
108
|
+
lineNo = fillOutLines( codeLinesDiv, scrollTop + clientHeight, lineNo );
|
109
|
+
});
|
110
|
+
|
111
|
+
|
112
|
+
/* Should the textarea get resized outside of our control */
|
113
|
+
textarea.resize( function(tn){
|
114
|
+
var domTextArea = $(this)[0];
|
115
|
+
linesDiv.height( domTextArea.clientHeight + 6 );
|
116
|
+
});
|
117
|
+
|
118
|
+
});
|
119
|
+
};
|
120
|
+
|
121
|
+
// default options
|
122
|
+
$.fn.linedtextarea.defaults = {
|
123
|
+
selectedLine: -1,
|
124
|
+
selectedClass: 'lineselect'
|
125
|
+
};
|
126
|
+
})(jQuery);
|
@@ -20,3 +20,23 @@ jQuery ->
|
|
20
20
|
$(window).keyup (e) ->
|
21
21
|
clearTimeout(initialTimeout)
|
22
22
|
panel.toggleClass('closed') if e.which == 27
|
23
|
+
|
24
|
+
$('aside#superconductor ul.methods li a').live 'click', (e) ->
|
25
|
+
e.preventDefault()
|
26
|
+
parent = $(this).parent('li')
|
27
|
+
if parent.hasClass('open')
|
28
|
+
parent.removeClass('open').children('form').remove()
|
29
|
+
else
|
30
|
+
$.ajax {
|
31
|
+
url: this.href,
|
32
|
+
dataType: 'json',
|
33
|
+
context: this,
|
34
|
+
success: (data, status, xhr) ->
|
35
|
+
form = $('<form action="'+this.href+'" method="post" data-method="put"></form>')
|
36
|
+
form.append($('<textarea'+( if data.writable then '' else ' disabled="disabled"' )+'>'+data.content+'</textarea>'))
|
37
|
+
form.append($('<input type="submit" value="Save Changes" />')) if data.writable
|
38
|
+
parent.addClass('open').append(form)
|
39
|
+
form.find('textarea').linedtextarea({selectedLine: this.hash.slice(1)})
|
40
|
+
}
|
41
|
+
|
42
|
+
|
@@ -0,0 +1,68 @@
|
|
1
|
+
/**
|
2
|
+
* jQuery Lined Textarea Plugin
|
3
|
+
* http://alan.blog-city.com/jquerylinedtextarea.htm
|
4
|
+
*
|
5
|
+
* Copyright (c) 2010 Alan Williamson
|
6
|
+
*
|
7
|
+
* Released under the MIT License:
|
8
|
+
* http://www.opensource.org/licenses/mit-license.php
|
9
|
+
*
|
10
|
+
* Usage:
|
11
|
+
* Displays a line number count column to the left of the textarea
|
12
|
+
*
|
13
|
+
* Class up your textarea with a given class, or target it directly
|
14
|
+
* with JQuery Selectors
|
15
|
+
*
|
16
|
+
* $(".lined").linedtextarea({
|
17
|
+
* selectedLine: 10,
|
18
|
+
* selectedClass: 'lineselect'
|
19
|
+
* });
|
20
|
+
*
|
21
|
+
*/
|
22
|
+
|
23
|
+
.linedwrap {
|
24
|
+
border: 1px solid #c0c0c0;
|
25
|
+
padding: 3px;
|
26
|
+
}
|
27
|
+
|
28
|
+
.linedtextarea {
|
29
|
+
padding: 0px;
|
30
|
+
margin: 0px;
|
31
|
+
}
|
32
|
+
|
33
|
+
.linedtextarea textarea, .linedwrap .codelines .lineno {
|
34
|
+
font-size: 10pt;
|
35
|
+
font-family: monospace;
|
36
|
+
line-height: normal !important;
|
37
|
+
}
|
38
|
+
|
39
|
+
.linedtextarea textarea {
|
40
|
+
padding-right:0.3em;
|
41
|
+
padding-top:0.3em;
|
42
|
+
border: 0;
|
43
|
+
}
|
44
|
+
|
45
|
+
.linedwrap .lines {
|
46
|
+
margin-top: 0px;
|
47
|
+
width: 50px;
|
48
|
+
float: left;
|
49
|
+
overflow: hidden;
|
50
|
+
border-right: 1px solid #c0c0c0;
|
51
|
+
margin-right: 10px;
|
52
|
+
}
|
53
|
+
|
54
|
+
.linedwrap .codelines {
|
55
|
+
padding-top: 5px;
|
56
|
+
}
|
57
|
+
|
58
|
+
.linedwrap .codelines .lineno {
|
59
|
+
color:#AAAAAA;
|
60
|
+
padding-right: 0.5em;
|
61
|
+
padding-top: 0.0em;
|
62
|
+
text-align: right;
|
63
|
+
white-space: nowrap;
|
64
|
+
}
|
65
|
+
|
66
|
+
.linedwrap .codelines .lineselect {
|
67
|
+
color: red;
|
68
|
+
}
|
@@ -3,7 +3,7 @@ aside#superconductor {
|
|
3
3
|
top: 0;
|
4
4
|
right: 0;
|
5
5
|
bottom: 0;
|
6
|
-
width:
|
6
|
+
width: 35%;
|
7
7
|
margin: 0;
|
8
8
|
z-index: 99999;
|
9
9
|
font-family: arial, helvetica, verdana, sans-serif;
|
@@ -18,6 +18,7 @@ aside#superconductor {
|
|
18
18
|
opacity: 1;
|
19
19
|
-webkit-transition: width 0.5s, opacity 0.5s;
|
20
20
|
box-shadow: 0 0 10px rgba(0,0,0,0.7);
|
21
|
+
color: white;
|
21
22
|
&.expanded {
|
22
23
|
width: 100%;
|
23
24
|
menu[type=toolbar] button.expander:before { content: '\21E5' }
|
@@ -30,22 +31,20 @@ aside#superconductor {
|
|
30
31
|
}
|
31
32
|
|
32
33
|
// **
|
33
|
-
|
34
|
-
&, * {
|
35
|
-
color: white;
|
36
|
-
}
|
37
|
-
> h1, > h2, > h3, > h4, > h5, > h6, > p, > ul, > dl, > section {
|
34
|
+
h1, h2, h3, h4, h5, h6, p, ul, dl, section {
|
38
35
|
text-align: left;
|
39
|
-
margin-left:
|
36
|
+
margin-left: 5px;
|
40
37
|
}
|
38
|
+
h1 { font-size: 1.25em; }
|
39
|
+
h2 { font-size: 1.1em; }
|
41
40
|
dl {
|
42
41
|
dt {
|
43
42
|
float: left;
|
44
43
|
min-width: 80px;
|
45
|
-
margin-left:
|
44
|
+
margin-left: 10px;
|
46
45
|
}
|
47
46
|
dd {
|
48
|
-
margin-left:
|
47
|
+
margin-left: 90px;
|
49
48
|
}
|
50
49
|
}
|
51
50
|
code {
|
@@ -60,8 +59,13 @@ aside#superconductor {
|
|
60
59
|
> hr {
|
61
60
|
margin-left: -15px;
|
62
61
|
}
|
62
|
+
textarea {
|
63
|
+
font-size: 10pt;
|
64
|
+
margin: 0;
|
65
|
+
padding: 2px;
|
66
|
+
}
|
63
67
|
details {
|
64
|
-
margin: 1px 20px;
|
68
|
+
margin: -1px 20px 0 20px;
|
65
69
|
&[open] {
|
66
70
|
border-left: dotted #555555 1px;
|
67
71
|
margin-left: 19px;
|
@@ -80,18 +84,38 @@ aside#superconductor {
|
|
80
84
|
margin-left: -15px;
|
81
85
|
cursor: pointer;
|
82
86
|
}
|
83
|
-
|
84
|
-
|
85
|
-
|
87
|
+
ul.methods {
|
88
|
+
padding: 0;
|
89
|
+
list-style-type: none;
|
90
|
+
li {
|
91
|
+
> a, > span {
|
92
|
+
padding: 3px 5px;
|
93
|
+
display: block;
|
86
94
|
width: 200px;
|
87
95
|
float: left;
|
88
96
|
white-space: nowrap;
|
89
97
|
text-overflow: ellipsis;
|
90
98
|
overflow: hidden;
|
91
99
|
}
|
92
|
-
|
100
|
+
&.open {
|
101
|
+
a {
|
102
|
+
padding: 2px 4px;
|
103
|
+
border: dotted #555555 1px;
|
104
|
+
background-color: rgba(50,50,50,0.5);
|
105
|
+
margin-bottom: -1px;
|
106
|
+
}
|
107
|
+
form {
|
108
|
+
clear: left;
|
109
|
+
border: dotted #555555 1px;
|
110
|
+
margin: 0;
|
111
|
+
textarea { width: 100%; height: 200px; }
|
112
|
+
.linedwrap { border: none; }
|
113
|
+
}
|
114
|
+
}
|
93
115
|
}
|
116
|
+
&:after { display: block; content: ''; clear: both; }
|
94
117
|
}
|
118
|
+
|
95
119
|
ul.array {
|
96
120
|
margin: 0.2em;
|
97
121
|
padding-left: 1.75em;
|
@@ -1,9 +1,19 @@
|
|
1
1
|
class Superconductor::FileController < ApplicationController
|
2
2
|
def edit
|
3
|
+
respond_to do |format|
|
4
|
+
format.json do
|
5
|
+
if File.exists?('/'+params[:file])
|
6
|
+
@file = File.open('/'+params[:file],'r')
|
7
|
+
render json: { content: @file.read, writable: false && File.writable?(@file.path) }
|
8
|
+
else
|
9
|
+
render json: nil, status: :not_found
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
3
13
|
end
|
4
14
|
|
5
15
|
def update
|
6
|
-
@file = File.open(params[:file],'w')
|
16
|
+
@file = File.open('/'+params[:file],'w')
|
7
17
|
@file.puts(params[:content])
|
8
18
|
@file.close
|
9
19
|
|
@@ -6,12 +6,10 @@
|
|
6
6
|
<button class="directory">≡</button> |
|
7
7
|
<button class="expander"></button><button class="closer">✕</button>
|
8
8
|
</menu>
|
9
|
+
<p>
|
10
|
+
Load Time: <code><%= sprintf('%.3f', (Time.now.usec - @_start_time).abs / 1000000.0) %> seconds</code>
|
11
|
+
</p>
|
9
12
|
<section class="instance-variables">
|
10
|
-
<h1>Statistics</h1>
|
11
|
-
<dl>
|
12
|
-
<dt>Load Time:</dt>
|
13
|
-
<dd><code><%= sprintf('%.3f', (Time.now.usec - @_start_time).abs / 1000000.0) %> seconds</code></dd>
|
14
|
-
</dl>
|
15
13
|
<h1>Instance Variables</h1>
|
16
14
|
<% controller.instance_variables.reject { |k| k.to_s.starts_with?('@_') }.map { |k| [k, instance_variable_get(k)] }.each do |k, v| %>
|
17
15
|
<details <%='open' if controller.class.name.starts_with?(k[1..-1].pluralize.titleize) %>><summary><%= k %>: <%= v.to_s %></summary>
|
@@ -58,22 +56,73 @@
|
|
58
56
|
<% else %>
|
59
57
|
<%= content_tag :code, v.inspect %>
|
60
58
|
<% end %>
|
61
|
-
<%
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
59
|
+
<% obfuscated_methods, public_methods = v.public_methods.partition{ |name| name[0] == '_' }.map{ |names| Hash[names.map{ |method| v.method(method) }.group_by(&:owner)] } %>
|
60
|
+
<% private_methods = Hash[v.private_methods.map{|m|v.method(m)}.group_by(&:owner)] %>
|
61
|
+
<% protected_methods = Hash[v.protected_methods.map{|m|v.method(m)}.group_by(&:owner)] %>
|
62
|
+
<details><summary><%= v.class.name %> Methods</summary>
|
63
|
+
<% if public_methods[v.class].detect { |method| method.source_location && method.source_location.first.starts_with?(Rails.root.to_s) } %>
|
64
|
+
<ul class="methods">
|
65
|
+
<% public_methods[v.class].select{ |method| method.source_location}.select{ |method| method.source_location.first.starts_with?(Rails.root.to_s) }.sort_by(&:name).each do |method| %>
|
66
|
+
<li><%= link_to_if method.source_location && method.source_location.first != '(eval)', content_tag(:span,method.name), method.source_location ? superconductor_file_path(method.source_location.first, anchor: method.source_location.last) : nil %></li>
|
67
|
+
<% end %>
|
68
|
+
</ul>
|
69
|
+
<% end %>
|
70
|
+
<details><summary>External Methods</summary>
|
71
|
+
<ul class="methods">
|
72
|
+
<% public_methods[v.class].sort_by(&:name).each do |method| %>
|
73
|
+
<li><%= link_to_if method.source_location && method.source_location.first != '(eval)', content_tag(:span,method.name), method.source_location ? superconductor_file_path(method.source_location.first, anchor: method.source_location.last) : nil %></li>
|
74
|
+
<% end %>
|
75
|
+
</ul>
|
76
|
+
</details>
|
77
|
+
<% if obfuscated_methods[v.class].present? %>
|
78
|
+
<details><summary>Obfuscated Methods</summary>
|
79
|
+
<ul class="methods">
|
80
|
+
<% obfuscated_methods[v.class].sort_by(&:name).each do |method| %>
|
81
|
+
<li><%= link_to_if method.source_location && method.source_location.first != '(eval)', content_tag(:span,method.name), method.source_location ? superconductor_file_path(method.source_location.first, anchor: method.source_location.last) : nil %></li>
|
82
|
+
<% end %>
|
83
|
+
</ul>
|
84
|
+
</details>
|
85
|
+
<% end %>
|
86
|
+
<% if private_methods[v.class].present? %>
|
87
|
+
<details><summary>Private Methods</summary>
|
88
|
+
<ul class="methods">
|
89
|
+
<% private_methods[v.class].sort_by(&:name).each do |method| %>
|
90
|
+
<li><%= link_to_if method.source_location && method.source_location.first != '(eval)', content_tag(:span,method.name), method.source_location ? superconductor_file_path(method.source_location.first, anchor: method.source_location.last) : nil %></li>
|
73
91
|
<% end %>
|
74
92
|
</ul>
|
75
93
|
</details>
|
76
94
|
<% end %>
|
95
|
+
<% if protected_methods[v.class].present? %>
|
96
|
+
<details><summary>Protected Methods</summary>
|
97
|
+
<ul class="methods">
|
98
|
+
<% protected_methods[v.class].sort_by(&:name).each do |method| %>
|
99
|
+
<li><%= link_to_if method.source_location && method.source_location.first != '(eval)', content_tag(:span,method.name), method.source_location ? superconductor_file_path(method.source_location.first, anchor: method.source_location.last) : nil %></li>
|
100
|
+
<% end %>
|
101
|
+
</ul>
|
102
|
+
</details>
|
103
|
+
<% end %>
|
104
|
+
<details><summary>Inherited Methods</summary>
|
105
|
+
<h2>Public Methods</h2>
|
106
|
+
<% public_methods.except(v.class).sort_by{|m|m.first.name.to_s}.each do |owner,methods| %>
|
107
|
+
<details><summary><%= owner.name || "Dynamic" %> Methods</summary>
|
108
|
+
<ul class="methods">
|
109
|
+
<% methods.sort_by(&:name).each do |method| %>
|
110
|
+
<li><%= link_to_if method.source_location && method.source_location.first != '(eval)', content_tag(:span,method.name), method.source_location ? superconductor_file_path(method.source_location.first, anchor: method.source_location.last) : nil %></li>
|
111
|
+
<% end %>
|
112
|
+
</ul>
|
113
|
+
</details>
|
114
|
+
<% end %>
|
115
|
+
<h2>Protected Methods</h2>
|
116
|
+
<% protected_methods.except(v.class).sort_by{|m|m.first.name.to_s}.each do |owner,methods| %>
|
117
|
+
<details><summary><%= owner.name || "Dynamic" %> Methods</summary>
|
118
|
+
<ul class="methods">
|
119
|
+
<% methods.sort_by(&:name).each do |method| %>
|
120
|
+
<li><%= link_to_if method.source_location && method.source_location.first != '(eval)', content_tag(:span,method.name), method.source_location ? superconductor_file_path(method.source_location.first, anchor: method.source_location.last) : nil %></li>
|
121
|
+
<% end %>
|
122
|
+
</ul>
|
123
|
+
</details>
|
124
|
+
<% end %>
|
125
|
+
</details>
|
77
126
|
</details>
|
78
127
|
</details>
|
79
128
|
<% end %>
|
data/config/routes.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Rails.application.routes.draw do
|
2
2
|
namespace :superconductor, module: 'Superconductor' do
|
3
|
-
put 'edit(
|
4
|
-
get 'edit(
|
3
|
+
put 'edit/*file(.:format)' => 'file#update', :as => nil
|
4
|
+
get 'edit/*file(.:format)' => 'file#edit', :as => :file
|
5
5
|
end
|
6
6
|
end
|
@@ -13,7 +13,10 @@ module Superconductor
|
|
13
13
|
@_start_time = Time.now.usec
|
14
14
|
end
|
15
15
|
after_filter do
|
16
|
-
|
16
|
+
respond_to do |format|
|
17
|
+
format.html { response.body += render_to_string(:partial => 'superconductor/panel') }
|
18
|
+
format.all(:json,:js,:xml) { }
|
19
|
+
end
|
17
20
|
end
|
18
21
|
end
|
19
22
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: superconductor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -50,8 +50,10 @@ executables: []
|
|
50
50
|
extensions: []
|
51
51
|
extra_rdoc_files: []
|
52
52
|
files:
|
53
|
+
- app/assets/javascripts/jquery-linedtextarea.js
|
53
54
|
- app/assets/javascripts/superconductor/panel.js.coffee
|
54
55
|
- app/assets/javascripts/superconductor.js
|
56
|
+
- app/assets/stylesheets/jquery-linedtextarea.css
|
55
57
|
- app/assets/stylesheets/scaffold.css
|
56
58
|
- app/assets/stylesheets/superconductor/panel.css.scss
|
57
59
|
- app/assets/stylesheets/superconductor.css
|
@@ -61,7 +63,6 @@ files:
|
|
61
63
|
- app/models/superconductor.rb
|
62
64
|
- app/views/superconductor/_panel.html.erb
|
63
65
|
- app/views/superconductor/_panel.js.erb
|
64
|
-
- app/views/superconductor/file/edit.js.erb
|
65
66
|
- config/routes.rb
|
66
67
|
- lib/superconductor/engine.rb
|
67
68
|
- lib/superconductor/version.rb
|
File without changes
|