UNPKG

@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
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