diff options
Diffstat (limited to 'assets/js/ac_insert_row.js')
-rw-r--r-- | assets/js/ac_insert_row.js | 370 |
1 files changed, 185 insertions, 185 deletions
diff --git a/assets/js/ac_insert_row.js b/assets/js/ac_insert_row.js index d6eff8fd..23abb75c 100644 --- a/assets/js/ac_insert_row.js +++ b/assets/js/ac_insert_row.js @@ -1,224 +1,224 @@ +/** globals jQuery */ var fkl_hasnext = false; var fkl_hasprev = false; +jQuery.ppa = jQuery.ppa || { + root: $('#root'), +}; /* hide the value list */ function hideAc() { - jQuery.ppa.o = 0; - with(jQuery.ppa) { - fklist.hide(); - fkbg.hide(); - } + jQuery.ppa.o = 0; + let { fklist, fkbg } = jQuery.ppa || {}; + fklist.hide(); + fkbg.hide(); } +/* open/update the value list */ +function autocomplete(event) { + /* if pressing enter, fire a click on the selected line */ + if (event.keyCode == 13) { + if (jQuery.ppa.i > 0) { + jQuery.ppa.fklist.find('tr').eq(jQuery.ppa.i).click(); + } + return false; + } else if (event.keyCode == 38 || event.keyCode == 40) { + /* ignoring 38:up and 40:down */ + return false; + } else if ( + /* ignoring 9:tab, 37:left, 39:right, 16:shift, ctrl: 17, alt:18, 20:lockmaj */ + event.keyCode == 9 || + event.keyCode == 37 || + event.keyCode == 39 || + event.keyCode == 16 || + event.keyCode == 17 || + event.keyCode == 18 || + event.keyCode == 20 + ) { + return true; + } else if (event.keyCode == 27) { + /* esc */ + hideAc(); + } else { + /* request the list of possible values asynchronously */ + /* if we refresh because of a value update, + * we reset back to offset 0 so we catch values + * if list is smaller than 11 values */ + if (event.type == 'keyup') { + jQuery.ppa.o = 0; + } + openlist(this); + } + return true; +} /* enable/disable auto-complete feature */ function triggerAc(ac) { - if (ac) { - jQuery.ppa.attrs - .bind('keyup.ac_action', autocomplete) - .bind('focus.ac_action', autocomplete) - .bind('keypress.ac_action', move) - .addClass('ac_field'); - } else { - jQuery.ppa.attrs - .removeClass('ac_field') - .unbind('.ac_action'); - } + if (ac) { + jQuery.ppa.attrs + .bind('keyup.ac_action', autocomplete) + .bind('focus.ac_action', autocomplete) + .bind('keypress.ac_action', move) + .addClass('ac_field'); + } else { + jQuery.ppa.attrs.removeClass('ac_field').unbind('.ac_action'); + } } /* select the given index value and highlight it */ function selectVal(index) { - if (index == jQuery.ppa.i) - return; - - // we catch the header as well so it takes th index 0 - var trs = jQuery.ppa.fklist.find('tr'); - - // change colors for unselected - if (jQuery.ppa.i > 0) - trs.eq(jQuery.ppa.i).find('*').css({ - 'background-color': '#fff', - 'color': '' - }); - - // change colors for newly selected - trs.eq(index).find('*').css({ - 'background-color': '#3d80df', - 'color': '#fff' + if (index == jQuery.ppa.i) { + return; + } + + // we catch the header as well so it takes th index 0 + var trs = jQuery.ppa.fklist.find('tr'); + + // change colors for unselected + if (jQuery.ppa.i > 0) { + trs.eq(jQuery.ppa.i).find('*').css({ + 'background-color': '#fff', + color: '', }); + } + + // change colors for newly selected + trs.eq(index).find('*').css({ + 'background-color': '#3d80df', + color: '#fff', + }); - jQuery.ppa.i = index; + jQuery.ppa.i = index; } function openlist(e) { - var elt = jQuery(e); - var attnum = elt.attr('id').match(/\d+/)[0]; - /* FIXME we only support the first FK constraint of the field */ - var conid = attrs['attr_' + attnum][0]; - - var constr = constrs["constr_" + conid]; - - // get the changed attribute position in the arrays - for (i = 0; - (constr.pattnums[i] != attnum); i++); - - var datas = { - fattpos: i, - fvalue: e.value, - database: database, - 'keys[]': constr.pattnums, - 'keynames[]': constr.pattnames, - 'fkeynames[]': constr.fattnames, - f_table: constr.f_table, - f_schema: constr.f_schema, - offset: jQuery.ppa.o - }; - - jQuery.ajax({ - url: subfolder + '/src/views/acinsert.php?server=' + server, - type: 'post', - data: datas, - dataType: 'html', - cache: false, - contentType: 'application/x-www-form-urlencoded', - success: function (ret) { - jQuery.ppa.i = 0; - jQuery.ppa.fkbg.show(); - with(jQuery.ppa.fklist) { - html(ret); - appendTo('#row_att_' + attnum); - css('width', elt.css('width')); - show(); - jQuery.ppa.numrow = find('tr').length; - } - } - }); + var elt = jQuery(e); + var attnum = elt.attr('id').match(/\d+/)[0]; + /* FIXME we only support the first FK constraint of the field */ + var conid = attrs['attr_' + attnum][0]; + + var constr = constrs['constr_' + conid]; + + // get the changed attribute position in the arrays + for (i = 0; constr.pattnums[i] != attnum; i++) {} + + var datas = { + fattpos: i, + fvalue: e.value, + database: database, + 'keys[]': constr.pattnums, + 'keynames[]': constr.pattnames, + 'fkeynames[]': constr.fattnames, + f_table: constr.f_table, + f_schema: constr.f_schema, + offset: jQuery.ppa.o, + }; + + jQuery.ajax({ + url: subfolder + '/src/views/acinsert.php?server=' + server, + type: 'post', + data: datas, + dataType: 'html', + cache: false, + contentType: 'application/x-www-form-urlencoded', + success: function (ret) { + jQuery.ppa.i = 0; + jQuery.ppa.fkbg.show(); + + jQuery.ppa.fklist + .html(ret) + .appendTo('#row_att_' + attnum) + .css('width', elt.css('width')) + .show(); + jQuery.ppa.numrow = jQuery.ppa.fklist.find('tr').length; + }, + }); } - /* move the cursor down or up, * load available next/prev values if going out of bound */ function move(event) { - /* selecting next value down. - * if the list is closed, it will open next */ - if (event.keyCode == 40) { - if (jQuery.ppa.fklist[0].style.display == 'block') { - if ((jQuery.ppa.i + 1) < jQuery.ppa.numrow) { - selectVal(jQuery.ppa.i + 1); - } else if (fkl_hasnext == true) { - jQuery.ppa.o += 11; - openlist(this); - } - } else { - openlist(this); - } + /* selecting next value down. + * if the list is closed, it will open next */ + if (event.keyCode == 40) { + if (jQuery.ppa.fklist[0].style.display == 'block') { + if (jQuery.ppa.i + 1 < jQuery.ppa.numrow) { + selectVal(jQuery.ppa.i + 1); + } else if (fkl_hasnext == true) { + jQuery.ppa.o += 11; + openlist(this); + } + } else { + openlist(this); } + } else if (event.keyCode == 38) { /* selecting prev value up */ - else if (event.keyCode == 38) { - if ((jQuery.ppa.i - 1) > 0) { - selectVal(jQuery.ppa.i - 1); - } else if ((fkl_hasprev == true) && (jQuery.ppa.i == 1)) { - jQuery.ppa.o -= 11; - openlist(this); - } else { - selectVal(jQuery.ppa.numrow - 1); - } - } -} - -/* open/update the value list */ -function autocomplete(event) { - - /* if pressing enter, fire a click on the selected line */ - if (event.keyCode == 13) { - if (jQuery.ppa.i > 0) { - jQuery.ppa.fklist.find('tr').eq(jQuery.ppa.i).click(); - } - return false; - } - /* ignoring 38:up and 40:down */ - else if (event.keyCode == 38 || event.keyCode == 40) { - return false; - } - /* ignoring 9:tab, 37:left, 39:right, 16:shift, ctrl: 17, alt:18, 20:lockmaj */ - else if (event.keyCode == 9 || event.keyCode == 37 || event.keyCode == 39 || event.keyCode == 16 || event.keyCode == 17 || event.keyCode == 18 || event.keyCode == 20) { - return true; - } - /* esc */ - else if (event.keyCode == 27) { - hideAc(); - } - /* request the list of possible values asynchronously */ - else { - /* if we refresh because of a value update, - * we reset back to offset 0 so we catch values - * if list is smaller than 11 values */ - if (event.type == 'keyup') - jQuery.ppa.o = 0; - openlist(this); + if (jQuery.ppa.i - 1 > 0) { + selectVal(jQuery.ppa.i - 1); + } else if (fkl_hasprev == true && jQuery.ppa.i == 1) { + jQuery.ppa.o -= 11; + openlist(this); + } else { + selectVal(jQuery.ppa.numrow - 1); } - - return true; + } } /* bind actions on values lines: hover for style change, click for select */ jQuery('tr.acline').on('mouseover', function () { - selectVal(jQuery('table.ac_values tr').index(this)); + selectVal(jQuery('table.ac_values tr').index(this)); }); jQuery('tr.acline').on('click', function () { - var a = jQuery(this).find('td > a.fkval'); + var a = jQuery(this).find('td > a.fkval'); - for (i = 0; i < a.length; i++) { - jQuery('input[name="values[' + a[i].name + ']"]').val(jQuery(a[i]).text()); - } - hideAc(); + for (i = 0; i < a.length; i++) { + jQuery('input[name="values[' + a[i].name + ']"]').val(jQuery(a[i]).text()); + } + hideAc(); }); - jQuery(document).ready(function () { - /* register some global value in the ppa namespace */ - jQuery.ppa = { - fklist: jQuery('#fklist'), - attrs: jQuery('input[id^=attr_]'), // select fields with FK - fkbg: jQuery('#fkbg'), - i: 0, // selected value indice - o: 0 // offset when navigating prev/next - }; - - jQuery.ppa.fklist.on('click', '#fkprev', function () { - jQuery.ppa.o -= 11; - /* get the field that is the previous html elt from the #fklist - * and trigger its focus to refresh the list AND actualy - * focus back on the field */ - jQuery('#fklist').prev().focus(); - }); - - - jQuery.ppa.fklist.on('click', '#fknext', function () { - jQuery.ppa.o += 11; - /* get the field that is the previous html elt from the #fklist - * and trigger its focus to refresh the list AND actualy - * focus back on the field*/ - jQuery('#fklist').prev().focus(); - }); - - /* close the list when clicking outside of it */ - jQuery.ppa.fkbg.click(function (e) { - hideAc(); - }); + /* register some global value in the ppa namespace */ + jQuery.ppa = { + fklist: jQuery('#fklist'), + attrs: jQuery('input[id^=attr_]'), // select fields with FK + fkbg: jQuery('#fkbg'), + i: 0, // selected value indice + o: 0, // offset when navigating prev/next + }; + + jQuery.ppa.fklist.on('click', '#fkprev', function () { + jQuery.ppa.o -= 11; + /* get the field that is the previous html elt from the #fklist + * and trigger its focus to refresh the list AND actualy + * focus back on the field */ + jQuery('#fklist').prev().focus(); + }); + + jQuery.ppa.fklist.on('click', '#fknext', function () { + jQuery.ppa.o += 11; + /* get the field that is the previous html elt from the #fklist + * and trigger its focus to refresh the list AND actualy + * focus back on the field*/ + jQuery('#fklist').prev().focus(); + }); + + /* close the list when clicking outside of it */ + jQuery.ppa.fkbg.click(function (e) { + hideAc(); + }); - /* do not submit the form when selecting a value by pressing enter */ - jQuery.ppa.attrs - .keydown(function (e) { - if (e.keyCode == 13 && jQuery.ppa.fklist[0].style.display == 'block') - return false; - }); - - /* enable/disable auto-complete according to the checkbox */ - triggerAc( - jQuery('#no_ac').click(function () { - triggerAc(this.checked); - })[0].checked - ); -});
\ No newline at end of file + /* do not submit the form when selecting a value by pressing enter */ + jQuery.ppa.attrs.keydown(function (e) { + if (e.keyCode == 13 && jQuery.ppa.fklist[0].style.display == 'block') { + return false; + } + }); + + /* enable/disable auto-complete according to the checkbox */ + triggerAc( + jQuery('#no_ac').click(function () { + triggerAc(this.checked); + })[0].checked + ); +}); |