Path: blob/master/src/packages/frontend/codemirror/util.ts
1496 views
import { set, get, del } from "@cocalc/frontend/misc/local-storage-typed";1import { isEqual } from "lodash";23export function getFoldedLines(cm): number[] {4if (cm?.foldCode == null) {5// not enabled6return [];7}8return cm9.getAllMarks()10.filter((mark) => mark.__isFold)11.map((mark) => mark.find().from.line);12}1314export function setFoldedLines(cm, lines: number[]) {15if (cm?.foldCode == null) {16// not enabled17return;18}19lines.reverse();20for (const n of lines) {21cm.foldCode(n);22}23}2425function toKey(key: string): string {26return `cmfold-${key}`;27}2829export function initFold(cm, key: string) {30const k = toKey(key);31const lines = get<number[]>(k);32if (lines != null) {33try {34setFoldedLines(cm, lines);35} catch (err) {36console.warn(`error setting cold folding for ${key}: `, err);37del(k);38}39}40}4142export function saveFold(cm, key: string) {43const k = toKey(key);44const lines = get<number[]>(k);45const lines2 = getFoldedLines(cm);46if (lines2.length == 0) {47if (lines != null) {48del(k);49}50return;51}52if (!isEqual(lines, lines2)) {53set<number[]>(k, lines2);54}55}565758