diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index dde34b68..321cab91 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -65,5 +65,6 @@ "obsidian-bbcode", "obsidian-style-settings", "obsidian-camera", - "table-editor-obsidian" + "table-editor-obsidian", + "obsidian-smart-typography" ] \ No newline at end of file diff --git a/.obsidian/graph.json b/.obsidian/graph.json index 1dcacf37..b95906b4 100644 --- a/.obsidian/graph.json +++ b/.obsidian/graph.json @@ -95,6 +95,6 @@ "repelStrength": 10, "linkStrength": 1, "linkDistance": 250, - "scale": 0.18329418632041677, + "scale": 0.15354276908672537, "close": true } \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-activity-history/data.json b/.obsidian/plugins/obsidian-activity-history/data.json index efd43b03..9bfd21b0 100644 --- a/.obsidian/plugins/obsidian-activity-history/data.json +++ b/.obsidian/plugins/obsidian-activity-history/data.json @@ -12,8 +12,8 @@ "checkpointList": [ { "path": "/", - "date": "2022-08-16", - "size": 6476353 + "date": "2022-08-19", + "size": 6576430 } ], "activityHistory": [ @@ -894,7 +894,19 @@ }, { "date": "2022-08-16", - "value": 65695 + "value": 100168 + }, + { + "date": "2022-08-17", + "value": 60491 + }, + { + "date": "2022-08-18", + "value": 1068 + }, + { + "date": "2022-08-19", + "value": 4103 } ] } diff --git a/.obsidian/plugins/obsidian-book-search-plugin/main.js b/.obsidian/plugins/obsidian-book-search-plugin/main.js index 6ba672a6..5a87ee0f 100644 --- a/.obsidian/plugins/obsidian-book-search-plugin/main.js +++ b/.obsidian/plugins/obsidian-book-search-plugin/main.js @@ -3,2315 +3,10 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); -var __export = (target, all) => { - __markAsModule(target); - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __reExport = (target, module2, desc) => { - if (module2 && typeof module2 === "object" || typeof module2 === "function") { - for (let key of __getOwnPropNames(module2)) - if (!__hasOwnProp.call(target, key) && key !== "default") - __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable }); - } - return target; -}; -var __toModule = (module2) => { - return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2); -}; -var __async = (__this, __arguments, generator) => { - return new Promise((resolve, reject) => { - var fulfilled = (value) => { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - }; - var rejected = (value) => { - try { - step(generator.throw(value)); - } catch (e) { - reject(e); - } - }; - var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); - step((generator = generator.apply(__this, __arguments)).next()); - }); -}; - -// src/main.ts -__export(exports, { - default: () => BookSearchPlugin -}); -var import_obsidian8 = __toModule(require("obsidian")); - -// src/book_search_modal.ts -var import_obsidian2 = __toModule(require("obsidian")); - -// src/apis/google_books_api.ts -var import_obsidian = __toModule(require("obsidian")); -var API_URL = "https://www.googleapis.com/books/v1/volumes"; -function getByQuery(query) { - return __async(this, null, function* () { - try { - const searchResults = yield apiGet(query); - if (searchResults.totalItems == 0) { - throw new Error("No results found."); - } - return searchResults.items.map(({ volumeInfo }) => formatForSuggestion(volumeInfo)); - } catch (error) { - console.warn(error); - throw error; - } - }); -} -function getISBN(item) { - let ISBN10 = ""; - let ISBN13 = ""; - let isbn10_data, isbn13_data; - if (item.industryIdentifiers) { - isbn10_data = item.industryIdentifiers.find((element) => element.type == "ISBN_10"); - isbn13_data = item.industryIdentifiers.find((element) => element.type == "ISBN_13"); - } - if (isbn10_data) - ISBN10 = isbn10_data.identifier.trim(); - if (isbn13_data) - ISBN13 = isbn13_data.identifier.trim(); - return { ISBN10, ISBN13 }; -} -function formatForSuggestion(item) { - var _a, _b; - const ISBN = getISBN(item); - const book = { - title: item.title, - author: formatList(item.authors), - category: formatList(item.categories), - publisher: item.publisher, - totalPage: item.pageCount, - coverUrl: `${(_b = (_a = item.imageLinks) == null ? void 0 : _a.thumbnail) != null ? _b : ""}`.replace("http:", "https:"), - publishDate: item.publishedDate ? `${new Date(item.publishedDate).getFullYear()}` : "", - isbn10: ISBN.ISBN10, - isbn13: ISBN.ISBN13 - }; - return book; -} -function formatList(list) { - var _a; - if (!list || list.length === 0 || list[0] == "N/A") - return ""; - if (list.length === 1) - return (_a = list[0]) != null ? _a : ""; - return list.map((item) => `${item.trim()}`).join(", "); -} -function apiGet(query) { - return __async(this, null, function* () { - const finalURL = new URL(API_URL); - finalURL.searchParams.append("q", query); - const res = yield (0, import_obsidian.request)({ - url: finalURL.href, - method: "GET" - }); - return JSON.parse(res); - }); -} - -// src/book_search_modal.ts -var BookSearchModal = class extends import_obsidian2.Modal { - constructor(app, query, onSubmit) { - super(app); - this.query = query; - this.onSubmit = onSubmit; - } - searchBook() { - return __async(this, null, function* () { - if (!this.query) { - throw new Error("No query entered."); - } - if (!this.isBusy) { - try { - this.isBusy = true; - this.okBtnRef.setDisabled(false); - this.okBtnRef.setButtonText("Requesting..."); - const searchResults = yield getByQuery(this.query); - this.onSubmit(null, searchResults); - } catch (err) { - this.onSubmit(err); - } finally { - this.close(); - } - } - }); - } - submitEnterCallback(event) { - if (event.key === "Enter") { - this.searchBook(); - } - } - onOpen() { - const { contentEl } = this; - contentEl.createEl("h2", { text: "Search Book" }); - const placeholder = "Search by keyword or ISBN"; - const textComponent = new import_obsidian2.TextComponent(contentEl); - textComponent.setValue(this.query); - textComponent.inputEl.style.width = "100%"; - textComponent.setPlaceholder(placeholder != null ? placeholder : "").onChange((value) => this.query = value).inputEl.addEventListener("keydown", this.submitEnterCallback.bind(this)); - contentEl.appendChild(textComponent.inputEl); - textComponent.inputEl.focus(); - new import_obsidian2.Setting(contentEl).addButton((btn) => btn.setButtonText("Cancel").onClick(() => this.close())).addButton((btn) => { - return this.okBtnRef = btn.setButtonText("Ok").setCta().onClick(() => { - this.searchBook(); - }); - }); - } - onClose() { - const { contentEl } = this; - contentEl.empty(); - } -}; - -// src/book_suggest_modal.ts -var import_obsidian3 = __toModule(require("obsidian")); -var BookSuggestModal = class extends import_obsidian3.SuggestModal { - constructor(app, suggestion, onChoose) { - super(app); - this.suggestion = suggestion; - this.onChoose = onChoose; - } - getSuggestions(query) { - return this.suggestion.filter((book) => { - const searchQuery = query.toLowerCase(); - return book.title.toLowerCase().includes(searchQuery) || book.author.toLowerCase().includes(searchQuery) || book.publisher.toLowerCase().includes(searchQuery); - }); - } - renderSuggestion(book, el) { - const title = book.title; - const publisher = book.publisher ? `, ${book.publisher}` : ""; - const publishDate = book.publishDate ? `(${book.publishDate})` : ""; - const totalPage = book.totalPage ? `, p${book.totalPage}` : ""; - const subtitle = `${book.author}${publisher}${publishDate}${totalPage}`; - el.createEl("div", { text: title }); - el.createEl("small", { text: subtitle }); - } - onChooseSuggestion(book) { - this.onChoose(null, book); - } -}; - -// src/editor/cursor_jumper.ts -var import_obsidian4 = __toModule(require("obsidian")); -var CursorJumper = class { - constructor(app) { - this.app = app; - } - jumpToNextCursorLocation() { - return __async(this, null, function* () { - const activeView = this.app.workspace.getActiveViewOfType(import_obsidian4.MarkdownView); - if (!activeView) { - return; - } - const content = yield this.app.vault.cachedRead(activeView.file); - const indexOffset = content.length + 1; - const editor = activeView.editor; - editor.focus(); - editor.setCursor(indexOffset, 0); - }); - } -}; - -// src/settings/settings.ts -var import_obsidian7 = __toModule(require("obsidian")); - -// src/utils/utils.ts -var NUMBER_REGEX = /^-?[0-9]*$/; -var DATE_REGEX = /{{DATE(\+-?[0-9]+)?}}/; -var DATE_REGEX_FORMATTED = /{{DATE:([^}\n\r+]*)(\+-?[0-9]+)?}}/; -function replaceIllegalFileNameCharactersInString(text) { - return text.replace(/[\\,#%&{}/*<>$":@.]/g, "").replace(/\s+/g, " "); -} -function makeFileName(book, fileNameFormat) { - const titleForFileName = replaceIllegalFileNameCharactersInString(book.title); - if (!book.author) { - return titleForFileName; - } - const authorForFileName = replaceIllegalFileNameCharactersInString(book.author); - if (fileNameFormat) { - return replaceVariableSyntax(book, replaceDateInString(fileNameFormat)); - } - return `${titleForFileName} - ${authorForFileName}`; -} -function makeFrontMater(book, frontmatter, keyType = DefaultFrontmatterKeyType.snakeCase) { - var _a, _b; - const frontMater = keyType === DefaultFrontmatterKeyType.camelCase ? book : Object.entries(book).reduce((acc, [key, value]) => { - acc[camelToSnakeCase(key)] = value; - return acc; - }, {}); - const addFrontMatter = typeof frontmatter === "string" ? parseFrontMatter(frontmatter) : frontmatter; - for (const key in addFrontMatter) { - const addValue = (_b = (_a = addFrontMatter[key]) == null ? void 0 : _a.toString().trim()) != null ? _b : ""; - if (frontMater[key] && frontMater[key] !== addValue) { - frontMater[key] = `${frontMater[key]} ${addValue}`; - } else { - frontMater[key] = addValue; - } - } - return Object.entries(frontMater).map(([key, val]) => { - var _a2; - return `${key}: ${(_a2 = val == null ? void 0 : val.toString().trim()) != null ? _a2 : ""}`; - }).join("\n"); -} -function replaceVariableSyntax(book, targetText) { - const entries = Object.entries(book); - return entries.reduce((text, [key, val = ""]) => text.replace(new RegExp(`{{${key}}}`, "ig"), val), targetText).replace(/{{.+}}/gi, ""); -} -function camelToSnakeCase(str) { - return str.replace(/[A-Z]/g, (letter) => `_${letter == null ? void 0 : letter.toLowerCase()}`); -} -function parseFrontMatter(frontMatterString) { - if (!frontMatterString) - return {}; - return frontMatterString.split("\n").map((item) => { - var _a, _b; - const index = item.indexOf(":"); - if (index === -1) - return [item.trim(), ""]; - const key = (_a = item.slice(0, index)) == null ? void 0 : _a.trim(); - const value = (_b = item.slice(index + 1)) == null ? void 0 : _b.trim(); - return [key, value]; - }).reduce((acc, [key, value]) => { - var _a; - if (key) { - acc[key] = (_a = value == null ? void 0 : value.trim()) != null ? _a : ""; - } - return acc; - }, {}); -} -function getDate(input) { - let duration; - if (input.offset !== null && input.offset !== void 0 && typeof input.offset === "number") { - duration = window.moment.duration(input.offset, "days"); - } - return input.format ? window.moment().add(duration).format(input.format) : window.moment().add(duration).format("YYYY-MM-DD"); -} -function replaceDateInString(input) { - let output = input; - while (DATE_REGEX.test(output)) { - const dateMatch = DATE_REGEX.exec(output); - let offset2; - if (dateMatch[1]) { - const offsetString = dateMatch[1].replace("+", "").trim(); - const offsetIsInt = NUMBER_REGEX.test(offsetString); - if (offsetIsInt) - offset2 = parseInt(offsetString); - } - output = replacer(output, DATE_REGEX, getDate({ offset: offset2 })); - } - while (DATE_REGEX_FORMATTED.test(output)) { - const dateMatch = DATE_REGEX_FORMATTED.exec(output); - const format2 = dateMatch[1]; - let offset2; - if (dateMatch[2]) { - const offsetString = dateMatch[2].replace("+", "").trim(); - const offsetIsInt = NUMBER_REGEX.test(offsetString); - if (offsetIsInt) - offset2 = parseInt(offsetString); - } - output = replacer(output, DATE_REGEX_FORMATTED, getDate({ format: format2, offset: offset2 })); - } - return output; -} -function replacer(str, reg, replaceValue) { - return str.replace(reg, function() { - return replaceValue; - }); -} - -// src/settings/suggesters/suggest.ts -var import_obsidian5 = __toModule(require("obsidian")); - -// node_modules/@popperjs/core/lib/enums.js -var top = "top"; -var bottom = "bottom"; -var right = "right"; -var left = "left"; -var auto = "auto"; -var basePlacements = [top, bottom, right, left]; -var start = "start"; -var end = "end"; -var clippingParents = "clippingParents"; -var viewport = "viewport"; -var popper = "popper"; -var reference = "reference"; -var variationPlacements = /* @__PURE__ */ basePlacements.reduce(function(acc, placement) { - return acc.concat([placement + "-" + start, placement + "-" + end]); -}, []); -var placements = /* @__PURE__ */ [].concat(basePlacements, [auto]).reduce(function(acc, placement) { - return acc.concat([placement, placement + "-" + start, placement + "-" + end]); -}, []); -var beforeRead = "beforeRead"; -var read = "read"; -var afterRead = "afterRead"; -var beforeMain = "beforeMain"; -var main = "main"; -var afterMain = "afterMain"; -var beforeWrite = "beforeWrite"; -var write = "write"; -var afterWrite = "afterWrite"; -var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; - -// node_modules/@popperjs/core/lib/dom-utils/getNodeName.js -function getNodeName(element) { - return element ? (element.nodeName || "").toLowerCase() : null; -} - -// node_modules/@popperjs/core/lib/dom-utils/getWindow.js -function getWindow(node) { - if (node == null) { - return window; - } - if (node.toString() !== "[object Window]") { - var ownerDocument = node.ownerDocument; - return ownerDocument ? ownerDocument.defaultView || window : window; - } - return node; -} - -// node_modules/@popperjs/core/lib/dom-utils/instanceOf.js -function isElement(node) { - var OwnElement = getWindow(node).Element; - return node instanceof OwnElement || node instanceof Element; -} -function isHTMLElement(node) { - var OwnElement = getWindow(node).HTMLElement; - return node instanceof OwnElement || node instanceof HTMLElement; -} -function isShadowRoot(node) { - if (typeof ShadowRoot === "undefined") { - return false; - } - var OwnElement = getWindow(node).ShadowRoot; - return node instanceof OwnElement || node instanceof ShadowRoot; -} - -// node_modules/@popperjs/core/lib/modifiers/applyStyles.js -function applyStyles(_ref) { - var state = _ref.state; - Object.keys(state.elements).forEach(function(name) { - var style = state.styles[name] || {}; - var attributes = state.attributes[name] || {}; - var element = state.elements[name]; - if (!isHTMLElement(element) || !getNodeName(element)) { - return; - } - Object.assign(element.style, style); - Object.keys(attributes).forEach(function(name2) { - var value = attributes[name2]; - if (value === false) { - element.removeAttribute(name2); - } else { - element.setAttribute(name2, value === true ? "" : value); - } - }); - }); -} -function effect(_ref2) { - var state = _ref2.state; - var initialStyles = { - popper: { - position: state.options.strategy, - left: "0", - top: "0", - margin: "0" - }, - arrow: { - position: "absolute" - }, - reference: {} - }; - Object.assign(state.elements.popper.style, initialStyles.popper); - state.styles = initialStyles; - if (state.elements.arrow) { - Object.assign(state.elements.arrow.style, initialStyles.arrow); - } - return function() { - Object.keys(state.elements).forEach(function(name) { - var element = state.elements[name]; - var attributes = state.attributes[name] || {}; - var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); - var style = styleProperties.reduce(function(style2, property) { - style2[property] = ""; - return style2; - }, {}); - if (!isHTMLElement(element) || !getNodeName(element)) { - return; - } - Object.assign(element.style, style); - Object.keys(attributes).forEach(function(attribute) { - element.removeAttribute(attribute); - }); - }); - }; -} -var applyStyles_default = { - name: "applyStyles", - enabled: true, - phase: "write", - fn: applyStyles, - effect, - requires: ["computeStyles"] -}; - -// node_modules/@popperjs/core/lib/utils/getBasePlacement.js -function getBasePlacement(placement) { - return placement.split("-")[0]; -} - -// node_modules/@popperjs/core/lib/utils/math.js -var max = Math.max; -var min = Math.min; -var round = Math.round; - -// node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js -function getBoundingClientRect(element, includeScale) { - if (includeScale === void 0) { - includeScale = false; - } - var rect = element.getBoundingClientRect(); - var scaleX = 1; - var scaleY = 1; - if (isHTMLElement(element) && includeScale) { - var offsetHeight = element.offsetHeight; - var offsetWidth = element.offsetWidth; - if (offsetWidth > 0) { - scaleX = round(rect.width) / offsetWidth || 1; - } - if (offsetHeight > 0) { - scaleY = round(rect.height) / offsetHeight || 1; - } - } - return { - width: rect.width / scaleX, - height: rect.height / scaleY, - top: rect.top / scaleY, - right: rect.right / scaleX, - bottom: rect.bottom / scaleY, - left: rect.left / scaleX, - x: rect.left / scaleX, - y: rect.top / scaleY - }; -} - -// node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js -function getLayoutRect(element) { - var clientRect = getBoundingClientRect(element); - var width = element.offsetWidth; - var height = element.offsetHeight; - if (Math.abs(clientRect.width - width) <= 1) { - width = clientRect.width; - } - if (Math.abs(clientRect.height - height) <= 1) { - height = clientRect.height; - } - return { - x: element.offsetLeft, - y: element.offsetTop, - width, - height - }; -} - -// node_modules/@popperjs/core/lib/dom-utils/contains.js -function contains(parent, child) { - var rootNode = child.getRootNode && child.getRootNode(); - if (parent.contains(child)) { - return true; - } else if (rootNode && isShadowRoot(rootNode)) { - var next = child; - do { - if (next && parent.isSameNode(next)) { - return true; - } - next = next.parentNode || next.host; - } while (next); - } - return false; -} - -// node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js -function getComputedStyle(element) { - return getWindow(element).getComputedStyle(element); -} - -// node_modules/@popperjs/core/lib/dom-utils/isTableElement.js -function isTableElement(element) { - return ["table", "td", "th"].indexOf(getNodeName(element)) >= 0; -} - -// node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js -function getDocumentElement(element) { - return ((isElement(element) ? element.ownerDocument : element.document) || window.document).documentElement; -} - -// node_modules/@popperjs/core/lib/dom-utils/getParentNode.js -function getParentNode(element) { - if (getNodeName(element) === "html") { - return element; - } - return element.assignedSlot || element.parentNode || (isShadowRoot(element) ? element.host : null) || getDocumentElement(element); -} - -// node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js -function getTrueOffsetParent(element) { - if (!isHTMLElement(element) || getComputedStyle(element).position === "fixed") { - return null; - } - return element.offsetParent; -} -function getContainingBlock(element) { - var isFirefox = navigator.userAgent.toLowerCase().indexOf("firefox") !== -1; - var isIE = navigator.userAgent.indexOf("Trident") !== -1; - if (isIE && isHTMLElement(element)) { - var elementCss = getComputedStyle(element); - if (elementCss.position === "fixed") { - return null; - } - } - var currentNode = getParentNode(element); - if (isShadowRoot(currentNode)) { - currentNode = currentNode.host; - } - while (isHTMLElement(currentNode) && ["html", "body"].indexOf(getNodeName(currentNode)) < 0) { - var css = getComputedStyle(currentNode); - if (css.transform !== "none" || css.perspective !== "none" || css.contain === "paint" || ["transform", "perspective"].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === "filter" || isFirefox && css.filter && css.filter !== "none") { - return currentNode; - } else { - currentNode = currentNode.parentNode; - } - } - return null; -} -function getOffsetParent(element) { - var window2 = getWindow(element); - var offsetParent = getTrueOffsetParent(element); - while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === "static") { - offsetParent = getTrueOffsetParent(offsetParent); - } - if (offsetParent && (getNodeName(offsetParent) === "html" || getNodeName(offsetParent) === "body" && getComputedStyle(offsetParent).position === "static")) { - return window2; - } - return offsetParent || getContainingBlock(element) || window2; -} - -// node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js -function getMainAxisFromPlacement(placement) { - return ["top", "bottom"].indexOf(placement) >= 0 ? "x" : "y"; -} - -// node_modules/@popperjs/core/lib/utils/within.js -function within(min2, value, max2) { - return max(min2, min(value, max2)); -} -function withinMaxClamp(min2, value, max2) { - var v = within(min2, value, max2); - return v > max2 ? max2 : v; -} - -// node_modules/@popperjs/core/lib/utils/getFreshSideObject.js -function getFreshSideObject() { - return { - top: 0, - right: 0, - bottom: 0, - left: 0 - }; -} - -// node_modules/@popperjs/core/lib/utils/mergePaddingObject.js -function mergePaddingObject(paddingObject) { - return Object.assign({}, getFreshSideObject(), paddingObject); -} - -// node_modules/@popperjs/core/lib/utils/expandToHashMap.js -function expandToHashMap(value, keys) { - return keys.reduce(function(hashMap, key) { - hashMap[key] = value; - return hashMap; - }, {}); -} - -// node_modules/@popperjs/core/lib/modifiers/arrow.js -var toPaddingObject = function toPaddingObject2(padding, state) { - padding = typeof padding === "function" ? padding(Object.assign({}, state.rects, { - placement: state.placement - })) : padding; - return mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements)); -}; -function arrow(_ref) { - var _state$modifiersData$; - var state = _ref.state, name = _ref.name, options = _ref.options; - var arrowElement = state.elements.arrow; - var popperOffsets2 = state.modifiersData.popperOffsets; - var basePlacement = getBasePlacement(state.placement); - var axis = getMainAxisFromPlacement(basePlacement); - var isVertical = [left, right].indexOf(basePlacement) >= 0; - var len = isVertical ? "height" : "width"; - if (!arrowElement || !popperOffsets2) { - return; - } - var paddingObject = toPaddingObject(options.padding, state); - var arrowRect = getLayoutRect(arrowElement); - var minProp = axis === "y" ? top : left; - var maxProp = axis === "y" ? bottom : right; - var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets2[axis] - state.rects.popper[len]; - var startDiff = popperOffsets2[axis] - state.rects.reference[axis]; - var arrowOffsetParent = getOffsetParent(arrowElement); - var clientSize = arrowOffsetParent ? axis === "y" ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; - var centerToReference = endDiff / 2 - startDiff / 2; - var min2 = paddingObject[minProp]; - var max2 = clientSize - arrowRect[len] - paddingObject[maxProp]; - var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; - var offset2 = within(min2, center, max2); - var axisProp = axis; - state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset2, _state$modifiersData$.centerOffset = offset2 - center, _state$modifiersData$); -} -function effect2(_ref2) { - var state = _ref2.state, options = _ref2.options; - var _options$element = options.element, arrowElement = _options$element === void 0 ? "[data-popper-arrow]" : _options$element; - if (arrowElement == null) { - return; - } - if (typeof arrowElement === "string") { - arrowElement = state.elements.popper.querySelector(arrowElement); - if (!arrowElement) { - return; - } - } - if (true) { - if (!isHTMLElement(arrowElement)) { - console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', "To use an SVG arrow, wrap it in an HTMLElement that will be used as", "the arrow."].join(" ")); - } - } - if (!contains(state.elements.popper, arrowElement)) { - if (true) { - console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', "element."].join(" ")); - } - return; - } - state.elements.arrow = arrowElement; -} -var arrow_default = { - name: "arrow", - enabled: true, - phase: "main", - fn: arrow, - effect: effect2, - requires: ["popperOffsets"], - requiresIfExists: ["preventOverflow"] -}; - -// node_modules/@popperjs/core/lib/utils/getVariation.js -function getVariation(placement) { - return placement.split("-")[1]; -} - -// node_modules/@popperjs/core/lib/modifiers/computeStyles.js -var unsetSides = { - top: "auto", - right: "auto", - bottom: "auto", - left: "auto" -}; -function roundOffsetsByDPR(_ref) { - var x = _ref.x, y = _ref.y; - var win = window; - var dpr = win.devicePixelRatio || 1; - return { - x: round(x * dpr) / dpr || 0, - y: round(y * dpr) / dpr || 0 - }; -} -function mapToStyles(_ref2) { - var _Object$assign2; - var popper2 = _ref2.popper, popperRect = _ref2.popperRect, placement = _ref2.placement, variation = _ref2.variation, offsets = _ref2.offsets, position = _ref2.position, gpuAcceleration = _ref2.gpuAcceleration, adaptive = _ref2.adaptive, roundOffsets = _ref2.roundOffsets, isFixed = _ref2.isFixed; - var _offsets$x = offsets.x, x = _offsets$x === void 0 ? 0 : _offsets$x, _offsets$y = offsets.y, y = _offsets$y === void 0 ? 0 : _offsets$y; - var _ref3 = typeof roundOffsets === "function" ? roundOffsets({ - x, - y - }) : { - x, - y - }; - x = _ref3.x; - y = _ref3.y; - var hasX = offsets.hasOwnProperty("x"); - var hasY = offsets.hasOwnProperty("y"); - var sideX = left; - var sideY = top; - var win = window; - if (adaptive) { - var offsetParent = getOffsetParent(popper2); - var heightProp = "clientHeight"; - var widthProp = "clientWidth"; - if (offsetParent === getWindow(popper2)) { - offsetParent = getDocumentElement(popper2); - if (getComputedStyle(offsetParent).position !== "static" && position === "absolute") { - heightProp = "scrollHeight"; - widthProp = "scrollWidth"; - } - } - offsetParent = offsetParent; - if (placement === top || (placement === left || placement === right) && variation === end) { - sideY = bottom; - var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : offsetParent[heightProp]; - y -= offsetY - popperRect.height; - y *= gpuAcceleration ? 1 : -1; - } - if (placement === left || (placement === top || placement === bottom) && variation === end) { - sideX = right; - var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : offsetParent[widthProp]; - x -= offsetX - popperRect.width; - x *= gpuAcceleration ? 1 : -1; - } - } - var commonStyles = Object.assign({ - position - }, adaptive && unsetSides); - var _ref4 = roundOffsets === true ? roundOffsetsByDPR({ - x, - y - }) : { - x, - y - }; - x = _ref4.x; - y = _ref4.y; - if (gpuAcceleration) { - var _Object$assign; - return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? "0" : "", _Object$assign[sideX] = hasX ? "0" : "", _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); - } - return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : "", _Object$assign2[sideX] = hasX ? x + "px" : "", _Object$assign2.transform = "", _Object$assign2)); -} -function computeStyles(_ref5) { - var state = _ref5.state, options = _ref5.options; - var _options$gpuAccelerat = options.gpuAcceleration, gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, _options$adaptive = options.adaptive, adaptive = _options$adaptive === void 0 ? true : _options$adaptive, _options$roundOffsets = options.roundOffsets, roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; - if (true) { - var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || ""; - if (adaptive && ["transform", "top", "right", "bottom", "left"].some(function(property) { - return transitionProperty.indexOf(property) >= 0; - })) { - console.warn(["Popper: Detected CSS transitions on at least one of the following", 'CSS properties: "transform", "top", "right", "bottom", "left".', "\n\n", 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', "for smooth transitions, or remove these properties from the CSS", "transition declaration on the popper element if only transitioning", "opacity or background-color for example.", "\n\n", "We recommend using the popper element as a wrapper around an inner", "element that can have any CSS property transitioned for animations."].join(" ")); - } - } - var commonStyles = { - placement: getBasePlacement(state.placement), - variation: getVariation(state.placement), - popper: state.elements.popper, - popperRect: state.rects.popper, - gpuAcceleration, - isFixed: state.options.strategy === "fixed" - }; - if (state.modifiersData.popperOffsets != null) { - state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { - offsets: state.modifiersData.popperOffsets, - position: state.options.strategy, - adaptive, - roundOffsets - }))); - } - if (state.modifiersData.arrow != null) { - state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { - offsets: state.modifiersData.arrow, - position: "absolute", - adaptive: false, - roundOffsets - }))); - } - state.attributes.popper = Object.assign({}, state.attributes.popper, { - "data-popper-placement": state.placement - }); -} -var computeStyles_default = { - name: "computeStyles", - enabled: true, - phase: "beforeWrite", - fn: computeStyles, - data: {} -}; - -// node_modules/@popperjs/core/lib/modifiers/eventListeners.js -var passive = { - passive: true -}; -function effect3(_ref) { - var state = _ref.state, instance = _ref.instance, options = _ref.options; - var _options$scroll = options.scroll, scroll = _options$scroll === void 0 ? true : _options$scroll, _options$resize = options.resize, resize = _options$resize === void 0 ? true : _options$resize; - var window2 = getWindow(state.elements.popper); - var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); - if (scroll) { - scrollParents.forEach(function(scrollParent) { - scrollParent.addEventListener("scroll", instance.update, passive); - }); - } - if (resize) { - window2.addEventListener("resize", instance.update, passive); - } - return function() { - if (scroll) { - scrollParents.forEach(function(scrollParent) { - scrollParent.removeEventListener("scroll", instance.update, passive); - }); - } - if (resize) { - window2.removeEventListener("resize", instance.update, passive); - } - }; -} -var eventListeners_default = { - name: "eventListeners", - enabled: true, - phase: "write", - fn: function fn() { - }, - effect: effect3, - data: {} -}; - -// node_modules/@popperjs/core/lib/utils/getOppositePlacement.js -var hash = { - left: "right", - right: "left", - bottom: "top", - top: "bottom" -}; -function getOppositePlacement(placement) { - return placement.replace(/left|right|bottom|top/g, function(matched) { - return hash[matched]; - }); -} - -// node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js -var hash2 = { - start: "end", - end: "start" -}; -function getOppositeVariationPlacement(placement) { - return placement.replace(/start|end/g, function(matched) { - return hash2[matched]; - }); -} - -// node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js -function getWindowScroll(node) { - var win = getWindow(node); - var scrollLeft = win.pageXOffset; - var scrollTop = win.pageYOffset; - return { - scrollLeft, - scrollTop - }; -} - -// node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js -function getWindowScrollBarX(element) { - return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft; -} - -// node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js -function getViewportRect(element) { - var win = getWindow(element); - var html = getDocumentElement(element); - var visualViewport = win.visualViewport; - var width = html.clientWidth; - var height = html.clientHeight; - var x = 0; - var y = 0; - if (visualViewport) { - width = visualViewport.width; - height = visualViewport.height; - if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) { - x = visualViewport.offsetLeft; - y = visualViewport.offsetTop; - } - } - return { - width, - height, - x: x + getWindowScrollBarX(element), - y - }; -} - -// node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js -function getDocumentRect(element) { - var _element$ownerDocumen; - var html = getDocumentElement(element); - var winScroll = getWindowScroll(element); - var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; - var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); - var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); - var x = -winScroll.scrollLeft + getWindowScrollBarX(element); - var y = -winScroll.scrollTop; - if (getComputedStyle(body || html).direction === "rtl") { - x += max(html.clientWidth, body ? body.clientWidth : 0) - width; - } - return { - width, - height, - x, - y - }; -} - -// node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js -function isScrollParent(element) { - var _getComputedStyle = getComputedStyle(element), overflow = _getComputedStyle.overflow, overflowX = _getComputedStyle.overflowX, overflowY = _getComputedStyle.overflowY; - return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); -} - -// node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js -function getScrollParent(node) { - if (["html", "body", "#document"].indexOf(getNodeName(node)) >= 0) { - return node.ownerDocument.body; - } - if (isHTMLElement(node) && isScrollParent(node)) { - return node; - } - return getScrollParent(getParentNode(node)); -} - -// node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js -function listScrollParents(element, list) { - var _element$ownerDocumen; - if (list === void 0) { - list = []; - } - var scrollParent = getScrollParent(element); - var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); - var win = getWindow(scrollParent); - var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent; - var updatedList = list.concat(target); - return isBody ? updatedList : updatedList.concat(listScrollParents(getParentNode(target))); -} - -// node_modules/@popperjs/core/lib/utils/rectToClientRect.js -function rectToClientRect(rect) { - return Object.assign({}, rect, { - left: rect.x, - top: rect.y, - right: rect.x + rect.width, - bottom: rect.y + rect.height - }); -} - -// node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js -function getInnerBoundingClientRect(element) { - var rect = getBoundingClientRect(element); - rect.top = rect.top + element.clientTop; - rect.left = rect.left + element.clientLeft; - rect.bottom = rect.top + element.clientHeight; - rect.right = rect.left + element.clientWidth; - rect.width = element.clientWidth; - rect.height = element.clientHeight; - rect.x = rect.left; - rect.y = rect.top; - return rect; -} -function getClientRectFromMixedType(element, clippingParent) { - return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element))); -} -function getClippingParents(element) { - var clippingParents2 = listScrollParents(getParentNode(element)); - var canEscapeClipping = ["absolute", "fixed"].indexOf(getComputedStyle(element).position) >= 0; - var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element; - if (!isElement(clipperElement)) { - return []; - } - return clippingParents2.filter(function(clippingParent) { - return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== "body"; - }); -} -function getClippingRect(element, boundary, rootBoundary) { - var mainClippingParents = boundary === "clippingParents" ? getClippingParents(element) : [].concat(boundary); - var clippingParents2 = [].concat(mainClippingParents, [rootBoundary]); - var firstClippingParent = clippingParents2[0]; - var clippingRect = clippingParents2.reduce(function(accRect, clippingParent) { - var rect = getClientRectFromMixedType(element, clippingParent); - accRect.top = max(rect.top, accRect.top); - accRect.right = min(rect.right, accRect.right); - accRect.bottom = min(rect.bottom, accRect.bottom); - accRect.left = max(rect.left, accRect.left); - return accRect; - }, getClientRectFromMixedType(element, firstClippingParent)); - clippingRect.width = clippingRect.right - clippingRect.left; - clippingRect.height = clippingRect.bottom - clippingRect.top; - clippingRect.x = clippingRect.left; - clippingRect.y = clippingRect.top; - return clippingRect; -} - -// node_modules/@popperjs/core/lib/utils/computeOffsets.js -function computeOffsets(_ref) { - var reference2 = _ref.reference, element = _ref.element, placement = _ref.placement; - var basePlacement = placement ? getBasePlacement(placement) : null; - var variation = placement ? getVariation(placement) : null; - var commonX = reference2.x + reference2.width / 2 - element.width / 2; - var commonY = reference2.y + reference2.height / 2 - element.height / 2; - var offsets; - switch (basePlacement) { - case top: - offsets = { - x: commonX, - y: reference2.y - element.height - }; - break; - case bottom: - offsets = { - x: commonX, - y: reference2.y + reference2.height - }; - break; - case right: - offsets = { - x: reference2.x + reference2.width, - y: commonY - }; - break; - case left: - offsets = { - x: reference2.x - element.width, - y: commonY - }; - break; - default: - offsets = { - x: reference2.x, - y: reference2.y - }; - } - var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null; - if (mainAxis != null) { - var len = mainAxis === "y" ? "height" : "width"; - switch (variation) { - case start: - offsets[mainAxis] = offsets[mainAxis] - (reference2[len] / 2 - element[len] / 2); - break; - case end: - offsets[mainAxis] = offsets[mainAxis] + (reference2[len] / 2 - element[len] / 2); - break; - default: - } - } - return offsets; -} - -// node_modules/@popperjs/core/lib/utils/detectOverflow.js -function detectOverflow(state, options) { - if (options === void 0) { - options = {}; - } - var _options = options, _options$placement = _options.placement, placement = _options$placement === void 0 ? state.placement : _options$placement, _options$boundary = _options.boundary, boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, _options$rootBoundary = _options.rootBoundary, rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, _options$elementConte = _options.elementContext, elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, _options$altBoundary = _options.altBoundary, altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, _options$padding = _options.padding, padding = _options$padding === void 0 ? 0 : _options$padding; - var paddingObject = mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements)); - var altContext = elementContext === popper ? reference : popper; - var popperRect = state.rects.popper; - var element = state.elements[altBoundary ? altContext : elementContext]; - var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary); - var referenceClientRect = getBoundingClientRect(state.elements.reference); - var popperOffsets2 = computeOffsets({ - reference: referenceClientRect, - element: popperRect, - strategy: "absolute", - placement - }); - var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets2)); - var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; - var overflowOffsets = { - top: clippingClientRect.top - elementClientRect.top + paddingObject.top, - bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, - left: clippingClientRect.left - elementClientRect.left + paddingObject.left, - right: elementClientRect.right - clippingClientRect.right + paddingObject.right - }; - var offsetData = state.modifiersData.offset; - if (elementContext === popper && offsetData) { - var offset2 = offsetData[placement]; - Object.keys(overflowOffsets).forEach(function(key) { - var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1; - var axis = [top, bottom].indexOf(key) >= 0 ? "y" : "x"; - overflowOffsets[key] += offset2[axis] * multiply; - }); - } - return overflowOffsets; -} - -// node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js -function computeAutoPlacement(state, options) { - if (options === void 0) { - options = {}; - } - var _options = options, placement = _options.placement, boundary = _options.boundary, rootBoundary = _options.rootBoundary, padding = _options.padding, flipVariations = _options.flipVariations, _options$allowedAutoP = _options.allowedAutoPlacements, allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP; - var variation = getVariation(placement); - var placements2 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function(placement2) { - return getVariation(placement2) === variation; - }) : basePlacements; - var allowedPlacements = placements2.filter(function(placement2) { - return allowedAutoPlacements.indexOf(placement2) >= 0; - }); - if (allowedPlacements.length === 0) { - allowedPlacements = placements2; - if (true) { - console.error(["Popper: The `allowedAutoPlacements` option did not allow any", "placements. Ensure the `placement` option matches the variation", "of the allowed placements.", 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(" ")); - } - } - var overflows = allowedPlacements.reduce(function(acc, placement2) { - acc[placement2] = detectOverflow(state, { - placement: placement2, - boundary, - rootBoundary, - padding - })[getBasePlacement(placement2)]; - return acc; - }, {}); - return Object.keys(overflows).sort(function(a, b) { - return overflows[a] - overflows[b]; - }); -} - -// node_modules/@popperjs/core/lib/modifiers/flip.js -function getExpandedFallbackPlacements(placement) { - if (getBasePlacement(placement) === auto) { - return []; - } - var oppositePlacement = getOppositePlacement(placement); - return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)]; -} -function flip(_ref) { - var state = _ref.state, options = _ref.options, name = _ref.name; - if (state.modifiersData[name]._skip) { - return; - } - var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, specifiedFallbackPlacements = options.fallbackPlacements, padding = options.padding, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, _options$flipVariatio = options.flipVariations, flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, allowedAutoPlacements = options.allowedAutoPlacements; - var preferredPlacement = state.options.placement; - var basePlacement = getBasePlacement(preferredPlacement); - var isBasePlacement = basePlacement === preferredPlacement; - var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); - var placements2 = [preferredPlacement].concat(fallbackPlacements).reduce(function(acc, placement2) { - return acc.concat(getBasePlacement(placement2) === auto ? computeAutoPlacement(state, { - placement: placement2, - boundary, - rootBoundary, - padding, - flipVariations, - allowedAutoPlacements - }) : placement2); - }, []); - var referenceRect = state.rects.reference; - var popperRect = state.rects.popper; - var checksMap = new Map(); - var makeFallbackChecks = true; - var firstFittingPlacement = placements2[0]; - for (var i = 0; i < placements2.length; i++) { - var placement = placements2[i]; - var _basePlacement = getBasePlacement(placement); - var isStartVariation = getVariation(placement) === start; - var isVertical = [top, bottom].indexOf(_basePlacement) >= 0; - var len = isVertical ? "width" : "height"; - var overflow = detectOverflow(state, { - placement, - boundary, - rootBoundary, - altBoundary, - padding - }); - var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top; - if (referenceRect[len] > popperRect[len]) { - mainVariationSide = getOppositePlacement(mainVariationSide); - } - var altVariationSide = getOppositePlacement(mainVariationSide); - var checks = []; - if (checkMainAxis) { - checks.push(overflow[_basePlacement] <= 0); - } - if (checkAltAxis) { - checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); - } - if (checks.every(function(check) { - return check; - })) { - firstFittingPlacement = placement; - makeFallbackChecks = false; - break; - } - checksMap.set(placement, checks); - } - if (makeFallbackChecks) { - var numberOfChecks = flipVariations ? 3 : 1; - var _loop = function _loop2(_i2) { - var fittingPlacement = placements2.find(function(placement2) { - var checks2 = checksMap.get(placement2); - if (checks2) { - return checks2.slice(0, _i2).every(function(check) { - return check; - }); - } - }); - if (fittingPlacement) { - firstFittingPlacement = fittingPlacement; - return "break"; - } - }; - for (var _i = numberOfChecks; _i > 0; _i--) { - var _ret = _loop(_i); - if (_ret === "break") - break; - } - } - if (state.placement !== firstFittingPlacement) { - state.modifiersData[name]._skip = true; - state.placement = firstFittingPlacement; - state.reset = true; - } -} -var flip_default = { - name: "flip", - enabled: true, - phase: "main", - fn: flip, - requiresIfExists: ["offset"], - data: { - _skip: false - } -}; - -// node_modules/@popperjs/core/lib/modifiers/hide.js -function getSideOffsets(overflow, rect, preventedOffsets) { - if (preventedOffsets === void 0) { - preventedOffsets = { - x: 0, - y: 0 - }; - } - return { - top: overflow.top - rect.height - preventedOffsets.y, - right: overflow.right - rect.width + preventedOffsets.x, - bottom: overflow.bottom - rect.height + preventedOffsets.y, - left: overflow.left - rect.width - preventedOffsets.x - }; -} -function isAnySideFullyClipped(overflow) { - return [top, right, bottom, left].some(function(side) { - return overflow[side] >= 0; - }); -} -function hide(_ref) { - var state = _ref.state, name = _ref.name; - var referenceRect = state.rects.reference; - var popperRect = state.rects.popper; - var preventedOffsets = state.modifiersData.preventOverflow; - var referenceOverflow = detectOverflow(state, { - elementContext: "reference" - }); - var popperAltOverflow = detectOverflow(state, { - altBoundary: true - }); - var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); - var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); - var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); - var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); - state.modifiersData[name] = { - referenceClippingOffsets, - popperEscapeOffsets, - isReferenceHidden, - hasPopperEscaped - }; - state.attributes.popper = Object.assign({}, state.attributes.popper, { - "data-popper-reference-hidden": isReferenceHidden, - "data-popper-escaped": hasPopperEscaped - }); -} -var hide_default = { - name: "hide", - enabled: true, - phase: "main", - requiresIfExists: ["preventOverflow"], - fn: hide -}; - -// node_modules/@popperjs/core/lib/modifiers/offset.js -function distanceAndSkiddingToXY(placement, rects, offset2) { - var basePlacement = getBasePlacement(placement); - var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; - var _ref = typeof offset2 === "function" ? offset2(Object.assign({}, rects, { - placement - })) : offset2, skidding = _ref[0], distance = _ref[1]; - skidding = skidding || 0; - distance = (distance || 0) * invertDistance; - return [left, right].indexOf(basePlacement) >= 0 ? { - x: distance, - y: skidding - } : { - x: skidding, - y: distance - }; -} -function offset(_ref2) { - var state = _ref2.state, options = _ref2.options, name = _ref2.name; - var _options$offset = options.offset, offset2 = _options$offset === void 0 ? [0, 0] : _options$offset; - var data = placements.reduce(function(acc, placement) { - acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset2); - return acc; - }, {}); - var _data$state$placement = data[state.placement], x = _data$state$placement.x, y = _data$state$placement.y; - if (state.modifiersData.popperOffsets != null) { - state.modifiersData.popperOffsets.x += x; - state.modifiersData.popperOffsets.y += y; - } - state.modifiersData[name] = data; -} -var offset_default = { - name: "offset", - enabled: true, - phase: "main", - requires: ["popperOffsets"], - fn: offset -}; - -// node_modules/@popperjs/core/lib/modifiers/popperOffsets.js -function popperOffsets(_ref) { - var state = _ref.state, name = _ref.name; - state.modifiersData[name] = computeOffsets({ - reference: state.rects.reference, - element: state.rects.popper, - strategy: "absolute", - placement: state.placement - }); -} -var popperOffsets_default = { - name: "popperOffsets", - enabled: true, - phase: "read", - fn: popperOffsets, - data: {} -}; - -// node_modules/@popperjs/core/lib/utils/getAltAxis.js -function getAltAxis(axis) { - return axis === "x" ? "y" : "x"; -} - -// node_modules/@popperjs/core/lib/modifiers/preventOverflow.js -function preventOverflow(_ref) { - var state = _ref.state, options = _ref.options, name = _ref.name; - var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, padding = options.padding, _options$tether = options.tether, tether = _options$tether === void 0 ? true : _options$tether, _options$tetherOffset = options.tetherOffset, tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; - var overflow = detectOverflow(state, { - boundary, - rootBoundary, - padding, - altBoundary - }); - var basePlacement = getBasePlacement(state.placement); - var variation = getVariation(state.placement); - var isBasePlacement = !variation; - var mainAxis = getMainAxisFromPlacement(basePlacement); - var altAxis = getAltAxis(mainAxis); - var popperOffsets2 = state.modifiersData.popperOffsets; - var referenceRect = state.rects.reference; - var popperRect = state.rects.popper; - var tetherOffsetValue = typeof tetherOffset === "function" ? tetherOffset(Object.assign({}, state.rects, { - placement: state.placement - })) : tetherOffset; - var normalizedTetherOffsetValue = typeof tetherOffsetValue === "number" ? { - mainAxis: tetherOffsetValue, - altAxis: tetherOffsetValue - } : Object.assign({ - mainAxis: 0, - altAxis: 0 - }, tetherOffsetValue); - var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null; - var data = { - x: 0, - y: 0 - }; - if (!popperOffsets2) { - return; - } - if (checkMainAxis) { - var _offsetModifierState$; - var mainSide = mainAxis === "y" ? top : left; - var altSide = mainAxis === "y" ? bottom : right; - var len = mainAxis === "y" ? "height" : "width"; - var offset2 = popperOffsets2[mainAxis]; - var min2 = offset2 + overflow[mainSide]; - var max2 = offset2 - overflow[altSide]; - var additive = tether ? -popperRect[len] / 2 : 0; - var minLen = variation === start ? referenceRect[len] : popperRect[len]; - var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; - var arrowElement = state.elements.arrow; - var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : { - width: 0, - height: 0 - }; - var arrowPaddingObject = state.modifiersData["arrow#persistent"] ? state.modifiersData["arrow#persistent"].padding : getFreshSideObject(); - var arrowPaddingMin = arrowPaddingObject[mainSide]; - var arrowPaddingMax = arrowPaddingObject[altSide]; - var arrowLen = within(0, referenceRect[len], arrowRect[len]); - var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis; - var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis; - var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow); - var clientOffset = arrowOffsetParent ? mainAxis === "y" ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; - var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0; - var tetherMin = offset2 + minOffset - offsetModifierValue - clientOffset; - var tetherMax = offset2 + maxOffset - offsetModifierValue; - var preventedOffset = within(tether ? min(min2, tetherMin) : min2, offset2, tether ? max(max2, tetherMax) : max2); - popperOffsets2[mainAxis] = preventedOffset; - data[mainAxis] = preventedOffset - offset2; - } - if (checkAltAxis) { - var _offsetModifierState$2; - var _mainSide = mainAxis === "x" ? top : left; - var _altSide = mainAxis === "x" ? bottom : right; - var _offset = popperOffsets2[altAxis]; - var _len = altAxis === "y" ? "height" : "width"; - var _min = _offset + overflow[_mainSide]; - var _max = _offset - overflow[_altSide]; - var isOriginSide = [top, left].indexOf(basePlacement) !== -1; - var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0; - var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis; - var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max; - var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max); - popperOffsets2[altAxis] = _preventedOffset; - data[altAxis] = _preventedOffset - _offset; - } - state.modifiersData[name] = data; -} -var preventOverflow_default = { - name: "preventOverflow", - enabled: true, - phase: "main", - fn: preventOverflow, - requiresIfExists: ["offset"] -}; - -// node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js -function getHTMLElementScroll(element) { - return { - scrollLeft: element.scrollLeft, - scrollTop: element.scrollTop - }; -} - -// node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js -function getNodeScroll(node) { - if (node === getWindow(node) || !isHTMLElement(node)) { - return getWindowScroll(node); - } else { - return getHTMLElementScroll(node); - } -} - -// node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js -function isElementScaled(element) { - var rect = element.getBoundingClientRect(); - var scaleX = round(rect.width) / element.offsetWidth || 1; - var scaleY = round(rect.height) / element.offsetHeight || 1; - return scaleX !== 1 || scaleY !== 1; -} -function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { - if (isFixed === void 0) { - isFixed = false; - } - var isOffsetParentAnElement = isHTMLElement(offsetParent); - var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent); - var documentElement = getDocumentElement(offsetParent); - var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled); - var scroll = { - scrollLeft: 0, - scrollTop: 0 - }; - var offsets = { - x: 0, - y: 0 - }; - if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { - if (getNodeName(offsetParent) !== "body" || isScrollParent(documentElement)) { - scroll = getNodeScroll(offsetParent); - } - if (isHTMLElement(offsetParent)) { - offsets = getBoundingClientRect(offsetParent, true); - offsets.x += offsetParent.clientLeft; - offsets.y += offsetParent.clientTop; - } else if (documentElement) { - offsets.x = getWindowScrollBarX(documentElement); - } - } - return { - x: rect.left + scroll.scrollLeft - offsets.x, - y: rect.top + scroll.scrollTop - offsets.y, - width: rect.width, - height: rect.height - }; -} - -// node_modules/@popperjs/core/lib/utils/orderModifiers.js -function order(modifiers) { - var map = new Map(); - var visited = new Set(); - var result = []; - modifiers.forEach(function(modifier) { - map.set(modifier.name, modifier); - }); - function sort(modifier) { - visited.add(modifier.name); - var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); - requires.forEach(function(dep) { - if (!visited.has(dep)) { - var depModifier = map.get(dep); - if (depModifier) { - sort(depModifier); - } - } - }); - result.push(modifier); - } - modifiers.forEach(function(modifier) { - if (!visited.has(modifier.name)) { - sort(modifier); - } - }); - return result; -} -function orderModifiers(modifiers) { - var orderedModifiers = order(modifiers); - return modifierPhases.reduce(function(acc, phase) { - return acc.concat(orderedModifiers.filter(function(modifier) { - return modifier.phase === phase; - })); - }, []); -} - -// node_modules/@popperjs/core/lib/utils/debounce.js -function debounce(fn2) { - var pending; - return function() { - if (!pending) { - pending = new Promise(function(resolve) { - Promise.resolve().then(function() { - pending = void 0; - resolve(fn2()); - }); - }); - } - return pending; - }; -} - -// node_modules/@popperjs/core/lib/utils/format.js -function format(str) { - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - return [].concat(args).reduce(function(p, c) { - return p.replace(/%s/, c); - }, str); -} - -// node_modules/@popperjs/core/lib/utils/validateModifiers.js -var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s'; -var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available'; -var VALID_PROPERTIES = ["name", "enabled", "phase", "fn", "effect", "requires", "options"]; -function validateModifiers(modifiers) { - modifiers.forEach(function(modifier) { - [].concat(Object.keys(modifier), VALID_PROPERTIES).filter(function(value, index, self) { - return self.indexOf(value) === index; - }).forEach(function(key) { - switch (key) { - case "name": - if (typeof modifier.name !== "string") { - console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', '"' + String(modifier.name) + '"')); - } - break; - case "enabled": - if (typeof modifier.enabled !== "boolean") { - console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', '"' + String(modifier.enabled) + '"')); - } - break; - case "phase": - if (modifierPhases.indexOf(modifier.phase) < 0) { - console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(", "), '"' + String(modifier.phase) + '"')); - } - break; - case "fn": - if (typeof modifier.fn !== "function") { - console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', '"' + String(modifier.fn) + '"')); - } - break; - case "effect": - if (modifier.effect != null && typeof modifier.effect !== "function") { - console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', '"' + String(modifier.fn) + '"')); - } - break; - case "requires": - if (modifier.requires != null && !Array.isArray(modifier.requires)) { - console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', '"' + String(modifier.requires) + '"')); - } - break; - case "requiresIfExists": - if (!Array.isArray(modifier.requiresIfExists)) { - console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', '"' + String(modifier.requiresIfExists) + '"')); - } - break; - case "options": - case "data": - break; - default: - console.error('PopperJS: an invalid property has been provided to the "' + modifier.name + '" modifier, valid properties are ' + VALID_PROPERTIES.map(function(s) { - return '"' + s + '"'; - }).join(", ") + '; but "' + key + '" was provided.'); - } - modifier.requires && modifier.requires.forEach(function(requirement) { - if (modifiers.find(function(mod) { - return mod.name === requirement; - }) == null) { - console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement)); - } - }); - }); - }); -} - -// node_modules/@popperjs/core/lib/utils/uniqueBy.js -function uniqueBy(arr, fn2) { - var identifiers = new Set(); - return arr.filter(function(item) { - var identifier = fn2(item); - if (!identifiers.has(identifier)) { - identifiers.add(identifier); - return true; - } - }); -} - -// node_modules/@popperjs/core/lib/utils/mergeByName.js -function mergeByName(modifiers) { - var merged = modifiers.reduce(function(merged2, current) { - var existing = merged2[current.name]; - merged2[current.name] = existing ? Object.assign({}, existing, current, { - options: Object.assign({}, existing.options, current.options), - data: Object.assign({}, existing.data, current.data) - }) : current; - return merged2; - }, {}); - return Object.keys(merged).map(function(key) { - return merged[key]; - }); -} - -// node_modules/@popperjs/core/lib/createPopper.js -var INVALID_ELEMENT_ERROR = "Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element."; -var INFINITE_LOOP_ERROR = "Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash."; -var DEFAULT_OPTIONS = { - placement: "bottom", - modifiers: [], - strategy: "absolute" -}; -function areValidElements() { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - return !args.some(function(element) { - return !(element && typeof element.getBoundingClientRect === "function"); - }); -} -function popperGenerator(generatorOptions) { - if (generatorOptions === void 0) { - generatorOptions = {}; - } - var _generatorOptions = generatorOptions, _generatorOptions$def = _generatorOptions.defaultModifiers, defaultModifiers2 = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, _generatorOptions$def2 = _generatorOptions.defaultOptions, defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; - return function createPopper2(reference2, popper2, options) { - if (options === void 0) { - options = defaultOptions; - } - var state = { - placement: "bottom", - orderedModifiers: [], - options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), - modifiersData: {}, - elements: { - reference: reference2, - popper: popper2 - }, - attributes: {}, - styles: {} - }; - var effectCleanupFns = []; - var isDestroyed = false; - var instance = { - state, - setOptions: function setOptions(setOptionsAction) { - var options2 = typeof setOptionsAction === "function" ? setOptionsAction(state.options) : setOptionsAction; - cleanupModifierEffects(); - state.options = Object.assign({}, defaultOptions, state.options, options2); - state.scrollParents = { - reference: isElement(reference2) ? listScrollParents(reference2) : reference2.contextElement ? listScrollParents(reference2.contextElement) : [], - popper: listScrollParents(popper2) - }; - var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers2, state.options.modifiers))); - state.orderedModifiers = orderedModifiers.filter(function(m) { - return m.enabled; - }); - if (true) { - var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function(_ref) { - var name = _ref.name; - return name; - }); - validateModifiers(modifiers); - if (getBasePlacement(state.options.placement) === auto) { - var flipModifier = state.orderedModifiers.find(function(_ref2) { - var name = _ref2.name; - return name === "flip"; - }); - if (!flipModifier) { - console.error(['Popper: "auto" placements require the "flip" modifier be', "present and enabled to work."].join(" ")); - } - } - var _getComputedStyle = getComputedStyle(popper2), marginTop = _getComputedStyle.marginTop, marginRight = _getComputedStyle.marginRight, marginBottom = _getComputedStyle.marginBottom, marginLeft = _getComputedStyle.marginLeft; - if ([marginTop, marginRight, marginBottom, marginLeft].some(function(margin) { - return parseFloat(margin); - })) { - console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', "between the popper and its reference element or boundary.", "To replicate margin, use the `offset` modifier, as well as", "the `padding` option in the `preventOverflow` and `flip`", "modifiers."].join(" ")); - } - } - runModifierEffects(); - return instance.update(); - }, - forceUpdate: function forceUpdate() { - if (isDestroyed) { - return; - } - var _state$elements = state.elements, reference3 = _state$elements.reference, popper3 = _state$elements.popper; - if (!areValidElements(reference3, popper3)) { - if (true) { - console.error(INVALID_ELEMENT_ERROR); - } - return; - } - state.rects = { - reference: getCompositeRect(reference3, getOffsetParent(popper3), state.options.strategy === "fixed"), - popper: getLayoutRect(popper3) - }; - state.reset = false; - state.placement = state.options.placement; - state.orderedModifiers.forEach(function(modifier) { - return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); - }); - var __debug_loops__ = 0; - for (var index = 0; index < state.orderedModifiers.length; index++) { - if (true) { - __debug_loops__ += 1; - if (__debug_loops__ > 100) { - console.error(INFINITE_LOOP_ERROR); - break; - } - } - if (state.reset === true) { - state.reset = false; - index = -1; - continue; - } - var _state$orderedModifie = state.orderedModifiers[index], fn2 = _state$orderedModifie.fn, _state$orderedModifie2 = _state$orderedModifie.options, _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, name = _state$orderedModifie.name; - if (typeof fn2 === "function") { - state = fn2({ - state, - options: _options, - name, - instance - }) || state; - } - } - }, - update: debounce(function() { - return new Promise(function(resolve) { - instance.forceUpdate(); - resolve(state); - }); - }), - destroy: function destroy() { - cleanupModifierEffects(); - isDestroyed = true; - } - }; - if (!areValidElements(reference2, popper2)) { - if (true) { - console.error(INVALID_ELEMENT_ERROR); - } - return instance; - } - instance.setOptions(options).then(function(state2) { - if (!isDestroyed && options.onFirstUpdate) { - options.onFirstUpdate(state2); - } - }); - function runModifierEffects() { - state.orderedModifiers.forEach(function(_ref3) { - var name = _ref3.name, _ref3$options = _ref3.options, options2 = _ref3$options === void 0 ? {} : _ref3$options, effect4 = _ref3.effect; - if (typeof effect4 === "function") { - var cleanupFn = effect4({ - state, - name, - instance, - options: options2 - }); - var noopFn = function noopFn2() { - }; - effectCleanupFns.push(cleanupFn || noopFn); - } - }); - } - function cleanupModifierEffects() { - effectCleanupFns.forEach(function(fn2) { - return fn2(); - }); - effectCleanupFns = []; - } - return instance; - }; -} - -// node_modules/@popperjs/core/lib/popper.js -var defaultModifiers = [eventListeners_default, popperOffsets_default, computeStyles_default, applyStyles_default, offset_default, flip_default, preventOverflow_default, arrow_default, hide_default]; -var createPopper = /* @__PURE__ */ popperGenerator({ - defaultModifiers -}); - -// src/settings/suggesters/suggest.ts -var wrapAround = (value, size) => { - return (value % size + size) % size; -}; -var Suggest = class { - constructor(owner, containerEl, scope) { - this.owner = owner; - this.containerEl = containerEl; - containerEl.on("click", ".suggestion-item", this.onSuggestionClick.bind(this)); - containerEl.on("mousemove", ".suggestion-item", this.onSuggestionMouseover.bind(this)); - scope.register([], "ArrowUp", (event) => { - if (!event.isComposing) { - this.setSelectedItem(this.selectedItem - 1, true); - return false; - } - }); - scope.register([], "ArrowDown", (event) => { - if (!event.isComposing) { - this.setSelectedItem(this.selectedItem + 1, true); - return false; - } - }); - scope.register([], "Enter", (event) => { - if (!event.isComposing) { - this.useSelectedItem(event); - return false; - } - }); - } - onSuggestionClick(event, el) { - event.preventDefault(); - const item = this.suggestions.indexOf(el); - this.setSelectedItem(item, false); - this.useSelectedItem(event); - } - onSuggestionMouseover(_event, el) { - const item = this.suggestions.indexOf(el); - this.setSelectedItem(item, false); - } - setSuggestions(values) { - this.containerEl.empty(); - const suggestionEls = []; - values.forEach((value) => { - const suggestionEl = this.containerEl.createDiv("suggestion-item"); - this.owner.renderSuggestion(value, suggestionEl); - suggestionEls.push(suggestionEl); - }); - this.values = values; - this.suggestions = suggestionEls; - this.setSelectedItem(0, false); - } - useSelectedItem(event) { - const currentValue = this.values[this.selectedItem]; - if (currentValue) { - this.owner.selectSuggestion(currentValue, event); - } - } - setSelectedItem(selectedIndex, scrollIntoView) { - const normalizedIndex = wrapAround(selectedIndex, this.suggestions.length); - const prevSelectedSuggestion = this.suggestions[this.selectedItem]; - const selectedSuggestion = this.suggestions[normalizedIndex]; - prevSelectedSuggestion == null ? void 0 : prevSelectedSuggestion.removeClass("is-selected"); - selectedSuggestion == null ? void 0 : selectedSuggestion.addClass("is-selected"); - this.selectedItem = normalizedIndex; - if (scrollIntoView) { - selectedSuggestion.scrollIntoView(false); - } - } -}; -var TextInputSuggest = class { - constructor(app, inputEl) { - this.app = app; - this.inputEl = inputEl; - this.scope = new import_obsidian5.Scope(); - this.suggestEl = createDiv("suggestion-container"); - const suggestion = this.suggestEl.createDiv("suggestion"); - this.suggest = new Suggest(this, suggestion, this.scope); - this.scope.register([], "Escape", this.close.bind(this)); - this.inputEl.addEventListener("input", this.onInputChanged.bind(this)); - this.inputEl.addEventListener("focus", this.onInputChanged.bind(this)); - this.inputEl.addEventListener("blur", this.close.bind(this)); - this.suggestEl.on("mousedown", ".suggestion-container", (event) => { - event.preventDefault(); - }); - } - onInputChanged() { - const inputStr = this.inputEl.value; - const suggestions = this.getSuggestions(inputStr); - if (!suggestions) { - this.close(); - return; - } - if (suggestions.length > 0) { - this.suggest.setSuggestions(suggestions); - this.open(this.app.dom.appContainerEl, this.inputEl); - } else { - this.close(); - } - } - open(container, inputEl) { - this.app.keymap.pushScope(this.scope); - container.appendChild(this.suggestEl); - this.popper = createPopper(inputEl, this.suggestEl, { - placement: "bottom-start", - modifiers: [ - { - name: "sameWidth", - enabled: true, - fn: ({ state, instance }) => { - const targetWidth = `${state.rects.reference.width}px`; - if (state.styles.popper.width === targetWidth) { - return; - } - state.styles.popper.width = targetWidth; - instance.update(); - }, - phase: "beforeWrite", - requires: ["computeStyles"] - } - ] - }); - } - close() { - this.app.keymap.popScope(this.scope); - this.suggest.setSuggestions([]); - if (this.popper) - this.popper.destroy(); - this.suggestEl.detach(); - } -}; - -// src/settings/suggesters/FileNameFormatSuggester.ts -var DATE_SYNTAX = "{{DATE}}"; -var DATE_FORMAT_SYNTAX = "{{DATE:}}"; -var DATE_SYNTAX_SUGGEST_REGEX = /{{D?A?T?E?}?}?$/i; -var DATE_FORMAT_SYNTAX_SUGGEST_REGEX = /{{D?A?T?E?:?$|{{DATE:[^\n\r}]*}}$/i; -var AUTHOR_SYNTAX = "{{author}}"; -var AUTHOR_SYNTAX_SUGGEST_REGEX = /{{a?u?t?h?o?r?}?}?$/i; -var TITLE_SYNTAX = "{{title}}"; -var TITLE_SYNTAX_SUGGEST_REGEX = /{{t?i?t?l?e?}?}?$/i; -var FileNameFormatSuggest = class extends TextInputSuggest { - constructor(app, inputEl) { - super(app, inputEl); - this.app = app; - this.inputEl = inputEl; - this.lastInput = ""; - } - getSuggestions(inputStr) { - const cursorPosition = this.inputEl.selectionStart; - const lookbehind = 15; - const inputBeforeCursor = inputStr.substr(cursorPosition - lookbehind, lookbehind); - const suggestions = []; - this.processToken(inputBeforeCursor, (match, suggestion) => { - this.lastInput = match[0]; - suggestions.push(suggestion); - }); - return suggestions; - } - selectSuggestion(item) { - const cursorPosition = this.inputEl.selectionStart; - const lastInputLength = this.lastInput.length; - const currentInputValue = this.inputEl.value; - let insertedEndPosition = 0; - const insert = (text, offset2 = 0) => { - return `${currentInputValue.substr(0, cursorPosition - lastInputLength + offset2)}${text}${currentInputValue.substr(cursorPosition)}`; - }; - this.processToken(item, (match, suggestion) => { - if (item.contains(suggestion)) { - this.inputEl.value = insert(item); - insertedEndPosition = cursorPosition - lastInputLength + item.length; - if (item === DATE_FORMAT_SYNTAX) { - insertedEndPosition -= 2; - } - } - }); - this.inputEl.trigger("input"); - this.close(); - this.inputEl.setSelectionRange(insertedEndPosition, insertedEndPosition); - } - renderSuggestion(value, el) { - if (value) - el.setText(value); - } - processToken(input, callback) { - const dateFormatMatch = DATE_FORMAT_SYNTAX_SUGGEST_REGEX.exec(input); - if (dateFormatMatch) - callback(dateFormatMatch, DATE_FORMAT_SYNTAX); - const dateMatch = DATE_SYNTAX_SUGGEST_REGEX.exec(input); - if (dateMatch) - callback(dateMatch, DATE_SYNTAX); - const authorMatch = AUTHOR_SYNTAX_SUGGEST_REGEX.exec(input); - if (authorMatch) - callback(authorMatch, AUTHOR_SYNTAX); - const titleMatch = TITLE_SYNTAX_SUGGEST_REGEX.exec(input); - if (titleMatch) - callback(titleMatch, TITLE_SYNTAX); - } -}; - -// src/settings/suggesters/FolderSuggester.ts -var import_obsidian6 = __toModule(require("obsidian")); -var FolderSuggest = class extends TextInputSuggest { - getSuggestions(inputStr) { - const abstractFiles = this.app.vault.getAllLoadedFiles(); - const folders = []; - const lowerCaseInputStr = inputStr.toLowerCase(); - abstractFiles.forEach((folder) => { - if (folder instanceof import_obsidian6.TFolder && folder.path.toLowerCase().contains(lowerCaseInputStr)) { - folders.push(folder); - } - }); - return folders; - } - renderSuggestion(file, el) { - el.setText(file.path); - } - selectSuggestion(file) { - this.inputEl.value = file.path; - this.inputEl.trigger("input"); - this.close(); - } -}; - -// src/settings/settings.ts -var docUrl = "https://github.com/anpigon/obsidian-book-search-plugin"; -var DefaultFrontmatterKeyType; -(function(DefaultFrontmatterKeyType2) { - DefaultFrontmatterKeyType2["snakeCase"] = "Snake Case"; - DefaultFrontmatterKeyType2["camelCase"] = "Camel Case"; -})(DefaultFrontmatterKeyType || (DefaultFrontmatterKeyType = {})); -var DEFAULT_SETTINGS = { - folder: "", - fileNameFormat: "", - frontmatter: "", - content: "", - useDefaultFrontmatter: true, - defaultFrontmatterKeyType: DefaultFrontmatterKeyType.snakeCase -}; -var BookSearchSettingTab = class extends import_obsidian7.PluginSettingTab { - constructor(app, plugin) { - super(app, plugin); - this.plugin = plugin; - } - display() { - const { containerEl } = this; - containerEl.empty(); - containerEl.classList.add("book-search-plugin__settings"); - containerEl.createEl("h2", { text: "General Settings" }); - new import_obsidian7.Setting(containerEl).setName("New file location").setDesc("New book notes will be placed here.").addSearch((cb) => { - try { - new FolderSuggest(this.app, cb.inputEl); - } catch (e) { - } - cb.setPlaceholder("Example: folder1/folder2").setValue(this.plugin.settings.folder).onChange((new_folder) => { - this.plugin.settings.folder = new_folder; - this.plugin.saveSettings(); - }); - }); - const newFileNameEl = new import_obsidian7.Setting(containerEl); - const newFileNameHintEl = containerEl.createEl("div"); - newFileNameHintEl.classList.add("setting-item-description"); - newFileNameHintEl.classList.add("book-search-plugin__settings--new_file_name_hint"); - const newFileNameHintDesc = document.createDocumentFragment(); - const newFileNameHintDescCode = newFileNameHintDesc.createEl("code", { text: replaceDateInString(this.plugin.settings.fileNameFormat) || "{{title}} - {{author}}" }); - newFileNameHintDesc.append(newFileNameHintDescCode); - newFileNameHintEl.append(newFileNameHintDesc); - newFileNameEl.setClass("book-search-plugin__settings--new_file_name").setName("New file name").setDesc("Enter the file name format.").addSearch((cb) => { - try { - new FileNameFormatSuggest(this.app, cb.inputEl); - } catch (e) { - } - cb.setPlaceholder("Example: {{title}} - {{author}}").setValue(this.plugin.settings.fileNameFormat).onChange((newValue) => { - this.plugin.settings.fileNameFormat = newValue == null ? void 0 : newValue.trim(); - this.plugin.saveSettings(); - newFileNameHintDescCode.innerHTML = replaceDateInString(newValue) || "{{title}} - {{author}}"; - }); - }); - containerEl.createEl("h2", { text: "Frontmatter Settings" }); - new import_obsidian7.Setting(containerEl).setName("Use the default frontmatter").setDesc("If you don't want the default frontmatter to be inserted, disable it.").addToggle((toggle) => { - toggle.setValue(this.plugin.settings.useDefaultFrontmatter).onChange((value) => __async(this, null, function* () { - const newValue = value; - this.plugin.settings.useDefaultFrontmatter = newValue; - yield this.plugin.saveSettings(); - })); - }); - const keyTypeDesc = document.createDocumentFragment(); - keyTypeDesc.append("- Snake Case: ", keyTypeDesc.createEl("code", { text: "total_page" }), keyTypeDesc.createEl("br"), "- Camel Case: ", keyTypeDesc.createEl("code", { text: "totalPage" })); - new import_obsidian7.Setting(containerEl).setName("Default frontmatter key type").setDesc(keyTypeDesc).addDropdown((dropDown) => { - dropDown.addOption(DefaultFrontmatterKeyType.snakeCase, DefaultFrontmatterKeyType.snakeCase.toString()); - dropDown.addOption(DefaultFrontmatterKeyType.camelCase, DefaultFrontmatterKeyType.camelCase.toString()); - dropDown.setValue(this.plugin.settings.defaultFrontmatterKeyType); - dropDown.onChange((value) => __async(this, null, function* () { - this.plugin.settings.defaultFrontmatterKeyType = value; - yield this.plugin.saveSettings(); - })); - }); - new import_obsidian7.Setting(containerEl).setName("Text to insert into frontmatter").setDesc(createSyntaxesDescription("#text-to-insert-into-frontmatter")).addTextArea((textArea) => { - const prevValue = this.plugin.settings.frontmatter; - textArea.setValue(prevValue).onChange((value) => __async(this, null, function* () { - const newValue = value; - this.plugin.settings.frontmatter = newValue; - yield this.plugin.saveSettings(); - })); - }); - containerEl.createEl("h2", { text: "Content Settings" }); - new import_obsidian7.Setting(containerEl).setName("Text to insert into content").setDesc(createSyntaxesDescription("#text-to-insert-into-content")).addTextArea((textArea) => { - const prevValue = this.plugin.settings.content; - textArea.setValue(prevValue).onChange((value) => __async(this, null, function* () { - const newValue = value; - this.plugin.settings.content = newValue; - yield this.plugin.saveSettings(); - })); - }); - } -}; -function createSyntaxesDescription(anchorLink) { - const desc = document.createDocumentFragment(); - desc.append("The following syntaxes are available: ", desc.createEl("br"), desc.createEl("code", { text: "{{title}}" }), ", ", desc.createEl("code", { text: "{{author}}" }), ", ", desc.createEl("code", { text: "{{category}}" }), ", ", desc.createEl("code", { text: "{{publisher}}" }), ", ", desc.createEl("code", { text: "{{publishDate}}" }), ", ", desc.createEl("code", { text: "{{totalPage}}" }), ", ", desc.createEl("code", { text: "{{coverUrl}}" }), ", ", desc.createEl("code", { text: "{{isbn10}}" }), ", ", desc.createEl("code", { text: "{{isbn13}}" }), desc.createEl("br"), "Check the ", desc.createEl("a", { - href: `${docUrl}${anchorLink}`, - text: "documentation" - }), " for more information."); - return desc; -} - -// src/main.ts -var BookSearchPlugin = class extends import_obsidian8.Plugin { - onload() { - return __async(this, null, function* () { - yield this.loadSettings(); - const ribbonIconEl = this.addRibbonIcon("book", "Create new book note", () => this.createNewBookNote()); - ribbonIconEl.addClass("obsidian-book-search-plugin-ribbon-class"); - this.addCommand({ - id: "open-book-search-modal", - name: "Create new book note", - callback: () => this.createNewBookNote() - }); - this.addCommand({ - id: "open-book-search-modal-to-insert", - name: "Insert the metadata", - callback: () => this.insertMetadata() - }); - this.addSettingTab(new BookSearchSettingTab(this.app, this)); - }); - } - searchBookMetadata(query, writer) { - return __async(this, null, function* () { - try { - const book = yield this.openBookSearchModal(query); - let frontMatter = replaceVariableSyntax(book, this.settings.frontmatter); - if (this.settings.useDefaultFrontmatter) { - frontMatter = makeFrontMater(book, frontMatter, this.settings.defaultFrontmatterKeyType); - } - frontMatter = frontMatter.trim(); - const content = replaceVariableSyntax(book, this.settings.content); - const fileContent = frontMatter ? `--- -${frontMatter} +var Lr=Object.create;var ke=Object.defineProperty;var Fr=Object.getOwnPropertyDescriptor;var _r=Object.getOwnPropertyNames,Lt=Object.getOwnPropertySymbols,Vr=Object.getPrototypeOf,Ft=Object.prototype.hasOwnProperty,Hr=Object.prototype.propertyIsEnumerable;var _t=(r,e,t)=>e in r?ke(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,we=(r,e)=>{for(var t in e||(e={}))Ft.call(e,t)&&_t(r,t,e[t]);if(Lt)for(var t of Lt(e))Hr.call(e,t)&&_t(r,t,e[t]);return r};var Vt=r=>ke(r,"__esModule",{value:!0});var $r=(r,e)=>{Vt(r);for(var t in e)ke(r,t,{get:e[t],enumerable:!0})},Wr=(r,e,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of _r(e))!Ft.call(r,o)&&o!=="default"&&ke(r,o,{get:()=>e[o],enumerable:!(t=Fr(e,o))||t.enumerable});return r},W=r=>Wr(Vt(ke(r!=null?Lr(Vr(r)):{},"default",r&&r.__esModule&&"default"in r?{get:()=>r.default,enumerable:!0}:{value:r,enumerable:!0})),r);var d=(r,e,t)=>new Promise((o,i)=>{var n=p=>{try{s(t.next(p))}catch(c){i(c)}},a=p=>{try{s(t.throw(p))}catch(c){i(c)}},s=p=>p.done?o(p.value):Promise.resolve(p.value).then(n,a);s((t=t.apply(r,e)).next())});$r(exports,{default:()=>Ot});var kr=W(require("path")),Ce=W(require("obsidian"));var xe=W(require("obsidian"));var N;(function(t){t.google="google",t.naver="naver"})(N||(N={}));var Ht=W(require("obsidian"));var tt=class{getByQuery(e){return d(this,null,function*(){try{let t={q:e,maxResults:40,printType:"books"},o=window.moment.locale();o&&(t.langRestrict=o);let i=yield $e("https://www.googleapis.com/books/v1/volumes",t);if(i.totalItems==0)throw new Error("No results found.");return i.items.map(({volumeInfo:n})=>this.createBookItem(n))}catch(t){throw console.warn(t),t}})}getISBN(e){return e==null?void 0:e.reduce((t,o)=>(o.type=="ISBN_10"&&(t.isbn10=o.identifier.trim()),o.type=="ISBN_13"&&(t.isbn13=o.identifier.trim()),t),{})}createBookItem(e){var o,i,n,a,s;return we({title:e.title,author:this.formatList(e.authors),category:this.formatList(e.categories),publisher:e.publisher,totalPage:e.pageCount,coverUrl:(i=(o=e.imageLinks)==null?void 0:o.thumbnail)!=null?i:"",coverSmallUrl:(a=(n=e.imageLinks)==null?void 0:n.smallThumbnail)!=null?a:"",publishDate:((s=e.publishedDate)==null?void 0:s.slice(0,4))||"",description:e.description,link:e.canonicalVolumeLink||e.infoLink,previewLink:e.previewLink},this.getISBN(e.industryIdentifiers))}convertGoogleBookImageURLSize(e,t){return e.replace(/(&zoom)=\d/,`$1=${t}`)}formatList(e){var t,o;return(e==null?void 0:e.length)>1?e.map(i=>`${i.trim()}`).join(", "):(o=(t=e==null?void 0:e[0])==null?void 0:t.replace("N/A",""))!=null?o:""}};var rt=class{constructor(e,t){this.clientId=e;this.clientSecret=t}getByQuery(e){return d(this,null,function*(){try{let t={query:e,display:50,sort:"sim"},o={"X-Naver-Client-Id":this.clientId,"X-Naver-Client-Secret":this.clientSecret},i=yield $e("https://openapi.naver.com/v1/search/book.json",t,o);if(i.total==0)throw new Error("No results found.");return i.items.map(this.createBookItem)}catch(t){throw console.warn(t),t}})}createBookItem(e){var t,o;return we({title:e.title,author:e.author,publisher:e.publisher,coverUrl:e.image,publishDate:((t=e.pubdate)==null?void 0:t.slice(0,4))||"",link:e.link,description:e.description,isbn:e.isbn},((o=e.isbn)==null?void 0:o.length)>=13?{isbn13:e.isbn}:{isbn10:e.isbn})}};function $t(r){if(r.serviceProvider===N.google)return new tt;if(r.serviceProvider===N.naver){if(!r.naverClientId||!r.naverClientSecret)throw new Error("\uB124\uC774\uBC84 \uAC1C\uBC1C\uC790\uC13C\uD130\uC5D0\uC11C `Client ID`\uC640 `Client Secret`\uB97C \uBC1C\uAE09\uBC1B\uC544 \uC124\uC815\uD574\uC8FC\uC138\uC694.");return new rt(r.naverClientId,r.naverClientSecret)}}function $e(o){return d(this,arguments,function*(r,e={},t){let i=new URL(r);return Object.entries(e).forEach(([a,s])=>{i.searchParams.append(a,s==null?void 0:s.toString())}),(yield(0,Ht.requestUrl)({url:i.href,method:"GET",headers:we({Accept:"*/*","Content-Type":"application/json; charset=utf-8"},t)})).json})}var ot=class extends xe.Modal{constructor(e,t,o){super(e.app);this.query=t,this.callback=o,this.serviceProvider=$t(e.settings)}searchBook(){return d(this,null,function*(){if(!this.query)throw new Error("No query entered.");if(!this.isBusy)try{this.isBusy=!0,this.okBtnRef.setDisabled(!1),this.okBtnRef.setButtonText("Requesting...");let e=yield this.serviceProvider.getByQuery(this.query);this.callback(null,e)}catch(e){this.callback(e)}finally{this.close()}})}submitEnterCallback(e){e.key==="Enter"&&this.searchBook()}onOpen(){let{contentEl:e}=this;e.createEl("h2",{text:"Search Book"}),e.createDiv({cls:"book-search-plugin__search-modal--input"},t=>{new xe.TextComponent(t).setValue(this.query).setPlaceholder("Search by keyword or ISBN").onChange(o=>this.query=o).inputEl.addEventListener("keydown",this.submitEnterCallback.bind(this))}),new xe.Setting(e).addButton(t=>t.setButtonText("Cancel").onClick(()=>this.close())).addButton(t=>this.okBtnRef=t.setButtonText("Ok").setCta().onClick(()=>{this.searchBook()}))}onClose(){this.contentEl.empty()}};var Wt=W(require("obsidian")),it=class extends Wt.SuggestModal{constructor(e,t,o){super(e);this.suggestion=t,this.onChoose=o}getSuggestions(e){return this.suggestion.filter(t=>{var i,n,a;let o=e==null?void 0:e.toLowerCase();return((i=t.title)==null?void 0:i.toLowerCase().includes(o))||((n=t.author)==null?void 0:n.toLowerCase().includes(o))||((a=t.publisher)==null?void 0:a.toLowerCase().includes(o))})}renderSuggestion(e,t){let o=e.title,i=e.publisher?`, ${e.publisher}`:"",n=e.publishDate?`(${e.publishDate})`:"",a=e.totalPage?`, p${e.totalPage}`:"",s=`${e.author}${i}${n}${a}`;t.createEl("div",{text:o}),t.createEl("small",{text:s})}onChooseSuggestion(e){this.onChoose(null,e)}};var Xt=W(require("obsidian")),nt=class{constructor(e){this.app=e}jumpToNextCursorLocation(){return d(this,null,function*(){let e=this.app.workspace.getActiveViewOfType(Xt.MarkdownView);if(!e)return;let o=(yield this.app.vault.cachedRead(e.file)).length+1,i=e.editor;i.focus(),i.setCursor(o,0)})}};var U=W(require("obsidian"));var Gt=/^-?[0-9]*$/,st=/{{DATE(\+-?[0-9]+)?}}/,at=/{{DATE:([^}\n\r+]*)(\+-?[0-9]+)?}}/;function Xr(r){return r.replace(/[\\,#%&{}/*<>$":@.]/g,"").replace(/\s+/g," ")}function Ut(r,e){let t;return e?t=Ne(r,We(e)):t=r.author?`${r.title} - ${r.author}`:r.title,Xr(t)+".md"}function Gr(r){return Object.entries(r).reduce((e,[t,o])=>(e[Ur(t)]=o,e),{})}function qt(r,e,t=Q.snakeCase){var n,a;let o=t===Q.camelCase?r:Gr(r),i=typeof e=="string"?qr(e):e;for(let s in i){let p=(a=(n=i[s])==null?void 0:n.toString().trim())!=null?a:"";o[s]&&o[s]!==p?o[s]=`${o[s]}, ${p}`:o[s]=p}return o}function Ne(r,e){return(e==null?void 0:e.trim())?Object.entries(r).reduce((o,[i,n=""])=>o.replace(new RegExp(`{{${i}}}`,"ig"),n),e).replace(/{{.+}}/gi,"").trim():""}function Ur(r){return r.replace(/[A-Z]/g,e=>`_${e==null?void 0:e.toLowerCase()}`)}function qr(r){return r?r.split(` +`).map(e=>{var n,a;let t=e.indexOf(":");if(t===-1)return[e.trim(),""];let o=(n=e.slice(0,t))==null?void 0:n.trim(),i=(a=e.slice(t+1))==null?void 0:a.trim();return[o,i]}).reduce((e,[t,o])=>{var i;return t&&(e[t]=(i=o==null?void 0:o.trim())!=null?i:""),e},{}):{}}function Yt(r){return Object.entries(r).map(([e,t])=>{var i;let o=(i=t==null?void 0:t.toString().trim())!=null?i:"";return/\r|\n/.test(o)?"":/:\s/.test(o)?`${e}: "${o.replace(/"/g,""")}" +`:`${e}: ${o} +`}).join("").trim()}function zt(r){let e;return r.offset!==null&&r.offset!==void 0&&typeof r.offset=="number"&&(e=window.moment.duration(r.offset,"days")),r.format?window.moment().add(e).format(r.format):window.moment().add(e).format("YYYY-MM-DD")}function We(r){let e=r;for(;st.test(e);){let t=st.exec(e),o;if(t[1]){let i=t[1].replace("+","").trim();Gt.test(i)&&(o=parseInt(i))}e=Kt(e,st,zt({offset:o}))}for(;at.test(e);){let t=at.exec(e),o=t[1],i;if(t[2]){let n=t[2].replace("+","").trim();Gt.test(n)&&(i=parseInt(n))}e=Kt(e,at,zt({format:o,offset:i}))}return e}function Kt(r,e,t){return r.replace(e,function(){return t})}var wr=W(require("obsidian"));var P="top",D="bottom",k="right",T="left",Xe="auto",oe=[P,D,k,T],Z="start",le="end",Qt="clippingParents",Ge="viewport",be="popper",Jt="reference",lt=oe.reduce(function(r,e){return r.concat([e+"-"+Z,e+"-"+le])},[]),Ue=[].concat(oe,[Xe]).reduce(function(r,e){return r.concat([e,e+"-"+Z,e+"-"+le])},[]),Yr="beforeRead",zr="read",Kr="afterRead",Qr="beforeMain",Jr="main",Zr="afterMain",eo="beforeWrite",to="write",ro="afterWrite",Zt=[Yr,zr,Kr,Qr,Jr,Zr,eo,to,ro];function M(r){return r?(r.nodeName||"").toLowerCase():null}function B(r){if(r==null)return window;if(r.toString()!=="[object Window]"){var e=r.ownerDocument;return e&&e.defaultView||window}return r}function J(r){var e=B(r).Element;return r instanceof e||r instanceof Element}function A(r){var e=B(r).HTMLElement;return r instanceof e||r instanceof HTMLElement}function ye(r){if(typeof ShadowRoot=="undefined")return!1;var e=B(r).ShadowRoot;return r instanceof e||r instanceof ShadowRoot}function oo(r){var e=r.state;Object.keys(e.elements).forEach(function(t){var o=e.styles[t]||{},i=e.attributes[t]||{},n=e.elements[t];!A(n)||!M(n)||(Object.assign(n.style,o),Object.keys(i).forEach(function(a){var s=i[a];s===!1?n.removeAttribute(a):n.setAttribute(a,s===!0?"":s)}))})}function io(r){var e=r.state,t={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,t.popper),e.styles=t,e.elements.arrow&&Object.assign(e.elements.arrow.style,t.arrow),function(){Object.keys(e.elements).forEach(function(o){var i=e.elements[o],n=e.attributes[o]||{},a=Object.keys(e.styles.hasOwnProperty(o)?e.styles[o]:t[o]),s=a.reduce(function(p,c){return p[c]="",p},{});!A(i)||!M(i)||(Object.assign(i.style,s),Object.keys(n).forEach(function(p){i.removeAttribute(p)}))})}}var er={name:"applyStyles",enabled:!0,phase:"write",fn:oo,effect:io,requires:["computeStyles"]};function R(r){return r.split("-")[0]}var Y=Math.max,pe=Math.min,ee=Math.round;function X(r,e){e===void 0&&(e=!1);var t=r.getBoundingClientRect(),o=1,i=1;if(A(r)&&e){var n=r.offsetHeight,a=r.offsetWidth;a>0&&(o=ee(t.width)/a||1),n>0&&(i=ee(t.height)/n||1)}return{width:t.width/o,height:t.height/i,top:t.top/i,right:t.right/o,bottom:t.bottom/i,left:t.left/o,x:t.left/o,y:t.top/i}}function ce(r){var e=X(r),t=r.offsetWidth,o=r.offsetHeight;return Math.abs(e.width-t)<=1&&(t=e.width),Math.abs(e.height-o)<=1&&(o=e.height),{x:r.offsetLeft,y:r.offsetTop,width:t,height:o}}function De(r,e){var t=e.getRootNode&&e.getRootNode();if(r.contains(e))return!0;if(t&&ye(t)){var o=e;do{if(o&&r.isSameNode(o))return!0;o=o.parentNode||o.host}while(o)}return!1}function _(r){return B(r).getComputedStyle(r)}function pt(r){return["table","td","th"].indexOf(M(r))>=0}function F(r){return((J(r)?r.ownerDocument:r.document)||window.document).documentElement}function te(r){return M(r)==="html"?r:r.assignedSlot||r.parentNode||(ye(r)?r.host:null)||F(r)}function tr(r){return!A(r)||_(r).position==="fixed"?null:r.offsetParent}function no(r){var e=navigator.userAgent.toLowerCase().indexOf("firefox")!==-1,t=navigator.userAgent.indexOf("Trident")!==-1;if(t&&A(r)){var o=_(r);if(o.position==="fixed")return null}var i=te(r);for(ye(i)&&(i=i.host);A(i)&&["html","body"].indexOf(M(i))<0;){var n=_(i);if(n.transform!=="none"||n.perspective!=="none"||n.contain==="paint"||["transform","perspective"].indexOf(n.willChange)!==-1||e&&n.willChange==="filter"||e&&n.filter&&n.filter!=="none")return i;i=i.parentNode}return null}function z(r){for(var e=B(r),t=tr(r);t&&pt(t)&&_(t).position==="static";)t=tr(t);return t&&(M(t)==="html"||M(t)==="body"&&_(t).position==="static")?e:t||no(r)||e}function me(r){return["top","bottom"].indexOf(r)>=0?"x":"y"}function ue(r,e,t){return Y(r,pe(e,t))}function rr(r,e,t){var o=ue(r,e,t);return o>t?t:o}function Ae(){return{top:0,right:0,bottom:0,left:0}}function Me(r){return Object.assign({},Ae(),r)}function Re(r,e){return e.reduce(function(t,o){return t[o]=r,t},{})}var so=function(e,t){return e=typeof e=="function"?e(Object.assign({},t.rects,{placement:t.placement})):e,Me(typeof e!="number"?e:Re(e,oe))};function ao(r){var e,t=r.state,o=r.name,i=r.options,n=t.elements.arrow,a=t.modifiersData.popperOffsets,s=R(t.placement),p=me(s),c=[T,k].indexOf(s)>=0,l=c?"height":"width";if(!(!n||!a)){var m=so(i.padding,t),v=ce(n),u=p==="y"?P:T,w=p==="y"?D:k,f=t.rects.reference[l]+t.rects.reference[p]-a[p]-t.rects.popper[l],g=a[p]-t.rects.reference[p],E=z(n),j=E?p==="y"?E.clientHeight||0:E.clientWidth||0:0,C=f/2-g/2,h=m[u],b=j-v[l]-m[w],x=j/2-v[l]/2+C,y=ue(h,x,b),O=p;t.modifiersData[o]=(e={},e[O]=y,e.centerOffset=y-x,e)}}function lo(r){var e=r.state,t=r.options,o=t.element,i=o===void 0?"[data-popper-arrow]":o;i!=null&&(typeof i=="string"&&(i=e.elements.popper.querySelector(i),!i)||!De(e.elements.popper,i)||(e.elements.arrow=i))}var or={name:"arrow",enabled:!0,phase:"main",fn:ao,effect:lo,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function G(r){return r.split("-")[1]}var po={top:"auto",right:"auto",bottom:"auto",left:"auto"};function co(r){var e=r.x,t=r.y,o=window,i=o.devicePixelRatio||1;return{x:ee(e*i)/i||0,y:ee(t*i)/i||0}}function ir(r){var e,t=r.popper,o=r.popperRect,i=r.placement,n=r.variation,a=r.offsets,s=r.position,p=r.gpuAcceleration,c=r.adaptive,l=r.roundOffsets,m=r.isFixed,v=a.x,u=v===void 0?0:v,w=a.y,f=w===void 0?0:w,g=typeof l=="function"?l({x:u,y:f}):{x:u,y:f};u=g.x,f=g.y;var E=a.hasOwnProperty("x"),j=a.hasOwnProperty("y"),C=T,h=P,b=window;if(c){var x=z(t),y="clientHeight",O="clientWidth";if(x===B(t)&&(x=F(t),_(x).position!=="static"&&s==="absolute"&&(y="scrollHeight",O="scrollWidth")),x=x,i===P||(i===T||i===k)&&n===le){h=D;var I=m&&x===b&&b.visualViewport?b.visualViewport.height:x[y];f-=I-o.height,f*=p?1:-1}if(i===T||(i===P||i===D)&&n===le){C=k;var L=m&&x===b&&b.visualViewport?b.visualViewport.width:x[O];u-=L-o.width,u*=p?1:-1}}var S=Object.assign({position:s},c&&po),V=l===!0?co({x:u,y:f}):{x:u,y:f};if(u=V.x,f=V.y,p){var H;return Object.assign({},S,(H={},H[h]=j?"0":"",H[C]=E?"0":"",H.transform=(b.devicePixelRatio||1)<=1?"translate("+u+"px, "+f+"px)":"translate3d("+u+"px, "+f+"px, 0)",H))}return Object.assign({},S,(e={},e[h]=j?f+"px":"",e[C]=E?u+"px":"",e.transform="",e))}function mo(r){var e=r.state,t=r.options,o=t.gpuAcceleration,i=o===void 0?!0:o,n=t.adaptive,a=n===void 0?!0:n,s=t.roundOffsets,p=s===void 0?!0:s;if(!1)var c;var l={placement:R(e.placement),variation:G(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:i,isFixed:e.options.strategy==="fixed"};e.modifiersData.popperOffsets!=null&&(e.styles.popper=Object.assign({},e.styles.popper,ir(Object.assign({},l,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:a,roundOffsets:p})))),e.modifiersData.arrow!=null&&(e.styles.arrow=Object.assign({},e.styles.arrow,ir(Object.assign({},l,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:p})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})}var nr={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:mo,data:{}};var qe={passive:!0};function uo(r){var e=r.state,t=r.instance,o=r.options,i=o.scroll,n=i===void 0?!0:i,a=o.resize,s=a===void 0?!0:a,p=B(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return n&&c.forEach(function(l){l.addEventListener("scroll",t.update,qe)}),s&&p.addEventListener("resize",t.update,qe),function(){n&&c.forEach(function(l){l.removeEventListener("scroll",t.update,qe)}),s&&p.removeEventListener("resize",t.update,qe)}}var sr={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:uo,data:{}};var fo={left:"right",right:"left",bottom:"top",top:"bottom"};function Se(r){return r.replace(/left|right|bottom|top/g,function(e){return fo[e]})}var go={start:"end",end:"start"};function Ye(r){return r.replace(/start|end/g,function(e){return go[e]})}function fe(r){var e=B(r),t=e.pageXOffset,o=e.pageYOffset;return{scrollLeft:t,scrollTop:o}}function de(r){return X(F(r)).left+fe(r).scrollLeft}function ct(r){var e=B(r),t=F(r),o=e.visualViewport,i=t.clientWidth,n=t.clientHeight,a=0,s=0;return o&&(i=o.width,n=o.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(a=o.offsetLeft,s=o.offsetTop)),{width:i,height:n,x:a+de(r),y:s}}function mt(r){var e,t=F(r),o=fe(r),i=(e=r.ownerDocument)==null?void 0:e.body,n=Y(t.scrollWidth,t.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),a=Y(t.scrollHeight,t.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),s=-o.scrollLeft+de(r),p=-o.scrollTop;return _(i||t).direction==="rtl"&&(s+=Y(t.clientWidth,i?i.clientWidth:0)-n),{width:n,height:a,x:s,y:p}}function ge(r){var e=_(r),t=e.overflow,o=e.overflowX,i=e.overflowY;return/auto|scroll|overlay|hidden/.test(t+i+o)}function ze(r){return["html","body","#document"].indexOf(M(r))>=0?r.ownerDocument.body:A(r)&&ge(r)?r:ze(te(r))}function ie(r,e){var t;e===void 0&&(e=[]);var o=ze(r),i=o===((t=r.ownerDocument)==null?void 0:t.body),n=B(o),a=i?[n].concat(n.visualViewport||[],ge(o)?o:[]):o,s=e.concat(a);return i?s:s.concat(ie(te(a)))}function Ee(r){return Object.assign({},r,{left:r.x,top:r.y,right:r.x+r.width,bottom:r.y+r.height})}function ho(r){var e=X(r);return e.top=e.top+r.clientTop,e.left=e.left+r.clientLeft,e.bottom=e.top+r.clientHeight,e.right=e.left+r.clientWidth,e.width=r.clientWidth,e.height=r.clientHeight,e.x=e.left,e.y=e.top,e}function ar(r,e){return e===Ge?Ee(ct(r)):J(e)?ho(e):Ee(mt(F(r)))}function vo(r){var e=ie(te(r)),t=["absolute","fixed"].indexOf(_(r).position)>=0,o=t&&A(r)?z(r):r;return J(o)?e.filter(function(i){return J(i)&&De(i,o)&&M(i)!=="body"}):[]}function ut(r,e,t){var o=e==="clippingParents"?vo(r):[].concat(e),i=[].concat(o,[t]),n=i[0],a=i.reduce(function(s,p){var c=ar(r,p);return s.top=Y(c.top,s.top),s.right=pe(c.right,s.right),s.bottom=pe(c.bottom,s.bottom),s.left=Y(c.left,s.left),s},ar(r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function Ie(r){var e=r.reference,t=r.element,o=r.placement,i=o?R(o):null,n=o?G(o):null,a=e.x+e.width/2-t.width/2,s=e.y+e.height/2-t.height/2,p;switch(i){case P:p={x:a,y:e.y-t.height};break;case D:p={x:a,y:e.y+e.height};break;case k:p={x:e.x+e.width,y:s};break;case T:p={x:e.x-t.width,y:s};break;default:p={x:e.x,y:e.y}}var c=i?me(i):null;if(c!=null){var l=c==="y"?"height":"width";switch(n){case Z:p[c]=p[c]-(e[l]/2-t[l]/2);break;case le:p[c]=p[c]+(e[l]/2-t[l]/2);break;default:}}return p}function K(r,e){e===void 0&&(e={});var t=e,o=t.placement,i=o===void 0?r.placement:o,n=t.boundary,a=n===void 0?Qt:n,s=t.rootBoundary,p=s===void 0?Ge:s,c=t.elementContext,l=c===void 0?be:c,m=t.altBoundary,v=m===void 0?!1:m,u=t.padding,w=u===void 0?0:u,f=Me(typeof w!="number"?w:Re(w,oe)),g=l===be?Jt:be,E=r.rects.popper,j=r.elements[v?g:l],C=ut(J(j)?j:j.contextElement||F(r.elements.popper),a,p),h=X(r.elements.reference),b=Ie({reference:h,element:E,strategy:"absolute",placement:i}),x=Ee(Object.assign({},E,b)),y=l===be?x:h,O={top:C.top-y.top+f.top,bottom:y.bottom-C.bottom+f.bottom,left:C.left-y.left+f.left,right:y.right-C.right+f.right},I=r.modifiersData.offset;if(l===be&&I){var L=I[i];Object.keys(O).forEach(function(S){var V=[k,D].indexOf(S)>=0?1:-1,H=[P,D].indexOf(S)>=0?"y":"x";O[S]+=L[H]*V})}return O}function ft(r,e){e===void 0&&(e={});var t=e,o=t.placement,i=t.boundary,n=t.rootBoundary,a=t.padding,s=t.flipVariations,p=t.allowedAutoPlacements,c=p===void 0?Ue:p,l=G(o),m=l?s?lt:lt.filter(function(w){return G(w)===l}):oe,v=m.filter(function(w){return c.indexOf(w)>=0});v.length===0&&(v=m);var u=v.reduce(function(w,f){return w[f]=K(r,{placement:f,boundary:i,rootBoundary:n,padding:a})[R(f)],w},{});return Object.keys(u).sort(function(w,f){return u[w]-u[f]})}function wo(r){if(R(r)===Xe)return[];var e=Se(r);return[Ye(r),e,Ye(e)]}function xo(r){var e=r.state,t=r.options,o=r.name;if(!e.modifiersData[o]._skip){for(var i=t.mainAxis,n=i===void 0?!0:i,a=t.altAxis,s=a===void 0?!0:a,p=t.fallbackPlacements,c=t.padding,l=t.boundary,m=t.rootBoundary,v=t.altBoundary,u=t.flipVariations,w=u===void 0?!0:u,f=t.allowedAutoPlacements,g=e.options.placement,E=R(g),j=E===g,C=p||(j||!w?[Se(g)]:wo(g)),h=[g].concat(C).reduce(function(ve,re){return ve.concat(R(re)===Xe?ft(e,{placement:re,boundary:l,rootBoundary:m,padding:c,flipVariations:w,allowedAutoPlacements:f}):re)},[]),b=e.rects.reference,x=e.rects.popper,y=new Map,O=!0,I=h[0],L=0;L=0,Oe=Pe?"width":"height",$=K(e,{placement:S,boundary:l,rootBoundary:m,altBoundary:v,padding:c}),q=Pe?H?k:T:H?D:P;b[Oe]>x[Oe]&&(q=Se(q));var Le=Se(q),ne=[];if(n&&ne.push($[V]<=0),s&&ne.push($[q]<=0,$[Le]<=0),ne.every(function(ve){return ve})){I=S,O=!1;break}y.set(S,ne)}if(O)for(var Fe=w?3:1,Qe=function(re){var Be=h.find(function(Ve){var se=y.get(Ve);if(se)return se.slice(0,re).every(function(Je){return Je})});if(Be)return I=Be,"break"},Te=Fe;Te>0;Te--){var _e=Qe(Te);if(_e==="break")break}e.placement!==I&&(e.modifiersData[o]._skip=!0,e.placement=I,e.reset=!0)}}var lr={name:"flip",enabled:!0,phase:"main",fn:xo,requiresIfExists:["offset"],data:{_skip:!1}};function pr(r,e,t){return t===void 0&&(t={x:0,y:0}),{top:r.top-e.height-t.y,right:r.right-e.width+t.x,bottom:r.bottom-e.height+t.y,left:r.left-e.width-t.x}}function cr(r){return[P,k,D,T].some(function(e){return r[e]>=0})}function bo(r){var e=r.state,t=r.name,o=e.rects.reference,i=e.rects.popper,n=e.modifiersData.preventOverflow,a=K(e,{elementContext:"reference"}),s=K(e,{altBoundary:!0}),p=pr(a,o),c=pr(s,i,n),l=cr(p),m=cr(c);e.modifiersData[t]={referenceClippingOffsets:p,popperEscapeOffsets:c,isReferenceHidden:l,hasPopperEscaped:m},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":l,"data-popper-escaped":m})}var mr={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:bo};function yo(r,e,t){var o=R(r),i=[T,P].indexOf(o)>=0?-1:1,n=typeof t=="function"?t(Object.assign({},e,{placement:r})):t,a=n[0],s=n[1];return a=a||0,s=(s||0)*i,[T,k].indexOf(o)>=0?{x:s,y:a}:{x:a,y:s}}function So(r){var e=r.state,t=r.options,o=r.name,i=t.offset,n=i===void 0?[0,0]:i,a=Ue.reduce(function(l,m){return l[m]=yo(m,e.rects,n),l},{}),s=a[e.placement],p=s.x,c=s.y;e.modifiersData.popperOffsets!=null&&(e.modifiersData.popperOffsets.x+=p,e.modifiersData.popperOffsets.y+=c),e.modifiersData[o]=a}var ur={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:So};function Eo(r){var e=r.state,t=r.name;e.modifiersData[t]=Ie({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})}var fr={name:"popperOffsets",enabled:!0,phase:"read",fn:Eo,data:{}};function dt(r){return r==="x"?"y":"x"}function jo(r){var e=r.state,t=r.options,o=r.name,i=t.mainAxis,n=i===void 0?!0:i,a=t.altAxis,s=a===void 0?!1:a,p=t.boundary,c=t.rootBoundary,l=t.altBoundary,m=t.padding,v=t.tether,u=v===void 0?!0:v,w=t.tetherOffset,f=w===void 0?0:w,g=K(e,{boundary:p,rootBoundary:c,padding:m,altBoundary:l}),E=R(e.placement),j=G(e.placement),C=!j,h=me(E),b=dt(h),x=e.modifiersData.popperOffsets,y=e.rects.reference,O=e.rects.popper,I=typeof f=="function"?f(Object.assign({},e.rects,{placement:e.placement})):f,L=typeof I=="number"?{mainAxis:I,altAxis:I}:Object.assign({mainAxis:0,altAxis:0},I),S=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,V={x:0,y:0};if(!!x){if(n){var H,Pe=h==="y"?P:T,Oe=h==="y"?D:k,$=h==="y"?"height":"width",q=x[h],Le=q+g[Pe],ne=q-g[Oe],Fe=u?-O[$]/2:0,Qe=j===Z?y[$]:O[$],Te=j===Z?-O[$]:-y[$],_e=e.elements.arrow,ve=u&&_e?ce(_e):{width:0,height:0},re=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:Ae(),Be=re[Pe],Ve=re[Oe],se=ue(0,y[$],ve[$]),Je=C?y[$]/2-Fe-se-Be-L.mainAxis:Qe-se-Be-L.mainAxis,Nr=C?-y[$]/2+Fe+se+Ve+L.mainAxis:Te+se+Ve+L.mainAxis,Ze=e.elements.arrow&&z(e.elements.arrow),Dr=Ze?h==="y"?Ze.clientTop||0:Ze.clientLeft||0:0,Tt=(H=S==null?void 0:S[h])!=null?H:0,Ar=q+Je-Tt-Dr,Mr=q+Nr-Tt,Bt=ue(u?pe(Le,Ar):Le,q,u?Y(ne,Mr):ne);x[h]=Bt,V[h]=Bt-q}if(s){var kt,Rr=h==="x"?P:T,Ir=h==="x"?D:k,ae=x[b],He=b==="y"?"height":"width",Nt=ae+g[Rr],Dt=ae-g[Ir],et=[P,T].indexOf(E)!==-1,At=(kt=S==null?void 0:S[b])!=null?kt:0,Mt=et?Nt:ae-y[He]-O[He]-At+L.altAxis,Rt=et?ae+y[He]+O[He]-At-L.altAxis:Dt,It=u&&et?rr(Mt,ae,Rt):ue(u?Mt:Nt,ae,u?Rt:Dt);x[b]=It,V[b]=It-ae}e.modifiersData[o]=V}}var dr={name:"preventOverflow",enabled:!0,phase:"main",fn:jo,requiresIfExists:["offset"]};function gt(r){return{scrollLeft:r.scrollLeft,scrollTop:r.scrollTop}}function ht(r){return r===B(r)||!A(r)?fe(r):gt(r)}function Co(r){var e=r.getBoundingClientRect(),t=ee(e.width)/r.offsetWidth||1,o=ee(e.height)/r.offsetHeight||1;return t!==1||o!==1}function vt(r,e,t){t===void 0&&(t=!1);var o=A(e),i=A(e)&&Co(e),n=F(e),a=X(r,i),s={scrollLeft:0,scrollTop:0},p={x:0,y:0};return(o||!o&&!t)&&((M(e)!=="body"||ge(n))&&(s=ht(e)),A(e)?(p=X(e,!0),p.x+=e.clientLeft,p.y+=e.clientTop):n&&(p.x=de(n))),{x:a.left+s.scrollLeft-p.x,y:a.top+s.scrollTop-p.y,width:a.width,height:a.height}}function Po(r){var e=new Map,t=new Set,o=[];r.forEach(function(n){e.set(n.name,n)});function i(n){t.add(n.name);var a=[].concat(n.requires||[],n.requiresIfExists||[]);a.forEach(function(s){if(!t.has(s)){var p=e.get(s);p&&i(p)}}),o.push(n)}return r.forEach(function(n){t.has(n.name)||i(n)}),o}function wt(r){var e=Po(r);return Zt.reduce(function(t,o){return t.concat(e.filter(function(i){return i.phase===o}))},[])}function xt(r){var e;return function(){return e||(e=new Promise(function(t){Promise.resolve().then(function(){e=void 0,t(r())})})),e}}function bt(r){var e=r.reduce(function(t,o){var i=t[o.name];return t[o.name]=i?Object.assign({},i,o,{options:Object.assign({},i.options,o.options),data:Object.assign({},i.data,o.data)}):o,t},{});return Object.keys(e).map(function(t){return e[t]})}var gr={placement:"bottom",modifiers:[],strategy:"absolute"};function hr(){for(var r=arguments.length,e=new Array(r),t=0;t(r%e+e)%e,xr=class{constructor(e,t,o){this.owner=e,this.containerEl=t,t.on("click",".suggestion-item",this.onSuggestionClick.bind(this)),t.on("mousemove",".suggestion-item",this.onSuggestionMouseover.bind(this)),o.register([],"ArrowUp",i=>{if(!i.isComposing)return this.setSelectedItem(this.selectedItem-1,!0),!1}),o.register([],"ArrowDown",i=>{if(!i.isComposing)return this.setSelectedItem(this.selectedItem+1,!0),!1}),o.register([],"Enter",i=>{if(!i.isComposing)return this.useSelectedItem(i),!1})}onSuggestionClick(e,t){e.preventDefault();let o=this.suggestions.indexOf(t);this.setSelectedItem(o,!1),this.useSelectedItem(e)}onSuggestionMouseover(e,t){let o=this.suggestions.indexOf(t);this.setSelectedItem(o,!1)}setSuggestions(e){this.containerEl.empty();let t=[];e.forEach(o=>{let i=this.containerEl.createDiv("suggestion-item");this.owner.renderSuggestion(o,i),t.push(i)}),this.values=e,this.suggestions=t,this.setSelectedItem(0,!1)}useSelectedItem(e){let t=this.values[this.selectedItem];t&&this.owner.selectSuggestion(t,e)}setSelectedItem(e,t){let o=To(e,this.suggestions.length),i=this.suggestions[this.selectedItem],n=this.suggestions[o];i==null||i.removeClass("is-selected"),n==null||n.addClass("is-selected"),this.selectedItem=o,t&&n.scrollIntoView(!1)}},he=class{constructor(e,t){this.app=e,this.inputEl=t,this.scope=new wr.Scope,this.suggestEl=createDiv("suggestion-container");let o=this.suggestEl.createDiv("suggestion");this.suggest=new xr(this,o,this.scope),this.scope.register([],"Escape",this.close.bind(this)),this.inputEl.addEventListener("input",this.onInputChanged.bind(this)),this.inputEl.addEventListener("focus",this.onInputChanged.bind(this)),this.inputEl.addEventListener("blur",this.close.bind(this)),this.suggestEl.on("mousedown",".suggestion-container",i=>{i.preventDefault()})}onInputChanged(){let e=this.inputEl.value,t=this.getSuggestions(e);if(!t){this.close();return}t.length>0?(this.suggest.setSuggestions(t),this.open(this.app.dom.appContainerEl,this.inputEl)):this.close()}open(e,t){this.app.keymap.pushScope(this.scope),e.appendChild(this.suggestEl),this.popper=yt(t,this.suggestEl,{placement:"bottom-start",modifiers:[{name:"sameWidth",enabled:!0,fn:({state:o,instance:i})=>{let n=`${o.rects.reference.width}px`;o.styles.popper.width!==n&&(o.styles.popper.width=n,i.update())},phase:"beforeWrite",requires:["computeStyles"]}]})}close(){this.app.keymap.popScope(this.scope),this.suggest.setSuggestions([]),this.popper&&this.popper.destroy(),this.suggestEl.detach()}};var Bo="{{DATE}}",br="{{DATE:}}",ko=/{{D?A?T?E?}?}?$/i,No=/{{D?A?T?E?:?$|{{DATE:[^\n\r}]*}}$/i,Do="{{author}}",Ao=/{{a?u?t?h?o?r?}?}?$/i,Mo="{{title}}",Ro=/{{t?i?t?l?e?}?}?$/i,St=class extends he{constructor(e,t){super(e,t);this.app=e;this.inputEl=t;this.lastInput=""}getSuggestions(e){let t=this.inputEl.selectionStart,o=15,i=e.substr(t-o,o),n=[];return this.processToken(i,(a,s)=>{this.lastInput=a[0],n.push(s)}),n}selectSuggestion(e){let t=this.inputEl.selectionStart,o=this.lastInput.length,i=this.inputEl.value,n=0,a=(s,p=0)=>`${i.substr(0,t-o+p)}${s}${i.substr(t)}`;this.processToken(e,(s,p)=>{e.contains(p)&&(this.inputEl.value=a(e),n=t-o+e.length,e===br&&(n-=2))}),this.inputEl.trigger("input"),this.close(),this.inputEl.setSelectionRange(n,n)}renderSuggestion(e,t){e&&t.setText(e)}processToken(e,t){let o=No.exec(e);o&&t(o,br);let i=ko.exec(e);i&&t(i,Bo);let n=Ao.exec(e);n&&t(n,Do);let a=Ro.exec(e);a&&t(a,Mo)}};var yr=W(require("obsidian"));var Et=class extends he{getSuggestions(e){let t=this.app.vault.getAllLoadedFiles(),o=[],i=e.toLowerCase();return t.forEach(n=>{n instanceof yr.TFolder&&n.path.toLowerCase().contains(i)&&o.push(n)}),o}renderSuggestion(e,t){t.setText(e.path)}selectSuggestion(e){this.inputEl.value=e.path,this.inputEl.trigger("input"),this.close()}};var Sr=W(require("obsidian"));var jt=class extends he{getSuggestions(e){let t=this.app.vault.getAllLoadedFiles(),o=[],i=e.toLowerCase();return t.forEach(n=>{n instanceof Sr.TFile&&n.extension==="md"&&n.path.toLowerCase().contains(i)&&o.push(n)}),o}renderSuggestion(e,t){t.setText(e.path)}selectSuggestion(e){this.inputEl.value=e.path,this.inputEl.trigger("input"),this.close()}};var je=W(require("obsidian")),Ct=class extends je.Modal{constructor(e,t){super(e.app);this.callback=t;var o,i;this.plugin=e,this.currentServiceProvider=(i=(o=e.settings)==null?void 0:o.serviceProvider)!=null?i:N.google}get settings(){return this.plugin.settings}saveSetting(){return d(this,null,function*(){return this.plugin.saveSettings()})}saveClientId(e){this.currentServiceProvider===N.naver&&(this.plugin.settings.naverClientId=e)}saveClientSecret(e){this.currentServiceProvider===N.naver&&(this.settings.naverClientSecret=e)}get currentClientId(){if(this.currentServiceProvider===N.naver)return this.settings.naverClientId}get currentClientSecret(){if(this.currentServiceProvider===N.naver)return this.settings.naverClientSecret}onOpen(){let{contentEl:e}=this;e.createEl("h2",{text:"Service Provider Setting"}),new je.Setting(e).setName("Client ID").addText(t=>{t.setValue(this.currentClientId).onChange(o=>this.saveClientId(o))}),new je.Setting(e).setName("Client Secret").addText(t=>{t.setValue(this.currentClientSecret).onChange(o=>this.saveClientSecret(o))}),new je.Setting(e).addButton(t=>t.setButtonText("Save").setCta().onClick(()=>d(this,null,function*(){var o;yield this.plugin.saveSettings(),this.close(),(o=this.callback)==null||o.call(this)})))}onClose(){this.contentEl.empty()}};var Er="https://github.com/anpigon/obsidian-book-search-plugin",Q;(function(t){t.snakeCase="Snake Case",t.camelCase="Camel Case"})(Q||(Q={}));var jr={folder:"",fileNameFormat:"",frontmatter:"",content:"",useDefaultFrontmatter:!0,defaultFrontmatterKeyType:Q.camelCase,templateFile:"",serviceProvider:N.google,naverClientId:"",naverClientSecret:""},Pt=class extends U.PluginSettingTab{constructor(e,t){super(e,t);this.plugin=t}get settings(){return this.plugin.settings}display(){let{containerEl:e}=this;e.empty(),e.classList.add("book-search-plugin__settings"),Cr(e,"General Settings"),new U.Setting(e).setName("New file location").setDesc("New book notes will be placed here.").addSearch(l=>{try{new Et(this.app,l.inputEl)}catch(m){}l.setPlaceholder("Example: folder1/folder2").setValue(this.plugin.settings.folder).onChange(m=>{this.plugin.settings.folder=m,this.plugin.saveSettings()})});let t=document.createDocumentFragment().createEl("code",{text:We(this.plugin.settings.fileNameFormat)||"{{title}} - {{author}}"});new U.Setting(e).setClass("book-search-plugin__settings--new_file_name").setName("New file name").setDesc("Enter the file name format.").addSearch(l=>{try{new St(this.app,l.inputEl)}catch(m){}l.setPlaceholder("Example: {{title}} - {{author}}").setValue(this.plugin.settings.fileNameFormat).onChange(m=>{this.plugin.settings.fileNameFormat=m==null?void 0:m.trim(),this.plugin.saveSettings(),t.innerHTML=We(m)||"{{title}} - {{author}}"})}),e.createEl("div",{cls:["setting-item-description","book-search-plugin__settings--new_file_name_hint"]}).append(t);let o=document.createDocumentFragment();o.createDiv({text:"Files will be available as templates."}),o.createEl("a",{text:"Example Template",href:`${Er}#example-template`}),new U.Setting(e).setName("Template file").setDesc(o).addSearch(l=>{try{new jt(this.app,l.inputEl)}catch(m){}l.setPlaceholder("Example: templates/template-file").setValue(this.plugin.settings.templateFile).onChange(m=>{this.plugin.settings.templateFile=m,this.plugin.saveSettings()})});let i,n=()=>{i.addClass("book-search-plugin__hide")},a=()=>{i.removeClass("book-search-plugin__hide")},s=(l=(m=>(m=this.settings)==null?void 0:m.serviceProvider)())=>{l===N.naver?a():n()};new U.Setting(e).setName("Service Provider").setDesc("Choose the service provider you want to use to search your books.").setClass("book-search-plugin__settings--service_provider").addDropdown(l=>{var m,v;l.addOption(N.google,`${N.google} (Global)`),l.addOption(N.naver,`${N.naver} (Korean)`),l.setValue((v=(m=this.plugin.settings)==null?void 0:m.serviceProvider)!=null?v:N.google),l.onChange(u=>d(this,null,function*(){let w=u;s(w),this.settings.serviceProvider=w,yield this.plugin.saveSettings()}))}).addExtraButton(l=>{i=l.extraSettingsEl,s(),l.onClick(()=>{new Ct(this.plugin).open()})});let p=[];Pr(e,"Frontmatter Settings",p),p.push(new U.Setting(e).setClass("book-search-plugin__hide").setName("Use the default frontmatter").setDesc("If you don't want the default frontmatter to be inserted, disable it.").addToggle(l=>{l.setValue(this.plugin.settings.useDefaultFrontmatter).onChange(m=>d(this,null,function*(){let v=m;this.plugin.settings.useDefaultFrontmatter=v,yield this.plugin.saveSettings()}))}),new U.Setting(e).setClass("book-search-plugin__hide").setName("Default frontmatter key type").setDesc(Io()).addDropdown(l=>{l.addOption(Q.snakeCase,Q.snakeCase.toString()),l.addOption(Q.camelCase,Q.camelCase.toString()),l.setValue(this.plugin.settings.defaultFrontmatterKeyType),l.onChange(m=>d(this,null,function*(){this.plugin.settings.defaultFrontmatterKeyType=m,yield this.plugin.saveSettings()}))}),new U.Setting(e).setClass("book-search-plugin__hide").setName("(Deprecated) Text to insert into frontmatter").setDesc(Or("#text-to-insert-into-frontmatter")).addTextArea(l=>{let m=this.plugin.settings.frontmatter;l.setValue(m).onChange(v=>d(this,null,function*(){let u=v;this.plugin.settings.frontmatter=u,yield this.plugin.saveSettings()}))}));let c=[];Pr(e,"Content Settings",c),c.push(new U.Setting(e).setClass("book-search-plugin__hide").setName("(Deprecated) Text to insert into content").setDesc(Or("#text-to-insert-into-content")).addTextArea(l=>{let m=this.plugin.settings.content;l.setValue(m).onChange(v=>d(this,null,function*(){let u=v;this.plugin.settings.content=u,yield this.plugin.saveSettings()}))}))}};function Io(){let r=document.createDocumentFragment();return r.append("- Snake Case: ",r.createEl("code",{text:"total_page"}),r.createEl("br"),"- Camel Case: ",r.createEl("code",{text:"totalPage"})),r}function Cr(r,e){let t=document.createDocumentFragment();return t.createEl("h2",{text:e}),new U.Setting(r).setHeading().setName(t)}function Pr(r,e,t){return Cr(r,e).addToggle(o=>{o.onChange(i=>{t.forEach(({settingEl:n})=>{n.toggleClass("book-search-plugin__show",i)})})})}function Or(r){let e=document.createDocumentFragment();return e.append("Please use the template file.",e.createEl("br"),"The following syntaxes are available: ",e.createEl("br"),e.createEl("code",{text:"{{title}}"}),", ",e.createEl("code",{text:"{{author}}"}),", ",e.createEl("code",{text:"{{category}}"}),", ",e.createEl("code",{text:"{{publisher}}"}),", ",e.createEl("code",{text:"{{publishDate}}"}),", ",e.createEl("code",{text:"{{totalPage}}"}),", ",e.createEl("code",{text:"{{coverUrl}}"}),", ",e.createEl("code",{text:"{{isbn10}}"}),", ",e.createEl("code",{text:"{{isbn13}}"}),e.createEl("br"),"Check the ",e.createEl("a",{href:`${Er}${r}`,text:"documentation"})," for more information."),e}var Ke=W(require("obsidian"));function Tr(r,e){return d(this,null,function*(){let{metadataCache:t,vault:o}=r,i=(0,Ke.normalizePath)(e!=null?e:"");if(e==="/")return Promise.resolve("");try{let n=t.getFirstLinkpathDest(i,"");return n?o.cachedRead(n):""}catch(n){return console.error(`Failed to read the daily note template '${i}'`,n),new Ke.Notice("Failed to read the daily note template"),""}})}function Br(r){return r.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(e,t,o,i,n,a)=>{let s=window.moment(),p=window.moment().clone().set({hour:s.get("hour"),minute:s.get("minute"),second:s.get("second")});return o&&p.add(parseInt(i,10),n),a?p.format(a.substring(1).trim()):p.format("YYYY-MM-DD")})}var Ot=class extends Ce.Plugin{onload(){return d(this,null,function*(){yield this.loadSettings(),this.addRibbonIcon("book","Create new book note",()=>this.createNewBookNote()).addClass("obsidian-book-search-plugin-ribbon-class"),this.addCommand({id:"open-book-search-modal",name:"Create new book note",callback:this.createNewBookNote}),this.addCommand({id:"open-book-search-modal-to-insert",name:"Insert the metadata",callback:this.insertMetadata}),this.addSettingTab(new Pt(this.app,this))})}showNotice(e){try{new Ce.Notice(e==null?void 0:e.toString())}catch(t){}}searchBookMetadata(e){return d(this,null,function*(){let t=yield this.openBookSearchModal(e);return yield this.openBookSuggestModal(t)})}getRenderedContents(e){return d(this,null,function*(){let{templateFile:t,useDefaultFrontmatter:o,defaultFrontmatterKeyType:i,frontmatter:n,content:a}=this.settings;if(t){let c=yield Tr(this.app,t);return Ne(e,Br(c))}let s=Ne(e,n);o&&(s=Yt(qt(e,s,i)));let p=Ne(e,a);return s?`--- +${s} --- -${content}` : content; - yield writer(book, fileContent); - yield new CursorJumper(this.app).jumpToNextCursorLocation(); - } catch (err) { - console.warn(err); - try { - new import_obsidian8.Notice(err.toString()); - } catch (e) { - } - } - }); - } - insertMetadata() { - return __async(this, null, function* () { - const markdownView = this.app.workspace.getActiveViewOfType(import_obsidian8.MarkdownView); - if (!markdownView) { - console.warn("Can not find an active markdown view"); - return; - } - yield this.searchBookMetadata(markdownView.file.basename, (_, metadata) => __async(this, null, function* () { - if (!markdownView.editor) { - console.warn("Can not find editor from the active markdown view"); - return; - } - markdownView.editor.replaceRange(metadata, { line: 0, ch: 0 }); - })); - }); - } - createNewBookNote() { - return __async(this, null, function* () { - yield this.searchBookMetadata("", (book, metadata) => __async(this, null, function* () { - const fileName = makeFileName(book, this.settings.fileNameFormat); - const filePath = `${this.settings.folder.replace(/\/$/, "")}/${fileName}.md`; - const targetFile = yield this.app.vault.create(filePath, metadata); - const activeLeaf = this.app.workspace.getLeaf(); - if (!activeLeaf) { - console.warn("No active leaf"); - return; - } - yield activeLeaf.openFile(targetFile, { state: { mode: "source" } }); - activeLeaf.setEphemeralState({ rename: "all" }); - })); - }); - } - openBookSearchModal(query = "") { - return __async(this, null, function* () { - return new Promise((resolve, reject) => { - new BookSearchModal(this.app, query, (error, results) => { - if (error) - return reject(error); - new BookSuggestModal(this.app, results, (error2, selectedBook) => { - if (error2) - return reject(error2); - resolve(selectedBook); - }).open(); - }).open(); - }); - }); - } - loadSettings() { - return __async(this, null, function* () { - this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData()); - }); - } - saveSettings() { - return __async(this, null, function* () { - yield this.saveData(this.settings); - }); - } -}; +${p}`:p})}insertMetadata(){return d(this,null,function*(){let e=this.app.workspace.getActiveViewOfType(Ce.MarkdownView);if(!e){console.warn("Can not find an active markdown view");return}let t=yield this.searchBookMetadata(e.file.basename);if(!e.editor){console.warn("Can not find editor from the active markdown view");return}try{let o=yield this.getRenderedContents(t);e.editor.replaceRange(o,{line:0,ch:0})}catch(o){console.warn(o),this.showNotice(o)}})}createNewBookNote(){return d(this,null,function*(){let e=yield this.searchBookMetadata(),t=this.app.workspace.getLeaf();if(!t){console.warn("No active leaf");return}try{let o=yield this.getRenderedContents(e),i=Ut(e,this.settings.fileNameFormat),n=kr.join(this.settings.folder,i),a=yield this.app.vault.create(n,o);yield t.openFile(a,{state:{mode:"source"}}),t.setEphemeralState({rename:"all"}),yield new nt(this.app).jumpToNextCursorLocation()}catch(o){console.warn(o),this.showNotice(o)}})}openBookSearchModal(e=""){return d(this,null,function*(){return new Promise((t,o)=>new ot(this,e,(i,n)=>i?o(i):t(n)).open())})}openBookSuggestModal(e){return d(this,null,function*(){return new Promise((t,o)=>new it(this.app,e,(i,n)=>i?o(i):t(n)).open())})}loadSettings(){return d(this,null,function*(){this.settings=Object.assign({},jr,yield this.loadData())})}saveSettings(){return d(this,null,function*(){yield this.saveData(this.settings)})}}; diff --git a/.obsidian/plugins/obsidian-book-search-plugin/manifest.json b/.obsidian/plugins/obsidian-book-search-plugin/manifest.json index e6cb21d8..5ed38f37 100644 --- a/.obsidian/plugins/obsidian-book-search-plugin/manifest.json +++ b/.obsidian/plugins/obsidian-book-search-plugin/manifest.json @@ -1,7 +1,7 @@ { "id": "obsidian-book-search-plugin", "name": "Book Search", - "version": "0.4.1", + "version": "0.5.2", "minAppVersion": "0.12.0", "description": "Helps you find books and create notes.", "author": "anpigon", diff --git a/.obsidian/plugins/obsidian-book-search-plugin/styles.css b/.obsidian/plugins/obsidian-book-search-plugin/styles.css index 015ec6d0..ba1c5532 100644 --- a/.obsidian/plugins/obsidian-book-search-plugin/styles.css +++ b/.obsidian/plugins/obsidian-book-search-plugin/styles.css @@ -1,6 +1,6 @@ .book-search-plugin__settings .search-input-container { width: 100%; -} +} .book-search-plugin__settings--new_file_name { padding-bottom: 0; @@ -8,4 +8,22 @@ } .book-search-plugin__settings--new_file_name_hint { margin-bottom: 20px; -} \ No newline at end of file +} +.book-search-plugin__settings--service_provider .dropdown { + text-transform: capitalize; +} + +.book-search-plugin__hide { + display: none; +} + +.book-search-plugin__show { + display: flex; +} + +.book-search-plugin__search-modal--input { + padding-bottom: 18px; +} +.book-search-plugin__search-modal--input input { + width: 100%; +} diff --git a/.obsidian/plugins/obsidian-commits/data.json b/.obsidian/plugins/obsidian-commits/data.json index 1e08a4fc..0484be5f 100644 --- a/.obsidian/plugins/obsidian-commits/data.json +++ b/.obsidian/plugins/obsidian-commits/data.json @@ -851,7 +851,7 @@ }, "03.03 Food & Wine/Hoppin' John.md": { "size": 3101, - "tags": 1, + "tags": 3, "links": 2 }, "03.03 Food & Wine/Chilli Lime n Cumin Cod.md": { @@ -1885,7 +1885,7 @@ "links": 11 }, "05.02 Networks/Server Tools.md": { - "size": 12595, + "size": 14007, "tags": 6, "links": 16 }, @@ -1990,7 +1990,7 @@ "links": 4 }, "02.03 Zürich/Grande.md": { - "size": 922, + "size": 1055, "tags": 0, "links": 4 }, @@ -2475,7 +2475,7 @@ "links": 2 }, "02.03 Zürich/Iroquois.md": { - "size": 1142, + "size": 1329, "tags": 3, "links": 4 }, @@ -2555,7 +2555,7 @@ "links": 2 }, "02.03 Zürich/Afghan Anar.md": { - "size": 1127, + "size": 1258, "tags": 0, "links": 2 }, @@ -3630,7 +3630,7 @@ "links": 4 }, "02.03 Zürich/Café des Amis.md": { - "size": 1042, + "size": 1200, "tags": 1, "links": 4 }, @@ -3640,7 +3640,7 @@ "links": 7 }, "02.03 Zürich/Cantinetta Antinori.md": { - "size": 1152, + "size": 1296, "tags": 3, "links": 4 }, @@ -4080,12 +4080,12 @@ "links": 7 }, "02.03 Zürich/La Réserve.md": { - "size": 1080, + "size": 1259, "tags": 1, "links": 2 }, "02.03 Zürich/No Idea.md": { - "size": 1051, + "size": 1173, "tags": 1, "links": 2 }, @@ -4457,7 +4457,7 @@ "00.02 Inbox/La promesse de l'aube.md": { "size": 1380, "tags": 1, - "links": 1 + "links": 2 }, "00.01 Admin/Calendars/2022-07-07.md": { "size": 1396, @@ -4540,12 +4540,12 @@ "links": 4 }, "02.03 Zürich/Daizy.md": { - "size": 1073, + "size": 1202, "tags": 2, "links": 4 }, "02.03 Zürich/Modo.md": { - "size": 1077, + "size": 1204, "tags": 1, "links": 4 }, @@ -4657,7 +4657,7 @@ "00.01 Admin/Calendars/2022-07-29.md": { "size": 1223, "tags": 1, - "links": 7 + "links": 8 }, "00.01 Admin/Calendars/2022-07-30.md": { "size": 1111, @@ -4667,7 +4667,7 @@ "00.01 Admin/Calendars/2022-07-31.md": { "size": 1167, "tags": 1, - "links": 5 + "links": 6 }, "00.03 News/How PM’s former aide had to ‘nanny him’ through lockdown.md": { "size": 16172, @@ -4817,7 +4817,7 @@ "00.03 News/The Unlikely Rise of Slim Pickins, the First Black-Owned Outdoors Retailer in the Country.md": { "size": 26518, "tags": 4, - "links": 1 + "links": 2 }, "00.03 News/How Bolivia’s ruthless tin baron saved thousands of Jewish refugees.md": { "size": 32198, @@ -4827,7 +4827,7 @@ "00.03 News/Donald Trump and American Intelligence’s Years of Conflict.md": { "size": 9876, "tags": 3, - "links": 1 + "links": 2 }, "00.03 News/YouTube Fraud Led to $23 Million in Royalties for 2 Men, IRS Says.md": { "size": 31648, @@ -4842,7 +4842,7 @@ "00.03 News/How ‘The Bear’ Captures the Panic of Modern Work.md": { "size": 9349, "tags": 2, - "links": 1 + "links": 2 }, "00.01 Admin/Calendars/2022-08-15.md": { "size": 1201, @@ -4857,7 +4857,7 @@ "00.01 Admin/Calendars/2022-08-16.md": { "size": 1130, "tags": 0, - "links": 4 + "links": 6 }, "00.01 Admin/Templates/Template Movie.md": { "size": 1578, @@ -4877,17 +4877,17 @@ "03.04 Cinematheque/The Living Daylights (1987).md": { "size": 2005, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Thunderball (1965).md": { "size": 1991, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/A View to a Kill (1985).md": { "size": 1997, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Un village français (2009–2017).md": { "size": 2625, @@ -4897,125 +4897,360 @@ "03.04 Cinematheque/Diamonds Are Forever (1971).md": { "size": 2008, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Dr No (1962).md": { "size": 1981, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/For Your Eyes Only (1981).md": { "size": 2001, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/From Russia with Love (1963).md": { "size": 2011, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Goldfinger (1964).md": { "size": 1956, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Live and Let Die (1973).md": { "size": 2000, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Moonraker (1979).md": { "size": 1985, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Never Say Never Again (1983).md": { "size": 1980, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Octopussy (1983).md": { "size": 1983, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/On Her Majesty's Secret Service (1969).md": { "size": 2031, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/The Man with the Golden Gun (1974).md": { "size": 2022, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/The Spy Who Loved Me (1977).md": { "size": 2007, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/You Only Live Twice (1967).md": { "size": 2007, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Star Wars (1977).md": { "size": 1985, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Star Wars - Episode V - The Empire Strikes Back (1980).md": { "size": 2061, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Star Wars - Episode VI - Return of the Jedi (1983).md": { "size": 2055, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Star Wars - Episode I - The Phantom Menace (1999).md": { "size": 2049, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Star Wars - Episode II - Attack of the Clones (2002).md": { "size": 2055, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Star Wars - Episode III - Revenge of the Sith (2005).md": { "size": 2023, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Star Wars - Episode VII - The Force Awakens (2015).md": { "size": 2017, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Star Wars - Episode VIII - The Last Jedi (2017).md": { "size": 2013, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Star Wars - Episode IX - The Rise of Skywalker (2019).md": { "size": 2056, "tags": 1, - "links": 1 + "links": 2 }, "03.04 Cinematheque/Life Is Beautiful (1997).md": { "size": 2000, "tags": 1, + "links": 2 + }, + "03.04 Cinematheque/Back to the Future (1985).md": { + "size": 2005, + "tags": 1, + "links": 2 + }, + "03.04 Cinematheque/A Fistful of Dollars (1964).md": { + "size": 2002, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Bagdad Cafe (1987).md": { + "size": 1969, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Batman (1989).md": { + "size": 1963, + "tags": 1, "links": 1 + }, + "03.04 Cinematheque/Batman Returns (1992).md": { + "size": 1989, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/For a Few Dollars More (1965).md": { + "size": 1982, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/McCabe Mrs Miller (1971).md": { + "size": 2007, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Natural Born Killers (1994).md": { + "size": 1969, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Once Upon a Time in the West (1968).md": { + "size": 1994, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Red River (1948).md": { + "size": 1951, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Rio Bravo (1959).md": { + "size": 1954, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Stagecoach (1939).md": { + "size": 1982, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/The Harder They Come (1972).md": { + "size": 2017, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/The Naked Spur (1953).md": { + "size": 2000, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/True Grit (1969).md": { + "size": 1986, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Talk to Her (2002).md": { + "size": 1990, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Licence to Kill (1989).md": { + "size": 1995, + "tags": 1, + "links": 2 + }, + "00.01 Admin/Calendars/2022-08-17.md": { + "size": 1263, + "tags": 0, + "links": 8 + }, + "03.04 Cinematheque/Weeds (2005–2012).md": { + "size": 2620, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/How I Met Your Mother (2005–2014).md": { + "size": 2606, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Game of Thrones (2011–2019).md": { + "size": 2644, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Breaking Bad (2008–2013).md": { + "size": 2636, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/The Wire (2002–2008).md": { + "size": 2628, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/My Name Is Earl (2005–2009).md": { + "size": 2584, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/The Big Bang Theory (2007–2019).md": { + "size": 2638, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Spiral (2005–2020).md": { + "size": 2623, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Californication (2007–2014).md": { + "size": 2596, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/The Office (2005–2013).md": { + "size": 2604, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Narcos (2015–2017).md": { + "size": 2625, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Succession (2018–).md": { + "size": 2601, + "tags": 1, + "links": 2 + }, + "03.04 Cinematheque/Peaky Blinders (2013–2022).md": { + "size": 2625, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/The Simpsons (1989–).md": { + "size": 2622, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Mad Men (2007–2015).md": { + "size": 2599, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/House of Cards (2013–2018).md": { + "size": 2581, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Line of Duty (2012–2021).md": { + "size": 2635, + "tags": 1, + "links": 2 + }, + "03.04 Cinematheque/Dexter (2006–2013).md": { + "size": 2623, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/Formula 1 - Drive to Survive (2019–).md": { + "size": 2653, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/The Queen's Gambit (2020).md": { + "size": 2617, + "tags": 1, + "links": 2 + }, + "03.04 Cinematheque/Ozark (2017–2022).md": { + "size": 2622, + "tags": 1, + "links": 1 + }, + "00.01 Admin/Templates/Template Game.md": { + "size": 0, + "tags": 0, + "links": 0 + }, + "00.01 Admin/Templates/Template Wiki.md": { + "size": 124, + "tags": 0, + "links": 0 + }, + "00.01 Admin/Templates/Template Music.md": { + "size": 0, + "tags": 0, + "links": 0 + }, + "00.07 Wiki/Romain Gary.md": { + "size": 435, + "tags": 1, + "links": 1 + }, + "03.04 Cinematheque/GoldenEye (1995).md": { + "size": 1957, + "tags": 1, + "links": 2 + }, + "00.01 Admin/Calendars/2022-08-18.md": { + "size": 1130, + "tags": 0, + "links": 4 + }, + "00.01 Admin/Calendars/2022-08-19.md": { + "size": 1130, + "tags": 0, + "links": 4 + }, + "02.03 Zürich/Dolder Grand.md": { + "size": 1159, + "tags": 2, + "links": 3 } }, "commitTypes": { "/": { - "Refactor": 680, - "Create": 685, - "Link": 1385, - "Expand": 658 + "Refactor": 688, + "Create": 734, + "Link": 1514, + "Expand": 672 } }, "dailyCommits": { @@ -5027,32 +5262,32 @@ "4": 12, "5": 6, "6": 26, - "7": 217, - "8": 362, - "9": 320, - "10": 174, - "11": 120, + "7": 222, + "8": 375, + "9": 324, + "10": 204, + "11": 186, "12": 137, "13": 260, "14": 189, "15": 217, "16": 148, - "17": 132, - "18": 317, - "19": 170, - "20": 133, - "21": 92, - "22": 229, + "17": 160, + "18": 354, + "19": 171, + "20": 134, + "21": 99, + "22": 237, "23": 53 } }, "weeklyCommits": { "/": { "Mon": 572, - "Tue": 384, - "Wed": 319, - "Thu": 358, - "Fri": 301, + "Tue": 439, + "Wed": 445, + "Thu": 360, + "Fri": 318, "Sat": 0, "Sun": 1474 } @@ -5060,6 +5295,20 @@ "recentCommits": { "/": { "Expanded": [ + " No Idea ", + " Modo ", + " La Réserve ", + " Iroquois ", + " Grande ", + " Daizy ", + " Cantinetta Antinori ", + " Café des Amis ", + " Dolder Grand ", + " Afghan Anar ", + " 2022-08-17 ", + " Server Tools ", + " Romain Gary ", + " Template Wiki ", " Cinematheque ", " Template TVShow ", " Template Movie ", @@ -5096,76 +5345,68 @@ " 2022-02-03 ", " 2022-02-08 ", " 2022-02-09 ", - " 2022-01-27 ", - " 2022-02-14 ", - " 2022-02-20 ", - " 2022-02-24 ", - " 2022-02-25 ", - " 2022-02-15 ", - " 2022-02-21 ", - " 2022-02-26 ", - " 2022-02-16 ", - " 2022-02-22 ", - " 2022-02-17 ", - " 2022-02-23 ", - " 2022-02-27 ", - " 2022-02-13 ", - " 2022-02-18 " + " 2022-01-27 " ], "Created": [ - " Life Is Beautiful (1997) ", - " Che bella è la vita (1997) ", - " Star Wars - Episode IX - The Rise of Skywalker (2019) ", - " Star Wars - Episode VIII - The Last Jedi (2017) ", - " Star Wars - Episode VII - The Force Awakens (2015) ", - " Star Wars - Episode III - Revenge of the Sith (2005) ", - " Star Wars - Episode II - Attack of the Clones (2002) ", - " Star Wars - Episode I - The Phantom Menace (1999) ", - " Star Wars - Episode VI - Return of the Jedi (1983) ", - " Star Wars - Episode V - The Empire Strikes Back (1980) ", - " Star Wars (1977) ", - " You Only Live Twice (1967) ", - " The Spy Who Loved Me (1977) ", - " The Man with the Golden Gun (1974) ", - " On Her Majesty's Secret Service (1969) ", - " Octopussy (1983) ", - " Never Say Never Again (1983) ", - " Moonraker (1979) ", - " Live and Let Die (1973) ", - " Goldfinger (1964) ", - " From Russia with Love (1963) ", - " For Your Eyes Only (1981) ", - " Dr No (1962) ", - " Diamonds Are Forever (1971) ", - " Un village français (2009–2017) ", - " A View to a Kill (1985) ", - " Thunderball (1965) ", - " The Living Daylights (1987) ", - " Basquiat (1996) ", - " The Wire (2002–2008) ", - " Basquiat (1996) ", - " 1660514400000 ", - " 1660514400000 ", - " Basquiat (1996) ", " Untitled ", - " Basquiat (1996) ", + " 2022-08-19 ", + " 2022-08-18 ", + " GoldenEye (1995) ", + " Romain Gary ", + " Romain Gary ", " Untitled ", - " 2022-08-16 ", " Untitled ", - " 2022-08-15 ", - " Life Progress ", - " Daily ", - " How ‘The Bear’ Captures the Panic of Modern Work ", - " After the Zodiac Killer's '340' Cipher Stumped the FBI, Three Amateurs Made a Breakthrough ", - " YouTube Fraud Led to $23 Million in Royalties for 2 Men, IRS Says ", - " Donald Trump and American Intelligence’s Years of Conflict ", - " How Bolivia’s ruthless tin baron saved thousands of Jewish refugees ", - " The Unlikely Rise of Slim Pickins, the First Black-Owned Outdoors Retailer in the Country ", - " Twitter is becoming a lost city ", - " Then Again Dying man’s note nearly turned history upside down - VTDigger ", - " 2022-08-14 " + " Untitled ", + " Ozark (2017–2022) ", + " The Queen's Gambit (2020) ", + " Formula 1 - Drive to Survive (2019–) ", + " Dexter (2006–2013) ", + " Line of Duty (2012–2021) ", + " House of Cards (2013–2018) ", + " Mad Men (2007–2015) ", + " The Simpsons (1989–) ", + " Peaky Blinders (2013–2022) ", + " Succession (2018–) ", + " Narcos (2015–2017) ", + " The Office (2005–2013) ", + " Californication (2007–2014) ", + " Spiral (2005–2020) ", + " Engrenages (2014–) ", + " The Big Bang Theory (2007–2019) ", + " My Name Is Earl (2005–2009) ", + " The Wire (2002–2008) ", + " Breaking Bad (2008–2013) ", + " Game of Thrones (2011–2019) ", + " How I Met Your Mother (2005–2014) ", + " Weeds (2005–2012) ", + " 2022-08-17 ", + " Licence to Kill (1989) ", + " Talk to Her (2002) ", + " True Grit (1969) ", + " The Naked Spur (1953) ", + " The Harder They Come (1972) ", + " Stagecoach (1939) ", + " Rio Bravo (1959) ", + " Red River (1948) ", + " Once Upon a Time in the West (1968) ", + " Natural Born Killers (1994) ", + " McCabe Mrs Miller (1971) ", + " For a Few Dollars More (1965) ", + " Batman Returns (1992) ", + " Batman (1989) ", + " Bagdad Cafe (1987) ", + " A Fistful of Dollars (1964) ", + " Back to the Future (1985) ", + " Life Is Beautiful (1997) ", + " Che bella è la vita (1997) " ], "Renamed": [ + " Dolder Grand ", + " GoldenEye (1995) ", + " Romain Gary ", + " Template Music ", + " Template Wiki ", + " Template Game ", " Template TVShow ", " Template Movie ", " Template movie ", @@ -5210,15 +5451,52 @@ " Vernon Subutex 1 ", " Voitures ", " Real Estate ", - " @Dubaï ", - " @Dubaï ", - " 末 Git from the Bottom Up ", - " 末 Git from the Bottom Up ", - " 末 test ", - " test ", - " 01 test " + " @Dubaï " ], "Tagged": [ + " Dolder Grand ", + " GoldenEye (1995) ", + " Romain Gary ", + " Romain Gary ", + " Ozark (2017–2022) ", + " Line of Duty (2012–2021) ", + " Dexter (2006–2013) ", + " Formula 1 - Drive to Survive (2019–) ", + " The Queen's Gambit (2020) ", + " The Simpsons (1989–) ", + " Mad Men (2007–2015) ", + " House of Cards (2013–2018) ", + " The Office (2005–2013) ", + " Narcos (2015–2017) ", + " Succession (2018–) ", + " Peaky Blinders (2013–2022) ", + " Spiral (2005–2020) ", + " Californication (2007–2014) ", + " Breaking Bad (2008–2013) ", + " The Wire (2002–2008) ", + " My Name Is Earl (2005–2009) ", + " The Big Bang Theory (2007–2019) ", + " Weeds (2005–2012) ", + " How I Met Your Mother (2005–2014) ", + " Game of Thrones (2011–2019) ", + " Licence to Kill (1989) ", + " Hoppin' John ", + " The Naked Spur (1953) ", + " True Grit (1969) ", + " Talk to Her (2002) ", + " Rio Bravo (1959) ", + " Stagecoach (1939) ", + " The Harder They Come (1972) ", + " Natural Born Killers (1994) ", + " Once Upon a Time in the West (1968) ", + " Red River (1948) ", + " For a Few Dollars More (1965) ", + " McCabe Mrs Miller (1971) ", + " Bagdad Cafe (1987) ", + " Batman (1989) ", + " Batman Returns (1992) ", + " Back to the Future (1985) ", + " A Fistful of Dollars (1964) ", " Life Is Beautiful (1997) ", " Star Wars - Episode VII - The Force Awakens (2015) ", " Star Wars - Episode VIII - The Last Jedi (2017) ", @@ -5226,50 +5504,7 @@ " Star Wars (1977) ", " Star Wars - Episode V - The Empire Strikes Back (1980) ", " Star Wars - Episode VI - Return of the Jedi (1983) ", - " Star Wars - Episode I - The Phantom Menace (1999) ", - " Star Wars - Episode II - Attack of the Clones (2002) ", - " Star Wars - Episode III - Revenge of the Sith (2005) ", - " On Her Majesty's Secret Service (1969) ", - " The Man with the Golden Gun (1974) ", - " The Spy Who Loved Me (1977) ", - " You Only Live Twice (1967) ", - " From Russia with Love (1963) ", - " Goldfinger (1964) ", - " Live and Let Die (1973) ", - " Moonraker (1979) ", - " Never Say Never Again (1983) ", - " Octopussy (1983) ", - " Un village français (2009–2017) ", - " Diamonds Are Forever (1971) ", - " Dr No (1962) ", - " For Your Eyes Only (1981) ", - " Thunderball (1965) ", - " A View to a Kill (1985) ", - " Basquiat (1996) ", - " The Living Daylights (1987) ", - " Basquiat (1996) ", - " Basquiat (1996) ", - " Basquiat (1996) ", - " Cinematheque ", - " 2022-01-31 ", - " 2022-04-17 ", - " 2022-04-03 ", - " 2022-04-16 ", - " 2022-07-31 ", - " 2022-05-24 ", - " 2022-05-30 ", - " 2022-06-25 ", - " 2022-07-29 ", - " 2022-08-14 ", - " 2022-05-29 ", - " 2022-06-08 ", - " How ‘The Bear’ Captures the Panic of Modern Work ", - " YouTube Fraud Led to $23 Million in Royalties for 2 Men, IRS Says ", - " After the Zodiac Killer's '340' Cipher Stumped the FBI, Three Amateurs Made a Breakthrough ", - " How Bolivia’s ruthless tin baron saved thousands of Jewish refugees ", - " Donald Trump and American Intelligence’s Years of Conflict ", - " The Unlikely Rise of Slim Pickins, the First Black-Owned Outdoors Retailer in the Country ", - " Then Again Dying man’s note nearly turned history upside down - VTDigger " + " Star Wars - Episode I - The Phantom Menace (1999) " ], "Refactored": [ " @Main Dashboard ", @@ -5321,6 +5556,8 @@ " Template Movie " ], "Deleted": [ + " Romain Gary ", + " Engrenages (2014–) ", " Che bella è la vita (1997) ", " Basquiat (1996) ", " The Wire (2002–2008) ", @@ -5369,62 +5606,60 @@ " How To Protect an Apache Server with Fail2Ban on Ubuntu 20.04 ", " 2022-03-14 Test event ", " JPEG ", - " JPEG ", - " @Life Admin ", - " Airbus " + " JPEG " ], "Linked": [ - " Life Is Beautiful (1997) ", - " Star Wars - Episode VII - The Force Awakens (2015) ", - " Star Wars - Episode VIII - The Last Jedi (2017) ", + " Dolder Grand ", + " Dolder Grand ", + " 2022-08-19 ", + " 2022-08-18 ", + " 2022-08-16 ", + " 2022-08-17 ", + " GoldenEye (1995) ", + " 2022-08-17 ", + " GoldenEye (1995) ", + " La promesse de l'aube ", + " How ‘The Bear’ Captures the Panic of Modern Work ", + " Romain Gary ", + " The Living Daylights (1987) ", + " The Spy Who Loved Me (1977) ", + " Thunderball (1965) ", + " Star Wars - Episode II - Attack of the Clones (2002) ", " Star Wars - Episode IX - The Rise of Skywalker (2019) ", - " Star Wars (1977) ", + " Star Wars - Episode VII - The Force Awakens (2015) ", " Star Wars - Episode V - The Empire Strikes Back (1980) ", - " Star Wars - Episode VI - Return of the Jedi (1983) ", - " Star Wars - Episode I - The Phantom Menace (1999) ", - " Star Wars - Episode II - Attack of the Clones (2002) ", - " Star Wars - Episode III - Revenge of the Sith (2005) ", - " On Her Majesty's Secret Service (1969) ", " The Man with the Golden Gun (1974) ", - " The Spy Who Loved Me (1977) ", + " Star Wars - Episode VIII - The Last Jedi (2017) ", " You Only Live Twice (1967) ", - " From Russia with Love (1963) ", + " Star Wars - Episode VI - Return of the Jedi (1983) ", + " Star Wars (1977) ", + " Star Wars - Episode III - Revenge of the Sith (2005) ", + " Succession (2018–) ", + " Back to the Future (1985) ", " Goldfinger (1964) ", - " Live and Let Die (1973) ", - " Moonraker (1979) ", " Never Say Never Again (1983) ", - " Octopussy (1983) ", - " 2022-08-14 ", - " Un village français (2009–2017) ", - " Diamonds Are Forever (1971) ", " Dr No (1962) ", - " For Your Eyes Only (1981) ", - " 2022-08-15 ", - " Thunderball (1965) ", + " Star Wars - Episode I - The Phantom Menace (1999) ", + " Moonraker (1979) ", + " Life Is Beautiful (1997) ", + " On Her Majesty's Secret Service (1969) ", + " Diamonds Are Forever (1971) ", + " Live and Let Die (1973) ", " A View to a Kill (1985) ", - " Basquiat (1996) ", - " The Living Daylights (1987) ", - " Basquiat (1996) ", - " Template Movie ", - " Template TVShow ", - " How Bolivia’s ruthless tin baron saved thousands of Jewish refugees ", - " YouTube Fraud Led to $23 Million in Royalties for 2 Men, IRS Says ", - " 2022-08-16 ", - " Cinematheque ", - " 2022-08-15 ", - " 2022-08-15 ", - " 2022-02-20 ", - " 2022-08-14 ", - " How ‘The Bear’ Captures the Panic of Modern Work ", - " After the Zodiac Killer's '340' Cipher Stumped the FBI, Three Amateurs Made a Breakthrough ", - " Then Again Dying man’s note nearly turned history upside down - VTDigger ", - " Twitter is becoming a lost city ", - " After the Zodiac Killer's '340' Cipher Stumped the FBI, Three Amateurs Made a Breakthrough ", - " YouTube Fraud Led to $23 Million in Royalties for 2 Men, IRS Says ", - " Donald Trump and American Intelligence’s Years of Conflict ", - " How Bolivia’s ruthless tin baron saved thousands of Jewish refugees ", - " The Unlikely Rise of Slim Pickins, the First Black-Owned Outdoors Retailer in the Country ", - " Then Again Dying man’s note nearly turned history upside down - VTDigger " + " From Russia with Love (1963) ", + " For Your Eyes Only (1981) ", + " Octopussy (1983) ", + " Licence to Kill (1989) ", + " Ozark (2017–2022) ", + " Line of Duty (2012–2021) ", + " Dexter (2006–2013) ", + " Formula 1 - Drive to Survive (2019–) ", + " The Queen's Gambit (2020) ", + " The Simpsons (1989–) ", + " Mad Men (2007–2015) ", + " House of Cards (2013–2018) ", + " Line of Duty (2012–2021) ", + " The Office (2005–2013) " ], "Removed Tags from": [ " Le Miel de Paris ", diff --git a/.obsidian/plugins/obsidian-media-db-plugin/data.json b/.obsidian/plugins/obsidian-media-db-plugin/data.json index c01764c5..8798eec2 100644 --- a/.obsidian/plugins/obsidian-media-db-plugin/data.json +++ b/.obsidian/plugins/obsidian-media-db-plugin/data.json @@ -1,14 +1,14 @@ { - "folder": "03.04 Cinematheque", + "folder": "00.05 Media", "OMDbKey": "3b1c31d2", "sfwFilter": true, "useCustomYamlStringifier": true, "templates": true, "movieTemplate": "Template Movie.md", "seriesTemplate": "Template TVShow.md", - "gameTemplate": "", - "wikiTemplate": "", - "musicReleaseTemplate": "", + "gameTemplate": "Template Game.md", + "wikiTemplate": "Template Wiki.md", + "musicReleaseTemplate": "Template Music.md", "movieFileNameTemplate": "{{ title }} ({{ year }})", "seriesFileNameTemplate": "{{ title }} ({{ year }})", "gameFileNameTemplate": "{{ title }} ({{ year }})", diff --git a/.obsidian/plugins/obsidian-reminder-plugin/data.json b/.obsidian/plugins/obsidian-reminder-plugin/data.json index ff33baee..66dcc222 100644 --- a/.obsidian/plugins/obsidian-reminder-plugin/data.json +++ b/.obsidian/plugins/obsidian-reminder-plugin/data.json @@ -65,15 +65,10 @@ } ], "05.02 Networks/Server Tools.md": [ - { - "title": ":closed_lock_with_key: [[Selfhosting]], [[Server Tools|Tools]]: Upgrader Bitwarden & Health checks %%done_del%%", - "time": "2022-08-18", - "rowNumber": 707 - }, { "title": "[[Selfhosting]], [[Server Tools|Tools]]: Upgrader Standard Notes & Health checks %%done_del%%", "time": "2022-09-18", - "rowNumber": 710 + "rowNumber": 711 }, { "title": "[[Server Tools]]: Backup server %%done_del%%", @@ -84,6 +79,11 @@ "title": ":desktop_computer: [[Selfhosting]], [[Server Tools|Tools]]: Upgrader Gitea & Health checks %%done_del%%", "time": "2022-10-18", "rowNumber": 704 + }, + { + "title": ":closed_lock_with_key: [[Selfhosting]], [[Server Tools|Tools]]: Upgrader Bitwarden & Health checks %%done_del%%", + "time": "2022-12-18", + "rowNumber": 707 } ], "05.02 Networks/Server VPN.md": [ diff --git a/.obsidian/plugins/obsidian-smart-typography/main.js b/.obsidian/plugins/obsidian-smart-typography/main.js new file mode 100644 index 00000000..0f14400e --- /dev/null +++ b/.obsidian/plugins/obsidian-smart-typography/main.js @@ -0,0 +1,1060 @@ +/* +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'); +var state = require('@codemirror/state'); +var language = require('@codemirror/language'); + +/*! ***************************************************************************** +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()); + }); +} + +// Dashes +const dashRules = [ + // en dash + { + trigger: "-", + from: "--", + to: "–", + contextMatch: /-$/, + }, + // em dash + { + trigger: "-", + from: "–-", + to: "—", + contextMatch: /–$/, + }, + // tripple dash + { + trigger: "-", + from: "—-", + to: "---", + contextMatch: /—$/, + }, +]; +const dashRulesSansEnDash = [ + // em dash + { + trigger: "-", + from: "--", + to: "—", + contextMatch: /-$/, + }, + // tripple dash + { + trigger: "-", + from: "—-", + to: "---", + contextMatch: /—$/, + }, +]; +// Ellipsis +const ellipsisRules = [ + { + trigger: ".", + from: "...", + to: "…", + contextMatch: /\.\.$/, + }, +]; +// Quotes +const smartQuoteRules = [ + // Open double + { + trigger: '"', + from: '"', + to: (settings) => settings.openDouble, + contextMatch: /[\s\{\[\(\<'"\u2018\u201C]$/, + }, + // Close double + { + trigger: '"', + from: '"', + to: (settings) => settings.closeDouble, + contextMatch: /.*$/, + }, + // Paired double + { + trigger: '""', + from: '""', + to: (settings) => settings.openDouble + settings.closeDouble, + contextMatch: /.*$/, + }, + // Open single + { + trigger: "'", + from: "'", + to: (settings) => settings.openSingle, + contextMatch: /[\s\{\[\(\<'"\u2018\u201C]$/, + }, + // Close single + { + trigger: "'", + from: "'", + to: (settings) => settings.closeSingle, + contextMatch: /.*$/, + }, + // Paired single + { + trigger: "''", + from: "''", + to: (settings) => settings.openSingle + settings.closeSingle, + contextMatch: /.*$/, + }, +]; +// Arrows +const arrowRules = [ + { + trigger: "-", + from: "<-", + to: (settings) => settings.leftArrow, + contextMatch: /<$/, + }, + { + trigger: ">", + from: "->", + to: (settings) => settings.rightArrow, + contextMatch: /-$/, + }, +]; +// Guillemet +const guillemetRules = [ + { + trigger: "<", + from: "<<", + to: (settings) => settings.openGuillemet, + contextMatch: /<$/, + }, + { + trigger: ">", + from: ">>", + to: (settings) => settings.closeGuillemet, + contextMatch: />$/, + }, +]; +// Comparisons +const comparisonRules = [ + { + trigger: "=", + from: ">=", + to: "≥", + contextMatch: />$/, + }, + { + trigger: "=", + from: "<=", + to: "≤", + contextMatch: /<$/, + }, + { + trigger: "=", + from: "/=", + to: "≠", + contextMatch: /\/$/, + }, +]; +// Fractions +const fractionRules = [ + { + trigger: "2", + from: "1/2", + to: "½", + contextMatch: /(?:^|\s)1\/$/, + }, + { + trigger: "3", + from: "1/3", + to: "⅓", + contextMatch: /(?:^|\s)1\/$/, + }, + { + trigger: "3", + from: "2/3", + to: "⅔", + contextMatch: /(?:^|\s)2\/$/, + }, + { + trigger: "4", + from: "1/4", + to: "¼", + contextMatch: /(?:^|\s)1\/$/, + }, + { + trigger: "4", + from: "3/4", + to: "¾", + contextMatch: /(?:^|\s)3\/$/, + }, + { + trigger: "5", + from: "1/5", + to: "⅕", + contextMatch: /(?:^|\s)1\/$/, + }, + { + trigger: "5", + from: "2/5", + to: "⅖", + contextMatch: /(?:^|\s)2\/$/, + }, + { + trigger: "5", + from: "3/5", + to: "⅗", + contextMatch: /(?:^|\s)3\/$/, + }, + { + trigger: "5", + from: "4/5", + to: "⅘", + contextMatch: /(?:^|\s)4\/$/, + }, + { + trigger: "6", + from: "1/6", + to: "⅙", + contextMatch: /(?:^|\s)1\/$/, + }, + { + trigger: "6", + from: "5/6", + to: "⅚", + contextMatch: /(?:^|\s)5\/$/, + }, + { + trigger: "7", + from: "1/7", + to: "⅐", + contextMatch: /(?:^|\s)1\/$/, + }, + { + trigger: "8", + from: "1/8", + to: "⅛", + contextMatch: /(?:^|\s)1\/$/, + }, + { + trigger: "8", + from: "3/8", + to: "⅜", + contextMatch: /(?:^|\s)3\/$/, + }, + { + trigger: "8", + from: "5/8", + to: "⅝", + contextMatch: /(?:^|\s)5\/$/, + }, + { + trigger: "8", + from: "7/8", + to: "⅞", + contextMatch: /(?:^|\s)7\/$/, + }, + { + trigger: "9", + from: "1/9", + to: "⅑", + contextMatch: /(?:^|\s)1\/$/, + }, + { + trigger: "0", + from: "1/10", + to: "⅒", + contextMatch: /(?:^|\s)1\/1$/, + }, +]; + +const dashChar = "-"; +const enDashChar = "–"; +const emDashChar = "—"; +const enDash = { + matchTrigger: dashChar, + matchRegExp: /--$/, + performUpdate: (instance, delta, settings) => { + delta.update({ line: delta.from.line, ch: delta.from.ch - 1 }, delta.to, [ + enDashChar, + ]); + }, + performRevert: (instance, delta, settings) => { + if (instance.getRange(delta.from, delta.to) === enDashChar) { + delta.update(delta.from, delta.to, [dashChar + dashChar]); + } + }, +}; +const emDash = { + matchTrigger: dashChar, + matchRegExp: /–-$/, + performUpdate: (instance, delta, settings) => { + delta.update({ line: delta.from.line, ch: delta.from.ch - 1 }, delta.to, [ + emDashChar, + ]); + }, + performRevert: (instance, delta, settings) => { + if (instance.getRange(delta.from, delta.to) === emDashChar) { + delta.update(delta.from, delta.to, [enDashChar + dashChar]); + } + }, +}; +const trippleDash = { + matchTrigger: dashChar, + matchRegExp: /—-$/, + performUpdate: (instance, delta, settings) => { + delta.update({ line: delta.from.line, ch: delta.from.ch - 1 }, delta.to, [ + dashChar + dashChar + dashChar, + ]); + }, + performRevert: (instance, delta, settings) => { }, +}; +const ellipsis = { + matchTrigger: ".", + matchRegExp: /\.\.\.$/, + performUpdate: (instance, delta, settings) => { + delta.update({ line: delta.from.line, ch: delta.from.ch - 2 }, delta.to, [ + "…", + ]); + }, + performRevert: (instance, delta, settings) => { + if (instance.getRange(delta.from, delta.to) === "…") { + delta.update(delta.from, delta.to, ["..."]); + } + }, +}; +const openDoubleQuote = { + matchTrigger: '"', + matchRegExp: /(?:^|[\s\{\[\(\<'"\u2018\u201C])(")$/, + performUpdate: (instance, delta, settings) => { + delta.update(delta.from, delta.to, [settings.openDouble]); + }, + performRevert: (instance, delta, settings) => { + if (instance.getRange(delta.from, delta.to) === settings.openDouble) { + delta.update(delta.from, delta.to, ['"']); + } + }, +}; +const closeDoubleQuote = { + matchTrigger: '"', + matchRegExp: /"$/, + performUpdate: (instance, delta, settings) => { + delta.update(delta.from, delta.to, [settings.closeDouble]); + }, + performRevert: (instance, delta, settings) => { + if (instance.getRange(delta.from, delta.to) === settings.closeDouble) { + delta.update(delta.from, delta.to, ['"']); + } + }, +}; +const pairedDoubleQuote = { + matchTrigger: '""', + matchRegExp: /""$/, + performUpdate: (instance, delta, settings) => { + delta.update(delta.from, delta.to, [ + settings.openDouble + settings.closeDouble, + ]); + }, + performRevert: (instance, delta, settings) => { + if (instance.getRange(delta.from, delta.to) === settings.openDouble) { + delta.update(delta.from, Object.assign(Object.assign({}, delta.to), { ch: delta.to.ch + 1 }), ['""']); + setTimeout(() => instance.setCursor(Object.assign(Object.assign({}, delta.from), { ch: delta.from.ch + 1 }))); + } + }, +}; +const wrappedDoubleQuote = { + matchTrigger: /^".*"$/, + matchRegExp: false, + performUpdate: (instance, delta, settings) => { + delta.update(delta.from, delta.to, [ + settings.openDouble + delta.text[0].slice(1, -1) + settings.closeDouble, + ]); + }, + performRevert: false, +}; +const openSingleQuote = { + matchTrigger: "'", + matchRegExp: /(?:^|[\s\{\[\(\<'"\u2018\u201C])(')$/, + performUpdate: (instance, delta, settings) => { + delta.update(delta.from, delta.to, [settings.openSingle]); + }, + performRevert: (instance, delta, settings) => { + if (instance.getRange(delta.from, delta.to) === settings.openSingle) { + delta.update(delta.from, delta.to, ["'"]); + } + }, +}; +const closeSingleQuote = { + matchTrigger: "'", + matchRegExp: /'$/, + performUpdate: (instance, delta, settings) => { + delta.update(delta.from, delta.to, [settings.closeSingle]); + }, + performRevert: (instance, delta, settings) => { + if (instance.getRange(delta.from, delta.to) === settings.closeSingle) { + delta.update(delta.from, delta.to, ["'"]); + } + }, +}; +const pairedSingleQuote = { + matchTrigger: "''", + matchRegExp: /''$/, + performUpdate: (instance, delta, settings) => { + delta.update(delta.from, delta.to, [ + settings.openSingle + settings.closeSingle, + ]); + }, + performRevert: (instance, delta, settings) => { + if (instance.getRange(delta.from, delta.to) === settings.openSingle) { + delta.update(delta.from, Object.assign(Object.assign({}, delta.to), { ch: delta.to.ch + 1 }), ["''"]); + setTimeout(() => instance.setCursor(Object.assign(Object.assign({}, delta.from), { ch: delta.from.ch + 1 }))); + } + }, +}; +const wrappedSingleQuote = { + matchTrigger: /^'.*'$/, + matchRegExp: false, + performUpdate: (instance, delta, settings) => { + delta.update(delta.from, delta.to, [ + settings.openSingle + delta.text[0].slice(1, -1) + settings.closeSingle, + ]); + }, + performRevert: false, +}; +const rightArrow = { + matchTrigger: ">", + matchRegExp: /->$/, + performUpdate: (instance, delta, settings) => { + delta.update({ line: delta.from.line, ch: delta.from.ch - 1 }, delta.to, [ + settings.rightArrow, + ]); + }, + performRevert: (instance, delta, settings) => { + if (instance.getRange(delta.from, delta.to) === settings.rightArrow) { + delta.update(delta.from, delta.to, ["->"]); + } + }, +}; +const leftArrow = { + matchTrigger: "-", + matchRegExp: /<-$/, + performUpdate: (instance, delta, settings) => { + delta.update({ line: delta.from.line, ch: delta.from.ch - 1 }, delta.to, [ + settings.leftArrow, + ]); + }, + performRevert: (instance, delta, settings) => { + if (instance.getRange(delta.from, delta.to) === settings.leftArrow) { + delta.update(delta.from, delta.to, ["<-"]); + } + }, +}; +const greaterThanOrEqualTo = { + matchTrigger: "=", + matchRegExp: />=$/, + performUpdate: (instance, delta, settings) => { + delta.update({ line: delta.from.line, ch: delta.from.ch - 1 }, delta.to, [ + "≥", + ]); + }, + performRevert: (instance, delta, settings) => { + if (instance.getRange(delta.from, delta.to) === "≥") { + delta.update(delta.from, delta.to, [">="]); + } + }, +}; +const lessThanOrEqualTo = { + matchTrigger: "=", + matchRegExp: /<=$/, + performUpdate: (instance, delta, settings) => { + delta.update({ line: delta.from.line, ch: delta.from.ch - 1 }, delta.to, [ + "≤", + ]); + }, + performRevert: (instance, delta, settings) => { + if (instance.getRange(delta.from, delta.to) === "≤") { + delta.update(delta.from, delta.to, ["<="]); + } + }, +}; +const notEqualTo = { + matchTrigger: "=", + matchRegExp: /\/=$/, + performUpdate: (instance, delta, settings) => { + delta.update({ line: delta.from.line, ch: delta.from.ch - 1 }, delta.to, [ + "≠", + ]); + }, + performRevert: (instance, delta, settings) => { + if (instance.getRange(delta.from, delta.to) === "≠") { + delta.update(delta.from, delta.to, ["/="]); + } + }, +}; +const rightGuillemet = { + matchTrigger: ">", + matchRegExp: />>$/, + performUpdate: (instance, delta, settings) => { + delta.update({ line: delta.from.line, ch: delta.from.ch - 1 }, delta.to, [ + "»", + ]); + }, + performRevert: (instance, delta, settings) => { + if (instance.getRange(delta.from, delta.to) === "»") { + delta.update(delta.from, delta.to, [">>"]); + } + }, +}; +const leftGuillemet = { + matchTrigger: "<", + matchRegExp: /<<$/, + performUpdate: (instance, delta, settings) => { + delta.update({ line: delta.from.line, ch: delta.from.ch - 1 }, delta.to, [ + "«", + ]); + }, + performRevert: (instance, delta, settings) => { + if (instance.getRange(delta.from, delta.to) === "«") { + delta.update(delta.from, delta.to, ["<<"]); + } + }, +}; +const legacyDashRules = [enDash, emDash, trippleDash]; +const legacyEllipsisRules = [ellipsis]; +const legacySmartQuoteRules = [ + openDoubleQuote, + closeDoubleQuote, + pairedDoubleQuote, + wrappedDoubleQuote, + openSingleQuote, + closeSingleQuote, + pairedSingleQuote, + wrappedSingleQuote, +]; +const legacyComparisonRules = [ + lessThanOrEqualTo, + greaterThanOrEqualTo, + notEqualTo, +]; +const legacyArrowRules = [leftArrow, rightArrow]; +const legacyGuillemetRules = [leftGuillemet, rightGuillemet]; + +const DEFAULT_SETTINGS = { + curlyQuotes: true, + emDash: true, + ellipsis: true, + arrows: true, + comparisons: true, + fractions: false, + guillemets: false, + skipEnDash: false, + openSingle: "‘", + closeSingle: "’", + openDouble: "“", + closeDouble: "”", + openGuillemet: "«", + closeGuillemet: "»", + leftArrow: "←", + rightArrow: "→", +}; +class SmartTypography extends obsidian.Plugin { + constructor() { + super(...arguments); + this.beforeChangeHandler = (instance, delta) => { + if (this.legacyLastUpdate.has(instance) && delta.origin === "+delete") { + const revert = this.legacyLastUpdate.get(instance).performRevert; + if (revert) { + revert(instance, delta, this.settings); + this.legacyLastUpdate.delete(instance); + } + return; + } + if (delta.origin === undefined && delta.text.length === 1) { + const input = delta.text[0]; + for (let rule of this.legacyInputRules) { + if (!(rule.matchTrigger instanceof RegExp)) { + continue; + } + if (rule.matchTrigger.test(input)) { + rule.performUpdate(instance, delta, this.settings); + return; + } + } + return; + } + if (delta.origin === "+input" && delta.text.length === 1) { + const input = delta.text[0]; + const rules = this.legacyInputRules.filter((r) => { + return typeof r.matchTrigger === "string" && r.matchTrigger === input; + }); + if (rules.length === 0) { + if (this.legacyLastUpdate.has(instance)) { + this.legacyLastUpdate.delete(instance); + } + return; + } + let str = input; + if (delta.to.ch > 0) { + str = `${instance.getRange({ line: delta.to.line, ch: 0 }, delta.to)}${str}`; + } + for (let rule of rules) { + if (rule.matchRegExp && rule.matchRegExp.test(str)) { + if (shouldCheckTextAtPos(instance, delta.from) && + shouldCheckTextAtPos(instance, delta.to)) { + this.legacyLastUpdate.set(instance, rule); + rule.performUpdate(instance, delta, this.settings); + } + return; + } + } + } + if (this.legacyLastUpdate.has(instance)) { + this.legacyLastUpdate.delete(instance); + } + }; + } + buildInputRules() { + this.legacyInputRules = []; + this.inputRules = []; + this.inputRuleMap = {}; + if (this.settings.emDash) { + if (this.settings.skipEnDash) { + this.inputRules.push(...dashRulesSansEnDash); + } + else { + this.inputRules.push(...dashRules); + } + this.legacyInputRules.push(...legacyDashRules); + } + if (this.settings.ellipsis) { + this.inputRules.push(...ellipsisRules); + this.legacyInputRules.push(...legacyEllipsisRules); + } + if (this.settings.curlyQuotes) { + this.inputRules.push(...smartQuoteRules); + this.legacyInputRules.push(...legacySmartQuoteRules); + } + if (this.settings.arrows) { + this.inputRules.push(...arrowRules); + this.legacyInputRules.push(...legacyArrowRules); + } + if (this.settings.guillemets) { + this.inputRules.push(...guillemetRules); + this.legacyInputRules.push(...legacyGuillemetRules); + } + if (this.settings.comparisons) { + this.inputRules.push(...comparisonRules); + this.legacyInputRules.push(...legacyComparisonRules); + } + if (this.settings.fractions) { + this.inputRules.push(...fractionRules); + } + this.inputRules.forEach((rule) => { + if (this.inputRuleMap[rule.trigger] === undefined) { + this.inputRuleMap[rule.trigger] = []; + } + this.inputRuleMap[rule.trigger].push(rule); + }); + } + onload() { + return __awaiter(this, void 0, void 0, function* () { + yield this.loadSettings(); + this.addSettingTab(new SmartTypographySettingTab(this.app, this)); + // Codemirror 6 + // + // When smart typography overrides changes, we want to keep a record + // so we can undo them when the user presses backspace + const storeTransaction = state.StateEffect.define(); + const prevTransactionState = state.StateField.define({ + create() { + return null; + }, + update(oldVal, tr) { + for (let e of tr.effects) { + if (e.is(storeTransaction)) { + return e.value; + } + } + if (!oldVal || + tr.isUserEvent("input") || + tr.isUserEvent("delete.forward") || + tr.isUserEvent("delete.cut") || + tr.isUserEvent("move") || + tr.isUserEvent("select") || + tr.isUserEvent("undo")) { + return null; + } + return oldVal; + }, + }); + this.registerEditorExtension([ + prevTransactionState, + state.EditorState.transactionFilter.of((tr) => { + // Revert any stored changes on delete + if (tr.isUserEvent("delete.backward") || + tr.isUserEvent("delete.selection")) { + return tr.startState.field(prevTransactionState, false) || tr; + } + // If the user hasn't typed, or the doc hasn't changed, return early + if (!tr.isUserEvent("input.type") || !tr.docChanged) { + return tr; + } + // Cache the syntax tree if we end up accessing it + let tree = null; + // Memoize any positions we check so we can avoid some work + const seenPositions = {}; + const canPerformReplacement = (pos) => { + if (seenPositions[pos] !== undefined) { + return seenPositions[pos]; + } + if (!tree) + tree = language.syntaxTree(tr.state); + const nodeProps = tree + .resolveInner(pos, 1) + .type.prop(language.tokenClassNodeProp); + if (nodeProps && ignoreListRegEx.test(nodeProps)) { + seenPositions[pos] = false; + } + else { + seenPositions[pos] = true; + } + return seenPositions[pos]; + }; + // Store a list of changes and specs to revert these changes + const changes = []; + const reverts = []; + const registerChange = (change, revert) => { + changes.push(change); + reverts.push(revert); + }; + const contextCache = {}; + let newSelection = tr.selection; + tr.changes.iterChanges((fromA, toA, fromB, toB, inserted) => { + const insertedText = inserted.sliceString(0, 0 + inserted.length); + const matchedRules = this.inputRuleMap[insertedText]; + if (!matchedRules) { + return; + } + for (let rule of matchedRules) { + // If we're in a codeblock, etc, return early, no need to continue checking + if (!canPerformReplacement(fromA)) + return; + // Grab and cache three chars before the one being inserted + if (contextCache[fromA] === undefined) { + contextCache[fromA] = tr.newDoc.sliceString(fromB - 3, fromB); + } + const context = contextCache[fromA]; + if (!rule.contextMatch.test(context)) { + continue; + } + const insert = typeof rule.to === "string" ? rule.to : rule.to(this.settings); + const replacementLength = rule.from.length - rule.trigger.length; + const insertionPoint = fromA - replacementLength; + const reversionPoint = fromB - replacementLength; + registerChange({ + from: insertionPoint, + to: insertionPoint + replacementLength, + insert, + }, { + from: reversionPoint, + to: reversionPoint + insert.length, + insert: rule.from, + }); + const selectionAdjustment = rule.from.length - insert.length; + newSelection = state.EditorSelection.create(newSelection.ranges.map((r) => state.EditorSelection.range(r.anchor - selectionAdjustment, r.head - selectionAdjustment))); + return; + } + }, false); + // If we have any changes, construct a transaction spec + if (changes.length) { + return [ + { + effects: storeTransaction.of({ + effects: storeTransaction.of(null), + selection: tr.selection, + scrollIntoView: tr.scrollIntoView, + changes: reverts, + }), + selection: newSelection, + scrollIntoView: tr.scrollIntoView, + changes, + }, + ]; + } + return tr; + }), + ]); + // Codemirror 5 + this.legacyLastUpdate = new WeakMap(); + this.registerCodeMirror((cm) => { + cm.on("beforeChange", this.beforeChangeHandler); + }); + }); + } + onunload() { + this.legacyLastUpdate = null; + this.app.workspace.iterateCodeMirrors((cm) => { + cm.off("beforeChange", this.beforeChangeHandler); + }); + } + loadSettings() { + return __awaiter(this, void 0, void 0, function* () { + this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData()); + this.buildInputRules(); + }); + } + saveSettings() { + return __awaiter(this, void 0, void 0, function* () { + this.buildInputRules(); + yield this.saveData(this.settings); + }); + } +} +class SmartTypographySettingTab extends obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + let { containerEl } = this; + containerEl.empty(); + new obsidian.Setting(containerEl) + .setName("Curly Quotes") + .setDesc("Double and single quotes will be converted to curly quotes (“” & ‘’)") + .addToggle((toggle) => { + toggle + .setValue(this.plugin.settings.curlyQuotes) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.curlyQuotes = value; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl) + .setName("Open double quote character") + .addText((text) => { + text + .setValue(this.plugin.settings.openDouble) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + if (!value) + return; + if (value.length > 1) { + text.setValue(value[0]); + return; + } + this.plugin.settings.openDouble = value; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl) + .setName("Close double quote character") + .addText((text) => { + text + .setValue(this.plugin.settings.closeDouble) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + if (!value) + return; + if (value.length > 1) { + text.setValue(value[0]); + return; + } + this.plugin.settings.closeDouble = value; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl) + .setName("Open single quote character") + .addText((text) => { + text + .setValue(this.plugin.settings.openSingle) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + if (!value) + return; + if (value.length > 1) { + text.setValue(value[0]); + return; + } + this.plugin.settings.openSingle = value; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl) + .setName("Close single quote character") + .addText((text) => { + text + .setValue(this.plugin.settings.closeSingle) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + if (!value) + return; + if (value.length > 1) { + text.setValue(value[0]); + return; + } + this.plugin.settings.closeSingle = value; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl) + .setName("Dashes") + .setDesc("Two dashes (--) will be converted to an en-dash (–). And en-dash followed by a dash will be converted to and em-dash (—). An em-dash followed by a dash will be converted into three dashes (---)") + .addToggle((toggle) => { + toggle.setValue(this.plugin.settings.emDash).onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.emDash = value; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl) + .setName("Skip en-dash") + .setDesc("When enabled, two dashes will be converted to an em-dash rather than an en-dash.") + .addToggle((toggle) => { + toggle + .setValue(this.plugin.settings.skipEnDash) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.skipEnDash = value; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl) + .setName("Ellipsis") + .setDesc("Three periods (...) will be converted to an ellipses (…)") + .addToggle((toggle) => { + toggle + .setValue(this.plugin.settings.ellipsis) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.ellipsis = value; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl) + .setName("Guillemets") + .setDesc("<< | >> will be converted to « | »") + .addToggle((toggle) => { + toggle + .setValue(this.plugin.settings.guillemets) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.guillemets = value; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl).setName("Open guillemet").addText((text) => { + text + .setValue(this.plugin.settings.openGuillemet) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + if (!value) + return; + this.plugin.settings.openGuillemet = value; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl).setName("Close guillemet").addText((text) => { + text + .setValue(this.plugin.settings.closeGuillemet) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + if (!value) + return; + this.plugin.settings.closeGuillemet = value; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl) + .setName("Arrows") + .setDesc("<- | -> will be converted to ← | →") + .addToggle((toggle) => { + toggle.setValue(this.plugin.settings.arrows).onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.arrows = value; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl).setName("Left arrow character").addText((text) => { + text.setValue(this.plugin.settings.leftArrow).onChange((value) => __awaiter(this, void 0, void 0, function* () { + if (!value) + return; + if (value.length > 1) { + text.setValue(value[0]); + return; + } + this.plugin.settings.leftArrow = value; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl) + .setName("Right arrow character") + .addText((text) => { + text + .setValue(this.plugin.settings.rightArrow) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + if (!value) + return; + if (value.length > 1) { + text.setValue(value[0]); + return; + } + this.plugin.settings.rightArrow = value; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl) + .setName("Comparison") + .setDesc("<= | >= | /= will be converted to ≤ | ≥ | ≠") + .addToggle((toggle) => { + toggle + .setValue(this.plugin.settings.comparisons) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.comparisons = value; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl) + .setName("Fractions") + .setDesc("1/2 will be converted to ½. Supported UTF-8 fractions: ½, ⅓, ⅔, ¼, ¾, ⅕, ⅖, ⅗, ⅘, ⅙, ⅚, ⅐, ⅛, ⅜, ⅝, ⅞, ⅑, ⅒") + .addToggle((toggle) => { + toggle + .setValue(this.plugin.settings.fractions) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.fractions = value; + yield this.plugin.saveSettings(); + })); + }); + } +} +const ignoreListRegEx = /frontmatter|code|math|templater|hashtag/; +function shouldCheckTextAtPos(instance, pos) { + // Empty line + if (!instance.getLine(pos.line)) { + return true; + } + const tokens = instance.getTokenTypeAt(pos); + // Plain text line + if (!tokens) { + return true; + } + // Not codeblock or frontmatter + if (!ignoreListRegEx.test(tokens)) { + return true; + } + return false; +} + +module.exports = SmartTypography; diff --git a/.obsidian/plugins/obsidian-smart-typography/manifest.json b/.obsidian/plugins/obsidian-smart-typography/manifest.json new file mode 100644 index 00000000..e9c79f1b --- /dev/null +++ b/.obsidian/plugins/obsidian-smart-typography/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "obsidian-smart-typography", + "name": "Smart Typography", + "version": "1.0.18", + "minAppVersion": "0.15.0", + "description": "Converts quotes to curly quotes, dashes to em dashes, and periods to ellipses", + "author": "mgmeyers", + "authorUrl": "https://github.com/mgmeyers/obsidian-smart-typography", + "isDesktopOnly": false +} diff --git a/.obsidian/snippets/folder_4_icon.css b/.obsidian/snippets/folder_4_icon.css index 6684e0d2..b2aadf9d 100644 --- a/.obsidian/snippets/folder_4_icon.css +++ b/.obsidian/snippets/folder_4_icon.css @@ -28,6 +28,11 @@ div[data-path="00.06 Professional"] .nav-folder-title-content::before content: "👨‍💼 "; } +div[data-path="00.07 Wiki"] .nav-folder-title-content::before +{ + content: "📚 "; +} + div[data-path="01.02 Home"] .nav-folder-title-content::before { content: "🏡 "; diff --git a/.obsidian/workspace b/.obsidian/workspace index c3eb8293..62d1f07e 100644 --- a/.obsidian/workspace +++ b/.obsidian/workspace @@ -4,7 +4,7 @@ "type": "split", "children": [ { - "id": "a4dd3a47d7be7b77", + "id": "c1bfda23c8343f42", "type": "leaf", "state": { "type": "markdown", @@ -151,17 +151,17 @@ ], "currentTab": 2 }, - "active": "a4dd3a47d7be7b77", + "active": "c1bfda23c8343f42", "lastOpenFiles": [ - "00.01 Admin/Calendars/2022-08-16.md", + "03.01 Reading list/Americanah.md", + "02.03 Zürich/Toto.md", + "02.03 Zürich/Shilla.md", + "02.03 Zürich/Schluessel.md", + "02.03 Zürich/Razzia.md", + "02.03 Zürich/@Restaurants Zürich.md", + "02.03 Zürich/No Idea.md", + "02.03 Zürich/Modo.md", "01.02 Home/@Main Dashboard.md", - "03.04 Cinematheque/Un village français (2009–2017).md", - "01.02 Home/Cinematheque.md", - "03.04 Cinematheque/The Living Daylights (1987).md", - "03.04 Cinematheque/Life Is Beautiful (1997).md", - "03.04 Cinematheque/Basquiat (1996).md", - "03.04 Cinematheque/Che bella è la vita (1997).md", - "03.04 Cinematheque/A View to a Kill (1985).md", - "03.04 Cinematheque/Diamonds Are Forever (1971).md" + "00.01 Admin/Calendars/2022-08-19.md" ] } \ No newline at end of file diff --git a/00.01 Admin/Calendars/2022-07-29.md b/00.01 Admin/Calendars/2022-07-29.md index 75da03f6..5c8b7af5 100644 --- a/00.01 Admin/Calendars/2022-07-29.md +++ b/00.01 Admin/Calendars/2022-07-29.md @@ -86,6 +86,7 @@ This section does serve for quick memos.   +- watched [[Batman (1989)]] %% ### %%   diff --git a/00.01 Admin/Calendars/2022-07-31.md b/00.01 Admin/Calendars/2022-07-31.md index 13153f7a..9ad33edc 100644 --- a/00.01 Admin/Calendars/2022-07-31.md +++ b/00.01 Admin/Calendars/2022-07-31.md @@ -89,7 +89,8 @@ This section does serve for quick memos. %% ### %%   -- [ ] 15:08 [[Pastitsio]] tested this day - great stuff #recipe ^zkc10d +- Watched [[Batman Returns (1992)]] +- 15:08 [[Pastitsio]] tested this day - great stuff #recipe ^zkc10d --- diff --git a/00.01 Admin/Calendars/2022-08-15.md b/00.01 Admin/Calendars/2022-08-15.md index e92606f9..079dc101 100644 --- a/00.01 Admin/Calendars/2022-08-15.md +++ b/00.01 Admin/Calendars/2022-08-15.md @@ -15,7 +15,7 @@ EarHeadBar: 30 BackHeadBar: 20 Water: 3.75 Coffee: 5 -Steps: +Steps: 3025 Ski: Riding: Racket: diff --git a/00.01 Admin/Calendars/2022-08-16.md b/00.01 Admin/Calendars/2022-08-16.md index a634ece3..6ec55dfe 100644 --- a/00.01 Admin/Calendars/2022-08-16.md +++ b/00.01 Admin/Calendars/2022-08-16.md @@ -13,9 +13,9 @@ Stress: 25 FrontHeadBar: 5 EarHeadBar: 30 BackHeadBar: 20 -Water: 3 +Water: 4.5 Coffee: 5 -Steps: +Steps: 6133 Ski: Riding: Racket: @@ -84,6 +84,7 @@ This section does serve for quick memos. %% ### %%   +- 20:23 [[Hoppin' John]] with [[MRCK|Meggi]]. Beans replaced with refried beans ^zu5xej --- diff --git a/00.01 Admin/Calendars/2022-08-17.md b/00.01 Admin/Calendars/2022-08-17.md new file mode 100644 index 00000000..7b3c3674 --- /dev/null +++ b/00.01 Admin/Calendars/2022-08-17.md @@ -0,0 +1,115 @@ +--- + +Date: 2022-08-17 +DocType: Note +Hierarchy: +TimeStamp: +location: +CollapseMetaTable: Yes +Sleep: 8.5 +Happiness: 90 +Gratefulness: 90 +Stress: 25 +FrontHeadBar: 5 +EarHeadBar: 30 +BackHeadBar: 20 +Water: 3.5 +Coffee: 5 +Steps: 5299 +Ski: +Riding: +Racket: +Football: +Swim: + +--- + +%% Parent:: [[@Life Admin]] %% + +--- + +[[2022-08-16|<< 🗓 Previous ]]       [[@Main Dashboard|Back]]       [[2022-08-18|🗓 Next >>]] + +--- + +  + +```button +name Record today's health +type command +action MetaEdit: Run MetaEdit +id EditMetaData +``` +^button-2022-08-17Edit + +```button +name Save +type command +action Save current file +id Save +``` +^button-2022-08-17NSave + +  + +# 2022-08-17 + +  + +> [!summary]+ +> Daily note for 2022-08-17 + +  + +```toc +style: number +``` + +  + +--- + +  + +### Memos + +  + +#### Memos + +This section does serve for quick memos. + +  + + +%% ### %% +  +- [x] 22:21 :tv: [[2022-08-17|Memo]], [[Cinematheque]], [[MRCK|Meggi]]: download (1) the trip to (i) Greece (ii) italy (iii) Spain + if available thé original one in England. Then all seasons of “absolutely fabulous” 📅 2022-08-20 ✅ 2022-08-18 +- 22:36 Watched [[GoldenEye (1995)]] with [[MRCK|Meggi]] + +--- + +  + +### Notes + +  + +Loret ipsum + +  + +--- + +  + +### Linked activity + +  + +```dataview +Table from [[2022-08-17]] +``` + +  +  \ No newline at end of file diff --git a/00.01 Admin/Calendars/2022-08-18.md b/00.01 Admin/Calendars/2022-08-18.md new file mode 100644 index 00000000..f22d6e51 --- /dev/null +++ b/00.01 Admin/Calendars/2022-08-18.md @@ -0,0 +1,113 @@ +--- + +Date: 2022-08-18 +DocType: Note +Hierarchy: +TimeStamp: +location: +CollapseMetaTable: Yes +Sleep: 8 +Happiness: 90 +Gratefulness: 90 +Stress: 27.5 +FrontHeadBar: 5 +EarHeadBar: 35 +BackHeadBar: 20 +Water: 4.5 +Coffee: 3 +Steps: 6829 +Ski: +Riding: 1 +Racket: +Football: +Swim: + +--- + +%% Parent:: [[@Life Admin]] %% + +--- + +[[2022-08-17|<< 🗓 Previous ]]       [[@Main Dashboard|Back]]       [[2022-08-19|🗓 Next >>]] + +--- + +  + +```button +name Record today's health +type command +action MetaEdit: Run MetaEdit +id EditMetaData +``` +^button-2022-08-18Edit + +```button +name Save +type command +action Save current file +id Save +``` +^button-2022-08-18NSave + +  + +# 2022-08-18 + +  + +> [!summary]+ +> Daily note for 2022-08-18 + +  + +```toc +style: number +``` + +  + +--- + +  + +### Memos + +  + +#### Memos + +This section does serve for quick memos. + +  + + +%% ### %% +  + +--- + +  + +### Notes + +  + +Loret ipsum + +  + +--- + +  + +### Linked activity + +  + +```dataview +Table from [[2022-08-18]] +``` + +  +  \ No newline at end of file diff --git a/00.01 Admin/Calendars/2022-08-19.md b/00.01 Admin/Calendars/2022-08-19.md new file mode 100644 index 00000000..9b1464ed --- /dev/null +++ b/00.01 Admin/Calendars/2022-08-19.md @@ -0,0 +1,113 @@ +--- + +Date: 2022-08-19 +DocType: Note +Hierarchy: +TimeStamp: +location: +CollapseMetaTable: Yes +Sleep: 8 +Happiness: 90 +Gratefulness: 90 +Stress: 25 +FrontHeadBar: 5 +EarHeadBar: 30 +BackHeadBar: 20 +Water: 1.5 +Coffee: 1 +Steps: +Ski: +Riding: +Racket: +Football: +Swim: + +--- + +%% Parent:: [[@Life Admin]] %% + +--- + +[[2022-08-18|<< 🗓 Previous ]]       [[@Main Dashboard|Back]]       [[2022-08-20|🗓 Next >>]] + +--- + +  + +```button +name Record today's health +type command +action MetaEdit: Run MetaEdit +id EditMetaData +``` +^button-2022-08-19Edit + +```button +name Save +type command +action Save current file +id Save +``` +^button-2022-08-19NSave + +  + +# 2022-08-19 + +  + +> [!summary]+ +> Daily note for 2022-08-19 + +  + +```toc +style: number +``` + +  + +--- + +  + +### Memos + +  + +#### Memos + +This section does serve for quick memos. + +  + + +%% ### %% +  + +--- + +  + +### Notes + +  + +Loret ipsum + +  + +--- + +  + +### Linked activity + +  + +```dataview +Table from [[2022-08-19]] +``` + +  +  \ No newline at end of file diff --git a/00.01 Admin/Templates/Template Game.md b/00.01 Admin/Templates/Template Game.md new file mode 100644 index 00000000..e69de29b diff --git a/00.01 Admin/Templates/Template Music.md b/00.01 Admin/Templates/Template Music.md new file mode 100644 index 00000000..e69de29b diff --git a/00.01 Admin/Templates/Template Place.md b/00.01 Admin/Templates/Template Place.md index c704bb48..d6e47d8a 100644 --- a/00.01 Admin/Templates/Template Place.md +++ b/00.01 Admin/Templates/Template Place.md @@ -15,6 +15,9 @@ Place: Country: Status: CollapseMetaTable: yes +Phone: 044 223 17 87 +Email: "[reservationen@afghananar.ch](readdle-spark://compose?recipient=reservationen@afghananar.ch&subject=Reservierung)" +Website: "[Afghan Anar](https://www.afghananar.ch/)" --- @@ -61,7 +64,7 @@ style: number   -> [!address] +> [!address] 🗺 > Horton Country Park Horton Lane Epsom KT19 8PL @@ -69,12 +72,11 @@ United Kingdom   -Phone:: +447961232106 +☎️ `= this.Phone` -Email:: [epsompoloclub@hotmail.com](readdle-spark://compose?recipient=gin@dante.bar&subject=Reservierung) - -Website:: https://www.epsompoloclub.com +📧 `= this.Email` +🌐 `= this.Website`   diff --git a/00.01 Admin/Templates/Template Wiki.md b/00.01 Admin/Templates/Template Wiki.md new file mode 100644 index 00000000..350c1845 --- /dev/null +++ b/00.01 Admin/Templates/Template Wiki.md @@ -0,0 +1,9 @@ +Parent:: + +--- + +# `$= dv.current().title` + +  + + \ No newline at end of file diff --git a/00.02 Inbox/La promesse de l'aube.md b/00.02 Inbox/La promesse de l'aube.md index 672c14ed..dea7356b 100644 --- a/00.02 Inbox/La promesse de l'aube.md +++ b/00.02 Inbox/La promesse de l'aube.md @@ -92,7 +92,7 @@ dv.el("span", "![](" + dv.current().Source.Cover + ")")   -Loret ipsum +Written by [[Romain Gary]]     \ No newline at end of file diff --git a/00.03 News/Donald Trump and American Intelligence’s Years of Conflict.md b/00.03 News/Donald Trump and American Intelligence’s Years of Conflict.md index 3e002364..53307b3a 100644 --- a/00.03 News/Donald Trump and American Intelligence’s Years of Conflict.md +++ b/00.03 News/Donald Trump and American Intelligence’s Years of Conflict.md @@ -12,7 +12,7 @@ CollapseMetaTable: Yes --- Parent:: [[@News|News]] -Read:: No +Read:: [[2022-08-17]] --- diff --git a/00.03 News/How ‘The Bear’ Captures the Panic of Modern Work.md b/00.03 News/How ‘The Bear’ Captures the Panic of Modern Work.md index 60975932..79811c54 100644 --- a/00.03 News/How ‘The Bear’ Captures the Panic of Modern Work.md +++ b/00.03 News/How ‘The Bear’ Captures the Panic of Modern Work.md @@ -12,7 +12,7 @@ CollapseMetaTable: Yes --- Parent:: [[@News|News]] -Read:: No +Read:: [[2022-08-17]] --- diff --git a/00.03 News/The Unlikely Rise of Slim Pickins, the First Black-Owned Outdoors Retailer in the Country.md b/00.03 News/The Unlikely Rise of Slim Pickins, the First Black-Owned Outdoors Retailer in the Country.md index daf3c2f9..3e111f59 100644 --- a/00.03 News/The Unlikely Rise of Slim Pickins, the First Black-Owned Outdoors Retailer in the Country.md +++ b/00.03 News/The Unlikely Rise of Slim Pickins, the First Black-Owned Outdoors Retailer in the Country.md @@ -12,7 +12,7 @@ CollapseMetaTable: Yes --- Parent:: [[@News|News]] -Read:: No +Read:: [[2022-08-17]] --- diff --git a/00.07 Wiki/Romain Gary.md b/00.07 Wiki/Romain Gary.md new file mode 100644 index 00000000..3328aedb --- /dev/null +++ b/00.07 Wiki/Romain Gary.md @@ -0,0 +1,23 @@ +--- +type: "wiki" +title: "Romain Gary" +englishTitle: "Romain Gary" +year: "" +dataSource: "Wikipedia API" +id: 82713 +wikiUrl: "https://en.wikipedia.org/wiki/Romain_Gary" +lastUpdated: "09/08/2022" +length: 21426 +tags: "#mediaDB/wiki" +CollapseMetaTable: yes +--- + +Parent:: [[La promesse de l'aube]] + +--- + +# `$= dv.current().title` + +  + + \ No newline at end of file diff --git a/01.02 Home/Cinematheque.md b/01.02 Home/Cinematheque.md index 9a8400d9..615ae596 100644 --- a/01.02 Home/Cinematheque.md +++ b/01.02 Home/Cinematheque.md @@ -61,20 +61,22 @@ style: number ```dataview table without id "![](" + image + ")" as "Cover", file.link as "Title", genres as "Themes", "Rating: " + personalRating as "Rating", "IMDb Rating: " + onlineRating as "Online Rating", duration as "Duration", "Producer: " + producer as "Producer" from "03.04 Cinematheque" where type = "movie" -sort lastWatched asc +sort lastWatched desc limit 1 ``` +   -#### 6 favourite movies +#### Top 10 favourite movies   ```dataview table without id "![](" + image + ")" as "Cover", file.link as "Title", genres as "Themes", "Rating: " + personalRating as "Rating", "IMDb Rating: " + onlineRating as "Online Rating", duration as "Duration", "Producer: " + producer as "Producer" from "03.04 Cinematheque" where type = "movie" +sort file.link asc sort personalRating desc -limit 6 +limit 10 ``` @@ -111,13 +113,14 @@ FROM "01.02 Home/Cinematheque" ```   -#### 6 favourite TV shows +#### Top 10 favourite TV shows ```dataview table without id "![](" + image + ")" as "Cover", file.link as "Title", genres as "Themes", "Rating: " + personalRating as "Rating", "IMDb Rating: " + onlineRating as "Online Rating", duration as "Duration", "Producer: " + producer as "Producer" from "03.04 Cinematheque" where type = "series" +sort file.link asc sort personalRating desc -limit 6 +limit 10 ```   diff --git a/02.03 Zürich/Afghan Anar.md b/02.03 Zürich/Afghan Anar.md index 621c845b..bfdd23ec 100644 --- a/02.03 Zürich/Afghan Anar.md +++ b/02.03 Zürich/Afghan Anar.md @@ -15,6 +15,9 @@ Place: Country: CH Status: NotTested CollapseMetaTable: yes +Phone: 044 223 17 87 +Email: "[reservationen@afghananar.ch](readdle-spark://compose?recipient=reservationen@afghananar.ch&subject=Reservierung)" +Website: "[Afghan Anar](https://www.afghananar.ch/)" --- @@ -65,6 +68,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Fierzgasse 22 8005 Zürich @@ -74,11 +78,11 @@ Switzerland   -Phone:: 044 223 17 87 +☎️ `= this.Phone` -Email:: [reservationen@afghananar.ch](readdle-spark://compose?recipient=reservationen@afghananar.ch&subject=Reservierung) +📧 `= this.Email` -Website:: [Afghan Anar](https://www.afghananar.ch/) +🌐 `= this.Website`   diff --git a/02.03 Zürich/Baur's.md b/02.03 Zürich/Baur's.md index 47583f1d..5c12399e 100644 --- a/02.03 Zürich/Baur's.md +++ b/02.03 Zürich/Baur's.md @@ -14,6 +14,9 @@ Place: Country: CH Status: Prospect CollapseMetaTable: yes +Phone: 044 220 50 60 +Email: +Website: "https://www.baurs-zurich.ch" --- @@ -64,6 +67,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Talstrasse 1 8001 Zürich @@ -73,12 +77,11 @@ Switzerland   -Phone:: 044 220 50 60 +☎️ `= this.Phone` -Email:: - -Website:: https://www.baurs-zurich.ch +📧 `= this.Email` +🌐 `= this.Website`   diff --git a/02.03 Zürich/Bimi.md b/02.03 Zürich/Bimi.md index 7cf22659..a904b4b4 100644 --- a/02.03 Zürich/Bimi.md +++ b/02.03 Zürich/Bimi.md @@ -15,6 +15,9 @@ Place: Country: CH Status: NotTested CollapseMetaTable: yes +Phone: +41 43 243 77 77 +Email: "[info@swissbimi.ch](readdle-spark://compose?recipient=info@swissbimi.ch&subject=Reservierung)" +Website: "[Japan Restaurant Bimi](https://www.swissbimi.ch/)" --- @@ -65,6 +68,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Seefeldstrasse 25 8008 Zürich @@ -74,12 +78,11 @@ Switzerland   -Phone:: +41 43 243 77 77 +☎️ `= this.Phone` -Email:: [info@swissbimi.ch](readdle-spark://compose?recipient=info@swissbimi.ch&subject=Reservierung) - -Website:: [Japan Restaurant Bimi](https://www.swissbimi.ch/) +📧 `= this.Email` +🌐 `= this.Website`   diff --git a/02.03 Zürich/Blaue Ente.md b/02.03 Zürich/Blaue Ente.md index ce054e38..1959722b 100644 --- a/02.03 Zürich/Blaue Ente.md +++ b/02.03 Zürich/Blaue Ente.md @@ -14,6 +14,9 @@ Place: Country: "CH" Status: "Prospect" CollapseMetaTable: yes +Phone: +41 44 388 68 40 +Email: +Website: "[Restaurant Blaue Ente | Mühle Tiefenbrunnen](https://www.muehle-tiefenbrunnen.ch/blaue-ente)" --- @@ -64,6 +67,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Mühle Tiefenbrunnen Seefeldstrasse 223 @@ -74,12 +78,11 @@ Switzerland   -Phone:: +41 44 388 68 40 +☎️ `= this.Phone` -Email:: - -Website:: [Restaurant Blaue Ente | Mühle Tiefenbrunnen](https://www.muehle-tiefenbrunnen.ch/blaue-ente) +📧 `= this.Email` +🌐 `= this.Website`   diff --git a/02.03 Zürich/Café des Amis.md b/02.03 Zürich/Café des Amis.md index f6a6c64e..00c75ffa 100644 --- a/02.03 Zürich/Café des Amis.md +++ b/02.03 Zürich/Café des Amis.md @@ -14,6 +14,9 @@ Place: Country: CH Status: Occasional CollapseMetaTable: yes +Phone: +41435369381 +Email: "[bonjour@desamis.ch](readdle-spark://compose?recipient=bonjour@desamis.ch&subject=Reservierung)" +Website: "https://www.desamis.ch" --- @@ -64,6 +67,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Nordstrasse 88 8037 Zürich @@ -73,12 +77,11 @@ Switzerland   -Phone:: +41435369381 +☎️ `= this.Phone` -Email:: [bonjour@desamis.ch](readdle-spark://compose?recipient=bonjour@desamis.ch&subject=Reservierung) - -Website:: https://www.desamis.ch +📧 `= this.Email` +🌐 `= this.Website`   diff --git a/02.03 Zürich/Cantinetta Antinori.md b/02.03 Zürich/Cantinetta Antinori.md index aafd0519..c223e7ed 100644 --- a/02.03 Zürich/Cantinetta Antinori.md +++ b/02.03 Zürich/Cantinetta Antinori.md @@ -15,6 +15,9 @@ Place: Country: CH Status: Tested CollapseMetaTable: yes +Phone: +41 44 211 72 10 +Email: "[info@cantinetta-antinori.ch](readdle-spark://compose?recipient=info@cantinetta-antinori.ch&subject=Reservierung)" +Website: "https://cantinetta-antinori.ch" --- @@ -65,6 +68,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Augustinergasse 25 8001 Zürich @@ -74,11 +78,11 @@ Switzerland   -Phone:: +41 44 211 72 10 +☎️ `= this.Phone` -Email:: [info@cantinetta-antinori.ch](readdle-spark://compose?recipient=info@cantinetta-antinori.ch&subject=Reservierung) +📧 `= this.Email` -Website:: https://cantinetta-antinori.ch +🌐 `= this.Website`   diff --git a/02.03 Zürich/Daizy.md b/02.03 Zürich/Daizy.md index a3eb2ed2..d03aaf79 100644 --- a/02.03 Zürich/Daizy.md +++ b/02.03 Zürich/Daizy.md @@ -14,6 +14,9 @@ Place: Country: CH Status: Tested CollapseMetaTable: yes +Phone: 043 333 03 28 +Email: "[info@daizy.ch](readdle-spark://compose?recipient=info@daizy.ch&subject=Reservierung)" +Website: "[Daizy](https://daizy.ch/)" --- @@ -64,6 +67,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Räffelstrasse 28 8045 Zürich @@ -73,12 +77,11 @@ Switzerland   -Phone:: 043 333 03 28 +☎️ `= this.Phone` -Email:: [info@daizy.ch](readdle-spark://compose?recipient=info@daizy.ch&subject=Reservierung) - -Website:: [Daizy](https://daizy.ch/) +📧 `= this.Email` +🌐 `= this.Website`   diff --git a/02.03 Zürich/Dante.md b/02.03 Zürich/Dante.md index c430a67d..6f76227b 100644 --- a/02.03 Zürich/Dante.md +++ b/02.03 Zürich/Dante.md @@ -14,6 +14,9 @@ Place: Country: CH Status: Prospect CollapseMetaTable: yes +Phone: +Email: "[gin@dante.bar](readdle-spark://compose?recipient=gin@dante.bar&subject=Reservierung)" +Website: "https://www.dante.bar" --- @@ -64,6 +67,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Zwinglistrasse 2 8004 Zürich @@ -73,16 +77,14 @@ Switzerland   -Phone:: +☎️ `= this.Phone` -Email:: [gin@dante.bar](readdle-spark://compose?recipient=gin@dante.bar&subject=Reservierung) - -Website:: https://www.dante.bar +📧 `= this.Email` +🌐 `= this.Website`   -locations: ---   diff --git a/02.03 Zürich/Dolder Grand.md b/02.03 Zürich/Dolder Grand.md new file mode 100644 index 00000000..009ce9cf --- /dev/null +++ b/02.03 Zürich/Dolder Grand.md @@ -0,0 +1,92 @@ +--- + +Tag: ["Luxurious", "Quiet"] +Date: 2022-08-19 +DocType: "Place" +Hierarchy: "NonRoot" +TimeStamp: +location: +Place: + Type: ["Hotel", "Restaurant"] + SubType: Modern + Style: Swiss + Location: Adlisberg + Country: CH + Status: Visited +CollapseMetaTable: yes +Phone: 044 456 60 00 +Email: "[info@thedoldergrand.com](readdle-spark://compose?recipient=info@thedoldergrand.com&subject=Reservierung)" +Website: "[Home - Dolder Grand](https://www.thedoldergrand.com/)" + +--- + +Parent:: [[@@Zürich|Zürich]], [[@Restaurants Zürich|Restaurants in Zürich]] + +  + +`= elink("https://waze.com/ul?ll=" + this.location[0] + "%2C" + this.location[1] + "&navigate=yes", "Launch Waze")` + +--- + +  + +```button +name Save +type command +action Save current file +id Save +``` +^button-DolderGrandSave + +  + +# Dolder Grand + +  + +> [!summary]+ +> Note Description + +  + +```toc +style: number +``` + +  + +--- + +  + +### Contact + +  + +> [!address] 🗺 +> KURHAUSSTRASSE 65 +> 8032 Zürich +> Switzerland + +  + +☎️ `= this.Phone` + +📧 `= this.Email` + +🌐 `= this.Website` + +  + +--- + +  + +### Notes + +  + +Tested with [[MRCK|Meggi-mo]] & her mother. + +  +  \ No newline at end of file diff --git a/02.03 Zürich/Franzos.md b/02.03 Zürich/Franzos.md index 99432a51..27885acf 100644 --- a/02.03 Zürich/Franzos.md +++ b/02.03 Zürich/Franzos.md @@ -14,6 +14,9 @@ Place: Country: CH Status: Prospect CollapseMetaTable: yes +Phone: 044 542 46 33 +Email: "[bonjour@franzos.ch](readdle-spark://compose?recipient=bonjour@franzos.ch&subject=Reservierung)" +Website: "https://www.franzos.ch" --- @@ -64,6 +67,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Limmatquai 138 8001 Zürich @@ -73,12 +77,11 @@ Switzerland   -Phone:: 044 542 46 33 +☎️ `= this.Phone` -Email:: [bonjour@franzos.ch](readdle-spark://compose?recipient=bonjour@franzos.ch&subject=Reservierung) - -Website:: https://www.franzos.ch +📧 `= this.Email` +🌐 `= this.Website`   diff --git a/02.03 Zürich/Gestuet Homberg.md b/02.03 Zürich/Gestuet Homberg.md index aeb06091..1c37829d 100644 --- a/02.03 Zürich/Gestuet Homberg.md +++ b/02.03 Zürich/Gestuet Homberg.md @@ -13,6 +13,9 @@ Place: Country: CH Status: Prospect CollapseMetaTable: yes +Phone: +41 79 318 93 65 +Email: "[rudolf.guyer@gestuet-homberg.ch](readdle-spark://compose?recipient=rudolf.guyer@gestuet-homberg.ch&subject=Reservierung)" +Website: "[Horse riding offer](https://www.gestuet-homberg.ch/en/horse-riding-offer)" --- @@ -63,6 +66,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Bürgstrasse 51 CH - 8608 Bubikon @@ -72,12 +76,11 @@ Switzerland   -Phone:: +41 79 318 93 65 +☎️ `= this.Phone` -Email:: [rudolf.guyer@gestuet-homberg.ch](readdle-spark://compose?recipient=rudolf.guyer@gestuet-homberg.ch&subject=Reservierung) - -Website:: [ Horse riding offer](https://www.gestuet-homberg.ch/en/horse-riding-offer) +📧 `= this.Email` +🌐 `= this.Website`   diff --git a/02.03 Zürich/Ginger.md b/02.03 Zürich/Ginger.md index f0141d9a..a76e2adb 100644 --- a/02.03 Zürich/Ginger.md +++ b/02.03 Zürich/Ginger.md @@ -14,6 +14,9 @@ Place: Country: CH Status: Visited CollapseMetaTable: yes +Phone: 044 422 95 09 +Email: "[mail@ginger-restaurant.ch](readdle-spark://compose?recipient=mail@ginger-restaurant.ch&subject=Reservierung)" +Website: "[Ginger - Restaurant & Sake Bar](https://ginger-restaurant.ch/)" --- @@ -64,6 +67,7 @@ style: number   ```ad-address +title: 🗺 ~~~ SEEFELDSTRASSE 62 8008 Zürich @@ -73,12 +77,11 @@ Switzerland   -Phone:: 044 422 95 09 +☎️ `= this.Phone` -Email:: [mail@ginger-restaurant.ch](readdle-spark://compose?recipient=mail@ginger-restaurant.ch&subject=Reservierung) - -Website:: [Ginger - Restaurant & Sake Bar](https://ginger-restaurant.ch/) +📧 `= this.Email` +🌐 `= this.Website`   diff --git a/02.03 Zürich/Grande.md b/02.03 Zürich/Grande.md index eb31030a..7b71ca79 100644 --- a/02.03 Zürich/Grande.md +++ b/02.03 Zürich/Grande.md @@ -14,6 +14,9 @@ Place: Country: CH Status: Prospect CollapseMetaTable: yes +Phone: 044 262 15 16 +Email: +Website: "https://www.grande.bar" --- @@ -64,6 +67,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Limmatquai 118 8001 Zürich @@ -73,12 +77,11 @@ Switzerland   -Phone:: 044 262 15 16 +☎️ `= this.Phone` -Email:: - -Website:: https://www.grande.bar +📧 `= this.Email` +🌐 `= this.Website`   diff --git a/02.03 Zürich/Iroquois.md b/02.03 Zürich/Iroquois.md index ba9bc8c4..6094bc07 100644 --- a/02.03 Zürich/Iroquois.md +++ b/02.03 Zürich/Iroquois.md @@ -15,6 +15,9 @@ Place: Country: CH Status: NotTested CollapseMetaTable: yes +Phone: +41 44 577 19 19 +Email: "[iro@iro-jackandjo.ch](readdle-spark://compose?recipient=iro@iro-jackandjo.ch&subject=Reservierung)" +Website: "[American Food Restaurant & Burger Zurich | Seefeld - IROQUOIS](https://iroquois.ch/)" --- @@ -65,6 +68,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Seefeldstrasse 120 8008 Zürich @@ -74,12 +78,11 @@ Switzerland   -Phone:: +41 44 577 19 19 +☎️ `= this.Phone` -Email:: [iro@iro-jackandjo.ch](readdle-spark://compose?recipient=iro@iro-jackandjo.ch&subject=Reservierung) - -Website:: [American Food Restaurant & Burger Zurich | Seefeld - IROQUOIS](https://iroquois.ch/) +📧 `= this.Email` +🌐 `= this.Website`   diff --git a/02.03 Zürich/La Baracca.md b/02.03 Zürich/La Baracca.md index 14dc99ad..26afe657 100644 --- a/02.03 Zürich/La Baracca.md +++ b/02.03 Zürich/La Baracca.md @@ -15,6 +15,9 @@ Place: Country: CH Status: Occasional CollapseMetaTable: yes +Phone: +41 43 811 80 04 +Email: "[mail@ristorante-labaracca.ch](readdle-spark://compose?recipient=mail@ristorante-labaracca.ch&subject=Reservierung)" +Website: "[La Baracca & Santo Bevitore](https://www.osteria-santobevitore.ch/)" --- @@ -65,6 +68,7 @@ style: number   ```ad-address +title: 🗺 ~~~ KANZLEISTRASSE 103 8004 ZÜRICH @@ -74,16 +78,14 @@ Switzerland   -Phone:: +41 43 811 80 04 +☎️ `= this.Phone` -Email:: [mail@ristorante-labaracca.ch](readdle-spark://compose?recipient=mail@ristorante-labaracca.ch&subject=Reservierung) - -Website:: [La Baracca & Santo Bevitore](https://www.osteria-santobevitore.ch/) +📧 `= this.Email` +🌐 `= this.Website`   -locations: ---   diff --git a/02.03 Zürich/La Réserve.md b/02.03 Zürich/La Réserve.md index 9f563d6e..7d8b0615 100644 --- a/02.03 Zürich/La Réserve.md +++ b/02.03 Zürich/La Réserve.md @@ -14,6 +14,9 @@ Place: Country: CH Status: Recommended CollapseMetaTable: yes +Phone: +41 44 266 25 25 +Email: "[info@lareserve-zurich.com](readdle-spark://compose?recipient=info@lareserve-zurich.com&subject=Reservierung)" +Website: "[La Muña - La Réserve Eden au Lac Zurich](https://www.lareserve-zurich.com/restaurants/la-muna/)" --- @@ -64,6 +67,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Utoquai 45 8008 Zürich @@ -73,11 +77,11 @@ Switzerland   -Phone:: +41 44 266 25 25 +☎️ `= this.Phone` -Email:: [info@lareserve-zurich.com](readdle-spark://compose?recipient=info@lareserve-zurich.com&subject=Reservierung) +📧 `= this.Email` -Website:: [La Muña - La Réserve Eden au Lac Zurich](https://www.lareserve-zurich.com/restaurants/la-muna/) +🌐 `= this.Website`   diff --git a/02.03 Zürich/La Stanza.md b/02.03 Zürich/La Stanza.md index 66b997fb..3c81b7e7 100644 --- a/02.03 Zürich/La Stanza.md +++ b/02.03 Zürich/La Stanza.md @@ -14,6 +14,9 @@ Place: Country: CH Status: Prospect CollapseMetaTable: yes +Phone: +Email: "[lastanza@lastanza.ch](readdle-spark://compose?recipient=lastanza@lastanza.ch&subject=Reservierung)" +Website: "https://lastanza.ch" --- @@ -64,6 +67,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Bleicherweg 10 8002 Zürich @@ -73,12 +77,11 @@ Switzerland   -Phone:: +☎️ `= this.Phone` -Email:: [lastanza@lastanza.ch](readdle-spark://compose?recipient=lastanza@lastanza.ch&subject=Reservierung) - -Website:: https://lastanza.ch +📧 `= this.Email` +🌐 `= this.Website`   diff --git a/02.03 Zürich/Le Raymond Bar.md b/02.03 Zürich/Le Raymond Bar.md index 3a9a8dce..1b9ab33a 100644 --- a/02.03 Zürich/Le Raymond Bar.md +++ b/02.03 Zürich/Le Raymond Bar.md @@ -14,6 +14,9 @@ Place: Country: CH Status: Prospect CollapseMetaTable: yes +Phone: 044 221 02 05 +Email: "[mail@leraymond.bar](readdle-spark://compose?recipient=mail@leraymond.bar&subject=Reservierung)" +Website: "https://www.leraymond.bar" --- @@ -64,6 +67,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Bleicherweg 8 8001 Zürich @@ -73,11 +77,11 @@ Switzerland   -Phone:: 044 221 02 05 +☎️ `= this.Phone` -Email:: [mail@leraymond.bar](readdle-spark://compose?recipient=mail@leraymond.bar&subject=Reservierung) +📧 `= this.Email` -Website:: https://www.leraymond.bar +🌐 `= this.Website`   diff --git a/02.03 Zürich/Modo.md b/02.03 Zürich/Modo.md index 57c7e046..8dfccc56 100644 --- a/02.03 Zürich/Modo.md +++ b/02.03 Zürich/Modo.md @@ -14,6 +14,9 @@ Place: Country: CH Status: Visited CollapseMetaTable: yes +Phone: +41 77 431 47 58 +Email: "[kontakt@modo.fm](readdle-spark://compose?recipient=kontakt@modo.fm&subject=Reservierung)" +Website: "[Modo](https://www.modo.fm/)" --- @@ -64,6 +67,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Breitensteinstrasse 14 8037 Zürich @@ -73,11 +77,11 @@ Switzerland   -Phone:: +41 77 431 47 58 +☎️ `= this.Phone` -Email:: [kontakt@modo.fm](readdle-spark://compose?recipient=kontakt@modo.fm&subject=Reservierung) +📧 `= this.Email` -Website:: [Modo](https://www.modo.fm/) +🌐 `= this.Website`   diff --git a/02.03 Zürich/No Idea.md b/02.03 Zürich/No Idea.md index b7bcb456..defdbdd9 100644 --- a/02.03 Zürich/No Idea.md +++ b/02.03 Zürich/No Idea.md @@ -15,6 +15,9 @@ Place: Country: CH Status: Recommended CollapseMetaTable: yes +Phone: 044 261 04 04 +Email: "[info@noideabar.com](readdle-spark://compose?recipient=info@noideabar.com&subject=Reservierung)" +Website: "[no idea AG – no idea bar](https://noideabar.com/)" --- @@ -65,6 +68,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Dufourstrasse 43 8008 Zürich @@ -74,12 +78,11 @@ Switzerland   -Phone:: 044 261 04 04 +☎️ `= this.Phone` -Email:: [info@noideabar.com](readdle-spark://compose?recipient=info@noideabar.com&subject=Reservierung) - -Website:: [no idea AG – no idea bar](https://noideabar.com/) +📧 `= this.Email` +🌐 `= this.Website`   diff --git a/02.03 Zürich/Razzia.md b/02.03 Zürich/Razzia.md index d1992268..aec5ae0f 100644 --- a/02.03 Zürich/Razzia.md +++ b/02.03 Zürich/Razzia.md @@ -14,6 +14,9 @@ Place: Country: "CH" Status: "Recommendation" CollapseMetaTable: yes +Phone: 044 296 70 70 +Email: "[welcome@razzia-zuerich.ch](readdle-spark://compose?recipient=welcome@razzia-zuerich.ch&subject=Reservierung)" +Website: "[razzia. restaurant & bar Zürich - home](https://razzia-zuerich.ch/)" --- @@ -64,6 +67,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Seefeldstrasse 82 8008 Zürich @@ -73,12 +77,11 @@ Switzerland   -Phone:: 044 296 70 70 +☎️ `= this.Phone` -Email:: [welcome@razzia-zuerich.ch](readdle-spark://compose?recipient=welcome@razzia-zuerich.ch&subject=Reservierung) - -Website:: [razzia. restaurant & bar Zürich - home](https://razzia-zuerich.ch/) +📧 `= this.Email` +🌐 `= this.Website`   diff --git a/02.03 Zürich/Schluessel.md b/02.03 Zürich/Schluessel.md index f0da9058..9d189cb2 100644 --- a/02.03 Zürich/Schluessel.md +++ b/02.03 Zürich/Schluessel.md @@ -15,6 +15,9 @@ Place: Country: CH Status: NotTested CollapseMetaTable: yes +Phone: 044 422 02 46 +Email: "[info@schluessel-zuerich.ch](readdle-spark://compose?recipient=info@schluessel-zuerich.ch&subject=Reservierung)" +Website: "[Restaurant Schlüssel Zürich](https://schluessel-zuerich.ch/)" --- @@ -65,6 +68,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Seefeldstrasse 177 8008 Zürich @@ -74,12 +78,11 @@ Switzerland   -Phone:: 044 422 02 46 +☎️ `= this.Phone` -Email:: [info@schluessel-zuerich.ch](readdle-spark://compose?recipient=info@schluessel-zuerich.ch&subject=Reservierung) - -Website:: [Restaurant Schlüssel Zürich](https://schluessel-zuerich.ch/) +📧 `= this.Email` +🌐 `= this.Website`   diff --git a/02.03 Zürich/Shilla.md b/02.03 Zürich/Shilla.md index 2728203a..ef8080cc 100644 --- a/02.03 Zürich/Shilla.md +++ b/02.03 Zürich/Shilla.md @@ -15,6 +15,9 @@ Place: Country: CH Status: NotTested CollapseMetaTable: yes +Phone: "[+41 44 431 8080](tel:+41444318080)" +Email: "[info@shilla.ch](readdle-spark://compose?recipient=info@shilla.ch&subject=Reservierung)" +Website: "https://www.shilla.ch/" --- @@ -65,6 +68,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Badenerstrasse 503+505 8048 Zürich @@ -74,12 +78,11 @@ Switzerland   -Phone:: [+41 44 431 8080](tel:+41444318080) +☎️ `= this.Phone` -Email:: [info@shilla.ch](readdle-spark://compose?recipient=info@shilla.ch&subject=Reservierung) - -Website:: https://www.shilla.ch/ +📧 `= this.Email` +🌐 `= this.Website`   diff --git a/02.03 Zürich/Toto.md b/02.03 Zürich/Toto.md index cabaf355..a9e436d1 100644 --- a/02.03 Zürich/Toto.md +++ b/02.03 Zürich/Toto.md @@ -15,6 +15,9 @@ Place: Country: CH Status: NotTested CollapseMetaTable: yes +Phone: "[043 443 00 80](tel:+41434430080)" +Email: "[pronto@ristorante-toto.ch](readdle-spark://compose?recipient=pronto@ristorante-toto.ch&subject=Reservierung)" +Website: "[Ristorante Totò - Bar e Ristorante im Zürcher Seefeld](https://www.ristorante-toto.ch/)" --- @@ -65,6 +68,7 @@ style: number   ```ad-address +title: 🗺 ~~~ Seefeldstrasse 124 8008 Zürich @@ -74,12 +78,11 @@ Switzerland   -Phone:: [043 443 00 80](tel:+41434430080) +☎️ `= this.Phone` -Email:: [pronto@ristorante-toto.ch](readdle-spark://compose?recipient=pronto@ristorante-toto.ch&subject=Reservierung) - -Website:: [Ristorante Totò - Bar e Ristorante im Zürcher Seefeld](https://www.ristorante-toto.ch/) +📧 `= this.Email` +🌐 `= this.Website`   @@ -87,7 +90,7 @@ Website:: [Ristorante Totò - Bar e Ristorante im Zürcher Seefeld](https://www.   -### Notes +### Notes lo   diff --git a/03.03 Food & Wine/Hoppin' John.md b/03.03 Food & Wine/Hoppin' John.md index ed687bf8..94ab48c3 100644 --- a/03.03 Food & Wine/Hoppin' John.md +++ b/03.03 Food & Wine/Hoppin' John.md @@ -1,8 +1,8 @@ --- -ServingSize: 4 +ServingSize: 2 cssclass: recipeTable -Tag: ["NotYetTested"] +Tag: ["Mid-week", "Bean", "Healthy"] Date: 2022-01-18 DocType: "Recipe" Hierarchy: "NonRoot" diff --git a/03.04 Cinematheque/A Fistful of Dollars (1964).md b/03.04 Cinematheque/A Fistful of Dollars (1964).md new file mode 100644 index 00000000..541fad79 --- /dev/null +++ b/03.04 Cinematheque/A Fistful of Dollars (1964).md @@ -0,0 +1,93 @@ +--- +type: "movie" +title: "A Fistful of Dollars" +englishTitle: "A Fistful of Dollars" +year: "1964" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0058461/" +id: "tt0058461" +genres: + - "Action" + - "Drama" + - "Western" +producer: "Sergio Leone" +duration: "99 min" +onlineRating: 7.9 +image: "https://m.media-amazon.com/images/M/MV5BY2M5MDA1YjUtODQ1Yi00M2JlLTk2ZWQtYjI0NTEwZDk2NGNhXkEyXkFqcGdeQXVyMjUzOTY1NTc@._V1_SX300.jpg" +released: true +premiere: "18/01/1967" +watched: true +lastWatched: "2021" +personalRating: 8 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/A Fistful of Dollars (1964)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/A View to a Kill (1985).md b/03.04 Cinematheque/A View to a Kill (1985).md index 1d005836..fe25e72f 100644 --- a/03.04 Cinematheque/A View to a Kill (1985).md +++ b/03.04 Cinematheque/A View to a Kill (1985).md @@ -17,14 +17,14 @@ image: "https://m.media-amazon.com/images/M/MV5BZmFlNmNjMzYtNWUwNS00MzRmLWJhZDkt released: true premiere: "24/05/1985" watched: true -lastWatched: "N/A" +lastWatched: "2022" personalRating: 6.5 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/Back to the Future (1985).md b/03.04 Cinematheque/Back to the Future (1985).md new file mode 100644 index 00000000..dcb89d31 --- /dev/null +++ b/03.04 Cinematheque/Back to the Future (1985).md @@ -0,0 +1,93 @@ +--- +type: "movie" +title: "Back to the Future" +englishTitle: "Back to the Future" +year: "1985" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0088763/" +id: "tt0088763" +genres: + - "Adventure" + - "Comedy" + - "Sci-Fi" +producer: "Robert Zemeckis" +duration: "116 min" +onlineRating: 8.5 +image: "https://m.media-amazon.com/images/M/MV5BZmU0M2Y1OGUtZjIxNi00ZjBkLTg1MjgtOWIyNThiZWIwYjRiXkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_SX300.jpg" +released: true +premiere: "03/07/1985" +watched: true +lastWatched: "2021" +personalRating: 7 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/Back to the Future (1985)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Bagdad Cafe (1987).md b/03.04 Cinematheque/Bagdad Cafe (1987).md new file mode 100644 index 00000000..e39c458e --- /dev/null +++ b/03.04 Cinematheque/Bagdad Cafe (1987).md @@ -0,0 +1,92 @@ +--- +type: "movie" +title: "Bagdad Cafe" +englishTitle: "Bagdad Cafe" +year: "1987" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0095801/" +id: "tt0095801" +genres: + - "Comedy" + - "Drama" +producer: "Percy Adlon" +duration: "95 min" +onlineRating: 7.4 +image: "https://m.media-amazon.com/images/M/MV5BNmUwZGZhZTktNGNmOS00NDA0LWEzYWUtZjE2ODA5OTM2OTc2XkEyXkFqcGdeQXVyMTQ3Njg3MQ@@._V1_SX300.jpg" +released: true +premiere: "22/04/1988" +watched: true +lastWatched: "2021" +personalRating: 6.5 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/Bagdad Cafe (1987)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Basquiat (1996).md b/03.04 Cinematheque/Basquiat (1996).md index 8ae71f0c..6c4e545d 100644 --- a/03.04 Cinematheque/Basquiat (1996).md +++ b/03.04 Cinematheque/Basquiat (1996).md @@ -17,7 +17,7 @@ image: "https://m.media-amazon.com/images/M/MV5BMTk3NTk3MzU5N15BMl5BanBnXkFtZTgw released: true premiere: "09/08/1996" watched: true -lastWatched: "15/08/2022" +lastWatched: "2022/08/15" personalRating: 9 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes diff --git a/03.04 Cinematheque/Batman (1989).md b/03.04 Cinematheque/Batman (1989).md new file mode 100644 index 00000000..91e89251 --- /dev/null +++ b/03.04 Cinematheque/Batman (1989).md @@ -0,0 +1,92 @@ +--- +type: "movie" +title: "Batman" +englishTitle: "Batman" +year: "1989" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0096895/" +id: "tt0096895" +genres: + - "Action" + - "Adventure" +producer: "Tim Burton" +duration: "126 min" +onlineRating: 7.5 +image: "https://m.media-amazon.com/images/M/MV5BZTM2NmZlOTEtYTI5NS00N2JjLWJkNzItMmZkNDBlYmQzNDA2XkEyXkFqcGdeQXVyMTAxODYyODI@._V1_SX300.jpg" +released: true +premiere: "23/06/1989" +watched: true +lastWatched: "2022/07/29" +personalRating: 8 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/Batman (1989)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Batman Returns (1992).md b/03.04 Cinematheque/Batman Returns (1992).md new file mode 100644 index 00000000..77101a34 --- /dev/null +++ b/03.04 Cinematheque/Batman Returns (1992).md @@ -0,0 +1,93 @@ +--- +type: "movie" +title: "Batman Returns" +englishTitle: "Batman Returns" +year: "1992" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0103776/" +id: "tt0103776" +genres: + - "Action" + - "Crime" + - "Fantasy" +producer: "Tim Burton" +duration: "126 min" +onlineRating: 7.1 +image: "https://m.media-amazon.com/images/M/MV5BOGZmYzVkMmItM2NiOS00MDI3LWI4ZWQtMTg0YWZkODRkMmViXkEyXkFqcGdeQXVyODY0NzcxNw@@._V1_SX300.jpg" +released: true +premiere: "19/06/1992" +watched: true +lastWatched: "2022/07/31" +personalRating: 6 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/Batman Returns (1992)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Breaking Bad (2008–2013).md b/03.04 Cinematheque/Breaking Bad (2008–2013).md new file mode 100644 index 00000000..658a8215 --- /dev/null +++ b/03.04 Cinematheque/Breaking Bad (2008–2013).md @@ -0,0 +1,124 @@ +--- +type: "series" +title: "Breaking Bad" +englishTitle: "Breaking Bad" +year: "2008–2013" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0903747/" +id: "tt0903747" +genres: + - "Crime" + - "Drama" + - "Thriller" +studios: + - "N/A" +episodes: 0 +duration: "49 min" +onlineRating: 9.5 +image: "https://m.media-amazon.com/images/M/MV5BODFhZjAwNjEtZDFjNi00ZTEyLThkNzUtMjZmOWM2YjQwODFmXkEyXkFqcGdeQXVyMjQwMDg0Ng@@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "20/01/2008" +airedTo: "unknown" +watched: true +lastWatched: "2015" +personalRating: 8.5 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/Breaking Bad (2008–2013)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Californication (2007–2014).md b/03.04 Cinematheque/Californication (2007–2014).md new file mode 100644 index 00000000..0712fea8 --- /dev/null +++ b/03.04 Cinematheque/Californication (2007–2014).md @@ -0,0 +1,123 @@ +--- +type: "series" +title: "Californication" +englishTitle: "Californication" +year: "2007–2014" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0904208/" +id: "tt0904208" +genres: + - "Comedy" + - "Drama" +studios: + - "N/A" +episodes: 0 +duration: "28 min" +onlineRating: 8.3 +image: "https://m.media-amazon.com/images/M/MV5BMjAyMDM2ODExNF5BMl5BanBnXkFtZTgwNTI2MjkzMTE@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "13/08/2007" +airedTo: "unknown" +watched: true +lastWatched: "2015" +personalRating: 9 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/Californication (2007–2014)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Dexter (2006–2013).md b/03.04 Cinematheque/Dexter (2006–2013).md new file mode 100644 index 00000000..d6e013fa --- /dev/null +++ b/03.04 Cinematheque/Dexter (2006–2013).md @@ -0,0 +1,124 @@ +--- +type: "series" +title: "Dexter" +englishTitle: "Dexter" +year: "2006–2013" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0773262/" +id: "tt0773262" +genres: + - "Crime" + - "Drama" + - "Mystery" +studios: + - "N/A" +episodes: 0 +duration: "53 min" +onlineRating: 8.7 +image: "https://m.media-amazon.com/images/M/MV5BZjkzMmU5MjMtODllZS00OTA5LTk2ZTEtNjdhYjZhMDA5ZTRhXkEyXkFqcGdeQXVyOTA3MTMyOTk@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "01/10/2006" +airedTo: "unknown" +watched: true +lastWatched: "2014" +personalRating: 8.5 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/Dexter (2006–2013)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Diamonds Are Forever (1971).md b/03.04 Cinematheque/Diamonds Are Forever (1971).md index 02108e75..975c9cf1 100644 --- a/03.04 Cinematheque/Diamonds Are Forever (1971).md +++ b/03.04 Cinematheque/Diamonds Are Forever (1971).md @@ -17,14 +17,14 @@ image: "https://m.media-amazon.com/images/M/MV5BZjE1NTc2MzAtZTgzNi00ZmY0LWIxNjUt released: true premiere: "17/12/1971" watched: true -lastWatched: "N/A" +lastWatched: "2022" personalRating: 7 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/Dr No (1962).md b/03.04 Cinematheque/Dr No (1962).md index 17a7e346..d30e384c 100644 --- a/03.04 Cinematheque/Dr No (1962).md +++ b/03.04 Cinematheque/Dr No (1962).md @@ -17,14 +17,14 @@ image: "https://m.media-amazon.com/images/M/MV5BNWNjNGU5ZjUtMzc0MC00MWY5LTkxMGUt released: true premiere: "10/10/1962" watched: true -lastWatched: "N/A" +lastWatched: "2022" personalRating: 7.5 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/For Your Eyes Only (1981).md b/03.04 Cinematheque/For Your Eyes Only (1981).md index b8805dac..d62788cb 100644 --- a/03.04 Cinematheque/For Your Eyes Only (1981).md +++ b/03.04 Cinematheque/For Your Eyes Only (1981).md @@ -17,14 +17,14 @@ image: "https://m.media-amazon.com/images/M/MV5BN2RhOWEyM2UtNTYwMC00ZGUxLWFiMzkt released: true premiere: "26/06/1981" watched: true -lastWatched: "N/A" +lastWatched: "2022" personalRating: 6.5 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/For a Few Dollars More (1965).md b/03.04 Cinematheque/For a Few Dollars More (1965).md new file mode 100644 index 00000000..b47b927e --- /dev/null +++ b/03.04 Cinematheque/For a Few Dollars More (1965).md @@ -0,0 +1,91 @@ +--- +type: "movie" +title: "For a Few Dollars More" +englishTitle: "For a Few Dollars More" +year: "1965" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0059578/" +id: "tt0059578" +genres: + - "Western" +producer: "Sergio Leone" +duration: "132 min" +onlineRating: 8.2 +image: "https://m.media-amazon.com/images/M/MV5BMzJlZTNkYjQtMTE1OS00YTJlLTgxNjItYzg4NTllODdkMzBiXkEyXkFqcGdeQXVyMjUzOTY1NTc@._V1_SX300.jpg" +released: true +premiere: "10/05/1967" +watched: true +lastWatched: "2021" +personalRating: 8 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/For a Few Dollars More (1965)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Formula 1 - Drive to Survive (2019–).md b/03.04 Cinematheque/Formula 1 - Drive to Survive (2019–).md new file mode 100644 index 00000000..14090141 --- /dev/null +++ b/03.04 Cinematheque/Formula 1 - Drive to Survive (2019–).md @@ -0,0 +1,123 @@ +--- +type: "series" +title: "Formula 1: Drive to Survive" +englishTitle: "Formula 1: Drive to Survive" +year: "2019–" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt8289930/" +id: "tt8289930" +genres: + - "Documentary" + - "Sport" +studios: + - "N/A" +episodes: 0 +duration: "40 min" +onlineRating: 8.6 +image: "https://m.media-amazon.com/images/M/MV5BMzVkMGU0YWMtOWQxMC00MjFhLTg1NjAtMDFlZTZlYzJlMjlhXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "08/03/2019" +airedTo: "unknown" +watched: true +lastWatched: "2021" +personalRating: 7.5 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/Formula 1 - Drive to Survive (2019–)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/From Russia with Love (1963).md b/03.04 Cinematheque/From Russia with Love (1963).md index 657740ed..f49bd91d 100644 --- a/03.04 Cinematheque/From Russia with Love (1963).md +++ b/03.04 Cinematheque/From Russia with Love (1963).md @@ -17,14 +17,14 @@ image: "https://m.media-amazon.com/images/M/MV5BYzQ3ODdjNjQtNzVkYi00YmM5LThkYjMt released: true premiere: "27/05/1964" watched: true -lastWatched: "N/A" +lastWatched: "2022" personalRating: 7 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/Game of Thrones (2011–2019).md b/03.04 Cinematheque/Game of Thrones (2011–2019).md new file mode 100644 index 00000000..a9c56c57 --- /dev/null +++ b/03.04 Cinematheque/Game of Thrones (2011–2019).md @@ -0,0 +1,124 @@ +--- +type: "series" +title: "Game of Thrones" +englishTitle: "Game of Thrones" +year: "2011–2019" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0944947/" +id: "tt0944947" +genres: + - "Action" + - "Adventure" + - "Drama" +studios: + - "N/A" +episodes: 0 +duration: "57 min" +onlineRating: 9.2 +image: "https://m.media-amazon.com/images/M/MV5BYTRiNDQwYzAtMzVlZS00NTI5LWJjYjUtMzkwNTUzMWMxZTllXkEyXkFqcGdeQXVyNDIzMzcwNjc@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "17/04/2011" +airedTo: "unknown" +watched: true +lastWatched: "2020" +personalRating: 9 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/Game of Thrones (2011–2019)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/GoldenEye (1995).md b/03.04 Cinematheque/GoldenEye (1995).md new file mode 100644 index 00000000..ff467689 --- /dev/null +++ b/03.04 Cinematheque/GoldenEye (1995).md @@ -0,0 +1,93 @@ +--- +type: "movie" +title: "GoldenEye" +englishTitle: "GoldenEye" +year: "1995" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0113189/" +id: "tt0113189" +genres: + - "Action" + - "Adventure" + - "Thriller" +producer: "Martin Campbell" +duration: "130 min" +onlineRating: 7.2 +image: "https://m.media-amazon.com/images/M/MV5BMzk2OTg4MTk1NF5BMl5BanBnXkFtZTcwNjExNTgzNA@@._V1_SX300.jpg" +released: true +premiere: "17/11/1995" +watched: true +lastWatched: "2022/08/17" +personalRating: 7.5 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/GoldenEye (1995)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Goldfinger (1964).md b/03.04 Cinematheque/Goldfinger (1964).md index 25f45e42..a8f13d63 100644 --- a/03.04 Cinematheque/Goldfinger (1964).md +++ b/03.04 Cinematheque/Goldfinger (1964).md @@ -17,14 +17,14 @@ image: "https://m.media-amazon.com/images/M/MV5BMTQ2MzE0OTU3NV5BMl5BanBnXkFtZTcw released: true premiere: "09/01/1965" watched: true -lastWatched: "N/A" +lastWatched: "2022" personalRating: 7 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/House of Cards (2013–2018).md b/03.04 Cinematheque/House of Cards (2013–2018).md new file mode 100644 index 00000000..2f6eda53 --- /dev/null +++ b/03.04 Cinematheque/House of Cards (2013–2018).md @@ -0,0 +1,122 @@ +--- +type: "series" +title: "House of Cards" +englishTitle: "House of Cards" +year: "2013–2018" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt1856010/" +id: "tt1856010" +genres: + - "Drama" +studios: + - "N/A" +episodes: 0 +duration: "51 min" +onlineRating: 8.7 +image: "https://m.media-amazon.com/images/M/MV5BODM1MDU2NjY5NF5BMl5BanBnXkFtZTgwMDkxNTcwNjM@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "01/02/2013" +airedTo: "unknown" +watched: true +lastWatched: "2018" +personalRating: 8.5 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/House of Cards (2013–2018)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/How I Met Your Mother (2005–2014).md b/03.04 Cinematheque/How I Met Your Mother (2005–2014).md new file mode 100644 index 00000000..bb8af4a1 --- /dev/null +++ b/03.04 Cinematheque/How I Met Your Mother (2005–2014).md @@ -0,0 +1,123 @@ +--- +type: "series" +title: "How I Met Your Mother" +englishTitle: "How I Met Your Mother" +year: "2005–2014" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0460649/" +id: "tt0460649" +genres: + - "Comedy" + - "Romance" +studios: + - "N/A" +episodes: 0 +duration: "22 min" +onlineRating: 8.4 +image: "https://m.media-amazon.com/images/M/MV5BNjg1MDQ5MjQ2N15BMl5BanBnXkFtZTYwNjI5NjA3._V1_SX300.jpg" +released: true +airing: false +airedFrom: "19/09/2005" +airedTo: "unknown" +watched: true +lastWatched: "2007" +personalRating: 8 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/How I Met Your Mother (2005–2014)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Licence to Kill (1989).md b/03.04 Cinematheque/Licence to Kill (1989).md new file mode 100644 index 00000000..c97e22ee --- /dev/null +++ b/03.04 Cinematheque/Licence to Kill (1989).md @@ -0,0 +1,93 @@ +--- +type: "movie" +title: "Licence to Kill" +englishTitle: "Licence to Kill" +year: "1989" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0097742/" +id: "tt0097742" +genres: + - "Action" + - "Adventure" + - "Thriller" +producer: "John Glen" +duration: "133 min" +onlineRating: 6.6 +image: "https://m.media-amazon.com/images/M/MV5BMjA2ODZjOWEtMWJjNy00MWYzLTk0MGItMmE5ODBlYjI4MDY3XkEyXkFqcGdeQXVyMjUzOTY1NTc@._V1_SX300.jpg" +released: true +premiere: "14/07/1989" +watched: true +lastWatched: "2022/08/16" +personalRating: 6.5 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/Licence to Kill (1989)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Life Is Beautiful (1997).md b/03.04 Cinematheque/Life Is Beautiful (1997).md index 458f776b..96b0975a 100644 --- a/03.04 Cinematheque/Life Is Beautiful (1997).md +++ b/03.04 Cinematheque/Life Is Beautiful (1997).md @@ -24,7 +24,7 @@ CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/Line of Duty (2012–2021).md b/03.04 Cinematheque/Line of Duty (2012–2021).md new file mode 100644 index 00000000..82794758 --- /dev/null +++ b/03.04 Cinematheque/Line of Duty (2012–2021).md @@ -0,0 +1,124 @@ +--- +type: "series" +title: "Line of Duty" +englishTitle: "Line of Duty" +year: "2012–2021" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt2303687/" +id: "tt2303687" +genres: + - "Crime" + - "Drama" + - "Mystery" +studios: + - "N/A" +episodes: 0 +duration: "60 min" +onlineRating: 8.7 +image: "https://m.media-amazon.com/images/M/MV5BMTExZDZjNTMtNDVmNy00ZTk2LWFiMzUtZDlkZGRlOGU0ZWRmXkEyXkFqcGdeQXVyMjExMjk0ODk@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "21/08/2012" +airedTo: "unknown" +watched: true +lastWatched: "2021" +personalRating: 8 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/Line of Duty (2012–2021)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Live and Let Die (1973).md b/03.04 Cinematheque/Live and Let Die (1973).md index 091a79d4..1c0a7577 100644 --- a/03.04 Cinematheque/Live and Let Die (1973).md +++ b/03.04 Cinematheque/Live and Let Die (1973).md @@ -17,14 +17,14 @@ image: "https://m.media-amazon.com/images/M/MV5BMzY0M2MzODYtZDU5Yy00YTg2LWJmMGQt released: true premiere: "27/06/1973" watched: true -lastWatched: "N/A" +lastWatched: "2022" personalRating: 7 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/Mad Men (2007–2015).md b/03.04 Cinematheque/Mad Men (2007–2015).md new file mode 100644 index 00000000..d7cc91e7 --- /dev/null +++ b/03.04 Cinematheque/Mad Men (2007–2015).md @@ -0,0 +1,122 @@ +--- +type: "series" +title: "Mad Men" +englishTitle: "Mad Men" +year: "2007–2015" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0804503/" +id: "tt0804503" +genres: + - "Drama" +studios: + - "N/A" +episodes: 0 +duration: "47 min" +onlineRating: 8.7 +image: "https://m.media-amazon.com/images/M/MV5BNTgxNDZlODQtNDcwOC00NWQ5LTljNWMtMDhjY2U5YTUzMTc4XkEyXkFqcGdeQXVyMDA4NzMyOA@@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "19/07/2007" +airedTo: "unknown" +watched: true +lastWatched: "2015" +personalRating: 7 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/Mad Men (2007–2015)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/McCabe Mrs Miller (1971).md b/03.04 Cinematheque/McCabe Mrs Miller (1971).md new file mode 100644 index 00000000..506406f0 --- /dev/null +++ b/03.04 Cinematheque/McCabe Mrs Miller (1971).md @@ -0,0 +1,92 @@ +--- +type: "movie" +title: "McCabe & Mrs. Miller" +englishTitle: "McCabe & Mrs. Miller" +year: "1971" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0067411/" +id: "tt0067411" +genres: + - "Drama" + - "Western" +producer: "Robert Altman" +duration: "120 min" +onlineRating: 7.6 +image: "https://m.media-amazon.com/images/M/MV5BMmMxMTk0MmMtY2I0YS00NjcwLTk2NjYtOWFlOTA0M2EzNjgxL2ltYWdlL2ltYWdlXkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_SX300.jpg" +released: true +premiere: "23/06/1972" +watched: true +lastWatched: "2021" +personalRating: 7 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/McCabe Mrs Miller (1971)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Moonraker (1979).md b/03.04 Cinematheque/Moonraker (1979).md index 9e77ff1e..8c49b041 100644 --- a/03.04 Cinematheque/Moonraker (1979).md +++ b/03.04 Cinematheque/Moonraker (1979).md @@ -17,14 +17,14 @@ image: "https://m.media-amazon.com/images/M/MV5BYWE1ZDE1ZjMtNTVlZS00NGZjLTg2MWIt released: true premiere: "29/06/1979" watched: true -lastWatched: "N/A" +lastWatched: "2022" personalRating: 7 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/My Name Is Earl (2005–2009).md b/03.04 Cinematheque/My Name Is Earl (2005–2009).md new file mode 100644 index 00000000..310e1efe --- /dev/null +++ b/03.04 Cinematheque/My Name Is Earl (2005–2009).md @@ -0,0 +1,122 @@ +--- +type: "series" +title: "My Name Is Earl" +englishTitle: "My Name Is Earl" +year: "2005–2009" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0460091/" +id: "tt0460091" +genres: + - "Comedy" +studios: + - "N/A" +episodes: 0 +duration: "22 min" +onlineRating: 7.7 +image: "https://m.media-amazon.com/images/M/MV5BMTc2MzQxNDIxMl5BMl5BanBnXkFtZTcwOTk1MDU1MQ@@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "20/09/2005" +airedTo: "unknown" +watched: true +lastWatched: "2009" +personalRating: 6.5 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/My Name Is Earl (2005–2009)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Narcos (2015–2017).md b/03.04 Cinematheque/Narcos (2015–2017).md new file mode 100644 index 00000000..1dfbb878 --- /dev/null +++ b/03.04 Cinematheque/Narcos (2015–2017).md @@ -0,0 +1,124 @@ +--- +type: "series" +title: "Narcos" +englishTitle: "Narcos" +year: "2015–2017" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt2707408/" +id: "tt2707408" +genres: + - "Biography" + - "Crime" + - "Drama" +studios: + - "N/A" +episodes: 0 +duration: "49 min" +onlineRating: 8.8 +image: "https://m.media-amazon.com/images/M/MV5BNmFjODU3YzgtMGUwNC00ZGI3LWFkZjQtMjkxZDc3NmQ1MzcyXkEyXkFqcGdeQXVyNjUwNzk3NDc@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "28/08/2015" +airedTo: "unknown" +watched: yes +lastWatched: "2017" +personalRating: 8.5 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/Narcos (2015–2017)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Natural Born Killers (1994).md b/03.04 Cinematheque/Natural Born Killers (1994).md new file mode 100644 index 00000000..b2f4a38c --- /dev/null +++ b/03.04 Cinematheque/Natural Born Killers (1994).md @@ -0,0 +1,93 @@ +--- +type: "movie" +title: "Natural Born Killers" +englishTitle: "Natural Born Killers" +year: "1994" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0110632/" +id: "tt0110632" +genres: + - "Action" + - "Crime" + - "Drama" +producer: "Oliver Stone" +duration: "119 min" +onlineRating: 7.2 +image: "https://m.media-amazon.com/images/M/MV5BMTI2NTU2Nzc0MV5BMl5BanBnXkFtZTcwMzY1OTM2MQ@@._V1_SX300.jpg" +released: true +premiere: "26/08/1994" +watched: true +lastWatched: "2021" +personalRating: 6.5 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/Natural Born Killers (1994)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Never Say Never Again (1983).md b/03.04 Cinematheque/Never Say Never Again (1983).md index d821189a..96d92023 100644 --- a/03.04 Cinematheque/Never Say Never Again (1983).md +++ b/03.04 Cinematheque/Never Say Never Again (1983).md @@ -17,14 +17,14 @@ image: "https://m.media-amazon.com/images/M/MV5BMTM1NjgzMDkwOF5BMl5BanBnXkFtZTcw released: true premiere: "07/10/1983" watched: true -lastWatched: "N/A" +lastWatched: "2022" personalRating: 6.5 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/Octopussy (1983).md b/03.04 Cinematheque/Octopussy (1983).md index ac80fdbe..7bfd2a79 100644 --- a/03.04 Cinematheque/Octopussy (1983).md +++ b/03.04 Cinematheque/Octopussy (1983).md @@ -17,14 +17,14 @@ image: "https://m.media-amazon.com/images/M/MV5BMGRiMDAwNWYtYmQzNS00NjEyLWE1NjQt released: true premiere: "10/06/1983" watched: true -lastWatched: "N/A" +lastWatched: "2022" personalRating: 7.5 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/On Her Majesty's Secret Service (1969).md b/03.04 Cinematheque/On Her Majesty's Secret Service (1969).md index 71f070e6..d7641792 100644 --- a/03.04 Cinematheque/On Her Majesty's Secret Service (1969).md +++ b/03.04 Cinematheque/On Her Majesty's Secret Service (1969).md @@ -17,14 +17,14 @@ image: "https://m.media-amazon.com/images/M/MV5BZGFlNGNiMmQtMThhZS00MWMxLWFiNGIt released: true premiere: "19/12/1969" watched: true -lastWatched: "N/A" +lastWatched: "2022" personalRating: 7 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/Once Upon a Time in the West (1968).md b/03.04 Cinematheque/Once Upon a Time in the West (1968).md new file mode 100644 index 00000000..07dfd1ee --- /dev/null +++ b/03.04 Cinematheque/Once Upon a Time in the West (1968).md @@ -0,0 +1,91 @@ +--- +type: "movie" +title: "Once Upon a Time in the West" +englishTitle: "Once Upon a Time in the West" +year: "1968" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0064116/" +id: "tt0064116" +genres: + - "Western" +producer: "Sergio Leone" +duration: "165 min" +onlineRating: 8.5 +image: "https://m.media-amazon.com/images/M/MV5BODQ3NDExOGYtMzI3Mi00NWRlLTkwNjAtNjc4MDgzZGJiZTA1XkEyXkFqcGdeQXVyMjUzOTY1NTc@._V1_SX300.jpg" +released: true +premiere: "04/07/1969" +watched: true +lastWatched: "2021" +personalRating: 8.5 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/Once Upon a Time in the West (1968)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Ozark (2017–2022).md b/03.04 Cinematheque/Ozark (2017–2022).md new file mode 100644 index 00000000..7f3d8b9e --- /dev/null +++ b/03.04 Cinematheque/Ozark (2017–2022).md @@ -0,0 +1,124 @@ +--- +type: "series" +title: "Ozark" +englishTitle: "Ozark" +year: "2017–2022" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt5071412/" +id: "tt5071412" +genres: + - "Crime" + - "Drama" + - "Thriller" +studios: + - "N/A" +episodes: 0 +duration: "60 min" +onlineRating: 8.5 +image: "https://m.media-amazon.com/images/M/MV5BZDUxMWNlMTUtYTljZS00MTE0LTlkYjktOTU1ODZjYzBhMTk0XkEyXkFqcGdeQXVyMTEyMjM2NDc2._V1_SX300.jpg" +released: true +airing: false +airedFrom: "21/07/2017" +airedTo: "unknown" +watched: true +lastWatched: "2021" +personalRating: 6.5 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/Ozark (2017–2022)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Peaky Blinders (2013–2022).md b/03.04 Cinematheque/Peaky Blinders (2013–2022).md new file mode 100644 index 00000000..48274e38 --- /dev/null +++ b/03.04 Cinematheque/Peaky Blinders (2013–2022).md @@ -0,0 +1,123 @@ +--- +type: "series" +title: "Peaky Blinders" +englishTitle: "Peaky Blinders" +year: "2013–2022" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt2442560/" +id: "tt2442560" +genres: + - "Crime" + - "Drama" +studios: + - "N/A" +episodes: 0 +duration: "60 min" +onlineRating: 8.8 +image: "https://m.media-amazon.com/images/M/MV5BNjIwZmJhOWEtNGMyOC00MTRiLWE0MmYtOTNlZDJjNzNjNTg5XkEyXkFqcGdeQXVyMTgxOTIzNzk@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "30/09/2014" +airedTo: "unknown" +watched: true +lastWatched: "2021" +personalRating: 8.5 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/Peaky Blinders (2013–2022)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Red River (1948).md b/03.04 Cinematheque/Red River (1948).md new file mode 100644 index 00000000..c9716596 --- /dev/null +++ b/03.04 Cinematheque/Red River (1948).md @@ -0,0 +1,92 @@ +--- +type: "movie" +title: "Red River" +englishTitle: "Red River" +year: "1948" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0040724/" +id: "tt0040724" +genres: + - "Drama" + - "Western" +producer: "Howard Hawks, Arthur Rosson" +duration: "133 min" +onlineRating: 7.8 +image: "https://m.media-amazon.com/images/M/MV5BMTM2NDA3NTQ2OF5BMl5BanBnXkFtZTcwODUzNzU2NA@@._V1_SX300.jpg" +released: true +premiere: "17/09/1948" +watched: true +lastWatched: "2021" +personalRating: 7 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/Red River (1948)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Rio Bravo (1959).md b/03.04 Cinematheque/Rio Bravo (1959).md new file mode 100644 index 00000000..045af2cd --- /dev/null +++ b/03.04 Cinematheque/Rio Bravo (1959).md @@ -0,0 +1,91 @@ +--- +type: "movie" +title: "Rio Bravo" +englishTitle: "Rio Bravo" +year: "1959" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0053221/" +id: "tt0053221" +genres: + - "Western" +producer: "Howard Hawks" +duration: "141 min" +onlineRating: 8 +image: "https://m.media-amazon.com/images/M/MV5BZDVhMTk1NjUtYjc0OS00OTE1LTk1NTYtYWMzMDI5OTlmYzU2XkEyXkFqcGdeQXVyNjc1NTYyMjg@._V1_SX300.jpg" +released: true +premiere: "04/04/1959" +watched: true +lastWatched: "2021" +personalRating: 7 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/Rio Bravo (1959)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Spiral (2005–2020).md b/03.04 Cinematheque/Spiral (2005–2020).md new file mode 100644 index 00000000..7ae8122e --- /dev/null +++ b/03.04 Cinematheque/Spiral (2005–2020).md @@ -0,0 +1,124 @@ +--- +type: "series" +title: "Spiral" +englishTitle: "Spiral" +year: "2005–2020" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0477507/" +id: "tt0477507" +genres: + - "Crime" + - "Drama" + - "Mystery" +studios: + - "N/A" +episodes: 0 +duration: "52 min" +onlineRating: 8.5 +image: "https://m.media-amazon.com/images/M/MV5BMTRhOWM3MjAtY2RjNy00MWQzLTgyYjYtZTg3Y2Q0ZDdmNGQ1XkEyXkFqcGdeQXVyMzI2ODkyNDg@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "13/12/2005" +airedTo: "unknown" +watched: true +lastWatched: "2021" +personalRating: 8 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/Spiral (2005–2020)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Stagecoach (1939).md b/03.04 Cinematheque/Stagecoach (1939).md new file mode 100644 index 00000000..c00c9973 --- /dev/null +++ b/03.04 Cinematheque/Stagecoach (1939).md @@ -0,0 +1,93 @@ +--- +type: "movie" +title: "Stagecoach" +englishTitle: "Stagecoach" +year: "1939" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0031971/" +id: "tt0031971" +genres: + - "Adventure" + - "Drama" + - "Western" +producer: "John Ford" +duration: "96 min" +onlineRating: 7.8 +image: "https://m.media-amazon.com/images/M/MV5BOGQ4NDUyNWQtZTEyOC00OTMzLWFhYjAtNDNmYmQ2MWQyMTRmXkEyXkFqcGdeQXVyNTA4NzY1MzY@._V1_SX300.jpg" +released: true +premiere: "03/03/1939" +watched: true +lastWatched: "2021" +personalRating: 6.5 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/Stagecoach (1939)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Star Wars (1977).md b/03.04 Cinematheque/Star Wars (1977).md index 646a4069..eee0d714 100644 --- a/03.04 Cinematheque/Star Wars (1977).md +++ b/03.04 Cinematheque/Star Wars (1977).md @@ -24,7 +24,7 @@ CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/Star Wars - Episode I - The Phantom Menace (1999).md b/03.04 Cinematheque/Star Wars - Episode I - The Phantom Menace (1999).md index 29195edb..1244e84b 100644 --- a/03.04 Cinematheque/Star Wars - Episode I - The Phantom Menace (1999).md +++ b/03.04 Cinematheque/Star Wars - Episode I - The Phantom Menace (1999).md @@ -24,7 +24,7 @@ CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/Star Wars - Episode II - Attack of the Clones (2002).md b/03.04 Cinematheque/Star Wars - Episode II - Attack of the Clones (2002).md index ae361231..545d027e 100644 --- a/03.04 Cinematheque/Star Wars - Episode II - Attack of the Clones (2002).md +++ b/03.04 Cinematheque/Star Wars - Episode II - Attack of the Clones (2002).md @@ -24,7 +24,7 @@ CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/Star Wars - Episode III - Revenge of the Sith (2005).md b/03.04 Cinematheque/Star Wars - Episode III - Revenge of the Sith (2005).md index d2e8e41e..7d0c4295 100644 --- a/03.04 Cinematheque/Star Wars - Episode III - Revenge of the Sith (2005).md +++ b/03.04 Cinematheque/Star Wars - Episode III - Revenge of the Sith (2005).md @@ -24,7 +24,7 @@ CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/Star Wars - Episode IX - The Rise of Skywalker (2019).md b/03.04 Cinematheque/Star Wars - Episode IX - The Rise of Skywalker (2019).md index 2725cecf..30866ede 100644 --- a/03.04 Cinematheque/Star Wars - Episode IX - The Rise of Skywalker (2019).md +++ b/03.04 Cinematheque/Star Wars - Episode IX - The Rise of Skywalker (2019).md @@ -24,7 +24,7 @@ CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/Star Wars - Episode V - The Empire Strikes Back (1980).md b/03.04 Cinematheque/Star Wars - Episode V - The Empire Strikes Back (1980).md index fb967d36..a78ee01d 100644 --- a/03.04 Cinematheque/Star Wars - Episode V - The Empire Strikes Back (1980).md +++ b/03.04 Cinematheque/Star Wars - Episode V - The Empire Strikes Back (1980).md @@ -24,7 +24,7 @@ CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/Star Wars - Episode VI - Return of the Jedi (1983).md b/03.04 Cinematheque/Star Wars - Episode VI - Return of the Jedi (1983).md index a91ad108..98060c0e 100644 --- a/03.04 Cinematheque/Star Wars - Episode VI - Return of the Jedi (1983).md +++ b/03.04 Cinematheque/Star Wars - Episode VI - Return of the Jedi (1983).md @@ -24,7 +24,7 @@ CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/Star Wars - Episode VII - The Force Awakens (2015).md b/03.04 Cinematheque/Star Wars - Episode VII - The Force Awakens (2015).md index f88cdbff..3b192526 100644 --- a/03.04 Cinematheque/Star Wars - Episode VII - The Force Awakens (2015).md +++ b/03.04 Cinematheque/Star Wars - Episode VII - The Force Awakens (2015).md @@ -24,7 +24,7 @@ CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/Star Wars - Episode VIII - The Last Jedi (2017).md b/03.04 Cinematheque/Star Wars - Episode VIII - The Last Jedi (2017).md index fcfb5a2b..53e04764 100644 --- a/03.04 Cinematheque/Star Wars - Episode VIII - The Last Jedi (2017).md +++ b/03.04 Cinematheque/Star Wars - Episode VIII - The Last Jedi (2017).md @@ -24,7 +24,7 @@ CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/Succession (2018–).md b/03.04 Cinematheque/Succession (2018–).md new file mode 100644 index 00000000..33516670 --- /dev/null +++ b/03.04 Cinematheque/Succession (2018–).md @@ -0,0 +1,122 @@ +--- +type: "series" +title: "Succession" +englishTitle: "Succession" +year: "2018–" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt7660850/" +id: "tt7660850" +genres: + - "Drama" +studios: + - "N/A" +episodes: 0 +duration: "60 min" +onlineRating: 8.8 +image: "https://m.media-amazon.com/images/M/MV5BZDE0ODVlYjktNjJiMC00ODk4LWIwNTktMWRhZmZiOGFhYmUwXkEyXkFqcGdeQXVyMTkxNjUyNQ@@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "03/06/2018" +airedTo: "unknown" +watched: true +lastWatched: "2021" +personalRating: 8 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/Succession (2018–)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Talk to Her (2002).md b/03.04 Cinematheque/Talk to Her (2002).md new file mode 100644 index 00000000..be20e216 --- /dev/null +++ b/03.04 Cinematheque/Talk to Her (2002).md @@ -0,0 +1,93 @@ +--- +type: "movie" +title: "Talk to Her" +englishTitle: "Talk to Her" +year: "2002" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0287467/" +id: "tt0287467" +genres: + - "Drama" + - "Mystery" + - "Romance" +producer: "Pedro Almodóvar" +duration: "112 min" +onlineRating: 7.9 +image: "https://m.media-amazon.com/images/M/MV5BMzFhNmQzYWQtMDhmNC00ZGJmLWI5NjYtNmI3MjBiZDNjNjdlXkEyXkFqcGdeQXVyMTI3ODAyMzE2._V1_SX300.jpg" +released: true +premiere: "14/02/2003" +watched: true +lastWatched: "2022" +personalRating: 7.5 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/Talk to Her (2002)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/The Big Bang Theory (2007–2019).md b/03.04 Cinematheque/The Big Bang Theory (2007–2019).md new file mode 100644 index 00000000..971187aa --- /dev/null +++ b/03.04 Cinematheque/The Big Bang Theory (2007–2019).md @@ -0,0 +1,123 @@ +--- +type: "series" +title: "The Big Bang Theory" +englishTitle: "The Big Bang Theory" +year: "2007–2019" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0898266/" +id: "tt0898266" +genres: + - "Comedy" + - "Romance" +studios: + - "N/A" +episodes: 0 +duration: "22 min" +onlineRating: 8.2 +image: "https://m.media-amazon.com/images/M/MV5BY2FmZTY5YTktOWRlYy00NmIyLWE0ZmQtZDg2YjlmMzczZDZiXkEyXkFqcGdeQXVyNjg4NzAyOTA@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "01/05/2006" +airedTo: "unknown" +watched: true +lastWatched: "2019" +personalRating: 8 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/The Big Bang Theory (2007–2019)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/The Harder They Come (1972).md b/03.04 Cinematheque/The Harder They Come (1972).md new file mode 100644 index 00000000..01dd00d6 --- /dev/null +++ b/03.04 Cinematheque/The Harder They Come (1972).md @@ -0,0 +1,93 @@ +--- +type: "movie" +title: "The Harder They Come" +englishTitle: "The Harder They Come" +year: "1972" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0070155/" +id: "tt0070155" +genres: + - "Crime" + - "Drama" + - "Music" +producer: "Perry Henzell" +duration: "120 min" +onlineRating: 6.9 +image: "https://m.media-amazon.com/images/M/MV5BOTQ5MzgzOGEtZDM5ZS00OGJlLWExZGUtODg4ZGM2MzFlNzk3L2ltYWdlL2ltYWdlXkEyXkFqcGdeQXVyNzc5MjA3OA@@._V1_SX300.jpg" +released: true +premiere: "14/04/1976" +watched: true +lastWatched: "2022" +personalRating: 8 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/The Harder They Come (1972)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/The Living Daylights (1987).md b/03.04 Cinematheque/The Living Daylights (1987).md index e3ea301d..cdeb9c5b 100644 --- a/03.04 Cinematheque/The Living Daylights (1987).md +++ b/03.04 Cinematheque/The Living Daylights (1987).md @@ -17,14 +17,14 @@ image: "https://m.media-amazon.com/images/M/MV5BZjI4MjBmYzItYTY5OC00OWYzLWE0NWYt released: true premiere: "31/07/1987" watched: true -lastWatched: "15/08/2022" +lastWatched: "2022/08/15" personalRating: 7.5 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/The Man with the Golden Gun (1974).md b/03.04 Cinematheque/The Man with the Golden Gun (1974).md index c60ec9af..bf20ee01 100644 --- a/03.04 Cinematheque/The Man with the Golden Gun (1974).md +++ b/03.04 Cinematheque/The Man with the Golden Gun (1974).md @@ -17,14 +17,14 @@ image: "https://m.media-amazon.com/images/M/MV5BYjY3YmM1MTItMWE0NC00NjFmLWFkMDgt released: true premiere: "20/12/1974" watched: true -lastWatched: "N/A" +lastWatched: "2022" personalRating: 6.5 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/The Naked Spur (1953).md b/03.04 Cinematheque/The Naked Spur (1953).md new file mode 100644 index 00000000..d5a77c41 --- /dev/null +++ b/03.04 Cinematheque/The Naked Spur (1953).md @@ -0,0 +1,93 @@ +--- +type: "movie" +title: "The Naked Spur" +englishTitle: "The Naked Spur" +year: "1953" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0044953/" +id: "tt0044953" +genres: + - "Drama" + - "Thriller" + - "Western" +producer: "Anthony Mann" +duration: "91 min" +onlineRating: 7.3 +image: "https://m.media-amazon.com/images/M/MV5BMGYwODI3ZTAtMWRiZC00NjhjLWEzNjYtMDQ0YjJmMWFlYmQ1L2ltYWdlXkEyXkFqcGdeQXVyMDI2NDg0NQ@@._V1_SX300.jpg" +released: true +premiere: "01/02/1953" +watched: true +lastWatched: "2021" +personalRating: 6.5 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/The Naked Spur (1953)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/The Office (2005–2013).md b/03.04 Cinematheque/The Office (2005–2013).md new file mode 100644 index 00000000..e4c2e87a --- /dev/null +++ b/03.04 Cinematheque/The Office (2005–2013).md @@ -0,0 +1,122 @@ +--- +type: "series" +title: "The Office" +englishTitle: "The Office" +year: "2005–2013" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0386676/" +id: "tt0386676" +genres: + - "Comedy" +studios: + - "N/A" +episodes: 0 +duration: "22 min" +onlineRating: 9 +image: "https://m.media-amazon.com/images/M/MV5BMDNkOTE4NDQtMTNmYi00MWE0LWE4ZTktYTc0NzhhNWIzNzJiXkEyXkFqcGdeQXVyMzQ2MDI5NjU@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "24/03/2005" +airedTo: "unknown" +watched: true +lastWatched: "2014" +personalRating: 8 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/The Office (2005–2013)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/The Queen's Gambit (2020).md b/03.04 Cinematheque/The Queen's Gambit (2020).md new file mode 100644 index 00000000..684214e4 --- /dev/null +++ b/03.04 Cinematheque/The Queen's Gambit (2020).md @@ -0,0 +1,122 @@ +--- +type: "series" +title: "The Queen's Gambit" +englishTitle: "The Queen's Gambit" +year: "2020" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt10048342/" +id: "tt10048342" +genres: + - "Drama" +studios: + - "N/A" +episodes: 0 +duration: "395 min" +onlineRating: 8.6 +image: "https://m.media-amazon.com/images/M/MV5BM2EwMmRhMmUtMzBmMS00ZDQ3LTg4OGEtNjlkODk3ZTMxMmJlXkEyXkFqcGdeQXVyMjM5ODk1NDU@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "23/10/2020" +airedTo: "unknown" +watched: true +lastWatched: "2021" +personalRating: 7.5 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/The Queen's Gambit (2020)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/The Simpsons (1989–).md b/03.04 Cinematheque/The Simpsons (1989–).md new file mode 100644 index 00000000..1a8a3f80 --- /dev/null +++ b/03.04 Cinematheque/The Simpsons (1989–).md @@ -0,0 +1,123 @@ +--- +type: "series" +title: "The Simpsons" +englishTitle: "The Simpsons" +year: "1989–" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0096697/" +id: "tt0096697" +genres: + - "Animation" + - "Comedy" +studios: + - "N/A" +episodes: 0 +duration: "22 min" +onlineRating: 8.7 +image: "https://m.media-amazon.com/images/M/MV5BYjFkMTlkYWUtZWFhNy00M2FmLThiOTYtYTRiYjVlZWYxNmJkXkEyXkFqcGdeQXVyNTAyODkwOQ@@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "17/12/1989" +airedTo: "unknown" +watched: true +lastWatched: "2006" +personalRating: 6 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/The Simpsons (1989–)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/The Spy Who Loved Me (1977).md b/03.04 Cinematheque/The Spy Who Loved Me (1977).md index 3863ab6e..7b6d14b7 100644 --- a/03.04 Cinematheque/The Spy Who Loved Me (1977).md +++ b/03.04 Cinematheque/The Spy Who Loved Me (1977).md @@ -17,14 +17,14 @@ image: "https://m.media-amazon.com/images/M/MV5BZDJhOTgyMTUtMDVhOS00MzRlLTk0MjYt released: true premiere: "03/08/1977" watched: true -lastWatched: "N/A" +lastWatched: "2022" personalRating: 7 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/The Wire (2002–2008).md b/03.04 Cinematheque/The Wire (2002–2008).md new file mode 100644 index 00000000..622f7a16 --- /dev/null +++ b/03.04 Cinematheque/The Wire (2002–2008).md @@ -0,0 +1,124 @@ +--- +type: "series" +title: "The Wire" +englishTitle: "The Wire" +year: "2002–2008" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0306414/" +id: "tt0306414" +genres: + - "Crime" + - "Drama" + - "Thriller" +studios: + - "N/A" +episodes: 0 +duration: "59 min" +onlineRating: 9.3 +image: "https://m.media-amazon.com/images/M/MV5BNTllYzFhMjAtZjExNS00MjM4LWE5YmMtOGFiZGRlOTU5YzJiXkEyXkFqcGdeQXVyNDIzMzcwNjc@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "02/06/2002" +airedTo: "unknown" +watched: true +lastWatched: "2009" +personalRating: 8.5 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/The Wire (2002–2008)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Thunderball (1965).md b/03.04 Cinematheque/Thunderball (1965).md index df243c3d..67baecdd 100644 --- a/03.04 Cinematheque/Thunderball (1965).md +++ b/03.04 Cinematheque/Thunderball (1965).md @@ -17,14 +17,14 @@ image: "https://m.media-amazon.com/images/M/MV5BZGNhYjM3ZmQtMTRlZS00YmZiLWFhYjkt released: true premiere: "22/12/1965" watched: true -lastWatched: "N/A" -personalRating: 0 +lastWatched: "2022" +personalRating: 7 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/03.04 Cinematheque/True Grit (1969).md b/03.04 Cinematheque/True Grit (1969).md new file mode 100644 index 00000000..5056f65c --- /dev/null +++ b/03.04 Cinematheque/True Grit (1969).md @@ -0,0 +1,93 @@ +--- +type: "movie" +title: "True Grit" +englishTitle: "True Grit" +year: "1969" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0065126/" +id: "tt0065126" +genres: + - "Adventure" + - "Drama" + - "Western" +producer: "Henry Hathaway" +duration: "128 min" +onlineRating: 7.4 +image: "https://m.media-amazon.com/images/M/MV5BMjEwNzRlMzUtODIwMS00N2IwLWE1ZTgtODYzNWY0MGJhODY3XkEyXkFqcGdeQXVyMjI4MjA5MzA@._V1_SX300.jpg" +released: true +premiere: "21/06/1969" +watched: true +lastWatched: "2021" +personalRating: 7.5 +tags: "#mediaDB/tv/movie" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +```toc +``` + +  + +### Details + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +`$= !dv.current().released ? '**Not released** The movie is not yet released.' : ''` + +  + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Duration" + this.duration + "
Premiered" + this.premiere + "
Producer" + this.producer + "
" +FROM "03.04 Cinematheque/True Grit (1969)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/Weeds (2005–2012).md b/03.04 Cinematheque/Weeds (2005–2012).md new file mode 100644 index 00000000..d907c3ab --- /dev/null +++ b/03.04 Cinematheque/Weeds (2005–2012).md @@ -0,0 +1,124 @@ +--- +type: "series" +title: "Weeds" +englishTitle: "Weeds" +year: "2005–2012" +dataSource: "OMDbAPI" +url: "https://www.imdb.com/title/tt0439100/" +id: "tt0439100" +genres: + - "Comedy" + - "Crime" + - "Drama" +studios: + - "N/A" +episodes: 0 +duration: "28 min" +onlineRating: 7.9 +image: "https://m.media-amazon.com/images/M/MV5BZjA0NzcyODYtY2M3YS00OGY3LTljOWItYTFhNjFkNDM2NGZiXkEyXkFqcGdeQXVyOTA3MTMyOTk@._V1_SX300.jpg" +released: true +airing: false +airedFrom: "07/08/2005" +airedTo: "unknown" +watched: true +lastWatched: "2007" +personalRating: 7 +tags: "#mediaDB/tv/series" +CollapseMetaTable: yes + +--- + +Parent:: [[Cinematheque]] + +--- + +```dataviewjs +dv.paragraph(`> [!${dv.current().watched ? 'SUCCESS' : 'WARNING'}] ${dv.current().watched ? 'last watched on ' + dv.current().lastWatched : 'not yet watched'}`) +``` + +  + +# `$= dv.current().title` + +  + +`$= dv.current().watched ? '**Rating**: ' + dv.current().personalRating + ' out of 10' : ''` + +  + +```toc +``` + +  + +### Detail + +  + +**Genres**: +`$= dv.current().genres.length === 0 ? ' - none' : dv.list(dv.current().genres)` + +```dataviewjs +let text = ''; + +if (!dv.current().released) { + text += '**Not released**\n'; + if (dv.current().airedFrom) { + text += 'The series will release on ' + dv.current().release_date + '.'; + } else { + text += 'The series is not released yet.'; + } + +} else if (dv.current().airing) { + text += '**Not finished**\n'; + text += 'The series is not fully released yet.'; +} + +if (text) { + dv.paragraph(text); +} +``` + +```dataview +list without id + "" + + + "" ++ + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "" + + + "
Type" + this.type + "
Online Rating" + this.onlineRating + "
Episodes" + this.episodes + "
Duration" + this.duration + "
Aired from" + this.airedFrom + "
Aired to" + this.airedTo + "
Studios" + this.studios + "
" +FROM "03.04 Cinematheque/Weeds (2005–2012)" +``` + +  + +--- + +  + +### Poster + +  + +`$= '![Image|360](' + dv.current().image + ')'` \ No newline at end of file diff --git a/03.04 Cinematheque/You Only Live Twice (1967).md b/03.04 Cinematheque/You Only Live Twice (1967).md index 64d59cfa..38ab7f87 100644 --- a/03.04 Cinematheque/You Only Live Twice (1967).md +++ b/03.04 Cinematheque/You Only Live Twice (1967).md @@ -17,14 +17,14 @@ image: "https://m.media-amazon.com/images/M/MV5BOTQ4YjhmMzQtMDhiZi00MGZmLTg3MTAt released: true premiere: "13/06/1967" watched: true -lastWatched: "N/A" +lastWatched: "2022" personalRating: 7 tags: "#mediaDB/tv/movie" CollapseMetaTable: yes --- -Parent:: [[Cinematheque]] +Parent:: [[Cinematheque]], [[MRCK|Meggi-mo]] --- diff --git a/05.02 Networks/Server Tools.md b/05.02 Networks/Server Tools.md index 31916ed3..daa902a0 100644 --- a/05.02 Networks/Server Tools.md +++ b/05.02 Networks/Server Tools.md @@ -705,7 +705,8 @@ List of monitored services: - [ ] :desktop_computer: [[Selfhosting]], [[Server Tools|Tools]]: Upgrader Gitea & Health checks %%done_del%% 🔁 every 4 months 📅 2022-10-18 - [x] :desktop_computer: [[Selfhosting]], [[Server Tools|Tools]]: Upgrader Gitea & Health checks 🔁 every 4 months 📅 2022-06-18 ✅ 2022-06-20 -- [ ] :closed_lock_with_key: [[Selfhosting]], [[Server Tools|Tools]]: Upgrader Bitwarden & Health checks %%done_del%% 🔁 every 4 months 📅 2022-08-18 +- [ ] :closed_lock_with_key: [[Selfhosting]], [[Server Tools|Tools]]: Upgrader Bitwarden & Health checks %%done_del%% 🔁 every 4 months 📅 2022-12-18 +- [x] :closed_lock_with_key: [[Selfhosting]], [[Server Tools|Tools]]: Upgrader Bitwarden & Health checks %%done_del%% 🔁 every 4 months 📅 2022-08-18 ✅ 2022-08-17 - [x] [[Selfhosting]], [[Server Tools|Tools]]: Upgrader Bitwarden & Health checks 🔁 every 4 months 📅 2022-04-18 ✅ 2022-04-16 - [ ] [[Selfhosting]], [[Server Tools|Tools]]: Upgrader Standard Notes & Health checks %%done_del%% 🔁 every 4 months 📅 2022-09-18