Skip to content

add simple query function #17

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
146 changes: 135 additions & 11 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ const settingsTemplate = [
type: "enum",
default: "page",
title: "Random Mode",
description: "Page, card, tags or advanced query",
enumChoices: ["page", "card", "tags", "query"],
description: "Page, card, tags, namespace, simple query, or advanced query",
enumChoices: ["page", "card", "tags", "namespace", "simple-query", "query"],
enumPicker: "radio",
},
{
Expand All @@ -41,6 +41,21 @@ const settingsTemplate = [
description:
'Your custom query. e.g. [:find (pull ?b [*]) :where [?b :block/refs ?bp] [?bp :block/name "book"]]',
},
{
key: "simpleQuery",
type: "string",
default: "",
title: "Simple Query mode",
inputAs: "textarea",
description: 'Your simple query. e.g. (page-property :type "book")',
},
{
key: "namespace",
type: "string",
default: "",
title: "Namespace mode",
description: "Enter the namespace to use for random selection",
},
{
key: "randomStepSize",
type: "enum",
Expand All @@ -51,6 +66,15 @@ const settingsTemplate = [
enumChoices: ["1", "3", "5", "7", "10"],
enumPicker: "radio",
},
{
key: "randomInterval",
type: "enum",
default: "5",
title: "随机切换间隔",
description: "自动随机切换笔记的时间间隔(秒)",
enumChoices: ["3", "5", "10", "15", "30"],
enumPicker: "radio",
},
];

logseq.useSettingsSchema(settingsTemplate);
Expand All @@ -59,8 +83,17 @@ async function openRandomNote() {
const queryScript = getQueryScript();
let stepSize = parseInt(logseq.settings.randomStepSize || 1);
try {
let ret = await logseq.DB.datascriptQuery(queryScript);
const pages = ret?.flat();
let pages;
if (logseq.settings.randomMode === "namespace") {
const namespace = logseq.settings.namespace;
pages = await logseq.Editor.getPagesFromNamespace(namespace);
} else if (logseq.settings.randomMode === "simple-query") {
pages = await logseq.DB.q(queryScript);
} else {
const ret = await logseq.DB.datascriptQuery(queryScript);
pages = ret?.flat();
}

for (let i = 0; i < pages.length; i++) {
const block = pages[i];
if (block["pre-block?"]) {
Expand All @@ -73,7 +106,7 @@ async function openRandomNote() {
}
} catch (err) {
logseq.UI.showMsg(
err.message || "Maybe something wrong with the query",
err.message || "Maybe something wrong with the query or namespace",
"error"
);
console.log(err);
Expand Down Expand Up @@ -160,8 +193,12 @@ function getQueryScript() {
[?bp :block/name ?name]
[(contains? #{"card"} ?name)]]
`;
case "simple-query":
return logseq.settings.simpleQuery;
case "query":
return logseq.settings.advancedQuery;
case "namespace":
return null;
default:
console.log("unknown");
return defaultQuery;
Expand Down Expand Up @@ -202,23 +239,67 @@ const hasRefUuid = (content) => {
return !!content && content.indexOf("((") > -1 && content.indexOf("))") > -1;
};

function main() {
logseq.provideModel({
handleRandomNote() {
let isRunning = false;
let intervalId = null;

async function handleRandomNote() {
if (isRunning) {
clearInterval(intervalId);
isRunning = false;
} else {
isRunning = true;
// 更新旋转动画样式,确保与当前设置的时间间隔同步
updateRotateStyle();
openRandomNote(); // Immediately open a random note
intervalId = setInterval(() => {
openRandomNote();
},
});
}, parseInt(logseq.settings.randomInterval || 5) * 1000);
}
registerRandomNoteToolbar(isRunning)
}

function registerRandomNoteToolbar(isRunning) {
logseq.App.registerUIItem("toolbar", {
key: "RandomNote",
template: `
<span class="logseq-random-note-toolbar">
<a title="I'm Feeling Lucky(r n)" class="button" data-on-click="handleRandomNote">
<i class="ti ti-windmill"></i>
<i id="random-note-icon" class="ti ti-windmill ${isRunning ? ' rotate' : ''}"></i>
</a>
</span>
`,
});
}

// 动态生成CSS样式,使旋转动画时间与随机切换时间保持一致
function updateRotateStyle() {
const intervalSeconds = parseInt(logseq.settings.randomInterval || 5);
logseq.provideStyle(`
/* 旋转动画 */
@keyframes rotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.rotate {
display: inline-block; /* 确保动画应用于图标本身 */
animation: rotate ${intervalSeconds}s linear infinite;
}
/* 悬停时暂停动画 */
.rotate:hover {
animation-play-state: paused;
}
`);
}

function main() {
logseq.provideModel({
handleRandomNote,
});

// 初始化样式
updateRotateStyle();

registerRandomNoteToolbar(false); // Initially not running

logseq.App.registerCommandPalette(
{
Expand Down Expand Up @@ -270,6 +351,49 @@ function main() {
logseq.updateSettings({ randomMode: "query" });
}
);
logseq.App.registerCommandPalette(
{
key: "logseq-random-note:simple-query-mode",
label: "Random note => simple query mode",
},
() => {
logseq.updateSettings({ randomMode: "simple-query" });
}
);

logseq.App.registerCommandPalette(
{
key: "logseq-random-note:advanced-query-mode",
label: "Random note => advanced query mode",
},
() => {
logseq.updateSettings({ randomMode: "query" });
}
);
logseq.App.registerCommandPalette(
{
key: "logseq-random-note:namespace-mode",
label: "Random note => namespace mode",
},
() => {
logseq.updateSettings({ randomMode: "namespace" });
}
);

// 监听设置变更,当随机间隔改变时更新动画样式
logseq.onSettingsChanged((newSettings, oldSettings) => {
if (newSettings.randomInterval !== oldSettings.randomInterval) {
updateRotateStyle();

// 如果正在运行中,重新启动定时器以应用新的时间间隔
if (isRunning) {
clearInterval(intervalId);
intervalId = setInterval(() => {
openRandomNote();
}, parseInt(newSettings.randomInterval || 5) * 1000);
}
}
});
}

logseq.ready(main).catch(console.error);
2 changes: 2 additions & 0 deletions mise.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[tools]
node = "lts"
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 10 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "logseq-random-note",
"version": "1.1.2",
"version": "1.1.12",
"author": "TankCool",
"main": "dist/index.html",
"description": "Random walk through your Logseq notes.",
Expand All @@ -22,5 +22,13 @@
"license": "MIT",
"browserslist": [
"chrome 80"
]
],
"pnpm": {
"onlyBuiltDependencies": [
"core-js",
"deasync",
"fsevents",
"parcel-bundler"
]
}
}
Loading