filestack-js
Version:
Official JavaScript library for Filestack
85 lines (83 loc) • 10.2 kB
JavaScript
/*
* Copyright (c) 2018 by Filestack.
* Some rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { __assign } from "tslib";
import { removeEmpty } from '../utils';
import { getValidator, PreviewParamsSchema } from './../../schema';
import { FilestackError, FilestackErrorType } from './../../filestack_error';
/**
* Returns file preview url
*
* @private
* @param session
* @param handle
* @param opts
* @param security
*/
export var getUrl = function (session, handle, opts, security) {
var options = __assign({}, opts);
var policy = security && security.policy || session.policy;
var signature = security && security.signature || session.signature;
var hasSecurity = signature && policy;
var baseUrl = [session.urls.cdnUrl];
var css = options.css && encodeURIComponent("\"".concat(options.css, "\""));
var previewTask = css ? "preview=css:".concat(css) : 'preview';
// @todo move to utils?
if (handle.indexOf('src:') !== -1) {
baseUrl.push("".concat(session.apikey, "/").concat(previewTask));
}
else {
baseUrl.push(previewTask);
}
if (hasSecurity) {
baseUrl.push("security=policy:".concat(policy, ",signature:").concat(signature));
}
baseUrl.push(handle);
return baseUrl.join('/');
};
/**
* Appends image preview into page
*
* @private
* @param session
* @param handle
* @param opts
*/
export var preview = function (session, handle, opts) {
if (!handle || typeof handle !== 'string') {
throw new Error('A valid Filestack handle or storage alias is required for preview');
}
var validateRes = getValidator(PreviewParamsSchema)(opts);
if (validateRes.errors.length) {
throw new FilestackError("Invalid preview params", validateRes.errors, FilestackErrorType.VALIDATION);
}
var options = removeEmpty(opts || {});
var url = getUrl(session, handle, options);
if (options && options.id) {
var id = options.id;
var iframe = document.createElement('iframe');
var domElement = document.getElementById(id);
iframe.src = url;
iframe.width = '100%';
iframe.height = '100%';
if (!domElement) {
throw new Error("DOM Element with id \"".concat(id, "\" not found."));
}
return domElement.appendChild(iframe);
}
return window.open(url, handle);
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXBpL3ByZXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOztBQUdILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQWM3RTs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxJQUFNLE1BQU0sR0FBRyxVQUNwQixPQUFnQixFQUNoQixNQUFjLEVBQ2QsSUFBVSxFQUNWLFFBQW1CO0lBRW5CLElBQU0sT0FBTyxnQkFBUSxJQUFJLENBQUUsQ0FBQztJQUM1QixJQUFNLE1BQU0sR0FBRyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzdELElBQU0sU0FBUyxHQUFHLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDdEUsSUFBTSxXQUFXLEdBQUcsU0FBUyxJQUFJLE1BQU0sQ0FBQztJQUN4QyxJQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsSUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxZQUFJLE9BQU8sQ0FBQyxHQUFHLE9BQUcsQ0FBQyxDQUFDO0lBQ2xFLElBQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsc0JBQWUsR0FBRyxDQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUUzRCx1QkFBdUI7SUFDdkIsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBRyxPQUFPLENBQUMsTUFBTSxjQUFJLFdBQVcsQ0FBRSxDQUFDLENBQUM7S0FDbEQ7U0FBTTtRQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDM0I7SUFDRCxJQUFJLFdBQVcsRUFBRTtRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsMEJBQW1CLE1BQU0sd0JBQWMsU0FBUyxDQUFFLENBQUMsQ0FBQztLQUNsRTtJQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLENBQUMsQ0FBQztBQUVGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsSUFBTSxPQUFPLEdBQUcsVUFBQyxPQUFnQixFQUFFLE1BQWUsRUFBRSxJQUFxQjtJQUM5RSxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtRQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLG1FQUFtRSxDQUFDLENBQUM7S0FDdEY7SUFFRCxJQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU1RCxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQzdCLE1BQU0sSUFBSSxjQUFjLENBQUMsd0JBQXdCLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUN2RztJQUVELElBQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEMsSUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFN0MsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRTtRQUN6QixJQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsSUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUvQyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNqQixNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUN0QixNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUV2QixJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBd0IsRUFBRSxrQkFBYyxDQUFDLENBQUM7U0FDM0Q7UUFDRCxPQUFPLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDdkM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2xDLENBQUMsQ0FBQyIsImZpbGUiOiJsaWIvYXBpL3ByZXZpZXcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4IGJ5IEZpbGVzdGFjay5cbiAqIFNvbWUgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBTZWN1cml0eSwgU2Vzc2lvbiB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgeyByZW1vdmVFbXB0eSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGdldFZhbGlkYXRvciwgUHJldmlld1BhcmFtc1NjaGVtYSB9IGZyb20gJy4vLi4vLi4vc2NoZW1hJztcbmltcG9ydCB7IEZpbGVzdGFja0Vycm9yLCBGaWxlc3RhY2tFcnJvclR5cGUgfSBmcm9tICcuLy4uLy4uL2ZpbGVzdGFja19lcnJvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJldmlld09wdGlvbnMge1xuICAvKipcbiAgICogSWQgZm9yIERPTSBlbGVtZW50IHRvIGVtYmVkIHByZXZpZXcgaW50by5cbiAgICogT21pdCB0aGlzIHRvIG9wZW4gdGhlIHByZXZpZXcgaW4gYSBuZXcgdGFiXG4gICAqL1xuICBpZDogc3RyaW5nO1xuICAvKipcbiAgICogVVJMIHRvIGN1c3RvbSBDU1NcbiAgICovXG4gIGNzcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGZpbGUgcHJldmlldyB1cmxcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHNlc3Npb25cbiAqIEBwYXJhbSBoYW5kbGVcbiAqIEBwYXJhbSBvcHRzXG4gKiBAcGFyYW0gc2VjdXJpdHlcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFVybCA9IChcbiAgc2Vzc2lvbjogU2Vzc2lvbixcbiAgaGFuZGxlOiBzdHJpbmcsXG4gIG9wdHM/OiBhbnksXG4gIHNlY3VyaXR5PzogU2VjdXJpdHlcbikgPT4ge1xuICBjb25zdCBvcHRpb25zID0geyAuLi5vcHRzIH07XG4gIGNvbnN0IHBvbGljeSA9IHNlY3VyaXR5ICYmIHNlY3VyaXR5LnBvbGljeSB8fCBzZXNzaW9uLnBvbGljeTtcbiAgY29uc3Qgc2lnbmF0dXJlID0gc2VjdXJpdHkgJiYgc2VjdXJpdHkuc2lnbmF0dXJlIHx8IHNlc3Npb24uc2lnbmF0dXJlO1xuICBjb25zdCBoYXNTZWN1cml0eSA9IHNpZ25hdHVyZSAmJiBwb2xpY3k7XG4gIGNvbnN0IGJhc2VVcmwgPSBbc2Vzc2lvbi51cmxzLmNkblVybF07XG4gIGNvbnN0IGNzcyA9IG9wdGlvbnMuY3NzICYmIGVuY29kZVVSSUNvbXBvbmVudChgXCIke29wdGlvbnMuY3NzfVwiYCk7XG4gIGNvbnN0IHByZXZpZXdUYXNrID0gY3NzID8gYHByZXZpZXc9Y3NzOiR7Y3NzfWAgOiAncHJldmlldyc7XG5cbiAgLy8gQHRvZG8gbW92ZSB0byB1dGlscz9cbiAgaWYgKGhhbmRsZS5pbmRleE9mKCdzcmM6JykgIT09IC0xKSB7XG4gICAgYmFzZVVybC5wdXNoKGAke3Nlc3Npb24uYXBpa2V5fS8ke3ByZXZpZXdUYXNrfWApO1xuICB9IGVsc2Uge1xuICAgIGJhc2VVcmwucHVzaChwcmV2aWV3VGFzayk7XG4gIH1cbiAgaWYgKGhhc1NlY3VyaXR5KSB7XG4gICAgYmFzZVVybC5wdXNoKGBzZWN1cml0eT1wb2xpY3k6JHtwb2xpY3l9LHNpZ25hdHVyZToke3NpZ25hdHVyZX1gKTtcbiAgfVxuXG4gIGJhc2VVcmwucHVzaChoYW5kbGUpO1xuICByZXR1cm4gYmFzZVVybC5qb2luKCcvJyk7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgaW1hZ2UgcHJldmlldyBpbnRvIHBhZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHNlc3Npb25cbiAqIEBwYXJhbSBoYW5kbGVcbiAqIEBwYXJhbSBvcHRzXG4gKi9cbmV4cG9ydCBjb25zdCBwcmV2aWV3ID0gKHNlc3Npb246IFNlc3Npb24sIGhhbmRsZT86IHN0cmluZywgb3B0cz86IFByZXZpZXdPcHRpb25zKSA9PiB7XG4gIGlmICghaGFuZGxlIHx8IHR5cGVvZiBoYW5kbGUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIHZhbGlkIEZpbGVzdGFjayBoYW5kbGUgb3Igc3RvcmFnZSBhbGlhcyBpcyByZXF1aXJlZCBmb3IgcHJldmlldycpO1xuICB9XG5cbiAgY29uc3QgdmFsaWRhdGVSZXMgPSBnZXRWYWxpZGF0b3IoUHJldmlld1BhcmFtc1NjaGVtYSkob3B0cyk7XG5cbiAgaWYgKHZhbGlkYXRlUmVzLmVycm9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRmlsZXN0YWNrRXJyb3IoYEludmFsaWQgcHJldmlldyBwYXJhbXNgLCB2YWxpZGF0ZVJlcy5lcnJvcnMsIEZpbGVzdGFja0Vycm9yVHlwZS5WQUxJREFUSU9OKTtcbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSByZW1vdmVFbXB0eShvcHRzIHx8IHt9KTtcbiAgY29uc3QgdXJsID0gZ2V0VXJsKHNlc3Npb24sIGhhbmRsZSwgb3B0aW9ucyk7XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5pZCkge1xuICAgIGNvbnN0IGlkID0gb3B0aW9ucy5pZDtcbiAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICBjb25zdCBkb21FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXG4gICAgaWZyYW1lLnNyYyA9IHVybDtcbiAgICBpZnJhbWUud2lkdGggPSAnMTAwJSc7XG4gICAgaWZyYW1lLmhlaWdodCA9ICcxMDAlJztcblxuICAgIGlmICghZG9tRWxlbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBET00gRWxlbWVudCB3aXRoIGlkIFwiJHtpZH1cIiBub3QgZm91bmQuYCk7XG4gICAgfVxuICAgIHJldHVybiBkb21FbGVtZW50LmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIH1cbiAgcmV0dXJuIHdpbmRvdy5vcGVuKHVybCwgaGFuZGxlKTtcbn07XG4iXX0=