!function(window) {
function ActionItemsResolver() {
function isArDrillthroughLink(link) {
return null !== link && void 0 !== link && (link.match("javascript") && link.match(".goToReport"));
}
function getElementData(element, attributeName) {
var data = element.attr(attributeName);
return null === data || void 0 === data || 0 === data.length ? null : data;
}
function resolveBookmarkInfo(data) {
function extractByKey(array, key, separator) {
for (var i = 0; i < array.length; i++) {
var elem = array[i], preffix = elem.substring(0, key.length);
if (preffix.toUpperCase() === key.toUpperCase()) return elem.substring(key.length + separator.length, elem.length);
}
return null;
}
if (null === data || void 0 === data) return null;
var bookmarkInfo = data.split(","), pageNumberValue = extractByKey(bookmarkInfo, "PageNumber", "=");
if (null === pageNumberValue) return null;
pageNumberValue = parseInt(pageNumberValue, 10);
var targetValue = extractByKey(bookmarkInfo, "Target", "=");
return null === targetValue ? null : {
PageNumber: pageNumberValue,
Target: targetValue
};
}
function resolveToggleInfo(data) {
var parsedData;
try {
parsedData = $.parseJSON(data);
} catch (ex) {
return null;
}
return null === parsedData || void 0 === parsedData ? null : parsedData;
}
function resolvePageReportElementAction(element) {
var dataValue = getElementData(element, "data"), hrefValue = getElementData(element, "href");
if (null === dataValue && null === hrefValue) return null;
null !== dataValue && (dataValue = htmlDecode(dataValue));
var hyperlinkUrl = null !== dataValue ? dataValue : null;
null === hyperlinkUrl && null !== hrefValue && (hyperlinkUrl = htmlDecode(hrefValue));
var bookmarkInfo = resolveBookmarkInfo(dataValue);
if (null === bookmarkInfo && (bookmarkInfo = resolveBookmarkInfo(hrefValue)), null !== bookmarkInfo) return {
actionType: ActionType.bookmark,
reportType: ReportType.pageReport,
element: element,
pageNumber: bookmarkInfo.PageNumber,
target: bookmarkInfo.Target
};
if (element.is("[class$=toggle]")) {
var toggleInfo = resolveToggleInfo(dataValue);
if (null !== toggleInfo) return {
actionType: ActionType.toggle,
reportType: ReportType.pageReport,
element: element,
toggleInfo: toggleInfo
};
}
var isArDrillthrough = isArDrillthroughLink(hyperlinkUrl);
return element.is("[class$=drillthrough]") || isArDrillthrough ? {
actionType: ActionType.drillthrough,
reportType: ReportType.pageReport,
element: element,
drillthroughLink: hyperlinkUrl
} : null !== hyperlinkUrl ? {
actionType: ActionType.hyperlink,
reportType: ReportType.pageReport,
element: element,
url: hyperlinkUrl
} : null;
}
function htmlDecode(value) {
if (value) {
var textArea = document.createElement("textarea");
textArea.innerHTML = value;
var decodedString = textArea.value;
return "remove" in Element.prototype && textArea.remove(), decodedString;
}
return null;
}
function resolveFromPageReportContent(content) {
return $(content).find("a").map(function(index, item) {
return resolvePageReportElementAction($(item));
}).filter(function(item) {
return null !== item;
}).get().concat($(content).find("map > area").map(function(index, item) {
return resolvePageReportElementAction($(item));
}).filter(function(item) {
return null !== item;
}).get()).concat($(content).find("span").map(function(index, item) {
return resolvePageReportElementAction($(item));
}).filter(function(item) {
return null !== item;
}).get());
}
function resolveFromSectionReportContent(content) {
return $(content).find("a").map(function(index, item) {
var element = $(item), url = getElementData(element, "href");
if (null === url) return !0;
var sectionBookmarkLabel = /^toc?:\/\/(.*)/i.exec(decodeURI(url));
return null !== sectionBookmarkLabel ? {
actionType: ActionType.bookmark,
reportType: ReportType.sectionReport,
element: element,
label: sectionBookmarkLabel[1]
} : {
actionType: ActionType.hyperlink,
reportType: ReportType.sectionReport,
element: element,
url: url
};
}).filter(function(item) {
return null !== item;
}).get();
}
function resolve(content, reportType) {
switch (reportType) {
case ReportType.pageReport:
return resolveFromPageReportContent(content);
case ReportType.sectionReport:
return resolveFromSectionReportContent(content);
default:
return [];
}
}
var resolver = {
resolve: resolve
};
return resolver;
}
function parseParameterValue(value, type) {
if (null === value) return null;
if (type == ServiceParameterType.DateTime) {
var millis = (+value - ticksOffsetFromUnixEpoch) / ticksInMillisecond, millisUtc = millis + new Date(millis).getTimezoneOffset() * millisecondsInMinute;
return new Date(millisUtc);
}
return value;
}
function ar_convertServiceParameters(parameters) {
function convertValues(values, type) {
return (values || []).map(function(v) {
return {
label: v.Label,
value: parseParameterValue(v.Value, type),
index: v.Index
};
});
}
function resolveEditor(p) {
return p.MultiLine && p.ParameterType == ServiceParameterType.String ? ParameterEditorType.MultiLine : p.AvailableValues && p.AvailableValues.length > 0 ? p.MultiValue ? ParameterEditorType.MultiValue : ParameterEditorType.SelectOneFromMany : ParameterEditorType.SingleValue;
}
var ServiceParameterState = {
Ok: 0,
ExpectValue: 1,
HasOutstandingDependencies: 2,
ValidationFailed: 3,
DynamicValuesUnavailable: 4
};
return parameters.map(function(p) {
var selectAllEnabled = !!p.MultiValue && (p.AvailableValues || []).length > 1, value = selectAllEnabled && p.SelectAll ? ParameterSpecialValue.SelectAll : parseParameterValue(p.Value, p.ParameterType), values = selectAllEnabled && p.SelectAll ? [ ParameterSpecialValue.SelectAll ] : convertValues(p.Values, p.ParameterType);
return {
name: p.Name,
value: value,
values: values,
availableValues: convertValues(p.AvailableValues, p.ParameterType),
prompt: p.Prompt || p.Name,
nullable: !!p.Nullable,
multiline: !!p.MultiLine,
multivalue: !!p.MultiValue,
selectAllEnabled: selectAllEnabled,
allowEmpty: !!p.AllowEmpty,
dateOnly: !!p.DateOnly,
type: function(value) {
switch (value) {
case ServiceParameterType.DateTime:
return ParameterType.DateTime;
case ServiceParameterType.Bool:
return ParameterType.Bool;
case ServiceParameterType.Int:
return ParameterType.Int;
case ServiceParameterType.Float:
return ParameterType.Float;
default:
return ParameterType.String;
}
}(p.ParameterType),
state: function(value) {
switch (value) {
case ServiceParameterState.ExpectValue:
return ParameterState.ExpectValue;
case ServiceParameterState.HasOutstandingDependencies:
return ParameterState.HasOutstandingDependencies;
case ServiceParameterState.ValidationFailed:
return ParameterState.ValidationFailed;
case ServiceParameterState.DynamicValuesUnavailable:
return ParameterState.DynamicValuesUnavailable;
default:
return ParameterState.Ok;
}
}(p.State),
error: p.ExtendedErrorInfo || "",
editor: resolveEditor(p),
dependantParameterNames: (p.DependantParameters || []).map(function(dependant) {
return dependant.Name;
})
};
});
}
function ar_convertClientParameters(parameters) {
return parameters.map(ar_convertClientParameter);
}
function ar_convertClientParameter(p) {
function serialize(value, type) {
if (value && value.getMonth) {
var millisLocal = value.getTime() - value.getTimezoneOffset() * millisecondsInMinute;
return millisLocal * ticksInMillisecond + ticksOffsetFromUnixEpoch;
}
return value;
}
function convertValues(values) {
return (values || []).map(function(v) {
return {
Label: v.label || "",
Value: serialize(v.hasOwnProperty("value") ? v.value : v),
Index: v.index
};
});
}
return p.multivalue ? {
MultiValue: !0,
Name: p.name,
Values: convertValues(p.values),
SelectAll: p.value === ParameterSpecialValue.SelectAll || p.values.length > 0 && p.values[0].value === ParameterSpecialValue.SelectAll || void 0
} : {
Name: p.name,
Value: serialize(p.value)
};
}
function ArReportService(options, resourceManager) {
function isUndefined(value) {
return void 0 === value || null === value;
}
function productVersion() {
return "12.1.12841.2";
}
function open(reportId, parameters) {
return $base.post("OpenReport", {
version: 4,
culture: "en_US",
reportPath: reportId,
acceptedFormats: useSvg ? [ formats.Svg, formats.Html ] : [ formats.Html ],
lifeTime: 600
}).then(function(d) {
if (isUndefined(d.Token)) return $base.invalidResponse(d);
if (d.ProductVersion > productVersion()) return $base.errorPromise(SR("error.JsVersionsMismatch"));
var reportInfo = {
token: d.Token,
parameters: ar_convertServiceParameters(d.ParameterCollection || []),
reportType: getReportType(d.DocumentFormat),
autoRun: d.AutoRun
};
if (reportInfo.isChangeRenderModeSupported = options.isChangeRenderModeSupported || getReportProperty(reportInfo.token, "ChangeRenderModeSupported"),
parameters && parameters.length) {
var def = $.Deferred();
return parameters = mergeParameters(reportInfo.parameters, parameters), validateParameters(reportInfo.token, parameters).done(function(params) {
def.resolve($.extend(reportInfo, {
parameters: params
}));
}).fail(function() {
def.resolve(reportInfo);
}), def.promise();
}
return reportInfo;
});
}
function openDrillthroughReport(token, reportId) {
return $base.post("OpenDrillthroughReport", {
token: token,
reportPath: reportId,
lifeTime: 3600
}).then(function(d) {
return isUndefined(d.Token) ? $base.invalidResponse(d) : {
token: d.Token,
parameters: ar_convertServiceParameters(d.ParameterCollection || []),
reportType: getReportType(reportId),
autoRun: d.AutoRun,
isChangeRenderModeSupported: options.isChangeRenderModeSupported || getReportProperty(d.Token, "ChangeRenderModeSupported")
};
});
}
function ping(reportToken) {
return $base.post("GetStatus", {
token: reportToken
}).then(function(d) {
var state = d.LoadState;
if (isUndefined(state) || isUndefined(d.AvailablePages)) return $base.promise(!1);
switch (state) {
case loadStates.Error:
case loadStates.Cancelled:
case loadStates.Cancelling:
return $base.promise(!1);
}
return $base.promise(!0);
});
}
function getReportType(docFormat) {
if (null === docFormat || void 0 === docFormat) return ReportType.unknown;
switch (docFormat) {
case documentFormat.rpx:
case documentFormat.rdf:
return ReportType.sectionReport;
case documentFormat.rdlx:
return ReportType.pageReport;
default:
return ReportType.unknown;
}
}
function close(reportToken, async) {
return $base.post("CloseReport", {
token: reportToken
}, !1, async).then(function() {
return !0;
});
}
function validateParameters(reportToken, parameters) {
return $base.post("SetParameters", {
token: reportToken,
parametersSetAtClient: ar_convertClientParameters(parameters)
}, !0).then(function(d) {
var failedParams = ar_convertServiceParameters(d.ParameterCollection || []);
return parameters.map(function(p) {
var f = failedParams.filter(function(fp) {
return fp.name == p.name;
});
return 1 == f.length ? f[0] : (p.state = ParameterState.Ok, p.error = "", p);
});
});
}
function validateParameter(reportToken, parameter) {
return $base.post("ValidateParameter", {
token: reportToken,
surrogate: ar_convertClientParameter(parameter)
}).then(function(d) {
return ar_convertServiceParameters(d.ParameterCollection || []);
});
}
function areValidParameters(parameters) {
return parameters.every(function(p) {
return p.state == ParameterState.Ok;
});
}
function run(reportToken, param, settings) {
return runImpl(reportToken, param, settings);
}
function runImpl(reportToken, param, settings) {
return null === settings || "undefined" == typeof settings ? $base.post("RunReport", {
token: reportToken
}).then(function() {
return pollStatus(reportToken);
}).then(function() {
return getDocumentUrl(reportToken);
}) : $base.post("RunReportEx", {
token: reportToken,
settings: JSON.stringify(settings)
}).then(function() {
return pollStatus(reportToken);
}).then(function() {
return getDocumentUrl(reportToken);
});
}
function cancelRendering(doctoken) {
var reportToken = resolveReportToken(doctoken);
if (reportToken) return $base.post("CancelRendering", {
token: reportToken
}).then(function() {
return !0;
});
throw new Error("ReportToken is not valid!");
}
function pollStatus(reportToken, returnPagesCount) {
return $base.delay(getStatus.bind(service, reportToken), pollingTimeout).then(function(status) {
return returnPagesCount && status.pageCount > 0 ? status.pageCount : status.pageCount > 0 || pollStatus(reportToken);
});
}
function getStatus(reportToken) {
return $base.post("GetStatus", {
token: reportToken
}).then(function(d) {
var state = d.LoadState;
if (isUndefined(state) || isUndefined(d.AvailablePages)) return $base.errorPromise(SR("error.InvalidResponse"));
switch (state) {
case loadStates.Error:
return $base.errorPromise(SR("error.RequestFailed"));
}
return {
state: state,
pageCount: d.AvailablePages
};
});
}
function getReportProperty(reportToken, propertyName) {
return $base.post("GetReportProperty", {
token: reportToken,
propertyName: propertyName
}).then(function(d) {
return d.Error ? null : d.PropertyValue;
});
}
function getPageCount(doctoken) {
function getPageCountImpl() {
getStatus(reportToken).done(function(status) {
status.state == loadStates.Completed || status.state == loadStates.Cancelled ? def.resolve(status.pageCount, status.state == loadStates.Completed ? DocumentState.completed : DocumentState.cancelled) : (def.notify(status.pageCount),
setTimeout(getPageCountImpl, pollingTimeout));
}).fail(function(problem) {
def.reject(problem);
});
}
var reportToken = resolveReportToken(doctoken);
if (!reportToken) return $base.invalidArg("doctoken", doctoken);
var def = $.Deferred();
return getPageCountImpl(), def.promise();
}
function getXmlAsString(xmlDom) {
return "undefined" != typeof XMLSerializer ? new window.XMLSerializer().serializeToString(xmlDom) : xmlDom.xml;
}
function getPage(doctoken, index) {
if (!resolveReportToken(doctoken)) return $base.invalidArg("doctoken", doctoken);
var urlTemplate = "{0}&Page={1}&ie=" + $.now(), pageUrl = urlTemplate.format(doctoken, index + 1), result = $.Deferred();
return $base.get(pageUrl).done(function(data, status, xhr) {
$.isXMLDoc(data) && (data = getXmlAsString(data)), result.resolve(data, status, xhr);
}).fail(result.reject), result.promise();
}
function getDocumentUrl(reportToken) {
return $base.post("GetRenderedReportLink", {
token: reportToken
}).then(function(d) {
var link = d.ReportLink;
if (isUndefined(link) || isUndefined(link.Uri)) return $base.invalidResponse(d);
var url = link.Uri;
return url || resolveReportToken(url) ? url + "&WebViewerControlClientId=html5viewer&HtmlViewer=true" : $base.invalidResponse(d);
});
}
function getToc(doctoken) {
var reportToken = resolveReportToken(doctoken);
return reportToken ? loadBookmarks(reportToken, -1).then(function(bookmarks) {
return {
name: "$root",
kids: bookmarks
};
}) : $base.invalidArg("doctoken", doctoken);
}
function getBookmarks(token, parent, fromChild, count) {
return $base.post("GetBookmarks", {
token: token,
parentId: parent,
fromChild: fromChild,
count: count
}).then(function(d) {
var bookmarks = (d.Bookmarks || []).map(function(b) {
var id = b.ID || 0, childCount = b.ChildrenCount || 0, location = b.Location || {
X: 0,
Y: 0
}, kids = [];
return childCount > 0 && (kids = function() {
return loadBookmarks(token, id);
}), {
name: b.Name || "",
page: b.Page || 0,
location: {
left: location.X,
top: location.Y
},
isLeaf: 0 === childCount,
kids: kids
};
});
return bookmarks.childCount = d.ChildrenCount || 0, bookmarks;
});
}
function loadBookmarks(token, parent) {
return loadBookmarksImpl(token, parent, 0).then(function(bookmarks) {
return delete bookmarks.childCount, bookmarks;
});
}
function toggle(token, toggleInfo, settings) {
return $base.post("ProcessOnClick", {
token: token,
data: toggleInfo
}).then(function(result) {
return pollStatus(token, !0);
}).then(function(pagesCount) {
return getDocumentUrl(token).then(function(url) {
var info = {
url: url,
pagesCount: pagesCount
};
return info;
});
});
}
function loadBookmarksImpl(token, parent, fromChild) {
return getBookmarks(token, parent, fromChild, 100).then(function(kids) {
var loadCount = fromChild + kids.length;
return loadCount >= kids.childCount || loadCount >= maxBookmarksCount ? kids : loadBookmarksImpl(token, parent, loadCount).then(function(next) {
return kids.concat(next);
});
});
}
function resolveReportToken(url) {
return getQueryParameter(url, "token");
}
function getExportUri(doctoken, exportType, settings) {
var reportToken = resolveReportToken(doctoken);
return reportToken ? $base.post("GetExportedReportLink", {
token: reportToken,
format: exportType,
exportingParameters: settings,
pageRange: null
}).then(function(d) {
var link = d.ReportLink;
if (isUndefined(link) || isUndefined(link.Uri)) return $base.invalidResponse(d);
var url = link.Uri;
return url || resolveReportToken(url) ? url : $base.invalidResponse(d);
}) : $base.invalidArg("doctoken", doctoken);
}
function translateSettings(settings, exportType) {
var newSettings = {};
return Object.keys(settings || {}).forEach(function(key) {
var val = settings[key];
switch (key) {
case "printing":
val && (exportType == ExportType.Pdf ? newSettings.PrintOnOpen = !0 : exportType == ExportType.Html && (newSettings.WebViewer = !0,
newSettings.Printing = !0));
break;
default:
newSettings[key] = val;
}
}), newSettings;
}
function exportImpl(doctoken, exportType, settings) {
return getPageCount(doctoken).then(function(pc) {
if (pc <= 0) throw new Error("document cannot be exported");
return getExportUri(doctoken, exportType, translateSettings(settings, exportType));
});
}
function search(token, searchOptions) {
var maxSearchResults = searchOptions.maxSearchResults || options.maxSearchResults || defaultMaxSearchResults, reportToken = resolveReportToken(token);
return reportToken ? $base.post("Search", {
token: reportToken,
options: {
Text: searchOptions.text,
MatchCase: searchOptions.matchCase,
WholeWord: searchOptions.wholePhrase,
SearchBackward: !1
},
startFrom: searchOptions.from ? {
ItemIndex: searchOptions.from.idx,
TextLen: 1,
PageIndex: searchOptions.from.page
} : {
PageIndex: -1
},
numberOfResults: maxSearchResults
}).then(function(d) {
var dpi = getDpi();
return {
hasMore: d.SearchResults.length == maxSearchResults,
matches: d.SearchResults.map(function(sr) {
return {
idx: sr.ItemIndex,
text: sr.DisplayText,
page: sr.PageIndex,
location: {
left: sr.ItemArea.X * dpi,
top: sr.ItemArea.Y * dpi,
width: sr.ItemArea.Width * dpi,
height: sr.ItemArea.Height * dpi
}
};
})
};
}) : $base.invalidArg("token", token);
}
function drillthrough(token, link, settings) {
var drillInfo = parseDrillthroughLink(link);
return drillInfo && drillInfo.reportName ? openDrillthrough(token, drillInfo.reportName, drillInfo.parameters, settings) : $base.errorPromise(SR("error.InvalidDrillthroughLink").format(link));
}
function openDrillthrough(token, reportPath, parameters, settings) {
return openDrillthroughReport(token, reportPath).then(function(r) {
function run() {
return runImpl(r.token, null, settings).then(function(documentToken) {
return {
reportToken: r.token,
parameters: params,
documentToken: documentToken,
isChangeRenderModeSupported: options.isChangeRenderModeSupported || getReportProperty(r.token, "ChangeRenderModeSupported")
};
});
}
function findAndUpdateValue(parameter, clientParams) {
var cp = clientParams.filter(function(x) {
return x.name == parameter.name;
});
return updateValue(parameter, cp[0]);
}
function resolveDependencies(dependencies) {
return $.Deferred(function(deferred) {
if (dependencies.length > 0) {
var dependecy = dependencies.pop();
validateParameter(r.token, dependecy).then(function(updated) {
return params = params.map(function(p) {
var f = updated.filter(function(u) {
return u.name == p.name;
});
return 1 == f.length ? findAndUpdateValue(f[0], parameters) : p;
}), resolveDependencies(dependencies);
}).done(deferred.resolve).fail(deferred.reject);
} else deferred.resolve();
}).promise();
}
function resolveDependantParameters() {
return $.Deferred(function(deferred) {
var dependantParameters = params.filter(function(p) {
return p.state == ParameterState.HasOutstandingDependencies;
});
if (dependantParameters.length > 0) {
var dependant = dependantParameters[0], dependencies = params.filter(function(p) {
return p.dependantParameterNames && p.dependantParameterNames.indexOf(dependant.name) != -1;
});
dependencies.length > 0 ? resolveDependencies(dependencies).then(resolveDependantParameters).done(deferred.resolve).fail(deferred.reject) : deferred.reject();
} else deferred.resolve();
}).promise();
}
var params = mergeParameters(r.parameters, parameters);
return params && params.length > 0 ? resolveDependantParameters().then(function() {
return validateParameters(r.token, params);
}).then(function(p) {
return areValidParameters(p) && r.autoRun ? run() : {
reportToken: r.token,
parameters: params,
isChangeRenderModeSupported: options.isChangeRenderModeSupported || getReportProperty(r.token, "ChangeRenderModeSupported")
};
}) : run();
});
}
function updateValue(parameter, clientParameter) {
function convertValue(value, type) {
if (type == ParameterType.DateTime) {
if ("" === value) return null;
if (!Date.isDate(value)) {
var d = new Date();
return d.setTime(Date.parse(value)), isNaN(d) && (d = parseParameterValue(value, ServiceParameterType.DateTime)),
d;
}
return value;
}
return value;
}
function findParameterByValue(valuetosearch) {
for (var i = 0; i < parameter.availableValues.length; i++) if (parameter.availableValues[i].value == valuetosearch) return parameter.availableValues[i];
return null;
}
if (void 0 === clientParameter || null === clientParameter) return parameter;
if (parameter.multivalue) if (clientParameter.values) parameter.values = clientParameter.values; else {
if (parameter.values.length > 0 && (parameter.values = []), !Array.isArray(clientParameter.value)) {
var t = clientParameter.value;
clientParameter.value = [], clientParameter.value.push(t);
}
clientParameter.value.map(function(p) {
var param = findParameterByValue(p);
param || (param = convertValue(p, parameter.type)), parameter.values.push(param);
});
} else parameter.value = convertValue(clientParameter.value, parameter.type);
return parameter;
}
function mergeParameters(reportParams, clientParams) {
var names = [], merged = reportParams.map(function(p) {
names.push(p.name);
var cp = clientParams.filter(function(clientParameter) {
return p.name == clientParameter.name;
});
return 0 === cp.length ? p : updateValue(p, cp[0]);
});
return merged.push.apply(merged, clientParams.filter(function(p) {
return -1 == names.indexOf(p.name);
}).map(function(p) {
return void 0 === p.promptUser && (p.promptUser = !1), p;
})), merged;
}
function parseDrillthroughLink(link) {
function GetViewModel(id) {
return reportName = id, {
goToReport: function(reportName, pp) {
xreportName = reportName;
for (var i in pp) params.push({
name: i,
value: pp[i]
});
}
};
}
var xreportName = "", params = [];
try {
var re = new RegExp(""", "g");
link = link.replace(re, '"'), eval(link);
} catch (e) {
return null;
}
return {
reportName: xreportName,
parameters: params
};
}
if (!options.url) throw new Error("options has no valid url");
var defaultMaxSearchResults = 50, pagesPollingTimeout = 1e3, pollingTimeout = options.pollingTimeout || pagesPollingTimeout, serviceUrl = options.url;
serviceUrl.endsWith("/") || (serviceUrl += "/");
var SR = resourceManager && $.isFunction(resourceManager.get) ? resourceManager.get : identity, formats = {
Rdf: 0,
Ddf: 1,
Xaml: 2,
Image: 3,
Pdf: 4,
Html: 5,
Word: 6,
Xls: 7,
Xml: 8,
Svg: 9,
Csv: 10
}, loadStates = {
NotStarted: 0,
InProgress: 1,
Completed: 2,
Cancelling: 3,
Cancelled: 4,
Error: 5
}, documentFormat = {
rpx: 0,
rdf: 1,
rdlx: 2
}, service = {
open: open,
close: close,
toggle: toggle,
run: run,
cancelRendering: cancelRendering,
validateParameters: validateParameters,
validateParameter: validateParameter,
validateParameterSupported: function() {
return !0;
},
getPageCount: getPageCount,
getPage: getPage,
getToc: getToc,
export: exportImpl,
search: search,
drillthrough: drillthrough,
ping: ping,
canSendEmail: function() {
return !1;
},
getState: function() {
return null;
},
setState: function(newState) {}
}, $base = WebServiceBase(service, serviceUrl), useSvg = options.renderer && options.renderer == Renderer.SVG, maxBookmarksCount = 1e5;
return service;
}
function ars_convertClientParameters(parameters) {
function convertValue(value) {
return Date.isDate(value) ? Date.format(value, "MM/dd/yyyy HH:mm:ss") : value;
}
var paramDomain = {
specifiedValues: 0,
selectAll: 1,
acceptingDynamicValues: 2
};
return (parameters || []).map(function(p) {
if (p.multivalue) {
var values = p.values.map(function(pv) {
return convertValue(pv.hasOwnProperty("value") ? pv.value : pv);
}).filter(function(v) {
return null !== v && void 0 !== v;
});
return values = values.map(function(v) {
return v === ParameterSpecialValue.Empty ? null : v;
}), 1 == values.length && values[0] == ParameterSpecialValue.SelectAll ? {
Name: p.name,
Domain: paramDomain.selectAll,
Values: []
} : {
Name: p.name,
Domain: paramDomain.specifiedValues,
Values: values
};
}
var values2 = [ convertValue(p.value) ].filter(function(v) {
return null !== v && void 0 !== v;
});
return values2 = values2.map(function(v) {
return v === ParameterSpecialValue.Empty ? null : v;
}), {
Name: p.name,
Domain: paramDomain.specifiedValues,
Values: values2
};
});
}
function arsParametersParser(resourceManager, isSemantic) {
function convertDataType(value) {
var map = {
string: ParameterType.String,
boolean: ParameterType.Bool,
bool: ParameterType.Bool,
datetime: ParameterType.DateTime,
integer: ParameterType.Int,
int: ParameterType.Int,
float: ParameterType.Float
};
return map[(value || "").toLowerCase()] || ParameterType.String;
}
function convertState(value) {
var map = {
hasvalidvalue: ParameterState.Ok,
missingvalidvalue: ParameterState.ExpectValue,
hasoutstandingdependencies: ParameterState.HasOutstandingDependencies,
dynamicvaluesunavailable: ParameterState.DynamicValuesUnavailable
};
return map[(value || "").toLowerCase()] || ParameterState.Ok;
}
function parseValue(value, type) {
if (null === value) return null;
switch (type) {
case ParameterType.Bool:
return isBoolean(value) ? Boolean.parse(value) : null;
case ParameterType.Int:
case ParameterType.Float:
return "" === value ? null : +value;
case ParameterType.DateTime:
if ("" === value) return null;
if (!Date.isDate(value)) {
var d = new Date();
return d.setTime(Date.parse(value)), d;
}
return value;
}
return value;
}
function isBoolean(value) {
return "true" == value.toLowerCase() || "false" == value.toLowerCase();
}
function parseSpecialValue(value, parameter) {
var valueToLower = value.toLowerCase();
return {
label: function() {
return "blank" === valueToLower || "empty" === valueToLower || "selectall" === valueToLower || "selectallcustom" === valueToLower ? resourceManager.get(valueToLower) : value;
}(),
value: function() {
switch (valueToLower) {
case "blank":
return parameter.type == ParameterType.String ? "" : null;
case "empty":
return isSemantic ? ParameterSpecialValue.Empty : null;
case "null":
return null;
case "unspecified":
return parameter.nullable ? null : void 0;
case "selectall":
case "selectallcustom":
return ParameterSpecialValue.SelectAll;
default:
return value;
}
}()
};
}
function resolveEditor(p) {
return p.multiline && p.type == ParameterType.String ? ParameterEditorType.MultiLine : p.multivalue ? ParameterEditorType.MultiValue : p.definesValidValues && p.availableValues.length > 0 ? ParameterEditorType.SelectOneFromMany : ParameterEditorType.SingleValue;
}
function ars_parseParametersXml(xml) {
function parseValuesElement(e, parameter) {
return $(e).children().map(function() {
var $this = $(this), stringValue = $this.text(), attrs = $this.attrs(), isSpecial = Boolean.parse(attrs.isspecial);
return isSpecial ? parseSpecialValue(stringValue, parameter) : {
label: attrs.label || stringValue,
value: parseValue(stringValue, parameter.type)
};
}).get();
}
function isDateOnlyDateDomain(dateDomain) {
return "Day" == dateDomain || "Month" == dateDomain || "MonthFixedYear" == dateDomain || "Year" == dateDomain;
}
return $(xml).find("Parameter").map(function() {
var $this = $(this), attrs = $this.attrs(), multivalue = Boolean.parse(attrs.multivalue), parameter = {
name: attrs.name || "",
type: convertDataType(attrs.datatype),
hidden: Boolean.parse(attrs.hidden),
multivalue: multivalue,
multiline: Boolean.parse(attrs.multiline || "false"),
allowEmpty: Boolean.parse(attrs.allowblank),
dateOnly: isDateOnlyDateDomain(attrs.datedomain),
nullable: Boolean.parse(attrs.nullable) && !multivalue,
prompt: attrs.prompt || attrs.name || "",
state: convertState(attrs.state),
promptUser: Boolean.parse(attrs.promptuser),
definesValidValues: Boolean.parse(attrs.definesvalidvalues),
selectAllEnabled: Boolean.parse(attrs.selectallenabled),
dateDomain: attrs.datedomain || "",
hasDependantParameters: $this[0].getElementsByTagName("DependentParameters").length > 0
};
return $.each(this.childNodes, function() {
switch (this.nodeName.toLowerCase()) {
case "values":
parameter.values = parseValuesElement(this, parameter);
break;
case "validvalues":
parameter.availableValues = parseValuesElement(this, parameter);
}
}), parameter.values = parameter.values || [], parameter.value = parameter.values.length ? parameter.values[0].value : null,
parameter.editor = resolveEditor(parameter), parameter.error = "", parameter;
}).get();
}
function convertServerParameters(parameters) {
function parseAvailableValues(values, parameter) {
return values.map(function(v) {
if (v.IsSpecial) return parseSpecialValue(v.Value, parameter);
var parsedValue = parseValue(v.Value, parameter.type);
return {
label: v.Label || v.Value,
value: null === parsedValue || isNaN(parsedValue) ? v.Value : parsedValue
};
});
}
function parseValues(values, parameter) {
return values.map(function(v) {
if (v.IsSpecial) return parseSpecialValue(v.Value, parameter);
var value = parseValue(v.Value, parameter.type), expectedValues = parameter.availableValues.filter(function(av) {
return av.value === value;
});
return {
label: expectedValues && expectedValues.length && expectedValues[0].label || v.Value,
value: value
};
});
}
return parameters.map(function(p) {
var parameter = {
name: p.Name || "",
type: convertDataType(p.DataType),
hidden: p.Hidden,
multivalue: p.MultiValue,
multiline: p.MultiLine || !1,
allowEmpty: p.AllowBlank,
dateOnly: p.DateOnly,
nullable: p.Nullable && !p.MultiValue,
prompt: p.Prompt || p.Name || "",
state: convertState(p.State),
definesValidValues: p.DefinesValidValues,
selectAllEnabled: p.SelectAllEnabled,
hasDependantParameters: !(!p.DependentParameters || !p.DependentParameters.length),
dependantParameterNames: p.DependentParameters
};
return parameter.availableValues = parseAvailableValues(p.AvailableValues || [], parameter),
parameter.values = parseValues(p.Values || [], parameter), parameter.state == ParameterState.Ok && parameter.values && 1 == parameter.values.length && "Unspecified" == parameter.values[0].label && !parameter.nullable && (parameter.state = ParameterState.ExpectValue),
parameter.value = parameter.values.length ? parameter.values[0].value : null, parameter.editor = resolveEditor(parameter),
parameter.error = "", parameter;
});
}
return {
convertServerParameters: convertServerParameters,
parseParametersXml: ars_parseParametersXml
};
}
function ArsReportService(options, resourceManager) {
function documentBase(html) {
var doc = $("
");
doc.html(html);
var style = doc.find("style");
if (style.length) {
var text = style.text();
text = text.replace(/background-image\s*:\s*url\((.*)\)/g, function(match, url) {
return url = url.replace(/&/g, "&"), url = isAbsoluteUri(url) ? url : resourceHandler + url,
"background-image:url({0})".format(url);
}), style.text(text);
}
doc = replaceRelativityPath(doc);
var tocUrl = doc.find("meta[name=tocUrl]").attr("content"), documentId = doc.find("meta[name=DocumentId]").attr("content");
return {
html: doc,
tocUrl: tocUrl,
documentId: documentId
};
}
function replaceRelativityPath(doc) {
return doc.find("img").each(function() {
var $this = $(this), src = $this.attr("src");
isBase64(src) || isAbsoluteUri(src) || (src += "&MobileGet=1", $this.attr("src", resourceHandler + src));
}), doc;
}
function pageDocument(token, doc) {
function getPage(index) {
var page = html.clone();
return page.children("div").children("div.page").not(function(i) {
return i == index;
}).remove(), page.html();
}
function exportType(extension) {
switch (extension) {
case "Xls":
return "Excel";
case "Html":
return "Mht";
default:
return extension;
}
}
function updateDelayedContent(data) {
for (var property in data) if (data.hasOwnProperty(property)) {
var doc = $("");
doc.html(data[property]), data[property] = replaceRelativityPath(doc), html.find("#" + property).replaceWith(data[property]);
}
}
var $base = documentBase(doc.html), html = $base.html;
html.find("div.page").children().filter(function() {
return "absolute" === $(this).css("position");
}).css("position", "relative").css("left", "").css("top", "");
var pages = html.find("div.page").length;
return $.extend($base, {
html: html,
reportToken: token,
pages: pages,
getPage: getPage,
exportType: exportType,
updateDelayedContent: updateDelayedContent,
requestId: doc.requestId
});
}
function sectionDocument(token, doc) {
function getPage(index) {
var page = html.clone();
return page.children("div").not(function(i) {
return i == index;
}).remove(), page.html();
}
function exportType(extension) {
switch (extension) {
case "Xls":
return "Excel";
case "Word":
return "Rtf";
case "Html":
return "Mht";
default:
return extension;
}
}
var $base = documentBase(doc.html);
html = $base.html;
var pages = html.children("div").length;
return $.extend($base, {
reportToken: token,
pages: pages,
getPage: getPage,
exportType: exportType
});
}
function close(async) {
return state = {
togglesHistory: null,
documentId: null,
completed: !1,
hiddenParameters: []
}, $base.promise(!0);
}
function usePaging(description) {
return (!options.pagingMode || options.pagingMode === ServerPagingMode.UsePaging) && $base.pagingSupported(description);
}
function renderMode(settings) {
return "undefined" != typeof settings && null !== settings ? settings.RenderMode : "Paginated";
}
function previewPages(settings) {
return "undefined" != typeof settings && null !== settings && "undefined" != typeof settings.PreviewPages && null !== settings.PreviewPages ? settings.PreviewPages : null;
}
function open(reportId, parameters) {
service.close();
var idrev = (reportId || "").split("."), version = null;
if (idrev.length > 1) {
var lastIndex = idrev.length - 1;
version = parseInt(idrev[lastIndex]), isNaN(version) && (version = null), null === version && (lastIndex += 1),
reportId = idrev.slice(0, lastIndex).join(".");
}
var def = $.Deferred();
return $base.getReport(reportId, version).fail(function(result) {
"DocumentNotFound" === result.errorCode ? def.reject(SR("error.ReportNotFound").format(reportId)) : def.reject(result);
}).then(function(list) {
if (0 === list.length) return def.reject(SR("error.ReportNotFound").format(reportId)),
def;
var desc = list[0];
return version && (desc.Version = version), def.resolve({
token: {
description: desc,
id: desc._id || desc.Id
},
parameters: [],
hasParameters: !!desc.IsParametrized,
reportType: getReportType(desc.ReportType),
autoRun: !0,
isChangeRenderModeSupported: $base.promise(desc.IsCpl)
});
}), def.then(function(report) {
return report.hasParameters || parameters && 0 !== parameters.length ? resolveParameters(report.token, parameters).then(function(resolvedParameters) {
return $.extend(report, {
parameters: resolvedParameters
});
}) : report;
});
}
function getReportType(arsReportType) {
return arsReportType === reportTypes.SemanticReport || arsReportType === reportTypes.PageReport ? ReportType.pageReport : arsReportType === reportTypes.SectionReport || arsReportType === reportTypes.CodeBasedReport ? ReportType.sectionReport : ReportType.unknown;
}
function run(reportToken, parameters, settings, snapshotCacheId) {
var getContent, description = reportToken.description;
if (snapshotCacheId) {
var exportOptions = createExportOptions(description, snapshotCacheId, state.togglesHistory, settings);
getContent = exportDocument(description, "Html", exportOptions);
} else {
var renderParameters = ars_convertClientParameters(overrideHiddenParameters(parameters)), extensionSettings = {
Target: "Screen",
RenderMode: renderMode(settings),
NeedExportSupport: !0,
IncludePageMargins: !0,
TocStream: !0,
StreamingEnabled: usePaging(description)
};
null !== previewPages(settings) && (extensionSettings.PreviewPages = previewPages(settings)),
options && options.previewPages && (extensionSettings.PreviewPages = options.previewPages),
getContent = $base.renderReport(description, renderParameters, "Html", extensionSettings);
}
return getContent.then(function(doc) {
var document;
return document = description.ReportType == reportTypes.PageReport || description.ReportType == reportTypes.SemanticReport ? pageDocument(reportToken, doc) : sectionDocument(reportToken, doc),
state.togglesHistory = new TogglesHistory(), state.documentId = document.documentId,
document;
});
}
function cancelRendering(document) {
return document ? $base.cancelRendering(document.requestId).then(function() {
return !0;
}) : $base.errorPromise(SR("error.InvalidDocumentToken"));
}
function overrideHiddenParameters(parameters) {
var notOverriddenHiddenParameters = state.hiddenParameters.filter(function(hiddenParameter) {
return !parameters.some(function(parameter) {
return parameter.name == hiddenParameter.name;
});
});
return notOverriddenHiddenParameters.concat(parameters);
}
function removeDependants(parameters, dependantNames) {
var allDependantsNames = allDependants(parameters, dependantNames);
return parameters.filter(function(p) {
return allDependantsNames.indexOf(p) === -1;
});
}
function allDependants(parameters, dependantNames) {
dependantNames = dependantNames ? dependantNames : [];
var firstGen = parameters.filter(function(p) {
return dependantNames.indexOf(p.name) !== -1;
}), res = firstGen.slice();
return firstGen.forEach(function(p) {
res = res.concat(allDependants(parameters, p.dependantParameterNames));
}), res;
}
function resolveParameters(reportToken, parameters, dependantNames) {
var paramsForResolving = removeDependants(overrideHiddenParameters(parameters), dependantNames);
return $base.resolveParameters(reportToken.description, ars_convertClientParameters(paramsForResolving)).then(function(parsedParameters) {
var notHiddenParameters = [];
return state.hiddenParameters = [], parsedParameters.forEach(function(parsedParameter) {
reportToken.description.ReportType == reportTypes.SemanticReport ? (parsedParameter.state == ParameterState.Ok && parsedParameter.values && 1 == parsedParameter.values.length && "Unspecified" == parsedParameter.values[0].label && (parsedParameter.state = ParameterState.ExpectValue),
parsedParameter.nullable = !1) : reportToken.description.ReportType === reportTypes.PageReport && parsedParameter.multivalue && (parsedParameter.availableValues || []).length > 1 && (parsedParameter.selectAllEnabled = !0),
parsedParameter.hidden ? state.hiddenParameters.push(parsedParameter) : notHiddenParameters.push(parsedParameter);
}), reportToken.description.ReportType == reportTypes.SemanticReport && notHiddenParameters.forEach(function(parameter) {
switch (parameter.type) {
case "string":
parameter.availableValues.sort(compareString);
break;
case "float":
case "int":
parameter.availableValues.sort(compareNumbers);
break;
case "datetime":
parameter.availableValues.sort(compareDate);
break;
default:
parameter.availableValues.sort(compareString);
}
}), notHiddenParameters;
});
}
function compareNumbers(a, b) {
return a.label - b.label;
}
function compareString(a, b) {
return a.label.localeCompare(b.label);
}
function compareDate(a, b) {
return new Date(a.label) - new Date(b.label);
}
function translateSettings(settings, exportType) {
var newSettings = {};
return Object.keys(settings || {}).forEach(function(key) {
var val = settings[key];
switch (key) {
case "printing":
val && (exportType == ExportType.Pdf ? newSettings.PrintOnOpen = !0 : exportType == ExportType.Html && (newSettings = $.extend(newSettings, {
WebViewer: !0,
MhtOutput: !1,
RenderTocTree: !1,
OutputTOC: !1,
Interactivity: !1,
RenderMode: "Paginated",
Pagination: !0,
StyleStream: !1,
IncludePageMargins: !0,
Printing: !0
})));
break;
default:
newSettings[key] = val;
}
}), newSettings;
}
function exportImpl(token, exportType, settings, params) {
if (!token) return $base.errorPromise(SR("error.InvalidReportToken"));
if ("undefined" != typeof settings && null !== settings && settings.state === DocumentState.cancelled) return exportFullReport(token, exportType, settings, params);
var description = token.reportToken.description, exportOptions = {
DocumentId: token.documentId ? token.documentId : state.documentId,
InteractiveActions: state.togglesHistory.getSet(),
ExtensionSettings: translateSettings(settings, exportType)
};
return $base.exportDocument(description, token.exportType(exportType), exportOptions).then(function(result) {
return isAbsoluteUri(result.uri) ? result.uri : resourceHandler + result.uri;
});
}
function exportFullReport(token, exportType, settings, params) {
var def = $.Deferred();
return settings.PreviewPages = 0, run(token.reportToken, params, settings, null).then(function(documentToken) {
return getPageCount(documentToken).then(function(pc) {
var description = documentToken.reportToken.description, exportOptions = {
DocumentId: documentToken.documentId ? documentToken.documentId : state.documentId,
InteractiveActions: state.togglesHistory.getSet(),
ExtensionSettings: translateSettings(settings, exportType)
};
return $base.exportDocument(description, documentToken.exportType(exportType), exportOptions).then(function(result) {
return isAbsoluteUri(result.uri) ? def.resolve(result.uri) : def.resolve(resourceHandler + result.uri);
});
});
}), def.promise();
}
function sendImpl(token, settings) {
if (!token) return $base.errorPromise(SR("error.InvalidReportToken"));
var description = token.reportToken.description, newsettings = {
Distribution: settings.Distribution,
DocumentFormat: settings.DocumentFormat,
DocumentId: token.documentId ? token.documentId : state.documentId,
SendEmailPolicyName: settings.SendEmailPolicyName
};
return $("#sendemaildialog").modal("hide"), $base.sendEmail(description, newsettings).then(function(url) {
return isAbsoluteUri(url) || (url = resourceHandler + url), url;
});
}
function validateParameters(reportToken, parameters, dependantNames) {
return resolveParameters(reportToken, parameters, dependantNames);
}
function getPageCount(document) {
return document ? usePaging(document.reportToken.description) ? $base.getPageCount(document.requestId).done(function() {
state.completed = !0;
}) : $base.promise(document.pages || 1) : $base.errorPromise(SR("error.InvalidDocumentToken"));
}
function getPage(document, index) {
return document ? usePaging(document.reportToken.description) ? $base.getPage(index, document.requestId).then(function(page) {
var doc = pageDocument("", page);
return doc.documentId && !state.documentId && (state.documentId = doc.documentId),
doc.tocUrl && !document.tocUrl && (document.tocUrl = doc.tocUrl), getDelayedContent(index, document.requestId).then(function(data) {
return doc.updateDelayedContent(data), doc.getPage(0);
});
}) : (index >= document.pages && (index = 0), $base.promise(document.getPage(index))) : $base.errorPromise(SR("error.InvalidDocumentToken"));
}
function getToc(document) {
if (!document) return $base.errorPromise(SR("error.InvalidDocumentToken"));
var tocUrl = document.tocUrl;
if (!tocUrl) return emptyToc();
tocUrl += "&MobileGet=1";
var result = $.Deferred();
return getResource({
uri: tocUrl
}, !0).then(function(toc) {
result.resolve(toc);
}).fail(function() {
emptyToc().done(result.resolve);
}), result.promise();
}
function emptyToc() {
return $base.promise({
name: "$root",
kids: []
});
}
function loadResource(url) {
return getResource(url).then(function(data, textStatus, xhr) {
if (206 == xhr.status) {
var xml = $(data), requestId = xml.find("RequestId").text();
return requestId ? $base.getResourceId(requestId).then(loadResource) : $base.errorPromise(SR("error.InvalidRequestId"));
}
return data;
});
}
function getResource(resource, json) {
var url = resource.uri + "&NoWrapper=1";
return json ? $cacheService.getJson(url) : $cacheService.get(url);
}
function toggle(token, toggleInfo, settings) {
function createExportResult(doc) {
var document = isPageReport ? pageDocument(token, doc) : sectionDocument(token, doc);
return {
url: document
};
}
state.togglesHistory.toggle(toggleInfo.Data);
var description = token.description, isPageReport = description.ReportType == reportTypes.PageReport || description.ReportType == reportTypes.SemanticReport, renderOptions = createExportOptions(description, state.documentId, state.togglesHistory, settings);
return renderOptions.ExtensionSettings.Target = "Screen", options && options.previewPages && (renderOptions.ExtensionSettings.PreviewPages = options.previewPages),
usePaging(description) && (state.completed = !1), exportDocument(description, "Html", renderOptions).then(function(doc) {
return createExportResult(doc);
});
}
function exportDocument(description, extensionName, exportOptions) {
var exportDoc = $base.exportDocument(description, extensionName, exportOptions);
return usePaging(description) ? exportDoc : exportDoc.then(loadResource).then(function(html) {
return {
html: html
};
});
}
function drillthrough(token, link, settings) {
var drillInfo = parseDrillthroughLink(token, link);
return drillInfo && drillInfo.reportName ? openDrillthrough(token, drillInfo.reportName, drillInfo.params, settings) : $base.errorPromise(SR("error.InvalidDrillthroughLink").format(link));
}
function parseDrillthroughLink(token, link) {
function parseParameters(str) {
var result = [], parameters = splitEscaped(str, ";");
return parameters.forEach(function(parameter) {
var keyValue = splitEscaped(parameter, "=");
if (keyValue.length > 1) {
var key = keyValue[0], value = keyValue[1];
if (key) {
var values = splitEscaped(value, ",");
values.length > 1 ? result.push({
name: key,
values: values.map(function(v) {
return {
value: decodeURIComponent(v)
};
}),
multivalue: !0
}) : result.push({
name: key,
value: decodeURIComponent(values[0])
});
}
}
}), result;
}
var queryStart = link.indexOf("?");
if (-1 == queryStart) return {
reportName: "",
params: []
};
var reportName = "", params = [], query = link.slice(queryStart + 1);
return query.split("&").forEach(function(queryItem, i, _) {
var parts = queryItem.split(/=(.*)/);
parts.length < 2 || ("ReportId" == parts[0] ? reportName = decodeURIComponent(parts[1]) : "Parameters" == parts[0] && (params = parseParameters(parts[1])));
}), "self" == reportName && (reportName = token.id), {
reportName: reportName,
params: params
};
}
function openDrillthrough(token, reportName, parameters, settings) {
return service.open(reportName, parameters).then(function(report) {
var parametersValid = report.parameters.every(function(p) {
return p.state == ParameterState.Ok;
});
return parametersValid ? service.run(report.token, report.parameters).then(function(documentToken) {
return report.isChangeRenderModeSupported.then(function(isChangeRenderModeSupported) {
return {
reportToken: report.token,
parameters: report.parameters,
documentToken: documentToken,
isChangeRenderModeSupported: $base.promise(isChangeRenderModeSupported)
};
});
}) : report.isChangeRenderModeSupported.then(function(isChangeRenderModeSupported) {
return {
reportToken: report.token,
parameters: report.parameters,
isChangeRenderModeSupported: $base.promise(isChangeRenderModeSupported)
};
});
});
}
function setState(newState) {
return state = {
togglesHistory: newState.togglesHistory,
documentId: newState.documentId,
hiddenParameters: newState.hiddenParameters
}, !0;
}
function createExportOptions(description, documentId, togglesHistory, settings) {
return {
DocumentId: documentId,
Name: description.Name,
ReportType: description.ReportType,
InteractiveActions: togglesHistory ? togglesHistory.getSet() : [],
ExtensionSettings: {
RenderMode: renderMode(settings),
NeedExportSupport: !0,
TocStream: !0,
IncludePageMargins: !0,
StreamingEnabled: usePaging(description)
}
};
}
function getDelayedContent(pageNumber, reqId) {
return $base.getDelayedContent && state.completed ? $base.getDelayedContent(pageNumber, reqId) : $.Deferred().resolve({});
}
var state;
if (!options.url) throw new Error("options has no valid url");
var SR = resourceManager && $.isFunction(resourceManager.get) ? resourceManager.get : identity, resourceHandler = options.resourceHandler || "", serviceUrl = options.url;
serviceUrl.endsWith("/") || (serviceUrl += "/");
var service = {
open: open,
close: close,
run: run,
cancelRendering: cancelRendering,
validateParameters: validateParameters,
validateParameter: function() {
return $base.errorPromise(SR("error.NotSupported"));
},
validateParameterSupported: function() {
return !1;
},
getPageCount: getPageCount,
getPage: getPage,
getToc: getToc,
getDelayedContent: getDelayedContent,
export: exportImpl,
sendEmail: sendImpl,
drillthrough: drillthrough,
toggle: toggle,
ping: function() {
return $base.promise(!1);
},
canSendEmail: function() {
return $base.canSendEmail();
},
getState: function() {
return state;
},
setState: setState
}, $base = options.url && options.url.toLowerCase().indexOf("reportservice.svc") !== -1 ? ArsWcfReportService(service, serviceUrl, options, resourceManager, loadResource) : ArsRestReportService(service, serviceUrl, options, resourceManager), $cacheService = WebServiceBase(service, resourceHandler, $base.setAuthToken), reportTypes = $base.reportTypes;
return close(), service;
}
function ArsRestReportService(service, serviceUrl, options, resourceManager) {
function setAuthToken(ajaxOptions) {
return securityToken && (ajaxOptions.headers = {
AuthToken: securityToken
}), ajaxOptions;
}
function getReport(reportId, version) {
var url = "";
if (objectIdPattern.test(reportId)) url = "reports/" + reportId + (null !== version ? "." + version : ""); else {
var selector = JSON.stringify({
$or: [ {
_id: {
$eqi: encodeURIComponent(reportId)
}
}, {
Name: {
$eqi: encodeURIComponent(reportId)
}
} ]
});
url = "reports?selector=" + selector + (null !== version ? "&version=" + version : "");
}
return $base.get(url).then(function(res) {
var reports = $.isPlainObject(res) ? [ res ] : res;
return reports.forEach(function(r) {
r.ReportType = r.Type;
}, this), reports;
});
}
function cancelRendering(reqId) {
return $base.postRest("reports/jobs/render/" + reqId + "/cancel", {}).then(function() {
return !0;
});
}
function isPageReport(description) {
return description.ReportType === reportTypes.PageReport || description.ReportType === reportTypes.SemanticReport;
}
function resolveParameters(description, parameters) {
return runTask("reports/" + description._id + "/parameters/validateValues", parameters).then(function(parameters) {
return arsParametersParser(resourceManager, description.ReportType === reportTypes.SemanticReport).convertServerParameters(parameters);
});
}
function isStreamingEnabled(options) {
return options.ExtensionSettings && options.ExtensionSettings.StreamingEnabled;
}
function renderReport(description, parameters, extensionName, extensionSettings) {
var renderOptions = {
ExtensionName: extensionName,
ExtensionSettings: extensionSettings,
ReportParameters: parameters
}, id = description._id;
return description.Version && (id = id + "." + description.Version), runTask("reports/" + id + "/jobs/" + RENDERING_JOB, renderOptions).then(function(res) {
return isStreamingEnabled(renderOptions) ? getPage(0, res.RequestId) : handleRequestResult(RENDERING_JOB, res);
});
}
function exportDocument(description, extensionName, exportOptions) {
return exportOptions.ExtensionName = extensionName, runTask("reports/" + description._id + "/jobs/" + EXPORT_JOB, exportOptions).then(function(res) {
return isStreamingEnabled(exportOptions) ? handlePageRequestResult(RENDERING_JOB, res, 1) : handleRequestResult(EXPORT_JOB, res);
});
}
function sendEmail(description, sendOptions) {
return runTask("reports/jobs/" + description._id + "/emailRequests", sendOptions).then(function(res) {
return handleRequestResult("emailRequests", res);
});
}
function runTask(method, taskOptions) {
return $base.postRest(method, taskOptions);
}
function handleRequestResult(requestType, result) {
return null !== result && "object" == typeof result && result.RequestId ? getRequestResult(requestType, result.RequestId) : requestType === EXPORT_JOB ? {
uri: result
} : {
html: result
};
}
function getRequestResult(requestType, requestId) {
return $base.get("reports/jobs/" + requestType + "/" + requestId).then(function(res) {
return handleRequestResult(requestType, res);
});
}
function getResourceId(requestId) {
return handleRequestResult(EXPORT_JOB, {
RequestId: requestId
});
}
function handlePageRequestResult(requestType, result, pageNumber, reqid) {
var page = {
requestId: result.RequestId || reqid
};
return result.Content || "object" != typeof result ? (page.html = "object" != typeof result ? result : result.Content,
page) : getPageRequestResult(requestType, pageNumber, page.requestId);
}
function getPageRequestResult(requestType, pageNumber, reqid) {
return $base.get("reports/jobs/" + requestType + "/" + reqid + "/pages/" + pageNumber).then(function(res) {
return handlePageRequestResult(requestType, res, pageNumber, reqid);
});
}
function getPage(pageNumber, reqid) {
return getPageRequestResult("render", pageNumber + 1, reqid);
}
function getPageCount(reqId) {
function getPageCountImpl() {
$base.get("reports/jobs/render/" + reqId + "/pages/available" + getRandomParameter()).done(function(result, status, xhr) {
202 === xhr.status ? getPageCountImpl() : result.Complete || result.Cancelled ? def.resolve(result.AvailablePages, result.Cancelled ? DocumentState.cancelled : DocumentState.completed) : (def.notify(result.AvailablePages),
getPageCountImpl());
}).fail(function(problem) {
def.reject(problem);
});
}
var def = $.Deferred();
return getPageCountImpl(), def.promise();
}
function getDelayedContent(pageNumber, reqId) {
return $base.get("reports/jobs/render/" + reqId + "/pages/" + (pageNumber + 1) + "/delayedcontent");
}
function getRandomParameter() {
return "?_=" + Math.random().toString().split(".")[1];
}
var RENDERING_JOB = "render", EXPORT_JOB = "export", securityToken = options.securityToken, reportTypes = {
SemanticReport: "SemanticReport",
SectionReport: "SectionReport",
PageReport: "PageReport",
CodeBasedReport: "CodeBasedSectionReport"
}, $base = WebServiceBase(service, serviceUrl, setAuthToken), objectIdPattern = /^[0-9a-fA-F]{24}$/;
return {
setAuthToken: setAuthToken,
getReport: getReport,
cancelRendering: cancelRendering,
resolveParameters: resolveParameters,
getResourceId: getResourceId,
renderReport: renderReport,
exportDocument: exportDocument,
sendEmail: sendEmail,
reportTypes: reportTypes,
promise: $base.promise,
errorPromise: $base.errorPromise,
pagingSupported: isPageReport,
getPage: getPage,
getPageCount: getPageCount,
getDelayedContent: getDelayedContent,
canSendEmail: function() {
return !0;
}
};
}
function ArsWcfReportService(service, serviceUrl, options, resourceManager, loadResource) {
function mapSettings(settings) {
return Object.keys(settings || {}).map(function(key) {
return {
Key: key,
Value: null === settings[key] ? null : settings[key].toString()
};
});
}
function post(method, data) {
return data.token = options.securityToken, $base.post(method, data);
}
function getReport(reportId) {
return post("Select", {}).then(function(list) {
return list.filter(function(d) {
return d.Id == reportId || d.Name.toLowerCase() == reportId.toLowerCase();
});
});
}
function resolveParameters(description, parameters) {
var renderOptions = {
ReportId: description.Id,
Name: description.Name,
ReportType: description.ReportType,
Extension: "Html",
ReportParameters: parameters
};
return runTask("ResolveParameters", description, renderOptions).then(loadResource).then(function(resource) {
return arsParametersParser(resourceManager, description.ReportType === reportTypes.SemanticReport).parseParametersXml(resource);
});
}
function getResourceIdByRequestId(requestId) {
return getResourceId({
Info: {
State: requestStates.Running,
RequestId: requestId
}
});
}
function format(str, args) {
if (!args) return str;
for (var arg in args) str = str.replace("{" + arg + "}", args[arg]);
return str;
}
function getResourceId(requestResult) {
var requestInfo = requestResult.Info;
switch (requestInfo.State) {
case requestStates.Unavailable:
case requestStates.Rejected:
var err = (requestInfo.Exception || {}).Message || "", code = requestInfo.ErrorCode || "";
return "" !== code ? $base.errorPromise(SR("error.RequestRejected") + " " + format(SR("error." + code), requestInfo.ErrorData)) : $base.errorPromise(SR("error.RequestRejected") + " " + err);
case requestStates.Cancelled:
return $base.errorPromise(resourceManager("error.RequestCancelled"));
case requestStates.Pending:
case requestStates.Running:
return $base.delay(function() {
return post("GetRequestStatus", {
requestId: requestInfo.RequestId
});
}, pollingTimeout).then(getResourceId);
default:
return {
uri: encodeURI(requestInfo.PrimaryUrl + "&MobileGet=1")
};
}
}
function renderReport(description, parameters, extensionName, extensionSettings) {
var renderOptions = {
ReportId: description.Id,
Name: description.Name,
ReportType: description.ReportType,
Extension: extensionName,
ExtensionSettings: mapSettings(extensionSettings),
ReportParameters: parameters
};
return runTask("RenderReport", description, renderOptions).then(loadResource).then(function(html) {
return {
html: html
};
});
}
function exportDocument(description, extensionName, exportOptions) {
return exportOptions.Extension = extensionName, exportOptions.ExtensionSettings = mapSettings(exportOptions.ExtensionSettings),
runTask("ExportDocument", description, exportOptions);
}
function runTask(method, description, taskOptions) {
return post(method, {
description: description,
options: taskOptions
}).then(getResourceId);
}
function pagingSupported(description) {
return !1;
}
var defaultPollingTimeout = 1e3, pollingTimeout = options.pollingTimeout || defaultPollingTimeout, reportTypes = {
SemanticReport: 1,
SectionReport: 2,
PageReport: 3,
CodeBasedReport: 4
}, requestStates = {
Pending: 0,
Running: 1,
Unavailable: 2,
Accomplished: 3,
Cancelled: 4,
Rejected: 5
}, SR = resourceManager && $.isFunction(resourceManager.get) ? resourceManager.get : identity, $base = WebServiceBase(service, serviceUrl);
return {
getReport: getReport,
resolveParameters: resolveParameters,
getResourceId: getResourceIdByRequestId,
renderReport: renderReport,
exportDocument: exportDocument,
reportTypes: reportTypes,
promise: $base.promise,
errorPromise: $base.errorPromise,
canSendEmail: function() {
return !1;
},
pagingSupported: pagingSupported,
getPage: function() {
throw new Error("Shouldn't be called");
},
getPageCount: function() {
throw new Error("Shouldn't be called");
}
};
}
function BrowserSpecific() {
function isEdge() {
return navigator.userAgent.toLowerCase().indexOf("edge") > -1;
}
function isChrome() {
return navigator.userAgent.toLowerCase().indexOf("chrome") > -1;
}
function isSafari() {
return navigator.userAgent.toLowerCase().indexOf("safari") > -1;
}
return {
SupportPdfFrame: (isChrome() || isSafari()) && !isEdge(),
AllowStopPropagation: !isEdge()
};
}
function ClientSideSearchService() {
function search(document, searchOptions) {
function fillResults(items, regex, numberOfMatches) {
for (var fromIndex = currentPage == options.FromPage + 1 && options.FromElement > 0 ? options.FromElement + 1 : 0, i = fromIndex; i < items.length; i++) {
var element = items[i], elementText = element.text();
if (elementText.match(regex) && (result.matches.push({
idx: i,
text: elementText,
page: currentPage - 1
}), result.matches.length === numberOfMatches)) break;
}
return numberOfMatches != ALL_RESULTS && result.matches.length >= numberOfMatches;
}
function searchOnCurrentPage(regex) {
var hasMorePages = document.state() === DocumentState.completed && document.pageCount() >= currentPage + 1;
fillResults(cachedItems, regex, options.NumberOfResults) || !hasMorePages ? (result.hasMore = hasMorePages,
d.resolve(result)) : document.state() === DocumentState.progress && document.pageCount() <= currentPage + 1 ? setTimeout(searchOnCurrentPage, 100) : getPageItems(document, currentPage).done(function(items) {
cachedItems = items, currentPage++, searchOnCurrentPage(regex);
});
}
var d = $.Deferred(), result = {
hasMore: !0,
matches: []
};
if (null === searchOptions || void 0 === searchOptions) return d.resolve({
hasMore: !1,
matches: []
});
var options = ensureOptions(searchOptions);
return 0 === options.FromPage && 0 === options.FromElement && (cachedItems = [],
currentPage = 0), searchOnCurrentPage(createRegex(searchOptions)), d.promise();
}
function getPageItems(document, pageIndex) {
return document.getPage(pageIndex).then(getStrippedTextElements);
}
function getStrippedTextElements(page) {
return getTextElements(page, !0);
}
function ensureOptions(searchOptions) {
var startFromPage = searchOptions && searchOptions.from && searchOptions.from.page || 0, startFromIndex = searchOptions && searchOptions.from && searchOptions.from.idx || 0, numberOfResults = searchOptions.maxSearchResults, maxResultCount = !numberOfResults || numberOfResults < 0 ? ALL_RESULTS : numberOfResults;
return {
FromPage: startFromPage,
FromElement: startFromIndex,
NumberOfResults: maxResultCount
};
}
function createRegex(searchOptions) {
for (var escapeChars = "\\|[]()+*.{}$^?", pattern = "", i = 0; i < searchOptions.text.length; i++) {
var ch = searchOptions.text[i];
escapeChars.indexOf(ch) >= 0 && (pattern += "\\"), pattern += ch;
}
searchOptions.wholePhrase && (pattern = "\\b" + pattern, pattern += "\\b");
var flags = "m";
return searchOptions.matchCase || (flags += "i"), new RegExp(pattern, flags);
}
var service = {
search: search
}, ALL_RESULTS = "ALL", cachedItems = [], currentPage = 0;
return service;
}
function noop() {}
function identity(v) {
return v;
}
function isAbsoluteUri(uri) {
return /^https?:\/\//i.test(uri);
}
function isBase64(uri) {
var r = new RegExp("^data:\\w+/\\w+;base64,", "i");
return r.test(uri);
}
function getQueryParameter(url, name) {
if (!url || "string" != typeof url) return null;
if (!name || "string" != typeof name) return null;
var uri = parseUri(url);
if (!uri.query) return null;
var f = Object.keys(uri.queryKey).filter(function(key) {
return key.toLowerCase() == name;
});
return 1 === f.length ? uri.queryKey[f[0]] : null;
}
function splitEscaped(str, delimiter) {
if (null === str || void 0 === str) return [];
if (!delimiter) return [ str ];
if ("\\" == delimiter) throw new Error("\\ delimiter is not supported");
if (delimiter.length > 1) throw new Error("delimiter should be single character");
for (var res = [], part = "", escaped = !1, i = 0; i < str.length; ) {
var current = str.charAt(i);
escaped ? (part += current, escaped = !1) : "\\" == current ? escaped = !0 : current == delimiter ? (res.push(part),
part = "") : part += current, i++;
}
return res.push(part), res;
}
function getDpi() {
var e = document.body.appendChild(document.createElement("DIV"));
e.style.width = "1in", e.style.padding = "0";
var dpi = e.offsetWidth;
return e.parentNode.removeChild(e), dpi;
}
function resolveErrorMessage(args, resourceManager) {
var xhr = args[0];
if (3 == args.length && xhr.status) {
if (resourceManager && 404 == xhr.status) return resourceManager("error.NotFound");
if (xhr.responseJSON && xhr.responseJSON.ErrorCode && resourceManager && resourceManager("error." + xhr.responseJSON.ErrorCode, xhr.responseJSON.ErrorParameters)) return resourceManager("error." + xhr.responseJSON.ErrorCode);
if (xhr.responseJSON && xhr.responseJSON.Message) return xhr.responseJSON.Message;
if (xhr.responseJSON && xhr.responseJSON.Error) return xhr.responseJSON.Error;
if (xhr.responseText) {
var m = /([^<]*)<\/title>/.exec(xhr.responseText);
if (m) return m[1];
}
return xhr.statusText;
}
return xhr.errorCode ? resourceManager && resourceManager("error." + xhr.errorCode, xhr.errorParameters) || xhr.message : xhr.statusText ? xhr.statusText : xhr;
}
function getTextElements(page, removeTextChilds) {
var topLevelSelector = "div, p, td, li, span", pageObject = page instanceof jQuery ? page : $("").html(page), elements = pageObject.find(topLevelSelector);
return removeTextChilds ? jQuery.map(elements, function(topLevelElement) {
return $($(topLevelElement).clone().find(topLevelSelector).remove().end());
}) : elements;
}
function ContinuousPageViewModel(viewer) {
function initPages() {
var doc = viewer.document();
doc.pageCount.subscribe(function(newCount) {
_countPages(newCount), addPages();
}), 0 === _heightPage() ? initHeight().then(function() {
addPages(), goToPage(viewer.pageIndex());
}) : addPages();
}
function initHeight() {
return viewer.document().getPage(viewer.pageIndex()).done(function(newPage) {
var tempPage = document.getElementById("tempPage");
null !== tempPage && (tempPage.innerHTML = newPage, _heightPage(tempPage.offsetHeight),
tempPage.innerHTML = "");
});
}
function addPages() {
if (_countPages(viewer.document().pageCount()), _countPages() > 0) {
for (var entries = _pages(), i = entries.length; i < _countPages(); i++) entries.push({
id: "page" + i,
content: ko.observable(),
state: null
});
_pages.valueHasMutated();
}
}
function goToPage(pageIndex) {
if (viewer.pageDisplayMode() === PageDisplayMode.continuous) {
var elem = document.getElementById("contentView"), scrollTop = pageIndex * _heightPage();
elem.scrollTop = scrollTop;
}
}
function getPageContent(id) {
var result = $.Deferred();
return viewer.document().getPage(parseInt(id)).done(function(newContent) {
result.resolve(newContent);
}), result.promise();
}
function onScroll(data, event) {
var elem = event.target, pageIndex = Math.min(Math.round(elem.scrollTop / _heightPage()), _countPages() - 1);
pageIndex >= 0 && (pageIndexSubscription.dispose(), viewer.pageIndex(pageIndex),
pageIndexSubscription = viewer.pageIndex.subscribe(pageChagned));
}
function clearCache() {
_pages([]), _countPages(0), _heightPage(0);
}
var _pages = ko.observableArray([]), _countPages = ko.observable(0), _heightPage = ko.observable(0), pageChagned = function(pageIndex) {
0 === _heightPage() ? initHeight().then(function() {
goToPage(viewer.pageIndex());
}) : goToPage(pageIndex);
}, pageIndexSubscription = viewer.pageIndex.subscribe(pageChagned);
return viewer.pageDisplayMode.subscribe(function() {
clearCache();
}), viewer.document.subscribe(function() {
clearCache();
}), {
get pages() {
return _pages;
},
get countPages() {
return _countPages;
},
get heightPage() {
return _heightPage;
},
getPageContent: getPageContent,
initPages: initPages,
onScroll: onScroll
};
}
function DocumentModel(reportService, token, reportType, resourceManager) {
function _resolveActionItems(element) {
return _actionItemsResolver.resolve(element, _reportType);
}
function getToc() {
if (!reportService) return $.Deferred().resolve(emptyToc).promise();
var result = $.Deferred();
return _toc() === nullToc || _toc() == emptyToc ? reportService.getToc(token).done(result.resolve).fail(failHandler) : result.resolve(_toc()),
result.promise();
}
function load() {
_pageCount(0), _state(DocumentState.progress), reportService.getPageCount(token).progress(function(count) {
_pageCount(count);
}).done(function(count, state) {
_pageCount(count), _state(state ? state : DocumentState.completed);
}).fail(setErrorState).fail(failHandler);
}
function setErrorState() {
_state(DocumentState.error);
}
function failHandler() {
var error = resolveErrorMessage(arguments, SR);
$(doc).trigger("error", error);
}
function getPage(index) {
return !token || index < 0 || index >= _pageCount() ? $.Deferred().resolve("").promise() : reportService.getPage(token, index).fail(failHandler);
}
function exportImpl(exportType, settings, params) {
if (!token || _pageCount() <= 0) throw new Error("document is not ready for export");
return reportService.export(token, exportType, settings, params).fail(failHandler);
}
function sendImpl(settings) {
if (!token || _pageCount() <= 0) throw new Error("document is not ready for sending");
return reportService.sendEmail(token, settings);
}
function cancelRendering() {
if (!token) throw new Error("document is not ready for cancelRendering!");
return reportService.cancelRendering(token).fail(failHandler);
}
var nullToc = {
kids: []
}, emptyToc = {
kids: []
}, _pageCount = ko.observable(0), _state = ko.observable(DocumentState.init);
_state.subscribe(function() {
$(document).trigger("documentStateChanged");
});
var _toc = ko.observable(nullToc), _reportType = reportType, _actionItemsResolver = new ActionItemsResolver(), SR = resourceManager && $.isFunction(resourceManager.get) ? resourceManager.get : identity, _search = reportService && reportService.search && reportService.search.apply ? function(searchOptions) {
return reportService.search(token, searchOptions);
} : function(searchService) {
return function(searchOptions) {
return searchService.search(doc, searchOptions);
};
}(new ClientSideSearchService()), _documentState = null, doc = {
get pageCount() {
return _pageCount;
},
get state() {
return _state;
},
getPage: getPage,
getToc: getToc,
get toc() {
return reportService ? (_toc() === nullToc && (_toc(emptyToc), ko.waitFor(_state, function(state) {
return state == DocumentState.completed;
}, function() {
return getToc().done(_toc);
})), _toc) : _toc;
},
export: exportImpl,
sendEmail: sendImpl,
canSendEmail: function() {
return !!reportService && reportService.canSendEmail();
},
search: _search,
resolveActionItems: _resolveActionItems,
saveDocumentState: function() {
reportService && (_documentState = reportService.getState());
},
restoreDocumentState: function() {
reportService && reportService.setState(_documentState);
},
cancelRendering: cancelRendering
};
return reportService && token && load(), doc;
}
function DocumentViewModel(viewer) {
function setInteractivity(value) {
var sheet = getStyleSheet();
sheet.disabled = value;
}
function getStyleSheet() {
for (var sheet, i = 0; i < document.styleSheets.length; i++) if (sheet = document.styleSheets[i],
sheet.title == uniqueStylesheetTitle) return sheet;
return sheet = document.createElement("style"), sheet.innerHTML = ".ars-toggle {visibility: hidden;}\n.ar7-toggle {visibility: hidden;}",
sheet.title = uniqueStylesheetTitle, document.body.appendChild(sheet), sheet;
}
function getContent() {
viewer.pageDisplayMode() === PageDisplayMode.single ? _singlePage.getPageContent() : _continuousPage.initPages(),
setInteractivity(viewer.document().state() === DocumentState.completed || viewer.document().state() === DocumentState.cancelled);
}
function onScroll(data, event) {
viewer.pageDisplayMode() === PageDisplayMode.continuous && _continuousPage.onScroll(data, event);
}
var _continuousPage = ContinuousPageViewModel(viewer), _singlePage = SinglePageViewModel(viewer), _isSinglePageMode = ko.computed(function() {
return viewer.pageDisplayMode() === PageDisplayMode.single;
}), _isContinuousPageMode = ko.computed(function() {
return viewer.pageDisplayMode() === PageDisplayMode.continuous;
}), uniqueStylesheetTitle = "E650924C6650";
$(viewer).on("firstPageLoaded", getContent), $(viewer).on("togglePageLoaded", getContent),
viewer.pageDisplayMode.subscribe(function() {
getContent();
}), viewer.document.subscribe(function(doc) {
ko.waitFor(doc.state, function(val) {
return val === DocumentState.completed || val === DocumentState.cancelled;
}, getContent), doc.state.subscribe(function(val) {
val !== DocumentState.completed && val !== DocumentState.cancelled || setInteractivity(!0);
});
});
var _inProgress = ko.computed(function() {
return setInteractivity((viewer.document().state() === DocumentState.completed || viewer.document().state() === DocumentState.cancelled) && !viewer.report().busy()),
viewer.report().busy();
}), _parameterValidation = ko.computed(function() {
return viewer.report().parameterValidation();
});
return {
scrolled: onScroll,
get isSinglePageMode() {
return _isSinglePageMode;
},
get isContinuousPageMode() {
return _isContinuousPageMode;
},
get singlePage() {
return _singlePage;
},
get continuousPage() {
return _continuousPage;
},
get location() {
return viewer.location;
},
get inProgress() {
return _inProgress;
},
get parameterValidation() {
return _parameterValidation;
}
};
}
function Enum() {}
function ErrorPaneViewModel(viewer) {
var _showErrorsPane = ko.computed(function() {
return viewer.errors().length > 0;
}), _showExtendedErrorInfo = ko.observable(!1), _lastError = ko.computed(function() {
var nerr = viewer.errors().length;
return nerr > 0 ? viewer.errors()[nerr - 1] : "";
});
return _showErrorsPane.subscribe(function(newValue) {
newValue || _showExtendedErrorInfo(!1);
}), {
get visible() {
return _showErrorsPane;
},
get lastError() {
return _lastError;
},
get showErrorInfo() {
return _showExtendedErrorInfo;
},
get errors() {
return viewer.errors;
},
get showOnlyLastError() {
return viewer.showOnlyLastError;
},
dismissErrors: function() {
_showExtendedErrorInfo(!1), viewer.clearErrors();
}
};
}
function InteractivityProcessor(services) {
function processActions(pageContent) {
for (var count = onPageProcessed.length; onPageProcessed.length > 0; ) {
var handler = onPageProcessed.pop();
$.isFunction(handler) && handler(pageContent);
}
return count - onPageProcessed.length;
}
function processToolTips() {
var verticalPositionDelta = 2, horizontalPositionDelta = 15, textTooltip = "", jqTooltip = $("div.ar-chart-tooltip"), allAreas = $("area[data-point-tooltip]");
if (allAreas.length > 0) {
0 === jqTooltip.length && (jqTooltip = $(textTooltip).appendTo($("body")));
var tooltips = {};
allAreas.each(function() {
var contentTooltip = $(""), categoryId = $(this).attr("data-category-id"), categoryLabel = $(this).attr("data-category-label");
categoryLabel && contentTooltip.append($("").text(categoryLabel).addClass("tooltip-label")),
$("area[data-category-id=" + categoryId + "]").each(function() {
var sameElements = contentTooltip.has("div[data-series-id=" + $(this).attr("data-series-id") + "]:contains(" + $(this).attr("data-point-tooltip") + ")");
0 === sameElements.length && contentTooltip.append($("").text($(this).attr("data-point-tooltip")).attr("data-series-id", $(this).attr("data-series-id")));
}), tooltips[categoryId] || (tooltips[categoryId] = contentTooltip);
}), $("#reportContainer, #continuousView").on("mouseenter", "area[data-point-tooltip]", function(e) {
e.stopPropagation();
var currentCategoryId = $(this).attr("data-category-id"), content = tooltips[currentCategoryId];
return jqTooltip.text(""), content ? void jqTooltip.append(content) : void jqTooltip.hide();
}), $("body").on("mousemove", "area[data-point-tooltip]", function(e) {
e.stopPropagation(), jqTooltip.show(), jqTooltip.css({
top: e.pageY + verticalPositionDelta,
left: e.pageX + horizontalPositionDelta
});
}), $("body").on("mouseover", function() {
jqTooltip.text("").hide();
});
}
}
function processActionItem(actionItem, pageContent) {
function pageBookmarkCustomHandler(item) {
onPageProcessed.push(function(content) {
if (viewer.pageDisplayMode() === PageDisplayMode.single) {
var elementToScroll = $(content).find("#" + item.target).first();
if (null !== elementToScroll) {
var viewerOffset = $(content).offset(), elementOffset = $(elementToScroll).offset(), elementToViewerOffset = {
top: elementOffset.top - viewerOffset.top,
left: elementOffset.left - viewerOffset.left
};
viewer.location(elementToViewerOffset);
}
} else goToElementAfterLoadedPage(item);
}), viewer.pageDisplayMode() === PageDisplayMode.single ? viewer.pageIndex() === item.pageNumber - 1 ? processActions(pageContent) : viewer.pageIndex(item.pageNumber - 1) : processActions(pageContent);
}
function goToElementAfterLoadedPage(item) {
var timerId = setInterval(function() {
viewer.pageIndex(item.pageNumber - 1);
var pageContainer = $("#continuousView").find("#page" + (item.pageNumber - 1)), element = $(pageContainer).find("#" + item.target).first();
if (null !== element && element.length > 0) {
clearInterval(timerId);
var viewerOffset = $(pageContainer).offset(), elementOffset = $(element).offset(), elementToViewerOffset = {
top: elementOffset.top - viewerOffset.top + pageContainer[0].offsetHeight * (item.pageNumber - 1),
left: elementOffset.left - viewerOffset.left
};
viewer.location(elementToViewerOffset);
}
}, 200);
}
function sectionBookmarkCustomHandler(item) {
function traverseTocTree(node, path, originalPromise) {
function traverseKids(kids, kidLabel, restPath) {
for (var i = 0; i < kids.length; i++) {
var kid = kids[i];
if (kid.name === kidLabel) return restPath.length > 0 ? traverseTocTree(kid, restPath, d) : d.resolve(kid);
}
return null;
}
var d = null === originalPromise || void 0 === originalPromise ? $.Deferred() : originalPromise;
if (null === node || void 0 === node) return d.resolve(null);
var label = path[0];
return void 0 !== node.name && node.name === label ? d.resolve(node) : (void 0 !== node.kids && (ko.isObservable(node.kids) ? ko.waitFor(node.kids, function(k) {
return k.length > 0;
}, function(newKids) {
traverseKids(newKids, label, path.slice(1, path.length));
}) : traverseKids(node.kids, label, path.slice(1, path.length))), d.promise());
}
traverseTocTree(tocPane.root(), item.label.split("\\")).done(function(node) {
null !== node && tocPane.navigate(node);
});
}
function getClickHandler(item) {
return function() {
var actionHandler = services.action;
if (jQuery.isFunction(actionHandler) && !actionHandler(item.actionType, item)) return !1;
switch (item.actionType) {
case ActionType.hyperlink:
window.open(item.url, "_blank");
break;
case ActionType.bookmark:
item.reportType === ReportType.pageReport ? pageBookmarkCustomHandler(item) : item.reportType === ReportType.sectionReport && sectionBookmarkCustomHandler(item);
break;
case ActionType.drillthrough:
viewer.drillthrough(item.drillthroughLink);
break;
case ActionType.toggle:
viewer.toggle(item.toggleInfo);
}
return !1;
};
}
var itemElement = $(actionItem.element);
itemElement.click(getClickHandler(actionItem));
}
var viewer = services.viewer, tocPane = services.tocPane, onPageProcessed = [];
return {
processActions: processActions,
processActionItem: processActionItem,
processToolTips: processToolTips
};
}
function ParameterModel(p) {
function isNullable() {
return _nullable;
}
function getValue() {
if (_state == ParameterState.HasOutstandingDependencies) return null;
if (null !== _value && void 0 !== _value) return _value;
var value;
return getValues() && (value = getValues()[0]) ? value.value : _multivalue ? void 0 : null;
}
function setValue(newValue) {
_value = newValue, _values = null, updateState();
}
function updateState() {
var value = getValue();
(isNullable() || null !== value || _multivalue) && void 0 !== value || (_state = ParameterState.ExpectValue);
}
function getValues() {
return _state == ParameterState.HasOutstandingDependencies ? [] : _values;
}
function setValues(newValues) {
_values = newValues, _value = void 0, updateState();
}
var _nullable = p.nullable, _value = p.value, _state = p.state, _values = p.values, _name = p.name, _hidden = p.hidden, _availableValues = p.availableValues, _prompt = p.prompt, _multiline = p.multiline, _multivalue = p.multivalue, _allowEmpty = p.allowEmpty, _dateOnly = p.dateOnly, _type = p.type, _promptUser = p.promptUser, _definesValidValues = p.definesValidValues, _selectAllEnabled = p.selectAllEnabled, _dateDomain = p.dateDomain, _error = p.error, _editor = p.editor, _dependantParameterNames = p.dependantParameterNames, _hasDependantParameters = p.hasDependantParameters;
return {
updateState: updateState,
get name() {
return _name;
},
get hidden() {
return _hidden;
},
get value() {
return getValue();
},
set value(newValue) {
setValue(newValue);
},
get values() {
return getValues();
},
set values(newValues) {
setValues(newValues);
},
get availableValues() {
return _availableValues;
},
get prompt() {
return _prompt;
},
get nullable() {
return isNullable();
},
get multiline() {
return _multiline;
},
get multivalue() {
return _multivalue;
},
get allowEmpty() {
return _allowEmpty;
},
get dateOnly() {
return _dateOnly;
},
get type() {
return _type;
},
get state() {
return _state;
},
get promptUser() {
return _promptUser;
},
get definesValidValues() {
return _definesValidValues;
},
get selectAllEnabled() {
return _selectAllEnabled;
},
get dateDomain() {
return _dateDomain;
},
get error() {
return _error;
},
get editor() {
return _editor;
},
get dependantParameterNames() {
return _dependantParameterNames;
},
get hasDependantParameters() {
return !!this.dependantParameterNames && this.dependantParameterNames.length > 0 || !!_hasDependantParameters;
},
setClientValidationFailed: function(message) {
_state = ParameterState.ClientValidationFailed, _error = message;
},
setOk: function() {
_state = ParameterState.Ok, _error = "";
}
};
}
function ParameterPaneViewModel(services, viewer) {
function runReport() {
refreshAfterValidation = !1, allowRefresh(!1), viewer.report().run();
}
function refreshReport() {
if (viewer.report().setHideParameterErrors(!1), parameterViewModels().forEach(function(pm) {
pm.enabled() && (pm.$updateValuesFromModel(!0, !0), pm.validateValue());
}), validating) refreshAfterValidation = !0; else try {
runReport();
} catch (err) {
if (!parameterViewModels().some(function(pm) {
return !pm.enabled() || "" !== pm.errorText();
})) throw err;
} finally {
allowRefresh(!0);
}
}
if (!viewer) throw new ReferenceError("viewer is required here!");
var _allViewsValid = ko.observable(!0), parameterViewModels = ko.observable([]), areAllParametersValid = ko.computed(function() {
return viewer.report().allParametersValid() && _allViewsValid();
});
$(document).bind("documentStateChanged", function() {
allowRefresh(!0);
}), viewer.errors.subscribe(function() {
allowRefresh(!0);
});
var allowRefresh = ko.observable(!0), parameterPaneVisible = ko.computed({
read: function() {
return viewer.sidebarState() === SidebarState.Parameters;
},
write: function(value) {
viewer.sidebarState(value ? SidebarState.Parameters : SidebarState.Hidden);
}
});
viewer.report.subscribe(function() {
parameterViewModels([]);
});
var validating = !1, refreshAfterValidation = !1;
ko.computed(function() {
return viewer.report().parameters();
}).subscribe(function(params) {
function updateIsValid(_) {
_allViewsValid(parameterViewModels().every(function(v) {
return 0 === v.errorText().length;
}));
}
function parameterChanged(p) {
validating = !0, viewer.report().validateParameter({
multivalue: p.multivalue,
name: p.name,
value: p.value,
values: p.values
}).done(function() {
areAllParametersValid() && refreshAfterValidation && runReport();
}).always(function() {
validating = !1;
});
}
if (0 === parameterViewModels().length) {
var paramModels = params.filter(function(p) {
return void 0 === p.promptUser || p.promptUser;
}).map(function(p) {
return ParameterViewModel(services, p, parameterChanged, updateIsValid, viewer.report());
});
parameterViewModels(paramModels);
} else parameterViewModels().forEach(function(paramModel) {
var updated = params.filter(function(pp) {
return pp.name == paramModel.name;
});
1 == updated.length && paramModel.$update(updated[0]);
});
});
var _canRefresh = ko.computed(function() {
return !viewer.report().parameterValidation() && allowRefresh();
});
return {
visible: parameterPaneVisible,
isValid: areAllParametersValid,
refreshReport: {
exec: refreshReport,
enabled: _canRefresh
},
refreshReportAndClose: {
exec: function() {
viewer.sidebarState(SidebarState.Hidden), refreshReport();
},
enabled: _canRefresh
},
parameters: parameterViewModels
};
}
function ParameterViewModel(services, param, parameterChanged, parameterUpdateIsValid, reportModel) {
function equals(v1, v2) {
return _parameterModel.type === ParameterType.DateTime ? v1 - v2 === 0 : v1 === v2;
}
function isNull(value) {
return null === value;
}
function isUndefined(value) {
return void 0 === value;
}
function updateEnabled() {
_enabled(_parameterModel.state != ParameterState.HasOutstandingDependencies && !reportModel.parameterValidation());
}
function setIsValueNull(value) {
_isValueNull(_nullCheckboxValue && _parameterModel.nullable && null === value);
}
function updateParameter(p) {
function createOptionViewModel(availableValue) {
var option = ParameterOptionViewModel(availableValue);
return option.selected.subscribe(function() {
onSelectedChanged(option);
}), option;
}
if (_parameterModel = p, _value(p.value), setIsValueNull(p.value), updateEnabled(),
_editor(p.editor), _values(_value() === ParameterSpecialValue.SelectAll ? [ {
value: ParameterSpecialValue.SelectAll,
label: getResourceString("selectall")
} ] : p.values), p.multivalue && p.state != ParameterState.HasOutstandingDependencies && (p.setOk(),
p.updateState()), _errorText(function(state, error) {
var errorText = "";
switch (state) {
case ParameterState.Ok:
return "";
case ParameterState.ExpectValue:
errorText = getResourceString("error.ExpectValue");
break;
case ParameterState.ValidationFailed:
errorText = getResourceString("error.ValidationFailed");
break;
case ParameterState.HasOutstandingDependencies:
return getResourceString("error.HasOutstandingDependencies");
case ParameterState.ClientValidationFailed:
return error;
}
return [ errorText, error ].filter(identity).join(": ");
}(p.state, p.error)), "" !== _errorText() || _parameterModel.nullable || null !== _value() || _parameterModel.multivalue || _errorText(getResourceString("error.ExpectValue")),
p.availableValues) {
var optionModels = p.availableValues.map(function(av) {
var selected = _parameterModel.multivalue ? p.values.some(function(v) {
return equals(v.value, av.value) && equals(v.index, av.index);
}) : equals(av.value, p.value);
return createOptionViewModel({
value: av.value,
label: av.label,
index: av.index,
selected: selected
});
});
if (_parameterModel.nullable && !_parameterModel.multivalue) {
var nullLabel = getResourceString("null");
optionModels.push(createOptionViewModel({
value: null,
label: nullLabel,
index: 0,
selected: _isValueNull()
}));
}
if (_parameterModel.selectAllEnabled) {
var label = getResourceString("selectall");
optionModels.splice(0, 0, createOptionViewModel({
value: ParameterSpecialValue.SelectAll,
label: label,
selected: p.value === ParameterSpecialValue.SelectAll
}));
}
_options(optionModels), updateEnabled();
}
}
function isValidDate(d) {
return Date.isDate(d);
}
function convertToTyped(value, type) {
if (value = isNull(value) ? null : isUndefined(value) ? void 0 : value, _parameterModel.multivalue && null === value) return null;
switch (type) {
case ParameterType.Bool:
value = convertToBool(value);
break;
case ParameterType.Int:
value = convertToInt(value);
break;
case ParameterType.Float:
value = convertToFloat(value);
break;
case ParameterType.DateTime:
value = convertToDateTime(value);
break;
case ParameterType.String:
value = convertToString(value);
break;
default:
if (null === value && !_parameterModel.nullable && !_parameterModel.multivalue || "" === value && !_parameterModel.allowEmpty) throw new Error(getResourceString("error.ExpectValue"));
}
return value;
}
function convertToBool(value) {
if (null === value) {
if (_isValueNull()) return null;
throw new Error(getResourceString("error.ExpectBooleanValue"));
}
if ("boolean" == typeof value) return value;
if ("true" == value.toLowerCase()) return !0;
if ("false" == value.toLowerCase()) return !1;
throw new Error(getResourceString("error.ExpectBooleanValue"));
}
function convertToInt(value) {
if (null === value) {
if (_isValueNull()) return null;
throw new Error(getResourceString("error.ExpectNumericValue"));
}
if (value = parseInt(value, 10), isNaN(value)) throw new Error(getResourceString("error.ExpectNumericValue"));
return value;
}
function convertToFloat(value) {
if (null === value) {
if (_isValueNull()) return null;
throw new Error(getResourceString("error.ExpectNumericValue"));
}
if ("" === value) return null;
value.replace && (value = value.replace(",", "."));
var notFiniteNumber = isNaN(value) || parseFloat(value) == 1 / 0 || parseFloat(value) == -(1 / 0);
if (notFiniteNumber) throw new Error(getResourceString("error.ExpectNumericValue"));
return value = parseFloat(value);
}
function convertToDateTime(value) {
if (null === value) {
if (_isValueNull()) return null;
throw new Error(getResourceString("error.ExpectDateValue"));
}
if (value = checkDateFormatYearOnly(value) ? new Date(parseInt(value), 0, 1) : checkDateFormat(value) ? new Date(value.replace(/-/g, "/").replace(/T/g, " ")) : new Date(value),
!isValidDate(value)) throw new Error(getResourceString("error.ExpectDateValue"));
return value;
}
function convertToString(value) {
if (void 0 === value && (value = ""), !_nullCheckboxValue && null === value) {
if (!_parameterModel.nullable) throw new Error(getResourceString("error.ExpectNotEmptyValue"));
value = "";
}
if ("" === value && !_parameterModel.allowEmpty) throw new Error(getResourceString("error.ExpectNotEmptyValue"));
return value;
}
function validateAndConvertValue(value) {
_hideError = !1, value = isNull(value) ? null : isUndefined(value) ? void 0 : value;
try {
if (void 0 !== _parameterModel.availableValues && _parameterModel.availableValues.length > 0 && !isPredefinedValue(value)) {
if (!_parameterModel.nullable && null === value) throw new Error(getResourceString("error.ExpectNotNullValue"));
throw new Error(getResourceString("error.ExpectValueValidationFailed"));
}
ParameterSpecialValue.notContains(value) && (value = convertToTyped(value, _parameterModel.type)),
_parameterModel.setOk();
} catch (e) {
_parameterModel.setClientValidationFailed(e.message);
}
return value;
}
function isPredefinedValue(value) {
function AsString(obj) {
return null === obj || void 0 === obj ? "" : obj.toString();
}
if (value = isNull(value) ? null : isUndefined(value) ? void 0 : value, void 0 === _parameterModel.availableValues) return !1;
if (_parameterModel.availableValues.map(function(v) {
return AsString(v.value);
}).indexOf(AsString(value)) !== -1) return !0;
if (_parameterModel.multivalue) {
if (null === value) return !0;
if (void 0 === value) return !1;
} else if (_parameterModel.availableValues.length > 0 && _parameterModel.nullable && null === value) return !0;
return !!(_parameterModel.availableValues.length > 0 && _parameterModel.selectAllEnabled && value === ParameterSpecialValue.SelectAll);
}
function updateValue(newValue) {
newValue = isNull(newValue) ? null : isUndefined(newValue) ? void 0 : newValue,
setIsValueNull(newValue), _parameterModel.type == ParameterType.DateTime & (checkDateFormatYearOnly(newValue) | checkDateFormat(newValue)) & !checkYear(newValue) || (newValue = validateAndConvertValue(newValue),
_value(newValue), parameterChanged({
name: _parameterModel.name,
value: newValue
}));
}
function updateValues(newValues) {
try {
newValues = newValues.map(function(value) {
var resultValue = value.value;
return ParameterSpecialValue.notContains(resultValue) && (resultValue = convertToTyped(resultValue, _parameterModel.type)),
{
label: value.label,
value: resultValue,
index: value.index
};
}), _parameterModel.setOk();
} catch (e) {
_parameterModel.setClientValidationFailed(e.message);
}
newValues != _values && (_hideError = !1), _values(newValues), parameterChanged({
multivalue: !0,
name: _parameterModel.name,
values: newValues,
value: _parameterModel.multivalue ? void 0 : null
});
}
function onSelectedChanged(option) {
_multivalueUpdated = !1, option.selected() && (option.value == ParameterSpecialValue.SelectAll ? _options().filter(function(o) {
return o != option;
}).forEach(function(o) {
o.selected(!1);
}) : _parameterModel.selectAllEnabled && _options().filter(function(o) {
return o.value == ParameterSpecialValue.SelectAll;
}).forEach(function(o) {
o.selected(!1);
}));
}
function checkDateFormat(value) {
return null !== value && /^[\d]{4}-[\d]{2}(-[\d]{2})?((T| )[\d]{2}:[\d]{2}(:[\d]{2})?)?$/.test(value);
}
function checkDateFormatYearOnly(value) {
return null !== value && /^[\d]{4}$/.test(value);
}
function checkYear(value) {
if (null !== value && void 0 !== value) {
var year = value.toString().split("-")[0];
return year > 1e3 && year < 1e4;
}
return !1;
}
var _parameterModel = param, _value = _parameterModel.multivalue ? ko.observable(void 0) : ko.observable(null), _isValueNull = ko.observable(!1), _enabled = ko.observable(!1), _errorText = ko.observable(""), _nullCheckboxValue = _parameterModel.nullable, _hideError = !0, _multivalueUpdated = !1, _options = ko.observable([]), _values = ko.observable([]), _editor = ko.observable(ParameterEditorType.SingleValue), getResourceString = services.resourceManager && services.resourceManager.get || identity;
reportModel.parameterValidation.subscribe(function() {
updateEnabled();
}), _errorText.subscribe(function(v) {
parameterUpdateIsValid(0 === v.length);
});
var _dateTimePickerSuported, _isValueNullProperty = ko.computed({
read: _isValueNull,
write: function(v) {
_nullCheckboxValue = v, updateValue(v ? null : _value());
}
}), _valueProperty = ko.computed({
read: _value,
write: updateValue
}), _stringValueProperty = ko.computed({
read: function() {
function toDateString(dt) {
return _parameterModel.dateOnly ? dt.toLocaleDateString() : dt.toLocaleString();
}
return _editor() == ParameterEditorType.MultiValue ? _values().map(function(v) {
return v.label;
}).join(", ") : _editor() == ParameterEditorType.SelectOneFromMany ? _options().filter(function(o) {
return equals(o.value, _value());
}).map(function(v) {
return v.label;
}).join(", ") : null === _value() || void 0 === _value() ? "" : _parameterModel.type === ParameterType.DateTime && _value() instanceof Date ? toDateString(_value()) : _value().toString();
},
write: updateValue
}), _isDateTimePickedSupported = function() {
if (void 0 === _dateTimePickerSuported) {
var element = document.createElement("input");
element.setAttribute("type", "datetime-local"), _dateTimePickerSuported = "datetime-local" === element.type;
}
return _dateTimePickerSuported;
}, _datePickerValueProperty = ko.computed({
read: function() {
function toDateString(dt) {
function pad(v) {
return ("0" + v).right(2);
}
var dateTimeDelimiter = _isDateTimePickedSupported() ? "T" : " ", dateString = dt.getFullYear() + "-" + pad(dt.getMonth() + 1) + "-" + pad(dt.getDate());
return _parameterModel.dateOnly ? dateString : dateString + dateTimeDelimiter + pad(dt.getHours()) + ":" + pad(dt.getMinutes()) + ":" + pad(dt.getSeconds());
}
return null !== _value() && void 0 !== _value() && _parameterModel.type === ParameterType.DateTime && _value() instanceof Date ? toDateString(_value()) : "";
},
write: updateValue
}), _displayValueProperty = ko.computed({
read: function() {
return _parameterModel.multivalue ? 0 === _values().length ? getResourceString("enterValue") : _stringValueProperty() : _parameterModel.nullable ? null === _value() ? getResourceString("null") : _stringValueProperty() : null === _value() || void 0 === _value() ? getResourceString("enterValue") : _stringValueProperty();
}
});
return updateParameter(_parameterModel), {
get prompt() {
return _parameterModel.prompt;
},
get nullable() {
return _parameterModel.nullable;
},
get type() {
return _parameterModel.type;
},
get name() {
return _parameterModel.name;
},
get editor() {
return _editor;
},
get dateOnly() {
return _parameterModel.dateOnly;
},
get enabled() {
return _enabled;
},
get isValueNull() {
return _isValueNullProperty;
},
get errorText() {
return reportModel.hideParameterErrors && _hideError && _errorText(""), _errorText;
},
get errorHidden() {
return reportModel.hideParameterErrors && _hideError;
},
get value() {
return _valueProperty;
},
get stringValue() {
return _stringValueProperty;
},
get datePickerValue() {
return _datePickerValueProperty;
},
get displayValue() {
return _displayValueProperty;
},
get options() {
return _options;
},
validateValue: function() {
validateAndConvertValue(_value()), updateParameter(_parameterModel);
},
clearOptions: function() {
_options().forEach(function(o) {
o.selected(!1);
}), updateValues([]);
},
$update: updateParameter,
$updateValuesFromModel: function(apply, refresh) {
if ((!_multivalueUpdated || !refresh) && (_multivalueUpdated = !0, _parameterModel.multivalue && apply)) {
var values = _options().filter(function(v) {
return v.selected();
}).map(function(v) {
return {
value: v.value,
label: v.label,
index: v.index
};
});
updateValues(values);
}
}
};
}
function ParameterOptionViewModel(availableValue) {
var _selected = ko.observable(!!availableValue.selected);
return {
get label() {
return availableValue.label || String(availableValue.value);
},
get value() {
return availableValue.value;
},
get selected() {
return _selected;
},
get index() {
return availableValue.index;
}
};
}
function parseUri(str) {
for (var o = parseUri.options, m = o.parser[o.strictMode ? "strict" : "loose"].exec(str), uri = {}, i = 14; i--; ) uri[o.key[i]] = m[i] || "";
return uri[o.q.name] = {}, uri[o.key[12]].replace(o.q.parser, function(match, first, second) {
first && (uri[o.q.name][first] = second);
}), uri;
}
function PrintingService(resourceManager, browserSpecific) {
function printImpl(documentModel, callExportCallback) {
var settings = {
printing: !0
};
return documentModel.state() == DocumentState.cancelled && (settings.PreviewPages = documentModel.pageCount()),
documentModel.export(ExportType.Pdf, settings).done(function(exportUrl) {
function useFrame(exportUrl) {
var printingFrameId = "gc-viewer-print-frame", iframe = document.getElementById("#" + printingFrameId);
iframe || (iframe = document.createElement("iframe"), iframe.setAttribute("id", printingFrameId),
document.body.appendChild(iframe)), iframe.setAttribute("src", encodeURI(exportUrl));
}
function openInWindow(exportUrl) {
var printWindow = null;
try {
printWindow = window.open(exportUrl, "_blank"), printWindow && printWindow.focus();
} catch (e) {}
return !!printWindow;
}
if (exportUrl) return browserSpecific.SupportPdfFrame ? void useFrame(exportUrl) : void (openInWindow(exportUrl) || callExportCallback(exportUrl + "&Attachment=1", function(url) {
window.location = url;
}));
});
}
return {
print: function(documentModel, callExportCallback) {
return printImpl(documentModel, callExportCallback);
}
};
}
function convertPropertiesToJson(input) {
function unescape(s) {
return s = s.replace(/\\u(\d+)/g, function(match, ns) {
return String.fromCharCode(parseInt(ns, 10));
}), s = s.replace(/\\(.)/g, "all.js"), s.endsWith("\\") && (s = s.substr(0, s.length - 1)),
s;
}
function parse(s) {
var m = s.match(/((\\.|[^:=])+)[:=](.*)/);
return m ? {
key: unescape(m[1].trim()),
value: unescape(m[3].trim())
} : null;
}
if ("string" != typeof input || !input) return {};
for (var lines = input.split(/\r?\n/g), output = {}, i = 0; i < lines.length; i++) {
var l = lines[i].trim();
if (l && !l.startsWith("#") && !l.startsWith("!")) {
var p = parse(l);
if (p) {
for (;l.endsWith("\\") && i + 1 < lines.length; ) l = lines[++i].trim(), p.value += unescape(l);
output[p.key] = p.value;
}
}
}
return output;
}
function ReportModel(reportService, reportInfo, busy, resourceManager, renderMode, previewPages) {
function setHideParameterErrors(value) {
_hideParameterErrors = value;
}
function getReportName(reportId) {
var format = reportId.split(".").pop();
switch (format) {
case "rpx":
case "rdlx":
case "rdl":
case "rdf":
return reportId.replace(/\.[^.]+$/, "");
default:
return format;
}
}
function dispose(async) {
if (_disposed = !0, _reportToken) {
var token = _reportToken;
_reportToken = null, _reportType(ReportType.unknown), _params([]), _state(ReportModelState.closed),
reportService.close(token, async);
}
}
function open(manualRun) {
reportInfo.id && (_reportToken = null, _reportType(ReportType.unknown), _busy(!0),
reportService.open(reportInfo.id, reportInfo.parameters || []).done(function(rpt) {
_reportToken = rpt.token, _reportType(rpt.reportType), _autoRun(!!rpt.autoRun),
rpt.isChangeRenderModeSupported.done(function(val) {
_isChangeRenderModeSupported(val), _isChangeRenderModeSupported() || _renderModeState("Paginated");
}), _params(reportInfo.snapshotId ? [] : rpt.parameters.map(function(serviceParameter) {
return ParameterModel(serviceParameter);
}) || []), keepAlive(), _state(ReportModelState.open), !rpt.autoRun || !_allParametersValid() || manualRun && _hasPromptParams() || run(),
_disposed && dispose(!0);
}).fail(failHandler).always(function() {
(!_autoRun() || !_allParametersValid() || _hasPromptParams() && manualRun) && _busy(!1);
}));
}
function keepAlive() {
_reportToken && reportService.ping(_reportToken).done(function(shouldContinue) {
shouldContinue && setTimeout(function() {
keepAlive();
}, pingTimeout);
});
}
function failHandler() {
var error = resolveErrorMessage(arguments, SR);
_busy(!1), _state(ReportModelState.error), raiseError(error);
}
function raiseError(error) {
$report.trigger("error", error);
}
function subscribeFirstPageLoaded(docModel) {
docModel && (ko.waitFor(docModel.pageCount, function(pageCount) {
return pageCount > 0;
}, function() {
$report.trigger("firstPageLoaded"), _busy(!1);
}), ko.waitFor(docModel.state, function(state) {
return state == DocumentState.completed;
}, function() {
_busy(!1);
}));
}
function subscribeTogglePageLoaded(docModel, index) {
docModel && (ko.waitFor(docModel.pageCount, function(pageCount) {
return pageCount > index;
}, function() {
$report.trigger("togglePageLoaded"), _busy(!1);
}), ko.waitFor(docModel.state, function(state) {
return state == DocumentState.completed;
}, function() {
_busy(!1);
}));
}
function run(ignorePreviewPages) {
if (!_reportToken) throw new Error("Report is not opened!");
if (!_allParametersValid()) throw new Error("Invalid parameters!");
return ignorePreviewPages && (_settings.PreviewPages = 0), validateParameters(_params()).done(function() {
var allParametersOk = _params().every(function(p) {
return p.state == ParameterState.Ok;
});
return allParametersOk ? (_busy(!0), reportService.run(_reportToken, _params(), _settings, reportInfo.snapshotId).then(function(d) {
_state(ReportModelState.documentReady);
var dm = DocumentModel(reportService, d, _reportType(), resourceManager);
subscribeFirstPageLoaded(dm), $report.trigger("documentReady", dm);
}).fail(failHandler)) : $.Deferred().resolve();
});
}
function validateParameters(parameters, dependantNames) {
return parameters && parameters.length > 0 ? (_parameterValidation(!0), reportService.validateParameters(_reportToken, parameters, dependantNames).then(function(newParameters) {
_params(newParameters.map(function(serviceParameter) {
return ParameterModel(serviceParameter);
}));
}).fail(failHandler).always(function() {
_parameterValidation(!1);
})) : $.Deferred().resolve();
}
function validateParameter(parameter) {
var parameterFromModel = _params().filter(function(p) {
return p.name == parameter.name;
})[0];
if (parameterFromModel.hasDependantParameters) {
if (reportService.validateParameterSupported()) return reportService.validateParameter(_reportToken, parameter).then(function(updated) {
var newParameters = _params().map(function(parameterModel) {
var f = updated.filter(function(u) {
return u.name == parameterModel.name;
});
return 1 == f.length ? ParameterModel(f[0]) : parameterModel;
});
_params(newParameters);
}).fail(failHandler);
var parameters = _params().map(function(p) {
return p.name == parameter.name ? parameter : p;
});
return validateParameters(parameters, parameterFromModel.dependantParameterNames);
}
return parameter.multivalue ? parameterFromModel.values = parameter.values : parameterFromModel.value = parameter.value,
_params(_params()), $.Deferred().resolve();
}
function drillthrough(drillthroughLink) {
_busy(!0);
var settings = reportInfo.settings || {};
return settings.RenderMode || (settings.RenderMode = _renderModeState()), reportService.drillthrough(_reportToken, drillthroughLink, settings).then(function(result) {
var parameterModels = result.parameters.map(function(serviceParameter) {
var parameterModel = ParameterModel(serviceParameter);
return parameterModel.setOk(), parameterModel.updateState(), parameterModel;
}) || [], child = ReportModel(reportService, {
token: result.reportToken,
parameters: parameterModels,
docToken: result.documentToken,
reportType: ReportType.pageReport,
settings: settings
}, !0);
child.renderModeState(settings.RenderMode), result.isChangeRenderModeSupported.done(function(result) {
child.isChangeRenderModeSupported(result);
}), child.keepAlive();
var dm = result.documentToken ? DocumentModel(reportService, result.documentToken, ReportType.pageReport, resourceManager) : null;
return child.subscribeFirstPageLoaded(dm), {
report: child,
document: dm
};
}).fail(failHandler).always(function() {
_busy(!1);
});
}
function toggle(toggleInfo, currentPageIndex) {
_busy(!0);
var pageIndex = currentPageIndex;
return reportService.toggle(_reportToken, toggleInfo, _settings).then(function(info) {
_state(ReportModelState.documentReady);
var dm = DocumentModel(reportService, info.url, _reportType(), resourceManager);
return subscribeTogglePageLoaded(dm, pageIndex), $report.trigger("documentReady", dm),
info;
}).fail(failHandler).always(function() {
_busy(!1);
});
}
if (!reportService) throw new ReferenceError("ReportService is required here!");
reportInfo = reportInfo || {};
var _reportName = reportInfo.id ? getReportName(reportInfo.id) : "", pingTimeout = 6e4, SR = resourceManager && $.isFunction(resourceManager.get) ? resourceManager.get : identity, _busy = ko.observable(void 0 !== busy && busy), _parameterValidation = ko.observable(!1), _state = ko.observable(ReportModelState.noReport), _autoRun = ko.observable(!1), _reportToken = null, _params = ko.observable([]), _settings = JSON.parse(JSON.stringify(reportInfo.settings || {}));
"Galley" == renderMode ? _settings.RenderMode = renderMode : _settings.RenderMode = "Paginated",
_settings.PreviewPages = previewPages;
var _renderModeState = ko.observable(_settings.RenderMode);
_renderModeState.subscribe(function(newValue) {
_settings.RenderMode = newValue;
});
var _isChangeRenderModeSupported = ko.observable(!1), _allParametersValid = ko.computed(function() {
var parameters = _params();
return parameters.every(function(p) {
return p.state == ParameterState.Ok;
});
}), _hasPromptParams = ko.computed(function() {
var parameters = _params();
return parameters.filter(function(p) {
return void 0 === p.promptUser || p.promptUser;
}).length > 0;
}), _reportType = ko.observable(ReportType.unknown), _disposed = !1, _hideParameterErrors = !0, report = {
get reportType() {
return _reportType();
},
get state() {
return _state;
},
get busy() {
return _busy;
},
get parameterValidation() {
return _parameterValidation;
},
get parameters() {
return _params;
},
get hasPromptParameters() {
return _hasPromptParams;
},
get allParametersValid() {
return _allParametersValid;
},
get hideParameterErrors() {
return _hideParameterErrors;
},
get reportName() {
return _reportName;
},
setHideParameterErrors: setHideParameterErrors,
validateParameter: validateParameter,
subscribeFirstPageLoaded: subscribeFirstPageLoaded,
open: open,
run: run,
renderMode: function(mode) {
_renderModeState(mode), run();
},
renderModeState: _renderModeState,
isChangeRenderModeSupported: _isChangeRenderModeSupported,
dispose: dispose,
drillthrough: drillthrough,
toggle: toggle,
keepAlive: keepAlive,
get autoRun() {
return _autoRun;
}
}, $report = $(report);
return reportInfo.id ? (_reportToken = null, _params([]), _reportType(ReportType.unknown),
_state(ReportModelState.noReport)) : reportInfo.token && (_reportToken = reportInfo.token,
_reportType(reportInfo.reportType), _params(reportInfo.parameters.map(function(parameter) {
return ParameterModel(parameter);
})), _state(reportInfo.docToken ? ReportModelState.documentReady : ReportModelState.open)),
report;
}
function ReportServiceSelector(options, resourceManager) {
function realService() {
return impl || (impl = options.securityToken ? ArsReportService(options, resourceManager) : ArReportService(options, resourceManager)),
impl;
}
function delegate(method) {
return function() {
var args = arguments, service = realService();
return service[method].apply(service, args);
};
}
if (!options.url) throw new Error("options has no valid url");
var impl, api = {};
return [ "open", "close", "run", "cancelRendering", "validateParameters", "validateParameter", "getPageCount", "getPage", "getToc", "export", "search", "drillthrough", "toggle", "ping", "sendEmail", "canSendEmail", "getState", "setState", "getDelayedContent" ].forEach(function(method) {
"function" == typeof realService()[method] && (api[method] = delegate(method));
}), api.validateParameterSupported = function() {
return impl && impl.validateParameterSupported();
}, api;
}
function ResourceManager() {
var embedded = {}, resources = {};
embedded = {
sidebar: "Sidebar",
toc: "TOC",
tocfull: "Table of Contents",
firstPage: "First",
lastPage: "Last",
prevPage: "Prev",
nextPage: "Next",
print: "Print",
backToParent: "Back to Parent",
params: "Parameters",
saveas: "Save As...",
renderMode: "Change render mode",
Galley: "Galley",
Paginated: "Paginated",
SinglePageView: "Single page view",
ContinuousPageView: "Continuous page view",
CancelRendering: "Cancel Report",
RunFullReport: "Partial Data. Run Full Report",
PartialData: "This report is based on partial data",
pdfDocument: "PDF Document",
wordDocument: "Word Document",
docxDocument: "Word Document (.docx)",
imageFile: "Image File",
mhtDocument: "MHTML Web Archives",
excelWorkbook: "Excel Workbook",
csvFile: "CSV File",
yes: "Yes",
no: "No",
true: "True",
false: "False",
null: "Null",
"null-label": "Null value",
on: "On",
off: "Off",
selectall: "(select all)",
enterValue: "Enter value",
clearAllOptions: "Reset all",
blank: "Blank",
empty: "Empty",
back: "Back",
refreshReport: "View report",
search: "Search",
matchCase: "Match case",
wholePhrase: "Whole phrase",
more: "More...",
noResults: "No results",
clear: "Clear",
findLabel: "Find:",
email: "Email",
sendEmailTitle: "Send report by email",
sendEmailTo: "Send to",
emailSubject: "Subject",
emailMessage: "Message",
asLink: "As link",
asAttachment: "As attachment",
documentFormat: "Document format",
cancel: "Cancel",
sendEmail: "Send",
deliveryMethodCaption: "Delivery Method",
sendEmailPolicyName: "Emailing report",
"docformat.pdf": "PDF document",
"docformat.excel": "Excel file (xls)",
"docformat.mht": "MHT document",
"docformat.image": "Image file",
"docformat.word": "Word document",
"docformat.xml": "XML file (xml)",
"docformat.csv": "CSV file",
"errorPane.Details": "Show details",
"errorPane.HideDetails": "Hide details",
"errorPane.DismissAll": "Dismiss all",
"errorPane.ErrorPaneTitle": "An error(s) occurred",
"error.ExpectValue": "Value expected",
"error.ExpectNotEmptyValue": "Value expected: Blank value assigned to non-Blank parameter.",
"error.ExpectNotNullValue": "Value expected: null value assigned to non-Nullable parameter.",
"error.ExpectValueValidationFailed": "Value expected: Parameter value is not a valid value.",
"error.ValidationFailed": "Validation failed.",
"error.HasOutstandingDependencies": "Has outstanding dependencies.",
"error.ExpectNumericValue": "Not a numeric value.",
"error.ExpectBooleanValue": "Not a boolean value.",
"error.ExpectDateValue": "Invalid date value.",
"error.NotSupported": "Operation is not supported.",
"error.NotFound": "Not Found.",
"error.ReportNotFound": "Unable to open report '{0}'.",
"error.InvalidReportToken": "Invalid report token.",
"error.InvalidDocumentToken": "Invalid document token.",
"error.RequestFailed": "Your request failed.",
"error.RequestRejected": "Your request was rejected.",
"error.RequestCancelled": "Your request was cancelled.",
"error.InvalidRequestId": "Invalid request id.",
"error.InvalidDrillthroughLink": "Invalid drillthrough link '{0}'.",
"error.InvalidDrillthroughParameters": "Invalid drillthrough parameters.",
"error.InvalidResponse": "Invalid response.",
"error.InvalidParameters": "Invalid report parameters.",
"error.DocumentNotInCache": "The document is not present in the cache. Please refresh the report.",
"error.JsVersionsMismatch": "The version of GrapeCity.ActiveReports.Viewer.Html.js or GrapeCity.ActiveReports.Viewer.Html.min.js does not match the version of ActiveReports installed on the server side. Please update the javascript files in your application.",
"error.InvalidSharedDataSource": "The shared data source '{0}' cannot be loaded.",
"error.NoAgentsAvailable": "No licensed agents available to proceed the request.",
"error.LicenseExpired": "Your evaluation of ActiveReports 12 Server has expired so you cannot perform this action. Please contact our sales team ActiveReports.Sales@grapecity.com to extend your evaluation.",
"error.NoLicense": "You cannot perform this action due to licensing issues. Please contact our sales team ActiveReports.Sales@grapecity.com.",
"error.InternalServerError": "Internal Server error.",
"error.AccessDenied": "Access to the requested document is denied.",
"error.ReportError.DataSetNotSpecified": "DataSet name needs to be specified in the Fixed Page Layout settings.",
"error.ReportError.NoDataSets": "No data sets.",
"error.NoDataSets": "No data sets.",
"error.ReportError.DataSetNotFound": "A DataSet '{0}' referenced in the report could not be found.",
"error.ReportError.SubreportNotFound": "Unable to locate subreport '{0}'.",
"error.ReportError.NoMasterReport": "Unable to load the master report for the specified content report.",
"error.ReportError.UnableToCreateConnection": "Cannot connect to data source.",
"error.ReportError.JsonSchemaNotAvailableOrInvalid": "Json schema either not available or invalid.",
"error.InvalidEmailFormat": "Enter emails in correct format.",
"error.InvalidSmtpSettings": "SMTP settings are not provided.",
"error.InvalidDbEntity": "Database entity has invalid values.",
"error.NotificationUrlIsNotSet": "Can't create resource link: the notification link URL is not set.",
"error.ReportError.BlankValueAssignedToNonBlankParameter": "Blank value assigned to non-Blank parameter '{0}'.",
"error.ReportError.InvalidDataTypeForParameter": "Invalid data type for parameter '{0}'.",
"error.ReportError.NullValueAssignedToNonNullableParameter": "null value assigned to non-Nullable parameter '{0}'.",
"error.ReportError.ParameterValueIsNotValid": "Parameter '{0}' value is not a valid value.",
"error.IncorrectSmtpSettings": "The SMTP settings are incorrect."
};
var manager;
return manager = {
get: function(key, args) {
if (!key) return "";
var value = "";
return resources.hasOwnProperty(key) && (value = resources[key]), value = value || embedded[key] || "",
args && Array.isArray(args) && args.length > 0 && (value = value.replace(/\{([\d]+)\}/g, function(match, matchNumber) {
return void 0 !== args[parseInt(matchNumber)] ? args[parseInt(matchNumber)] : match;
})), value;
},
update: function(uri) {
return "string" == typeof uri && uri ? $.get(uri).then(function(text) {
return "string" == typeof text && (resources = convertPropertiesToJson(text), $(manager).trigger("updated"),
!0);
}) : $.Deferred(function(d) {
d.reject("Invalid uri.");
}).promise();
}
};
}
function SearchPaneViewModel(viewer, documentViewModel, maxSearchResults, pageElement) {
function _clear() {
_searchString(""), _matchCase(!1), _wholePhrase(!1), _lastSearchResult(null), _reset();
}
function _search() {
_lastSearchOptions = {
text: _searchString(),
matchCase: _matchCase(),
wholePhrase: _wholePhrase(),
maxSearchResults: maxSearchResults
}, _reset(), viewer.document().search(_lastSearchOptions).done(function(res) {
_hasMore(res.hasMore), _searchResults(res.matches), _isReady(!0);
});
}
function getOffsetRect(elem) {
var box = elem.getBoundingClientRect(), body = document.body, docElem = document.documentElement, scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop, scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft, clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0, top = box.top + scrollTop - clientTop, left = box.left + scrollLeft - clientLeft;
return {
top: Math.round(top),
left: Math.round(left)
};
}
function _navigate(searchResult) {
_lastSearchResult(searchResult), viewer.pageIndex(searchResult.page), navigateAfterLoadedPage(searchResult, viewer.pageDisplayMode() === PageDisplayMode.single ? singleViewNavigate : continuousViewNavigate);
}
function singleViewNavigate(searchResult, item, pageContainer) {
var locationSingle = searchResult.location || getItemLocation(item, pageContainer);
viewer.location({
left: locationSingle.left,
top: locationSingle.top
}), highlightSearchResult(locationSingle);
}
function continuousViewNavigate(searchResult, item, pageContainer) {
var locationContinuous = searchResult.location ? {
left: searchResult.location.left,
top: searchResult.location.top + documentViewModel.continuousPage.heightPage() * viewer.pageIndex(),
width: searchResult.location.width,
height: searchResult.location.height
} : getItemLocation(item, pageContainer);
viewer.location(locationContinuous), highlightSearchResult(locationContinuous);
}
function navigateAfterLoadedPage(searchResult, navigate) {
if (searchResult.location) navigate(searchResult); else var timerId = setInterval(function() {
var pageContainer = viewer.pageDisplayMode() === PageDisplayMode.continuous ? $("#continuousView").find("#page" + searchResult.page) : $("#singleView", pageElement), item = getTextElements(pageContainer, !1)[searchResult.idx];
void 0 !== item && (clearInterval(timerId), navigate(searchResult, item, pageContainer));
}, 200);
}
function getItemLocation(item, pageContainer) {
var location = {
left: 0,
top: 0,
width: 0,
height: 0
};
"TD" == item.parentElement.tagName && (item = item.parentElement);
var rect = getOffsetRect(item), containerRect = getOffsetRect(pageContainer[0]);
return rect.left && (location.left = rect.left - containerRect.left), rect.top && (location.top = rect.top - containerRect.top),
location.width = item.offsetWidth, location.height = item.offsetHeight, viewer.pageDisplayMode() === PageDisplayMode.continuous && (location.top += documentViewModel.continuousPage.heightPage() * viewer.pageIndex()),
location;
}
var _searchString = ko.observable(), _matchCase = ko.observable(!1), _wholePhrase = ko.observable(!1), _isReady = ko.observable(), _searchResults = ko.observableArray([]), _hasMore = ko.observable(), _searchEnabled = ko.computed(function() {
return _searchString() && viewer.document().state() !== DocumentState.init;
}), _lastSearchOptions = null, _found = ko.computed(function() {
return _isReady() && _searchResults().length > 0;
}), _highlightEnabled = ko.observable(!1), _highlightLeft = ko.observable(0), _highlightTop = ko.observable(0), _highlightWidth = ko.observable(0), _highlightHeight = ko.observable(0), _lastSearchResult = ko.observable(), _pagePadding = 5 * getDpi() / 72, _reset = function() {
_isReady(!1), _searchResults([]), _hasMore(!1), highlightSearchResult(!1);
};
viewer.document.subscribe(function() {
_clear();
}), ko.isObservable(viewer.pageIndex) && viewer.pageIndex.subscribe(function() {
viewer.pageDisplayMode() === PageDisplayMode.single && _highlightEnabled(!1);
}), documentViewModel.continuousPage.heightPage.subscribe(function() {
viewer.pageDisplayMode() === PageDisplayMode.continuous && null !== _lastSearchResult() && _lastSearchResult().page === viewer.pageIndex() && _navigate(_lastSearchResult());
}), viewer.pageDisplayMode.subscribe(function(mode) {
_highlightEnabled(!1), mode === PageDisplayMode.single && null !== _lastSearchResult() && _lastSearchResult().page === viewer.pageIndex() && _navigate(_lastSearchResult());
});
var highlightSearchResult = function(location) {
return location ? (_highlightLeft(_pagePadding + location.left + "px"), _highlightTop(_pagePadding + location.top + "px"),
_highlightWidth(location.width + "px"), _highlightHeight(location.height + "px"),
_highlightEnabled(!0), void 0) : void _highlightEnabled(!1);
}, searchVisible = ko.computed({
read: function() {
var visible = viewer.sidebarState() === SidebarState.Search;
return visible || highlightSearchResult(!1), visible;
},
write: function(value) {
viewer.sidebarState(value ? SidebarState.Search : SidebarState.Hidden);
}
});
return {
visible: searchVisible,
get searchString() {
return _searchString;
},
get searchResults() {
return _searchResults;
},
get isReady() {
return _isReady;
},
get matchCase() {
return _matchCase;
},
get wholePhrase() {
return _wholePhrase;
},
get hasMore() {
return _hasMore;
},
get found() {
return _found;
},
get highlightEnabled() {
return _highlightEnabled;
},
get highlightLeft() {
return _highlightLeft;
},
get highlightTop() {
return _highlightTop;
},
get highlightWidth() {
return _highlightWidth;
},
get highlightHeight() {
return _highlightHeight;
},
search: {
exec: _search,
enabled: _searchEnabled
},
keyPressHandler: function(data, event) {
return 13 == event.keyCode && _searchEnabled() && _search(), !0;
},
navigate: function(searchResult) {
_navigate(searchResult);
},
navigateAndClose: function(searchResult) {
viewer.sidebarState(SidebarState.Hidden), _navigate(searchResult);
},
more: function() {
_lastSearchOptions.from = _searchResults()[_searchResults().length - 1], viewer.document().search(_lastSearchOptions).done(function(res) {
_hasMore(res.hasMore), $.each(res.matches, function(k, v) {
_searchResults.push(v);
});
});
},
clear: {
exec: _clear
}
};
}
function sendEmailDialogViewModel(services, viewer) {
function clear() {
_errorText(""), errorResponse(""), distribution.To(""), distribution.MessageBody(""),
distribution.Subject(""), distribution.asCheck("asattachment"), documentFormat("PDF");
}
var _errorText = ko.observable(""), errorResponse = ko.observable(""), getResourceString = services.resourceManager && services.resourceManager.get || identity, distribution = {
To: ko.observable(""),
Subject: ko.observable(),
MessageBody: ko.observable(),
asCheck: ko.observable("asattachment")
}, sendEnabled = ko.observable(!1);
_chekEmails = function() {
var res = !0, emails = distribution.To().split(/\s*,\s*/).filter(function(em) {
return "" !== em;
});
return emails.forEach(function(item) {
return "" === item ? res : null !== item && (/^[0-9a-z]+[\w-\.]*\@[0-9a-z-]{1,}(\.[0-9a-z-]{1,}){0,}\.[a-z]{1,}$/i.test(item) || (res = !1),
res);
}), distribution.To(emails.join(", ")), res;
}, distribution.To.subscribe(function() {
var er = _chekEmails();
er ? (_errorText(""), sendEnabled(null !== distribution.To() && distribution.To().length > 0 ? !0 : !1)) : (_errorText(getResourceString("error.InvalidEmailFormat")),
sendEnabled(!1));
});
var documentFormat = ko.observable("PDF"), sendEmailVisible = ko.computed({
read: function() {
return viewer.sidebarState() === SidebarState.Email;
},
write: function(value) {
viewer.sidebarState(value ? SidebarState.Email : SidebarState.Hidden);
}
});
return sendEmailVisible.subscribe(function() {
clear();
}), {
get visible() {
return sendEmailVisible;
},
get distribution() {
return distribution;
},
get documentFormat() {
return documentFormat;
},
get availableFormats() {
return availableFormats;
},
get errorText() {
return _errorText;
},
get sendEnabled() {
return sendEnabled;
},
get errorResponse() {
return errorResponse;
},
clear: clear
};
}
function SinglePageViewModel(viewer) {
function getPageContent() {
var returnPageIndex = viewer.pageIndex();
viewer.document().getPage(returnPageIndex).done(function(x) {
if (returnPageIndex == viewer.pageIndex()) return _pageContent(x);
});
}
var _pageContent = ko.observable();
return viewer.pageDisplayMode.subscribe(function() {
_pageContent(null);
}), viewer.pageIndex.subscribe(function() {
viewer.pageDisplayMode() === PageDisplayMode.single && getPageContent();
}), {
get pageContent() {
return _pageContent;
},
getPageContent: getPageContent
};
}
function Templates(baseUri, resourceManager) {
function get(name) {
name = name.toLowerCase();
var template = cache[name];
if (template) return promise(template);
var localName = name;
return load(name).pipe(preprocess).pipe(function(html) {
return cache[localName] = html, html;
});
}
function getSync(name) {
var result = "";
return get(name).done(function(html) {
return result = html, html;
}), result;
}
function load(name) {
var template = templates[name];
if (template) return promise(template);
var url = templateDir + name + ".html";
return $.ajax({
url: url,
async: !1,
dataType: "text"
});
}
function preprocess(html) {
return html = html.replace(/@include\s+"(\w+)"/g, function(match, name) {
return getSync(name);
}), html.replace(/%([\w_\.\-]+)%/g, function(match, key) {
return resourceManager.get(key) || key;
});
}
function promise(value) {
return $.Deferred(function(d) {
d.resolve(value);
}).promise();
}
baseUri.endsWith("/") || (baseUri += "/");
var templateDir = baseUri + "ui/", templates = {}, cache = {};
return templates.custom = '\n\t@include "reportView"\n
',
templates.desktop = '\n\t\n\t
\n\n\t
\n\t\t\n\t\t\n\t\t@include "reportView"\n\t
\n
\n @include "SendEmailDialog"\n
\n
',
templates.errorpanel = '\n\n\n\t
\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\n\t\t\n\t
\n\t\t\n\t\n\t
\n\t\t
\n\t\t\n\t\t
\n\t\t
%errorPane.ErrorPaneTitle%\n\t\t\t\n\t\t
\n\n\t\t
\n\t\t\t\n\t\t
\n\t\t\n\t
\n
',
templates.mobile = '\n\t\n\t\n\t
\n\t\n\t
\n\t\t@include "reportView"\n\t
\n\t\n\t
\n\t\t@include "mtocPane"\n\t\t@include "msearchPane"\n\t\t@include "mparametersPane"\n\t\t@include "msendEmailDialog"\n\t
\n\n\t\n\t
\n
\n',
templates.mparameternullswitch = '\t\n\n\t
\n\t
\n\t\t\n\t
\n
\n\n',
templates.mparameterspane = '\n\n\t
\n\t\t\n\t\t
%params%
\n\t\n\t
\n\t\t
\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t \n\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t
\n\n\t\t
\n\t
\n
\n\n\n\n\n',
templates.msearchpane = '\n\n\t
\n\t\t\n\t\t
%search%
\n\t\n\t
\n
',
templates.msendemaildialog = '\n
\n \n
%sendEmailTitle%
\n \n
\n
',
templates.mtocpane = '\n\t
\n\t
\n\t\t
\n\t\t\t- \n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t \n\t\t
\n\t
\n
\n',
templates.parameterspane = '\n\n\n\t
\n\t\t
\n\t\t\t
\n\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
\n\n\t
\n\t\t\n\t
\n
\n',
templates.reportview = '\n\n\t@include "errorPanel"\n\n\t
\n\t\t\n\t\t\t
\n\t\t\n\t\t\n\t\t
\n\t\t
\n\t\t\n\n\t\t
\n\t
\n\n
',
templates.searchpane = '\n\t
\n\t\t\n\t
\n\t
\n\t\t\n\t
\n\t
\n\t\t\n\t\t\n\t
\n\t
\n\t\t\n\t\t\n\t
\n\t
\n\t\t\n\t\t\n\t
\n\t
\n\t\t\n\t\t\n\t\t
\n\t\t
\n\t\t\n\t\t\n\t\t
\n\t\t\t%noResults%\n\t\t
\n\t\t\n\t\t\n\t
\n
\n',
templates.sendemaildialog = '\n
\n
\n
\n
',
templates.tocpane = '\n
\n\n',
$(resourceManager).on("updated", function() {
cache = {};
}), {
get: get
};
}
function TocPaneViewModel(viewer, documentViewModel) {
function convertNode(node) {
var promiseFn, kids;
return $.extend({}, node, {
kids: $.isFunction(node.kids) ? (kids = ko.observable([]), promiseFn = node.kids,
ko.computed({
read: function() {
return promiseFn && promiseFn().done(function(newKids) {
promiseFn = null, kids(newKids.map(convertNode));
}), kids();
},
deferEvaluation: !0
})) : (node.kids || []).map(convertNode)
});
}
function reset() {
_stack.removeAll(), _selectedNode(_root());
}
function _navigate(node) {
reset(), _lastNodeNavigate(node), viewer.pageIndex(node.page);
var dpi = getDpi(), location = node.location || {
left: 0,
top: 0
};
if (viewer.pageDisplayMode() === PageDisplayMode.single) viewer.location({
left: location.left * dpi,
top: location.top * dpi
}); else {
var heightPage = documentViewModel.continuousPage.heightPage();
viewer.location({
left: location.left * dpi,
top: location.top * dpi + heightPage * viewer.pageIndex()
});
}
}
var _root = ko.computed(function() {
return convertNode(viewer.document().toc());
}), _selectedNode = ko.observable(_root()), _stack = ko.observableArray(), tocVisible = ko.computed({
read: function() {
return viewer.sidebarState() === SidebarState.TOC;
},
write: function(value) {
viewer.sidebarState(value ? SidebarState.TOC : SidebarState.Hidden);
}
}), _lastNodeNavigate = ko.observable(null);
return viewer.pageDisplayMode.subscribe(function(mode) {
mode === PageDisplayMode.single && null !== _lastNodeNavigate() && _navigate(_lastNodeNavigate());
}), documentViewModel.continuousPage.heightPage.subscribe(function() {
viewer.pageDisplayMode() === PageDisplayMode.continuous && null !== _lastNodeNavigate() && _navigate(_lastNodeNavigate());
}), viewer.pageIndex.subscribe(function(pageIndex) {
null !== _lastNodeNavigate() && _lastNodeNavigate().page !== pageIndex && _lastNodeNavigate(null);
}), viewer.document.subscribe(function() {
_lastNodeNavigate(null);
}), _root.subscribe(reset), {
visible: tocVisible,
get root() {
return _root;
},
get selectedNode() {
return _selectedNode;
},
navigateAndClose: function(node) {
viewer.sidebarState(SidebarState.Hidden), _navigate(node);
},
navigate: function(node) {
_navigate(node);
},
reset: reset,
select: function(node) {
_stack.push(_selectedNode()), _selectedNode(node);
},
back: {
exec: function() {
var node = _stack.pop();
_selectedNode(node);
},
enabled: ko.computed(function() {
return _stack().length > 0;
})
}
};
}
function TogglesHistory() {
var togglesSet = [];
this.toggle = function(toggleId) {
togglesSet.push(toggleId);
}, this.getSet = function() {
var result = togglesSet.slice();
return result;
};
}
function ToolbarViewModel(services, viewer) {
function pageCount() {
return viewer.document().pageCount();
}
var updateText = ko.observable(!1);
$(services.resourceManager).on("updated", function() {
updateText(!updateText());
});
var _pageNumber = ko.computed({
read: function() {
var inProgress = viewer.document().state() == DocumentState.progress, pc = pageCount();
return 0 === pc ? "" : viewer.pageIndex() + 1 + "/" + pc + (inProgress ? "+" : "");
},
write: function(value) {
var n = parseInt(value, 10);
!isNaN(n) && n >= 1 && n <= pageCount() && viewer.pageIndex(n - 1);
}
});
viewer.document.subscribe(function() {
_lastSidebarState = null;
}), _pageNumber.text = function() {
return "" + (viewer.pageIndex() + 1);
};
var _lastSidebarState, _isDocReady = ko.computed(function() {
return pageCount() > 0 && (viewer.document().state() === DocumentState.progress || viewer.document().state() === DocumentState.completed || viewer.document().state() === DocumentState.cancelled) && !viewer.report().busy();
}), _availableExports = ko.computed(function() {
return viewer.availableExports().length > 0;
}), _isExportProcessing = ko.observable(!1);
return {
pageNumber: _pageNumber,
pageNumberEnabled: ko.computed(function() {
return _isDocReady();
}),
firstPage: {
exec: function() {
viewer.pageIndex(0);
},
enabled: ko.computed(function() {
return _isDocReady() && 0 !== viewer.pageIndex();
})
},
lastPage: {
exec: function() {
viewer.pageIndex(pageCount() - 1);
},
enabled: ko.computed(function() {
return _isDocReady() && viewer.pageIndex() !== pageCount() - 1;
})
},
prevPage: {
exec: function() {
viewer.pageIndex(viewer.pageIndex() - 1);
},
enabled: ko.computed(function() {
return _isDocReady() && viewer.pageIndex() - 1 >= 0;
})
},
nextPage: {
exec: function() {
viewer.pageIndex(viewer.pageIndex() + 1);
},
enabled: ko.computed(function() {
return _isDocReady() && viewer.pageIndex() + 1 < pageCount();
})
},
sidebar: {
exec: function() {
viewer.sidebarState() !== SidebarState.Hidden ? (_lastSidebarState = viewer.sidebarState(),
viewer.sidebarState(SidebarState.Hidden)) : viewer.sidebarState(_lastSidebarState || (_isDocReady() || !viewer.report().hasPromptParameters() ? SidebarState.Search : SidebarState.Parameters));
},
enabled: !0
},
search: {
exec: function() {
viewer.sidebarState(SidebarState.Search);
},
enabled: _isDocReady
},
email: {
exec: function() {
viewer.sidebarState(SidebarState.Email);
},
enabled: _isDocReady
},
toc: {
exec: function() {
viewer.sidebarState(SidebarState.TOC);
},
enabled: ko.computed(function() {
return viewer.document().toc && viewer.document().toc().kids.length > 0;
})
},
params: {
exec: function() {
viewer.sidebarState(SidebarState.Parameters);
},
enabled: ko.computed(function() {
return viewer.report().hasPromptParameters();
})
},
backToParent: {
exec: function() {
viewer.sidebarState(SidebarState.Hidden), viewer.backToParent();
},
enabled: ko.computed(function() {
return viewer.backToParentEnabled();
})
},
print: {
exec: function() {
services.printingService.print(viewer.document(), viewer.callExportCallback);
},
enabled: ko.computed(function() {
return _isDocReady() && services.printingService && "Galley" !== viewer.report().renderModeState();
})
},
exportTo: function(exportType) {
return {
exec: function() {
var options = {
FileName: viewer.report().reportName,
PreviewPages: 0
};
_isExportProcessing(!0), viewer.document().export(exportType, options, viewer.report().parameters()).done(function(exportUrl) {
if (_isExportProcessing(!1), exportUrl) {
var exportWindow = null;
try {
exportWindow = window.open(exportUrl + "&Attachment=1", "_blank"), exportWindow && exportWindow.focus();
} catch (e) {}
exportWindow || viewer.callExportCallback(exportUrl + "&Attachment=1", function(url) {
window.location = url;
});
}
});
},
enabled: _isDocReady
};
},
renderMode: {
exec: function() {
"Galley" === viewer.report().renderModeState() ? viewer.report().renderMode("Paginated") : viewer.report().renderMode("Galley");
},
enabled: ko.computed(function() {
return viewer.document().state() === DocumentState.completed && !viewer.report().busy();
}),
visible: ko.computed(function() {
return viewer.report().isChangeRenderModeSupported();
})
},
renderModeState: ko.computed(function() {
return viewer.report().renderModeState();
}),
get pageViewMode() {
return viewer.pageDisplayMode();
},
singlePageView: {
exec: function() {
viewer.singlePageView();
},
enabled: _isDocReady
},
continuousPageView: {
exec: function() {
viewer.continuousPageView();
},
enabled: _isDocReady
},
renderFullReport: {
exec: function() {
viewer.report().run(!0);
},
visible: ko.computed(function() {
return viewer.document().state() === DocumentState.cancelled && !viewer.report().busy();
})
},
showMessagePartialData: ko.computed(function() {
return viewer.document().state() === DocumentState.cancelled;
}),
cancelRendering: {
exec: function() {
viewer.document().cancelRendering();
},
visible: ko.computed(function() {
return viewer.document().state() === DocumentState.progress && viewer.report().reportType === ReportType.pageReport;
})
},
exportToAvailable: function(exportType) {
return (exportType != ExportType.Docx || 1 == viewer.report().reportType) && viewer.availableExports().indexOf(exportType) >= 0;
},
get exportsAreAvailable() {
return _availableExports;
},
get canExport() {
return _isDocReady;
},
get isExportProcessing() {
return _isExportProcessing();
}
};
}
function ViewerImpl(services, options, viewModels) {
function createReportModel() {
viewerModel.report && documentReadySubscribe && (documentReadySubscribe.dispose(),
documentReadySubscribe = null), viewerModel.report = ReportModel(reportService, options.report, null, resourceManager, options.renderMode, options.previewPages),
options.reportLoaded && ko.waitFor(viewerModel.report().state, function(st) {
return st === ReportModelState.open || st === ReportModelState.documentReady;
}, function() {
options.reportLoaded({
parameters: viewerModel.report().parameters()
});
});
}
function init() {
options.report && !viewerModel.report().reportName && createReportModel(), options.availableExports && viewerModel.availableExports(options.availableExports),
updateTemplate();
}
function viewerElement() {
return $(options.element);
}
function findElement(selector) {
var $e = viewerElement().find(selector);
return $e.length ? $e[0] : null;
}
function updateTemplate() {
var uiType = options.uiType || "mobile";
templates.get(uiType).done(function(html) {
var $e = viewerElement();
$e.html(html), ko.applyBindings(viewModel, $e.find(".ar-viewer")[0]);
});
}
function loadLocale(uri) {
if ("string" != typeof uri || !uri) throw new Error("Invalid locale URI.");
return resourceManager.update(uri).fail(function(error) {
console.log("Unable to load locale from '{0}'. Error: {1}".format(uri, error));
});
}
function optionImpl(name) {
var invalid = function() {
throw new Error("Ivalid option name: " + (name || "(null or undefined)"));
};
return (optionMap[name] || invalid).apply(null, Array.prototype.slice.call(arguments, 1));
}
function refresh() {
viewerModel.clearErrors(), viewerModel.report().run();
}
function print() {
var pc = viewerModel.document().pageCount();
if (0 === pc) throw new Error("document is not ready for printing");
if (!services.printingService) throw new Error("Printing service is not available");
services.printingService.print(viewerModel.document(), viewerModel.callExportCallback).fail(viewerModel.handleError);
}
function exportImpl(exportType, callback, saveAsDialog, settings) {
var pc = viewerModel.document().pageCount();
if (0 === pc) throw new Error("document is not ready for export");
settings = settings || {}, viewerModel.document().export(exportType, settings).done(function(exportUrl) {
saveAsDialog && (exportUrl += "&Attachment=1"), viewerModel.callExportCallback(exportUrl, callback);
}).fail(viewerModel.handleError);
}
function goToPage(number, offset, callback) {
if (isNaN(number) || number <= 0 || number > viewerModel.document().pageCount()) throw new Error("The 'page' parameter must be integer in range 1..PageCount.");
if (viewerModel.document().state() !== DocumentState.completed || 0 === viewerModel.document().pageCount()) throw new Error("Can't perform goToPage due to document state.");
if (callback) var watcher = viewModel.document.singlePage.pageContent.subscribe(function() {
watcher.dispose(), callback();
});
viewerModel.pageIndex(number - 1), offset && viewerModel.location(offset);
}
function backToParent() {
viewerModel.backToParent();
}
function search(searchTerm, searchOptions, callback) {
if (viewerModel.document().state() !== DocumentState.completed) throw new Error("Can't perform search due to document state.");
viewerModel.document().search({
text: searchTerm,
matchCase: searchOptions.matchCase,
wholePhrase: searchOptions.wholePhrase,
from: searchOptions.from,
maxSearchResults: searchOptions.maxSearchResults || options.maxSearchResults
}).done(callback || noop).fail(viewerModel.handleError);
}
function getToc(callback) {
function toPromise(value) {
return "function" == typeof value ? value() : $.Deferred().resolve(value).promise();
}
function traverseTocTree(node) {
function traverseKids(kids) {
return $.when.apply($, kids.map(traverseTocTree));
}
var d = $.Deferred();
return null === node || void 0 === node ? d.resolve($.extend({}, nullNode, {})) : node.isLeaf || !node.kids ? d.resolve($.extend({}, node, {})) : (toPromise(node.kids).then(function(kids) {
traverseKids(kids).then(function() {
d.resolve($.extend({}, node, {
kids: [].slice.call(arguments)
}));
});
}), d);
}
var nullNode = {
name: "",
page: 0,
location: {
left: 0,
top: 0
},
isLeaf: !0,
kids: []
};
viewerModel.document().getToc().then(traverseTocTree).done(callback);
}
function destroy() {
viewerModel.clearReports(!1, function() {
var $e = viewerElement();
ko.cleanNode($e[0]), $e.html("");
});
}
if (!options) throw new Error("Viewer options are not specified.");
var documentReadySubscribe, reportService = services.reportService, resourceManager = services.resourceManager, templates = services.templates, viewerModel = viewModels.viewerModel, viewModel = viewModels.viewerViewModel, viewer = {
destroy: destroy,
option: optionImpl,
refresh: refresh,
print: print,
export: exportImpl,
getToc: getToc,
goToPage: goToPage,
backToParent: backToParent,
search: search,
get pageCount() {
return viewerModel.document().pageCount();
},
get currentPage() {
return viewerModel.pageIndex() + 1;
},
get toolbar() {
return findElement(".toolbar");
},
get toolbarTop() {
return findElement(".toolbar-top");
},
get toolbarBottom() {
return findElement(".toolbar-bottom");
},
get displayMode() {
return viewerModel.pageDisplayMode();
},
set displayMode(mode) {
mode === PageDisplayMode.continuous ? viewerModel.continuousPageView() : viewerModel.singlePageView();
}
}, optionMap = {
uiType: function() {
return arguments.length > 0 && (options.uiType = arguments[0], updateTemplate(options.uiType || "mobile", !1)),
options.uiType;
},
report: function() {
return arguments.length > 0 && (options.report = arguments[0], createReportModel()),
options.report;
},
reportService: function() {
return arguments.length > 0 && (options.reportService = arguments[0], reportService = ReportServiceSelector(options.reportService, resourceManager),
services.reportService = reportService), options.reportService;
},
localeUri: function() {
if (arguments.length > 0) {
var uri = arguments[0];
loadLocale(uri).done(function() {
options.localeUri = uri, updateTemplate();
});
}
return options.localeUri;
},
availableExports: function() {
return arguments.length > 0 && viewerModel.availableExports(arguments[0]), viewerModel.availableExports();
},
action: function() {
return arguments.length > 0 && (options.action = arguments[0]), options.action;
},
error: function() {
return arguments.length > 0 && (options.error = arguments[0]), options.error;
},
reportLoaded: function() {
return arguments.length > 0 && (options.reportLoaded = arguments[0]), options.reportLoaded;
},
documentLoaded: function() {
return arguments.length > 0 && (options.documentLoaded = arguments[0]), options.documentLoaded;
},
maxSearchResults: function() {
return arguments.length > 0 && (options.maxSearchResults = arguments[0]), options.maxSearchResults;
},
element: function() {
if (arguments.length > 0) throw new Error("You can't change the element.");
return options.element;
},
renderMode: function() {
return arguments.length > 0 && (options.renderMode = arguments[0]), options.renderMode;
},
displayMode: function() {
return arguments.length > 0 && (arguments[0] === PageDisplayMode.continuous ? viewerModel.continuousPageView() : viewerModel.singlePageView()),
viewerModel.pageDisplayMode();
}
}, load = options.localeUri ? loadLocale(options.localeUri) : $.Deferred().resolve();
return load.always(function() {
init();
}), viewer;
}
function ViewerModel(reportService, options) {
function clearDrillthroughStack(async) {
$(_drillthroughStack).each(function() {
var drill = _drillthroughStack.pop();
drill.Report.dispose(async);
}), _backToParentEnabled(_drillthroughStack.length > 0);
}
function singlePageView() {
_pageDisplayMode(PageDisplayMode.single);
}
function continuousPageView() {
_pageDisplayMode(PageDisplayMode.continuous);
}
function errorHandler(e, error) {
viewer.handleError(error);
}
function setReport(value) {
if (!value) throw new ReferenceError("value");
_reloadingOnInteraction = !1, _report() && ($(_report()).unbind("error", errorHandler),
$(_report()).unbind("documentReady", onDocumentReady), $(_report()).unbind("firstPageLoaded", onFirstPageLoaded),
$(_report()).unbind("togglePageLoaded", onTogglePageLoaded)), viewer.document = nullDocument,
_report(value), $(value).on("error", errorHandler), $(value).on("documentReady", onDocumentReady),
$(value).on("firstPageLoaded", onFirstPageLoaded), $(value).on("togglePageLoaded", onTogglePageLoaded),
ko.waitFor(value.state, function(st) {
return st == ReportModelState.open;
}, function(st) {
value.hasPromptParameters() ? value.autoRun() && value.allParametersValid() && !_manualRun || _sidebarState(SidebarState.Parameters) : _sidebarState() === SidebarState.Parameters && _sidebarState(SidebarState.Hidden);
});
}
function chain(fn1, fn2) {
return function() {
fn1 && fn1.apply && fn1(), fn2 && fn2.apply && fn2();
};
}
function onDocumentReady(e, document) {
viewer.document = document;
}
function onFirstPageLoaded() {
$(viewer).trigger("firstPageLoaded");
}
function onTogglePageLoaded() {
$(viewer).trigger("togglePageLoaded");
}
if (!reportService) throw new ReferenceError("reportService is required here!");
var nullDocument = DocumentModel(), _reloadingOnInteraction = !1, _pageIndex = ko.observable(0), _location = ko.observable({
left: 0,
top: 0
}), _report = ko.observable(), _document = ko.observable(nullDocument), _sidebarState = ko.observable(SidebarState.Hidden), _availableExports = ko.observable([ ExportType.Pdf, ExportType.Word, ExportType.Image, ExportType.Html, ExportType.Xls, ExportType.Csv, ExportType.Docx ]), _drillthroughStack = [], _backToParentEnabled = ko.observable(!1), _pageDisplayMode = ko.observable(PageDisplayMode.single), _errors = ko.observableArray([]), _showOnlyLastError = !!options && options.showOnlyLastError, _exporting = !1, _manualRun = !!options && !!options.manualRun, unbindDocument = noop, viewer = {
get pageIndex() {
return _pageIndex;
},
get location() {
return _location;
},
get sidebarState() {
return _sidebarState;
},
get report() {
return _report;
},
set report(value) {
viewer.clearReports(!0, null), viewer.clearErrors(), setReport(value), value.state() === ReportModelState.noReport && value.open(_manualRun);
},
get document() {
return _document;
},
set document(value) {
if (!value) throw new ReferenceError("value");
unbindDocument(), _document(value), $(value).on("error", errorHandler), unbindDocument = function() {
$(_document()).unbind("error", errorHandler);
}, options && options.documentLoaded && (unbindDocument = chain(unbindDocument, ko.waitFor(ko.computed(function() {
return _document().state();
}), function(val) {
return val === DocumentState.completed;
}, options.documentLoaded))), _reloadingOnInteraction || (_pageIndex(0), _location({
left: 0,
top: 0
})), _reloadingOnInteraction = !1;
},
get availableExports() {
return _availableExports;
},
set availableExports(value) {
_availableExports(value || []);
},
drillthrough: function(drillthroughLink) {
viewer.document().saveDocumentState(), viewer.report().drillthrough(drillthroughLink).done(function(result) {
_drillthroughStack.push({
Report: viewer.report(),
Document: viewer.document(),
PageIndex: viewer.pageIndex()
}), _backToParentEnabled(_drillthroughStack.length > 0), setReport(result.report),
result.document && (viewer.document = result.document);
});
},
toggle: function(toggleData) {
var savedPageIndex = _pageIndex();
return _reloadingOnInteraction = !0, viewer.report().toggle(toggleData, savedPageIndex).then(function() {
ko.waitFor(ko.computed(function() {
return _document().state();
}), function(val) {
return val === DocumentState.completed;
}, function() {
var pagesNumber = _document().pageCount();
savedPageIndex >= pagesNumber && (savedPageIndex = pagesNumber - 1), _pageIndex() >= pagesNumber || savedPageIndex > 0 && _pageIndex() !== savedPageIndex ? _pageIndex(savedPageIndex) : _pageIndex.valueHasMutated();
});
});
},
backToParent: function() {
if (0 === _drillthroughStack.length) throw new Error("Report stack is empty!");
var oldReport = _report();
oldReport && oldReport.dispose(!0);
var drill = _drillthroughStack.pop();
_backToParentEnabled(_drillthroughStack.length > 0), null !== drill && void 0 !== drill && (setReport(drill.Report),
drill.Document.restoreDocumentState(), viewer.document = drill.Document, _pageIndex(drill.PageIndex),
_pageIndex.valueHasMutated());
},
get backToParentEnabled() {
return _backToParentEnabled;
},
get errors() {
return _errors;
},
get showOnlyLastError() {
return _showOnlyLastError;
},
handleError: function(error) {
if (error) {
var errorObject = null;
if (error.responseJSON) {
var statusText = error.statusText;
return void _errors(_errors().concat([ String(resolveErrorMessage([ error, "error", statusText ? statusText : "" ])) ]));
}
if (errorObject = {
message: String(error)
}, options && options.error && options.error.apply && options.error(errorObject)) return;
errorObject && errorObject.message && _errors(_errors().concat([ String(errorObject.message) ]));
}
},
clearReports: function(async, clearCallback) {
if (!_exporting) {
clearDrillthroughStack(async);
var oldReport = _report();
oldReport && oldReport.dispose(async), clearCallback && clearCallback();
}
},
callExportCallback: function(url, exportCallback) {
if (exportCallback) {
_exporting = !0;
try {
exportCallback(url);
} finally {
setTimeout(function() {
_exporting = !1;
}, 1);
}
}
},
clearErrors: function() {
_errors([]);
},
get pageDisplayMode() {
return _pageDisplayMode;
},
singlePageView: singlePageView,
continuousPageView: continuousPageView
};
return viewer.report = ReportModel(reportService), viewer;
}
function ViewerViewModel(services, options, viewer) {
var _document = DocumentViewModel(viewer), _tocPane = TocPaneViewModel(viewer, _document), _parametersPane = ParameterPaneViewModel(services, viewer), _searchPane = SearchPaneViewModel(viewer, _document, options.maxSearchResults, options.element), _sendEmailDialog = sendEmailDialogViewModel(services, viewer), _errorsPane = ErrorPaneViewModel(viewer), _toolbar = ToolbarViewModel(services, viewer), _paramsExists = ko.computed(function() {
return viewer.report().parameters().filter(function(p) {
return void 0 === p.promptUser || p.promptUser;
}).length > 0;
}), _hasToc = ko.computed(function() {
return viewer.document().toc().kids.length > 0;
}), _interactivityProcessor = InteractivityProcessor({
viewer: viewer,
tocPane: _tocPane,
get action() {
return options.action;
}
}), SR = services.resourceManager && $.isFunction(services.resourceManager.get) ? services.resourceManager.get : identity;
return {
sendEmail: function() {
var distribution = {
To: _sendEmailDialog.distribution.To().split(/\s*,\s*/),
Subject: _sendEmailDialog.distribution.Subject(),
MessageBody: _sendEmailDialog.distribution.MessageBody(),
AsLink: "aslink" == _sendEmailDialog.distribution.asCheck(),
AsAttachment: "asattachment" == _sendEmailDialog.distribution.asCheck()
}, documentFormat = _sendEmailDialog.documentFormat(), settings = {
Distribution: distribution,
DocumentFormat: documentFormat,
SendEmailPolicyName: SR("sendEmailPolicyName")
};
viewer.document().sendEmail(settings).done(function() {
viewer.sidebarState(SidebarState.Hidden), _sendEmailDialog.errorResponse("");
}).fail(function() {
viewer.sidebarState(SidebarState.Hidden);
var error = resolveErrorMessage(arguments, SR);
viewer.handleError(error);
});
},
canSendEmail: function() {
return viewer.document().canSendEmail();
},
get document() {
return _document;
},
get toolbar() {
return _toolbar;
},
get tocPane() {
return _tocPane;
},
get parametersPane() {
return _parametersPane;
},
get searchPane() {
return _searchPane;
},
get errorPane() {
return _errorsPane;
},
get sidebarState() {
return viewer.sidebarState;
},
get hasParameters() {
return _paramsExists;
},
get hasToc() {
return _hasToc;
},
get sendEmailDialog() {
return _sendEmailDialog;
},
processPage: function(element) {
$.each(viewer.document().resolveActionItems(element), function(index, item) {
_interactivityProcessor.processActionItem(item, element);
}), _interactivityProcessor.processActions(element), _interactivityProcessor.processToolTips();
},
setSidebarState: function(state) {
viewer.sidebarState(state);
}
};
}
function WebServiceBase(service, serviceUrl, setSecurityToken) {
function isUndefined(value) {
return void 0 === value || null === value;
}
function setAuthToken(ajaxOptions) {
return setSecurityToken && setSecurityToken(ajaxOptions), ajaxOptions;
}
function postService(url, data, skipError, async) {
return postJson(url, data, skipError, async).then(function(msg) {
return isUndefined(msg.d) ? invalidResponse(msg) : isUndefined(msg.d.Error) ? msg.d : skipError ? msg.d : errorPromise(msg.d.Error.Description || "ReportService fail!");
}).fail(function() {
var error = resolveErrorMessage(arguments);
$(service).trigger("error", error);
});
}
function postJson(url, data, skipError, async) {
return isAbsoluteUri(url) || (url = serviceUrl + url), isUndefined(async) && (async = !0),
$.ajax(setAuthToken({
type: "POST",
url: url,
data: JSON.stringify(data),
contentType: "application/json",
async: async
}));
}
function get(url) {
return isAbsoluteUri(url) || (url = serviceUrl + url), $.ajax(setAuthToken({
type: "GET",
url: url
})).then(function(data, status, xhr) {
return $.Deferred(function(d) {
d.resolve(data, status, xhr);
});
}, failCallback);
}
function getJson(url) {
return isAbsoluteUri(url) || (url = serviceUrl + url), $.ajax(setAuthToken({
type: "GET",
url: url,
dataType: "json"
})).then(function(data, status, xhr) {
return $.Deferred(function(d) {
d.resolve(data, status, xhr);
});
}, failCallback);
}
function failCallback(error) {
return 3 == arguments.length && arguments[0] && arguments[0].status && (error = getXhrErrorMessage(arguments[0])),
error;
}
function getXhrErrorMessage(xhr) {
var responseJson = xhr.responseJSON;
if (!responseJson && xhr.responseText) try {
responseJson = JSON.parse(xhr.responseText);
} catch (e) {}
return responseJson && responseJson.Message ? responseJson.Message : responseJson && responseJson.ErrorCode ? {
errorCode: responseJson.ErrorCode,
message: responseJson.Error,
errorParameters: responseJson.ErrorParameters || []
} : xhr.statusText;
}
function errorPromise(problem) {
return $.Deferred(function(deferred) {
deferred.reject(problem);
}).promise();
}
function invalidResponse(value) {
return errorPromise("Invalid response: " + JSON.stringify(value));
}
return {
post: postService,
postRest: postJson,
get: get,
getJson: getJson,
errorPromise: errorPromise,
invalidResponse: invalidResponse,
invalidArg: function(name, value) {
return errorPromise("Invalid argument {0}. Value: {1}".format(name, JSON.stringify(value)));
},
promise: function(value) {
return $.Deferred(function(d) {
d.resolve(value);
}).promise();
},
delay: function(promiseFn, timeout) {
var def = $.Deferred();
return setTimeout(function() {
promiseFn().done(function() {
def.resolve.apply(def, arguments);
}).fail(function() {
def.reject.apply(def, arguments);
});
}, timeout), def.promise();
}
};
}
function createViewer(options) {
var baseUri = options.baseUri || ".", resourceManager = ResourceManager(), reportService = ReportServiceSelector(options.reportService, resourceManager), templates = Templates(baseUri, resourceManager), browserSpecific = BrowserSpecific(), printingService = PrintingService(resourceManager, browserSpecific), services = {
reportService: reportService,
templates: templates,
resourceManager: resourceManager,
printingService: printingService,
browserSpecific: browserSpecific
}, viewerModel = ViewerModel(reportService, options);
return ViewerImpl(services, options, {
viewerModel: viewerModel,
viewerViewModel: ViewerViewModel(services, options, viewerModel)
});
}
!function($) {
"use strict";
$.fn.bootstrapSwitch = function(method) {
var methods = {
init: function() {
return this.each(function() {
var $div, $switchLeft, $switchRight, $label, color, moving, $element = $(this), myClasses = "", classes = $element.attr("class"), onLabel = "ON", offLabel = "OFF", icon = !1;
$.each([ "switch-mini", "switch-small", "switch-large" ], function(i, el) {
classes.indexOf(el) >= 0 && (myClasses = el);
}), $element.addClass("has-switch"), void 0 !== $element.data("on") && (color = "switch-" + $element.data("on")),
void 0 !== $element.data("on-label") && (onLabel = $element.data("on-label")), void 0 !== $element.data("off-label") && (offLabel = $element.data("off-label")),
void 0 !== $element.data("icon") && (icon = $element.data("icon")), $switchLeft = $("").addClass("switch-left").addClass(myClasses).addClass(color).html(onLabel),
color = "", void 0 !== $element.data("off") && (color = "switch-" + $element.data("off")),
$switchRight = $("").addClass("switch-right").addClass(myClasses).addClass(color).html(offLabel),
$label = $("