diff --git a/infolog/js/app.js b/infolog/js/app.js new file mode 100644 index 0000000000..5a7b472000 --- /dev/null +++ b/infolog/js/app.js @@ -0,0 +1,277 @@ +/** + * EGroupware - Infolog - Javascript UI + * + * @link http://www.egroupware.org + * @package infolog + * @author Hadi Nategh + * @copyright (c) 2008-13 by Ralf Becker + * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License + * @version + */ + +/** + * UI for Infolog + * + * @augments AppJS + */ +app.infolog = AppJS.extend( +{ + appname: 'infolog', + /** + * et2 widget container + */ + et2: null, + /** + * path widget + */ + + /** + * Constructor + * + * @memberOf app.infolog + */ + init: function() + { + // call parent + this._super.apply(this, arguments); + }, + + /** + * Destructor + */ + destroy: function() + { + delete this.et2; + // call parent + this._super.apply(this, arguments); + }, + + /** + * This function is called when the etemplate2 object is loaded + * and ready. If you must store a reference to the et2 object, + * make sure to clean it up in destroy(). + * + * @param et2 etemplate2 Newly ready object + */ + et2_ready: function(et2) + { + // call parent + this._super.apply(this, arguments); + + if(typeof et2.templates['infolog.index'] != 'undefined') + { + this.infolog_filter_change(); + } + }, + + /** + * + */ + infolog_filter_change: function() + { + + var filter = this.et2.getWidgetById('filter'); + var temp_header_left = this.et2.getWidgetById('infolog.index.dates'); + + if (filter && temp_header_left) + { + temp_header_left.set_disabled(filter.value !== "bydate"); + + } + + }, + + /** + * show or hide the details of rows by selecting the filter2 option + * either 'all' for details or 'no_description' for no details + * + */ + infolog_filter2_change: function() + { + var nm = this.et2.getWidgetById('nm'); + var filter2 = this.et2.getWidgetById('filter2'); + + if (nm && filter2) + { + // Show / hide descriptions + this.show_details(filter2.value == 'all'); + + // Change preference location - widget is nextmatch + nm.options.settings.columnselection_pref = 'infolog.index.rows'+(filter2.value == 'all' ? '-details' :''); + + // Load new preferences + var colData = [] + for(var i = 0; i < nm.columns.length; i++) colData[i] = {disabled: true, width: '0'}; + nm._applyUserPreferences(nm.columns, colData); + for(var i = 0; i < colData.length; i++) + { + // Wants a string + nm.dataview.getColumnMgr().columns[i].set_width(colData[i].width + 'px'); + nm.dataview.getColumnMgr().columns[i].set_visibility(!colData[i].disabled); + } + nm.dataview.getColumnMgr().updated = true; + // Update page + nm.dataview.updateColumns(); + } + }, + + /** + * Show or hide details by changing the CSS class + * + * @param show + */ + show_details: function(show) + { + // Show / hide descriptions + egw.css(".et2_box.infoDes","display:" + (show ? "block;" : "none;")); + }, + + /** + * Confirm delete + * If entry has children, asks if you want to delete children too + * + *@param _action + *@param _senders + */ + infolog_confirm_delete: function(_action, _senders) + { + var children = false; + var child_button = jQuery('#delete_sub').get(0) || jQuery('[id*="delete_sub"]').get(0); + if(child_button) + { + for(var i = 0; i < _senders.length; i++) + { + if ($j(_senders[i].iface.node).hasClass('rowHasSubs')) + { + children = true; + break; + } + } + child_button.style.display = children ? 'block' : 'none'; + } + nm_open_popup(_action, _senders); + }, + + /** + * Add email from addressbook + * + * @param ab_id + * @param info_cc + */ + infolog_add_email_from_ab: function(ab_id,info_cc) + { + var ab = document.getElementById(ab_id); + + if (!ab || !ab.value) + { + jQuery("tr.hiddenRow").css("display", "table-row"); + } + else + { + var cc = document.getElementById(info_cc); + + for(var i=0; i < ab.options.length && ab.options[i].value != ab.value; ++i) ; + + if (i < ab.options.length) + { + cc.value += (cc.value?', ':'')+ab.options[i].text.replace(/^.* <(.*)>$/,'$1'); + ab.value = ''; + ab.onchange(); + jQuery("tr.hiddenRow").css("display", "none"); + } + } + return false; + }, + + /** + * If one of info_status, info_percent or info_datecompleted changed --> set others to reasonable values + * + * @param string changed_id id of changed element + * @param string status_id + * @param string percent_id + * @param string datecompleted_id + */ + infolog_status_changed: function(changed_id, status_id, percent_id, datecompleted_id) + { + var status = document.getElementById(status_id); + var percent = document.getElementById(percent_id); + var datecompleted = document.getElementById(datecompleted_id+'[str]'); + if(!datecompleted) + { + datecompleted = jQuery('#'+datecompleted_id +' input').get(0); + } + var completed; + + switch(changed_id) + { + case status_id: + completed = status.value == 'done' || status.value == 'billed'; + if (completed || status.value == 'not-started' || + (status.value == 'ongoing') != (percent.value > 0 && percent.value < 100)) + { + percent.value = completed ? 100 : (status.value == 'not-started' ? 0 : 10); + } + break; + + case percent_id: + completed = percent.value == 100; + if (completed != (status.value == 'done' || status.value == 'billed') || + (status.value == 'not-started') != (percent.value == 0)) + { + status.value = percent.value == 0 ? 'not-started' : (percent.value == 100 ? 'done' : 'ongoing'); + } + break; + + case datecompleted_id+'[str]': + case datecompleted_id: + completed = datecompleted.value != ''; + if (completed != (status.value == 'done' || status.value == 'billed')) + { + status.value = completed ? 'done' : 'not-started'; + } + if (completed != (percent.value == 100)) + { + percent.value = completed ? 100 : 0; + } + break; + } + if (!completed && datecompleted && datecompleted.value != '') + { + datecompleted.value = ''; + } + else if (completed && datecompleted && datecompleted.value == '') + { + // todo: set current date in correct format + } + }, + + /** + * handle "print" action from "Actions" selectbox in edit infolog window. + * check if the template is dirty then submit the template otherwise just open new window as print. + * + */ + infolog_edit_actions: function() + { + var widget = this.et2.getWidgetById('action'); + var template = this.et2._inst; + if (template) + { + var id = template.widgetContainer.getArrayMgr('content').data['info_id']; + } + if (widget) + { + switch (widget.get_value()) + { + case 'print': + if (template.isDirty()) + { + template.submit(); + } + egw_open(id,'infolog','edit',{print:1}); + break; + default: + template.submit(); + } + } + }, +});