Last Sync: 2026-06-05 03:26 (Mobile)
This commit is contained in:
1 parent
7583b9e7d6
commit
97b79b8de6
27 files changed
+7723
-6654
No files matched your search
Binary file not shown.
Binary file not shown.
+93
-46
@@ -27,7 +27,7 @@ __export(main_exports, {
|
|||||||
default: () => AdvancedCanvasPlugin
|
default: () => AdvancedCanvasPlugin
|
||||||
});
|
});
|
||||||
module.exports = __toCommonJS(main_exports);
|
module.exports = __toCommonJS(main_exports);
|
||||||
var import_obsidian19 = require("obsidian");
|
var import_obsidian20 = require("obsidian");
|
||||||
|
|
||||||
// src/utils/icons-helper.ts
|
// src/utils/icons-helper.ts
|
||||||
var import_obsidian = require("obsidian");
|
var import_obsidian = require("obsidian");
|
||||||
@@ -1661,6 +1661,7 @@ var DEFAULT_SETTINGS_VALUES = {
|
|||||||
disableFontSizeRelativeToZoom: false,
|
disableFontSizeRelativeToZoom: false,
|
||||||
canvasMetadataCompatibilityEnabled: true,
|
canvasMetadataCompatibilityEnabled: true,
|
||||||
enableSingleNodeLinks: true,
|
enableSingleNodeLinks: true,
|
||||||
|
enableSingleNodePopupReferenceCopy: false,
|
||||||
combineCustomStylesInDropdown: false,
|
combineCustomStylesInDropdown: false,
|
||||||
nodeStylingFeatureEnabled: true,
|
nodeStylingFeatureEnabled: true,
|
||||||
customNodeStyleAttributes: [],
|
customNodeStyleAttributes: [],
|
||||||
@@ -1814,7 +1815,12 @@ var SETTINGS = {
|
|||||||
children: {
|
children: {
|
||||||
enableSingleNodeLinks: {
|
enableSingleNodeLinks: {
|
||||||
label: "Enable support for linking to a node using a [[wikilink]]",
|
label: "Enable support for linking to a node using a [[wikilink]]",
|
||||||
description: "When enabled, you can link and embed a node using [[canvas-file#node-id]].",
|
description: 'When enabled, you can link and embed a node using [[canvas-file#node-id]] (Use the "Copy wikilink to node" command to get an id).',
|
||||||
|
type: "boolean"
|
||||||
|
},
|
||||||
|
enableSingleNodePopupReferenceCopy: {
|
||||||
|
label: "Show button to copy node [[wikilink]]",
|
||||||
|
description: "When enabled, the node popup will show a button to copy the [[wikilink]] of the node for easy reference in other notes.",
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2205,6 +2211,7 @@ var AdvancedCanvasPluginSettingTab = class extends import_obsidian4.PluginSettin
|
|||||||
display() {
|
display() {
|
||||||
const { containerEl } = this;
|
const { containerEl } = this;
|
||||||
containerEl.empty();
|
containerEl.empty();
|
||||||
|
containerEl.classList.add("ac-settings");
|
||||||
this.createKofiBanner(containerEl);
|
this.createKofiBanner(containerEl);
|
||||||
for (const [headingId, heading] of Object.entries(SETTINGS)) {
|
for (const [headingId, heading] of Object.entries(SETTINGS)) {
|
||||||
this.createFeatureHeading(
|
this.createFeatureHeading(
|
||||||
@@ -2249,7 +2256,7 @@ var AdvancedCanvasPluginSettingTab = class extends import_obsidian4.PluginSettin
|
|||||||
const setting = new import_obsidian4.Setting(containerEl).setHeading().setClass("ac-settings-heading").setName(label).setDesc(description);
|
const setting = new import_obsidian4.Setting(containerEl).setHeading().setClass("ac-settings-heading").setName(label).setDesc(description);
|
||||||
if (infoSection !== void 0) {
|
if (infoSection !== void 0) {
|
||||||
setting.addExtraButton(
|
setting.addExtraButton(
|
||||||
(button) => button.setTooltip("Open github documentation").setIcon("info").onClick(async () => {
|
(button) => button.setTooltip("Open GitHub documentation").setIcon("info").onClick(async () => {
|
||||||
const anchor = activeDocument.createElement("a");
|
const anchor = activeDocument.createElement("a");
|
||||||
anchor.href = `${README_URL}#${infoSection}`;
|
anchor.href = `${README_URL}#${infoSection}`;
|
||||||
anchor.target = "_blank";
|
anchor.target = "_blank";
|
||||||
@@ -3059,9 +3066,15 @@ var AdvancedCanvasEmbed = class extends import_obsidian7.Component {
|
|||||||
if (canvasNode.type === "text") nodeContent = canvasNode.text;
|
if (canvasNode.type === "text") nodeContent = canvasNode.text;
|
||||||
else if (canvasNode.type === "group") nodeContent = `**Group Node:** ${canvasNode.label}`;
|
else if (canvasNode.type === "group") nodeContent = `**Group Node:** ${canvasNode.label}`;
|
||||||
else if (canvasNode.type === "file") nodeContent = `**File Node:** ${canvasNode.file}`;
|
else if (canvasNode.type === "file") nodeContent = `**File Node:** ${canvasNode.file}`;
|
||||||
this.context.containerEl.classList.add("markdown-embed");
|
|
||||||
this.context.containerEl.empty();
|
this.context.containerEl.empty();
|
||||||
await import_obsidian7.MarkdownRenderer.render(this.context.app, nodeContent, this.context.containerEl, this.file.path, this);
|
this.context.containerEl.classList.add("ac-card-embed");
|
||||||
|
if (canvasNode.color !== void 0) {
|
||||||
|
this.context.containerEl.classList.add("is-themed");
|
||||||
|
this.context.containerEl.classList.add(`mod-canvas-color-${canvasNode.color}`);
|
||||||
|
}
|
||||||
|
const markdownContainer = this.context.containerEl.createSpan();
|
||||||
|
markdownContainer.classList.add("markdown-content");
|
||||||
|
await import_obsidian7.MarkdownRenderer.render(this.context.app, nodeContent, markdownContainer, this.file.path, this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -4483,7 +4496,45 @@ var EncapsulateCanvasExtension = class extends CanvasExtension {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// src/canvas-extensions/commands-canvas-extension.ts
|
// src/canvas-extensions/commands-canvas-extension.ts
|
||||||
|
var import_obsidian15 = require("obsidian");
|
||||||
|
|
||||||
|
// src/canvas-extensions/copy-node-reference-canvas-extension.ts
|
||||||
var import_obsidian14 = require("obsidian");
|
var import_obsidian14 = require("obsidian");
|
||||||
|
var CopyNodeReferenceCanvasExtension = class _CopyNodeReferenceCanvasExtension extends CanvasExtension {
|
||||||
|
isEnabled() {
|
||||||
|
return "enableSingleNodePopupReferenceCopy";
|
||||||
|
}
|
||||||
|
init() {
|
||||||
|
this.plugin.registerEvent(this.plugin.app.workspace.on(
|
||||||
|
"advanced-canvas:popup-menu-created",
|
||||||
|
(canvas) => this.onPopupMenuCreated(canvas)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
onPopupMenuCreated(canvas) {
|
||||||
|
var _a;
|
||||||
|
const popupMenuEl = (_a = canvas == null ? void 0 : canvas.menu) == null ? void 0 : _a.menuEl;
|
||||||
|
if (!popupMenuEl) return;
|
||||||
|
const selectionData = canvas.getSelectionData();
|
||||||
|
if (selectionData.nodes.length !== 1 && selectionData.edges.length === 0) return;
|
||||||
|
const menuOption = {
|
||||||
|
id: "node-popup-menu-option-copy-reference",
|
||||||
|
label: "Copy wikilink to node",
|
||||||
|
icon: "link",
|
||||||
|
callback: () => _CopyNodeReferenceCanvasExtension.copyWikilinkToNode(canvas.view.file, selectionData.nodes[0])
|
||||||
|
};
|
||||||
|
const popupMenuOption = CanvasHelper.createPopupMenuOption(menuOption);
|
||||||
|
CanvasHelper.addPopupMenuOption(canvas, popupMenuOption);
|
||||||
|
}
|
||||||
|
static copyWikilinkToNode(file, nodeData) {
|
||||||
|
const nodeTypeString = TextHelper.toTitleCase(nodeData.type);
|
||||||
|
const wikilink = `[[${file.path}#${nodeData.id}|${file.name} (${nodeTypeString} node)]]`;
|
||||||
|
navigator.clipboard.writeText(wikilink).then(
|
||||||
|
() => new import_obsidian14.Notice("Copied wikilink to node to clipboard.", 2e3)
|
||||||
|
).catch(() => new import_obsidian14.Notice("Failed to copy wikilink to node to clipboard.", 2e3));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/canvas-extensions/commands-canvas-extension.ts
|
||||||
var DIRECTIONS = ["up", "down", "left", "right"];
|
var DIRECTIONS = ["up", "down", "left", "right"];
|
||||||
var CommandsCanvasExtension = class extends CanvasExtension {
|
var CommandsCanvasExtension = class extends CanvasExtension {
|
||||||
isEnabled() {
|
isEnabled() {
|
||||||
@@ -4655,10 +4706,7 @@ var CommandsCanvasExtension = class extends CanvasExtension {
|
|||||||
if (!file) return;
|
if (!file) return;
|
||||||
const nodeData = canvas.getSelectionData().nodes[0];
|
const nodeData = canvas.getSelectionData().nodes[0];
|
||||||
if (!nodeData) return;
|
if (!nodeData) return;
|
||||||
const wikilink = `[[${file.path}#${nodeData.id}|${file.name} (${TextHelper.toTitleCase(nodeData.type)} node)]]`;
|
CopyNodeReferenceCanvasExtension.copyWikilinkToNode(file, nodeData);
|
||||||
navigator.clipboard.writeText(wikilink).then(
|
|
||||||
() => new import_obsidian14.Notice("Copied wikilink to node to clipboard.", 2e3)
|
|
||||||
).catch(() => new import_obsidian14.Notice("Failed to copy wikilink to node to clipboard.", 2e3));
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
@@ -4690,7 +4738,7 @@ var CommandsCanvasExtension = class extends CanvasExtension {
|
|||||||
if (!nodeOutgoingLinks) continue;
|
if (!nodeOutgoingLinks) continue;
|
||||||
for (const nodeOutgoingLink of nodeOutgoingLinks) {
|
for (const nodeOutgoingLink of nodeOutgoingLinks) {
|
||||||
const resolvedLink = this.plugin.app.metadataCache.getFirstLinkpathDest(nodeOutgoingLink.link, relativeFile.path);
|
const resolvedLink = this.plugin.app.metadataCache.getFirstLinkpathDest(nodeOutgoingLink.link, relativeFile.path);
|
||||||
if (!(resolvedLink instanceof import_obsidian14.TFile)) continue;
|
if (!(resolvedLink instanceof import_obsidian15.TFile)) continue;
|
||||||
outgoingLinks.add(resolvedLink);
|
outgoingLinks.add(resolvedLink);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4726,7 +4774,7 @@ var CommandsCanvasExtension = class extends CanvasExtension {
|
|||||||
if (!nodeBacklinks) continue;
|
if (!nodeBacklinks) continue;
|
||||||
for (const nodeBacklink of nodeBacklinks.data.keys()) {
|
for (const nodeBacklink of nodeBacklinks.data.keys()) {
|
||||||
const resolvedLink = this.plugin.app.metadataCache.getFirstLinkpathDest(nodeBacklink, file.path);
|
const resolvedLink = this.plugin.app.metadataCache.getFirstLinkpathDest(nodeBacklink, file.path);
|
||||||
if (!(resolvedLink instanceof import_obsidian14.TFile)) continue;
|
if (!(resolvedLink instanceof import_obsidian15.TFile)) continue;
|
||||||
backlinks.add(resolvedLink);
|
backlinks.add(resolvedLink);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4735,7 +4783,7 @@ var CommandsCanvasExtension = class extends CanvasExtension {
|
|||||||
if (!canvasBacklinks) return;
|
if (!canvasBacklinks) return;
|
||||||
for (const canvasBacklink of canvasBacklinks.data.keys()) {
|
for (const canvasBacklink of canvasBacklinks.data.keys()) {
|
||||||
const resolvedLink = this.plugin.app.metadataCache.getFirstLinkpathDest(canvasBacklink, canvasFile.path);
|
const resolvedLink = this.plugin.app.metadataCache.getFirstLinkpathDest(canvasBacklink, canvasFile.path);
|
||||||
if (!(resolvedLink instanceof import_obsidian14.TFile)) continue;
|
if (!(resolvedLink instanceof import_obsidian15.TFile)) continue;
|
||||||
backlinks.add(resolvedLink);
|
backlinks.add(resolvedLink);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5011,7 +5059,7 @@ var AutoResizeNodeCanvasExtension = class extends CanvasExtension {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// src/canvas-extensions/portals-canvas-extension.ts
|
// src/canvas-extensions/portals-canvas-extension.ts
|
||||||
var import_obsidian15 = require("obsidian");
|
var import_obsidian16 = require("obsidian");
|
||||||
var PORTAL_ID_DELIMITER = "||";
|
var PORTAL_ID_DELIMITER = "||";
|
||||||
var PORTAL_ID_PREFIX = `acportal${PORTAL_ID_DELIMITER}`;
|
var PORTAL_ID_PREFIX = `acportal${PORTAL_ID_DELIMITER}`;
|
||||||
var PORTAL_PADDING = 50;
|
var PORTAL_PADDING = 50;
|
||||||
@@ -5073,7 +5121,7 @@ var PortalsCanvasExtension = class _PortalsCanvasExtension extends CanvasExtensi
|
|||||||
setData(newData);
|
setData(newData);
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
console.error("Error loading portal data:", error);
|
console.error("Error loading portal data:", error);
|
||||||
new import_obsidian15.Notice("An error occurred while loading portal data. Please check console for details.");
|
new import_obsidian16.Notice("An error occurred while loading portal data. Please check console for details.");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
@@ -5153,13 +5201,13 @@ var PortalsCanvasExtension = class _PortalsCanvasExtension extends CanvasExtensi
|
|||||||
onEdgeConnectionTryDraggingBefore(_canvas, edge, _event, cancelRef) {
|
onEdgeConnectionTryDraggingBefore(_canvas, edge, _event, cancelRef) {
|
||||||
if (!_PortalsCanvasExtension.isPortalElement(edge.id)) return;
|
if (!_PortalsCanvasExtension.isPortalElement(edge.id)) return;
|
||||||
cancelRef.value = true;
|
cancelRef.value = true;
|
||||||
new import_obsidian15.Notice("Updating edges from portals is not supported yet.");
|
new import_obsidian16.Notice("Updating edges from portals is not supported yet.");
|
||||||
}
|
}
|
||||||
onEdgeConnectionDraggingAfter(canvas, edge, _event, _newEdge, _side, _previousEnds) {
|
onEdgeConnectionDraggingAfter(canvas, edge, _event, _newEdge, _side, _previousEnds) {
|
||||||
if (_PortalsCanvasExtension.isPortalElement(edge.id)) return;
|
if (_PortalsCanvasExtension.isPortalElement(edge.id)) return;
|
||||||
if (!_PortalsCanvasExtension.isPortalElement(edge.from.node.id) || !_PortalsCanvasExtension.isPortalElement(edge.to.node.id)) return;
|
if (!_PortalsCanvasExtension.isPortalElement(edge.from.node.id) || !_PortalsCanvasExtension.isPortalElement(edge.to.node.id)) return;
|
||||||
canvas.removeEdge(edge);
|
canvas.removeEdge(edge);
|
||||||
new import_obsidian15.Notice("Creating edges with both ends in portals are not supported yet.");
|
new import_obsidian16.Notice("Creating edges with both ends in portals are not supported yet.");
|
||||||
}
|
}
|
||||||
onPopupMenu(canvas) {
|
onPopupMenu(canvas) {
|
||||||
if (canvas.readonly) return;
|
if (canvas.readonly) return;
|
||||||
@@ -5246,7 +5294,7 @@ var PortalsCanvasExtension = class _PortalsCanvasExtension extends CanvasExtensi
|
|||||||
if (nestedPortalFiles.has(portalNodeData.file)) return addedData;
|
if (nestedPortalFiles.has(portalNodeData.file)) return addedData;
|
||||||
nestedPortalFiles.add(portalNodeData.file);
|
nestedPortalFiles.add(portalNodeData.file);
|
||||||
const portalFile = this.plugin.app.vault.getAbstractFileByPath(portalNodeData.file);
|
const portalFile = this.plugin.app.vault.getAbstractFileByPath(portalNodeData.file);
|
||||||
if (!(portalFile instanceof import_obsidian15.TFile) || portalFile.extension !== "canvas") return addedData;
|
if (!(portalFile instanceof import_obsidian16.TFile) || portalFile.extension !== "canvas") return addedData;
|
||||||
const portalFileDataString = await this.plugin.app.vault.cachedRead(portalFile);
|
const portalFileDataString = await this.plugin.app.vault.cachedRead(portalFile);
|
||||||
if (portalFileDataString === "") return addedData;
|
if (portalFileDataString === "") return addedData;
|
||||||
const portalFileData = JSON.parse(portalFileDataString);
|
const portalFileData = JSON.parse(portalFileDataString);
|
||||||
@@ -5337,7 +5385,7 @@ var PortalsCanvasExtension = class _PortalsCanvasExtension extends CanvasExtensi
|
|||||||
};
|
};
|
||||||
|
|
||||||
// src/canvas-extensions/frontmatter-control-button-canvas-extension.ts
|
// src/canvas-extensions/frontmatter-control-button-canvas-extension.ts
|
||||||
var import_obsidian16 = require("obsidian");
|
var import_obsidian17 = require("obsidian");
|
||||||
var FrontmatterControlButtonCanvasExtension = class extends CanvasExtension {
|
var FrontmatterControlButtonCanvasExtension = class extends CanvasExtension {
|
||||||
isEnabled() {
|
isEnabled() {
|
||||||
return "canvasMetadataCompatibilityEnabled";
|
return "canvasMetadataCompatibilityEnabled";
|
||||||
@@ -5363,7 +5411,7 @@ var FrontmatterControlButtonCanvasExtension = class extends CanvasExtension {
|
|||||||
var _a2;
|
var _a2;
|
||||||
const propertiesPlugin = this.plugin.app.internalPlugins.plugins["properties"];
|
const propertiesPlugin = this.plugin.app.internalPlugins.plugins["properties"];
|
||||||
if (!(propertiesPlugin == null ? void 0 : propertiesPlugin._loaded)) {
|
if (!(propertiesPlugin == null ? void 0 : propertiesPlugin._loaded)) {
|
||||||
new import_obsidian16.Notice(`Core plugin "Properties view" was not found or isn't enabled. Enable it and restart Obsidian.`);
|
new import_obsidian17.Notice(`Core plugin "Properties view" was not found or isn't enabled. Enable it and restart Obsidian.`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let propertiesLeaf = (_a2 = this.plugin.app.workspace.getLeavesOfType("file-properties").first()) != null ? _a2 : null;
|
let propertiesLeaf = (_a2 = this.plugin.app.workspace.getLeavesOfType("file-properties").first()) != null ? _a2 : null;
|
||||||
@@ -5610,7 +5658,7 @@ var ColorPaletteCanvasExtension = class extends CanvasExtension {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// src/canvas-extensions/collapsible-groups-canvas-extension.ts
|
// src/canvas-extensions/collapsible-groups-canvas-extension.ts
|
||||||
var import_obsidian17 = require("obsidian");
|
var import_obsidian18 = require("obsidian");
|
||||||
var CollapsibleGroupsCanvasExtension = class extends CanvasExtension {
|
var CollapsibleGroupsCanvasExtension = class extends CanvasExtension {
|
||||||
isEnabled() {
|
isEnabled() {
|
||||||
return "collapsibleGroupsFeatureEnabled";
|
return "collapsibleGroupsFeatureEnabled";
|
||||||
@@ -5658,7 +5706,7 @@ var CollapsibleGroupsCanvasExtension = class extends CanvasExtension {
|
|||||||
(_a = groupNode.collapseEl) == null ? void 0 : _a.remove();
|
(_a = groupNode.collapseEl) == null ? void 0 : _a.remove();
|
||||||
const collapseEl = activeDocument.createElement("div");
|
const collapseEl = activeDocument.createElement("div");
|
||||||
collapseEl.className = "collapse-button";
|
collapseEl.className = "collapse-button";
|
||||||
(0, import_obsidian17.setIcon)(collapseEl, groupNodeData.collapsed ? "plus-circle" : "minus-circle");
|
(0, import_obsidian18.setIcon)(collapseEl, groupNodeData.collapsed ? "plus-circle" : "minus-circle");
|
||||||
collapseEl.onclick = () => this.toggleCollapseGroup(canvas, groupNode);
|
collapseEl.onclick = () => this.toggleCollapseGroup(canvas, groupNode);
|
||||||
groupNode.collapseEl = collapseEl;
|
groupNode.collapseEl = collapseEl;
|
||||||
(_b = groupNode.labelEl) == null ? void 0 : _b.insertAdjacentElement("afterend", collapseEl);
|
(_b = groupNode.labelEl) == null ? void 0 : _b.insertAdjacentElement("afterend", collapseEl);
|
||||||
@@ -6746,7 +6794,7 @@ async function toPng(node, options = {}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// src/canvas-extensions/export-canvas-extension.ts
|
// src/canvas-extensions/export-canvas-extension.ts
|
||||||
var import_obsidian18 = require("obsidian");
|
var import_obsidian19 = require("obsidian");
|
||||||
var MAX_ALLOWED_LOADING_TIME = 1e4;
|
var MAX_ALLOWED_LOADING_TIME = 1e4;
|
||||||
var ExportCanvasExtension = class extends CanvasExtension {
|
var ExportCanvasExtension = class extends CanvasExtension {
|
||||||
isEnabled() {
|
isEnabled() {
|
||||||
@@ -6782,7 +6830,7 @@ var ExportCanvasExtension = class extends CanvasExtension {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
async showExportImageSettingsModal(canvas, nodesToExport) {
|
async showExportImageSettingsModal(canvas, nodesToExport) {
|
||||||
const modal = new import_obsidian18.Modal(this.plugin.app);
|
const modal = new import_obsidian19.Modal(this.plugin.app);
|
||||||
modal.setTitle("Export image settings");
|
modal.setTitle("Export image settings");
|
||||||
let pixelRatioSetting = null;
|
let pixelRatioSetting = null;
|
||||||
let noFontExportSetting = null;
|
let noFontExportSetting = null;
|
||||||
@@ -6800,7 +6848,7 @@ var ExportCanvasExtension = class extends CanvasExtension {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
let svg = false;
|
let svg = false;
|
||||||
new import_obsidian18.Setting(modal.contentEl).setName("Export file format").setDesc("Choose the file format to export the canvas as.").addDropdown(
|
new import_obsidian19.Setting(modal.contentEl).setName("Export file format").setDesc("Choose the file format to export the canvas as.").addDropdown(
|
||||||
(dropdown) => dropdown.addOptions({
|
(dropdown) => dropdown.addOptions({
|
||||||
png: "PNG",
|
png: "PNG",
|
||||||
svg: "SVG"
|
svg: "SVG"
|
||||||
@@ -6810,33 +6858,33 @@ var ExportCanvasExtension = class extends CanvasExtension {
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
let pixelRatioFactor = 1;
|
let pixelRatioFactor = 1;
|
||||||
pixelRatioSetting = new import_obsidian18.Setting(modal.contentEl).setName("Pixel ratio").setDesc("Higher pixel ratios result in higher resolution images but also larger file sizes.").addSlider(
|
pixelRatioSetting = new import_obsidian19.Setting(modal.contentEl).setName("Pixel ratio").setDesc("Higher pixel ratios result in higher resolution images but also larger file sizes.").addSlider(
|
||||||
(slider) => slider.setDynamicTooltip().setLimits(0.2, 5, 0.1).setValue(pixelRatioFactor).onChange((value) => pixelRatioFactor = value)
|
(slider) => slider.setDynamicTooltip().setLimits(0.2, 5, 0.1).setValue(pixelRatioFactor).onChange((value) => pixelRatioFactor = value)
|
||||||
);
|
);
|
||||||
let noFontExport = true;
|
let noFontExport = true;
|
||||||
noFontExportSetting = new import_obsidian18.Setting(modal.contentEl).setName("Skip font export").setDesc("This will not include the fonts in the exported SVG. This will make the SVG file smaller.").addToggle(
|
noFontExportSetting = new import_obsidian19.Setting(modal.contentEl).setName("Skip font export").setDesc("This will not include the fonts in the exported SVG. This will make the SVG file smaller.").addToggle(
|
||||||
(toggle) => toggle.setValue(noFontExport).onChange((value) => noFontExport = value)
|
(toggle) => toggle.setValue(noFontExport).onChange((value) => noFontExport = value)
|
||||||
);
|
);
|
||||||
let theme = activeDocument.body.classList.contains("theme-dark") ? "dark" : "light";
|
let theme = activeDocument.body.classList.contains("theme-dark") ? "dark" : "light";
|
||||||
new import_obsidian18.Setting(modal.contentEl).setName("Theme").setDesc("The theme used for the export.").addDropdown(
|
new import_obsidian19.Setting(modal.contentEl).setName("Theme").setDesc("The theme used for the export.").addDropdown(
|
||||||
(dropdown) => dropdown.addOptions({
|
(dropdown) => dropdown.addOptions({
|
||||||
light: "Light",
|
light: "Light",
|
||||||
dark: "Dark"
|
dark: "Dark"
|
||||||
}).setValue(theme).onChange((value) => theme = value)
|
}).setValue(theme).onChange((value) => theme = value)
|
||||||
);
|
);
|
||||||
let watermark = false;
|
let watermark = false;
|
||||||
new import_obsidian18.Setting(modal.contentEl).setName("Show logo").setDesc("This will add an Obsidian + Advanced Canvas logo to the bottom left.").addToggle(
|
new import_obsidian19.Setting(modal.contentEl).setName("Show logo").setDesc("This will add an Obsidian + Advanced Canvas logo to the bottom left.").addToggle(
|
||||||
(toggle) => toggle.setValue(watermark).onChange((value) => watermark = value)
|
(toggle) => toggle.setValue(watermark).onChange((value) => watermark = value)
|
||||||
);
|
);
|
||||||
let garbledText = false;
|
let garbledText = false;
|
||||||
new import_obsidian18.Setting(modal.contentEl).setName("Privacy mode").setDesc("This will obscure any text on your canvas.").addToggle(
|
new import_obsidian19.Setting(modal.contentEl).setName("Privacy mode").setDesc("This will obscure any text on your canvas.").addToggle(
|
||||||
(toggle) => toggle.setValue(garbledText).onChange((value) => garbledText = value)
|
(toggle) => toggle.setValue(garbledText).onChange((value) => garbledText = value)
|
||||||
);
|
);
|
||||||
let transparentBackground = false;
|
let transparentBackground = false;
|
||||||
transparentBackgroundSetting = new import_obsidian18.Setting(modal.contentEl).setName("Transparent background").setDesc("This will make the background of the image transparent.").addToggle(
|
transparentBackgroundSetting = new import_obsidian19.Setting(modal.contentEl).setName("Transparent background").setDesc("This will make the background of the image transparent.").addToggle(
|
||||||
(toggle) => toggle.setValue(transparentBackground).onChange((value) => transparentBackground = value)
|
(toggle) => toggle.setValue(transparentBackground).onChange((value) => transparentBackground = value)
|
||||||
);
|
);
|
||||||
new import_obsidian18.Setting(modal.contentEl).addButton(
|
new import_obsidian19.Setting(modal.contentEl).addButton(
|
||||||
(button) => button.setButtonText("Save").setCta().onClick(async () => {
|
(button) => button.setButtonText("Save").setCta().onClick(async () => {
|
||||||
modal.close();
|
modal.close();
|
||||||
await this.exportImage(
|
await this.exportImage(
|
||||||
@@ -6870,7 +6918,7 @@ var ExportCanvasExtension = class extends CanvasExtension {
|
|||||||
return nodesToExportIds.includes(edgeData.fromNode) && nodesToExportIds.includes(edgeData.toNode);
|
return nodesToExportIds.includes(edgeData.fromNode) && nodesToExportIds.includes(edgeData.toNode);
|
||||||
});
|
});
|
||||||
const backgroundColor = transparentBackground ? void 0 : window.getComputedStyle(canvas.canvasEl).getPropertyValue("--canvas-background");
|
const backgroundColor = transparentBackground ? void 0 : window.getComputedStyle(canvas.canvasEl).getPropertyValue("--canvas-background");
|
||||||
new import_obsidian18.Notice("Exporting the canvas. Please wait...");
|
new import_obsidian19.Notice("Exporting the canvas. Please wait...");
|
||||||
const interactionBlocker = this.getInteractionBlocker();
|
const interactionBlocker = this.getInteractionBlocker();
|
||||||
activeDocument.body.appendChild(interactionBlocker);
|
activeDocument.body.appendChild(interactionBlocker);
|
||||||
canvas.screenshotting = true;
|
canvas.screenshotting = true;
|
||||||
@@ -6971,7 +7019,7 @@ var ExportCanvasExtension = class extends CanvasExtension {
|
|||||||
downloadEl.click();
|
downloadEl.click();
|
||||||
} else {
|
} else {
|
||||||
const ERROR_MESSAGE = "Export cancelled: Nodes did not finish loading in time";
|
const ERROR_MESSAGE = "Export cancelled: Nodes did not finish loading in time";
|
||||||
new import_obsidian18.Notice(ERROR_MESSAGE);
|
new import_obsidian19.Notice(ERROR_MESSAGE);
|
||||||
console.error(ERROR_MESSAGE);
|
console.error(ERROR_MESSAGE);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
@@ -7296,16 +7344,14 @@ var EdgeExposerExtension = class extends CanvasExtension {
|
|||||||
for (const exposedDataKey of getExposedEdgeData(this.plugin.settings)) {
|
for (const exposedDataKey of getExposedEdgeData(this.plugin.settings)) {
|
||||||
const datasetPairs = edgeData[exposedDataKey] && typeof edgeData[exposedDataKey] === "object" ? Object.entries(edgeData[exposedDataKey]) : [[exposedDataKey, edgeData[exposedDataKey]]];
|
const datasetPairs = edgeData[exposedDataKey] && typeof edgeData[exposedDataKey] === "object" ? Object.entries(edgeData[exposedDataKey]) : [[exposedDataKey, edgeData[exposedDataKey]]];
|
||||||
for (const [key, value] of datasetPairs) {
|
for (const [key, value] of datasetPairs) {
|
||||||
const stringifiedKey = JSON.stringify(key);
|
|
||||||
if (!stringifiedKey) continue;
|
|
||||||
if (!value) {
|
if (!value) {
|
||||||
delete edge.path.display.dataset[stringifiedKey];
|
delete edge.path.display.dataset[key];
|
||||||
if ((_a = edge.fromLineEnd) == null ? void 0 : _a.el) delete edge.fromLineEnd.el.dataset[stringifiedKey];
|
if ((_a = edge.fromLineEnd) == null ? void 0 : _a.el) delete edge.fromLineEnd.el.dataset[key];
|
||||||
if ((_b = edge.toLineEnd) == null ? void 0 : _b.el) delete edge.toLineEnd.el.dataset[stringifiedKey];
|
if ((_b = edge.toLineEnd) == null ? void 0 : _b.el) delete edge.toLineEnd.el.dataset[key];
|
||||||
} else {
|
} else {
|
||||||
edge.path.display.dataset[stringifiedKey] = JSON.stringify(value);
|
edge.path.display.dataset[key] = value;
|
||||||
if ((_c = edge.fromLineEnd) == null ? void 0 : _c.el) edge.fromLineEnd.el.dataset[stringifiedKey] = JSON.stringify(value);
|
if ((_c = edge.fromLineEnd) == null ? void 0 : _c.el) edge.fromLineEnd.el.dataset[key] = value;
|
||||||
if ((_d = edge.toLineEnd) == null ? void 0 : _d.el) edge.toLineEnd.el.dataset[stringifiedKey] = JSON.stringify(value);
|
if ((_d = edge.toLineEnd) == null ? void 0 : _d.el) edge.toLineEnd.el.dataset[key] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7423,10 +7469,10 @@ var PATCHERS = [
|
|||||||
FileManagerPatcher,
|
FileManagerPatcher,
|
||||||
// Direct metadata dependant patchers
|
// Direct metadata dependant patchers
|
||||||
PropertiesPatcher,
|
PropertiesPatcher,
|
||||||
!(0, import_obsidian19.requireApiVersion)("1.12.0") && BacklinksPatcher,
|
!(0, import_obsidian20.requireApiVersion)("1.12.0") && BacklinksPatcher,
|
||||||
OutgoingLinksPatcher,
|
OutgoingLinksPatcher,
|
||||||
// Metadata dependant patchers
|
// Metadata dependant patchers
|
||||||
(0, import_obsidian19.requireApiVersion)("1.9.0") && BasesTableViewPatcher,
|
(0, import_obsidian20.requireApiVersion)("1.9.0") && BasesTableViewPatcher,
|
||||||
LinkSuggestionsPatcher,
|
LinkSuggestionsPatcher,
|
||||||
EmbedPatcher,
|
EmbedPatcher,
|
||||||
SearchPatcher
|
SearchPatcher
|
||||||
@@ -7462,9 +7508,10 @@ var CANVAS_EXTENSIONS = [
|
|||||||
ExportCanvasExtension,
|
ExportCanvasExtension,
|
||||||
FocusModeCanvasExtension,
|
FocusModeCanvasExtension,
|
||||||
EncapsulateCanvasExtension,
|
EncapsulateCanvasExtension,
|
||||||
EdgeSelectionCanvasExtension
|
EdgeSelectionCanvasExtension,
|
||||||
|
CopyNodeReferenceCanvasExtension
|
||||||
];
|
];
|
||||||
var AdvancedCanvasPlugin = class extends import_obsidian19.Plugin {
|
var AdvancedCanvasPlugin = class extends import_obsidian20.Plugin {
|
||||||
async onload() {
|
async onload() {
|
||||||
IconsHelper.addIcons();
|
IconsHelper.addIcons();
|
||||||
this.settings = new SettingsManager(this);
|
this.settings = new SettingsManager(this);
|
||||||
@@ -7496,7 +7543,7 @@ var AdvancedCanvasPlugin = class extends import_obsidian19.Plugin {
|
|||||||
}).filter((canvas) => canvas);
|
}).filter((canvas) => canvas);
|
||||||
}
|
}
|
||||||
getCurrentCanvasView() {
|
getCurrentCanvasView() {
|
||||||
const canvasView = this.app.workspace.getActiveViewOfType(import_obsidian19.ItemView);
|
const canvasView = this.app.workspace.getActiveViewOfType(import_obsidian20.ItemView);
|
||||||
if ((canvasView == null ? void 0 : canvasView.getViewType()) !== "canvas") return null;
|
if ((canvasView == null ? void 0 : canvasView.getViewType()) !== "canvas") return null;
|
||||||
return canvasView;
|
return canvasView;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"id": "advanced-canvas",
|
"id": "advanced-canvas",
|
||||||
"name": "Advanced Canvas",
|
"name": "Advanced Canvas",
|
||||||
"version": "6.1.6",
|
"version": "6.2.0",
|
||||||
"minAppVersion": "1.7.2",
|
"minAppVersion": "1.7.2",
|
||||||
"description": "Supercharge your canvas experience! Create presentations, flowcharts and more!",
|
"description": "Supercharge your canvas experience! Create presentations, flowcharts and more!",
|
||||||
"author": "Developer-Mike",
|
"author": "Developer-Mike",
|
||||||
|
|||||||
+49
-17
@@ -1,55 +1,55 @@
|
|||||||
/* src/styles.scss */
|
/* src/styles.scss */
|
||||||
.properties-field > .setting-item-info {
|
.ac-settings .properties-field > .setting-item-info {
|
||||||
flex: 0;
|
flex: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: var(--size-4-1) var(--size-4-2);
|
padding: var(--size-4-1) var(--size-4-2);
|
||||||
border: var(--input-border-width) solid var(--background-modifier-border);
|
border: var(--input-border-width) solid var(--background-modifier-border);
|
||||||
border-radius: var(--input-radius) 0 0 var(--input-radius);
|
border-radius: var(--input-radius) 0 0 var(--input-radius);
|
||||||
}
|
}
|
||||||
.properties-field > .setting-item-control > input {
|
.ac-settings .properties-field > .setting-item-control > input {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border-radius: 0 var(--input-radius) var(--input-radius) 0;
|
border-radius: 0 var(--input-radius) var(--input-radius) 0;
|
||||||
}
|
}
|
||||||
.ac-settings-heading:not(:first-child) {
|
.ac-settings .ac-settings-heading:not(:first-child) {
|
||||||
margin-top: var(--size-4-10) !important;
|
margin-top: var(--size-4-10) !important;
|
||||||
}
|
}
|
||||||
.ac-settings-heading:has(.checkbox-container:not(.is-enabled)) {
|
.ac-settings .ac-settings-heading:has(.checkbox-container:not(.is-enabled)) {
|
||||||
border-bottom-color: var(--background-modifier-border-hover);
|
border-bottom-color: var(--background-modifier-border-hover);
|
||||||
}
|
}
|
||||||
.ac-settings-heading .setting-item-description {
|
.ac-settings .ac-settings-heading .setting-item-description {
|
||||||
margin-inline-end: 20px;
|
margin-inline-end: 20px;
|
||||||
}
|
}
|
||||||
.settings-header-children {
|
.ac-settings .settings-header-children {
|
||||||
transform-origin: top center;
|
transform-origin: top center;
|
||||||
transform: scaleY(1);
|
transform: scaleY(1);
|
||||||
transition: transform 0.2s ease-in-out;
|
transition: transform 0.2s ease-in-out;
|
||||||
}
|
}
|
||||||
.ac-settings-heading:has(.checkbox-container:not(.is-enabled)) + .settings-header-children {
|
.ac-settings .ac-settings-heading:has(.checkbox-container:not(.is-enabled)) + .settings-header-children {
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
height: 0;
|
height: 0;
|
||||||
transform: scaleY(0);
|
transform: scaleY(0);
|
||||||
}
|
}
|
||||||
.setting-item > .setting-item-control input[type=text] {
|
.ac-settings .setting-item > .setting-item-control input[type=text] {
|
||||||
width: 75px;
|
width: 75px;
|
||||||
}
|
}
|
||||||
details.setting-item {
|
.ac-settings details.setting-item {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: initial;
|
align-items: initial;
|
||||||
}
|
}
|
||||||
details.setting-item:not([open]) {
|
.ac-settings details.setting-item:not([open]) {
|
||||||
row-gap: 0;
|
row-gap: 0;
|
||||||
}
|
}
|
||||||
details.setting-item[open] {
|
.ac-settings details.setting-item[open] {
|
||||||
padding-bottom: var(--size-4-2);
|
padding-bottom: var(--size-4-2);
|
||||||
}
|
}
|
||||||
details.setting-item[open] > summary {
|
.ac-settings details.setting-item[open] > summary {
|
||||||
margin-bottom: var(--size-4-2);
|
margin-bottom: var(--size-4-2);
|
||||||
}
|
}
|
||||||
details.setting-item > *:not(summary) {
|
.ac-settings details.setting-item > *:not(summary) {
|
||||||
border: 1px solid var(--background-primary);
|
border: 1px solid var(--background-primary);
|
||||||
}
|
}
|
||||||
.kofi-banner {
|
.ac-settings .kofi-banner {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -58,17 +58,17 @@ details.setting-item > *:not(summary) {
|
|||||||
background-color: var(--background-primary-alt);
|
background-color: var(--background-primary-alt);
|
||||||
border-radius: var(--radius-m);
|
border-radius: var(--radius-m);
|
||||||
}
|
}
|
||||||
.kofi-banner .ac-kofi-banner-title {
|
.ac-settings .kofi-banner .ac-kofi-banner-title {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-size: var(--font-ui-small);
|
font-size: var(--font-ui-small);
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
.kofi-banner .ac-kofi-button {
|
.ac-settings .kofi-banner .ac-kofi-button {
|
||||||
width: min-content;
|
width: min-content;
|
||||||
height: min-content;
|
height: min-content;
|
||||||
line-height: 0;
|
line-height: 0;
|
||||||
}
|
}
|
||||||
.kofi-banner .ac-kofi-button img {
|
.ac-settings .kofi-banner .ac-kofi-button img {
|
||||||
min-width: 75px;
|
min-width: 75px;
|
||||||
width: 25%;
|
width: 25%;
|
||||||
max-width: 100px;
|
max-width: 100px;
|
||||||
@@ -491,3 +491,35 @@ details.setting-item > *:not(summary) {
|
|||||||
.canvas-node-interaction-layer[data-is-from-portal=true] .canvas-node-resizer .canvas-node-connection-point {
|
.canvas-node-interaction-layer[data-is-from-portal=true] .canvas-node-resizer .canvas-node-connection-point {
|
||||||
pointer-events: all;
|
pointer-events: all;
|
||||||
}
|
}
|
||||||
|
.ac-card-embed {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
contain: strict;
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: var(--background-primary);
|
||||||
|
border: 1px solid rgb(var(--canvas-color));
|
||||||
|
border-radius: var(--radius-m);
|
||||||
|
box-shadow: var(--shadow-stationary);
|
||||||
|
}
|
||||||
|
.ac-card-embed.is-themed {
|
||||||
|
background-color: rgba(var(--canvas-color), 0.07);
|
||||||
|
border-color: rgba(var(--canvas-color), 0.7);
|
||||||
|
box-shadow: inset 0 0 0 1px rgba(var(--canvas-color), 0.7), var(--shadow-stationary);
|
||||||
|
}
|
||||||
|
.ac-card-embed > .markdown-content {
|
||||||
|
position: relative;
|
||||||
|
overflow-y: auto;
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
padding: 0 var(--size-4-4);
|
||||||
|
font-size: var(--font-text-size);
|
||||||
|
font-family: var(--font-text);
|
||||||
|
line-height: var(--line-height-normal);
|
||||||
|
color: var(--text-normal);
|
||||||
|
user-select: text;
|
||||||
|
-webkit-user-select: text;
|
||||||
|
scrollbar-gutter: stable;
|
||||||
|
}
|
||||||
Vendored
+33
-44
@@ -4,31 +4,21 @@
|
|||||||
"type": "split",
|
"type": "split",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"id": "4de6e4e8f2d3eae9",
|
"id": "8c864a1a13e218c8",
|
||||||
"type": "tabs",
|
"type": "tabs",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"id": "7793305178417da9",
|
"id": "5777e4c663df3488",
|
||||||
"type": "leaf",
|
"type": "leaf",
|
||||||
"state": {
|
"state": {
|
||||||
"type": "markdown",
|
"type": "markdown",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "대검 현황.md",
|
"file": "30연대 26년도 예산.md",
|
||||||
"mode": "source",
|
"mode": "source",
|
||||||
"source": false
|
"source": false
|
||||||
},
|
},
|
||||||
"icon": "lucide-file",
|
"icon": "lucide-file",
|
||||||
"title": "대검 현황"
|
"title": "30연대 26년도 예산"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "6c10e3bc95a711fa",
|
|
||||||
"type": "leaf",
|
|
||||||
"state": {
|
|
||||||
"type": "empty",
|
|
||||||
"state": {},
|
|
||||||
"icon": "lucide-file",
|
|
||||||
"title": "새 탭"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -59,7 +49,7 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "search",
|
"type": "search",
|
||||||
"state": {
|
"state": {
|
||||||
"query": "File:대검",
|
"query": "Section:임헌",
|
||||||
"matchingCase": false,
|
"matchingCase": false,
|
||||||
"explainSearch": false,
|
"explainSearch": false,
|
||||||
"collapseAll": false,
|
"collapseAll": false,
|
||||||
@@ -110,7 +100,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "a266ae39a6642653",
|
"id": "a6dccc22ecaeacfc",
|
||||||
"type": "leaf",
|
"type": "leaf",
|
||||||
"state": {
|
"state": {
|
||||||
"type": "file-explorer",
|
"type": "file-explorer",
|
||||||
@@ -123,7 +113,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "56597f278861a3d6",
|
"id": "beab859baf93e69a",
|
||||||
"type": "leaf",
|
"type": "leaf",
|
||||||
"state": {
|
"state": {
|
||||||
"type": "mk-path-view",
|
"type": "mk-path-view",
|
||||||
@@ -191,7 +181,7 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "file-properties",
|
"type": "file-properties",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "대검 현황.md"
|
"file": "30연대 26년도 예산.md"
|
||||||
},
|
},
|
||||||
"icon": "lucide-info",
|
"icon": "lucide-info",
|
||||||
"title": "파일 속성"
|
"title": "파일 속성"
|
||||||
@@ -215,35 +205,34 @@
|
|||||||
"notion-bases:Notion bases": false
|
"notion-bases:Notion bases": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"active": "7793305178417da9",
|
"active": "5777e4c663df3488",
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
"물자현황/대검.md",
|
"물자유지비 추가배정건의.md",
|
||||||
"대검 현황.md",
|
|
||||||
"2026년 월력형 메모형 일정(2월).canvas",
|
|
||||||
"병영생활관 에어컨 교체소요.md",
|
|
||||||
"하계재난대비계획.md",
|
|
||||||
"방독면살균소독장비.md",
|
|
||||||
"은닉초과재산탄약회수활동.md",
|
|
||||||
"inbox/개인장구류 불출 문제발생.md",
|
|
||||||
"inbox/소방.md",
|
|
||||||
"매연측정.md",
|
|
||||||
"지휘관 교체 재물조사.md",
|
|
||||||
"성인지교육.md",
|
|
||||||
"inbox/사이버 보안 진단의 날 시행-1.md",
|
|
||||||
"inbox/보급품 수령 , 분배, 반납.md",
|
|
||||||
"월하약품불출.md",
|
|
||||||
"대형정수기 필터교체 업체방문.md",
|
|
||||||
"월하준비.md",
|
|
||||||
"시설물 정기 자체관리 대상시설 안전점검.md",
|
|
||||||
"대한민국 안전대전환 집중 안전점검.md",
|
|
||||||
"30연대 26년도 예산.md",
|
"30연대 26년도 예산.md",
|
||||||
"안전활동유공.md",
|
"장비.md",
|
||||||
|
"2026년 월력형 메모형 일정(2월).canvas",
|
||||||
|
"inbox/보급품 수령 , 분배, 반납.md",
|
||||||
|
"inbox/위임보수.md",
|
||||||
|
"총기관리.md",
|
||||||
|
"27~33장비불용결정계획.md",
|
||||||
|
"27저장화생방장비물자신뢰성평가대상품목보유현황.md",
|
||||||
|
"소방시설.md",
|
||||||
"혹서기일과.md",
|
"혹서기일과.md",
|
||||||
"inbox/당직근무간 특이사항.md",
|
"k2총기 편제 초과 조정 의견보고.md",
|
||||||
"26년 30연대 전술훈련평가 수검자료 정리.md",
|
"하게 재난대비계획 기간.md",
|
||||||
"전술훈련평가.md",
|
"재해재난대비계획.md",
|
||||||
"위생점검.md",
|
"재난안전통신망.md",
|
||||||
"일일결산.md",
|
"재난관계관.md",
|
||||||
|
"하계재난대비계획.md",
|
||||||
|
"당직근무.md",
|
||||||
|
"대한민국 안전대전환 집중 안전점검.md",
|
||||||
|
"장비탄약 관리실태 현장확인 및 지도.md",
|
||||||
|
"inbox/25년 전투장비지휘검열-1.md",
|
||||||
|
"inbox/25년 전투장비지휘검열.md",
|
||||||
|
"장비정비.md",
|
||||||
|
"방독면살균소독장비.md",
|
||||||
|
"차량 2부제.md",
|
||||||
|
"월단위업무.md",
|
||||||
"files/24_result.pdf",
|
"files/24_result.pdf",
|
||||||
"2025년 월력형 메모형 일정.canvas",
|
"2025년 월력형 메모형 일정.canvas",
|
||||||
"1778129959563.jpg",
|
"1778129959563.jpg",
|
||||||
|
|||||||
Binary file not shown.
+7330
-6539
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,2 @@
|
|||||||
|
# 불용대상목록 작성(기능과) 및 작성양식 야전전파 :5월한
|
||||||
|
# 자원관리부대 > 군지사군지여단 통보 :6월한
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# 보유현황 조사
|
||||||
|
# 로트추가,사진첨부
|
||||||
|
# 소량로트 지정항목
|
||||||
+18
-4
@@ -4,7 +4,7 @@
|
|||||||
2. 2500-2536-301-013-210-01-0103. 생활쓰레기
|
2. 2500-2536-301-013-210-01-0103. 생활쓰레기
|
||||||
2. 1차 집행, 집행전금액 9758970, 집행액 4869900, 집행후금액 4889070
|
2. 1차 집행, 집행전금액 9758970, 집행액 4869900, 집행후금액 4889070
|
||||||
3. 2차 집행, 집행전 금액 4889070 집해액 1623300 집행후금액 3265770
|
3. 2차 집행, 집행전 금액 4889070 집해액 1623300 집행후금액 3265770
|
||||||
4.
|
4. 3차 집행, 집행전금액 3265770 집행액 1623300 집행후금액
|
||||||
|
|
||||||
# 위생시설종사자건강진단비
|
# 위생시설종사자건강진단비
|
||||||
1. 2200-2231-301-005-001-000-210-01-000
|
1. 2200-2231-301-005-001-000-210-01-000
|
||||||
@@ -46,8 +46,21 @@
|
|||||||
19. 13차 집행, 3교육대, 12중대 에어컨, 집행전금액 13080200 집행액 4774000 집행후금액 8306200
|
19. 13차 집행, 3교육대, 12중대 에어컨, 집행전금액 13080200 집행액 4774000 집행후금액 8306200
|
||||||
20. 근거입력방법: 정비관리>군직정비수행관리>부대야전정비관리(지상)-육군>물자의무장비정비의뢰등록(육군)
|
20. 근거입력방법: 정비관리>군직정비수행관리>부대야전정비관리(지상)-육군>물자의무장비정비의뢰등록(육군)
|
||||||
21. 14차 집행, 1교육대, 집행전금액 8306200 집행액 517000 집행후금액 7789200
|
21. 14차 집행, 1교육대, 집행전금액 8306200 집행액 517000 집행후금액 7789200
|
||||||
22. 15차 집행, 대형정수기, 집행전금액 7789200 집행액 900000 집행후금액 6889200
|
22. 15차 집행, 교육대전체 대형정수기, 집행전금액 7789200 집행액 900000 집행후금액 6889200
|
||||||
23.
|
23. 16차 집행, 2교육대 제빙기, 집행전금액 6889200 집행액 112000 집행후금액 6777200
|
||||||
|
24. 17차 집행, 취사장 에어커튼, 집행전금액 6777200 집행액 187000 집행후금액 6590200
|
||||||
|
25. 18차 집행, 1교 3중대 에어컨, 집행전금액 6590200 집행액 880000 집행후금액 5710200
|
||||||
|
26. 19차 집행, 11중대 쇼냉장고, 집행전금액 5710200 집행액 110000 집행후금액 5600200
|
||||||
|
27. 20차 집행, 10중대 에어컨정비, 집행전금액 5600200 집행액 585000 집행후금액 5015200
|
||||||
|
28. 21차 집행, 3교(11중대) 에어컨정비, 집행전금액 5015200 집행액 1045000 집행후금액 3970200
|
||||||
|
29. 추가건의,
|
||||||
|
1. 대헝정수기 170만
|
||||||
|
2. 에어컨 정비 4774000,1045000,120만
|
||||||
|
3. 에어컨 청소비 벽걸이 총239,스탠드15
|
||||||
|
1. 벼걸이 239 * 8만 = 19120000
|
||||||
|
2. 스탠드 15* 16만 = 2400000
|
||||||
|
4. 건조기 청소 100×13만 = 13000000
|
||||||
|
5.
|
||||||
|
|
||||||
# 보온대
|
# 보온대
|
||||||
1. 2300-2332-302-003-000-000-210-11
|
1. 2300-2332-302-003-000-000-210-11
|
||||||
@@ -105,8 +118,9 @@
|
|||||||
17. 24차 집행, 지원과(별관식당 가스계량기교체), 집행전금액 14354050 집행액 699600 집행후금액 13654450
|
17. 24차 집행, 지원과(별관식당 가스계량기교체), 집행전금액 14354050 집행액 699600 집행후금액 13654450
|
||||||
18. 25차 집행, 지원과(2층리모델링), 집행전금액 13654450 집행액 910500 집행후금액 12743950
|
18. 25차 집행, 지원과(2층리모델링), 집행전금액 13654450 집행액 910500 집행후금액 12743950
|
||||||
19. 26차 집행, 지원과(2층리모델링), 집행전금액 12743950 집해액 150000 직행후금액 12593950
|
19. 26차 집행, 지원과(2층리모델링), 집행전금액 12743950 집해액 150000 직행후금액 12593950
|
||||||
20.
|
20. 27차 집행, 7중대(강화도어), 집행전금액 12593950 집행액 200000 집행후금액 12393950
|
||||||
21.
|
21.
|
||||||
|
22.
|
||||||
|
|
||||||
# 재난 및 안전관리 예산(301-002-210-09,11)
|
# 재난 및 안전관리 예산(301-002-210-09,11)
|
||||||
1. 재난예방 및 보수비(2300-2337-301-002-000-000-210-11)
|
1. 재난예방 및 보수비(2300-2337-301-002-000-000-210-11)
|
||||||
|
|||||||
@@ -44,4 +44,25 @@
|
|||||||
- 화장실용 나프탈렌 없음
|
- 화장실용 나프탈렌 없음
|
||||||
- 피복 나프탈롄 16,16,16
|
- 피복 나프탈롄 16,16,16
|
||||||
- 본부는 남는거
|
- 본부는 남는거
|
||||||
-
|
|
||||||
|
# 26.5.26(화) 대형산풍기 3대수령,37x031236
|
||||||
|
- 민간위탁 식당에 3대 인계(본부중대에 재산전환예정)
|
||||||
|
|
||||||
|
# 26.5.27(수) A4종이 375173441,90박스
|
||||||
|
1. 교육대 25박스씩 75박스, 15박스 본부
|
||||||
|
|
||||||
|
# 26.5.28(목) 표백제,37x192488, 114통(pl)2리터짜리
|
||||||
|
1. 분배 교육대 35개씩, 9개 본부
|
||||||
|
|
||||||
|
# 26.5.28(목) 화생방물자 수령.이승민주무관님, 정비대, 1330
|
||||||
|
1. 11749919, 마크1,22개
|
||||||
|
2. 011188172,보호덧신(소),24개
|
||||||
|
3. 010215978,보호덧신(대),18개
|
||||||
|
- 근거:소군수과-2612(26.5.26)치장화생방물자(mark,보호덧신) 불출지시
|
||||||
|
- 치장창고 보관중
|
||||||
|
|
||||||
|
# 26.5.26(화) 1500, 모기향 160개수령
|
||||||
|
|
||||||
|
# 26.6.4(목)1500, 야전배낭노후교체 보급,75세트
|
||||||
|
|
||||||
|
# 26.6.2 1500 9번창고 예초기 6대수령
|
||||||
@@ -6,3 +6,6 @@
|
|||||||
1. 반기단위 민간업체 의견수렴 (안전보건 의견수렴 후 개선조치)
|
1. 반기단위 민간업체 의견수렴 (안전보건 의견수렴 후 개선조치)
|
||||||
2. 3교, 5.11실시
|
2. 3교, 5.11실시
|
||||||
3. 2교, 5.6실시
|
3. 2교, 5.6실시
|
||||||
|
|
||||||
|
# 전반기 육직부대 안전진단시 안전보건확보의무이행 분야 중 공무직 근로자 및 병영, 민영식당 종사자 간담회 결과 꼭 반영 해주세요
|
||||||
|
- 부대별 보고 기한 : 6. 11일 한
|
||||||
+3
-2
@@ -68,8 +68,9 @@
|
|||||||
|
|
||||||
# 26.3분기 소요
|
# 26.3분기 소요
|
||||||
1. 3교 기계실 스팀 메인 증기관 감압변 교체,서원석,3분기위임보수반영필요
|
1. 3교 기계실 스팀 메인 증기관 감압변 교체,서원석,3분기위임보수반영필요
|
||||||
2. 식당 벗겨짐 공사, 세척장 바닥 코팅
|
2. 1교 목욕탕 압력탱크 마개 누수 보수
|
||||||
3. 2분기 부결
|
3. 식당 벗겨짐 공사, 세척장 바닥 코팅
|
||||||
|
4. 2분기 부결
|
||||||
1. 교육대 중앙 노후창호
|
1. 교육대 중앙 노후창호
|
||||||
2. 노후계단 미크럼방지등
|
2. 노후계단 미크럼방지등
|
||||||
3. 중대행정반 화장실보수
|
3. 중대행정반 화장실보수
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
* 훈련병 교육대별 916명기준
|
* 훈련병 교육대별 916명기준
|
||||||
# 장비
|
# 장비
|
||||||
1. 현역 377, 교육 2,781
|
1. 현역 377, 교육 2,781
|
||||||
|
2. 26.5.26 총기재산 용도 변경 교육용>현역용 1정
|
||||||
|
3. 현역 378, 교육 2780
|
||||||
|
4.
|
||||||
# 예비
|
# 예비
|
||||||
1. 현역 5
|
1. 현역 5
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
휴일 당직 수고들 많습니다.
|
||||||
|
유동병력, 부대활동 특이사항, 순찰 등 보고해주세요.
|
||||||
|
* 시간, 인원수 등 포함해서 보고 바랍니다~
|
||||||
|
---
|
||||||
|
당직사령 8중대장입니다.
|
||||||
|
|
||||||
|
이방 초대된 사람은 오늘 연대를 책임질 사람들이고, 내일 교대까지 현재방에서 지시 하달될 예정이니 참고
|
||||||
|
|
||||||
|
-오늘 연대 회의 : 19:00
|
||||||
|
⭐️ 핸드토키 지참, 번개조 및 타격대 편성표 지참 ⭐️
|
||||||
|
-주요확인 회의파악 사항
|
||||||
|
|
||||||
|
1. 유동병력 (오늘~내일)
|
||||||
|
- 휴가, 외출, 외박 및 기타 퇴원 후 복귀자 등
|
||||||
|
- 입실자, 병역심사대 입소현황
|
||||||
|
2. 기타사항
|
||||||
|
- 상호 협조 및 보고사항
|
||||||
|
- 동문경계 외진 등
|
||||||
|
|
||||||
|
오늘 근무자 아닌사람은 퇴장해주시고
|
||||||
|
변경인원 초대 후 이글을 다시 올려주시고 퇴장해주십시요
|
||||||
|
|
||||||
|
---
|
||||||
|
---
|
||||||
|
|
||||||
|
2020부 ~ 2028 교육사령부 소 사령
|
||||||
|
이상훈 중령님한테 전화왔었습니다.
|
||||||
|
|
||||||
|
1. 금일 당직사관 확인
|
||||||
|
- 30연대 1교육대 당직사관 중사 김주희
|
||||||
|
|
||||||
|
2. 총기 총 몇정인지?, 어떻게 관리하고 있는지
|
||||||
|
- 1교육대 총 1056정, 현재 무기고에 있으며 키는 상황실 통제성 함에 있고 이원화하여 관리중
|
||||||
|
|
||||||
|
3. 26년 전반기 생명존중활동 및 생명보호강조기간 인지상태 확인
|
||||||
|
|
||||||
|
4. 식중독 관련 식당 근무자에 의해 확인 하는지?
|
||||||
|
- 교육기에는 훈지관, 준비기에는 당직사관이 올라가서 같이 확인중
|
||||||
|
|
||||||
|
5. 휴가 출발자, 복귀자 몇명인지 체크리스트 관련하여 하고있는지?
|
||||||
|
- 1교육대 휴가 출발자 1명, 복귀자 없으며, 체크리스트 활용하여 출타자교육 2040 진행 예정
|
||||||
|
|
||||||
|
6. 야간 환자나오면 어떻게하는지? 인근 병원이 어디있는지?
|
||||||
|
- 지구병원 응급실 문의 후 이용
|
||||||
|
|
||||||
|
7. 도움배려현황 있는지?
|
||||||
|
- 1교육대 1명 있으며, 현재 본부중대 파견중 , 훈련병은 오늘 입소하여 신상파악 중으로 파악되면 다시 연락드린다 하였으나, 괜찮다고 하셨습니다
|
||||||
|
|
||||||
|
이상없이 답변하였습니다
|
||||||
|
|
||||||
|
---
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
충성! 1교육대 당직근무 투입보고 입니다.
|
||||||
|
|
||||||
|
1.금일근무자
|
||||||
|
- 당직사관 : 상사 이태일
|
||||||
|
- 인원현황(기간병/훈련병)
|
||||||
|
- 총원 77명 열외27명 현재원 50명
|
||||||
|
- 열외내용 휴가6명 교육파견2명 본부중대
|
||||||
|
파견1명 외박18명
|
||||||
|
- 총원 865명 현재원 865명
|
||||||
|
|
||||||
|
2.출타자
|
||||||
|
- 오늘 휴가복귀자 : 없음
|
||||||
|
- 오늘 외박복귀자 : 18명
|
||||||
|
- 내일 휴가출발자 : 1명
|
||||||
|
- 내일 휴가복귀자 : 1명
|
||||||
|
|
||||||
|
3.도움배려현황 : 19명(소대장급)
|
||||||
|
*향정신성 의약품 복용등 신경쓰겠습니다.
|
||||||
|
|
||||||
|
4.오늘 예정사항
|
||||||
|
- 개인정비 여건보장
|
||||||
|
- 주,야간 종교활동 실시예정
|
||||||
|
*종파별 임시전우조 편성, 인솔분대장에 의한
|
||||||
|
인원,환자 파악 철저
|
||||||
|
- 휴대폰 사용 실시예정
|
||||||
|
- 개인화기 CBT 시청 및 사전학습 실시
|
||||||
|
- 석식 전,후 테니스공 투척예정
|
||||||
|
*통제 : 훈육지도관 및 생활지도분대장
|
||||||
|
- 내일 혹서기 일과 실시예정
|
||||||
|
|
||||||
|
이상입니다. 충성!
|
||||||
|
|
||||||
|
---
|
||||||
|
충성
|
||||||
|
본부중대 당직근무자 군수지원부사관
|
||||||
|
최병규상사입니다
|
||||||
|
|
||||||
|
1.인원,장비현황
|
||||||
|
- 총원 16
|
||||||
|
- 열외 3(휴가1,외박1,외출1)
|
||||||
|
- 복귀 2(외박1,외출1)
|
||||||
|
- 종교행사자 2명(천주교)
|
||||||
|
- 총기 15정 이상무
|
||||||
|
2.순회진료 1010-1110
|
||||||
|
3.부대활동 개인정비,체육활동
|
||||||
|
4.도움배려용사 없음
|
||||||
|
이상입니다
|
||||||
@@ -4,3 +4,5 @@
|
|||||||
- 행정보급관 톡방에서 관련 의견을 물어보고 계속 사용할지 판단
|
- 행정보급관 톡방에서 관련 의견을 물어보고 계속 사용할지 판단
|
||||||
- 주임원사님은 폐기하라고 했다고함.
|
- 주임원사님은 폐기하라고 했다고함.
|
||||||
- 안녕하세요. 그린테크 냉온수기회사입니다. 육군훈련소30연대 5/19(화) 필터교체 방문 안내드립니다.방문자: 1명 /서흥석 /890210 /010.4414.7029 /렉스턴스포츠칸, 89노5703다음주 화요일 방문 드리겠습니다.감사합니다.353-21 그린테크주식회사
|
- 안녕하세요. 그린테크 냉온수기회사입니다. 육군훈련소30연대 5/19(화) 필터교체 방문 안내드립니다.방문자: 1명 /서흥석 /890210 /010.4414.7029 /렉스턴스포츠칸, 89노5703다음주 화요일 방문 드리겠습니다.감사합니다.353-21 그린테크주식회사
|
||||||
|
|
||||||
|
# 연대장님에게 보고, 필터교체시 정수기 배관교체 필요
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
2교육대. 정정
|
||||||
|
ㅇ벽걸이 83
|
||||||
|
ㅇ스탠드 8
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
3교육대
|
||||||
|
|
||||||
|
벽걸이 에어컨 (83개)
|
||||||
|
1중대 16개
|
||||||
|
2중대 16개
|
||||||
|
3중대 16개
|
||||||
|
4중대 16개
|
||||||
|
3층 기간병 생활관 10개
|
||||||
|
상황실 1개, 휴게실 1개,
|
||||||
|
행보관실 3개
|
||||||
|
중대장실 4개
|
||||||
|
|
||||||
|
스탠드 에어컨 (행정반 5개)
|
||||||
|
3층 교육대장님실 1개
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
1교육대
|
||||||
|
|
||||||
|
벽걸이 에어컨 (73개)
|
||||||
|
1중대 16개
|
||||||
|
2중대 16개
|
||||||
|
3중대 16개
|
||||||
|
4중대 16개
|
||||||
|
3층 기간병 생활관 9개
|
||||||
|
|
||||||
|
스탠드 에어컨 (2개)
|
||||||
|
3층 교육대장님실 1개
|
||||||
|
2층 상황실 1개
|
||||||
|
|
||||||
|
---
|
||||||
|
에어컨 청소
|
||||||
|
건조기 청소
|
||||||
|
세탁기청소
|
||||||
|
대형정수기 유지비
|
||||||
@@ -10,3 +10,6 @@
|
|||||||
![[Resized_20251127_141040.jpeg]]
|
![[Resized_20251127_141040.jpeg]]
|
||||||
|
|
||||||
# 26년 점검,6.2(화)
|
# 26년 점검,6.2(화)
|
||||||
|
1. 01040302369,김혜웅소방관리사(업체)
|
||||||
|
2. 09시 점검예정
|
||||||
|
3.
|
||||||
@@ -19,3 +19,5 @@
|
|||||||
연막 방역용살충제 1
|
연막 방역용살충제 1
|
||||||
화장실 나프탈렌 25
|
화장실 나프탈렌 25
|
||||||
피복용 나프탈렌 53
|
피복용 나프탈렌 53
|
||||||
|
|
||||||
|
# 26.5.26(화) 박성현하사 월하약품 추가 수령
|
||||||
@@ -9,3 +9,10 @@
|
|||||||
|
|
||||||
# 26.4. 한서욱 주무관, K-3기관총 관리전환예정,연대급부대
|
# 26.4. 한서욱 주무관, K-3기관총 관리전환예정,연대급부대
|
||||||
|
|
||||||
|
# 부사관학교, 지원과 백민지 상사(958-1161, 01050807779), 오세열 주무관 01088229555,
|
||||||
|
1. 009304260, 나침반m2, 11개
|
||||||
|
2. 담당주무관님 01063216612
|
||||||
|
3. 내비주소:옥금동길 6 (거리상15분소요)
|
||||||
|
4. 1교육단 본부(위병소 직진500미터 푯말 우회전 작은하연건물)
|
||||||
|
5.
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# 예방정비,장비가동율,화생방장비물자관리,장비보유울
|
||||||
@@ -2,3 +2,4 @@
|
|||||||
점심 맛있게 드셨나요??
|
점심 맛있게 드셨나요??
|
||||||
4일에 전입 오신 의무과장님 차량
|
4일에 전입 오신 의무과장님 차량
|
||||||
121어 8037도 2부제 제외차량 신청가능 할까요??
|
121어 8037도 2부제 제외차량 신청가능 할까요??
|
||||||
|
|
||||||
@@ -18,5 +18,7 @@
|
|||||||
# 재난관계관 소집교육 : 5.29(금) 13:00 김낙중영웅실
|
# 재난관계관 소집교육 : 5.29(금) 13:00 김낙중영웅실
|
||||||
# 하계 재난대비 추진평가회의 : 6.25(목) 주간 상황평가회의시
|
# 하계 재난대비 추진평가회의 : 6.25(목) 주간 상황평가회의시
|
||||||
### 부대별 하계 재난대비결과 추진결과 보고
|
### 부대별 하계 재난대비결과 추진결과 보고
|
||||||
|
### 메모전파, 일자,대상자(행보관,당직근무자), 보고양식,설치 참고자료 전파, 일주전전파
|
||||||
|
### 훈련실시, 시간(?),장소(3개소), 준비물,차수벽설치,배수로점검청소
|
||||||
|
|
||||||
# 부대별 하계 재난 대웅흔련 : 6월한 실시후 결과보고(공문)
|
# 부대별 하계 재난 대웅흔련 : 6월한 실시후 결과보고(공문)
|
||||||
Reference in new issue
Block a user