X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=js%2Fkivi.js;h=77dfe5c63ca7f8367f76a8887c28e5aab94f1bc4;hb=c0b95291c5b78f36346dba8457f99ef3eea6528c;hp=7c1f00a43ecf9de74ac701fab1f937ecbbffd0dc;hpb=eb4745651abf3b484577fd051624826bc16d2467;p=kivitendo-erp.git diff --git a/js/kivi.js b/js/kivi.js index 7c1f00a43..77dfe5c63 100644 --- a/js/kivi.js +++ b/js/kivi.js @@ -138,6 +138,10 @@ namespace("kivi", function(ns) { var parts = time.replace(/\s+/g, "").split(ns._time_format.sep); if (parts.length == 2) { + for (var idx in parts) { + if (Number.isNaN(Number.parseInt(parts[idx]))) + return undefined; + } now.setHours(parts[ns._time_format.h], parts[ns._time_format.m]); return now; } else @@ -346,6 +350,19 @@ namespace("kivi", function(ns) { editor.on('instanceReady', function() { ns.focus_ckeditor($e); }); }; + ns.filter_select = function() { + var $input = $(this); + var $select = $('#' + $input.data('select-id')); + var filter = $input.val().toLocaleLowerCase(); + + $select.find('option').each(function() { + if ($(this).text().toLocaleLowerCase().indexOf(filter) != -1) + $(this).show(); + else + $(this).hide(); + }); + }; + ns.reinit_widgets = function() { ns.run_once_for('.datepicker', 'datepicker', function(elt) { $(elt).datepicker(); @@ -365,6 +382,9 @@ namespace("kivi", function(ns) { kivi.ChartPicker($(elt)); }); + ns.run_once_for('div.filtered_select input', 'filtered_select', function(elt) { + $(elt).bind('change keyup', ns.filter_select); + }); var func = kivi.get_function_by_name('local_reinit_widgets'); if (func) @@ -554,6 +574,39 @@ namespace("kivi", function(ns) { return undefined; }; + ns.save_file = function(base64_data, content_type, size, attachment_name) { + // atob returns a unicode string with one codepoint per octet. revert this + const b64toBlob = (b64Data, contentType='', sliceSize=512) => { + const byteCharacters = atob(b64Data); + const byteArrays = []; + + for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) { + const slice = byteCharacters.slice(offset, offset + sliceSize); + + const byteNumbers = new Array(slice.length); + for (let i = 0; i < slice.length; i++) { + byteNumbers[i] = slice.charCodeAt(i); + } + + const byteArray = new Uint8Array(byteNumbers); + byteArrays.push(byteArray); + } + + const blob = new Blob(byteArrays, {type: contentType}); + return blob; + } + + var blob = b64toBlob(base64_data, content_type); + var a = $(""); + var url = window.URL.createObjectURL(blob); + a.attr("href", url); + a.attr("download", attachment_name); + $("body").append(a); + a[0].click(); + window.URL.revokeObjectURL(url); + a.remove(); + } + ns.detect_duplicate_ids_in_dom = function() { var ids = {}, found = false; @@ -609,6 +662,15 @@ namespace("kivi", function(ns) { $input.parent().replaceWith($area); $area.focus(); }; + + ns.set_cursor_position = function(selector, position) { + var $input = $(selector); + if (position === 'end') + position = $input.val().length; + + $input.prop('selectionStart', position); + $input.prop('selectionEnd', position); + }; }); kivi = namespace('kivi');