TimeTrex Community Edition v16.2.0
This commit is contained in:
182
interface/html5/global/widgets/inside_editor/InsideEditor.js
Normal file
182
interface/html5/global/widgets/inside_editor/InsideEditor.js
Normal file
@@ -0,0 +1,182 @@
|
||||
( function( $ ) {
|
||||
|
||||
$.fn.InsideEditor = function( options ) {
|
||||
|
||||
Global.addCss( 'global/widgets/inside_editor/InsideEditor.css' );
|
||||
var opts = $.extend( {}, $.fn.InsideEditor.defaults, options );
|
||||
|
||||
var $this = this;
|
||||
var field;
|
||||
var row_render;
|
||||
var render;
|
||||
|
||||
this.rows_widgets_array = null;
|
||||
this.delete_ids = null;
|
||||
this.addRow = null;
|
||||
this.setValue = null;
|
||||
this.getValue = null; // set outside
|
||||
this.removeRow = null;
|
||||
this.updateAllRows = null;
|
||||
this.render_inline_html = false;
|
||||
this.editor_data = null;
|
||||
this.onFormItemChange = null;
|
||||
|
||||
this.parent_controller = null;
|
||||
// this.parent_id = null;
|
||||
|
||||
this.api = null;
|
||||
|
||||
this.setValue = function( val ) {
|
||||
if ( val && val.length > 0 ) {
|
||||
this.setValue( val );
|
||||
} else {
|
||||
this.addRow();
|
||||
}
|
||||
};
|
||||
|
||||
this.getRender = function() {
|
||||
return render;
|
||||
};
|
||||
|
||||
this.getRowRender = function() {
|
||||
return row_render.clone();
|
||||
};
|
||||
|
||||
this.clearErrorStyle = function() {
|
||||
|
||||
};
|
||||
|
||||
this.getField = function() {
|
||||
return field;
|
||||
};
|
||||
|
||||
this.setTitle = function( val ) {
|
||||
var title = $this.children().eq( 0 );
|
||||
|
||||
title.text( val );
|
||||
|
||||
};
|
||||
|
||||
this.removeLastRowLine = function() {
|
||||
var table = this.find( '.inside-editor-render' );
|
||||
var trs = table.find( 'tr' );
|
||||
table.find( 'td' ).removeClass( 'no-line' );
|
||||
|
||||
var last_tr = trs.eq( trs.length - 1 );
|
||||
|
||||
last_tr.find( 'td' ).addClass( 'no-line' );
|
||||
};
|
||||
|
||||
this.removeAllRows = function( include_header ) {
|
||||
var table = this.find( '.inside-editor-render' );
|
||||
var trs = table.find( 'tr' );
|
||||
if ( include_header ) {
|
||||
|
||||
table.find( 'tr' ).each( function() {
|
||||
$( this ).remove();
|
||||
} );
|
||||
|
||||
} else {
|
||||
table.find( 'tr.inside-editor-row' ).remove();
|
||||
}
|
||||
|
||||
this.rows_widgets_array = [];
|
||||
};
|
||||
|
||||
this.setWidgetEnableBaseOnParentController = function( form_item_input ) {
|
||||
if ( this.parent_controller.is_viewing ) {
|
||||
form_item_input.setEnabled( false );
|
||||
} else {
|
||||
form_item_input.setEnabled( true );
|
||||
}
|
||||
};
|
||||
|
||||
this.addIconsEvent = function( row ) {
|
||||
var plus_icon = row.find( '.plus-icon' );
|
||||
var minus_icon = row.find( '.minus-icon' );
|
||||
|
||||
plus_icon.click( function() {
|
||||
$this.addRow( null, $( this ).parents( 'tr' ).index(), row );
|
||||
} );
|
||||
|
||||
minus_icon.click( function() {
|
||||
$this.removeRow( row );
|
||||
|
||||
if ( render.find( 'tr' ).length === 1 ) {
|
||||
$this.addRow();
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
};
|
||||
|
||||
this.getDefaultData = function( index ) {
|
||||
|
||||
if ( Global.isSet( this.api ) ) {
|
||||
this.api['get' + this.api.key_name + 'DefaultData']( {
|
||||
onResult: function( result ) {
|
||||
var result_data = result.getResult();
|
||||
result_data.id = false;
|
||||
|
||||
if ( !result_data ) {
|
||||
result_data = [];
|
||||
}
|
||||
|
||||
$this.addRow( result_data, index );
|
||||
|
||||
}
|
||||
} );
|
||||
}
|
||||
};
|
||||
|
||||
this.each( function() {
|
||||
var o = $.meta ? $.extend( {}, opts, $( this ).data() ) : opts;
|
||||
if ( o.title ) {
|
||||
$this.setTitle( o.title );
|
||||
}
|
||||
if ( o.onFormItemChange ) {
|
||||
$this.onFormItemChange = o.onFormItemChange;
|
||||
}
|
||||
$this.rows_widgets_array = [];
|
||||
$this.delete_ids = [];
|
||||
$this.addRow = o.addRow;
|
||||
$this.removeRow = o.removeRow;
|
||||
$this.getValue = o.getValue;
|
||||
$this.setValue = o.setValue;
|
||||
$this.parent_controller = o.parent_controller;
|
||||
$this.api = o.api;
|
||||
$this.updateAllRows = o.updateAllRows;
|
||||
$this.render_inline_html = o.render_inline_html;
|
||||
render = $this.render_inline_html ? o.render : Global.loadWidget( o.render );
|
||||
row_render = $this.render_inline_html ? $( o.row_render ) : $( Global.loadWidget( o.row_render ) );
|
||||
var args = o.render_args;
|
||||
var template = _.template( render );
|
||||
var render_div = $this.children().eq( 1 );
|
||||
render_div.append( template( args ) );
|
||||
render = $( render_div.find( '.inside-editor-render' ) );
|
||||
|
||||
} );
|
||||
|
||||
// Sets data as modified when a widget triggers onFormItemChange.
|
||||
// Some inside editor widgets bind their own formItemChange and to prevent unintended interactions we only set data changed.
|
||||
$this.bind( 'formItemChange', function( e, target ) {
|
||||
// Fix issue #2885: Error: Uncaught TypeError: o.parent_controller.setIsChanged is not a function.
|
||||
// This was happening in TimeSheet -> New Punch and opening the inside editor for dates and changing a date.
|
||||
if ( typeof $this.parent_controller.setIsChanged === 'function' ) {
|
||||
$this.parent_controller.setIsChanged( target );
|
||||
}
|
||||
} );
|
||||
|
||||
return this;
|
||||
|
||||
};
|
||||
|
||||
$.fn.InsideEditor.defaults = {};
|
||||
$.fn.InsideEditor.html_template = `
|
||||
<div class="inside-editor">
|
||||
<span class="title"></span>
|
||||
<div class="render-div"></div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
} )( jQuery );
|
@@ -0,0 +1,3 @@
|
||||
<table class="inside-editor-render">
|
||||
<tr class="title"></tr>
|
||||
</table>
|
Reference in New Issue
Block a user