@worktile/theia 21.0.0 → 21.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -14307,6 +14307,69 @@ const createHrPlugin = (locale) => createPluginFactory({
|
|
|
14307
14307
|
}
|
|
14308
14308
|
})();
|
|
14309
14309
|
|
|
14310
|
+
const getListTypes = () => {
|
|
14311
|
+
return [ElementKinds.bulletedList, ElementKinds.numberedList];
|
|
14312
|
+
};
|
|
14313
|
+
|
|
14314
|
+
const EDITOR_TO_IMAGE_TO_FLOATING_MAP = new WeakMap();
|
|
14315
|
+
const getImageWithFloatingMap = (editor) => {
|
|
14316
|
+
let imageWithFloatingMap = EDITOR_TO_IMAGE_TO_FLOATING_MAP.get(editor);
|
|
14317
|
+
if (!imageWithFloatingMap) {
|
|
14318
|
+
imageWithFloatingMap = new Map();
|
|
14319
|
+
EDITOR_TO_IMAGE_TO_FLOATING_MAP.set(editor, imageWithFloatingMap);
|
|
14320
|
+
}
|
|
14321
|
+
return imageWithFloatingMap;
|
|
14322
|
+
};
|
|
14323
|
+
const isFloatingElementByType = (element) => {
|
|
14324
|
+
return (element.type === ElementKinds.paragraph ||
|
|
14325
|
+
element.type === ElementKinds.blockquote ||
|
|
14326
|
+
isHeadingElement(element) ||
|
|
14327
|
+
getListTypes().includes(element.type));
|
|
14328
|
+
};
|
|
14329
|
+
const isImageWithFloating = (element) => {
|
|
14330
|
+
return element.layout === LayoutTypes.wrapLeft || element.layout === LayoutTypes.wrapRight;
|
|
14331
|
+
};
|
|
14332
|
+
const getFloatingElementsAndAccumulatedHeight = (editor, element, imageHeight) => {
|
|
14333
|
+
const index = editor.children.indexOf(element);
|
|
14334
|
+
let accumulatedHeight = 0;
|
|
14335
|
+
const floatingElements = [];
|
|
14336
|
+
for (let i = index + 1; i < editor.children.length; i++) {
|
|
14337
|
+
const child = editor.children[i];
|
|
14338
|
+
if (isFloatingElementByType(child) && accumulatedHeight <= imageHeight) {
|
|
14339
|
+
const currentHeight = getCachedHeightByElement(editor, child) || editor.getRoughHeight(child);
|
|
14340
|
+
accumulatedHeight += currentHeight;
|
|
14341
|
+
floatingElements.push(child);
|
|
14342
|
+
}
|
|
14343
|
+
else {
|
|
14344
|
+
break;
|
|
14345
|
+
}
|
|
14346
|
+
}
|
|
14347
|
+
return [floatingElements, accumulatedHeight];
|
|
14348
|
+
};
|
|
14349
|
+
const calcFloatingElements = (editor, element, imageHeight) => {
|
|
14350
|
+
const imageWithFloatingMap = getImageWithFloatingMap(editor);
|
|
14351
|
+
if (isImageWithFloating(element)) {
|
|
14352
|
+
const [floatingElements, accumulatedHeight] = getFloatingElementsAndAccumulatedHeight(editor, element, imageHeight);
|
|
14353
|
+
if (accumulatedHeight > 0 && floatingElements.length > 0) {
|
|
14354
|
+
const value = {};
|
|
14355
|
+
floatingElements.forEach(ele => (value[ele.key] = true));
|
|
14356
|
+
imageWithFloatingMap.set(element.key, value);
|
|
14357
|
+
return [floatingElements, accumulatedHeight];
|
|
14358
|
+
}
|
|
14359
|
+
}
|
|
14360
|
+
else {
|
|
14361
|
+
imageWithFloatingMap.delete(element.key);
|
|
14362
|
+
}
|
|
14363
|
+
return [[], 0];
|
|
14364
|
+
};
|
|
14365
|
+
const isFloatingElement = (editor, element) => {
|
|
14366
|
+
const imageWithFloatingMap = getImageWithFloatingMap(editor);
|
|
14367
|
+
for (const [, value] of imageWithFloatingMap) {
|
|
14368
|
+
return !!value[element.key];
|
|
14369
|
+
}
|
|
14370
|
+
return false;
|
|
14371
|
+
};
|
|
14372
|
+
|
|
14310
14373
|
class TheImage extends TheBaseElement {
|
|
14311
14374
|
get isOpen() {
|
|
14312
14375
|
return this.layoutToolbarRef && this.layoutToolbarRef.getOverlayRef() && this.layoutToolbarRef.getOverlayRef().hasAttached();
|
|
@@ -14376,7 +14439,7 @@ class TheImage extends TheBaseElement {
|
|
|
14376
14439
|
handle: (e) => this.onDelete(e)
|
|
14377
14440
|
}
|
|
14378
14441
|
];
|
|
14379
|
-
this.
|
|
14442
|
+
this.draggable = false;
|
|
14380
14443
|
this.beforeContextChange = (value) => {
|
|
14381
14444
|
if (value.element !== this.element && value.element.thumbUrl) {
|
|
14382
14445
|
let thumbUrl = value.element.thumbUrl;
|
|
@@ -14551,7 +14614,7 @@ class TheImage extends TheBaseElement {
|
|
|
14551
14614
|
}
|
|
14552
14615
|
event.preventDefault();
|
|
14553
14616
|
event.stopPropagation();
|
|
14554
|
-
this.
|
|
14617
|
+
this.draggable = true;
|
|
14555
14618
|
const imgElement = this.img.nativeElement;
|
|
14556
14619
|
const options = {
|
|
14557
14620
|
axis,
|
|
@@ -14564,7 +14627,7 @@ class TheImage extends TheBaseElement {
|
|
|
14564
14627
|
this.mouseMoveSubscription = this.theContextService.onMouseMove$.subscribe(e => this.mouseMoveHandle(e, options));
|
|
14565
14628
|
}
|
|
14566
14629
|
mouseMoveHandle(event, options) {
|
|
14567
|
-
if (this.
|
|
14630
|
+
if (this.draggable) {
|
|
14568
14631
|
const { axis, printerPositionX, printerPositionY, internalWidth, internalHeight, maxWidth } = options;
|
|
14569
14632
|
const isReversal = axis.includes('-');
|
|
14570
14633
|
let offsetX = event.pageX - printerPositionX;
|
|
@@ -14616,8 +14679,8 @@ class TheImage extends TheBaseElement {
|
|
|
14616
14679
|
}
|
|
14617
14680
|
}
|
|
14618
14681
|
endDrag(event) {
|
|
14619
|
-
if (this.
|
|
14620
|
-
this.
|
|
14682
|
+
if (this.draggable) {
|
|
14683
|
+
this.draggable = false;
|
|
14621
14684
|
this.mouseMoveSubscription.unsubscribe();
|
|
14622
14685
|
if (this.imageEntry.width === this.theContextService.getOptions().width &&
|
|
14623
14686
|
this.imageEntry.width <= this.naturalWidth &&
|
|
@@ -14628,7 +14691,8 @@ class TheImage extends TheBaseElement {
|
|
|
14628
14691
|
Transforms.setNodes(this.editor, {
|
|
14629
14692
|
type: ElementKinds.image,
|
|
14630
14693
|
width: this.imageEntry.width,
|
|
14631
|
-
height: this.imageEntry.height
|
|
14694
|
+
height: this.imageEntry.height,
|
|
14695
|
+
reSized: this.imageEntry.reSized
|
|
14632
14696
|
}, { at: this.selection });
|
|
14633
14697
|
}
|
|
14634
14698
|
}
|
|
@@ -14770,6 +14834,14 @@ class TheImage extends TheBaseElement {
|
|
|
14770
14834
|
});
|
|
14771
14835
|
}
|
|
14772
14836
|
}
|
|
14837
|
+
calcHeight() {
|
|
14838
|
+
const height = super.calcHeight();
|
|
14839
|
+
const [, accumulatedHeight] = calcFloatingElements(this.editor, this.element, height);
|
|
14840
|
+
if (accumulatedHeight > height) {
|
|
14841
|
+
return accumulatedHeight;
|
|
14842
|
+
}
|
|
14843
|
+
return height;
|
|
14844
|
+
}
|
|
14773
14845
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: TheImage, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$1.ThyImageGroup }, { token: THE_IMAGE_SERVICE_TOKEN }, { token: TheContextService }, { token: i1.ThyPopover }, { token: i2.Overlay }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14774
14846
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.6", type: TheImage, isStandalone: true, selector: "the-image, [theImage]", providers: [ThyImageService], viewQueries: [{ propertyName: "imageContent", first: true, predicate: ["imageContent"], descendants: true }, { propertyName: "img", first: true, predicate: ["img"], descendants: true }, { propertyName: "layoutToolbar", first: true, predicate: ["layoutToolbar"], descendants: true, static: true }, { propertyName: "imageDirective", first: true, predicate: ThyImageDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"the-image-container\" contenteditable=\"false\" [style.textAlign]=\"imageEntry.align\">\n @if (imageEntry.thumbUrl) {\n <div #imageContent class=\"image-content\" contenteditable=\"false\" [class.cursor-pointer]=\"!selection\">\n <img\n #img\n thyImage\n class=\"main-image\"\n [class.image-collapsed]=\"selection && !uploading\"\n [ngStyle]=\"{ 'width.px': imageBindingWidth }\"\n [alt]=\"imageEntry.name\"\n [thySrc]=\"imageEntry.thumbUrl\"\n [thyPreviewSrc]=\"imageEntry.thumbUrl\"\n [thyOriginSrc]=\"imageEntry.originUrl\"\n [thyDisablePreview]=\"disablePreview\"\n [thyImageMeta]=\"{ name: imageEntry.name, size: imageEntry.size }\"\n (load)=\"imageLoaded($event)\"\n (mousedown)=\"preventDefault($event)\"\n (error)=\"imageError($event)\"\n (click)=\"imageClick($event)\"\n />\n @if (isCollapsedAndNonReadonly) {\n <div class=\"image-profile\" [class.outline]=\"selection\">\n @if (!loadImageError) {\n <span (mousedown)=\"startDrag($event, '-xl')\" class=\"image-pointer left top\"></span>\n <span (mousedown)=\"startDrag($event, 'xl')\" class=\"image-pointer right top\"></span>\n <span (mousedown)=\"startDrag($event, 'xl')\" class=\"image-pointer right bottom\"></span>\n <span (mousedown)=\"startDrag($event, '-xl')\" class=\"image-pointer left bottom\"></span>\n }\n </div>\n }\n <ng-template [ngTemplateOutlet]=\"imageUploading\"></ng-template>\n @if (!uploading) {\n <div class=\"layer\" [class.readonly]=\"readonly\"></div>\n }\n </div>\n } @else {\n @if (!imageEntry.thumbUrl) {\n <div class=\"image-loading cursor-pointer\" contenteditable=\"false\">\n <thy-icon thyIconName=\"image\"></thy-icon>\n </div>\n }\n <ng-template [ngTemplateOutlet]=\"imageUploading\"></ng-template>\n }\n</div>\n\n<ng-template #layoutToolbar>\n <thy-actions thySize=\"xxs\">\n @for (item of layoutOptions; track $index) {\n @if (item.key !== 'split') {\n <a\n href=\"javascript:;\"\n thyAction\n [thyType]=\"item.key === 'remove' ? 'danger' : 'primary'\"\n [thyActionIcon]=\"item.icon\"\n [thyActionActive]=\"layoutActive(item.key)\"\n [thyTooltip]=\"item.name\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"item?.handle($event, item.key)\"\n ></a>\n }\n @if (item.key === 'split') {\n <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"></thy-divider>\n }\n }\n </thy-actions>\n</ng-template>\n\n<ng-template #imageUploading>\n @if (uploading) {\n <div class=\"uploading\">\n <div class=\"uploading-percentage\">\n <thy-progress thyType=\"primary\" [thyValue]=\"percentage\" thySize=\"sm\"></thy-progress>\n <thy-icon (click)=\"cancelUpload($event)\" thyIconName=\"close-circle-bold-fill\" thyIconLegging=\"true\"> </thy-icon>\n </div>\n </div>\n }\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyImageDirective, selector: "img[thyImage]", inputs: ["thySrc", "thyPreviewSrc", "thyOriginSrc", "thyImageMeta", "thyDisablePreview", "thyResolveSize"], exportAs: ["thyImage"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "component", type: ThyDivider, selector: "thy-divider", inputs: ["thyVertical", "thyStyle", "thyColor", "thyText", "thyTextDirection", "thyDeeper"] }, { kind: "component", type: ThyActions, selector: "thy-actions", inputs: ["thySize"] }, { kind: "directive", type: ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "component", type: ThyProgress, selector: "thy-progress", inputs: ["thyType", "thySize", "thyValue", "thyMax", "thyTips", "thyShape", "thyGapDegree", "thyGapPosition", "thyStrokeWidth"] }] }); }
|
|
14775
14847
|
}
|
|
@@ -14793,8 +14865,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImpor
|
|
|
14793
14865
|
args: [ThyImageDirective]
|
|
14794
14866
|
}] } });
|
|
14795
14867
|
|
|
14868
|
+
const withFloating = (editor) => {
|
|
14869
|
+
const { isFloating } = editor;
|
|
14870
|
+
editor.isFloating = (element) => {
|
|
14871
|
+
if (isFloatingElement(editor, element)) {
|
|
14872
|
+
return true;
|
|
14873
|
+
}
|
|
14874
|
+
return isFloating(element);
|
|
14875
|
+
};
|
|
14876
|
+
return editor;
|
|
14877
|
+
};
|
|
14878
|
+
|
|
14796
14879
|
const withImage = (editor) => {
|
|
14797
|
-
const { customInsertFragmentData, isVoid, renderElement, isBlockCard, mousedown } = editor;
|
|
14880
|
+
const { customInsertFragmentData, isVoid, renderElement, isBlockCard, mousedown, getRoughHeight, isFloating } = editor;
|
|
14798
14881
|
editor.isVoid = (element) => {
|
|
14799
14882
|
return element.type === ElementKinds.image || isVoid(element);
|
|
14800
14883
|
};
|
|
@@ -14844,7 +14927,13 @@ const withImage = (editor) => {
|
|
|
14844
14927
|
}
|
|
14845
14928
|
return isBlockCard(element);
|
|
14846
14929
|
};
|
|
14847
|
-
|
|
14930
|
+
editor.getRoughHeight = (element) => {
|
|
14931
|
+
if (element.type === ElementKinds.image && isImageWithFloating(element)) {
|
|
14932
|
+
return 0;
|
|
14933
|
+
}
|
|
14934
|
+
return getRoughHeight(element);
|
|
14935
|
+
};
|
|
14936
|
+
return withFloating(editor);
|
|
14848
14937
|
};
|
|
14849
14938
|
const createImagePlugin = (locale) => createPluginFactory({
|
|
14850
14939
|
key: PluginKeys.image,
|
|
@@ -15398,10 +15487,6 @@ const createLinkPlugin = (locale) => createPluginFactory({
|
|
|
15398
15487
|
}
|
|
15399
15488
|
})();
|
|
15400
15489
|
|
|
15401
|
-
const getListTypes = () => {
|
|
15402
|
-
return [ElementKinds.bulletedList, ElementKinds.numberedList];
|
|
15403
|
-
};
|
|
15404
|
-
|
|
15405
15490
|
const normalizeListItem = (editor, { nodeEntry }) => {
|
|
15406
15491
|
const [listItemNode, listItemPath] = nodeEntry;
|
|
15407
15492
|
const firstChildPath = listItemPath.concat([0]);
|