Auto saved by Logseq
This commit is contained in:
Vendored
+1
@@ -0,0 +1 @@
|
||||
{}
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"theme": "moonstone",
|
||||
"accentColor": "#959ea7",
|
||||
"cssTheme": "Solarized"
|
||||
}
|
||||
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
[
|
||||
"journaling",
|
||||
"page-properties"
|
||||
]
|
||||
Vendored
+30
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"file-explorer": true,
|
||||
"global-search": true,
|
||||
"switcher": true,
|
||||
"graph": true,
|
||||
"backlink": true,
|
||||
"canvas": true,
|
||||
"outgoing-link": true,
|
||||
"tag-pane": true,
|
||||
"properties": false,
|
||||
"page-preview": true,
|
||||
"daily-notes": true,
|
||||
"templates": true,
|
||||
"note-composer": true,
|
||||
"command-palette": true,
|
||||
"slash-command": false,
|
||||
"editor-status": true,
|
||||
"bookmarks": true,
|
||||
"markdown-importer": false,
|
||||
"zk-prefixer": false,
|
||||
"random-note": false,
|
||||
"outline": true,
|
||||
"word-count": true,
|
||||
"slides": false,
|
||||
"audio-recorder": false,
|
||||
"workspaces": false,
|
||||
"file-recovery": true,
|
||||
"publish": false,
|
||||
"sync": false
|
||||
}
|
||||
Vendored
+6
File diff suppressed because one or more lines are too long
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "journaling",
|
||||
"name": "Journaling",
|
||||
"description": "View daily notes in a journal-like format, similar to Logseq. It enhances note organization and facilitates better reflection by consolidating daily notes into a continuous journaling view.",
|
||||
"author": "Ordeeper",
|
||||
"authorUrl": "https://github.com/Ordeeper/",
|
||||
"fundingUrl": "https://github.com/sponsors/Ordeeper/",
|
||||
"version": "1.0.0",
|
||||
"minAppVersion": "0.15.0",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
:root{--border-radius:2rem;--border-w:.2rem}a.svelte-1m20tsl.svelte-1m20tsl{text-decoration:none;box-shadow:#0a254059 0 -2px 6px inset;background-color:#e8e8e8;border-color:#ffe2e2;border-style:solid;border-width:var(--border-w);border-radius:var(--border-radius);transition:transform .4s cubic-bezier(.68,-.55,.27,2.5),width .4s cubic-bezier(.68,-.55,.27,2.5),border-color .4s ease-in-out,background-color .4s ease-in-out}a.svelte-1m20tsl.svelte-1m20tsl:hover{background-color:#eee;transform:scale(105%);animation:svelte-1m20tsl-movingBorders 3s infinite;width:10em}.title.svelte-1m20tsl.svelte-1m20tsl{font-weight:900;font-family:monospace;color:#867c7c00;word-spacing:-2px;height:0;width:0;visibility:hidden;transition:color .7s ease-in-out}a.svelte-1m20tsl:hover .title.svelte-1m20tsl{height:auto;width:auto;visibility:visible;color:#867c7c}a.svelte-1m20tsl svg.svelte-1m20tsl{fill:#ff6e6e;transition:opacity .1s ease-in-out}.filled.svelte-1m20tsl.svelte-1m20tsl{position:absolute;opacity:0}a.svelte-1m20tsl:hover .empty.svelte-1m20tsl{opacity:0}a.svelte-1m20tsl:hover .filled.svelte-1m20tsl{opacity:1;animation:svelte-1m20tsl-beatingHeart 1.2s infinite}@keyframes svelte-1m20tsl-movingBorders{0%{border-color:#fce4e4}50%{border-color:#ffd8d8}90%{border-color:#fce4e4}}@keyframes svelte-1m20tsl-beatingHeart{0%{transform:scale(1)}15%{transform:scale(1.15)}30%{transform:scale(1)}45%{transform:scale(1.15)}60%{transform:scale(1)}}*,:before,:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.visible{visibility:visible}.absolute{position:absolute}.me{margin-inline-end:1rem}.hidden{display:none}.h-13{height:3.25rem}.w-13{width:3.25rem}.flex{display:flex}.inline-flex{display:inline-flex}.flex-col{flex-direction:column}.transform{transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-3{gap:.75rem}.overflow-hidden{overflow:hidden}.break-words{overflow-wrap:break-word}.border{border-width:1px}.p-x-2\.5{padding-left:.625rem;padding-right:.625rem}.pb-7{padding-bottom:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.font-bold{font-weight:700}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@media (min-width: 640px){.sm\:flex-row{flex-direction:row}}
|
||||
+371
@@ -0,0 +1,371 @@
|
||||
/*
|
||||
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||
if you want to view the source, please visit the github repository of this plugin
|
||||
*/
|
||||
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
|
||||
// src/main.ts
|
||||
var main_exports = {};
|
||||
__export(main_exports, {
|
||||
default: () => PagePropsPlugin
|
||||
});
|
||||
module.exports = __toCommonJS(main_exports);
|
||||
var import_obsidian = require("obsidian");
|
||||
|
||||
// src/render.ts
|
||||
var import_view = require("@codemirror/view");
|
||||
var fieldName = /([\p{L}\p{Extended_Pictographic}][0-9\p{L}\p{Extended_Pictographic}\s_/-]*)/u;
|
||||
function decoratedRegex(dec) {
|
||||
return new RegExp(`(^\\s*)${dec}${fieldName.source}${dec}(::\\s*)(.*)$`, "u");
|
||||
}
|
||||
var regex = decoratedRegex("");
|
||||
var specialRegex1 = decoratedRegex("\\*\\*");
|
||||
var specialRegex2 = decoratedRegex("\\*");
|
||||
var specialRegex3 = decoratedRegex("`");
|
||||
var specialRegex4 = decoratedRegex("_");
|
||||
function parseField(line) {
|
||||
let res = regex.exec(line);
|
||||
let extraLen = 0;
|
||||
if (!res) {
|
||||
extraLen = 4;
|
||||
res = specialRegex1.exec(line);
|
||||
if (!res) {
|
||||
extraLen = 2;
|
||||
res = specialRegex2.exec(line);
|
||||
if (!res) {
|
||||
res = specialRegex3.exec(line);
|
||||
if (!res) {
|
||||
res = specialRegex4.exec(line);
|
||||
if (!res) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
const [, prespace, field, separator, content] = res;
|
||||
return {
|
||||
prespace,
|
||||
field,
|
||||
fieldLen: field.length + extraLen,
|
||||
separator,
|
||||
content
|
||||
};
|
||||
}
|
||||
function render(plugin, field, separator, content, fieldNode) {
|
||||
const span = createSpan();
|
||||
const text = fieldNode ? void 0 : field;
|
||||
const fieldEl = plugin.settings.fieldsAreInnerLinks ? createEl("a", {
|
||||
cls: `internal-link page-prop page-prop--${field} page-prop-field`,
|
||||
text,
|
||||
href: field,
|
||||
attr: { "data-href": field, spellcheck: "false", target: "_blank", rel: "noopener" },
|
||||
parent: span
|
||||
}) : createSpan({
|
||||
cls: `page-prop page-prop--${field} page-prop-field`,
|
||||
text,
|
||||
attr: { spellcheck: "false" },
|
||||
parent: span
|
||||
});
|
||||
if (fieldNode) {
|
||||
fieldEl.appendChild(fieldNode);
|
||||
}
|
||||
createSpan({
|
||||
cls: `page-prop page-prop--${field} page-prop-separator`,
|
||||
text: separator,
|
||||
attr: { spellcheck: "false" },
|
||||
parent: span
|
||||
});
|
||||
if (content.length == 1 && content[0].nodeType == Node.TEXT_NODE) {
|
||||
const pattern = plugin.autolinkPatterns[field];
|
||||
if (pattern) {
|
||||
const text2 = content[0].textContent || "";
|
||||
createEl("a", {
|
||||
cls: `external-link page-prop page-prop--${field} page-prop-content`,
|
||||
text: text2,
|
||||
href: pattern.format(encodeURI(text2)),
|
||||
attr: { spellcheck: "false" },
|
||||
parent: span
|
||||
});
|
||||
return span;
|
||||
}
|
||||
}
|
||||
const holder = createSpan({
|
||||
cls: `page-prop page-prop--${field} page-prop-content`,
|
||||
attr: { spellcheck: "false" },
|
||||
parent: span
|
||||
});
|
||||
for (const node of content) {
|
||||
holder.appendChild(node);
|
||||
}
|
||||
return span;
|
||||
}
|
||||
function createMarkdownPostProcessor(plugin) {
|
||||
return (el) => {
|
||||
if (el.childElementCount != 1) {
|
||||
return;
|
||||
}
|
||||
const p = el.firstChild;
|
||||
if (!p || p.nodeName != "P") {
|
||||
return;
|
||||
}
|
||||
const nodes = p.childNodes;
|
||||
const lines = [];
|
||||
let currentLine = [];
|
||||
for (let i = 0; i < nodes.length; i++) {
|
||||
const node = nodes[i];
|
||||
if (node.nodeName == "BR") {
|
||||
lines.push(currentLine);
|
||||
currentLine = [];
|
||||
} else if (node.nodeType != Node.TEXT_NODE || node.textContent != "\n") {
|
||||
currentLine.push(node);
|
||||
}
|
||||
}
|
||||
lines.push(currentLine);
|
||||
for (const lineNodes of lines) {
|
||||
if (lineNodes.length == 0) {
|
||||
continue;
|
||||
}
|
||||
const [first] = lineNodes;
|
||||
if (first.nodeType == Node.TEXT_NODE) {
|
||||
const res2 = parseField(first.textContent || "");
|
||||
if (!res2) {
|
||||
continue;
|
||||
}
|
||||
const { prespace: prespace2, field: field2, separator: separator2, content: contentTextPart } = res2;
|
||||
if (contentTextPart.length == 0 && lineNodes.length == 1) {
|
||||
continue;
|
||||
}
|
||||
if (prespace2.length != 0) {
|
||||
p.insertBefore(document.createTextNode(prespace2), first);
|
||||
}
|
||||
if (!plugin.settings.hideInReaderMode.contains(field2)) {
|
||||
const contentNodes = [document.createTextNode(contentTextPart), ...lineNodes.slice(1)];
|
||||
p.insertBefore(render(plugin, field2, separator2, contentNodes), first);
|
||||
}
|
||||
p.removeChild(first);
|
||||
continue;
|
||||
}
|
||||
if (lineNodes.length == 1) {
|
||||
continue;
|
||||
}
|
||||
const [, second] = lineNodes;
|
||||
if (second.nodeType != Node.TEXT_NODE) {
|
||||
continue;
|
||||
}
|
||||
let preContent = second.textContent || "";
|
||||
if (!preContent.startsWith("::")) {
|
||||
continue;
|
||||
}
|
||||
preContent = preContent.substring(2);
|
||||
const res = parseField((first.textContent || "") + "::");
|
||||
if (!res) {
|
||||
continue;
|
||||
}
|
||||
const { prespace, field, separator } = res;
|
||||
if (preContent.trim().length == 0 && lineNodes.length == 2) {
|
||||
continue;
|
||||
}
|
||||
if (prespace.length != 0) {
|
||||
p.insertBefore(document.createTextNode(prespace), first);
|
||||
}
|
||||
if (!plugin.settings.hideInReaderMode.contains(field)) {
|
||||
const contentNodes = preContent.length != 0 ? [document.createTextNode(preContent), ...lineNodes.slice(2)] : lineNodes.slice(2);
|
||||
const rendered = render(plugin, field, separator, contentNodes, first);
|
||||
p.insertBefore(rendered, second);
|
||||
}
|
||||
p.removeChild(second);
|
||||
}
|
||||
};
|
||||
}
|
||||
function decorate(plugin, view) {
|
||||
const { doc } = view.state;
|
||||
const widgets = [];
|
||||
for (const { from, to } of view.visibleRanges) {
|
||||
for (let i = doc.lineAt(from).number; i <= doc.lineAt(to).number; i++) {
|
||||
const line = doc.line(i);
|
||||
if (line.text.trim().length == 0) {
|
||||
continue;
|
||||
}
|
||||
const res = parseField(line.text);
|
||||
if (!res) {
|
||||
continue;
|
||||
}
|
||||
const { prespace, field, fieldLen, separator, content } = res;
|
||||
if (content.length == 0) {
|
||||
continue;
|
||||
}
|
||||
const nameStart = line.from + prespace.length;
|
||||
const nameEnd = nameStart + fieldLen;
|
||||
const contentStart = nameEnd + separator.length;
|
||||
const contentEnd = line.to;
|
||||
let extraClass = "";
|
||||
if (plugin.settings.hideInReaderMode.contains(field)) {
|
||||
extraClass = " page-prop-hidden";
|
||||
}
|
||||
if (plugin.settings.fieldsAreInnerLinks) {
|
||||
widgets.push(import_view.Decoration.mark({
|
||||
tagName: "a",
|
||||
class: `internal-link page-prop${extraClass} page-prop--${field} page-prop-field`,
|
||||
attributes: {
|
||||
href: field,
|
||||
spellcheck: "false",
|
||||
draggable: "true"
|
||||
}
|
||||
}).range(nameStart, nameEnd));
|
||||
} else {
|
||||
widgets.push(import_view.Decoration.mark({
|
||||
class: `page-prop${extraClass} page-prop--${field} page-prop-field`,
|
||||
attributes: { spellcheck: "false" }
|
||||
}).range(nameStart, nameEnd));
|
||||
}
|
||||
widgets.push(import_view.Decoration.mark({
|
||||
class: `page-prop${extraClass} page-prop--${field} page-prop-separator`,
|
||||
attributes: { spellcheck: "false" }
|
||||
}).range(nameEnd, contentStart));
|
||||
const cls = `page-prop${extraClass} page-prop--${field} page-prop-content`;
|
||||
const pattern = plugin.autolinkPatterns[field];
|
||||
if (pattern) {
|
||||
const href = pattern.format(encodeURI(content));
|
||||
widgets.push(import_view.Decoration.mark({
|
||||
tagName: "a",
|
||||
class: `external-link page-prop page-prop--${field} page-prop-content`,
|
||||
attributes: { href, spellcheck: "false" }
|
||||
}).range(contentStart, contentEnd));
|
||||
} else {
|
||||
widgets.push(import_view.Decoration.mark({
|
||||
class: cls,
|
||||
attributes: { spellcheck: "false" }
|
||||
}).range(contentStart, contentEnd));
|
||||
}
|
||||
}
|
||||
}
|
||||
return import_view.Decoration.set(widgets);
|
||||
}
|
||||
function createViewPlugin(plugin) {
|
||||
return import_view.ViewPlugin.fromClass(class {
|
||||
constructor(view) {
|
||||
this.decorations = decorate(plugin, view);
|
||||
}
|
||||
update(update) {
|
||||
if (update.docChanged || update.viewportChanged || update.selectionSet) {
|
||||
this.decorations = decorate(plugin, update.view);
|
||||
}
|
||||
}
|
||||
}, { decorations: (v) => v.decorations });
|
||||
}
|
||||
|
||||
// src/main.ts
|
||||
var DEFAULT_SETTINGS = {
|
||||
fieldsAreInnerLinks: true,
|
||||
autolinkPatterns: [
|
||||
{ field: "github", prefix: "https://github.com/{0}" },
|
||||
{ field: "wiki", prefix: "https://wikipedia.org/wiki/{0}" },
|
||||
{ field: "twitter", prefix: "https://twitter.com/{0}" }
|
||||
],
|
||||
hideInReaderMode: [
|
||||
"public"
|
||||
]
|
||||
};
|
||||
var PagePropsPlugin = class extends import_obsidian.Plugin {
|
||||
async onload() {
|
||||
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
|
||||
this.refreshAutolinkPatterns();
|
||||
this.registerEditorExtension([createViewPlugin(this)]);
|
||||
this.registerMarkdownPostProcessor(createMarkdownPostProcessor(this), -100);
|
||||
this.addSettingTab(new Settings(this.app, this));
|
||||
}
|
||||
refreshAutolinkPatterns() {
|
||||
this.autolinkPatterns = {};
|
||||
for (const entry of this.settings.autolinkPatterns) {
|
||||
this.autolinkPatterns[entry.field] = entry.prefix;
|
||||
}
|
||||
}
|
||||
async saveSettings() {
|
||||
this.refreshAutolinkPatterns();
|
||||
await this.saveData(this.settings);
|
||||
}
|
||||
};
|
||||
var Settings = class extends import_obsidian.PluginSettingTab {
|
||||
constructor(app, plugin) {
|
||||
super(app, plugin);
|
||||
this.plugin = plugin;
|
||||
}
|
||||
display() {
|
||||
const { containerEl } = this;
|
||||
containerEl.empty();
|
||||
containerEl.createEl("h2", { text: "General" });
|
||||
new import_obsidian.Setting(containerEl).setName("Page property names are inner links").setDesc("A feature from Logseq, if you hover/click the page property name it'll behave as if it was a link to the page with the same name.").addToggle((toggle) => toggle.setValue(this.plugin.settings.fieldsAreInnerLinks).onChange(async (value) => {
|
||||
this.plugin.settings.fieldsAreInnerLinks = value;
|
||||
await this.plugin.saveSettings();
|
||||
}));
|
||||
const { autolinkPatterns, hideInReaderMode } = this.plugin.settings;
|
||||
containerEl.createEl("h2", { text: "Fields to hide in reader view" });
|
||||
for (let index = 0; index < hideInReaderMode.length; index++) {
|
||||
new import_obsidian.Setting(containerEl).setName("Hidden field #" + (index + 1)).addText((text) => text.setPlaceholder("Field that will be hidden").setValue(hideInReaderMode[index]).onChange(async (value) => {
|
||||
hideInReaderMode[index] = value;
|
||||
await this.plugin.saveSettings();
|
||||
})).addButton((button) => button.setButtonText("-").onClick(async () => {
|
||||
hideInReaderMode.splice(index, 1);
|
||||
this.display();
|
||||
await this.plugin.saveSettings();
|
||||
}));
|
||||
}
|
||||
new import_obsidian.Setting(containerEl).addButton((button) => button.setWarning().setButtonText("Reset").onClick(async () => {
|
||||
this.plugin.settings.hideInReaderMode = [...DEFAULT_SETTINGS.hideInReaderMode];
|
||||
this.display();
|
||||
await this.plugin.saveSettings();
|
||||
})).addButton((button) => button.setButtonText("+").onClick(
|
||||
async () => {
|
||||
hideInReaderMode.push("");
|
||||
this.display();
|
||||
await this.plugin.saveSettings();
|
||||
}
|
||||
));
|
||||
containerEl.createEl("h2", { text: "Autolink Patterns" });
|
||||
for (let index = 0; index < autolinkPatterns.length; index++) {
|
||||
const entry = autolinkPatterns[index];
|
||||
new import_obsidian.Setting(containerEl).setName("Pattern #" + (index + 1)).addText((text) => text.setPlaceholder("Field for the link pattern").setValue(entry.field).onChange(async (value) => {
|
||||
entry.field = value;
|
||||
await this.plugin.saveSettings();
|
||||
})).addText((text) => text.setPlaceholder("The link pattern").setValue(entry.prefix).onChange(async (value) => {
|
||||
entry.prefix = value;
|
||||
await this.plugin.saveSettings();
|
||||
})).addButton((button) => button.setButtonText("-").onClick(async () => {
|
||||
autolinkPatterns.splice(index, 1);
|
||||
this.display();
|
||||
await this.plugin.saveSettings();
|
||||
}));
|
||||
}
|
||||
new import_obsidian.Setting(containerEl).addButton((button) => button.setWarning().setButtonText("Reset").onClick(async () => {
|
||||
this.plugin.settings.autolinkPatterns = [...DEFAULT_SETTINGS.autolinkPatterns];
|
||||
this.display();
|
||||
await this.plugin.saveSettings();
|
||||
})).addButton((button) => button.setButtonText("+").onClick(
|
||||
async () => {
|
||||
autolinkPatterns.push({ field: "", prefix: "" });
|
||||
this.display();
|
||||
await this.plugin.saveSettings();
|
||||
}
|
||||
));
|
||||
}
|
||||
};
|
||||
|
||||
/* nosourcemap */
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "page-properties",
|
||||
"name": "Page Properties",
|
||||
"version": "1.0.3",
|
||||
"minAppVersion": "0.15.0",
|
||||
"description": "Render page properties similar to Logseq",
|
||||
"author": "Anton Bulakh",
|
||||
"authorUrl": "https://necauqua.dev",
|
||||
"fundingUrl": {
|
||||
"Patreon": "https://www.patreon.com/necauqua",
|
||||
"Ko-Fi": "https://ko-fi.com/necauqua",
|
||||
"Buy Me a Coffee": "https://buymeacoffee.com/necauqua"
|
||||
},
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
+89
@@ -0,0 +1,89 @@
|
||||
|
||||
body {
|
||||
--page-prop-color: var(--tag-color);
|
||||
--page-prop-background: var(--tag-background);
|
||||
--page-prop-border-width: var(--tag-border-width);
|
||||
--page-prop-border-color: var(--tag-border-color);
|
||||
--page-prop-size: var(--tag-size);
|
||||
--page-prop-padding-x: var(--tag-padding-x);
|
||||
--page-prop-padding-y: var(--tag-padding-y);
|
||||
--page-prop-radius: var(--tag-radius);
|
||||
|
||||
--page-prop-hidden-color: hsl(254deg 80% 68% / 50%);
|
||||
}
|
||||
|
||||
/* basically a copy of .tag */
|
||||
/* the :not part is again because of the ordering issue (read below) */
|
||||
:not(.cm-hmd-codeblock) > .page-prop {
|
||||
color: var(--page-prop-color);
|
||||
background-color: var(--page-prop-background);
|
||||
border: var(--page-prop-border-width) solid var(--page-prop-border-color);
|
||||
font-size: var(--page-prop-size);
|
||||
vertical-align: baseline;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
padding-top: var(--page-prop-padding-y);
|
||||
padding-bottom: var(--page-prop-padding-y);
|
||||
}
|
||||
|
||||
/* instead of just .page-prop.page-prop-field and .page-prop.page-prop-content below */
|
||||
/* we have to have a ton of weird matchers because obsidian cm6 decorations always */
|
||||
/* have the highest (or lowest? anyway, it's wrong compared to mine and can't be changed) */
|
||||
/* precedence for some reason */
|
||||
|
||||
:is(div,.markdown-rendered span) > .page-prop.page-prop-field:first-of-type,
|
||||
:is(div,.markdown-rendered span) > *:first-of-type > .page-prop.page-prop-field:first-of-type,
|
||||
:is(div,.markdown-rendered span) > *:empty + :is(.cm-hmd-internal-link,.cm-strong,.cm-em,.cm-highlight,.cm-strikethrough,.cm-comment,.cm-inline-code) > .page-prop.page-prop-field:first-of-type {
|
||||
border-top-left-radius: var(--page-prop-radius);
|
||||
border-bottom-left-radius: var(--page-prop-radius);
|
||||
border-right: none;
|
||||
border-left: var(--page-prop-border-width) solid var(--page-prop-border-color);
|
||||
padding-left: var(--page-prop-padding-x);
|
||||
}
|
||||
|
||||
:is(div,.markdown-rendered span) > .page-prop.page-prop-content:last-of-type,
|
||||
:is(div,.markdown-rendered span) > *:last-of-type > .page-prop.page-prop-content:last-of-type,
|
||||
:is(div,.markdown-rendered span) > :is(.cm-hmd-internal-link,.cm-strong,.cm-em,.cm-highlight,.cm-strikethrough,.cm-comment,.cm-inline-code):has(+ *:empty) > .page-prop.page-prop-content:last-of-type {
|
||||
border-top-right-radius: var(--page-prop-radius);
|
||||
border-bottom-right-radius: var(--page-prop-radius);
|
||||
border-left: none;
|
||||
border-right: var(--page-prop-border-width) solid var(--page-prop-border-color);
|
||||
padding-right: var(--page-prop-padding-x);
|
||||
}
|
||||
|
||||
/* bleaker color for the hidden props */
|
||||
.page-prop.page-prop-hidden {
|
||||
color: var(--page-prop-hidden-color);
|
||||
}
|
||||
|
||||
/* make the field-links only underlined on hover */
|
||||
.page-prop.page-prop-field.internal-link {
|
||||
text-decoration-line: none;
|
||||
}
|
||||
.page-prop.page-prop-field.internal-link:hover {
|
||||
text-decoration-line: var(--link-decoration);
|
||||
}
|
||||
|
||||
/* dont highlight field links as unresolved */
|
||||
.markdown-rendered .page-prop.page-prop-field.internal-link.is-unresolved {
|
||||
color: var(--page-prop-color);
|
||||
opacity: inherit;
|
||||
filter: inherit;
|
||||
text-decoration-style: inherit;
|
||||
text-decoration-color: inherit;
|
||||
}
|
||||
|
||||
/* disable the little icon, it's misplaced interacts weirdly with round */
|
||||
/* corners (but the class is needed for it to be clickable in the editor) */
|
||||
/* second match is for the reader mode */
|
||||
.page-prop.page-prop-content.external-link,
|
||||
.page-prop.page-prop-content > a.external-link {
|
||||
background-image: none;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
/* fixup if *someone* uses an inline code block as a field name */
|
||||
.cm-s-obsidian span.cm-inline-code:has(.page-prop) {
|
||||
font-size: inherit;
|
||||
background-color: inherit;
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"name": "Solarized",
|
||||
"version": "1.0.9-beta",
|
||||
"minAppVersion": "1.0.0",
|
||||
"author": "harmtemolder",
|
||||
"authorUrl": "https://github.com/harmtemolder"
|
||||
}
|
||||
Vendored
+268
@@ -0,0 +1,268 @@
|
||||
:root {
|
||||
--base03-rgb: 0, 43, 54;
|
||||
--base03: rgb(var(--base03-rgb));
|
||||
--base02-rgb: 7, 54, 66;
|
||||
--base02: rgb(var(--base02-rgb));
|
||||
--base01-rgb: 88, 110, 117;
|
||||
--base01: rgb(var(--base01-rgb));
|
||||
--base00-rgb: 101, 123, 131;
|
||||
--base00: rgb(var(--base00-rgb));
|
||||
--base0-rgb: 131, 148, 150;
|
||||
--base0: rgb(var(--base0-rgb));
|
||||
--base1-rgb: 147, 161, 161;
|
||||
--base1: rgb(var(--base1-rgb));
|
||||
--base2-rgb: 238, 232, 213;
|
||||
--base2: rgb(var(--base2-rgb));
|
||||
--base3-rgb: 253, 246, 227;
|
||||
--base3: rgb(var(--base3-rgb));
|
||||
--yellow-rgb: 181, 137, 0;
|
||||
--yellow: rgb(var(--yellow-rgb));
|
||||
--orange-rgb: 203, 75, 22;
|
||||
--orange: rgb(var(--orange-rgb));
|
||||
--red-rgb: 220, 50, 47;
|
||||
--red: rgb(var(--red-rgb));
|
||||
--magenta-rgb: 211, 54, 130;
|
||||
--magenta: rgb(var(--magenta-rgb));
|
||||
--violet-rgb: 108, 113, 196;
|
||||
--violet: rgb(var(--violet-rgb));
|
||||
--blue-rgb: 38, 139, 210;
|
||||
--blue: rgb(var(--blue-rgb));
|
||||
--cyan-rgb: 42, 161, 152;
|
||||
--cyan: rgb(var(--cyan-rgb));
|
||||
--green-rgb: 133, 153, 0;
|
||||
--green: rgb(var(--green-rgb));
|
||||
}
|
||||
|
||||
.theme-dark {
|
||||
/* Overwrite default theme colors */
|
||||
--color-base-00: #1e1e1e;
|
||||
--color-base-10: #242424;
|
||||
--color-base-20: #262626;
|
||||
--color-base-25: var(--base03);
|
||||
--color-base-30: var(--base02);
|
||||
--color-base-35: var(--base02);
|
||||
--color-base-40: var(--base0);
|
||||
--color-base-50: #666;
|
||||
--color-base-60: #999;
|
||||
--color-base-70: #bababa;
|
||||
--color-base-100: #dadada;
|
||||
/* Background */
|
||||
--background-primary: var(--base03);
|
||||
--background-primary-alt: var(--base02);
|
||||
/* Text */
|
||||
--text-normal: var(--base0);
|
||||
--text-muted: var(--base00);
|
||||
--text-faint: var(--base01);
|
||||
/* File explorer */
|
||||
--active-bg: var(--nav-item-background-active);
|
||||
}
|
||||
|
||||
.theme-light {
|
||||
/* Overwrite default theme colors */
|
||||
--color-base-00: var(--base2);
|
||||
--color-base-05: #fcfcfc;
|
||||
--color-base-10: var(--base2);
|
||||
--color-base-20: #f6f6f6;
|
||||
--color-base-25: #e3e3e3;
|
||||
--color-base-30: var(--base2);
|
||||
--color-base-35: var(--base2);
|
||||
--color-base-40: var(--base00);
|
||||
--color-base-50: #ababab;
|
||||
--color-base-60: #707070;
|
||||
--color-base-70: #5a5a5a;
|
||||
--color-base-100: #222222;
|
||||
/* Background */
|
||||
--background-primary: var(--base3);
|
||||
--background-primary-alt: var(--base2);
|
||||
/* Text */
|
||||
--text-normal: var(--base00);
|
||||
--text-muted: var(--base0);
|
||||
--text-faint: var(--base1);
|
||||
/* File explorer */
|
||||
--active-bg: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 0.1);
|
||||
--nav-item-background-active: var(--active-bg);
|
||||
}
|
||||
|
||||
.theme-dark,
|
||||
.theme-light {
|
||||
/* Overwrite default theme colors */
|
||||
--color-red-rgb: var(--red-rgb);
|
||||
--color-red: var(--red);
|
||||
--color-green-rgb: var(--green-rgb);
|
||||
--color-green: var(--green);
|
||||
--color-orange: var(--orange);
|
||||
--color-yellow: var(--yellow);
|
||||
--color-cyan: var(--cyan);
|
||||
--color-blue: var(--blue);
|
||||
--color-purple: var(--violet);
|
||||
--color-pink: var(--magenta);
|
||||
--accent-h: 18;
|
||||
--accent-s: 80%;
|
||||
--accent-l: 44%;
|
||||
--interactive-accent: var(--color-accent);
|
||||
/* Background */
|
||||
--background-secondary: var(--background-primary);
|
||||
--background-secondary-alt: var(--background-primary-alt);
|
||||
/* Text */
|
||||
--text-on-accent: var(--background-primary);
|
||||
/* Headings */
|
||||
--text-title: var(--cyan);
|
||||
--heading-formatting: var(--text-title);
|
||||
--h1-color: var(--text-title);
|
||||
--h2-color: var(--text-title);
|
||||
--h3-color: var(--text-title);
|
||||
--h4-color: var(--text-title);
|
||||
--h5-color: var(--text-title);
|
||||
--h6-color: var(--text-title);
|
||||
/* Links */
|
||||
--link-color: var(--blue);
|
||||
--link-color-hover: var(--link-color);
|
||||
--link-decoration: none;
|
||||
--link-decoration-hover: underline;
|
||||
--link-external-color: var(--violet);
|
||||
--link-external-color-hover: var(--link-external-color);
|
||||
--link-external-decoration: none;
|
||||
--link-external-decoration-hover: underline;
|
||||
--link-unresolved-color: var(--red);
|
||||
--link-unresolved-color-hover: var(--link-unresolved-color);
|
||||
--link-unresolved-opacity: unset;
|
||||
--link-unresolved-decoration-color: var(--link-unresolved-color);
|
||||
/* Code */
|
||||
--code-normal: var(--text-normal);
|
||||
--code-comment: var(--cyan);
|
||||
--code-function: var(--blue);
|
||||
--code-important: var(--orange);
|
||||
--code-keyword: var(--green);
|
||||
--code-operator: var(--code-normal);
|
||||
--code-property: var(--code-normal);
|
||||
--code-punctuation: var(--code-normal);
|
||||
--code-string: var(--cyan);
|
||||
--code-tag: var(--red);
|
||||
--code-value: var(--magenta);
|
||||
/* Tables */
|
||||
--table-header-size: inherit;
|
||||
--table-header-weight: var(--font-bold);
|
||||
--table-header-color: inherit;
|
||||
/* Highlights */
|
||||
--text-highlight-bg: var(--color-accent);
|
||||
--text-highlight-bg-active: var(--color-accent);
|
||||
/* Checkboxes in reading view */
|
||||
--checkbox-border-color: var(--interactive-accent);
|
||||
--checkbox-border-color-hover: var(--interactive-accent-hover);
|
||||
/* Hashtags */
|
||||
--tag-padding-x: var(--tag-padding-y);
|
||||
/* Focus border */
|
||||
--background-modifier-border-focus: var(--interactive-accent);
|
||||
}
|
||||
|
||||
.cm-s-obsidian {
|
||||
/* Checkboxes */
|
||||
/* Links */
|
||||
/* Tables */
|
||||
/* Search results */
|
||||
/* Code */
|
||||
/* Highlights */
|
||||
}
|
||||
.cm-s-obsidian span.cm-formatting-task {
|
||||
color: var(--checkbox-color);
|
||||
}
|
||||
.cm-s-obsidian span.cm-formatting-link {
|
||||
color: var(--link-color);
|
||||
}
|
||||
.cm-s-obsidian span.cm-formatting-link.cm-strikethrough {
|
||||
text-decoration-line: line-through;
|
||||
}
|
||||
.cm-s-obsidian span.cm-link {
|
||||
color: var(--link-external-color) !important;
|
||||
}
|
||||
.cm-s-obsidian span.cm-url.cm-strikethrough {
|
||||
text-decoration-line: line-through;
|
||||
}
|
||||
.cm-s-obsidian .HyperMD-table-row-0 {
|
||||
font-weight: var(--font-bold);
|
||||
}
|
||||
.cm-s-obsidian span.obsidian-search-match-highlight {
|
||||
box-shadow: unset;
|
||||
mix-blend-mode: unset;
|
||||
border-radius: unset;
|
||||
background: var(--green);
|
||||
color: var(--text-on-accent);
|
||||
padding: 2px 0;
|
||||
}
|
||||
.cm-s-obsidian span.cm-comment {
|
||||
color: var(--code-comment);
|
||||
}
|
||||
.cm-s-obsidian span.cm-inline-code {
|
||||
padding: 2px 0;
|
||||
}
|
||||
.cm-s-obsidian span.cm-formatting-highlight,
|
||||
.cm-s-obsidian span.cm-highlight {
|
||||
color: var(--text-on-accent);
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
/* More code */
|
||||
.cm-def {
|
||||
color: var(--code-function);
|
||||
}
|
||||
|
||||
.cm-atom {
|
||||
color: var(--code-value);
|
||||
}
|
||||
|
||||
.cm-hmd-frontmatter.cm-hmd-frontmatter.cm-atom,
|
||||
.cm-hmd-frontmatter.cm-hmd-frontmatter.cm-def {
|
||||
color: var(--interactive-accent);
|
||||
}
|
||||
|
||||
/* Search results */
|
||||
.is-flashing {
|
||||
border-radius: unset;
|
||||
}
|
||||
|
||||
.search-result-file-matched-text {
|
||||
color: var(--text-on-accent);
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.markdown-rendered .internal-link.is-unresolved:hover {
|
||||
color: var(--link-unresolved-color-hover);
|
||||
text-decoration-color: var(--link-unresolved-color-hover);
|
||||
}
|
||||
|
||||
/* Highlight current line */
|
||||
.cm-active {
|
||||
background: var(--active-bg);
|
||||
}
|
||||
.cm-active.cm-gutterElement {
|
||||
color: var(--color-accent);
|
||||
}
|
||||
|
||||
/* Hashtags */
|
||||
.cm-hashtag.cm-hashtag-begin, .cm-hashtag.cm-hashtag-end {
|
||||
border: unset;
|
||||
border-radius: unset;
|
||||
}
|
||||
|
||||
/* https://github.com/nothingislost/obsidian-dynamic-highlights */
|
||||
.cm-current-word,
|
||||
.cm-matched-word,
|
||||
.cm-current-string,
|
||||
.cm-matched-string {
|
||||
background: var(--yellow);
|
||||
color: var(--text-on-accent);
|
||||
text-decoration: none;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
/* File explorer */
|
||||
.is-flashing {
|
||||
color: var(--text-on-accent) !important;
|
||||
}
|
||||
|
||||
.workspace-leaf.mod-active .nav-folder.has-focus > .nav-folder-title,
|
||||
.workspace-leaf.mod-active .nav-file.has-focus > .nav-file-title {
|
||||
box-shadow: 0 0 0 2px var(--color-accent);
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=theme.css.map */
|
||||
Vendored
+200
@@ -0,0 +1,200 @@
|
||||
{
|
||||
"main": {
|
||||
"id": "8ea01eb3a87edeca",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "c586756d5e5e5cc6",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "b3bf953355f45be7",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "pages/REVIEWS.md",
|
||||
"mode": "preview",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "REVIEWS"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "vertical"
|
||||
},
|
||||
"left": {
|
||||
"id": "54dd3b80761d0539",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "d99f8d87cb6194dd",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "ce66ce5112c1d6a3",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "file-explorer",
|
||||
"state": {
|
||||
"sortOrder": "alphabetical"
|
||||
},
|
||||
"icon": "lucide-folder-closed",
|
||||
"title": "Files"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "52f7aea3e2eb242e",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "search",
|
||||
"state": {
|
||||
"query": "",
|
||||
"matchingCase": false,
|
||||
"explainSearch": false,
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical"
|
||||
},
|
||||
"icon": "lucide-search",
|
||||
"title": "Search"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "9940b6ebc8de03ba",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "bookmarks",
|
||||
"state": {},
|
||||
"icon": "lucide-bookmark",
|
||||
"title": "Bookmarks"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300
|
||||
},
|
||||
"right": {
|
||||
"id": "7d28eebd35768469",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "012335fa85c9467d",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "9bd8bfd991825607",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "backlink",
|
||||
"state": {
|
||||
"file": "pages/REVIEWS.md",
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical",
|
||||
"showSearch": false,
|
||||
"searchQuery": "",
|
||||
"backlinkCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
},
|
||||
"icon": "links-coming-in",
|
||||
"title": "Backlinks for REVIEWS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "b47506510cf10f27",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outgoing-link",
|
||||
"state": {
|
||||
"file": "pages/Services/CollegioPhD/Frammenti di verbale riusabili.md",
|
||||
"linksCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
},
|
||||
"icon": "links-going-out",
|
||||
"title": "Outgoing links from Frammenti di verbale riusabili"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "9f531d3883424913",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "tag",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"useHierarchy": true
|
||||
},
|
||||
"icon": "lucide-tags",
|
||||
"title": "Tags"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0f0029fab9dfae50",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outline",
|
||||
"state": {
|
||||
"file": "pages/PT0042_222830.md"
|
||||
},
|
||||
"icon": "lucide-list",
|
||||
"title": "Outline of PT0042_222830"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300
|
||||
},
|
||||
"left-ribbon": {
|
||||
"hiddenItems": {
|
||||
"switcher:Open quick switcher": false,
|
||||
"graph:Open graph view": false,
|
||||
"canvas:Create new canvas": false,
|
||||
"daily-notes:Open today's daily note": false,
|
||||
"templates:Insert template": false,
|
||||
"command-palette:Open command palette": false
|
||||
}
|
||||
},
|
||||
"active": "b3bf953355f45be7",
|
||||
"lastOpenFiles": [
|
||||
"assets/image_1732473501955_0.png",
|
||||
"assets/image_1732473496134_0.png",
|
||||
"assets/image_1732473492526_0.png",
|
||||
"assets/image_1732473474121_0.png",
|
||||
"assets/image_1732472841676_0.png",
|
||||
"2024-10-20.md",
|
||||
"pages/Services/CollegioPhD/Frammenti di verbale riusabili.md",
|
||||
"pages/Services/CollegioPhD/mail di convocazione presentazione al RG.md",
|
||||
"pages/Services/CollegioPhD/VerbaleCollegioICT-14 Luglio 2020.pdf",
|
||||
"pages/Services/CollegioPhD/Verbale Collegio Dott ICT - 14 Gennaio 2021.pdf",
|
||||
"pages/Services/CollegioPhD/SERVICES___PHDICT___PhD Processes.md",
|
||||
"pages/Services/CollegioPhD/Assegnazione borse ai nuovi dottorandi.md",
|
||||
"pages/Services/CollegioPhD/Ammissione alla procedura finale di dottorandi.md",
|
||||
"pages/@Low-Code Is Often High-Code, So We Must Design Low-Code Platforms to Enable Proper Software Engineering.md",
|
||||
"pages/@Battle of the Wordsmiths%3A Comparing ChatGPT, GPT-4, Claude, and Bard.md",
|
||||
"pages/journalArticle.md",
|
||||
"pages/@11697_19479.md",
|
||||
"pages/@A Conversation with Barry Boehm%253A Recollections from 50 Years of Software Engineering.md",
|
||||
"pages/@Model-Driven Engineering for IoT Applications%3A a focus on Reusability and Portability.md",
|
||||
"DONE.md",
|
||||
"pages/PT0042_222830.md",
|
||||
"pages/PROJECTS-PRIN-FRINGE_RESEARCH_UNIT.md",
|
||||
"pages/Planner.md",
|
||||
"pages/planning Pinna Pui... 2015 24 1%2F8%2F20...The future of model transformation languages%3A An open community di... Burguefio... 2019 15 1.md",
|
||||
"pages/PhD_Thesis_Mastropaolo_Antonio.md",
|
||||
"pages/PhD_Thesis__Sara_Pettinari.md",
|
||||
"pages/PhD_Research_Plan%5F%5F%5FSergio_Morales.md",
|
||||
"pages/PERSONAL___HEALTH.md",
|
||||
"pages/PERSONAL___CASA.md",
|
||||
"pages/PERSONAL___FAMILY.md",
|
||||
"EditoringChairing/2025-ICSE.md",
|
||||
"pages/EditoringChairing___2025-ICSE.md",
|
||||
"EditoringChairing"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user