@atlaskit/editor-plugin-table
Version:
Table plugin for the @atlaskit/editor
90 lines (87 loc) • 5.71 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.findClosestSnap = exports.defaultTablePreserveSnappingWidths = exports.defaultSnappingWidths = exports.calculateDefaultTablePreserveSnappings = exports.calculateDefaultSnappings = exports.PRESERVE_TABLE_SNAPPING_LENGTH_OFFSET = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _guideline = require("@atlaskit/editor-common/guideline");
var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
var numberOfLanesInDefaultLayoutWidth = 12;
var calculateSubSnappingWidths = function calculateSubSnappingWidths(totalLanes, totalWidth) {
return new Array(Math.round(totalLanes / 2) - 1).fill(totalWidth / totalLanes).map(function (v, i) {
return v * (i + 1) * 2;
});
};
var calculateDefaultSnappings = exports.calculateDefaultSnappings = function calculateDefaultSnappings() {
var lengthOffset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
return [].concat((0, _toConsumableArray2.default)(calculateSubSnappingWidths(numberOfLanesInDefaultLayoutWidth, _editorSharedStyles.akEditorDefaultLayoutWidth + lengthOffset)), [_editorSharedStyles.akEditorDefaultLayoutWidth + lengthOffset, _editorSharedStyles.akEditorCalculatedWideLayoutWidth + lengthOffset, _editorSharedStyles.akEditorFullWidthLayoutWidth + lengthOffset]);
};
var getPadding = function getPadding(editorContainerWith) {
return editorContainerWith <= _editorSharedStyles.akEditorFullPageNarrowBreakout && (0, _experiments.editorExperiment)('platform_editor_preview_panel_responsiveness', true, {
exposure: true
}) ? _editorSharedStyles.akEditorGutterPaddingReduced : (0, _editorSharedStyles.akEditorGutterPaddingDynamic)();
};
// FF TablePreserve for calculateDefaultSnappings
var calculateDefaultTablePreserveSnappings = exports.calculateDefaultTablePreserveSnappings = function calculateDefaultTablePreserveSnappings() {
var lengthOffset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var editorContainerWith = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _editorSharedStyles.akEditorFullWidthLayoutWidth;
var exclude = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
innerGuidelines: false,
breakoutPoints: false
};
var padding = getPadding(editorContainerWith);
var dynamicFullWidthLine = editorContainerWith - padding * 2 >= _editorSharedStyles.akEditorFullWidthLayoutWidth ? _editorSharedStyles.akEditorFullWidthLayoutWidth : editorContainerWith - padding * 2;
var guides = [dynamicFullWidthLine - lengthOffset];
if (!exclude.breakoutPoints) {
guides.unshift(_editorSharedStyles.akEditorDefaultLayoutWidth + lengthOffset, _editorSharedStyles.akEditorCalculatedWideLayoutWidth + lengthOffset);
}
if (!exclude.innerGuidelines) {
guides.unshift.apply(guides, [0].concat((0, _toConsumableArray2.default)(calculateSubSnappingWidths(numberOfLanesInDefaultLayoutWidth, _editorSharedStyles.akEditorDefaultLayoutWidth + lengthOffset))));
}
return guides;
};
var defaultSnappingWidths = exports.defaultSnappingWidths = calculateDefaultSnappings();
var PRESERVE_TABLE_SNAPPING_LENGTH_OFFSET = exports.PRESERVE_TABLE_SNAPPING_LENGTH_OFFSET = 0;
// FF TablePreserve for defaultSnappingWidths
var defaultTablePreserveSnappingWidths = exports.defaultTablePreserveSnappingWidths = function defaultTablePreserveSnappingWidths(lengthOffset, editorContainerWidth) {
var exclude = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
innerGuidelines: false,
breakoutPoints: false
};
var padding = getPadding(editorContainerWidth);
return editorContainerWidth - padding * 2 > _editorSharedStyles.akEditorFullWidthLayoutWidth ? calculateDefaultSnappings() : calculateDefaultTablePreserveSnappings(lengthOffset, editorContainerWidth, exclude); // lengthOffset was hardcoded 0 here, created PRESERVE_TABLE_SNAPPING_LENGTH_OFFSET instead.
};
/**
* Returns keys of guidelines that are closest to the table and within the snapGap
*/
var findClosestSnap = exports.findClosestSnap = function findClosestSnap(currentWidth, snapWidths, guidelines) {
var snapGap = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
var tolerance = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
var closestGapIndex = snapWidths.reduce(function (prev, curr, index) {
return Math.abs(curr - currentWidth) < Math.abs(snapWidths[prev] - currentWidth) ? index : prev;
}, 0);
var gap = Math.abs(snapWidths[closestGapIndex] - currentWidth);
if (gap < snapGap) {
var snappingWidth = Math.round(snapWidths[closestGapIndex]);
var guidelineKeys = guidelines.reduce(function (acc, guideline) {
// NOTE: The snap points are based on the guidelines, however their formatted as a length value whereas the guidelines
// are point based. The point base x coords are calculated by halving the lengths. This means we can convert the
// point base position to length by simply multiplying by 2.
var length = Math.round(Math.abs((0, _guideline.isVerticalPosition)(guideline.position) ? guideline.position.x : guideline.position.y) * 2);
if (snappingWidth >= length - tolerance && snappingWidth <= length + tolerance) {
acc.push(guideline.key);
}
return acc;
}, []);
return {
gap: gap,
keys: guidelineKeys
};
}
return {
gap: gap,
keys: []
};
};