main
Yogi 2024-01-11 21:26:23 +08:00
parent c1dafacaa6
commit a002dcc3cd
53 changed files with 38660 additions and 237 deletions

View File

@ -1,6 +1,6 @@
{
"accentColor": "",
"baseFontSize": 15,
"baseFontSize": 14,
"theme": "obsidian",
"cssTheme": "Minimal"
}

View File

@ -9,6 +9,17 @@
"type": "file",
"ctime": 1701619144582,
"path": "思维模型/思维模型函数.md"
},
{
"type": "file",
"ctime": 1704880209712,
"path": "Life 2024 Blockboard.md"
},
{
"type": "file",
"ctime": 1704882440410,
"path": "TODO.md",
"title": "DailyTODO"
}
]
}

View File

@ -1,5 +1,11 @@
[
"obsidian-better-command-palette",
"colored-tags",
"html-server"
"html-server",
"dataview",
"keyboard-analyzer",
"settings-search",
"recent-files-obsidian",
"cmdr",
"calendar"
]

View File

@ -13,7 +13,7 @@
"templates": true,
"note-composer": true,
"command-palette": true,
"slash-command": false,
"slash-command": true,
"editor-status": true,
"bookmarks": true,
"markdown-importer": false,

View File

@ -12,6 +12,7 @@
"templates",
"note-composer",
"command-palette",
"slash-command",
"editor-status",
"bookmarks",
"random-note",

View File

@ -1,5 +1,5 @@
{
"collapse-filter": false,
"collapse-filter": true,
"search": "",
"showTags": false,
"showAttachments": false,
@ -17,6 +17,6 @@
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 0.015355906606692777,
"close": false
"scale": 0.0831742783592756,
"close": true
}

View File

@ -0,0 +1,10 @@
{
"shouldConfirmBeforeCreate": true,
"weekStart": "locale",
"wordsPerDot": 250,
"showWeeklyNote": false,
"weeklyNoteFormat": "",
"weeklyNoteTemplate": "",
"weeklyNoteFolder": "",
"localeOverride": "system-default"
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
{
"id": "calendar",
"name": "Calendar",
"description": "Calendar view of your daily notes",
"version": "1.5.10",
"author": "Liam Cain",
"authorUrl": "https://github.com/liamcain/",
"isDesktopOnly": false,
"minAppVersion": "0.9.11"
}

View File

@ -0,0 +1,32 @@
{
"confirmDeletion": true,
"showAddCommand": true,
"debug": false,
"editorMenu": [],
"fileMenu": [],
"leftRibbon": [],
"rightRibbon": [],
"titleBar": [],
"statusBar": [],
"pageHeader": [],
"macros": [],
"explorer": [],
"hide": {
"statusbar": [],
"leftRibbon": [
"Open quick switcher",
"Open command palette"
]
},
"spacing": "5",
"advancedToolbar": {
"rowHeight": 48,
"rowCount": 1,
"spacing": 0,
"buttonWidth": 48,
"columnLayout": false,
"mappedIcons": [],
"tooltips": false,
"heightOffset": 0
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,11 @@
{
"id": "cmdr",
"name": "Commander",
"version": "0.5.1",
"minAppVersion": "1.4.0",
"description": "Customize your workspace by adding commands everywhere, create Macros and supercharge your mobile toolbar.",
"author": "jsmorabito & phibr0",
"authorUrl": "https://github.com/phibr0",
"fundingUrl": "https://ko-fi.com/phibr0",
"isDesktopOnly": false
}

File diff suppressed because one or more lines are too long

View File

@ -1,15 +1,30 @@
{
"chroma": 128,
"lightness": 0,
"palette": 16,
"palette": {
"seed": 5,
"selected": "adaptive-bright",
"custom": "e12729-f37324-f8cc1b-72b043-007f4e"
},
"mixColors": true,
"transition": true,
"accessibility": {
"highTextContrast": false
},
"knownTags": {
"GODOT": 1,
"Linux": 2,
"worldtree": 3,
"tes": 4,
"todo": 5,
"vim": 6
"vim": 6,
"note-taking": 7,
"obsidian": 8,
"pkm": 9,
"test": 10,
"project": 11,
"life_project": 12,
"Life": 13,
"j": 14,
"Life2024": 15
},
"_version": 2
"_version": 3
}

View File

@ -32,7 +32,7 @@ __export(main_exports, {
default: () => ColoredTagsPlugin
});
module.exports = __toCommonJS(main_exports);
var import_obsidian = require("obsidian");
var import_obsidian2 = require("obsidian");
// node_modules/colorjs.io/dist/color.js
function multiplyMatrices(A, B) {
@ -3112,8 +3112,10 @@ function coloredClassApplyer(domElement) {
hashEl2.classList.remove(cls);
}
});
if (!el.classList.contains(className)) {
el.classList.add(className);
hashEl2.classList.add(className);
}
});
}
var coloredClassApplyerPlugin = import_view.ViewPlugin.fromClass(class {
@ -3121,22 +3123,175 @@ var coloredClassApplyerPlugin = import_view.ViewPlugin.fromClass(class {
coloredClassApplyer(view.dom);
}
update(update) {
if (!(update.docChanged || update.focusChanged))
return;
coloredClassApplyer(update.view.dom);
}
});
// main.ts
// ColoredTagsPluginSettingTab.ts
var import_obsidian = require("obsidian");
// defaultSettings.ts
var DEFAULT_SETTINGS = {
chroma: 16,
lightness: 87,
palette: 16,
palette: {
seed: 0,
selected: "adaptive-soft" /* ADAPTIVE_SOFT */,
custom: "e12729-f37324-f8cc1b-72b043-007f4e"
},
mixColors: true,
transition: true,
accessibility: {
highTextContrast: false
},
knownTags: {},
_version: 2
_version: 3
};
var ColoredTagsPlugin = class extends import_obsidian.Plugin {
// ColoredTagsPluginSettingTab.ts
var ColoredTagsPluginSettingTab = class extends import_obsidian.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.showExperimental = false;
this.showAccessibility = false;
this.plugin = plugin;
}
renderPalette(paletteEl) {
paletteEl.empty();
let palette = this.plugin.palettes.light;
if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
palette = this.plugin.palettes.dark;
}
palette.forEach((paletteColor, index) => {
const firstElementStyles = "border-radius: var(--radius-m) 0 0 var(--radius-m)";
const lastElementStyles = "border-radius: 0 var(--radius-m) var(--radius-m) 0";
const styles = [index === 0 && firstElementStyles, "flex: 1", "height: 2em", `background-color: ${paletteColor}`, index === palette.length - 1 && lastElementStyles];
paletteEl.createEl("div", { attr: { style: styles.filter(Boolean).join(";") } });
});
}
renderTags(containerEl) {
const tagsObject = this.app.metadataCache.getTags();
const tagsArray = Object.keys(tagsObject);
if (!tagsArray.length) {
return;
}
const tagEl = containerEl.createEl("div", {
cls: "tagsExample",
attr: { style: `display: flex; gap: 0.5em; align-items: center; justify-content: space-between; flex-wrap: wrap; margin: 1em 0 2em;` }
});
tagsArray.sort((a2, b2) => {
return tagsObject[b2] - tagsObject[a2];
});
const mostPopularTags = tagsArray.splice(0, 2);
const mostPopularNestedTags = Object.values(tagsArray.reduce((acc, tag) => {
const nestingLevel = tag.split("/").length;
if (!acc[nestingLevel]) {
acc[nestingLevel] = tag;
}
return acc;
}, {}));
[...mostPopularTags, ...mostPopularNestedTags].forEach((tag) => {
const link = tagEl.createEl("a", { attr: { href: tag } });
link.classList.add("tag");
link.innerText = tag;
});
}
display() {
const { containerEl } = this;
containerEl.empty();
this.renderTags(containerEl);
const paletteEl = containerEl.createEl("div", {
cls: "palette",
attr: { style: `display: flex; align-items: stretch` }
});
this.renderPalette(paletteEl);
new import_obsidian.Setting(containerEl).setHeading().setName("Palette").setDesc("Select palette").addDropdown(
(dropdown) => dropdown.addOptions({
["adaptive-soft" /* ADAPTIVE_SOFT */]: "\u{1F338} Adaptive soft",
["adaptive-bright" /* ADAPTIVE_BRIGHT */]: "\u{1F33A} Adaptive bright",
["custom" /* CUSTOM */]: "Custom"
}).setValue(String(this.plugin.settings.palette.selected)).onChange(async (value) => {
this.plugin.settings.palette.selected = value;
await this.plugin.saveSettings();
this.display();
})
);
if (this.plugin.settings.palette.selected === "custom") {
const customPaletteField = new import_obsidian.Setting(containerEl).setName("Custom palette").setDesc("").addText((text) => {
text.inputEl.style.minWidth = "100%";
text.setValue(this.plugin.settings.palette.custom).setPlaceholder("Paste palette");
text.onChange(async (value) => {
if (/^([A-Fa-f0-9]{6}(-|$))+$/i.test(value)) {
this.plugin.settings.palette.custom = value;
await this.plugin.saveSettings();
this.renderPalette(paletteEl);
}
});
});
customPaletteField.descEl.innerHTML = `
The format is <code>XXXXXX-XXXXXX-XXXXXX</code> for each RGB color.<br/>
You can share the best color palettes or get one <a href="https://github.com/pfrankov/obsidian-colored-tags/discussions/18">from the community</a>.
`.trim();
}
new import_obsidian.Setting(containerEl).setName("Palette shift").setDesc("If the colors of some tags don't fit, you can shift the palette.").addSlider(
(slider) => slider.setLimits(0, this.plugin.palettes.light.length - 1, 1).setValue(this.plugin.settings.palette.seed).onChange(async (value) => {
slider.showTooltip();
this.plugin.settings.palette.seed = value;
await this.plugin.saveSettings();
this.renderPalette(paletteEl);
})
);
new import_obsidian.Setting(containerEl).setHeading().setName("\u{1F9BE} Accessibility").setDesc("Show accessibility options").addToggle(
(toggle) => toggle.setValue(this.showAccessibility).onChange(async (value) => {
this.showAccessibility = value;
this.display();
})
);
if (this.showAccessibility) {
new import_obsidian.Setting(containerEl).setName("High text contrast").setDesc("Use only white and black colors for texts").addToggle(
(toggle) => toggle.setValue(this.plugin.settings.accessibility.highTextContrast).onChange(async (value) => {
this.plugin.settings.accessibility.highTextContrast = value;
await this.plugin.saveSettings();
this.display();
})
);
}
new import_obsidian.Setting(containerEl).setHeading().setName("\u{1F9EA} Experimental").setDesc("Dangerous actions or insanely unstable options that could be changed or removed in any time").addToggle(
(toggle) => toggle.setValue(this.showExperimental).onChange(async (value) => {
this.showExperimental = value;
this.display();
})
);
if (this.showExperimental) {
new import_obsidian.Setting(containerEl).setName("Mix colors").setDesc("It helps to make text readable").addToggle(
(toggle) => toggle.setValue(this.plugin.settings.mixColors).onChange(async (value) => {
this.plugin.settings.mixColors = value;
await this.plugin.saveSettings();
this.display();
})
);
new import_obsidian.Setting(containerEl).setName("Gradient transition").addToggle(
(toggle) => toggle.setValue(this.plugin.settings.transition).onChange(async (value) => {
this.plugin.settings.transition = value;
await this.plugin.saveSettings();
this.display();
})
);
new import_obsidian.Setting(containerEl).setName("Reset config").setDesc("\u{1F6A8} All colors of all tags will be recalculated as if it was the first launch of the plugin. Requires restart of Obsidian.").addButton(
(button) => button.setButtonText("Reset").setClass("mod-warning").onClick(async () => {
new import_obsidian.Notice(`\u2705 Reset is done
Please restart Obsidian`, 1e4);
button.setDisabled(true);
button.buttonEl.setAttribute("disabled", "true");
button.buttonEl.classList.remove("mod-warning");
this.plugin.settings = Object.assign({}, DEFAULT_SETTINGS);
await this.plugin.saveData(this.plugin.settings);
})
);
}
}
};
// main.ts
var ColoredTagsPlugin = class extends import_obsidian2.Plugin {
constructor() {
super(...arguments);
this.renderedTagsSet = /* @__PURE__ */ new Set();
@ -3152,13 +3307,13 @@ var ColoredTagsPlugin = class extends import_obsidian.Plugin {
await this.saveKnownTags();
this.reload();
this.registerEvent(
this.app.workspace.on("editor-change", (0, import_obsidian.debounce)(async () => {
this.app.workspace.on("editor-change", (0, import_obsidian2.debounce)(async () => {
await this.saveKnownTags();
this.update();
}, 3e3, true))
);
this.registerEvent(
this.app.workspace.on("active-leaf-change", (0, import_obsidian.debounce)(async () => {
this.app.workspace.on("active-leaf-change", (0, import_obsidian2.debounce)(async () => {
await this.saveKnownTags();
this.update();
}, 300, true))
@ -3223,100 +3378,141 @@ var ColoredTagsPlugin = class extends import_obsidian.Plugin {
await this.saveData(this.settings);
this.reload();
}
getColors(input, palette) {
getColors(input, palette, isMixing, isTransition, highTextContrast) {
const chunks = input.split("/");
let combinedTag = "";
const background = chunks.reduce((acc, chunk, i) => {
const gradientStops = [];
let backgroundColor;
let lastColor = "";
chunks.forEach((chunk) => {
const key = [combinedTag, chunk].filter(Boolean).join("/");
const order = this.tagsMap.get(key) || 1;
const colorFromPalette = palette[(order - 1) % palette.length];
if (acc) {
return acc.mix(
const filteredPalette = palette.filter((colorString) => colorString !== lastColor);
const colorFromPalette = filteredPalette[(order - 1) % filteredPalette.length];
lastColor = colorFromPalette;
let newColor;
if (backgroundColor) {
if (isMixing) {
const mixingLevel = isTransition ? 0.5 : 0.4;
newColor = backgroundColor.mix(
colorFromPalette,
0.4,
mixingLevel,
{ space: "lch" }
);
if (newColor.deltaE2000(backgroundColor) < 10) {
newColor = backgroundColor.mix(
colorFromPalette,
mixingLevel + 0.1,
{ space: "lch" }
);
}
} else {
newColor = new Color(colorFromPalette).to("lch");
}
}
if (!backgroundColor) {
backgroundColor = new Color(colorFromPalette).to("lch");
combinedTag = key;
return new Color(colorFromPalette).to("lch");
}, null).toString({ format: "lch" });
const color = darkenColorForContrast(background);
return { background, color };
newColor = backgroundColor;
}
gradientStops.push({
color: newColor.toString({ format: "lch" }),
chunk
});
});
const background = backgroundColor.toString({ format: "lch" });
const defaultGap = isTransition ? 50 : 0;
const gap = defaultGap / gradientStops.length * 2;
const sumOfGaps = gap * (gradientStops.length - 1);
const elementSize = (100 - sumOfGaps) / gradientStops.length;
const linearGradient = gradientStops.map((item, index) => {
const start = index * (elementSize + gap);
const end = start + elementSize;
return `${item.color} ${start}% max(2em, ${end}%)`;
});
let color;
if (highTextContrast) {
const whiteColor = new Color("white");
const blackColor = new Color("black");
const onWhite = Math.abs(backgroundColor.contrast(whiteColor, "APCA"));
const onBlack = Math.abs(backgroundColor.contrast(blackColor, "APCA"));
color = onWhite > onBlack ? whiteColor : blackColor;
} else {
color = darkenColorForContrast(backgroundColor);
}
return { background, color, linearGradient };
}
colorizeTag(tagName) {
tagName = tagName.replace(/#/g, "");
const tagHref = "#" + tagName.replace(/\//g, "\\/");
const tagFlat = tagName.replace(/[^0-9a-z-]/ig, "").toLowerCase();
const { background: backgroundLight, color: colorLight } = this.getColors(tagName, this.palettes.light);
const { background: backgroundDark, color: colorDark } = this.getColors(tagName, this.palettes.dark);
const tagFlat = tagName.replace(/[^0-9a-z-]/ig, "");
const { background: backgroundLight, color: colorLight, linearGradient: linearGradientLight } = this.getColors(tagName, this.palettes.light, this.settings.mixColors, this.settings.transition, this.settings.accessibility.highTextContrast);
const { background: backgroundDark, color: colorDark, linearGradient: linearGradientDark } = this.getColors(tagName, this.palettes.dark, this.settings.mixColors, this.settings.transition, this.settings.accessibility.highTextContrast);
const selectors = [
`a.tag[href="${tagHref}"]`,
`.cm-s-obsidian .cm-line span.cm-hashtag.colored-tag-${tagName.replace(/\//g, "\\/")}`
`.cm-s-obsidian .cm-line span.cm-hashtag.colored-tag-${tagName.toLowerCase().replace(/\//g, "\\/")}`
];
if (tagFlat) {
selectors.push(`.cm-s-obsidian .cm-line span.cm-tag-${tagFlat.toLowerCase()}.cm-hashtag`);
selectors.push(`.cm-s-obsidian .cm-line span.cm-tag-${tagFlat}.cm-hashtag`);
}
const lightThemeSelectors = selectors.map((selector) => "body " + selector);
const darkThemeSelectors = selectors.map((selector) => "body.theme-dark " + selector);
const linearGradientRotation = "108deg";
appendCSS(`
${lightThemeSelectors.join(", ")} {
background-color: ${backgroundLight};
color: ${colorLight};
background-image: linear-gradient(${linearGradientRotation}, ${linearGradientLight.join(", ")});
}
${darkThemeSelectors.join(", ")} {
background-color: ${backgroundDark};
color: ${colorDark};
background-image: linear-gradient(${linearGradientRotation}, ${linearGradientDark.join(", ")});
}
`);
}
findPaletteOffset(paletteConfig) {
function scoreOffset(value) {
const testingPalette = generateColorPalette({
...paletteConfig,
constantOffset: value
});
let prevColor = null;
return testingPalette.reduce((acc, col) => {
let score = 0;
if (prevColor) {
score = acc + new Color(col).contrast(prevColor, "weber");
}
prevColor = col;
return score;
}, 0);
}
let offset = 0;
let maxScore = 0;
for (let i = 0; i < 180; i++) {
const res = scoreOffset(i);
if (res >= maxScore) {
maxScore = res;
offset = i;
}
}
return offset;
}
generatePalettes() {
const commonPaletteConfig = {
paletteSize: this.settings.palette,
baseChroma: this.settings.chroma,
baseLightness: this.settings.lightness,
seed: this.settings.seed,
isShuffling: true
};
const offset = this.findPaletteOffset({
...commonPaletteConfig,
isDarkTheme: false,
seed: 0,
isShuffling: false
});
if (this.settings.palette.selected === "custom" /* CUSTOM */) {
const paletteString = this.settings.palette.custom;
const palette = paletteString.split("-").filter(Boolean).map((str) => `#${str}`);
if (palette) {
this.palettes = {
light: generateColorPalette({
light: processColorPalette({
isDarkTheme: false,
palette,
seed: this.settings.palette.seed
}),
dark: processColorPalette({
isDarkTheme: true,
palette,
seed: this.settings.palette.seed
})
};
return;
}
}
let baseChroma = 16;
let baseLightness = 87;
let offset = 35;
if (this.settings.palette.selected === "adaptive-bright" /* ADAPTIVE_BRIGHT */) {
baseChroma = 85;
baseLightness = 75;
}
const commonPaletteConfig = {
paletteSize: 8,
seed: this.settings.palette.seed,
isShuffling: true,
baseChroma,
baseLightness
};
this.palettes = {
light: generateAdaptiveColorPalette({
isDarkTheme: false,
...commonPaletteConfig,
constantOffset: offset
}),
dark: generateColorPalette({
dark: generateAdaptiveColorPalette({
isDarkTheme: true,
...commonPaletteConfig,
constantOffset: offset
@ -3331,6 +3527,21 @@ var ColoredTagsPlugin = class extends import_obsidian.Plugin {
loadedData.palette = 16;
loadedData._version = 2;
}
if (loadedData && loadedData._version < 3) {
needToSave = true;
delete loadedData.palette;
loadedData.palette = {
...DEFAULT_SETTINGS.palette,
seed: loadedData.seed
};
if (loadedData.chroma > 16 || loadedData.lightness > 87) {
loadedData.palette.selected = "adaptive-bright" /* ADAPTIVE_BRIGHT */;
}
delete loadedData.chroma;
delete loadedData.lightness;
delete loadedData.seed;
loadedData._version = 3;
}
this.settings = Object.assign({}, DEFAULT_SETTINGS, loadedData);
if (needToSave) {
await this.saveData(this.settings);
@ -3352,13 +3563,19 @@ function darkenColorForContrast(baseColor) {
const colorDark = new Color(baseColor).to("lch");
colorLight.c += 3;
colorDark.c += 20;
if (colorLight.c > 100) {
colorLight.c = 100;
}
if (colorDark.c > 100) {
colorDark.c = 100;
}
let result = "#fff";
for (let i = 0; i < 100; i++) {
if (colorLight.contrastAPCA(baseColor) >= 60 && colorLight.contrastWCAG21(baseColor) >= CONTRAST) {
if (baseColor.contrastAPCA(colorLight) <= -60 && colorLight.contrastWCAG21(baseColor) >= CONTRAST) {
result = colorLight.toString();
break;
}
if (colorDark.contrastAPCA(baseColor) <= -60 && colorDark.contrastWCAG21(baseColor) >= CONTRAST) {
if (baseColor.contrastAPCA(colorDark) >= 60 && colorDark.contrastWCAG21(baseColor) >= CONTRAST) {
result = colorDark.toString();
break;
}
@ -3368,7 +3585,7 @@ function darkenColorForContrast(baseColor) {
darkenMemoization.set(memoizationKey, result);
return result;
}
function generateColorPalette({ isDarkTheme, paletteSize, baseChroma, baseLightness, constantOffset, isShuffling, seed }) {
function generateAdaptiveColorPalette({ isDarkTheme, paletteSize, baseChroma, baseLightness, constantOffset, isShuffling, seed }) {
const hueIncrement = 360 / paletteSize;
const availableColors = [];
for (let i = 0; i < paletteSize; i++) {
@ -3376,8 +3593,8 @@ function generateColorPalette({ isDarkTheme, paletteSize, baseChroma, baseLightn
let chroma = baseChroma;
let lightness = baseLightness;
if (isDarkTheme) {
chroma = Math.round(baseChroma * 1.8);
lightness = Math.round(baseLightness / 2.5);
chroma = Math.min(Math.round(baseChroma * 1.8), 100);
lightness = Math.min(Math.round(baseLightness / 2.5), 100);
}
const lchColor = new Color("lch", [lightness, chroma, hue % 360]).toString();
availableColors.push(lchColor);
@ -3397,6 +3614,16 @@ function generateColorPalette({ isDarkTheme, paletteSize, baseChroma, baseLightn
result.splice(0, 0, ...cut);
return result;
}
function processColorPalette({ isDarkTheme, palette, seed }) {
const availableColors = [];
for (const item of palette) {
availableColors.push(new Color(item).to("lch").toString());
}
const result = availableColors;
const cut = result.splice(-seed, seed);
result.splice(0, 0, ...cut);
return result;
}
var appendingCSSBuffer = [];
function appendCSS(css) {
appendingCSSBuffer.push(css);
@ -3420,69 +3647,3 @@ function removeCSS() {
el.remove();
});
}
var ColoredTagsPluginSettingTab = class extends import_obsidian.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
}
renderPalette(paletteEl) {
paletteEl.empty();
let palette = this.plugin.palettes.light;
if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
palette = this.plugin.palettes.dark;
}
palette.forEach((paletteColor) => {
paletteEl.createEl("div", { attr: { style: `flex: 1; height: 20px; background-color: ${paletteColor}` } });
});
}
display() {
const { containerEl } = this;
containerEl.empty();
new import_obsidian.Setting(containerEl).setName("Palette size").setDesc("How many different colors are available.").addSlider(
(slider) => slider.setLimits(8, 32, 8).setValue(this.plugin.settings.palette).onChange(async (value) => {
slider.showTooltip();
this.plugin.settings.palette = value;
await this.plugin.saveSettings();
this.renderPalette(paletteEl);
})
);
const paletteEl = containerEl.createEl("div", {
cls: "palette",
attr: { style: `display: flex; align-items: stretch` }
});
this.renderPalette(paletteEl);
new import_obsidian.Setting(containerEl).setName("Palette shift").setDesc("If the colors of some tags don't fit, you can shift the palette.").addSlider(
(slider) => slider.setLimits(0, 10, 1).setValue(this.plugin.settings.seed).onChange(async (value) => {
slider.showTooltip();
this.plugin.settings.seed = value;
await this.plugin.saveSettings();
this.renderPalette(paletteEl);
})
);
new import_obsidian.Setting(containerEl).setName("Saturation").addDropdown(
(dropdown) => dropdown.addOption(String(DEFAULT_SETTINGS.chroma), "Default").addOptions({
"5": "Faded",
"32": "Moderate",
"64": "Vivid",
"128": "Excessive"
}).setValue(String(this.plugin.settings.chroma)).onChange(async (value) => {
this.plugin.settings.chroma = Number(value);
await this.plugin.saveSettings();
this.renderPalette(paletteEl);
})
);
new import_obsidian.Setting(containerEl).setName("Lightness").addDropdown(
(dropdown) => dropdown.addOption(String(DEFAULT_SETTINGS.lightness), "Default").addOptions({
"0": "Dark",
"32": "Medium Dark",
"64": "Medium",
"90": "Light",
"100": "Bleach"
}).setValue(String(this.plugin.settings.lightness)).onChange(async (value) => {
this.plugin.settings.lightness = Number(value);
await this.plugin.saveSettings();
this.renderPalette(paletteEl);
})
);
}
};

View File

@ -1,9 +1,9 @@
{
"id": "colored-tags",
"name": "Colored Tags",
"version": "3.0.1",
"version": "5.0.0",
"minAppVersion": "0.15.0",
"description": "Colorizes tags in different colors. Colors of nested tags are mixed with parent tags. Text color contrast is automatically matched to comply with AA level of WCAG 2.1.",
"description": "Colorizes tags in different colors. Colors of nested tags are mixed with the root tag to improve readability. Text color contrast is automatically matched to comply with AA level of WCAG 2.1.",
"author": "Pavel Frankov",
"authorUrl": "https://github.com/pfrankov",
"isDesktopOnly": false

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
{
"id": "dataview",
"name": "Dataview",
"version": "0.5.64",
"minAppVersion": "0.13.11",
"description": "Complex data views for the data-obsessed.",
"author": "Michael Brenan <blacksmithgu@gmail.com>",
"authorUrl": "https://github.com/blacksmithgu",
"isDesktopOnly": false
}

View File

@ -0,0 +1,146 @@
/** Live Preview padding fixes, specifically for DataviewJS custom HTML elements. */
.is-live-preview .block-language-dataviewjs > p, .is-live-preview .block-language-dataviewjs > span {
line-height: 1.0;
}
.block-language-dataview {
overflow-y: auto;
}
/*****************/
/** Table Views **/
/*****************/
/* List View Default Styling; rendered internally as a table. */
.table-view-table {
width: 100%;
}
.table-view-table > thead > tr, .table-view-table > tbody > tr {
margin-top: 1em;
margin-bottom: 1em;
text-align: left;
}
.table-view-table > tbody > tr:hover {
background-color: var(--table-row-background-hover);
}
.table-view-table > thead > tr > th {
font-weight: 700;
font-size: larger;
border-top: none;
border-left: none;
border-right: none;
border-bottom: solid;
max-width: 100%;
}
.table-view-table > tbody > tr > td {
text-align: left;
border: none;
font-weight: 400;
max-width: 100%;
}
.table-view-table ul, .table-view-table ol {
margin-block-start: 0.2em !important;
margin-block-end: 0.2em !important;
}
/** Rendered value styling for any view. */
.dataview-result-list-root-ul {
padding: 0em !important;
margin: 0em !important;
}
.dataview-result-list-ul {
margin-block-start: 0.2em !important;
margin-block-end: 0.2em !important;
}
/** Generic grouping styling. */
.dataview.result-group {
padding-left: 8px;
}
/*******************/
/** Inline Fields **/
/*******************/
.dataview.inline-field-key {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-primary-alt);
color: var(--text-nav-selected);
}
.dataview.inline-field-value {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-secondary-alt);
color: var(--text-nav-selected);
}
.dataview.inline-field-standalone-value {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-secondary-alt);
color: var(--text-nav-selected);
}
/***************/
/** Task View **/
/***************/
.dataview.task-list-item, .dataview.task-list-basic-item {
margin-top: 3px;
margin-bottom: 3px;
transition: 0.4s;
}
.dataview.task-list-item:hover, .dataview.task-list-basic-item:hover {
background-color: var(--text-selection);
box-shadow: -40px 0 0 var(--text-selection);
cursor: pointer;
}
/*****************/
/** Error Views **/
/*****************/
div.dataview-error-box {
width: 100%;
min-height: 150px;
display: flex;
align-items: center;
justify-content: center;
border: 4px dashed var(--background-secondary);
}
.dataview-error-message {
color: var(--text-muted);
text-align: center;
}
/*************************/
/** Additional Metadata **/
/*************************/
.dataview.small-text {
font-size: smaller;
color: var(--text-muted);
margin-left: 3px;
}
.dataview.small-text::before {
content: "(";
}
.dataview.small-text::after {
content: ")";
}

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
{
"id": "html-server",
"name": "Html Server",
"version": "1.0.7",
"version": "1.0.8",
"minAppVersion": "0.15.0",
"description": "This plugin lets you spin up a local http server to access your vault via a web browser from any device in your network.",
"author": "Pr0dt0s",

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
{
"id": "keyboard-analyzer",
"name": "Keyboard Analyzer",
"version": "0.1.3",
"minAppVersion": "0.12.10",
"description": "See and analyse your keyboard hotkeys and shortcuts",
"author": "cogscides",
"authorUrl": "https://github.com/cogscides",
"isDesktopOnly": false
}

View File

@ -0,0 +1,725 @@
/* Sets all the text color to red! */
/* #KB-view {
display: flex;
justify-content: center;
align-items: flex-start;
} */
.status-bar-item.plugin-keyboard-analyzer span.icon {
display: flex;
align-items: center;
line-height: 1;
}
.status-bar-item.plugin-keyboard-analyzer {
display: flex;
align-items: center;
line-height: 1;
}
/* // Extra Small devices (landscape phones, 576px and up) */
#keyboard-component.xs {
/* background-color: #f5f5f5; */
}
/* // Small devices (landscape phones, 576px and up) */
#keyboard-component.sm {
/* background-color: aqua; */
}
/* // Medium devices (tablets, 768px and up) */
#keyboard-component.md {
/* background-color: blueviolet; */
}
/* // Large devices (desktops, 992px and up) */
#keyboard-component.lg {
/* background-color: chartreuse; */
}
/* // X-Large devices (large desktops, 1200px and up) */
#keyboard-component.xl {
/* background-color: darkcyan; */
}
/* // XX-Large devices (larger desktops, 1400px and up) */
#keyboard-component.xxl {
/* background-color: darkgoldenrod; */
}
#keyboard-component {
height: 100%;
}
.keyboard-wrapper {
max-width: 700px;
}
#KB-view {
padding: 0px !important;
overflow-y: scroll;
}
/* #keyboard-component .hotkey-setting-container {
display: flex;
overflow: unset;
flex-direction: column;
padding-bottom: 60px;
height: fit-content;
} */
#keyboard-component .hotkey-settings-container {
height: fit-content;
width: 100%;
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
padding-bottom: 10px;
overflow: visible;
position: relative;
}
#keyboard-component .setting-item-name {
display: flex;
align-items: center;
flex-wrap: wrap;
}
#keyboard-component .setting-item-name .command-name {
padding-right: 8px;
}
#keyboard-component .setting-item-name span.suggestion-prefix {
color: var(--text-accent);
font-size: 90%;
font-style: italic;
text-transform: uppercase;
padding-right: 6px;
}
#keyboard-component .setting-item-name span.suggestion-prefix:hover {
cursor: pointer;
}
#keyboard-component .setting-item .star-icon {
display: none;
}
#keyboard-component .setting-item:hover .star-icon {
cursor: pointer;
display: flex;
align-items: center;
}
#keyboard-component .setting-item .star-icon:hover {
color: var(--text-accent);
}
#keyboard-component .setting-item.is-starred .star-icon {
color: var(--text-accent);
display: flex;
}
.shortcuts-wrapper {
max-width: 768px;
padding-left: 24px;
padding-right: 24px;
margin: 0px auto;
}
/* .hotkey-search-menu {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
flex-direction: row;
} */
#keyboard-component .hotkey-search-container {
display: block;
padding: 0px;
margin-top: 0px;
margin-bottom: 0px;
position: relative;
flex-grow: 2;
}
/* #keyboard-component.xs .hotkey-search-container { */
/* max-width: unset;
flex-grow: 2;
flex-basis: 100%; */
/* } */
.search-wrapper {
width: 100%;
display: flex;
flex-wrap: wrap;
/* background: var(--background-modifier-form-field); */
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
color: var(--text-normal);
border-radius: 4px;
padding: 8px 14px;
margin-bottom: 12px;
margin-top: 20px;
}
.search-wrapper.is-focused {
/* background: var(--color-d-blacker); */
border: 1px solid var(--interactive-accent);
box-shadow: 0px 0px 0px 3px var(--color-d-gray-60);
}
.meta-search-wrapper {
transform: translate(-50%, -50%);
top: 50%;
right: 8px;
position: absolute;
}
.modifiers-wrapper {
display: flex;
width: fit-content;
flex-direction: row;
flex-wrap: wrap;
flex-shrink: 1;
align-items: center;
}
kbd.modifier {
padding: 2px 6px;
margin-right: 4px;
border: 1px solid var(--indentation-guide);
background-color: var(--background-secondary-alt);
cursor: pointer;
transition: background-color 0.5s ease;
}
kbd.modifier:hover {
background-color: var(--interactive-accent-hover);
}
.modifiers-wrapper kbd.modifier:last-child {
margin-right: 12px;
}
#keyboard-component .hotkey-search-container input {
height: 40px;
width: 100%;
font-size: 16px;
padding: unset;
margin-top: 0px;
margin-bottom: 0px;
/* padding-bottom: 2px; */
padding-right: 48px;
border: none !important;
border-radius: unset;
background: unset;
color: var(--text-normal);
box-shadow: unset;
}
#keyboard-component .hotkey-search-container div.icon {
display: flex;
align-content: center;
justify-content: center;
}
.keyboard-icon {
cursor: pointer;
color: var(--text-faint);
opacity: var(--icon-muted);
border-radius: 50%;
right: 9px;
top: 50%;
transform: translate(-50%, -50%);
box-shadow: 0px 0px 1px 1px #c415151a;
position: absolute;
}
.keyboard-icon:hover {
border-color: var(--interactive-accent);
opacity: 1;
}
.keyboard-icon:pressed {
border-color: var(--interactive-accent);
opacity: 1;
}
.keyboard-icon.pulse {
color: var(--text-error);
}
/* .meta-search-indicator .inner-circle {
position: absolute;
transform: translate(-50%, -50%);
top: 50%;
left: 50%;
background: var(--interactive-accent);
width: 7px;
border-radius: 50%;
height: 7px;
} */
.pulse {
animation: pulse-animation 1s infinite;
}
@keyframes pulse-animation {
0% {
box-shadow: 0 0 0 0px rgba(10, 228, 112, 0.5);
}
100% {
box-shadow: 0 0 0 10px rgba(183, 38, 38, 0);
}
}
#keyboard-component .hotkey-search-container .search-input-clear-button {
position: absolute;
right: 0px;
top: -50% !important;
transform: translate(-50%, -50%);
top: 18px;
color: var(--text-faint);
cursor: var(--cursor);
background-color: transparent;
}
.clear-icon {
color: var(--text-faint);
cursor: var(--cursor);
top: 50%;
position: absolute;
transform: translate(-50%, -50%);
}
.clear-icon:hover {
color: var(--text-error);
}
/* #keyboard-component .hotkey-search-container .search-input-clear-button:hover {
color: var(--text-error);
} */
/* #keyboard-component .hotkey-search-container .search-input-clear-button:before {
position: absolute;
transform: translate(-50%, -50%);
font-size: 22px;
content: '\D7';
} */
#hotkey-filter-button {
width: fit-content;
margin-top: 0px;
margin-right: 8px;
margin-bottom: 0px;
height: 32px;
}
#hotkey-filter-button:hover {
cursor: pointer;
}
#hotkey-filter-button.is-active {
color: var(--text-primary);
background-color: var(--interactive-accent);
}
.hotkey-search-container button {
/* height: 40px; */
height: fit-content;
width: fit-content;
flex-shrink: 0;
}
.popup-filter-menu-container:not(.is-open) {
display: none;
}
.popup-filter-menu-container {
position: absolute;
background-color: var(--background-primary-alt);
top: 128px;
outline: 2px solid var(--background-modifier-form-field-highlighted);
width: fit-content;
z-index: 150000;
border-radius: 6px;
border: 1px solid var(--background-modifier-border);
padding-left: 24px;
padding-top: 24px;
padding-right: 32px;
padding-bottom: 16px;
box-shadow: 0px 45px 18px rgba(5, 5, 5, 0.01),
0px 25px 15px rgba(5, 5, 5, 0.03), 0px 11px 11px rgba(5, 5, 5, 0.04),
0px 3px 6px rgba(5, 5, 5, 0.05), 0px 0px 0px rgba(5, 5, 5, 0.05);
}
/* .is-mobile .popup-filter-menu-container { */
/* left: 20px;
width: calc(100% - 40px); */
/* } */
/* .is-mobile .popup-filter-menu-background {
position: relative;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
background-color: var(--background-primary-alt);
opacity: 0.5;
z-index: -1;
} */
#keyboard-component .community-plugin-search-summary.u-muted {
padding-left: 0px;
padding-right: 0px;
/* width: 100%; */
flex-grow: 1;
padding-bottom: 0px;
border-bottom: none;
flex-shrink: 2;
}
#keyboard-component .community-plugin-search-summary.u-muted span {
text-align: center;
}
button#hotkey-refresh-button {
background-color: transparent;
border: none;
margin-right: unset;
width: fit-content;
box-shadow: none;
flex-grow: 0;
flex-shrink: 0;
padding: 4px;
}
button#hotkey-refresh-button.animation-is-active .lucide-refresh-cw {
animation-name: rotation;
animation-duration: 0.8s;
/* ease-in animation timing */
animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275);
animation-fill-mode: both;
}
button#hotkey-refresh-button:hover {
cursor: pointer;
color: var(--text-accent);
}
@keyframes rotation {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.search-results {
color: var(--text-muted);
display: flex;
align-items: center;
padding-bottom: 20px;
padding-top: 8px;
border-bottom: none;
}
#keyboard-component .hotkey-list-container {
user-select: text;
padding: 0px 0px 64px 0px;
width: 100%;
overflow: unset;
}
/* .KB-view > .setting-item {
display: flex;
align-items: center;
padding: 12px 0 12px 0;
border-top: 1px solid var(--background-modifier-border);
} */
/* -------------------------------------------------------------- */
/* SETTING ITEMS */
/* -------------------------------------------------------------- */
#keyboard-component .hotkey-list-container .setting-item {
background-color: var(--background-primary);
padding-left: 6px;
transition: background-color 0.2s ease-in-out;
}
#keyboard-component .hotkey-list-container .setting-item.is-starred {
/* background-color: var(--background-secondary, --color-d-gray-60); */
border-left: 3px solid var(--interactive-accent);
padding-left: 12px;
}
/* #keyboard-component .hotkey-list-container .setting-item:hover {
background-color: var(--background-secondary, --color-d-gray-60);
} */
#keyboard-component.is-mobile .setting-item {
flex-direction: column;
align-items: flex-start;
}
#keyboard-component .setting-item-info small {
color: var(--text-muted);
font-size: small;
}
#keyboard-component .hotkey-list-container .setting-item:first-child {
padding-top: 18px;
border-top: 1px solid var(--background-modifier-border);
}
#keyboard-component .hotkey-list-container .setting-item:last-child {
padding-bottom: 18px;
border-bottom: 1px solid var(--background-modifier-border);
}
#keyboard-component.is-mobile .popup-filter-menu-container .setting-item {
flex-direction: row;
}
.kbanalizer-setting-item {
display: flex;
align-items: center;
border-top: 1px solid var(--background-modifier-border);
padding: 18px 0px 18px 0px;
}
.kbanalizer-setting-item-control {
flex: 1 0 auto !important;
flex-shrink: 0 !important;
}
.KB-view > .setting-command-hotkeys {
flex-shrink: 0 !important;
flex: 1 0 auto !important;
}
.kbanalizer-setting-hotkey {
min-height: 24px !important;
position: relative;
font-size: 14px;
background-color: var(--background-secondary-alt);
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
padding: 4px 10px;
min-height: 24px;
align-self: flex-end;
position: relative;
transition: background-color, color 0.5s ease;
}
.kbanalizer-setting-hotkey.is-customized {
/* background-color: var(--background-secondary-alt); */
/* color: var(--text-accent); */
border: 1px solid var(--interactive-accent);
}
.kbanalizer-setting-hotkey.is-duplicate {
cursor: pointer;
color: var(--text-normal);
background-color: var(--background-modifier-error);
}
.kb-analizer-hotkey-list-container {
padding-right: 0px !important;
}
/* ----------- */
/* ------- */
/* -------Keyboard Layout */
/* ------- */
/* ----------- */
.svelte-keyboard {
width: 100%;
height: 100%;
/* transform: scale(0.5); */
}
/* :global(.svelte-keyboard:nth-last-child(1)) {
display: none;
} */
.svelte-keyboard button.key-- {
background: transparent !important;
background-color: transparent;
user-select: none;
background-color: unset !important;
color: unset !important;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.svelte-keyboard button.key--.active {
background: transparent;
}
.svelte-keyboard button.key {
padding: 4px 16px;
border-radius: 4px;
box-sizing: border-box;
font-size: 12px;
text-align: center;
color: var(--text-normal);
margin: 0px 2px;
background-color: var(--background-secondary-alt);
}
.svelte-keyboard button.key:hover {
background-color: var(--interactive-accent);
}
.svelte-keyboard button.key:active {
background-color: red;
}
#keyboard {
width: 100%;
}
/* -------------------------------------------------------------- */
/* KEYBOARD LAYOUT */
/* -------------------------------------------------------------- */
#keyboard-preview-view {
display: flex;
justify-content: center;
}
/* grid-template-columns: 3.75fr 0.75fr 1fr; */
#keyboard-layout {
display: grid;
position: relative;
grid-template-rows: 1fr;
gap: 0px 10px;
grid-template-areas: 'main other num';
background-color: var(--background-modifier-border);
border-radius: 0px 0px 12px 12px;
border: 1px solid var(--indentation-guide);
min-width: 720px;
height: 280px;
/* margin-top: 16px; */
padding: 24px;
}
.sm #keyboard-layout,
.xs #keyboard-layout {
min-width: 100%;
border-radius: 0px;
margin-top: 0px;
}
#keyboard-layout .main {
display: grid;
grid-template-columns: repeat(60, 1fr);
grid-template-rows: 0.75fr 1fr 1fr 1fr 1fr 1fr;
gap: 2px 2px;
grid-template-areas:
'. . . . . . . . . . . . . .'
'. . . . . . . . . . . . . .'
'. . . . . . . . . . . . . .'
'. . . . . . . . . . . . . .'
'. . . . . . . . . . . . . .'
'. . . . . . . . . . . . . .';
grid-area: main;
height: auto;
}
#keyboard-layout .other {
display: grid;
grid-template-columns: repeat(12, 1fr);
grid-template-rows: 0.75fr 1fr 1fr 1fr 1fr 1fr;
gap: 2px 2px;
grid-template-areas:
'. . .'
'. . .'
'. . .'
'. . .'
'. . .'
'. . .';
grid-area: other;
}
#keyboard-layout .num {
display: grid;
grid-template-columns: repeat(16, 1fr);
grid-template-rows: 0.75fr 1fr 1fr 1fr 1fr 1fr;
gap: 2px 2px;
grid-template-areas:
'. . . .'
'. . . .'
'. . . .'
'. . . .'
'. . . .'
'. . . .';
grid-area: num;
}
:root {
--font-scale-0: 12px;
--font-scale-0-5: 14px;
--font-scale-1: 16px;
--font-scale-2: 18px;
--font-scale-3: 20px;
}
.kb-layout-key {
border: 1px solid var(--indentation-guide);
font-size: var(--font-scale-0);
line-height: initial;
display: flex;
justify-content: center;
align-items: center;
white-space: nowrap;
border-radius: 4px;
color: var(--text-normal);
background-color: var(--background-primary);
}
.kb-layout-key.small-text {
font-size: 10px;
}
/* key heatmap by weight */
.kb-layout-key[data-weight='1'] {
background-color: #f0bca469;
}
.kb-layout-key[data-weight='2'] {
background-color: #e694846f;
}
.kb-layout-key[data-weight='3'] {
background-color: #d96f6f84;
}
.kb-layout-key[data-weight='4'] {
background-color: #c94f4f81;
}
.kb-layout-key[data-weight='5'] {
background-color: #b932328e;
}
.kb-layout-key.is-active {
color: var(--text-on-accent);
background-color: var(--interactive-accent);
}
.kb-layout-key.is-active:hover {
color: var(--text-on-accent);
background-color: var(--interactive-accent-hover);
}
.kb-layout-key:hover {
background-color: var(--background-primary-alt);
}
.kb-layout-key.empty {
border: none;
background-color: transparent;
}

View File

@ -0,0 +1,91 @@
{
"recentFiles": [
{
"basename": "2024-01-11",
"path": "2024-01-11.md"
},
{
"basename": "Godot GDScript Trick",
"path": "Godot GDScript Trick.md"
},
{
"basename": "World Tree Target",
"path": "World Tree Target.md"
},
{
"basename": "Life 2024 Blockboard",
"path": "Life 2024 Blockboard.md"
},
{
"basename": "2024-01-10",
"path": "2024-01-10.md"
},
{
"basename": "Watching List",
"path": "Watching List.md"
},
{
"basename": "00_2024 Year Life Targets",
"path": "00_2024 Year Life Targets.md"
},
{
"basename": "Lunarvim",
"path": "Lunarvim.md"
},
{
"basename": "吉他学习目标",
"path": "吉他学习目标.md"
},
{
"basename": "书籍阅读目标",
"path": "书籍阅读目标.md"
},
{
"basename": "访谈目标",
"path": "访谈目标.md"
},
{
"basename": "运动目标",
"path": "运动目标.md"
},
{
"basename": "新项目立项",
"path": "新项目立项.md"
},
{
"basename": "社交目标",
"path": "社交目标.md"
},
{
"basename": "TimeManager目标",
"path": "TimeManager目标.md"
},
{
"basename": "做菜目标",
"path": "做菜目标.md"
},
{
"basename": "世界树物语开发工作流",
"path": "世界树物语开发工作流.md"
},
{
"basename": "世界树存档结构分析",
"path": "世界树存档结构分析.md"
},
{
"basename": "游泳目标",
"path": "游泳目标.md"
},
{
"basename": "旅游目标",
"path": "旅游目标.md"
},
{
"basename": "累了后恢复精力的办法",
"path": "累了后恢复精力的办法.md"
}
],
"omittedPaths": [],
"maxLength": null,
"openType": "tab"
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,16 @@
{
"id": "recent-files-obsidian",
"name": "Recent Files",
"version": "1.3.9",
"minAppVersion": "0.16.3",
"description": "List files by most recently opened",
"author": "Tony Grosinger",
"authorUrl": "https://grosinger.net",
"isDesktopOnly": false,
"fundingUrl": {
"Github Sponsor": "https://github.com/sponsors/tgrosinger",
"Buy me a Coffee": "https://buymeacoffee.com/tgrosinger",
"Paypal": "https://paypal.me/tgrosinger"
},
"donation": "https://buymeacoffee.com/tgrosinger"
}

View File

@ -0,0 +1,31 @@
.recent-files-title {
justify-content: space-between;
align-items: unset;
}
.recent-files-title-content {
flex-grow: 1;
}
.recent-files-file-delete {
display: none;
}
.recent-files-title:hover .recent-files-file-delete {
display: flex;
cursor: pointer;
}
.recent-files-file-delete:hover {
color: var(--nav-item-color-hover);
}
.recent-files-donation {
width: 70%;
margin: 0 auto;
text-align: center;
}
.recent-files-donate-button {
margin: 10px;
}

View File

@ -0,0 +1,510 @@
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
var __export = (target, all) => {
__markAsModule(target);
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __reExport = (target, module2, desc) => {
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
for (let key of __getOwnPropNames(module2))
if (!__hasOwnProp.call(target, key) && key !== "default")
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
}
return target;
};
var __toModule = (module2) => {
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
};
var __publicField = (obj, key, value) => {
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
return value;
};
// src/main.ts
__export(exports, {
default: () => SettingsSearch
});
var import_obsidian = __toModule(require("obsidian"));
// node_modules/monkey-around/mjs/index.js
function around(obj, factories) {
const removers = Object.keys(factories).map((key) => around1(obj, key, factories[key]));
return removers.length === 1 ? removers[0] : function() {
removers.forEach((r) => r());
};
}
function around1(obj, method, createWrapper) {
const original = obj[method], hadOwn = obj.hasOwnProperty(method);
let current = createWrapper(original);
if (original)
Object.setPrototypeOf(current, original);
Object.setPrototypeOf(wrapper, current);
obj[method] = wrapper;
return remove;
function wrapper(...args) {
if (current === original && obj[method] === wrapper)
remove();
return current.apply(this, args);
}
function remove() {
if (obj[method] === wrapper) {
if (hadOwn)
obj[method] = original;
else
delete obj[method];
}
if (current === original)
return;
current = original;
Object.setPrototypeOf(wrapper, original || Function);
}
}
// src/main.ts
var SettingsSearch = class extends import_obsidian.Plugin {
constructor() {
super(...arguments);
__publicField(this, "settingsSearchEl", createDiv("settings-search-container vertical-tab-header-group"));
__publicField(this, "settingsResultsContainerEl", createDiv("settings-search-results-container vertical-tab-content"));
__publicField(this, "settingsNavItemContainer", this.settingsSearchEl.createDiv("vertical-tab-header-group-items").createDiv("vertical-tab-nav-item settings-search-input"));
__publicField(this, "settingsResultsEl");
__publicField(this, "search");
__publicField(this, "locale");
__publicField(this, "resources", []);
__publicField(this, "results", []);
__publicField(this, "loaded", false);
__publicField(this, "tabIndex", 0);
__publicField(this, "pluginTabIndex", 0);
__publicField(this, "seen", []);
__publicField(this, "settingCache", new Map());
__publicField(this, "searchAppended", false);
__publicField(this, "activeIndex", -1);
__publicField(this, "activeSetting");
__publicField(this, "scope", new import_obsidian.Scope(this.app.scope));
__publicField(this, "mobileContainers", []);
}
async onload() {
(window["SettingsSearch"] = {
addResources: this.addResources.bind(this),
removeResources: this.removeResources.bind(this),
removeTabResources: this.removeTabResources.bind(this)
}) && this.register(() => delete window["SettingsSearch"]);
this.app.workspace.onLayoutReady(async () => {
this.settingsResultsContainerEl.createEl("h3", {
text: "Settings Search Results"
});
this.settingsResultsEl = this.settingsResultsContainerEl.createDiv("settings-search-results");
this.buildScope();
this.buildSearch();
this.buildResources();
this.buildPluginResources();
this.patchSettings();
this.loaded = true;
this.app.workspace.trigger("settings-search-loaded");
});
}
buildResources() {
const tab = this.app.setting.settingTabs[this.tabIndex];
if (tab && tab.id !== void 0 && !this.seen.includes(tab.id)) {
this.getTabResources(tab);
this.tabIndex++;
setTimeout(() => this.buildResources());
}
}
buildPluginResources() {
const tab = this.app.setting.pluginTabs[this.pluginTabIndex];
if (tab) {
this.getTabResources(tab);
this.pluginTabIndex++;
setTimeout(() => this.buildPluginResources());
}
}
get manifests() {
return Object.values(this.app.plugins.manifests);
}
addResourceToCache(resource) {
if (!resource || !resource.text || !resource.name || !resource.tab) {
return new Error("A valid resource must be provided.");
}
let name;
if (resource.external) {
name = createFragment((el) => {
(0, import_obsidian.setIcon)(el.createSpan({
attr: {
"aria-label": "This setting was added by another plugin."
}
}), "info");
el.createSpan({ text: resource.text });
});
} else {
name = resource.text;
}
const setting = new import_obsidian.Setting(createDiv()).setName(name).setDesc(createFragment((e) => e.createDiv().innerHTML = resource.desc ?? ""));
if (resource.external) {
setting.settingEl.addClass("set-externally");
}
if (resource.tab == "community-plugins") {
let plugin = this.manifests.find((p) => p.name == resource.text);
if (plugin && this.app.plugins.getPlugin(plugin.id)?._loaded && this.app.setting.pluginTabs.find((t) => t.id == plugin.id)) {
setting.addExtraButton((b) => {
b.setTooltip(`Open ${resource.text} Settings`).onClick(() => {
this.app.setting.openTabById(plugin.id);
});
});
}
}
if (resource.tab == "plugins") {
const plugins = Object.values(this.app.internalPlugins.plugins);
const plugin = plugins.find((p) => p._loaded && p.instance.name == resource.text);
if (plugin && this.app.setting.pluginTabs.find((t) => t.id == plugin.instance.id)) {
setting.addExtraButton((b) => {
b.setTooltip(`Open ${resource.text} Settings`).onClick(() => {
this.app.setting.openTabById(plugin.instance.id);
});
});
}
}
setting.addExtraButton((b) => {
b.setIcon("forward-arrow").onClick(() => {
this.showResult(resource);
});
});
this.settingCache.set(resource, setting);
}
getResourceFromCache(resource) {
if (!this.settingCache.has(resource)) {
this.addResourceToCache(resource);
}
return this.settingCache.get(resource);
}
removeResourcesFromCache(resources) {
for (const resource of resources) {
this.settingCache.delete(resource);
}
}
addResources(...resources) {
for (const resource of resources) {
resource.external = true;
if (this.resources.find((k) => this.equivalent(resource, k)))
continue;
this.resources.push(resource);
this.addResourceToCache(resource);
}
return () => this.removeResources(...resources);
}
equivalent(resource1, resource2) {
return resource1.name == resource2.name && resource1.tab == resource2.tab && resource1.text == resource2.text && resource1.desc == resource2.desc && resource1.external == resource2.external;
}
removeResources(...resources) {
const removing = [];
const keys = [...this.settingCache.keys()];
for (const resource of resources) {
if (!resource || !resource.text || !resource.name || !resource.tab) {
continue;
}
resource.external = true;
this.resources = this.resources.filter((r) => !this.equivalent(resource, r));
removing.push(...keys.filter((k) => k == resource || this.equivalent(resource, k)));
}
this.removeResourcesFromCache(removing);
}
removeTabResources(tab) {
const removing = this.resources.filter((t) => t.tab == tab);
this.resources = this.resources.filter((t) => t.tab != tab);
this.removeResourcesFromCache(removing);
}
async getTabResources(tab) {
await tab.display();
const settings = tab.containerEl.querySelectorAll(".setting-item:not(.setting-item-header)");
for (const el of Array.from(settings)) {
const text = el.querySelector(".setting-item-name")?.textContent;
if (!text)
continue;
const desc = el.querySelector(".setting-item-description")?.innerHTML ?? "";
const resource = {
tab: tab.id,
name: tab.name,
text,
desc
};
this.resources.push(resource);
this.addResourceToCache(resource);
}
if (this.app.setting.activeTab?.id == tab.id)
return;
this.seen.push(tab.id);
tab.containerEl.detach();
tab.hide();
}
patchSettings() {
const self = this;
this.register(around(this.app.setting, {
onOpen: function(next) {
return function() {
next.apply(this);
if (!import_obsidian.Platform.isMobile)
self.search.inputEl.focus();
return next;
};
}
}));
this.register(around(this.app.setting, {
addSettingTab: function(next) {
return function(tab) {
if (tab && tab.id !== void 0 && !self.seen.includes(tab.id)) {
self.getTabResources(tab);
}
return next.call(this, tab);
};
}
}));
this.register(around(this.app.setting, {
removeSettingTab: function(next) {
return function(tab) {
if (this.isPluginSettingTab(tab)) {
self.removeTabResources(tab.id);
}
return next.call(this, tab);
};
}
}));
this.register(around(this.app.setting, {
openTab: function(next) {
return function(tab) {
self.searchAppended = false;
self.app.keymap.popScope(self.scope);
return next.call(this, tab);
};
},
openTabById: function(next) {
return function(tab) {
self.searchAppended = false;
self.app.keymap.popScope(self.scope);
return next.call(this, tab);
};
},
onClose: function(next) {
return function() {
if (import_obsidian.Platform.isMobile) {
self.detach();
}
return next.call(this);
};
}
}));
}
buildSearch() {
const tempSetting = new import_obsidian.Setting(createDiv()).addSearch((s) => {
this.search = s;
});
this.settingsNavItemContainer.append(tempSetting.controlEl);
tempSetting.settingEl.detach();
this.search.onChange((v) => {
this.onChange(v);
});
this.search.setPlaceholder("Search settings...");
this.app.setting.tabHeadersEl.prepend(this.settingsSearchEl);
}
buildScope() {
this.scope.register(["Ctrl"], "N", () => {
if (this.activeSetting) {
this.activeSetting.settingEl.removeClass("active");
}
this.activeIndex = ((this.activeIndex + 1) % this.results.length + this.results.length) % this.results.length;
this.centerActiveSetting();
});
this.scope.register([], "ArrowDown", () => {
if (this.activeSetting) {
this.activeSetting.settingEl.removeClass("active");
}
this.activeIndex = ((this.activeIndex + 1) % this.results.length + this.results.length) % this.results.length;
this.centerActiveSetting();
});
this.scope.register(["Ctrl"], "P", () => {
if (this.activeSetting) {
this.activeSetting.settingEl.removeClass("active");
}
this.activeIndex = ((this.activeIndex - 1) % this.results.length + this.results.length) % this.results.length;
this.centerActiveSetting();
});
this.scope.register([], "ArrowUp", () => {
if (this.activeSetting) {
this.activeSetting.settingEl.removeClass("active");
}
this.activeIndex = ((this.activeIndex - 1) % this.results.length + this.results.length) % this.results.length;
this.centerActiveSetting();
});
this.scope.register([], "Enter", () => {
if (this.activeSetting) {
this.showResult(this.results[this.activeIndex]);
}
});
}
centerActiveSetting() {
const result = this.results[this.activeIndex];
this.activeSetting = this.getResourceFromCache(result);
this.activeSetting.settingEl.addClass("active");
this.activeSetting.settingEl.scrollIntoView({
behavior: "auto",
block: "nearest"
});
}
detachFromMobile() {
if (import_obsidian.Platform.isMobile) {
this.settingsResultsContainerEl.detach();
for (const header of this.mobileContainers) {
this.app.setting.tabHeadersEl.append(header);
}
this.search.setValue("");
}
}
detachFromDesktop() {
if (import_obsidian.Platform.isDesktop) {
this.app.setting.openTabById(this.app.setting.lastTabId);
}
}
detach() {
this.detachFromDesktop();
this.detachFromMobile();
this.searchAppended = false;
}
onChange(v) {
if (!v) {
this.detach();
this.app.keymap.popScope(this.scope);
return;
}
if (!this.searchAppended) {
this.activeIndex = -1;
this.app.keymap.popScope(this.scope);
this.app.keymap.pushScope(this.scope);
if (this.activeSetting) {
this.activeSetting.settingEl.removeClass("active");
this.activeSetting = null;
}
if (!import_obsidian.Platform.isMobile) {
this.app.setting.activeTab.navEl.removeClass("is-active");
this.app.setting.tabContentContainer.empty();
this.app.setting.tabContentContainer.append(this.settingsResultsContainerEl);
} else {
const headers = this.app.setting.tabHeadersEl.querySelectorAll(".vertical-tab-header-group:not(.settings-search-container)");
for (const header of Array.from(headers)) {
this.mobileContainers.push(header);
header.detach();
}
this.app.setting.tabHeadersEl.append(this.settingsResultsContainerEl);
}
this.searchAppended = true;
}
this.appendResults(this.performFuzzySearch(v));
}
getMatchText(text, result) {
const matchElements = {};
return createFragment((content) => {
for (let i = 0; i < text.length; i++) {
let match = result.matches.find((m) => m[0] === i);
if (match) {
const index = result.matches.indexOf(match);
if (!matchElements[index]) {
matchElements[index] = createSpan("suggestion-highlight");
}
let element = matchElements[index];
content.appendChild(element);
element.appendText(text.substring(match[0], match[1]));
i += match[1] - match[0] - 1;
continue;
}
content.appendText(text[i]);
}
});
}
appendResults(results) {
this.settingsResultsEl.empty();
if (results.length) {
const headers = {};
for (const resource of results) {
if (!(resource.tab in headers)) {
headers[resource.tab] = this.settingsResultsEl.createDiv();
new import_obsidian.Setting(headers[resource.tab]).setHeading().setName(resource.name);
}
const setting = this.getResourceFromCache(resource);
headers[resource.tab].append(setting.settingEl);
}
} else {
this.settingsResultsEl.setText("No results found :(");
}
}
showResult(result) {
this.search.setValue("");
const tab = this.app.setting.settingTabs.find((t) => t.id == result.tab) ?? this.app.setting.pluginTabs.find((t) => t.id == result.tab);
if (!tab) {
new import_obsidian.Notice("There was an issue opening the setting tab.");
return;
}
this.app.setting.openTabById(tab.id);
this.app.keymap.popScope(this.scope);
this.detach();
try {
const names = tab.containerEl.querySelectorAll(".setting-item-name");
const el = Array.from(names).find((n) => n.textContent == result.text);
if (!el)
return;
const setting = el.closest(".setting-item");
if (!setting)
return;
if (tab.id == "obsidian-style-settings") {
let collapsed = setting.closest(".style-settings-container");
let previous = collapsed?.previousElementSibling;
while (previous != null && previous.hasClass("is-collapsed") && previous.hasClass("style-settings-heading")) {
previous.removeClass("is-collapsed");
collapsed = collapsed.parentElement?.closest(".style-settings-container");
previous = collapsed?.previousElementSibling;
}
}
let details = setting.closest("details");
while (details) {
details.setAttr("open", "open");
details = details.parentElement?.closest("details");
}
setting.scrollIntoView(true);
setting.addClass("is-flashing");
window.setTimeout(() => setting.removeClass("is-flashing"), 3e3);
} catch (e) {
console.error(e);
}
}
performFuzzySearch(input) {
const results = [], hotkeys = [];
for (const resource of this.resources) {
let result = (0, import_obsidian.prepareSimpleSearch)(input)(resource.text) ?? (0, import_obsidian.prepareSimpleSearch)(input)(resource.desc);
if (result) {
if (resource.tab == "hotkeys") {
hotkeys.push(resource);
} else {
results.push(resource);
}
}
}
this.results = [...results, ...hotkeys];
return this.results;
}
onunload() {
this.settingsSearchEl.detach();
this.settingsResultsEl.detach();
this.detach();
if (this.searchAppended && import_obsidian.Platform.isDesktop)
this.app.setting.openTabById(this.app.setting.lastTabId);
}
};

View File

@ -0,0 +1,10 @@
{
"id": "settings-search",
"name": "Settings Search",
"version": "1.3.10",
"minAppVersion": "0.12.17",
"author": "Jeremy Valentine",
"description": "Globally search settings in Obsidian.md",
"authorUrl": "https://github.com/valentine195",
"isDesktopOnly": false
}

View File

@ -0,0 +1,25 @@
/* src/assets/main.css */
.settings-search-container.vertical-tab-header-group {
padding-bottom: 0;
}
.settings-search-input {
padding-left: 6px;
}
.vertical-tab-nav-item.settings-search-input {
background-color: inherit !important;
}
.settings-search-input .setting-item-control {
display: block;
}
.settings-search-input .search-input-container {
margin: 0;
}
.settings-search-results .setting-item.active {
background-color: var(--background-secondary);
}
.settings-search-results .set-externally .setting-item-name {
display: flex;
gap: 0.5rem;
}
/* src/styles.css */

11
.obsidian/types.json Normal file
View File

@ -0,0 +1,11 @@
{
"types": {
"aliases": "aliases",
"cssclasses": "multitext",
"tags": "tags",
"Prograss": "checkbox",
"current": "number",
"max": "number",
"list": "date"
}
}

View File

@ -4,16 +4,16 @@
"type": "split",
"children": [
{
"id": "a82239f909a9a9fb",
"id": "619e18c5b958bbcd",
"type": "tabs",
"children": [
{
"id": "bda483491a3255db",
"id": "85011ce9cc9a5259",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "冬季取暖方案.md",
"file": "2024-01-11.md",
"mode": "source",
"source": false
}
@ -31,7 +31,7 @@
{
"id": "5d7f9cd87816f7de",
"type": "tabs",
"dimension": 76.74418604651163,
"dimension": 57.55813953488372,
"children": [
{
"id": "8c405ad6bbea496b",
@ -49,7 +49,7 @@
"state": {
"type": "search",
"state": {
"query": "开发",
"query": "",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
@ -57,13 +57,22 @@
"sortOrder": "alphabetical"
}
}
},
{
"id": "c157f7ffdf6adb64",
"type": "leaf",
"state": {
"type": "recent-files",
"state": {}
}
]
}
],
"currentTab": 1
},
{
"id": "8b7b366422e476c2",
"type": "tabs",
"dimension": 23.255813953488367,
"dimension": 42.44186046511628,
"children": [
{
"id": "e03b25839994c10d",
@ -77,7 +86,7 @@
}
],
"direction": "horizontal",
"width": 344.5026054382324
"width": 248.50260543823242
},
"right": {
"id": "94db76309491c04e",
@ -86,6 +95,7 @@
{
"id": "ceb9547272dae8c3",
"type": "tabs",
"dimension": 54.06976744186047,
"children": [
{
"id": "33a80322e8ef2125",
@ -93,7 +103,7 @@
"state": {
"type": "backlink",
"state": {
"file": "冬季取暖方案.md",
"file": "2024-01-11.md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
@ -110,12 +120,38 @@
"state": {
"type": "outgoing-link",
"state": {
"file": "冬季取暖方案.md",
"file": "2024-01-11.md",
"linksCollapsed": false,
"unlinkedCollapsed": true
}
}
},
{
"id": "426a461f10a05c5c",
"type": "leaf",
"state": {
"type": "calendar",
"state": {}
}
}
],
"currentTab": 2
},
{
"id": "08016e797a983e5a",
"type": "tabs",
"dimension": 45.93023255813953,
"children": [
{
"id": "137da4fcbfeb0f20",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"file": "2024-01-11.md"
}
}
},
{
"id": "c07e4c7274feed8e",
"type": "leaf",
@ -123,27 +159,24 @@
"type": "tag",
"state": {
"sortOrder": "frequency",
"useHierarchy": true
"useHierarchy": false
}
}
},
{
"id": "137da4fcbfeb0f20",
"id": "e943300aa96b075c",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"file": "冬季取暖方案.md"
}
"type": "graph",
"state": {}
}
}
],
"currentTab": 3
"currentTab": 2
}
],
"direction": "horizontal",
"width": 200,
"collapsed": true
"width": 466.5
},
"left-ribbon": {
"hiddenItems": {
@ -159,38 +192,40 @@
"html-server:Turn Http Server Off": false
}
},
"active": "bda483491a3255db",
"active": "85011ce9cc9a5259",
"lastOpenFiles": [
"冬季取暖方案.md",
"思维模型/如何实现需求.md",
"思维模型/思维模型.md",
"思维模型/我的思维模型.md",
"学习的方式.md",
"应试教育学习思维.md",
"思维模型/思维模型.gd",
"思维模型/思维模型函数.md",
"思维模型/如何有动力.md",
"思维模型/如何构造模型.md",
"思维模型/如何抽象.md",
"思维模型/如何拆解.md",
"思维模型",
"学习思维+.md",
"2024-01-12.md",
"2024-01-11.md",
"Godot GDScript Trick.md",
"World Tree Target.md",
"Life 2024 Blockboard.md",
"2024-01-10.md",
"00_2024 Year Life Targets.md",
"Lunarvim.md",
"吉他学习目标.md",
"书籍阅读目标.md",
"TODO.md",
"Watching List.md",
"Designing Games A Guide to Engineering Experiences.md",
"Game Dev Common Web.md",
"TagSystem.md",
"TriggerAreaConfig.md",
"软件工程.md",
"游戏制作目标.md",
"访谈目标.md",
"运动目标.md",
"新项目立项.md",
"社交目标.md",
"TimeManager目标.md",
"做菜目标.md",
"世界树物语开发工作流.md",
"世界树存档结构分析.md",
"WorldTreeModule.md",
"Today Todo.md",
"如何控制人(玩家)的情绪.md",
"电子书网站.md",
"vim.md",
"世界树项目.md",
"游泳目标.md",
"旅游目标.md",
"累了后恢复精力的办法.md",
"Projects - Demo Project/5 Mistakes I Made When I Started Using Obsidian.md",
"Projects - Demo Project/The Easiest Way to Start Taking Notes.md",
"Projects - Demo Project",
"Aseets/exapmle.png",
"思维模型/思维模型.gd",
"思维模型",
"Aseets/005AA717.png",
"Aseets/Pasted image 20231130160723.png",
"产品化思维.md",
"Think in UML.canvas",
"Aseets/TagSystem.drawio.png",
"Aseets/Pasted image 20231113190838.png",
@ -198,7 +233,6 @@
"Aseets/vimEdit.png",
"Aseets/Procedure.jpeg",
"Aseets/PDAC2.png",
"Aseets/PDAC1.png",
"Aseets/exapmle.png"
"Aseets/PDAC1.png"
]
}

View File

@ -0,0 +1,27 @@
---
current: 0
max: 100
---
#Life2024
## 学习成长
- [ ] [[吉他学习目标]]
- [ ] [[书籍阅读目标]]
## 体验突破
- [ ] [[旅游目标]]
- [ ] [[游泳目标]]
## 休闲娱乐
## 工作事业
- [ ] [[World Tree Target]]
- [ ] [[TimeManager目标]]
- [ ] [[新项目立项]]
## 家庭生活
- [ ] [[做菜目标]]
- [ ] [[访谈目标]]
## 身体健康
- [ ] [[运动目标]]
## 财务理财
## 人际社群
- [ ] [[社交目标]]
## 年度主题
- 限制与突破

4
2024-01-10.md Normal file
View File

@ -0,0 +1,4 @@
- [x] 制作2024年度计划
- [ ] read book [书籍阅读目标](书籍阅读目标.md)
- [ ] sleep at 22:00 调整作息时间, 让自己明天可以设计自己的一天做什么

39
2024-01-11.md Normal file
View File

@ -0,0 +1,39 @@
- [x] world tree
- [x] 实现用键盘完成菜单交互的功能
- [x] 聚焦到按钮时, 浮窗
- [x] 弹窗时聚焦到第一个按钮
- [x] 世界等级功能
- [x] 世界等级字段 level
- [x] 世界增长时, 修改世界等级 level = init_level + day / 15
- [x] 显示世界等级在UI上
- [x] 商店物品会基于世界等级进行查询
- [x] 商店栏位数量会被玩家冒险者队伍效果影响(例如商店天赋【秘密渠道】可以使商店栏位+3 (因为目前没有队伍效果)
- [x] [Feature]教堂功能完善
- [x] 净化是净化所有角色, 一个价钱, 复活是需要选择目标然后复活的, 每个角色一个价钱
- [x] 净化扣钱
- [x] 净化UI交互
- [x] 复活扣钱
- [x] 复活功能
- [x] 复活UI交互
- [ ] [Feature] 购买装备功能
- [ ] 随机装备
- [x] 实现装备的数据结构
- [x] 可以实现初始装备数据类型
- [x] 先随机类型
- [x] 再基于等级随机
- [x] 最后随机品质
- [ ] 载入价格配置表
- [ ] 价格基于配置表 配置表基于等级和类型查询
- [x] 传奇装备无法在铁匠铺中购买
- [x] 买入数据结构存储
- [x] 购买UI
- [ ] 花费购买金钱
- [ ] 钱不够时无法购买
- [ ] 装备详情浮窗UI
- [ ] 卖出装备

View File

@ -1,5 +1,7 @@
[GDScript reference — Godot Engine (stable) documentation in English](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_basics.html)
### 组合与继承
### 用键盘代替鼠标来进行游戏操作Vimlike

5
Life 2024 Blockboard.md Normal file
View File

@ -0,0 +1,5 @@
```dataview
table current, max,"<progress max=100 value=" + round((current/max)*100)+ "></progress> " + round(current/max*100) + "%" as Progress
from #Life2024
sort file.name
```

View File

@ -1,7 +0,0 @@
## Wish List
- [ ] English(Every Day) this will be good
- [ ] Youtube
[Today Todo](Today%20Todo.md)
## Reference
[项目模块](./WorldTreeModule.md)

6
TimeManager目标.md Normal file
View File

@ -0,0 +1,6 @@
---
current: 0
max: 1
---
#Life2024
制作一个时间记录软件, 可以方便的对时间进行管理和记录, 并且把数据可视化

View File

@ -1,23 +0,0 @@
- [x] 把TagSystem接入游戏项目内
- [ ] 存档功能吧 确认一下存档的技术方案并接入项目
- 大地图上的可交互元素 (冒险者 副本) 比例尽量一致 . 或者使用矢量图(动态 无损 基于玩家视野缩放程序控制大小)
- 河流能不能走 的问题 (包括游戏寻路等设定方案需要落实) (可以走) 点击寻路or点击不寻路
- 不寻路 点击直线移动 (如果有任务给任务指引)
- 需要安排接下来的 Road Map
---
- Road Map
- 寻路修改 (直线移动, 障碍物)
- 角色
- 属性+肉鸽升级+面板
- 队伍
- 大地图
- 资源 + 变化
- 城镇.市场 (UI)
- 购买补给
- 城镇.冒险者工会
- 招募队员
- 委托 任务

View File

@ -2,7 +2,7 @@
[樱花动漫](https://www.yhmgo.com/)
[9Anime](https://9animetv.to/)
[age anim](https://www.agedm.org/)
[NT动漫_新番在线动漫_专注动漫的网站 (ntdm9.com)](https://www.ntdm9.com/)
[NT动漫_新番在线动漫_专注动漫的网站 ](https://www.ntdm9.com/)
[超高清画质的动漫网站 - 二矿动漫 (2rk.cc)](https://www.2rk.cc/)
## 2023.10
- 我们的雨色协议

18
World Tree Target.md Normal file
View File

@ -0,0 +1,18 @@
---
current: 0
max: 3
tags:
- Life2024
---
世界树项目完成
- [ ] 制作 Demo
- [ ] 游戏的核心卖点表现出来(养成 or Build)
- [ ] 完成游戏的全流程
- [ ] 创建存档
- [ ] 新建角色
- [ ] 队伍冒险
- [ ] 完成主线
- [ ] 结束游戏
- [ ] 游戏存档
- [ ] 上架Steam

18
书籍阅读目标.md Normal file
View File

@ -0,0 +1,18 @@
---
current: 0
max: 385
tags:
- Life2024
---
每俩月阅读1本不同方向的书, 一年一共6本书
- 每月月初制定想看的方向, 并从中选择一本经典书
## Book1
Page: 0/385
> 体验引擎:游戏设计全景探秘((美)Tynan_Sylvester)
- [ ] Designing Games A Guide to Engineering Experiences (Tynan Sylvester)

6
做菜目标.md Normal file
View File

@ -0,0 +1,6 @@
---
current: 0
max: 50
---
#Life2024
学会其他种菜, 50种记录并发表视频

13
吉他学习目标.md Normal file
View File

@ -0,0 +1,13 @@
---
current: 0
max: 6
---
#Life2024
学会使用吉他演奏一首曲目(Shelter)
- [ ] 学会基础乐理
- [ ] 学会理解乐谱
- [ ] 尝试谈完所有乐符
- [ ] 对音乐进行分段
- [ ] 分段尝试 并熟练掌握
- [ ] 尝试流畅连接并弹完所有乐符

7
新项目立项.md Normal file
View File

@ -0,0 +1,7 @@
---
current: 0
max: 1
---
#Life2024
新启动一个个人游戏项目, 并且完成它, 并且上架 Steam 获得反馈, 并持续优化

7
旅游目标.md Normal file
View File

@ -0,0 +1,7 @@
---
current: 0
max: 1
---
#Life2024
旅游, 前往四川 找大学同学玩

11
游泳目标.md Normal file
View File

@ -0,0 +1,11 @@
---
current: 0
max: 3
---
#Life2024
学会游泳, 不会淹死
- [ ] 附近找个可以学游泳的地方
- [ ] 付钱学习
- [ ] 成为会游泳的家伙

8
社交目标.md Normal file
View File

@ -0,0 +1,8 @@
---
current: 0
max: 10
tags:
- Life2024
---
认识10不同的人, 然后和他们深入交流

View File

@ -0,0 +1,37 @@
当人类感到疲劳时,各种行为的背后涉及到生理和心理的相互作用。以下是一个按照流程分析的简单模型:
1. **感知疲劳:** 你的身体和大脑接收到疲劳的信号,可能包括肌肉酸痛、头晕、注意力不集中等感觉。
2. **认知疲劳:** 大脑对这些感觉进行处理,你开始认识到自己的疲劳状态,可能会感到注意力下降、动力不足等。
3. **决策:** 大脑开始做出决策,需要采取一些行动来应对疲劳状态。这可能是在工作或学习中暂时休息,以便更好地应对挑战。
4. **执行行为:** 根据所做出的决策,你开始执行一系列行为,这些行为旨在改变你的心理和生理状态。
5. **生理影响:** 通过行为,例如深呼吸、休息、喝水,你对身体施加一些生理上的影响,如调整呼吸、舒缓肌肉。
6. **心理影响:** 行为还对心理状态产生影响,如听音乐、沉浸式体验、社交互动可以改变你的情绪、心情和注意力焦点。
7. **反馈机制:** 通过这些行为,你可能感到更轻松、更清晰,从而形成正反馈,使你更愿意继续学习或工作。
其中第6点的社交互动中,如果应用了费曼学习法,定期输出自己的所学所做, 能对此记忆更加深刻, 更容易理解.
在休息时可以应用的不同方法:
1. **深度休息:** 通过深呼吸练习,深度休息有助于放松紧张的身体和大脑。可以尝试冥想或专注于呼吸来降低压力。
2. **身体活动:** 进行轻松的体育活动,如瑜伽、伸展运动或简短的锻炼,有助于促进血液循环,提升身体能量。
3. **创造性活动:** 参与一些创造性的活动,比如绘画、写作或其他艺术形式,可以激发思维,改变注意力焦点。
4. **大自然接触:** 在户外呆一段时间,享受自然环境,这有助于提升心情、减轻疲劳感。
5. **阅读:** 选择一些轻松、愉悦的阅读材料,这可以是小说、漫画或其他感兴趣的主题,有助于放松大脑。
6. **音乐疗法:** 听一些舒缓的音乐,或尝试制作自己的音乐,有助于情绪调节和心理放松。
7. **游戏和娱乐:** 玩一些轻松的游戏,如棋类游戏或视频游戏,有助于分散注意力,放松身心。
通过在休息时结合这些不同方法,你可以更全面地调整身体和心理状态,提高恢复精力的效果。选择适合自己喜好和需要的方法,以确保休息时间更为有效。
这个流程反映了人类在感知和认知疲劳后,通过一系列行为来调整生理和心理状态,以提高适应能力和继续任务的效率。不同的人可能有不同的应对方式,取决于他们的个体差异和偏好。

6
访谈目标.md Normal file
View File

@ -0,0 +1,6 @@
---
current: 0
max: 3
---
#Life2024
采访我的家人履历, 并制作成纪录片

12
运动目标.md Normal file
View File

@ -0,0 +1,12 @@
---
current: 0
max: 5000
---
#Life2024
5000h spots time
1 week need 100 minutes
- Running
- Swimming
- Other