widgetise controls/buttons

pull/6827/head
Tim Felgentreff 14 years ago
parent 59d5d21a73
commit dbc1fc11c8
  1. 62
      assets/javascripts/reporting/controls.js
  2. 3
      lib/widget/controls.rb
  3. 17
      lib/widget/controls/apply.rb
  4. 25
      lib/widget/controls/delete.rb
  5. 29
      lib/widget/controls/query_name.rb
  6. 5
      lib/widget/controls/reset.rb
  7. 22
      lib/widget/controls/save.rb
  8. 5
      lib/widget/controls/save_as.rb
  9. 23
      lib/widget/settings.rb

@ -0,0 +1,62 @@
/*jslint white: false, nomen: true, devel: true, on: true, debug: false, evil: true, onevar: false, browser: true, white: false, indent: 2 */
/*global window, $, $$, Reporting, Effect, Ajax, Element */
Reporting.Controls = {
query_name_editor: function (target_id) {
var target = $(target_id);
var isPublic = target.getAttribute("data-is_public") === "true";
var updateUrl = target.getAttribute("data-update_url");
var translations = target.getAttribute("data-translations");
if (translations.isJSON()) {
translations = translations.evalJSON(true);
} else {
translations = {};
}
Ajax.InPlaceEditor(target_id, updateUrl, {
callback: function (form, value) {
return 'query_is_public=' + (form.query_is_public.checked === true) + '&query_name=' + encodeURIComponent(value);
},
okControl: 'button',
cancelControl: 'button',
externalControl: 'query-name-edit-button',
okText: translations.rename === undefined ? 'ok' : translations.rename,
cancelText: translations.cancel === undefined ? 'cancel' : translations.cancel,
savingText: translations.saving === undefined ? 'Saving...' : translations.saving,
loadingText: translations.loading === undefined ? 'Loading...' : translations.loading,
clickToEditText: translations.clickToEdit === undefined ? 'Click to edit' : translations.clickToEdit,
onFormCustomization: function (ipe, ipeForm) {
var label;
var checkbox;
var chk_id = 'rename_query_is_public';
checkbox = document.createElement('input');
checkbox.value = 1;
checkbox.type = 'checkbox';
checkbox.id = chk_id;
checkbox.name = 'query_is_public';
checkbox.checked = isPublic;
label = document.createElement('label');
label.id = 'in_place_save_is_public_question';
label.htmlFor = chk_id;
label.appendChild(document.createTextNode(translations.isPublic === undefined ? 'public?' : translations.isPublic));
ipeForm.insert(label);
ipeForm.insert(checkbox);
}
});
},
toggle_delete_form: function () {
var offset = $('query-icon-delete').positionedOffset().left;
$('delete_form').setStyle("left: " + offset + "px").toggle();
}
};
Reporting.onload(function () {
Reporting.Controls.query_name_editor('query_saved_name');
$("query-icon-delete").observe("click", Reporting.Controls.toggle_delete_form);
});

@ -0,0 +1,3 @@
class Widget::Controls < Widget::Base
extend ProactiveAutoloader
end

@ -0,0 +1,17 @@
class Widget::Controls::Apply < Widget::Base
def render
link_to({}, {:href => "#",
:onclick => "
selectAllOptions('group_by_rows');
selectAllOptions('group_by_columns');
new Ajax.Updater('result-table',
'#{url_for(:action => 'index', :set_filter => '1')}',
{ asynchronous:true,
evalScripts:true,
postBody: Form.serialize('query_form') + '\\n' + $('filters').innerHTML });
return false;".html_safe,
:class => 'button apply'}) do
content_tag(:span, content_tag(:em, l(:button_apply)))
end
end
end

@ -0,0 +1,25 @@
class Widget::Controls::Delete < Widget::Base
def render
return "" if @query.new_record?
content_tag :span do
button = link_to_function l(:button_delete), "toggle_delete_form();",
:class => 'breadcrumb_icon icon-delete',
:id => 'query-icon-delete',
:title => l(:button_delete)
popup = content_tag :div, :id => "delete_form", :class => "button_form",
:style => "display:none" do
question = content_tag :p, l(:label_really_delete_question)
options = content_tag :p do
opt1 = link_to l(:button_delete), url_for(:action => 'delete', :id => @query.id)
opt2 = link_to_function l(:button_cancel), "toggle_delete_form();", :class => 'icon icon-cancel'
opt1 + opt2
end
question + options
end
button + popup
end
end
end

@ -0,0 +1,29 @@
class Widget::Controls::QueryName < Widget::Base
def render
options = { "data-translations" => translations }
if @query.new_record?
name = l(:label_save_this_query)
icon = ""
else
name = @query.name
icon = content_tag :a, :href => "#", :class => 'breadcrumb_icon icon-edit',
:id => "query-name-edit-button", :title => "#{l(:button_rename)}" do
l(:button_rename)
end
options["data-is_public"] = @query.is_public
options["data-update-url"] = url_for(:action => "update",
:controller => @engine.name.underscore.pluralize,
:id => @query.id).html_safe
end
content_tag(:span, name, :id => "query_saved_name") + icon
end
def translations
{ :rename => l(:button_rename),
:cancel => l(:button_cancel),
:loading => l(:label_loading),
:clickToEdit => l(:label_click_to_edit),
:isPublic => l(:field_is_public),
:saving => l(:label_saving) }.to_json.html_safe
end
end

@ -0,0 +1,5 @@
class Widget::Controls::Reset < Widget::Base
def render
link_to_function l(:button_reset), "restore_query_inputs();", :class => 'icon icon-reload'
end
end

@ -0,0 +1,22 @@
class Widget::Controls::Save < Widget::Base
def render
unless @query.new_record?
link_to({}, {:href => "#",
:onclick => "
selectAllOptions('group_by_rows');
selectAllOptions('group_by_columns');
new Ajax.Updater('result-table',
'#{url_for(:action => 'update', :id => @query.id, :set_filter => '1')}',
{ asynchronous: true,
evalScripts: true,
postBody: Form.serialize('query_form') });
return false;",
:class => 'breadcrumb_icon icon-save',
:title => l(:button_save)}) do
content_tag(:span, content_tag(:em, l(:button_save)))
end
else
""
end
end
end

@ -0,0 +1,5 @@
class Widget::Controls::SaveAs < Widget::Base
def render
"TODO: Save as"
end
end

@ -11,24 +11,15 @@ class Widget::Settings < Widget::Base
render_widget Widget::GroupBys, @query render_widget Widget::GroupBys, @query
end end
buttons = content_tag :p, :class => "buttons form_controls" do controls = content_tag :p, :class => "buttons form_controls" do
p = link_to({}, {:href => "#", widgets = render_widget(Widget::Controls::Apply, @query)
:onclick => " render_widget(Widget::Controls::Save, @query, :to => widgets)
selectAllOptions('group_by_rows'); render_widget(Widget::Controls::SaveAs, @query, :to => widgets)
selectAllOptions('group_by_columns'); render_widget(Widget::Controls::Reset, @query, :to => widgets)
new Ajax.Updater('result-table', render_widget(Widget::Controls::Delete, @query, :to => widgets)
'#{url_for(:action => 'index', :set_filter => '1')}',
{ asynchronous:true,
evalScripts:true,
postBody: Form.serialize('query_form') + '\\n' + $('filters').innerHTML });
return false;".html_safe,
:class => 'button apply'}) do
content_tag(:span, content_tag(:em, l(:button_apply)))
end
p += link_to_function l(:button_reset), "restore_query_inputs();", :class => 'icon icon-reload'
end end
fieldsets + buttons fieldsets + controls
end end
end end
end end

Loading…
Cancel
Save