Merge remote-tracking branch 'origin/dev' into sub_laptop_7
# Conflicts: # M02_MasterTemplete/M02_MasterTemplete_UI_Side.ts
This commit is contained in:
@@ -7,6 +7,7 @@ const sel = load(path.join(SS, "spreadsheet_selection.ts"));
|
||||
const ed = load(path.join(SS, "spreadsheet_editor.ts"));
|
||||
const mouse = load(path.join(SS, "spreadsheet_mouse.ts"));
|
||||
const addr = load(path.join(SS, "spreadsheet_address.ts"));
|
||||
const spill = load(path.join(SS, "spreadsheet_spill.ts"));
|
||||
const sample = require(path.join(SS, "spreadsheet_sample.json"));
|
||||
|
||||
const s1 = sample.시트[0];
|
||||
@@ -69,6 +70,21 @@ const out = {
|
||||
(t) => ed.textToCell(t, { 서식: 4 }),
|
||||
),
|
||||
textToCellNoStyle: ed.textToCell("", {}),
|
||||
// 긴 글 넘침 — 칸 0..5 폭 50 · 3 은 값 있음 · 칸 2 에서 폭 130 글
|
||||
spill: (() => {
|
||||
const row = (full) =>
|
||||
new Map([0, 1, 2, 3, 4, 5].map((c) => [c, { w: 50, empty: !full.includes(c) }]));
|
||||
const f = (sp) => sp && [sp.left, sp.right, sp.from, sp.to, sp.clipLeft, sp.clipRight];
|
||||
return {
|
||||
left: f(spill.spillOf(row([2, 3]), 2, 50, 130, "left")),
|
||||
leftFree: f(spill.spillOf(row([2]), 2, 50, 130, "left")),
|
||||
right: f(spill.spillOf(row([2]), 2, 50, 130, "right")),
|
||||
center: f(spill.spillOf(row([2]), 2, 50, 130, "center")),
|
||||
centerBlocked: f(spill.spillOf(row([2, 3]), 2, 50, 130, "center")),
|
||||
fits: f(spill.spillOf(row([2]), 2, 50, 40, "left")),
|
||||
edge: f(spill.spillOf(new Map([[2, { w: 50, empty: false }]]), 2, 50, 130, "left")),
|
||||
};
|
||||
})(),
|
||||
// 친 모양대로 숫자 형식 · 식 대문자 · 닫는 괄호 채움(엑셀)
|
||||
typedFormat: ["50%", "12.5%", "1,234.5", "1,000", "7", "abc", "1e3%"].map(ed.typedFormat),
|
||||
upperFormula: ["sum(a1:b2)+round(c3,0)", "'시트 a'!a1*true", '"abc"&a1', "내이름*2"].map(
|
||||
|
||||
@@ -128,3 +128,14 @@ def test_upper_formula(r):
|
||||
|
||||
def test_close_parens(r):
|
||||
assert r["closeParens"] == ["=(1+2)", "=SUM(1,ROUND(2,0))", None, None, '=")"&(1)']
|
||||
|
||||
|
||||
def test_spill(r):
|
||||
sp = r["spill"]
|
||||
assert sp["left"] is None # 오른 칸(3)에 값 → 못 넘침
|
||||
assert sp["leftFree"] == [0, 100, 2, 4, 0, 0] # 빈 칸 둘 덮음
|
||||
assert sp["right"] == [100, 0, 0, 2, 0, 0]
|
||||
assert sp["center"] == [40, 40, 1, 3, 0, 0]
|
||||
assert sp["centerBlocked"] == [40, 40, 1, 2, 0, 40] # 오른쪽 막힘 → 오른쪽 반 잘라 냄
|
||||
assert sp["fits"] is None
|
||||
assert sp["edge"] is None # 판 끝(그린 칸 없음)
|
||||
|
||||
@@ -148,6 +148,18 @@ def test_좌측_새로_본떠_지우기는_표_도면_컨테이너_안에_하나
|
||||
assert "양식: name" in side.split("function copyTemplate")[1] # 복사본 머리 이름 = 새 이름
|
||||
|
||||
|
||||
def test_좌측_고름_표시는_열린_것_한_줄뿐():
|
||||
"""카드 [도면 수정] 등 무엇으로 열든 편집 칸이 좌측 `paint` 를 부름 — 목록 · 열 줄을 함께 그림."""
|
||||
side = _text(SIDE)
|
||||
assert "picked" not in side # 따로 든 고름 상태 없음 — 편집 칸의 지금 열린 것만 봄
|
||||
assert re.search(r"function paint\(\): void \{\s*paintList\(\);\s*paintColumns\(\);", side)
|
||||
for fn in ("async function select(", "async function selectColumn("):
|
||||
body = side.split(fn)[1].split("\n }\n")[0]
|
||||
assert "paint" not in body, fn # 여기서 한쪽만 그리면 두 줄이 남음
|
||||
assert re.search(r"sel = next;\s*onOpened\?\.\(\);", _text(MAIN))
|
||||
assert "() => side.paint()" in _text(M02 / "M02_MasterTemplete_UI_Page.ts")
|
||||
|
||||
|
||||
def test_리본_접힘_모드에서_탭으로_편_것은_밖을_누르면_다시_접힘():
|
||||
ribbon = _text(ROOT / "B07_DesignDetail/openwebcad/src/ribbon/Ribbon.tsx")
|
||||
assert "if (collapsed) setPeek(true);" in ribbon # 탭 = 잠깐 펼침(접힘 모드 유지)
|
||||
|
||||
Reference in New Issue
Block a user