307 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			307 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
 | 
						|
if you want to view the source, please visit the github repository of this plugin
 | 
						|
*/
 | 
						|
 | 
						|
var __defProp = Object.defineProperty;
 | 
						|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
 | 
						|
var __getOwnPropNames = Object.getOwnPropertyNames;
 | 
						|
var __hasOwnProp = Object.prototype.hasOwnProperty;
 | 
						|
var __export = (target, all) => {
 | 
						|
  for (var name in all)
 | 
						|
    __defProp(target, name, { get: all[name], enumerable: true });
 | 
						|
};
 | 
						|
var __copyProps = (to, from, except, desc) => {
 | 
						|
  if (from && typeof from === "object" || typeof from === "function") {
 | 
						|
    for (let key of __getOwnPropNames(from))
 | 
						|
      if (!__hasOwnProp.call(to, key) && key !== except)
 | 
						|
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
 | 
						|
  }
 | 
						|
  return to;
 | 
						|
};
 | 
						|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
 | 
						|
 | 
						|
// canvasPresentationIndex.ts
 | 
						|
var canvasPresentationIndex_exports = {};
 | 
						|
__export(canvasPresentationIndex_exports, {
 | 
						|
  default: () => CanvasPresentation
 | 
						|
});
 | 
						|
module.exports = __toCommonJS(canvasPresentationIndex_exports);
 | 
						|
var import_obsidian = require("obsidian");
 | 
						|
var CanvasPresentation = class extends import_obsidian.Plugin {
 | 
						|
  constructor() {
 | 
						|
    super(...arguments);
 | 
						|
    this.currentSlide = [];
 | 
						|
    this.currentSlideNum = 0;
 | 
						|
    this.direction = "next";
 | 
						|
    this.selectedNodeSet = /* @__PURE__ */ new Set();
 | 
						|
  }
 | 
						|
  async onload() {
 | 
						|
    this.addCommand({
 | 
						|
      id: "next-group-in-viewport",
 | 
						|
      name: "Next Group In ViewPort",
 | 
						|
      checkCallback: (checking) => {
 | 
						|
        const canvasView = this.app.workspace.getActiveViewOfType(import_obsidian.ItemView);
 | 
						|
        if ((canvasView == null ? void 0 : canvasView.getViewType()) === "canvas") {
 | 
						|
          if (!checking) {
 | 
						|
            const canvas = canvasView.canvas;
 | 
						|
            const groups = this.getAllGroupNodeInViewPort(canvasView);
 | 
						|
            if (canvas.selection.size === 0) {
 | 
						|
              canvas.deselectAll();
 | 
						|
              canvas.select(groups[0]);
 | 
						|
              canvas.zoomToSelection();
 | 
						|
              return;
 | 
						|
            }
 | 
						|
            const selectedNode = canvas.selection.entries().next().value[1];
 | 
						|
            const restGroups = groups.filter((group) => {
 | 
						|
              return group.x >= selectedNode.x && group.id !== selectedNode.id;
 | 
						|
            });
 | 
						|
            if (restGroups.length === 0) {
 | 
						|
              canvas.deselectAll();
 | 
						|
              canvas.select(groups[0]);
 | 
						|
              canvas.zoomToSelection();
 | 
						|
              return;
 | 
						|
            }
 | 
						|
            canvas.deselectAll();
 | 
						|
            canvas.select(restGroups[0]);
 | 
						|
            canvas.zoomToSelection();
 | 
						|
            return;
 | 
						|
          }
 | 
						|
          return true;
 | 
						|
        }
 | 
						|
      }
 | 
						|
    });
 | 
						|
    this.addCommand({
 | 
						|
      id: "previous-group-in-viewport",
 | 
						|
      name: "Previous Group In ViewPort",
 | 
						|
      checkCallback: (checking) => {
 | 
						|
        const canvasView = this.app.workspace.getActiveViewOfType(import_obsidian.ItemView);
 | 
						|
        if ((canvasView == null ? void 0 : canvasView.getViewType()) === "canvas") {
 | 
						|
          if (!checking) {
 | 
						|
            const canvas = canvasView.canvas;
 | 
						|
            const groups = this.getAllGroupNodeInViewPort(canvasView);
 | 
						|
            if (canvas.selection.size === 0) {
 | 
						|
              canvas.deselectAll();
 | 
						|
              canvas.select(groups[groups.length - 1]);
 | 
						|
              canvas.zoomToSelection();
 | 
						|
              return;
 | 
						|
            }
 | 
						|
            const selectedNode = canvas.selection.entries().next().value[1];
 | 
						|
            const restGroups = groups.filter((group) => {
 | 
						|
              return group.x <= selectedNode.x && group.id !== selectedNode.id;
 | 
						|
            });
 | 
						|
            if (restGroups.length === 0) {
 | 
						|
              canvas.deselectAll();
 | 
						|
              canvas.select(groups[groups.length - 1]);
 | 
						|
              canvas.zoomToSelection();
 | 
						|
              return;
 | 
						|
            }
 | 
						|
            canvas.deselectAll();
 | 
						|
            canvas.select(restGroups[restGroups.length - 1]);
 | 
						|
            canvas.zoomToSelection();
 | 
						|
            return;
 | 
						|
          }
 | 
						|
          return true;
 | 
						|
        }
 | 
						|
      }
 | 
						|
    });
 | 
						|
    this.addCommand({
 | 
						|
      id: "mark-slide-number",
 | 
						|
      name: "Mark Slide Number",
 | 
						|
      checkCallback: (checking) => {
 | 
						|
        const canvasView = this.app.workspace.getActiveViewOfType(import_obsidian.ItemView);
 | 
						|
        const findNode = (map) => {
 | 
						|
          for (const value of map) {
 | 
						|
            if ((value == null ? void 0 : value.type) === "text" && (value == null ? void 0 : value.text.startsWith("Slide:\n"))) {
 | 
						|
              return value;
 | 
						|
            }
 | 
						|
          }
 | 
						|
          return false;
 | 
						|
        };
 | 
						|
        if ((canvasView == null ? void 0 : canvasView.getViewType()) === "canvas") {
 | 
						|
          if (!checking) {
 | 
						|
            const canvas = canvasView.canvas;
 | 
						|
            if (!canvas)
 | 
						|
              return;
 | 
						|
            const nodes = canvas.getData().nodes;
 | 
						|
            if (this.currentView !== canvasView)
 | 
						|
              this.currentView = canvasView;
 | 
						|
            if (Array.from(canvas.selection).length === 0) {
 | 
						|
              new import_obsidian.Notice("Please select at least one node");
 | 
						|
              return;
 | 
						|
            }
 | 
						|
            let node = findNode(nodes);
 | 
						|
            if (!node) {
 | 
						|
              let selectionArray = Array.from(canvas.selection);
 | 
						|
              if (!(0, import_obsidian.requireApiVersion)("1.1.10"))
 | 
						|
                node = canvas.createTextNode({ x: -200, y: -200 }, { height: 200, width: 200 }, true);
 | 
						|
              else {
 | 
						|
                node = canvas.createTextNode({
 | 
						|
                  pos: {
 | 
						|
                    x: -200,
 | 
						|
                    y: -200,
 | 
						|
                    height: 200,
 | 
						|
                    width: 200
 | 
						|
                  },
 | 
						|
                  text: "",
 | 
						|
                  focus: false,
 | 
						|
                  save: true,
 | 
						|
                  size: {
 | 
						|
                    height: 200,
 | 
						|
                    width: 200,
 | 
						|
                    x: -200,
 | 
						|
                    y: -200
 | 
						|
                  }
 | 
						|
                });
 | 
						|
              }
 | 
						|
              canvas.deselectAll();
 | 
						|
              selectionArray.forEach((item) => {
 | 
						|
                const node2 = canvas.nodes.get(item.id);
 | 
						|
                if (node2)
 | 
						|
                  canvas.select(node2);
 | 
						|
              });
 | 
						|
            }
 | 
						|
            const slideNode = canvas.nodes.get(node.id);
 | 
						|
            if (!(node == null ? void 0 : node.text.contains("Slide:\n"))) {
 | 
						|
              slideNode.setText("Slide:\n");
 | 
						|
              canvas.requestSave();
 | 
						|
            }
 | 
						|
            const nodesArray = Array.from(canvas.selection);
 | 
						|
            if (nodesArray.length > 0) {
 | 
						|
              let currentString = "- ";
 | 
						|
              nodesArray.forEach((nodeItem) => {
 | 
						|
                currentString += (nodeItem == null ? void 0 : nodeItem.id) + ", ";
 | 
						|
              });
 | 
						|
              currentString = currentString.slice(0, -2);
 | 
						|
              slideNode.setText((slideNode == null ? void 0 : slideNode.text) + currentString + "\n");
 | 
						|
              canvas.requestSave();
 | 
						|
            }
 | 
						|
          }
 | 
						|
          return true;
 | 
						|
        }
 | 
						|
      }
 | 
						|
    });
 | 
						|
    this.addCommand({
 | 
						|
      id: "next-slide",
 | 
						|
      name: "Next Slide",
 | 
						|
      checkCallback: (checking) => {
 | 
						|
        var _a;
 | 
						|
        const canvasView = this.app.workspace.getActiveViewOfType(import_obsidian.ItemView);
 | 
						|
        const findSlideNode = (map) => {
 | 
						|
          for (const value of map) {
 | 
						|
            if ((value == null ? void 0 : value.type) === "text" && (value == null ? void 0 : value.text.startsWith("Slide:\n"))) {
 | 
						|
              return value;
 | 
						|
            }
 | 
						|
          }
 | 
						|
          return false;
 | 
						|
        };
 | 
						|
        if ((canvasView == null ? void 0 : canvasView.getViewType()) === "canvas") {
 | 
						|
          if (!checking) {
 | 
						|
            const canvas = canvasView.canvas;
 | 
						|
            if (!canvas)
 | 
						|
              return;
 | 
						|
            const nodes = canvas.getData().nodes;
 | 
						|
            const slideNode = canvas.nodes.get(findSlideNode(nodes).id);
 | 
						|
            if (!slideNode) {
 | 
						|
              new import_obsidian.Notice("No slide node found, mark any node as slide before");
 | 
						|
              return;
 | 
						|
            }
 | 
						|
            const slideText = slideNode == null ? void 0 : slideNode.text;
 | 
						|
            this.currentSlide = slideText.split("\n").filter((i) => i && i.trim());
 | 
						|
            this.currentSlide.shift();
 | 
						|
            canvas.deselectAll();
 | 
						|
            if (this.currentSlideNum === this.currentSlide.length)
 | 
						|
              this.currentSlideNum = 0;
 | 
						|
            const slideNodes = (_a = this.currentSlide[this.direction === "next" ? this.currentSlideNum : this.currentSlideNum + 1 === this.currentSlide.length ? 0 : this.currentSlideNum + 1]) == null ? void 0 : _a.slice(2).split(", ");
 | 
						|
            slideNodes.forEach((id) => {
 | 
						|
              const node = canvas.nodes.get(id);
 | 
						|
              if (node)
 | 
						|
                canvas.select(node);
 | 
						|
            });
 | 
						|
            this.direction = "next";
 | 
						|
            canvas.zoomToSelection();
 | 
						|
            if (!(this.currentSlideNum === 0 && this.currentSlide.length === 1))
 | 
						|
              this.currentSlideNum = this.currentSlideNum + 1;
 | 
						|
          }
 | 
						|
          return true;
 | 
						|
        }
 | 
						|
      }
 | 
						|
    });
 | 
						|
    this.addCommand({
 | 
						|
      id: "previous-slide",
 | 
						|
      name: "Previous Slide",
 | 
						|
      checkCallback: (checking) => {
 | 
						|
        var _a;
 | 
						|
        const canvasView = this.app.workspace.getActiveViewOfType(import_obsidian.ItemView);
 | 
						|
        const findSlideNode = (map) => {
 | 
						|
          for (const value of map) {
 | 
						|
            if ((value == null ? void 0 : value.type) === "text" && (value == null ? void 0 : value.text.startsWith("Slide:\n"))) {
 | 
						|
              return value;
 | 
						|
            }
 | 
						|
          }
 | 
						|
          return false;
 | 
						|
        };
 | 
						|
        if ((canvasView == null ? void 0 : canvasView.getViewType()) === "canvas") {
 | 
						|
          if (!checking) {
 | 
						|
            const canvas = canvasView.canvas;
 | 
						|
            if (!canvas)
 | 
						|
              return;
 | 
						|
            const nodes = canvas.getData().nodes;
 | 
						|
            const slideNode = canvas.nodes.get(findSlideNode(nodes).id);
 | 
						|
            if (!slideNode) {
 | 
						|
              new import_obsidian.Notice("No slide node found, mark any node as slide before");
 | 
						|
              return;
 | 
						|
            }
 | 
						|
            const slideText = slideNode == null ? void 0 : slideNode.text;
 | 
						|
            this.currentSlide = slideText.split("\n").filter((i) => i && i.trim());
 | 
						|
            this.currentSlide.shift();
 | 
						|
            canvas.deselectAll();
 | 
						|
            let currentSlideNum = this.currentSlideNum === 0 ? this.currentSlide.length - 1 : this.currentSlideNum - 1;
 | 
						|
            if (this.currentSlideNum === this.currentSlide.length && this.direction !== "previous")
 | 
						|
              currentSlideNum = this.currentSlide.length - 2;
 | 
						|
            const slideNodes = (_a = this.currentSlide[currentSlideNum]) == null ? void 0 : _a.slice(2).split(", ");
 | 
						|
            slideNodes.forEach((id) => {
 | 
						|
              const node = canvas.nodes.get(id);
 | 
						|
              if (node)
 | 
						|
                canvas.select(node);
 | 
						|
            });
 | 
						|
            this.direction = "previous";
 | 
						|
            canvas.zoomToSelection();
 | 
						|
            if (this.currentSlideNum === 0)
 | 
						|
              this.currentSlideNum = this.currentSlide.length - 1;
 | 
						|
            else
 | 
						|
              this.currentSlideNum = this.currentSlideNum - 1;
 | 
						|
          }
 | 
						|
          return true;
 | 
						|
        }
 | 
						|
      }
 | 
						|
    });
 | 
						|
  }
 | 
						|
  getAllGroupNode(canvasView) {
 | 
						|
    const canvas = canvasView.canvas;
 | 
						|
    const groups = Array.from(canvas.nodes);
 | 
						|
    const groupsArray = [];
 | 
						|
    groups.forEach((group) => {
 | 
						|
      var _a;
 | 
						|
      if (((_a = group[1]) == null ? void 0 : _a.renderedZIndex) === -1)
 | 
						|
        groupsArray.push(group[1]);
 | 
						|
    });
 | 
						|
    groupsArray.sort((a, b) => a.x - b.x);
 | 
						|
    return groupsArray;
 | 
						|
  }
 | 
						|
  getAllGroupNodeInViewPort(canvasView) {
 | 
						|
    const canvas = canvasView.canvas;
 | 
						|
    const groups = canvas.getViewportNodes();
 | 
						|
    const groupsArray = [];
 | 
						|
    groups.forEach((group) => {
 | 
						|
      if ((group == null ? void 0 : group.renderedZIndex) === -1)
 | 
						|
        groupsArray.push(group);
 | 
						|
    });
 | 
						|
    console.log(groupsArray);
 | 
						|
    groupsArray.sort((a, b) => a.x - b.x);
 | 
						|
    return groupsArray;
 | 
						|
  }
 | 
						|
  onunload() {
 | 
						|
  }
 | 
						|
};
 |