ng2-dragula
Version:
Simple drag and drop with dragula
1 lines • 40.8 kB
Source Map (JSON)
{"version":3,"file":"ng2-dragula.mjs","sources":["../../../libs/ng2-dragula/src/Group.ts","../../../libs/ng2-dragula/src/EventTypes.ts","../../../libs/ng2-dragula/src/DrakeFactory.ts","../../../libs/ng2-dragula/src/components/dragula.service.ts","../../../libs/ng2-dragula/src/components/dragula.directive.ts","../../../libs/ng2-dragula/src/components/dragula.module.ts","../../../libs/ng2-dragula/src/MockDrake.ts","../../../libs/ng2-dragula/src/ng2-dragula.ts"],"sourcesContent":["import { DrakeWithModels } from \"./DrakeWithModels\";\nimport { DragulaOptions } from \"./DragulaOptions\";\n\nexport class Group {\n public initEvents = false;\n constructor(\n public name: string,\n public drake: DrakeWithModels,\n public options: DragulaOptions\n ) {}\n}\n","export enum EventTypes {\n Cancel = \"cancel\",\n Cloned = \"cloned\",\n Drag = \"drag\",\n DragEnd = \"dragend\",\n Drop = \"drop\",\n Out = \"out\",\n Over = \"over\",\n Remove = \"remove\",\n Shadow = \"shadow\",\n DropModel = \"dropModel\",\n RemoveModel = \"removeModel\",\n}\n\nexport const AllEvents: EventTypes[] = Object.keys(EventTypes).map(k => EventTypes[k as keyof typeof EventTypes] as EventTypes);","import { DragulaOptions } from './DragulaOptions';\nimport { DrakeWithModels } from './DrakeWithModels';\nimport * as dragulaExpt from 'dragula';\nexport const dragula: (containers?: any, options?: any) => any = (dragulaExpt as any).default || dragulaExpt;\n\nexport type DrakeBuilder = (containers: any[], options: DragulaOptions) => DrakeWithModels;\n\nexport class DrakeFactory {\n constructor (public build: DrakeBuilder = dragula) {}\n}\n\n","import { Injectable, Optional } from '@angular/core';\nimport { Group } from '../Group';\nimport { DragulaOptions } from '../DragulaOptions';\nimport { Subject, Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { EventTypes, AllEvents } from '../EventTypes';\nimport { DrakeFactory } from '../DrakeFactory';\n\ntype FilterProjector<T extends { name: string }> = (\n name: string,\n args: any\n) => T;\ntype Dispatch = { event: EventTypes; name: string; args: any[] };\n\nconst filterEvent =\n <\n T extends {\n name: string;\n source?: any;\n target?: any;\n sourceModel?: any;\n targetModel?: any;\n }\n >(\n eventType: EventTypes,\n filterDragType: string | undefined,\n projector: FilterProjector<T>\n ) =>\n (input: Observable<Dispatch>): Observable<T> => {\n return input.pipe(\n filter(({ event, name }) => {\n return (\n event === eventType &&\n (filterDragType === undefined || name === filterDragType)\n );\n }),\n map(({ name, args }) => projector(name, args))\n );\n };\n\nconst elContainerSourceProjector = (\n name: string,\n [el, container, source]: [Element, Element, Element]\n) => ({ name, el, container, source });\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DragulaService {\n private groups: { [k: string]: Group } = {};\n private dispatch$ = new Subject<Dispatch>();\n private elContainerSource = (eventType: EventTypes) => (groupName?: string) =>\n this.dispatch$.pipe(\n filterEvent(eventType, groupName, elContainerSourceProjector)\n );\n /* https://github.com/bevacqua/dragula#drakeon-events */\n // eslint-disable-next-line @typescript-eslint/member-ordering\n public cancel = this.elContainerSource(EventTypes.Cancel);\n // eslint-disable-next-line @typescript-eslint/member-ordering\n public remove = this.elContainerSource(EventTypes.Remove);\n // eslint-disable-next-line @typescript-eslint/member-ordering\n public shadow = this.elContainerSource(EventTypes.Shadow);\n // eslint-disable-next-line @typescript-eslint/member-ordering\n public over = this.elContainerSource(EventTypes.Over);\n // eslint-disable-next-line @typescript-eslint/member-ordering\n public out = this.elContainerSource(EventTypes.Out);\n\n public drag = (groupName?: string) =>\n this.dispatch$.pipe(\n filterEvent(\n EventTypes.Drag,\n groupName,\n (name, [el, source]: [Element, Element]) => ({ name, el, source })\n )\n );\n\n public dragend = (groupName?: string) =>\n this.dispatch$.pipe(\n filterEvent(EventTypes.DragEnd, groupName, (name, [el]: [Element]) => ({\n name,\n el,\n }))\n );\n\n public drop = (groupName?: string) =>\n this.dispatch$.pipe(\n filterEvent(\n EventTypes.Drop,\n groupName,\n (\n name,\n [el, target, source, sibling]: [Element, Element, Element, Element]\n ) => {\n return { name, el, target, source, sibling };\n }\n )\n );\n\n public cloned = (groupName?: string) =>\n this.dispatch$.pipe(\n filterEvent(\n EventTypes.Cloned,\n groupName,\n (\n name,\n [clone, original, cloneType]: [Element, Element, 'mirror' | 'copy']\n ) => {\n return { name, clone, original, cloneType };\n }\n )\n );\n\n public dropModel = <T = any>(groupName?: string) =>\n this.dispatch$.pipe(\n filterEvent(\n EventTypes.DropModel,\n groupName,\n (\n name,\n [\n el,\n target,\n source,\n sibling,\n item,\n sourceModel,\n targetModel,\n sourceIndex,\n targetIndex,\n ]: [Element, Element, Element, Element, T, T[], T[], number, number]\n ) => {\n return {\n name,\n el,\n target,\n source,\n sibling,\n item,\n sourceModel,\n targetModel,\n sourceIndex,\n targetIndex,\n };\n }\n )\n );\n\n public removeModel = <T = any>(groupName?: string) =>\n this.dispatch$.pipe(\n filterEvent(\n EventTypes.RemoveModel,\n groupName,\n (\n name,\n [el, container, source, item, sourceModel, sourceIndex]: [\n Element,\n Element,\n Element,\n T,\n T[],\n number\n ]\n ) => {\n return {\n name,\n el,\n container,\n source,\n item,\n sourceModel,\n sourceIndex,\n };\n }\n )\n );\n\n constructor(@Optional() private drakeFactory: DrakeFactory) {\n if (this.drakeFactory === null || this.drakeFactory === undefined) {\n this.drakeFactory = new DrakeFactory();\n }\n }\n\n /** Public mainly for testing purposes. Prefer `createGroup()`. */\n public add(group: Group): Group {\n const existingGroup = this.find(group.name);\n if (existingGroup) {\n throw new Error('Group named: \"' + group.name + '\" already exists.');\n }\n this.groups[group.name] = group;\n this.handleModels(group);\n this.setupEvents(group);\n return group;\n }\n\n public find(name: string): Group {\n return this.groups[name];\n }\n\n public destroy(name: string): void {\n const group = this.find(name);\n if (!group) {\n return;\n }\n group.drake && group.drake.destroy();\n delete this.groups[name];\n }\n\n /**\n * Creates a group with the specified name and options.\n *\n * Note: formerly known as `setOptions`\n */\n public createGroup<T = any>(name: string, options: DragulaOptions<T>): Group {\n return this.add(\n new Group(name, this.drakeFactory.build([], options), options)\n );\n }\n\n private handleModels({ name, drake, options }: Group): void {\n let dragElm: any;\n let dragIndex: number;\n let dropIndex: number;\n drake.on('remove', (el: any, container: any, source: any) => {\n if (!drake.models) {\n return;\n }\n let sourceModel = drake.models[drake.containers.indexOf(source)];\n sourceModel = sourceModel.slice(0); // clone it\n const item = sourceModel.splice(dragIndex, 1)[0];\n this.dispatch$.next({\n event: EventTypes.RemoveModel,\n name,\n args: [el, container, source, item, sourceModel, dragIndex],\n });\n });\n drake.on('drag', (el: any, source: any) => {\n if (!drake.models) {\n return;\n }\n dragElm = el;\n dragIndex = this.domIndexOf(el, source);\n });\n drake.on(\n 'drop',\n (dropElm: any, target: Element, source: Element, sibling?: Element) => {\n if (!drake.models || !target) {\n return;\n }\n dropIndex = this.domIndexOf(dropElm, target);\n let sourceModel = drake.models[drake.containers.indexOf(source)];\n let targetModel = drake.models[drake.containers.indexOf(target)];\n let item: any;\n if (target === source) {\n sourceModel = sourceModel.slice(0);\n item = sourceModel.splice(dragIndex, 1)[0];\n sourceModel.splice(dropIndex, 0, item);\n // this was true before we cloned and updated sourceModel,\n // but targetModel still has the old value\n targetModel = sourceModel;\n } else {\n const isCopying = dragElm !== dropElm;\n item = sourceModel[dragIndex];\n if (isCopying) {\n if (!options.copyItem) {\n throw new Error(\n 'If you have enabled `copy` on a group, you must provide a `copyItem` function.'\n );\n }\n item = options.copyItem(item);\n }\n\n if (!isCopying) {\n sourceModel = sourceModel.slice(0);\n sourceModel.splice(dragIndex, 1);\n }\n targetModel = targetModel.slice(0);\n targetModel.splice(dropIndex, 0, item);\n if (isCopying) {\n try {\n target.removeChild(dropElm);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n }\n this.dispatch$.next({\n event: EventTypes.DropModel,\n name,\n args: [\n dropElm,\n target,\n source,\n sibling,\n item,\n sourceModel,\n targetModel,\n dragIndex,\n dropIndex,\n ],\n });\n }\n );\n }\n\n private setupEvents(group: Group): void {\n if (group.initEvents) {\n return;\n }\n group.initEvents = true;\n const name = group.name;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const that: any = this;\n const emitter = (event: EventTypes) => {\n switch (event) {\n case EventTypes.Drag:\n group.drake.on(event, (...args: any[]) => {\n this.dispatch$.next({ event, name, args });\n });\n break;\n case EventTypes.Drop:\n group.drake.on(event, (...args: any[]) => {\n this.dispatch$.next({ event, name, args });\n });\n break;\n\n case EventTypes.DragEnd:\n group.drake.on(event, (...args: any[]) => {\n this.dispatch$.next({ event, name, args });\n });\n break;\n \n case EventTypes.Cancel:\n case EventTypes.Remove:\n case EventTypes.Shadow:\n case EventTypes.Over:\n case EventTypes.Out:\n group.drake.on(event, (...args: any[]) => {\n this.dispatch$.next({ event, name, args });\n });\n break;\n\n case EventTypes.Cloned:\n group.drake.on(event, (...args: any[]) => {\n this.dispatch$.next({ event, name, args });\n });\n break;\n case EventTypes.DropModel:\n group.drake.on(event, (...args: any[]) => {\n this.dispatch$.next({ event, name, args });\n });\n break;\n\n case EventTypes.RemoveModel:\n group.drake.on(event, (...args: any[]) => {\n this.dispatch$.next({ event, name, args });\n });\n break;\n default:\n break;\n }\n };\n AllEvents.forEach(emitter);\n }\n\n private domIndexOf(child: any, parent: any): any {\n if (parent) {\n return Array.prototype.indexOf.call(parent.children, child);\n }\n }\n}\n","import { Directive, Input, Output, ElementRef, OnInit, OnChanges, OnDestroy, SimpleChange, EventEmitter } from '@angular/core';\nimport { DragulaService } from './dragula.service';\nimport { DrakeWithModels } from '../DrakeWithModels';\nimport { Subscription } from 'rxjs';\nimport { Group } from '../Group';\n\n@Directive({selector: '[dragula]'})\nexport class DragulaDirective implements OnChanges, OnDestroy {\n @Input() public dragula?: string;\n @Input() public dragulaModel?: any[];\n @Output() public dragulaModelChange = new EventEmitter<any[]>();\n\n private subs?: Subscription;\n\n private get container(): HTMLElement {\n return this.el && this.el.nativeElement;\n }\n private group?: Group;\n\n public constructor(private el: ElementRef, private dragulaService: DragulaService) {\n }\n\n public ngOnChanges(changes: {dragula?: SimpleChange, dragulaModel?: SimpleChange}): void {\n if (changes && changes.dragula) {\n const { previousValue: prev, currentValue: current, firstChange } = changes.dragula;\n const hadPreviousValue = !!prev;\n const hasNewValue = !!current;\n // something -> null => teardown only\n // something -> something => teardown, then setup\n // null -> something => setup only\n //\n // null -> null (precluded by fact of change being present)\n if (hadPreviousValue) {\n this.teardown(prev);\n }\n if (hasNewValue) {\n this.setup();\n }\n } else if (changes && changes.dragulaModel) {\n // this code only runs when you're not changing the group name\n // because if you're changing the group name, you'll be doing setup or teardown\n // it also only runs if there is a group name to attach to.\n const { previousValue: prev, currentValue: current, firstChange } = changes.dragulaModel;\n const drake = this.group?.drake;\n if (this.dragula && drake) {\n drake.models = drake.models || [];\n const prevIndex = drake.models.indexOf(prev);\n if (prevIndex !== -1) {\n // delete the previous\n drake.models.splice(prevIndex, 1);\n // maybe insert a new one at the same spot\n if (current) {\n drake.models.splice(prevIndex, 0, current);\n }\n } else if (current) {\n // no previous one to remove; just push this one.\n drake.models.push(current);\n }\n }\n }\n }\n\n // call ngOnInit 'setup' because we want to call it in ngOnChanges\n // and it would otherwise run twice\n public setup(): void {\n const checkModel = (group: Group) => {\n if (this.dragulaModel) {\n if (group.drake?.models) {\n group.drake?.models?.push(this.dragulaModel);\n } else {\n if (group.drake) {\n group.drake.models = [this.dragulaModel];\n }\n }\n }\n };\n\n // find or create a group\n if (!this.dragula) {\n return;\n }\n\n let group = this.dragulaService.find(this.dragula);\n if (!group) {\n const options = {};\n group = this.dragulaService.createGroup(this.dragula, options);\n }\n\n // ensure model and container element are pushed\n checkModel(group);\n group.drake?.containers.push(this.container);\n this.subscribe(this.dragula);\n\n this.group = group;\n }\n\n public subscribe(name: string) {\n this.subs = new Subscription();\n this.subs.add(\n this.dragulaService\n .dropModel(name)\n .subscribe(({ source, target, sourceModel, targetModel }) => {\n if (source === this.el.nativeElement) {\n this.dragulaModelChange.emit(sourceModel);\n } else if (target === this.el.nativeElement) {\n this.dragulaModelChange.emit(targetModel);\n }\n })\n );\n this.subs.add(\n this.dragulaService\n .removeModel(name)\n .subscribe(({ source, sourceModel }) => {\n if (source === this.el.nativeElement) {\n this.dragulaModelChange.emit(sourceModel);\n }\n })\n );\n }\n\n public teardown(groupName: string): void {\n if (this.subs) {\n this.subs.unsubscribe();\n }\n const group = this.dragulaService.find(groupName);\n if (group) {\n const itemToRemove = group.drake?.containers.indexOf(this.el.nativeElement);\n if (itemToRemove !== -1) {\n group.drake?.containers.splice(itemToRemove, 1);\n }\n if (this.dragulaModel && group.drake && group.drake.models) {\n const modelIndex = group.drake.models.indexOf(this.dragulaModel);\n if (modelIndex !== -1) {\n group.drake.models.splice(modelIndex, 1);\n }\n }\n }\n }\n\n public ngOnDestroy(): void {\n if (!this.dragula) {\n return;\n }\n\n this.teardown(this.dragula);\n }\n\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { DragulaDirective } from './dragula.directive';\nimport { DragulaService } from './dragula.service';\n\n@NgModule({\n exports: [DragulaDirective],\n declarations: [DragulaDirective],\n providers: [DragulaService]\n})\nexport class DragulaModule {\n static forRoot(): ModuleWithProviders<DragulaModule> {\n return {\n ngModule: DragulaModule,\n providers: [DragulaService]\n };\n }\n}\n","import { Subject, Subscription } from 'rxjs';\nimport { DrakeWithModels } from './DrakeWithModels';\nimport { filter } from 'rxjs/operators';\nimport { EventTypes } from './EventTypes';\nimport { DragulaOptions } from './DragulaOptions';\nimport { DrakeFactory } from './DrakeFactory';\nimport { Drake } from 'dragula';\n\nexport const MockDrakeFactory = new DrakeFactory((containers, options) => {\n return new MockDrake(containers, options);\n});\n\n/** You can use MockDrake to simulate Drake events.\n *\n * The three methods that actually do anything are `on(event, listener)`,\n * `destroy()`, and a new method, `emit()`. Use `emit()` to manually emit Drake\n * events, and if you injected MockDrake properly with MockDrakeFactory or\n * mocked the DragulaService.find() method, then you can make ng2-dragula think\n * drags and drops are happening.\n *\n * Caveats:\n *\n * 1. YOU MUST MAKE THE DOM CHANGES YOURSELF.\n * 2. REPEAT: YOU MUST MAKE THE DOM CHANGES YOURSELF.\n * That means `source.removeChild(el)`, and `target.insertBefore(el)`.\n * 3. None of the other methods do anything.\n * That's ok, because ng2-dragula doesn't use them.\n */\nexport class MockDrake implements DrakeWithModels {\n // Basic but fully functional event emitter shim\n private emitter$ = new Subject<{ eventType: EventTypes, args: any[] }>();\n private subs = new Subscription();\n\n /**\n * @param containers A list of container elements.\n * @param options These will NOT be used. At all.\n * @param models Nonstandard, but useful for testing using `new MockDrake()` directly.\n * Note, default value is undefined, like a real Drake. Don't change that.\n */\n constructor(\n public containers: Element[] = [],\n public options: DragulaOptions = {},\n public models?: any[][]\n ) {}\n on(event: 'drag', listener: (el: Element, source: Element) => void): Drake;\n on(event: 'dragend', listener: (el: Element) => void): Drake;\n on(event: 'drop', listener: (el: Element, target: Element, source: Element, sibling: Element) => void): Drake;\n on(event: 'cancel' | 'remove' | 'shadow' | 'over' | 'out', listener: (el: Element, container: Element, source: Element) => void): Drake;\n on(event: 'cloned', listener: (clone: Element, original: Element, type: 'copy' | 'mirror') => void): Drake;\n on(event: 'dropModel', listener: ([el, target, source, sibling, item, sourceModel, targetModel, sourceIndex, targetIndex,]: [Element, Element, Element, Element, any, any[], any[], number, number]) => void): Drake;\n on(event: 'removeModel', listener: ([el, container, source, item, sourceModel, sourceIndex]: [Element, Element, Element, any, any[], number]) => void): Drake;\n \n on(event: string, callback: (...args: any)=> any): any {\n this.subs.add(this.emitter$\n .pipe(\n filter(({ eventType }) => eventType === event)\n )\n .subscribe(({eventType, args} ) => {\n if (eventType === EventTypes.Drag) {\n const argument = Array.from(args);\n const el = argument[0];\n const source = argument[1];\n //@ts-ignore\n callback(el, source);\n return;\n }\n\n if (eventType === EventTypes.Drop) {\n const argument = Array.from(args);\n const el = argument[0];\n const target = argument[1];\n const source = argument[2];\n const sibling = argument[3];\n //@ts-ignore\n callback(el, target, source, sibling);\n return;\n }\n\n if (eventType === EventTypes.Remove) {\n const argument = Array.from(args);\n const el = argument[0];\n const container = argument[1];\n const source = argument[2];\n //@ts-ignore\n callback(el, container, source);\n return;\n }\n callback(args);\n }));\n }\n\n /* Doesn't represent anything meaningful. */\n dragging = false;\n\n /* Does nothing useful. */\n start(item: Element): any {\n this.dragging = true;\n }\n /* Does nothing useful. */\n end(): any {\n this.dragging = false;\n }\n /* Does nothing useful. */\n cancel(revert: boolean): any;\n cancel(): any;\n cancel(revert?: any) {\n this.dragging = false;\n }\n\n /* Does nothing useful. */\n canMove(item: Element) {\n return this.options.accepts ? this.options.accepts(item) : false;\n }\n\n /* Does nothing useful. */\n remove(): any {\n this.dragging = false;\n }\n\n destroy(): any {\n this.subs.unsubscribe();\n }\n\n /**\n * This is the most useful method. You can use it to manually fire events that would normally\n * be fired by a real drake.\n *\n * You're likely most interested in firing `drag`, `remove` and `drop`, the three events\n * DragulaService uses to implement [dragulaModel].\n *\n * See https://github.com/bevacqua/dragula#drakeon-events for what you should emit (and in what order).\n *\n * (Note also, firing dropModel and removeModel won't work. You would have to mock DragulaService for that.)\n */\n emit(eventType: EventTypes, ...args: any[]) {\n this.emitter$.next({ eventType, args });\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.DrakeFactory","i1.DragulaService"],"mappings":"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"}