1 namespace("kivi.Materialize", function(ns) {
8 ns.build_i18n = function() {
58 today: kivi.t8('Today'),
60 clear: kivi.t8('Clear'),
61 cancel: kivi.t8('Cancel'),
63 // Accessibility labels
64 labelMonthNext: kivi.t8('Next month'),
65 labelMonthPrev: kivi.t8('Previous month')
69 ns.reinit_widgets = function() {
70 $('.sidenav').sidenav();
71 $('select').formSelect();
72 $('.datepicker').datepicker({
74 format: kivi.myconfig.dateformat,
79 $('.materialboxed').materialbox();
83 // alternative for kivi.popup_dialog.
84 // opens materialize modal instead.
86 // differences: M.modal can not load external content, so it needs to be fetched manually and inserted into the DOM.
87 ns.popup_dialog = function(params) {
88 params = params || { };
89 let id = params.id || 'jqueryui_popup_dialog';
91 let custom_close = params.dialog ? params.dialog.close : undefined;
92 let dialog_params = $.extend(
93 { // kivitendo default parameters.
94 // unlike classic layout, there is not fixed size, and M.modal is always... modal
95 onCloseStart: custom_close
97 // User supplied options:
99 { // Options that must not be changed:
100 // close options already work
107 success: function(data) {
109 params.url = undefined;
110 params.data = undefined;
111 ns.popup_dialog(params);
113 error: function(x, status, error) { console.error(error); },
122 $div.addClass("modal");
123 let $modal_content = $('<div>');
124 $modal_content.addClass('modal-content');
125 $modal_content.html(params.html);
126 $div.append($modal_content);
127 $('body').append($div);
128 kivi.reinit_widgets();
129 dialog_params.onCloseEnd = function() { $div.remove(); };
131 $div.modal(dialog_params);
132 } else if(params.id) {
133 $div = $('#' + params.id);
135 console.error("insufficient parameters to open dialog");
145 * upload file to local storage for later sync
147 * should be used with P.M.file_upload(..., local=>1)
149 ns.LocalFileUpload = function(options) {
150 this.storage_token = options.storage_token; // used in localstorage to retrieve the file
151 this.dom_selector = options.dom_selector; // file inputs to listen on
156 ns.LocalFileUpload.prototype = {
158 $(this.dom_selector).change(this.handle_file_upload);
160 handle_file_upload: function() {
163 load_files: function() {
164 return JSON.parse(localStorage.getImte(this.storage_token));
166 save_files: function() {
167 return JSON.parse(localStorage.getImte(this.storage_token));