Implements frontend support for CriticMarkup. Related to #1016.
This commit is contained in:
@@ -135,6 +135,9 @@ MSG
|
|||||||
"By default, uses the 'TeX-AMS-MML_HTMLorMML' config with the 'autoload-all' extension.") do
|
"By default, uses the 'TeX-AMS-MML_HTMLorMML' config with the 'autoload-all' extension.") do
|
||||||
wiki_options[:mathjax] = true
|
wiki_options[:mathjax] = true
|
||||||
end
|
end
|
||||||
|
opts.on("--critic-markup", "Enable CriticMarkup support.") do
|
||||||
|
wiki_options[:critic_markup] = true
|
||||||
|
end
|
||||||
opts.on("--irb", "Launch Gollum in 'console mode', with a predefined API.") do
|
opts.on("--irb", "Launch Gollum in 'console mode', with a predefined API.") do
|
||||||
options[:irb] = true
|
options[:irb] = true
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ module Precious
|
|||||||
before do
|
before do
|
||||||
settings.wiki_options[:allow_editing] = settings.wiki_options.fetch(:allow_editing, true)
|
settings.wiki_options[:allow_editing] = settings.wiki_options.fetch(:allow_editing, true)
|
||||||
@allow_editing = settings.wiki_options[:allow_editing]
|
@allow_editing = settings.wiki_options[:allow_editing]
|
||||||
|
@critic_markup = settings.wiki_options[:critic_markup]
|
||||||
forbid unless @allow_editing || request.request_method == "GET"
|
forbid unless @allow_editing || request.request_method == "GET"
|
||||||
Precious::App.set(:mustache, {:templates => settings.wiki_options[:template_dir]}) if settings.wiki_options[:template_dir]
|
Precious::App.set(:mustache, {:templates => settings.wiki_options[:template_dir]}) if settings.wiki_options[:template_dir]
|
||||||
@base_url = url('/', false).chomp('/')
|
@base_url = url('/', false).chomp('/')
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
module Precious
|
module Precious
|
||||||
module Assets
|
module Assets
|
||||||
MANIFEST = %w(app.js app.css fileview.css ie7.css print.css *.png *.jpg *.svg *.eot *.ttf *.woff *.woff2)
|
MANIFEST = %w(app.js app.css criticmarkup.css fileview.css ie7.css print.css *.png *.jpg *.svg *.eot *.ttf *.woff *.woff2)
|
||||||
ASSET_URL = 'gollum/assets'
|
ASSET_URL = 'gollum/assets'
|
||||||
|
|
||||||
def self.sprockets(dir = File.dirname(File.expand_path(__FILE__)))
|
def self.sprockets(dir = File.dirname(File.expand_path(__FILE__)))
|
||||||
|
|||||||
@@ -113,8 +113,35 @@ var AsciiDoc = {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'function-critic-accept' : {
|
||||||
|
exec: function( txt, selText, $field) {
|
||||||
|
var toReplace = selText.
|
||||||
|
replace(/\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "$1").
|
||||||
|
replace(/\{--(.*?)--[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "").
|
||||||
|
replace(/\{~~(.*?)~>(.*?)~~\}/gm, "$2").
|
||||||
|
replace(/\{\=\=(.*?)[ \t]*(\[(.*?)\])?[ \t]*\=\=\}{>>(.*?)<<\}/gm, "$1").
|
||||||
|
replace(/\{>>(.*?)<<\}/gm, "")
|
||||||
|
$.GollumEditor.replaceSelection( toReplace );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
'function-critic-reject' : {
|
||||||
|
exec: function( txt, selText, $field) {
|
||||||
|
var toReplace = selText.
|
||||||
|
replace(/\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "").
|
||||||
|
replace(/\{--(.*?)--[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "$1").
|
||||||
|
replace(/\{~~(.*?)~>(.*?)~~\}/gm, "$1").
|
||||||
|
replace(/\{\=\=(.*?)[ \t]*(\[(.*?)\])?[ \t]*\=\=\}{>>(.*?)<<\}/gm, "$1").
|
||||||
|
replace(/\{>>(.*?)<<\}/gm, "")
|
||||||
|
$.GollumEditor.replaceSelection( toReplace );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$.GollumEditor.defineLanguage('asciidoc', AsciiDoc);
|
$.GollumEditor.defineLanguage('asciidoc', AsciiDoc);
|
||||||
|
|||||||
@@ -96,8 +96,34 @@ var Creole = {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
'function-critic-accept' : {
|
||||||
|
exec: function( txt, selText, $field) {
|
||||||
|
var toReplace = selText.
|
||||||
|
replace(/\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "$1").
|
||||||
|
replace(/\{--(.*?)--[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "").
|
||||||
|
replace(/\{~~(.*?)~>(.*?)~~\}/gm, "$2").
|
||||||
|
replace(/\{\=\=(.*?)[ \t]*(\[(.*?)\])?[ \t]*\=\=\}{>>(.*?)<<\}/gm, "$1").
|
||||||
|
replace(/\{>>(.*?)<<\}/gm, "")
|
||||||
|
$.GollumEditor.replaceSelection( toReplace );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
'function-critic-reject' : {
|
||||||
|
exec: function( txt, selText, $field) {
|
||||||
|
var toReplace = selText.
|
||||||
|
replace(/\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "").
|
||||||
|
replace(/\{--(.*?)--[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "$1").
|
||||||
|
replace(/\{~~(.*?)~>(.*?)~~\}/gm, "$1").
|
||||||
|
replace(/\{\=\=(.*?)[ \t]*(\[(.*?)\])?[ \t]*\=\=\}{>>(.*?)<<\}/gm, "$1").
|
||||||
|
replace(/\{>>(.*?)<<\}/gm, "")
|
||||||
|
$.GollumEditor.replaceSelection( toReplace );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$.GollumEditor.defineLanguage('creole', Creole);
|
$.GollumEditor.defineLanguage('creole', Creole);
|
||||||
|
|||||||
@@ -139,6 +139,32 @@ var MarkDown = {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'function-critic-accept' : {
|
||||||
|
exec: function( txt, selText, $field) {
|
||||||
|
var toReplace = selText.
|
||||||
|
replace(/\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "$1").
|
||||||
|
replace(/\{--(.*?)--[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "").
|
||||||
|
replace(/\{~~(.*?)~>(.*?)~~\}/gm, "$2").
|
||||||
|
replace(/\{\=\=(.*?)[ \t]*(\[(.*?)\])?[ \t]*\=\=\}{>>(.*?)<<\}/gm, "$1").
|
||||||
|
replace(/\{>>(.*?)<<\}/gm, "")
|
||||||
|
$.GollumEditor.replaceSelection( toReplace );
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
'function-critic-reject' : {
|
||||||
|
exec: function( txt, selText, $field) {
|
||||||
|
var toReplace = selText.
|
||||||
|
replace(/\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "").
|
||||||
|
replace(/\{--(.*?)--[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "$1").
|
||||||
|
replace(/\{~~(.*?)~>(.*?)~~\}/gm, "$1").
|
||||||
|
replace(/\{\=\=(.*?)[ \t]*(\[(.*?)\])?[ \t]*\=\=\}{>>(.*?)<<\}/gm, "$1").
|
||||||
|
replace(/\{>>(.*?)<<\}/gm, "")
|
||||||
|
$.GollumEditor.replaceSelection( toReplace );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -105,8 +105,35 @@ var OrgMode = {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'function-critic-accept' : {
|
||||||
|
exec: function( txt, selText, $field) {
|
||||||
|
var toReplace = selText.
|
||||||
|
replace(/\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "$1").
|
||||||
|
replace(/\{--(.*?)--[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "").
|
||||||
|
replace(/\{~~(.*?)~>(.*?)~~\}/gm, "$2").
|
||||||
|
replace(/\{\=\=(.*?)[ \t]*(\[(.*?)\])?[ \t]*\=\=\}{>>(.*?)<<\}/gm, "$1").
|
||||||
|
replace(/\{>>(.*?)<<\}/gm, "")
|
||||||
|
$.GollumEditor.replaceSelection( toReplace );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
'function-critic-reject' : {
|
||||||
|
exec: function( txt, selText, $field) {
|
||||||
|
var toReplace = selText.
|
||||||
|
replace(/\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "").
|
||||||
|
replace(/\{--(.*?)--[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "$1").
|
||||||
|
replace(/\{~~(.*?)~>(.*?)~~\}/gm, "$1").
|
||||||
|
replace(/\{\=\=(.*?)[ \t]*(\[(.*?)\])?[ \t]*\=\=\}{>>(.*?)<<\}/gm, "$1").
|
||||||
|
replace(/\{>>(.*?)<<\}/gm, "")
|
||||||
|
$.GollumEditor.replaceSelection( toReplace );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var OrgModeHelp = [
|
var OrgModeHelp = [
|
||||||
|
|||||||
@@ -63,8 +63,35 @@ var Pod = {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'function-critic-accept' : {
|
||||||
|
exec: function( txt, selText, $field) {
|
||||||
|
var toReplace = selText.
|
||||||
|
replace(/\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "$1").
|
||||||
|
replace(/\{--(.*?)--[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "").
|
||||||
|
replace(/\{~~(.*?)~>(.*?)~~\}/gm, "$2").
|
||||||
|
replace(/\{\=\=(.*?)[ \t]*(\[(.*?)\])?[ \t]*\=\=\}{>>(.*?)<<\}/gm, "$1").
|
||||||
|
replace(/\{>>(.*?)<<\}/gm, "")
|
||||||
|
$.GollumEditor.replaceSelection( toReplace );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
'function-critic-reject' : {
|
||||||
|
exec: function( txt, selText, $field) {
|
||||||
|
var toReplace = selText.
|
||||||
|
replace(/\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "").
|
||||||
|
replace(/\{--(.*?)--[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "$1").
|
||||||
|
replace(/\{~~(.*?)~>(.*?)~~\}/gm, "$1").
|
||||||
|
replace(/\{\=\=(.*?)[ \t]*(\[(.*?)\])?[ \t]*\=\=\}{>>(.*?)<<\}/gm, "$1").
|
||||||
|
replace(/\{>>(.*?)<<\}/gm, "")
|
||||||
|
$.GollumEditor.replaceSelection( toReplace );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$.GollumEditor.defineLanguage('pod', Pod);
|
$.GollumEditor.defineLanguage('pod', Pod);
|
||||||
|
|||||||
@@ -65,8 +65,35 @@ var RDoc = {
|
|||||||
'function-h3' : {
|
'function-h3' : {
|
||||||
search: /(.+)([\n]?)/gi,
|
search: /(.+)([\n]?)/gi,
|
||||||
replace: "=== $1$2"
|
replace: "=== $1$2"
|
||||||
|
},
|
||||||
|
|
||||||
|
'function-critic-accept' : {
|
||||||
|
exec: function( txt, selText, $field) {
|
||||||
|
var toReplace = selText.
|
||||||
|
replace(/\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "$1").
|
||||||
|
replace(/\{--(.*?)--[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "").
|
||||||
|
replace(/\{~~(.*?)~>(.*?)~~\}/gm, "$2").
|
||||||
|
replace(/\{\=\=(.*?)[ \t]*(\[(.*?)\])?[ \t]*\=\=\}{>>(.*?)<<\}/gm, "$1").
|
||||||
|
replace(/\{>>(.*?)<<\}/gm, "")
|
||||||
|
$.GollumEditor.replaceSelection( toReplace );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
'function-critic-reject' : {
|
||||||
|
exec: function( txt, selText, $field) {
|
||||||
|
var toReplace = selText.
|
||||||
|
replace(/\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "").
|
||||||
|
replace(/\{--(.*?)--[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "$1").
|
||||||
|
replace(/\{~~(.*?)~>(.*?)~~\}/gm, "$1").
|
||||||
|
replace(/\{\=\=(.*?)[ \t]*(\[(.*?)\])?[ \t]*\=\=\}{>>(.*?)<<\}/gm, "$1").
|
||||||
|
replace(/\{>>(.*?)<<\}/gm, "")
|
||||||
|
$.GollumEditor.replaceSelection( toReplace );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$.GollumEditor.defineLanguage('rdoc', RDoc);
|
$.GollumEditor.defineLanguage('rdoc', RDoc);
|
||||||
|
|||||||
@@ -102,8 +102,35 @@ var Textile = {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'function-critic-accept' : {
|
||||||
|
exec: function( txt, selText, $field) {
|
||||||
|
var toReplace = selText.
|
||||||
|
replace(/\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "$1").
|
||||||
|
replace(/\{--(.*?)--[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "").
|
||||||
|
replace(/\{~~(.*?)~>(.*?)~~\}/gm, "$2").
|
||||||
|
replace(/\{\=\=(.*?)[ \t]*(\[(.*?)\])?[ \t]*\=\=\}{>>(.*?)<<\}/gm, "$1").
|
||||||
|
replace(/\{>>(.*?)<<\}/gm, "")
|
||||||
|
$.GollumEditor.replaceSelection( toReplace );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
'function-critic-reject' : {
|
||||||
|
exec: function( txt, selText, $field) {
|
||||||
|
var toReplace = selText.
|
||||||
|
replace(/\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "").
|
||||||
|
replace(/\{--(.*?)--[ \t]*(\[(.*?)\])?[ \t]*\}/gm, "$1").
|
||||||
|
replace(/\{~~(.*?)~>(.*?)~~\}/gm, "$1").
|
||||||
|
replace(/\{\=\=(.*?)[ \t]*(\[(.*?)\])?[ \t]*\=\=\}{>>(.*?)<<\}/gm, "$1").
|
||||||
|
replace(/\{>>(.*?)<<\}/gm, "")
|
||||||
|
$.GollumEditor.replaceSelection( toReplace );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$.GollumEditor.defineLanguage('textile', Textile);
|
$.GollumEditor.defineLanguage('textile', Textile);
|
||||||
|
|||||||
@@ -358,6 +358,14 @@ $(document).ready(function() {
|
|||||||
$.GollumEditor({ NewFile: true, MarkupType: default_markup });
|
$.GollumEditor({ NewFile: true, MarkupType: default_markup });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CriticMarkup
|
||||||
|
if(criticMarkup == 'true') {
|
||||||
|
$('#wiki-content').addClass('criticmarkup');
|
||||||
|
$('ins.break').unwrap();
|
||||||
|
$('span.critic.comment').wrap('<span class="popover" />');
|
||||||
|
$('span.critic.comment').filter(function() {return $(this).text()!="";}).before('‡');
|
||||||
|
}
|
||||||
|
|
||||||
if( $('#wiki-history').length ){
|
if( $('#wiki-history').length ){
|
||||||
var lookup = {};
|
var lookup = {};
|
||||||
$('img.identicon').each(function(index, element){
|
$('img.identicon').each(function(index, element){
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
//= require gollum
|
//= require gollum
|
||||||
//= require editor
|
//= require editor
|
||||||
//= require dialog
|
//= require dialog
|
||||||
|
//= require criticmarkup
|
||||||
//= require template
|
//= require template
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
.criticmarkup mark {
|
||||||
|
background-color: #fffd38;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.criticmarkup del {
|
||||||
|
background-color: #f6a9a9;
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
||||||
|
.criticmarkup ins {
|
||||||
|
background-color: #a9f6a9;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.criticmarkup ins.break {
|
||||||
|
display: block;
|
||||||
|
line-height: 2px;
|
||||||
|
padding: 0 !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
.criticmarkup ins.break span {
|
||||||
|
line-height: 1.5em;
|
||||||
|
}
|
||||||
|
.criticmarkup .popover {
|
||||||
|
background-color: #fffd38;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
.criticmarkup .critic.comment {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.criticmarkup .popover:hover span.critic.comment {
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
width: 200px;
|
||||||
|
left: 30%;
|
||||||
|
font-size: 0.8em;
|
||||||
|
color: #ccc;
|
||||||
|
background-color: #333;
|
||||||
|
z-index: 10;
|
||||||
|
padding: 0.5em 1em;
|
||||||
|
border-radius: 0.5em;
|
||||||
|
}
|
||||||
@@ -367,8 +367,8 @@ a#function-h2 { @include editor-button(9); }
|
|||||||
a#function-h3 { @include editor-button(10); }
|
a#function-h3 { @include editor-button(10); }
|
||||||
a#function-link { @include editor-button(11); }
|
a#function-link { @include editor-button(11); }
|
||||||
a#function-image { @include editor-button(12); }
|
a#function-image { @include editor-button(12); }
|
||||||
a#function-plus { @include editor-button(13); }
|
a#function-critic-accept { @include editor-button(13); }
|
||||||
a#function-minus { @include editor-button(14); }
|
a#function-critic-reject { @include editor-button(14); }
|
||||||
a#function-help { @include editor-button(15); }
|
a#function-help { @include editor-button(15); }
|
||||||
a#function-search { @include editor-button(16); }
|
a#function-search { @include editor-button(16); }
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,12 @@
|
|||||||
<span>Link</span></a>
|
<span>Link</span></a>
|
||||||
<a href="#" id="function-image" class="function-button" title="Image">
|
<a href="#" id="function-image" class="function-button" title="Image">
|
||||||
<span>Image</span></a>
|
<span>Image</span></a>
|
||||||
|
{{#critic_markup}}
|
||||||
|
<a href="#" id="function-critic-accept" class="function-button" title="Accept Selected CriticMarkup">
|
||||||
|
<span>Accept Selected CriticMarkup</span></a>
|
||||||
|
<a href="#" id="function-critic-reject" class="function-button" title="Reject Selected CriticMarkup">
|
||||||
|
<span>Reject Selected CriticMarkup</span></a>
|
||||||
|
{{/critic_markup}}
|
||||||
<span class="function-divider"> </span>
|
<span class="function-divider"> </span>
|
||||||
<a href="#" id="function-help" class="function-button" title="Help">
|
<a href="#" id="function-help" class="function-button" title="Help">
|
||||||
<span>Help</span></a>
|
<span>Help</span></a>
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
{{#page}}
|
{{#page}}
|
||||||
var pageFullPath = '{{url_path}}';
|
var pageFullPath = '{{url_path}}';
|
||||||
{{/page}}
|
{{/page}}
|
||||||
|
var criticMarkup = '{{critic_markup}}';
|
||||||
</script>
|
</script>
|
||||||
{{#sprockets_javascript_tag}}app{{/sprockets_javascript_tag}}
|
{{#sprockets_javascript_tag}}app{{/sprockets_javascript_tag}}
|
||||||
{{#use_identicon}}
|
{{#use_identicon}}
|
||||||
|
|||||||
@@ -60,6 +60,10 @@ module Precious
|
|||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def critic_markup
|
||||||
|
@critic_markup
|
||||||
|
end
|
||||||
|
|
||||||
def allow_uploads
|
def allow_uploads
|
||||||
@allow_uploads
|
@allow_uploads
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -44,6 +44,10 @@ module Precious
|
|||||||
@js
|
@js
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def critic_markup
|
||||||
|
@critic_markup
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user