diff --git a/api/js/etemplate/et2_widget_diff.js b/api/js/etemplate/et2_widget_diff.js index 24ab728b27..575f18c5bb 100644 --- a/api/js/etemplate/et2_widget_diff.js +++ b/api/js/etemplate/et2_widget_diff.js @@ -1,3 +1,4 @@ +"use strict"; /** * EGroupware eTemplate2 - JS Diff object * @@ -9,186 +10,180 @@ * @copyright Nathan Gray 2012 * @version $Id$ */ - +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); /*egw:uses - /vendor/bower-asset/jquery/dist/jquery.js; - /vendor/bower-asset/jquery-ui/jquery-ui.js; - /vendor/bower-asset/diff2html/dist/diff2html.min.js; - et2_core_valueWidget; + /vendor/bower-asset/jquery/dist/jquery.js; + /vendor/bower-asset/jquery-ui/jquery-ui.js; + /vendor/bower-asset/diff2html/dist/diff2html.min.js; + et2_core_valueWidget; */ - +var et2_core_widget_1 = require("./et2_core_widget"); +var et2_core_inheritance_1 = require("./et2_core_inheritance"); +var et2_core_valueWidget_1 = require("./et2_core_valueWidget"); /** * Class that displays the diff between two [text] values * * @augments et2_valueWidget */ -var et2_diff = (function(){ "use strict"; return et2_valueWidget.extend([et2_IDetachedDOM], -{ - attributes: { - "value": { - "type": "any" - } - }, - - diff_options: { - "inputFormat":"diff", - "matching": "words" - }, - - /** - * Constructor - * - * @memberOf et2_diff - */ - init: function() { - this._super.apply(this, arguments); - this.mini = true; - - // included via etemplate2.css - //this.egw().includeCSS('../../../vendor/bower-asset/dist/dist2html.css'); - this.div = document.createElement("div"); - jQuery(this.div).addClass('et2_diff'); - }, - - set_value: function(value) { - jQuery(this.div).empty(); - if(typeof value == 'string') { - - // Diff2Html likes to have files, we don't have them - if(value.indexOf('---') !== 0) - { - value = "--- diff\n+++ diff\n"+value; - } - var diff = Diff2Html.getPrettyHtml(value, this.diff_options); - // var ui = new Diff2HtmlUI({diff: diff}); - // ui.draw(jQuery(this.div), this.diff_options); - jQuery(this.div).append(diff); - } - else if(typeof value != 'object') - { - jQuery(this.div).append(value); - } - this.check_mini(); - }, - - check_mini: function() { - if(!this.mini) - { - return false; - } - var view = jQuery(this.div).children(); - this.minify(view); - var self = this; - jQuery(' ') - .appendTo(self.div) - .css("cursor", "pointer") - .click({diff: view, div: self.div, label: self.options.label}, function(e) { - var diff = e.data.diff; - var div = e.data.div; - self.un_minify(diff); - var dialog_div = jQuery('
') - .append(diff); - - dialog_div.dialog({ - title: e.data.label, - width: 'auto', - autoResize: true, - modal: true, - buttons: [{text: self.egw().lang('ok'), click: function() {jQuery(this).dialog("close");}}], - open: function() { - if(jQuery(this).parent().height() > jQuery(window).height()) - { - jQuery(this).height(jQuery(window).height() *0.7); - } - jQuery(this).addClass('et2_diff').dialog({position: "center"}); - }, - close: function(event, ui) { - // Need to destroy the dialog, etemplate widget needs divs back where they were - dialog_div.dialog("destroy"); - self.minify(this); - - // Put it back where it came from, or et2 will error when clear() is called - diff.prependTo(div); - } - }); - }); - }, - set_label: function(_label) { - this.options.label = _label; - - }, - - /** - * Make the diff into a mini-diff - * - * @param {DOMNode|String} view - */ - minify: function(view) { - view = jQuery(view) - .addClass('mini') - // Dialog changes these, if resized - .width('100%').css('height', 'inherit') - .show(); - jQuery('th', view).hide(); - jQuery('td.equal',view).hide() - .prevAll().hide(); - }, - - /** - * Expand mini-diff - * - * @param {DOMNode|String} view - */ - un_minify: function(view) { - jQuery(view).removeClass('mini').show(); - jQuery('th',view).show(); - jQuery('td.equal',view).show(); - }, - - /** - * Code for implementing et2_IDetachedDOM - * Fast-clonable read-only widget that only deals with DOM nodes, not the widget tree - */ - - /** - * Build a list of attributes which can be set when working in the - * "detached" mode in the _attrs array which is provided - * by the calling code. - * - * @param {object} _attrs - */ - getDetachedAttributes: function(_attrs) { - _attrs.push("value", "label"); - }, - - /** - * Returns an array of DOM nodes. The (relativly) same DOM-Nodes have to be - * passed to the "setDetachedAttributes" function in the same order. - */ - getDetachedNodes: function() { - return [this.div]; - }, - - /** - * Sets the given associative attribute->value array and applies the - * attributes to the given DOM-Node. - * - * @param _nodes is an array of nodes which has to be in the same order as - * the nodes returned by "getDetachedNodes" - * @param _values is an associative array which contains a subset of attributes - * returned by the "getDetachedAttributes" function and sets them to the - * given values. - */ - setDetachedAttributes: function(_nodes, _values) { - this.div = _nodes[0]; - if(typeof _values['label'] != 'undefined') - { - this.set_label(_values['label']); - } - if(typeof _values['value'] != 'undefined') - { - this.set_value(_values['value']); - } - } -});}).call(this); -et2_register_widget(et2_diff, ["diff"]); +var et2_diff = /** @class */ (function (_super) { + __extends(et2_diff, _super); + /** + * Constructor + */ + function et2_diff(_parent, _attrs, _child) { + var _this = + // Call the inherited constructor + _super.call(this, _parent, _attrs, et2_core_inheritance_1.ClassWithAttributes.extendAttributes(et2_diff._attributes, _child || {})) || this; + _this.mini = true; + // included via etemplate2.css + //this.egw().includeCSS('../../../vendor/bower-asset/dist/dist2html.css'); + _this.div = document.createElement("div"); + jQuery(_this.div).addClass('et2_diff'); + return _this; + } + et2_diff.prototype.set_value = function (value) { + jQuery(this.div).empty(); + if (typeof value == 'string') { + // Diff2Html likes to have files, we don't have them + if (value.indexOf('---') !== 0) { + value = "--- diff\n+++ diff\n" + value; + } + // @ts-ignore + var diff = Diff2Html.getPrettyHtml(value, this.diff_options); + // var ui = new Diff2HtmlUI({diff: diff}); + // ui.draw(jQuery(this.div), this.diff_options); + jQuery(this.div).append(diff); + } + else if (typeof value != 'object') { + jQuery(this.div).append(value); + } + this.check_mini(); + }; + et2_diff.prototype.check_mini = function () { + if (!this.mini) { + return false; + } + var view = jQuery(this.div).children(); + this.minify(view); + var self = this; + jQuery(' ') + .appendTo(self.div) + .css("cursor", "pointer") + .click({ diff: view, div: self.div, label: self.options.label }, function (e) { + var diff = e.data.diff; + var div = e.data.div; + self.un_minify(diff); + var dialog_div = jQuery('
') + .append(diff); + dialog_div.dialog({ + title: e.data.label, + width: 'auto', + modal: true, + buttons: [{ text: self.egw().lang('ok'), click: function () { jQuery(this).dialog("close"); } }], + open: function () { + if (jQuery(this).parent().height() > jQuery(window).height()) { + jQuery(this).height(jQuery(window).height() * 0.7); + } + jQuery(this).addClass('et2_diff').dialog({ position: "center" }); + }, + close: function (event, ui) { + // Need to destroy the dialog, etemplate widget needs divs back where they were + dialog_div.dialog("destroy"); + self.minify(this); + // Put it back where it came from, or et2 will error when clear() is called + diff.prependTo(div); + } + }); + }); + }; + et2_diff.prototype.set_label = function (_label) { + this.options.label = _label; + }; + /** + * Make the diff into a mini-diff + * + * @param {DOMNode|String} view + */ + et2_diff.prototype.minify = function (view) { + view = jQuery(view) + .addClass('mini') + // Dialog changes these, if resized + .width('100%').css('height', 'inherit') + .show(); + jQuery('th', view).hide(); + jQuery('td.equal', view).hide() + .prevAll().hide(); + }; + /** + * Expand mini-diff + * + * @param {DOMNode|String} view + */ + et2_diff.prototype.un_minify = function (view) { + jQuery(view).removeClass('mini').show(); + jQuery('th', view).show(); + jQuery('td.equal', view).show(); + }; + /** + * Code for implementing et2_IDetachedDOM + * Fast-clonable read-only widget that only deals with DOM nodes, not the widget tree + */ + /** + * Build a list of attributes which can be set when working in the + * "detached" mode in the _attrs array which is provided + * by the calling code. + * + * @param {object} _attrs + */ + et2_diff.prototype.getDetachedAttributes = function (_attrs) { + _attrs.push("value", "label"); + }; + /** + * Returns an array of DOM nodes. The (relativly) same DOM-Nodes have to be + * passed to the "setDetachedAttributes" function in the same order. + */ + et2_diff.prototype.getDetachedNodes = function () { + return [this.div]; + }; + /** + * Sets the given associative attribute->value array and applies the + * attributes to the given DOM-Node. + * + * @param _nodes is an array of nodes which has to be in the same order as + * the nodes returned by "getDetachedNodes" + * @param _values is an associative array which contains a subset of attributes + * returned by the "getDetachedAttributes" function and sets them to the + * given values. + */ + et2_diff.prototype.setDetachedAttributes = function (_nodes, _values) { + this.div = _nodes[0]; + if (typeof _values['label'] != 'undefined') { + this.set_label(_values['label']); + } + if (typeof _values['value'] != 'undefined') { + this.set_value(_values['value']); + } + }; + et2_diff._attributes = { + "value": { + "type": "any" + } + }; + return et2_diff; +}(et2_core_valueWidget_1.et2_valueWidget)); +exports.et2_diff = et2_diff; +et2_core_widget_1.et2_register_widget(et2_diff, ["diff"]); +//# sourceMappingURL=et2_widget_diff.js.map \ No newline at end of file diff --git a/api/js/etemplate/et2_widget_diff.ts b/api/js/etemplate/et2_widget_diff.ts new file mode 100644 index 0000000000..b703637a17 --- /dev/null +++ b/api/js/etemplate/et2_widget_diff.ts @@ -0,0 +1,209 @@ +/** + * EGroupware eTemplate2 - JS Diff object + * + * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License + * @package etemplate + * @subpackage api + * @link http://www.egroupware.org + * @author Nathan Gray + * @copyright Nathan Gray 2012 + * @version $Id$ + */ + +/*egw:uses + /vendor/bower-asset/jquery/dist/jquery.js; + /vendor/bower-asset/jquery-ui/jquery-ui.js; + /vendor/bower-asset/diff2html/dist/diff2html.min.js; + et2_core_valueWidget; +*/ + +import {et2_register_widget, WidgetConfig} from "./et2_core_widget"; +import {ClassWithAttributes} from "./et2_core_inheritance"; +import {et2_valueWidget} from "./et2_core_valueWidget"; + +/** + * Class that displays the diff between two [text] values + * + * @augments et2_valueWidget + */ +export class et2_diff extends et2_valueWidget implements et2_IDetachedDOM +{ + static readonly _attributes = { + "value": { + "type": "any" + } + }; + + private readonly diff_options: { + "inputFormat":"diff", + "matching": "words" + }; + private div: HTMLDivElement; + private mini: boolean = true; + + /** + * Constructor + */ + constructor(_parent, _attrs? : WidgetConfig, _child? : object) + { + // Call the inherited constructor + super(_parent, _attrs, ClassWithAttributes.extendAttributes(et2_diff._attributes, _child || {})); + + // included via etemplate2.css + //this.egw().includeCSS('../../../vendor/bower-asset/dist/dist2html.css'); + this.div = document.createElement("div"); + jQuery(this.div).addClass('et2_diff'); + } + + set_value( value) + { + jQuery(this.div).empty(); + if(typeof value == 'string') { + + // Diff2Html likes to have files, we don't have them + if(value.indexOf('---') !== 0) + { + value = "--- diff\n+++ diff\n"+value; + } + // @ts-ignore + var diff = Diff2Html.getPrettyHtml(value, this.diff_options); + // var ui = new Diff2HtmlUI({diff: diff}); + // ui.draw(jQuery(this.div), this.diff_options); + jQuery(this.div).append(diff); + } + else if(typeof value != 'object') + { + jQuery(this.div).append(value); + } + this.check_mini(); + } + + check_mini( ) + { + if(!this.mini) + { + return false; + } + var view = jQuery(this.div).children(); + this.minify(view); + var self = this; + jQuery(' ') + .appendTo(self.div) + .css("cursor", "pointer") + .click({diff: view, div: self.div, label: self.options.label}, function(e) { + var diff = e.data.diff; + var div = e.data.div; + self.un_minify(diff); + var dialog_div = jQuery('
') + .append(diff); + + dialog_div.dialog({ + title: e.data.label, + width: 'auto', + modal: true, + buttons: [{text: self.egw().lang('ok'), click: function() {jQuery(this).dialog("close");}}], + open( ) + { + if(jQuery(this).parent().height() > jQuery(window).height()) + { + jQuery(this).height(jQuery(window).height() *0.7); + } + jQuery(this).addClass('et2_diff').dialog({position: "center"}); + }, + close( event, ui) + { + // Need to destroy the dialog, etemplate widget needs divs back where they were + dialog_div.dialog("destroy"); + self.minify(this); + + // Put it back where it came from, or et2 will error when clear() is called + diff.prependTo(div); + } + }); + }); + } + set_label( _label) + { + this.options.label = _label; + + } + + /** + * Make the diff into a mini-diff + * + * @param {DOMNode|String} view + */ + minify( view) + { + view = jQuery(view) + .addClass('mini') + // Dialog changes these, if resized + .width('100%').css('height', 'inherit') + .show(); + jQuery('th', view).hide(); + jQuery('td.equal',view).hide() + .prevAll().hide(); + } + + /** + * Expand mini-diff + * + * @param {DOMNode|String} view + */ + un_minify( view) + { + jQuery(view).removeClass('mini').show(); + jQuery('th',view).show(); + jQuery('td.equal',view).show(); + } + + /** + * Code for implementing et2_IDetachedDOM + * Fast-clonable read-only widget that only deals with DOM nodes, not the widget tree + */ + + /** + * Build a list of attributes which can be set when working in the + * "detached" mode in the _attrs array which is provided + * by the calling code. + * + * @param {object} _attrs + */ + getDetachedAttributes(_attrs) + { + _attrs.push("value", "label"); + } + + /** + * Returns an array of DOM nodes. The (relativly) same DOM-Nodes have to be + * passed to the "setDetachedAttributes" function in the same order. + */ + getDetachedNodes() + { + return [this.div]; + } + + /** + * Sets the given associative attribute->value array and applies the + * attributes to the given DOM-Node. + * + * @param _nodes is an array of nodes which has to be in the same order as + * the nodes returned by "getDetachedNodes" + * @param _values is an associative array which contains a subset of attributes + * returned by the "getDetachedAttributes" function and sets them to the + * given values. + */ + setDetachedAttributes(_nodes, _values) + { + this.div = _nodes[0]; + if(typeof _values['label'] != 'undefined') + { + this.set_label(_values['label']); + } + if(typeof _values['value'] != 'undefined') + { + this.set_value(_values['value']); + } + } +} +et2_register_widget(et2_diff, ["diff"]);