@yoyoboot/l-52abp-ng-form-generator
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.2.0.
108 lines • 16.5 kB
JavaScript
export const DROP_EFFECTS = ["move", "copy", "link"];
export const CUSTOM_MIME_TYPE = "application/x-dnd";
export const JSON_MIME_TYPE = "application/json";
export const MSIE_MIME_TYPE = "Text";
export function mimeTypeIsCustom(mimeType) {
return mimeType.substr(0, CUSTOM_MIME_TYPE.length) === CUSTOM_MIME_TYPE;
}
export function getWellKnownMimeType(event) {
if (event.dataTransfer) {
const types = event.dataTransfer.types;
// IE 9 workaround.
if (!types) {
return MSIE_MIME_TYPE;
}
for (let i = 0; i < types.length; i++) {
if (types[i] === MSIE_MIME_TYPE
|| types[i] === JSON_MIME_TYPE
|| mimeTypeIsCustom(types[i])) {
return types[i];
}
}
}
return null;
}
export function setDragData(event, data, effectAllowed) {
// Internet Explorer and Microsoft Edge don't support custom mime types, see design doc:
// https://github.com/marceljuenemann/angular-drag-and-drop-lists/wiki/Data-Transfer-Design
const mimeType = CUSTOM_MIME_TYPE + (data.type ? ("-" + data.type) : "");
const dataString = JSON.stringify(data);
try {
event.dataTransfer.setData(mimeType, dataString);
}
catch (e) {
// Setting a custom MIME type did not work, we are probably in IE or Edge.
try {
event.dataTransfer.setData(JSON_MIME_TYPE, dataString);
}
catch (e) {
// We are in Internet Explorer and can only use the Text MIME type. Also note that IE
// does not allow changing the cursor in the dragover event, therefore we have to choose
// the one we want to display now by setting effectAllowed.
const effectsAllowed = filterEffects(DROP_EFFECTS, effectAllowed);
event.dataTransfer.effectAllowed = effectsAllowed[0];
event.dataTransfer.setData(MSIE_MIME_TYPE, dataString);
}
}
}
export function getDropData(event, dragIsExternal) {
// check if the mime type is well known
const mimeType = getWellKnownMimeType(event);
// drag did not originate from [dndDraggable]
if (dragIsExternal === true) {
if (mimeType !== null
&& mimeTypeIsCustom(mimeType)) {
// the type of content is well known and safe to handle
return JSON.parse(event.dataTransfer.getData(mimeType));
}
// the contained data is unknown, let user handle it
return {};
}
// the type of content is well known and safe to handle
return JSON.parse(event.dataTransfer.getData(mimeType));
}
export function filterEffects(effects, allowed) {
if (allowed === "all"
|| allowed === "uninitialized") {
return effects;
}
return effects.filter(function (effect) {
return allowed.toLowerCase().indexOf(effect) !== -1;
});
}
export function getDirectChildElement(parentElement, childElement) {
let directChild = childElement;
while (directChild.parentNode !== parentElement) {
// reached root node without finding given parent
if (!directChild.parentNode) {
return null;
}
directChild = directChild.parentNode;
}
return directChild;
}
export function shouldPositionPlaceholderBeforeElement(event, element, horizontal) {
const bounds = element.getBoundingClientRect();
// If the pointer is in the upper half of the list item element,
// we position the placeholder before the list item, otherwise after it.
if (horizontal) {
return (event.clientX < bounds.left + bounds.width / 2);
}
return (event.clientY < bounds.top + bounds.height / 2);
}
export function calculateDragImageOffset(event, dragImage) {
const dragImageComputedStyle = window.getComputedStyle(dragImage);
const paddingTop = parseFloat(dragImageComputedStyle.paddingTop) || 0;
const paddingLeft = parseFloat(dragImageComputedStyle.paddingLeft) || 0;
const borderTop = parseFloat(dragImageComputedStyle.borderTopWidth) || 0;
const borderLeft = parseFloat(dragImageComputedStyle.borderLeftWidth) || 0;
return {
x: event.offsetX + paddingLeft + borderLeft,
y: event.offsetY + paddingTop + borderTop
};
}
export function setDragImage(event, dragImage, offsetFunction) {
const offset = offsetFunction(event, dragImage) || { x: 0, y: 0 };
event.dataTransfer.setDragImage(dragImage, offset.x, offset.y);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbC01MmFicC1uZy1mb3JtLWdlbmVyYXRvci9zcmMvbmd4LWRyYWctZHJvcC9kbmQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0EsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQWtCLENBQUM7QUFFdkUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUM7QUFDcEQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7QUFFckMsTUFBTSxVQUFVLGdCQUFnQixDQUFFLFFBQWU7SUFFL0MsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFFLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUUsS0FBSyxnQkFBZ0IsQ0FBQztBQUM1RSxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFFLEtBQWU7SUFFbkQsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFHO1FBRXZCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBRXZDLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsS0FBSyxFQUFHO1lBRVgsT0FBTyxjQUFjLENBQUM7U0FDdkI7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRztZQUV0QyxJQUFJLEtBQUssQ0FBRSxDQUFDLENBQUUsS0FBSyxjQUFjO21CQUM1QixLQUFLLENBQUUsQ0FBQyxDQUFFLEtBQUssY0FBYzttQkFDN0IsZ0JBQWdCLENBQUUsS0FBSyxDQUFFLENBQUMsQ0FBRSxDQUFFLEVBQUc7Z0JBRXBDLE9BQU8sS0FBSyxDQUFFLENB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QUFFLElBQUksRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQztJQUVqRSxLQUFLLENBQUMsWUFBb0IsQ0FBQyxZQUFZLENBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBRSxDQUFDO0FBQzVFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEcm9wRWZmZWN0LCBFZmZlY3RBbGxvd2VkIH0gZnJvbSBcIi4vZG5kLXR5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJhZ0Ryb3BEYXRhIHtcbiAgZGF0YT86YW55O1xuICB0eXBlPzpzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG5kRXZlbnQgZXh0ZW5kcyBEcmFnRXZlbnQge1xuICBfZG5kVXNpbmdIYW5kbGU/OmJvb2xlYW47XG4gIF9kbmREcm9wem9uZUFjdGl2ZT86dHJ1ZTtcbn1cblxuZXhwb3J0IHR5cGUgRG5kRHJhZ0ltYWdlT2Zmc2V0RnVuY3Rpb24gPSAoIGV2ZW50OkRyYWdFdmVudCwgZHJhZ0ltYWdlOkVsZW1lbnQgKSA9PiB7IHg6bnVtYmVyLCB5Om51bWJlciB9O1xuXG5leHBvcnQgY29uc3QgRFJPUF9FRkZFQ1RTID0gWyBcIm1vdmVcIiwgXCJjb3B5XCIsIFwibGlua1wiIF0gYXMgRHJvcEVmZmVjdFtdO1xuXG5leHBvcnQgY29uc3QgQ1VTVE9NX01JTUVfVFlQRSA9IFwiYXBwbGljYXRpb24veC1kbmRcIjtcbmV4cG9ydCBjb25zdCBKU09OX01JTUVfVFlQRSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuZXhwb3J0IGNvbnN0IE1TSUVfTUlNRV9UWVBFID0gXCJUZXh0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW1lVHlwZUlzQ3VzdG9tKCBtaW1lVHlwZTpzdHJpbmcgKSB7XG5cbiAgcmV0dXJuIG1pbWVUeXBlLnN1YnN0ciggMCwgQ1VTVE9NX01JTUVfVFlQRS5sZW5ndGggKSA9PT0gQ1VTVE9NX01JTUVfVFlQRTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdlbGxLbm93bk1pbWVUeXBlKCBldmVudDpEcmFnRXZlbnQgKTpzdHJpbmcgfCBudWxsIHtcblxuICBpZiggZXZlbnQuZGF0YVRyYW5zZmVyICkge1xuXG4gICAgY29uc3QgdHlwZXMgPSBldmVudC5kYXRhVHJhbnNmZXIudHlwZXM7XG5cbiAgICAvLyBJRSA5IHdvcmthcm91bmQuXG4gICAgaWYoICF0eXBlcyApIHtcblxuICAgICAgcmV0dXJuIE1TSUVfTUlNRV9UWVBFO1xuICAgIH1cblxuICAgIGZvciggbGV0IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKysgKSB7XG5cbiAgICAgIGlmKCB0eXBlc1sgaSBdID09PSBNU0lFX01JTUVfVFlQRVxuICAgICAgICB8fCB0eXBlc1sgaSBdID09PSBKU09OX01JTUVfVFlQRVxuICAgICAgICB8fCBtaW1lVHlwZUlzQ3VzdG9tKCB0eXBlc1sgaSBdICkgKSB7XG5cbiAgICAgICAgcmV0dXJuIHR5cGVzWyBpIF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREcmFnRGF0YSggZXZlbnQ6RHJhZ0V2ZW50LCBkYXRhOkRyYWdEcm9wRGF0YSwgZWZmZWN0QWxsb3dlZDpFZmZlY3RBbGxvd2VkICk6dm9pZCB7XG5cbiAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIE1pY3Jvc29mdCBFZGdlIGRvbid0IHN1cHBvcnQgY3VzdG9tIG1pbWUgdHlwZXMsIHNlZSBkZXNpZ24gZG9jOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWFyY2VsanVlbmVtYW5uL2FuZ3VsYXItZHJhZy1hbmQtZHJvcC1saXN0cy93aWtpL0RhdGEtVHJhbnNmZXItRGVzaWduXG4gIGNvbnN0IG1pbWVUeXBlID0gQ1VTVE9NX01JTUVfVFlQRSArIChkYXRhLnR5cGUgPyAoXCItXCIgKyBkYXRhLnR5cGUpIDogXCJcIik7XG5cbiAgY29uc3QgZGF0YVN0cmluZyA9IEpTT04uc3RyaW5naWZ5KCBkYXRhICk7XG5cbiAgdHJ5IHtcblxuICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKCBtaW1lVHlwZSwgZGF0YVN0cmluZyApO1xuXG4gIH1cbiAgY2F0Y2goIGUgKSB7XG5cbiAgICAvLyAgIFNldHRpbmcgYSBjdXN0b20gTUlNRSB0eXBlIGRpZCBub3Qgd29yaywgd2UgYXJlIHByb2JhYmx5IGluIElFIG9yIEVkZ2UuXG4gICAgdHJ5IHtcblxuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoIEpTT05fTUlNRV9UWVBFLCBkYXRhU3RyaW5nICk7XG5cbiAgICB9XG4gICAgY2F0Y2goIGUgKSB7XG5cbiAgICAgIC8vICAgV2UgYXJlIGluIEludGVybmV0IEV4cGxvcmVyIGFuZCBjYW4gb25seSB1c2UgdGhlIFRleHQgTUlNRSB0eXBlLiBBbHNvIG5vdGUgdGhhdCBJRVxuICAgICAgLy8gICBkb2VzIG5vdCBhbGxvdyBjaGFuZ2luZyB0aGUgY3Vyc29yIGluIHRoZSBkcmFnb3ZlciBldmVudCwgdGhlcmVmb3JlIHdlIGhhdmUgdG8gY2hvb3NlXG4gICAgICAvLyAgIHRoZSBvbmUgd2Ugd2FudCB0byBkaXNwbGF5IG5vdyBieSBzZXR0aW5nIGVmZmVjdEFsbG93ZWQuXG4gICAgICBjb25zdCBlZmZlY3RzQWxsb3dlZCA9IGZpbHRlckVmZmVjdHMoIERST1BfRUZGRUNUUywgZWZmZWN0QWxsb3dlZCApO1xuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSBlZmZlY3RzQWxsb3dlZFsgMCBdO1xuXG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YSggTVNJRV9NSU1FX1RZUEUsIGRhdGFTdHJpbmcgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERyb3BEYXRhKCBldmVudDpEcmFnRXZlbnQsIGRyYWdJc0V4dGVybmFsOmJvb2xlYW4gKTpEcmFnRHJvcERhdGEge1xuXG4gIC8vIGNoZWNrIGlmIHRoZSBtaW1lIHR5cGUgaXMgd2VsbCBrbm93blxuICBjb25zdCBtaW1lVHlwZSA9IGdldFdlbGxLbm93bk1pbWVUeXBlKCBldmVudCApO1xuXG4gIC8vIGRyYWcgZGlkIG5vdCBvcmlnaW5hdGUgZnJvbSBbZG5kRHJhZ2dhYmxlXVxuICBpZiggZHJhZ0lzRXh0ZXJuYWwgPT09IHRydWUgKSB7XG5cbiAgICBpZiggbWltZVR5cGUgIT09IG51bGxcbiAgICAgICYmIG1pbWVUeXBlSXNDdXN0b20oIG1pbWVUeXBlICkgKSB7XG5cbiAgICAgIC8vIHRoZSB0eXBlIG9mIGNvbnRlbnQgaXMgd2VsbCBrbm93biBhbmQgc2FmZSB0byBoYW5kbGVcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKCBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSggbWltZVR5cGUgKSApO1xuICAgIH1cblxuICAgIC8vIHRoZSBjb250YWluZWQgZGF0YSBpcyB1bmtub3duLCBsZXQgdXNlciBoYW5kbGUgaXRcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvLyB0aGUgdHlwZSBvZiBjb250ZW50IGlzIHdlbGwga25vd24gYW5kIHNhZmUgdG8gaGFuZGxlXG4gIHJldHVybiBKU09OLnBhcnNlKCBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSggbWltZVR5cGUgKSApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRWZmZWN0cyggZWZmZWN0czpEcm9wRWZmZWN0W10sIGFsbG93ZWQ6RWZmZWN0QWxsb3dlZCB8IERyb3BFZmZlY3QgKTpEcm9wRWZmZWN0W10ge1xuXG4gIGlmKCBhbGxvd2VkID09PSBcImFsbFwiXG4gICAgfHwgYWxsb3dlZCA9PT0gXCJ1bmluaXRpYWxpemVkXCIgKSB7XG5cbiAgICByZXR1cm4gZWZmZWN0cztcbiAgfVxuXG4gIHJldHVybiBlZmZlY3RzLmZpbHRlciggZnVuY3Rpb24oIGVmZmVjdCApIHtcblxuICAgIHJldHVybiBhbGxvd2VkLnRvTG93ZXJDYXNlKCkuaW5kZXhPZiggZWZmZWN0ICkgIT09IC0xO1xuICB9ICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXJlY3RDaGlsZEVsZW1lbnQoIHBhcmVudEVsZW1lbnQ6RWxlbWVudCwgY2hpbGRFbGVtZW50OkVsZW1lbnQgKTpFbGVtZW50IHwgbnVsbCB7XG5cbiAgbGV0IGRpcmVjdENoaWxkOk5vZGUgPSBjaGlsZEVsZW1lbnQ7XG5cbiAgd2hpbGUoIGRpcmVjdENoaWxkLnBhcmVudE5vZGUgIT09IHBhcmVudEVsZW1lbnQgKSB7XG5cbiAgICAvLyByZWFjaGVkIHJvb3Qgbm9kZSB3aXRob3V0IGZpbmRpbmcgZ2l2ZW4gcGFyZW50XG4gICAgaWYoICFkaXJlY3RDaGlsZC5wYXJlbnROb2RlICkge1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBkaXJlY3RDaGlsZCA9IGRpcmVjdENoaWxkLnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gZGlyZWN0Q2hpbGQgYXMgRWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFBvc2l0aW9uUGxhY2Vob2xkZXJCZWZvcmVFbGVtZW50KCBldmVudDpEcmFnRXZlbnQsIGVsZW1lbnQ6RWxlbWVudCwgaG9yaXpvbnRhbDpib29sZWFuICkge1xuXG4gIGNvbnN0IGJvdW5kcyA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgLy8gSWYgdGhlIHBvaW50ZXIgaXMgaW4gdGhlIHVwcGVyIGhhbGYgb2YgdGhlIGxpc3QgaXRlbSBlbGVtZW50LFxuICAvLyB3ZSBwb3NpdGlvbiB0aGUgcGxhY2Vob2xkZXIgYmVmb3JlIHRoZSBsaXN0IGl0ZW0sIG90aGVyd2lzZSBhZnRlciBpdC5cbiAgaWYoIGhvcml6b250YWwgKSB7XG5cbiAgICByZXR1cm4gKGV2ZW50LmNsaWVudFggPCBib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAvIDIpO1xuICB9XG5cbiAgcmV0dXJuIChldmVudC5jbGllbnRZIDwgYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLyAyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZURyYWdJbWFnZU9mZnNldCggZXZlbnQ6RHJhZ0V2ZW50LCBkcmFnSW1hZ2U6RWxlbWVudCApOnsgeDpudW1iZXIsIHk6bnVtYmVyIH0ge1xuXG4gIGNvbnN0IGRyYWdJbWFnZUNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZHJhZ0ltYWdlICk7XG4gIGNvbnN0IHBhZGRpbmdUb3AgPSBwYXJzZUZsb2F0KCBkcmFnSW1hZ2VDb21wdXRlZFN0eWxlLnBhZGRpbmdUb3AgKSB8fCAwO1xuICBjb25zdCBwYWRkaW5nTGVmdCA9IHBhcnNlRmxvYXQoIGRyYWdJbWFnZUNvbXB1dGVkU3R5bGUucGFkZGluZ0xlZnQgKSB8fCAwO1xuICBjb25zdCBib3JkZXJUb3AgPSBwYXJzZUZsb2F0KCBkcmFnSW1hZ2VDb21wdXRlZFN0eWxlLmJvcmRlclRvcFdpZHRoICkgfHwgMDtcbiAgY29uc3QgYm9yZGVyTGVmdCA9IHBhcnNlRmxvYXQoIGRyYWdJbWFnZUNvbXB1dGVkU3R5bGUuYm9yZGVyTGVmdFdpZHRoICkgfHwgMDtcblxuICByZXR1cm4ge1xuICAgIHg6IGV2ZW50Lm9mZnNldFggKyBwYWRkaW5nTGVmdCArIGJvcmRlckxlZnQsXG4gICAgeTogZXZlbnQub2Zmc2V0WSArIHBhZGRpbmdUb3AgKyBib3JkZXJUb3BcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERyYWdJbWFnZSggZXZlbnQ6RHJhZ0V2ZW50LCBkcmFnSW1hZ2U6RWxlbWVudCwgb2Zmc2V0RnVuY3Rpb246RG5kRHJhZ0ltYWdlT2Zmc2V0RnVuY3Rpb24gKTp2b2lkIHtcblxuICBjb25zdCBvZmZzZXQgPSBvZmZzZXRGdW5jdGlvbiggZXZlbnQsIGRyYWdJbWFnZSApIHx8IHt4OiAwLCB5OiAwfTtcblxuICAoZXZlbnQuZGF0YVRyYW5zZmVyIGFzIGFueSkuc2V0RHJhZ0ltYWdlKCBkcmFnSW1hZ2UsIG9mZnNldC54LCBvZmZzZXQueSApO1xufVxuIl19