Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
wice_grid.coffee
WiceGridProcessor = (name, base_request_for_filter, base_link_for_show_all_records, link_for_export, parameter_name_for_query_loading, parameter_name_for_focus, environment) ->
this.checkIfJsFrameworkIsLoaded = () ->
if ! jQuery
alert "jQuery not loaded, WiceGrid cannot proceed!"
this.checkIfJsFrameworkIsLoaded()
this.name = name
this.parameter_name_for_query_loading = parameter_name_for_query_loading
this.parameter_name_for_focus = parameter_name_for_focus
this.base_request_for_filter = base_request_for_filter
this.base_link_for_show_all_records = base_link_for_show_all_records
this.link_for_export = link_for_export
this.filter_declarations = new Array()
this.environment = environment
this.toString = () ->
"<WiceGridProcessor instance for grid '" + this.name + "'>"
this.process = (dom_id_to_focus) ->
window.location = this.build_url_with_params dom_id_to_focus
this.reload_page_for_given_grid_state = (grid_state) ->
request_path = this.grid_state_to_request grid_state
window.location = this.append_to_url this.base_link_for_show_all_records, request_path
this.load_query = (query_id) ->
request = this.append_to_url this.build_url_with_params(), this.parameter_name_for_query_loading + encodeURIComponent(query_id)
window.location = request
this.save_query = (field_id, query_name, base_path_to_query_controller, grid_state, input_ids) ->
if input_ids instanceof Array
input_ids.each(dom_id) ->
grid_state.push ['extra[' + dom_id + ']', $('#'+ dom_id)[0].value]
request_path = this.grid_state_to_request grid_state
jQuery.ajax
url: base_path_to_query_controller,
async: true,
data: request_path + '&query_name=' + encodeURIComponent(query_name),
dataType: 'script',
type: 'POST',
success: () -> $('#' + field_id).val('')
this.grid_state_to_request = (grid_state) ->
jQuery.map grid_state, (pair) ->
encodeURIComponent(pair[0]) + '=' + encodeURIComponent(pair[1])
.join '&'
this.append_to_url = (url, str) ->
if url.indexOf('?') != -1
if /[&\?]$/.exec url
sep = ''
else
sep = '&'
else
sep = '?'
url + sep + str
this.build_url_with_params = (dom_id_to_focus) ->
results = new Array()
_this = this
jQuery.each this.filter_declarations, (i, filter_declaration) ->
param = _this.read_values_and_form_query_string filter_declaration.filter_name, filter_declaration.detached, filter_declaration.templates, filter_declaration.ids
if param && param != ''
results.push param
res = this.base_request_for_filter
if results.length != 0
all_filter_params = results.join '&'
res = this.append_to_url res, all_filter_params
if dom_id_to_focus
res = this.append_to_url res, this.parameter_name_for_focus + dom_id_to_focus
res
this.reset = () ->
window.location = this.base_request_for_filter
this.export_to_csv = () ->
window.location = this.link_for_export
this.register = (func) ->
this.filter_declarations.push func
this.read_values_and_form_query_string = (filter_name, detached, templates, ids) ->
res = new Array()
for i in [0 .. templates.length-1]
if $(ids[i]) == null
if this.environment == "development"
message = 'WiceGrid: Error reading state of filter "' + filter_name + '". No DOM element with id "' + ids[i] + '" found.'
if detached
message += 'You have declared "' + filter_name + '" as a detached filter but have not output it anywhere in the template. Read documentation about detached filters.'
alert message
return ''
el = $('#' + ids[i])
if el[0] && el[0].type == 'checkbox'
if el[0].checked
val = 1
else
val = el.val()
if val instanceof Array
for j in [0 .. val.length-1]
if val[j] && val[j] != ""
res.push templates[i] + encodeURIComponent(val[j])
else if val && val != ''
res.push templates[i] + encodeURIComponent(val)
res.join '&'
this
toggle_multi_select = (select_id, link_obj, expand_label, collapse_label) ->
select = $('#' + select_id)[0]
if select.multiple == true
select.multiple = false
link_obj.title = expand_label
else
select.multiple = true
link_obj.title = collapse_label
WiceGridProcessor._version = '0.4.3'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment