Initial commit: obsidian to gitea
This commit is contained in:
19
.obsidian/plugins/attachment-management/data.json
vendored
Normal file
19
.obsidian/plugins/attachment-management/data.json
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"attachPath": {
|
||||
"attachmentRoot": "",
|
||||
"saveAttE": "obsFolder",
|
||||
"attachmentPath": "${notepath}/${notename}.figs",
|
||||
"attachFormat": "${date}",
|
||||
"type": "GLOBAL",
|
||||
"extensionOverride": []
|
||||
},
|
||||
"dateFormat": "YYMMDD-HHmmss",
|
||||
"excludeExtensionPattern": "",
|
||||
"autoRenameAttachment": true,
|
||||
"excludedPaths": "",
|
||||
"excludePathsArray": [],
|
||||
"excludeSubpaths": false,
|
||||
"originalNameStorage": [],
|
||||
"overridePath": {},
|
||||
"disableNotification": false
|
||||
}
|
||||
2078
.obsidian/plugins/attachment-management/main.js
vendored
Normal file
2078
.obsidian/plugins/attachment-management/main.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
.obsidian/plugins/attachment-management/manifest.json
vendored
Normal file
10
.obsidian/plugins/attachment-management/manifest.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "attachment-management",
|
||||
"name": "Attachment Management",
|
||||
"version": "0.9.16",
|
||||
"description": "Customize your attachment path of notes independently with variables and auto rename it on change.",
|
||||
"author": "trganda",
|
||||
"authorUrl": "https://github.com/trganda",
|
||||
"fundingUrl": "https://paypal.me/trganda",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
15
.obsidian/plugins/attachment-management/styles.css
vendored
Normal file
15
.obsidian/plugins/attachment-management/styles.css
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
|
||||
This CSS file will be included with your plugin, and
|
||||
available in the app when your plugin is enabled.
|
||||
|
||||
If your plugin does not need CSS, delete this file.
|
||||
|
||||
*/
|
||||
.attach_management_sub_setting {
|
||||
padding-left: 2em;
|
||||
}
|
||||
.attach_management_sub_setting + .attach_management_sub_setting {
|
||||
padding-left: 0;
|
||||
margin-left: 2em;
|
||||
}
|
||||
3747
.obsidian/plugins/copy-as-html/main.js
vendored
Normal file
3747
.obsidian/plugins/copy-as-html/main.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
.obsidian/plugins/copy-as-html/manifest.json
vendored
Normal file
10
.obsidian/plugins/copy-as-html/manifest.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "copy-as-html",
|
||||
"name": "Copy as HTML",
|
||||
"version": "1.1.3",
|
||||
"minAppVersion": "0.12.0",
|
||||
"description": "This is a simple plugin that converts the selected markdown to HTML and copies it to the clipboard.",
|
||||
"author": "Bailey Jennings",
|
||||
"authorUrl": "https://twitter.com/Bailey_Jennings",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
182
.obsidian/plugins/obsidian-focus-mode/main.js
vendored
Normal file
182
.obsidian/plugins/obsidian-focus-mode/main.js
vendored
Normal file
@@ -0,0 +1,182 @@
|
||||
/*
|
||||
THIS IS A GENERATED/BUNDLED FILE BY ROLLUP
|
||||
if you want to view the source visit the plugins github repository
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
var obsidian = require('obsidian');
|
||||
|
||||
/******************************************************************************
|
||||
Copyright (c) Microsoft Corporation.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
***************************************************************************** */
|
||||
|
||||
function __awaiter(thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
}
|
||||
|
||||
class FocusMode extends obsidian.Plugin {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
this.focusModeActive = false;
|
||||
this.maximisedClass = "maximised";
|
||||
this.focusModeClass = "focus-mode";
|
||||
this.superFocusModeClass = "super-focus-mode";
|
||||
}
|
||||
storeSplitsValues() {
|
||||
// @ts-ignore
|
||||
this.leftSplitCollapsed = this.app.workspace.leftSplit.collapsed;
|
||||
// @ts-ignore
|
||||
this.rightSplitCollapsed = this.app.workspace.rightSplit.collapsed;
|
||||
}
|
||||
collapseSplits() {
|
||||
// @ts-ignore
|
||||
this.app.workspace.leftSplit.collapse();
|
||||
// @ts-ignore
|
||||
this.app.workspace.rightSplit.collapse();
|
||||
}
|
||||
restoreSplits() {
|
||||
if (!this.leftSplitCollapsed) {
|
||||
// @ts-ignore
|
||||
this.app.workspace.leftSplit.expand();
|
||||
}
|
||||
if (!this.rightSplitCollapsed) {
|
||||
// @ts-ignore
|
||||
this.app.workspace.rightSplit.expand();
|
||||
}
|
||||
}
|
||||
removeExtraneousClasses() {
|
||||
if (
|
||||
// @ts-ignore
|
||||
this.app.workspace.rootSplit.containerEl.hasClass(this.maximisedClass)) {
|
||||
// @ts-ignore
|
||||
this.app.workspace.rootSplit.containerEl.removeClass(this.maximisedClass);
|
||||
// @ts-ignore
|
||||
this.app.workspace.onLayoutChange();
|
||||
}
|
||||
if (document.body.classList.contains(this.superFocusModeClass)) {
|
||||
document.body.classList.remove(this.superFocusModeClass);
|
||||
}
|
||||
}
|
||||
sharedFocusModeCommands() {
|
||||
this.focusModeActive = true;
|
||||
// @ts-ignore
|
||||
this.app.on("active-leaf-change", () => {
|
||||
try {
|
||||
// @ts-ignore
|
||||
this.app.workspace.activeLeaf.view.editor.blur();
|
||||
// @ts-ignore
|
||||
this.app.workspace.activeLeaf.view.editor.focus();
|
||||
// @ts-ignore
|
||||
this.app.workspace.activeLeaf.view.editor.refresh();
|
||||
}
|
||||
catch (ignore) { }
|
||||
});
|
||||
if (!document.body.classList.contains(this.focusModeClass)) {
|
||||
this.storeSplitsValues();
|
||||
}
|
||||
this.collapseSplits();
|
||||
}
|
||||
enableSuperFocusMode() {
|
||||
this.sharedFocusModeCommands();
|
||||
// @ts-ignore
|
||||
this.app.workspace.rootSplit.containerEl.toggleClass(this.maximisedClass,
|
||||
// @ts-ignore
|
||||
!this.app.workspace.rootSplit.containerEl.hasClass(this.maximisedClass));
|
||||
document.body.classList.toggle(this.superFocusModeClass, !document.body.classList.contains(this.superFocusModeClass));
|
||||
if (!document.body.classList.contains(this.focusModeClass)) {
|
||||
document.body.classList.add(this.focusModeClass);
|
||||
}
|
||||
if (document.body.classList.contains(this.superFocusModeClass)) {
|
||||
Array.from(document.querySelectorAll(`.${this.superFocusModeClass} .workspace-split`)).forEach((node) => {
|
||||
const theNode = node;
|
||||
const hasActiveKids = theNode.querySelector(".mod-active");
|
||||
if (hasActiveKids) {
|
||||
theNode.style.display = "flex";
|
||||
}
|
||||
else {
|
||||
theNode.style.display = "none";
|
||||
}
|
||||
});
|
||||
}
|
||||
// @ts-ignore
|
||||
this.app.workspace.onLayoutChange();
|
||||
}
|
||||
enableFocusMode() {
|
||||
this.sharedFocusModeCommands();
|
||||
this.removeExtraneousClasses();
|
||||
document.body.classList.toggle(this.focusModeClass, !document.body.classList.contains(this.focusModeClass));
|
||||
}
|
||||
disableFocusMode() {
|
||||
this.removeExtraneousClasses();
|
||||
if (document.body.classList.contains(this.focusModeClass)) {
|
||||
document.body.classList.remove(this.focusModeClass);
|
||||
}
|
||||
this.restoreSplits();
|
||||
Array.from(document.querySelectorAll(".workspace-split")).forEach((node) => {
|
||||
const theNode = node;
|
||||
theNode.style.display = "flex";
|
||||
});
|
||||
this.focusModeActive = false;
|
||||
}
|
||||
toggleFocusMode(superFocus = false) {
|
||||
if (superFocus) {
|
||||
this.enableSuperFocusMode();
|
||||
}
|
||||
else if (this.focusModeActive) {
|
||||
this.disableFocusMode();
|
||||
}
|
||||
else {
|
||||
this.enableFocusMode();
|
||||
}
|
||||
}
|
||||
onload() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
console.log("Loading Focus Mode plugin ...");
|
||||
this.addRibbonIcon("enter", "Toggle Focus Mode (Shift + Click to show active pane only)", (event) => {
|
||||
this.toggleFocusMode(event.shiftKey);
|
||||
});
|
||||
this.addCommand({
|
||||
id: "toggle-focus-mode",
|
||||
name: "Toggle Focus Mode",
|
||||
callback: () => {
|
||||
this.toggleFocusMode();
|
||||
},
|
||||
hotkeys: [{ modifiers: ["Alt", "Mod"], key: "Z" }],
|
||||
});
|
||||
this.addCommand({
|
||||
id: "toggle-super-focus-mode",
|
||||
name: "Toggle Super Focus Mode (Active pane only)",
|
||||
callback: () => {
|
||||
this.toggleFocusMode(true);
|
||||
},
|
||||
hotkeys: [{ modifiers: ["Alt", "Mod", "Shift"], key: "Z" }],
|
||||
});
|
||||
});
|
||||
}
|
||||
onunload() {
|
||||
console.log("Unloading Focus Mode plugin ...");
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = FocusMode;
|
||||
|
||||
|
||||
/* nosourcemap */
|
||||
10
.obsidian/plugins/obsidian-focus-mode/manifest.json
vendored
Normal file
10
.obsidian/plugins/obsidian-focus-mode/manifest.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "obsidian-focus-mode",
|
||||
"name": "Focus Mode",
|
||||
"version": "1.11.5",
|
||||
"minAppVersion": "0.9.12",
|
||||
"description": "Add Focus Mode to Obsidian.",
|
||||
"author": "ryanpcmcquen",
|
||||
"authorUrl": "https://github.com/ryanpcmcquen",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
44
.obsidian/plugins/obsidian-focus-mode/styles.css
vendored
Normal file
44
.obsidian/plugins/obsidian-focus-mode/styles.css
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
.focus-mode .cm-s-obsidian .cm-line:not(.cm-active),
|
||||
.focus-mode .cm-s-obsidian div:not(.CodeMirror-activeline) > .CodeMirror-line {
|
||||
opacity: 0.85;
|
||||
filter: saturate(0.85);
|
||||
}
|
||||
|
||||
.focus-mode .status-bar,
|
||||
.focus-mode .view-actions,
|
||||
.focus-mode .view-header-icon,
|
||||
.focus-mode .inline-title,
|
||||
.focus-mode .workspace-ribbon:not(.mod-left),
|
||||
.focus-mode .workspace-split.maximised .workspace-leaf:not(.mod-active),
|
||||
.focus-mode
|
||||
.workspace-split.maximised
|
||||
.workspace-leaf.mod-active
|
||||
~ .workspace-split,
|
||||
.focus-mode.plugin-tabs .stayopen .view-header,
|
||||
.super-focus-mode .workspace-tabs:not(.mod-active) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.super-focus-mode .workspace-tab-header-container {
|
||||
padding-left: var(--size-4-8);
|
||||
}
|
||||
|
||||
.focus-mode .view-content {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.focus-mode .workspace-split.maximised .workspace-leaf.mod-active {
|
||||
/* 4px is for scrollbar width: */
|
||||
flex-basis: calc(100% - 4px);
|
||||
}
|
||||
|
||||
.focus-mode .workspace-ribbon,
|
||||
.focus-mode .sidebar-toggle-button {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.focus-mode .workspace-ribbon::before,
|
||||
.focus-mode
|
||||
.side-dock-ribbon-action[aria-label="Toggle Focus Mode (Shift + Click to show active pane only)"] {
|
||||
visibility: visible;
|
||||
}
|
||||
3294
.obsidian/plugins/obsidian-image-toolkit/main.js
vendored
Normal file
3294
.obsidian/plugins/obsidian-image-toolkit/main.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
.obsidian/plugins/obsidian-image-toolkit/manifest.json
vendored
Normal file
10
.obsidian/plugins/obsidian-image-toolkit/manifest.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "obsidian-image-toolkit",
|
||||
"name": "Image Toolkit",
|
||||
"version": "1.4.3",
|
||||
"minAppVersion": "1.8.7",
|
||||
"description": "Click images to preview with zoom, move, rotate, flip, invert, and copy.",
|
||||
"author": "Xiangru",
|
||||
"authorUrl": "https://github.com/sissilab",
|
||||
"isDesktopOnly": true
|
||||
}
|
||||
319
.obsidian/plugins/obsidian-image-toolkit/styles.css
vendored
Normal file
319
.obsidian/plugins/obsidian-image-toolkit/styles.css
vendored
Normal file
@@ -0,0 +1,319 @@
|
||||
body {
|
||||
--layer-image-toolkit-popup: 1024;
|
||||
--layer-image-toolkit-player: 1025;
|
||||
--layer-image-toolkit-notice: 1026;
|
||||
}
|
||||
|
||||
.notice-container {
|
||||
z-index: var(--layer-image-toolkit-notice);
|
||||
}
|
||||
|
||||
.oit li::before {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.image-toolkit-img-invert {
|
||||
filter: invert(1) hue-rotate(180deg);
|
||||
mix-blend-mode: screen;
|
||||
}
|
||||
|
||||
.oit-normal {
|
||||
position: fixed;
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: rgba(0, 0, 0, .6);
|
||||
z-index: var(--layer-image-toolkit-popup);
|
||||
display: none;
|
||||
}
|
||||
|
||||
.oit-pin {
|
||||
position: fixed;
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
z-index: var(--layer-image-toolkit-popup);
|
||||
display: none;
|
||||
}
|
||||
|
||||
.oit .oit-img-container {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.oit .oit-img-container .oit-img-view {
|
||||
max-height: none;
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
.oit-pin .oit-img-container .oit-img-view {
|
||||
position: fixed;
|
||||
pointer-events: auto;
|
||||
box-shadow: 0 0 5px;
|
||||
}
|
||||
|
||||
.oit-pin .oit-img-container .oit-img-view:hover {
|
||||
box-shadow: 0 0 6px #55acc6;
|
||||
}
|
||||
|
||||
.oit .img-default-background {
|
||||
background-position: 0 0, 5px 5px !important;
|
||||
background-size: 10px 10px !important;
|
||||
background-image: linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee 100%), linear-gradient(45deg, #eee 25%, #fff 25%, #fff 75%, #eee 75%, #eee 100%) !important;
|
||||
}
|
||||
|
||||
.oit .oit-img-container .oit-img-view:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.oit-normal .img-close {
|
||||
position: absolute;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
top: 0;
|
||||
right: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.oit .oit-img-tip {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
font-size: 12px;
|
||||
line-height: 20px;
|
||||
height: 20px;
|
||||
width: 50px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
border-radius: 10px;
|
||||
background-color: rgba(0, 0, 0, .4);
|
||||
pointer-events: none;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/*region img-player*/
|
||||
.oit .img-player {
|
||||
display: none;
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
top: 0;
|
||||
cursor: none;
|
||||
background-color: #000;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.oit .img-player > img {
|
||||
display: inline;
|
||||
float: none;
|
||||
padding: 0;
|
||||
max-height: none;
|
||||
transform: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
/*endregion*/
|
||||
|
||||
.oit-normal .oit-img-footer {
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
bottom: 5px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
/*region oit-img-title*/
|
||||
.oit-normal .oit-img-footer .oit-img-title {
|
||||
font-size: 12px;
|
||||
line-height: 1;
|
||||
display: inline-block;
|
||||
max-width: 90%;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
margin: 5px;
|
||||
opacity: .8;
|
||||
color: #fff;
|
||||
/* filter: alpha(opacity=80) */
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .oit-img-title:hover {
|
||||
/* opacity: 1; */
|
||||
color: #fff;
|
||||
font-size: 15px;
|
||||
background-color: rgba(0, 0, 0, .3);
|
||||
border-radius: 8px;
|
||||
line-height: 1.5;
|
||||
/* filter: alpha(opacity=100) */
|
||||
}
|
||||
/*endregion*/
|
||||
|
||||
/*region toolbar*/
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar {
|
||||
width: 385px;
|
||||
height: 30px;
|
||||
margin: 0 auto 5px;
|
||||
padding: 3px 0;
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar:hover {
|
||||
background-color: rgba(0, 0, 0, .3);
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar > li {
|
||||
float: left;
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
margin: 0 5px;
|
||||
padding: 0;
|
||||
line-height: 0;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar > li:hover {
|
||||
animation: bounce .5s cubic-bezier(0.51, 0.23, 0.02, 0.96)
|
||||
}
|
||||
|
||||
@keyframes bounce {
|
||||
0% {
|
||||
transform: scale(1, 1);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: scale(0.85, 1.1) translateY(-5px);
|
||||
}
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_zoom_to_100::before,
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_zoom_in::before,
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_zoom_out::before,
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_full_screen::before,
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_refresh::before,
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_rotate_left::before,
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_rotate_right::before,
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_scale_x::before,
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_scale_y::before,
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_invert_color::before,
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_copy::before {
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
display: block;
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
color: transparent;
|
||||
background-image: url(data:image/png;base64,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);
|
||||
background-repeat: no-repeat
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_zoom_to_100::before {
|
||||
content: 'Zoom to Actual Size';
|
||||
background-position: 0 0
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_zoom_in::before {
|
||||
content: 'Zoom In';
|
||||
background-position: -25px 0
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_zoom_out::before {
|
||||
content: 'Zoom Out';
|
||||
background-position: -50px 0
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_full_screen::before {
|
||||
content: 'Full Screen';
|
||||
background-position: -75px 0
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_refresh::before {
|
||||
content: 'Refresh';
|
||||
background-position: -100px 0
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_rotate_left::before {
|
||||
content: 'Rotate Left';
|
||||
background-position: -125px 0
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_rotate_right::before {
|
||||
content: 'Rotate Right';
|
||||
background-position: -150px 0
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_scale_x::before {
|
||||
content: 'Scale x';
|
||||
background-position: -175px 0
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_scale_y::before {
|
||||
content: 'Scale y';
|
||||
background-position: -200px 0
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_invert_color::before {
|
||||
content: 'Invert color';
|
||||
background-position: -225px 0
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .oit-img-toolbar .toolbar_copy::before {
|
||||
content: 'Copy';
|
||||
background-position: -250px 0
|
||||
}
|
||||
/*endregion*/
|
||||
|
||||
/*region gallery-navbar*/
|
||||
.oit-normal .oit-img-footer .gallery-navbar {
|
||||
position: relative;
|
||||
flex: 0 0 auto;
|
||||
overflow: hidden;
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
width: 100%;
|
||||
height: 60px;
|
||||
margin-top: 20px;
|
||||
background-color: rgba(0, 0, 0, .1);
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .gallery-navbar:hover {
|
||||
background-color: rgba(0, 0, 0, .8);
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .gallery-navbar .gallery-list {
|
||||
display: flex;
|
||||
transform: translateX(0px);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .gallery-navbar .gallery-list .gallery-active {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .gallery-navbar .gallery-list .img-border-active {
|
||||
margin-top: 1px;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: red;
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .gallery-navbar .gallery-list > li {
|
||||
width: 48px;
|
||||
height: 58px;
|
||||
opacity: .3;
|
||||
color: transparent;
|
||||
margin: 2px 1px;
|
||||
padding: 0;
|
||||
border-radius: 0;
|
||||
/* transition: all 100ms linear; */
|
||||
}
|
||||
|
||||
.oit-normal .oit-img-footer .gallery-navbar .gallery-list img {
|
||||
width: 46px;
|
||||
height: 56px;
|
||||
}
|
||||
/*endregion*/
|
||||
7
.obsidian/plugins/oz-clear-unused-images/data.json
vendored
Normal file
7
.obsidian/plugins/oz-clear-unused-images/data.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"deleteOption": "system-trash",
|
||||
"logsModal": true,
|
||||
"excludedFolders": "",
|
||||
"ribbonIcon": false,
|
||||
"excludeSubfolders": false
|
||||
}
|
||||
4
.obsidian/plugins/oz-clear-unused-images/main.js
vendored
Normal file
4
.obsidian/plugins/oz-clear-unused-images/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11
.obsidian/plugins/oz-clear-unused-images/manifest.json
vendored
Normal file
11
.obsidian/plugins/oz-clear-unused-images/manifest.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "oz-clear-unused-images",
|
||||
"name": "Clear Unused Images",
|
||||
"version": "1.1.1",
|
||||
"minAppVersion": "0.11.13",
|
||||
"description": "Clear the images that you are not using anymore in your markdown notes to save space.",
|
||||
"author": "Ozan",
|
||||
"authorUrl": "https://www.ozan.pl",
|
||||
"fundingUrl": "https://ko-fi.com/ozante",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
10
.obsidian/plugins/oz-clear-unused-images/styles.css
vendored
Normal file
10
.obsidian/plugins/oz-clear-unused-images/styles.css
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
.unused-images-logs {
|
||||
margin-bottom: 13px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.unused-images-center-wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
32
.obsidian/plugins/periodic-notes/data.json
vendored
Normal file
32
.obsidian/plugins/periodic-notes/data.json
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"showGettingStartedBanner": false,
|
||||
"hasMigratedDailyNoteSettings": true,
|
||||
"hasMigratedWeeklyNoteSettings": false,
|
||||
"daily": {
|
||||
"format": "YYMMDD",
|
||||
"folder": "period/daily/26",
|
||||
"template": "",
|
||||
"enabled": true
|
||||
},
|
||||
"weekly": {
|
||||
"format": "YY-WW",
|
||||
"template": "",
|
||||
"folder": "period/weekly",
|
||||
"enabled": true
|
||||
},
|
||||
"monthly": {
|
||||
"format": "",
|
||||
"template": "",
|
||||
"folder": ""
|
||||
},
|
||||
"quarterly": {
|
||||
"format": "",
|
||||
"template": "",
|
||||
"folder": ""
|
||||
},
|
||||
"yearly": {
|
||||
"format": "",
|
||||
"template": "",
|
||||
"folder": ""
|
||||
}
|
||||
}
|
||||
5561
.obsidian/plugins/periodic-notes/main.js
vendored
Normal file
5561
.obsidian/plugins/periodic-notes/main.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
.obsidian/plugins/periodic-notes/manifest.json
vendored
Normal file
10
.obsidian/plugins/periodic-notes/manifest.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "periodic-notes",
|
||||
"name": "Periodic Notes",
|
||||
"description": "Create/manage your daily, weekly, and monthly notes",
|
||||
"version": "0.0.17",
|
||||
"author": "Liam Cain",
|
||||
"authorUrl": "https://github.com/liamcain/",
|
||||
"isDesktopOnly": false,
|
||||
"minAppVersion": "0.10.11"
|
||||
}
|
||||
30
.obsidian/plugins/periodic-notes/styles.css
vendored
Normal file
30
.obsidian/plugins/periodic-notes/styles.css
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
.periodic-modal {
|
||||
min-width: 40vw;
|
||||
}
|
||||
|
||||
.settings-banner {
|
||||
background-color: var(--background-primary-alt);
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
margin-bottom: 1em;
|
||||
margin-top: 1em;
|
||||
padding: 1.5em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.settings-banner h3 {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.settings-banner h4 {
|
||||
margin-bottom: 0.25em;
|
||||
}
|
||||
|
||||
.has-error {
|
||||
color: var(--text-error);
|
||||
}
|
||||
|
||||
input.has-error {
|
||||
color: var(--text-error);
|
||||
border-color: var(--text-error);
|
||||
}
|
||||
1
.obsidian/plugins/remember-cursor-position/cursor-positions.json
vendored
Normal file
1
.obsidian/plugins/remember-cursor-position/cursor-positions.json
vendored
Normal file
File diff suppressed because one or more lines are too long
302
.obsidian/plugins/remember-cursor-position/main.js
vendored
Normal file
302
.obsidian/plugins/remember-cursor-position/main.js
vendored
Normal file
@@ -0,0 +1,302 @@
|
||||
/*
|
||||
THIS IS A GENERATED/BUNDLED FILE BY ROLLUP
|
||||
if you want to view the source visit the plugins github repository
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
var obsidian = require('obsidian');
|
||||
|
||||
/******************************************************************************
|
||||
Copyright (c) Microsoft Corporation.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
***************************************************************************** */
|
||||
|
||||
function __awaiter(thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
}
|
||||
|
||||
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
||||
var e = new Error(message);
|
||||
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
||||
};
|
||||
|
||||
const SAFE_DB_FLUSH_INTERVAL = 5000;
|
||||
const DEFAULT_SETTINGS = {
|
||||
dbFileName: '.obsidian/plugins/remember-cursor-position/cursor-positions.json',
|
||||
delayAfterFileOpening: 100,
|
||||
saveTimer: SAFE_DB_FLUSH_INTERVAL,
|
||||
};
|
||||
class RememberCursorPosition extends obsidian.Plugin {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
this.loadedLeafIdList = [];
|
||||
this.loadingFile = false;
|
||||
}
|
||||
onload() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
yield this.loadSettings();
|
||||
try {
|
||||
this.db = yield this.readDb();
|
||||
this.lastSavedDb = yield this.readDb();
|
||||
}
|
||||
catch (e) {
|
||||
console.error("Remember Cursor Position plugin can\'t read database: " + e);
|
||||
this.db = {};
|
||||
this.lastSavedDb = {};
|
||||
}
|
||||
this.addSettingTab(new SettingTab(this.app, this));
|
||||
this.registerEvent(this.app.workspace.on('file-open', (file) => this.restoreEphemeralState()));
|
||||
this.registerEvent(this.app.workspace.on('quit', () => { this.writeDb(this.db); }));
|
||||
this.registerEvent(this.app.vault.on('rename', (file, oldPath) => this.renameFile(file, oldPath)));
|
||||
this.registerEvent(this.app.vault.on('delete', (file) => this.deleteFile(file)));
|
||||
//todo: replace by scroll and mouse cursor move events
|
||||
this.registerInterval(window.setInterval(() => this.checkEphemeralStateChanged(), 100));
|
||||
this.registerInterval(window.setInterval(() => this.writeDb(this.db), this.settings.saveTimer));
|
||||
this.restoreEphemeralState();
|
||||
});
|
||||
}
|
||||
renameFile(file, oldPath) {
|
||||
let newName = file.path;
|
||||
let oldName = oldPath;
|
||||
this.db[newName] = this.db[oldName];
|
||||
delete this.db[oldName];
|
||||
}
|
||||
deleteFile(file) {
|
||||
let fileName = file.path;
|
||||
delete this.db[fileName];
|
||||
}
|
||||
checkEphemeralStateChanged() {
|
||||
var _a;
|
||||
let fileName = (_a = this.app.workspace.getActiveFile()) === null || _a === void 0 ? void 0 : _a.path;
|
||||
//waiting for load new file
|
||||
if (!fileName || !this.lastLoadedFileName || fileName != this.lastLoadedFileName || this.loadingFile)
|
||||
return;
|
||||
let st = this.getEphemeralState();
|
||||
if (!this.lastEphemeralState)
|
||||
this.lastEphemeralState = st;
|
||||
if (!isNaN(st.scroll) && !this.isEphemeralStatesEquals(st, this.lastEphemeralState)) {
|
||||
this.saveEphemeralState(st);
|
||||
this.lastEphemeralState = st;
|
||||
}
|
||||
}
|
||||
isEphemeralStatesEquals(state1, state2) {
|
||||
if (state1.cursor && !state2.cursor)
|
||||
return false;
|
||||
if (!state1.cursor && state2.cursor)
|
||||
return false;
|
||||
if (state1.cursor) {
|
||||
if (state1.cursor.from.ch != state2.cursor.from.ch)
|
||||
return false;
|
||||
if (state1.cursor.from.line != state2.cursor.from.line)
|
||||
return false;
|
||||
if (state1.cursor.to.ch != state2.cursor.to.ch)
|
||||
return false;
|
||||
if (state1.cursor.to.line != state2.cursor.to.line)
|
||||
return false;
|
||||
}
|
||||
if (state1.scroll && !state2.scroll)
|
||||
return false;
|
||||
if (!state1.scroll && state2.scroll)
|
||||
return false;
|
||||
if (state1.scroll && state1.scroll != state2.scroll)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
saveEphemeralState(st) {
|
||||
var _a;
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let fileName = (_a = this.app.workspace.getActiveFile()) === null || _a === void 0 ? void 0 : _a.path;
|
||||
if (fileName && fileName == this.lastLoadedFileName) { //do not save if file changed or was not loaded
|
||||
this.db[fileName] = st;
|
||||
}
|
||||
});
|
||||
}
|
||||
restoreEphemeralState() {
|
||||
var _a, _b, _c;
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let fileName = (_a = this.app.workspace.getActiveFile()) === null || _a === void 0 ? void 0 : _a.path;
|
||||
if (fileName && this.loadingFile && this.lastLoadedFileName == fileName) //if already started loading
|
||||
return;
|
||||
let activeLeaf = this.app.workspace.getMostRecentLeaf();
|
||||
if (activeLeaf && this.loadedLeafIdList.includes(activeLeaf.id + ':' + activeLeaf.getViewState().state.file))
|
||||
return;
|
||||
this.loadedLeafIdList = [];
|
||||
this.app.workspace.iterateAllLeaves((leaf) => {
|
||||
if (leaf.getViewState().type === "markdown") {
|
||||
this.loadedLeafIdList.push(leaf.id + ':' + leaf.getViewState().state.file);
|
||||
}
|
||||
});
|
||||
this.loadingFile = true;
|
||||
if (this.lastLoadedFileName != fileName) {
|
||||
this.lastEphemeralState = {};
|
||||
this.lastLoadedFileName = fileName;
|
||||
let st;
|
||||
if (fileName) {
|
||||
st = this.db[fileName];
|
||||
if (st) {
|
||||
//waiting for load note
|
||||
yield this.delay(this.settings.delayAfterFileOpening);
|
||||
let scroll;
|
||||
for (let i = 0; i < 20; i++) {
|
||||
scroll = (_c = (_b = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView)) === null || _b === void 0 ? void 0 : _b.currentMode) === null || _c === void 0 ? void 0 : _c.getScroll();
|
||||
if (scroll !== null)
|
||||
break;
|
||||
yield this.delay(10);
|
||||
}
|
||||
// TODO: if note opened by link like [link](note.md#header), do not scroll it
|
||||
yield this.delay(10);
|
||||
this.setEphemeralState(st);
|
||||
}
|
||||
}
|
||||
this.lastEphemeralState = st;
|
||||
}
|
||||
this.loadingFile = false;
|
||||
});
|
||||
}
|
||||
readDb() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let db = {};
|
||||
if (yield this.app.vault.adapter.exists(this.settings.dbFileName)) {
|
||||
let data = yield this.app.vault.adapter.read(this.settings.dbFileName);
|
||||
db = JSON.parse(data);
|
||||
}
|
||||
return db;
|
||||
});
|
||||
}
|
||||
writeDb(db) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
//create folder for db file if not exist
|
||||
let newParentFolder = this.settings.dbFileName.substring(0, this.settings.dbFileName.lastIndexOf("/"));
|
||||
if (!(yield this.app.vault.adapter.exists(newParentFolder)))
|
||||
this.app.vault.adapter.mkdir(newParentFolder);
|
||||
if (JSON.stringify(this.db) !== JSON.stringify(this.lastSavedDb)) {
|
||||
this.app.vault.adapter.write(this.settings.dbFileName, JSON.stringify(db));
|
||||
this.lastSavedDb = JSON.parse(JSON.stringify(db));
|
||||
}
|
||||
});
|
||||
}
|
||||
getEphemeralState() {
|
||||
// let state: EphemeralState = this.app.workspace.getActiveViewOfType(MarkdownView)?.getEphemeralState(); //doesn't work properly
|
||||
var _a, _b, _c;
|
||||
let state = {};
|
||||
state.scroll = Number((_c = (_b = (_a = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView)) === null || _a === void 0 ? void 0 : _a.currentMode) === null || _b === void 0 ? void 0 : _b.getScroll()) === null || _c === void 0 ? void 0 : _c.toFixed(4));
|
||||
let editor = this.getEditor();
|
||||
if (editor) {
|
||||
let from = editor.getCursor("anchor");
|
||||
let to = editor.getCursor("head");
|
||||
if (from && to) {
|
||||
state.cursor = {
|
||||
from: {
|
||||
ch: from.ch,
|
||||
line: from.line
|
||||
},
|
||||
to: {
|
||||
ch: to.ch,
|
||||
line: to.line
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
return state;
|
||||
}
|
||||
setEphemeralState(state) {
|
||||
const view = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView);
|
||||
if (state.cursor) {
|
||||
let editor = this.getEditor();
|
||||
if (editor) {
|
||||
editor.setSelection(state.cursor.from, state.cursor.to);
|
||||
}
|
||||
}
|
||||
if (view && state.scroll) {
|
||||
view.setEphemeralState(state);
|
||||
// view.previewMode.applyScroll(state.scroll);
|
||||
// view.sourceMode.applyScroll(state.scroll);
|
||||
}
|
||||
}
|
||||
getEditor() {
|
||||
var _a;
|
||||
return (_a = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView)) === null || _a === void 0 ? void 0 : _a.editor;
|
||||
}
|
||||
loadSettings() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
|
||||
if ((settings === null || settings === void 0 ? void 0 : settings.saveTimer) < SAFE_DB_FLUSH_INTERVAL) {
|
||||
settings.saveTimer = SAFE_DB_FLUSH_INTERVAL;
|
||||
}
|
||||
this.settings = settings;
|
||||
});
|
||||
}
|
||||
saveSettings() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
yield this.saveData(this.settings);
|
||||
});
|
||||
}
|
||||
delay(ms) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
});
|
||||
}
|
||||
}
|
||||
class SettingTab extends obsidian.PluginSettingTab {
|
||||
constructor(app, plugin) {
|
||||
super(app, plugin);
|
||||
this.plugin = plugin;
|
||||
}
|
||||
display() {
|
||||
let { containerEl } = this;
|
||||
containerEl.empty();
|
||||
containerEl.createEl('h2', { text: 'Remember cursor position - Settings' });
|
||||
new obsidian.Setting(containerEl)
|
||||
.setName('Data file name')
|
||||
.setDesc('Save positions to this file')
|
||||
.addText((text) => text
|
||||
.setPlaceholder('Example: cursor-positions.json')
|
||||
.setValue(this.plugin.settings.dbFileName)
|
||||
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
||||
this.plugin.settings.dbFileName = value;
|
||||
yield this.plugin.saveSettings();
|
||||
})));
|
||||
new obsidian.Setting(containerEl)
|
||||
.setName('Delay after opening a new note')
|
||||
.setDesc("This plugin shouldn't scroll if you used a link to the note header like [link](note.md#header). If it did, then increase the delay until everything works. If you are not using links to page sections, set the delay to zero (slider to the left). Slider values: 0-300 ms (default value: 100 ms).")
|
||||
.addSlider((text) => text
|
||||
.setLimits(0, 300, 10)
|
||||
.setValue(this.plugin.settings.delayAfterFileOpening)
|
||||
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
||||
this.plugin.settings.delayAfterFileOpening = value;
|
||||
yield this.plugin.saveSettings();
|
||||
})));
|
||||
new obsidian.Setting(containerEl)
|
||||
.setName('Delay between saving the cursor position to file')
|
||||
.setDesc("Useful for multi-device users. If you don't want to wait until closing Obsidian to the cursor position been saved.")
|
||||
.addSlider((text) => text
|
||||
.setLimits(SAFE_DB_FLUSH_INTERVAL, SAFE_DB_FLUSH_INTERVAL * 10, 10)
|
||||
.setValue(this.plugin.settings.saveTimer)
|
||||
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
||||
this.plugin.settings.saveTimer = value;
|
||||
yield this.plugin.saveSettings();
|
||||
})));
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = RememberCursorPosition;
|
||||
|
||||
|
||||
/* nosourcemap */
|
||||
10
.obsidian/plugins/remember-cursor-position/manifest.json
vendored
Normal file
10
.obsidian/plugins/remember-cursor-position/manifest.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "remember-cursor-position",
|
||||
"name": "Remember cursor position",
|
||||
"version": "1.0.9",
|
||||
"minAppVersion": "0.9.12",
|
||||
"description": "Remember cursor and scroll position for each note",
|
||||
"author": "Dmitry Savosh",
|
||||
"authorUrl": "https://github.com/dy-sh/",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
1
.obsidian/plugins/remotely-save/.gitignore
vendored
Normal file
1
.obsidian/plugins/remotely-save/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
data.json
|
||||
235
.obsidian/plugins/remotely-save/main.js
vendored
Normal file
235
.obsidian/plugins/remotely-save/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11
.obsidian/plugins/remotely-save/manifest.json
vendored
Normal file
11
.obsidian/plugins/remotely-save/manifest.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "remotely-save",
|
||||
"name": "Remotely Save",
|
||||
"version": "0.5.25",
|
||||
"minAppVersion": "0.13.21",
|
||||
"description": "Yet another unofficial plugin allowing users to synchronize notes between local device and the cloud service.",
|
||||
"author": "fyears",
|
||||
"authorUrl": "https://github.com/fyears",
|
||||
"isDesktopOnly": false,
|
||||
"fundingUrl": "https://remotelysave.com"
|
||||
}
|
||||
244
.obsidian/plugins/remotely-save/styles.css
vendored
Normal file
244
.obsidian/plugins/remotely-save/styles.css
vendored
Normal file
@@ -0,0 +1,244 @@
|
||||
/* set the styles */
|
||||
|
||||
.password-second-confirm {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.password-disclaimer {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.encryptionmethod-second-confirm {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.settings-auth-related {
|
||||
border-top: 1px solid var(--background-modifier-border);
|
||||
padding-top: 18px;
|
||||
}
|
||||
|
||||
.settings-percentage-custom-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.settings-encryption-method-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.s3-disclaimer {
|
||||
font-weight: bold;
|
||||
}
|
||||
.s3-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.dropbox-disclaimer {
|
||||
font-weight: bold;
|
||||
}
|
||||
.dropbox-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.dropbox-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.dropbox-revoke-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.onedrive-disclaimer {
|
||||
font-weight: bold;
|
||||
}
|
||||
.onedrive-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.onedrive-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.onedrive-revoke-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.onedrivefull-allow-to-use-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.onedrivefull-disclaimer {
|
||||
font-weight: bold;
|
||||
}
|
||||
.onedrivefull-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.onedrivefull-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.onedrivefull-revoke-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.webdav-disclaimer {
|
||||
font-weight: bold;
|
||||
}
|
||||
.webdav-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.webdav-customheaders-textarea {
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
.webdis-disclaimer {
|
||||
font-weight: bold;
|
||||
}
|
||||
.webdis-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.googledrive-disclaimer {
|
||||
font-weight: bold;
|
||||
}
|
||||
.googledrive-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.googledrive-allow-to-use-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.googledrive-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.googledrive-revoke-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.box-disclaimer {
|
||||
font-weight: bold;
|
||||
}
|
||||
.box-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.box-allow-to-use-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.box-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.box-revoke-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pcloud-disclaimer {
|
||||
font-weight: bold;
|
||||
}
|
||||
.pcloud-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pcloud-allow-to-use-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pcloud-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pcloud-revoke-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.yandexdisk-disclaimer {
|
||||
font-weight: bold;
|
||||
}
|
||||
.yandexdisk-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.yandexdisk-allow-to-use-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.yandexdisk-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.yandexdisk-revoke-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.koofr-disclaimer {
|
||||
font-weight: bold;
|
||||
}
|
||||
.koofr-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.koofr-allow-to-use-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.koofr-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.koofr-revoke-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.azureblobstorage-disclaimer {
|
||||
font-weight: bold;
|
||||
}
|
||||
.azureblobstorage-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.azureblobstorage-allow-to-use-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.qrcode-img {
|
||||
width: 350px;
|
||||
height: 350px;
|
||||
}
|
||||
|
||||
.ignorepaths-textarea {
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
.onlyallowpaths-textarea {
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
.logtohttpserver-warning {
|
||||
color: red;
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
.setting-need-wrapping .setting-item-control {
|
||||
/* flex-wrap: wrap; */
|
||||
display: grid;
|
||||
}
|
||||
|
||||
.pro-disclaimer {
|
||||
font-weight: bold;
|
||||
}
|
||||
.pro-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pro-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pro-revoke-auth-button-hide {
|
||||
display: none;
|
||||
}
|
||||
Reference in New Issue
Block a user