@progress/telerik-jquery-report-viewer
Version:
Progress® Telerik® Report Viewer for jQuery
393 lines (388 loc) • 12.2 kB
JavaScript
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;
;