';
- if ($(this).hasClass('processed')) {
- return true;
- }
- $(this).addClass('processed');
- $(this).on('click', function (e) {
- e.preventDefault();
- $.ajax({
- method: 'GET',
- url: $(this).data('source')
- }).done(function (msg) {
- template = template.replace('{{aaa}}', msg);
- $('#modal').html(template).modal('show');
- revalidate_screen();
- });
- });
- $('#modal').on('shown.bs.modal', function () {
- revalidate_screen();
- $(this).find('.datatable-anchor').focus();
- });
- });
-
- $('.remote-popup').each((i, element) => {
-
- if ($(element).hasClass('processed')) {
- return true;
- }
-
- var instance = $(element);
- var number = $(element).find('.remote-popup-number');
- var button = $(element).find('button');
- var label = $(element).find('.remote-popup-label');
-
- searchRemote = (value = null) => {
- if (value == null) {
- value = $(number).val();
- }
- $.ajax({
- method: 'GET',
- url: $(instance).data('relay') + '/' + value
- }).done(function (msg) {
- $(label).val(msg.name);
- }).fail(function () {
- $(number).val('');
- $(label).val('');
- });
- }
-
- remotePopup = (source) => {
- $($('#modal')).off();
- var template = '
';
- $.ajax({
- method: 'GET',
- url: source
- }).done(function (msg) {
- template = template.replace('{{aaa}}', msg);
- $('#modal').html(template).modal('show');
- $('#modal').on('hide.bs.modal', () => {
- $(number).val($("#modal .selected").data('info').id);
- searchRemote();
- });
- revalidate_screen();
- });
- };
-
- $(button).on('click', () => {
- remotePopup($(instance).data('relay') + '/' + $(instance).data('mode'));
- });
-
- $(number).on('keyup', (e) => {
- if (e.keyCode == 112) {
- remotePopup($(instance).data('relay') + '/' + $(instance).data('mode'));
- }
- });
-
- $(number).on('focusout', () => {
- console.log($(number).val() == '');
- if ($(number).val() == '') {
- $(label).val('');
- return;
- }
- searchRemote($(number).val());
- });
-
- if($(number).val() != ''){
- searchRemote( $(number).val() )
- }
-
- /*console.log($(element))
- console.log(number);
- console.log(button);
- console.log(label);*/
-
- $(element).addClass('processed');
-
- });
-
- $('.live-selectpicker').each(function () {
-
- $(this).select2({
- liveSearch: true
- });
-
- var object = $(this);
- var source = definedOr($(this).data('source'), false);
- var placeholder = definedOr($(this).data('placeholder'));
- var filter_name = definedOr($(this).data('filter'));
- var value = definedOr($(this).data('value'));
-
- if (!source) {
- return;
- }
- object.ajax = {
- "url": source,
- "data": function (params) {
- var query = {
- "name": params.value
- }
- }
- };
- /*$(this).ajaxSelectPicker({
- ajax: {
- url: source + "/combo_data",
- method: 'GET',
- data: {
- nome: '{{{q}}}',
- filter: function() {
- if (filter_name === '') {
- return ''
- }
- return $("[name='" + filter_name + "'] option:selected").val();
- }
- }
- },
- locale: {
- emptyTitle: placeholder
- },
- preprocessData: function(data) {
- var registers = [];
- registers.push({
- 'value': '0',
- 'text': 'Selecione'
- });
- for (var i in data) {
- registers.push({
- 'value': data[i].id,
- 'text': data[i].nome
- });
- }
- return registers;
- },
- preserveSelected: true
- });*/
- });
-
- /*===========================================*/
-
- $('.icon-colapser').on('click', function () {
- $(this).parent().parent().find('.panel-collapse').collapse('toggle');
- });
-
- /*$('form').each(function () {
- $(this).validator();
- });*/
-
- $('.data-table').each(function () {
- if ($(this).hasClass('processed')) {
- return;
- }
- var wrapper = $(this);
- var table_anchor = $(this).find('a');
- var table = $(this).find('table');
-
- var str = '
";
- $(table).html(str);
- var datatable = $(table).DataTable({
- 'createdRow': function (row, data) {
- $(row).attr('data-info', JSON.stringify(data));
- var content = '';
- if (typeof $(table).data('update') != 'undefined') {
- content += '
'
- }
- if (typeof $(table).data('delete') != 'undefined') {
- content += '
'
- }
- if (typeof $(table).data('purge') != 'undefined') {
- content += '
'
- }
-
- $(row).append('
' + content + ' | ');
- },
- "drawCallback": function (settings) {
- if ($(wrapper).hasClass('selectable')) {
- $($(table).find('tr')[1]).addClass('selected');
- if (!$(wrapper).hasClass('processed')) {
- $(table_anchor).focus();
- }
- }
- },
- "initComplete": function (settings, json) {
- $(wrapper).addClass('processed');
- },
- processing: true,
- serverSide: true,
- searchDelay: 800,
- ajax: {'url': table.data('source'), 'type': 'POST'},
- columns: table.data('columns')
- });
-
- var search = $(this).find('input');
-
- $(search).on('keyup', function (e) {
- if (e.keyCode == 13) {
- $(table_anchor).focus();
- }
- });
-
- if ($(wrapper).hasClass('selectable')) {
- $(this).on('contextmenu', 'tr', function () {
-
- });
-
- $(this).on('click', 'tr', function () {
- $(table_anchor).focus();
- if ($(this).hasClass('selected')) {
- $(this).removeClass('selected');
- return;
- }
- $(this).parent().find('tr').each(function () {
- $(this).removeClass('selected');
- });
- $(this).addClass('selected');
- });
-
- $(table_anchor).on('focus', function () {
- $('body').addClass('no-scroll');
- $($(table).find('tr')[1]).addClass('selected');
- });
-
- $(table_anchor).on('focusout', function () {
- $('body').removeClass('no-scroll');
- $(table).find('tr').each((i, value) => {
- $(value).removeClass('selected');
- });
- });
-
- $(table_anchor).on('keypress', function (e) {
-
- });
-
- $(table_anchor).on('keyup', function (e) {
-
- e.preventDefault();
-
- if (e.keyCode == 70) {
- $(search).focus();
- }
-
- if (e.keyCode == 112) {
- ajax_call($(this).data('insert'));
- }
-
- if (e.keyCode == 113) {
- id = $(table).find('.selected').data('info').id;
- ajax_call($(this).data('insert') + '/' + id);
- }
-
- if (e.keyCode == 39 && e.ctrlKey) {
- datatable.page('last').draw('page');
- }
- if (e.keyCode == 37 && e.ctrlKey) {
- datatable.page('first').draw('page');
- $($(table).find('tr')[1]).addClass('selected');
- }
- if (e.keyCode == 37) { //left
- datatable.page('previous').draw('page');
- $($(table).find('tr')[1]).addClass('selected');
- }
- if (e.keyCode == 39) { //right
- datatable.page('next').draw('page');
- $($(table).find('tr')[1]).addClass('selected');
- }
- if (e.keyCode == 38) { //up
- var last = null;
- var line = null;
-
- $(table).find('tr').each((i, value) => {
- if ($(value).hasClass('selected')) {
- ;
- line = $(value)
- return false;
- }
- last = $(value)
- });
- if ($(last).hasClass('header')) {
- datatable.page('previous').draw('page');
- }
- if (line != null) {
- $(line).removeClass('selected');
- $(last).addClass('selected');
- }
-
- }
- if (e.keyCode == 40) { //up
- var next = false;
-
- $(table).find('tr').each((i, value) => {
- if (next) {
- $(value).addClass('selected');
- next = false;
- return false;
- }
- if ($(value).hasClass('selected')) {
- next = true;
- $(value).removeClass('selected');
- }
- });
- if (next) {
- datatable.page('next').draw('page');
- }
- }
- if (e.keyCode == 13) {
- if ($(this).parent().parent().hasClass('modal-body')) {
- $(this).parent().parent()
- .parent().parent()
- .parent().modal('hide');
- //console.log($(this).parent().find('.selected').data('info'));
- }
- }
- })
- }
- });
-
- popover_help();
+function setIfNotEmpty(location, value) {
+ if (value != '') {
+ $(location).val(value);
+ }
}
-/*===========================================*/
-
-$('.remote-element').each(function () {
-
- var element = $(this);
- var source = $(this).data('source');
- var value = $(this).data('value');
-
- $.ajax({
- method: "GET",
- url: source,
- data: {value: value}
- }).done(function (msg) {
- $(element).html(msg);
- });
-
-});
-
-//============================== Template Boot
+/*
+ * ============================== Template Boot
+ * _______ _ _
+ * |__ __| | | | |
+ * | | ___ _ __ ___ _ __ | | __ _| |_ ___
+ * | |/ _ \ '_ ` _ \| '_ \| |/ _` | __/ _ \
+ * | | __/ | | | | | |_) | | (_| | || __/
+ * |_|\___|_| |_| |_| .__/|_|\__,_|\__\___|
+ * | |
+ * |_|
+*/
/* Função de aparecer ou desaparecer o menu lateral */
$(".menu-toggle").on('click', function (e) {
@@ -471,9 +63,19 @@ $(".menu-toggle").on('contextmenu', function (e) {
$('#side-menu').metisMenu();
-revalidate_screen();
+/*
+ * ============================== - MouseTrap
+ * __ __ _______
+ * | \/ | |__ __|
+ * | \ / | ___ _ _ ___ ___| |_ __ __ _ _ __
+ * | |\/| |/ _ \| | | / __|/ _ \ | '__/ _` | '_ \
+ * | | | | (_) | |_| \__ \ __/ | | | (_| | |_) |
+ * |_| |_|\___/ \__,_|___/\___|_|_| \__,_| .__/
+ * | |
+ * |_|
+ *
+*/
-//============================== - MouseTrap
/* Atalho, Ao apertar alt, foca no primeiro ítem do menu lateral */
Mousetrap.bind('alt', function (e) {
e.preventDefault();
@@ -501,7 +103,7 @@ Mousetrap.bind("ctrl+shift+f", function (e) {
function popover_help() {
$('input').each(function () {
Mousetrap($(this)[0]).bind('ctrl+f1', function () {
- //alert(10);
+ //alert(10);
});
})
}
@@ -540,8 +142,24 @@ $(".search-nav >input").on("keyup", function () {
}
});
-//============================== Ajax Page Handler
-$('a').on('click', function (e) {
+/*
+ * ============================== - Ajax Page Handler
+ * _ _____
+ * /\ (_) | __ \
+ * / \ _ __ ___ __ | |__) |_ _ __ _ ___ ___
+ * / /\ \ | |/ _` \ \/ / | ___/ _` |/ _` |/ _ \/ __|
+ * / ____ \| | (_| |> < | | | (_| | (_| | __/\__ \
+ * /_/ \_\ |\__,_/_/\_\ |_| \__,_|\__, |\___||___/
+ * _/ | __/ |
+ * |__/ |___/
+*/
+
+
+//==============================
+//=== Link clicks
+//==============================
+$('body').on('click', 'a', function (e) {
+
if (!user_config.allways_ajax) {
return true;
}
@@ -550,13 +168,13 @@ $('a').on('click', function (e) {
var method = $(this).data('method');
if (typeof target === 'undefined' ||
- target === '' ||
- target === '#' ||
- target == 'javascript:void(0)') {
+ target === '' ||
+ target === '#' ||
+ target == 'javascript:void(0)') {
return;
}
- if (method === 'reload') {
+ if (method === 'reload' || method === 'follow') {
return true;
}
@@ -566,48 +184,356 @@ $('a').on('click', function (e) {
method = 'GET';
}
- $('#progress').removeClass('hidden');
+ asyncRedirect(target, method);
- $.ajax({
- method: method,
- url: target
- }).done(function (msg) {
- $('#content').html(msg);
- history.replaceState({}, '', target);
- }).fail(function () {
- alert('fail');
- }).always(function () {
- $('#progress').addClass('hidden')
- revalidate_screen();
+});
+
+//==============================
+//=== Form submissions
+//==============================
+$('body').on('submit', 'form', async function (e) {
+
+ var formAjax = true;
+
+ if (formAjax == false) {
+ return true;
+ }
+
+ e.preventDefault();
+
+ let request = await fetch(e.target.action, {
+ method: e.target.method,
+ body: JSON.stringify($(this).serialize()).replace(/^"+|"+$/g, ''),
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ 'X-Requested-With': 'fetch'
+ }
+ });
+
+ let responseJson = await request.json();
+
+ if (!request.ok) {
+
+ $('#toast-container').bootstrapToastWrapper({
+ 'type': 'danger',
+ 'title': 'Erro',
+ 'body': responseJson,
+ 'timeout': 5000
+ });
+
+ } else {
+
+ $('#toast-container').bootstrapToastWrapper({
+ 'type': 'success',
+ 'title': 'Sucesso',
+ 'body': 'Ação bem sucedida',
+ 'timeout': 5000
+ });
+
+ if (responseJson.location) {
+ asyncRedirect(responseJson.location, 'GET');
+ }
+ }
+});
+
+/*
+ * Ao sair do campo digitável de um valor buscavel. Executa a busca
+*/
+$('#content').on('blur', '[data-search] input', function (e) {
+ val = $(this).val();
+ if (val == "") { return; }
+
+ el = $(this);
+ elwrap = $(this).parent().parent();
+
+ url = $(this).parent().parent().data('search');
+ fields = $(this).parent().parent().data('searchfields').split('+');
+
+ fetch(url + val, {
+ method: 'GET',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ 'X-Requested-With': 'fetch'
+ }
+ }).then(function (response) {
+ let json = response.json();
+ return json;
+ }).then(function (json) {
+
+ if (json == null) {
+ $(this).val('');
+ $($(elwrap).find('input')[1]).val("");
+ return;
+ }
+
+ var fieldData = "";
+ for (value in fields) {
+ fieldData += json[fields[value]] + " ";
+ }
+ $($(elwrap).find('input')[1]).val(fieldData);
+ $(this).find('input').trigger('filled', json);
+ //$(e).trigger('filled', json);
+ //console.log();
});
});
-function ajax_call(target) {
- $('#progress').removeClass('hidden');
- $.ajax({
- method: 'GET',
- url: target
- }).done(function (msg) {
- $('#content').html(msg);
- history.replaceState({}, '', target);
- }).fail(function () {
- alert('fail');
- }).always(function () {
- $('#progress').addClass('hidden')
- revalidate_screen();
+// Revalidate screen
+function revalidate_screen(location) {
+
+ $(location).find('[data-mask]').each(function () {
+ if ($(this).data('maskreverse') == false) {
+
+ } else {
+ var params = {
+ reverse: true
+ }
+ }
+
+ if ($(this).data('maskcomplete')) {
+ params.onComplete = window[$(this).data('maskcomplete')]
+ }
+
+ $(this).mask($(this).data('mask'), params);
+
+ $(this).on('filled', { 'params': params }, function (e) {
+ $(this).mask($(this).data('mask').mask);
+ $(this).mask($(this).data('mask').mask, params);
+ });
+
+ });
+
+ /*$(location).find('.remoteFill').each(function(i, el){
+ $(el).on('click', function(){
+ $(this).remoteFill();
+ })
+ });*/
+
+ //$('[data-toggle="popover"]').popover();
+
+ $(location).find('.remote-element').each(async function () {
+ var element = $(this);
+ var source = $(this).data('source');
+ var value = $(this).data('value');
+ source = source + '?value=' + value;
+ await asyncFill(source, 'GET', element, revalidate_screen, element);
+ });
+
+ $(location).find('.remote-datatable').each(async function () {
+ var element = $(this);
+ var source = $(this).data('source');
+ var value = $(this).data('value');
+ await asyncFill(source, 'GET', element, datatableInplaceBoot, $(this));
+ });
+
+ setSelectValues(location);
+ datatableBasicBoot();
+
+ $('.icon-colapser').on('click', function () {
+ $(this).parent().parent().find('.panel-collapse').collapse('toggle');
+ });
+
+ $(location).find('[data-tablesearch]').on('click', async function (e) {
+ await asyncFill(
+ $(e.currentTarget).data('tablesearch'),
+ 'GET',
+ $('#modal .modal-body'),
+ datatableBasicBoot,
+ function (el) {
+ $(el).on('click', 'button', function (ee) {
+ $($(modalTarget).find('input')[0]).val($(ee.currentTarget).data('id')).trigger('blur');
+ modal.toggle();
+ })
+ });
+
+ await openModal({
+ 'target': $(e.currentTarget).parent().parent().parent(),
+ 'source': $(e.currentTarget).data('search')
+ });
+ });
+
+ $(location).find('[data-tablesearchadd]').on('click', async function (e) {
+ await asyncFill(
+ $(e.currentTarget).data('tablesearchadd') + '/table',
+ 'GET',
+ $('#modal .modal-body'),
+ datatableBasicBoot,
+ async function (el) {
+ await $(el).on('click', 'button', async function (ee) {
+ modalTarget.trigger('added', $(ee.target).data('id'));
+ modal.toggle();
+ })
+ });
+
+ await openModal({
+ 'target': $(e.currentTarget).parent().parent().find('.list-group'),
+ 'source': $(e.currentTarget).data('search')
+ });
+ });
+
+ $(location).find('[data-ean] button').on('click', function (e) {
+
+ $('#modal .modal-body').html('
');
+
+ function onScanSuccess(decodedText, decodedResult) {
+ // handle the scanned code as you like, for example:
+ $(this).parent().find('input').val(decodedText);
+ myModal.hide();
+ }
+
+ scan = new Html5QrcodeScanner(
+ "reader",
+ { fps: 10, qrbox: { width: 250, height: 250 } },
+ /* verbose= */ false);
+
+ scan.render(onScanSuccess);
+
+ openModal({
+ 'target': $(e.currentTarget).parent().parent().find('.list-group'),
+ 'source': $(e.currentTarget).data('search'),
+ 'close': function () {
+ scan.stop();
+ }
+ });
+
+ });
+
+ /*
+ * Campos que se autopreenchem quando o valor é buscado
+ */
+ $(location).find('[data-listener]').each(function (el, i) {
+ var element = $(this);
+ let selector = "[name='" + $(this).data('listener') + "']";
+ let key = $(this).data('listenervalue');
+ $(selector).on('filled blur', function (e, data, data1) {
+ console.log($(this));
+ });
+ });
+
+ /* TODO create validation rules */
+ $('#content').find('form').each(function () {
+ //$(this).validator();
+ });
+
+ popover_help();
+}
+
+/*
+ * ================================================
+ * _____ _ _ _ _
+ * | __ \ | | | | | | | |
+ * | | | | __ _| |_ __ _| |_ __ _| |__ | | ___ ___
+ * | | | |/ _` | __/ _` | __/ _` | '_ \| |/ _ \/ __|
+ * | |__| | (_| | || (_| | || (_| | |_) | | __/\__ \
+ * |_____/ \__,_|\__\__,_|\__\__,_|_.__/|_|\___||___/
+ *
+ */
+
+function datatableBasicBoot(param) {
+ $('.datatable').each(function (i, el) {
+
+ var columns = [];
+
+ $(this).find('thead').find('th').each(function (i, el) {
+ columns.push({ 'data': $(el).data('field') });
+ });
+
+ var ajax = {
+ "url": $(el).data('src'),
+ 'type': 'POST',
+ }
+
+ $(el).DataTable({
+ "processing": true,
+ "serverSide": true,
+ "ajax": ajax,
+ "columns": columns
+ });
+
+ param(el);
});
}
-function open_popup(source) {
- var template = '
';
- $.ajax({
- method: 'GET',
- url: source
- }).done(function (msg) {
- //alert(msg);
- template = template.replace('{{aaa}}', msg);
- $('#modal').html(template).modal('show');
- revalidate_screen();
+function datatableInplaceBoot(location = '#content', param = function () { }) {
+ $(location).find('.datatable').each(function (i, el) {
+
+ var columns = [];
+
+ $(this).find('thead').find('th').each(function (i, el) {
+ columns.push({ 'data': $(el).data('field') });
+ });
+
+ var ajax = {
+ "url": $(el).data('src'),
+ 'type': 'POST',
+ }
+
+ $(el).DataTable({
+ "processing": true,
+ "serverSide": true,
+ "ajax": ajax,
+ "columns": columns
+ });
+
+ param(el);
});
}
+
+function datatableRemoteLoad() {
+
+}
+
+/*
+ * ================================================
+ * _____ _ _
+ * / ____| | | | |
+ * | (___ ___| | ___ ___| |_ ___
+ * \___ \ / _ \ |/ _ \/ __| __/ __|
+ * ____) | __/ | __/ (__| |_\__ \
+ * |_____/ \___|_|\___|\___|\__|___/
+ *
+*/
+
+function setSelectValues(select, value) {
+ if ($(select).prop('nodeName') == 'SELECT') {
+ setSelectValue(select, $(select).data('value'));
+ } else {
+ $(select).find('select').each(function (i, el) {
+ if (typeof $(this).data('value') !== "undefined" && $(this).data('value') !== '') {
+ setSelectValue($(this), $(this).data('value'))
+ }
+ });
+ }
+}
+
+function setSelectValue(select, value) {
+ $(select).find('option').each(function (i, el) {
+ $(el).attr('selected', false);
+ if ($(el).val() == value) {
+ $(el).attr('selected', true);
+ }
+ });
+}
+
+function setSelectName(select, value) {
+ $(select).find('select').each(function (i, el) {
+ if (typeof $(this).data('value') !== "undefined" && $(this).data('value') !== '') {
+ setSelectName($(this), $(this).data('value'))
+ }
+ });
+}
+
+function setSelectName(select, value) {
+ $(select).find('option').each(function (i, el) {
+ $(el).attr('selected', false);
+ if ($(el).html() == value) {
+ $(el).attr('selected', true);
+ }
+ });
+}
+
+$('#content').on('reloaded', function () {
+ revalidate_screen('#content');
+});
+
+revalidate_screen('body');
\ No newline at end of file