- /**
- * @namespace flexygo.ui.wc
- */
- var flexygo;
- (function (flexygo) {
- var ui;
- (function (ui) {
- var wc;
- (function (wc) {
- /**
- * Library for the FlxImageElement web component.
- *
- * @class FlxImageElement
- * @constructor
- * @return {FlxImageElement}
- */
- class FlxImageElement extends HTMLElement {
- constructor() {
- super();
- /**
- * Set when component is attached to DOM
- * @property connected {boolean}
- */
- this.connected = false;
- this.property = null;
- this.options = null;
- this.value = null;
- this.moduleName = null;
- this.TypeMode = null;
- this.fileName = null;
- this.name = null;
- /**
- * Control Mode
- * @property type {string}
- */
- this.mode = 'object';
- this.pageContainer = null;
- this.control = null;
- this.files = null; //TODO_TS
- }
- /**
- * Fires when element is attached to DOM
- * @method connectedCallback
- */
- connectedCallback() {
- let element = $(this);
- let typeMode = element.attr('type') || element.attr('typemode') || 'embeded';
- if (typeMode && typeMode !== '') {
- this.TypeMode = typeMode;
- }
- let propName = element.attr('property');
- if (propName && flexygo.utils.isBlank(this.options)) {
- let parentCtl = element.closest('flx-edit,flx-list,flx-propertymanager,flx-view,flx-filter');
- if (parentCtl && parentCtl.length > 0) {
- let wcParent = parentCtl[0];
- if (parentCtl.is('flx-filter')) {
- let objName = element.attr('object');
- this.options = jQuery.extend(true, {}, wcParent.properties[objName + '-' + propName]);
- }
- else {
- this.options = jQuery.extend(true, {}, wcParent.properties[propName]);
- }
- if (wcParent && wcParent.mode) {
- this.mode = wcParent.mode;
- }
- }
- this.property = propName;
- }
- if (typeof element.attr('Required') !== 'undefined') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.IsRequired = true;
- }
- let RequiredMessage = element.attr('RequiredMessage');
- if (RequiredMessage && RequiredMessage !== '') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.IsRequiredMessage = RequiredMessage;
- }
- if (typeof element.attr('Locked') !== 'undefined' || typeof element.attr('Disabled') !== 'undefined') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.Locked = true;
- }
- let Style = element.attr('Style');
- if (Style && Style !== '') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.Style = Style;
- element.attr('Control-Style', this.options.Style);
- element.attr('Style', '');
- }
- let Class = element.attr('Class');
- if (Class && Class !== '') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.CssClass = Class;
- element.attr('Control-Class', this.options.CssClass);
- element.attr('Class', '');
- }
- let ctlClass = element.attr('Control-Class');
- if (ctlClass && ctlClass !== '') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.CssClass = ctlClass;
- }
- let ctlStyle = element.attr('Control-Style');
- if (ctlStyle && ctlStyle !== '') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.Style = ctlStyle;
- }
- let Hide = element.attr('Hide');
- if (Hide && Hide !== '') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.Hide = Hide == 'true';
- }
- let defaultValue = element.attr('defaultvalue');
- if (defaultValue && defaultValue !== '') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.DefaultValue = defaultValue;
- }
- let rootPath = element.attr('rootpath');
- if (rootPath && rootPath !== '') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.RootPath = rootPath;
- }
- let Tag = element.attr('Tag');
- if (Tag && Tag !== '') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.Tag = Tag;
- }
- let ImageCompressionType = element.attr('ImageCompression');
- if (ImageCompressionType && ImageCompressionType !== '') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.ImageCompressionType = parseInt(ImageCompressionType);
- }
- this.init();
- this.connected = true;
- //let Value = element.attr('value');
- //if (Value && Value !== '') {
- // this.setValue(Value);
- //}
- }
- /**
- * Array of observed attributes.
- * @property observedAttributes {Array}
- */
- static get observedAttributes() {
- return ['type', 'typemode', 'modulename', 'property', 'required', 'locked', 'disabled', 'style', 'class', 'hide', 'tag'];
- }
- /**
- * Fires when the attribute value of the element is changed.
- * @method attributeChangedCallback
- */
- attributeChangedCallback(attrName, oldVal, newVal) {
- let element = $(this);
- if (!this.connected) {
- return;
- }
- if (attrName.toLowerCase() === 'type' || attrName.toLowerCase() === 'typemode' && newVal && newVal !== '') {
- this.TypeMode = newVal;
- this.refresh();
- }
- if (attrName.toLowerCase() === 'modulename' && newVal && newVal !== '') {
- this.moduleName = newVal;
- if (this.moduleName) {
- this.refresh();
- }
- this.init();
- }
- if (attrName.toLowerCase() === 'property' && newVal && newVal !== '') {
- let propName = newVal;
- let parentCtl = element.closest('flx-edit, flx-list,flx-propertymanager');
- if (parentCtl && parentCtl.length > 0) {
- let wcParent = parentCtl[0];
- this.options = jQuery.extend(true, {}, wcParent.properties[propName]);
- }
- this.property = newVal;
- this.init();
- }
- if (attrName.toLowerCase() === 'required') {
- if (typeof element.attr('required') !== 'undefined') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.IsRequired = true;
- }
- this.refresh();
- }
- if (attrName.toLowerCase() === 'locked' || attrName.toLowerCase() === 'disabled') {
- if (typeof element.attr('locked') !== 'undefined' || typeof element.attr('disabled') !== 'undefined') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.Locked = true;
- }
- this.init();
- }
- if (attrName.toLowerCase() === 'style' && newVal && newVal !== '') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.Style = newVal;
- if (element.attr('Control-Style') !== this.options.Style) {
- element.attr('Control-Style', this.options.Style);
- element.attr('Style', '');
- this.refresh();
- }
- }
- if (attrName.toLowerCase() === 'class' && element.attr('Control-Class') !== newVal && newVal != oldVal) {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.CssClass = newVal;
- if (element.attr('Control-Class') !== this.options.CssClass) {
- if (newVal != '') {
- element.attr('Control-Class', this.options.CssClass);
- }
- element.attr('Class', '');
- this.refresh();
- }
- }
- if (attrName.toLowerCase() === 'hide' && newVal && newVal !== '') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.Hide = newVal;
- this.refresh();
- }
- if (attrName.toLowerCase() === 'tag' && newVal && newVal !== '') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.Tag = newVal;
- this.refresh();
- }
- if (attrName.toLowerCase() === 'imagecompression' && newVal && newVal !== '') {
- if (!this.options) {
- this.options = new flexygo.api.ObjectProperty();
- }
- this.options.ImageCompressionType = newVal;
- this.refresh();
- }
- }
- /**
- * Initializes component depending on init mode attribute.
- * @method init
- */
- init() {
- let me = $(this);
- if (me.attr('mode') && me.attr('mode').toLowerCase() === 'view') {
- this.initViewMode();
- }
- else {
- this.initEditMode();
- }
- }
- /**
- * Initializes in view mode.
- * @method initViewMode
- */
- initViewMode() {
- let me = $(this);
- let img = $('<img class="img-responsive" style="max-height:100%"/>');
- let container = $('<div class="cpr-view-container">');
- container.html(img);
- me.html(container);
- me.parent('div[data-tag="control"]').attr('style', 'height:inherit;');
- me.off();
- if (this.options && this.options.Style) {
- me.children('div.cpr-view-container img.img-responsive').attr('style', this.options.Style);
- }
- if (this.options && this.options.CssClass) {
- me.children('div').addClass(this.options.CssClass);
- }
- if (this.options && this.options.Hide) {
- me.addClass("hideControl");
- }
- let Value = me.attr('value');
- if (Value && Value !== '') {
- this.setValue(Value, me.attr('text'));
- }
- this.setValue(this.getValue());
- }
- /**
- * Initializes in edit mode.
- * @method initEditMode
- */
- initEditMode() {
- let me = $(this);
- let input;
- let img;
- let icon;
- if (me.attr('typemode') && me.attr('typemode') !== '') {
- this.TypeMode = me.attr('typemode').toLowerCase();
- }
- if (me.attr('defaultvalue') && me.attr('defaultvalue') !== '') {
- this.options.DefaultValue = me.attr('defaultvalue');
- }
- if (me.attr('rootpath') && me.attr('rootpath') !== '') {
- this.options.RootPath = me.attr('rootpath');
- }
- me.parent('div[data-tag="control"]').attr('style', 'height:94%;');
- this.control = $('<div class="ctl-container ctl-cpr-transition ctl-hover">');
- input = $('<input type="hidden"/>');
- icon = $('<i class="flx-icon icon-pencil ctl-icon ctl-cpr-transition" flx-fw=""></i> ');
- img = $('<img src="" class="img-responsive ctl-image ctl-cpr-transition"/>');
- this.control.append(input);
- this.control.append(icon);
- this.control.append(img);
- me.html(this.control);
- let Value = me.attr('value');
- if (Value && Value !== '') {
- this.setValue(Value, me.attr('text'));
- }
- me.off('click').on('click', () => {
- this.openDialog();
- });
- this.setOptions();
- }
- setOptions() {
- let me = $(this);
- let input = me.find('input');
- let img = me.find('img');
- input.on('change.refreshvalue', () => {
- me.attr('value', input.val());
- });
- if (this.options && this.options.Name && this.options.Name !== '') {
- input.attr('name', this.options.Name);
- }
- else {
- input.attr('name', flexygo.utils.uniqueName());
- }
- if (me.attr('tab') && me.attr('tab') !== '') {
- input.attr('tabindex', me.attr('tab'));
- }
- if (this.options && this.options.Locked) {
- input.prop('disabled', this.options.Locked);
- me.off();
- me.find('div.ctl-container').removeClass('ctl-hover').addClass('ctl-container-locked');
- img.addClass('ctl-image-locked');
- }
- if (this.options && this.options.ClientReadOnly) {
- me.find('i').removeClass('icon-pencil').addClass('icon-eye');
- }
- if (this.options && this.options.Style) {
- me.find('img').attr('style', this.options.Style);
- }
- if (this.options && this.options.CssClass) {
- me.children('div').addClass(this.options.CssClass);
- }
- if (this.options && this.options.Hide) {
- me.addClass("hideControl");
- }
- if (this.options && this.options.IsRequired) {
- input.prop('required', true);
- }
- if (this.options && this.options.CauseRefresh) {
- input.on('change', (e) => {
- //$(document).trigger('refreshProperty', [input.closest('flx-edit'), this.options.Name]);
- let ev = {
- class: "property",
- type: "changed",
- sender: this,
- masterIdentity: this.property
- };
- flexygo.events.trigger(ev);
- });
- }
- }
- refresh() {
- try {
- let val = this.getValue();
- this.init();
- if (val) {
- this.setValue(val);
- }
- }
- catch (e) {
- console.log(e.message);
- }
- }
- setValue(value, text) {
- let me = $(this);
- if (!text) {
- text = value;
- }
- if (me.attr('mode') && me.attr('mode').toLowerCase() === 'view') {
- this.setValueView(value);
- }
- else {
- try {
- let input = me.find('input');
- let img = me.find('img');
- let base64Matcher = new RegExp("^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$");
- if (!value) {
- if (this.options.DefaultValue) {
- text = flexygo.utils.resolveUrl(this.addTime(this.options.DefaultValue));
- value = this.options.DefaultValue;
- }
- img.attr('src', text);
- me.attr('value', value).attr('text', text);
- input.val(value);
- }
- else {
- let test = value.split(',')[1];
- if (flexygo.utils.isBase64(test)) {
- img.attr('src', value);
- input.val(value);
- me.attr('value', value);
- }
- else {
- text = flexygo.utils.resolveUrl(this.addTime(text));
- img.attr('src', text);
- me.attr('value', value).attr('text', text);
- input.val(value);
- }
- }
- }
- catch (e) {
- console.log(e.message);
- }
- }
- }
- addTime(val) {
- return flexygo.utils.querystring.setParamValue(val, 'time', new Date().getTime().toString());
- }
- setValueView(value) {
- let me = $(this);
- this.value = value;
- me.find('div.cpr-view-container img.img-responsive').attr('src', flexygo.utils.resolveUrl(value));
- }
- getValue() {
- let me = $(this);
- if (me.attr('mode') && me.attr('mode').toLowerCase() === 'view') {
- return (this.value) ? this.value : me.attr('value');
- }
- try {
- let input = me.find('input');
- if (!input.val()) {
- return null;
- }
- else {
- return input.val();
- }
- }
- catch (e) {
- console.log(e.message);
- }
- }
- setResult(result) {
- try {
- let me = $(this);
- if (this.TypeMode === 'file') {
- let formValues = [];
- let module = $(this).closest('flx-edit');
- if (module.length > 0) {
- let props = module.find('[property]');
- if (props.length > 0) {
- for (var i = 0; i < props.length; i++) {
- let prop = $(props[i])[0];
- formValues.push({ "key": prop.property, "value": prop.getValue() });
- }
- }
- }
- let params = {
- Mode: this.mode,
- ObjectName: this.options.ProcessName || this.options.ReportName || this.options.ObjectName,
- PropertyName: this.options.Name,
- FileName: this.fileName,
- Base64: result.split(',')[1],
- CurrentValue: me.attr('value'),
- FormValues: formValues,
- Name: this.name
- };
- flexygo.ajax.post('~/api/Image', 'SaveFile', params, (ret) => {
- if (ret.Value != 'errorrootpath')
- this.setValue(ret.Value, ret.Text);
- else {
- flexygo.msg.error('image.errorrootpath');
- }
- });
- if (!this.fileName) {
- flexygo.msg.warning('image.errorfilename');
- }
- }
- else if (this.TypeMode === 'base64') {
- let extns = this.options.Extensions.toLowerCase().split("|");
- let fileExtension = this.name.substring(this.name.lastIndexOf(".")).toLowerCase();
- if (extns.indexOf(fileExtension) > -1 || this.options.ExtensionId == 'sysAll') {
- this.setValue(result);
- }
- else {
- flexygo.msg.error('image.extension');
- }
- }
- }
- catch (err) {
- console.log(err.message);
- }
- }
- openDialog() {
- let me = $(this);
- let eValue;
- let imageElement;
- let image;
- let rounded;
- let accept = '';
- if ((this.options && this.options.RegExp) || (this.options && this.options.Extensions)) {
- if (this.options.RegExp) {
- accept = this.options.RegExp;
- }
- else if (this.options.Extensions) {
- if (this.options.ExtensionId != 'sysAll') {
- accept = flexygo.utils.parser.replaceAll(this.options.Extensions, '|', ',');
- }
- }
- }
- image = me.find('img').attr("src");
- if (this.TypeMode === 'file') {
- this.name = this.getName(me.attr('value'), this.TypeMode);
- this.fileName = this.getFileName(me.attr('value'));
- }
- else {
- if (me.attr('value')) {
- this.name = "." + me.attr('value').substring(me.attr('value').indexOf("/") + 1, me.attr('value').indexOf(";"));
- }
- }
- rounded = false;
- this.pageContainer = $(`<div class="flx-cpr-image container cnt-Body pageContainerImage">
- <div class="bg-white cpr-subcontainer ctl-cpr-transition">
- <div class="panel panel-default panel-wizard col-md-12 cpr-panel">
- <div class="panel-heading cpr-heading">
- <div class="btn-group cpr-btn-group" data-toggle="buttons">
- <label class="btn btn-default cpr-btn cpr-defaultActive active cpr-setDragModeCrop cpr-setDragMode" data-original-title="" title="">
- <input type="radio" class="cpr-defaultCheck" name="setDragMode" value="crop" checked>
- <i class="fa fa-crop" flx-fw=""></i>
- </label>
- <label class="btn btn-default cpr-btn cpr-setDragModeMove cpr-setDragMode" data-original-title="" title="">
- <input type="radio" class="" name="setDragMode" value="move">
- <i class="fa fa-arrows" flx-fw=""></i>
- </label>
- </div>
- <div class="btn-group cpr-btn-group crp-zoom">
- <button type="button" method="zoom" value="0.1" class="btn btn-default cpr-btn" data-original-title="" title="">
- <i class="fa fa-search-plus" flx-fw=""></i>
- </button>
- <button type="button" method="zoom" value="-0.1" class="btn btn-default cpr-btn" data-original-title="" title="">
- <i class="fa fa-search-minus" flx-fw=""></i>
- </button>
- </div>
- <div class="btn-group cpr-btn-group crp-rotate">
- <button type="button" method="rotate" value="-45" class="btn btn-default cpr-btn" data-original-title="" title="">
- <i class="fa fa-rotate-left" flx-fw=""></i>
- </button>
- <button type="button" method="rotate" value="45" class="btn btn-default cpr-btn" data-original-title="" title="">
- <i class="fa fa-rotate-right" flx-fw=""></i>
- </button>
- </div>
- <div class="btn-group cpr-btn-group crp-scale">
- <button type="button" method="scaleX" value="-1" class="btn btn-default cpr-btn" data-original-title="" title="">
- <i class="fa fa-arrows-h" flx-fw=""></i>
- </button>
- <button type="button" method="scaleY" value="-1" class="btn btn-default cpr-btn" data-original-title="" title="">
- <i class="fa fa-arrows-v" flx-fw=""></i>
- </button>
- </div>
- <div class="btn-group cpr-btn-group cpr-setAspectRatio" data-toggle="buttons">
- <label class="btn btn-default cpr-btn cpr-defaultActive active" data-original-title="" title="">
- <input type="radio" class="cpr-defaultCheck" name="setAspectRatio" value="NaN" checked>
- ` + flexygo.localization.translate('image.free') + `
- </label>
- <label class="btn btn-default cpr-btn" data-original-title="" title="">
- <input type="radio" class="" name="setAspectRatio" value="1.7777777777777777">
- 16:9
- </label>
- <label class="btn btn-default cpr-btn" data-original-title="" title="">
- <input type="radio" class="" name="setAspectRatio" value="1.3333333333333333">
- 4:3
- </label>
- <label class="btn btn-default cpr-btn" data-original-title="" title="">
- <input type="radio" class="" name="setAspectRatio" value="0.6666666666666666">
- 2:3
- </label>
- <label class="btn btn-default cpr-btn" data-original-title="" title="">
- <input type="radio" class="" name="setAspectRatio" value="1">
- <i class="flx-icon icon-non-check" flx-fw=""></i>
- </label>
- <label class="btn btn-default cpr-btn" data-original-title="" title="">
- <input type="radio" class="" name="setAspectRatio" value="rounded">
- <i class="flx-icon icon-circle-1" flx-fw=""></i>
- </label>
- </div>
- <button type="button" method="reset" value="" class="btn btn-default cpr-btn" data-original-title="" title="">
- <i class="fa fa-refresh" flx-fw=""></i>
- </button>
- <button id="download" type="button" method="download" value="" class="btn btn-default cpr-btn" data-original-title="" title="">
- <i class="flx-icon icon-download" flx-fw=""></i>
- </button>
- </div>
- <div class="panel-body cpr-cropper">
- <span class="cpr-span">` + flexygo.localization.translate('image.infotostart') + `</span>
- <img class="img-responsive" src="` + image + `">
- </div>
- </div>
- <label class="btn btn-default btn-file bg-outstanding cpr-btn-browse">`
- + flexygo.localization.translate('image.browsebutton') + `<input type="file" class="hide" accept="${accept}"/>
- </label>
- <button type="button" method="save" value="" class="btn btn-default bg-info cpr-btn-save" data-original-title="" title="">
- <i class="flx-icon icon-save-2" flx-fw=""></i> ` + flexygo.localization.translate('image.savebutton') +
- `</button>
- <button type="button" method="remove" value="" class="btn btn-default bg-danger cpr-btn-remove" data-original-title="" title="">
- <i class="flx-icon icon-delete-2" flx-fw=""></i> ` + flexygo.localization.translate('image.removebutton') +
- `</button>
- </div>
- </div>`);
- if (this.options.ObjectName === 'sysObjectImage') {
- this.pageContainer.find('label.cpr-btn-browse').hide();
- this.pageContainer.find('button[method="save"]').addClass('cpr-btn-save-imagemanager');
- this.pageContainer.find('button[method="remove"]').hide();
- }
- if (!this.options.ClientReadOnly) {
- this.pageContainer.find('label.cpr-setDragModeCrop').tooltip({ title: flexygo.localization.translate('image.cropbutton'), placement: 'right', trigger: 'hover' });
- this.pageContainer.find('label.cpr-setDragModeMove').tooltip({ title: flexygo.localization.translate('image.movebutton'), placement: 'right', trigger: 'hover' });
- this.pageContainer.find('div.crp-zoom').tooltip({ title: flexygo.localization.translate('image.zoombutton'), placement: 'right', trigger: 'hover' });
- this.pageContainer.find('div.crp-rotate').tooltip({ title: flexygo.localization.translate('image.rotatebutton'), placement: 'right', trigger: 'hover' });
- this.pageContainer.find('div.crp-scale').tooltip({ title: flexygo.localization.translate('image.scalebutton'), placement: 'right', trigger: 'hover' });
- this.pageContainer.find('div.cpr-setAspectRatio').tooltip({ title: flexygo.localization.translate('image.aspectratiobutton'), placement: 'right', trigger: 'hover' });
- this.pageContainer.find('button[method="reset"]').tooltip({ title: flexygo.localization.translate('image.resetbutton'), placement: 'left', trigger: 'hover' });
- this.pageContainer.find('label.cpr-btn-browse').tooltip({ title: flexygo.localization.translate('image.browsebuttontooltip'), placement: 'top', trigger: 'hover' });
- this.pageContainer.find('button[method="save"]').tooltip({ title: flexygo.localization.translate('image.savebutton'), placement: 'top', trigger: 'hover' });
- this.pageContainer.find('button[method="remove"]').tooltip({ title: flexygo.localization.translate('image.removebutton'), placement: 'top', trigger: 'hover' });
- this.pageContainer.find('button[method="download"]').tooltip({ title: flexygo.localization.translate('image.downloadbutton'), placement: 'left', trigger: 'hover' });
- }
- else {
- this.pageContainer.find('.cpr-span').hide();
- this.pageContainer.find('.btn').prop("disabled", true).addClass('disabled');
- this.pageContainer.find('input').prop("disabled", true).addClass('disabled');
- }
- imageElement = this.pageContainer.find('img');
- let dialogWidth;
- let dialogHeight;
- if ($('body').width() < 850) {
- dialogWidth = $('body').width();
- }
- else {
- dialogWidth = 900;
- }
- if ($('body').height() < 830) {
- dialogHeight = $('body').height();
- }
- else {
- if (this.options.ObjectName === 'sysObjectImage') {
- dialogHeight = 780;
- }
- else {
- dialogHeight = 830;
- }
- }
- this.pageContainer.dialog({
- position: { my: "center top", at: "center top+70", of: $('body') },
- width: dialogWidth,
- height: dialogHeight,
- dialogClass: 'flx-dialog-modal',
- modal: true,
- close: (e) => { $(e.target).dialog('destroy').remove(); }
- }).dialogExtend({
- "closable": true,
- "maximizable": false,
- "minimizable": false,
- "collapsable": false,
- "dblclick": false,
- "modal": true,
- "close": (e) => { $(e.target).remove(); }
- });
- if (!this.options.ClientReadOnly && image) {
- let options = null;
- if (this.isJSON(this.options.Tag) && JSON.parse(this.options.Tag).options) {
- options = JSON.parse(this.options.Tag).options;
- }
- imageElement.cropper(options);
- }
- this.pageContainer.find('button').on('click', (e) => {
- let element = $(e.currentTarget);
- let method = element.attr('method');
- let value = element.attr('value');
- if (method === 'download') {
- var link = document.createElement('a');
- link.href = image;
- link.download = this.options.Name;
- link.click();
- }
- if (method === 'remove') {
- if (this.options.ObjectName != 'sysObjectImage') {
- this.setValue(value);
- this.pageContainer.dialog('destroy').remove();
- }
- }
- else if (method === 'save') {
- let options = {};
- let compression;
- if (this.isJSON(this.options.Tag) && JSON.parse(this.options.Tag).getCroppedCanvas) {
- options = JSON.parse(this.options.Tag).getCroppedCanvas;
- }
- if (this.options.ImageMaxWidth) {
- options.maxWidth = this.options.ImageMaxWidth;
- }
- if (this.options.ImageMaxHeight) {
- options.maxHeight = this.options.ImageMaxHeight;
- }
- let croppedCanvas = imageElement.cropper('getCroppedCanvas', options);
- if (rounded) {
- croppedCanvas = this.getRoundedCanvas(croppedCanvas);
- }
- if (imageElement[0].src.includes('.png') || imageElement[0].src.includes('image/png')) {
- if (this.options.ImageCompressionType && this.options.ImageCompressionType > 0) {
- switch (this.options.ImageCompressionType) {
- //Low
- case 1:
- compression = 192;
- break;
- //Medium
- case 2:
- compression = 128;
- break;
- //High
- case 3:
- compression = 64;
- break;
- }
- let optionsgRgb = {
- colors: compression
- };
- let rgbQuant = new RgbQuant(optionsgRgb);
- rgbQuant.sample(croppedCanvas);
- let img = rgbQuant.reduce(croppedCanvas);
- let canvas = croppedCanvas;
- let uint = new Uint8ClampedArray(img.buffer);
- let imageData = new ImageData(uint, croppedCanvas.width, croppedCanvas.height);
- let ctx = croppedCanvas.getContext('2d');
- ctx.putImageData(imageData, 0, 0);
- canvas.getContext('2d').drawImage(croppedCanvas, 0, 0, canvas.width, canvas.height);
- this.setResult(canvas.toDataURL('image/png'));
- }
- else {
- this.setResult(croppedCanvas.toDataURL());
- }
- }
- else {
- if (this.options.ImageCompressionType && this.options.ImageCompressionType > 0) {
- switch (this.options.ImageCompressionType) {
- //Low
- case 1:
- compression = 0.75;
- break;
- //Medium
- case 2:
- compression = 0.50;
- break;
- //High
- case 3:
- compression = 0.25;
- break;
- }
- this.setResult(croppedCanvas.toDataURL('image/jpeg', compression));
- }
- else {
- this.setResult(croppedCanvas.toDataURL());
- }
- }
- this.pageContainer.dialog('destroy').remove();
- }
- else {
- if (method === 'scaleX' && eValue.scaleX === -1 || method === 'scaleY' && eValue.scaleY === -1) {
- value = '1';
- }
- imageElement.cropper(method, value);
- }
- });
- this.pageContainer.find('input').on('change', (e) => {
- let element = $(e.currentTarget);
- if (element.attr('type') === 'file') {
- if (element[0].files && element[0].files[0]) {
- if (this.options.ObjectName != 'sysObjectImage') {
- this.name = element[0].files[0].name;
- let reader = new FileReader();
- reader.onload = (e) => {
- let options = null;
- if (this.isJSON(this.options.Tag) && JSON.parse(this.options.Tag).options) {
- options = JSON.parse(this.options.Tag).options;
- }
- imageElement.cropper('destroy').attr('src', e.target.result).cropper(options);
- };
- reader.readAsDataURL(element[0].files[0]);
- if (this.TypeMode === 'file') {
- this.fileName = this.getFileName(element[0].files[0].name);
- }
- this.pageContainer.find('label.active').removeClass('active');
- this.pageContainer.find('input:checked').prop("checked", false);
- this.pageContainer.find('label.cpr-defaultActive').addClass('active');
- this.pageContainer.find('input.cpr-defaultCheck').prop("checked", true);
- rounded = false;
- }
- }
- }
- else {
- let method = element.attr('name');
- let value = element.attr('value');
- if (method === 'setAspectRatio' && value === 'rounded') {
- rounded = true;
- value = '1';
- $(".cropper-view-box,.cropper-face").css("border-radius", "50%");
- }
- else if (method === 'setAspectRatio') {
- rounded = false;
- $(".cropper-view-box,.cropper-face").css("border-radius", "0");
- }
- imageElement.cropper(method, value);
- }
- });
- this.pageContainer.find('div.cpr-cropper').on('dblclick', (e) => {
- let inputChecked = this.pageContainer.find('input[name="setDragMode"]:checked');
- let inputNotChecked = this.pageContainer.find('input[name="setDragMode"]:not(:checked)');
- let labelActive = this.pageContainer.find('label.cpr-setDragMode.active');
- let labelNotActive = this.pageContainer.find('label.cpr-setDragMode:not(.active)');
- labelActive.removeClass('active');
- inputChecked.prop("checked", false);
- labelNotActive.addClass('active');
- inputNotChecked.prop("checked", true);
- });
- this.pageContainer.on('dragover', (e) => {
- if (this.options.ObjectName != 'sysObjectImage') {
- e.preventDefault();
- e.stopPropagation();
- this.pageContainer.find('div.cpr-subcontainer').addClass('cpr-dragging');
- }
- });
- this.pageContainer.on('dragleave', (e) => {
- if (this.options.ObjectName != 'sysObjectImage') {
- e.preventDefault();
- e.stopPropagation();
- this.pageContainer.find('div.cpr-subcontainer').removeClass('cpr-dragging');
- }
- });
- this.pageContainer.on('drop', (e) => {
- if (this.options.ObjectName != 'sysObjectImage') {
- if (e.originalEvent.dataTransfer) {
- if (e.originalEvent.dataTransfer.files.length) {
- e.preventDefault();
- e.stopPropagation();
- let file = e.originalEvent.dataTransfer.files;
- let imageType = /image.*/;
- if (file[0].type.match(imageType)) {
- this.pageContainer.find('input[type="file"]').prop("files", file);
- if (e.originalEvent.dataTransfer.files.length !== 1) {
- flexygo.msg.warning('image.errorfilenumber');
- }
- else {
- this.pageContainer.find('input[type="file"]').trigger('change');
- }
- }
- else {
- flexygo.msg.error('image.errorfiletype');
- }
- }
- }
- this.pageContainer.find('div.cpr-subcontainer').removeClass('cpr-dragging');
- }
- });
- if (this.options.ClientReadOnly) {
- this.pageContainer.off().find('*').off();
- }
- this.pageContainer.find('img').on('error', (e) => {
- $(e.currentTarget).hide();
- });
- }
- getRoundedCanvas(sourceCanvas) {
- let canvas = document.createElement('canvas');
- let context = canvas.getContext('2d');
- let width = sourceCanvas.width;
- let height = sourceCanvas.height;
- canvas.width = width;
- canvas.height = height;
- context.beginPath();
- context.arc(width / 2, height / 2, Math.min(width, height) / 2, 0, 2 * Math.PI);
- context.strokeStyle = 'rgba(0,0,0,0)';
- context.stroke();
- context.clip();
- context.drawImage(sourceCanvas, 0, 0, width, height);
- return canvas;
- }
- getFileName(url) {
- if (url) {
- let index = url.lastIndexOf("\\") + 1;
- let filenameWithExtension = url.substr(index);
- let filename = filenameWithExtension.split(".")[0];
- return filename;
- }
- else {
- return url;
- }
- }
- getName(url, mode) {
- if (url) {
- let index = url.lastIndexOf("\\") + 1;
- let filenameWithExtension = url.substr(index);
- let filename;
- if (mode === 'file') {
- filename = filenameWithExtension;
- }
- else {
- filename = filenameWithExtension.split("?")[0];
- }
- return filename;
- }
- else {
- return url;
- }
- }
- isJSON(str) {
- if (typeof (str) !== 'string') {
- return false;
- }
- try {
- JSON.parse(str);
- return true;
- }
- catch (e) {
- return false;
- }
- }
- /**
- * Trigger Dependencies.
- * @method triggerDependencies
- */
- triggerDependencies() {
- let me;
- let input;
- me = $(this);
- input = me.find('input');
- input.trigger('change');
- }
- }
- wc.FlxImageElement = FlxImageElement;
- })(wc = ui.wc || (ui.wc = {}));
- })(ui = flexygo.ui || (flexygo.ui = {}));
- })(flexygo || (flexygo = {}));
- window.customElements.define('flx-image', flexygo.ui.wc.FlxImageElement);
- //# sourceMappingURL=flx-image.js.map
-