Commit 59ce6bc7 by aa.gusti

datatable date

1 parent 8ec0c6d1
...@@ -500,6 +500,7 @@ def add_view_config(config, module, view_name): ...@@ -500,6 +500,7 @@ def add_view_config(config, module, view_name):
renderer=renderers) renderer=renderers)
except Exception as e: except Exception as e:
log.error(str(e)) log.error(str(e))
log.error(dict(row.__dict__))
config.scan('.') config.scan('.')
......
...@@ -46,7 +46,10 @@ def routes_callback(typ, **kwargs): ...@@ -46,7 +46,10 @@ def routes_callback(typ, **kwargs):
return None return None
value = splited_last value = splited_last
elif field == "class_view": elif field == "class_view":
if data["def_func"] == "list" and not data["class_view"]: if data["def_func"] == "list" and not data["class_view"] \
or splited_last not in ["add", "edit", "delete", "view", "act", "report"]:
log.debug(splited[-1:])
log.debug(data)
return "_".join(splited[1:]) return "_".join(splited[1:])
if splited_last == "menu": if splited_last == "menu":
......
...@@ -136,7 +136,7 @@ class BaseView(object): ...@@ -136,7 +136,7 @@ class BaseView(object):
self.list_buttons = (btn_add, btn_close) self.list_buttons = (btn_add, btn_close)
self.columns = None self.columns = None
self.form_params = dict(scripts="") self.form_params = dict(scripts="")
self.list_url = '' self.list_url = []
self.list_route = '' self.list_route = ''
self.list_schema = colander.Schema self.list_schema = colander.Schema
self.allow_view = True self.allow_view = True
...@@ -145,7 +145,9 @@ class BaseView(object): ...@@ -145,7 +145,9 @@ class BaseView(object):
self.allow_post = False self.allow_post = False
self.allow_unpost = False self.allow_unpost = False
self.state_save = False self.state_save = False
self.server_side = True
self.list_form = None self.list_form = None
self.form_list = None
self.filter_columns = False self.filter_columns = False
self.form_scripts = """ self.form_scripts = """
...@@ -243,16 +245,18 @@ class BaseView(object): ...@@ -243,16 +245,18 @@ class BaseView(object):
allow_unpost = kwargs.get("allow_unpost", self.allow_unpost) allow_unpost = kwargs.get("allow_unpost", self.allow_unpost)
state_save = kwargs.get("state_save", self.state_save) state_save = kwargs.get("state_save", self.state_save)
filter_columns = kwargs.get("filter_columns", self.filter_columns) filter_columns = kwargs.get("filter_columns", self.filter_columns)
server_side = kwargs.get("server_side", self.server_side)
schema = self.list_schema() schema = self.list_schema()
schema = schema.bind(request=self.req) schema = schema.bind(request=self.req)
list_url = kwargs.get("list_url", None)
new_buttons = kwargs.get("new_buttons") new_buttons = kwargs.get("new_buttons")
if not new_buttons: if not new_buttons:
new_buttons = self.new_buttons new_buttons = self.new_buttons
if not list_url: list_url = kwargs.get("list_url", self.list_url)
if not list_url and self.list_route:
list_url = self.req.route_url(self.list_route) list_url = self.req.route_url(self.list_route)
action_suffix = kwargs.get("action_suffix", "/grid/act") list_url = list_url and list_url[0:1] != "/" and "/" + list_url or list_url
action_suffix = list_url and kwargs.get("action_suffix", "/grid/act") or None
table = DeTable(schema, table = DeTable(schema,
action=list_url, action=list_url,
action_suffix=action_suffix, action_suffix=action_suffix,
...@@ -266,9 +270,14 @@ class BaseView(object): ...@@ -266,9 +270,14 @@ class BaseView(object):
state_save=state_save, state_save=state_save,
new_buttons=new_buttons, new_buttons=new_buttons,
filter_columns=filter_columns, filter_columns=filter_columns,
server_side=server_side
) )
resources = table.get_widget_resources() resources = table.get_widget_resources()
# resources=dict(css="", js="") # resources=dict(css="", js="")
if kwargs.get("is_object"):
return dict(form=table, scripts="", css=resources["css"],
js=resources["js"])
return dict(form=table.render(), scripts="", css=resources["css"], return dict(form=table.render(), scripts="", css=resources["css"],
js=resources["js"]) js=resources["js"])
...@@ -294,9 +303,13 @@ class BaseView(object): ...@@ -294,9 +303,13 @@ class BaseView(object):
def get_list(self, **kwargs): def get_list(self, **kwargs):
url = [] url = []
select_list = {} select_list = {}
list_schema = kwargs.get("list_schema")
if not list_schema:
list_schema = self.list_schema and self.list_schema or self.form_list
if not self.columns: if not self.columns:
columns = [] columns = []
for d in self.list_schema(): for d in list_schema():
global_search = True global_search = True
search_method = hasattr(d, "search_method") \ search_method = hasattr(d, "search_method") \
and getattr(d, "search_method") or "string_contains" and getattr(d, "search_method") or "string_contains"
...@@ -406,11 +419,17 @@ class BaseView(object): ...@@ -406,11 +419,17 @@ class BaseView(object):
def next_edit(self, form, **kwargs): def next_edit(self, form, **kwargs):
return self.route_list(**kwargs) return self.route_list(**kwargs)
def returned_form(self, form, table, **kwargs): def returned_form(self, form, table=None, **kwargs):
resources = form.get_widget_resources() resources = form.get_widget_resources()
readonly = "readonly" in kwargs and kwargs["readonly"] or False readonly = "readonly" in kwargs and kwargs["readonly"] or False
kwargs["readonly"] = readonly kwargs["readonly"] = readonly
is_object = kwargs.get("is_object", self.is_object) is_object = kwargs.get("is_object", self.is_object)
if dict == type(table):
resources["js"].extend(set(table["js"]) - set(resources["js"]))
resources["css"].extend(set(table["css"]) - set(resources["css"]))
table = table["form"]
# resources["js"] = list(resources["js"])
# resources["css"] = list(resources["css"])
if is_object: if is_object:
return dict(form=form, return dict(form=form,
table=table and table.render() or None, table=table and table.render() or None,
...@@ -566,10 +585,10 @@ class BaseView(object): ...@@ -566,10 +585,10 @@ class BaseView(object):
def view_add(self, **kwargs): def view_add(self, **kwargs):
# bindings = self.get_bindings() # bindings = self.get_bindings()
form = self.get_form(self.add_schema, **kwargs) form = self.get_form(self.add_schema, **kwargs)
table = self.get_item_table(**kwargs)
resources = form.get_widget_resources() resources = form.get_widget_resources()
is_object = kwargs.get("is_object", self.is_object) is_object = kwargs.get("is_object", self.is_object)
kwargs["is_object"] = is_object kwargs["is_object"] = is_object
table = self.get_item_table(**kwargs)
if self.req.POST: if self.req.POST:
if 'save' in self.req.POST: if 'save' in self.req.POST:
controls = self.req.POST.items() controls = self.req.POST.items()
...@@ -657,7 +676,11 @@ class BaseView(object): ...@@ -657,7 +676,11 @@ class BaseView(object):
return d return d
def get_item_table(self, row=None, **kwargs): def get_item_table(self, row=None, **kwargs):
return None if not self.form_list:
return None
self.list_schema = self.form_list
kwargs["is_object"] = True
return self.view_list(**kwargs)
def before_edit(self, form): def before_edit(self, form):
""" """
...@@ -748,6 +771,7 @@ class BaseView(object): ...@@ -748,6 +771,7 @@ class BaseView(object):
form = self.get_form( form = self.get_form(
self.edit_schema, buttons=(btn_delete, btn_cancel)) self.edit_schema, buttons=(btn_delete, btn_cancel))
table = self.get_item_table(row) table = self.get_item_table(row)
resources = form.get_widget_resources() resources = form.get_widget_resources()
form.set_appstruct(self.get_values(row)) form.set_appstruct(self.get_values(row))
kwargs["readonly"] = True kwargs["readonly"] = True
......
...@@ -140,7 +140,12 @@ class ListSchema(colander.Schema): ...@@ -140,7 +140,12 @@ class ListSchema(colander.Schema):
path = colander.SchemaNode( path = colander.SchemaNode(
colander.String(), title='Path', colander.String(), title='Path',
searchable=True) searchable=True)
template = colander.SchemaNode( class_view = colander.SchemaNode(
colander.String(),
searchable=False,
global_search=False,
)
def_func = colander.SchemaNode(
colander.String(), colander.String(),
searchable=False, searchable=False,
global_search=False, global_search=False,
......
...@@ -107,7 +107,7 @@ class DeTable(field.Field): ...@@ -107,7 +107,7 @@ class DeTable(field.Field):
filters='true', filters='true',
paginates='true', paginates='true',
params="", params="",
server_side='true', server_side=True,
state_save=True, state_save=True,
data=[], data=[],
allow_edit=True, allow_edit=True,
...@@ -123,6 +123,7 @@ class DeTable(field.Field): ...@@ -123,6 +123,7 @@ class DeTable(field.Field):
self.rows = kw.get("rows") self.rows = kw.get("rows")
self.action = action self.action = action
self.tableid = tableid self.tableid = tableid
self.data = data
new_buttons = kw.get("new_buttons") or () new_buttons = kw.get("new_buttons") or ()
...@@ -192,8 +193,7 @@ class DeTable(field.Field): ...@@ -192,8 +193,7 @@ class DeTable(field.Field):
table_widget = widget.TableWidget() table_widget = widget.TableWidget()
self.widget = table_widget self.widget = table_widget
self.server_side = json.dumps(server_side)
self.server_side = server_side
self.data = data self.data = data
columns = [] columns = []
headers = [] headers = []
...@@ -236,10 +236,13 @@ class DeTable(field.Field): ...@@ -236,10 +236,13 @@ class DeTable(field.Field):
if isinstance(f.widget, deform.widget.HiddenWidget): if isinstance(f.widget, deform.widget.HiddenWidget):
d["visible"] = False d["visible"] = False
if isinstance(f.widget, deform.widget.CheckboxWidget): elif isinstance(f.widget, deform.widget.CheckboxWidget):
d.update(self.widget_checkbox(f)) d.update(self.widget_checkbox(f))
elif isinstance(f.widget, deform.widget.SelectWidget):
d.update(self.widget_select(f))
else: else:
d["checkbox"] = False d["wg_checkbox"] = False
d["wg_select"] = False
if hasattr(f, "url"): if hasattr(f, "url"):
url = f.url url = f.url
d["render"] = """ d["render"] = """
...@@ -294,7 +297,6 @@ class DeTable(field.Field): ...@@ -294,7 +297,6 @@ class DeTable(field.Field):
# cols2.append(data) # cols2.append(data)
filter_scripts = self.get_filter_scripts(f) filter_scripts = self.get_filter_scripts(f)
self.filter_scripts = filter_scripts self.filter_scripts = filter_scripts
self.filter_form = filter_form self.filter_form = filter_form
...@@ -313,8 +315,8 @@ class DeTable(field.Field): ...@@ -313,8 +315,8 @@ class DeTable(field.Field):
def widget_checkbox(self, column): def widget_checkbox(self, column):
d = {} d = {}
d["checkbox"] = True d["wg_checkbox"] = True
d["check_val"] = [column.widget.true_val, column.widget.false_val] d["wg_checkbox_val"] = [column.widget.true_val, column.widget.false_val]
d["className"] = "text-center" d["className"] = "text-center"
d["width"] = "30pt" d["width"] = "30pt"
# d["render"] = """ # d["render"] = """
...@@ -329,6 +331,16 @@ class DeTable(field.Field): ...@@ -329,6 +331,16 @@ class DeTable(field.Field):
return d return d
def widget_select(self, column):
d = {}
d["wg_select"] = True
d["wg_select_val"] = column.widget.values
if column.widget.values:
for val in column.widget.values:
if hasattr(column, f"color_{val}"):
d[f"color_{val}"] = getattr(column, f"color_{val}")
return d
def action_url(self, f): def action_url(self, f):
act = "" act = ""
if self.allow_view: if self.allow_view:
...@@ -365,8 +377,8 @@ class DeTable(field.Field): ...@@ -365,8 +377,8 @@ class DeTable(field.Field):
txt = f'id="{col_id}" data-index={field_index} ' txt = f'id="{col_id}" data-index={field_index} '
html += '<div class="form-group">' html += '<div class="form-group">'
if isinstance(f.widget, deform.widget.CheckboxWidget): if isinstance(f.widget, deform.widget.CheckboxWidget):
check_val = [f.widget.true_val, f.widget.false_val] wg_check_val = [f.widget.true_val, f.widget.false_val]
radio_val = [["", 'Semua'], [check_val[0], 'Aktif'], [check_val[1], 'Pasif']] radio_val = [["", 'Semua'], [wg_check_val[0], 'Aktif'], [wg_check_val[1], 'Pasif']]
html += '<label class="" for="' + col_id + '">' + f.title + '</label>' html += '<label class="" for="' + col_id + '">' + f.title + '</label>'
html += '<div class="input-group" id="' + col_id + '">' html += '<div class="input-group" id="' + col_id + '">'
for rdo in range(len(radio_val)): for rdo in range(len(radio_val)):
...@@ -381,26 +393,43 @@ class DeTable(field.Field): ...@@ -381,26 +393,43 @@ class DeTable(field.Field):
html += f'{radio_val[rdo][1]}</label>' html += f'{radio_val[rdo][1]}</label>'
html += '</label>' html += '</label>'
html += '</div>' html += '</div>'
elif isinstance(f.widget, deform.widget.SelectWidget):
# elif isinstance(f.typ, colander.Date): wg_select_val = f.widget.values
# requirements = f.widget.requirements html += f'<select class="form-control {self.tableid}-control-filter"'
# for requirement in requirements: html += f'placeholder="{f.title}" {txt}/>'
# if type(requirement) == dict and "js" in requirement: html += '<option value="">Semua</option>'
# for req in requirement: for key in wg_select_val:
# html += f'<option value="{key}">{wg_select_val[key]}</option>'
# html += f'<input type="text" class="form-control {self.tableid}-control-filter hasDatePicker"' html += '</select>'
# html += f'placeholder="{f.title}" {txt}/>'
# html += """ elif isinstance(f.typ, colander.Date):
# <script type="text/javascript"> html += f'<div class="form-group" {txt}>'
# deform.addCallback( html += f'<div class="input-group">'
# '%s', html += f'<span class="input-group-addon">{f.title}</span>'
# function deform_cb(oid) { html += f'<span class="input-group-addon"><input type="date" class="form-control {self.tableid}-control-filter hasDatePicker"'
# $('#'+oid).datepicker(); html += f'data-index={field_index} placeholder="{f.title} Awal" '
# } html += f'name="{col_id}" id="{col_id}-min"/></span>'
# ); html += f'<span class="input-group-addon"><input type="date" class="form-control {self.tableid}-control-filter hasDatePicker"'
# </script> html += f'data-index={field_index} placeholder="{f.title} Akhir" '
# """ % self.tableid html += f'name="{col_id}" id="{col_id}-max" /></span>'
html += f'</div>'
html += f'</div>'
# html += """
# <script type="text/javascript">
# deform.addCallback(
# '%s',
# function deform_cb(oid) {
# $('#'+oid).datepicker();
# }
# );
# </script>
# """ % self.tableid
# requirements = f.widget.requirements
# for requirement in requirements:
# if type(requirement) == dict and "js" in requirement:
# for req in requirement:
#
else: else:
html += f'<input type="text" class="form-control {self.tableid}-control-filter"' html += f'<input type="text" class="form-control {self.tableid}-control-filter"'
html += f'placeholder="{f.title}" {txt}/>' html += f'placeholder="{f.title}" {txt}/>'
...@@ -410,6 +439,7 @@ class DeTable(field.Field): ...@@ -410,6 +439,7 @@ class DeTable(field.Field):
def get_filter_scripts(self, f): def get_filter_scripts(self, f):
return "" return ""
""" """
for (let co in ${tableid}Columns) { for (let co in ${tableid}Columns) {
if (${tableid}Columns[co].checkbox === true) { if (${tableid}Columns[co].checkbox === true) {
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
<div role="content"> <div role="content">
<div class="widget-body"> <div class="widget-body">
<div class="row" tal:condition="filter_columns" > <div class="row" tal:condition="filter_columns" >
<div id="${tableid}-form-filter-container" class="col-md-6"> <div id="${tableid}-form-filter-container" class="col-md-3">
<div id="${tableid}-form-filter" class="collapse"> <div id="${tableid}-form-filter" class="collapse">
${structure:filter_form} ${structure:filter_form}
</div> </div>
...@@ -77,265 +77,272 @@ ...@@ -77,265 +77,272 @@
var o${tableid}Url = o${tableid}Uri + "${url_suffix}"; var o${tableid}Url = o${tableid}Uri + "${url_suffix}";
var m${tableid}ID; var m${tableid}ID;
deform.addCallback('${tableid}', function (oid) { deform.addCallback('${tableid}', function (oid) {
function displayEmptyID() { function displayEmptyID() {
$("#emptyID").show(); $("#emptyID").show();
$('#emptyID').animate({opacity: 0.8}, 2000); $('#emptyID').animate({opacity: 0.8}, 2000);
setTimeout(function () { setTimeout(function () {
$("#emptyID").fadeTo(500, 0).slideUp(500, function () { $("#emptyID").fadeTo(500, 0).slideUp(500, function () {
$("#emptyID").hide(); $("#emptyID").hide();
}); });
} }
, 4000); , 4000);
} }
let tb_array = [ let tb_array = [
'<div class="btn-group pull-left">', '<div class="btn-group pull-left">',
'${structure:buttons}', '${structure:buttons}',
' &nbsp;', ' &nbsp;',
'</div>', '</div>',
] ]
let ${tableid}Language = { let ${tableid}Language = {
"search": "Cari: ", "search": "Cari: ",
"paginate": { "paginate": {
"first": '<span class="glyphicon glyphicon-step-backward"></span> ', "first": '<span class="glyphicon glyphicon-step-backward"></span> ',
"last": '<span class="glyphicon glyphicon glyphicon-step-forward"></span> ', "last": '<span class="glyphicon glyphicon glyphicon-step-forward"></span> ',
"previous": '<span class="glyphicon glyphicon-backward"></span> ', "previous": '<span class="glyphicon glyphicon-backward"></span> ',
"next": '<span class="glyphicon glyphicon-forward"></span> ', "next": '<span class="glyphicon glyphicon-forward"></span> ',
}, },
"lengthMenu": " _MENU_ baris " "info": "Menampilkan _START_ sampai _END_ dari _TOTAL_",
}; "lengthMenu": " _MENU_ baris "
};
let ${tableid}Columns = ${structure: columns}; let ${tableid}Columns = ${structure: columns};
function render_checkbox(value) { function render_checkbox(value) {
if (value === true) { if (value === true) {
return '<i class="fas fa-check-square" aria-hidden="true">'; return '<i class="fas fa-check-square" aria-hidden="true">';
} }
if (value === false) { if (value === false) {
return '<i class="fas fa-minus-square" aria-hidden="true">'; return '<i class="fas fa-minus-square" aria-hidden="true">';
//'Archived'; //'Archived';
} }
return value; return value;
} }
function render_checklist(value) { function render_checklist(value) {
return '<input type="checkbox" checked="' + {value} + '"></input>'; return '<input type="checkbox" checked="' + {value} + '"></input>';
} }
for (let co in ${tableid}Columns) { for (let co in ${tableid}Columns) {
if (${tableid}Columns[co].checkbox === true) { if (${tableid}Columns[co].wg_checkbox === true) {
${tableid}Columns[co].render = function (value) { ${tableid}Columns[co].render = function (value) {
if (typeof value === "string" && value.length > 0) { if (typeof value === "string" && value.length > 0) {
return render_checkbox(value) return render_checkbox(value)
} }
if (["", false, 0, null].indexOf(value) === -1) { if (["", false, 0, null].indexOf(value) === -1) {
return render_checkbox(true); return render_checkbox(true);
}
return render_checkbox(false);
}
} else if (${tableid}Columns[co].hasOwnProperty("url")) {
let url = ${tableid}Columns[co].url;
${tableid}Columns[co].render = function (data) {
let result = "No Data"
if (data != null) {
result = '<a href="' + url + data + '" target="_blank">Link</a>&nbsp;';
}
return result;
}
} else if (${tableid}Columns[co].data === "id" && ${tableid}Columns[co].action === true) {
${tableid}Columns[co].render = function (id) {
let result = ""
if (${allow_view}) {
result = '<a href="${url}/' + id + '/view"><i class="fas fa-eye" aria-hidden="true" title="View"></i></a>&nbsp;';
}
if (${allow_edit}) {
result += '<a href="${url}/' + id + '/edit"><i class="fas fa-edit" aria-hidden="true" title="Edit"></i></a>&nbsp;'
}
if (${allow_delete}) {
result += '<a href="${url}/' + id + '/delete"><i class="fas fa-trash" aria-hidden="true" title="Delete"></i></a>';
}
if (${allow_post}) {
result += '<a href="${url}/' + id + '/post"><i class="fas fa-signs-post" aria-hidden="true" title="Post"></i></a>';
}
if (${allow_unpost}) {
result += '<a href="${url}/' + id + '/unpost"><i class="fas fa-delete-left" aria-hidden="true" title="Unpost"></i></a>';
}
return result;
}
//columns[1].order = "order_asc";
} }
return render_checkbox(false);
} }
} else if (${tableid}Columns[co].wg_select === true) {
${tableid}Columns[co].render = function (value) {
let ${tableid}Params = { // if (value === 0) {
dom: '<"row"<"col-md-8"<"toolbar">Bl><"col-md-4"fr>>tip', // o${tableid}.$('tr.selected').bgColor(${tableid}Columns[co].get("color_" + value));
processing: true, // }
serverSide: ${server_side}, // if (${tableid}Columns[co].hasOwnProperty("color_" + value)) {
stateSave: ${state_save}, //
scrollCollapse: true, // }
sort: ${sorts}, return ${tableid}Columns[co].wg_select_val[value];
info: false, }
filter: ${filters}, } else if (${tableid}Columns[co].hasOwnProperty("url")) {
autoWidth: false, let url = ${tableid}Columns[co].url;
paginate: ${paginates}, ${tableid}Columns[co].render = function (data) {
paginationType: "full_numbers", let result = "No Data"
order: [], if (data != null) {
lengthMenu: [ result = '<a href="' + url + data + '" target="_blank">Link</a>&nbsp;';
[10, 25, 50, 100],
[10, 25, 50, 100]
],
pageLength: 25,
columns: ${tableid}Columns,
language: ${tableid}Language,
initComplete: function () {
$('.dataTables_filter input').unbind()
.bind('keyup', function (e) {
var code = e.keyCode || e.which;
if (code === 13) {
o${tableid}.search(this.value).draw();
}
});
} }
return result;
} }
} else if (${tableid}Columns[co].data === "id" && ${tableid}Columns[co].action === true) {
if (!${server_side}) { ${tableid}Columns[co].render = function (id) {
${tableid}Params.data = ${data}; let result = ""
} else { if (${allow_view}) {
${tableid}Params.ajax = o${tableid}Url; result = '<a href="${url}/' + id + '/view"><i class="fas fa-eye" aria-hidden="true" title="View"></i></a>&nbsp;';
}
if (${allow_edit}) {
result += '<a href="${url}/' + id + '/edit"><i class="fas fa-edit" aria-hidden="true" title="Edit"></i></a>&nbsp;'
}
if (${allow_delete}) {
result += '<a href="${url}/' + id + '/delete"><i class="fas fa-trash" aria-hidden="true" title="Delete"></i></a>';
}
if (${allow_post}) {
result += '<a href="${url}/' + id + '/post"><i class="fas fa-signs-post" aria-hidden="true" title="Post"></i></a>';
}
if (${allow_unpost}) {
result += '<a href="${url}/' + id + '/unpost"><i class="fas fa-delete-left" aria-hidden="true" title="Unpost"></i></a>';
}
return result;
} }
//columns[1].order = "order_asc";
}
}
//<talblock talcondition="filter_columns">
//console.log(${tableid}Columns);
//var html = "";
//for (let co in ${tableid}Columns) {
// var col = ${tableid}Columns[co];
// if (col.searchable === true) {
// var col_id = "${tableid}-" + col.data;
// var col_val = localStorage.getItem(col_id);
// if (col_val === null || col_val === undefined) {
// col_val = "";
// }
// var txt = 'id="' + col_id + '" data-index="' + co + '" value="' + col_val + '"';
//
// html += '<div class="form-group">';
// if (col.checkbox === true) {
// var radioVal = [["", 'Semua'], [col.check_val[0], 'Aktif'], [col.check_val[1], 'Pasif']];
// html += '<label class="" for="' + col_id + '">' + col.title + '</label>';
// html += '<div class="input-group" id="' + col_id + '">';
// for (var rdo = 0; rdo < radioVal.length; rdo++) {
// var selected = (col_val === radioVal[rdo][0]) ? "checked" : "";
// txt = 'id="' + col_id + '-' + radioVal[rdo][0] + '" ' +
// 'class="${tableid}-control-filter" data-index="' + co + '"' +
// 'name="' + col_id + '" value="' + radioVal[rdo][0] + '" '+selected;
//
// html += '<label class="radio-inline">';
// html += '<input type="radio" ' + txt + '/>';
// html += '<label for="' + col_id + '-' + radioVal[rdo][0] + '">' + radioVal[rdo][1] + '</label>';
// html += '</label>';
// }
// html += '</div>';
// } else
// html += '<input type="text" class="form-control ' + "${tableid}" + '-control-filter" placeholder="' + col.title + '" ' + txt + '/>';
// html += '</div>';
// }
//}
let ${tableid}Params = {
dom: '<"row"<"col-md-8"<"toolbar">Bl><"col-md-4"fr>>tip',
processing: true,
serverSide: ${server_side},
stateSave: ${state_save},
scrollCollapse: true,
sort: ${sorts},
info: true,
filter: ${filters},
autoWidth: false,
paginate: ${paginates},
paginationType: "full_numbers",
order: [],
lengthMenu: [
[10, 25, 50, 100],
[10, 25, 50, 100]
],
pageLength: 25,
columns: ${tableid}Columns,
language: ${tableid}Language,
initComplete: function () {
$('.dataTables_filter input').unbind()
.bind('keyup', function (e) {
var code = e.keyCode || e.which;
if (code === 13) {
o${tableid}.search(this.value).draw();
}
});
}
}
${structure: filter_scripts} if (!${server_side}) {
${tableid}Params.data = ${data};
} else {
${tableid}Params.ajax = o${tableid}Url;
}
o${tableid} = $('#${tableid}').DataTable(${tableid}Params); ${structure: filter_scripts}
let tb = tb_array.join(' '); o${tableid} = $('#${tableid}').DataTable(${tableid}Params);
$("div.toolbar").html(tb);
$("div.toolbar").attr('style', 'display:block; float: left; margin-bottom:6px; line-height:16px;');
$('#${tableid} tbody').on('click', 'tr', function () {
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
m${tableid}ID = null;
} else {
let aData = o${tableid}.row(this).data();
o${tableid}.$('tr.selected').removeClass('selected');
$(this).addClass('selected');
m${tableid}ID = aData.id;
//console.log("m${tableid}ID", m${tableid}ID);
o${tableid}.$('tr.row_selected').removeClass('row_selected');
$(this).addClass('row_selected');
}
});
$(".${tableid}-control-filter").on('keyup', function (e) { let tb = tb_array.join(' ');
var code = e.keyCode || e.which; $("div.toolbar").html(tb);
if (code === 13) { $("div.toolbar").attr('style', 'display:block; float: left; margin-bottom:6px; line-height:16px;');
filter_table() $('#${tableid} tbody').on('click', 'tr', function () {
} if ($(this).hasClass('selected')) {
}); $(this).removeClass('selected');
m${tableid}ID = null;
} else {
let aData = o${tableid}.row(this).data();
o${tableid}.$('tr.selected').removeClass('selected');
$(this).addClass('selected');
m${tableid}ID = aData.id;
//console.log("m${tableid}ID", m${tableid}ID);
o${tableid}.$('tr.row_selected').removeClass('row_selected');
$(this).addClass('row_selected');
}
});
function filter_table() { $(".${tableid}-control-filter").on('keyup', function (e) {
$(".${tableid}-control-filter").each(function (e) { var code = e.keyCode || e.which;
var col_id = $(this).attr("id") if (code === 13) {
var value; filter_table()
if ($(this).attr("type") === 'radio') { }
col_id = $(this).attr('id').split("-"); });
col_id.length = 2;
col_id = col_id.join("-");
value = this.value;
if (this.checked) {
console.log(col_id, $(this).attr('id'), value, this.checked);
localStorage.setItem(col_id, value);
o${tableid}
.column($(this).data('index'))
.search(this.value)
}
} else {
col_id = this.id;
value = this.value;
if (value === undefined || value === null) {
value = "";
}
console.log(col_id, $(this).attr('id'), value, $(this).data('index'));
localStorage.setItem(col_id, value);
o${tableid}
.column($(this).data('index'))
.search(value);
}
});
o${tableid}.draw();
}
$(".${tableid}-control-filter").on('click', function (e) { function filter_table() {
console.log("Write Data Click"); $(".${tableid}-control-filter").each(function (e) {
if ($(this).attr("type") === 'radio') { var col_id = $(this).attr("id");
filter_table() var value;
if ($(this).attr("type") === 'radio') {
col_id = $(this).attr('id').split("-");
col_id.length = 2;
col_id = col_id.join("-");
value = this.value;
if (this.checked) {
console.log(col_id, $(this).attr('id'), value, this.checked);
localStorage.setItem(col_id, value);
o${tableid}
.column($(this).data('index'))
.search(this.value)
} }
}); } else if ($(this).attr("type") === 'date') {
value = this.value;
console.log("Read Data"); localStorage.setItem(col_id, value);
$(".${tableid}-control-filter").each(function (e) { var splitted = col_id.split('-');
var col_id = $(this).attr("id") var min_val = undefined;
var value; var max_val = undefined;
if ($(this).attr("type") === 'radio') { if (splitted[splitted.length - 1] === "min") {
col_id = $(this).attr('id').split("-"); min_val = this.value;
col_id.length = 2; splitted.length = splitted.length - 1;
col_id = col_id.join("-"); col_id = splitted.join("-");
value = localStorage.getItem(col_id); max_val = $("#" + col_id + '-max').val()
if (value !== undefined && value != null)
if ($(this).val() === value) $(this).attr("checked", true);
else $(this).attr("checked", false);
} else { } else {
value = localStorage.getItem(col_id); max_val = this.value;
if (value !== undefined && value !== null) splitted.length = splitted.length - 1;
$(this).val(value); col_id = splitted.join("-");
min_val = $("#" + col_id + '-min').val()
}
if (min_val === undefined && max_val !== undefined)
min_val = max_val;
if (max_val === undefined && min_val !== undefined)
max_val = min_val;
if (max_val !== undefined && min_val !== undefined && min_val !== "" && max_val !== "" && min_val !== null && max_val !== null)
o${tableid}
.column($(this).data('index'))
.search(min_val + '-yadcf_delim-' + max_val, true)
} else {
col_id = this.id;
value = this.value;
if (value === undefined || value === null) {
value = "";
} }
console.log(col_id, $(this).attr('id'), value); console.log(col_id, $(this).attr('id'), value, $(this).data('index'));
}) localStorage.setItem(col_id, value);
o${tableid}
.column($(this).data('index'))
.search(value);
}
});
o${tableid}.draw();
}
$(".${tableid}-control-filter").on('click', function (e) {
console.log("Write Data Click");
var typ = $(this).attr("type");
if (typ === 'radio') {
filter_table()
}
});
$(".${tableid}-control-filter").on('change', function (e) {
var typ = $(this).prop("nodeName").toLowerCase();
if (typ === "select") {
filter_table()
}
var typ = $(this).attr("type").toLowerCase();
if (typ === "date") {
filter_table()
}
});
${structure:btnscripts} console.log("Read Data");
$(".${tableid}-control-filter").each(function (e) {
var col_id = $(this).attr("id")
var value;
if ($(this).attr("type") === 'radio') {
col_id = $(this).attr('id').split("-");
col_id.length = 2;
col_id = col_id.join("-");
value = localStorage.getItem(col_id);
if (value !== undefined && value != null)
if ($(this).val() === value) $(this).attr("checked", true);
else $(this).attr("checked", false);
} else {
value = localStorage.getItem(col_id);
if (value !== undefined && value !== null)
$(this).val(value);
} }
) console.log(col_id, $(this).attr('id'), value);
; });
});
</script> </script>
</div> </div>
\ No newline at end of file \ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!