if (response.href) {
$(this).editable('option', 'url', response.href);
}
+ if ($(this).attr('data-name')) {
+ var textileAttr = $(this).attr('data-name') + 'Textile';
+ if (response[textileAttr]) {
+ $(this).attr('data-textile', response[textileAttr]);
+ }
+ }
return;
},
error: function(response, newValue) {
// information if it appears elsewhere on the page.
if (reason != 'save') return;
var html = $(this).html();
+ if( $(this).attr('data-textile') ) {
+ html = $(this).attr('data-textile');
+ $(this).html(html);
+ }
var uuid = $(this).attr('data-object-uuid');
var attr = $(this).attr('data-name');
var edited = this;
return render_not_found("object not found")
end
respond_to do |f|
- f.json { render json: @object.attributes.merge(href: url_for(action: :show, id: @object)) }
+ f.json do
+ extra_attrs = { href: url_for(action: :show, id: @object) }
+ @object.textile_attributes.each do |textile_attr|
+ extra_attrs.merge!({ "#{textile_attr}Textile" => view_context.render_content_from_database(@object.attributes[textile_attr]) })
+ end
+ render json: @object.attributes.merge(extra_attrs)
+ end
f.html {
if params['tab_pane']
render_pane params['tab_pane']
end
def render_content_from_database(markup)
- raw RedCloth.new(markup).to_html
+ raw RedCloth.new(markup.to_s).to_html(:refs_arvados, :textile) if markup
end
def human_readable_bytes_html(n)
if !object.attribute_editable?(attr, :ever) or
(!object.editable? and
!object.owner_uuid.in?(my_projects.collect(&:uuid)))
- return ((attrvalue && attrvalue.length > 0 && attrvalue) ||
- (attr == 'name' and object.andand.default_name) ||
- '(none)')
+ if attrvalue && attrvalue.length > 0
+ return render_textile_if_textile( object, attr, attrvalue )
+ else
+ return (attr == 'name' and object.andand.default_name) ||
+ '(none)'
+ end
end
input_type = 'text'
end
attrvalue = attrvalue.to_json if attrvalue.is_a? Hash or attrvalue.is_a? Array
+ rendervalue = render_textile_if_textile( object, attr, attrvalue )
ajax_options = {
"data-pk" => {
@unique_id ||= (Time.now.to_f*1000000).to_i
span_id = object.uuid.to_s + '-' + attr.to_s + '-' + (@unique_id += 1).to_s
- span_tag = content_tag 'span', attrvalue.to_s, {
+ span_tag = content_tag 'span', rendervalue, {
"data-emptytext" => (object.andand.default_name || 'none'),
"data-placement" => "bottom",
"data-type" => input_type,
"data-name" => attr,
"data-object-uuid" => object.uuid,
"data-toggle" => "manual",
+ "data-value" => attrvalue,
"id" => span_id,
- :class => "editable"
+ :class => "editable #{is_textile?( object, attr ) ? 'editable-textile' : ''}"
}.merge(htmloptions).merge(ajax_options)
edit_button = raw('<a href="#" class="btn btn-xs btn-default btn-nodecorate" data-toggle="x-editable tooltip" data-toggle-selector="#' + span_id + '" data-placement="top" title="' + (htmloptions[:tiptitle] || 'edit') + '"><i class="fa fa-fw fa-pencil"></i></a>')
if htmloptions[:btnplacement] == :left
nil
end
end
+
+private
+ def is_textile?( object, attr )
+ is_textile = object.textile_attributes.andand.include?(attr)
+ end
+
+ def render_textile_if_textile( object, attr, attrvalue )
+ is_textile?( object, attr ) ? render_content_from_database(attrvalue) : attrvalue
+ end
end
--- /dev/null
+module RedClothArvadosLinkExtension
+
+ class RedClothViewBase < ActionView::Base
+ include ApplicationHelper
+ include ActionView::Helpers::UrlHelper
+ include Rails.application.routes.url_helpers
+
+ def helper_link_to_if_arvados_object(link, opts)
+ link_to_if_arvados_object(link, opts)
+ end
+ end
+
+ def refs_arvados(text)
+ text.gsub!(/"(?!\s)([^"]*\S)":(\S+)/) do
+ text, link = $~[1..2]
+ arvados_link = RedClothViewBase.new.helper_link_to_if_arvados_object(link, { :link_text => text })
+ arvados_link ? arvados_link : "#{text}:#{link}"
+ end
+ end
+end
+
+RedCloth.send(:include, RedClothArvadosLinkExtension)