post ldn commit

main
iOS 3 years ago
parent 92d420cf1d
commit d8761eb1aa

@ -13,7 +13,6 @@
"customizable-page-header-buttons", "customizable-page-header-buttons",
"customjs", "customjs",
"dataview", "dataview",
"obsidian-dialogue-plugin",
"obsidian-dice-roller", "obsidian-dice-roller",
"obsidian-dynamic-toc", "obsidian-dynamic-toc",
"emoji-shortcodes", "emoji-shortcodes",
@ -60,5 +59,11 @@
"markdown-table-editor", "markdown-table-editor",
"obsidian-book-search-plugin", "obsidian-book-search-plugin",
"obsidian-columns", "obsidian-columns",
"notion-like-tables" "notion-like-tables",
"obsidian-media-db-plugin",
"tasks-packrat-plugin",
"obsidian-tts",
"obsidian-chat-view",
"obsidian-bbcode",
"obsidian-style-settings"
] ]

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{ {
"id": "dataview", "id": "dataview",
"name": "Dataview", "name": "Dataview",
"version": "0.4.26", "version": "0.5.23",
"minAppVersion": "0.13.11", "minAppVersion": "0.13.11",
"description": "Complex data views for the data-obsessed.", "description": "Complex data views for the data-obsessed.",
"author": "Michael Brenan <blacksmithgu@gmail.com>", "author": "Michael Brenan <blacksmithgu@gmail.com>",

@ -9,6 +9,10 @@
text-align: left; text-align: left;
} }
.table-view-table > tbody > tr:hover {
background-color: var(--text-selection);
}
.table-view-table > thead > tr > th { .table-view-table > thead > tr > th {
font-weight: 700; font-weight: 700;
font-size: larger; font-size: larger;
@ -28,6 +32,11 @@
max-width: 100%; max-width: 100%;
} }
/** Live Preview padding fixes, specifically for DataviewJS custom HTML elements. */
.is-live-preview .block-language-dataviewjs > p, .is-live-preview .block-language-dataviewjs > span {
line-height: 1.0;
}
/** Rendered value styling for any view. */ /** Rendered value styling for any view. */
.dataview-result-list-root-ul { .dataview-result-list-root-ul {
padding: 0em !important; padding: 0em !important;
@ -39,7 +48,9 @@
padding-left: 8px; padding-left: 8px;
} }
/** Inline Field Rendering. */ /*******************/
/** Inline Fields **/
/*******************/
.dataview.inline-field-key { .dataview.inline-field-key {
border-top-left-radius: 250px; border-top-left-radius: 250px;
@ -69,3 +80,46 @@
background-color: var(--background-secondary-alt); background-color: var(--background-secondary-alt);
color: var(--text-nav-selected); color: var(--text-nav-selected);
} }
/***************/
/** Task View **/
/***************/
.dataview.task-list-item, .dataview.task-list-basic-item {
margin-top: 3px;
margin-bottom: 3px;
transition: 0.4s;
}
.dataview.task-list-item:hover, .dataview.task-list-basic-item:hover {
background-color: var(--text-selection);
box-shadow: -40px 0 0 var(--text-selection);
cursor: pointer;
}
/*****************/
/** Error Views **/
/*****************/
div.dataview-error-box {
width: 100%;
min-height: 150px;
display: flex;
align-items: center;
justify-content: center;
border: 4px dashed var(--background-secondary);
}
.dataview-error-message {
color: var(--text-muted);
text-align: center;
}
/*************************/
/** Additional Metadata **/
/*************************/
.dataview.small-text {
font-size: smaller;
color: var(--text-selection);
}

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{ {
"id": "extract-url", "id": "extract-url",
"name": "Extract url content", "name": "Extract url content",
"version": "0.12.0", "version": "0.12.1",
"description": "Extract url converting content into markdown", "description": "Extract url converting content into markdown",
"author": "Stephen Solka", "author": "Stephen Solka",
"authorUrl": "https://github.com/trashhalo", "authorUrl": "https://github.com/trashhalo",

@ -12,8 +12,8 @@
"checkpointList": [ "checkpointList": [
{ {
"path": "/", "path": "/",
"date": "2022-05-31", "date": "2022-06-05",
"size": 4889645 "size": 5089980
} }
], ],
"activityHistory": [ "activityHistory": [
@ -591,6 +591,26 @@
{ {
"date": "2022-05-31", "date": "2022-05-31",
"value": 10244 "value": 10244
},
{
"date": "2022-06-01",
"value": 1113
},
{
"date": "2022-06-02",
"value": 53112
},
{
"date": "2022-06-03",
"value": 1153
},
{
"date": "2022-06-04",
"value": 2275
},
{
"date": "2022-06-05",
"value": 143316
} }
] ]
} }

@ -0,0 +1,642 @@
/*
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 __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
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());
});
};
// node_modules/node-webvtt/lib/parser.js
var require_parser = __commonJS({
"node_modules/node-webvtt/lib/parser.js"(exports, module2) {
"use strict";
function ParserError(message, error) {
this.message = message;
this.error = error;
}
ParserError.prototype = Object.create(Error.prototype);
var TIMESTAMP_REGEXP = /([0-9]{1,2})?:?([0-9]{2}):([0-9]{2}\.[0-9]{2,3})/;
function parse2(input, options) {
if (!options) {
options = {};
}
const { meta = false, strict = true } = options;
if (typeof input !== "string") {
throw new ParserError("Input must be a string");
}
input = input.trim();
input = input.replace(/\r\n/g, "\n");
input = input.replace(/\r/g, "\n");
const parts = input.split("\n\n");
const header = parts.shift();
if (!header.startsWith("WEBVTT")) {
throw new ParserError('Must start with "WEBVTT"');
}
const headerParts = header.split("\n");
const headerComments = headerParts[0].replace("WEBVTT", "");
if (headerComments.length > 0 && (headerComments[0] !== " " && headerComments[0] !== " ")) {
throw new ParserError("Header comment must start with space or tab");
}
if (parts.length === 0 && headerParts.length === 1) {
return { valid: true, strict, cues: [], errors: [] };
}
if (!meta && headerParts.length > 1 && headerParts[1] !== "") {
throw new ParserError("Missing blank line after signature");
}
const { cues, errors } = parseCues(parts, strict);
if (strict && errors.length > 0) {
throw errors[0];
}
const headerMeta = meta ? parseMeta(headerParts) : null;
const result = { valid: errors.length === 0, strict, cues, errors };
if (meta) {
result.meta = headerMeta;
}
return result;
}
function parseMeta(headerParts) {
const meta = {};
headerParts.slice(1).forEach((header) => {
const splitIdx = header.indexOf(":");
const key = header.slice(0, splitIdx).trim();
const value = header.slice(splitIdx + 1).trim();
meta[key] = value;
});
return Object.keys(meta).length > 0 ? meta : null;
}
function parseCues(cues, strict) {
const errors = [];
const parsedCues = cues.map((cue, i) => {
try {
return parseCue(cue, i, strict);
} catch (e) {
errors.push(e);
return null;
}
}).filter(Boolean);
return {
cues: parsedCues,
errors
};
}
function parseCue(cue, i, strict) {
let identifier = "";
let start = 0;
let end = 0.01;
let text = "";
let styles = "";
const lines = cue.split("\n").filter(Boolean);
if (lines.length > 0 && lines[0].trim().startsWith("NOTE")) {
return null;
}
if (lines.length === 1 && !lines[0].includes("-->")) {
throw new ParserError(`Cue identifier cannot be standalone (cue #${i})`);
}
if (lines.length > 1 && !(lines[0].includes("-->") || lines[1].includes("-->"))) {
const msg = `Cue identifier needs to be followed by timestamp (cue #${i})`;
throw new ParserError(msg);
}
if (lines.length > 1 && lines[1].includes("-->")) {
identifier = lines.shift();
}
const times = typeof lines[0] === "string" && lines[0].split(" --> ");
if (times.length !== 2 || !validTimestamp(times[0]) || !validTimestamp(times[1])) {
throw new ParserError(`Invalid cue timestamp (cue #${i})`);
}
start = parseTimestamp(times[0]);
end = parseTimestamp(times[1]);
if (strict) {
if (start > end) {
throw new ParserError(`Start timestamp greater than end (cue #${i})`);
}
if (end <= start) {
throw new ParserError(`End must be greater than start (cue #${i})`);
}
}
if (!strict && end < start) {
throw new ParserError(`End must be greater or equal to start when not strict (cue #${i})`);
}
styles = times[1].replace(TIMESTAMP_REGEXP, "").trim();
lines.shift();
text = lines.join("\n");
if (!text) {
return false;
}
return { identifier, start, end, text, styles };
}
function validTimestamp(timestamp) {
return TIMESTAMP_REGEXP.test(timestamp);
}
function parseTimestamp(timestamp) {
const matches = timestamp.match(TIMESTAMP_REGEXP);
let secs = parseFloat(matches[1] || 0) * 60 * 60;
secs += parseFloat(matches[2]) * 60;
secs += parseFloat(matches[3]);
return secs;
}
module2.exports = { ParserError, parse: parse2 };
}
});
// node_modules/node-webvtt/lib/compiler.js
var require_compiler = __commonJS({
"node_modules/node-webvtt/lib/compiler.js"(exports, module2) {
"use strict";
function CompilerError(message, error) {
this.message = message;
this.error = error;
}
CompilerError.prototype = Object.create(Error.prototype);
function compile(input) {
if (!input) {
throw new CompilerError("Input must be non-null");
}
if (typeof input !== "object") {
throw new CompilerError("Input must be an object");
}
if (Array.isArray(input)) {
throw new CompilerError("Input cannot be array");
}
if (!input.valid) {
throw new CompilerError("Input must be valid");
}
let output = "WEBVTT\n";
if (input.meta) {
if (typeof input.meta !== "object" || Array.isArray(input.meta)) {
throw new CompilerError("Metadata must be an object");
}
Object.entries(input.meta).forEach((i) => {
if (typeof i[1] !== "string") {
throw new CompilerError(`Metadata value for "${i[0]}" must be string`);
}
output += `${i[0]}: ${i[1]}
`;
});
}
let lastTime = null;
input.cues.forEach((cue, index) => {
if (lastTime && lastTime > cue.start) {
throw new CompilerError(`Cue number ${index} is not in chronological order`);
}
lastTime = cue.start;
output += "\n";
output += compileCue(cue);
output += "\n";
});
return output;
}
function compileCue(cue) {
if (typeof cue !== "object") {
throw new CompilerError("Cue malformed: not of type object");
}
if (typeof cue.identifier !== "string" && typeof cue.identifier !== "number" && cue.identifier !== null) {
throw new CompilerError(`Cue malformed: identifier value is not a string.
${JSON.stringify(cue)}`);
}
if (isNaN(cue.start)) {
throw new CompilerError(`Cue malformed: null start value.
${JSON.stringify(cue)}`);
}
if (isNaN(cue.end)) {
throw new CompilerError(`Cue malformed: null end value.
${JSON.stringify(cue)}`);
}
if (cue.start >= cue.end) {
throw new CompilerError(`Cue malformed: start timestamp greater than end
${JSON.stringify(cue)}`);
}
if (typeof cue.text !== "string") {
throw new CompilerError(`Cue malformed: null text value.
${JSON.stringify(cue)}`);
}
if (typeof cue.styles !== "string") {
throw new CompilerError(`Cue malformed: null styles value.
${JSON.stringify(cue)}`);
}
let output = "";
if (cue.identifier.length > 0) {
output += `${cue.identifier}
`;
}
const startTimestamp = convertTimestamp(cue.start);
const endTimestamp = convertTimestamp(cue.end);
output += `${startTimestamp} --> ${endTimestamp}`;
output += cue.styles ? ` ${cue.styles}` : "";
output += `
${cue.text}`;
return output;
}
function convertTimestamp(time) {
const hours = pad(calculateHours(time), 2);
const minutes = pad(calculateMinutes(time), 2);
const seconds = pad(calculateSeconds(time), 2);
const milliseconds = pad(calculateMs(time), 3);
return `${hours}:${minutes}:${seconds}.${milliseconds}`;
}
function pad(num, zeroes) {
let output = `${num}`;
while (output.length < zeroes) {
output = `0${output}`;
}
return output;
}
function calculateHours(time) {
return Math.floor(time / 60 / 60);
}
function calculateMinutes(time) {
return Math.floor(time / 60) % 60;
}
function calculateSeconds(time) {
return Math.floor(time % 60);
}
function calculateMs(time) {
return Math.floor((time % 1).toFixed(4) * 1e3);
}
module2.exports = { CompilerError, compile };
}
});
// node_modules/node-webvtt/lib/segmenter.js
var require_segmenter = __commonJS({
"node_modules/node-webvtt/lib/segmenter.js"(exports, module2) {
"use strict";
var parse2 = require_parser().parse;
function segment(input, segmentLength) {
segmentLength = segmentLength || 10;
const parsed = parse2(input);
const segments = [];
let cues = [];
let queuedCue = null;
let currentSegmentDuration = 0;
let totalSegmentsDuration = 0;
parsed.cues.forEach((cue, i) => {
const firstCue = i === 0;
const lastCue = i === parsed.cues.length - 1;
const start = cue.start;
const end = cue.end;
const nextStart = lastCue ? Infinity : parsed.cues[i + 1].start;
const cueLength = firstCue ? end : end - start;
const silence = firstCue ? 0 : start - parsed.cues[i - 1].end;
currentSegmentDuration = currentSegmentDuration + cueLength + silence;
debug("------------");
debug(`Cue #${i}, segment #${segments.length + 1}`);
debug(`Start ${start}`);
debug(`End ${end}`);
debug(`Length ${cueLength}`);
debug(`Total segment duration = ${totalSegmentsDuration}`);
debug(`Current segment duration = ${currentSegmentDuration}`);
debug(`Start of next = ${nextStart}`);
if (queuedCue) {
cues.push(queuedCue);
currentSegmentDuration += queuedCue.end - totalSegmentsDuration;
queuedCue = null;
}
cues.push(cue);
let shouldQueue = nextStart - end < segmentLength && silence < segmentLength && currentSegmentDuration > segmentLength;
if (shouldSegment(totalSegmentsDuration, segmentLength, nextStart, silence)) {
const duration = segmentDuration(lastCue, end, segmentLength, currentSegmentDuration, totalSegmentsDuration);
segments.push({ duration, cues });
totalSegmentsDuration += duration;
currentSegmentDuration = 0;
cues = [];
} else {
shouldQueue = false;
}
if (shouldQueue) {
queuedCue = cue;
}
});
return segments;
}
function shouldSegment(total, length, nextStart, silence) {
const x = alignToSegmentLength(silence, length);
const nextCueIsInNextSegment = silence <= length || x + total < nextStart;
return nextCueIsInNextSegment && nextStart - total >= length;
}
function segmentDuration(lastCue, end, length, currentSegment, totalSegments) {
let duration = length;
if (currentSegment > length) {
duration = alignToSegmentLength(currentSegment - length, length);
}
if (lastCue) {
duration = parseFloat((end - totalSegments).toFixed(2));
} else {
duration = Math.round(duration);
}
return duration;
}
function alignToSegmentLength(n, segmentLength) {
n += segmentLength - n % segmentLength;
return n;
}
var debugging = false;
function debug(m) {
if (debugging) {
console.log(m);
}
}
module2.exports = { segment };
}
});
// node_modules/node-webvtt/lib/hls.js
var require_hls = __commonJS({
"node_modules/node-webvtt/lib/hls.js"(exports, module2) {
"use strict";
var segment = require_segmenter().segment;
function hlsSegment(input, segmentLength, startOffset) {
if (typeof startOffset === "undefined") {
startOffset = "900000";
}
const segments = segment(input, segmentLength);
const result = [];
segments.forEach((seg, i) => {
const content = `WEBVTT
X-TIMESTAMP-MAP=MPEGTS:${startOffset},LOCAL:00:00:00.000
${printableCues(seg.cues)}
`;
const filename = generateSegmentFilename(i);
result.push({ filename, content });
});
return result;
}
function hlsSegmentPlaylist(input, segmentLength) {
const segmented = segment(input, segmentLength);
const printable = printableSegments(segmented);
const longestSegment = Math.round(findLongestSegment(segmented));
const template = `#EXTM3U
#EXT-X-TARGETDURATION:${longestSegment}
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
${printable}
#EXT-X-ENDLIST
`;
return template;
}
function pad(num, n) {
const padding = "0".repeat(Math.max(0, n - num.toString().length));
return `${padding}${num}`;
}
function generateSegmentFilename(index) {
return `${index}.vtt`;
}
function printableSegments(segments) {
const result = [];
segments.forEach((seg, i) => {
result.push(`#EXTINF:${seg.duration.toFixed(5)},
${generateSegmentFilename(i)}`);
});
return result.join("\n");
}
function findLongestSegment(segments) {
let max = 0;
segments.forEach((seg) => {
if (seg.duration > max) {
max = seg.duration;
}
});
return max;
}
function printableCues(cues) {
const result = [];
cues.forEach((cue) => {
result.push(printableCue(cue));
});
return result.join("\n\n");
}
function printableCue(cue) {
const printable = [];
if (cue.identifier) {
printable.push(cue.identifier);
}
const start = printableTimestamp(cue.start);
const end = printableTimestamp(cue.end);
const styles = cue.styles ? `${cue.styles}` : "";
printable.push(`${start} --> ${end} ${styles}`);
printable.push(cue.text);
return printable.join("\n");
}
function printableTimestamp(timestamp) {
const ms = (timestamp % 1).toFixed(3);
timestamp = Math.round(timestamp - ms);
const hours = Math.floor(timestamp / 3600);
const mins = Math.floor((timestamp - hours * 3600) / 60);
const secs = timestamp - hours * 3600 - mins * 60;
const hourString = `${pad(hours, 2)}:`;
return `${hourString}${pad(mins, 2)}:${pad(secs, 2)}.${pad(ms * 1e3, 3)}`;
}
module2.exports = { hlsSegment, hlsSegmentPlaylist };
}
});
// node_modules/node-webvtt/index.js
var require_node_webvtt = __commonJS({
"node_modules/node-webvtt/index.js"(exports, module2) {
"use strict";
var parse2 = require_parser().parse;
var compile = require_compiler().compile;
var segment = require_segmenter().segment;
var hls = require_hls();
module2.exports = { parse: parse2, compile, segment, hls };
}
});
// main.ts
__export(exports, {
default: () => ChatViewPlugin
});
var import_obsidian = __toModule(require("obsidian"));
var webvtt = __toModule(require_node_webvtt());
var KEYMAP = { ">": "right", "<": "left", "^": "center" };
var CONFIGS = {
"header": ["h2", "h3", "h4", "h5", "h6"],
"mw": ["50", "55", "60", "65", "70", "75", "80", "85", "90"],
"mode": ["default", "minimal"]
};
var COLORS = [
"red",
"orange",
"yellow",
"green",
"blue",
"purple",
"grey",
"brown",
"indigo",
"teal",
"pink",
"slate",
"wood"
];
var _ChatPatterns = class {
};
var ChatPatterns = _ChatPatterns;
ChatPatterns.message = /(^>|<|\^)/;
ChatPatterns.delimiter = /.../;
ChatPatterns.comment = /^#/;
ChatPatterns.colors = /\[(.*?)\]/;
ChatPatterns.format = /{(.*?)}/;
ChatPatterns.joined = RegExp([_ChatPatterns.message, _ChatPatterns.delimiter, _ChatPatterns.colors, _ChatPatterns.comment, _ChatPatterns.format].map((pattern) => pattern.source).join("|"));
ChatPatterns.voice = /<v\s+([^>]+)>([^<]+)<\/v>/;
var ChatViewPlugin = class extends import_obsidian.Plugin {
onload() {
return __async(this, null, function* () {
this.registerMarkdownCodeBlockProcessor("chat-webvtt", (source, el, _) => {
const vtt = webvtt.parse(source, { meta: true });
const messages = [];
const self = vtt.meta && "Self" in vtt.meta ? vtt.meta.Self : void 0;
const selves = self ? self.split(",").map((val) => val.trim()) : void 0;
const formatConfigs = new Map();
const maxWidth = vtt.meta && "MaxWidth" in vtt.meta ? vtt.meta.MaxWidth : void 0;
const headerConfig = vtt.meta && "Header" in vtt.meta ? vtt.meta.Header : void 0;
const modeConfig = vtt.meta && "Mode" in vtt.meta ? vtt.meta.Mode : void 0;
if (CONFIGS["mw"].contains(maxWidth))
formatConfigs.set("mw", maxWidth);
if (CONFIGS["header"].contains(headerConfig))
formatConfigs.set("header", headerConfig);
if (CONFIGS["mode"].contains(modeConfig))
formatConfigs.set("mode", modeConfig);
console.log(formatConfigs);
for (let index = 0; index < vtt.cues.length; index++) {
const cue = vtt.cues[index];
const start = (0, import_obsidian.moment)(Math.round(cue.start * 1e3)).format("HH:mm:ss.SSS");
const end = (0, import_obsidian.moment)(Math.round(cue.end * 1e3)).format("HH:mm:ss.SSS");
if (ChatPatterns.voice.test(cue.text)) {
const matches = cue.text.match(ChatPatterns.voice);
messages.push({ header: matches[1], body: matches[2], subtext: `${start} to ${end}` });
} else {
messages.push({ header: "", body: cue.text, subtext: `${start} to ${end}` });
}
}
const headers = messages.map((message) => message.header);
const uniqueHeaders = new Set(headers);
uniqueHeaders.delete("");
console.log(messages);
console.log(uniqueHeaders);
const colorConfigs = new Map();
Array.from(uniqueHeaders).forEach((h, i) => colorConfigs.set(h, COLORS[i % COLORS.length]));
console.log(colorConfigs);
messages.forEach((message, index, arr) => {
const prevHeader = index > 0 ? arr[index - 1].header : "";
const align = selves && selves.contains(message.header) ? "right" : "left";
const continued = message.header === prevHeader;
this.createChatBubble(continued ? "" : message.header, prevHeader, message.body, message.subtext, align, el, continued, colorConfigs, formatConfigs);
});
});
this.registerMarkdownCodeBlockProcessor("chat", (source, el, _) => {
const rawLines = source.split("\n").filter((line) => ChatPatterns.joined.test(line.trim()));
const lines = rawLines.map((rawLine) => rawLine.trim());
const formatConfigs = new Map();
const colorConfigs = new Map();
for (const line of lines) {
if (ChatPatterns.format.test(line)) {
const configs = line.replace("{", "").replace("}", "").split(",").map((l) => l.trim());
for (const config of configs) {
const [k, v] = config.split("=").map((c) => c.trim());
if (Object.keys(CONFIGS).contains(k) && CONFIGS[k].contains(v))
formatConfigs.set(k, v);
}
} else if (ChatPatterns.colors.test(line)) {
const configs = line.replace("[", "").replace("]", "").split(",").map((l) => l.trim());
for (const config of configs) {
const [k, v] = config.split("=").map((c) => c.trim());
if (k.length > 0 && COLORS.contains(v))
colorConfigs.set(k, v);
}
}
}
let continuedCount = 0;
for (let index = 0; index < lines.length; index++) {
const line = lines[index].trim();
if (ChatPatterns.comment.test(line)) {
el.createEl("p", { text: line.substring(1).trim(), cls: ["chat-view-comment"] });
} else if (line === "...") {
const delimiter = el.createDiv({ cls: ["delimiter"] });
for (let i = 0; i < 3; i++)
delimiter.createDiv({ cls: ["dot"] });
} else if (ChatPatterns.message.test(line)) {
const components = line.substring(1).split("|");
if (components.length > 0) {
const first = components[0];
const header = components.length > 1 ? first.trim() : "";
const message = components.length > 1 ? components[1].trim() : first.trim();
const subtext = components.length > 2 ? components[2].trim() : "";
const continued = index > 0 && line.charAt(0) === lines[index - 1].charAt(0) && header === "";
let prevHeader = "";
if (continued) {
continuedCount++;
const prevComponents = lines[index - continuedCount].trim().substring(1).split("|");
prevHeader = prevComponents[0].length > 1 ? prevComponents[0].trim() : "";
} else {
continuedCount = 0;
}
this.createChatBubble(header, prevHeader, message, subtext, KEYMAP[line.charAt(0)], el, continued, colorConfigs, formatConfigs);
}
}
}
});
});
}
createChatBubble(header, prevHeader, message, subtext, align, element, continued, colorConfigs, formatConfigs) {
const marginClass = continued ? "chat-view-small-vertical-margin" : "chat-view-default-vertical-margin";
const colorConfigClass = `chat-view-${colorConfigs.get(continued ? prevHeader : header)}`;
const widthClass = formatConfigs.has("mw") ? `chat-view-max-width-${formatConfigs.get("mw")}` : import_obsidian.Platform.isMobile ? "chat-view-mobile-width" : "chat-view-desktop-width";
const modeClass = `chat-view-bubble-mode-${formatConfigs.has("mode") ? formatConfigs.get("mode") : "default"}`;
const headerEl = formatConfigs.has("header") ? formatConfigs.get("header") : "h4";
const bubble = element.createDiv({
cls: ["chat-view-bubble", `chat-view-align-${align}`, marginClass, colorConfigClass, widthClass, modeClass]
});
if (header.length > 0)
bubble.createEl(headerEl, { text: header, cls: ["chat-view-header"] });
if (message.length > 0)
bubble.createEl("p", { text: message, cls: ["chat-view-message"] });
if (subtext.length > 0)
bubble.createEl("sub", { text: subtext, cls: ["chat-view-subtext"] });
}
};

@ -0,0 +1,9 @@
{
"id": "obsidian-chat-view",
"name": "Chat View",
"version": "1.2.0",
"minAppVersion": "0.12.0",
"description": "Chat View enables you to create elegant Chat UIs in your Obsidian markdown files. It also supports the WebVTT format.",
"author": "Aditya Majethia",
"isDesktopOnly": false
}

@ -0,0 +1,200 @@
:root {
--opacity: 0.6;
--line-height: 1.8;
--line-height-minimal: 1.6;
}
div.chat-view-bubble-mode-default>h2.chat-view-header,
div.chat-view-bubble-mode-default>h3.chat-view-header,
div.chat-view-bubble-mode-default>h4.chat-view-header,
div.chat-view-bubble-mode-default>h5.chat-view-header,
div.chat-view-bubble-mode-default>h6.chat-view-header {
margin: 0;
margin-bottom: 8px;
}
div.chat-view-bubble-mode-minimal>h2.chat-view-header,
div.chat-view-bubble-mode-minimal>h3.chat-view-header,
div.chat-view-bubble-mode-minimal>h4.chat-view-header,
div.chat-view-bubble-mode-minimal>h5.chat-view-header,
div.chat-view-bubble-mode-minimal>h6.chat-view-header {
margin: 0;
margin-bottom: 4px;
}
div.chat-view-bubble-mode-default>p.chat-view-message {
margin: 0;
margin-bottom: 2px;
line-height: var(--line-height);
}
div.chat-view-bubble-mode-minimal>p.chat-view-message {
margin: 0;
line-height: var(--line-height-minimal);
}
sub.chat-view-subtext {
opacity: var(--opacity);
}
.chat-view-comment {
width: fit-content;
max-width: 90%;
margin: 24px auto;
line-height: var(--line-height);
text-align: center;
opacity: var(--opacity);
}
div.chat-view-bubble {
width: fit-content;
min-width: 30%;
}
div.chat-view-bubble-mode-default {
padding: 12px;
background-color: rgba(0, 0, 0, 0.075);
border: 2px solid rgba(255, 255, 255, 0.15);
border-radius: 16px;
}
div.chat-view-bubble-mode-minimal {
padding: 4px 0px;
background-color: transparent;
}
.chat-view-mobile-width {
max-width: 85%;
}
.chat-view-desktop-width {
max-width: 75%;
}
.chat-view-max-width-50 {
max-width: 50%;
}
.chat-view-max-width-55 {
max-width: 55%;
}
.chat-view-max-width-60 {
max-width: 60%;
}
.chat-view-max-width-65 {
max-width: 65%;
}
.chat-view-max-width-70 {
max-width: 70%;
}
.chat-view-max-width-75 {
max-width: 75%;
}
.chat-view-max-width-80 {
max-width: 80%;
}
.chat-view-max-width-85 {
max-width: 85%;
}
.chat-view-max-width-90 {
max-width: 90%;
}
div.chat-view-default-vertical-margin {
margin-top: 18px;
}
div.chat-view-small-vertical-margin {
margin-top: 12px;
}
div.chat-view-align-left {
border-top-left-radius: 0;
margin-left: 0;
margin-right: auto;
}
div.chat-view-align-right {
border-top-right-radius: 0;
margin-left: auto;
margin-right: 0;
}
div.chat-view-align-center {
margin-left: auto;
margin-right: auto;
}
div.delimiter {
width: fit-content;
margin: 24px auto;
}
div.delimiter div.dot {
display: inline-block;
width: 6px;
height: 6px;
margin: 0px 4px;
border-radius: 60%;
background-color: currentColor;
opacity: var(--opacity);
}
div.chat-view-blue>.chat-view-header {
color: #08F;
}
div.chat-view-green>.chat-view-header {
color: #2B5;
}
div.chat-view-yellow>.chat-view-header {
color: #ED0;
}
div.chat-view-orange>.chat-view-header {
color: #F80;
}
div.chat-view-red>.chat-view-header {
color: #F33;
}
div.chat-view-purple>.chat-view-header {
color: #B2C;
}
div.chat-view-grey>.chat-view-header {
color: #999;
}
div.chat-view-brown .chat-view-header {
color: #A71;
}
div.chat-view-indigo .chat-view-header {
color: #75F;
}
div.chat-view-teal .chat-view-header {
color: #0AA;
}
div.chat-view-pink .chat-view-header {
color: #F2A;
}
div.chat-view-slate .chat-view-header {
color: #78A;
}
div.chat-view-wood .chat-view-header {
color: #EE6a44;
}

@ -4123,14 +4123,74 @@
"size": 9270, "size": 9270,
"tags": 3, "tags": 3,
"links": 2 "links": 2
},
"00.01 Admin/Calendars/2022-06-01.md": {
"size": 1013,
"tags": 0,
"links": 4
},
"00.01 Admin/Calendars/2022-06-02.md": {
"size": 1013,
"tags": 0,
"links": 4
},
"00.03 News/The Incredible True Story of Jody Harris, Con Artist Extraordinaire..md": {
"size": 52044,
"tags": 3,
"links": 2
},
"00.01 Admin/Calendars/2022-06-03.md": {
"size": 1130,
"tags": 0,
"links": 6
},
"00.01 Admin/Calendars/2022-06-04.md": {
"size": 1167,
"tags": 0,
"links": 8
},
"00.01 Admin/Calendars/2022-06-05.md": {
"size": 1015,
"tags": 0,
"links": 4
},
"00.03 News/When Cars Kill Pedestrians.md": {
"size": 37358,
"tags": 3,
"links": 2
},
"00.03 News/The making of Prince William.md": {
"size": 24310,
"tags": 3,
"links": 2
},
"00.03 News/Its 10 PM. Do You Know Where Your Cat Is Hakai Magazine.md": {
"size": 27660,
"tags": 2,
"links": 2
},
"00.03 News/He was my high school journalism teacher. Then I investigated his relationships with teenage girls..md": {
"size": 42874,
"tags": 4,
"links": 2
},
"00.03 News/Riding Londons Unexpectedly Fantastic Elizabeth Line.md": {
"size": 10032,
"tags": 4,
"links": 2
},
"00.05 Media/The Mafia, The CIA and George Bush.md": {
"size": 319,
"tags": 0,
"links": 1
} }
}, },
"commitTypes": { "commitTypes": {
"/": { "/": {
"Refactor": 560, "Refactor": 570,
"Create": 490, "Create": 504,
"Link": 1001, "Link": 1026,
"Expand": 465 "Expand": 471
} }
}, },
"dailyCommits": { "dailyCommits": {
@ -4142,21 +4202,21 @@
"4": 12, "4": 12,
"5": 6, "5": 6,
"6": 18, "6": 18,
"7": 181, "7": 182,
"8": 248, "8": 254,
"9": 196, "9": 199,
"10": 131, "10": 133,
"11": 103, "11": 103,
"12": 117, "12": 121,
"13": 217, "13": 217,
"14": 145, "14": 145,
"15": 101, "15": 101,
"16": 94, "16": 94,
"17": 92, "17": 118,
"18": 278, "18": 282,
"19": 105, "19": 109,
"20": 105, "20": 109,
"21": 57, "21": 58,
"22": 173, "22": 173,
"23": 50 "23": 50
} }
@ -4165,16 +4225,22 @@
"/": { "/": {
"Mon": 376, "Mon": 376,
"Tue": 205, "Tue": 205,
"Wed": 248, "Wed": 253,
"Thu": 305, "Thu": 313,
"Fri": 225, "Fri": 228,
"Sat": 0, "Sat": 0,
"Sun": 1157 "Sun": 1196
} }
}, },
"recentCommits": { "recentCommits": {
"/": { "/": {
"Expanded": [ "Expanded": [
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-05.md\"> 2022-06-05 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-04.md\"> 2022-06-04 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-04.md\"> 2022-06-04 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-03.md\"> 2022-06-03 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-02.md\"> 2022-06-02 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-01.md\"> 2022-06-01 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-31.md\"> 2022-05-31 </a>", "<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-31.md\"> 2022-05-31 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-30.md\"> 2022-05-30 </a>", "<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-30.md\"> 2022-05-30 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-29.md\"> 2022-05-29 </a>", "<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-29.md\"> 2022-05-29 </a>",
@ -4219,15 +4285,23 @@
"<a class=\"internal-link\" href=\"05.02 Networks/Configuring UFW.md\"> Configuring UFW </a>", "<a class=\"internal-link\" href=\"05.02 Networks/Configuring UFW.md\"> Configuring UFW </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-14.md\"> 2022-05-14 </a>", "<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-14.md\"> 2022-05-14 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-13.md\"> 2022-05-13 </a>", "<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-13.md\"> 2022-05-13 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-12.md\"> 2022-05-12 </a>", "<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-12.md\"> 2022-05-12 </a>"
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-11.md\"> 2022-05-11 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-10.md\"> 2022-05-10 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-09.md\"> 2022-05-09 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-08.md\"> 2022-05-08 </a>",
"<a class=\"internal-link\" href=\"01.01 Life Orga/@Finances.md\"> @Finances </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-07.md\"> 2022-05-07 </a>"
], ],
"Created": [ "Created": [
"<a class=\"internal-link\" href=\"00.02 Inbox/Youtube - YouTube.md\"> Youtube - YouTube </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Riding Londons Unexpectedly Fantastic Elizabeth Line.md\"> Riding Londons Unexpectedly Fantastic Elizabeth Line </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/He was my high school journalism teacher. Then I investigated his relationships with teenage girls..md\"> He was my high school journalism teacher. Then I investigated his relationships with teenage girls. </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Its 10 PM. Do You Know Where Your Cat Is Hakai Magazine.md\"> Its 10 PM. Do You Know Where Your Cat Is Hakai Magazine </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/The making of Prince William.md\"> The making of Prince William </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/NPR Cookie Consent and Choices.md\"> NPR Cookie Consent and Choices </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/When Cars Kill Pedestrians.md\"> When Cars Kill Pedestrians </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-05.md\"> 2022-06-05 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-04.md\"> 2022-06-04 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-03.md\"> 2022-06-03 </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/The Incredible True Story of Jody Harris, Con Artist Extraordinaire..md\"> The Incredible True Story of Jody Harris, Con Artist Extraordinaire. </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-02.md\"> 2022-06-02 </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/SPACs Are Warning They May Go Bust.md\"> SPACs Are Warning They May Go Bust </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-01.md\"> 2022-06-01 </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/The Women Who Ran Genghis Khans Empire.md\"> The Women Who Ran Genghis Khans Empire </a>", "<a class=\"internal-link\" href=\"00.02 Inbox/The Women Who Ran Genghis Khans Empire.md\"> The Women Who Ran Genghis Khans Empire </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-31.md\"> 2022-05-31 </a>", "<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-31.md\"> 2022-05-31 </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/The Silent Impact of Burnout — and How to Overcome It as a Leader.md\"> The Silent Impact of Burnout — and How to Overcome It as a Leader </a>", "<a class=\"internal-link\" href=\"00.02 Inbox/The Silent Impact of Burnout — and How to Overcome It as a Leader.md\"> The Silent Impact of Burnout — and How to Overcome It as a Leader </a>",
@ -4264,23 +4338,17 @@
"<a class=\"internal-link\" href=\"00.02 Inbox/The Untold Story of the White Houses Record Collection.md\"> The Untold Story of the White Houses Record Collection </a>", "<a class=\"internal-link\" href=\"00.02 Inbox/The Untold Story of the White Houses Record Collection.md\"> The Untold Story of the White Houses Record Collection </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/North Korea Hacked Him. So He Took Down Its Internet.md\"> North Korea Hacked Him. So He Took Down Its Internet </a>", "<a class=\"internal-link\" href=\"00.02 Inbox/North Korea Hacked Him. So He Took Down Its Internet.md\"> North Korea Hacked Him. So He Took Down Its Internet </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/The Clockwork Orgasm - Common Reader.md\"> The Clockwork Orgasm - Common Reader </a>", "<a class=\"internal-link\" href=\"00.02 Inbox/The Clockwork Orgasm - Common Reader.md\"> The Clockwork Orgasm - Common Reader </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-15.md\"> 2022-05-15 </a>", "<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-15.md\"> 2022-05-15 </a>"
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-14.md\"> 2022-05-14 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-13.md\"> 2022-05-13 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-12.md\"> 2022-05-12 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-11.md\"> 2022-05-11 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-10.md\"> 2022-05-10 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-09.md\"> 2022-05-09 </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/How a billionaires boys club came to dominate the public square.md\"> How a billionaires boys club came to dominate the public square </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Did Jesse James Bury Confederate Gold These Treasure Hunters Think So..md\"> Did Jesse James Bury Confederate Gold These Treasure Hunters Think So. </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/There was an enormous amount of drugs being taken Graham Nash on groupies, feuds, divorce and ego.md\"> There was an enormous amount of drugs being taken Graham Nash on groupies, feuds, divorce and ego </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Are the Next Global Tennis Stars Among These Tweens.md\"> Are the Next Global Tennis Stars Among These Tweens </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/2022-05-08 16-48-07.md\"> 2022-05-08 16-48-07 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-08.md\"> 2022-05-08 </a>",
"<a class=\"internal-link\" href=\"2022-05-08.md\"> 2022-05-08 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-13 Meggi-mo is arriving in ZH.md\"> 2022-05-13 Meggi-mo is arriving in ZH </a>"
], ],
"Renamed": [ "Renamed": [
"<a class=\"internal-link\" href=\"00.05 Media/The Mafia, The CIA and George Bush.md\"> The Mafia, The CIA and George Bush </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/The Mafia, The CIA and George Bush.md\"> The Mafia, The CIA and George Bush </a>",
"<a class=\"internal-link\" href=\"00.03 News/Riding Londons Unexpectedly Fantastic Elizabeth Line.md\"> Riding Londons Unexpectedly Fantastic Elizabeth Line </a>",
"<a class=\"internal-link\" href=\"00.03 News/He was my high school journalism teacher. Then I investigated his relationships with teenage girls..md\"> He was my high school journalism teacher. Then I investigated his relationships with teenage girls. </a>",
"<a class=\"internal-link\" href=\"00.03 News/Its 10 PM. Do You Know Where Your Cat Is Hakai Magazine.md\"> Its 10 PM. Do You Know Where Your Cat Is Hakai Magazine </a>",
"<a class=\"internal-link\" href=\"00.03 News/The making of Prince William.md\"> The making of Prince William </a>",
"<a class=\"internal-link\" href=\"00.03 News/When Cars Kill Pedestrians.md\"> When Cars Kill Pedestrians </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Incredible True Story of Jody Harris, Con Artist Extraordinaire..md\"> The Incredible True Story of Jody Harris, Con Artist Extraordinaire. </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Women Who Ran Genghis Khans Empire.md\"> The Women Who Ran Genghis Khans Empire </a>", "<a class=\"internal-link\" href=\"00.03 News/The Women Who Ran Genghis Khans Empire.md\"> The Women Who Ran Genghis Khans Empire </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Silent Impact of Burnout — and How to Overcome It as a Leader.md\"> The Silent Impact of Burnout — and How to Overcome It as a Leader </a>", "<a class=\"internal-link\" href=\"00.03 News/The Silent Impact of Burnout — and How to Overcome It as a Leader.md\"> The Silent Impact of Burnout — and How to Overcome It as a Leader </a>",
"<a class=\"internal-link\" href=\"02.03 Zürich/No Idea.md\"> No Idea </a>", "<a class=\"internal-link\" href=\"02.03 Zürich/No Idea.md\"> No Idea </a>",
@ -4323,17 +4391,15 @@
"<a class=\"internal-link\" href=\"03.03 Food & Wine/Spanakopia pie.md\"> Spanakopia pie </a>", "<a class=\"internal-link\" href=\"03.03 Food & Wine/Spanakopia pie.md\"> Spanakopia pie </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Unseen Scars of Those Who Kill Via Remote Control.md\"> The Unseen Scars of Those Who Kill Via Remote Control </a>", "<a class=\"internal-link\" href=\"00.03 News/The Unseen Scars of Those Who Kill Via Remote Control.md\"> The Unseen Scars of Those Who Kill Via Remote Control </a>",
"<a class=\"internal-link\" href=\"00.03 News/Down the Hatch.md\"> Down the Hatch </a>", "<a class=\"internal-link\" href=\"00.03 News/Down the Hatch.md\"> Down the Hatch </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Down the Hatch.md\"> Down the Hatch </a>", "<a class=\"internal-link\" href=\"00.02 Inbox/Down the Hatch.md\"> Down the Hatch </a>"
"<a class=\"internal-link\" href=\"00.03 News/“The Eye in the Sea” camera observes elusive deep sea animals.md\"> “The Eye in the Sea” camera observes elusive deep sea animals </a>",
"<a class=\"internal-link\" href=\"00.03 News/Jeffrey Epstein, a Rare Cello and an Enduring Mystery.md\"> Jeffrey Epstein, a Rare Cello and an Enduring Mystery </a>",
"<a class=\"internal-link\" href=\"00.03 News/The History of the Varsity Jacket, From Harvard to Hip-Hop.md\"> The History of the Varsity Jacket, From Harvard to Hip-Hop </a>",
"<a class=\"internal-link\" href=\"00.03 News/How an Ivy League School Turned Against a Student.md\"> How an Ivy League School Turned Against a Student </a>",
"<a class=\"internal-link\" href=\"02.03 Zürich/Cantinetta Antinori.md\"> Cantinetta Antinori </a>",
"<a class=\"internal-link\" href=\"02.03 Zürich/Café des Amis.md\"> Café des Amis </a>",
"<a class=\"internal-link\" href=\"00.06 Professional/The Importance of Leading With Empathy (And How To Do It).md\"> The Importance of Leading With Empathy (And How To Do It) </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Quick shares/Mobile - CH.md\"> Mobile - CH </a>"
], ],
"Tagged": [ "Tagged": [
"<a class=\"internal-link\" href=\"00.03 News/He was my high school journalism teacher. Then I investigated his relationships with teenage girls..md\"> He was my high school journalism teacher. Then I investigated his relationships with teenage girls. </a>",
"<a class=\"internal-link\" href=\"00.03 News/Riding Londons Unexpectedly Fantastic Elizabeth Line.md\"> Riding Londons Unexpectedly Fantastic Elizabeth Line </a>",
"<a class=\"internal-link\" href=\"00.03 News/When Cars Kill Pedestrians.md\"> When Cars Kill Pedestrians </a>",
"<a class=\"internal-link\" href=\"00.03 News/The making of Prince William.md\"> The making of Prince William </a>",
"<a class=\"internal-link\" href=\"00.03 News/Its 10 PM. Do You Know Where Your Cat Is Hakai Magazine.md\"> Its 10 PM. Do You Know Where Your Cat Is Hakai Magazine </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/The Incredible True Story of Jody Harris, Con Artist Extraordinaire..md\"> The Incredible True Story of Jody Harris, Con Artist Extraordinaire. </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Women Who Ran Genghis Khans Empire.md\"> The Women Who Ran Genghis Khans Empire </a>", "<a class=\"internal-link\" href=\"00.03 News/The Women Who Ran Genghis Khans Empire.md\"> The Women Who Ran Genghis Khans Empire </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Silent Impact of Burnout — and How to Overcome It as a Leader.md\"> The Silent Impact of Burnout — and How to Overcome It as a Leader </a>", "<a class=\"internal-link\" href=\"00.03 News/The Silent Impact of Burnout — and How to Overcome It as a Leader.md\"> The Silent Impact of Burnout — and How to Overcome It as a Leader </a>",
"<a class=\"internal-link\" href=\"No Idea.md\"> No Idea </a>", "<a class=\"internal-link\" href=\"No Idea.md\"> No Idea </a>",
@ -4378,13 +4444,7 @@
"<a class=\"internal-link\" href=\"00.03 News/How an Ivy League School Turned Against a Student.md\"> How an Ivy League School Turned Against a Student </a>", "<a class=\"internal-link\" href=\"00.03 News/How an Ivy League School Turned Against a Student.md\"> How an Ivy League School Turned Against a Student </a>",
"<a class=\"internal-link\" href=\"Cantinetta Antinori.md\"> Cantinetta Antinori </a>", "<a class=\"internal-link\" href=\"Cantinetta Antinori.md\"> Cantinetta Antinori </a>",
"<a class=\"internal-link\" href=\"Café des Amis.md\"> Café des Amis </a>", "<a class=\"internal-link\" href=\"Café des Amis.md\"> Café des Amis </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Big Shells With Spicy Lamb Sausage and Pistachios.md\"> Big Shells With Spicy Lamb Sausage and Pistachios </a>", "<a class=\"internal-link\" href=\"00.02 Inbox/Big Shells With Spicy Lamb Sausage and Pistachios.md\"> Big Shells With Spicy Lamb Sausage and Pistachios </a>"
"<a class=\"internal-link\" href=\"03.03 Food & Wine/Churros with Bittersweet Chocolate Sauce 1.md\"> Churros with Bittersweet Chocolate Sauce 1 </a>",
"<a class=\"internal-link\" href=\"Storj.md\"> Storj </a>",
"<a class=\"internal-link\" href=\"Zint.md\"> Zint </a>",
"<a class=\"internal-link\" href=\"00.03 News/H-Town United An Unlikely Soccer Power Rises in Texas.md\"> H-Town United An Unlikely Soccer Power Rises in Texas </a>",
"<a class=\"internal-link\" href=\"00.03 News/Meet the DIY Duo Behind the Amazon Labor Unions Guerrilla Bid to Make History.md\"> Meet the DIY Duo Behind the Amazon Labor Unions Guerrilla Bid to Make History </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Making of Vladimir Putin.md\"> The Making of Vladimir Putin </a>"
], ],
"Refactored": [ "Refactored": [
"<a class=\"internal-link\" href=\"01.02 Home/@Main Dashboard.md\"> @Main Dashboard </a>", "<a class=\"internal-link\" href=\"01.02 Home/@Main Dashboard.md\"> @Main Dashboard </a>",
@ -4425,6 +4485,8 @@
"<a class=\"internal-link\" href=\"02.03 Zürich/@Restaurants Zürich.md\"> @Restaurants Zürich </a>" "<a class=\"internal-link\" href=\"02.03 Zürich/@Restaurants Zürich.md\"> @Restaurants Zürich </a>"
], ],
"Deleted": [ "Deleted": [
"<a class=\"internal-link\" href=\"00.02 Inbox/NPR Cookie Consent and Choices.md\"> NPR Cookie Consent and Choices </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/SPACs Are Warning They May Go Bust.md\"> SPACs Are Warning They May Go Bust </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Make the Most of Your Salads With Balsamic Honey Salad Dressing.md\"> Make the Most of Your Salads With Balsamic Honey Salad Dressing </a>", "<a class=\"internal-link\" href=\"00.02 Inbox/Make the Most of Your Salads With Balsamic Honey Salad Dressing.md\"> Make the Most of Your Salads With Balsamic Honey Salad Dressing </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/2022-05-08 16-48-07.md\"> 2022-05-08 16-48-07 </a>", "<a class=\"internal-link\" href=\"00.02 Inbox/2022-05-08 16-48-07.md\"> 2022-05-08 16-48-07 </a>",
"<a class=\"internal-link\" href=\"2022-05-08.md\"> 2022-05-08 </a>", "<a class=\"internal-link\" href=\"2022-05-08.md\"> 2022-05-08 </a>",
@ -4473,11 +4535,28 @@
"<a class=\"internal-link\" href=\"00.02 Inbox/Digital Cover - Method Man - Essence.md\"> Digital Cover - Method Man - Essence </a>", "<a class=\"internal-link\" href=\"00.02 Inbox/Digital Cover - Method Man - Essence.md\"> Digital Cover - Method Man - Essence </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Digital Cover - Method Man - Essence.md\"> Digital Cover - Method Man - Essence </a>", "<a class=\"internal-link\" href=\"00.02 Inbox/Digital Cover - Method Man - Essence.md\"> Digital Cover - Method Man - Essence </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Templates/ShoppingListto0.md\"> ShoppingListto0 </a>", "<a class=\"internal-link\" href=\"00.01 Admin/Templates/ShoppingListto0.md\"> ShoppingListto0 </a>",
"<a class=\"internal-link\" href=\"00.04 IT/Wordle self hosting.md\"> Wordle self hosting </a>", "<a class=\"internal-link\" href=\"00.04 IT/Wordle self hosting.md\"> Wordle self hosting </a>"
"<a class=\"internal-link\" href=\"00.02 Inbox/403 Forbidden.md\"> 403 Forbidden </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/MetaEdit plugin.md\"> MetaEdit plugin </a>"
], ],
"Linked": [ "Linked": [
"<a class=\"internal-link\" href=\"00.03 News/He was my high school journalism teacher. Then I investigated his relationships with teenage girls..md\"> He was my high school journalism teacher. Then I investigated his relationships with teenage girls. </a>",
"<a class=\"internal-link\" href=\"00.03 News/When Cars Kill Pedestrians.md\"> When Cars Kill Pedestrians </a>",
"<a class=\"internal-link\" href=\"00.03 News/The making of Prince William.md\"> The making of Prince William </a>",
"<a class=\"internal-link\" href=\"00.03 News/Riding Londons Unexpectedly Fantastic Elizabeth Line.md\"> Riding Londons Unexpectedly Fantastic Elizabeth Line </a>",
"<a class=\"internal-link\" href=\"00.05 Media/The Mafia, The CIA and George Bush.md\"> The Mafia, The CIA and George Bush </a>",
"<a class=\"internal-link\" href=\"00.03 News/Its 10 PM. Do You Know Where Your Cat Is Hakai Magazine.md\"> Its 10 PM. Do You Know Where Your Cat Is Hakai Magazine </a>",
"<a class=\"internal-link\" href=\"00.03 News/He was my high school journalism teacher. Then I investigated his relationships with teenage girls..md\"> He was my high school journalism teacher. Then I investigated his relationships with teenage girls. </a>",
"<a class=\"internal-link\" href=\"00.03 News/Riding Londons Unexpectedly Fantastic Elizabeth Line.md\"> Riding Londons Unexpectedly Fantastic Elizabeth Line </a>",
"<a class=\"internal-link\" href=\"00.03 News/When Cars Kill Pedestrians.md\"> When Cars Kill Pedestrians </a>",
"<a class=\"internal-link\" href=\"00.03 News/The making of Prince William.md\"> The making of Prince William </a>",
"<a class=\"internal-link\" href=\"00.03 News/Its 10 PM. Do You Know Where Your Cat Is Hakai Magazine.md\"> Its 10 PM. Do You Know Where Your Cat Is Hakai Magazine </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-05.md\"> 2022-06-05 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-04.md\"> 2022-06-04 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-04.md\"> 2022-06-04 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-03.md\"> 2022-06-03 </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Incredible True Story of Jody Harris, Con Artist Extraordinaire..md\"> The Incredible True Story of Jody Harris, Con Artist Extraordinaire. </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/The Incredible True Story of Jody Harris, Con Artist Extraordinaire..md\"> The Incredible True Story of Jody Harris, Con Artist Extraordinaire. </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-02.md\"> 2022-06-02 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-06-01.md\"> 2022-06-01 </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Women Who Ran Genghis Khans Empire.md\"> The Women Who Ran Genghis Khans Empire </a>", "<a class=\"internal-link\" href=\"00.03 News/The Women Who Ran Genghis Khans Empire.md\"> The Women Who Ran Genghis Khans Empire </a>",
"<a class=\"internal-link\" href=\"00.03 News/After Christendom.md\"> After Christendom </a>", "<a class=\"internal-link\" href=\"00.03 News/After Christendom.md\"> After Christendom </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-31.md\"> 2022-05-31 </a>", "<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-31.md\"> 2022-05-31 </a>",
@ -4509,26 +4588,7 @@
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-23.md\"> 2022-05-23 </a>", "<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-23.md\"> 2022-05-23 </a>",
"<a class=\"internal-link\" href=\"00.03 News/The Clockwork Orgasm - Common Reader.md\"> The Clockwork Orgasm - Common Reader </a>", "<a class=\"internal-link\" href=\"00.03 News/The Clockwork Orgasm - Common Reader.md\"> The Clockwork Orgasm - Common Reader </a>",
"<a class=\"internal-link\" href=\"00.03 News/American Racism and the Buffalo Shooting.md\"> American Racism and the Buffalo Shooting </a>", "<a class=\"internal-link\" href=\"00.03 News/American Racism and the Buffalo Shooting.md\"> American Racism and the Buffalo Shooting </a>",
"<a class=\"internal-link\" href=\"00.03 News/Coffeezilla, the YouTuber Exposing Crypto Scams.md\"> Coffeezilla, the YouTuber Exposing Crypto Scams </a>", "<a class=\"internal-link\" href=\"00.03 News/Coffeezilla, the YouTuber Exposing Crypto Scams.md\"> Coffeezilla, the YouTuber Exposing Crypto Scams </a>"
"<a class=\"internal-link\" href=\"00.03 News/How Hollywoods Blockbuster Golden Boys Went Weird Los Angeles Magazine.md\"> How Hollywoods Blockbuster Golden Boys Went Weird Los Angeles Magazine </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/A Search for Family, a Love for Horses and How It All Led to Kentucky Derby Glory.md\"> A Search for Family, a Love for Horses and How It All Led to Kentucky Derby Glory </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/The rise of the Strangler.md\"> The rise of the Strangler </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/Coffeezilla, the YouTuber Exposing Crypto Scams.md\"> Coffeezilla, the YouTuber Exposing Crypto Scams </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/A new generation of white supremacist killer - Los Angeles Times.md\"> A new generation of white supremacist killer - Los Angeles Times </a>",
"<a class=\"internal-link\" href=\"00.02 Inbox/American Racism and the Buffalo Shooting.md\"> American Racism and the Buffalo Shooting </a>",
"<a class=\"internal-link\" href=\"00.03 News/How Hollywoods Blockbuster Golden Boys Went Weird Los Angeles Magazine.md\"> How Hollywoods Blockbuster Golden Boys Went Weird Los Angeles Magazine </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-22.md\"> 2022-05-22 </a>",
"<a class=\"internal-link\" href=\"02.02 Paris/Chinaski.md\"> Chinaski </a>",
"<a class=\"internal-link\" href=\"02.02 Paris/Inavoué.md\"> Inavoué </a>",
"<a class=\"internal-link\" href=\"Inavoué.md\"> Inavoué </a>",
"<a class=\"internal-link\" href=\"Inavoué.md\"> Inavoué </a>",
"<a class=\"internal-link\" href=\"Chez Robert.md\"> Chez Robert </a>",
"<a class=\"internal-link\" href=\"Chez Robert.md\"> Chez Robert </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-21.md\"> 2022-05-21 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-20.md\"> 2022-05-20 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-19.md\"> 2022-05-19 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-18.md\"> 2022-05-18 </a>",
"<a class=\"internal-link\" href=\"00.01 Admin/Calendars/2022-05-17.md\"> 2022-05-17 </a>"
], ],
"Removed Tags from": [ "Removed Tags from": [
"<a class=\"internal-link\" href=\"06.02 Investments/Le Miel de Paris.md\"> Le Miel de Paris </a>", "<a class=\"internal-link\" href=\"06.02 Investments/Le Miel de Paris.md\"> Le Miel de Paris </a>",

@ -1,340 +0,0 @@
/*
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: () => DialoguePlugin
});
var import_obsidian2 = __toModule(require("obsidian"));
// src/types/dialogueTitleMode.ts
var DialogueTitleMode;
(function(DialogueTitleMode2) {
DialogueTitleMode2["Disabled"] = "disabled";
DialogueTitleMode2["First"] = "first";
DialogueTitleMode2["All"] = "all";
})(DialogueTitleMode || (DialogueTitleMode = {}));
// src/constants/classes.ts
var CLASSES = class {
};
CLASSES.DIALOGUE_WRAPPER = "dialogue-plugin-wrapper";
CLASSES.BLOCK_WRAPPER = "dialogue-plugin-block-wrapper";
CLASSES.MESSAGE_WRAPPER_LEFT = "dialogue-plugin-message-wrapper-left";
CLASSES.MESSAGE_WRAPPER_RIGHT = "dialogue-plugin-message-wrapper-right";
CLASSES.MESSAGE = "dialogue-plugin-message";
CLASSES.MESSAGE_TITLE = "dialogue-plugin-message-title";
CLASSES.MESSAGE_CONTENT = "dialogue-plugin-message-content";
CLASSES.DELIMITER_WRAPPER = "dialogue-plugin-delimiter-wrapper";
CLASSES.DELIMITER = "dialogue-plugin-delimiter";
CLASSES.DELIMITER_DOT = "dialogue-plugin-delimiter-dot";
CLASSES.COMMENT_WRAPPER = "dialogue-plugin-comment-wrapper";
CLASSES.COMMENT = "dialogue-plugin-comment";
// src/components/message.ts
var SIDES = class {
};
SIDES.LEFT = "left";
SIDES.RIGHT = "right";
var Message = class {
constructor(content, side, dialogueSettings) {
this.content = content;
this.side = side;
this.dialogueSettings = dialogueSettings;
this.participant = this.side == SIDES.LEFT ? this.dialogueSettings.leftParticipant : this.dialogueSettings.rightParticipant;
this.renderMessage();
}
renderMessage() {
const messageEl = this.createMessageEl();
if (this.titleShouldRender()) {
messageEl.createDiv({ cls: CLASSES.MESSAGE_TITLE, text: this.participant.title });
}
messageEl.createDiv({ cls: CLASSES.MESSAGE_CONTENT, text: this.content });
}
createMessageEl() {
var _a;
const sideClass = this.side == SIDES.LEFT ? CLASSES.MESSAGE_WRAPPER_LEFT : CLASSES.MESSAGE_WRAPPER_RIGHT;
const messageWrapperEl = this.dialogueSettings.parent.createDiv({
cls: `${CLASSES.BLOCK_WRAPPER} ${sideClass}`
});
return messageWrapperEl.createDiv({
cls: CLASSES.MESSAGE,
attr: {
style: `max-width: ${this.dialogueSettings.messageMaxWidth};`,
"data-participant-name": this.participant.title,
"data-participant-id": (_a = this.participant.enforcedId) != null ? _a : this.dialogueSettings.participants.get(this.participant.title)
}
});
}
titleShouldRender() {
if (this.participant.title.length < 1)
return false;
switch (this.dialogueSettings.titleMode) {
case DialogueTitleMode.Disabled:
return false;
case DialogueTitleMode.All:
return true;
case DialogueTitleMode.First: {
if (this.participant.renderedOnce)
return false;
this.participant.renderedOnce = true;
return true;
}
default:
return false;
}
}
};
// src/components/delimiter.ts
var Delimiter = class {
constructor(dialogueSettings) {
this.dialogueSettings = dialogueSettings;
this.renderDelimiter();
}
renderDelimiter() {
const delimiterWrapperEl = this.dialogueSettings.parent.createDiv({
cls: `${CLASSES.BLOCK_WRAPPER} ${CLASSES.DELIMITER_WRAPPER}`
});
const delimiterEl = delimiterWrapperEl.createDiv({ cls: CLASSES.DELIMITER });
delimiterEl.createEl("div", { cls: CLASSES.DELIMITER_DOT });
delimiterEl.createEl("div", { cls: CLASSES.DELIMITER_DOT });
delimiterEl.createEl("div", { cls: CLASSES.DELIMITER_DOT });
}
};
// src/components/comment.ts
var Comment = class {
constructor(content, dialogueSettings) {
this.content = content;
this.dialogueSettings = dialogueSettings;
this.renderComment();
}
renderComment() {
const commentEl = this.dialogueSettings.parent.createDiv({
cls: `${CLASSES.BLOCK_WRAPPER} ${CLASSES.COMMENT_WRAPPER}`
});
return commentEl.createDiv({
cls: CLASSES.COMMENT,
text: this.content,
attr: {
style: `max-width: ${this.dialogueSettings.commentMaxWidth};`
}
});
}
};
// src/dialogue.ts
var KEYWORDS = class {
};
KEYWORDS.LEFT_PATTERN = /^l(?:eft)?(?:-(\d+))?:/i;
KEYWORDS.RIGHT_PATTERN = /^r(?:ight)?(?:-(\d+))?:/i;
KEYWORDS.TITLE_MODE = "titleMode:";
KEYWORDS.MESSAGE_MAX_WIDTH = "messageMaxWidth:";
KEYWORDS.COMMENT_MAX_WIDTH = "commentMaxWidth:";
KEYWORDS.DELIMITER = /^-|delimiter/;
KEYWORDS.COMMENT = "#";
KEYWORDS.MESSAGE_LEFT = "<";
KEYWORDS.MESSAGE_RIGHT = ">";
var DialogueRenderer = class {
constructor(src, parent, settings) {
this.src = src;
this.dialogueWrapperEl = parent.createDiv({ cls: CLASSES.DIALOGUE_WRAPPER });
this.dialogueSettings = {
parent: this.dialogueWrapperEl,
leftParticipant: {
title: settings.defaultLeftTitle,
renderedOnce: false,
enforcedId: null
},
rightParticipant: {
title: settings.defaultRightTitle,
renderedOnce: false,
enforcedId: null
},
titleMode: settings.defaultTitleMode,
messageMaxWidth: settings.defaultMessageMaxWidth,
commentMaxWidth: settings.defaultCommentMaxWidth,
participants: new Map()
};
this.renderDialogue();
}
registerParticipant(participant) {
if (!this.dialogueSettings.participants.has(participant)) {
this.dialogueSettings.participants.set(participant, this.dialogueSettings.participants.size + 1);
}
}
getEnforcedId(pattern, line) {
let enforcedId = null;
const result = pattern.exec(line);
if (result != null && result.length > 1) {
enforcedId = result[1];
}
return enforcedId;
}
renderDialogue() {
const lines = this.src.split(/\r?\n/).map((line) => line.trim()).filter((line) => line.length > 0);
for (const line of lines) {
if (KEYWORDS.LEFT_PATTERN.test(line)) {
this.dialogueSettings.leftParticipant.title = line.split(":").splice(1).join(":").trim();
this.dialogueSettings.leftParticipant.renderedOnce = false;
this.dialogueSettings.leftParticipant.enforcedId = this.getEnforcedId(KEYWORDS.LEFT_PATTERN, line);
} else if (KEYWORDS.RIGHT_PATTERN.test(line)) {
this.dialogueSettings.rightParticipant.title = line.split(":").splice(1).join(":").trim();
this.dialogueSettings.rightParticipant.renderedOnce = false;
this.dialogueSettings.rightParticipant.enforcedId = this.getEnforcedId(KEYWORDS.RIGHT_PATTERN, line);
} else if (line.startsWith(KEYWORDS.TITLE_MODE)) {
const modeName = line.substr(KEYWORDS.TITLE_MODE.length).trim().toLowerCase();
if (Object.values(DialogueTitleMode).some((mode) => mode == modeName)) {
this.dialogueSettings.titleMode = modeName;
}
} else if (line.startsWith(KEYWORDS.MESSAGE_MAX_WIDTH)) {
this.dialogueSettings.messageMaxWidth = line.substr(KEYWORDS.MESSAGE_MAX_WIDTH.length).trim();
} else if (line.startsWith(KEYWORDS.COMMENT_MAX_WIDTH)) {
this.dialogueSettings.commentMaxWidth = line.substr(KEYWORDS.COMMENT_MAX_WIDTH.length).trim();
} else if (KEYWORDS.DELIMITER.test(line)) {
new Delimiter(this.dialogueSettings);
} else if (line.startsWith(KEYWORDS.COMMENT)) {
const content = line.substr(KEYWORDS.COMMENT.length);
new Comment(content, this.dialogueSettings);
} else if (line.startsWith(KEYWORDS.MESSAGE_LEFT)) {
const content = line.substr(KEYWORDS.MESSAGE_LEFT.length);
this.registerParticipant(this.dialogueSettings.leftParticipant.title);
new Message(content, SIDES.LEFT, this.dialogueSettings);
} else if (line.startsWith(KEYWORDS.MESSAGE_RIGHT)) {
const content = line.substr(KEYWORDS.MESSAGE_RIGHT.length);
this.registerParticipant(this.dialogueSettings.rightParticipant.title);
new Message(content, SIDES.RIGHT, this.dialogueSettings);
}
}
}
};
// src/settings.ts
var import_obsidian = __toModule(require("obsidian"));
var DEFAULT_SETTINGS = {
defaultLeftTitle: "",
defaultRightTitle: "",
defaultTitleMode: DialogueTitleMode.First,
defaultMessageMaxWidth: "60%",
defaultCommentMaxWidth: "60%"
};
var DialogueSettingTab = class extends import_obsidian.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
}
display() {
const { containerEl } = this;
containerEl.empty();
containerEl.createEl("h2", { text: "Dialogue Settings" });
const coffeeEl = containerEl.createEl("div", {
attr: {
style: "text-align: center; margin-bottom: 10px;"
}
});
const coffeeLinkEl = coffeeEl.createEl("a", { href: "https://www.buymeacoffee.com/holubj" });
coffeeLinkEl.createEl("img", {
attr: {
src: "https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png",
alt: "Buy Me A Coffee",
style: "height: 60px; width: 217px;"
}
});
new import_obsidian.Setting(containerEl).setName("Default left title").setDesc("Default value for left title in all dialogues.").addText((text) => text.setPlaceholder("Enter default left title").setValue(this.plugin.settings.defaultLeftTitle).onChange((value) => __async(this, null, function* () {
this.plugin.settings.defaultLeftTitle = value;
yield this.plugin.saveSettings();
})));
new import_obsidian.Setting(containerEl).setName("Default right title").setDesc("Default value for right title in all dialogues.").addText((text) => text.setPlaceholder("Enter default right title").setValue(this.plugin.settings.defaultRightTitle).onChange((value) => __async(this, null, function* () {
this.plugin.settings.defaultRightTitle = value;
yield this.plugin.saveSettings();
})));
new import_obsidian.Setting(containerEl).setName("Default title mode").setDesc("Default title mode in all dialogues.").addDropdown((cb) => {
Object.values(DialogueTitleMode).forEach((titleMode) => {
const mode = titleMode.toString();
cb.addOption(mode, mode.charAt(0).toUpperCase() + mode.slice(1));
});
cb.setValue(this.plugin.settings.defaultTitleMode).onChange((value) => __async(this, null, function* () {
this.plugin.settings.defaultTitleMode = value;
yield this.plugin.saveSettings();
}));
});
new import_obsidian.Setting(containerEl).setName("Default max message width").setDesc("Default max message width in all dialogues.").addText((text) => text.setPlaceholder("Enter default max message width").setValue(this.plugin.settings.defaultMessageMaxWidth).onChange((value) => __async(this, null, function* () {
this.plugin.settings.defaultMessageMaxWidth = value;
yield this.plugin.saveSettings();
})));
new import_obsidian.Setting(containerEl).setName("Default max comment width").setDesc("Default max comment width in all dialogues.").addText((text) => text.setPlaceholder("Enter default max comment width").setValue(this.plugin.settings.defaultCommentMaxWidth).onChange((value) => __async(this, null, function* () {
this.plugin.settings.defaultCommentMaxWidth = value;
yield this.plugin.saveSettings();
})));
}
};
// src/main.ts
var DialoguePlugin = class extends import_obsidian2.Plugin {
onload() {
return __async(this, null, function* () {
yield this.loadSettings();
this.registerMarkdownCodeBlockProcessor(`dialogue`, (src, el, ctx) => {
new DialogueRenderer(src, el, this.settings);
});
this.addSettingTab(new DialogueSettingTab(this.app, this));
});
}
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);
});
}
};

@ -1,10 +0,0 @@
{
"id": "obsidian-dialogue-plugin",
"name": "Dialogue",
"version": "1.0.2",
"minAppVersion": "0.12.0",
"description": "Create dialogues in Markdown.",
"author": "Jakub Holub",
"authorUrl": "https://github.com/holubj",
"isDesktopOnly": false
}

@ -1,58 +0,0 @@
.dialogue-plugin-wrapper {
margin-bottom: 20px;
}
.dialogue-plugin-block-wrapper {
display: flex;
margin: 10px 0;
}
.dialogue-plugin-message-wrapper-left {
justify-content: start;
}
.dialogue-plugin-message-wrapper-right {
justify-content: flex-end;
}
.dialogue-plugin-message {
overflow: hidden;
max-width: 60%;
background-color: var(--background-secondary);
}
.dialogue-plugin-message-title {
padding: 5px 10px;
font-weight: bold;
background-color: rgba(0, 0, 0, 0.3);
}
.dialogue-plugin-message-content {
padding: 5px 10px;
}
.dialogue-plugin-delimiter-wrapper {
justify-content: center;
}
.dialogue-plugin-delimiter {
margin: 20px 0;
}
.dialogue-plugin-delimiter-dot {
width: 10px;
height: 10px;
margin: 0 3px;
display: inline-block;
border-radius: 50%;
background-color: var(--background-secondary);
}
.dialogue-plugin-comment-wrapper {
justify-content: center;
}
.dialogue-plugin-comment {
margin: 20px 0;
text-align: center;
}

File diff suppressed because one or more lines are too long

@ -1,7 +1,7 @@
{ {
"id": "obsidian-dice-roller", "id": "obsidian-dice-roller",
"name": "Dice Roller", "name": "Dice Roller",
"version": "8.4.3", "version": "8.5.1",
"minAppVersion": "0.12.15", "minAppVersion": "0.12.15",
"description": "Inline dice rolling for Obsidian.md", "description": "Inline dice rolling for Obsidian.md",
"author": "Jeremy Valentine", "author": "Jeremy Valentine",

File diff suppressed because one or more lines are too long

@ -14177,7 +14177,7 @@ function formatWithTemplates(s, query = '') {
} }
const CURSOR = '$CURSOR$'; const CURSOR = '$CURSOR$';
function sanitizeFileName(s) { function sanitizeFileName(s) {
const illegalChars = /[\?<>\\:\*\|":]/g; const illegalChars = /[\?<>:\*\|":]/g;
return s.replace(illegalChars, '-'); return s.replace(illegalChars, '-');
} }
/** /**
@ -14196,15 +14196,27 @@ function newNote(app, newNoteType, directory, fileName, location, templatePath)
? `---\nlocation: [${location}]\n---\n\n${CURSOR}` ? `---\nlocation: [${location}]\n---\n\n${CURSOR}`
: `---\nlocations:\n---\n\n\[${CURSOR}](geo:${location})\n`; : `---\nlocations:\n---\n\n\[${CURSOR}](geo:${location})\n`;
let templateContent = ''; let templateContent = '';
if (templatePath) if (templatePath && templatePath.length > 0)
templateContent = yield app.vault.adapter.read(templatePath); templateContent = yield app.vault.adapter.read(templatePath);
let fullName = sanitizeFileName(path__namespace.join(directory || '', fileName)); if (!directory)
directory = '';
if (!fileName)
fileName = '';
// Apparently in Obsidian Mobile there is no path.join function, not sure why.
// So in case the path module doesn't contain `join`, we do it manually, assuming Unix directory structure.
const filePath = (path__namespace === null || path__namespace === void 0 ? void 0 : path__namespace.join)
? path__namespace.join(directory, fileName)
: directory
? directory + '/' + fileName
: fileName;
let fullName = sanitizeFileName(filePath);
if (yield app.vault.adapter.exists(fullName + '.md')) if (yield app.vault.adapter.exists(fullName + '.md'))
fullName += Math.random() * 1000; fullName += Math.random() * 1000;
try { try {
return app.vault.create(fullName + '.md', content + templateContent); return app.vault.create(fullName + '.md', content + templateContent);
} }
catch (e) { catch (e) {
console.log('Map View: cannot create file', fullName);
throw Error(`Cannot create file named ${fullName}: ${e}`); throw Error(`Cannot create file named ${fullName}: ${e}`);
} }
}); });
@ -14245,7 +14257,7 @@ function handleNewNoteCursorMarker(editor) {
// Returns true if a change to the note was made. // Returns true if a change to the note was made.
function verifyOrAddFrontMatter(editor, fieldName, fieldValue) { function verifyOrAddFrontMatter(editor, fieldName, fieldValue) {
const content = editor.getValue(); const content = editor.getValue();
const frontMatterRegex = /^---(.*)^---/ms; const frontMatterRegex = /^---(.*?)^---/ms;
const frontMatter = content.match(frontMatterRegex); const frontMatter = content.match(frontMatterRegex);
const existingFieldRegex = new RegExp(`^---.*${fieldName}:.*^---`, 'ms'); const existingFieldRegex = new RegExp(`^---.*${fieldName}:.*^---`, 'ms');
const existingField = content.match(existingFieldRegex); const existingField = content.match(existingFieldRegex);
@ -14525,7 +14537,9 @@ class GeoSearcher {
}); });
} }
// Google Place results // Google Place results
if (this.settings.searchProvider == 'google' && this.settings.useGooglePlaces && this.settings.geocodingApiKey) { if (this.settings.searchProvider == 'google' &&
this.settings.useGooglePlaces &&
this.settings.geocodingApiKey) {
const placesResults = yield googlePlacesSearch(query, this.settings); const placesResults = yield googlePlacesSearch(query, this.settings);
for (const result of placesResults) for (const result of placesResults)
results.push({ results.push({
@ -14678,6 +14692,9 @@ class LocationSuggest extends obsidian.EditorSuggest {
} }
} }
function copyState(state) {
return Object.assign({}, state);
}
function mergeStates(state1, state2) { function mergeStates(state1, state2) {
// Overwrite an existing state with a new one, that may have null or partial values which need to be ignored // Overwrite an existing state with a new one, that may have null or partial values which need to be ignored
// and taken from the existing state // and taken from the existing state
@ -14716,9 +14733,13 @@ function stateFromParsedUrl(obj) {
return { return {
name: obj.name, name: obj.name,
mapZoom: obj.mapZoom ? parseInt(obj.mapZoom) : null, mapZoom: obj.mapZoom ? parseInt(obj.mapZoom) : null,
mapCenter: obj.centerLat && obj.centerLng ? new leafletSrc.LatLng(parseFloat(obj.centerLat), parseFloat(obj.centerLng)) : null, mapCenter: obj.centerLat && obj.centerLng
? new leafletSrc.LatLng(parseFloat(obj.centerLat), parseFloat(obj.centerLng))
: null,
query: obj.query, query: obj.query,
chosenMapSource: obj.chosenMapSource ? parseInt(obj.chosenMapSource) : null, chosenMapSource: obj.chosenMapSource
? parseInt(obj.chosenMapSource)
: null,
}; };
} }
@ -19331,6 +19352,7 @@ class ViewControls {
this.lastSelectedPresetIndex = null; this.lastSelectedPresetIndex = null;
this.lastSelectedPreset = null; this.lastSelectedPreset = null;
this.queryDelayMs = 250; this.queryDelayMs = 250;
this.updateOngoing = false;
this.parentElement = parentElement; this.parentElement = parentElement;
this.settings = settings; this.settings = settings;
this.app = app; this.app = app;
@ -19342,7 +19364,8 @@ class ViewControls {
} }
setNewState(newState, considerAutoFit) { setNewState(newState, considerAutoFit) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
yield this.view.setViewState(newState, false, considerAutoFit); if (!this.updateOngoing)
yield this.view.setViewState(newState, false, considerAutoFit);
}); });
} }
setStateByNewMapSource(newSource) { setStateByNewMapSource(newSource) {
@ -19375,9 +19398,13 @@ class ViewControls {
} }
} }
updateControlsToState() { updateControlsToState() {
// This updates the controls according to the given state, and prevents a feedback loop by
// raising the updateOngoing flag
this.updateOngoing = true;
this.setMapSourceBoxByState(); this.setMapSourceBoxByState();
this.setQueryBoxByState(); this.setQueryBoxByState();
this.followActiveNoteToggle.setValue(this.getCurrentState().followActiveNote == true); this.followActiveNoteToggle.setValue(this.getCurrentState().followActiveNote == true);
this.updateOngoing = false;
} }
setMapSourceBoxByState() { setMapSourceBoxByState() {
this.mapSourceBox.setValue(this.getCurrentState().chosenMapSource.toString()); this.mapSourceBox.setValue(this.getCurrentState().chosenMapSource.toString());
@ -19712,12 +19739,20 @@ class MapView extends obsidian.ItemView {
this.refreshMap(); this.refreshMap();
}); });
this.app.workspace.on('file-open', (file) => __awaiter(this, void 0, void 0, function* () { this.app.workspace.on('file-open', (file) => __awaiter(this, void 0, void 0, function* () {
var _a;
if (this.getState().followActiveNote && file) { if (this.getState().followActiveNote && file) {
let currentState = this.leaf.getViewState(); let viewState = (_a = this.leaf) === null || _a === void 0 ? void 0 : _a.getViewState();
currentState.state.query = `path:"${file.path}"`; if (viewState) {
yield this.leaf.setViewState(currentState); let mapState = viewState.state;
if (this.settings.autoZoom) const newQuery = `path:"${file.path}"`;
this.autoFitMapToMarkers(); // Change the map state only if the file has actually changed. If the user just went back
// and forth and the map is still focused on the same file, don't ruin the user's possible
// zoom and pan
if (mapState.query != newQuery) {
mapState.query = newQuery;
yield this.setViewState(mapState, true, true);
}
}
} }
})); }));
} }
@ -19742,7 +19777,7 @@ class MapView extends obsidian.ItemView {
* This is the native Obsidian setState method. * This is the native Obsidian setState method.
* You should *not* call it directly, but rather through this.leaf.setViewState(state), which will * You should *not* call it directly, but rather through this.leaf.setViewState(state), which will
* take care of preserving the Obsidian history if required. * take care of preserving the Obsidian history if required.
*/ */
setState(state, result) { setState(state, result) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
// If there are ongoing changes to the map happening at once, don't bother updating the state -- it will only // If there are ongoing changes to the map happening at once, don't bother updating the state -- it will only
@ -19753,7 +19788,7 @@ class MapView extends obsidian.ItemView {
this.ongoingChanges = 0; this.ongoingChanges = 0;
if (this.shouldSaveToHistory(state)) { if (this.shouldSaveToHistory(state)) {
result.history = true; result.history = true;
this.lastSavedState = Object.assign({}, state); this.lastSavedState = copyState(state);
} }
yield this.setViewState(state, true, false); yield this.setViewState(state, true, false);
if (this.display.controls) if (this.display.controls)
@ -19838,10 +19873,10 @@ class MapView extends obsidian.ItemView {
this.display.map.invalidateSize(); this.display.map.invalidateSize();
} }
/** /**
* This internal method of setting the state will not register the change to the Obsidian * This internal method of setting the state will NOT register the change to the Obsidian
* history stack. If you want that, use `this.leaf.setViewState(state)` instead. * history stack. If you want that, use `this.leaf.setViewState(state)` instead.
*/ */
setViewState(state, updateControls, considerAutoFit) { setViewState(state, updateControls = false, considerAutoFit = false) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
if (state) { if (state) {
const newState = mergeStates(this.state, state); const newState = mergeStates(this.state, state);
@ -19921,6 +19956,28 @@ class MapView extends obsidian.ItemView {
this.display.controls.updateControlsToState(); this.display.controls.updateControlsToState();
}); });
} }
/*
* Receive a partial object of fields to change and calls the Obsidian setViewState
* method to set a history state.
*/
changeViewAndSaveHistory(partialState) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
// This check is seemingly a duplicate of the one inside setViewState, but it's
// actually very needed. Without it, it's possible that we'd call Obsidian's
// setViewState (the one below) with the same object twice, in the first call
// (which may have ongoingChanges > 0) we'll ignore the change and in the 2nd call
// Obsidian will ignore the change (thinking the state didn't change).
// We want to ensure setViewState is called only if we mean to change the state
if (this.ongoingChanges > 0)
return;
const viewState = (_a = this.leaf) === null || _a === void 0 ? void 0 : _a.getViewState();
if (viewState === null || viewState === void 0 ? void 0 : viewState.state) {
const newState = Object.assign({}, viewState === null || viewState === void 0 ? void 0 : viewState.state, partialState);
yield this.leaf.setViewState(Object.assign(Object.assign({}, viewState), { state: newState }));
}
});
}
createMap() { createMap() {
var _a; var _a;
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
@ -19939,25 +19996,26 @@ class MapView extends obsidian.ItemView {
this.updateTileLayerByState(this.state); this.updateTileLayerByState(this.state);
this.display.clusterGroup = new leafletSrc.MarkerClusterGroup({ this.display.clusterGroup = new leafletSrc.MarkerClusterGroup({
maxClusterRadius: (_a = this.settings.maxClusterRadiusPixels) !== null && _a !== void 0 ? _a : DEFAULT_SETTINGS.maxClusterRadiusPixels, maxClusterRadius: (_a = this.settings.maxClusterRadiusPixels) !== null && _a !== void 0 ? _a : DEFAULT_SETTINGS.maxClusterRadiusPixels,
animate: false animate: false,
}); });
this.display.map.addLayer(this.display.clusterGroup); this.display.map.addLayer(this.display.clusterGroup);
this.display.map.on('zoomend', (event) => __awaiter(this, void 0, void 0, function* () { this.display.map.on('zoomend', (event) => __awaiter(this, void 0, void 0, function* () {
var _b, _c; var _b, _c;
this.ongoingChanges -= 1; this.ongoingChanges -= 1;
this.state.mapZoom = this.display.map.getZoom(); yield this.changeViewAndSaveHistory({
this.state.mapCenter = this.display.map.getCenter(); mapZoom: this.display.map.getZoom(),
mapCenter: this.display.map.getCenter()
});
(_c = (_b = this.display) === null || _b === void 0 ? void 0 : _b.controls) === null || _c === void 0 ? void 0 : _c.invalidateActivePreset(); (_c = (_b = this.display) === null || _b === void 0 ? void 0 : _b.controls) === null || _c === void 0 ? void 0 : _c.invalidateActivePreset();
const state = this.leaf.getViewState();
yield this.leaf.setViewState(state);
})); }));
this.display.map.on('moveend', (event) => __awaiter(this, void 0, void 0, function* () { this.display.map.on('moveend', (event) => __awaiter(this, void 0, void 0, function* () {
var _d, _e; var _d, _e;
this.ongoingChanges -= 1; this.ongoingChanges -= 1;
this.state.mapCenter = this.display.map.getCenter(); yield this.changeViewAndSaveHistory({
mapZoom: this.display.map.getZoom(),
mapCenter: this.display.map.getCenter()
});
(_e = (_d = this.display) === null || _d === void 0 ? void 0 : _d.controls) === null || _e === void 0 ? void 0 : _e.invalidateActivePreset(); (_e = (_d = this.display) === null || _d === void 0 ? void 0 : _d.controls) === null || _e === void 0 ? void 0 : _e.invalidateActivePreset();
const state = this.leaf.getViewState();
yield this.leaf.setViewState(state);
})); }));
this.display.map.on('movestart', (event) => { this.display.map.on('movestart', (event) => {
this.ongoingChanges += 1; this.ongoingChanges += 1;
@ -20070,7 +20128,10 @@ class MapView extends obsidian.ItemView {
this.display.map.getZoom() != this.state.mapZoom) { this.display.map.getZoom() != this.state.mapZoom) {
// We want to call setView only if there was an actual change, because even the tiniest (epsilon) change can // We want to call setView only if there was an actual change, because even the tiniest (epsilon) change can
// cause Leaflet to think it's worth triggering map center change callbacks // cause Leaflet to think it's worth triggering map center change callbacks
this.display.map.setView(this.state.mapCenter, this.state.mapZoom, { animate: false, duration: 0 }); this.display.map.setView(this.state.mapCenter, this.state.mapZoom, {
animate: false,
duration: 0,
});
} }
this.display.controls.setQueryBoxErrorByState(); this.display.controls.setQueryBoxErrorByState();
if (this.settings.debug) if (this.settings.debug)
@ -20192,7 +20253,7 @@ class MapView extends obsidian.ItemView {
if (this.display.markers.size > 0) { if (this.display.markers.size > 0) {
const locations = Array.from(this.display.markers.values()).map((fileMarker) => fileMarker.location); const locations = Array.from(this.display.markers.values()).map((fileMarker) => fileMarker.location);
this.display.map.fitBounds(leafletSrc.latLngBounds(locations), { this.display.map.fitBounds(leafletSrc.latLngBounds(locations), {
maxZoom: (_a = this.getMapSource().maxZoom) !== null && _a !== void 0 ? _a : DEFAULT_MAX_TILE_ZOOM, maxZoom: Math.min(this.settings.zoomOnGoFromNote, (_a = this.getMapSource().maxZoom) !== null && _a !== void 0 ? _a : DEFAULT_MAX_TILE_ZOOM),
}); });
} }
}); });
@ -20305,11 +20366,14 @@ class MapView extends obsidian.ItemView {
this.zoomToSearchResult(details.location); this.zoomToSearchResult(details.location);
} }
zoomToSearchResult(location) { zoomToSearchResult(location) {
let currentState = this.leaf.getViewState(); var _a;
currentState.state.mapCenter = location; let currentState = (_a = this.leaf) === null || _a === void 0 ? void 0 : _a.getViewState();
currentState.state.mapZoom = if (currentState) {
this.settings.zoomOnGoFromNote; currentState.state.mapCenter = location;
this.leaf.setViewState(currentState); currentState.state.mapZoom =
this.settings.zoomOnGoFromNote;
this.leaf.setViewState(currentState);
}
} }
removeSearchResultMarker() { removeSearchResultMarker() {
if (this.display.searchResult) { if (this.display.searchResult) {
@ -20514,7 +20578,7 @@ class SettingsTab extends obsidian.PluginSettingTab {
}); });
new obsidian.Setting(containerEl) new obsidian.Setting(containerEl)
.setName('Default zoom for "show on map" action') .setName('Default zoom for "show on map" action')
.setDesc('When jumping to the map from a note, what should be the display zoom?') .setDesc('When jumping to the map from a note, what should be the display zoom? This is also used as a max zoom for "Map follows search results" above.')
.addSlider((component) => { .addSlider((component) => {
var _a; var _a;
component component
@ -21008,9 +21072,13 @@ class TagSuggest extends obsidian.EditorSuggest {
} }
getSuggestions(context) { getSuggestions(context) {
var _a; var _a;
const noPound = (tagName) => {
return tagName.startsWith('#') ? tagName.substring(1) : tagName;
};
const tagQuery = (_a = context.query) !== null && _a !== void 0 ? _a : ''; const tagQuery = (_a = context.query) !== null && _a !== void 0 ? _a : '';
// Find all tags that include the query, with the pound sign removed, case insensitive // Find all tags that include the query
const matchingTags = getAllTagNames(this.app) const matchingTags = getAllTagNames(this.app)
.map(value => noPound(value))
.filter((value) => value.toLowerCase().includes(tagQuery.toLowerCase())); .filter((value) => value.toLowerCase().includes(tagQuery.toLowerCase()));
return matchingTags.map((tagName) => { return matchingTags.map((tagName) => {
return { return {
@ -21054,7 +21122,8 @@ class MapViewPlugin extends obsidian.Plugin {
// If a saved URL is opened in another device on which there aren't the same sources, use // If a saved URL is opened in another device on which there aren't the same sources, use
// the default source instead // the default source instead
if (state.chosenMapSource >= this.settings.mapSources.length) if (state.chosenMapSource >= this.settings.mapSources.length)
state.chosenMapSource = DEFAULT_SETTINGS.defaultState.chosenMapSource; state.chosenMapSource =
DEFAULT_SETTINGS.defaultState.chosenMapSource;
this.openMapWithState(state, false, false); this.openMapWithState(state, false, false);
} }
}); });

@ -1,7 +1,7 @@
{ {
"id": "obsidian-map-view", "id": "obsidian-map-view",
"name": "Map View", "name": "Map View",
"version": "2.0.4", "version": "2.0.5",
"minAppVersion": "0.12.10", "minAppVersion": "0.12.10",
"description": "An interactive map view.", "description": "An interactive map view.",
"isDesktopOnly": false "isDesktopOnly": false

File diff suppressed because it is too large Load Diff

@ -0,0 +1,10 @@
{
"id": "obsidian-media-db-plugin",
"name": "Media DB Plugin",
"version": "0.1.11",
"minAppVersion": "0.14.0",
"description": "A plugin that can query multiple APIs for movies, series, anime, games, music and wiki articles, and import them into your vault. ",
"author": "Moritz Jung",
"authorUrl": "https://mprojectscode.github.io/",
"isDesktopOnly": false
}

@ -0,0 +1,23 @@
.media-db-plugin-list-wrapper {
display: flex;
align-content: center;
margin-bottom: 5px;
margin-top: 5px;
}
.media-db-plugin-list-toggle {
}
.media-db-plugin-list-text-wrapper {
flex: 1;
}
.media-db-plugin-list-text {
display: block;
}
small.media-db-plugin-list-text{
color: var(--text-muted);
}

@ -368,17 +368,17 @@
{ {
"title": ":birthday: **[[MRCK|Meggi-mo]]'s Papa** (1962)", "title": ":birthday: **[[MRCK|Meggi-mo]]'s Papa** (1962)",
"time": "2023-02-02", "time": "2023-02-02",
"rowNumber": 265 "rowNumber": 266
}, },
{ {
"title": ":birthday: **[[MRCK|Meggi-mo]]**", "title": ":birthday: **[[MRCK|Meggi-mo]]**",
"time": "2023-02-28", "time": "2023-02-28",
"rowNumber": 263 "rowNumber": 264
}, },
{ {
"title": "[[MRCK|Meggi-mo]] Saint Patrick's Day", "title": "[[MRCK|Meggi-mo]] Saint Patrick's Day",
"time": "2023-03-17", "time": "2023-03-17",
"rowNumber": 267 "rowNumber": 268
} }
], ],
"01.03 Family/Thaïs Bédier.md": [ "01.03 Family/Thaïs Bédier.md": [
@ -395,7 +395,7 @@
"rowNumber": 118 "rowNumber": 118
}, },
{ {
"title": "[[@Finances]]: Transfer UK pension to CH", "title": ":moneybag: [[@Finances]]: Transfer UK pension to CH",
"time": "2022-06-29", "time": "2022-06-29",
"rowNumber": 73 "rowNumber": 73
} }
@ -403,23 +403,23 @@
"01.01 Life Orga/@Lifestyle.md": [ "01.01 Life Orga/@Lifestyle.md": [
{ {
"title": ":swimming_man: [[@Lifestyle]]: Re-start swimming", "title": ":swimming_man: [[@Lifestyle]]: Re-start swimming",
"time": "2022-05-31", "time": "2022-06-30",
"rowNumber": 75 "rowNumber": 75
}, },
{ {
"title": "[[@Lifestyle]]: Re-start [[@Lifestyle#polo|Polo]]", "title": ":horse_racing: [[@Lifestyle]]: Re-start [[@Lifestyle#polo|Polo]]",
"time": "2022-06-30", "time": "2022-06-30",
"rowNumber": 76 "rowNumber": 76
}, },
{ {
"title": "[[@Lifestyle]]: Continue building [[@Lifestyle#Music Library|Music Library]]", "title": "🎵 [[@Lifestyle]]: Continue building [[@Lifestyle#Music Library|Music Library]]",
"time": "2022-06-30", "time": "2022-06-30",
"rowNumber": 77 "rowNumber": 77
} }
], ],
"01.01 Life Orga/@Personal projects.md": [ "01.01 Life Orga/@Personal projects.md": [
{ {
"title": "Continue [[@lebv.org Tasks|lebv.org]]", "title": ":fleur_de_lis: Continue [[@lebv.org Tasks|lebv.org]]",
"time": "2022-06-28", "time": "2022-06-28",
"rowNumber": 78 "rowNumber": 78
}, },
@ -468,53 +468,53 @@
"06.02 Investments/VC Tasks.md": [ "06.02 Investments/VC Tasks.md": [
{ {
"title": "💰[[VC Tasks#internet alerts|monitor VC news and publications]]", "title": "💰[[VC Tasks#internet alerts|monitor VC news and publications]]",
"time": "2022-06-03", "time": "2022-06-10",
"rowNumber": 74 "rowNumber": 74
} }
], ],
"06.02 Investments/Crypto Tasks.md": [ "06.02 Investments/Crypto Tasks.md": [
{ {
"title": "💰[[Crypto Tasks#internet alerts|monitor Crypto news and publications]]", "title": "💰[[Crypto Tasks#internet alerts|monitor Crypto news and publications]]",
"time": "2022-06-03", "time": "2022-06-10",
"rowNumber": 74 "rowNumber": 74
} }
], ],
"06.02 Investments/Equity Tasks.md": [ "06.02 Investments/Equity Tasks.md": [
{ {
"title": "💰[[Equity Tasks#internet alerts|monitor Equity news and publications]]", "title": "💰[[Equity Tasks#internet alerts|monitor Equity news and publications]]",
"time": "2022-06-03", "time": "2022-06-10",
"rowNumber": 74 "rowNumber": 74
} }
], ],
"05.02 Networks/Configuring UFW.md": [ "05.02 Networks/Configuring UFW.md": [
{ {
"title": "🖥 [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix", "title": "🖥 [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix",
"time": "2022-06-04", "time": "2022-06-11",
"rowNumber": 239 "rowNumber": 239
}, },
{ {
"title": "🖥 [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list", "title": "🖥 [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list",
"time": "2022-06-04", "time": "2022-06-11",
"rowNumber": 251 "rowNumber": 252
} }
], ],
"00.01 Admin/Calendars/2022-03-18.md": [ "00.01 Admin/Calendars/2022-03-18.md": [
{ {
"title": "11:41 [[Selfhosting]], [[Server Tools|Tools]]: explore self hosting a web automation tool like [huginn](https://github.com/huginn/huginn)", "title": "11:41 :desktop_computer: [[Selfhosting]], [[Server Tools|Tools]]: explore self hosting a web automation tool like [huginn](https://github.com/huginn/huginn)",
"time": "2022-06-25", "time": "2022-08-31",
"rowNumber": 96 "rowNumber": 96
} }
], ],
"00.01 Admin/Calendars/2022-03-02.md": [ "00.01 Admin/Calendars/2022-03-02.md": [
{ {
"title": "15:55 :chair: [[2022-03-02|Memo]], [[MRCK|Meggi-mo]]: re-do her chair", "title": "15:55 :chair: [[2022-03-02|Memo]], [[MRCK|Meggi-mo]]: re-do her chair",
"time": "2022-05-31", "time": "2022-08-31",
"rowNumber": 91 "rowNumber": 91
} }
], ],
"00.01 Admin/Calendars/2022-01-22.md": [ "00.01 Admin/Calendars/2022-01-22.md": [
{ {
"title": "22:46 [[2022-01-22|Memo]], [[@Finances]]: GBP account re moving to ZH", "title": "22:46 :moneybag: [[2022-01-22|Memo]], [[@Finances]]: GBP account re moving to ZH",
"time": "2022-06-30", "time": "2022-06-30",
"rowNumber": 87 "rowNumber": 87
} }
@ -522,29 +522,22 @@
"00.01 Admin/Calendars/2022-01-24.md": [ "00.01 Admin/Calendars/2022-01-24.md": [
{ {
"title": "14:28 :house: [[@Life Admin]], [[2022-01-24|Memo]]: finishings for the flat: curtains, bins, bedside tables #shopping #home", "title": "14:28 :house: [[@Life Admin]], [[2022-01-24|Memo]]: finishings for the flat: curtains, bins, bedside tables #shopping #home",
"time": "2022-05-31", "time": "2022-08-31",
"rowNumber": 84 "rowNumber": 84
} }
], ],
"00.01 Admin/Calendars/2022-02-16.md": [
{
"title": "07:50 :desktop_computer: [[Selfhosting]], [[Server Cloud]], [[Nextcloud]], [[2022-02-16|Memo]]: upgrade Nextcloud",
"time": "2022-06-17",
"rowNumber": 87
}
],
"00.01 Admin/Calendars/2022-04-10.md": [ "00.01 Admin/Calendars/2022-04-10.md": [
{ {
"title": "21:01 [[2022-04-10|Memo]], [[Amaury de Villeneuve|Chapal]]: trouver un réparateur pour l'oignon Lipp", "title": "21:01 :stopwatch: [[2022-04-10|Memo]], [[Amaury de Villeneuve|Chapal]]: trouver un réparateur pour l'oignon Lipp",
"time": "2022-06-25", "time": "2022-06-25",
"rowNumber": 91 "rowNumber": 91
} }
], ],
"00.01 Admin/Calendars/2022-05-15.md": [ "00.01 Admin/Calendars/2022-06-04.md": [
{ {
"title": "23:58 :bellhop_bell: :fr: [[2022-05-15|Memo]], [[@Life Admin]] REMINDER: Inscription au registre des Francais en Suisse", "title": "17:30 :desktop_computer: [[Selfhosting]], [[Server Cloud]], [[2022-06-04|Memo]]: Split [[Nextcloud]] into Seafile & caldav server",
"time": "2022-06-15", "time": "2022-08-31",
"rowNumber": 93 "rowNumber": 91
} }
] ]
}, },

File diff suppressed because one or more lines are too long

@ -0,0 +1,10 @@
{
"id": "obsidian-tts",
"name": "Text to Speech",
"version": "0.5.0",
"minAppVersion": "0.12.0",
"description": "Text to speech for Obsidian. Hear your notes.",
"author": "Johannes Theiner",
"authorUrl": "https://github.com/joethei",
"isDesktopOnly": false
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,10 @@
{
"id": "tasks-packrat-plugin",
"name": "Packrat",
"version": "1.1.0",
"minAppVersion": "0.12.0",
"description": "Process completed recurring Tasks",
"author": "Thomas Herden",
"authorUrl": "https://github.com/therden",
"isDesktopOnly": false
}

@ -0,0 +1 @@
/* PaCkRaT has NO style... */

@ -9,7 +9,7 @@
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "01.02 Home/@Main Dashboard.md", "file": "00.01 Admin/Calendars/2022-06-05.md",
"mode": "preview", "mode": "preview",
"source": false "source": false
} }
@ -77,7 +77,7 @@
"state": { "state": {
"type": "backlink", "type": "backlink",
"state": { "state": {
"file": "01.02 Home/@Main Dashboard.md", "file": "00.01 Admin/Calendars/2022-06-05.md",
"collapseAll": false, "collapseAll": false,
"extraContext": false, "extraContext": false,
"sortOrder": "alphabetical", "sortOrder": "alphabetical",
@ -94,7 +94,7 @@
"state": { "state": {
"type": "outgoing-link", "type": "outgoing-link",
"state": { "state": {
"file": "01.02 Home/@Main Dashboard.md", "file": "00.01 Admin/Calendars/2022-06-05.md",
"linksCollapsed": false, "linksCollapsed": false,
"unlinkedCollapsed": false "unlinkedCollapsed": false
} }
@ -141,7 +141,7 @@
} }
}, },
{ {
"id": "e1071e0c67761428", "id": "402f0794ee277cb6",
"type": "leaf", "type": "leaf",
"state": { "state": {
"type": "DICE_ROLLER_VIEW", "type": "DICE_ROLLER_VIEW",
@ -153,15 +153,15 @@
}, },
"active": "7bf826872ad549d5", "active": "7bf826872ad549d5",
"lastOpenFiles": [ "lastOpenFiles": [
"00.01 Admin/Calendars/2022-06-05.md",
"01.02 Home/@Main Dashboard.md", "01.02 Home/@Main Dashboard.md",
"00.01 Admin/Calendars/2022-05-31.md", "00.03 News/He was my high school journalism teacher. Then I investigated his relationships with teenage girls..md",
"00.03 News/The Women Who Ran Genghis Khans Empire.md", "00.03 News/When Cars Kill Pedestrians.md",
"00.03 News/After Christendom.md", "00.03 News/The making of Prince William.md",
"00.01 Admin/Calendars/2022-05-30.md", "00.03 News/Riding Londons Unexpectedly Fantastic Elizabeth Line.md",
"01.02 Home/@Shopping list.md", "00.05 Media/3 youths in Medellin.md",
"00.03 News/The Silent Impact of Burnout — and How to Overcome It as a Leader.md", "00.05 Media/Animals anticipate Natural Disasters.md",
"00.03 News/@News.md", "00.05 Media/Moneyland.md",
"00.01 Admin/Calendars/2022-05-29.md", "00.05 Media/The Mafia, The CIA and George Bush.md"
"00.03 News/The rise of the Strangler.md"
] ]
} }

@ -85,7 +85,7 @@ This section does serve for quick memos.
- 14:21 Megan Rose is about to leave to the airport - 14:21 Megan Rose is about to leave to the airport
- [ ] 22:46 [[2022-01-22|Memo]], [[@Finances]]: GBP account re moving to ZH 📅 2022-06-30 - [ ] 22:46 :moneybag: [[2022-01-22|Memo]], [[@Finances]]: GBP account re moving to ZH 📅 2022-06-30
#### Sub-header 2 #### Sub-header 2

@ -82,7 +82,7 @@ This section does serve for quick memos.
&emsp; &emsp;
- [ ] 14:28 :house: [[@Life Admin]], [[2022-01-24|Memo]]: finishings for the flat: curtains, bins, bedside tables #shopping #home 📅 2022-05-31 - [ ] 14:28 :house: [[@Life Admin]], [[2022-01-24|Memo]]: finishings for the flat: curtains, bins, bedside tables #shopping #home 📅 2022-08-31

@ -85,7 +85,7 @@ This section does serve for quick memos.
%% ### %% %% ### %%
&emsp; &emsp;
- [ ] 07:50 :desktop_computer: [[Selfhosting]], [[Server Cloud]], [[Nextcloud]], [[2022-02-16|Memo]]: upgrade Nextcloud 📅 2022-06-17 - [x] 07:50 :desktop_computer: [[Selfhosting]], [[Server Cloud]], [[Nextcloud]], [[2022-02-16|Memo]]: upgrade Nextcloud 📅 2022-06-17 ✅ 2022-06-04
- [x] 09:01 [[MRCK]], [[2022-02-16|Memo]]: Book ski trip for Meggi-mo's birthday 📅 2022-02-21 ✅ 2022-02-20 - [x] 09:01 [[MRCK]], [[2022-02-16|Memo]]: Book ski trip for Meggi-mo's birthday 📅 2022-02-21 ✅ 2022-02-20
- [x] 11:59 [[@Lifestyle|Lifestyle]], [[2022-02-16|Memo]]: contact Raphson qui habite Zürich 📅 2022-02-18 ✅ 2022-02-16 - [x] 11:59 [[@Lifestyle|Lifestyle]], [[2022-02-16|Memo]]: contact Raphson qui habite Zürich 📅 2022-02-18 ✅ 2022-02-16
- [x] 12:12 [[@Lifestyle|Lifestyle]], [[2022-02-16|Memo]]: contact Juliette Chevallier, Genève 📅 2022-02-19 ✅ 2022-02-18 - [x] 12:12 [[@Lifestyle|Lifestyle]], [[2022-02-16|Memo]]: contact Juliette Chevallier, Genève 📅 2022-02-19 ✅ 2022-02-18

@ -89,7 +89,7 @@ This section does serve for quick memos.
%% ### %% %% ### %%
&emsp; &emsp;
- [ ] 15:55 :chair: [[2022-03-02|Memo]], [[MRCK|Meggi-mo]]: re-do her chair 📅 2022-05-31 - [ ] 15:55 :chair: [[2022-03-02|Memo]], [[MRCK|Meggi-mo]]: re-do her chair 📅 2022-08-31
--- ---

@ -94,7 +94,7 @@ This section does serve for quick memos.
- [x] 11:34 [[Selfhosting]], [[Configuring Fail2ban|Fail2ban]], [[Configuring UFW|UFW]]: voir si la liste d'IP peut etre partagee avec [crowdsec](https://crowdsec.net) 📅 2022-04-30 ✅ 2022-04-16 - [x] 11:34 [[Selfhosting]], [[Configuring Fail2ban|Fail2ban]], [[Configuring UFW|UFW]]: voir si la liste d'IP peut etre partagee avec [crowdsec](https://crowdsec.net) 📅 2022-04-30 ✅ 2022-04-16
- [x] 11:36 [[@IT & Computer]]: Find a HackerNews reader 📅 2022-03-31 ✅ 2022-03-19 - [x] 11:36 [[@IT & Computer]]: Find a HackerNews reader 📅 2022-03-31 ✅ 2022-03-19
- [x] 11:39 [[Selfhosting]], [[@News]], [[Server Tools|Tools]]: explore self hosting a RSS reader like [selfoss](https://selfoss.aditu.de) 📅 2022-03-31 ✅ 2022-03-19 - [x] 11:39 [[Selfhosting]], [[@News]], [[Server Tools|Tools]]: explore self hosting a RSS reader like [selfoss](https://selfoss.aditu.de) 📅 2022-03-31 ✅ 2022-03-19
- [ ] 11:41 [[Selfhosting]], [[Server Tools|Tools]]: explore self hosting a web automation tool like [huginn](https://github.com/huginn/huginn) 📅 2022-06-25 - [ ] 11:41 :desktop_computer: [[Selfhosting]], [[Server Tools|Tools]]: explore self hosting a web automation tool like [huginn](https://github.com/huginn/huginn) 📅 2022-08-31
- [x] 12:23 [[Selfhosting]], [[Server Tools|Tools]], [[Configuring Caddy|caddy]]: Add Caddy to Prometheus 📅 2022-03-26 ✅ 2022-03-18 - [x] 12:23 [[Selfhosting]], [[Server Tools|Tools]], [[Configuring Caddy|caddy]]: Add Caddy to Prometheus 📅 2022-03-26 ✅ 2022-03-18
- [x] 15:39 [[Selfhosting]], [[Configuring Caddy|caddy]]: Mettre en place le monitoring par Prometheus 📅 2022-04-03 ✅ 2022-04-02 - [x] 15:39 [[Selfhosting]], [[Configuring Caddy|caddy]]: Mettre en place le monitoring par Prometheus 📅 2022-04-03 ✅ 2022-04-02
- [x] 22:33 [[Selfhosting]], [[Server Tools|Tools]]: install SN extensions 📅 2022-05-03 ✅ 2022-04-16 - [x] 22:33 [[Selfhosting]], [[Server Tools|Tools]]: install SN extensions 📅 2022-05-03 ✅ 2022-04-16

@ -89,7 +89,7 @@ This section does serve for quick memos.
%% ### %% %% ### %%
&emsp; &emsp;
- [ ] 21:01 [[2022-04-10|Memo]], [[Amaury de Villeneuve|Chapal]]: trouver un réparateur pour l'oignon Lipp 📅 2022-06-25 - [ ] 21:01 :stopwatch: [[2022-04-10|Memo]], [[Amaury de Villeneuve|Chapal]]: trouver un réparateur pour l'oignon Lipp 📅 2022-06-25
--- ---

@ -91,7 +91,7 @@ This section does serve for quick memos.
&emsp; &emsp;
- [x] 19:43 :watch: [[2022-05-15|Memo]], [[@Lifestyle]] : remplacer la batterie de ma montre Spinnaker 📅 2022-05-29 ✅ 2022-05-30 - [x] 19:43 :watch: [[2022-05-15|Memo]], [[@Lifestyle]] : remplacer la batterie de ma montre Spinnaker 📅 2022-05-29 ✅ 2022-05-30
- [x] 19:44 :watch: [[2022-05-15|Memo]], [[@Lifestyle]]: porter les deux Swatch pour réparation 📅 2022-05-29 ✅ 2022-05-30 - [x] 19:44 :watch: [[2022-05-15|Memo]], [[@Lifestyle]]: porter les deux Swatch pour réparation 📅 2022-05-29 ✅ 2022-05-30
- [ ] 23:58 :bellhop_bell: :fr: [[2022-05-15|Memo]], [[@Life Admin]] REMINDER: Inscription au registre des Francais en Suisse 📅 2022-06-15 - [x] 23:58 :bellhop_bell: :fr: [[2022-05-15|Memo]], [[@Life Admin]] REMINDER: Inscription au registre des Francais en Suisse 📅 2022-06-15 ✅ 2022-06-01
- [x] 23:59 [[2022-05-15|Memo]], [[@Life Admin]]: Contact Insurance broker for Car Insurance 📅 2022-06-15 ✅ 2022-05-30 - [x] 23:59 [[2022-05-15|Memo]], [[@Life Admin]]: Contact Insurance broker for Car Insurance 📅 2022-06-15 ✅ 2022-05-30
--- ---

@ -13,9 +13,9 @@ Stress: 35
FrontHeadBar: 5 FrontHeadBar: 5
EarHeadBar: 40 EarHeadBar: 40
BackHeadBar: 30 BackHeadBar: 30
Water: 1.9 Water: 2.2
Coffee: 0 Coffee: 0
Steps: Steps: 8319
Ski: Ski:
Riding: Riding:
Racket: Racket:

@ -0,0 +1,104 @@
---
Date: 2022-06-01
DocType: Note
Hierarchy:
TimeStamp:
location:
CollapseMetaTable: Yes
Sleep: 8
Happiness: 90
Gratefulness: 90
Stress: 35
FrontHeadBar: 5
EarHeadBar: 40
BackHeadBar: 30
Water: 1.56
Coffee: 3
Steps: 7563
Ski:
Riding:
Racket:
Football:
title: "Daily Note"
allDay: true
date: 2022-06-01
---
%% Parent:: [[@Life Admin]] %%
---
[[2022-05-31|<< 🗓 Previous ]] &emsp; &emsp; &emsp; [[@Main Dashboard|Back]] &emsp; &emsp; &emsp; [[2022-06-02|🗓 Next >>]]
---
&emsp;
```button
name Record today's health
type command
action MetaEdit: Run MetaEdit
id EditMetaData
```
^button-2022-06-01Edit
```button
name Save
type command
action Save current file
id Save
```
^button-2022-06-01NSave
&emsp;
# 2022-06-01
&emsp;
```ad-abstract
title: Summary
collapse: open
Note Description
```
&emsp;
```toc
style: number
```
&emsp;
---
&emsp;
### Memos
&emsp;
#### Memos
This section does serve for quick memos.
&emsp;
%% ### %%
&emsp;
---
&emsp;
### Notes
&emsp;
Loret ipsum
&emsp;
&emsp;

@ -0,0 +1,104 @@
---
Date: 2022-06-02
DocType: Note
Hierarchy:
TimeStamp:
location:
CollapseMetaTable: Yes
Sleep: 7
Happiness: 90
Gratefulness: 90
Stress: 35
FrontHeadBar: 5
EarHeadBar: 40
BackHeadBar: 30
Water: 1.96
Coffee: 2
Steps: 10228
Ski:
Riding:
Racket:
Football:
title: "Daily Note"
allDay: true
date: 2022-06-02
---
%% Parent:: [[@Life Admin]] %%
---
[[2022-06-01|<< 🗓 Previous ]] &emsp; &emsp; &emsp; [[@Main Dashboard|Back]] &emsp; &emsp; &emsp; [[2022-06-03|🗓 Next >>]]
---
&emsp;
```button
name Record today's health
type command
action MetaEdit: Run MetaEdit
id EditMetaData
```
^button-2022-06-02Edit
```button
name Save
type command
action Save current file
id Save
```
^button-2022-06-02NSave
&emsp;
# 2022-06-02
&emsp;
```ad-abstract
title: Summary
collapse: open
Note Description
```
&emsp;
```toc
style: number
```
&emsp;
---
&emsp;
### Memos
&emsp;
#### Memos
This section does serve for quick memos.
&emsp;
%% ### %%
&emsp;
---
&emsp;
### Notes
&emsp;
Loret ipsum
&emsp;
&emsp;

@ -0,0 +1,105 @@
---
Date: 2022-06-03
DocType: Note
Hierarchy:
TimeStamp:
location:
CollapseMetaTable: Yes
Sleep: 7
Happiness: 90
Gratefulness:
Stress: 35
FrontHeadBar: 5
EarHeadBar: 40
BackHeadBar: 30
Water: 1.73
Coffee: 2
Steps: 4319
Ski:
Riding:
Racket:
Football:
title: "Daily Note"
allDay: true
date: 2022-06-03
---
%% Parent:: [[@Life Admin]] %%
---
[[2022-06-02|<< 🗓 Previous ]] &emsp; &emsp; &emsp; [[@Main Dashboard|Back]] &emsp; &emsp; &emsp; [[2022-06-04|🗓 Next >>]]
---
&emsp;
```button
name Record today's health
type command
action MetaEdit: Run MetaEdit
id EditMetaData
```
^button-2022-06-03Edit
```button
name Save
type command
action Save current file
id Save
```
^button-2022-06-03NSave
&emsp;
# 2022-06-03
&emsp;
```ad-abstract
title: Summary
collapse: open
Note Description
```
&emsp;
```toc
style: number
```
&emsp;
---
&emsp;
### Memos
&emsp;
#### Memos
This section does serve for quick memos.
&emsp;
%% ### %%
&emsp;
- [x] 12:20 :champagne: [[@Lifestyle]], [[2022-06-03|Memo]]: Find a champagne bottle for Chris 📅 2022-06-04 ✅ 2022-06-03 ^xhg2er
---
&emsp;
### Notes
&emsp;
Loret ipsum
&emsp;
&emsp;

@ -0,0 +1,105 @@
---
Date: 2022-06-04
DocType: Note
Hierarchy:
TimeStamp:
location:
CollapseMetaTable: Yes
Sleep: 8
Happiness: 90
Gratefulness: 90
Stress: 35
FrontHeadBar: 5
EarHeadBar: 40
BackHeadBar: 30
Water: 0.83
Coffee: 3
Steps: 7597
Ski:
Riding:
Racket:
Football:
title: "Daily Note"
allDay: true
date: 2022-06-04
---
%% Parent:: [[@Life Admin]] %%
---
[[2022-06-03|<< 🗓 Previous ]] &emsp; &emsp; &emsp; [[@Main Dashboard|Back]] &emsp; &emsp; &emsp; [[2022-06-05|🗓 Next >>]]
---
&emsp;
```button
name Record today's health
type command
action MetaEdit: Run MetaEdit
id EditMetaData
```
^button-2022-06-04Edit
```button
name Save
type command
action Save current file
id Save
```
^button-2022-06-04NSave
&emsp;
# 2022-06-04
&emsp;
```ad-abstract
title: Summary
collapse: open
Note Description
```
&emsp;
```toc
style: number
```
&emsp;
---
&emsp;
### Memos
&emsp;
#### Memos
This section does serve for quick memos.
&emsp;
%% ### %%
&emsp;
- [ ] 17:30 :desktop_computer: [[Selfhosting]], [[Server Cloud]], [[2022-06-04|Memo]]: Split [[Nextcloud]] into Seafile & caldav server 📆2022-08-31
---
&emsp;
### Notes
&emsp;
Loret ipsum
&emsp;
&emsp;

@ -0,0 +1,104 @@
---
Date: 2022-06-05
DocType: Note
Hierarchy:
TimeStamp:
location:
CollapseMetaTable: Yes
Sleep: 8
Happiness: 90
Gratefulness: 90
Stress: 35
FrontHeadBar: 5
EarHeadBar: 40
BackHeadBar: 30
Water: 1.33
Coffee: 2
Steps:
Ski:
Riding:
Racket:
Football:
title: "Daily Note"
allDay: true
date: 2022-06-05
---
%% Parent:: [[@Life Admin]] %%
---
[[2022-06-04|<< 🗓 Previous ]] &emsp; &emsp; &emsp; [[@Main Dashboard|Back]] &emsp; &emsp; &emsp; [[2022-06-06|🗓 Next >>]]
---
&emsp;
```button
name Record today's health
type command
action MetaEdit: Run MetaEdit
id EditMetaData
```
^button-2022-06-05Edit
```button
name Save
type command
action Save current file
id Save
```
^button-2022-06-05NSave
&emsp;
# 2022-06-05
&emsp;
```ad-abstract
title: Summary
collapse: open
Note Description
```
&emsp;
```toc
style: number
```
&emsp;
---
&emsp;
### Memos
&emsp;
#### Memos
This section does serve for quick memos.
&emsp;
%% ### %%
&emsp;
---
&emsp;
### Notes
&emsp;
Loret ipsum
&emsp;
&emsp;

@ -67,11 +67,10 @@ style: number
[GitHub - vrtmrz/obsidian-livesync](https://github.com/vrtmrz/obsidian-livesync) [GitHub - vrtmrz/obsidian-livesync](https://github.com/vrtmrz/obsidian-livesync)
[GitHub - remotely-save/remotely-save](https://github.com/remotely-save/remotely-save) [GitHub - remotely-save/remotely-save](https://github.com/remotely-save/remotely-save)
[GitHub - zsviczian/obsidian-codeeditor: Support js and css file editing in Obsidian.](https://github.com/zsviczian/obsidian-codeeditor) [GitHub - zsviczian/obsidian-codeeditor: Support js and css file editing in Obsidian.](https://github.com/zsviczian/obsidian-codeeditor)
[GitHub - adifyr/obsidian-chat-view: An elegant chat view for Obsidian pages.](https://github.com/adifyr/obsidian-chat-view)
[GitHub - Mara-Li/obsidian-mkdocs-publisher-plugin: Making a plugin for obsidian to publish note throught mkdocs](https://github.com/Mara-Li/obsidian-mkdocs-publisher-plugin) [GitHub - Mara-Li/obsidian-mkdocs-publisher-plugin: Making a plugin for obsidian to publish note throught mkdocs](https://github.com/Mara-Li/obsidian-mkdocs-publisher-plugin)
[GitHub - Mara-Li/obsidian-mkdocs-publisher-python: Publish your obsidian vault through a python script](https://github.com/Mara-Li/obsidian-mkdocs-publisher-python) [GitHub - Mara-Li/obsidian-mkdocs-publisher-python: Publish your obsidian vault through a python script](https://github.com/Mara-Li/obsidian-mkdocs-publisher-python)
[GitHub - jaynguyens/obsidian-ghost-publish: Write on Obsidian. Publish to Ghost with a single click.](https://github.com/jaynguyens/obsidian-ghost-publish) [GitHub - jaynguyens/obsidian-ghost-publish: Write on Obsidian. Publish to Ghost with a single click.](https://github.com/jaynguyens/obsidian-ghost-publish)
[GitHub - mProjectsCode/obsidian-media-db-plugin](https://github.com/mProjectsCode/obsidian-media-db-plugin) [GitHub - aldrinjenson/obsidian-camera: Camera plugin for Obsidian.md](https://github.com/aldrinjenson/obsidian-camera)
&emsp; &emsp;

@ -0,0 +1,413 @@
---
dg-publish: true
Tag: ["Society", "Academia", "Abuse"]
Date: 2022-06-05
DocType: "WebClipping"
Hierarchy:
TimeStamp: 2022-06-05
Link: https://www.businessinsider.com/rosemead-high-eric-burgess-sexual-misconduct-investigation
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: [[2022-06-05]]
---
&emsp;
```button
name Save
type command
action Save current file
id Save
```
^button-HewasmyhighschooljournalismteacherNSave
&emsp;
# He was my high school journalism teacher. Then I investigated his relationships with teenage girls.
Something was off.
It was a hot July day and the classroom at Rosemead High School should have been empty. But when a security guard swung open the door to let several students in to collect supplies, she noticed the motion-sensor lights didn't turn on. A man's voice called out from the darkness, "Oh, I was just looking for some books."
Startled, the guard recognized Eric Burgess, a longtime teacher, kneeling on the floor. As her eyes adjusted from the sunlight outside, she made out the outline of a young girl who appeared to be hiding behind Burgess. 
The guard whisked the students out of the room and reported what she saw to Brian Bristol, the principal. The line about books made no sense to her. Why would Burgess, who taught advanced English and journalism down the hall, need books from a classroom used for kids learning English as a second language?
![Rosemead High school classroom 206](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) ![](https://i.insider.com/627d5a54dd983300191cc050?width=600&format=jpeg&auto=webp)
The Rosemead High School classroom where Burgess was caught having sex with a former student who graduated just weeks before.
(Christopher Vu for Insider)
Burgess later offered up another story to Bristol, telling him he had been rearranging furniture with his daughter. But that, too, was a lie.
The truth is that Burgess was on the floor that summer day in 2017 with an 18-year-old girl who, just a few weeks earlier, had been his student. The guard walked in on them having sex, I later learned. Burgess was 46 years old at the time.
When the security guard followed up with Bristol later, he told her not to worry. Burgess, he said, had sufficiently explained himself. There would be no investigation; the shifting story was all Burgess needed to return to the classroom that fall.
---
Over two decades at Rosemead High, Burgess went from an alum who joined the English department shortly after college to a beloved teacher many on campus referred to as the "Golden Boy." His hallway antics and videotaped pranks often captivated kids, frequently drawing the attention of administrators but rarely resulting in punishment. Burgess relished pushing boundaries and often hung out after school with his students.
I should know. I was one of them.
Burgess' class, which I took as a senior in 2006, was my introduction to journalism. I remember him as an adult version of a class clown, charismatic and eager to have fun. He was quick to help students with their personal struggles, acting as both teacher and counselor.
![Facebook image of Eric Burgess and others jumping](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) ![](https://i.insider.com/627d55bcdd983300191cbebb?width=600&format=jpeg&auto=webp)
Burgess, Alex Rai, and Brian Day with their pants off at Rosemead High School prom in 2012.
(Eric Burgess' Facebook)
A decade after I graduated, I found myself mulling this side of Burgess as the #MeToo movement took root. I read "[Benefit of the Doubt](https://www.oregonlive.com/education/2017/08/benefit_of_the_doubt.html)," a story about a high school teacher who made sexual advances on his students for years but kept his job while school officials failed to take action. As I read, questions that had swirled around Burgess when I was in school — it was an open secret that he had a child with a former student — came rushing back. Now I wondered whether he, too, had been given the benefit of the doubt all these years.
I put the reporting skills I first learned in his class to use, interviewing more than 40 current and former teachers and students and reviewing hundreds of emails, disciplinary records and internal documents. I found that Burgess repeatedly groomed female students for sex. Two women said they had intimate relationships with him that became sexual soon after they graduated; a third told me it happened while she was still a student.
Despite numerous red flags, school and district officials repeatedly missed opportunities to put a stop to Burgess' behavior. Time and again, these adults failed to investigate disturbing stories and reports of sexual abuse that arose throughout his career. Burgess has not been charged with a crime, and school officials won't say whether they ever notified law enforcement of his relationships with teenage girls.
The district superintendent Edward Zuniga refused to answer a detailed list of questions for this story, telling me [in a written statement](https://www.documentcloud.org/documents/22011477-district-superintendent-statement-may-5-2022-google-docs) that he couldn't "comment on personnel matters." He added that "ensuring a safe and secure environment for both students and staff is a very high priority" and that employees were expected to "maintain the highest ethical standards."
That Burgess was able to repeatedly groom teenage girls for sex over two decades in the classroom is partly a reflection of how well-liked he was by administrators and students, something I wrestled with again and again. When I thought back to Rosemead and its campus culture, I remembered how boundaries between teachers and students were nearly nonexistent, with most of us content to look the other way. A nagging feeling of guilt occupied the back of my mind as I grappled with whether I'd been a part of a community that allowed troubling behavior to go unchecked.
Why didn't I ask more questions when I was a student? And even if I had, would the teenage version of me have known what to do with the answers?
---
Rosemead High is a sprawling public school typical of those serving the suburban communities that form the San Gabriel Valley, just east of downtown Los Angeles. The campus sits at the edge of town, next to a park where kids smoke weed on concrete picnic tables after school. Today, its nearly 2,000 students are mostly Asian and Latino. Many are the children of immigrants, and about two-thirds come from working class families. As at most high schools, they're a mix of academic high-fliers, jocks, nerds, and underachievers.
At first, Burgess was one of several teachers I had questions about. As I called old classmates, a list of half a dozen men took shape. Disciplinary records I obtained show that district officials repeatedly allowed these teachers to return to the classroom after their inappropriate behavior surfaced.
![](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='1066' height='800'/%3E)
The district superintendent Edward Zuniga refused to answer a detailed list of questions for this story, telling Insider that he couldn't "comment on personnel matters." (Christopher Vu for Insider)
Show less
![](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='1066' height='800'/%3E)
Rosemead High School sits just east of Los Angeles in the San Gabriel Valley. (Christopher Vu for Insider)
Show less
Take Dwain Crum, for example, a former history teacher who was suspended at least three times during a nearly 30-year career and once grabbed a student by the neck and said, "[I'm going to kill you](https://www.documentcloud.org/documents/21883868-dwain-crum-disciplinary-documents)." (Crum's attorney, Harold Greenberg, told me, "Yeah, the guy has a high temper.") Or Alex Rai, who chairs the social-science department and [was once reprimanded](https://www.documentcloud.org/documents/22011668-alex-rai-letter-of-reprimand-redacted-by-rosemead-high) for telling a student that she "must like a mouth full of nuts" as she ate almonds before class. (Rai [told the principal](https://www.documentcloud.org/documents/22011669-alex-rai-response-to-principal-brian-bristol-as-part-of-his-personnel-file) he had been misunderstood; he later told me he "messed up.") Or Paul Arevalo, a former computer teacher who was placed on leave for a year before he resigned and began teaching at another school in the district, where he verbally harassed a female student and was [ordered not to contact her](https://www.documentcloud.org/documents/22011711-paul-arevalo-disciplinary-records). (Arevalo told me he was "not allowed" to discuss what happened.)
I asked Diane Bladen, Rosemead High's principal until 2007, about these teachers, along with others known for inviting cheerleaders to sit on their lap between classes, attending prom with students who graduated the year before and reserving the front row for girls wearing skirts. In Bladen's telling, the failure to remove these men from the classroom wasn't for lack of trying by administrators, but rather a lack of cooperation from students.
"He had kids wrapped around his little finger," Bladen said of Arevalo's tenure at Rosemead. "It was the same with Eric."
Bladen was also quick to bring up the union's role in defending teachers accused of misconduct, telling me it was "almost impossible" to fire a tenured teacher in California. A former school union representative pushed back on this, however, and told me that "there tends to be a lack of investigation" into problem teachers at Rosemead.
### [Read more: How a southern California high-school shielded a beloved teacher who groomed students for sex](https://www.businessinsider.com/eric-burgess-rosemead-high-sexual-misconduct-district-failures-2022-5)
While my reporting uncovered piles of documents about other teachers, school officials kept denying my requests for information about Burgess under California's public records law. After receiving several of the two dozen requests I submitted while reporting this story, an assistant superintendent told me he was surprised to find that Burgess' personnel file was "squeaky clean."
It became clear to me that school officials weren't going to provide any answers about Burgess. But the more people I spoke with, the more I realized that he was the story.
In late 2017, one Rosemead employee told me, "There's some things you need to know about Eric."
---
Burgess graduated from Rosemead High in 1989, the very picture of SoCal cool, with a shock of bleach-blond hair. His colleagues remember him struggling in college before returning to campus in the fall of 1996 to fill a vacancy in the English department.
From the outset, dozens of teachers and students told me, Burgess embraced a carefree attitude. His reputation as a rule breaker made him a favorite among kids, particularly those with a rebellious bent like me. His favorite jokes invariably began with, "your mom." Burgess' students regularly reenacted scenes from the TV series "Jackass" for class video projects. And he often took his favorite students to the movies for all-day marathons, sneaking into one film after another together.
![](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='641' height='477'/%3E)
Burgess as an upperclassman at Rosemead High School with the former teacher Hugh Zegers, center, and classmates. (Eric Burgess' Facebook)
Show less
![](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='636' height='477'/%3E)
Burgess as an underclassman at Rosemead High School. (Rosemead High School yearbook/Rebecca Zisser/Insider)
Show less
"He was just kind of a big kid in a teacher role," one Rosemead alum who worked as a teacher's aide to Burgess told me. We swapped stories, remembering how Burgess carried himself with the swagger of a kid who'd gotten away with ditching school for the first time.
Burgess frequently documented his antics online. In [one YouTube video](https://www.youtube.com/watch?v=2rgD9h3r3W0) that a parent complained to administrators about, he sings shirtless in the shower and strolls along the Hollywood Walk of Fame, his midsection blurred out. He once used a student's cell phone to text a classmate, "I love penis!!!!!!!!," a screenshot posted to Facebook shows. And Burgess treated every Halloween as an opportunity to be more daring than the year before, like the time he went to school dressed as Miley Cyrus, wearing shorts and a crop top with the words "TWERK IT!" scrawled across his chest.
![Eric Burgess Facebook page showing a photo from Halloween of him dressed as Miley Cyrus](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) ![](https://i.insider.com/628428fe9785f10018104eaf?width=600&format=jpeg&auto=webp)
Eric Burgess Facebook page showing a photo from Halloween of him dressed as Miley Cyrus
Eric Burgess' Facebook
"I can't tell you how many times I talked with him about things like that," Bladen told me. "I'd always put notes in his box that said, 'See me,' and he'd come to my door and go, 'OK, what did I do now?'"
Burgess had a knack for making kids feel comfortable. I knew I could tell him the truth when I got a job at McDonald's and needed to leave his class early every day so I could save enough money to buy my first car. When a dream opportunity came up to interview Rod Marinelli, a Rosemead alum who was then the head coach of the Detroit Lions, Burgess cleared the way for me to skip school and fly to Detroit. His belief in me led to a front-page story for Rosemead High's student newspaper, the Panther's Tale, and cemented my decision to study journalism in college. 
Burgess influenced my family, too. After I graduated, he helped my youngest brother during a difficult time when he was a student. Years later, after the sudden death of my other brother, Burgess assigned a story in the student newspaper to highlight a scholarship my family set up in his honor. Burgess made an impression on my mom and dad, both teachers themselves, as the type of trusted adult every parent hopes their child will find at school.
As I sifted through my memories, it became clear that the Burgess who pursued relationships with teenage girls was the photo-negative version of the Burgess I knew. Child abuse researchers and attorneys I spoke with told me that child groomers often excelled at ingratiating themselves in their community, first gaining the trust of those around them before exploiting it.
"Sexual groomers, you don't see them," explained Daniel Pollack, a social-work professor who frequently serves as an expert witness in child-welfare cases. Pollack likened teachers like Burgess to chameleons: "They blend in."
![drange marinelli](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) ![](https://i.insider.com/62814e84e7446d0018cc922f?width=600&format=jpeg&auto=webp)
The author interviewing Rod Marinelli, a Rosemead High School alum who was then coaching the Detroit Lions, for the Rosemead student newspaper, the Panther's Tale.
Matt Drange
As much as Burgess' behavior went undetected among my classmates, some adults did see through it. In the spring of 2018, a copy of an alarming memo sent to Rosemead administrators landed in my inbox. The document, written by a campus staffer, detailed sexual relationships Burgess was accused of having with students going back 20 years. It laid out several occasions in which school officials were alerted to inappropriate behavior through eyewitness accounts and complaints from parents.
Perhaps most troubling of all, the memo alerted officials to a series of sexually explicit messages that Burgess had exchanged with a student who had graduated the year before, screenshots of which had become gossip fodder on campus. Because the messages were undated, it wasn't clear whether the girl was still a student when they were sent.
"I felt compelled to expose this information because I don't want to hear of one more student that Burgess is allowed to take advantage of or one more time that he's allowed to get away with such reprehensible behavior," the author of the memo wrote. "His extensive history of sexual misconduct with students is unforgivable and must end."
The document provided a clear roadmap for administrators to follow if they wanted to learn the truth about Burgess. But the alarm bell went unheeded as administrators sat on the information for more than a year.
> There's some things you need to know about Eric.
As I continued reporting, Burgess heard that I was asking my own questions. He reached out to me on Facebook to deploy his trademark charm, pleading for "any humanity" I could offer him and reminding me of our relationship.
"It is disappointing that we are communicating under these conditions considering what you and your family has meant to me over the years," Burgess wrote. "But I suppose a man has to do what a man has to do to make his impact on this world."
---
**T**he students Burgess targeted were similar. Each of the three women who had sexual relationships with Burgess told me they were struggling with challenges at home when they met him as teenagers. One had a baby at 15. Another was sexually abused. The other was abandoned by her father.
Two of the women believe they were sexually abused by Burgess. Mia Nakao, who raised a child with Burgess and was married to him for several years, does not. Still, Nakao told me, Burgess' penchant for developing intimate relationships with students, both sexual and platonic, often crossed the line.
"Looking back on it, it was highly inappropriate," Nakao said of the after-school trips to local amusement parks and the beach that Burgess took her and classmates on. "He shouldn't have been hanging out with us like that."
![Eric Burgess yearbook photo of Mia](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) ![](https://i.insider.com/627d55c0dd983300191cbecc?width=600&format=jpeg&auto=webp)
Mia Nakao as an underclassman at Rosemead High School. She met Burgess the summer before her senior year, much of which she spent living at his apartment.
(Rosemead High School yearbook/Rebecca Zisser/Insider)
Now in her early 40s, Nakao raised her children in a suburb not far from where she was living when she met Burgess before her senior year at Rosemead High. In 1998, Burgess asked his summer school class whether anyone had an older sibling who needed a place to live. His housemate had moved out and he was looking for a new one, he said.
After class, Nakao, who was 17 at the time, asked Burgess whether she could move in with him. Her mother had kicked her out of the house after she gave birth to her first child, she explained, and the rented room Nakao shared with her infant son was infested with cockroaches. It was so bad that she often spent nights with her baby sleeping in a booth at a nearby Denny's.
Burgess agreed to let Nakao move into his apartment, where she spent much of her senior year. Two people who spent time at the apartment that year told me they saw Nakao living there.
![Facebook image of Mia and Lois](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) ![](https://i.insider.com/627d55bbdd983300191cbeb5?width=600&format=jpeg&auto=webp)
The former Rosemead High School English teacher Lois Heilemann and Nakao. Several people close to Burgess said Heilemann was like a "second mother" to him.
(Mia Nakao's Facebook)
Lois Heilemann, a former English teacher and longtime mentor to Burgess, said she knew that Nakao was struggling at the time navigating a custody battle with the infant's father. Heilemann told me she wasn't aware that Nakao lived with Burgess when she was a student.
"I had the impression he was just trying to comfort her, make her feel better and encourage her in her pursuit of keeping the child," Heilemann told me. "But I didn't know about the roommate thing … Had I known, I would have said, 'I don't think that's a good idea.'"
Nakao told me she and Burgess started dating two months after she graduated from Rosemead High, in June of 1999. They later married and had a son. The relationship, which ended in divorce a few years later, raised eyebrows among administrators, who became aware of it after teachers in the English department organized a baby shower for the young couple.
![baby shower invite burgess](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) ![](https://i.insider.com/627eddb1e7446d0018cc7d6d?width=600&format=jpeg&auto=webp)
A thank-you card that Nakao sent to a Rosemead High School employee following the baby shower that faculty organized for her and Burgess.
(Rebecca Zisser/Insider)
Larry Callaham, an assistant principal at the time, told me that he and Bladen felt the relationship "was inappropriate" and confronted Burgess about it. Burgess claimed he hadn't known Nakao when she was a student at Rosemead and said they met at the Cal State LA library. Though she said the story made her "suspicious," Bladen acknowledged that she did not investigate it further.
Around the same time, Bladen told me, she briefly suspended Burgess after she received a tip that he had been dating another student. Bladen said that she was unable to reach the young woman, who by then was in college, and that her friends insisted the relationship wasn't sexual. While Bladen felt conflicted about it, she told me she had no choice but to allow Burgess back into the classroom. (I wasn't able to locate the young woman, either.)
"No one would cooperate," Bladen said. "Kids protect him because they like him."
I ran this explanation by everyone I spoke with. Most of my classmates told me they did like Burgess, and couldn't imagine Rosemead High without him. But several school employees who flagged Burgess' behavior to administrators said they didn't buy it.
"The kids aren't coming forward because when they have in the past, they were dismissed," said one longtime employee who kept a thank you note Nakao wrote her after the baby shower. "That's our culture."
---
The more I reported, the more that culture began to gnaw at me. Despite Bladen's insistence that she had done all she could, when another former student of Burgess' came forward to her with allegations of inappropriate behavior in 2001, nothing changed.
It took months for me to reach the woman, who asked not to be named; I'll call her Catherine. She told me she had a sexual relationship with Burgess while still a student — and that she'd reported it to Bladen. Catherine explained she had been part of a group of kids who sometimes hung out at Burgess' apartment after school. The summer before her junior year, she said, Burgess began to touch her, kissing and fondling her on multiple occasions. She was 16 years old at the time. (In California, molesting a child is a criminal offense.)
Like other students who became sexually involved with Burgess, Catherine told me their relationship took root in the classroom. Initially, during her sophomore year, "there was a lot of attention on my schoolwork," she said. She'd spend lunch breaks in his room going over assignments. At one point, Catherine confided in Burgess that her father had walked out on her family. "I told him, 'You'd be a great mentor for my brother. My dad left a long time ago.'"
Catherine would skateboard from her mother's house to Burgess' apartment, where they'd discuss books she was reading in English class. Sometimes they'd get Mexican food afterward or go to Tower Records to buy CDs. When she turned 16, Burgess showed up to her birthday party.
"In many ways he filled a gap in my life," Catherine told me. "I suddenly felt special."
![Rosemead High School panthers sign](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) ![](https://i.insider.com/627d5a5c27d5960019ee56f8?width=600&format=jpeg&auto=webp)
Rosemead High School's nearly 2,000 students are mostly Asian and Latino. Many are the children of immigrants, and about two-thirds come from working-class families.
(Christopher Vu for Insider)
Catherine grappled for months with the relationship, which she knew had become inappropriate. 
One day, as Burgess was driving her to school, the urge to get out became too great to ignore. Catherine asked Burgess to stop the car, turning toward him as she opened the door.
"I don't think I can do this anymore," she said. Catherine told me that when she brought up their relationship, Burgess said it was important no one found out about it — or he could get into trouble. "I remember the guilt shifting to me."
Like other former students I spoke with, Burgess contacted Catherine after he learned I was reporting this story and asked her to call him; she declined. The guilt "worked then," she said. "It doesn't work now."
Catherine confided in friends while she was still at Rosemead, two of whom confirmed details of her relationship with Burgess and her initial reluctance to report him to school officials. She also shared what happened with a teacher she trusted, who alerted other faculty members. Catherine decided to come forward and tell Bladen herself after starting college, when she heard that Burgess was becoming close with another student. Bladen, Catherine recalled, assured her that she would investigate her story and be in touch.
Bladen never called her back.
Callaham, the former assistant principal, told me that he knew about Catherine's "situation" but that Bladen took the lead on investigating it. Bladen, who was later promoted to a job at the school district and has since retired, didn't refute Catherine's account, telling me she couldn't recall specifics of their conversation.
She "asked me to share my experience, and that wasn't enough," Catherine said. "I don't know what evidence they needed; it was my word."
Once again, Burgess returned to the classroom.
Over the next decade, Burgess' stature on campus grew. He became faculty advisor for the student newspaper and the academic-decathlon team while teaching advanced English and helping to shape the department's curriculum. He also went on to marry a woman who taught at Rosemead High in 2004, Terri Amborn. Before they divorced, the couple had a daughter together — the same daughter Burgess used as a shield in his cover story for the sexual encounter with his former student in the darkened classroom.
![Eric Burgess at graduation kissing Bladen](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) ![](https://i.insider.com/627d55c0dd983300191cbec7?width=600&format=jpeg&auto=webp)
Burgess kissing Diane Bladen, then Rosemead High's principal, at graduation night in June 2007. Several Rosemead High employees said that Burgess became close with several school officials during his tenure, including Bladen.
(Eric Burgess' blog)
Around the time Amborn started teaching at Rosemead, Burgess spent his summer break with a colleague. Partway through their vacation, Burgess confided that he couldn't wait to get back to Rosemead High, "where I'm a God."
---
The impunity Burgess had enjoyed for so long began to disappear in the spring of 2019. Screenshots of the sexually explicit messages he'd exchanged with a former student — the same messages described in the whistleblower memo — were briefly posted to social media, prompting a wave of harassment against the young woman.
Several teachers reported the messages to Brian Bristol, the principal. This time, he took action. He suspended Burgess and the district hired an outside investigator to track down the girl.
By that point, I'd spent weeks combing through social media posts and old yearbook photos trying to do the same. When I finally found the young woman, whom I'll call Sarah, she ignored my messages. Eventually, I learned that we had a mutual connection: a fellow alum whom I'd known from our elementary school kickball field and who had been a teacher's assistant in one of Sarah's classes at Rosemead. I called him and told him I needed his help. He agreed to vouch for me.
Sarah was hesitant to talk at first, fearful of what would happen if she did. She eventually met with me at a Starbucks near her college campus. By that point, she'd spent more than a year covering for Burgess at his behest and was wrestling with whether to come clean to district investigators. Now she wanted to know what I'd learned about our teacher.
I told her about the memo, the complaints from parents and faculty, the lies to school administrators and the girls who came before her. She was stunned. 
"I was hoping you would say it was just me," said Sarah, who didn't want to use her real name in large part because she feared retaliation from Burgess.
Fighting back tears, Sarah finally opened up about her relationship with Burgess. She had befriended Burgess's son, who was a couple of years behind her at Rosemead, as someone she came to see as a little brother. She didn't know that the boy's mother, Nakao, was once a student of Burgess' like her.
"I don't even know what to say to that," she said when I told her the truth. 
Sarah walked me through how Burgess cultivated their relationship in his classroom. That she had at least one class with Burgess in each of her last three years at Rosemead High was by his design, she said. He filled out her schedule for her and suggested she join the student newspaper. "I didn't even know what journalism was," she said.
![Text messages from former teacher Eric Burgess](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) ![](https://i.insider.com/627e9e04e7446d0018cc6c72?width=600&format=jpeg&auto=webp)
A text-message conversation between Burgess and Sarah.
(Insider)
She confided in Burgess intimate, traumatic details of her life, including that she had been raped by her stepfather and that when she told her mother what happened, her mother didn't believe her. A suicidal episode prompted regular appointments with the school psychologist, who eventually warned Sarah about getting too close to Burgess. But Sarah brushed the concerns aside, she told me, because she "idolized" him.
"He was the closest person for me to a father figure," Sarah told me. "In no way did I think he could be something bad to me." 
Burgess saw no need to conceal his feelings for Sarah in the [message he penned in her senior yearbook](https://www.documentcloud.org/documents/22011324-eric-burgess-message-in-sarahs-yearbook-from-june-2017).
"You are also a kind and generous person, the type of spirit people try to take advantage of," Burgess wrote. "You are a beautiful and sensuous young woman, the kind any man would thank the gods above for allowing in his life. As with everything else, any man that enters your life must prove his worthiness for you through acts of kindness, generosity and honesty. That, and only that, is when you will give yourself, body, mind and soul."
Sarah told me she and Burgess began having sex a few weeks after she graduated in June 2017. She continued to see him on weekends after she left for college that fall.
"Anything you want for Christmas?" she texted him in November.
"You! And nothing else. Seriously," he replied.
![Text messages from former teacher Eric Burgess](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) ![](https://i.insider.com/627e9e1ae7446d0018cc6c77?width=600&format=jpeg&auto=webp)
Text messages Burgess and Sarah exchanged in 2018.
(Insider)
That changed a few months later, when the screenshots of their sexually explicit messages first traded hands among students and their relationship became fodder for high school gossip. Sarah said she felt as if Burgess became "ashamed" of their relationship and suddenly cared more about covering it up than he did about her. Soon after, Burgess texted Sarah that he was seeing another woman — someone his age. He told her he had "even dropped some comments about my 'girlfriend' that I'd been seeing for a year" to Bristol, the principal, hoping to conceal their relationship.
---
By the time Bristol suspended Burgess in spring 2019, Burgess' directives to Sarah became more dire. He had heard from former students and colleagues that I was asking questions, too. He was desperate to cover his tracks. 
Give "just a blanket, 'nothing ever happened between you and me,'" he instructed Sarah in a voicemail in May 2019, dictating the lies he wanted her to tell if she were questioned about their relationship. "That there was some flirting on your part, umm, and that, you know … you weren't a student. And that you were already 18."
In the weeks that followed, Burgess called Sarah repeatedly with explicit instructions to obstruct my reporting and the district's investigation. Since he had been ordered by district officials not to have any contact with Sarah while they looked into their relationship, Burgess called her from a cellphone that belonged to his teenage son — the child he had with Nakao.
Burgess asked to review the written statement Sarah emailed district investigators denying their relationship, she told me. By that point, Sarah had dropped out of college and was working two jobs to support herself. Some days, she said, her [depression](https://www.insider.com/what-is-depression) was so severe she couldn't get out of bed. But Burgess wouldn't leave her alone.
"At this point, I'm not sure when you and I are going to be able to talk until this disappears," Burgess told her in one voicemail. "Everything is falling apart in my life right now, but, you know, I mean, it's my fault."
He left her another voicemail four days later. "I'm still trying to make it seem like nothing happened at all after you graduated," Burgess said. He took a deep breath before adding, "My life is imploding."
Soon after we met at the Starbucks, Sarah decided she was done lying for Burgess.
She contacted the district's outside investigator whose calls she had been dodging and dropped a bombshell: She was the girl the campus security guard had caught with Burgess on the floor of that darkened classroom. The two of them were having sex. She handed over the voicemails of Burgess pressing her to lie, intimate photos of the two of them together and receipts from the Uber rides she took home after late-night visits to Burgess's house, where they'd been careful not to wake his son in the next room.
![Eric Burgess ID tag from Rosemead High School](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) ![](https://i.insider.com/627d55bcdd983300191cbeb8?width=600&format=jpeg&auto=webp)
"He was just kind of a big kid in a teacher role," one Rosemead High School alum who worked as a teacher's aide to Burgess said.
(Eric Burgess' Facebook)
Sarah's cooperation jump-started the district's investigation, which appeared to have stalled. Before she came forward, a class schedule for the coming fall 2019 semester still listed Burgess as the journalism teacher. School staff wondered whether Burgess would once again evade consequences and return to the classroom. This time, he didn't.
> Everything is falling apart in my life right now, but, you know, I mean, it's my fault.
"I stuck with the script for so long. It felt like I was being brainwashed to say what he wanted me to say and do what he wanted me to do," Sarah told me. "I just want to tell my truth. What's wrong with that?"
---
In the end, it was Burgess's efforts to cover up his relationship with Sarah, rather than the relationship itself, that cost him his job.
"His interference with the investigation and other unacceptable actions on his part (unrelated to the allegations of inappropriate relations with female students) is what led the district to pursue his termination," former assistant superintendent Felipe Ibarra, who oversaw the investigation, told me in an email.
Listen to the rest of the voicemails Burgess left Sarah
- ...loading player
- ...loading player
- ...loading player
Attorneys for the school district refused to release documents from their investigation into Burgess, arguing that "the public's interest is furthered by maintaining the confidentiality" of the records. The district's investigation concluded in December 2019, two years after I began my own, when Burgess signed [a settlement agreement](https://www.documentcloud.org/documents/21975097-burgess-settlement-agreement_final_fully-executed) that included his resignation.
![Eric Burgess settlement tearsheet](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) ![](https://i.insider.com/627d55bedd983300191cbec1?width=600&format=jpeg&auto=webp)
The settlement Burgess signed that bars him from ever working at Rosemead High School again. The agreement also prohibits district officials from disclosing anything they learned about him during a 2019 investigation into his relationships with teenagers.
(El Monte Union High School District/Rebecca Zisser/Insider)
I've tried to track Burgess down ever since, hoping he would make good on his promise to sit down with me for an interview once the district's investigation was complete. He never did. When we spoke over the phone while it was still underway, Burgess deflected my questions about his relationships with former students, telling me that he wasn't calling "to plead my case to you."
"You and I, we had a relationship that is gone now. It's different," Burgess told me. "You have a job you are doing."
Burgess said people on campus had "misconstrued" his behavior. He refused to talk about the teenage girls he'd dated. Instead, he told me about a boy he'd taught as a sophomore who couldn't afford basketball shoes, and how he'd helped him, first by buying him a pair of sneakers and later by recruiting him to the school newspaper. 
"Try to humanize this," Burgess urged me when I sat down to write this story. "And try to remember who you *know* I am."
---
That Burgess would attempt to charm his way out of trouble as his world collapsed around him is precisely why the young women he groomed for sex stayed quiet for so long. They fear that no one will believe them. That people will dismiss their stories as hearsay about a favorite teacher. And that whatever explanation Burgess gives will be believed, just as it was before.
Sarah doesn't have any friends left at Rosemead. The harassment from former classmates who learned about her relationship with Burgess got so bad that she changed her phone number. Following her cooperation with the district's investigation, she received a text message from Burgess' now-wife, who was his high school sweetheart. "I will always wish bad things for you," she wrote. "Be miserable. I truly hope you suffer in your life. You deserve it."
Sarah has worked hard to move beyond it over the past two years. She's back in college, has a new job and a boyfriend she trusts. When I called her recently, I was struck by how far she'd come since our meeting at Starbucks.
"I feel a lot stronger emotionally about all this now. Before I couldn't talk about it without sobbing," Sarah said. "I still feel like I was manipulated and am disgusted by it. I can't believe that I ever wanted to protect him."
She asked me what I thought of our teacher. Before, she'd wanted to know what I'd learned from my reporting on him, which radically changed her understanding of their relationship. Now she wanted to know if the four years I'd spent talking with others who knew Burgess had done the same for me.
It had. I told her about the memories that haunt my visits back home to Rosemead. About the strain this story has had on my family. About the sinking feeling of despair I get when I look back at the dead ends scattered throughout my notes and the possibility there might be other girls like her I never found. And how, when I set out to tell this story, I had no idea what our teacher was capable of. 
> I just want to tell my truth. What's wrong with that?
Under the terms of his separation, Burgess was allowed to resign without admitting to any wrongdoing and continued to receive his salary for another six months. The agreement bars Burgess from working at Rosemead High ever again, but does nothing to prevent him from teaching elsewhere. The state agency that credentials teachers in California revoked Burgess' credential "because of misconduct." He will be eligible to apply for reinstatement in August.
As part of the settlement, school-district officials agreed that if any prospective employer asked for a reference, they would offer only "content neutral" material, such as Burgess' salary and the years of his employment.
The district, at least, would keep the reason Burgess lost his job a secret.
![Eric Burgess with author Matt Drange](data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3C/svg%3E) ![](https://i.insider.com/627d55c0dd983300191cbec9?width=600&format=jpeg&auto=webp)
The author and a classmate, Amy Julia Harris, beside their journalism teacher Burgess at graduation night in June 2007. Harris was co-editor in chief of the student newspaper that Burgess oversaw, while the author, Matt Drange, was a sports editor.
(Eric Burgess' blog)
*Amy Julia Harris contributed reporting to this story.* 
*In 2019, the statute of limitations in California was [expanded](https://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=201920200AB218&search_keywords=complaints+verification) for victims of sexual abuse experienced as minors; going forward, survivors now have until the age of 40 to file a lawsuit, or within five years of the discovery of their abuse, whichever is later. The change also opened a three-year window for adults to file civil claims that were previously barred by the statute of limitations; that window ends December 31, 2022.*
*If you have a tip, contact [Matt Drange](https://www.businessinsider.com/author/matt-drange) at mdrange\[at\]insider\[dot\]com, or by phone, at +1 (626) 233-1063.*
&emsp;
&emsp;
---
`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))`

@ -0,0 +1,173 @@
---
Tag: ["Animal", "Cat"]
Date: 2022-06-05
DocType: "WebClipping"
Hierarchy:
TimeStamp: 2022-06-05
Link: https://hakaimagazine.com/features/its-10-pm-do-you-know-where-your-cat-is/
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: [[2022-06-05]]
---
&emsp;
```button
name Save
type command
action Save current file
id Save
```
^button-Its10PMDoYouKnowWhereYourCatIsNSave
&emsp;
# Its 10 PM. Do You Know Where Your Cat Is? | Hakai Magazine
Domesticated cats are among the worlds top predators, implicated in the decline of many species. Will a night curfew keep them in check? Photo by Konstantin Zaykov/Shutterstock
## Its 10 PM. Do You Know Where Your Cat Is?
## In Iceland, traditionally a land of cat lovers, bans and curfews are redefining the human relationship with domestic cats.
### Article body copy
In the early months of the coronavirus lockdowns, my wife shared with me a daily dose of cat videos. By shared, of course, I mean she flipped the screen of her phone and thrust it at me across the table: “Look!” And for the next 10 minutes, wed scroll—cat taking a bubble bath, cat robbing a fishmonger, cat playing the piano to an audience of two cats and a dog. One afternoon, as I came in the door, covered in snow, she greeted me with “Cat Lawyer”—a video of a Texas lawyer stuck on kitten filter during a court case on Zoom. The snow melted off my hat, all over the mobile screen, but we kept watching.
“Cat Lawyer” went viral in February 2021, a year into the pandemic, when we had tried for several months to get an actual cat to live with us in northern Iceland. Animal shelters were empty, with hundreds of disappointed people yearning for the comfort and joy of a feline friend. Icelandic cat breeders did not answer their phones, and the local veterinary authority cracked down on illegal kitten dealers for the first time. Cats were having the best year since the invention of the internet—it seemed.
Today, as Icelanders embrace freedom again, Icelandic cats are fighting for theirs.
In April, Akureyri—the largest municipality in the countrys north, with a population of 19,000 people and some 2,000 to 3,000 cats—decided to ban their feline residents from night roaming outside. Neighboring Húsavík banned cats several years ago from going outdoors day and night. Other Icelandic towns are considering bans as the issue of free-roaming cats increasingly makes its way from online forums to local politics, with the arguments generally falling into two categories. Some people—the “no animals in my backyard” or NAIMBY-ists—proclaim free-roaming cats are nuisances that should be confined like any other pet. Others think beyond the anthropocentric: cats kill birds and disrupt ecosystems.
Domestic cats are rarely part of an ecosystem, and despite thousands of years of domestication, cats still prefer their food at 38 °C—the lukewarm temperature of fresh blood. They are far more similar to their ancestors, African wildcats, than dogs are to wolves. Their ear flaps, with 32 muscles to rotate, are extraordinarily quick at picking up high-pitched sounds like a mouses squeak. Their eyes are enormous on a petite head and adjust to available light like the aperture of a camera. Whiskers give them a three-dimensional sense, their sheathed claws ensure silence, and they can jump vertically, up to five times their own height without effort.
Introduce this elegant assassin to places where migratory birds have adapted to a land free of natural predators and the damage can be irreversible, with some alarming examples worldwide. The International Union for Conservation of Nature Invasive Species Specialist Group lists cats as one of the 100 worst invasive species in the world. Their paw prints are all over the scene. Numerous studies have implicated cats in the global extinction of at least 63 species—40 birds, 21 mammals, two reptiles—and contributed to the endangered status of another 587 species. And nowhere do cats, particularly unowned cats, cause more damage than on islands: free-roaming cat islanders are linked to at least 14 percent of global bird, mammal, and reptile extinctions. In Iceland, a country with only one native terrestrial predator, cats have contributed to the dramatic decline of seabirds and have preyed on off-shore bird colonies.
Perhaps pandemic fatigue addled my brain, but only the positives—lower stress levels, for one—associated with pet ownership resonated with our family. Through a series of lucky breaks, we finally found a tabby cat we named Ronja, after the forest-dwelling Astrid Lindgren character. She is adorable but, frankly, a menace to all things living, and my ankles: whenever my feet hang off the bed or sofa or a chair, Ronja takes it as an invitation to attack. Death first came on the inside. Our houseplants died. Window flies she swallowed whole. Once the snow melted, I opened the window. And out she went.
[![cat in snow](https://hakaimagazine.com/wp-content/uploads/ronja-freedom-from-cats-1200x800.jpg)](https://hakaimagazine.com/wp-content/uploads/ronja-freedom-from-cats.jpg)
Ronja, the authors cat, has the personality of a serial killer. Photo by Egill Bjarnason
---
In a world where we divide ourselves into cat people or dog people, Iceland has traditionally been the land of cat people. The city of Reykjavík banned dogs for much of the last century, until 1984, based on the idea that they were farm animals. The citys bourgeoisie cats nap on geothermal-heated sidewalks and befriend world-famous guests—in 2011, the *New Yorker* published Haruki Murakamis short story “Town of Cats,” probably inspired by his visit to the Reykjavik International Literary Festival, where he noted the lively cat scene. But the felines chef-dœuvre is inducing humans into an annual display honoring the power of cats: each December, the city plants a gigantic metal cat statue downtown at Lækjartorg square opposite the prime ministers office to celebrate the folkloric Yule Cat, a monster-sized creature who—in the spirit of Christmas!—torments children and eats them alive, specifically those not wearing new clothes for the festivities.
This cat companionship is as old as the country itself. The Norse who mastered sailing from northern Europe to this middle-of-nowhere island some 1,150 years ago likely had cats on board their ships. The first cat to put its paws on the stony beach—lets call him Henry the Viking Cat—had places to raid. Iceland is, in basic geological terms, a volcanic hotspot turned bird colony turned country. When cats arrived, along with livestock, the only other terrestrial mammal was the Arctic fox, which had traveled via sea ice from Greenland, Russia, or North America at some point before written records.
[![Yule Cat statue in Reykjavík, Iceland](https://hakaimagazine.com/wp-content/uploads/yule-cat-freedom-from-cats-1200x799.jpg)](https://hakaimagazine.com/wp-content/uploads/yule-cat-freedom-from-cats.jpg)
Christmas celebrations in the Icelandic city of Reykjavík include a giant cat thats mean to kids. Photo by Arctic Images/Alamy Stock Photo
Few wild animals consciously opt for a domestic life. At the dawn of agriculture, the cat agreed to kill a few rodents in exchange for leftovers and—assuming ancient cats were as somnolent as modern cats—places to nap for 12 to 18 hours of the day. Yes, cats played social companions to needy humans in ancient times—killing a cat was punishable by death in ancient Egypt—but their role was farm work. And this wonderful arrangement lasted, roughly speaking, for 10,000 years.
Now we want them to stop.
Surveys suggest Icelanders support for cat curfews is highest in regions with private homes and private gardens. Their reasoning is predominantly idiosyncratic, likening roaming cats to visits from rowdy town drunks. To paraphrase some online comments about cat visitations: “cat urine sprayed the patio,” “challenged another cat to a 3:00 a.m. duel and killed the yellow daffodils,” “last week he came into the house, and the pharmacy is out of pet-allergy drugs.” Cat supporters reply along the lines of, “Get a life and try to tolerate the outside world; cats are a delight and have roamed Iceland as long as we have.”
The ecological impact appears secondary to public policy, evident when Húsavík, made famous by the Netflix comedy *Eurovision Song Contest:* *The Story of Fire Saga*, became one of the first European towns to impose a total cat curfew. Back in 2008, the debate began when a local feral—domesticated and unowned—population became troublesome, perhaps because their population hit a tipping point. Cats get pregnant as early as four months old, with one to six kittens per litter. A single female can get pregnant three times a year, and have over 150 descendants within two years. The growing band of unowned cats in Húsavík began to hang out next to a fish farm by the edge of town, snacking on land-grown char. At the same time—a happy accident for the cats—a geothermal drilling projects runoff water created a permanent wetland for coastal birds to nest in. Spring came, nesting began. Trouble started.
[![city of Húsavík, Iceland](https://hakaimagazine.com/wp-content/uploads/husavik-freedom-from-cats-1200x675.jpg)](https://hakaimagazine.com/wp-content/uploads/husavik-freedom-from-cats.jpg)
The city of Húsavík in northern Iceland, known for its starring role in the movie *Eurovision Song Contest: The Story of Fire Saga*, banned cats from outside in 2008. Photo by Della Huff/Alamy Stock Photo
Studies in the United States suggest feral cats cause some 70 percent of bird mortality, which is blamed on cats in general. The most obvious solution to these Húsavík bandits would have been to cull unowned cats and, further, ban all felines in rural parts of the municipality with the largest nesting sites. That would have upset farmers. Instead, local people, who seemed to largely oppose cats as nuisance animals, used the opportunity to impose a cat curfew solely *within* town limits.
Menja von Schmalensee, an expert on invasive species at the West Iceland Nature Research Centre, says the ongoing cat wars are often based on idiosyncratic preferences, not science. “There are places where feral cats should absolutely be banned outside, if not cats entirely,” she says. “In other areas, such bans are overly drastic. My worry is that each community will follow the loudest group regardless of facts.”
All over the country that same story echoes—particularly from cliffs where birds nest.
---
In 2007, Yann Kolbeinsson, armed with a laptop and a camera mounted on a bendable rod, conducted an annual summer survey of Manx shearwaters on Heimaey, in Icelands Westman Islands archipelago. The seabirds are ground nesters on capes and cliffs and spend daytime hours at sea. Kolbeinsson would look for signs of a nest and push the camera down a tunnel until it stopped at a burrow.
As he peeked inside, via the black-and-white live stream of his camera, Kolbeinsson would write down brief observations, one after another. Most days, entries went like this: empty, egg, empty, bird, egg, egg, egg, bird, empty, empty. One day, he recorded something entirely new: cat eyes.
Four kittens stared straight into the camera. A little feral family was living in a raided home just over one kilometer from the islands settlement of 4,300 people.
This was not good.
[![Westman Islands, Iceland](https://hakaimagazine.com/wp-content/uploads/westman-islands-freedom-from-cats-1200x797.jpg)](https://hakaimagazine.com/wp-content/uploads/westman-islands-freedom-from-cats.jpg)
Seabirds, such as Manx shearwaters, nest on capes and cliffs in Icelands Westman Islands archipelago. Photo by Michal Hykel/Shutterstock
On these 15 dome-shaped islands that make up the Westman Islands, the Manx shearwater created its largest colony in Iceland. A 1990 study indicated a population of 6,000 breeding pairs, which now appears to be on the decline, though recent research is murky. Seabird populations in the region are going down, but researchers consider the changing ocean food web the most vexing problem. Still, in many places, feral cats are exacerbating the decline by attacking and eating chicks.
Birds nest on offshore colonies precisely to avoid land predators and take precautions to avoid bigger birds. The storm petrel, for instance, stays out at sea during daylight hours to avoid attack; cats have night vision and are active at night, especially unowned cats. Kolbeinsson points out that removing cats is not always a simple solution since it can in turn make rats and mice*—*which can attack eggs and chicks*—*more prevalent.
And then there is toxoplasmosis, a disease caused by a parasite few have heard of but many already have in their bodies. While the majority of human transmissions result from eating raw meat, cats can also spread toxoplasmosis. Cats that hunt wild prey (meaning indoor cats are innocent) are the only animals capable of transmitting the *Toxoplasma gondii* parasite through their feces. Healthy people rarely have symptoms, but the parasite can harm human fetuses if a mother is infected during or right before pregnancy. (Advice for cat owners: clean out the litter box daily. The *T. gondii* parasite does not become infectious until one to five days after it is shed.) About 10 percent of Icelanders have the parasite based on a 2005 study, as do some 40 million Americans, according to the Centers for Disease Control and Prevention.
[![Toxoplasma gondii oocyst](https://hakaimagazine.com/wp-content/uploads/toxoplasma-gondii-oocyst-freedom-from-cats-1200x675.jpg)](https://hakaimagazine.com/wp-content/uploads/toxoplasma-gondii-oocyst-freedom-from-cats.jpg)
The *Toxoplasma gondii* parasites robust oocysts—eggs—easily travel in fresh water and the open ocean. Photo by TGPhoto/Alamy Stock Photo
Wild and domestic cats are the only definitive hosts for transmission from the terrestrial environment to the marine environment; without them the organism cant complete its life cycle. The parasites robust oocysts—eggs—easily travel in fresh water and the open ocean. Toxoplasmosis infections have killed endangered Hawaiian monk seals and California sea otters. The parasite affects birds, too, causing anorexia, diarrhea, respiratory distress, and possibly death. A study of 10 species of seabirds in the western Indian Ocean found that 17 percent of them carried antibodies against toxoplasmosis. The ʻalalā, Hawaiis native crow—which survives in captivity but is extinct in the wild—also carries antibodies against the parasite. Its possible toxoplasmosis arrived in Hawaii with Europeans and their domestic cats.
Disease aside, it was feral cats murderous natures that inspired local exterminator Asmundur Pálsson to act following Kolbeinssons discovery. Pálsson began shooting feral cats and laying traps by the foot of the bird colonies, “all to protect our Manx shearwaters,” he says.
Pálsson killed about 40 animals the first year but eventually gave up: some people in town kept sabotaging his effort by putting rocks in the traps. Two years earlier, Pálsson, armed with a .22-caliber rifle, had wiped out invasive bunnies—the European coney, native to France, Spain, and Portugal—but when it came to cats, animal welfare appeared to outweigh ecological impact.
[![](https://hakaimagazine.com/wp-content/uploads/bird-in-mouth-freedom-from-cats-520x347.jpg)](https://hakaimagazine.com/wp-content/uploads/bird-in-mouth-freedom-from-cats.jpg)
[![](https://hakaimagazine.com/wp-content/uploads/european-coney-freedom-from-cats-520x347.jpg)](https://hakaimagazine.com/wp-content/uploads/european-coney-freedom-from-cats.jpg)
Which one deserves to die more? Photos by Losonsky/Shutterstock (cat) and Mike Lane/Alamy Stock Photo (rabbit)
Instead, a group of volunteers on the island set up a shelter for feral and stray cats, practicing a technique known as trap-neuter-release. But cats are solitary hunters that roam large territories: it takes time and effort to bring a single animal into a shelter, and its practically impossible to keep up with population growth. Plus, once released back into the wild—now neutered *and* well nourished—the cat is the same predator, and all feral cats hunt.
Solitary habits also make cats hard to count and explain why global cat population estimates range *somewhere* between 500 and 700 million and why estimating the ecological damage of cats has a huge margin of error. Cats kill between 1.3 and four billion birds annually in the United States alone (excluding Hawaii and Alaska). The numbers are based on meta-research pulling big-picture data from previously published articles estimating the number of free-roaming cats and their appetite for birds, such as by using stomach and scat analysis. A Canadian study, applying a similar formula, estimates that cats kill between two and seven percent of birds in southern Canada, where most residents live. The first-ever study estimating the problem in China, published in 2021, blames cats for the annual death of 2.9 billion reptiles, four billion birds, and 6.7 billion mammals, on average, in addition to a staggering number of invertebrates, frogs, and fishes.
These findings implicate cats as the single greatest source of anthropogenic mortality for birds—a bigger threat than window and building collisions. Even worse than cars and poisoning? The cuddly, cuddly cat.
---
Why are cats so cuddly to humans? They rub against our legs, lick our noses, and knead our stomachs. Its as if we are another cat to them—and by one theory, that is what we are. Cat behavior researcher John Bradshaw claims that cats see humans as bigger cats. Based on how smaller cats rub on bigger cats when living together, they probably see us as slightly superior kitties but rather clumsy, by cat standards. Bradshaw, in his book *Cat Sense*, rejects the notion that cats bring their prey inside as a gift. Cats, rather, have the tendency to bring prey to a place where they feel safe, but once the feeding begins, they remember—ah, wild meat tastes worse than the chicken-based cat food in the next room.
Cats kill far more birds than most people imagine, and their owners appear to often hold the denialism of a parent unable to accept *their* cat as murderous. In one 2013 study, researchers in the US Southeast affixed “kitty cam” body cameras to cats to monitor their hunting: they returned only 23 percent of prey to the house. As a cat owner, I had assumed the six or seven birds Ronja brought inside her first summer was all she had caught. Each time, I was shocked, but it took a wounded whimbrel, a shorebird, fighting for its life on the living room floor for me to accept the problem. Ronja has the character of a serial killer. About one-third of pet cats, mind you, are like the comic strip character Garfield. For the Garfields, hunting is not worth the effort, or only for the rare occasion. Some breeds are more dangerous than others. But for most cats, either theyve got a killer personality or not: among owned cats, only around 20 percent are considered super hunters, so good at their craft that a single bell around their neck will do little to kill their ambition.
[![cat with dead bird lying on floor](https://hakaimagazine.com/wp-content/uploads/bird-on-floor-freedom-from-cats-1200x905.jpg)](https://hakaimagazine.com/wp-content/uploads/bird-on-floor-freedom-from-cats.jpg)
Domestic cats kill between 1.3 and four billion birds annually in the United States alone (excluding Hawaii and Alaska). Photo by Rodger Tamblyn/Alamy Stock Photo
At the pet store, the shopkeeper told me a single bell merely showed effort on the owners part; at best a bell the size of a marble reduces the cats effectiveness by half, but several studies suggest next to no effect. Larger bells work better but they also make noise if the cat is wandering like a Swiss cow around the house at night, causing stress to the hyper-hearing cat. The shopkeeper told me to try a ruffled collar in addition to a bell. The colorful fabric collar, resembling that of a clown, is the antithesis of camouflage and makes the cat, at least in the springtime, 19 times less effective than an unencumbered cat. In the fall, however, the ruffled collars make the cat only 3.4 times less effective. And the collars sometimes fall off. Another option worn around the neck is a long, colorful plastic bib. This contraption is a “pounce protector,” preventing cats from lowering their heads to the ground. The keto diet is another possible solution. A controlled 2021 study of 355 cats in England found that cats on a grain-free, high-meat-protein diet hunted about 40 percent fewer birds than those eating the low-end dry food.
But none of those strategies prevent cats from attacking bird nests. Friends suggested leashing Ronja in the yard. The American Veterinary Medical Association endorses a policy that encourages cat owners to limit outdoor life to outdoor enclosures, such as cat patios—so-called catios*—*or to being on an *attended* leash, effective if training starts when a cat is young. Icelandic veterinary colleagues have spoken out against cat curfews. “Although some cats, who do not know anything else, accept being indoor cats, there are others who do not handle it and confinement can lead to stress and aggressive behavior,” the Icelandic Veterinary Association wrote in a statement last year. The association does, however, support nighttime curfews, especially in the spring when birds nest, since thats when cats are most effective as hunters. (Research suggests the nocturnal behavior applies more strongly to unowned cats.)
[![cat sitting in an enclosed area of a patio](https://hakaimagazine.com/wp-content/uploads/catio-freedom-from-cats-1200x800.jpg)](https://hakaimagazine.com/wp-content/uploads/catio-freedom-from-cats.jpg)
In Húsavík, where pet cats are banned from being outside, a one-year-old named Freddie Mercury enjoys his cat patio—a catio. Photo by Egill Bjarnason
We decided to keep Ronja inside completely during the nesting season and stopped tolerating her admirable escapes. I bought lots of delicious fish jerky for treats and told her that, in fact, some indoor cats live almost four times as long. She put on excessive weight to prove us wrong.
---
We have always loved and loathed cats. The Japanese maneki-neko—the beckoning cat, with one paw raised and “waving”—symbolizes luck; a run-of-the-kitty-mill black cat signifies ill fortune. Catholic priests burned cats alive during the European witch-hunt era; Islam admires them for cleanliness. Surveys suggest that in parts of Iceland about 50 percent of residents want cats banned from outside. The debate itself is new. People accepted roaming neighborhood cats, never questioning the wisdom, until others began questioning the, pardon the pun, catus quo.
An attitude shift is happening. “The cat curfew has changed the way people think of cats,” says cat owner Röðull Reyr, who has lived in Húsavík most of his life. “When a teenager sees a cat outside today, they appear provoked, as if theyve spotted an unwanted guest in their neighborhood.”
In Australia, two municipalities in Melbourne introduced cat curfews: Monash in 2021 and Knox in 2022. Earlier, in 2015, the country embarked on a mission to cull two million feral cats. From mid-2015 to mid-2018, Australia killed 844,000 feral cats with poison and traps. In Europe, two Dutch law professors, writing in an environmental law journal, argued that allowing free-roaming cats violates the Nature Directives, the oldest European Union legislation on the environment. Citing studies of cats impact on birds, the authors conclude that cat owners must manage their free-roaming cats and “stray and feral cats … must be removed or controlled when they pose a threat to protected species.”
Your browser does not support the video element.
In Japan, the maneki-neko—the beckoning cat, with one paw raised and “waving”—symbolizes luck. Video by VideoLand/Shutterstock
Last November, the town of Akureyri voted to ban outdoor cats entirely as of 2025. Outraged cat supporters all over the country threatened to boycott the towns famous dairy products in protest. A local artist rallied support for the Cat Party ahead of local elections scheduled this past May. So, four weeks before election day, the ruling majority softened the total ban to a nighttime curfew, and the debate keeps going, defined by idiosyncratic fervor.
Environmental protection agencies in Iceland have, so far, avoided the debate publicly, perhaps explaining why the issue remains underexplored. The estimated number of cats roaming the country remains a question mark. In Akureyri, in accordance with local laws, pet owners have registered only 200 cats, a fraction of the total population. Stronger data helps understand the most fundamental questions: by banning cats outside, will the population of birds in Iceland increase? Experts are unsure of the answer, since most cats roam within towns and most birds nest outside them. Will Icelanders enjoy more birds in their backyard without cats? Quite possibly, and that is when the question comes down to our values: a 2021 paper in *Ecological Economics* based on economic data from 26,000 Europeans found neighborhood birds make people as happy as money. A 10 percent increase in bird species in the environment raised life satisfaction about 1.53 times more than a similar proportional rise in income. On the other hand, we release the soothing “cuddle chemical”—oxytocin—when petting a cat, the same enjoyment we get from social bonding with our own kind. Cat ownership is also a proven method for helping the growing number of lonely people to feel connected.
Ronja was the third word my one-year-old son learned to speak after mama and dudda (baby-Icelandic for pacifier). When the cat disappeared one day in December, the family was devastated: there had been a bad snowstorm, and I had closed the window before going to bed, assuming the cat was asleep in the living room. The next morning, there were paw prints in the snow, going in circles below the shut window. After two days Ronja-less, I began leaving work early to walk around town, following cat steps through the snow, like a cartoon detective, into private gardens and parks. Twice, I asked homeowners with an open basement window to go downstairs and check for her. I alerted all community Facebook groups and recruited children to help me. I began assuming she was dead, and was already working on my grief.
I love birds, so maybe Ronjas loss would leave me free of guilt. But I also love Ronja, and I was ecstatic six nights after she went missing, around 2:00 a.m. when she leaped through an open window and strolled into our bedroom. She allowed us to greet her with awkward enthusiasm before moving to *her* corner of the bed. So now, like many cat owners, I exist in a state of cognitive dissonance when it comes to my cat and my environment. But I do keep her inside at night.
&emsp;
&emsp;
---
`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))`

@ -0,0 +1,60 @@
---
Tag: ["Travel", "London", "Public", "Tube"]
Date: 2022-06-05
DocType: "WebClipping"
Hierarchy:
TimeStamp: 2022-06-05
Link: https://www.newyorker.com/news/letter-from-the-uk/riding-londons-unexpectedly-fantastic-elizabeth-line
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: [[2022-06-05]]
---
&emsp;
```button
name Save
type command
action Save current file
id Save
```
^button-RidingLondonUnexpectedlyFantasticElizabethLineNSave
&emsp;
# Riding Londons Unexpectedly Fantastic Elizabeth Line
Just after 1 *P.M.* on January 9, 1863, a smaller-than-average steam train loaded with Victorian dignitaries and other men in tall hats left Paddington Station, in London, and headed east, beneath the city. The worlds first underground railway was three and a half miles long and had been harrowed out of the clay by thousands of navvies, transient workers from Scotland and Ireland, during the preceding three years. The Metropolitan Railway—“The Best, Cheapest, Most Convenient and Expeditious Route”—ran from Paddington, where the great railways entered London from the west, to Farringdon, on the edge of the city. The journey took eighteen minutes. “For the first time in the history of the world, men can ride in pleasant carriages, and with considerable comfort, lower down than gas pipes and water pipes . . . lower than the graveyards,” the *Daily News* reported. The concept was an immediate hit with Londons travelling public, who still had to put up with occasional herds of sheep during the morning rush hour. (It was usually quickest to walk through much of the city). Smoke on the new railway was an issue: a porter was hospitalized on Day One, suffering from the “vitiated atmosphere,” and several passengers were reported to be in an “insensible state” after inhaling fumes. But the future was here. The Underground transformed London in both physical and psychological terms—what it was and what it could be. In 1872, a teen-aged Arthur Rimbaud wrote “Metropolitan” after riding the line:
> Boulevards of crystal rise, crisscross—
> They swarm instantly with the young families of the poor,
> Fed from the fruit-sellers stands—Nothing too rich.
> This is the city!
A shade after 6:30 *A.M.* on the morning of May 24th of this year, the first pair of trains on Londons new Elizabeth Line set off: from Paddington, once again, and from Abbey Wood, at one of its easterly ends. There were no men in tall hats, getting vitiated, just a giddy crowd, ready for some good news at last, standing under umbrellas in the rain. The Elizabeth Line is four years late, wildly over budget, and beautiful as hell. When it is fully operational, next spring, it will run for sixty miles through London, with a fork at either end, connecting Berkshire and Heathrow Airport, in the west, to Essex and Kent, in the east. It is the express train, right through the guts of the city—Bond Street, Tottenham Court Road, Whitechapel—that London has never had. Twenty billion pounds. Two new tunnels, bored for twenty-six weaving miles, under the streets. Ten new stations, with platforms and trains twice the length of standard Tube trains, excavated and somehow placed alongside or under the existing network. Can you imagine? It is the most significant improvement to how people will move around the city in fifty years. Sadiq Khan, the Mayor, who rode the first train out of Paddington, said he was “so excited—like that little boy on Christmas Eve, waiting for Santa.” In the hundred and fifty-nine years between the departure of the first Metropolitan Railway steam train and the opening of the Elizabeth Line this week, the journey time between Paddington and Farringdon shrank from eighteen minutes to fourteen. Now its eight.
“As always, it is the platform of the terminus which seems alone real, and all behind it a mere dream,” George Gissing, a Victorian novelist, wrote of the spreading underground network, in August, 1884. Part of what has been so uplifting about the opening of the Elizabeth Line is that people had sort of given up on it. Crossrail, as the project used to be known, has been on the drawing board of London planners since the nineteen-seventies. Construction began in 2009, which, in the context of Britains recent, turbulent and mostly depressing history, feels like the Mesozoic Age. The line was supposed to open in 2018 but didnt (signalling problems); then the pandemic messed up the schedule again. It was one of those trains that you wish for, staring into the dark of the tunnel, listening for a screech or a rattle that never comes.
In fact, stretches of the Elizabeth Line have been running—empty of people, full of potential, at sixty miles an hour, in five-minute intervals—for more than a year. A few days before the line opened to the public, I joined a tour led by Mark Dewhirst, a senior engineer at Transport for London, at Farringdon, the original terminus of the Metropolitan Railway. Dewhirst was gangly, lightly bearded, and wearing an orange vest. He seemed a little tired but also elated. He explained that it had been necessary to test the line extensively, rehearsing what would happen if a train struck a swan, for example. The tunnels have been designed to last a hundred and twenty years.
Around us, passengers swarmed instantly, rising up from the platforms that Rimbaud saw. Then Dewhirst showed the way down a new set of escalators and into the parallel boulevards of the Elizabeth Line: airy, wide passages, lined with pale concrete and speckled with perforations, to cut the noise. The colors that recur are purple, dark gray, and steel. The lighting is mellow and, according to the designers, conducive. The platforms are deep and long and straight.
As a place to be, the Elizabeth Line is nothing like the Tube, which is brisk, hot, cacophonous—a realm of unsolicited bodily intimacy, bottlenecks, and sudden winds. I asked Dewhirst how he thought passengers would react in a few days time, and he told me to paraphrase his reply, which was W.T.F. “Like, I know Crossrail was expensive and late,” he said. “But wow.” The revolutionary thing about the Elizabeth Line is that it is not a subway at all. Hundreds of thousands of commuters will no longer have to disembark at Londons ring of mainline stations and funnel into the cramped platforms of the Tube. They can ride right into town, or straight through to the other side, if they are in the mood. Dewhirst said that the best comparison for the Elizabeth Line was the R.E.R., in Paris. “Its more than a Tube,” he said. “Its a *mode*.”
On the big day, I joined the line at Liverpool Street, a couple of stations from where I live. A blank wall that I have walked past most days for the previous eight years was gone; in its place, a portal to the new system. I looked down at the floor: the dirty gray of one underground corridor, scuffed by a million feet, gave way to sudden cleanliness and joy, journeys yet unmade. A shaft of bright sunlight fell from a new entrance to the street above. I started taking the Tube to school when I was nine years old. Its a kind of memory palace: the line to choose above the rest (Victoria), the stations where you must ignore the signs (Green Park), the interchanges that are not worth thinking about (anything to do with Bank). To encounter a whole new way of getting across your city—a mode, no less—is enough to change your sense of what is real. The air smelled of unboxed shoes. People were taking pictures of a new kind of horizontal elevator, like a funicular, running up and down beside the escalators, and puzzling at place names such as Seven Kings and Taplow. It was like the bit in Harry Potter when the Hogwarts Express materializes at platform 9¾ at Kings Cross, except the Elizabeth Line runs to Slough.
A couple found each other on an unfamiliar platform and kissed. A boy was carrying a silver “5” balloon, to celebrate his birthday. A man was whistling “Fly Me to the Moon.” Everywhere the line was being ridden on and written upon and joined to the movements of the city for the first time. Another boy, perhaps four years old, took his seat in an exaggerated fashion, rocking himself up and down, and making an older man laugh. The older man was a retired doctor, named Mike Young, who was exploring the line with his companion, John Vaughan, the manager of a medical practice. They were riding the train from the Barbican, where they lived, to Abbey Wood, at the end of the line, a place they had never been.
“Nothing spectacular so far,” Young said, with the practiced deprecation of a Londoner experiencing a twenty-billion-pound railway for the first time. “I like the open trains.” Vaughan approved of the lighting and the air-conditioning. We arrived at the financial district of Canary Wharf in six minutes—a journey that used to involve three Tube lines and two changes. Young warmed up. “This is a revolution,” he said. It turned out that he trained a family doctor who has looked after my children. Between Canary Wharf and Custom House, on the eastern reaches of the Thames, the Elizabeth Line rose to the surface, before plunging again, under the river. Soon there were trees and small hills to look at. Young and Vaughan debated whether to get off and walk around Abbey Wood. “It might become a holiday destination—you never know,” Young suggested. At the terminus, a cleaner was collecting the first detritus—coffee cups—from the gleaming trains. The spring sky darkened briefly. I chatted to a couple of Elizabeth Line staff, who were getting to the end of their first day. Then a passenger was taken ill and they rushed down the platform to help. We swooped back into the city with a slight delay.
&emsp;
&emsp;
---
`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))`

@ -0,0 +1,381 @@
---
Tag: ["Crime", "Con", "US"]
Date: 2022-06-02
DocType: "WebClipping"
Hierarchy:
TimeStamp: 2022-06-02
Link: https://www.trulyadventure.us/conwoman
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: [[2022-06-02]]
---
&emsp;
```button
name Save
type command
action Save current file
id Save
```
^button-TheIncredibleStoryofJodyHarrisConArtistExtraordinaireNSave
&emsp;
# The Incredible True Story of Jody Harris, Con Artist Extraordinaire.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/4ae479e0-7a7e-4123-841f-e02e5fbc93da/ConwomanSS.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/4ae479e0-7a7e-4123-841f-e02e5fbc93da/ConwomanSS.png)
## **SHE POSED AS AN AIR HOSTESS, A PSYCHOLOGIST, BUT MOST OFTEN AS A COP. THEN SHE FELL IN LOVE WITH ONE.**
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/2acab619-97f6-4f51-a1dd-2270d95f81b1/Eyes.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/2acab619-97f6-4f51-a1dd-2270d95f81b1/Eyes.png)
Andrew Lawrence Twining, a 32-year old senior constable with Melbournes Victoria Police, spent his days on his motorbike and his nights home alone. A kind-faced and plump traffic officer, he looked every bit the even hand he was in the line of duty. He was the sort of cop who grew up wanting to be nothing else. He signed up soon after his eighteenth birthday. “A bloody good cop,” according to one of his partners, “one thatd have your back in a tiz.”
While Andrew was jocular and jovial, most would never guess that he was going through a rough patch due, in large part, to his divorce the previous year. His beat partner and closest friend, the lanky, stern-faced Glenn Humble, however, did know about Andrew's troubles.
Glenn, a married father-of-two, didnt have much experience navigating the local dating scene, but he was constantly pushing his younger partner to get back on the horse. “Give it a go, man,” he urged Andrew, one cold morning in December 2005. “What have you got to lose?” Andrew caved and signed up to a dating site called RSVP.
Listing his job on his public profile probably wouldnt fly with the Office of Police Integrity, but it did fill his inbox. He scanned through the messages, grinning. A 25-year old lawyer? A bit too young, he thought, and probably too dull. One too many dealings with prosecutors had left a bad taste in his mouthand he was looking for someone to awaken his sterile life.
Bisexual Aquarian who drinks socially and values good looks. Andrew almost laughed when he read Jodys bio. Her interests: swinging sex, spanking, and handcuffs. Glenns not gonna like this, he thought. But she lived in South Yarra, his beat, down on McFarlane Street. Hes right, though. What have I got to lose?
On a Sunday evening in 2006, Andrew prepped himself for their date at a nearby wine bar. New cologne, quarter-zip, sandy hair combedhe looked like a professor. Andrew, with a long stint in the law under his belt, wasnt often nervous, but her racy bio had him jittery.
Jody Harris, 27 at the time, had wild black hair with bangs cut just shy of her hazel eyes. She wore a sequined dress, a four-carat solitaire diamond on her left hand and a princess-cut pink on the right. She was imposing, but once she sat down, her relaxed demeanor put Andrew at ease. “A Crown lager,” she told the waitress. “Dont bother with a glass.”
After five minutes of conversation, it was clear to Andrew that hed found someone spectacular. And they somehow fit together seamlessly—Jody a Ritalin-fueled, brash-talking ball of energy, Andrew, soft-spoken and stable.
“What do you do for a crust, anyway?” Jody asked, her gaze fixed on him.
“Im a cop,” he said, a smile tugging at the corners of his lips. “What about yourself?”
“Im a flight attendant for Virgin,” she answered, pausing to take a sip from the brown bottle. “Pretty much all domestic routes… Brisbane, Melbourne, Sydney. Do the odd run out to Adelaide, but its not often… thank god!” He laughed.
Later that night, when the two stumbled through the front door of her apartment, he saw the red uniform scattered across the sofa with the luggage tags and name badge on the nightstand.
Jody.
The next day, Glenn couldnt ignore Andrews renewed energy.
“Good time last night?” he asked. Both were sticklers for being up front and not playing games, but the older man cautioned him to wait a while before texting her. Andrew couldnt wait.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/270a911c-f5ad-4f80-8f8c-6169729aed3d/Asset+15.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/270a911c-f5ad-4f80-8f8c-6169729aed3d/Asset+15.png)
Before he even had the chance to tuck his phone away it buzzed.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/98d1e1b5-52bd-45a5-aea9-d1e3bc707f56/Asset+21.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/98d1e1b5-52bd-45a5-aea9-d1e3bc707f56/Asset+21.png)
After the two met again they were inseparable. Pleased as Andrew was that the provocative dating profile rang true, he also quickly figured she was the sort worth taking home to his parents. Over spaghetti and board games at their colonial-style home in Templestowe, she won over his parents. Over the next two weeks, restless nights turned to fancy dinners, which were often paid for by Jody. By Valentines Day, he was ready to spend his life with herthough he remembers her spending habits were a little dizzying at times.
“Forty bucks?” hed exclaimed upon finding the receipt, bursting out laughing. Jody, cross-legged on the hotel bed, looked sheepish.
“Thats right, idiot… you complaining?” She snatched the receipt out of his hands: forty just on condoms.
Also noting her new Carla Zampatti sweater, he decided he wasnt going to rock the nice new boat he found himself in. Andrew was trusting. And, for the first time in months, he felt happy.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/c46b48b4-c341-406b-bd03-5c1bf6002369/Eyes.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/c46b48b4-c341-406b-bd03-5c1bf6002369/Eyes.png)
Jody Harris—whose real name was Jody Pearson-Harding—had a thing for cops.
> “Jody was a gifted con artist,
> a human fuckin hyena.
Seven years earlier, shed pulled up to the gates of Brisbanes Roma Street police complex in a white sedan shed rented. No decals, but it looked the partand so did she. Four trips to a West End uniform shop, each time posing as a different officer, had netted her a full Queensland police uniform. Instead of her normally glitzy garb, shed picked up a sky-blue shirt, jacket, cargo pants, and a peaked patrol hat. When the store clerk, laughing, told her shed need to go to her supervisor for a name-tag, she nodded politely. On the way out she pinched one from the front-of-store mannequin.
Jody was a gifted con artist, “a human fuckin hyena,” as one of the cops who worked her case put it. On top of the kit shed amassed, one bump into a street cop at Main Street had snagged her a badge. Thatd get her past the buzzer, and it gave her an identity. Facing the cop manning the front desk at the Roma Street station, she wasnt Jody anymore. She was Constable Alison White, a country cop down on admin detail from Townsville.
“Bet they keep you busy up there,” the corporal, not much older than her, scoffed. “All crocs and crims, isnt it?”
“I mean, its always nice to get away,” she said with a toothy smile. “But Im here on official business. Whereabouts for permit renewals?”
“Weapons Licensing?” he replied. “Its down the hall on your left.”
Like the rest of her swindles, it was simple but called for a level of outright ballsiness that most people could never summon.
By the time Jody packed up and left the Roma Street station, 90 minutes later, shed worked her way in with no less than five different detectives. All of them were straight males disarmed by her patter and polished looks, and all of them were willing to share details about cases, crooks and court matters.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/c46b48b4-c341-406b-bd03-5c1bf6002369/Eyes.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/c46b48b4-c341-406b-bd03-5c1bf6002369/Eyes.png)
Jody grew up in Tingalpa, a rough part of Brisbane. She sniffed lines, smoked pipes, and popped pills with the best of them. But this high was like nothing she had ever experienced. “If she could dupe police like that,” a different cop would later say, “the banks would prove a cinch.”
But banks didnt capture her interest, at least not at first. Jodys fascination was with the police. As one psychologist later involved in her case put it, she was “obsessed, thanks to a childhood disrupted by the justice system.”
Jody was born in 1978 to a violent father who once struck her in the chest with a broom handle for crying. The incident pushed her mother, Debbie, over the edge; she packed her bags and left, Jody in tow. Debbie later began a romantic relationship with Brisbane Broncos rugby star “Smokin” Joe Kilroy, a man known as much for his off-field antics as his status as a world-class fullback. In 1989, the two were caught trafficking cannabis as part of an undercover sting by Queensland police. Jody was just 11 as she watched officers take her mother away. At 12, she peered on as a judge sentenced Debbie to a six-year stretch at Boggo Road.
“Hardly the grounding for a love of the law,” the psychologist explains. With her mother gone, her life uprooted to a new city, it wasnt long before Jody spiraled into a life of crime herself. At 14, she started with soft drugs, graffiti, and theft. But soon, she found her real love: fraud. She was dialing teachers and other authority figures in her lifegoing so far as to impersonate police by phone. Hauled before judges for dishonesty several times, she was unrepentant.
On Christmas Day, 1993, when she was just 15 and living with her grandparents in inner-city Melbourne, she rang the Russell Street station. Patched through to the 32-year-old sergeant, Brett Bardsley, she fed him a backstory that was complicated but, ultimately, convincing. Claiming to be calling for another policeman friend of hers, she sold Brett on the idea she was the 20-year-old daughter of a prestigious advertising executive. She asked him out for a drink and, “sealing the deal” with a photo of herself in a black, lacy bra, began her first fling with a man in uniform. “She was impeccably dressed and spoke well,” says Bardsley. “She seemed very mature.”
When the two celebrated her would-be 21st with Bardsleys parents, they had no idea she was just 16. When the tabloids caught wind of the fling, the disgraced detective lost his job and moved to the UK. "I think she just had a fixation with me because I was a copper,'' Bardsley told the Herald Sun.
> “I think she just had a fixation
> with me because I was a copper.”
He was right. At the same time Jody was dating him, she had another cop in her crosshairs, one whod go on to Parliament after leaving the force.
“Jody Harris was under a different name and she used to come around, for example, to East Melbourne and Russell Street police stations,” said Jason Wood, now Australias Assistant Minister for Customs, Community Safety and Multicultural Affairs. “I regarded her as a casual acquaintance. I never went out with her \[...\] But she was like a breath of air when every day you had people walking in having been assaulted or robbed to make reports. She was infatuated with all police members.”
Jody was brimming with confidence and hungry for a sense of control over her splintering life—and she seemed to have a vendetta against anyone in the justice system.
Far away in Brisbane, Jodys mother was charting a very different path. After witnessing the murder of a friend in the overcrowded jail, she committed to turning her life aroundand did so, in dramatic fashion. Debbie enrolled in a Bachelors of Social Work. Textbooks and study notes filled her cell, which helped her win the esteem of the parole board. After Debbie walked free on a good behavior bond in 1992, she practiced, for a time, as a social worker and then turned her eye to the law. She later became the first convicted drug trafficker in the country to be admitted to the Supreme Court as counsel.
At age 19, a judge dismissed Jody as an “incorrigible thief.” Eight months after Roma Street, she found herself before the Brisbane District Court facing down 22 charges of fraud and identity theft. Grinning ear-to-ear, she asked for a further 141 accusations to be taken into account.
From an outsiders perspective, this sort of behavior might seem mad. But its clear Jody still had her wits about her. After her release from the Palen Creek Correctional Centre in May 1999, she clung to a low profile for the next seven years: food stamps and minimum-wage work. The Queensland police uniform, which had stayed hidden in her closet during her time inside, stayed stashed behind the designer clothes shed nicked.
Whatever the trigger, she pulled the uniform out in 2006. On Melbournes Eastern Freeway, the 27-year-old pulled behind a Lexus and began flashing her headlights. Soon she pulled alongside and, pointing to the crumbled up uniform on her dash, indicated that the driver should pull over. Alysha Searle, an underslept, overcaffeinated barista six years her junior, complied. Jody, now supposedly a South Yarra rape detective, demanded to see her license.
“I clocked you running that red light back there,” she snapped, scanning over the card as she spoke. “Youve just got to be more careful.”
Before the girl had a chance to protest, Jody faked an incoming call. “Get out of here before I change my mind.”
It wasnt until Searle made it home that she realized the detective still had her license. The next day she saw that roughly $3,000 had been withdrawn from her savings account—enough for a Carla Zampatti sweater, a new Gucci bag, and forty bucks worth of condoms.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/c46b48b4-c341-406b-bd03-5c1bf6002369/Eyes.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/c46b48b4-c341-406b-bd03-5c1bf6002369/Eyes.png)
In March, Andrew dropped his new girlfriend at Tullamarine airport. She was wearing her Virgin uniform and told him she was heading up to Sydney. They kissed goodbye and, freshly-cut keys to Andrews place in hand, Jody told him shed drop round once she was back. They were only seven weeks into the relationship, but things were going well. Jody had asked him all about his charmed childhooda topic he thought boringand, at the same time, she spoke openly about her checkered past. More than open-minded, he found her honesty endearing.
Once Andrew peeled off and faded into the airport traffic, Jody wasted little time swapping the dress out for a pinstriped pantsuit. Instead of a Virgin Blue flight, she boarded a Qantas plane bound for Brisbane and sat in business class. The woman who landed next to seat 3C was Leah Jury, an off-duty flight attendant. “From the moment I sat down beside her I had this really bad vibe,” shed later recount. “She was watching everything I did and just made me feel quite uncomfortable.”
Even perched at the planes front, Jody still didnt fit the archetype of a jet-setting con artist. A beer in her hand and The Sopranos playing on her laptop, her demeanor was anything but slickeven less so when she barked at the woman serving her. “Were all out of Crown, but I can get you something from economy,” the attendant said. “I don't know what they have in economy,” she snapped back. “I've only been in economy once in my life.”
By the time the doors opened and the tropical heat gushed in, Leah was clamoring to get away from the woman beside her. Little did she know that when shed gone to the bathroom Jody had lifted the off-duty flight attendants ID from her handbag. With a ding, the seatbelt sign turned off and Jody turned to her victim one last time. “Would you like this magazine?” she asked. “I'm done with it.” In her hand, a copy of Womens Weekly, dog-eared and doubled over on an article about a con artist.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/4c8f895c-0b97-4894-afde-37cbced16405/cop+2.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/4c8f895c-0b97-4894-afde-37cbced16405/cop+2.png)
No longer just a cop, Jody now began switching job titles on a near-daily basis: on Wednesday, a lawyer; on Thursday, a psychiatrist; on Friday, a flight attendant. She also began toying with disguises and wigs, both for fooling women out of their cards and for posing as them at their local bank branch. While con artists like Frank Abagnale, the real-life anti-hero who inspired Spielbergs Catch Me If You Can, were calculating and methodical, Jody tended to fly by the seat of her pants, to dive into situations and rely on her wits, charm, and boldness to navigate it.
She had wherewithal, one of the key traits of a successful con artist. One time, walking the streets of Sydneys North Shore, she saw a woman trip and smack her head against the pavement. A crowd of concerned passers-by gathered around and Jody pressed her way to the front. It wasnt long before the two were en route to the nearest hospital—a ride which cost the woman $10,500 in stolen funds.
Like Abagnale, Jody was often caught red-handed, but she had a knack for getting away with it. Once pressed by a bank teller for her date of birth, shed steered into the skid. “I dont know,” she barked, acting as if the question, rather than the answer, were dim-witted. “Its on my license, right there.” The teller, taken aback, handed over the cash.
Another time, in Melbourne, shed tried to withdraw money from an account that had been flagged for fraud. The teller hesitated, reading the system alert aloud to her. “Fraud has been done on this account,” she said, eyes fixed firmly in Jodys direction. “Do not give any over-the-counter-transactions without contacting Sunshine branch.” She gave Jody a once over: designer dress, jewelry, and high heels. “Its obvious that youre a trustworthy-looking person,” she said, according to Jody, before handing over the cash.
With Jodys level of confidence comes recklessness. It was only a matter of time before the law caught up to her. Blasting through Sydneys western suburbs in a rental car at twice the speed limit, shed been flagged by a couple highway cops. Squaring up to the officers, she shot them a steely glance as she handed over a different woman's licence; one who looked almost nothing like her. “Send a copy to my address,” shed said dismissively. Soon after, she was back on the road. The owner had had a hard time working out why her licence had been disqualified.
> “With Jodys level of confidence
> comes recklessness.”
With this sort of salesmanship, Jody had little trouble convincing her new beau she could afford to fund her lavish lifestyle, which, by this point, had become theirs. “Im a world-class bargain hunter,” she explain, even after he watched her drop north of six grand on a single outing: $500 on hair extensions, $1650 on a bichoodle pup, and $4000 on a diamond TAG Heuer watch in a single outing. Andrew, still every bit the savvy constable, would prod his friends at the station periodically. “Shes a trolley dolley, mate,” said one of his more straight-shooting mates at the station. “Even they get paid better than us, remember.”
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/c46b48b4-c341-406b-bd03-5c1bf6002369/Eyes.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/c46b48b4-c341-406b-bd03-5c1bf6002369/Eyes.png)
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/798c97c3-5a88-4f81-9cd4-1563f774b4de/Asset+25.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/798c97c3-5a88-4f81-9cd4-1563f774b4de/Asset+25.png)
Jody and Andrew at dinner
Melbourne isnt a city short on date spots but, by the end of autumn 2006, Jody and Andrew had just about run out of ideas. Theyd even got matching tattoos: her name on his right butt cheek, his on her wrist. They snacked on oysters at the $310 per-person, 55th-floor Vue de Monde. Andrew got down on one knee and asked Jody for her hand in marriage. She accepted and, soon after, Andrew was pressing Glenn Humble for honeymoon tips.
“What do you reckon about Greece in November?”
As it happened, Andrew was taking his parents to Greece on vacation, which could double as a kind of honeymoon scouting trip. After months of pulling night shifts, hed earned the right to a European getaway with his parents. For once, it was Jodys turn to drop Andrew off at the airport.
As she did, and on the heels of their engagement and her very real elation, Jody would have had to confront the uncomfortable reality that she was in an emotional bind shed never found herself in before. Keys to his place, easy access to his credit card, even a joint bank account, and yet Jody had never once taken a dime from her now-fiancé. The truth was, she had made the most basic error, as she would later attest: She had fallen for the goofy constable who made her laugh, who accepted and seemed to see through her flaws—or those she revealed to him—and who loved her. She had built a house of cards predicated on the notion that she would be long gone and emotionally uninvested when it toppled down.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/0a6cd4d1-7453-46d8-92b2-d5b6e3f67dc1/Asset+27.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/0a6cd4d1-7453-46d8-92b2-d5b6e3f67dc1/Asset+27.png)
As she dropped him off at the airport, the realization that she didnt want it to end would have hung overhead like an axe.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/c46b48b4-c341-406b-bd03-5c1bf6002369/Eyes.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/c46b48b4-c341-406b-bd03-5c1bf6002369/Eyes.png)
Of the three state police forces Jody ran afoul of, it was, coincidentally, the one Andrew worked for that first realized that there was a serial con woman on the loose. Perhaps spurred toward a destructive path by the precarious emotional situation she now found herself in, with her new fiancé overseas, Jody began to work the city like never before.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/250a5d0f-62a6-47a3-bb11-2e9dd0507e81/host.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/250a5d0f-62a6-47a3-bb11-2e9dd0507e81/host.png)
One Melbourne jewelry store owner, who felt a friendly connection with the businesswoman whod dropped $600 at her shop, agreed to go for coffee at a Moonee Ponds milk bar. It turned out to be an expensive mistake, costing her $76,780 after Jody stole her ID and drained her bank account.
For months, reports of an increase in identity theft had been filtering through to the Victorian Police (VICPOL). Youd have been hard-pressed to guess the cases were linked, much less the work of one woman. The incidents were spread both north and south of the Yarra River, not to mention way east in the small farming town of Warragul. But when a flurry of thefts occurred over a one-week period, all with a matching M.O, it was impossible not to see the connection. So Senior Sergeant Glenn Davies, the head of VICPOLs robbery division, Taskforce Embona, put a call through to one of his rising stars.
“Im not going to lie, Bertoncello,” the chief had said, “Thisll be a hell of a case to crack.” But Senior Detective Paul Bertoncello, an outside-the-box thinker, had the bright idea of getting the media involved. He knew exactly who to call. The Embona detective dialed the Herald Sun news desk and was patched through to crime editor Paul Anderson. "It's like chasing a phantom," Bertoncello complained to the reporter, explaining how the woman he was pursuing went about her cons. "She's using different names and has proved very hard to track down. We find out about a new name every week or so. She regularly changes her appearance she might have blonde hair one time, then red the next, then dark hair. Usually she's heavily made up with lots of large, flashy jewelry."
Anderson knew a scoop when he saw one. The next day, the story ran on the front page of the Sun; commuters would have been hard-pressed to miss its bold red headline: “FIVE STAR STING Phantom conwoman lives life of luxury.”
Jodywho couldnt silence the same outsized ego that had once asked the court to add charges to a rap sheet she thought underrepresented her crimescouldnt suppress a well of pride. Here she was, a former small-time scamster, with her exploits plastered on the cover of one of the nations biggest papers.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/a40b5071-799f-4e5f-8ad0-0fcca1df1ef2/Sign+up+for+TA+newsletter.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/a40b5071-799f-4e5f-8ad0-0fcca1df1ef2/Sign+up+for+TA+newsletter.png)
Less than a week after the story ran in the Sun, and with Andrew still at the start of his Mediterranean sojourn, Jody rang the Embona taskforce and taunted them—an act so ridiculous its hard to read anything into it other than a longing to end her charade without having to bite the bullet and tell Andrew herself. “McFarlane Street,” she said, volunteering her South Yarra address. A quick database search revealed an apartment registered under the name of Jodie Kardinis-Harris.
The officers barreled out of the Prahran station. Ten minutes was all it took to get to Jodys flat and, by that time, the crew had snagged a search warrant off a District Court judge. But when they busted down the door of the apartment, Jody was nowhere to be found. She was on the way to Brisbane, a 19-hour drive. Seemingly deliberately, shed left behind a Virgin Blue outfit, police uniforms, badges, and even photos of herself. Glenn Davies told his crew in no uncertain terms that these werent just clues. They were a middle-finger salute to the Embona taskforce.
On the drive back to the station, the chief could barely conceal his outrage. “Shes fucking teasing us, Bertoncello,” spat Davies. “Get ahold of that journo again and make sure he runs those bloody photos.”
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/c46b48b4-c341-406b-bd03-5c1bf6002369/Eyes.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/c46b48b4-c341-406b-bd03-5c1bf6002369/Eyes.png)
Midway through breakfast with his wife and kids, Glenn Humble nearly bowled over in surprise upon seeing his friends new fiancées face on TV. Dashing to the phone, he dialed the Embona crew to let them know everything he knew their phantom. “This is grand,” Bertoncello told him over the phone. Humble agreed the net was closing in on Jody, but it was hard to share Bertoncellos enthusiasm. Not when next on his to-do list was breaking the news to Andrew, who was still on vacation in Greece.
As Glenn summoned the words to tell Andrew, calls came flooding into police tip-off lines as the women Jody had preyed on divulged details of previously unreported frauds. One woman, Donna Duncan, had been taken for as much as $56,000. Soon, anyone named Jody had a pall of ambiguity hanging over their heads.
*Need to talk ASAP, mate. Jody isnt who you think she is, he wrote.*
Andrew got the news by email. “What the hell?” he exclaimed, scanning the subject line twice before opening it. He could barely believe what he was reading, but a quick internet search confirmed that Jody was, indeed, national news.
Queasy, Andrew continued reading Humbles email.
*\[Fraud Squad detective\] David Lewis has suggested that I change the lock on your house as we both believe she may well drive to Melbourne. She will probably not fly as all airlines and banks are now aware of her picture.*
*David Lewis has asked me to ask you if you are missing any police badges, specifically hat badges or plaques. \[...\] He also wants to know about any markers that could be used to identify her. Scars, birthmarks, tattoos etc.*
*Knowing tattoos would make it easier. Apparently she has the word karma tattooed on her lower back can you confirm this?*
Andrew was crushed. He “hadnt the slightest inkling,” he would later report, that the relationship was “anything short of perfect.” Now he was learning the woman hed committed to building a life with didnt exist. He slumped back on the bed and slowly waded through every word of every article he could find: Jody Harris, lawyer; Jody Harris, surgeon; Jody Harris, seafood entrepreneur. A seafood entrepreneur?
He felt some sense of relief upon seeing the joint account hadnt been touched. Before calling the bank, he dialed in for Embona and was forwarded on to a sympathetic Bertoncello. “I cant imagine how youre feeling, mate,” he said. “Your head must be spinning.”
That was putting it lightly. As the hours ticked through, that initial shock dulled down into a confused mix of resentment and hesitationhe was angry, hurt, but also deeply conflicted. Love wasnt something you could just turn off, and the fact remained that Andrew had fallen in love with Jody.
Bertoncello asked Andrew to write down any information about Jody that might be helpful. Pen and paper in hand, he cast his mind back to the Silverlake and began parsing what he knew to be true from what was likely not. She had opened up with surprising candor about her mother, her troubled childhood and her odd brush with the law. On the other hand, shed obviously never told him about Brett Bardsley, Jason Wood or Roma Street. He had visited her grandmother in Brisbane at one point, and the memory of that lovely afternoon drifted back to him. Was Jody the woman he knew, or was she a complete fabrication? Reeling from the reality of his situation, there was no way to be sure.
The hardest part was yet to come. It was one thing to write down what he knew about the woman he had spent the happiest months with, but quite another to actively participate in bringing her to justice. Bertoncello and the team agreed that, since the mutual bank account had been left untouched, Andrew should try to make contact. “Good luck mate,” Bertoncello had said on their second call. “Youre doing the right thing.”
Fighting a sickly feeling, Andrew made his decision. He was going to take a leading role in helping the police catch his fiancee.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/86a08319-da01-4019-9942-0b261947ea7d/Asset+18.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/86a08319-da01-4019-9942-0b261947ea7d/Asset+18.png)
He sighed, pressed send andlike alwaysJody replied within minutes.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/f0cde970-2f80-4031-be7e-abf08f4a02a2/Asset+17.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/f0cde970-2f80-4031-be7e-abf08f4a02a2/Asset+17.png)
He hesitated. Hed been duped, but he was still processing it all. Despite the anger welling in his chest, as he read her words, how could he not feel a deep pang of longing? Andrew took a deep breath, steadied his nerves and dialed.
He didnt sleep that night. Catching crooks was his job, but now he was maneuvering to catch his fiancée in a sting. By the time the sun rose, Greek time, he and Jody had made a teary pact to meet in Sydney in a week.
He promised her he would come alone.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/76de00d8-ebb1-473f-be6e-910bffdf23ba/Eyes.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/76de00d8-ebb1-473f-be6e-910bffdf23ba/Eyes.png)
Cremorne, a richer part of Sydneys Lower North Shore, fits right in with Jodys bumptious brand. A stones throw from both the Opera House and the Harbour Bridge, its nonetheless a quiet, leafy place of BMWs, California-style bungalows, and white-picket fences. There isnt even a police station.
A great place, in other words, for a con artist and her cop fiancé to hide out. With Andrew due back from Europe in two days time, Jody had arranged to meet with Daniel Raice, a leasing agent, at his Rose Bay office in Sydneys eastern suburbs. Logically, it made sense to keep a low profile, but the seasoned swindlers recent success had been emboldening. One swiped Amex later, she paraded up and down the busy Oxford Street with nothing but a pair of sunglasses to mask her identity. While the New South Wales (NSW) police force was knocking on doors and chatting to hotel managers, she wasnt hiding in any of the usual spots. Instead, she was halfway through a drink, miles away, at the packed Paddington Inn. With Andrew due to join her, there was hope it might all work out. Trust would be hard to rebuild, but Andrew was worth it.
Dressed in a new outfit and slightly slurring her words, Jody hopped in a taxi and barged into Raices Rose Bay office. At first, he didnt notice that he was talking to Australias most wanted crookin fact, neither did most of the other workers in the quiet, second-floor workspace. So, with her head buried in the paperwork Raice had just handed her, Jody didnt actually see when it clicked for Suzanne, a grey-haired office manager. She managed not to gasp aloud but, as she slipped into a backroom and dialed the police, several of her co-workers caught on that something was afoot.
When Suzanne re-emerged, all eyes were on her, and she tried to keep her cool. “Have you got any sort of ID I can photocopy?” she asked, her voice quivering only slightly. Daniel and the others watched on in dead silence. “I need it for a registry check.” Jodys gaze hardened. Both women knew what she was playing atat this point, so did everyone in the room.
“My husbands got it in the car, actually,” Jody replied without skipping a beat. “Ive just got to duck outside.” A thin veneer of civility, just enough to excuse her bolt to the door.
Sirens soon broke the suburban silence. Not the Embona boys, who were far away in Melbourne, but the Rose Bay locals. Spotted by a local hiding outside a nearby McDonalds, Jody dashed off and the patrol officers missed her by a hairs breadth. In the end, theyd find an abandoned car rented under the name of Jody Harris, but not the woman herself, whod slipped down a back alley and escaped on foot.
“Well that certainly was never in the job description,” Suzanne quipped to Daniel and her colleagues. For an older woman, shed held her ground well and enjoyed the new-found reputation of office daredevil. She walked into work the next day feeling like a hero and wasnt surprised at all when her first call of the day was an officer from VICPOL in fact, she made double sure that everyone could pick up on their conversation. “I told her everything,” says Suzanne. “How I picked up on her \[Jody\]. I was even joking about all the diamonds on her fingers. I was on the phone to her for 10 minutes, then she suddenly hung up on me.”
Of course, it wasnt a Victorian officer on the other end of the lineit was Jody.
"I felt like such a fool."
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/778e1ed8-1b49-422b-b7dc-57dbcbdd6cb7/Eyes.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/778e1ed8-1b49-422b-b7dc-57dbcbdd6cb7/Eyes.png)
After news of the run-in at Rose Bay made it back to NSW Police Commissioner Ken Moroney, the states top cop knew he was hot on Jody Harris tail. Over the course of the last two weeks, hed overseen Sydneys end of the sting, and, as the date drew nearer, he instructed the citys Police Area Command (PAC) to liaise daily with everyone: Glenn Davies, the Embona taskforce, Andrew Twining, and even Glenn Humble.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/19eb9b28-90fd-4d00-95af-d4cce3272de5/Asset+16.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/19eb9b28-90fd-4d00-95af-d4cce3272de5/Asset+16.png)
Andrew couldnt help feeling a pang of disgust as he typed it out, queuing for the first leg home from Athens. An intensely private man, it was doubly humiliating that he was required to forward the text on to a private number jointly held by the NSW, Victorian, and Queensland authorities.
Andrew, free for so long from his prior haze of depression, felt that cloud settling over his mind once more—he was fatigued and forgetful. He hadnt had the heart to break the news to his parents. As the pilot announced they were beginning their descent into Melbourne, he dreaded the coming conversation.
On the drive home from Tullamarine, both listened on, ashen-faced, stumped for words until they reached Andrews driveway. They were as heart-broken as he was--maybe more.
“Where to now?” his father had finally asked him, a creaky tinge to his voice that Andrew didnt recognize.
“Sydney,” he replied. “By road.”
Theyd helped him to load up his maroon Holden Statesman; though, truth be told, there wasnt much to pack. With less than 48 hours to the sting, Andrew was soon blasting his way out through the Victorian outback.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/76de00d8-ebb1-473f-be6e-910bffdf23ba/Eyes.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/76de00d8-ebb1-473f-be6e-910bffdf23ba/Eyes.png)
On the morning of 5 July, Commissioner Moroney signed off on a message that went out from Sydney City PAC to a group of over 20 senior officers and battle-hardened undercovers, including several of the Embona boys.
Details confirmed: 0300 hours. 06/06/06. Scruffy Murphys. Chinatown.
Andrew, being a traffic cop, never checked his phone when he was at the wheel, but as he wound his way into Sydneys Inner West he knew what the ping meant. Likewise, the details were already shared with all local police units east of the Blue Mountains. That didnt stop the Rose Bay police division from trying its luck again with 14 hours left on the clock. Acting on a tip-off that Jody was likely holed up in the glitzy Avillion Hotel, Detective Senior Sergeant Despa Fitzgerald burst into reception. There, she learned that a stolen ID had been used to book a room. “We looked at the CCTV and, sure enough, it was Jody,” she said. “Shed left about 20 minutes earlier.”
Night settled over Sydneys Chinatown. The pinch point, an Irish pub on the main thoroughfare, was crawling with undercovers from midnight onwards. Look closely enough at about a third of the pub patrons, pedestrians, and taxi drivers that filled the joint that night, and you might be able to make out the handguns bulging from under their clothing. Andrew thought it ironic. “Sort of the opposite of Jodys dress-up game,” hed joked to Glenn earlier.
As the hours passed and the streets thinned out, anticipation built. Back in Prahran, listening to events unfold, the Melbourne detectives could feel the tension building. Down at the street level, that feeling was tenfoldespecially for Andrew, sitting alone in his Statesman at the corner of George and Goulburn. The clock struck three.
*Lets go, baby. Well drive through the night.*
Andrews fingers were trembling as he tapped out the message to Jody. He hated what he was doing, but it was too late. He glanced out the window toward the Avillion, and he wondered if she was still there. Just then a yellow cab parked up next to him, and out jumped Jody. That same wild, untamed hair, that same piercing hazel gaze hed fallen for. But it wasnt the same. How could it be? Looking into her eyes now, he could see how shed bulldozed her way through dozens of victims, bank tellers, and cops. She was grinning, genuinely glad to see him. It struck him now as a selfish grin.
She hopped in the car. Andrew tried to force a weak smile but, unable to carry through, broke eye contact. “She knew right that minute,” he would recall. Her animal instinct had kicked in.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/1e64cdec-3af1-4e22-b4c0-89ffaf6b41a9/Asset+12.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/1e64cdec-3af1-4e22-b4c0-89ffaf6b41a9/Asset+12.png)
Jody leapt out of the car but didnt make it far. She was swarmed on every side. For optics sake, Andrew was also pinned and handcuffed, and the two were dragged into the back of a squad car. Jody was well aware that Andrew had been the only one to successfully con her.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/3707f388-91c1-4e51-a612-738be8f07eca/Eyes.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/3707f388-91c1-4e51-a612-738be8f07eca/Eyes.png)
A world-class fabulist, the closest Jody ever came to the truth wassurprisingly enoughin the hours that followed her arrest. When a bag of credit cards, recovered from the Avillion, was dumped on the desk in front of her, she displayed a “near-photographic” memory, according to one of the cops who interviewed her. Much to the teams astonishment, she took great pride in reeling off card digits, as well as recounting the tales of how she acquired them.
“Id pickpocketed this girl, Jackie Young, and walked into the bank the next day,” she said, dark eyes lighting up as she spoke. “I didn't even know she was sitting at the front desk. And I went past her to the teller and on the way out looked down and I saw Jackie Young. She works at the bank there, where I took the money from. Her own staff didn't realize. They're a smart bunch in Melbourne, along with their fuckin' police."
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/42b3d14b-d573-4ee7-aecf-e04ae02b6a45/wigs.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/42b3d14b-d573-4ee7-aecf-e04ae02b6a45/wigs.png)
Also on the table were wigs, disguises, police badges and over 100 different ID cards. There were even three American drivers licensesthough Jodie never got around to explaining what she was planning with those.
Jody never bothered applying for bail. When her day in court rolled around in September, she chose not to appear in person or by video-link from her cell. Her barrister entered guilty pleas to 43 of the 141 charges on her behalf, enough for the court to call it a day. The barrister added that her client intended to admit to another 80 counts.
Over time, the judge would hear from nearly three dozen victims and tally Jodys six-month take at $170,000—likely a fraction of her true total. Slapped with a four-year sentence and a $175,000 fine, Jody knew from her first day at the Emu Plains detention facility that shed never really step free from there. Instead, she would get a free ride in a Corrections van either north to Queensland or south to Victoria to face fresh charges.
On Andrews return to Melbourne, an unblemished record did little to protect him. He was suspended, pending an internal investigation, and when a search of his flat turned up an unregistered handgun, a .38 revolver, he was forced to argue in the county court that it must have belonged to Jody. On his computer, detectives also found a document titled “Deceptions of the Heart,” an outpouring of grief about Jodys trickery. Hearing his story, a sympathetic jury acquitted him of misdoing and soon after he was cleared to return to work. Even so, Andrew steered clear of the station for months.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/9f10f6ef-fcac-451e-88e4-12b88d1010f7/Screen+Shot+2022-03-09+at+5.24.19+PM.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/9f10f6ef-fcac-451e-88e4-12b88d1010f7/Screen+Shot+2022-03-09+at+5.24.19+PM.png)
Minimum security was a jarring adjustment for a bon vivant like Jody Harris. An appeal against the length of her sentence was soon knocked back, with a judge telling her she “displayed a continuing attitude of disobedience to the law.” So with no chance of a commutation, Jody figured she might as well apply for transfer down to Melbourne. Nearly a year into her sentence, she penned a letter to Andrew, who was by now back patrolling the streets of South Yarra:
*I adore you Andrew. I am changing daily to be the woman you deserve and will always have in your beautiful life \[...\] I am so happy to move down there to see you, mainly, but also I can start (serving) my sentence concurrent with the one I am doing here in NSW.*
A little cunning, you could say, but her words grow awkward and artless thereafter:
*I know you're probably doing it hard down there, but when you can please, please send me some money for my shoes.*
She never did hear back from Andrew, who was working things out with different counsellors. But her pleas were enough to win over Corrective Services NSW, who palmed her off to the Melbourne Magistrates Court for arraignment in 2008. At that point, hardly the model prisoner, she chose to front court in a T-shirt with the phrase “Doin Time.” Another 96 charges, another $160,000, and another no-nonsense magistrate, Peter Mealy, who asked whether she intended to plead guilty to all counts. “All of them,” she snapped back.
In his testimony before the Melbourne sentencing hearing, Andrew was clear-eyed about what had happened.
“I was in love with a person who misrepresented who she was entirely,” he said, “in regards to her employment, her honesty, her criminal background, her criminality, her history of impersonating police and associating herself with police.” Over her years in the Victorian system, he declined to drop by to visit, and Jody never sent him another letter.
By the time Jody made it home to Queensland, her tour of Australias penal institutions had started to eat into her thirties and it seems something had changed about her by then. Intent to work the right side of the law for once, and once more following in the footsteps of Frank Abignale, Jody began running counter-fraud tutorials for both VICPOL and the Australian Federal Police (AFP), teaching the cops to ferret out talented con artists like her. She also expressed remorse for her actions for the first time since her arrest at Scruffy Murphys. The presiding judge, a far softer touch than the first two, afforded her sympathy for her upbringing, and she also nodded along as she heard of the recycling programs Jody had begun running in prison, her peer support work, and how shed embarked on a Master of Koori studies to more deeply explore Australias Aboriginal communities. "Your cooperation and change in attitude are to be commended, encouraged, and rewarded," the judge said before signing off on a 12 month suspended sentence--a slap on the wrist, legally speaking.
Finally released from the clutches of the Australian judicial system, Jody stepped outside of the Brisbane District Court, and on to Roma Street, no less, where she had conned a whole police station.
It is up to her to decide who she is going to be.
![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/3707f388-91c1-4e51-a612-738be8f07eca/Eyes.png)![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/3707f388-91c1-4e51-a612-738be8f07eca/Eyes.png)
*SANDY MILNE* is a freelance journalist based in Perth, Australia. He has written for The Guardian, SBS, and WIRED magazine.
*For all rights inquiries, email team@trulyadventure.us*
\*\*\*
## If you liked this story, you may also enjoy…
![Starlet-Spy - She was an international superstar. She was a world-class spy. The untold story of Josephine Baker, espionage agent.](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/1633539765152-3Q6P0NL4OE6ZACJ3SW0G/Josephine+Baker+6.png) ![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/1633539765152-3Q6P0NL4OE6ZACJ3SW0G/Josephine+Baker+6.png)
She was an international superstar. She was a world-class spy. The untold story of Josephine Baker, espionage agent.
![Death of a (Really Good) Salesman - He was a powerful executive at some of the best-known companies in the world. then he started robbing banks. the meteoric rise and dramatic fall of steve carroll, the high-flying corporate executive who wanted it all.](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/1629760779686-TULMWBDA0Q3KONUBUNGJ/Death+of+a+Really+Good+Salesman.png) ![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/1629760779686-TULMWBDA0Q3KONUBUNGJ/Death+of+a+Really+Good+Salesman.png)
He was a powerful executive at some of the best-known companies in the world. then he started robbing banks. the meteoric rise and dramatic fall of steve carroll, the high-flying corporate executive who wanted it all.
![Biker girl - A successful female lawyer by day gets swept into the underground world of a motorcycle gang by night. Her double life turns into a violent collision of worlds.](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/1565102788904-58YBZAV1XC2ZOMLP6K4J/biker+bar.jpg) ![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/1565102788904-58YBZAV1XC2ZOMLP6K4J/biker+bar.jpg)
A successful female lawyer by day gets swept into the underground world of a motorcycle gang by night. Her double life turns into a violent collision of worlds.
![Every living creature - When a massive Caribbean volcano erupts, the islands residents flee, leaving their beloved animals behind. As pets and livestock are engulfed in ash and penned in by lava, waiting to perish, three brave souls risk death and evade the law to save every last one. A modern-day Noahs Ark.](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/f931117e-5761-46ae-8925-9dac728f1d4f/Screen+Shot+2022-03-30+at+11.22.25+AM.png) ![](https://images.squarespace-cdn.com/content/v1/5a238ba10abd049ac5f4f02c/f931117e-5761-46ae-8925-9dac728f1d4f/Screen+Shot+2022-03-30+at+11.22.25+AM.png)
When a massive Caribbean volcano erupts, the islands residents flee, leaving their beloved animals behind. As pets and livestock are engulfed in ash and penned in by lava, waiting to perish, three brave souls risk death and evade the law to save every last one. A modern-day Noahs Ark.
&emsp;
&emsp;
---
`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))`

@ -0,0 +1,133 @@
---
Tag: ["Society", "UK", "Royal"]
Date: 2022-06-05
DocType: "WebClipping"
Hierarchy:
TimeStamp: 2022-06-05
Link: https://www.newstatesman.com/culture/2022/06/the-modern-monarchy-of-prince-william
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: [[2022-06-05]]
---
&emsp;
```button
name Save
type command
action Save current file
id Save
```
^button-ThemakingofPrinceWilliamNSave
&emsp;
# The making of Prince William
![](https://www.newstatesman.com/wp-content/uploads/sites/2/2022/06/202223-Prince-William-Main-797x1062.jpg)
Illustration by Anja Slibar
In Abergavenny, Wales, 31 years to the day since he performed his first public engagement in Cardiff, I find Prince William. It is St Davids Day, and he is with his wife, Catherine. In 1991, he came to Wales with his parents, a yellow daffodil in his buttonhole. Diana wore a bizarre hat that looked like a felt spaceship. Did she yearn for space travel? William wore grey flannel trousers and a blue blazer with brass buttons, like the major in *Fawlty Towers* but small.
Abergavenny is *en fête* to meet him. In the covered market, fabric birds hang from the ceiling and Welsh dragons stare from flags. The traders look expectant in the way people do when they are trying not to. The market fills with middle-aged women, the elderly and babies. The babies hold daffodils like charms.
People have arranged themselves, without any prompting, into lines for a military-style inspection. Considering that we are dressed for a market that is, casually we look very weird. An official appears. He frets. He wants the appearance of a real market and, if we stand and gawp which feels like the natural thing to do the police will expel us. He says we must mill about, as if pretending William is not here though presumably we may pretend to come upon the prince by surprise. “Anyone here bought stuff?” he asks. We hold up shopping bags. “You can stay,” he says. “The rest of you: get buying stuff! I want to see everything sold!” One or two people turn round and panic-buy Welsh cakes.
William enters with his wife and his ­protection officers, who are disguised as wealthy landowners. They are dressed to match William, who wears blue trousers, a blue shirt and a green waxed jacket. There is a daffodil in his lapel. The prince is good at costume. I see him as a man flying up and down the class system, mirroring us as best he can, a sort of Mr Benn or Eliza Doolittle: in a beanie hat, a flat cap, a hard hat that spells WILLIAM, in a crown. He has, in his time, been a farm worker, a soldier, a helicopter pilot and a banking intern. He is also, quite literally, a toy. You can buy a Prince William figurine, one eye sliding carelessly down his face; or a doll in his wedding finery; or a life-size cardboard cut-out.
***\[See also: [Trouble in the House of Windsor](https://www.newstatesman.com/culture/books/book-of-the-day/2022/04/a-royal-history-of-scandals)\]***
When he approaches the greengrocer, people cheer as if to italicise a memory: *he approached the greengrocer*. Then he is opposite us and mouthing, “Hi, how you doing?” It is Joey Tribbianis greeting in *Friends*, delivered in what Henry Higgins would call “Etonian mockney”. Williams voice is getting posher as he ages he is on an opposite trajectory to the Queen but he is as much a victim of pop culture as anyone. He wouldnt last long if he sounded like the lead in a Terence Rattigan play. He lifts his hand and gives a tiny wave with his fingers, as if playing a tiny piano. During public engagements, his grandmother moves like a ship, while his father resembles an unwilling ­participant in a comic opera. Here, William seems more complicated, both easy and ­uneasy: part soldier, part hostage. People hold up dogs for blessings.
The starting point for Prince William, says the actor Hugh Skinner, who plays him in the Netflix comedy *The Windsors*, “was speaking as poshly as I possibly could”. Skinners William is a Disney prince, a kind of gilded lifestyle coach, and the actor expresses that by “pretending Im in *Hamlet* or *Dynasty*, and then eating Haribo”.
“A large part of it is having fun with the space between what we know and what we imagine,” Skinner tells me. “If William eats a burger, he eats a burger. But if its reported in a tabloid, its He Eats a F\*\*\*\*\*\* Burger!.” Skinner is right: its a life writ not in water but in ink, one where William exists somewhere between the ideal and the reality. While filming, Skinner says he would wonder what the real William was doing that day.
Monarchy is an anachronism, or should be. A century after most of Europes monarchies fell, ours still hangs on. At 96, Elizabeth IIs approval rating is 75 per cent. Prince Charless is only 50 per cent, but he is peevish and he hurt his first wife. Prince Williams is 66 per cent, a number which suits him. His role is to solve a riddle: to advocate for a just and happy ­society he has chided Bafta, of which he is president, for its lack of diversity while being one of the worlds pre-eminent examples of inherited power.
William is 40 this year: as his father shunts his wider family into sidings, his elder son is the future. Charles projects a crabby Hanoverian grandeur but he is 73, a placeholder king. It will be King William who must ­navigate the path between stability and progression.
What I call the Bafta dichotomy a prince chiding another institution for its lack of diversity suggests that people can want two entirely different things at the same time. The only convincing argument for monarchy is that it protects us from worse things. Perhaps we think that, with our comparative freedoms, we can afford a monarchy if it is superficially humble and visually pleasing? I think it is a feint which damages everyone it touches but I am in the minority, at least for now. Sixty-one per cent of the British public approves although it collapses to 31 per cent among the under-25s, of whom 41 per cent want an elected head of state. Still, time is on Williams side: he has centuries of custom to draw on.
There has not been an unkind ­biography of William he has not seemed to merit it but one feels pity when the hagiography is so fervid and consistent. *William & Kate: The Movie* (2011), a dramatisation of their romance, is gruesome. The many books Penny ­Junors *Prince William: Born to be King* is the most perceptive tend to take on the rhythms of religious observance: adoration; sympathy; love. A monarch is a pre-Christian object, a god, really, though one to be sacrificed at the end.
Williams early life was a tragedy in shape. He had a father who was all boundaries and a mother with none. Diana told her biographer Andrew Morton that she tried to kill herself when she was four months pregnant by throwing herself down the stairs at ­Sandringham House, and that the Queen found her. William was born at a time to suit his fathers polo engagements: “We had to find a date in the diary.”
In the early stories William was rude like a god: a real boy, but then he had a real mother who loved him not the ghost, atrophied by tragedy. His nickname at nursery school was “Basher Wills”. He was so naughty at Prince Andrews wedding to Sarah Ferguson he stuck out his tongue, dragged his cousin down the aisle and left with his sailor hat askew the Queen suggested a stricter nanny. She had to [run to stop him jumping](https://www.youtube.com/watch?v=-rFzC31Q82w) under the carriage wheels as the bride and groom left.
Diana told Morton that, when he was four, William had said: “Youre the most selfish woman Ive ever met. All you do is think of yourself.” When asked where he had heard this, he said, “Oh, Ive often heard Papa saying it.” According to Dianas healer Simone Simmons, he once pushed his mother over. Penny Junor relates the time Prince Charles introduced him to Bob Geldof. “Hes all dirty,” said William. “Shut up, you horrible boy,” said Geldof. “Hes got scruffy hair and wet shoes,” said William. “Your hairs scruffy, too, said Geldof. “No, its not,” said William. “My mummy brushed it.” He was a tiny Princess Margaret. When he was naughty, he wasnt punished; neither parent was the type. Diana would laugh or shout (both can be ignored), while Charles hid in the flower beds like a character from a Nancy Mitford novel.
William went to boarding school aged eight to Ludgrove, then Eton and changed. He was kinder. Diana called him “my wise little old man” and he rescued her in instalments, or tried. He placed tissues under the bathroom door when she cried. After his parents separated in 1992 (he was ten), he said he hoped they would be happier. He bought her chocolates when James Hewitt betrayed her, and flowers after her 1995 interview with Martin Bashir, even though he was furious that she had exposed Charless adultery. He told Diana he would reinstate her HRH status when he became king.
***\[See also: [How the Queen's sense of duty prevailed in an age of individualism\]](https://www.newstatesman.com/politics/uk-politics/2022/06/how-the-queens-sense-of-duty-prevailed-in-an-age-of-individualism)***
It was a wild childhood. Diana told Morton that, when Charles heard his son missed him at school, he sent long handwritten faxes and had trays of Highgrove plums delivered. When William was 13, and had photographs of the models Cindy Crawford, Christy Turlington and Naomi Campbell on his bedroom walls, Diana invited them for tea. She practised the disguises she used to escape the press, and so her sons would find her wearing wigs. According to Simmons, Diana spent the night of a 1997 BBC debate on the future of the monarchy repeatedly pressing redial, voting for abolition, while William asked if the palaces could become homeless shelters.
I wonder, given all this, why he is sane, and the answer is likely the staff. He was raised by a succession of housemasters and police protection officers, who explain his ability to seem plausibly normal. The archetype is clear, however, through every biography: William is the parental child. These children have parents who cannot fully emotionally nourish them, and so become caregivers to their parents instead. The parental child is typically empathetic, controlling, private and untrusting; they tend to terrible anger when the burdens placed on them grow too large. When a photographer took pictures of Catherine without a bikini top on in France in 2012, William was, a palace source said at the time, “almost the angriest Ive ever seen any human being”. The couple pursued the magazine who printed them, and were awarded £92,000 in 2017. The only job William chose for himself was as an RAF search-and-rescue pilot, flying into tragedy: a saviour.
After Diana died, he looked hunted: he was 15 and hid under baseball caps. His mother had said he was “appallingly embarrassed” and “uncomfortable” about his status, and her death magnified it. In a 2019 BBC documentary, he described it as “a pain like no other pain… you know that in your life its going to be very difficult to come across something that is going to be an even worse pain than that”.
It was rumoured that William didnt want the crown, so much so that he had to deny it in [his 21st birthday](https://www.youtube.com/watch?v=5JwJwiGBZxc) interview. “Its not a question of wanting to be, its something I was born into and its my duty,” he told the Press Association. “Wanting is not the right word. But those stories about me not wanting to be king are all wrong.” He was appalled by “Wills Mania”, which began when he was 16 and on a tour of Canada. His father had to coax him out of his room, to greet screaming girls.
William studied geography at St Andrews University he switched from history of art (who needs it when you own the paintings?) as well as how to be normal in the bourgeois style that is his settled self. He also learned to do things for himself. (In the film version of Mike Bartletts *King Charles III*, William, in his mid-thirties, eats toast when anxious, which feels right.) He shopped at the supermarket I dont think his father, who travels with his own toilet seat, ever has and got 12 GSCEs to Charless five O-levels. He wrote his university essays in the police station, like someone longing to take up as little space as possible.
William obtained a 2:1 with a dissertation on the impact of indigenous fishing practices on the coral reefs of Rodrigues, and fell in love with Kate Middleton, his first serious girlfriend, an anti-Diana as careful and controlling as he. “Were like sort of ducks,” he said in [their ITV engagement interview](https://www.youtube.com/watch?v=2hPi38x90ks&t=337s). “Very calm on the surface with little feet going under the water.” No one has ever accused him of having an imagination but, to be fair, he doesnt need one, being the object of the collective imagination. He loved the closeness of the Middleton family two parents, two sisters and a brother, like the Boleyns and the fact that they ate together. It must have seemed exotic after the mediums and the plums. He called Mike Middleton “Dad”.
In the 21st-birthday interview, William tried to explain himself. “Im not an over-dominant person,” he said. “I dont go around and expect everyone to listen to me the whole time. I like to be in control of my life because I have so many people around me I can get pulled in one direction and then the other. If I dont have any say in it, then I end up just losing complete control… I could actually lose my identity.” One of the ways he exerted control was by taking up royal duties relatively slowly. The tabloids, with customary lack of sensitivity to the individual (they save their reverence for the institution), called it laziness: Workshy Wills.
If he is very controlling, he can also be very kind. One story is notable: Sandy Henney, his fathers press secretary, resigned in 2000 after an error over Williams 18th birthday photographs which wasnt her fault. She told Junor that Charles never thanked her for restoring his reputation, but that William telephoned her repeatedly and as he took his A-levels to say how sorry he was that she was leaving.
William talks about problems with the environment, conservation, mental health but never, explicitly, their causes: he cannot oppose the government even if he wanted to. But he is among the most litigious royals. When he thought his phone was being hacked and it was, from 2005, by the *News of the World*: 35 times to Catherines 155 times he went to the police.
William was furious that Bashir tricked his mother into the *Panorama* interview by faking bank statements that suggested people close to her were selling stories. “The interview,” he said [in a statement last year](https://www.youtube.com/watch?v=BkrWg7P8s8c), “was a major contribution to making my parents relationship worse and has since hurt countless others. It brings ­indescribable sadness to know that the [BBCs](https://www.newstatesman.com/tag/bbc) failures contributed significantly to her fear, paranoia and isolation that I remember from those final years with her.”
His lawyers at Harbottle & Lewis are kept busy. Skinner told me that in *The Windsors* there was a scene with William and Catherine in a sex shop. “We had to hold a dildo. The lawyers said, You can hold it, but you cant brandish it like a weapon.’” I wonder if this, too, is the prince exercising his control.
William rarely gives print interviews, but I was offered help by Kensington Palace for this profile: interviews with three men who know him well, in so far as he is knowable, and information about his movements. This information was later rescinded, apparently due to Covid-19.
The former Conservative leader William Hague, who runs the couples Royal Foundation, thrills with affection as he talks over Zoom. He calls “the convening power” of royalty “almost a unique thing in the world”, and describes how excited foreign dignitaries are to meet royalty, compared with mere politicians. Perhaps obliviously, he describes an anxious William. He calls him “practical. He really wants to achieve results. Hes very anxious that it is not just a show.” Hague says he never set out to chair the Royal Foundation; he was charmed into it, incrementally.
It is obvious that Charlie Mayhew, who runs the conservation charity Tusk, of which William is patron, really cares about him. “I often found myself having to pinch myself in remembering how young he still was \[when they met\]. He always seems much older than his years.”
Mayhew travelled to Africa with William and Harry in 2010, and tells a story about how they rode off into the bush and laughed at him because his horse wouldnt move, and had to be led by the nose. He says the conservation community admires Williams work in persuading [Chinas President Xi Jinping](https://www.newstatesman.com/tag/xi-jinping) to ban the domestic ivory trade. “There was a lot of ragging,” Mayhew says of that 2010 trip. “I always felt they \[the brothers\] were looking out for each other. I strongly believe” and he volunteers this: I do not ask “that bond is strong enough that this ­recurrent issue will sort itself out.”
Im not so sure. A parental child will protect a vulnerable sibling but on their own terms, and those terms will not include emotional exposure. Last year Harry told Oprah Winfrey: “I was trapped, but I didnt know I was trapped. Like the rest of my family are, my father and my brother, they are trapped.” Its impossible to know whether this is true if even they know whether it is true: monarchy is narcotic or if Harry is projecting.
Either way, it was a betrayal. Harrys line is that Williams office briefed against him and his wife for small advantage, but Harry tends to paranoia. Williams line is that ­Harry and Meghan upset the staff, and that is unacceptable. In *The Palace Papers*, Tina Brown notes that Meghan was sixth on the call sheet for *Suits*, while Harry is sixth in line to the throne. She believes they meet there, thwarted, seeking to change their fates. The brothers exist on similar emotional lines to the Queen and her ­disappointed sister, Margaret: if one child must be good to be a sovereign, the other must be bad not to be.
***\[See also: [Prince Harry and Meghan Markle show the triumph of bohemian values over bourgeois ones](https://www.newstatesman.com/world/americas/north-america/us/2021/03/prince-harry-and-meghan-markle-show-triumph-bohemian-values-over)\]***
Seyi Obakin, the CEO of the youth homelessness charity Centrepoint, of which William is patron, tells me a story piteous enough to be a fairy tale: of a prince who wanted to be a real boy for a night. In 2009 they slept on the street near Blackfriars Station in London to mark the charitys 40th anniversary. Usually, Obakin says, supporters are offered a “controlled” experience of rough sleeping. I dont ask what that is: a gazebo? But William said he wanted to do it “properly”.
“We found ourselves in a cul-de-sac that looked quiet,” says Obakin. “There were some big wheelie bins to cover yourself up. \[If not\] they \[passers-by\] spit at you, they throw things at you. He poked fun at me all night long, because I dont do cold very much.”
The next morning, they walked to Soho, Williams beanie hat down over his eyes. “Not a single person recognised him,” Obakin says. He must have loved it, I say. Obakin laughs: “Yah.” He says William is an effective fundraiser and that the young people who use Centrepoints services love him. One girl was silent with shyness, but they spoke for five minutes in the end. She later told Obakin that William had told her, to make himself seem ordinary, “Imagine me naked.” Im not sure hed say that now.
If you are a republican, you wait for it all to unravel. If you are monarchist, you hope the contortions are effective: that your god survives. Williams [Caribbean tour](https://www.newstatesman.com/society/2022/03/prince-williams-caribbean-tour-was-always-doomed-to-fail) in March was disastrous, drawing calls for atonement and reparation for the transatlantic slave trade, as well as greater independence from Britain. The optics William and Catherine standing in a Land Rover in formal clothes, and clutching hands with Jamaican children through a wire fence were too truthful; they were empire-core. This was not the “moderniser” prince who posed for *Attitude* magazine in 2016, who urged Bafta to diversify.
William released a swift statement of retreat, acknowledging that the tour had brought the Commonwealths future into “sharper focus”: “In Belize, Jamaica and the Bahamas, that future is for the people to decide upon.” The message was timely, but it expressed a congenital weakness. Monarchy is an ebbing dream: one day it will be an imprint on a wall. The dream is not a universal one, and for now William holds it up almost alone. That is the indelible image I have: the solitude of a boy writing his essays in a police station.
Perhaps even this is spin. “Ill be in the public eye all my life,” he has said. “I cant hide who I am because Ill be found out.” I wonder now if he wrote that himself. I think of Henney telling Junor: “If you ask him a personal question he will be as honest as he wants to be, but you will never get down, thank God, into the real root of William, because thats how he protects himself.” And then I think of ­Abergavenny, and how it doesnt matter who William really is, because we have invented him from the material to hand.
When William has gone, Abergavenny feels like a slowly deflating ­balloon: a town returning ­sadly to itself. I wander round the market, collecting testimony from people who spoke to him. The woman at the hat stall, wearing Welsh national dress, clutches the dregs of her delight. “He thought they were wigs, not hats! He said, Oh wigs! I said, They are hats, not wigs!’” The lady at the chocolate stall says ­Catherine asked if her husband is named Gareth. How did she know? Is it magic? “It says ­underneath, Delicious delights made by ­Gareth,’” she explains. “They were happy with those.”
“He was interested in the Welsh cheeses,” says the woman at the cheese stall, offering the small scoop that his favourite cheese is actually a Swiss cheese. He cant speak Welsh, either, but a woman who spoke Welsh to him tells me, “He takes it all very seriously.” The next woman speaks the royal hagiography: that the people in the palace serve us. “Hes got,” she says keenly, “such a servant heart.”
Outside I find an elderly woman weeping by the pub. She is standing with her son who brought her here: two soft faces with bright blue eyes. Her love tumbles out of her, unstoppable, as if William or what he represents for her freed something. “He just moves me,” she says. “It wasnt fake, it was true. They are so humble. Thats it. I wouldnt put myself out there for many people, but he would. It made my day. It made my life.”
I have watched William for a year and, like that woman, I think he will be an effective king when his father dies (Charles will not abdicate), though not an interesting one. I dont think you can be both. A prince must be a mirror, and this woman loves the William of her invention. Other people will have other ideal princes, and he will let them.
***\[See also: [New York's hipster wars\]](https://www.newstatesman.com/ideas/2022/05/new-yorks-hipster-wars)***
&emsp;
&emsp;
---
`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))`

@ -0,0 +1,159 @@
---
Tag: ["Society", "Road", "Safety"]
Date: 2022-06-05
DocType: "WebClipping"
Hierarchy:
TimeStamp: 2022-06-05
Link: https://www.newyorker.com/news/our-local-correspondents/when-cars-kill-pedestrians
location:
CollapseMetaTable: Yes
---
Parent:: [[@News|News]]
Read:: [[2022-06-05]]
---
&emsp;
```button
name Save
type command
action Save current file
id Save
```
^button-WhenCarsKillPedestriansNSave
&emsp;
# When Cars Kill Pedestrians
[![New Yorker Logo](https://downloads.newyorker.com/projects/shared/svg/tny_logo_black.svg)](https://www.newyorker.com/)
![Street curb](https://downloads.newyorker.com/projects/2022/220602-danyoung-car-crashes/images/opener/curb.png)
A boys death launches a movement to end pedestrian and cyclist fatalities in New York City and beyond.
June 2, 2022
On the afternoon of October 8, 2013, in the last moments of his life, twelve-year-old Sammy Cohen Eckstein, of Park Slope, Brooklyn, was walking to after-school soccer practice near his apartment on Prospect Park West when he lost control of his ball. It rolled into the busy southbound street, and he went after it. The driver of a car in one lane hit the brakes. The driver of a van in the next lane did not. Later, he said hed seen only a ball, not a boy.
“Sammy didnt yet have his growth spurt,” his mother, Amy Cohen, said. “He was small for his age. This is why he didnt survive.” Apart from the funeral, to which nearly a thousand people came, she spent the following days under the covers, as her husband, Gary Eckstein, took the lead in caring for Sammys devastated older sister, Tamar. Their son had been a popular figure in the neighborhood, game to debate climate change and Yankees pitching with all comers. A random accident—thats what people told them. Sleepless, Amy began to wonder how random Sammys death really was. Not long after shiva ended, she forced herself to walk to the corner where Sammy had been killed, which had also been a corner where hed grown up playing. Raising a radar gun borrowed from a neighbor, she aimed toward Prospect Park West.
Drivers on this street go too fast, she used to warn the children. Now, at a little past 5 P.M., the hour her son was killed, she tracked just how fast, recording her findings on a legal pad. Almost no driver kept to the thirty-mile-an-hour speed limit. Sometimes they went over forty. By chance, the City Councils transportation committee would soon be holding a hearing about a bill to cut the speed limit in residential neighborhoods to twenty miles per hour. Amy, Gary, and Tamar had decided to testify, and Amy wanted to bring hard evidence along with her grief.
At the hearing, after Amy and Gary presented data theyd gathered, Tamar, then fifteen, was the last to speak. She read a letter that she had written to her brother after his death: “At camp this summer, for the first time in our lives, we were separated for four weeks. It was really hard. I kept expecting you to be there, and you werent.” She took shallow breaths and read quickly, with little inflection. “Now I am going to have to live my whole life like that.” The transportation committee tended to be skeptical of measures that inconvenienced drivers. But, when Tamar spoke, the city councilman Brad Lander, who represented the Park Slope area, recalled, “You could feel the change in that hearing.” Several council members wept, among them James Vacca, the chairman of the committee, who said, “Im going to remember this day for as long as I live.” But tears didnt magically change the speed limits. The bill was tabled, representatives moved on to other topics, and the Cohen Ecksteins retreated back home.
A few days later, though, Amys phone rang, and on the other end was Caroline Samponaro, who had heard about the familys testimonies. Samponaro was, at the time, the deputy director of a nonprofit called Transportation Alternatives, which sought to make New York City streets friendlier to non-drivers. Samponaro asked if her group could assist Amys family, perhaps by connecting them to legal counsel. Right away, Amy grasped that what she needed instead was the company of other families who could understand what hers had lost. In the fog of the early mourning days, another mother, Amy Tam-Liao, had called her to say that, two days before Sammys death, her three-year-old daughter, Allison, had been killed by a man driving an S.U.V. in Flushing, Queens. That weekend, Tam-Liao and her husband, Hsi-Pei, visited the Cohen Ecksteins, and the parents found comfort—small but not nothing—in telling one another that their childrens deaths had not been their fault.
At Amys suggestion, Transportation Alternatives staff members compiled a list of grieving families they had worked with in the past, and over the next three months Amy made her way down it. She talked to Mary Beth Kelly, whose husband, Henry, was killed in Chelsea by a man driving a police tow truck as they were biking home; to Dave Shephard, whose fiancée, Sonya Powell, was killed in the Bronx as they walked across the street; to the Gansons, whose lives were upended when Hutch Ganson was run over as he walked one of his daughters to the subway; to Anna Kovel and Greg Merryweather, whose nine-year-old son, Lucian, was killed by the driver of an S.U.V. in Fort Greene a month after Sammy died. In February, 2014, more than twenty people who had lost family members to traffic violence gathered for the first time at the Chelsea office of Good Shepherd Services, a nonprofit where Amy Cohen worked as an administrator.
One attendee was Dana Lerner, whose nine-year-old son, Cooper Stock, had been run over and killed four weeks earlier outside the familys apartment on the Upper West Side. “I was in a state of agony. I could barely stand up,” she told me. “I went into this meeting and people started hugging me, and I realized, Oh, my God. There are other people.” Debbie Kahn, whose only child, Seth, was killed while walking with the right-of-way in Hells Kitchen, said, “It was like we found our home.”
At long tables in a drab conference room, the families began to talk, and quickly they saw that what they could take from one another went beyond emotional support. Individually, several had come to a realization not unlike one Amy had after her testimony at the City Council hearing: that challenging the status quo of traffic deaths required people working in concert. At their second meeting, those whom Amy brought together would name themselves Families for Safe Streets, positioning their fledgling organization against an epidemic that most Americans dont see.
In the nineteen-tens, when cars were becoming commonplace in the United States, their right to dominate the road was fiercely contested. Newspapers ran articles denouncing drivers for hitting pedestrians, and police sometimes had to rescue such drivers from mobs baying for blood. During the following decade, the number of fatalities per year doubled, reaching thirty thousand in 1929. There were no driving tests, lane markings, traffic lights, or stop signs on streets, which had long been public spaces where children played. Drunk adults drove. Children drove, too. Cars killed thirteen hundred people in New York alone in 1929—still a record for the city. The majority of victims in New York City, then as now, were pedestrians. Grassroots protest movements coalesced, their leaders arguing that the speed and power of cars foretold a public-health crisis—a point driven home by posters of mothers holding lifeless children. But the automotive industry had a better-funded counter-campaign to make high body counts acceptable to the public.
As the historian Peter Norton writes in his book “[Fighting Traffic](https://www.amazon.com/Fighting-Traffic-American-Inside-Technology/dp/0262516128),” starting in the nineteen-twenties, the National Automobile Chamber of Commerce, the leading lobbying group for car manufacturers, persuaded editors to publish its pseudo-statistical “news reports” on car crashes, which spread the idea that “jaywalkers”—a pejorative for people from rural areas who didnt know how to navigate city streets—were responsible for their own injuries and deaths. Auto clubs sponsored street shows in which jaywalkers were lampooned by clowns and convicted in mock trials held by children. This industry campaign helped to bring about what Norton calls a “social reconstruction of the street,” in which pedestrians were taught to accommodate cars, not the other way around. A new school of urban designers, called highway engineers, refashioned cities to push pedestrians and cyclists further to the margins. Meanwhile, media coverage of car crashes grew less critical of drivers, and a sense of fatalism began to envelop the consequences of traffic collisions, which are typically called “accidents,” suggesting that no one is to blame and nothing can be changed. (Plane crashes are not described in the same way.) By centurys end, cars had grown progressively larger, better insulated from the feedback of the surrounding environment, and safer for the people inside them. Those on the outside were less lucky. The U.S. automotive lobby resisted regulations enacted in Europe that made cars and trucks less lethal, and, by 2018, the number of pedestrian and cyclist deaths per kilometre in the United States was more than four times higher than in the U.K., Germany, the Netherlands, and Denmark. Among the most vulnerable are older adults, who in 2020 made up twenty per cent of killed pedestrians, and people who live in low-income neighborhoods where there has been little investment in safe road design.
Between 2010 and 2019, as the number of U.S. drivers or passengers who died in collisions held fairly steady, deaths of those on bikes rose thirty-six per cent, and deaths of those on foot nearly doubled.
More children died from traffic violence in the twenty-tens than from any other cause.
In the months after Sammy died, Amy Cohen learned that other people in her co-op could handle the recycling pickup for the building, that long walks helped, that chatter about other childrens high-school-admissions anxieties didnt. She also learned the correlation between car speed and survival. The average pedestrian, if struck by a car moving at forty miles per hour, has about a fifty-per-cent chance of survival. If the car is going twenty miles per hour, the pedestrian has more than a ninety-per-cent chance. Had the van that hit Sammy been moving just a little bit more slowly, Amy believed, her son might still be alive.
In 1997, Swedens parliament encoded this connection between speed and mortality in a groundbreaking package of legislation called Vision Zero, whose reforms promised to save lives by slowing down traffic. At the time, Sweden already had one of the worlds lowest per-capita traffic-death rates, but among Vision Zeros premises were that any death as a cost of transportation is unacceptable; that drivers, cyclists, and pedestrians are fallible; and that street design should lessen the consequences of human error. Before long, Swedens traffic deaths were halved, and leaders elsewhere in the world were paying attention. As 2014 began, Amy joined other street-safety advocates in lobbying to bring Vision Zero laws to New York City. That February, the newly elected mayor of New York, Bill de Blasio, became one of the first U.S. municipal leaders to take whats become known as the Vision Zero pledge. The pledge commits a citys leaders to policies aimed at eliminating traffic fatalities and serious injuries within a certain time frame—in New York City, by 2024. Fifty-one other local governments have since joined Vision Zero.
Speed limits are paramount to slowing down drivers, but road design matters, too.
Curb extensions give pedestrians more space on sidewalks and reduce the time it takes to get across the street. Rubber bollards and speed bumps slow down cars as they turn.
Letting pedestrians start crossing the street before the cars around them get a green light saves lives, too.
In 2020, despite deepening knowledge about how to build safer streets and a pandemic-related decline in car traffic, more pedestrians in the U.S. were killed than at any time since 1989. At some point, almost everyone in this country is a pedestrian.
Good road design grasps the psychology of drivers.
Straight, wide lanes encourage drivers to speed. But S curves called chicanes force drivers to decelerate in order to follow the bends.
Protected bike lanes separate cyclists from moving traffic by using barriers like a line of parked cars.
Serious street redesign is not cheap. According to the citys Independent Budget Office, the de Blasio administration, in the first six years of Vision Zero, spent an average of a hundred and ninety million dollars per year on road redesign. But the payoff was a drop in the death toll. In 2018, two hundred and six people were killed in traffic, a record low for New York City. Then de Blasios commitment waned, COVID\-19 broke out, and progress stalled. In 2021, a banner year for cycling in New York City and elsewhere, two hundred and seventy-three people died—fourteen more than in the year Vision Zero was adopted.
![](https://downloads.newyorker.com/projects/2022/220602-danyoung-car-crashes/images/spots/bikerack.jpg)
In early meetings of Families for Safe Streets, Amy Cohen and the others recognized that their losses bestowed upon them a bleak kind of narrative power, and they thought carefully about how to use it. The prospect of performing their grief publicly was brutal. But, in similar movements—among them Amsterdams Stop de Kindermood (Stop Killing Children) campaign of the seventies, which turned that city into a bike idyll—mothers, bearing an anguish poignant to the public, had proved effective as victims. After some discussion, F.S.S. members decided that their first fight would be to lower New York Citys default speed limit from thirty miles per hour to twenty.
Reducing that speed limit first required a change in state law—a challenge in New York, where, as in many other states, leaders have long prioritized the swift movement of cars and trucks over pedestrian and cyclist safety. In the spring of 2014, Amy and the other F.S.S. members began making trips to Albany to lobby state legislators, carrying smiling photos of their lost ones and wearing matching T-shirts with the name of their new group. Transportation Alternatives staff had trained them in public speaking, but the officials they met, some receptive and some not, cautioned that changing laws usually took years. As infuriating as Amy and her colleagues found this lack of urgency, they ultimately accepted—bitterly—that a twenty-mile-per-hour default speed limit wouldnt happen that year. A compromise of twenty-five miles per hour found a crucial ally in Sheldon Silver, then the speaker of the Assembly. In a meeting with Amy and her colleagues, he confided that he had lost his mother in a car crash. In June, four months after F.S.S. started campaigning, both chambers of the state legislature voted in favor of a bill that ultimately slowed down thousands of miles of New York City streets.
The bill-signing ceremony took place in a sparsely decorated hall in the Javits Center. Aaron Charlop-Powers, a twenty-nine-year-old whod thrown a blazer over his F.S.S. T-shirt, spoke on the groups behalf. One reason he had been picked to be at the podium was that he could usually tell his story without breaking down. In 2010, a bus in the Bronx had hit and killed his mother, Megan Charlop, a community organizer. “Failure is waiting for someone to be killed to reduce the speed limit or redesign the intersection. Failure is my mother being run over and the bike lane being painted on the street a week after,” he said, adding, “We hope you never join our group.”
More members kept coming, though, among them the mother of Mathieu Lefevre, a thirty-year-old cyclist who was killed at an intersection in Williamsburg by the driver of a crane truck. An officer told the media that Lefevre had run a red light. Video that later emerged showed the driver turning into Lefevres path without signalling, slamming into him, and dragging him across the intersection. The driver was not charged. Dan Hanegby, also in his thirties, was fatally run over on his bike by the driver of a bus running parallel to him in Chelsea in 2017. Police told reporters that he had “swerved” into the bus. Surveillance footage from a nearby store showed nothing of the kind. Amy started working with Hanegbys wife. In 2019, Mario Valenzuela, a fourteen-year-old, was killed in Long Island City when a truck driver overtook his bicycle and veered in front of him. Police inspectors obtained video showing that the boy had the right-of-way; nonetheless, they attributed the cause of the crash to “cyclist error.” The Valenzuela family joined F.S.S.
Aaron Naparstek, a journalist who has meticulously investigated such wrongful deaths for Streetsblog, a transportation-focussed Web site that he founded in 2006, notes a chilling consistency in New York City pedestrian and cyclist fatalities: police investigators rarely conduct interviews with anyone other than the drivers and passengers of vehicles. Victims on foot or on a bicycle are often in no condition to provide statements about what happened, and evidence that might challenge drivers accounts goes uncollected. Steve Vaccaro, a personal-injury attorney, said, “If theres video of the crash, it gets overwritten. If there are skid marks, theyre washed away. If there are eyewitnesses, they disperse and cant be found again.” Many victims families lack the resources to track down video footage, conduct their own investigations, hire lawyers, or otherwise redress the narrative asymmetry. Predictably, the dead are the ones who get blamed. “Nobody ever looks at the car as a weapon,” Naparstek said. “The basic rule that I discovered over the years is if you ever want to murder someone in New York City, do it with a car.”
![](https://downloads.newyorker.com/projects/2022/220602-danyoung-car-crashes/images/spots/car_white.jpg)
Street-safety advocates call the tendency to sympathize with drivers “windshield bias”—a predisposition that Tara Goddard, an urban-planning professor at Texas A. & M. University, noted has deep roots in American life. “The way weve set up our society and our land use and transportation systems, its very difficult to get by in the U.S. without a car,” she said. “So, even if its unsafe on an aggregate level, and even if you dont enjoy day-to-day travelling and being stuck in traffic, its still the best of bad options. Subconsciously, we have to justify what were doing to tolerate it.”
Eric Gonzalez, the Brooklyn District Attorney, has long been interested in how the justice system can help prevent car fatalities. He believes that police officers are too ready to imagine that they could have been the driver in a collision with a pedestrian or cyclist. Yet, even when investigations are rigorous, less than two per cent of city crashes in which the drivers are sober result in criminal charges—despite a law on the books in New York City for the past eight years that makes killing or injuring a pedestrian or cyclist who has the right-of-way a criminal misdemeanor. Gonzalez blames a prevailing legal standard that prevents drivers who hurt or kill someone from being held criminally liable unless theyve made at least two mistakes, such as being distracted and driving through a red light, or texting and speeding. And, even when this rule of two is met or exceeded, claims tend to be civil. “The way the law has developed,” Gonzalez says, “even when a driver is extraordinarily reckless, the courts have said you cant attach a criminal mens rea to the conduct.”
Today, fifty-five per cent of New York City pedestrians killed are hit at intersections. Amy Tam-Liaos three-year-old daughter, Allison, was one of them. After Allison died, the police secured dashcam video showing her and her grandmother stepping hand in hand into the crosswalk with the right-of-way. The police issued two traffic tickets to the driver who killed Allison, Ahmad Abu-Zayedeh, but he later contested them at the New York State Department of Motor Vehicles. An administrative judge threw out the tickets in a proceeding that lasted less than a minute. Families of victims are not included in such hearings, and the fact that a girl, exuberant and beloved, had died under the tire of the driver never came up.
The single chance that most families have to participate in a government inquiry about what happened to the person they have lost comes at what is called a D.M.V. fatality hearing: a bureaucratic reckoning of the circumstances and the conduct of the driver. But many F.S.S. members say they were never notified of their family members hearings. Amy Cohen was determined not to miss Sammys, and, having attended other such hearings with F.S.S. colleagues, supposed she was better prepared than most for the distressing event when the day arrived, twenty months after he died. But that June morning, seated at a small table in a cramped conference room at the Manhattan D.M.V. office, she had to steel herself to look into the face of the person seated opposite her: Luis Quizhpi-Tacuri, a twenty-four-year-old construction worker and the driver who killed her son.
Luis seemed to her apathetic as he mumbled answers to the presiding judge, who grew irritated at his incomprehensibility. The judge was gentler with Amy. Shed once had a run-in with him after a hearing to which shed accompanied another victims mother. The judge had prevented the mother from speaking, and afterward Amy yelled at him that protecting a driver from the pain of what hed done was “unconscionable.” This time, the judge granted Amy the floor. Doing her best to stop her voice from wobbling, she told Luis that she understood that he did not intend to kill Sammy, and that she wasnt angry anymore.
After her son died, she had read a draft version of the drash that he had been writing for his upcoming bar mitzvah. Through the story of the estranged brothers Jacob and Esau, hed decided to explore why he was readier to criticize than to understand. “I find it really hard to forgive people,” hed written. “So I decided I would look into why that might be.” Amy was determined to forgive Luis, but, as she told the judge, she didnt want Luis to exit the room having faced no consequences for taking Sammys life. In the end, the judge suspended Luiss license for six months.
Last month, in the kitchen of a Queens apartment whose bedrooms he sublets, Luis told me that, long after he knelt and held Sammys hands while they waited for the ambulance to arrive, he kept seeing the boys face when he rode the subway. “This boy had a future,” Luis said. Sirens give him flashbacks of how he took it away. On the afternoon of Sammys death, Luis had been driving down Prospect Park West to pick up tools for a job that started early the following day. As he approached the intersection, the light turned green and he proceeded, thinking little of a small bump he felt until he heard pedestrians screaming. “Every time I see an accident nearby or feel the car jump, I start to shake,” he said, clasping his hands. “I feel like crying. I get chills.” He hasnt been able to afford a therapist. His parents back in Ecuador tell him to forgive himself, but had he not started attending church, he thinks, he would never have found a way to live with his guilt. Luis was raising three children of his own when he hit Sammy. Hes waiting until the younger ones are a bit older to share the full story of why he gets emotional when reminding them to take care on city streets.
![](https://downloads.newyorker.com/projects/2022/220602-danyoung-car-crashes/images/spots/pedestrian.jpg)
Many drivers summoned to fatality hearings follow their lawyers advice not to express the extent of their shame because apologies may be used against them in civil court. Since Amy quit her job and started volunteering full time for F.S.S., three years after Sammys death, she has supported restorative-justice practices that would bring more honesty and accountability to the post-crash process. But she is more drawn to work that keeps people out of fatality hearings in the first place. In 1980, Candace Lightner, who lost her daughter to a drunk driver, founded Mothers Against Drunk Driving, an organization that helped to halve the number of U.S. drunk-driving fatalities by the end of the century, in part by leading a fight to raise the drinking age and lower the threshold for blood-alcohol levels. The MADD model reinforces one of Amys most closely held convictions: that improvements the public ascribes to “cultural” changes are, more often than not, created by changes in policy.
On Gerritsen Avenue, a broad thoroughfare in southern Brooklyn, culture and policy met headlong. Weekend drag races down the avenue were a neighborhood tradition, and, from 2009 to 2018, nine people died and more than two hundred were injured on the street. Nonetheless, the community board representing the surrounding area resisted safety remedies that the Department of Transportation proposed. New York Citys fifty-nine community boards are its most local level of government, and, with few exceptions, the D.O.T. consults them before starting work on a redesign. Because bike lanes and projects that slow down streets or repurpose space reserved for cars often come at the cost of free neighborhood parking and a communitys desire for self-control, resistance is frequent—and effective. The D.O.T. overrides community-board objections only a handful of times each year.
In the case of Gerritsen Avenue, it took two grave crashes and a civil suit against the city to get a street redesign under way. After a driver going more than fifty miles an hour hit and permanently disabled a twelve-year-old boy, his family successfully sued the city. In 2016, the New York Court of Appeals upheld a jury decision finding the city liable for failing to fix a speeding problem it had known about for years. That same year, another young cyclist was fatally wounded, and the department at last began narrowing the street by installing a turning lane and a bike lane. As city engineers started work, they found the tires of their vehicles slashed. A few months later, D.O.T. construction workers who felt threatened by residents had to request security from the local precinct. Since the safety redesign was completed, in the fall of 2018, there have been no fatalities.
Nonetheless, some of those who live nearby resent the changes to the street and complain about city leaders overengineering their behavior. This line of argument about local and personal autonomy is one that Amy and other F.S.S. members have also heard during a long campaign for more automated speed enforcement. The threat of tickets from speed cameras has been shown to reduce crashes, and having more of them in a city is the sort of policy shift that can change entrenched habits. In 2014, when the Department of Transportation began camera enforcement in select school zones as part of a pilot program that F.S.S. had backed, speeding plummeted by sixty-three per cent. Yet drivers dislike being spied on when speeding, and when the pilot program ended, in 2018, state politicians declined to continue funding it.
Amy was always relentless with legislators, but by that year she had learned to stay composed, having put behind her a few episodes in Albany in which she had erupted in rage. All the measured conversations werent getting much speed enforcement, however. So, on the first day of summer, she, Amy Tam-Liao, and other F.S.S. members put on their matching T-shirts, grabbed their signs, and made a human chain at rush hour in front of Governor Andrew Cuomos New York City office, upon which some of them were handcuffed and jailed for blocking traffic. In August, they protested for nine hours at the Bay Ridge office of a state senator who had pulled his support. At months end, Cuomo issued an emergency order to reactivate the existing cameras. The following year, he signed a bill enabling the city to expand the program to seven hundred and fifty school zones.
When the cameras were back in operation, speeding in some school zones declined ninety per cent.
![](https://downloads.newyorker.com/projects/2022/220602-danyoung-car-crashes/images/spots/car.jpg)
Tamar Cohen Eckstein, who graduated from Oberlin College in 2020 and is now a preschool teacher, admires her moms advocacy. But she and her father prefer to watch the battles from a distance. “Its hard to be so vulnerable with strangers,” Tamar said. When Sammy was alive, weekends had been for family bike rides and learning to ice-skate backward at the rink in Prospect Park, not four-hour bus trips upstate to lobby. Shes still hurt by a memory of a day when she and her mother were snapped at by a hostile legislator. “I dont know how my mom does it, frankly,” Tamar said.
Before speaking to the public or lawmakers, F.S.S. members harden themselves by reminding one another that they are “putting a face to the numbers.” Amy said, “Grief experts say you have to let the pain out, and I figured that if Im going to let it out I might as well let it go to good use.” But, as adept as she has become in front of a microphone, an uncertain quality tends to come over her when shes asked to speak off script about her son.
Although demoralization is constant in this kind of advocacy, she and her colleagues—friends now, really—try to buoy themselves by remembering that the successes translate to lives saved. One victory came after they joined other advocates in an effort to improve Queens Boulevard, whose reputation as one of the deadliest streets in the U.S. had come up at the very first F.S.S. meeting. Between 1990 and 2014, a hundred and eighty-five people died on the road, among them a young assistant teacher named Asif Rahman. In 2008, he was biking to meet his mother, Lizi Rahman, after work when the driver of a freight truck ran him over. Afterward, Lizi wrote to City Council members, borough officials, and newspaper editors, pleading for a bike lane on the boulevard. She made no progress until she joined F.S.S. and met people like Mary Beth Kelly, who had her own story of fruitless advocacy for bike lanes after her husband had been killed. Before long, Lizi was no longer attending Queens Boulevard community meetings alone. Beginning in early 2015, Amy, Mary Beth, and other F.S.S. members helped Lizi galvanize support for a hundred-million-dollar proposal from the D.O.T.: a major redesign of the boulevard that included a bike lane.
Ninety-seven per cent of U.S. streets on which pedestrians are struck and killed have three or more lanes.
The greater the crossing distance, the greater the peril to pedestrians. Adding more raised safety islands to the middle of hectic arterial roads like Queens Boulevard saves lives by dividing the crossing into shorter intervals.
Adding medians and trees gives drivers a sense that they are moving down smaller, neighborhood streets—an illusion that prompts them to slow down.
The traffic lulls created by the pandemic have inspired local governments around the world to reconceive public space and reconsider the supremacy of cars. The mayors of London and Paris, for instance, dramatically reduced the number of motor vehicles in their cities centers, and many U.S. mayors blocked cars from certain streets, giving them over to pedestrians and cyclists. In one sign that concern for non-drivers might extend beyond the pandemic, the U.S. Department of Transportation recently earmarked five billion dollars over the next five years to help states and cities redesign dangerous streets.
But much of the work ahead will depend on grassroots advocacy, some of which will be done by Families for Safe Streets, new chapters of which have begun springing up around the country. A chapter in Portland, Oregon, has been focussing on state highways, where the majority of the regions traffic fatalities occur. Nashville-based members are scrutinizing the two per cent of streets where sixty per cent of the citys pedestrian injuries and fatalities occur—arterial roads with little space for walking. Last year, a chapter in Texas successfully lobbied to require drivers to stop, not just yield, for pedestrians who are crossing with the right-of-way. Philadelphias chapter helped bring speed cameras to a twelve-lane road where four relatives of an F.S.S. member were killed while crossing the street. And, in the Bay Area, F.S.S. members helped to persuade the state legislature to pass a speed-limit law and keep a portion of Golden Gate Park car-free. The chapters leader, Aly Geller, said of the F.S.S. movement in California, “You cant turn away from it as a politician anymore.” She added, about Amy, “She is a lot of peoples hero for good reason.” Amy tears up when she hears talk of herself as a national figure. This years Seder was the first since Sammys death that she felt like cooking for, a reminder that what she tells new members of her group—that the boulder theyre carrying may lighten a little over time—might actually be true. But, she said, “I wish I didnt have to do this.”
Amy is currently campaigning for the passage of the Crash Victim Rights and Safety Act, a set of eight bills in the New York State legislature that would, among other things, require drivers to leave cyclists at least three feet of space when passing them from behind, insure that family members of victims are kept better informed by the police and D.M.V., and let New York City lower its default speed limit to twenty miles an hour. The latter bill is called Sammys Law. After four bills passed in the State Senate last year, the Assembly adjourned for the summer before bringing any of them to a vote. This session, Amy has been trying to get them across the finish line, securing the endorsement of more than a hundred organizations, including hospitals and environmental-justice groups.
Last month, she, Amy Tam-Liao, and two dozen other F.S.S. members took a bus to Albany to find additional allies at an annual conference led by state legislators of color. At the capitol that Saturday afternoon, Amy and her colleagues converged with other F.S.S. members from around the state in a brightly lit exhibit hall where hundreds of activists, union officials, corporate executives, and state bureaucrats set out brochures on folding tables and prepared to expound on the urgency of their particular cause. As veteran F.S.S. members spread out in search of support for the street-safety bills, they were trailed by new F.S.S. members, trying to learn.
In a din of overlapping voices, Amy approached a peppy woman from the Assembly speakers office and began her pitch. “My name is Amy Cohen, and my twelve-year-old son was killed eight years ago in a car crash.” She held up the photograph of Sammy that she has brought to rallies, vigils, and meetings for these past eight years: dark hair just long enough to curl at the ends, braces hed looked forward to getting rid of. It was taken a few days before he died. As she asked for the speakers support, the smile on the staffers face faded, and Amys peers grew still, allowing themselves to be observed. On the ride back to New York City, some of them were so drained that they slept.
Reëntering the city, the bus driver let off a couple of people at 178th Street and Park Avenue in the Bronx, where, in the surrounding three blocks, forty-two crashes have left one person dead and sixty-three people injured in the past year. It was dark by the time the driver opened the doors at the final stop, Grand Central Station, where, in the surrounding three blocks, fifteen recent crashes have left one person dead and nineteen people injured. The members grabbed their backpacks, gathered up half-empty bags of chips and some clementine peels to use as compost, and alighted into a blare of car horns and the blithe clamor of a midtown Saturday night. They would reconvene at the station a few weeks later to embark on another day of lobbying in Albany. See you soon, they told one another, before taking the photos of their loved ones back home.
An earlier version of this article misstated the consequences for the bus driver who killed Dan Hanegby, and misstated how many miles of New York Citys streets were affected by the reduction of the speed limit in 2014.
&emsp;
&emsp;
---
`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))`

@ -0,0 +1,5 @@
[[Youtube]]
# [YouTube](https://www.youtube.com/watch?v=Z92JMtftDxk)
<iframe width="560" height="315" src="https://www.youtube.com/embed/Z92JMtftDxk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

@ -71,7 +71,7 @@ All things related to personal Finances.
&emsp; &emsp;
- [ ] [[@Finances]]: Transfer UK pension to CH 📅 2022-06-29 - [ ] :moneybag: [[@Finances]]: Transfer UK pension to CH 📅 2022-06-29
- [x] [[@Finances]]: Closing accounts with [[hLedger]] 📅 2022-01-28 ✅ 2022-01-22 - [x] [[@Finances]]: Closing accounts with [[hLedger]] 📅 2022-01-28 ✅ 2022-01-22
- [x] [[@Finances]]: Set up 2022 & CHF 📅 2022-01-23 ✅ 2022-01-22 - [x] [[@Finances]]: Set up 2022 & CHF 📅 2022-01-23 ✅ 2022-01-22

@ -9,7 +9,7 @@ Priority: "Low"
Status: "In-progress" Status: "In-progress"
StartDate: 2021-08-12 StartDate: 2021-08-12
DueDate: 2022-12-31 DueDate: 2022-12-31
NextReviewDate: &RD 2022-05-31 NextReviewDate: &RD 2022-09-30
TimeStamp: 2021-08-12 TimeStamp: 2021-08-12
locations: locations:
CollapseMetaTable: yes CollapseMetaTable: yes
@ -73,9 +73,9 @@ Repository of Tasks & To-dos regarding life style.
&emsp; &emsp;
- [ ] :swimming_man: [[@Lifestyle]]: Re-start swimming 📅 2022-05-31 - [ ] :swimming_man: [[@Lifestyle]]: Re-start swimming 📅 2022-06-30
- [ ] [[@Lifestyle]]: Re-start [[@Lifestyle#polo|Polo]] 📅 2022-06-30 - [ ] :horse_racing: [[@Lifestyle]]: Re-start [[@Lifestyle#polo|Polo]] 📅 2022-06-30
- [ ] [[@Lifestyle]]: Continue building [[@Lifestyle#Music Library|Music Library]] 📅 2022-06-30 - [ ] 🎵 [[@Lifestyle]]: Continue building [[@Lifestyle#Music Library|Music Library]] 📅 2022-06-30
&emsp; &emsp;

@ -76,7 +76,7 @@ Keeping personal projects in check and on track.
- [ ] Refaire [[@Personal projects#Chevalière|chevalière]] (Bastard & Flourville) 📅 2023-12-31 - [ ] Refaire [[@Personal projects#Chevalière|chevalière]] (Bastard & Flourville) 📅 2023-12-31
- [ ] Continuer à construire un petit trousseau d'[[@Personal projects#art|art]] 📅 2023-02-21 - [ ] Continuer à construire un petit trousseau d'[[@Personal projects#art|art]] 📅 2023-02-21
- [ ] Caligraph & frame life mementos 📅 2023-06-30 - [ ] Caligraph & frame life mementos 📅 2023-06-30
- [ ] Continue [[@lebv.org Tasks|lebv.org]] 📅 2022-06-28 - [ ] :fleur_de_lis: Continue [[@lebv.org Tasks|lebv.org]] 📅 2022-06-28
- [ ] Acheter une [[Voitures|voiture]] ⏳ 2022-07-31 📅 2022-12-31 - [ ] Acheter une [[Voitures|voiture]] ⏳ 2022-07-31 📅 2022-12-31
&emsp; &emsp;

@ -48,17 +48,17 @@ style: number
&emsp; &emsp;
```dialogue ```chat
left: Boubinou left: Boubinou
right: Mel-mo right: Mel-mo
titleMode: all titleMode: all
messageMaxWidth: 40% messageMaxWidth: 40%
< ohlala, i am so sick in my tummy < Boubinou | ohlala, i am so sick in my tummy
# Boubinou looks full of beans # Boubinou looks full of beans
< i need to go home! < i need to go home!
delimiter delimiter
> I can smell a lil' rat! Somebody does not seem to want to finish her French class > Mel-mo | I can smell a lil' rat! Somebody does not seem to want to finish her French class
< heho < heho
< I am sooo sick! It happens everytime i forget to take my pill. < I am sooo sick! It happens everytime i forget to take my pill.
< Pass me the biscuits!! < Pass me the biscuits!!
``` ```

@ -225,6 +225,7 @@ Paris, Zürich, London
- [ ] :gift: :ring: [Bijou Ours](https://www.tous.com/): [Gold Sweet Dolls Bracelet | TOUS](https://www.tous.com/gb-en/gold-sweet-dolls-bracelet/p/815911150) - [ ] :gift: :ring: [Bijou Ours](https://www.tous.com/): [Gold Sweet Dolls Bracelet | TOUS](https://www.tous.com/gb-en/gold-sweet-dolls-bracelet/p/815911150)
- [x] :gift: 💍 earrings (lou yetu), calepin nrf ✅ 2021-02-28 - [x] :gift: 💍 earrings (lou yetu), calepin nrf ✅ 2021-02-28
- [ ] :gift: :womans_clothes: Fashion - [ ] :gift: :womans_clothes: Fashion
- [ ] 🎁 👚 Vintage Chanel bag
- [ ] :gift: :womans_clothes: French designer - [ ] :gift: :womans_clothes: French designer
- [ ] :gift: :womans_clothes: Mulberry, black top with pearls - [ ] :gift: :womans_clothes: Mulberry, black top with pearls
- [ ] :gift: :books: Livre - [ ] :gift: :books: Livre

@ -237,7 +237,8 @@ sudo bash /etc/addip4ban/addip4ban.sh
#### Ban List Tasks #### Ban List Tasks
- [ ] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-06-04 - [ ] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-06-11
- [x] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-06-04 ✅ 2022-06-04
- [x] [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-05-28 ✅ 2022-05-28 - [x] [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-05-28 ✅ 2022-05-28
- [x] [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-05-21 ✅ 2022-05-21 - [x] [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-05-21 ✅ 2022-05-21
- [x] [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-05-14 ✅ 2022-05-14 - [x] [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-05-14 ✅ 2022-05-14
@ -249,7 +250,8 @@ sudo bash /etc/addip4ban/addip4ban.sh
- [x] [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-04-02 ✅ 2022-04-02 - [x] [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-04-02 ✅ 2022-04-02
- [x] [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-03-26 ✅ 2022-03-26 - [x] [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-03-26 ✅ 2022-03-26
- [x] [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-03-19 ✅ 2022-03-18 - [x] [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix 🔁 every week on Saturday 📅 2022-03-19 ✅ 2022-03-18
- [ ] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list 🔁 every month on Saturday 📅 2022-06-04 - [ ] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list 🔁 every month on Saturday 📅 2022-06-11
- [x] 🖥 [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list 🔁 every month on Saturday 📅 2022-06-04 ✅ 2022-06-04
- [x] [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list 🔁 every month on Saturday 📅 2022-05-28 ✅ 2022-05-28 - [x] [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list 🔁 every month on Saturday 📅 2022-05-28 ✅ 2022-05-28
- [x] [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list 🔁 every month on Saturday 📅 2022-05-21 ✅ 2022-05-21 - [x] [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list 🔁 every month on Saturday 📅 2022-05-21 ✅ 2022-05-21
- [x] [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list 🔁 every month on Saturday 📅 2022-05-14 ✅ 2022-05-14 - [x] [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list 🔁 every month on Saturday 📅 2022-05-14 ✅ 2022-05-14

@ -72,7 +72,8 @@ All tasks and to-dos Crypto-related.
[[#^Top|TOP]] [[#^Top|TOP]]
&emsp; &emsp;
- [ ] 💰[[Crypto Tasks#internet alerts|monitor Crypto news and publications]] 🔁 every week on Friday 📅 2022-06-03 - [ ] 💰[[Crypto Tasks#internet alerts|monitor Crypto news and publications]] 🔁 every week on Friday 📅 2022-06-10
- [x] 💰[[Crypto Tasks#internet alerts|monitor Crypto news and publications]] 🔁 every week on Friday 📅 2022-06-03 ✅ 2022-06-04
- [x] [[Crypto Tasks#internet alerts|monitor Crypto news and publications]] 🔁 every week on Friday 📅 2022-05-27 ✅ 2022-05-27 - [x] [[Crypto Tasks#internet alerts|monitor Crypto news and publications]] 🔁 every week on Friday 📅 2022-05-27 ✅ 2022-05-27
- [x] [[Crypto Tasks#internet alerts|monitor Crypto news and publications]] 🔁 every week on Friday 📅 2022-05-20 ✅ 2022-05-20 - [x] [[Crypto Tasks#internet alerts|monitor Crypto news and publications]] 🔁 every week on Friday 📅 2022-05-20 ✅ 2022-05-20
- [x] [[Crypto Tasks#internet alerts|monitor Crypto news and publications]] 🔁 every week on Friday 📅 2022-05-13 ✅ 2022-05-14 - [x] [[Crypto Tasks#internet alerts|monitor Crypto news and publications]] 🔁 every week on Friday 📅 2022-05-13 ✅ 2022-05-14

@ -72,7 +72,8 @@ Note summarising all tasks and to-dos for Listed Equity investments.
[[#^Top|TOP]] [[#^Top|TOP]]
&emsp; &emsp;
- [ ] 💰[[Equity Tasks#internet alerts|monitor Equity news and publications]] 🔁 every week on Friday 📅 2022-06-03 - [ ] 💰[[Equity Tasks#internet alerts|monitor Equity news and publications]] 🔁 every week on Friday 📅 2022-06-10
- [x] 💰[[Equity Tasks#internet alerts|monitor Equity news and publications]] 🔁 every week on Friday 📅 2022-06-03 ✅ 2022-06-04
- [x] [[Equity Tasks#internet alerts|monitor Equity news and publications]] 🔁 every week on Friday 📅 2022-05-27 ✅ 2022-05-27 - [x] [[Equity Tasks#internet alerts|monitor Equity news and publications]] 🔁 every week on Friday 📅 2022-05-27 ✅ 2022-05-27
- [x] [[Equity Tasks#internet alerts|monitor Equity news and publications]] 🔁 every week on Friday 📅 2022-05-20 ✅ 2022-05-20 - [x] [[Equity Tasks#internet alerts|monitor Equity news and publications]] 🔁 every week on Friday 📅 2022-05-20 ✅ 2022-05-20
- [x] [[Equity Tasks#internet alerts|monitor Equity news and publications]] 🔁 every week on Friday 📅 2022-05-13 ✅ 2022-05-14 - [x] [[Equity Tasks#internet alerts|monitor Equity news and publications]] 🔁 every week on Friday 📅 2022-05-13 ✅ 2022-05-14

@ -72,7 +72,8 @@ Tasks and to-dos for VC investments.
[[#^Top|TOP]] [[#^Top|TOP]]
&emsp; &emsp;
- [ ] 💰[[VC Tasks#internet alerts|monitor VC news and publications]] 🔁 every week on Friday 📅 2022-06-03 - [ ] 💰[[VC Tasks#internet alerts|monitor VC news and publications]] 🔁 every week on Friday 📅 2022-06-10
- [x] 💰[[VC Tasks#internet alerts|monitor VC news and publications]] 🔁 every week on Friday 📅 2022-06-03 ✅ 2022-06-04
- [x] [[VC Tasks#internet alerts|monitor VC news and publications]] 🔁 every week on Friday 📅 2022-05-27 ✅ 2022-05-27 - [x] [[VC Tasks#internet alerts|monitor VC news and publications]] 🔁 every week on Friday 📅 2022-05-27 ✅ 2022-05-27
- [x] [[VC Tasks#internet alerts|monitor VC news and publications]] 🔁 every week on Friday 📅 2022-05-20 ✅ 2022-05-20 - [x] [[VC Tasks#internet alerts|monitor VC news and publications]] 🔁 every week on Friday 📅 2022-05-20 ✅ 2022-05-20
- [x] [[VC Tasks#internet alerts|monitor VC news and publications]] 🔁 every week on Friday 📅 2022-05-13 ✅ 2022-05-14 - [x] [[VC Tasks#internet alerts|monitor VC news and publications]] 🔁 every week on Friday 📅 2022-05-13 ✅ 2022-05-14

Loading…
Cancel
Save