UNPKG

@progress/telerik-jquery-report-viewer

Version:

Progress® Telerik® Report Viewer for jQuery

393 lines (388 loc) 12.2 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var stringResources = require('./stringResources.js'); var binder = require('./binder.js'); var command = require('./command.js'); var defaultOptions = {}; function replaceStringResources($sendEmailDialog) { if (!$sendEmailDialog) { return; } var labels = $sendEmailDialog.find(".trv-replace-string"); var ariaLabel = $sendEmailDialog.find("[aria-label]"); var titles = $sendEmailDialog.find("[title]"); if (labels.length) { Array.from(labels).forEach((element) => { replaceText($(element)); }); } if (ariaLabel.length) { Array.from(ariaLabel).forEach((element) => { replaceAttribute($(element), "aria-label"); }); } if (titles.length) { Array.from(titles).forEach((element) => { replaceAttribute($(element), "title"); }); } } function replaceText($el) { if ($el) { $el.text(stringResources.stringResources[$el.text()]); } } function replaceAttribute($el, attribute) { if ($el) { $el.attr(attribute, stringResources.stringResources[$el.attr(attribute)]); } } function SendEmail(placeholder, options, viewerOptions) { options = $.extend({}, defaultOptions, options); var controller = options.controller; var initialized = false; var dialogVisible = false; var $placeholder; var kendoSendEmailDialog; var selector = viewerOptions.viewerSelector; var inputFrom; var inputTo; var inputCC; var inputSubject; var docFormat; var docFormatEl; var bodyEditorEl; var bodyEditor; var docFormatList; var optionsCommandSet; var windowLocation; var reportViewerWrapper = $("[data-selector='" + selector + "']").find(".trv-report-viewer"); if (!controller) { throw "No controller (telerikReporting.ReportViewerController) has been specified."; } if (!viewerOptions.sendEmail || !viewerOptions.sendEmail.enabled) { var toolbarSendEmailItem = $("[data-selector='" + selector + "']").find("a[data-command='telerik_ReportViewer_toggleSendEmailDialog']").closest(".k-item "); toolbarSendEmailItem.hide(); return; } controller.beginLoadReport(closeAndClear).viewModeChanged(closeAndClear); controller.getSendEmailDialogState(function(event, args) { args.visible = dialogVisible; }).setSendEmailDialogVisible(function(event, args) { toggle(args.visible); }).setSearchDialogVisible(function(event, args) { if (args.visible && dialogVisible) { toggle(!dialogVisible); } }); controller.getDocumentFormats().then(function(formats) { docFormatList = formats; }); function closeAndClear() { toggle(false); } function toggle(show) { dialogVisible = show; if (show) { ensureInitialized(); setDefaultValues(viewerOptions.sendEmail); kendoSendEmailDialog.open(); } else { if (kendoSendEmailDialog && kendoSendEmailDialog.options.visible) { kendoSendEmailDialog.close(); } } } function getBody() { return bodyEditor ? bodyEditor.value() : ""; } function ensureInitialized() { if (!initialized) { $placeholder = $(placeholder); inputFrom = $placeholder.find("[name='from']"); inputTo = $placeholder.find("[name='to']"); inputCC = $placeholder.find("[name='cc']"); inputSubject = $placeholder.find("[name='subject']"); docFormatEl = $placeholder.find("[name='format']"); bodyEditorEl = $placeholder.find("textarea"); setAttrs(); initCommands(); replaceStringResources($placeholder); try { kendoSendEmailDialog = reportViewerWrapper.find(".trv-send-email-window").kendoWindow({ title: stringResources.stringResources.sendEmailDialogTitle, minWidth: 350, minHeight: 350, maxHeight: 900, modal: true, close: function() { storeDialogPosition(); clearValidation(); }, open: function() { adjustDialogSize(); adjustDialogPosition(); }, deactivate: function() { controller.setSendEmailDialogVisible({ visible: false }); }, activate: function() { kendoSendEmailDialog.wrapper.find(".trv-send-email-fields input[type='email']:visible").first().focus(); setTimeout(function() { setValidation(); }, 250); } }).data("kendoWindow"); } catch (error) { console.error("Instantiation of Kendo Window for Send Email dialog threw an exception", error); throw error; } kendoSendEmailDialog.wrapper.addClass("trv-send-email"); try { docFormat = docFormatEl.kendoComboBox({ dataTextField: "localizedName", dataValueField: "name", dataSource: docFormatList || [], filter: "startswith", dataBound: function() { this.select(0); this.trigger("change"); } }).data("kendoComboBox"); } catch (error) { console.error("Instantiation of Kendo ComboBox as document format selector threw an exception", error); throw error; } $placeholder.on("keydown", '[name="format_input"]', function(event) { var tabkey = 9; if (event.keyCode === tabkey && bodyEditor) { setTimeout(function() { bodyEditor.focus(); }); } }); try { bodyEditor = bodyEditorEl.kendoEditor({ tools: [ "bold", "italic", "underline", "strikethrough", "justifyLeft", "justifyCenter", "justifyRight", "justifyFull", "insertUnorderedList", "insertOrderedList", "indent", "outdent", "createLink", "unlink", "cleanFormatting", "formatting", "fontName", "fontSize", "foreColor", "backColor", "subscript", "superscript" ] }).data("kendoEditor"); } catch (error) { console.error("Instantiation of Kendo Editor for Email body editor threw an exception", error); throw error; } setDefaultValues(viewerOptions.sendEmail); initialized = true; } } $(window).resize(function() { if (kendoSendEmailDialog && kendoSendEmailDialog.options.visible) { storeDialogPosition(); adjustDialogSize(); adjustDialogPosition(); } }); function setAttrs() { $placeholder.find(".trv-send-email-field input").each(function() { var el = $(this); var attrName = el.attr("name"); el.attr("id", selector + "-" + attrName); }); $placeholder.find(".trv-send-email-label label").each(function() { var el = $(this); var attrName = el.attr("for"); el.attr("for", selector + "-" + attrName); }); } function storeDialogPosition() { var kendoWindow = kendoSendEmailDialog.element.parent(".k-window"); windowLocation = kendoWindow.offset(); } function adjustDialogSize() { var kendoWindow = kendoSendEmailDialog.element.parent(".k-window"); var windowWidth = $(window).width(); var kendoWindowWidth = 350; if (windowWidth > 800) { kendoWindowWidth = 720; } kendoWindow.css({ width: kendoWindowWidth }); kendoSendEmailDialog.refresh({ width: kendoWindowWidth }); } function adjustDialogPosition() { if (!windowLocation) { kendoSendEmailDialog.center(); } else { var padding = 10; var windowWidth = $(window).innerWidth(); var windowHeight = $(window).innerHeight(); var kendoWindow = kendoSendEmailDialog.wrapper; var width = kendoWindow.outerWidth(true); var height = kendoWindow.outerHeight(true); var left = windowLocation.left; var top = windowLocation.top; var right = left + width; var bottom = top + height; if (right > windowWidth - padding) { left = Math.max(padding, windowWidth - width - padding); kendoWindow.css({ left }); kendoSendEmailDialog.setOptions({ position: { left } }); } if (bottom > windowHeight - padding) { top = Math.max(padding, windowHeight - height - padding); kendoWindow.css({ top }); kendoSendEmailDialog.setOptions({ position: { top } }); } } } function initCommands() { optionsCommandSet = { "sendEmail_Cancel": new command.Command(function() { closeWindow(); }), "sendEmail_Send": new command.Command(function() { sendingEmail(); }) }; binder.Binder.attachCommands($placeholder.find(".trv-send-email-actions"), optionsCommandSet, viewerOptions); } function sendingEmail(cmd, args) { var sendEmailArgs = { from: inputFrom.val(), to: inputTo.val(), cc: inputCC.val(), subject: inputSubject.val(), format: docFormat.value(), body: getBody(), deviceInfo: {} }; if (validateFields()) { controller.sendReport(sendEmailArgs); closeWindow(); } } function setValidation() { inputFrom.off("blur").on("blur", function(event) { if (!isEmpty($(this))) { isValidEmail($(this), false); } }); inputTo.off("blur").on("blur", function(event) { if (!isEmpty($(this))) { isValidEmail($(this), true); } }); inputCC.off("blur").on("blur", function(event) { if ($(this).val().length) { isValidEmail($(this), true); } else { hideError($(this)); } }); } function validateFields() { var fromIsValid = isEmpty(inputFrom) || !isValidEmail(inputFrom, false); var toIsValid = isEmpty(inputTo) || !isValidEmail(inputTo, true); var ccIsValid = inputCC.val().length && !isValidEmail(inputCC, true); var hasFormat = docFormat.value().length; if (!hasFormat) { showError(docFormatEl, "data-required-msg"); } if (fromIsValid || toIsValid || ccIsValid || !hasFormat) { return false; } return true; } function setDefaultValues(sendEmail) { inputFrom.val(sendEmail && sendEmail.from || ""); inputTo.val(sendEmail && sendEmail.to || ""); inputCC.val(sendEmail && sendEmail.cc || ""); inputSubject.val(sendEmail && sendEmail.subject || ""); if (sendEmail && sendEmail.format) { docFormat.value(sendEmail.format); } else { docFormat.select(0); } docFormat.trigger("change"); bodyEditor.value(sendEmail && sendEmail.body || ""); } function isEmpty($el) { if (!$el.val().length) { showError($el, "data-required-msg"); return true; } hideError($el); return false; } function showError($el, tag) { var validationMsg = stringResources.stringResources[$el.attr(tag)]; $('[data-for="' + $el.attr("name") + '"]').addClass("-visible").text(validationMsg); } function hideError($el) { $('[data-for="' + $el.attr("name") + '"]').removeClass("-visible"); } function isValidEmail($el, moreThenOneEmail) { var inputValue = $el.val(); if (moreThenOneEmail) { var listEmailsAddress = inputValue.split(/[\s,;]+/); for (var i = 0; i < listEmailsAddress.length; i++) { if (!_validateEmail(listEmailsAddress[i].trim(), $el)) { return false; } } return true; } return _validateEmail(inputValue, $el); } function _validateEmail(email, $el) { var regexEmail = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/; if (email.indexOf(",") > -1 || email.indexOf(";") > -1) { showError($el, "data-single-email-msg"); return false; } if (!regexEmail.test(email)) { showError($el, "data-email-msg"); return false; } return true; } function closeWindow() { kendoSendEmailDialog.close(); } function clearValidation() { $(".k-invalid-msg").removeClass("-visible"); } } exports.SendEmail = SendEmail;