Shioriko/web/static/bundle.js

10792 lines
315 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function(l, r) { if (l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (window.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(window.document);
var app = (function () {
'use strict';
function noop() { }
function assign(tar, src) {
// @ts-ignore
for (const k in src)
tar[k] = src[k];
return tar;
}
function add_location(element, file, line, column, char) {
element.__svelte_meta = {
loc: { file, line, column, char }
};
}
function run(fn) {
return fn();
}
function blank_object() {
return Object.create(null);
}
function run_all(fns) {
fns.forEach(run);
}
function is_function(thing) {
return typeof thing === 'function';
}
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function is_empty(obj) {
return Object.keys(obj).length === 0;
}
function validate_store(store, name) {
if (store != null && typeof store.subscribe !== 'function') {
throw new Error(`'${name}' is not a store with a 'subscribe' method`);
}
}
function subscribe(store, ...callbacks) {
if (store == null) {
return noop;
}
const unsub = store.subscribe(...callbacks);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
function component_subscribe(component, store, callback) {
component.$$.on_destroy.push(subscribe(store, callback));
}
function create_slot(definition, ctx, $$scope, fn) {
if (definition) {
const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);
return definition[0](slot_ctx);
}
}
function get_slot_context(definition, ctx, $$scope, fn) {
return definition[1] && fn
? assign($$scope.ctx.slice(), definition[1](fn(ctx)))
: $$scope.ctx;
}
function get_slot_changes(definition, $$scope, dirty, fn) {
if (definition[2] && fn) {
const lets = definition[2](fn(dirty));
if ($$scope.dirty === undefined) {
return lets;
}
if (typeof lets === 'object') {
const merged = [];
const len = Math.max($$scope.dirty.length, lets.length);
for (let i = 0; i < len; i += 1) {
merged[i] = $$scope.dirty[i] | lets[i];
}
return merged;
}
return $$scope.dirty | lets;
}
return $$scope.dirty;
}
function update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {
const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);
if (slot_changes) {
const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);
slot.p(slot_context, slot_changes);
}
}
function exclude_internal_props(props) {
const result = {};
for (const k in props)
if (k[0] !== '$')
result[k] = props[k];
return result;
}
function compute_rest_props(props, keys) {
const rest = {};
keys = new Set(keys);
for (const k in props)
if (!keys.has(k) && k[0] !== '$')
rest[k] = props[k];
return rest;
}
function append(target, node) {
target.appendChild(node);
}
function insert(target, node, anchor) {
target.insertBefore(node, anchor || null);
}
function detach(node) {
node.parentNode.removeChild(node);
}
function destroy_each(iterations, detaching) {
for (let i = 0; i < iterations.length; i += 1) {
if (iterations[i])
iterations[i].d(detaching);
}
}
function element(name) {
return document.createElement(name);
}
function text(data) {
return document.createTextNode(data);
}
function space() {
return text(' ');
}
function empty() {
return text('');
}
function listen(node, event, handler, options) {
node.addEventListener(event, handler, options);
return () => node.removeEventListener(event, handler, options);
}
function prevent_default(fn) {
return function (event) {
event.preventDefault();
// @ts-ignore
return fn.call(this, event);
};
}
function attr(node, attribute, value) {
if (value == null)
node.removeAttribute(attribute);
else if (node.getAttribute(attribute) !== value)
node.setAttribute(attribute, value);
}
function set_attributes(node, attributes) {
// @ts-ignore
const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);
for (const key in attributes) {
if (attributes[key] == null) {
node.removeAttribute(key);
}
else if (key === 'style') {
node.style.cssText = attributes[key];
}
else if (key === '__value') {
node.value = node[key] = attributes[key];
}
else if (descriptors[key] && descriptors[key].set) {
node[key] = attributes[key];
}
else {
attr(node, key, attributes[key]);
}
}
}
function children(element) {
return Array.from(element.childNodes);
}
function set_input_value(input, value) {
input.value = value == null ? '' : value;
}
function toggle_class(element, name, toggle) {
element.classList[toggle ? 'add' : 'remove'](name);
}
function custom_event(type, detail) {
const e = document.createEvent('CustomEvent');
e.initCustomEvent(type, false, false, detail);
return e;
}
class HtmlTag {
constructor(anchor = null) {
this.a = anchor;
this.e = this.n = null;
}
m(html, target, anchor = null) {
if (!this.e) {
this.e = element(target.nodeName);
this.t = target;
this.h(html);
}
this.i(anchor);
}
h(html) {
this.e.innerHTML = html;
this.n = Array.from(this.e.childNodes);
}
i(anchor) {
for (let i = 0; i < this.n.length; i += 1) {
insert(this.t, this.n[i], anchor);
}
}
p(html) {
this.d();
this.h(html);
this.i(this.a);
}
d() {
this.n.forEach(detach);
}
}
let current_component;
function set_current_component(component) {
current_component = component;
}
function get_current_component() {
if (!current_component)
throw new Error('Function called outside component initialization');
return current_component;
}
function onMount(fn) {
get_current_component().$$.on_mount.push(fn);
}
function onDestroy(fn) {
get_current_component().$$.on_destroy.push(fn);
}
function createEventDispatcher() {
const component = get_current_component();
return (type, detail) => {
const callbacks = component.$$.callbacks[type];
if (callbacks) {
// TODO are there situations where events could be dispatched
// in a server (non-DOM) environment?
const event = custom_event(type, detail);
callbacks.slice().forEach(fn => {
fn.call(component, event);
});
}
};
}
function setContext(key, context) {
get_current_component().$$.context.set(key, context);
}
function getContext(key) {
return get_current_component().$$.context.get(key);
}
const dirty_components = [];
const binding_callbacks = [];
const render_callbacks = [];
const flush_callbacks = [];
const resolved_promise = Promise.resolve();
let update_scheduled = false;
function schedule_update() {
if (!update_scheduled) {
update_scheduled = true;
resolved_promise.then(flush);
}
}
function add_render_callback(fn) {
render_callbacks.push(fn);
}
let flushing = false;
const seen_callbacks = new Set();
function flush() {
if (flushing)
return;
flushing = true;
do {
// first, call beforeUpdate functions
// and update components
for (let i = 0; i < dirty_components.length; i += 1) {
const component = dirty_components[i];
set_current_component(component);
update(component.$$);
}
set_current_component(null);
dirty_components.length = 0;
while (binding_callbacks.length)
binding_callbacks.pop()();
// then, once components are updated, call
// afterUpdate functions. This may cause
// subsequent updates...
for (let i = 0; i < render_callbacks.length; i += 1) {
const callback = render_callbacks[i];
if (!seen_callbacks.has(callback)) {
// ...so guard against infinite loops
seen_callbacks.add(callback);
callback();
}
}
render_callbacks.length = 0;
} while (dirty_components.length);
while (flush_callbacks.length) {
flush_callbacks.pop()();
}
update_scheduled = false;
flushing = false;
seen_callbacks.clear();
}
function update($$) {
if ($$.fragment !== null) {
$$.update();
run_all($$.before_update);
const dirty = $$.dirty;
$$.dirty = [-1];
$$.fragment && $$.fragment.p($$.ctx, dirty);
$$.after_update.forEach(add_render_callback);
}
}
const outroing = new Set();
let outros;
function group_outros() {
outros = {
r: 0,
c: [],
p: outros // parent group
};
}
function check_outros() {
if (!outros.r) {
run_all(outros.c);
}
outros = outros.p;
}
function transition_in(block, local) {
if (block && block.i) {
outroing.delete(block);
block.i(local);
}
}
function transition_out(block, local, detach, callback) {
if (block && block.o) {
if (outroing.has(block))
return;
outroing.add(block);
outros.c.push(() => {
outroing.delete(block);
if (callback) {
if (detach)
block.d(1);
callback();
}
});
block.o(local);
}
}
const globals = (typeof window !== 'undefined'
? window
: typeof globalThis !== 'undefined'
? globalThis
: global);
function outro_and_destroy_block(block, lookup) {
transition_out(block, 1, 1, () => {
lookup.delete(block.key);
});
}
function update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {
let o = old_blocks.length;
let n = list.length;
let i = o;
const old_indexes = {};
while (i--)
old_indexes[old_blocks[i].key] = i;
const new_blocks = [];
const new_lookup = new Map();
const deltas = new Map();
i = n;
while (i--) {
const child_ctx = get_context(ctx, list, i);
const key = get_key(child_ctx);
let block = lookup.get(key);
if (!block) {
block = create_each_block(key, child_ctx);
block.c();
}
else if (dynamic) {
block.p(child_ctx, dirty);
}
new_lookup.set(key, new_blocks[i] = block);
if (key in old_indexes)
deltas.set(key, Math.abs(i - old_indexes[key]));
}
const will_move = new Set();
const did_move = new Set();
function insert(block) {
transition_in(block, 1);
block.m(node, next);
lookup.set(block.key, block);
next = block.first;
n--;
}
while (o && n) {
const new_block = new_blocks[n - 1];
const old_block = old_blocks[o - 1];
const new_key = new_block.key;
const old_key = old_block.key;
if (new_block === old_block) {
// do nothing
next = new_block.first;
o--;
n--;
}
else if (!new_lookup.has(old_key)) {
// remove old block
destroy(old_block, lookup);
o--;
}
else if (!lookup.has(new_key) || will_move.has(new_key)) {
insert(new_block);
}
else if (did_move.has(old_key)) {
o--;
}
else if (deltas.get(new_key) > deltas.get(old_key)) {
did_move.add(new_key);
insert(new_block);
}
else {
will_move.add(old_key);
o--;
}
}
while (o--) {
const old_block = old_blocks[o];
if (!new_lookup.has(old_block.key))
destroy(old_block, lookup);
}
while (n)
insert(new_blocks[n - 1]);
return new_blocks;
}
function validate_each_keys(ctx, list, get_context, get_key) {
const keys = new Set();
for (let i = 0; i < list.length; i++) {
const key = get_key(get_context(ctx, list, i));
if (keys.has(key)) {
throw new Error('Cannot have duplicate keys in a keyed each');
}
keys.add(key);
}
}
function get_spread_update(levels, updates) {
const update = {};
const to_null_out = {};
const accounted_for = { $$scope: 1 };
let i = levels.length;
while (i--) {
const o = levels[i];
const n = updates[i];
if (n) {
for (const key in o) {
if (!(key in n))
to_null_out[key] = 1;
}
for (const key in n) {
if (!accounted_for[key]) {
update[key] = n[key];
accounted_for[key] = 1;
}
}
levels[i] = n;
}
else {
for (const key in o) {
accounted_for[key] = 1;
}
}
}
for (const key in to_null_out) {
if (!(key in update))
update[key] = undefined;
}
return update;
}
function get_spread_object(spread_props) {
return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};
}
function create_component(block) {
block && block.c();
}
function mount_component(component, target, anchor, customElement) {
const { fragment, on_mount, on_destroy, after_update } = component.$$;
fragment && fragment.m(target, anchor);
if (!customElement) {
// onMount happens before the initial afterUpdate
add_render_callback(() => {
const new_on_destroy = on_mount.map(run).filter(is_function);
if (on_destroy) {
on_destroy.push(...new_on_destroy);
}
else {
// Edge case - component was destroyed immediately,
// most likely as a result of a binding initialising
run_all(new_on_destroy);
}
component.$$.on_mount = [];
});
}
after_update.forEach(add_render_callback);
}
function destroy_component(component, detaching) {
const $$ = component.$$;
if ($$.fragment !== null) {
run_all($$.on_destroy);
$$.fragment && $$.fragment.d(detaching);
// TODO null out other refs, including component.$$ (but need to
// preserve final state?)
$$.on_destroy = $$.fragment = null;
$$.ctx = [];
}
}
function make_dirty(component, i) {
if (component.$$.dirty[0] === -1) {
dirty_components.push(component);
schedule_update();
component.$$.dirty.fill(0);
}
component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));
}
function init(component, options, instance, create_fragment, not_equal, props, dirty = [-1]) {
const parent_component = current_component;
set_current_component(component);
const $$ = component.$$ = {
fragment: null,
ctx: null,
// state
props,
update: noop,
not_equal,
bound: blank_object(),
// lifecycle
on_mount: [],
on_destroy: [],
on_disconnect: [],
before_update: [],
after_update: [],
context: new Map(parent_component ? parent_component.$$.context : options.context || []),
// everything else
callbacks: blank_object(),
dirty,
skip_bound: false
};
let ready = false;
$$.ctx = instance
? instance(component, options.props || {}, (i, ret, ...rest) => {
const value = rest.length ? rest[0] : ret;
if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
if (!$$.skip_bound && $$.bound[i])
$$.bound[i](value);
if (ready)
make_dirty(component, i);
}
return ret;
})
: [];
$$.update();
ready = true;
run_all($$.before_update);
// `false` as a special case of no DOM component
$$.fragment = create_fragment ? create_fragment($$.ctx) : false;
if (options.target) {
if (options.hydrate) {
const nodes = children(options.target);
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
$$.fragment && $$.fragment.l(nodes);
nodes.forEach(detach);
}
else {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
$$.fragment && $$.fragment.c();
}
if (options.intro)
transition_in(component.$$.fragment);
mount_component(component, options.target, options.anchor, options.customElement);
flush();
}
set_current_component(parent_component);
}
/**
* Base class for Svelte components. Used when dev=false.
*/
class SvelteComponent {
$destroy() {
destroy_component(this, 1);
this.$destroy = noop;
}
$on(type, callback) {
const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));
callbacks.push(callback);
return () => {
const index = callbacks.indexOf(callback);
if (index !== -1)
callbacks.splice(index, 1);
};
}
$set($$props) {
if (this.$$set && !is_empty($$props)) {
this.$$.skip_bound = true;
this.$$set($$props);
this.$$.skip_bound = false;
}
}
}
function dispatch_dev(type, detail) {
document.dispatchEvent(custom_event(type, Object.assign({ version: '3.38.2' }, detail)));
}
function append_dev(target, node) {
dispatch_dev('SvelteDOMInsert', { target, node });
append(target, node);
}
function insert_dev(target, node, anchor) {
dispatch_dev('SvelteDOMInsert', { target, node, anchor });
insert(target, node, anchor);
}
function detach_dev(node) {
dispatch_dev('SvelteDOMRemove', { node });
detach(node);
}
function listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {
const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];
if (has_prevent_default)
modifiers.push('preventDefault');
if (has_stop_propagation)
modifiers.push('stopPropagation');
dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });
const dispose = listen(node, event, handler, options);
return () => {
dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });
dispose();
};
}
function attr_dev(node, attribute, value) {
attr(node, attribute, value);
if (value == null)
dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });
else
dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });
}
function prop_dev(node, property, value) {
node[property] = value;
dispatch_dev('SvelteDOMSetProperty', { node, property, value });
}
function set_data_dev(text, data) {
data = '' + data;
if (text.wholeText === data)
return;
dispatch_dev('SvelteDOMSetData', { node: text, data });
text.data = data;
}
function validate_each_argument(arg) {
if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {
let msg = '{#each} only iterates over array-like objects.';
if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {
msg += ' You can use a spread to convert this iterable into an array.';
}
throw new Error(msg);
}
}
function validate_slots(name, slot, keys) {
for (const slot_key of Object.keys(slot)) {
if (!~keys.indexOf(slot_key)) {
console.warn(`<${name}> received an unexpected slot "${slot_key}".`);
}
}
}
/**
* Base class for Svelte components with some minor dev-enhancements. Used when dev=true.
*/
class SvelteComponentDev extends SvelteComponent {
constructor(options) {
if (!options || (!options.target && !options.$$inline)) {
throw new Error("'target' is a required option");
}
super();
}
$destroy() {
super.$destroy();
this.$destroy = () => {
console.warn('Component was already destroyed'); // eslint-disable-line no-console
};
}
$capture_state() { }
$inject_state() { }
}
const subscriber_queue = [];
/**
* Creates a `Readable` store that allows reading by subscription.
* @param value initial value
* @param {StartStopNotifier}start start and stop notifications for subscriptions
*/
function readable(value, start) {
return {
subscribe: writable(value, start).subscribe
};
}
/**
* Create a `Writable` store that allows both updating and reading by subscription.
* @param {*=}value initial value
* @param {StartStopNotifier=}start start and stop notifications for subscriptions
*/
function writable(value, start = noop) {
let stop;
const subscribers = [];
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) { // store is ready
const run_queue = !subscriber_queue.length;
for (let i = 0; i < subscribers.length; i += 1) {
const s = subscribers[i];
s[1]();
subscriber_queue.push(s, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(value));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.push(subscriber);
if (subscribers.length === 1) {
stop = start(set) || noop;
}
run(value);
return () => {
const index = subscribers.indexOf(subscriber);
if (index !== -1) {
subscribers.splice(index, 1);
}
if (subscribers.length === 0) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
function derived(stores, fn, initial_value) {
const single = !Array.isArray(stores);
const stores_array = single
? [stores]
: stores;
const auto = fn.length < 2;
return readable(initial_value, (set) => {
let inited = false;
const values = [];
let pending = 0;
let cleanup = noop;
const sync = () => {
if (pending) {
return;
}
cleanup();
const result = fn(single ? values[0] : values, set);
if (auto) {
set(result);
}
else {
cleanup = is_function(result) ? result : noop;
}
};
const unsubscribers = stores_array.map((store, i) => subscribe(store, (value) => {
values[i] = value;
pending &= ~(1 << i);
if (inited) {
sync();
}
}, () => {
pending |= (1 << i);
}));
inited = true;
sync();
return function stop() {
run_all(unsubscribers);
cleanup();
};
});
}
const LOCATION = {};
const ROUTER = {};
/**
* Adapted from https://github.com/reach/router/blob/b60e6dd781d5d3a4bdaaf4de665649c0f6a7e78d/src/lib/history.js
*
* https://github.com/reach/router/blob/master/LICENSE
* */
function getLocation(source) {
return {
...source.location,
state: source.history.state,
key: (source.history.state && source.history.state.key) || "initial"
};
}
function createHistory(source, options) {
const listeners = [];
let location = getLocation(source);
return {
get location() {
return location;
},
listen(listener) {
listeners.push(listener);
const popstateListener = () => {
location = getLocation(source);
listener({ location, action: "POP" });
};
source.addEventListener("popstate", popstateListener);
return () => {
source.removeEventListener("popstate", popstateListener);
const index = listeners.indexOf(listener);
listeners.splice(index, 1);
};
},
navigate(to, { state, replace = false } = {}) {
state = { ...state, key: Date.now() + "" };
// try...catch iOS Safari limits to 100 pushState calls
try {
if (replace) {
source.history.replaceState(state, null, to);
} else {
source.history.pushState(state, null, to);
}
} catch (e) {
source.location[replace ? "replace" : "assign"](to);
}
location = getLocation(source);
listeners.forEach(listener => listener({ location, action: "PUSH" }));
}
};
}
// Stores history entries in memory for testing or other platforms like Native
function createMemorySource(initialPathname = "/") {
let index = 0;
const stack = [{ pathname: initialPathname, search: "" }];
const states = [];
return {
get location() {
return stack[index];
},
addEventListener(name, fn) {},
removeEventListener(name, fn) {},
history: {
get entries() {
return stack;
},
get index() {
return index;
},
get state() {
return states[index];
},
pushState(state, _, uri) {
const [pathname, search = ""] = uri.split("?");
index++;
stack.push({ pathname, search });
states.push(state);
},
replaceState(state, _, uri) {
const [pathname, search = ""] = uri.split("?");
stack[index] = { pathname, search };
states[index] = state;
}
}
};
}
// Global history uses window.history as the source if available,
// otherwise a memory history
const canUseDOM = Boolean(
typeof window !== "undefined" &&
window.document &&
window.document.createElement
);
const globalHistory = createHistory(canUseDOM ? window : createMemorySource());
const { navigate } = globalHistory;
/**
* Adapted from https://github.com/reach/router/blob/b60e6dd781d5d3a4bdaaf4de665649c0f6a7e78d/src/lib/utils.js
*
* https://github.com/reach/router/blob/master/LICENSE
* */
const paramRe = /^:(.+)/;
const SEGMENT_POINTS = 4;
const STATIC_POINTS = 3;
const DYNAMIC_POINTS = 2;
const SPLAT_PENALTY = 1;
const ROOT_POINTS = 1;
/**
* Check if `string` starts with `search`
* @param {string} string
* @param {string} search
* @return {boolean}
*/
function startsWith(string, search) {
return string.substr(0, search.length) === search;
}
/**
* Check if `segment` is a root segment
* @param {string} segment
* @return {boolean}
*/
function isRootSegment(segment) {
return segment === "";
}
/**
* Check if `segment` is a dynamic segment
* @param {string} segment
* @return {boolean}
*/
function isDynamic(segment) {
return paramRe.test(segment);
}
/**
* Check if `segment` is a splat
* @param {string} segment
* @return {boolean}
*/
function isSplat(segment) {
return segment[0] === "*";
}
/**
* Split up the URI into segments delimited by `/`
* @param {string} uri
* @return {string[]}
*/
function segmentize(uri) {
return (
uri
// Strip starting/ending `/`
.replace(/(^\/+|\/+$)/g, "")
.split("/")
);
}
/**
* Strip `str` of potential start and end `/`
* @param {string} str
* @return {string}
*/
function stripSlashes(str) {
return str.replace(/(^\/+|\/+$)/g, "");
}
/**
* Score a route depending on how its individual segments look
* @param {object} route
* @param {number} index
* @return {object}
*/
function rankRoute(route, index) {
const score = route.default
? 0
: segmentize(route.path).reduce((score, segment) => {
score += SEGMENT_POINTS;
if (isRootSegment(segment)) {
score += ROOT_POINTS;
} else if (isDynamic(segment)) {
score += DYNAMIC_POINTS;
} else if (isSplat(segment)) {
score -= SEGMENT_POINTS + SPLAT_PENALTY;
} else {
score += STATIC_POINTS;
}
return score;
}, 0);
return { route, score, index };
}
/**
* Give a score to all routes and sort them on that
* @param {object[]} routes
* @return {object[]}
*/
function rankRoutes(routes) {
return (
routes
.map(rankRoute)
// If two routes have the exact same score, we go by index instead
.sort((a, b) =>
a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index
)
);
}
/**
* Ranks and picks the best route to match. Each segment gets the highest
* amount of points, then the type of segment gets an additional amount of
* points where
*
* static > dynamic > splat > root
*
* This way we don't have to worry about the order of our routes, let the
* computers do it.
*
* A route looks like this
*
* { path, default, value }
*
* And a returned match looks like:
*
* { route, params, uri }
*
* @param {object[]} routes
* @param {string} uri
* @return {?object}
*/
function pick(routes, uri) {
let match;
let default_;
const [uriPathname] = uri.split("?");
const uriSegments = segmentize(uriPathname);
const isRootUri = uriSegments[0] === "";
const ranked = rankRoutes(routes);
for (let i = 0, l = ranked.length; i < l; i++) {
const route = ranked[i].route;
let missed = false;
if (route.default) {
default_ = {
route,
params: {},
uri
};
continue;
}
const routeSegments = segmentize(route.path);
const params = {};
const max = Math.max(uriSegments.length, routeSegments.length);
let index = 0;
for (; index < max; index++) {
const routeSegment = routeSegments[index];
const uriSegment = uriSegments[index];
if (routeSegment !== undefined && isSplat(routeSegment)) {
// Hit a splat, just grab the rest, and return a match
// uri: /files/documents/work
// route: /files/* or /files/*splatname
const splatName = routeSegment === "*" ? "*" : routeSegment.slice(1);
params[splatName] = uriSegments
.slice(index)
.map(decodeURIComponent)
.join("/");
break;
}
if (uriSegment === undefined) {
// URI is shorter than the route, no match
// uri: /users
// route: /users/:userId
missed = true;
break;
}
let dynamicMatch = paramRe.exec(routeSegment);
if (dynamicMatch && !isRootUri) {
const value = decodeURIComponent(uriSegment);
params[dynamicMatch[1]] = value;
} else if (routeSegment !== uriSegment) {
// Current segments don't match, not dynamic, not splat, so no match
// uri: /users/123/settings
// route: /users/:id/profile
missed = true;
break;
}
}
if (!missed) {
match = {
route,
params,
uri: "/" + uriSegments.slice(0, index).join("/")
};
break;
}
}
return match || default_ || null;
}
/**
* Check if the `path` matches the `uri`.
* @param {string} path
* @param {string} uri
* @return {?object}
*/
function match(route, uri) {
return pick([route], uri);
}
/**
* Add the query to the pathname if a query is given
* @param {string} pathname
* @param {string} [query]
* @return {string}
*/
function addQuery(pathname, query) {
return pathname + (query ? `?${query}` : "");
}
/**
* Resolve URIs as though every path is a directory, no files. Relative URIs
* in the browser can feel awkward because not only can you be "in a directory",
* you can be "at a file", too. For example:
*
* browserSpecResolve('foo', '/bar/') => /bar/foo
* browserSpecResolve('foo', '/bar') => /foo
*
* But on the command line of a file system, it's not as complicated. You can't
* `cd` from a file, only directories. This way, links have to know less about
* their current path. To go deeper you can do this:
*
* <Link to="deeper"/>
* // instead of
* <Link to=`{${props.uri}/deeper}`/>
*
* Just like `cd`, if you want to go deeper from the command line, you do this:
*
* cd deeper
* # not
* cd $(pwd)/deeper
*
* By treating every path as a directory, linking to relative paths should
* require less contextual information and (fingers crossed) be more intuitive.
* @param {string} to
* @param {string} base
* @return {string}
*/
function resolve(to, base) {
// /foo/bar, /baz/qux => /foo/bar
if (startsWith(to, "/")) {
return to;
}
const [toPathname, toQuery] = to.split("?");
const [basePathname] = base.split("?");
const toSegments = segmentize(toPathname);
const baseSegments = segmentize(basePathname);
// ?a=b, /users?b=c => /users?a=b
if (toSegments[0] === "") {
return addQuery(basePathname, toQuery);
}
// profile, /users/789 => /users/789/profile
if (!startsWith(toSegments[0], ".")) {
const pathname = baseSegments.concat(toSegments).join("/");
return addQuery((basePathname === "/" ? "" : "/") + pathname, toQuery);
}
// ./ , /users/123 => /users/123
// ../ , /users/123 => /users
// ../.. , /users/123 => /
// ../../one, /a/b/c/d => /a/b/one
// .././one , /a/b/c/d => /a/b/c/one
const allSegments = baseSegments.concat(toSegments);
const segments = [];
allSegments.forEach(segment => {
if (segment === "..") {
segments.pop();
} else if (segment !== ".") {
segments.push(segment);
}
});
return addQuery("/" + segments.join("/"), toQuery);
}
/**
* Combines the `basepath` and the `path` into one path.
* @param {string} basepath
* @param {string} path
*/
function combinePaths(basepath, path) {
return `${stripSlashes(
path === "/" ? basepath : `${stripSlashes(basepath)}/${stripSlashes(path)}`
)}/`;
}
/**
* Decides whether a given `event` should result in a navigation or not.
* @param {object} event
*/
function shouldNavigate(event) {
return (
!event.defaultPrevented &&
event.button === 0 &&
!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey)
);
}
/* node_modules/svelte-routing/src/Router.svelte generated by Svelte v3.38.2 */
function create_fragment$f(ctx) {
let current;
const default_slot_template = /*#slots*/ ctx[9].default;
const default_slot = create_slot(default_slot_template, ctx, /*$$scope*/ ctx[8], null);
const block = {
c: function create() {
if (default_slot) default_slot.c();
},
l: function claim(nodes) {
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
},
m: function mount(target, anchor) {
if (default_slot) {
default_slot.m(target, anchor);
}
current = true;
},
p: function update(ctx, [dirty]) {
if (default_slot) {
if (default_slot.p && (!current || dirty & /*$$scope*/ 256)) {
update_slot(default_slot, default_slot_template, ctx, /*$$scope*/ ctx[8], dirty, null, null);
}
}
},
i: function intro(local) {
if (current) return;
transition_in(default_slot, local);
current = true;
},
o: function outro(local) {
transition_out(default_slot, local);
current = false;
},
d: function destroy(detaching) {
if (default_slot) default_slot.d(detaching);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_fragment$f.name,
type: "component",
source: "",
ctx
});
return block;
}
function instance$f($$self, $$props, $$invalidate) {
let $base;
let $location;
let $routes;
let { $$slots: slots = {}, $$scope } = $$props;
validate_slots("Router", slots, ['default']);
let { basepath = "/" } = $$props;
let { url = null } = $$props;
const locationContext = getContext(LOCATION);
const routerContext = getContext(ROUTER);
const routes = writable([]);
validate_store(routes, "routes");
component_subscribe($$self, routes, value => $$invalidate(7, $routes = value));
const activeRoute = writable(null);
let hasActiveRoute = false; // Used in SSR to synchronously set that a Route is active.
// If locationContext is not set, this is the topmost Router in the tree.
// If the `url` prop is given we force the location to it.
const location = locationContext || writable(url ? { pathname: url } : globalHistory.location);
validate_store(location, "location");
component_subscribe($$self, location, value => $$invalidate(6, $location = value));
// If routerContext is set, the routerBase of the parent Router
// will be the base for this Router's descendants.
// If routerContext is not set, the path and resolved uri will both
// have the value of the basepath prop.
const base = routerContext
? routerContext.routerBase
: writable({ path: basepath, uri: basepath });
validate_store(base, "base");
component_subscribe($$self, base, value => $$invalidate(5, $base = value));
const routerBase = derived([base, activeRoute], ([base, activeRoute]) => {
// If there is no activeRoute, the routerBase will be identical to the base.
if (activeRoute === null) {
return base;
}
const { path: basepath } = base;
const { route, uri } = activeRoute;
// Remove the potential /* or /*splatname from
// the end of the child Routes relative paths.
const path = route.default
? basepath
: route.path.replace(/\*.*$/, "");
return { path, uri };
});
function registerRoute(route) {
const { path: basepath } = $base;
let { path } = route;
// We store the original path in the _path property so we can reuse
// it when the basepath changes. The only thing that matters is that
// the route reference is intact, so mutation is fine.
route._path = path;
route.path = combinePaths(basepath, path);
if (typeof window === "undefined") {
// In SSR we should set the activeRoute immediately if it is a match.
// If there are more Routes being registered after a match is found,
// we just skip them.
if (hasActiveRoute) {
return;
}
const matchingRoute = match(route, $location.pathname);
if (matchingRoute) {
activeRoute.set(matchingRoute);
hasActiveRoute = true;
}
} else {
routes.update(rs => {
rs.push(route);
return rs;
});
}
}
function unregisterRoute(route) {
routes.update(rs => {
const index = rs.indexOf(route);
rs.splice(index, 1);
return rs;
});
}
if (!locationContext) {
// The topmost Router in the tree is responsible for updating
// the location store and supplying it through context.
onMount(() => {
const unlisten = globalHistory.listen(history => {
location.set(history.location);
});
return unlisten;
});
setContext(LOCATION, location);
}
setContext(ROUTER, {
activeRoute,
base,
routerBase,
registerRoute,
unregisterRoute
});
const writable_props = ["basepath", "url"];
Object.keys($$props).forEach(key => {
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(`<Router> was created with unknown prop '${key}'`);
});
$$self.$$set = $$props => {
if ("basepath" in $$props) $$invalidate(3, basepath = $$props.basepath);
if ("url" in $$props) $$invalidate(4, url = $$props.url);
if ("$$scope" in $$props) $$invalidate(8, $$scope = $$props.$$scope);
};
$$self.$capture_state = () => ({
getContext,
setContext,
onMount,
writable,
derived,
LOCATION,
ROUTER,
globalHistory,
pick,
match,
stripSlashes,
combinePaths,
basepath,
url,
locationContext,
routerContext,
routes,
activeRoute,
hasActiveRoute,
location,
base,
routerBase,
registerRoute,
unregisterRoute,
$base,
$location,
$routes
});
$$self.$inject_state = $$props => {
if ("basepath" in $$props) $$invalidate(3, basepath = $$props.basepath);
if ("url" in $$props) $$invalidate(4, url = $$props.url);
if ("hasActiveRoute" in $$props) hasActiveRoute = $$props.hasActiveRoute;
};
if ($$props && "$$inject" in $$props) {
$$self.$inject_state($$props.$$inject);
}
$$self.$$.update = () => {
if ($$self.$$.dirty & /*$base*/ 32) {
// This reactive statement will update all the Routes' path when
// the basepath changes.
{
const { path: basepath } = $base;
routes.update(rs => {
rs.forEach(r => r.path = combinePaths(basepath, r._path));
return rs;
});
}
}
if ($$self.$$.dirty & /*$routes, $location*/ 192) {
// This reactive statement will be run when the Router is created
// when there are no Routes and then again the following tick, so it
// will not find an active Route in SSR and in the browser it will only
// pick an active Route after all Routes have been registered.
{
const bestMatch = pick($routes, $location.pathname);
activeRoute.set(bestMatch);
}
}
};
return [
routes,
location,
base,
basepath,
url,
$base,
$location,
$routes,
$$scope,
slots
];
}
class Router extends SvelteComponentDev {
constructor(options) {
super(options);
init(this, options, instance$f, create_fragment$f, safe_not_equal, { basepath: 3, url: 4 });
dispatch_dev("SvelteRegisterComponent", {
component: this,
tagName: "Router",
options,
id: create_fragment$f.name
});
}
get basepath() {
throw new Error("<Router>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set basepath(value) {
throw new Error("<Router>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get url() {
throw new Error("<Router>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set url(value) {
throw new Error("<Router>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
}
/* node_modules/svelte-routing/src/Route.svelte generated by Svelte v3.38.2 */
const get_default_slot_changes = dirty => ({
params: dirty & /*routeParams*/ 4,
location: dirty & /*$location*/ 16
});
const get_default_slot_context = ctx => ({
params: /*routeParams*/ ctx[2],
location: /*$location*/ ctx[4]
});
// (40:0) {#if $activeRoute !== null && $activeRoute.route === route}
function create_if_block$5(ctx) {
let current_block_type_index;
let if_block;
let if_block_anchor;
let current;
const if_block_creators = [create_if_block_1$5, create_else_block$4];
const if_blocks = [];
function select_block_type(ctx, dirty) {
if (/*component*/ ctx[0] !== null) return 0;
return 1;
}
current_block_type_index = select_block_type(ctx);
if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
const block = {
c: function create() {
if_block.c();
if_block_anchor = empty();
},
m: function mount(target, anchor) {
if_blocks[current_block_type_index].m(target, anchor);
insert_dev(target, if_block_anchor, anchor);
current = true;
},
p: function update(ctx, dirty) {
let previous_block_index = current_block_type_index;
current_block_type_index = select_block_type(ctx);
if (current_block_type_index === previous_block_index) {
if_blocks[current_block_type_index].p(ctx, dirty);
} else {
group_outros();
transition_out(if_blocks[previous_block_index], 1, 1, () => {
if_blocks[previous_block_index] = null;
});
check_outros();
if_block = if_blocks[current_block_type_index];
if (!if_block) {
if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
if_block.c();
} else {
if_block.p(ctx, dirty);
}
transition_in(if_block, 1);
if_block.m(if_block_anchor.parentNode, if_block_anchor);
}
},
i: function intro(local) {
if (current) return;
transition_in(if_block);
current = true;
},
o: function outro(local) {
transition_out(if_block);
current = false;
},
d: function destroy(detaching) {
if_blocks[current_block_type_index].d(detaching);
if (detaching) detach_dev(if_block_anchor);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block$5.name,
type: "if",
source: "(40:0) {#if $activeRoute !== null && $activeRoute.route === route}",
ctx
});
return block;
}
// (43:2) {:else}
function create_else_block$4(ctx) {
let current;
const default_slot_template = /*#slots*/ ctx[10].default;
const default_slot = create_slot(default_slot_template, ctx, /*$$scope*/ ctx[9], get_default_slot_context);
const block = {
c: function create() {
if (default_slot) default_slot.c();
},
m: function mount(target, anchor) {
if (default_slot) {
default_slot.m(target, anchor);
}
current = true;
},
p: function update(ctx, dirty) {
if (default_slot) {
if (default_slot.p && (!current || dirty & /*$$scope, routeParams, $location*/ 532)) {
update_slot(default_slot, default_slot_template, ctx, /*$$scope*/ ctx[9], dirty, get_default_slot_changes, get_default_slot_context);
}
}
},
i: function intro(local) {
if (current) return;
transition_in(default_slot, local);
current = true;
},
o: function outro(local) {
transition_out(default_slot, local);
current = false;
},
d: function destroy(detaching) {
if (default_slot) default_slot.d(detaching);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_else_block$4.name,
type: "else",
source: "(43:2) {:else}",
ctx
});
return block;
}
// (41:2) {#if component !== null}
function create_if_block_1$5(ctx) {
let switch_instance;
let switch_instance_anchor;
let current;
const switch_instance_spread_levels = [
{ location: /*$location*/ ctx[4] },
/*routeParams*/ ctx[2],
/*routeProps*/ ctx[3]
];
var switch_value = /*component*/ ctx[0];
function switch_props(ctx) {
let switch_instance_props = {};
for (let i = 0; i < switch_instance_spread_levels.length; i += 1) {
switch_instance_props = assign(switch_instance_props, switch_instance_spread_levels[i]);
}
return {
props: switch_instance_props,
$$inline: true
};
}
if (switch_value) {
switch_instance = new switch_value(switch_props());
}
const block = {
c: function create() {
if (switch_instance) create_component(switch_instance.$$.fragment);
switch_instance_anchor = empty();
},
m: function mount(target, anchor) {
if (switch_instance) {
mount_component(switch_instance, target, anchor);
}
insert_dev(target, switch_instance_anchor, anchor);
current = true;
},
p: function update(ctx, dirty) {
const switch_instance_changes = (dirty & /*$location, routeParams, routeProps*/ 28)
? get_spread_update(switch_instance_spread_levels, [
dirty & /*$location*/ 16 && { location: /*$location*/ ctx[4] },
dirty & /*routeParams*/ 4 && get_spread_object(/*routeParams*/ ctx[2]),
dirty & /*routeProps*/ 8 && get_spread_object(/*routeProps*/ ctx[3])
])
: {};
if (switch_value !== (switch_value = /*component*/ ctx[0])) {
if (switch_instance) {
group_outros();
const old_component = switch_instance;
transition_out(old_component.$$.fragment, 1, 0, () => {
destroy_component(old_component, 1);
});
check_outros();
}
if (switch_value) {
switch_instance = new switch_value(switch_props());
create_component(switch_instance.$$.fragment);
transition_in(switch_instance.$$.fragment, 1);
mount_component(switch_instance, switch_instance_anchor.parentNode, switch_instance_anchor);
} else {
switch_instance = null;
}
} else if (switch_value) {
switch_instance.$set(switch_instance_changes);
}
},
i: function intro(local) {
if (current) return;
if (switch_instance) transition_in(switch_instance.$$.fragment, local);
current = true;
},
o: function outro(local) {
if (switch_instance) transition_out(switch_instance.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(switch_instance_anchor);
if (switch_instance) destroy_component(switch_instance, detaching);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block_1$5.name,
type: "if",
source: "(41:2) {#if component !== null}",
ctx
});
return block;
}
function create_fragment$e(ctx) {
let if_block_anchor;
let current;
let if_block = /*$activeRoute*/ ctx[1] !== null && /*$activeRoute*/ ctx[1].route === /*route*/ ctx[7] && create_if_block$5(ctx);
const block = {
c: function create() {
if (if_block) if_block.c();
if_block_anchor = empty();
},
l: function claim(nodes) {
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
},
m: function mount(target, anchor) {
if (if_block) if_block.m(target, anchor);
insert_dev(target, if_block_anchor, anchor);
current = true;
},
p: function update(ctx, [dirty]) {
if (/*$activeRoute*/ ctx[1] !== null && /*$activeRoute*/ ctx[1].route === /*route*/ ctx[7]) {
if (if_block) {
if_block.p(ctx, dirty);
if (dirty & /*$activeRoute*/ 2) {
transition_in(if_block, 1);
}
} else {
if_block = create_if_block$5(ctx);
if_block.c();
transition_in(if_block, 1);
if_block.m(if_block_anchor.parentNode, if_block_anchor);
}
} else if (if_block) {
group_outros();
transition_out(if_block, 1, 1, () => {
if_block = null;
});
check_outros();
}
},
i: function intro(local) {
if (current) return;
transition_in(if_block);
current = true;
},
o: function outro(local) {
transition_out(if_block);
current = false;
},
d: function destroy(detaching) {
if (if_block) if_block.d(detaching);
if (detaching) detach_dev(if_block_anchor);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_fragment$e.name,
type: "component",
source: "",
ctx
});
return block;
}
function instance$e($$self, $$props, $$invalidate) {
let $activeRoute;
let $location;
let { $$slots: slots = {}, $$scope } = $$props;
validate_slots("Route", slots, ['default']);
let { path = "" } = $$props;
let { component = null } = $$props;
const { registerRoute, unregisterRoute, activeRoute } = getContext(ROUTER);
validate_store(activeRoute, "activeRoute");
component_subscribe($$self, activeRoute, value => $$invalidate(1, $activeRoute = value));
const location = getContext(LOCATION);
validate_store(location, "location");
component_subscribe($$self, location, value => $$invalidate(4, $location = value));
const route = {
path,
// If no path prop is given, this Route will act as the default Route
// that is rendered if no other Route in the Router is a match.
default: path === ""
};
let routeParams = {};
let routeProps = {};
registerRoute(route);
// There is no need to unregister Routes in SSR since it will all be
// thrown away anyway.
if (typeof window !== "undefined") {
onDestroy(() => {
unregisterRoute(route);
});
}
$$self.$$set = $$new_props => {
$$invalidate(13, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
if ("path" in $$new_props) $$invalidate(8, path = $$new_props.path);
if ("component" in $$new_props) $$invalidate(0, component = $$new_props.component);
if ("$$scope" in $$new_props) $$invalidate(9, $$scope = $$new_props.$$scope);
};
$$self.$capture_state = () => ({
getContext,
onDestroy,
ROUTER,
LOCATION,
path,
component,
registerRoute,
unregisterRoute,
activeRoute,
location,
route,
routeParams,
routeProps,
$activeRoute,
$location
});
$$self.$inject_state = $$new_props => {
$$invalidate(13, $$props = assign(assign({}, $$props), $$new_props));
if ("path" in $$props) $$invalidate(8, path = $$new_props.path);
if ("component" in $$props) $$invalidate(0, component = $$new_props.component);
if ("routeParams" in $$props) $$invalidate(2, routeParams = $$new_props.routeParams);
if ("routeProps" in $$props) $$invalidate(3, routeProps = $$new_props.routeProps);
};
if ($$props && "$$inject" in $$props) {
$$self.$inject_state($$props.$$inject);
}
$$self.$$.update = () => {
if ($$self.$$.dirty & /*$activeRoute*/ 2) {
if ($activeRoute && $activeRoute.route === route) {
$$invalidate(2, routeParams = $activeRoute.params);
}
}
{
const { path, component, ...rest } = $$props;
$$invalidate(3, routeProps = rest);
}
};
$$props = exclude_internal_props($$props);
return [
component,
$activeRoute,
routeParams,
routeProps,
$location,
activeRoute,
location,
route,
path,
$$scope,
slots
];
}
class Route extends SvelteComponentDev {
constructor(options) {
super(options);
init(this, options, instance$e, create_fragment$e, safe_not_equal, { path: 8, component: 0 });
dispatch_dev("SvelteRegisterComponent", {
component: this,
tagName: "Route",
options,
id: create_fragment$e.name
});
}
get path() {
throw new Error("<Route>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set path(value) {
throw new Error("<Route>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get component() {
throw new Error("<Route>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set component(value) {
throw new Error("<Route>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
}
/* node_modules/svelte-routing/src/Link.svelte generated by Svelte v3.38.2 */
const file$b = "node_modules/svelte-routing/src/Link.svelte";
function create_fragment$d(ctx) {
let a;
let current;
let mounted;
let dispose;
const default_slot_template = /*#slots*/ ctx[16].default;
const default_slot = create_slot(default_slot_template, ctx, /*$$scope*/ ctx[15], null);
let a_levels = [
{ href: /*href*/ ctx[0] },
{ "aria-current": /*ariaCurrent*/ ctx[2] },
/*props*/ ctx[1],
/*$$restProps*/ ctx[6]
];
let a_data = {};
for (let i = 0; i < a_levels.length; i += 1) {
a_data = assign(a_data, a_levels[i]);
}
const block = {
c: function create() {
a = element("a");
if (default_slot) default_slot.c();
set_attributes(a, a_data);
add_location(a, file$b, 40, 0, 1249);
},
l: function claim(nodes) {
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
},
m: function mount(target, anchor) {
insert_dev(target, a, anchor);
if (default_slot) {
default_slot.m(a, null);
}
current = true;
if (!mounted) {
dispose = listen_dev(a, "click", /*onClick*/ ctx[5], false, false, false);
mounted = true;
}
},
p: function update(ctx, [dirty]) {
if (default_slot) {
if (default_slot.p && (!current || dirty & /*$$scope*/ 32768)) {
update_slot(default_slot, default_slot_template, ctx, /*$$scope*/ ctx[15], dirty, null, null);
}
}
set_attributes(a, a_data = get_spread_update(a_levels, [
(!current || dirty & /*href*/ 1) && { href: /*href*/ ctx[0] },
(!current || dirty & /*ariaCurrent*/ 4) && { "aria-current": /*ariaCurrent*/ ctx[2] },
dirty & /*props*/ 2 && /*props*/ ctx[1],
dirty & /*$$restProps*/ 64 && /*$$restProps*/ ctx[6]
]));
},
i: function intro(local) {
if (current) return;
transition_in(default_slot, local);
current = true;
},
o: function outro(local) {
transition_out(default_slot, local);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(a);
if (default_slot) default_slot.d(detaching);
mounted = false;
dispose();
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_fragment$d.name,
type: "component",
source: "",
ctx
});
return block;
}
function instance$d($$self, $$props, $$invalidate) {
let ariaCurrent;
const omit_props_names = ["to","replace","state","getProps"];
let $$restProps = compute_rest_props($$props, omit_props_names);
let $base;
let $location;
let { $$slots: slots = {}, $$scope } = $$props;
validate_slots("Link", slots, ['default']);
let { to = "#" } = $$props;
let { replace = false } = $$props;
let { state = {} } = $$props;
let { getProps = () => ({}) } = $$props;
const { base } = getContext(ROUTER);
validate_store(base, "base");
component_subscribe($$self, base, value => $$invalidate(13, $base = value));
const location = getContext(LOCATION);
validate_store(location, "location");
component_subscribe($$self, location, value => $$invalidate(14, $location = value));
const dispatch = createEventDispatcher();
let href, isPartiallyCurrent, isCurrent, props;
function onClick(event) {
dispatch("click", event);
if (shouldNavigate(event)) {
event.preventDefault();
// Don't push another entry to the history stack when the user
// clicks on a Link to the page they are currently on.
const shouldReplace = $location.pathname === href || replace;
navigate(href, { state, replace: shouldReplace });
}
}
$$self.$$set = $$new_props => {
$$props = assign(assign({}, $$props), exclude_internal_props($$new_props));
$$invalidate(6, $$restProps = compute_rest_props($$props, omit_props_names));
if ("to" in $$new_props) $$invalidate(7, to = $$new_props.to);
if ("replace" in $$new_props) $$invalidate(8, replace = $$new_props.replace);
if ("state" in $$new_props) $$invalidate(9, state = $$new_props.state);
if ("getProps" in $$new_props) $$invalidate(10, getProps = $$new_props.getProps);
if ("$$scope" in $$new_props) $$invalidate(15, $$scope = $$new_props.$$scope);
};
$$self.$capture_state = () => ({
getContext,
createEventDispatcher,
ROUTER,
LOCATION,
navigate,
startsWith,
resolve,
shouldNavigate,
to,
replace,
state,
getProps,
base,
location,
dispatch,
href,
isPartiallyCurrent,
isCurrent,
props,
onClick,
$base,
$location,
ariaCurrent
});
$$self.$inject_state = $$new_props => {
if ("to" in $$props) $$invalidate(7, to = $$new_props.to);
if ("replace" in $$props) $$invalidate(8, replace = $$new_props.replace);
if ("state" in $$props) $$invalidate(9, state = $$new_props.state);
if ("getProps" in $$props) $$invalidate(10, getProps = $$new_props.getProps);
if ("href" in $$props) $$invalidate(0, href = $$new_props.href);
if ("isPartiallyCurrent" in $$props) $$invalidate(11, isPartiallyCurrent = $$new_props.isPartiallyCurrent);
if ("isCurrent" in $$props) $$invalidate(12, isCurrent = $$new_props.isCurrent);
if ("props" in $$props) $$invalidate(1, props = $$new_props.props);
if ("ariaCurrent" in $$props) $$invalidate(2, ariaCurrent = $$new_props.ariaCurrent);
};
if ($$props && "$$inject" in $$props) {
$$self.$inject_state($$props.$$inject);
}
$$self.$$.update = () => {
if ($$self.$$.dirty & /*to, $base*/ 8320) {
$$invalidate(0, href = to === "/" ? $base.uri : resolve(to, $base.uri));
}
if ($$self.$$.dirty & /*$location, href*/ 16385) {
$$invalidate(11, isPartiallyCurrent = startsWith($location.pathname, href));
}
if ($$self.$$.dirty & /*href, $location*/ 16385) {
$$invalidate(12, isCurrent = href === $location.pathname);
}
if ($$self.$$.dirty & /*isCurrent*/ 4096) {
$$invalidate(2, ariaCurrent = isCurrent ? "page" : undefined);
}
if ($$self.$$.dirty & /*getProps, $location, href, isPartiallyCurrent, isCurrent*/ 23553) {
$$invalidate(1, props = getProps({
location: $location,
href,
isPartiallyCurrent,
isCurrent
}));
}
};
return [
href,
props,
ariaCurrent,
base,
location,
onClick,
$$restProps,
to,
replace,
state,
getProps,
isPartiallyCurrent,
isCurrent,
$base,
$location,
$$scope,
slots
];
}
class Link extends SvelteComponentDev {
constructor(options) {
super(options);
init(this, options, instance$d, create_fragment$d, safe_not_equal, {
to: 7,
replace: 8,
state: 9,
getProps: 10
});
dispatch_dev("SvelteRegisterComponent", {
component: this,
tagName: "Link",
options,
id: create_fragment$d.name
});
}
get to() {
throw new Error("<Link>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set to(value) {
throw new Error("<Link>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get replace() {
throw new Error("<Link>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set replace(value) {
throw new Error("<Link>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get state() {
throw new Error("<Link>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set state(value) {
throw new Error("<Link>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get getProps() {
throw new Error("<Link>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set getProps(value) {
throw new Error("<Link>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
}
const storedToken = localStorage.getItem("apiToken");
const token$1 = writable(storedToken);
token$1.subscribe(value => {
localStorage.setItem("apiToken", value);
});
/* src/Navbar.svelte generated by Svelte v3.38.2 */
const file$a = "src/Navbar.svelte";
// (19:8) <Link class="navbar-item" to="/">
function create_default_slot_5$1(ctx) {
let t;
const block = {
c: function create() {
t = text("Shioriko");
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot_5$1.name,
type: "slot",
source: "(19:8) <Link class=\\\"navbar-item\\\" to=\\\"/\\\">",
ctx
});
return block;
}
// (37:12) <Link class="navbar-item" to="/posts">
function create_default_slot_4$1(ctx) {
let t;
const block = {
c: function create() {
t = text("Posts");
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot_4$1.name,
type: "slot",
source: "(37:12) <Link class=\\\"navbar-item\\\" to=\\\"/posts\\\">",
ctx
});
return block;
}
// (38:12) {#if loggedIn}
function create_if_block_1$4(ctx) {
let link;
let current;
link = new Link({
props: {
class: "navbar-item",
to: "/upload",
$$slots: { default: [create_default_slot_3$1] },
$$scope: { ctx }
},
$$inline: true
});
const block = {
c: function create() {
create_component(link.$$.fragment);
},
m: function mount(target, anchor) {
mount_component(link, target, anchor);
current = true;
},
i: function intro(local) {
if (current) return;
transition_in(link.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(link.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
destroy_component(link, detaching);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block_1$4.name,
type: "if",
source: "(38:12) {#if loggedIn}",
ctx
});
return block;
}
// (39:16) <Link class="navbar-item" to="/upload">
function create_default_slot_3$1(ctx) {
let t;
const block = {
c: function create() {
t = text("Upload");
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot_3$1.name,
type: "slot",
source: "(39:16) <Link class=\\\"navbar-item\\\" to=\\\"/upload\\\">",
ctx
});
return block;
}
// (52:12) {:else}
function create_else_block$3(ctx) {
let div1;
let div0;
let link0;
let t;
let link1;
let current;
link0 = new Link({
props: {
to: "/auth/register",
class: "button is-primary",
$$slots: { default: [create_default_slot_2$1] },
$$scope: { ctx }
},
$$inline: true
});
link1 = new Link({
props: {
to: "/auth/login",
class: "button is-light",
$$slots: { default: [create_default_slot_1$1] },
$$scope: { ctx }
},
$$inline: true
});
const block = {
c: function create() {
div1 = element("div");
div0 = element("div");
create_component(link0.$$.fragment);
t = space();
create_component(link1.$$.fragment);
attr_dev(div0, "class", "buttons");
add_location(div0, file$a, 53, 20, 1515);
attr_dev(div1, "class", "navbar-item");
add_location(div1, file$a, 52, 16, 1469);
},
m: function mount(target, anchor) {
insert_dev(target, div1, anchor);
append_dev(div1, div0);
mount_component(link0, div0, null);
append_dev(div0, t);
mount_component(link1, div0, null);
current = true;
},
i: function intro(local) {
if (current) return;
transition_in(link0.$$.fragment, local);
transition_in(link1.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(link0.$$.fragment, local);
transition_out(link1.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(div1);
destroy_component(link0);
destroy_component(link1);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_else_block$3.name,
type: "else",
source: "(52:12) {:else}",
ctx
});
return block;
}
// (44:12) {#if loggedIn}
function create_if_block$4(ctx) {
let div1;
let div0;
let link;
let current;
link = new Link({
props: {
to: "/auth/logout",
class: "button is-light",
$$slots: { default: [create_default_slot$5] },
$$scope: { ctx }
},
$$inline: true
});
const block = {
c: function create() {
div1 = element("div");
div0 = element("div");
create_component(link.$$.fragment);
attr_dev(div0, "class", "buttons");
add_location(div0, file$a, 45, 20, 1220);
attr_dev(div1, "class", "navbar-item");
add_location(div1, file$a, 44, 16, 1174);
},
m: function mount(target, anchor) {
insert_dev(target, div1, anchor);
append_dev(div1, div0);
mount_component(link, div0, null);
current = true;
},
i: function intro(local) {
if (current) return;
transition_in(link.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(link.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(div1);
destroy_component(link);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block$4.name,
type: "if",
source: "(44:12) {#if loggedIn}",
ctx
});
return block;
}
// (55:24) <Link to="/auth/register" class="button is-primary">
function create_default_slot_2$1(ctx) {
let strong;
const block = {
c: function create() {
strong = element("strong");
strong.textContent = "Register";
add_location(strong, file$a, 55, 28, 1642);
},
m: function mount(target, anchor) {
insert_dev(target, strong, anchor);
},
d: function destroy(detaching) {
if (detaching) detach_dev(strong);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot_2$1.name,
type: "slot",
source: "(55:24) <Link to=\\\"/auth/register\\\" class=\\\"button is-primary\\\">",
ctx
});
return block;
}
// (58:24) <Link to="/auth/login" class="button is-light">
function create_default_slot_1$1(ctx) {
let t;
const block = {
c: function create() {
t = text("Log in");
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot_1$1.name,
type: "slot",
source: "(58:24) <Link to=\\\"/auth/login\\\" class=\\\"button is-light\\\">",
ctx
});
return block;
}
// (47:24) <Link to="/auth/logout" class="button is-light">
function create_default_slot$5(ctx) {
let t;
const block = {
c: function create() {
t = text("Log out");
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot$5.name,
type: "slot",
source: "(47:24) <Link to=\\\"/auth/logout\\\" class=\\\"button is-light\\\">",
ctx
});
return block;
}
function create_fragment$c(ctx) {
let nav;
let div0;
let link0;
let t0;
let a;
let span0;
let t1;
let span1;
let t2;
let span2;
let t3;
let div3;
let div1;
let link1;
let t4;
let t5;
let div2;
let current_block_type_index;
let if_block1;
let current;
let mounted;
let dispose;
link0 = new Link({
props: {
class: "navbar-item",
to: "/",
$$slots: { default: [create_default_slot_5$1] },
$$scope: { ctx }
},
$$inline: true
});
link1 = new Link({
props: {
class: "navbar-item",
to: "/posts",
$$slots: { default: [create_default_slot_4$1] },
$$scope: { ctx }
},
$$inline: true
});
let if_block0 = /*loggedIn*/ ctx[1] && create_if_block_1$4(ctx);
const if_block_creators = [create_if_block$4, create_else_block$3];
const if_blocks = [];
function select_block_type(ctx, dirty) {
if (/*loggedIn*/ ctx[1]) return 0;
return 1;
}
current_block_type_index = select_block_type(ctx);
if_block1 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
const block = {
c: function create() {
nav = element("nav");
div0 = element("div");
create_component(link0.$$.fragment);
t0 = space();
a = element("a");
span0 = element("span");
t1 = space();
span1 = element("span");
t2 = space();
span2 = element("span");
t3 = space();
div3 = element("div");
div1 = element("div");
create_component(link1.$$.fragment);
t4 = space();
if (if_block0) if_block0.c();
t5 = space();
div2 = element("div");
if_block1.c();
attr_dev(span0, "aria-hidden", "true");
add_location(span0, file$a, 28, 12, 678);
attr_dev(span1, "aria-hidden", "true");
add_location(span1, file$a, 29, 12, 718);
attr_dev(span2, "aria-hidden", "true");
add_location(span2, file$a, 30, 12, 758);
attr_dev(a, "href", "#");
attr_dev(a, "role", "button");
attr_dev(a, "class", "navbar-burger");
attr_dev(a, "aria-label", "menu");
attr_dev(a, "aria-expanded", "false");
add_location(a, file$a, 20, 8, 472);
attr_dev(div0, "class", "navbar-brand");
add_location(div0, file$a, 17, 4, 379);
attr_dev(div1, "class", "navbar-start");
add_location(div1, file$a, 35, 8, 878);
attr_dev(div2, "class", "navbar-end");
add_location(div2, file$a, 42, 8, 1106);
attr_dev(div3, "class", "navbar-menu");
toggle_class(div3, "is-active", /*menu_shown*/ ctx[0]);
add_location(div3, file$a, 34, 4, 815);
attr_dev(nav, "class", "navbar");
attr_dev(nav, "role", "navigation");
attr_dev(nav, "aria-label", "main navigation");
add_location(nav, file$a, 16, 0, 307);
},
l: function claim(nodes) {
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
},
m: function mount(target, anchor) {
insert_dev(target, nav, anchor);
append_dev(nav, div0);
mount_component(link0, div0, null);
append_dev(div0, t0);
append_dev(div0, a);
append_dev(a, span0);
append_dev(a, t1);
append_dev(a, span1);
append_dev(a, t2);
append_dev(a, span2);
append_dev(nav, t3);
append_dev(nav, div3);
append_dev(div3, div1);
mount_component(link1, div1, null);
append_dev(div1, t4);
if (if_block0) if_block0.m(div1, null);
append_dev(div3, t5);
append_dev(div3, div2);
if_blocks[current_block_type_index].m(div2, null);
current = true;
if (!mounted) {
dispose = listen_dev(a, "click", /*toggleMenu*/ ctx[2], false, false, false);
mounted = true;
}
},
p: function update(ctx, [dirty]) {
const link0_changes = {};
if (dirty & /*$$scope*/ 8) {
link0_changes.$$scope = { dirty, ctx };
}
link0.$set(link0_changes);
const link1_changes = {};
if (dirty & /*$$scope*/ 8) {
link1_changes.$$scope = { dirty, ctx };
}
link1.$set(link1_changes);
if (/*loggedIn*/ ctx[1]) {
if (if_block0) {
if (dirty & /*loggedIn*/ 2) {
transition_in(if_block0, 1);
}
} else {
if_block0 = create_if_block_1$4(ctx);
if_block0.c();
transition_in(if_block0, 1);
if_block0.m(div1, null);
}
} else if (if_block0) {
group_outros();
transition_out(if_block0, 1, 1, () => {
if_block0 = null;
});
check_outros();
}
let previous_block_index = current_block_type_index;
current_block_type_index = select_block_type(ctx);
if (current_block_type_index !== previous_block_index) {
group_outros();
transition_out(if_blocks[previous_block_index], 1, 1, () => {
if_blocks[previous_block_index] = null;
});
check_outros();
if_block1 = if_blocks[current_block_type_index];
if (!if_block1) {
if_block1 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
if_block1.c();
}
transition_in(if_block1, 1);
if_block1.m(div2, null);
}
if (dirty & /*menu_shown*/ 1) {
toggle_class(div3, "is-active", /*menu_shown*/ ctx[0]);
}
},
i: function intro(local) {
if (current) return;
transition_in(link0.$$.fragment, local);
transition_in(link1.$$.fragment, local);
transition_in(if_block0);
transition_in(if_block1);
current = true;
},
o: function outro(local) {
transition_out(link0.$$.fragment, local);
transition_out(link1.$$.fragment, local);
transition_out(if_block0);
transition_out(if_block1);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(nav);
destroy_component(link0);
destroy_component(link1);
if (if_block0) if_block0.d();
if_blocks[current_block_type_index].d();
mounted = false;
dispose();
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_fragment$c.name,
type: "component",
source: "",
ctx
});
return block;
}
function instance$c($$self, $$props, $$invalidate) {
let { $$slots: slots = {}, $$scope } = $$props;
validate_slots("Navbar", slots, []);
let menu_shown = false;
let loggedIn = false;
token$1.subscribe(value => {
$$invalidate(1, loggedIn = value !== "");
});
const toggleMenu = () => {
$$invalidate(0, menu_shown = !menu_shown);
};
const writable_props = [];
Object.keys($$props).forEach(key => {
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(`<Navbar> was created with unknown prop '${key}'`);
});
$$self.$capture_state = () => ({
Link,
token: token$1,
menu_shown,
loggedIn,
toggleMenu
});
$$self.$inject_state = $$props => {
if ("menu_shown" in $$props) $$invalidate(0, menu_shown = $$props.menu_shown);
if ("loggedIn" in $$props) $$invalidate(1, loggedIn = $$props.loggedIn);
};
if ($$props && "$$inject" in $$props) {
$$self.$inject_state($$props.$$inject);
}
return [menu_shown, loggedIn, toggleMenu];
}
class Navbar extends SvelteComponentDev {
constructor(options) {
super(options);
init(this, options, instance$c, create_fragment$c, safe_not_equal, {});
dispatch_dev("SvelteRegisterComponent", {
component: this,
tagName: "Navbar",
options,
id: create_fragment$c.name
});
}
}
/* src/routes/Home.svelte generated by Svelte v3.38.2 */
const file$9 = "src/routes/Home.svelte";
function create_fragment$b(ctx) {
let section;
let div;
let p0;
let t1;
let p1;
const block = {
c: function create() {
section = element("section");
div = element("div");
p0 = element("p");
p0.textContent = "Shioriko";
t1 = space();
p1 = element("p");
p1.textContent = "Booru-style gallery written in Go and Svelte";
attr_dev(p0, "class", "title");
add_location(p0, file$9, 5, 4, 94);
attr_dev(p1, "class", "subtitle");
add_location(p1, file$9, 6, 4, 128);
attr_dev(div, "class", "hero-body");
add_location(div, file$9, 4, 2, 66);
attr_dev(section, "class", "hero is-primary is-medium");
add_location(section, file$9, 3, 0, 20);
},
l: function claim(nodes) {
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
},
m: function mount(target, anchor) {
insert_dev(target, section, anchor);
append_dev(section, div);
append_dev(div, p0);
append_dev(div, t1);
append_dev(div, p1);
},
p: noop,
i: noop,
o: noop,
d: function destroy(detaching) {
if (detaching) detach_dev(section);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_fragment$b.name,
type: "component",
source: "",
ctx
});
return block;
}
function instance$b($$self, $$props) {
let { $$slots: slots = {}, $$scope } = $$props;
validate_slots("Home", slots, []);
const writable_props = [];
Object.keys($$props).forEach(key => {
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(`<Home> was created with unknown prop '${key}'`);
});
return [];
}
class Home extends SvelteComponentDev {
constructor(options) {
super(options);
init(this, options, instance$b, create_fragment$b, safe_not_equal, {});
dispatch_dev("SvelteRegisterComponent", {
component: this,
tagName: "Home",
options,
id: create_fragment$b.name
});
}
}
var bind = function bind(fn, thisArg) {
return function wrap() {
var args = new Array(arguments.length);
for (var i = 0; i < args.length; i++) {
args[i] = arguments[i];
}
return fn.apply(thisArg, args);
};
};
/*global toString:true*/
// utils is a library of generic helper functions non-specific to axios
var toString = Object.prototype.toString;
/**
* Determine if a value is an Array
*
* @param {Object} val The value to test
* @returns {boolean} True if value is an Array, otherwise false
*/
function isArray(val) {
return toString.call(val) === '[object Array]';
}
/**
* Determine if a value is undefined
*
* @param {Object} val The value to test
* @returns {boolean} True if the value is undefined, otherwise false
*/
function isUndefined(val) {
return typeof val === 'undefined';
}
/**
* Determine if a value is a Buffer
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a Buffer, otherwise false
*/
function isBuffer(val) {
return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
&& typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);
}
/**
* Determine if a value is an ArrayBuffer
*
* @param {Object} val The value to test
* @returns {boolean} True if value is an ArrayBuffer, otherwise false
*/
function isArrayBuffer(val) {
return toString.call(val) === '[object ArrayBuffer]';
}
/**
* Determine if a value is a FormData
*
* @param {Object} val The value to test
* @returns {boolean} True if value is an FormData, otherwise false
*/
function isFormData(val) {
return (typeof FormData !== 'undefined') && (val instanceof FormData);
}
/**
* Determine if a value is a view on an ArrayBuffer
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
*/
function isArrayBufferView(val) {
var result;
if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
result = ArrayBuffer.isView(val);
} else {
result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);
}
return result;
}
/**
* Determine if a value is a String
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a String, otherwise false
*/
function isString(val) {
return typeof val === 'string';
}
/**
* Determine if a value is a Number
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a Number, otherwise false
*/
function isNumber(val) {
return typeof val === 'number';
}
/**
* Determine if a value is an Object
*
* @param {Object} val The value to test
* @returns {boolean} True if value is an Object, otherwise false
*/
function isObject(val) {
return val !== null && typeof val === 'object';
}
/**
* Determine if a value is a plain Object
*
* @param {Object} val The value to test
* @return {boolean} True if value is a plain Object, otherwise false
*/
function isPlainObject(val) {
if (toString.call(val) !== '[object Object]') {
return false;
}
var prototype = Object.getPrototypeOf(val);
return prototype === null || prototype === Object.prototype;
}
/**
* Determine if a value is a Date
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a Date, otherwise false
*/
function isDate(val) {
return toString.call(val) === '[object Date]';
}
/**
* Determine if a value is a File
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a File, otherwise false
*/
function isFile(val) {
return toString.call(val) === '[object File]';
}
/**
* Determine if a value is a Blob
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a Blob, otherwise false
*/
function isBlob(val) {
return toString.call(val) === '[object Blob]';
}
/**
* Determine if a value is a Function
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a Function, otherwise false
*/
function isFunction(val) {
return toString.call(val) === '[object Function]';
}
/**
* Determine if a value is a Stream
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a Stream, otherwise false
*/
function isStream(val) {
return isObject(val) && isFunction(val.pipe);
}
/**
* Determine if a value is a URLSearchParams object
*
* @param {Object} val The value to test
* @returns {boolean} True if value is a URLSearchParams object, otherwise false
*/
function isURLSearchParams(val) {
return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;
}
/**
* Trim excess whitespace off the beginning and end of a string
*
* @param {String} str The String to trim
* @returns {String} The String freed of excess whitespace
*/
function trim(str) {
return str.replace(/^\s*/, '').replace(/\s*$/, '');
}
/**
* Determine if we're running in a standard browser environment
*
* This allows axios to run in a web worker, and react-native.
* Both environments support XMLHttpRequest, but not fully standard globals.
*
* web workers:
* typeof window -> undefined
* typeof document -> undefined
*
* react-native:
* navigator.product -> 'ReactNative'
* nativescript
* navigator.product -> 'NativeScript' or 'NS'
*/
function isStandardBrowserEnv() {
if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||
navigator.product === 'NativeScript' ||
navigator.product === 'NS')) {
return false;
}
return (
typeof window !== 'undefined' &&
typeof document !== 'undefined'
);
}
/**
* Iterate over an Array or an Object invoking a function for each item.
*
* If `obj` is an Array callback will be called passing
* the value, index, and complete array for each item.
*
* If 'obj' is an Object callback will be called passing
* the value, key, and complete object for each property.
*
* @param {Object|Array} obj The object to iterate
* @param {Function} fn The callback to invoke for each item
*/
function forEach(obj, fn) {
// Don't bother if no value provided
if (obj === null || typeof obj === 'undefined') {
return;
}
// Force an array if not already something iterable
if (typeof obj !== 'object') {
/*eslint no-param-reassign:0*/
obj = [obj];
}
if (isArray(obj)) {
// Iterate over array values
for (var i = 0, l = obj.length; i < l; i++) {
fn.call(null, obj[i], i, obj);
}
} else {
// Iterate over object keys
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
fn.call(null, obj[key], key, obj);
}
}
}
}
/**
* Accepts varargs expecting each argument to be an object, then
* immutably merges the properties of each object and returns result.
*
* When multiple objects contain the same key the later object in
* the arguments list will take precedence.
*
* Example:
*
* ```js
* var result = merge({foo: 123}, {foo: 456});
* console.log(result.foo); // outputs 456
* ```
*
* @param {Object} obj1 Object to merge
* @returns {Object} Result of all merge properties
*/
function merge(/* obj1, obj2, obj3, ... */) {
var result = {};
function assignValue(val, key) {
if (isPlainObject(result[key]) && isPlainObject(val)) {
result[key] = merge(result[key], val);
} else if (isPlainObject(val)) {
result[key] = merge({}, val);
} else if (isArray(val)) {
result[key] = val.slice();
} else {
result[key] = val;
}
}
for (var i = 0, l = arguments.length; i < l; i++) {
forEach(arguments[i], assignValue);
}
return result;
}
/**
* Extends object a by mutably adding to it the properties of object b.
*
* @param {Object} a The object to be extended
* @param {Object} b The object to copy properties from
* @param {Object} thisArg The object to bind function to
* @return {Object} The resulting value of object a
*/
function extend(a, b, thisArg) {
forEach(b, function assignValue(val, key) {
if (thisArg && typeof val === 'function') {
a[key] = bind(val, thisArg);
} else {
a[key] = val;
}
});
return a;
}
/**
* Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
*
* @param {string} content with BOM
* @return {string} content value without BOM
*/
function stripBOM(content) {
if (content.charCodeAt(0) === 0xFEFF) {
content = content.slice(1);
}
return content;
}
var utils = {
isArray: isArray,
isArrayBuffer: isArrayBuffer,
isBuffer: isBuffer,
isFormData: isFormData,
isArrayBufferView: isArrayBufferView,
isString: isString,
isNumber: isNumber,
isObject: isObject,
isPlainObject: isPlainObject,
isUndefined: isUndefined,
isDate: isDate,
isFile: isFile,
isBlob: isBlob,
isFunction: isFunction,
isStream: isStream,
isURLSearchParams: isURLSearchParams,
isStandardBrowserEnv: isStandardBrowserEnv,
forEach: forEach,
merge: merge,
extend: extend,
trim: trim,
stripBOM: stripBOM
};
function encode(val) {
return encodeURIComponent(val).
replace(/%3A/gi, ':').
replace(/%24/g, '$').
replace(/%2C/gi, ',').
replace(/%20/g, '+').
replace(/%5B/gi, '[').
replace(/%5D/gi, ']');
}
/**
* Build a URL by appending params to the end
*
* @param {string} url The base of the url (e.g., http://www.google.com)
* @param {object} [params] The params to be appended
* @returns {string} The formatted url
*/
var buildURL = function buildURL(url, params, paramsSerializer) {
/*eslint no-param-reassign:0*/
if (!params) {
return url;
}
var serializedParams;
if (paramsSerializer) {
serializedParams = paramsSerializer(params);
} else if (utils.isURLSearchParams(params)) {
serializedParams = params.toString();
} else {
var parts = [];
utils.forEach(params, function serialize(val, key) {
if (val === null || typeof val === 'undefined') {
return;
}
if (utils.isArray(val)) {
key = key + '[]';
} else {
val = [val];
}
utils.forEach(val, function parseValue(v) {
if (utils.isDate(v)) {
v = v.toISOString();
} else if (utils.isObject(v)) {
v = JSON.stringify(v);
}
parts.push(encode(key) + '=' + encode(v));
});
});
serializedParams = parts.join('&');
}
if (serializedParams) {
var hashmarkIndex = url.indexOf('#');
if (hashmarkIndex !== -1) {
url = url.slice(0, hashmarkIndex);
}
url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
}
return url;
};
function InterceptorManager() {
this.handlers = [];
}
/**
* Add a new interceptor to the stack
*
* @param {Function} fulfilled The function to handle `then` for a `Promise`
* @param {Function} rejected The function to handle `reject` for a `Promise`
*
* @return {Number} An ID used to remove interceptor later
*/
InterceptorManager.prototype.use = function use(fulfilled, rejected) {
this.handlers.push({
fulfilled: fulfilled,
rejected: rejected
});
return this.handlers.length - 1;
};
/**
* Remove an interceptor from the stack
*
* @param {Number} id The ID that was returned by `use`
*/
InterceptorManager.prototype.eject = function eject(id) {
if (this.handlers[id]) {
this.handlers[id] = null;
}
};
/**
* Iterate over all the registered interceptors
*
* This method is particularly useful for skipping over any
* interceptors that may have become `null` calling `eject`.
*
* @param {Function} fn The function to call for each interceptor
*/
InterceptorManager.prototype.forEach = function forEach(fn) {
utils.forEach(this.handlers, function forEachHandler(h) {
if (h !== null) {
fn(h);
}
});
};
var InterceptorManager_1 = InterceptorManager;
/**
* Transform the data for a request or a response
*
* @param {Object|String} data The data to be transformed
* @param {Array} headers The headers for the request or response
* @param {Array|Function} fns A single function or Array of functions
* @returns {*} The resulting transformed data
*/
var transformData = function transformData(data, headers, fns) {
/*eslint no-param-reassign:0*/
utils.forEach(fns, function transform(fn) {
data = fn(data, headers);
});
return data;
};
var isCancel = function isCancel(value) {
return !!(value && value.__CANCEL__);
};
var normalizeHeaderName = function normalizeHeaderName(headers, normalizedName) {
utils.forEach(headers, function processHeader(value, name) {
if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
headers[normalizedName] = value;
delete headers[name];
}
});
};
/**
* Update an Error with the specified config, error code, and response.
*
* @param {Error} error The error to update.
* @param {Object} config The config.
* @param {string} [code] The error code (for example, 'ECONNABORTED').
* @param {Object} [request] The request.
* @param {Object} [response] The response.
* @returns {Error} The error.
*/
var enhanceError = function enhanceError(error, config, code, request, response) {
error.config = config;
if (code) {
error.code = code;
}
error.request = request;
error.response = response;
error.isAxiosError = true;
error.toJSON = function toJSON() {
return {
// Standard
message: this.message,
name: this.name,
// Microsoft
description: this.description,
number: this.number,
// Mozilla
fileName: this.fileName,
lineNumber: this.lineNumber,
columnNumber: this.columnNumber,
stack: this.stack,
// Axios
config: this.config,
code: this.code
};
};
return error;
};
/**
* Create an Error with the specified message, config, error code, request and response.
*
* @param {string} message The error message.
* @param {Object} config The config.
* @param {string} [code] The error code (for example, 'ECONNABORTED').
* @param {Object} [request] The request.
* @param {Object} [response] The response.
* @returns {Error} The created error.
*/
var createError = function createError(message, config, code, request, response) {
var error = new Error(message);
return enhanceError(error, config, code, request, response);
};
/**
* Resolve or reject a Promise based on response status.
*
* @param {Function} resolve A function that resolves the promise.
* @param {Function} reject A function that rejects the promise.
* @param {object} response The response.
*/
var settle = function settle(resolve, reject, response) {
var validateStatus = response.config.validateStatus;
if (!response.status || !validateStatus || validateStatus(response.status)) {
resolve(response);
} else {
reject(createError(
'Request failed with status code ' + response.status,
response.config,
null,
response.request,
response
));
}
};
var cookies = (
utils.isStandardBrowserEnv() ?
// Standard browser envs support document.cookie
(function standardBrowserEnv() {
return {
write: function write(name, value, expires, path, domain, secure) {
var cookie = [];
cookie.push(name + '=' + encodeURIComponent(value));
if (utils.isNumber(expires)) {
cookie.push('expires=' + new Date(expires).toGMTString());
}
if (utils.isString(path)) {
cookie.push('path=' + path);
}
if (utils.isString(domain)) {
cookie.push('domain=' + domain);
}
if (secure === true) {
cookie.push('secure');
}
document.cookie = cookie.join('; ');
},
read: function read(name) {
var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
return (match ? decodeURIComponent(match[3]) : null);
},
remove: function remove(name) {
this.write(name, '', Date.now() - 86400000);
}
};
})() :
// Non standard browser env (web workers, react-native) lack needed support.
(function nonStandardBrowserEnv() {
return {
write: function write() {},
read: function read() { return null; },
remove: function remove() {}
};
})()
);
/**
* Determines whether the specified URL is absolute
*
* @param {string} url The URL to test
* @returns {boolean} True if the specified URL is absolute, otherwise false
*/
var isAbsoluteURL = function isAbsoluteURL(url) {
// A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
// RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
// by any combination of letters, digits, plus, period, or hyphen.
return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
};
/**
* Creates a new URL by combining the specified URLs
*
* @param {string} baseURL The base URL
* @param {string} relativeURL The relative URL
* @returns {string} The combined URL
*/
var combineURLs = function combineURLs(baseURL, relativeURL) {
return relativeURL
? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
: baseURL;
};
/**
* Creates a new URL by combining the baseURL with the requestedURL,
* only when the requestedURL is not already an absolute URL.
* If the requestURL is absolute, this function returns the requestedURL untouched.
*
* @param {string} baseURL The base URL
* @param {string} requestedURL Absolute or relative URL to combine
* @returns {string} The combined full path
*/
var buildFullPath = function buildFullPath(baseURL, requestedURL) {
if (baseURL && !isAbsoluteURL(requestedURL)) {
return combineURLs(baseURL, requestedURL);
}
return requestedURL;
};
// Headers whose duplicates are ignored by node
// c.f. https://nodejs.org/api/http.html#http_message_headers
var ignoreDuplicateOf = [
'age', 'authorization', 'content-length', 'content-type', 'etag',
'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
'last-modified', 'location', 'max-forwards', 'proxy-authorization',
'referer', 'retry-after', 'user-agent'
];
/**
* Parse headers into an object
*
* ```
* Date: Wed, 27 Aug 2014 08:58:49 GMT
* Content-Type: application/json
* Connection: keep-alive
* Transfer-Encoding: chunked
* ```
*
* @param {String} headers Headers needing to be parsed
* @returns {Object} Headers parsed into an object
*/
var parseHeaders = function parseHeaders(headers) {
var parsed = {};
var key;
var val;
var i;
if (!headers) { return parsed; }
utils.forEach(headers.split('\n'), function parser(line) {
i = line.indexOf(':');
key = utils.trim(line.substr(0, i)).toLowerCase();
val = utils.trim(line.substr(i + 1));
if (key) {
if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
return;
}
if (key === 'set-cookie') {
parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
} else {
parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
}
}
});
return parsed;
};
var isURLSameOrigin = (
utils.isStandardBrowserEnv() ?
// Standard browser envs have full support of the APIs needed to test
// whether the request URL is of the same origin as current location.
(function standardBrowserEnv() {
var msie = /(msie|trident)/i.test(navigator.userAgent);
var urlParsingNode = document.createElement('a');
var originURL;
/**
* Parse a URL to discover it's components
*
* @param {String} url The URL to be parsed
* @returns {Object}
*/
function resolveURL(url) {
var href = url;
if (msie) {
// IE needs attribute set twice to normalize properties
urlParsingNode.setAttribute('href', href);
href = urlParsingNode.href;
}
urlParsingNode.setAttribute('href', href);
// urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
return {
href: urlParsingNode.href,
protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
host: urlParsingNode.host,
search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
hostname: urlParsingNode.hostname,
port: urlParsingNode.port,
pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
urlParsingNode.pathname :
'/' + urlParsingNode.pathname
};
}
originURL = resolveURL(window.location.href);
/**
* Determine if a URL shares the same origin as the current location
*
* @param {String} requestURL The URL to test
* @returns {boolean} True if URL shares the same origin, otherwise false
*/
return function isURLSameOrigin(requestURL) {
var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
return (parsed.protocol === originURL.protocol &&
parsed.host === originURL.host);
};
})() :
// Non standard browser envs (web workers, react-native) lack needed support.
(function nonStandardBrowserEnv() {
return function isURLSameOrigin() {
return true;
};
})()
);
var xhr = function xhrAdapter(config) {
return new Promise(function dispatchXhrRequest(resolve, reject) {
var requestData = config.data;
var requestHeaders = config.headers;
if (utils.isFormData(requestData)) {
delete requestHeaders['Content-Type']; // Let the browser set it
}
var request = new XMLHttpRequest();
// HTTP basic authentication
if (config.auth) {
var username = config.auth.username || '';
var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';
requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
}
var fullPath = buildFullPath(config.baseURL, config.url);
request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);
// Set the request timeout in MS
request.timeout = config.timeout;
// Listen for ready state
request.onreadystatechange = function handleLoad() {
if (!request || request.readyState !== 4) {
return;
}
// The request errored out and we didn't get a response, this will be
// handled by onerror instead
// With one exception: request that using file: protocol, most browsers
// will return status as 0 even though it's a successful request
if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
return;
}
// Prepare the response
var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;
var response = {
data: responseData,
status: request.status,
statusText: request.statusText,
headers: responseHeaders,
config: config,
request: request
};
settle(resolve, reject, response);
// Clean up request
request = null;
};
// Handle browser request cancellation (as opposed to a manual cancellation)
request.onabort = function handleAbort() {
if (!request) {
return;
}
reject(createError('Request aborted', config, 'ECONNABORTED', request));
// Clean up request
request = null;
};
// Handle low level network errors
request.onerror = function handleError() {
// Real errors are hidden from us by the browser
// onerror should only fire if it's a network error
reject(createError('Network Error', config, null, request));
// Clean up request
request = null;
};
// Handle timeout
request.ontimeout = function handleTimeout() {
var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';
if (config.timeoutErrorMessage) {
timeoutErrorMessage = config.timeoutErrorMessage;
}
reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',
request));
// Clean up request
request = null;
};
// Add xsrf header
// This is only done if running in a standard browser environment.
// Specifically not if we're in a web worker, or react-native.
if (utils.isStandardBrowserEnv()) {
// Add xsrf header
var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?
cookies.read(config.xsrfCookieName) :
undefined;
if (xsrfValue) {
requestHeaders[config.xsrfHeaderName] = xsrfValue;
}
}
// Add headers to the request
if ('setRequestHeader' in request) {
utils.forEach(requestHeaders, function setRequestHeader(val, key) {
if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
// Remove Content-Type if data is undefined
delete requestHeaders[key];
} else {
// Otherwise add header to the request
request.setRequestHeader(key, val);
}
});
}
// Add withCredentials to request if needed
if (!utils.isUndefined(config.withCredentials)) {
request.withCredentials = !!config.withCredentials;
}
// Add responseType to request if needed
if (config.responseType) {
try {
request.responseType = config.responseType;
} catch (e) {
// Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.
// But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.
if (config.responseType !== 'json') {
throw e;
}
}
}
// Handle progress if needed
if (typeof config.onDownloadProgress === 'function') {
request.addEventListener('progress', config.onDownloadProgress);
}
// Not all browsers support upload events
if (typeof config.onUploadProgress === 'function' && request.upload) {
request.upload.addEventListener('progress', config.onUploadProgress);
}
if (config.cancelToken) {
// Handle cancellation
config.cancelToken.promise.then(function onCanceled(cancel) {
if (!request) {
return;
}
request.abort();
reject(cancel);
// Clean up request
request = null;
});
}
if (!requestData) {
requestData = null;
}
// Send the request
request.send(requestData);
});
};
var DEFAULT_CONTENT_TYPE = {
'Content-Type': 'application/x-www-form-urlencoded'
};
function setContentTypeIfUnset(headers, value) {
if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
headers['Content-Type'] = value;
}
}
function getDefaultAdapter() {
var adapter;
if (typeof XMLHttpRequest !== 'undefined') {
// For browsers use XHR adapter
adapter = xhr;
} else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
// For node use HTTP adapter
adapter = xhr;
}
return adapter;
}
var defaults = {
adapter: getDefaultAdapter(),
transformRequest: [function transformRequest(data, headers) {
normalizeHeaderName(headers, 'Accept');
normalizeHeaderName(headers, 'Content-Type');
if (utils.isFormData(data) ||
utils.isArrayBuffer(data) ||
utils.isBuffer(data) ||
utils.isStream(data) ||
utils.isFile(data) ||
utils.isBlob(data)
) {
return data;
}
if (utils.isArrayBufferView(data)) {
return data.buffer;
}
if (utils.isURLSearchParams(data)) {
setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
return data.toString();
}
if (utils.isObject(data)) {
setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
return JSON.stringify(data);
}
return data;
}],
transformResponse: [function transformResponse(data) {
/*eslint no-param-reassign:0*/
if (typeof data === 'string') {
try {
data = JSON.parse(data);
} catch (e) { /* Ignore */ }
}
return data;
}],
/**
* A timeout in milliseconds to abort a request. If set to 0 (default) a
* timeout is not created.
*/
timeout: 0,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
maxBodyLength: -1,
validateStatus: function validateStatus(status) {
return status >= 200 && status < 300;
}
};
defaults.headers = {
common: {
'Accept': 'application/json, text/plain, */*'
}
};
utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
defaults.headers[method] = {};
});
utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
});
var defaults_1 = defaults;
/**
* Throws a `Cancel` if cancellation has been requested.
*/
function throwIfCancellationRequested(config) {
if (config.cancelToken) {
config.cancelToken.throwIfRequested();
}
}
/**
* Dispatch a request to the server using the configured adapter.
*
* @param {object} config The config that is to be used for the request
* @returns {Promise} The Promise to be fulfilled
*/
var dispatchRequest = function dispatchRequest(config) {
throwIfCancellationRequested(config);
// Ensure headers exist
config.headers = config.headers || {};
// Transform request data
config.data = transformData(
config.data,
config.headers,
config.transformRequest
);
// Flatten headers
config.headers = utils.merge(
config.headers.common || {},
config.headers[config.method] || {},
config.headers
);
utils.forEach(
['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
function cleanHeaderConfig(method) {
delete config.headers[method];
}
);
var adapter = config.adapter || defaults_1.adapter;
return adapter(config).then(function onAdapterResolution(response) {
throwIfCancellationRequested(config);
// Transform response data
response.data = transformData(
response.data,
response.headers,
config.transformResponse
);
return response;
}, function onAdapterRejection(reason) {
if (!isCancel(reason)) {
throwIfCancellationRequested(config);
// Transform response data
if (reason && reason.response) {
reason.response.data = transformData(
reason.response.data,
reason.response.headers,
config.transformResponse
);
}
}
return Promise.reject(reason);
});
};
/**
* Config-specific merge-function which creates a new config-object
* by merging two configuration objects together.
*
* @param {Object} config1
* @param {Object} config2
* @returns {Object} New object resulting from merging config2 to config1
*/
var mergeConfig = function mergeConfig(config1, config2) {
// eslint-disable-next-line no-param-reassign
config2 = config2 || {};
var config = {};
var valueFromConfig2Keys = ['url', 'method', 'data'];
var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];
var defaultToConfig2Keys = [
'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',
'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',
'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',
'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',
'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'
];
var directMergeKeys = ['validateStatus'];
function getMergedValue(target, source) {
if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
return utils.merge(target, source);
} else if (utils.isPlainObject(source)) {
return utils.merge({}, source);
} else if (utils.isArray(source)) {
return source.slice();
}
return source;
}
function mergeDeepProperties(prop) {
if (!utils.isUndefined(config2[prop])) {
config[prop] = getMergedValue(config1[prop], config2[prop]);
} else if (!utils.isUndefined(config1[prop])) {
config[prop] = getMergedValue(undefined, config1[prop]);
}
}
utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {
if (!utils.isUndefined(config2[prop])) {
config[prop] = getMergedValue(undefined, config2[prop]);
}
});
utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);
utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {
if (!utils.isUndefined(config2[prop])) {
config[prop] = getMergedValue(undefined, config2[prop]);
} else if (!utils.isUndefined(config1[prop])) {
config[prop] = getMergedValue(undefined, config1[prop]);
}
});
utils.forEach(directMergeKeys, function merge(prop) {
if (prop in config2) {
config[prop] = getMergedValue(config1[prop], config2[prop]);
} else if (prop in config1) {
config[prop] = getMergedValue(undefined, config1[prop]);
}
});
var axiosKeys = valueFromConfig2Keys
.concat(mergeDeepPropertiesKeys)
.concat(defaultToConfig2Keys)
.concat(directMergeKeys);
var otherKeys = Object
.keys(config1)
.concat(Object.keys(config2))
.filter(function filterAxiosKeys(key) {
return axiosKeys.indexOf(key) === -1;
});
utils.forEach(otherKeys, mergeDeepProperties);
return config;
};
/**
* Create a new instance of Axios
*
* @param {Object} instanceConfig The default config for the instance
*/
function Axios(instanceConfig) {
this.defaults = instanceConfig;
this.interceptors = {
request: new InterceptorManager_1(),
response: new InterceptorManager_1()
};
}
/**
* Dispatch a request
*
* @param {Object} config The config specific for this request (merged with this.defaults)
*/
Axios.prototype.request = function request(config) {
/*eslint no-param-reassign:0*/
// Allow for axios('example/url'[, config]) a la fetch API
if (typeof config === 'string') {
config = arguments[1] || {};
config.url = arguments[0];
} else {
config = config || {};
}
config = mergeConfig(this.defaults, config);
// Set config.method
if (config.method) {
config.method = config.method.toLowerCase();
} else if (this.defaults.method) {
config.method = this.defaults.method.toLowerCase();
} else {
config.method = 'get';
}
// Hook up interceptors middleware
var chain = [dispatchRequest, undefined];
var promise = Promise.resolve(config);
this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
chain.unshift(interceptor.fulfilled, interceptor.rejected);
});
this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
chain.push(interceptor.fulfilled, interceptor.rejected);
});
while (chain.length) {
promise = promise.then(chain.shift(), chain.shift());
}
return promise;
};
Axios.prototype.getUri = function getUri(config) {
config = mergeConfig(this.defaults, config);
return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, '');
};
// Provide aliases for supported request methods
utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
/*eslint func-names:0*/
Axios.prototype[method] = function(url, config) {
return this.request(mergeConfig(config || {}, {
method: method,
url: url,
data: (config || {}).data
}));
};
});
utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
/*eslint func-names:0*/
Axios.prototype[method] = function(url, data, config) {
return this.request(mergeConfig(config || {}, {
method: method,
url: url,
data: data
}));
};
});
var Axios_1 = Axios;
/**
* A `Cancel` is an object that is thrown when an operation is canceled.
*
* @class
* @param {string=} message The message.
*/
function Cancel(message) {
this.message = message;
}
Cancel.prototype.toString = function toString() {
return 'Cancel' + (this.message ? ': ' + this.message : '');
};
Cancel.prototype.__CANCEL__ = true;
var Cancel_1 = Cancel;
/**
* A `CancelToken` is an object that can be used to request cancellation of an operation.
*
* @class
* @param {Function} executor The executor function.
*/
function CancelToken(executor) {
if (typeof executor !== 'function') {
throw new TypeError('executor must be a function.');
}
var resolvePromise;
this.promise = new Promise(function promiseExecutor(resolve) {
resolvePromise = resolve;
});
var token = this;
executor(function cancel(message) {
if (token.reason) {
// Cancellation has already been requested
return;
}
token.reason = new Cancel_1(message);
resolvePromise(token.reason);
});
}
/**
* Throws a `Cancel` if cancellation has been requested.
*/
CancelToken.prototype.throwIfRequested = function throwIfRequested() {
if (this.reason) {
throw this.reason;
}
};
/**
* Returns an object that contains a new `CancelToken` and a function that, when called,
* cancels the `CancelToken`.
*/
CancelToken.source = function source() {
var cancel;
var token = new CancelToken(function executor(c) {
cancel = c;
});
return {
token: token,
cancel: cancel
};
};
var CancelToken_1 = CancelToken;
/**
* Syntactic sugar for invoking a function and expanding an array for arguments.
*
* Common use case would be to use `Function.prototype.apply`.
*
* ```js
* function f(x, y, z) {}
* var args = [1, 2, 3];
* f.apply(null, args);
* ```
*
* With `spread` this example can be re-written.
*
* ```js
* spread(function(x, y, z) {})([1, 2, 3]);
* ```
*
* @param {Function} callback
* @returns {Function}
*/
var spread = function spread(callback) {
return function wrap(arr) {
return callback.apply(null, arr);
};
};
/**
* Determines whether the payload is an error thrown by Axios
*
* @param {*} payload The value to test
* @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
*/
var isAxiosError = function isAxiosError(payload) {
return (typeof payload === 'object') && (payload.isAxiosError === true);
};
/**
* Create an instance of Axios
*
* @param {Object} defaultConfig The default config for the instance
* @return {Axios} A new instance of Axios
*/
function createInstance(defaultConfig) {
var context = new Axios_1(defaultConfig);
var instance = bind(Axios_1.prototype.request, context);
// Copy axios.prototype to instance
utils.extend(instance, Axios_1.prototype, context);
// Copy context to instance
utils.extend(instance, context);
return instance;
}
// Create the default instance to be exported
var axios$1 = createInstance(defaults_1);
// Expose Axios class to allow class inheritance
axios$1.Axios = Axios_1;
// Factory for creating new instances
axios$1.create = function create(instanceConfig) {
return createInstance(mergeConfig(axios$1.defaults, instanceConfig));
};
// Expose Cancel & CancelToken
axios$1.Cancel = Cancel_1;
axios$1.CancelToken = CancelToken_1;
axios$1.isCancel = isCancel;
// Expose all/spread
axios$1.all = function all(promises) {
return Promise.all(promises);
};
axios$1.spread = spread;
// Expose isAxiosError
axios$1.isAxiosError = isAxiosError;
var axios_1 = axios$1;
// Allow use of default import syntax in TypeScript
var _default = axios$1;
axios_1.default = _default;
var axios = axios_1;
let url = window.BASE_URL;
let current_token;
token$1.subscribe(value => {
current_token = value;
});
async function login({ username, password }) {
const endpoint = url + "/api/auth/login";
const response = await axios({
url: endpoint,
method: "POST",
data: JSON.stringify({
username,
password,
}),
});
token$1.set(response.data.token);
return response.data;
}
async function getTags() {
const endpoint = url + "/api/tag";
const response = await axios.get(endpoint);
return response.data;
}
async function getPostSearchTag({ page, q }) {
if (q) {
const endpoint = url + "/api/post?tags=" + q + "&page=" + page;
const response = await axios(endpoint);
return response.data;
} else {
const endpoint = url + "/api/post?page=" + page;
const response = await axios(endpoint);
return response.data;
}
}
async function getPost({ id }) {
const endpoint = url + "/api/post/" + id;
const response = await axios(endpoint);
return response.data;
}
async function uploadBlob({ file, onProgress }) {
var formData = new FormData();
formData.append("file", file);
const endpoint = url + "/api/blob/upload";
const response = await axios({
url: endpoint,
method: "POST",
headers: {
'Authorization': 'Bearer ' + current_token,
'Content-Type': 'multipart/form-data',
},
withCredentials: true,
data: formData,
onUploadProgress: e => {
if (onProgress) {
onProgress(e);
}
}
});
return response.data;
}
async function postCreate({ blob_id, source_url, tags }) {
const endpoint = url + "/api/post/create";
const response = await axios({
url: endpoint,
method: "POST",
headers: {
'Authorization': 'Bearer ' + current_token,
},
withCredentials: true,
data: {
blob_id, source_url, tags
}
});
return response.data;
}
async function postUpdate(id, { source_url, tags }) {
const endpoint = url + "/api/post/"+id;
const response = await axios({
url: endpoint,
method: "POST",
headers: {
'Authorization': 'Bearer ' + current_token,
},
withCredentials: true,
data: {
source_url, tags
}
});
return response.data;
}
/* src/TagLink.svelte generated by Svelte v3.38.2 */
// (10:0) <Link class="button is-rounded is-primary is-small m-1" to="/posts?tags={tagName}">
function create_default_slot$4(ctx) {
let t;
const block = {
c: function create() {
t = text(/*tagName*/ ctx[0]);
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
p: noop,
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot$4.name,
type: "slot",
source: "(10:0) <Link class=\\\"button is-rounded is-primary is-small m-1\\\" to=\\\"/posts?tags={tagName}\\\">",
ctx
});
return block;
}
function create_fragment$a(ctx) {
let link;
let current;
link = new Link({
props: {
class: "button is-rounded is-primary is-small m-1",
to: "/posts?tags=" + /*tagName*/ ctx[0],
$$slots: { default: [create_default_slot$4] },
$$scope: { ctx }
},
$$inline: true
});
const block = {
c: function create() {
create_component(link.$$.fragment);
},
l: function claim(nodes) {
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
},
m: function mount(target, anchor) {
mount_component(link, target, anchor);
current = true;
},
p: function update(ctx, [dirty]) {
const link_changes = {};
if (dirty & /*$$scope*/ 8) {
link_changes.$$scope = { dirty, ctx };
}
link.$set(link_changes);
},
i: function intro(local) {
if (current) return;
transition_in(link.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(link.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
destroy_component(link, detaching);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_fragment$a.name,
type: "component",
source: "",
ctx
});
return block;
}
function instance$a($$self, $$props, $$invalidate) {
let { $$slots: slots = {}, $$scope } = $$props;
validate_slots("TagLink", slots, []);
let { tag } = $$props;
let tagType = tag.split(":")[0] ?? "";
let tagName = tag.split(":")[1] ?? "";
const writable_props = ["tag"];
Object.keys($$props).forEach(key => {
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(`<TagLink> was created with unknown prop '${key}'`);
});
$$self.$$set = $$props => {
if ("tag" in $$props) $$invalidate(1, tag = $$props.tag);
};
$$self.$capture_state = () => ({ Link, tag, tagType, tagName });
$$self.$inject_state = $$props => {
if ("tag" in $$props) $$invalidate(1, tag = $$props.tag);
if ("tagType" in $$props) tagType = $$props.tagType;
if ("tagName" in $$props) $$invalidate(0, tagName = $$props.tagName);
};
if ($$props && "$$inject" in $$props) {
$$self.$inject_state($$props.$$inject);
}
return [tagName, tag];
}
class TagLink extends SvelteComponentDev {
constructor(options) {
super(options);
init(this, options, instance$a, create_fragment$a, safe_not_equal, { tag: 1 });
dispatch_dev("SvelteRegisterComponent", {
component: this,
tagName: "TagLink",
options,
id: create_fragment$a.name
});
const { ctx } = this.$$;
const props = options.props || {};
if (/*tag*/ ctx[1] === undefined && !("tag" in props)) {
console.warn("<TagLink> was created without expected prop 'tag'");
}
}
get tag() {
throw new Error("<TagLink>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set tag(value) {
throw new Error("<TagLink>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
}
/* src/PostPaginator.svelte generated by Svelte v3.38.2 */
const file$8 = "src/PostPaginator.svelte";
function get_each_context$3(ctx, list, i) {
const child_ctx = ctx.slice();
child_ctx[7] = list[i];
return child_ctx;
}
function get_each_context_1$1(ctx, list, i) {
const child_ctx = ctx.slice();
child_ctx[10] = list[i];
child_ctx[12] = i;
return child_ctx;
}
function get_each_context_2(ctx, list, i) {
const child_ctx = ctx.slice();
child_ctx[13] = list[i];
return child_ctx;
}
function get_each_context_3(ctx, list, i) {
const child_ctx = ctx.slice();
child_ctx[12] = list[i];
return child_ctx;
}
// (26:4) {#if page > 1}
function create_if_block_6(ctx) {
let link;
let current;
link = new Link({
props: {
to: "" + (/*url*/ ctx[3] + "page=" + (/*page*/ ctx[0] - 1)),
class: "pagination-previous",
"aria-label": "Previous",
$$slots: { default: [create_default_slot_6] },
$$scope: { ctx }
},
$$inline: true
});
link.$on("click", function () {
if (is_function(/*handlePage*/ ctx[2](/*page*/ ctx[0] - 1))) /*handlePage*/ ctx[2](/*page*/ ctx[0] - 1).apply(this, arguments);
});
const block = {
c: function create() {
create_component(link.$$.fragment);
},
m: function mount(target, anchor) {
mount_component(link, target, anchor);
current = true;
},
p: function update(new_ctx, dirty) {
ctx = new_ctx;
const link_changes = {};
if (dirty & /*url, page*/ 9) link_changes.to = "" + (/*url*/ ctx[3] + "page=" + (/*page*/ ctx[0] - 1));
if (dirty & /*$$scope*/ 262144) {
link_changes.$$scope = { dirty, ctx };
}
link.$set(link_changes);
},
i: function intro(local) {
if (current) return;
transition_in(link.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(link.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
destroy_component(link, detaching);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block_6.name,
type: "if",
source: "(26:4) {#if page > 1}",
ctx
});
return block;
}
// (27:8) <Link on:click={handlePage(page - 1)} to="{url}page={page - 1}" class="pagination-previous" aria-label="Previous">
function create_default_slot_6(ctx) {
let t;
const block = {
c: function create() {
t = text("Previous");
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot_6.name,
type: "slot",
source: "(27:8) <Link on:click={handlePage(page - 1)} to=\\\"{url}page={page - 1}\\\" class=\\\"pagination-previous\\\" aria-label=\\\"Previous\\\">",
ctx
});
return block;
}
// (34:4) {#if page < totalPages}
function create_if_block_5(ctx) {
let link;
let current;
link = new Link({
props: {
to: "" + (/*url*/ ctx[3] + "page=" + (/*page*/ ctx[0] + 1)),
class: "pagination-next",
"aria-label": "Next",
$$slots: { default: [create_default_slot_5] },
$$scope: { ctx }
},
$$inline: true
});
link.$on("click", function () {
if (is_function(/*handlePage*/ ctx[2](/*page*/ ctx[0] + 1))) /*handlePage*/ ctx[2](/*page*/ ctx[0] + 1).apply(this, arguments);
});
const block = {
c: function create() {
create_component(link.$$.fragment);
},
m: function mount(target, anchor) {
mount_component(link, target, anchor);
current = true;
},
p: function update(new_ctx, dirty) {
ctx = new_ctx;
const link_changes = {};
if (dirty & /*url, page*/ 9) link_changes.to = "" + (/*url*/ ctx[3] + "page=" + (/*page*/ ctx[0] + 1));
if (dirty & /*$$scope*/ 262144) {
link_changes.$$scope = { dirty, ctx };
}
link.$set(link_changes);
},
i: function intro(local) {
if (current) return;
transition_in(link.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(link.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
destroy_component(link, detaching);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block_5.name,
type: "if",
source: "(34:4) {#if page < totalPages}",
ctx
});
return block;
}
// (35:8) <Link on:click={handlePage(page + 1)} to="{url}page={page + 1}" class="pagination-next" aria-label="Next">
function create_default_slot_5(ctx) {
let t;
const block = {
c: function create() {
t = text("Next");
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot_5.name,
type: "slot",
source: "(35:8) <Link on:click={handlePage(page + 1)} to=\\\"{url}page={page + 1}\\\" class=\\\"pagination-next\\\" aria-label=\\\"Next\\\">",
ctx
});
return block;
}
// (43:8) {#if page > 3}
function create_if_block_4(ctx) {
let li0;
let link;
let t0;
let li1;
let span;
let current;
link = new Link({
props: {
to: "" + (/*url*/ ctx[3] + "page=" + 1),
class: "pagination-link",
"aria-label": "Goto page 1",
$$slots: { default: [create_default_slot_4] },
$$scope: { ctx }
},
$$inline: true
});
link.$on("click", function () {
if (is_function(/*handlePage*/ ctx[2](1))) /*handlePage*/ ctx[2](1).apply(this, arguments);
});
const block = {
c: function create() {
li0 = element("li");
create_component(link.$$.fragment);
t0 = space();
li1 = element("li");
span = element("span");
span.textContent = "…";
add_location(li0, file$8, 43, 12, 1280);
attr_dev(span, "class", "pagination-ellipsis");
add_location(span, file$8, 52, 16, 1557);
add_location(li1, file$8, 51, 12, 1536);
},
m: function mount(target, anchor) {
insert_dev(target, li0, anchor);
mount_component(link, li0, null);
insert_dev(target, t0, anchor);
insert_dev(target, li1, anchor);
append_dev(li1, span);
current = true;
},
p: function update(new_ctx, dirty) {
ctx = new_ctx;
const link_changes = {};
if (dirty & /*url*/ 8) link_changes.to = "" + (/*url*/ ctx[3] + "page=" + 1);
if (dirty & /*$$scope*/ 262144) {
link_changes.$$scope = { dirty, ctx };
}
link.$set(link_changes);
},
i: function intro(local) {
if (current) return;
transition_in(link.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(link.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(li0);
destroy_component(link);
if (detaching) detach_dev(t0);
if (detaching) detach_dev(li1);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block_4.name,
type: "if",
source: "(43:8) {#if page > 3}",
ctx
});
return block;
}
// (45:16) <Link on:click={handlePage(1)} to="{url}page={1}" class="pagination-link" aria-label="Goto page 1">
function create_default_slot_4(ctx) {
let t;
const block = {
c: function create() {
t = text("1");
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot_4.name,
type: "slot",
source: "(45:16) <Link on:click={handlePage(1)} to=\\\"{url}page={1}\\\" class=\\\"pagination-link\\\" aria-label=\\\"Goto page 1\\\">",
ctx
});
return block;
}
// (57:12) {#if i >= 1 && i <= totalPages}
function create_if_block_2$2(ctx) {
let current_block_type_index;
let if_block;
let if_block_anchor;
let current;
const if_block_creators = [create_if_block_3$1, create_else_block_1];
const if_blocks = [];
function select_block_type(ctx, dirty) {
if (/*i*/ ctx[12] == /*page*/ ctx[0]) return 0;
return 1;
}
current_block_type_index = select_block_type(ctx);
if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
const block = {
c: function create() {
if_block.c();
if_block_anchor = empty();
},
m: function mount(target, anchor) {
if_blocks[current_block_type_index].m(target, anchor);
insert_dev(target, if_block_anchor, anchor);
current = true;
},
p: function update(ctx, dirty) {
let previous_block_index = current_block_type_index;
current_block_type_index = select_block_type(ctx);
if (current_block_type_index === previous_block_index) {
if_blocks[current_block_type_index].p(ctx, dirty);
} else {
group_outros();
transition_out(if_blocks[previous_block_index], 1, 1, () => {
if_blocks[previous_block_index] = null;
});
check_outros();
if_block = if_blocks[current_block_type_index];
if (!if_block) {
if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
if_block.c();
} else {
if_block.p(ctx, dirty);
}
transition_in(if_block, 1);
if_block.m(if_block_anchor.parentNode, if_block_anchor);
}
},
i: function intro(local) {
if (current) return;
transition_in(if_block);
current = true;
},
o: function outro(local) {
transition_out(if_block);
current = false;
},
d: function destroy(detaching) {
if_blocks[current_block_type_index].d(detaching);
if (detaching) detach_dev(if_block_anchor);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block_2$2.name,
type: "if",
source: "(57:12) {#if i >= 1 && i <= totalPages}",
ctx
});
return block;
}
// (67:16) {:else}
function create_else_block_1(ctx) {
let li;
let link;
let current;
link = new Link({
props: {
to: "" + (/*url*/ ctx[3] + "page=" + /*i*/ ctx[12]),
class: "pagination-link",
"aria-label": "Goto page " + /*i*/ ctx[12],
$$slots: { default: [create_default_slot_3] },
$$scope: { ctx }
},
$$inline: true
});
link.$on("click", function () {
if (is_function(/*handlePage*/ ctx[2](/*i*/ ctx[12]))) /*handlePage*/ ctx[2](/*i*/ ctx[12]).apply(this, arguments);
});
const block = {
c: function create() {
li = element("li");
create_component(link.$$.fragment);
add_location(li, file$8, 67, 20, 2161);
},
m: function mount(target, anchor) {
insert_dev(target, li, anchor);
mount_component(link, li, null);
current = true;
},
p: function update(new_ctx, dirty) {
ctx = new_ctx;
const link_changes = {};
if (dirty & /*url, page*/ 9) link_changes.to = "" + (/*url*/ ctx[3] + "page=" + /*i*/ ctx[12]);
if (dirty & /*page*/ 1) link_changes["aria-label"] = "Goto page " + /*i*/ ctx[12];
if (dirty & /*$$scope, page*/ 262145) {
link_changes.$$scope = { dirty, ctx };
}
link.$set(link_changes);
},
i: function intro(local) {
if (current) return;
transition_in(link.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(link.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(li);
destroy_component(link);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_else_block_1.name,
type: "else",
source: "(67:16) {:else}",
ctx
});
return block;
}
// (58:16) {#if i == page}
function create_if_block_3$1(ctx) {
let li;
let link;
let current;
link = new Link({
props: {
to: "" + (/*url*/ ctx[3] + "page=" + /*i*/ ctx[12]),
class: "pagination-link is-current",
"aria-label": "Goto page " + /*i*/ ctx[12],
$$slots: { default: [create_default_slot_2] },
$$scope: { ctx }
},
$$inline: true
});
link.$on("click", function () {
if (is_function(/*handlePage*/ ctx[2](/*i*/ ctx[12]))) /*handlePage*/ ctx[2](/*i*/ ctx[12]).apply(this, arguments);
});
const block = {
c: function create() {
li = element("li");
create_component(link.$$.fragment);
add_location(li, file$8, 58, 20, 1802);
},
m: function mount(target, anchor) {
insert_dev(target, li, anchor);
mount_component(link, li, null);
current = true;
},
p: function update(new_ctx, dirty) {
ctx = new_ctx;
const link_changes = {};
if (dirty & /*url, page*/ 9) link_changes.to = "" + (/*url*/ ctx[3] + "page=" + /*i*/ ctx[12]);
if (dirty & /*page*/ 1) link_changes["aria-label"] = "Goto page " + /*i*/ ctx[12];
if (dirty & /*$$scope, page*/ 262145) {
link_changes.$$scope = { dirty, ctx };
}
link.$set(link_changes);
},
i: function intro(local) {
if (current) return;
transition_in(link.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(link.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(li);
destroy_component(link);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block_3$1.name,
type: "if",
source: "(58:16) {#if i == page}",
ctx
});
return block;
}
// (69:24) <Link on:click={handlePage(i)} to="{url}page={i}" class="pagination-link" aria-label="Goto page {i}">
function create_default_slot_3(ctx) {
let t_value = /*i*/ ctx[12] + "";
let t;
const block = {
c: function create() {
t = text(t_value);
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
p: function update(ctx, dirty) {
if (dirty & /*page*/ 1 && t_value !== (t_value = /*i*/ ctx[12] + "")) set_data_dev(t, t_value);
},
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot_3.name,
type: "slot",
source: "(69:24) <Link on:click={handlePage(i)} to=\\\"{url}page={i}\\\" class=\\\"pagination-link\\\" aria-label=\\\"Goto page {i}\\\">",
ctx
});
return block;
}
// (60:24) <Link on:click={handlePage(i)} to="{url}page={i}" class="pagination-link is-current" aria-label="Goto page {i}">
function create_default_slot_2(ctx) {
let t_value = /*i*/ ctx[12] + "";
let t;
const block = {
c: function create() {
t = text(t_value);
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
p: function update(ctx, dirty) {
if (dirty & /*page*/ 1 && t_value !== (t_value = /*i*/ ctx[12] + "")) set_data_dev(t, t_value);
},
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot_2.name,
type: "slot",
source: "(60:24) <Link on:click={handlePage(i)} to=\\\"{url}page={i}\\\" class=\\\"pagination-link is-current\\\" aria-label=\\\"Goto page {i}\\\">",
ctx
});
return block;
}
// (56:8) {#each [...Array(5).keys()].map((x) => x + page - 2) as i}
function create_each_block_3(ctx) {
let if_block_anchor;
let current;
let if_block = /*i*/ ctx[12] >= 1 && /*i*/ ctx[12] <= /*totalPages*/ ctx[1] && create_if_block_2$2(ctx);
const block = {
c: function create() {
if (if_block) if_block.c();
if_block_anchor = empty();
},
m: function mount(target, anchor) {
if (if_block) if_block.m(target, anchor);
insert_dev(target, if_block_anchor, anchor);
current = true;
},
p: function update(ctx, dirty) {
if (/*i*/ ctx[12] >= 1 && /*i*/ ctx[12] <= /*totalPages*/ ctx[1]) {
if (if_block) {
if_block.p(ctx, dirty);
if (dirty & /*page, totalPages*/ 3) {
transition_in(if_block, 1);
}
} else {
if_block = create_if_block_2$2(ctx);
if_block.c();
transition_in(if_block, 1);
if_block.m(if_block_anchor.parentNode, if_block_anchor);
}
} else if (if_block) {
group_outros();
transition_out(if_block, 1, 1, () => {
if_block = null;
});
check_outros();
}
},
i: function intro(local) {
if (current) return;
transition_in(if_block);
current = true;
},
o: function outro(local) {
transition_out(if_block);
current = false;
},
d: function destroy(detaching) {
if (if_block) if_block.d(detaching);
if (detaching) detach_dev(if_block_anchor);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_each_block_3.name,
type: "each",
source: "(56:8) {#each [...Array(5).keys()].map((x) => x + page - 2) as i}",
ctx
});
return block;
}
// (79:8) {#if totalPages - page > 2}
function create_if_block_1$3(ctx) {
let li0;
let span;
let t1;
let li1;
let link;
let current;
link = new Link({
props: {
to: "" + (/*url*/ ctx[3] + "page=" + /*totalPages*/ ctx[1]),
class: "pagination-link",
"aria-label": "Goto page " + /*totalPages*/ ctx[1],
$$slots: { default: [create_default_slot_1] },
$$scope: { ctx }
},
$$inline: true
});
link.$on("click", function () {
if (is_function(/*handlePage*/ ctx[2](/*totalPages*/ ctx[1]))) /*handlePage*/ ctx[2](/*totalPages*/ ctx[1]).apply(this, arguments);
});
const block = {
c: function create() {
li0 = element("li");
span = element("span");
span.textContent = "…";
t1 = space();
li1 = element("li");
create_component(link.$$.fragment);
attr_dev(span, "class", "pagination-ellipsis");
add_location(span, file$8, 80, 16, 2590);
add_location(li0, file$8, 79, 12, 2569);
add_location(li1, file$8, 82, 12, 2670);
},
m: function mount(target, anchor) {
insert_dev(target, li0, anchor);
append_dev(li0, span);
insert_dev(target, t1, anchor);
insert_dev(target, li1, anchor);
mount_component(link, li1, null);
current = true;
},
p: function update(new_ctx, dirty) {
ctx = new_ctx;
const link_changes = {};
if (dirty & /*url, totalPages*/ 10) link_changes.to = "" + (/*url*/ ctx[3] + "page=" + /*totalPages*/ ctx[1]);
if (dirty & /*totalPages*/ 2) link_changes["aria-label"] = "Goto page " + /*totalPages*/ ctx[1];
if (dirty & /*$$scope, totalPages*/ 262146) {
link_changes.$$scope = { dirty, ctx };
}
link.$set(link_changes);
},
i: function intro(local) {
if (current) return;
transition_in(link.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(link.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(li0);
if (detaching) detach_dev(t1);
if (detaching) detach_dev(li1);
destroy_component(link);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block_1$3.name,
type: "if",
source: "(79:8) {#if totalPages - page > 2}",
ctx
});
return block;
}
// (84:16) <Link on:click={handlePage(totalPages)} to="{url}page={totalPages}" class="pagination-link" aria-label="Goto page {totalPages}">
function create_default_slot_1(ctx) {
let t;
const block = {
c: function create() {
t = text(/*totalPages*/ ctx[1]);
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
p: function update(ctx, dirty) {
if (dirty & /*totalPages*/ 2) set_data_dev(t, /*totalPages*/ ctx[1]);
},
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot_1.name,
type: "slot",
source: "(84:16) <Link on:click={handlePage(totalPages)} to=\\\"{url}page={totalPages}\\\" class=\\\"pagination-link\\\" aria-label=\\\"Goto page {totalPages}\\\">",
ctx
});
return block;
}
// (101:28) <Link to="/post/{post.id}">
function create_default_slot$3(ctx) {
let img;
let img_alt_value;
let img_src_value;
const block = {
c: function create() {
img = element("img");
attr_dev(img, "alt", img_alt_value = /*post*/ ctx[10].id);
if (img.src !== (img_src_value = /*post*/ ctx[10].image_path)) attr_dev(img, "src", img_src_value);
add_location(img, file$8, 101, 32, 3411);
},
m: function mount(target, anchor) {
insert_dev(target, img, anchor);
},
p: function update(ctx, dirty) {
if (dirty & /*postChunks*/ 16 && img_alt_value !== (img_alt_value = /*post*/ ctx[10].id)) {
attr_dev(img, "alt", img_alt_value);
}
if (dirty & /*postChunks*/ 16 && img.src !== (img_src_value = /*post*/ ctx[10].image_path)) {
attr_dev(img, "src", img_src_value);
}
},
d: function destroy(detaching) {
if (detaching) detach_dev(img);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot$3.name,
type: "slot",
source: "(101:28) <Link to=\\\"/post/{post.id}\\\">",
ctx
});
return block;
}
// (111:24) {:else}
function create_else_block$2(ctx) {
let t;
const block = {
c: function create() {
t = text("None");
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
p: noop,
i: noop,
o: noop,
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_else_block$2.name,
type: "else",
source: "(111:24) {:else}",
ctx
});
return block;
}
// (107:24) {#if post.tags}
function create_if_block$3(ctx) {
let each_blocks = [];
let each_1_lookup = new Map();
let each_1_anchor;
let current;
let each_value_2 = /*post*/ ctx[10].tags;
validate_each_argument(each_value_2);
const get_key = ctx => /*tag*/ ctx[13];
validate_each_keys(ctx, each_value_2, get_each_context_2, get_key);
for (let i = 0; i < each_value_2.length; i += 1) {
let child_ctx = get_each_context_2(ctx, each_value_2, i);
let key = get_key(child_ctx);
each_1_lookup.set(key, each_blocks[i] = create_each_block_2(key, child_ctx));
}
const block = {
c: function create() {
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].c();
}
each_1_anchor = empty();
},
m: function mount(target, anchor) {
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].m(target, anchor);
}
insert_dev(target, each_1_anchor, anchor);
current = true;
},
p: function update(ctx, dirty) {
if (dirty & /*postChunks*/ 16) {
each_value_2 = /*post*/ ctx[10].tags;
validate_each_argument(each_value_2);
group_outros();
validate_each_keys(ctx, each_value_2, get_each_context_2, get_key);
each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx, each_value_2, each_1_lookup, each_1_anchor.parentNode, outro_and_destroy_block, create_each_block_2, each_1_anchor, get_each_context_2);
check_outros();
}
},
i: function intro(local) {
if (current) return;
for (let i = 0; i < each_value_2.length; i += 1) {
transition_in(each_blocks[i]);
}
current = true;
},
o: function outro(local) {
for (let i = 0; i < each_blocks.length; i += 1) {
transition_out(each_blocks[i]);
}
current = false;
},
d: function destroy(detaching) {
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].d(detaching);
}
if (detaching) detach_dev(each_1_anchor);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block$3.name,
type: "if",
source: "(107:24) {#if post.tags}",
ctx
});
return block;
}
// (108:28) {#each post.tags as tag (tag)}
function create_each_block_2(key_1, ctx) {
let first;
let taglink;
let current;
taglink = new TagLink({
props: { tag: /*tag*/ ctx[13] },
$$inline: true
});
const block = {
key: key_1,
first: null,
c: function create() {
first = empty();
create_component(taglink.$$.fragment);
this.first = first;
},
m: function mount(target, anchor) {
insert_dev(target, first, anchor);
mount_component(taglink, target, anchor);
current = true;
},
p: function update(new_ctx, dirty) {
ctx = new_ctx;
const taglink_changes = {};
if (dirty & /*postChunks*/ 16) taglink_changes.tag = /*tag*/ ctx[13];
taglink.$set(taglink_changes);
},
i: function intro(local) {
if (current) return;
transition_in(taglink.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(taglink.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(first);
destroy_component(taglink, detaching);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_each_block_2.name,
type: "each",
source: "(108:28) {#each post.tags as tag (tag)}",
ctx
});
return block;
}
// (97:12) {#each postChunk as post, i (post.id)}
function create_each_block_1$1(key_1, ctx) {
let div2;
let div0;
let figure;
let link;
let t;
let div1;
let current_block_type_index;
let if_block;
let current;
link = new Link({
props: {
to: "/post/" + /*post*/ ctx[10].id,
$$slots: { default: [create_default_slot$3] },
$$scope: { ctx }
},
$$inline: true
});
const if_block_creators = [create_if_block$3, create_else_block$2];
const if_blocks = [];
function select_block_type_1(ctx, dirty) {
if (/*post*/ ctx[10].tags) return 0;
return 1;
}
current_block_type_index = select_block_type_1(ctx);
if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
const block = {
key: key_1,
first: null,
c: function create() {
div2 = element("div");
div0 = element("div");
figure = element("figure");
create_component(link.$$.fragment);
t = space();
div1 = element("div");
if_block.c();
attr_dev(figure, "class", "image");
add_location(figure, file$8, 99, 24, 3300);
attr_dev(div0, "class", "card-image");
add_location(div0, file$8, 98, 20, 3251);
attr_dev(div1, "class", "card-content");
add_location(div1, file$8, 105, 20, 3572);
attr_dev(div2, "class", "tile is-child is-vertical card");
add_location(div2, file$8, 97, 16, 3186);
this.first = div2;
},
m: function mount(target, anchor) {
insert_dev(target, div2, anchor);
append_dev(div2, div0);
append_dev(div0, figure);
mount_component(link, figure, null);
append_dev(div2, t);
append_dev(div2, div1);
if_blocks[current_block_type_index].m(div1, null);
current = true;
},
p: function update(new_ctx, dirty) {
ctx = new_ctx;
const link_changes = {};
if (dirty & /*postChunks*/ 16) link_changes.to = "/post/" + /*post*/ ctx[10].id;
if (dirty & /*$$scope, postChunks*/ 262160) {
link_changes.$$scope = { dirty, ctx };
}
link.$set(link_changes);
let previous_block_index = current_block_type_index;
current_block_type_index = select_block_type_1(ctx);
if (current_block_type_index === previous_block_index) {
if_blocks[current_block_type_index].p(ctx, dirty);
} else {
group_outros();
transition_out(if_blocks[previous_block_index], 1, 1, () => {
if_blocks[previous_block_index] = null;
});
check_outros();
if_block = if_blocks[current_block_type_index];
if (!if_block) {
if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
if_block.c();
} else {
if_block.p(ctx, dirty);
}
transition_in(if_block, 1);
if_block.m(div1, null);
}
},
i: function intro(local) {
if (current) return;
transition_in(link.$$.fragment, local);
transition_in(if_block);
current = true;
},
o: function outro(local) {
transition_out(link.$$.fragment, local);
transition_out(if_block);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(div2);
destroy_component(link);
if_blocks[current_block_type_index].d();
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_each_block_1$1.name,
type: "each",
source: "(97:12) {#each postChunk as post, i (post.id)}",
ctx
});
return block;
}
// (95:4) {#each postChunks as postChunk}
function create_each_block$3(ctx) {
let div;
let each_blocks = [];
let each_1_lookup = new Map();
let t;
let current;
let each_value_1 = /*postChunk*/ ctx[7];
validate_each_argument(each_value_1);
const get_key = ctx => /*post*/ ctx[10].id;
validate_each_keys(ctx, each_value_1, get_each_context_1$1, get_key);
for (let i = 0; i < each_value_1.length; i += 1) {
let child_ctx = get_each_context_1$1(ctx, each_value_1, i);
let key = get_key(child_ctx);
each_1_lookup.set(key, each_blocks[i] = create_each_block_1$1(key, child_ctx));
}
const block = {
c: function create() {
div = element("div");
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].c();
}
t = space();
attr_dev(div, "class", "tile is-parent is-vertical is-3");
add_location(div, file$8, 95, 8, 3073);
},
m: function mount(target, anchor) {
insert_dev(target, div, anchor);
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].m(div, null);
}
append_dev(div, t);
current = true;
},
p: function update(ctx, dirty) {
if (dirty & /*postChunks*/ 16) {
each_value_1 = /*postChunk*/ ctx[7];
validate_each_argument(each_value_1);
group_outros();
validate_each_keys(ctx, each_value_1, get_each_context_1$1, get_key);
each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx, each_value_1, each_1_lookup, div, outro_and_destroy_block, create_each_block_1$1, t, get_each_context_1$1);
check_outros();
}
},
i: function intro(local) {
if (current) return;
for (let i = 0; i < each_value_1.length; i += 1) {
transition_in(each_blocks[i]);
}
current = true;
},
o: function outro(local) {
for (let i = 0; i < each_blocks.length; i += 1) {
transition_out(each_blocks[i]);
}
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(div);
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].d();
}
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_each_block$3.name,
type: "each",
source: "(95:4) {#each postChunks as postChunk}",
ctx
});
return block;
}
function create_fragment$9(ctx) {
let nav;
let t0;
let t1;
let ul;
let t2;
let t3;
let t4;
let div;
let current;
let if_block0 = /*page*/ ctx[0] > 1 && create_if_block_6(ctx);
let if_block1 = /*page*/ ctx[0] < /*totalPages*/ ctx[1] && create_if_block_5(ctx);
let if_block2 = /*page*/ ctx[0] > 3 && create_if_block_4(ctx);
let each_value_3 = [...Array(5).keys()].map(/*func*/ ctx[6]);
validate_each_argument(each_value_3);
let each_blocks_1 = [];
for (let i = 0; i < each_value_3.length; i += 1) {
each_blocks_1[i] = create_each_block_3(get_each_context_3(ctx, each_value_3, i));
}
const out = i => transition_out(each_blocks_1[i], 1, 1, () => {
each_blocks_1[i] = null;
});
let if_block3 = /*totalPages*/ ctx[1] - /*page*/ ctx[0] > 2 && create_if_block_1$3(ctx);
let each_value = /*postChunks*/ ctx[4];
validate_each_argument(each_value);
let each_blocks = [];
for (let i = 0; i < each_value.length; i += 1) {
each_blocks[i] = create_each_block$3(get_each_context$3(ctx, each_value, i));
}
const out_1 = i => transition_out(each_blocks[i], 1, 1, () => {
each_blocks[i] = null;
});
const block = {
c: function create() {
nav = element("nav");
if (if_block0) if_block0.c();
t0 = space();
if (if_block1) if_block1.c();
t1 = space();
ul = element("ul");
if (if_block2) if_block2.c();
t2 = space();
for (let i = 0; i < each_blocks_1.length; i += 1) {
each_blocks_1[i].c();
}
t3 = space();
if (if_block3) if_block3.c();
t4 = space();
div = element("div");
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].c();
}
attr_dev(ul, "class", "pagination-list");
add_location(ul, file$8, 41, 4, 1216);
attr_dev(nav, "class", "pagination");
attr_dev(nav, "role", "navigation");
attr_dev(nav, "aria-label", "pagination");
add_location(nav, file$8, 24, 0, 700);
attr_dev(div, "class", "tile is-multiline is-ancestor");
add_location(div, file$8, 93, 0, 2985);
},
l: function claim(nodes) {
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
},
m: function mount(target, anchor) {
insert_dev(target, nav, anchor);
if (if_block0) if_block0.m(nav, null);
append_dev(nav, t0);
if (if_block1) if_block1.m(nav, null);
append_dev(nav, t1);
append_dev(nav, ul);
if (if_block2) if_block2.m(ul, null);
append_dev(ul, t2);
for (let i = 0; i < each_blocks_1.length; i += 1) {
each_blocks_1[i].m(ul, null);
}
append_dev(ul, t3);
if (if_block3) if_block3.m(ul, null);
insert_dev(target, t4, anchor);
insert_dev(target, div, anchor);
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].m(div, null);
}
current = true;
},
p: function update(ctx, [dirty]) {
if (/*page*/ ctx[0] > 1) {
if (if_block0) {
if_block0.p(ctx, dirty);
if (dirty & /*page*/ 1) {
transition_in(if_block0, 1);
}
} else {
if_block0 = create_if_block_6(ctx);
if_block0.c();
transition_in(if_block0, 1);
if_block0.m(nav, t0);
}
} else if (if_block0) {
group_outros();
transition_out(if_block0, 1, 1, () => {
if_block0 = null;
});
check_outros();
}
if (/*page*/ ctx[0] < /*totalPages*/ ctx[1]) {
if (if_block1) {
if_block1.p(ctx, dirty);
if (dirty & /*page, totalPages*/ 3) {
transition_in(if_block1, 1);
}
} else {
if_block1 = create_if_block_5(ctx);
if_block1.c();
transition_in(if_block1, 1);
if_block1.m(nav, t1);
}
} else if (if_block1) {
group_outros();
transition_out(if_block1, 1, 1, () => {
if_block1 = null;
});
check_outros();
}
if (/*page*/ ctx[0] > 3) {
if (if_block2) {
if_block2.p(ctx, dirty);
if (dirty & /*page*/ 1) {
transition_in(if_block2, 1);
}
} else {
if_block2 = create_if_block_4(ctx);
if_block2.c();
transition_in(if_block2, 1);
if_block2.m(ul, t2);
}
} else if (if_block2) {
group_outros();
transition_out(if_block2, 1, 1, () => {
if_block2 = null;
});
check_outros();
}
if (dirty & /*url, Array, page, handlePage, totalPages*/ 15) {
each_value_3 = [...Array(5).keys()].map(/*func*/ ctx[6]);
validate_each_argument(each_value_3);
let i;
for (i = 0; i < each_value_3.length; i += 1) {
const child_ctx = get_each_context_3(ctx, each_value_3, i);
if (each_blocks_1[i]) {
each_blocks_1[i].p(child_ctx, dirty);
transition_in(each_blocks_1[i], 1);
} else {
each_blocks_1[i] = create_each_block_3(child_ctx);
each_blocks_1[i].c();
transition_in(each_blocks_1[i], 1);
each_blocks_1[i].m(ul, t3);
}
}
group_outros();
for (i = each_value_3.length; i < each_blocks_1.length; i += 1) {
out(i);
}
check_outros();
}
if (/*totalPages*/ ctx[1] - /*page*/ ctx[0] > 2) {
if (if_block3) {
if_block3.p(ctx, dirty);
if (dirty & /*totalPages, page*/ 3) {
transition_in(if_block3, 1);
}
} else {
if_block3 = create_if_block_1$3(ctx);
if_block3.c();
transition_in(if_block3, 1);
if_block3.m(ul, null);
}
} else if (if_block3) {
group_outros();
transition_out(if_block3, 1, 1, () => {
if_block3 = null;
});
check_outros();
}
if (dirty & /*postChunks*/ 16) {
each_value = /*postChunks*/ ctx[4];
validate_each_argument(each_value);
let i;
for (i = 0; i < each_value.length; i += 1) {
const child_ctx = get_each_context$3(ctx, each_value, i);
if (each_blocks[i]) {
each_blocks[i].p(child_ctx, dirty);
transition_in(each_blocks[i], 1);
} else {
each_blocks[i] = create_each_block$3(child_ctx);
each_blocks[i].c();
transition_in(each_blocks[i], 1);
each_blocks[i].m(div, null);
}
}
group_outros();
for (i = each_value.length; i < each_blocks.length; i += 1) {
out_1(i);
}
check_outros();
}
},
i: function intro(local) {
if (current) return;
transition_in(if_block0);
transition_in(if_block1);
transition_in(if_block2);
for (let i = 0; i < each_value_3.length; i += 1) {
transition_in(each_blocks_1[i]);
}
transition_in(if_block3);
for (let i = 0; i < each_value.length; i += 1) {
transition_in(each_blocks[i]);
}
current = true;
},
o: function outro(local) {
transition_out(if_block0);
transition_out(if_block1);
transition_out(if_block2);
each_blocks_1 = each_blocks_1.filter(Boolean);
for (let i = 0; i < each_blocks_1.length; i += 1) {
transition_out(each_blocks_1[i]);
}
transition_out(if_block3);
each_blocks = each_blocks.filter(Boolean);
for (let i = 0; i < each_blocks.length; i += 1) {
transition_out(each_blocks[i]);
}
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(nav);
if (if_block0) if_block0.d();
if (if_block1) if_block1.d();
if (if_block2) if_block2.d();
destroy_each(each_blocks_1, detaching);
if (if_block3) if_block3.d();
if (detaching) detach_dev(t4);
if (detaching) detach_dev(div);
destroy_each(each_blocks, detaching);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_fragment$9.name,
type: "component",
source: "",
ctx
});
return block;
}
function instance$9($$self, $$props, $$invalidate) {
let { $$slots: slots = {}, $$scope } = $$props;
validate_slots("PostPaginator", slots, []);
let { posts = [] } = $$props;
let postChunks = [];
let { page = 1 } = $$props;
let { totalPages = 1 } = $$props;
let { handlePage = i => {
} } = $$props;
let { url = "/posts" } = $$props;
const writable_props = ["posts", "page", "totalPages", "handlePage", "url"];
Object.keys($$props).forEach(key => {
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(`<PostPaginator> was created with unknown prop '${key}'`);
});
const func = x => x + page - 2;
$$self.$$set = $$props => {
if ("posts" in $$props) $$invalidate(5, posts = $$props.posts);
if ("page" in $$props) $$invalidate(0, page = $$props.page);
if ("totalPages" in $$props) $$invalidate(1, totalPages = $$props.totalPages);
if ("handlePage" in $$props) $$invalidate(2, handlePage = $$props.handlePage);
if ("url" in $$props) $$invalidate(3, url = $$props.url);
};
$$self.$capture_state = () => ({
Link,
TagLink,
posts,
postChunks,
page,
totalPages,
handlePage,
url
});
$$self.$inject_state = $$props => {
if ("posts" in $$props) $$invalidate(5, posts = $$props.posts);
if ("postChunks" in $$props) $$invalidate(4, postChunks = $$props.postChunks);
if ("page" in $$props) $$invalidate(0, page = $$props.page);
if ("totalPages" in $$props) $$invalidate(1, totalPages = $$props.totalPages);
if ("handlePage" in $$props) $$invalidate(2, handlePage = $$props.handlePage);
if ("url" in $$props) $$invalidate(3, url = $$props.url);
};
if ($$props && "$$inject" in $$props) {
$$self.$inject_state($$props.$$inject);
}
$$self.$$.update = () => {
if ($$self.$$.dirty & /*posts*/ 32) {
// split posts into 4 columns
$$invalidate(4, postChunks = Array(Math.min(posts.length, 4)).fill().map(function (_, i) {
let chunkSize = Math.floor(posts.length / 4);
if (chunkSize % 4 > i + 1) {
chunkSize += 1;
}
chunkSize = Math.max(chunkSize, 1);
return posts.slice(i * chunkSize, i * chunkSize + chunkSize);
}));
}
};
return [page, totalPages, handlePage, url, postChunks, posts, func];
}
class PostPaginator extends SvelteComponentDev {
constructor(options) {
super(options);
init(this, options, instance$9, create_fragment$9, safe_not_equal, {
posts: 5,
page: 0,
totalPages: 1,
handlePage: 2,
url: 3
});
dispatch_dev("SvelteRegisterComponent", {
component: this,
tagName: "PostPaginator",
options,
id: create_fragment$9.name
});
}
get posts() {
throw new Error("<PostPaginator>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set posts(value) {
throw new Error("<PostPaginator>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get page() {
throw new Error("<PostPaginator>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set page(value) {
throw new Error("<PostPaginator>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get totalPages() {
throw new Error("<PostPaginator>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set totalPages(value) {
throw new Error("<PostPaginator>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get handlePage() {
throw new Error("<PostPaginator>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set handlePage(value) {
throw new Error("<PostPaginator>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get url() {
throw new Error("<PostPaginator>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set url(value) {
throw new Error("<PostPaginator>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
}
function createCommonjsModule(fn) {
var module = { exports: {} };
return fn(module, module.exports), module.exports;
}
var strictUriEncode = str => encodeURIComponent(str).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);
var token = '%[a-f0-9]{2}';
var singleMatcher = new RegExp(token, 'gi');
var multiMatcher = new RegExp('(' + token + ')+', 'gi');
function decodeComponents(components, split) {
try {
// Try to decode the entire string first
return decodeURIComponent(components.join(''));
} catch (err) {
// Do nothing
}
if (components.length === 1) {
return components;
}
split = split || 1;
// Split the array in 2 parts
var left = components.slice(0, split);
var right = components.slice(split);
return Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));
}
function decode(input) {
try {
return decodeURIComponent(input);
} catch (err) {
var tokens = input.match(singleMatcher);
for (var i = 1; i < tokens.length; i++) {
input = decodeComponents(tokens, i).join('');
tokens = input.match(singleMatcher);
}
return input;
}
}
function customDecodeURIComponent(input) {
// Keep track of all the replacements and prefill the map with the `BOM`
var replaceMap = {
'%FE%FF': '\uFFFD\uFFFD',
'%FF%FE': '\uFFFD\uFFFD'
};
var match = multiMatcher.exec(input);
while (match) {
try {
// Decode as big chunks as possible
replaceMap[match[0]] = decodeURIComponent(match[0]);
} catch (err) {
var result = decode(match[0]);
if (result !== match[0]) {
replaceMap[match[0]] = result;
}
}
match = multiMatcher.exec(input);
}
// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else
replaceMap['%C2'] = '\uFFFD';
var entries = Object.keys(replaceMap);
for (var i = 0; i < entries.length; i++) {
// Replace all decoded components
var key = entries[i];
input = input.replace(new RegExp(key, 'g'), replaceMap[key]);
}
return input;
}
var decodeUriComponent = function (encodedURI) {
if (typeof encodedURI !== 'string') {
throw new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');
}
try {
encodedURI = encodedURI.replace(/\+/g, ' ');
// Try the built in decoder first
return decodeURIComponent(encodedURI);
} catch (err) {
// Fallback to a more advanced decoder
return customDecodeURIComponent(encodedURI);
}
};
var splitOnFirst = (string, separator) => {
if (!(typeof string === 'string' && typeof separator === 'string')) {
throw new TypeError('Expected the arguments to be of type `string`');
}
if (separator === '') {
return [string];
}
const separatorIndex = string.indexOf(separator);
if (separatorIndex === -1) {
return [string];
}
return [
string.slice(0, separatorIndex),
string.slice(separatorIndex + separator.length)
];
};
var filterObj = function (obj, predicate) {
var ret = {};
var keys = Object.keys(obj);
var isArr = Array.isArray(predicate);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var val = obj[key];
if (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) {
ret[key] = val;
}
}
return ret;
};
var queryString = createCommonjsModule(function (module, exports) {
const isNullOrUndefined = value => value === null || value === undefined;
function encoderForArrayFormat(options) {
switch (options.arrayFormat) {
case 'index':
return key => (result, value) => {
const index = result.length;
if (
value === undefined ||
(options.skipNull && value === null) ||
(options.skipEmptyString && value === '')
) {
return result;
}
if (value === null) {
return [...result, [encode(key, options), '[', index, ']'].join('')];
}
return [
...result,
[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')
];
};
case 'bracket':
return key => (result, value) => {
if (
value === undefined ||
(options.skipNull && value === null) ||
(options.skipEmptyString && value === '')
) {
return result;
}
if (value === null) {
return [...result, [encode(key, options), '[]'].join('')];
}
return [...result, [encode(key, options), '[]=', encode(value, options)].join('')];
};
case 'comma':
case 'separator':
case 'bracket-separator': {
const keyValueSep = options.arrayFormat === 'bracket-separator' ?
'[]=' :
'=';
return key => (result, value) => {
if (
value === undefined ||
(options.skipNull && value === null) ||
(options.skipEmptyString && value === '')
) {
return result;
}
// Translate null to an empty string so that it doesn't serialize as 'null'
value = value === null ? '' : value;
if (result.length === 0) {
return [[encode(key, options), keyValueSep, encode(value, options)].join('')];
}
return [[result, encode(value, options)].join(options.arrayFormatSeparator)];
};
}
default:
return key => (result, value) => {
if (
value === undefined ||
(options.skipNull && value === null) ||
(options.skipEmptyString && value === '')
) {
return result;
}
if (value === null) {
return [...result, encode(key, options)];
}
return [...result, [encode(key, options), '=', encode(value, options)].join('')];
};
}
}
function parserForArrayFormat(options) {
let result;
switch (options.arrayFormat) {
case 'index':
return (key, value, accumulator) => {
result = /\[(\d*)\]$/.exec(key);
key = key.replace(/\[\d*\]$/, '');
if (!result) {
accumulator[key] = value;
return;
}
if (accumulator[key] === undefined) {
accumulator[key] = {};
}
accumulator[key][result[1]] = value;
};
case 'bracket':
return (key, value, accumulator) => {
result = /(\[\])$/.exec(key);
key = key.replace(/\[\]$/, '');
if (!result) {
accumulator[key] = value;
return;
}
if (accumulator[key] === undefined) {
accumulator[key] = [value];
return;
}
accumulator[key] = [].concat(accumulator[key], value);
};
case 'comma':
case 'separator':
return (key, value, accumulator) => {
const isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);
const isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));
value = isEncodedArray ? decode(value, options) : value;
const newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : value === null ? value : decode(value, options);
accumulator[key] = newValue;
};
case 'bracket-separator':
return (key, value, accumulator) => {
const isArray = /(\[\])$/.test(key);
key = key.replace(/\[\]$/, '');
if (!isArray) {
accumulator[key] = value ? decode(value, options) : value;
return;
}
const arrayValue = value === null ?
[] :
value.split(options.arrayFormatSeparator).map(item => decode(item, options));
if (accumulator[key] === undefined) {
accumulator[key] = arrayValue;
return;
}
accumulator[key] = [].concat(accumulator[key], arrayValue);
};
default:
return (key, value, accumulator) => {
if (accumulator[key] === undefined) {
accumulator[key] = value;
return;
}
accumulator[key] = [].concat(accumulator[key], value);
};
}
}
function validateArrayFormatSeparator(value) {
if (typeof value !== 'string' || value.length !== 1) {
throw new TypeError('arrayFormatSeparator must be single character string');
}
}
function encode(value, options) {
if (options.encode) {
return options.strict ? strictUriEncode(value) : encodeURIComponent(value);
}
return value;
}
function decode(value, options) {
if (options.decode) {
return decodeUriComponent(value);
}
return value;
}
function keysSorter(input) {
if (Array.isArray(input)) {
return input.sort();
}
if (typeof input === 'object') {
return keysSorter(Object.keys(input))
.sort((a, b) => Number(a) - Number(b))
.map(key => input[key]);
}
return input;
}
function removeHash(input) {
const hashStart = input.indexOf('#');
if (hashStart !== -1) {
input = input.slice(0, hashStart);
}
return input;
}
function getHash(url) {
let hash = '';
const hashStart = url.indexOf('#');
if (hashStart !== -1) {
hash = url.slice(hashStart);
}
return hash;
}
function extract(input) {
input = removeHash(input);
const queryStart = input.indexOf('?');
if (queryStart === -1) {
return '';
}
return input.slice(queryStart + 1);
}
function parseValue(value, options) {
if (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {
value = Number(value);
} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {
value = value.toLowerCase() === 'true';
}
return value;
}
function parse(query, options) {
options = Object.assign({
decode: true,
sort: true,
arrayFormat: 'none',
arrayFormatSeparator: ',',
parseNumbers: false,
parseBooleans: false
}, options);
validateArrayFormatSeparator(options.arrayFormatSeparator);
const formatter = parserForArrayFormat(options);
// Create an object with no prototype
const ret = Object.create(null);
if (typeof query !== 'string') {
return ret;
}
query = query.trim().replace(/^[?#&]/, '');
if (!query) {
return ret;
}
for (const param of query.split('&')) {
if (param === '') {
continue;
}
let [key, value] = splitOnFirst(options.decode ? param.replace(/\+/g, ' ') : param, '=');
// Missing `=` should be `null`:
// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters
value = value === undefined ? null : ['comma', 'separator', 'bracket-separator'].includes(options.arrayFormat) ? value : decode(value, options);
formatter(decode(key, options), value, ret);
}
for (const key of Object.keys(ret)) {
const value = ret[key];
if (typeof value === 'object' && value !== null) {
for (const k of Object.keys(value)) {
value[k] = parseValue(value[k], options);
}
} else {
ret[key] = parseValue(value, options);
}
}
if (options.sort === false) {
return ret;
}
return (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {
const value = ret[key];
if (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {
// Sort object keys, not values
result[key] = keysSorter(value);
} else {
result[key] = value;
}
return result;
}, Object.create(null));
}
exports.extract = extract;
exports.parse = parse;
exports.stringify = (object, options) => {
if (!object) {
return '';
}
options = Object.assign({
encode: true,
strict: true,
arrayFormat: 'none',
arrayFormatSeparator: ','
}, options);
validateArrayFormatSeparator(options.arrayFormatSeparator);
const shouldFilter = key => (
(options.skipNull && isNullOrUndefined(object[key])) ||
(options.skipEmptyString && object[key] === '')
);
const formatter = encoderForArrayFormat(options);
const objectCopy = {};
for (const key of Object.keys(object)) {
if (!shouldFilter(key)) {
objectCopy[key] = object[key];
}
}
const keys = Object.keys(objectCopy);
if (options.sort !== false) {
keys.sort(options.sort);
}
return keys.map(key => {
const value = object[key];
if (value === undefined) {
return '';
}
if (value === null) {
return encode(key, options);
}
if (Array.isArray(value)) {
if (value.length === 0 && options.arrayFormat === 'bracket-separator') {
return encode(key, options) + '[]';
}
return value
.reduce(formatter(key), [])
.join('&');
}
return encode(key, options) + '=' + encode(value, options);
}).filter(x => x.length > 0).join('&');
};
exports.parseUrl = (url, options) => {
options = Object.assign({
decode: true
}, options);
const [url_, hash] = splitOnFirst(url, '#');
return Object.assign(
{
url: url_.split('?')[0] || '',
query: parse(extract(url), options)
},
options && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}
);
};
exports.stringifyUrl = (object, options) => {
options = Object.assign({
encode: true,
strict: true
}, options);
const url = removeHash(object.url).split('?')[0] || '';
const queryFromUrl = exports.extract(object.url);
const parsedQueryFromUrl = exports.parse(queryFromUrl, {sort: false});
const query = Object.assign(parsedQueryFromUrl, object.query);
let queryString = exports.stringify(query, options);
if (queryString) {
queryString = `?${queryString}`;
}
let hash = getHash(object.url);
if (object.fragmentIdentifier) {
hash = `#${encode(object.fragmentIdentifier, options)}`;
}
return `${url}${queryString}${hash}`;
};
exports.pick = (input, filter, options) => {
options = Object.assign({
parseFragmentIdentifier: true
}, options);
const {url, query, fragmentIdentifier} = exports.parseUrl(input, options);
return exports.stringifyUrl({
url,
query: filterObj(query, filter),
fragmentIdentifier
}, options);
};
exports.exclude = (input, filter, options) => {
const exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);
return exports.pick(input, exclusionFilter, options);
};
});
/* node_modules/svelte-tags-input/src/Tags.svelte generated by Svelte v3.38.2 */
const { console: console_1$1 } = globals;
const file$7 = "node_modules/svelte-tags-input/src/Tags.svelte";
function get_each_context$2(ctx, list, i) {
const child_ctx = ctx.slice();
child_ctx[37] = list[i];
child_ctx[39] = i;
return child_ctx;
}
function get_each_context_1(ctx, list, i) {
const child_ctx = ctx.slice();
child_ctx[8] = list[i];
child_ctx[41] = i;
return child_ctx;
}
// (309:4) {#if tags.length > 0}
function create_if_block_1$2(ctx) {
let each_1_anchor;
let each_value_1 = /*tags*/ ctx[0];
validate_each_argument(each_value_1);
let each_blocks = [];
for (let i = 0; i < each_value_1.length; i += 1) {
each_blocks[i] = create_each_block_1(get_each_context_1(ctx, each_value_1, i));
}
const block = {
c: function create() {
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].c();
}
each_1_anchor = empty();
},
m: function mount(target, anchor) {
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].m(target, anchor);
}
insert_dev(target, each_1_anchor, anchor);
},
p: function update(ctx, dirty) {
if (dirty[0] & /*removeTag, disable, tags, autoCompleteKey*/ 2121) {
each_value_1 = /*tags*/ ctx[0];
validate_each_argument(each_value_1);
let i;
for (i = 0; i < each_value_1.length; i += 1) {
const child_ctx = get_each_context_1(ctx, each_value_1, i);
if (each_blocks[i]) {
each_blocks[i].p(child_ctx, dirty);
} else {
each_blocks[i] = create_each_block_1(child_ctx);
each_blocks[i].c();
each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor);
}
}
for (; i < each_blocks.length; i += 1) {
each_blocks[i].d(1);
}
each_blocks.length = each_value_1.length;
}
},
d: function destroy(detaching) {
destroy_each(each_blocks, detaching);
if (detaching) detach_dev(each_1_anchor);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block_1$2.name,
type: "if",
source: "(309:4) {#if tags.length > 0}",
ctx
});
return block;
}
// (314:16) {:else}
function create_else_block$1(ctx) {
let t_value = /*tag*/ ctx[8][/*autoCompleteKey*/ ctx[3]] + "";
let t;
const block = {
c: function create() {
t = text(t_value);
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
p: function update(ctx, dirty) {
if (dirty[0] & /*tags, autoCompleteKey*/ 9 && t_value !== (t_value = /*tag*/ ctx[8][/*autoCompleteKey*/ ctx[3]] + "")) set_data_dev(t, t_value);
},
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_else_block$1.name,
type: "else",
source: "(314:16) {:else}",
ctx
});
return block;
}
// (312:16) {#if typeof tag === 'string'}
function create_if_block_3(ctx) {
let t_value = /*tag*/ ctx[8] + "";
let t;
const block = {
c: function create() {
t = text(t_value);
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
p: function update(ctx, dirty) {
if (dirty[0] & /*tags*/ 1 && t_value !== (t_value = /*tag*/ ctx[8] + "")) set_data_dev(t, t_value);
},
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block_3.name,
type: "if",
source: "(312:16) {#if typeof tag === 'string'}",
ctx
});
return block;
}
// (317:16) {#if !disable}
function create_if_block_2$1(ctx) {
let span;
let mounted;
let dispose;
function click_handler() {
return /*click_handler*/ ctx[27](/*i*/ ctx[41]);
}
const block = {
c: function create() {
span = element("span");
span.textContent = "×";
attr_dev(span, "class", "svelte-tags-input-tag-remove svelte-1xz5xok");
add_location(span, file$7, 317, 16, 9118);
},
m: function mount(target, anchor) {
insert_dev(target, span, anchor);
if (!mounted) {
dispose = listen_dev(span, "click", click_handler, false, false, false);
mounted = true;
}
},
p: function update(new_ctx, dirty) {
ctx = new_ctx;
},
d: function destroy(detaching) {
if (detaching) detach_dev(span);
mounted = false;
dispose();
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block_2$1.name,
type: "if",
source: "(317:16) {#if !disable}",
ctx
});
return block;
}
// (310:8) {#each tags as tag, i}
function create_each_block_1(ctx) {
let span;
let t0;
let t1;
function select_block_type(ctx, dirty) {
if (typeof /*tag*/ ctx[8] === "string") return create_if_block_3;
return create_else_block$1;
}
let current_block_type = select_block_type(ctx);
let if_block0 = current_block_type(ctx);
let if_block1 = !/*disable*/ ctx[6] && create_if_block_2$1(ctx);
const block = {
c: function create() {
span = element("span");
if_block0.c();
t0 = space();
if (if_block1) if_block1.c();
t1 = space();
attr_dev(span, "class", "svelte-tags-input-tag svelte-1xz5xok");
add_location(span, file$7, 310, 12, 8866);
},
m: function mount(target, anchor) {
insert_dev(target, span, anchor);
if_block0.m(span, null);
append_dev(span, t0);
if (if_block1) if_block1.m(span, null);
append_dev(span, t1);
},
p: function update(ctx, dirty) {
if (current_block_type === (current_block_type = select_block_type(ctx)) && if_block0) {
if_block0.p(ctx, dirty);
} else {
if_block0.d(1);
if_block0 = current_block_type(ctx);
if (if_block0) {
if_block0.c();
if_block0.m(span, t0);
}
}
if (!/*disable*/ ctx[6]) {
if (if_block1) {
if_block1.p(ctx, dirty);
} else {
if_block1 = create_if_block_2$1(ctx);
if_block1.c();
if_block1.m(span, t1);
}
} else if (if_block1) {
if_block1.d(1);
if_block1 = null;
}
},
d: function destroy(detaching) {
if (detaching) detach_dev(span);
if_block0.d();
if (if_block1) if_block1.d();
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_each_block_1.name,
type: "each",
source: "(310:8) {#each tags as tag, i}",
ctx
});
return block;
}
// (339:0) {#if autoComplete && arrelementsmatch.length > 0}
function create_if_block$2(ctx) {
let div;
let ul;
let ul_id_value;
let each_value = /*arrelementsmatch*/ ctx[7];
validate_each_argument(each_value);
let each_blocks = [];
for (let i = 0; i < each_value.length; i += 1) {
each_blocks[i] = create_each_block$2(get_each_context$2(ctx, each_value, i));
}
const block = {
c: function create() {
div = element("div");
ul = element("ul");
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].c();
}
attr_dev(ul, "id", ul_id_value = "" + (/*id*/ ctx[5] + "_matchs"));
attr_dev(ul, "class", "svelte-tags-input-matchs svelte-1xz5xok");
add_location(ul, file$7, 340, 8, 9758);
attr_dev(div, "class", "svelte-tags-input-matchs-parent svelte-1xz5xok");
add_location(div, file$7, 339, 4, 9703);
},
m: function mount(target, anchor) {
insert_dev(target, div, anchor);
append_dev(div, ul);
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].m(ul, null);
}
},
p: function update(ctx, dirty) {
if (dirty[0] & /*navigateAutoComplete, arrelementsmatch, addTag*/ 66688) {
each_value = /*arrelementsmatch*/ ctx[7];
validate_each_argument(each_value);
let i;
for (i = 0; i < each_value.length; i += 1) {
const child_ctx = get_each_context$2(ctx, each_value, i);
if (each_blocks[i]) {
each_blocks[i].p(child_ctx, dirty);
} else {
each_blocks[i] = create_each_block$2(child_ctx);
each_blocks[i].c();
each_blocks[i].m(ul, null);
}
}
for (; i < each_blocks.length; i += 1) {
each_blocks[i].d(1);
}
each_blocks.length = each_value.length;
}
if (dirty[0] & /*id*/ 32 && ul_id_value !== (ul_id_value = "" + (/*id*/ ctx[5] + "_matchs"))) {
attr_dev(ul, "id", ul_id_value);
}
},
d: function destroy(detaching) {
if (detaching) detach_dev(div);
destroy_each(each_blocks, detaching);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block$2.name,
type: "if",
source: "(339:0) {#if autoComplete && arrelementsmatch.length > 0}",
ctx
});
return block;
}
// (342:12) {#each arrelementsmatch as element, index}
function create_each_block$2(ctx) {
let li;
let html_tag;
let raw_value = /*element*/ ctx[37].search + "";
let t;
let mounted;
let dispose;
function keydown_handler() {
return /*keydown_handler*/ ctx[30](/*index*/ ctx[39], /*element*/ ctx[37]);
}
function click_handler_1() {
return /*click_handler_1*/ ctx[31](/*element*/ ctx[37]);
}
const block = {
c: function create() {
li = element("li");
t = space();
html_tag = new HtmlTag(t);
attr_dev(li, "tabindex", "-1");
attr_dev(li, "class", "svelte-1xz5xok");
add_location(li, file$7, 342, 16, 9886);
},
m: function mount(target, anchor) {
insert_dev(target, li, anchor);
html_tag.m(raw_value, li);
append_dev(li, t);
if (!mounted) {
dispose = [
listen_dev(li, "keydown", keydown_handler, false, false, false),
listen_dev(li, "click", click_handler_1, false, false, false)
];
mounted = true;
}
},
p: function update(new_ctx, dirty) {
ctx = new_ctx;
if (dirty[0] & /*arrelementsmatch*/ 128 && raw_value !== (raw_value = /*element*/ ctx[37].search + "")) html_tag.p(raw_value);
},
d: function destroy(detaching) {
if (detaching) detach_dev(li);
mounted = false;
run_all(dispose);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_each_block$2.name,
type: "each",
source: "(342:12) {#each arrelementsmatch as element, index}",
ctx
});
return block;
}
function create_fragment$8(ctx) {
let div;
let t0;
let input;
let t1;
let if_block1_anchor;
let mounted;
let dispose;
let if_block0 = /*tags*/ ctx[0].length > 0 && create_if_block_1$2(ctx);
let if_block1 = /*autoComplete*/ ctx[2] && /*arrelementsmatch*/ ctx[7].length > 0 && create_if_block$2(ctx);
const block = {
c: function create() {
div = element("div");
if (if_block0) if_block0.c();
t0 = space();
input = element("input");
t1 = space();
if (if_block1) if_block1.c();
if_block1_anchor = empty();
attr_dev(input, "type", "text");
attr_dev(input, "id", /*id*/ ctx[5]);
attr_dev(input, "name", /*name*/ ctx[4]);
attr_dev(input, "class", "svelte-tags-input svelte-1xz5xok");
attr_dev(input, "placeholder", /*placeholder*/ ctx[1]);
input.disabled = /*disable*/ ctx[6];
add_location(input, file$7, 322, 4, 9283);
attr_dev(div, "class", "svelte-tags-input-layout svelte-1xz5xok");
toggle_class(div, "sti-layout-disable", /*disable*/ ctx[6]);
add_location(div, file$7, 307, 0, 8720);
},
l: function claim(nodes) {
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
},
m: function mount(target, anchor) {
insert_dev(target, div, anchor);
if (if_block0) if_block0.m(div, null);
append_dev(div, t0);
append_dev(div, input);
set_input_value(input, /*tag*/ ctx[8]);
insert_dev(target, t1, anchor);
if (if_block1) if_block1.m(target, anchor);
insert_dev(target, if_block1_anchor, anchor);
if (!mounted) {
dispose = [
listen_dev(input, "input", /*input_input_handler*/ ctx[28]),
listen_dev(input, "keydown", /*setTag*/ ctx[9], false, false, false),
listen_dev(input, "keyup", /*getMatchElements*/ ctx[15], false, false, false),
listen_dev(input, "paste", /*onPaste*/ ctx[12], false, false, false),
listen_dev(input, "drop", /*onDrop*/ ctx[13], false, false, false),
listen_dev(input, "blur", /*blur_handler*/ ctx[29], false, false, false)
];
mounted = true;
}
},
p: function update(ctx, dirty) {
if (/*tags*/ ctx[0].length > 0) {
if (if_block0) {
if_block0.p(ctx, dirty);
} else {
if_block0 = create_if_block_1$2(ctx);
if_block0.c();
if_block0.m(div, t0);
}
} else if (if_block0) {
if_block0.d(1);
if_block0 = null;
}
if (dirty[0] & /*id*/ 32) {
attr_dev(input, "id", /*id*/ ctx[5]);
}
if (dirty[0] & /*name*/ 16) {
attr_dev(input, "name", /*name*/ ctx[4]);
}
if (dirty[0] & /*placeholder*/ 2) {
attr_dev(input, "placeholder", /*placeholder*/ ctx[1]);
}
if (dirty[0] & /*disable*/ 64) {
prop_dev(input, "disabled", /*disable*/ ctx[6]);
}
if (dirty[0] & /*tag*/ 256 && input.value !== /*tag*/ ctx[8]) {
set_input_value(input, /*tag*/ ctx[8]);
}
if (dirty[0] & /*disable*/ 64) {
toggle_class(div, "sti-layout-disable", /*disable*/ ctx[6]);
}
if (/*autoComplete*/ ctx[2] && /*arrelementsmatch*/ ctx[7].length > 0) {
if (if_block1) {
if_block1.p(ctx, dirty);
} else {
if_block1 = create_if_block$2(ctx);
if_block1.c();
if_block1.m(if_block1_anchor.parentNode, if_block1_anchor);
}
} else if (if_block1) {
if_block1.d(1);
if_block1 = null;
}
},
i: noop,
o: noop,
d: function destroy(detaching) {
if (detaching) detach_dev(div);
if (if_block0) if_block0.d();
if (detaching) detach_dev(t1);
if (if_block1) if_block1.d(detaching);
if (detaching) detach_dev(if_block1_anchor);
mounted = false;
run_all(dispose);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_fragment$8.name,
type: "component",
source: "",
ctx
});
return block;
}
function getClipboardData(e) {
if (window.clipboardData) {
return window.clipboardData.getData("Text");
}
if (e.clipboardData) {
return e.clipboardData.getData("text/plain");
}
return "";
}
function uniqueID() {
return "sti_" + Math.random().toString(36).substr(2, 9);
}
function instance$8($$self, $$props, $$invalidate) {
let matchsID;
let { $$slots: slots = {}, $$scope } = $$props;
validate_slots("Tags", slots, []);
const dispatch = createEventDispatcher();
let tag = "";
let arrelementsmatch = [];
let regExpEscape = s => {
return s.replace(/[-\\^$*+?.()|[\]{}]/g, "\\$&");
};
let { tags } = $$props;
let { addKeys } = $$props;
let { maxTags } = $$props;
let { onlyUnique } = $$props;
let { removeKeys } = $$props;
let { placeholder } = $$props;
let { allowPaste } = $$props;
let { allowDrop } = $$props;
let { splitWith } = $$props;
let { autoComplete } = $$props;
let { autoCompleteKey } = $$props;
let { name } = $$props;
let { id } = $$props;
let { allowBlur } = $$props;
let { disable } = $$props;
let { minChars } = $$props;
let { onlyAutocomplete } = $$props;
let storePlaceholder = placeholder;
function setTag(input) {
const currentTag = input.target.value;
if (addKeys) {
addKeys.forEach(function (key) {
if (key === input.keyCode) {
if (currentTag) input.preventDefault();
switch (input.keyCode) {
case 9:
// TAB add first element on the autoComplete list
if (autoComplete && document.getElementById(matchsID)) {
addTag(document.getElementById(matchsID).querySelectorAll("li")[0].textContent);
} else {
addTag(currentTag);
}
break;
default:
addTag(currentTag);
break;
}
}
});
}
if (removeKeys) {
removeKeys.forEach(function (key) {
if (key === input.keyCode && tag === "") {
tags.pop();
$$invalidate(0, tags);
dispatch("tags", { tags });
$$invalidate(7, arrelementsmatch = []);
document.getElementById(id).readOnly = false;
$$invalidate(1, placeholder = storePlaceholder);
document.getElementById(id).focus();
}
});
}
// ArrowDown : focus on first element of the autocomplete
if (input.keyCode === 40 && autoComplete && document.getElementById(matchsID)) {
event.preventDefault();
document.getElementById(matchsID).querySelector("li:first-child").focus();
} else if (input.keyCode === 38 && autoComplete && document.getElementById(matchsID)) {
event.preventDefault(); // ArrowUp : focus on last element of the autocomplete
document.getElementById(matchsID).querySelector("li:last-child").focus();
}
}
function addTag(currentTag) {
if (typeof currentTag === "object" && currentTag !== null) {
if (!autoCompleteKey) {
return console.error("'autoCompleteKey' is necessary if 'autoComplete' result is an array of objects");
}
var currentObjTags = currentTag;
currentTag = currentTag[autoCompleteKey].trim();
} else {
currentTag = currentTag.trim();
}
if (currentTag == "") return;
if (maxTags && tags.length == maxTags) return;
if (onlyUnique && tags.includes(currentTag)) return;
if (onlyAutocomplete && arrelementsmatch.length === 0) return;
tags.push(currentObjTags ? currentObjTags : currentTag);
$$invalidate(0, tags);
$$invalidate(8, tag = "");
dispatch("tags", { tags });
// Hide autocomplete list
// Focus on svelte tags input
$$invalidate(7, arrelementsmatch = []);
document.getElementById(id).focus();
if (maxTags && tags.length == maxTags) {
document.getElementById(id).readOnly = true;
$$invalidate(1, placeholder = "");
}
}
function removeTag(i) {
tags.splice(i, 1);
$$invalidate(0, tags);
dispatch("tags", { tags });
// Hide autocomplete list
// Focus on svelte tags input
$$invalidate(7, arrelementsmatch = []);
document.getElementById(id).readOnly = false;
$$invalidate(1, placeholder = storePlaceholder);
document.getElementById(id).focus();
}
function onPaste(e) {
if (!allowPaste) return;
e.preventDefault();
const data = getClipboardData(e);
splitTags(data).map(tag => addTag(tag));
}
function onDrop(e) {
if (!allowDrop) return;
e.preventDefault();
const data = e.dataTransfer.getData("Text");
splitTags(data).map(tag => addTag(tag));
}
function onBlur(tag) {
if (!document.getElementById(matchsID) && allowBlur) {
event.preventDefault();
addTag(tag);
}
}
function splitTags(data) {
return data.split(splitWith).map(tag => tag.trim());
}
async function getMatchElements(input) {
if (!autoComplete) return;
let autoCompleteValues = [];
if (Array.isArray(autoComplete)) {
autoCompleteValues = autoComplete;
}
if (typeof autoComplete === "function") {
if (autoComplete.constructor.name === "AsyncFunction") {
autoCompleteValues = await autoComplete();
} else {
autoCompleteValues = autoComplete();
}
}
var value = input.target.value;
// Escape
if (value == "" || input.keyCode === 27 || value.length < minChars) {
$$invalidate(7, arrelementsmatch = []);
return;
}
if (typeof autoCompleteValues[0] === "object" && autoCompleteValues !== null) {
if (!autoCompleteKey) {
return console.error("'autoCompleteValue' is necessary if 'autoComplete' result is an array of objects");
}
var matchs = autoCompleteValues.filter(e => e[autoCompleteKey].toLowerCase().includes(value.toLowerCase())).map(matchTag => {
return {
label: matchTag,
search: matchTag[autoCompleteKey].replace(RegExp(regExpEscape(value.toLowerCase()), "i"), "<strong>$&</strong>")
};
});
} else {
var matchs = autoCompleteValues.filter(e => e.toLowerCase().includes(value.toLowerCase())).map(matchTag => {
return {
label: matchTag,
search: matchTag.replace(RegExp(regExpEscape(value.toLowerCase()), "i"), "<strong>$&</strong>")
};
});
}
if (onlyUnique === true && !autoCompleteKey) {
matchs = matchs.filter(tag => !tags.includes(tag.label));
}
$$invalidate(7, arrelementsmatch = matchs);
}
function navigateAutoComplete(autoCompleteIndex, autoCompleteLength, autoCompleteElement) {
if (!autoComplete) return;
event.preventDefault();
// ArrowDown
if (event.keyCode === 40) {
// Last element on the list ? Go to the first
if (autoCompleteIndex + 1 === autoCompleteLength) {
document.getElementById(matchsID).querySelector("li:first-child").focus();
return;
}
document.getElementById(matchsID).querySelectorAll("li")[autoCompleteIndex + 1].focus();
} else if (event.keyCode === 38) {
// ArrowUp
// First element on the list ? Go to the last
if (autoCompleteIndex === 0) {
document.getElementById(matchsID).querySelector("li:last-child").focus();
return;
}
document.getElementById(matchsID).querySelectorAll("li")[autoCompleteIndex - 1].focus();
} else if (event.keyCode === 13) {
// Enter
addTag(autoCompleteElement);
} else if (event.keyCode === 27) {
// Escape
$$invalidate(7, arrelementsmatch = []);
document.getElementById(id).focus();
}
}
const writable_props = [
"tags",
"addKeys",
"maxTags",
"onlyUnique",
"removeKeys",
"placeholder",
"allowPaste",
"allowDrop",
"splitWith",
"autoComplete",
"autoCompleteKey",
"name",
"id",
"allowBlur",
"disable",
"minChars",
"onlyAutocomplete"
];
Object.keys($$props).forEach(key => {
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console_1$1.warn(`<Tags> was created with unknown prop '${key}'`);
});
const click_handler = i => removeTag(i);
function input_input_handler() {
tag = this.value;
$$invalidate(8, tag);
}
const blur_handler = () => onBlur(tag);
const keydown_handler = (index, element) => navigateAutoComplete(index, arrelementsmatch.length, element.label);
const click_handler_1 = element => addTag(element.label);
$$self.$$set = $$props => {
if ("tags" in $$props) $$invalidate(0, tags = $$props.tags);
if ("addKeys" in $$props) $$invalidate(17, addKeys = $$props.addKeys);
if ("maxTags" in $$props) $$invalidate(18, maxTags = $$props.maxTags);
if ("onlyUnique" in $$props) $$invalidate(19, onlyUnique = $$props.onlyUnique);
if ("removeKeys" in $$props) $$invalidate(20, removeKeys = $$props.removeKeys);
if ("placeholder" in $$props) $$invalidate(1, placeholder = $$props.placeholder);
if ("allowPaste" in $$props) $$invalidate(21, allowPaste = $$props.allowPaste);
if ("allowDrop" in $$props) $$invalidate(22, allowDrop = $$props.allowDrop);
if ("splitWith" in $$props) $$invalidate(23, splitWith = $$props.splitWith);
if ("autoComplete" in $$props) $$invalidate(2, autoComplete = $$props.autoComplete);
if ("autoCompleteKey" in $$props) $$invalidate(3, autoCompleteKey = $$props.autoCompleteKey);
if ("name" in $$props) $$invalidate(4, name = $$props.name);
if ("id" in $$props) $$invalidate(5, id = $$props.id);
if ("allowBlur" in $$props) $$invalidate(24, allowBlur = $$props.allowBlur);
if ("disable" in $$props) $$invalidate(6, disable = $$props.disable);
if ("minChars" in $$props) $$invalidate(25, minChars = $$props.minChars);
if ("onlyAutocomplete" in $$props) $$invalidate(26, onlyAutocomplete = $$props.onlyAutocomplete);
};
$$self.$capture_state = () => ({
createEventDispatcher,
dispatch,
tag,
arrelementsmatch,
regExpEscape,
tags,
addKeys,
maxTags,
onlyUnique,
removeKeys,
placeholder,
allowPaste,
allowDrop,
splitWith,
autoComplete,
autoCompleteKey,
name,
id,
allowBlur,
disable,
minChars,
onlyAutocomplete,
storePlaceholder,
setTag,
addTag,
removeTag,
onPaste,
onDrop,
onBlur,
getClipboardData,
splitTags,
getMatchElements,
navigateAutoComplete,
uniqueID,
matchsID
});
$$self.$inject_state = $$props => {
if ("tag" in $$props) $$invalidate(8, tag = $$props.tag);
if ("arrelementsmatch" in $$props) $$invalidate(7, arrelementsmatch = $$props.arrelementsmatch);
if ("regExpEscape" in $$props) regExpEscape = $$props.regExpEscape;
if ("tags" in $$props) $$invalidate(0, tags = $$props.tags);
if ("addKeys" in $$props) $$invalidate(17, addKeys = $$props.addKeys);
if ("maxTags" in $$props) $$invalidate(18, maxTags = $$props.maxTags);
if ("onlyUnique" in $$props) $$invalidate(19, onlyUnique = $$props.onlyUnique);
if ("removeKeys" in $$props) $$invalidate(20, removeKeys = $$props.removeKeys);
if ("placeholder" in $$props) $$invalidate(1, placeholder = $$props.placeholder);
if ("allowPaste" in $$props) $$invalidate(21, allowPaste = $$props.allowPaste);
if ("allowDrop" in $$props) $$invalidate(22, allowDrop = $$props.allowDrop);
if ("splitWith" in $$props) $$invalidate(23, splitWith = $$props.splitWith);
if ("autoComplete" in $$props) $$invalidate(2, autoComplete = $$props.autoComplete);
if ("autoCompleteKey" in $$props) $$invalidate(3, autoCompleteKey = $$props.autoCompleteKey);
if ("name" in $$props) $$invalidate(4, name = $$props.name);
if ("id" in $$props) $$invalidate(5, id = $$props.id);
if ("allowBlur" in $$props) $$invalidate(24, allowBlur = $$props.allowBlur);
if ("disable" in $$props) $$invalidate(6, disable = $$props.disable);
if ("minChars" in $$props) $$invalidate(25, minChars = $$props.minChars);
if ("onlyAutocomplete" in $$props) $$invalidate(26, onlyAutocomplete = $$props.onlyAutocomplete);
if ("storePlaceholder" in $$props) storePlaceholder = $$props.storePlaceholder;
if ("matchsID" in $$props) matchsID = $$props.matchsID;
};
if ($$props && "$$inject" in $$props) {
$$self.$inject_state($$props.$$inject);
}
$$self.$$.update = () => {
if ($$self.$$.dirty[0] & /*tags*/ 1) {
$$invalidate(0, tags = tags || []);
}
if ($$self.$$.dirty[0] & /*addKeys*/ 131072) {
$$invalidate(17, addKeys = addKeys || [13]);
}
if ($$self.$$.dirty[0] & /*maxTags*/ 262144) {
$$invalidate(18, maxTags = maxTags || false);
}
if ($$self.$$.dirty[0] & /*onlyUnique*/ 524288) {
$$invalidate(19, onlyUnique = onlyUnique || false);
}
if ($$self.$$.dirty[0] & /*removeKeys*/ 1048576) {
$$invalidate(20, removeKeys = removeKeys || [8]);
}
if ($$self.$$.dirty[0] & /*placeholder*/ 2) {
$$invalidate(1, placeholder = placeholder || "");
}
if ($$self.$$.dirty[0] & /*allowPaste*/ 2097152) {
$$invalidate(21, allowPaste = allowPaste || false);
}
if ($$self.$$.dirty[0] & /*allowDrop*/ 4194304) {
$$invalidate(22, allowDrop = allowDrop || false);
}
if ($$self.$$.dirty[0] & /*splitWith*/ 8388608) {
$$invalidate(23, splitWith = splitWith || ",");
}
if ($$self.$$.dirty[0] & /*autoComplete*/ 4) {
$$invalidate(2, autoComplete = autoComplete || false);
}
if ($$self.$$.dirty[0] & /*autoCompleteKey*/ 8) {
$$invalidate(3, autoCompleteKey = autoCompleteKey || false);
}
if ($$self.$$.dirty[0] & /*name*/ 16) {
$$invalidate(4, name = name || "svelte-tags-input");
}
if ($$self.$$.dirty[0] & /*id*/ 32) {
$$invalidate(5, id = id || uniqueID());
}
if ($$self.$$.dirty[0] & /*allowBlur*/ 16777216) {
$$invalidate(24, allowBlur = allowBlur || false);
}
if ($$self.$$.dirty[0] & /*disable*/ 64) {
$$invalidate(6, disable = disable || false);
}
if ($$self.$$.dirty[0] & /*minChars*/ 33554432) {
$$invalidate(25, minChars = minChars || 1);
}
if ($$self.$$.dirty[0] & /*onlyAutocomplete*/ 67108864) {
$$invalidate(26, onlyAutocomplete = onlyAutocomplete || false);
}
if ($$self.$$.dirty[0] & /*id*/ 32) {
matchsID = id + "_matchs";
}
};
return [
tags,
placeholder,
autoComplete,
autoCompleteKey,
name,
id,
disable,
arrelementsmatch,
tag,
setTag,
addTag,
removeTag,
onPaste,
onDrop,
onBlur,
getMatchElements,
navigateAutoComplete,
addKeys,
maxTags,
onlyUnique,
removeKeys,
allowPaste,
allowDrop,
splitWith,
allowBlur,
minChars,
onlyAutocomplete,
click_handler,
input_input_handler,
blur_handler,
keydown_handler,
click_handler_1
];
}
class Tags$1 extends SvelteComponentDev {
constructor(options) {
super(options);
init(
this,
options,
instance$8,
create_fragment$8,
safe_not_equal,
{
tags: 0,
addKeys: 17,
maxTags: 18,
onlyUnique: 19,
removeKeys: 20,
placeholder: 1,
allowPaste: 21,
allowDrop: 22,
splitWith: 23,
autoComplete: 2,
autoCompleteKey: 3,
name: 4,
id: 5,
allowBlur: 24,
disable: 6,
minChars: 25,
onlyAutocomplete: 26
},
[-1, -1]
);
dispatch_dev("SvelteRegisterComponent", {
component: this,
tagName: "Tags",
options,
id: create_fragment$8.name
});
const { ctx } = this.$$;
const props = options.props || {};
if (/*tags*/ ctx[0] === undefined && !("tags" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'tags'");
}
if (/*addKeys*/ ctx[17] === undefined && !("addKeys" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'addKeys'");
}
if (/*maxTags*/ ctx[18] === undefined && !("maxTags" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'maxTags'");
}
if (/*onlyUnique*/ ctx[19] === undefined && !("onlyUnique" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'onlyUnique'");
}
if (/*removeKeys*/ ctx[20] === undefined && !("removeKeys" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'removeKeys'");
}
if (/*placeholder*/ ctx[1] === undefined && !("placeholder" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'placeholder'");
}
if (/*allowPaste*/ ctx[21] === undefined && !("allowPaste" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'allowPaste'");
}
if (/*allowDrop*/ ctx[22] === undefined && !("allowDrop" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'allowDrop'");
}
if (/*splitWith*/ ctx[23] === undefined && !("splitWith" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'splitWith'");
}
if (/*autoComplete*/ ctx[2] === undefined && !("autoComplete" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'autoComplete'");
}
if (/*autoCompleteKey*/ ctx[3] === undefined && !("autoCompleteKey" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'autoCompleteKey'");
}
if (/*name*/ ctx[4] === undefined && !("name" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'name'");
}
if (/*id*/ ctx[5] === undefined && !("id" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'id'");
}
if (/*allowBlur*/ ctx[24] === undefined && !("allowBlur" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'allowBlur'");
}
if (/*disable*/ ctx[6] === undefined && !("disable" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'disable'");
}
if (/*minChars*/ ctx[25] === undefined && !("minChars" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'minChars'");
}
if (/*onlyAutocomplete*/ ctx[26] === undefined && !("onlyAutocomplete" in props)) {
console_1$1.warn("<Tags> was created without expected prop 'onlyAutocomplete'");
}
}
get tags() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set tags(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get addKeys() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set addKeys(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get maxTags() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set maxTags(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get onlyUnique() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set onlyUnique(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get removeKeys() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set removeKeys(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get placeholder() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set placeholder(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get allowPaste() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set allowPaste(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get allowDrop() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set allowDrop(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get splitWith() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set splitWith(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get autoComplete() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set autoComplete(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get autoCompleteKey() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set autoCompleteKey(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get name() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set name(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get id() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set id(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get allowBlur() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set allowBlur(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get disable() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set disable(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get minChars() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set minChars(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
get onlyAutocomplete() {
throw new Error("<Tags>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set onlyAutocomplete(value) {
throw new Error("<Tags>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
}
/* src/routes/Posts.svelte generated by Svelte v3.38.2 */
const { console: console_1 } = globals;
const file$6 = "src/routes/Posts.svelte";
function create_fragment$7(ctx) {
let section0;
let div0;
let p;
let t1;
let section1;
let div7;
let div5;
let form;
let div4;
let div2;
let div1;
let tags;
let t2;
let div3;
let button;
let t4;
let div6;
let postpaginator;
let current;
let mounted;
let dispose;
tags = new Tags$1({
props: {
tags: /*searchTerms*/ ctx[0],
addKeys: [9, 32]
},
$$inline: true
});
tags.$on("tags", /*onTagChange*/ ctx[4]);
postpaginator = new PostPaginator({
props: {
url: "/posts?tags=" + /*searchTerms*/ ctx[0].join("+") + "&",
posts: /*posts*/ ctx[3],
page: /*page*/ ctx[1],
totalPages: /*totalPages*/ ctx[2],
handlePage: /*handlePage*/ ctx[5]
},
$$inline: true
});
const block = {
c: function create() {
section0 = element("section");
div0 = element("div");
p = element("p");
p.textContent = "Posts";
t1 = space();
section1 = element("section");
div7 = element("div");
div5 = element("div");
form = element("form");
div4 = element("div");
div2 = element("div");
div1 = element("div");
create_component(tags.$$.fragment);
t2 = space();
div3 = element("div");
button = element("button");
button.textContent = "Search";
t4 = space();
div6 = element("div");
create_component(postpaginator.$$.fragment);
attr_dev(p, "class", "title");
add_location(p, file$6, 61, 8, 1514);
attr_dev(div0, "class", "hero-body");
add_location(div0, file$6, 60, 4, 1482);
attr_dev(section0, "class", "hero is-primary");
add_location(section0, file$6, 59, 0, 1444);
attr_dev(div1, "class", "control");
attr_dev(div1, "id", "tags");
add_location(div1, file$6, 71, 24, 1826);
attr_dev(div2, "class", "control is-expanded");
add_location(div2, file$6, 70, 20, 1768);
attr_dev(button, "type", "submit");
attr_dev(button, "class", "button is-primary");
add_location(button, file$6, 80, 24, 2201);
attr_dev(div3, "class", "control");
add_location(div3, file$6, 79, 20, 2155);
attr_dev(div4, "class", "field has-addons");
add_location(div4, file$6, 69, 16, 1717);
add_location(form, file$6, 68, 12, 1658);
attr_dev(div5, "class", "block");
add_location(div5, file$6, 67, 8, 1626);
attr_dev(div6, "class", "block");
add_location(div6, file$6, 87, 8, 2412);
attr_dev(div7, "class", "container");
add_location(div7, file$6, 66, 4, 1594);
attr_dev(section1, "class", "section");
add_location(section1, file$6, 65, 0, 1564);
},
l: function claim(nodes) {
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
},
m: function mount(target, anchor) {
insert_dev(target, section0, anchor);
append_dev(section0, div0);
append_dev(div0, p);
insert_dev(target, t1, anchor);
insert_dev(target, section1, anchor);
append_dev(section1, div7);
append_dev(div7, div5);
append_dev(div5, form);
append_dev(form, div4);
append_dev(div4, div2);
append_dev(div2, div1);
mount_component(tags, div1, null);
append_dev(div4, t2);
append_dev(div4, div3);
append_dev(div3, button);
append_dev(div7, t4);
append_dev(div7, div6);
mount_component(postpaginator, div6, null);
current = true;
if (!mounted) {
dispose = listen_dev(form, "submit", prevent_default(/*onSearch*/ ctx[6]), false, true, false);
mounted = true;
}
},
p: function update(ctx, [dirty]) {
const tags_changes = {};
if (dirty & /*searchTerms*/ 1) tags_changes.tags = /*searchTerms*/ ctx[0];
tags.$set(tags_changes);
const postpaginator_changes = {};
if (dirty & /*searchTerms*/ 1) postpaginator_changes.url = "/posts?tags=" + /*searchTerms*/ ctx[0].join("+") + "&";
if (dirty & /*posts*/ 8) postpaginator_changes.posts = /*posts*/ ctx[3];
if (dirty & /*page*/ 2) postpaginator_changes.page = /*page*/ ctx[1];
if (dirty & /*totalPages*/ 4) postpaginator_changes.totalPages = /*totalPages*/ ctx[2];
postpaginator.$set(postpaginator_changes);
},
i: function intro(local) {
if (current) return;
transition_in(tags.$$.fragment, local);
transition_in(postpaginator.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(tags.$$.fragment, local);
transition_out(postpaginator.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(section0);
if (detaching) detach_dev(t1);
if (detaching) detach_dev(section1);
destroy_component(tags);
destroy_component(postpaginator);
mounted = false;
dispose();
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_fragment$7.name,
type: "component",
source: "",
ctx
});
return block;
}
function instance$7($$self, $$props, $$invalidate) {
let { $$slots: slots = {}, $$scope } = $$props;
validate_slots("Posts", slots, []);
let { location } = $$props;
let searchTerms = [];
let page = 1;
let totalPages = 1;
let posts = [];
const getData = async () => {
const data = await getPostSearchTag({ page, q: searchTerms.join("+") });
if (Array.isArray(data.posts)) {
$$invalidate(3, posts = data.posts);
$$invalidate(2, totalPages = data.totalPage);
}
};
let queryParams;
const onTagChange = value => {
$$invalidate(0, searchTerms = value.detail.tags);
};
const handlePage = i => {
return () => {
$$invalidate(1, page = i);
getData();
};
};
const onSearch = i => {
if (searchTerms.length > 0) {
navigate(`/posts?tags=${searchTerms.join("+")}`);
} else {
navigate(`/posts`);
}
};
const writable_props = ["location"];
Object.keys($$props).forEach(key => {
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console_1.warn(`<Posts> was created with unknown prop '${key}'`);
});
$$self.$$set = $$props => {
if ("location" in $$props) $$invalidate(7, location = $$props.location);
};
$$self.$capture_state = () => ({
onMount,
getPostSearchTag,
navigate,
PostPaginator,
queryString,
Tags: Tags$1,
location,
searchTerms,
page,
totalPages,
posts,
getData,
queryParams,
onTagChange,
handlePage,
onSearch
});
$$self.$inject_state = $$props => {
if ("location" in $$props) $$invalidate(7, location = $$props.location);
if ("searchTerms" in $$props) $$invalidate(0, searchTerms = $$props.searchTerms);
if ("page" in $$props) $$invalidate(1, page = $$props.page);
if ("totalPages" in $$props) $$invalidate(2, totalPages = $$props.totalPages);
if ("posts" in $$props) $$invalidate(3, posts = $$props.posts);
if ("queryParams" in $$props) $$invalidate(8, queryParams = $$props.queryParams);
};
if ($$props && "$$inject" in $$props) {
$$self.$inject_state($$props.$$inject);
}
$$self.$$.update = () => {
if ($$self.$$.dirty & /*location, queryParams*/ 384) {
{
$$invalidate(8, queryParams = queryString.parse(location.search));
console.log(queryParams);
if (queryParams.page) {
$$invalidate(1, page = parseInt(queryParams.page));
}
if (queryParams.tags) {
$$invalidate(0, searchTerms = queryParams.tags.split(" "));
} else {
$$invalidate(0, searchTerms = []);
}
getData();
}
}
};
return [
searchTerms,
page,
totalPages,
posts,
onTagChange,
handlePage,
onSearch,
location,
queryParams
];
}
class Posts extends SvelteComponentDev {
constructor(options) {
super(options);
init(this, options, instance$7, create_fragment$7, safe_not_equal, { location: 7 });
dispatch_dev("SvelteRegisterComponent", {
component: this,
tagName: "Posts",
options,
id: create_fragment$7.name
});
const { ctx } = this.$$;
const props = options.props || {};
if (/*location*/ ctx[7] === undefined && !("location" in props)) {
console_1.warn("<Posts> was created without expected prop 'location'");
}
}
get location() {
throw new Error("<Posts>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set location(value) {
throw new Error("<Posts>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
}
/* src/routes/Post.svelte generated by Svelte v3.38.2 */
const file$5 = "src/routes/Post.svelte";
function get_each_context$1(ctx, list, i) {
const child_ctx = ctx.slice();
child_ctx[4] = list[i];
return child_ctx;
}
// (27:8) {#if post}
function create_if_block_2(ctx) {
let p;
let t0;
let t1_value = /*post*/ ctx[0].id + "";
let t1;
const block = {
c: function create() {
p = element("p");
t0 = text("Post ID: ");
t1 = text(t1_value);
attr_dev(p, "class", "title");
add_location(p, file$5, 27, 12, 628);
},
m: function mount(target, anchor) {
insert_dev(target, p, anchor);
append_dev(p, t0);
append_dev(p, t1);
},
p: function update(ctx, dirty) {
if (dirty & /*post*/ 1 && t1_value !== (t1_value = /*post*/ ctx[0].id + "")) set_data_dev(t1, t1_value);
},
d: function destroy(detaching) {
if (detaching) detach_dev(p);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block_2.name,
type: "if",
source: "(27:8) {#if post}",
ctx
});
return block;
}
// (34:0) {#if post}
function create_if_block$1(ctx) {
let div4;
let section;
let div3;
let div1;
let div0;
let p0;
let link;
let t0;
let p1;
let t1;
let a;
let t2_value = /*trimUrl*/ ctx[1](/*post*/ ctx[0].source_url) + "";
let t2;
let a_href_value;
let t3;
let p2;
let t4;
let br;
let t5;
let p3;
let current_block_type_index;
let if_block;
let t6;
let div2;
let figure;
let img;
let img_alt_value;
let img_src_value;
let current;
link = new Link({
props: {
class: "button is-primary",
to: "/post/edit/" + /*post*/ ctx[0].id,
$$slots: { default: [create_default_slot$2] },
$$scope: { ctx }
},
$$inline: true
});
const if_block_creators = [create_if_block_1$1, create_else_block];
const if_blocks = [];
function select_block_type(ctx, dirty) {
if (/*post*/ ctx[0].tags) return 0;
return 1;
}
current_block_type_index = select_block_type(ctx);
if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
const block = {
c: function create() {
div4 = element("div");
section = element("section");
div3 = element("div");
div1 = element("div");
div0 = element("div");
p0 = element("p");
create_component(link.$$.fragment);
t0 = space();
p1 = element("p");
t1 = text("Source URL: ");
a = element("a");
t2 = text(t2_value);
t3 = space();
p2 = element("p");
t4 = text("Tags:");
br = element("br");
t5 = space();
p3 = element("p");
if_block.c();
t6 = space();
div2 = element("div");
figure = element("figure");
img = element("img");
add_location(p0, file$5, 39, 24, 961);
attr_dev(a, "href", a_href_value = /*post*/ ctx[0].source_url);
add_location(a, file$5, 46, 40, 1253);
add_location(p1, file$5, 45, 24, 1209);
add_location(br, file$5, 51, 33, 1462);
add_location(p2, file$5, 50, 24, 1425);
add_location(p3, file$5, 53, 24, 1522);
attr_dev(div0, "class", "content");
add_location(div0, file$5, 38, 20, 915);
attr_dev(div1, "class", "column is-one-third box");
add_location(div1, file$5, 37, 16, 857);
attr_dev(img, "alt", img_alt_value = /*post*/ ctx[0].id);
if (img.src !== (img_src_value = /*post*/ ctx[0].image_path)) attr_dev(img, "src", img_src_value);
add_location(img, file$5, 66, 24, 2017);
attr_dev(figure, "class", "image");
add_location(figure, file$5, 65, 20, 1970);
attr_dev(div2, "class", "column");
add_location(div2, file$5, 64, 16, 1929);
attr_dev(div3, "class", "columns");
add_location(div3, file$5, 36, 12, 819);
attr_dev(section, "class", "section");
add_location(section, file$5, 35, 8, 781);
attr_dev(div4, "class", "container");
add_location(div4, file$5, 34, 4, 749);
},
m: function mount(target, anchor) {
insert_dev(target, div4, anchor);
append_dev(div4, section);
append_dev(section, div3);
append_dev(div3, div1);
append_dev(div1, div0);
append_dev(div0, p0);
mount_component(link, p0, null);
append_dev(div0, t0);
append_dev(div0, p1);
append_dev(p1, t1);
append_dev(p1, a);
append_dev(a, t2);
append_dev(div0, t3);
append_dev(div0, p2);
append_dev(p2, t4);
append_dev(p2, br);
append_dev(div0, t5);
append_dev(div0, p3);
if_blocks[current_block_type_index].m(p3, null);
append_dev(div3, t6);
append_dev(div3, div2);
append_dev(div2, figure);
append_dev(figure, img);
current = true;
},
p: function update(ctx, dirty) {
const link_changes = {};
if (dirty & /*post*/ 1) link_changes.to = "/post/edit/" + /*post*/ ctx[0].id;
if (dirty & /*$$scope*/ 128) {
link_changes.$$scope = { dirty, ctx };
}
link.$set(link_changes);
if ((!current || dirty & /*post*/ 1) && t2_value !== (t2_value = /*trimUrl*/ ctx[1](/*post*/ ctx[0].source_url) + "")) set_data_dev(t2, t2_value);
if (!current || dirty & /*post*/ 1 && a_href_value !== (a_href_value = /*post*/ ctx[0].source_url)) {
attr_dev(a, "href", a_href_value);
}
let previous_block_index = current_block_type_index;
current_block_type_index = select_block_type(ctx);
if (current_block_type_index === previous_block_index) {
if_blocks[current_block_type_index].p(ctx, dirty);
} else {
group_outros();
transition_out(if_blocks[previous_block_index], 1, 1, () => {
if_blocks[previous_block_index] = null;
});
check_outros();
if_block = if_blocks[current_block_type_index];
if (!if_block) {
if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
if_block.c();
} else {
if_block.p(ctx, dirty);
}
transition_in(if_block, 1);
if_block.m(p3, null);
}
if (!current || dirty & /*post*/ 1 && img_alt_value !== (img_alt_value = /*post*/ ctx[0].id)) {
attr_dev(img, "alt", img_alt_value);
}
if (!current || dirty & /*post*/ 1 && img.src !== (img_src_value = /*post*/ ctx[0].image_path)) {
attr_dev(img, "src", img_src_value);
}
},
i: function intro(local) {
if (current) return;
transition_in(link.$$.fragment, local);
transition_in(if_block);
current = true;
},
o: function outro(local) {
transition_out(link.$$.fragment, local);
transition_out(if_block);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(div4);
destroy_component(link);
if_blocks[current_block_type_index].d();
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block$1.name,
type: "if",
source: "(34:0) {#if post}",
ctx
});
return block;
}
// (41:28) <Link class="button is-primary" to="/post/edit/{post.id}">
function create_default_slot$2(ctx) {
let t;
const block = {
c: function create() {
t = text("Edit");
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot$2.name,
type: "slot",
source: "(41:28) <Link class=\\\"button is-primary\\\" to=\\\"/post/edit/{post.id}\\\">",
ctx
});
return block;
}
// (59:28) {:else}
function create_else_block(ctx) {
let t;
const block = {
c: function create() {
t = text("None");
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
p: noop,
i: noop,
o: noop,
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_else_block.name,
type: "else",
source: "(59:28) {:else}",
ctx
});
return block;
}
// (55:28) {#if post.tags}
function create_if_block_1$1(ctx) {
let each_blocks = [];
let each_1_lookup = new Map();
let each_1_anchor;
let current;
let each_value = /*post*/ ctx[0].tags;
validate_each_argument(each_value);
const get_key = ctx => /*tag*/ ctx[4];
validate_each_keys(ctx, each_value, get_each_context$1, get_key);
for (let i = 0; i < each_value.length; i += 1) {
let child_ctx = get_each_context$1(ctx, each_value, i);
let key = get_key(child_ctx);
each_1_lookup.set(key, each_blocks[i] = create_each_block$1(key, child_ctx));
}
const block = {
c: function create() {
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].c();
}
each_1_anchor = empty();
},
m: function mount(target, anchor) {
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].m(target, anchor);
}
insert_dev(target, each_1_anchor, anchor);
current = true;
},
p: function update(ctx, dirty) {
if (dirty & /*post*/ 1) {
each_value = /*post*/ ctx[0].tags;
validate_each_argument(each_value);
group_outros();
validate_each_keys(ctx, each_value, get_each_context$1, get_key);
each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx, each_value, each_1_lookup, each_1_anchor.parentNode, outro_and_destroy_block, create_each_block$1, each_1_anchor, get_each_context$1);
check_outros();
}
},
i: function intro(local) {
if (current) return;
for (let i = 0; i < each_value.length; i += 1) {
transition_in(each_blocks[i]);
}
current = true;
},
o: function outro(local) {
for (let i = 0; i < each_blocks.length; i += 1) {
transition_out(each_blocks[i]);
}
current = false;
},
d: function destroy(detaching) {
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].d(detaching);
}
if (detaching) detach_dev(each_1_anchor);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block_1$1.name,
type: "if",
source: "(55:28) {#if post.tags}",
ctx
});
return block;
}
// (56:32) {#each post.tags as tag (tag)}
function create_each_block$1(key_1, ctx) {
let first;
let taglink;
let current;
taglink = new TagLink({
props: { tag: /*tag*/ ctx[4] },
$$inline: true
});
const block = {
key: key_1,
first: null,
c: function create() {
first = empty();
create_component(taglink.$$.fragment);
this.first = first;
},
m: function mount(target, anchor) {
insert_dev(target, first, anchor);
mount_component(taglink, target, anchor);
current = true;
},
p: function update(new_ctx, dirty) {
ctx = new_ctx;
const taglink_changes = {};
if (dirty & /*post*/ 1) taglink_changes.tag = /*tag*/ ctx[4];
taglink.$set(taglink_changes);
},
i: function intro(local) {
if (current) return;
transition_in(taglink.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(taglink.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(first);
destroy_component(taglink, detaching);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_each_block$1.name,
type: "each",
source: "(56:32) {#each post.tags as tag (tag)}",
ctx
});
return block;
}
function create_fragment$6(ctx) {
let section;
let div;
let t;
let if_block1_anchor;
let current;
let if_block0 = /*post*/ ctx[0] && create_if_block_2(ctx);
let if_block1 = /*post*/ ctx[0] && create_if_block$1(ctx);
const block = {
c: function create() {
section = element("section");
div = element("div");
if (if_block0) if_block0.c();
t = space();
if (if_block1) if_block1.c();
if_block1_anchor = empty();
attr_dev(div, "class", "hero-body");
add_location(div, file$5, 25, 4, 573);
attr_dev(section, "class", "hero is-primary");
add_location(section, file$5, 24, 0, 535);
},
l: function claim(nodes) {
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
},
m: function mount(target, anchor) {
insert_dev(target, section, anchor);
append_dev(section, div);
if (if_block0) if_block0.m(div, null);
insert_dev(target, t, anchor);
if (if_block1) if_block1.m(target, anchor);
insert_dev(target, if_block1_anchor, anchor);
current = true;
},
p: function update(ctx, [dirty]) {
if (/*post*/ ctx[0]) {
if (if_block0) {
if_block0.p(ctx, dirty);
} else {
if_block0 = create_if_block_2(ctx);
if_block0.c();
if_block0.m(div, null);
}
} else if (if_block0) {
if_block0.d(1);
if_block0 = null;
}
if (/*post*/ ctx[0]) {
if (if_block1) {
if_block1.p(ctx, dirty);
if (dirty & /*post*/ 1) {
transition_in(if_block1, 1);
}
} else {
if_block1 = create_if_block$1(ctx);
if_block1.c();
transition_in(if_block1, 1);
if_block1.m(if_block1_anchor.parentNode, if_block1_anchor);
}
} else if (if_block1) {
group_outros();
transition_out(if_block1, 1, 1, () => {
if_block1 = null;
});
check_outros();
}
},
i: function intro(local) {
if (current) return;
transition_in(if_block1);
current = true;
},
o: function outro(local) {
transition_out(if_block1);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(section);
if (if_block0) if_block0.d();
if (detaching) detach_dev(t);
if (if_block1) if_block1.d(detaching);
if (detaching) detach_dev(if_block1_anchor);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_fragment$6.name,
type: "component",
source: "",
ctx
});
return block;
}
function instance$6($$self, $$props, $$invalidate) {
let { $$slots: slots = {}, $$scope } = $$props;
validate_slots("Post", slots, []);
let { id } = $$props;
let post;
const getData = async () => {
const data = await getPost({ id });
$$invalidate(0, post = data);
};
const trimUrl = str => {
if (str.length > 30) {
return str.substring(0, 30) + "...";
}
return str;
};
onMount(() => {
getData();
});
const writable_props = ["id"];
Object.keys($$props).forEach(key => {
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(`<Post> was created with unknown prop '${key}'`);
});
$$self.$$set = $$props => {
if ("id" in $$props) $$invalidate(2, id = $$props.id);
};
$$self.$capture_state = () => ({
onMount,
TagLink,
getPost,
postCreate,
Link,
id,
post,
getData,
trimUrl
});
$$self.$inject_state = $$props => {
if ("id" in $$props) $$invalidate(2, id = $$props.id);
if ("post" in $$props) $$invalidate(0, post = $$props.post);
};
if ($$props && "$$inject" in $$props) {
$$self.$inject_state($$props.$$inject);
}
return [post, trimUrl, id];
}
class Post extends SvelteComponentDev {
constructor(options) {
super(options);
init(this, options, instance$6, create_fragment$6, safe_not_equal, { id: 2 });
dispatch_dev("SvelteRegisterComponent", {
component: this,
tagName: "Post",
options,
id: create_fragment$6.name
});
const { ctx } = this.$$;
const props = options.props || {};
if (/*id*/ ctx[2] === undefined && !("id" in props)) {
console.warn("<Post> was created without expected prop 'id'");
}
}
get id() {
throw new Error("<Post>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set id(value) {
throw new Error("<Post>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
}
/* src/routes/Login.svelte generated by Svelte v3.38.2 */
const file$4 = "src/routes/Login.svelte";
function create_fragment$5(ctx) {
let section;
let div0;
let p;
let t1;
let div7;
let form;
let div2;
let label0;
let t3;
let div1;
let input0;
let t4;
let div4;
let label1;
let t6;
let div3;
let input1;
let t7;
let div6;
let div5;
let button;
let mounted;
let dispose;
const block = {
c: function create() {
section = element("section");
div0 = element("div");
p = element("p");
p.textContent = "Login";
t1 = space();
div7 = element("div");
form = element("form");
div2 = element("div");
label0 = element("label");
label0.textContent = "Username";
t3 = space();
div1 = element("div");
input0 = element("input");
t4 = space();
div4 = element("div");
label1 = element("label");
label1.textContent = "Password";
t6 = space();
div3 = element("div");
input1 = element("input");
t7 = space();
div6 = element("div");
div5 = element("div");
button = element("button");
button.textContent = "Login";
attr_dev(p, "class", "title");
add_location(p, file$4, 15, 8, 351);
attr_dev(div0, "class", "hero-body");
add_location(div0, file$4, 14, 4, 319);
attr_dev(section, "class", "hero is-primary");
add_location(section, file$4, 13, 0, 281);
attr_dev(label0, "for", "username");
attr_dev(label0, "class", "label");
add_location(label0, file$4, 22, 12, 511);
attr_dev(input0, "id", "username");
attr_dev(input0, "class", "input");
attr_dev(input0, "type", "text");
attr_dev(input0, "placeholder", "Username");
input0.required = true;
add_location(input0, file$4, 24, 16, 614);
attr_dev(div1, "class", "control");
add_location(div1, file$4, 23, 12, 576);
attr_dev(div2, "class", "field");
add_location(div2, file$4, 21, 8, 479);
attr_dev(label1, "for", "password");
attr_dev(label1, "class", "label");
add_location(label1, file$4, 35, 12, 928);
attr_dev(input1, "id", "password");
attr_dev(input1, "class", "input");
attr_dev(input1, "type", "password");
attr_dev(input1, "placeholder", "Password");
input1.required = true;
add_location(input1, file$4, 37, 16, 1031);
attr_dev(div3, "class", "control");
add_location(div3, file$4, 36, 12, 993);
attr_dev(div4, "class", "field");
add_location(div4, file$4, 34, 8, 896);
attr_dev(button, "class", "button is-link");
add_location(button, file$4, 49, 16, 1387);
attr_dev(div5, "class", "control");
add_location(div5, file$4, 48, 12, 1349);
attr_dev(div6, "class", "field");
add_location(div6, file$4, 47, 8, 1317);
add_location(form, file$4, 20, 4, 429);
attr_dev(div7, "class", "container");
add_location(div7, file$4, 19, 0, 401);
},
l: function claim(nodes) {
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
},
m: function mount(target, anchor) {
insert_dev(target, section, anchor);
append_dev(section, div0);
append_dev(div0, p);
insert_dev(target, t1, anchor);
insert_dev(target, div7, anchor);
append_dev(div7, form);
append_dev(form, div2);
append_dev(div2, label0);
append_dev(div2, t3);
append_dev(div2, div1);
append_dev(div1, input0);
set_input_value(input0, /*username*/ ctx[0]);
append_dev(form, t4);
append_dev(form, div4);
append_dev(div4, label1);
append_dev(div4, t6);
append_dev(div4, div3);
append_dev(div3, input1);
set_input_value(input1, /*password*/ ctx[1]);
append_dev(form, t7);
append_dev(form, div6);
append_dev(div6, div5);
append_dev(div5, button);
if (!mounted) {
dispose = [
listen_dev(input0, "input", /*input0_input_handler*/ ctx[3]),
listen_dev(input1, "input", /*input1_input_handler*/ ctx[4]),
listen_dev(form, "submit", prevent_default(/*doLogin*/ ctx[2]), false, true, false)
];
mounted = true;
}
},
p: function update(ctx, [dirty]) {
if (dirty & /*username*/ 1 && input0.value !== /*username*/ ctx[0]) {
set_input_value(input0, /*username*/ ctx[0]);
}
if (dirty & /*password*/ 2 && input1.value !== /*password*/ ctx[1]) {
set_input_value(input1, /*password*/ ctx[1]);
}
},
i: noop,
o: noop,
d: function destroy(detaching) {
if (detaching) detach_dev(section);
if (detaching) detach_dev(t1);
if (detaching) detach_dev(div7);
mounted = false;
run_all(dispose);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_fragment$5.name,
type: "component",
source: "",
ctx
});
return block;
}
function instance$5($$self, $$props, $$invalidate) {
let { $$slots: slots = {}, $$scope } = $$props;
validate_slots("Login", slots, []);
let username = "";
let password = "";
const doLogin = async () => {
await login({ username, password });
navigate("/");
};
const writable_props = [];
Object.keys($$props).forEach(key => {
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(`<Login> was created with unknown prop '${key}'`);
});
function input0_input_handler() {
username = this.value;
$$invalidate(0, username);
}
function input1_input_handler() {
password = this.value;
$$invalidate(1, password);
}
$$self.$capture_state = () => ({
login,
navigate,
username,
password,
doLogin
});
$$self.$inject_state = $$props => {
if ("username" in $$props) $$invalidate(0, username = $$props.username);
if ("password" in $$props) $$invalidate(1, password = $$props.password);
};
if ($$props && "$$inject" in $$props) {
$$self.$inject_state($$props.$$inject);
}
return [username, password, doLogin, input0_input_handler, input1_input_handler];
}
class Login extends SvelteComponentDev {
constructor(options) {
super(options);
init(this, options, instance$5, create_fragment$5, safe_not_equal, {});
dispatch_dev("SvelteRegisterComponent", {
component: this,
tagName: "Login",
options,
id: create_fragment$5.name
});
}
}
/* src/routes/Logout.svelte generated by Svelte v3.38.2 */
function create_fragment$4(ctx) {
const block = {
c: noop,
l: function claim(nodes) {
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
},
m: noop,
p: noop,
i: noop,
o: noop,
d: noop
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_fragment$4.name,
type: "component",
source: "",
ctx
});
return block;
}
function instance$4($$self, $$props, $$invalidate) {
let { $$slots: slots = {}, $$scope } = $$props;
validate_slots("Logout", slots, []);
onMount(() => {
token$1.set("");
navigate("/");
});
const writable_props = [];
Object.keys($$props).forEach(key => {
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(`<Logout> was created with unknown prop '${key}'`);
});
$$self.$capture_state = () => ({ token: token$1, navigate, onMount });
return [];
}
class Logout extends SvelteComponentDev {
constructor(options) {
super(options);
init(this, options, instance$4, create_fragment$4, safe_not_equal, {});
dispatch_dev("SvelteRegisterComponent", {
component: this,
tagName: "Logout",
options,
id: create_fragment$4.name
});
}
}
/* src/routes/Upload.svelte generated by Svelte v3.38.2 */
const file$3 = "src/routes/Upload.svelte";
// (69:16) {#if currentProgress > 0 && currentProgress < 100}
function create_if_block_1(ctx) {
let p;
let t0;
let t1;
const block = {
c: function create() {
p = element("p");
t0 = text(/*currentProgress*/ ctx[0]);
t1 = text("%");
attr_dev(p, "class", "help");
add_location(p, file$3, 69, 20, 2116);
},
m: function mount(target, anchor) {
insert_dev(target, p, anchor);
append_dev(p, t0);
append_dev(p, t1);
},
p: function update(ctx, dirty) {
if (dirty & /*currentProgress*/ 1) set_data_dev(t0, /*currentProgress*/ ctx[0]);
},
d: function destroy(detaching) {
if (detaching) detach_dev(p);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block_1.name,
type: "if",
source: "(69:16) {#if currentProgress > 0 && currentProgress < 100}",
ctx
});
return block;
}
// (72:16) {#if fileName !== ""}
function create_if_block(ctx) {
let p;
let t0;
let t1;
const block = {
c: function create() {
p = element("p");
t0 = text(/*fileName*/ ctx[1]);
t1 = text(" uploaded");
attr_dev(p, "class", "help");
add_location(p, file$3, 72, 20, 2235);
},
m: function mount(target, anchor) {
insert_dev(target, p, anchor);
append_dev(p, t0);
append_dev(p, t1);
},
p: function update(ctx, dirty) {
if (dirty & /*fileName*/ 2) set_data_dev(t0, /*fileName*/ ctx[1]);
},
d: function destroy(detaching) {
if (detaching) detach_dev(p);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_if_block.name,
type: "if",
source: "(72:16) {#if fileName !== \\\"\\\"}",
ctx
});
return block;
}
function create_fragment$3(ctx) {
let section0;
let div0;
let p;
let t1;
let section1;
let div9;
let form_1;
let div3;
let label0;
let t3;
let div2;
let div1;
let label1;
let input0;
let t4;
let span2;
let span0;
let t5;
let span1;
let t7;
let t8;
let t9;
let div5;
let label2;
let t11;
let div4;
let input1;
let t12;
let div7;
let label3;
let t14;
let div6;
let tags;
let t15;
let div8;
let button;
let current;
let mounted;
let dispose;
let if_block0 = /*currentProgress*/ ctx[0] > 0 && /*currentProgress*/ ctx[0] < 100 && create_if_block_1(ctx);
let if_block1 = /*fileName*/ ctx[1] !== "" && create_if_block(ctx);
tags = new Tags$1({
props: { addKeys: [9, 32] },
$$inline: true
});
tags.$on("tags", /*onTagChange*/ ctx[4]);
const block = {
c: function create() {
section0 = element("section");
div0 = element("div");
p = element("p");
p.textContent = "Upload";
t1 = space();
section1 = element("section");
div9 = element("div");
form_1 = element("form");
div3 = element("div");
label0 = element("label");
label0.textContent = "Image File";
t3 = space();
div2 = element("div");
div1 = element("div");
label1 = element("label");
input0 = element("input");
t4 = space();
span2 = element("span");
span0 = element("span");
t5 = space();
span1 = element("span");
span1.textContent = "Choose a file…";
t7 = space();
if (if_block0) if_block0.c();
t8 = space();
if (if_block1) if_block1.c();
t9 = space();
div5 = element("div");
label2 = element("label");
label2.textContent = "Source URL";
t11 = space();
div4 = element("div");
input1 = element("input");
t12 = space();
div7 = element("div");
label3 = element("label");
label3.textContent = "Tags";
t14 = space();
div6 = element("div");
create_component(tags.$$.fragment);
t15 = space();
div8 = element("div");
button = element("button");
button.textContent = "Submit";
attr_dev(p, "class", "title");
add_location(p, file$3, 42, 8, 1029);
attr_dev(div0, "class", "hero-body");
add_location(div0, file$3, 41, 4, 997);
attr_dev(section0, "class", "hero is-primary");
add_location(section0, file$3, 40, 0, 959);
attr_dev(label0, "for", "file");
attr_dev(label0, "class", "label");
add_location(label0, file$3, 50, 16, 1233);
attr_dev(input0, "id", "file");
attr_dev(input0, "class", "file-input");
attr_dev(input0, "type", "file");
attr_dev(input0, "name", "resume");
add_location(input0, file$3, 54, 28, 1440);
attr_dev(span0, "class", "file-icon");
add_location(span0, file$3, 62, 32, 1802);
attr_dev(span1, "class", "file-label");
add_location(span1, file$3, 63, 32, 1861);
attr_dev(span2, "class", "file-cta");
add_location(span2, file$3, 61, 28, 1746);
attr_dev(label1, "class", "file-label");
add_location(label1, file$3, 53, 24, 1385);
attr_dev(div1, "class", "file");
add_location(div1, file$3, 52, 20, 1342);
attr_dev(div2, "class", "control");
add_location(div2, file$3, 51, 16, 1300);
attr_dev(div3, "class", "field");
add_location(div3, file$3, 49, 12, 1197);
attr_dev(label2, "for", "source");
attr_dev(label2, "class", "label");
add_location(label2, file$3, 76, 16, 2364);
attr_dev(input1, "id", "source");
attr_dev(input1, "class", "input");
attr_dev(input1, "type", "url");
attr_dev(input1, "placeholder", "Source URL");
add_location(input1, file$3, 78, 20, 2475);
attr_dev(div4, "class", "control");
add_location(div4, file$3, 77, 16, 2433);
attr_dev(div5, "class", "field");
add_location(div5, file$3, 75, 12, 2328);
attr_dev(label3, "for", "tags");
attr_dev(label3, "class", "label");
add_location(label3, file$3, 88, 16, 2806);
attr_dev(div6, "class", "control");
attr_dev(div6, "id", "tags");
add_location(div6, file$3, 89, 16, 2867);
attr_dev(div7, "class", "field");
add_location(div7, file$3, 87, 12, 2770);
attr_dev(button, "type", "submit");
attr_dev(button, "class", "button is-primary");
add_location(button, file$3, 94, 16, 3059);
attr_dev(div8, "class", "control");
add_location(div8, file$3, 93, 12, 3021);
add_location(form_1, file$3, 48, 8, 1142);
attr_dev(div9, "class", "container");
add_location(div9, file$3, 47, 4, 1110);
attr_dev(section1, "class", "section");
add_location(section1, file$3, 46, 0, 1080);
},
l: function claim(nodes) {
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
},
m: function mount(target, anchor) {
insert_dev(target, section0, anchor);
append_dev(section0, div0);
append_dev(div0, p);
insert_dev(target, t1, anchor);
insert_dev(target, section1, anchor);
append_dev(section1, div9);
append_dev(div9, form_1);
append_dev(form_1, div3);
append_dev(div3, label0);
append_dev(div3, t3);
append_dev(div3, div2);
append_dev(div2, div1);
append_dev(div1, label1);
append_dev(label1, input0);
append_dev(label1, t4);
append_dev(label1, span2);
append_dev(span2, span0);
append_dev(span2, t5);
append_dev(span2, span1);
append_dev(div3, t7);
if (if_block0) if_block0.m(div3, null);
append_dev(div3, t8);
if (if_block1) if_block1.m(div3, null);
append_dev(form_1, t9);
append_dev(form_1, div5);
append_dev(div5, label2);
append_dev(div5, t11);
append_dev(div5, div4);
append_dev(div4, input1);
set_input_value(input1, /*form*/ ctx[2].source_url);
append_dev(form_1, t12);
append_dev(form_1, div7);
append_dev(div7, label3);
append_dev(div7, t14);
append_dev(div7, div6);
mount_component(tags, div6, null);
append_dev(form_1, t15);
append_dev(form_1, div8);
append_dev(div8, button);
current = true;
if (!mounted) {
dispose = [
listen_dev(input0, "change", /*onFileChange*/ ctx[3], false, false, false),
listen_dev(input1, "input", /*input1_input_handler*/ ctx[6]),
listen_dev(form_1, "submit", prevent_default(/*onSubmit*/ ctx[5]), false, true, false)
];
mounted = true;
}
},
p: function update(ctx, [dirty]) {
if (/*currentProgress*/ ctx[0] > 0 && /*currentProgress*/ ctx[0] < 100) {
if (if_block0) {
if_block0.p(ctx, dirty);
} else {
if_block0 = create_if_block_1(ctx);
if_block0.c();
if_block0.m(div3, t8);
}
} else if (if_block0) {
if_block0.d(1);
if_block0 = null;
}
if (/*fileName*/ ctx[1] !== "") {
if (if_block1) {
if_block1.p(ctx, dirty);
} else {
if_block1 = create_if_block(ctx);
if_block1.c();
if_block1.m(div3, null);
}
} else if (if_block1) {
if_block1.d(1);
if_block1 = null;
}
if (dirty & /*form*/ 4) {
set_input_value(input1, /*form*/ ctx[2].source_url);
}
},
i: function intro(local) {
if (current) return;
transition_in(tags.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(tags.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(section0);
if (detaching) detach_dev(t1);
if (detaching) detach_dev(section1);
if (if_block0) if_block0.d();
if (if_block1) if_block1.d();
destroy_component(tags);
mounted = false;
run_all(dispose);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_fragment$3.name,
type: "component",
source: "",
ctx
});
return block;
}
function instance$3($$self, $$props, $$invalidate) {
let { $$slots: slots = {}, $$scope } = $$props;
validate_slots("Upload", slots, []);
let currentProgress = 0;
let fileName = "";
let form = { blob_id: "", source_url: "", tags: [] };
const onProgress = e => {
var percentCompleted = Math.round(e.loaded * 100 / e.total);
$$invalidate(0, currentProgress = percentCompleted);
};
const onFileChange = async e => {
$$invalidate(1, fileName = "");
var file = e.target.files[0];
if (file) {
var response = await uploadBlob({ file, onProgress });
$$invalidate(2, form.blob_id = response.id, form);
$$invalidate(1, fileName = file.name);
}
};
const onTagChange = value => {
$$invalidate(2, form.tags = value.detail.tags, form);
};
const onSubmit = async () => {
const response = await postCreate(form);
navigate(`/post/${response.id}`);
};
const writable_props = [];
Object.keys($$props).forEach(key => {
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(`<Upload> was created with unknown prop '${key}'`);
});
function input1_input_handler() {
form.source_url = this.value;
$$invalidate(2, form);
}
$$self.$capture_state = () => ({
uploadBlob,
postCreate,
navigate,
Tags: Tags$1,
currentProgress,
fileName,
form,
onProgress,
onFileChange,
onTagChange,
onSubmit
});
$$self.$inject_state = $$props => {
if ("currentProgress" in $$props) $$invalidate(0, currentProgress = $$props.currentProgress);
if ("fileName" in $$props) $$invalidate(1, fileName = $$props.fileName);
if ("form" in $$props) $$invalidate(2, form = $$props.form);
};
if ($$props && "$$inject" in $$props) {
$$self.$inject_state($$props.$$inject);
}
return [
currentProgress,
fileName,
form,
onFileChange,
onTagChange,
onSubmit,
input1_input_handler
];
}
class Upload extends SvelteComponentDev {
constructor(options) {
super(options);
init(this, options, instance$3, create_fragment$3, safe_not_equal, {});
dispatch_dev("SvelteRegisterComponent", {
component: this,
tagName: "Upload",
options,
id: create_fragment$3.name
});
}
}
/* src/routes/Edit.svelte generated by Svelte v3.38.2 */
const file$2 = "src/routes/Edit.svelte";
// (49:20) <Link class="button is-primary" to="/post/{id}" >
function create_default_slot$1(ctx) {
let t;
const block = {
c: function create() {
t = text("Back");
},
m: function mount(target, anchor) {
insert_dev(target, t, anchor);
},
d: function destroy(detaching) {
if (detaching) detach_dev(t);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot$1.name,
type: "slot",
source: "(49:20) <Link class=\\\"button is-primary\\\" to=\\\"/post/{id}\\\" >",
ctx
});
return block;
}
function create_fragment$2(ctx) {
let section0;
let div0;
let p0;
let t0;
let t1;
let t2;
let div9;
let section1;
let div8;
let div6;
let p1;
let link;
let t3;
let form_1;
let div2;
let label0;
let t5;
let div1;
let input;
let t6;
let div4;
let label1;
let t8;
let div3;
let tags;
let t9;
let div5;
let button;
let t11;
let div7;
let figure;
let img;
let img_src_value;
let current;
let mounted;
let dispose;
link = new Link({
props: {
class: "button is-primary",
to: "/post/" + /*id*/ ctx[0],
$$slots: { default: [create_default_slot$1] },
$$scope: { ctx }
},
$$inline: true
});
tags = new Tags$1({
props: {
tags: /*form*/ ctx[2].tags,
addKeys: [9, 32]
},
$$inline: true
});
tags.$on("tags", /*onTagChange*/ ctx[3]);
const block = {
c: function create() {
section0 = element("section");
div0 = element("div");
p0 = element("p");
t0 = text("Edit Post: ");
t1 = text(/*id*/ ctx[0]);
t2 = space();
div9 = element("div");
section1 = element("section");
div8 = element("div");
div6 = element("div");
p1 = element("p");
create_component(link.$$.fragment);
t3 = space();
form_1 = element("form");
div2 = element("div");
label0 = element("label");
label0.textContent = "Source URL";
t5 = space();
div1 = element("div");
input = element("input");
t6 = space();
div4 = element("div");
label1 = element("label");
label1.textContent = "Tags";
t8 = space();
div3 = element("div");
create_component(tags.$$.fragment);
t9 = space();
div5 = element("div");
button = element("button");
button.textContent = "Submit";
t11 = space();
div7 = element("div");
figure = element("figure");
img = element("img");
attr_dev(p0, "class", "title");
add_location(p0, file$2, 39, 8, 894);
attr_dev(div0, "class", "hero-body");
add_location(div0, file$2, 38, 4, 862);
attr_dev(section0, "class", "hero is-primary");
add_location(section0, file$2, 37, 0, 824);
add_location(p1, file$2, 47, 16, 1104);
attr_dev(label0, "for", "source");
attr_dev(label0, "class", "label");
add_location(label0, file$2, 54, 24, 1378);
attr_dev(input, "id", "source");
attr_dev(input, "class", "input");
attr_dev(input, "type", "url");
attr_dev(input, "placeholder", "Source URL");
add_location(input, file$2, 56, 28, 1505);
attr_dev(div1, "class", "control");
add_location(div1, file$2, 55, 24, 1455);
attr_dev(div2, "class", "field");
add_location(div2, file$2, 53, 20, 1334);
attr_dev(label1, "for", "tags");
attr_dev(label1, "class", "label");
add_location(label1, file$2, 66, 24, 1916);
attr_dev(div3, "class", "control");
attr_dev(div3, "id", "tags");
add_location(div3, file$2, 67, 24, 1985);
attr_dev(div4, "class", "field");
add_location(div4, file$2, 65, 20, 1872);
attr_dev(button, "type", "submit");
attr_dev(button, "class", "button is-primary");
add_location(button, file$2, 76, 24, 2358);
attr_dev(div5, "class", "control");
add_location(div5, file$2, 75, 20, 2312);
add_location(form_1, file$2, 52, 16, 1271);
attr_dev(div6, "class", "column is-one-third box");
add_location(div6, file$2, 46, 12, 1050);
attr_dev(img, "alt", /*id*/ ctx[0]);
if (img.src !== (img_src_value = /*image_path*/ ctx[1])) attr_dev(img, "src", img_src_value);
add_location(img, file$2, 84, 20, 2638);
attr_dev(figure, "class", "image");
add_location(figure, file$2, 83, 16, 2595);
attr_dev(div7, "class", "column");
add_location(div7, file$2, 82, 12, 2558);
attr_dev(div8, "class", "columns");
add_location(div8, file$2, 45, 8, 1016);
attr_dev(section1, "class", "section");
add_location(section1, file$2, 44, 4, 982);
attr_dev(div9, "class", "container");
add_location(div9, file$2, 43, 0, 954);
},
l: function claim(nodes) {
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
},
m: function mount(target, anchor) {
insert_dev(target, section0, anchor);
append_dev(section0, div0);
append_dev(div0, p0);
append_dev(p0, t0);
append_dev(p0, t1);
insert_dev(target, t2, anchor);
insert_dev(target, div9, anchor);
append_dev(div9, section1);
append_dev(section1, div8);
append_dev(div8, div6);
append_dev(div6, p1);
mount_component(link, p1, null);
append_dev(div6, t3);
append_dev(div6, form_1);
append_dev(form_1, div2);
append_dev(div2, label0);
append_dev(div2, t5);
append_dev(div2, div1);
append_dev(div1, input);
set_input_value(input, /*form*/ ctx[2].source_url);
append_dev(form_1, t6);
append_dev(form_1, div4);
append_dev(div4, label1);
append_dev(div4, t8);
append_dev(div4, div3);
mount_component(tags, div3, null);
append_dev(form_1, t9);
append_dev(form_1, div5);
append_dev(div5, button);
append_dev(div8, t11);
append_dev(div8, div7);
append_dev(div7, figure);
append_dev(figure, img);
current = true;
if (!mounted) {
dispose = [
listen_dev(input, "input", /*input_input_handler*/ ctx[5]),
listen_dev(form_1, "submit", prevent_default(/*onSubmit*/ ctx[4]), false, true, false)
];
mounted = true;
}
},
p: function update(ctx, [dirty]) {
if (!current || dirty & /*id*/ 1) set_data_dev(t1, /*id*/ ctx[0]);
const link_changes = {};
if (dirty & /*id*/ 1) link_changes.to = "/post/" + /*id*/ ctx[0];
if (dirty & /*$$scope*/ 128) {
link_changes.$$scope = { dirty, ctx };
}
link.$set(link_changes);
if (dirty & /*form*/ 4) {
set_input_value(input, /*form*/ ctx[2].source_url);
}
const tags_changes = {};
if (dirty & /*form*/ 4) tags_changes.tags = /*form*/ ctx[2].tags;
tags.$set(tags_changes);
if (!current || dirty & /*id*/ 1) {
attr_dev(img, "alt", /*id*/ ctx[0]);
}
if (!current || dirty & /*image_path*/ 2 && img.src !== (img_src_value = /*image_path*/ ctx[1])) {
attr_dev(img, "src", img_src_value);
}
},
i: function intro(local) {
if (current) return;
transition_in(link.$$.fragment, local);
transition_in(tags.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(link.$$.fragment, local);
transition_out(tags.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
if (detaching) detach_dev(section0);
if (detaching) detach_dev(t2);
if (detaching) detach_dev(div9);
destroy_component(link);
destroy_component(tags);
mounted = false;
run_all(dispose);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_fragment$2.name,
type: "component",
source: "",
ctx
});
return block;
}
function instance$2($$self, $$props, $$invalidate) {
let { $$slots: slots = {}, $$scope } = $$props;
validate_slots("Edit", slots, []);
let { id } = $$props;
let image_path = "";
let form = { source_url: "", tags: [] };
const getData = async () => {
const data = await getPost({ id });
$$invalidate(2, form.source_url = data.source_url, form);
$$invalidate(2, form.tags = data.tags, form);
$$invalidate(1, image_path = data.image_path);
};
const onTagChange = value => {
$$invalidate(2, form.tags = value.detail.tags, form);
};
const onSubmit = async () => {
const response = await postUpdate(id, form);
navigate(`/post/${response.id}`);
};
onMount(() => {
getData();
});
const writable_props = ["id"];
Object.keys($$props).forEach(key => {
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(`<Edit> was created with unknown prop '${key}'`);
});
function input_input_handler() {
form.source_url = this.value;
$$invalidate(2, form);
}
$$self.$$set = $$props => {
if ("id" in $$props) $$invalidate(0, id = $$props.id);
};
$$self.$capture_state = () => ({
getPost,
postUpdate,
navigate,
Tags: Tags$1,
onMount,
Link,
id,
image_path,
form,
getData,
onTagChange,
onSubmit
});
$$self.$inject_state = $$props => {
if ("id" in $$props) $$invalidate(0, id = $$props.id);
if ("image_path" in $$props) $$invalidate(1, image_path = $$props.image_path);
if ("form" in $$props) $$invalidate(2, form = $$props.form);
};
if ($$props && "$$inject" in $$props) {
$$self.$inject_state($$props.$$inject);
}
return [id, image_path, form, onTagChange, onSubmit, input_input_handler];
}
class Edit extends SvelteComponentDev {
constructor(options) {
super(options);
init(this, options, instance$2, create_fragment$2, safe_not_equal, { id: 0 });
dispatch_dev("SvelteRegisterComponent", {
component: this,
tagName: "Edit",
options,
id: create_fragment$2.name
});
const { ctx } = this.$$;
const props = options.props || {};
if (/*id*/ ctx[0] === undefined && !("id" in props)) {
console.warn("<Edit> was created without expected prop 'id'");
}
}
get id() {
throw new Error("<Edit>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set id(value) {
throw new Error("<Edit>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
}
/* src/routes/Tags.svelte generated by Svelte v3.38.2 */
const file$1 = "src/routes/Tags.svelte";
function get_each_context(ctx, list, i) {
const child_ctx = ctx.slice();
child_ctx[2] = list[i];
return child_ctx;
}
// (33:16) {#each tags as tag}
function create_each_block(ctx) {
let tr;
let td0;
let t0_value = /*tag*/ ctx[2].name + "";
let t0;
let t1;
let td1;
let t2_value = /*tag*/ ctx[2].tagType + "";
let t2;
let t3;
const block = {
c: function create() {
tr = element("tr");
td0 = element("td");
t0 = text(t0_value);
t1 = space();
td1 = element("td");
t2 = text(t2_value);
t3 = space();
add_location(td0, file$1, 34, 24, 687);
add_location(td1, file$1, 35, 24, 731);
add_location(tr, file$1, 33, 20, 658);
},
m: function mount(target, anchor) {
insert_dev(target, tr, anchor);
append_dev(tr, td0);
append_dev(td0, t0);
append_dev(tr, t1);
append_dev(tr, td1);
append_dev(td1, t2);
append_dev(tr, t3);
},
p: function update(ctx, dirty) {
if (dirty & /*tags*/ 1 && t0_value !== (t0_value = /*tag*/ ctx[2].name + "")) set_data_dev(t0, t0_value);
if (dirty & /*tags*/ 1 && t2_value !== (t2_value = /*tag*/ ctx[2].tagType + "")) set_data_dev(t2, t2_value);
},
d: function destroy(detaching) {
if (detaching) detach_dev(tr);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_each_block.name,
type: "each",
source: "(33:16) {#each tags as tag}",
ctx
});
return block;
}
function create_fragment$1(ctx) {
let section0;
let div0;
let p;
let t1;
let section1;
let div1;
let table;
let thead;
let tr;
let th0;
let t3;
let th1;
let t5;
let tbody;
let each_value = /*tags*/ ctx[0];
validate_each_argument(each_value);
let each_blocks = [];
for (let i = 0; i < each_value.length; i += 1) {
each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i));
}
const block = {
c: function create() {
section0 = element("section");
div0 = element("div");
p = element("p");
p.textContent = "Tags";
t1 = space();
section1 = element("section");
div1 = element("div");
table = element("table");
thead = element("thead");
tr = element("tr");
th0 = element("th");
th0.textContent = "Tag";
t3 = space();
th1 = element("th");
th1.textContent = "Tag Type";
t5 = space();
tbody = element("tbody");
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].c();
}
attr_dev(p, "class", "title");
add_location(p, file$1, 18, 8, 281);
attr_dev(div0, "class", "hero-body");
add_location(div0, file$1, 17, 4, 249);
attr_dev(section0, "class", "hero is-primary");
add_location(section0, file$1, 16, 0, 211);
add_location(th0, file$1, 27, 20, 488);
add_location(th1, file$1, 28, 20, 521);
add_location(tr, file$1, 26, 16, 463);
add_location(thead, file$1, 25, 12, 439);
add_location(tbody, file$1, 31, 12, 594);
attr_dev(table, "class", "table is-fullwidth");
add_location(table, file$1, 24, 8, 392);
attr_dev(div1, "class", "container");
add_location(div1, file$1, 23, 4, 360);
attr_dev(section1, "class", "section");
add_location(section1, file$1, 22, 0, 330);
},
l: function claim(nodes) {
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
},
m: function mount(target, anchor) {
insert_dev(target, section0, anchor);
append_dev(section0, div0);
append_dev(div0, p);
insert_dev(target, t1, anchor);
insert_dev(target, section1, anchor);
append_dev(section1, div1);
append_dev(div1, table);
append_dev(table, thead);
append_dev(thead, tr);
append_dev(tr, th0);
append_dev(tr, t3);
append_dev(tr, th1);
append_dev(table, t5);
append_dev(table, tbody);
for (let i = 0; i < each_blocks.length; i += 1) {
each_blocks[i].m(tbody, null);
}
},
p: function update(ctx, [dirty]) {
if (dirty & /*tags*/ 1) {
each_value = /*tags*/ ctx[0];
validate_each_argument(each_value);
let i;
for (i = 0; i < each_value.length; i += 1) {
const child_ctx = get_each_context(ctx, each_value, i);
if (each_blocks[i]) {
each_blocks[i].p(child_ctx, dirty);
} else {
each_blocks[i] = create_each_block(child_ctx);
each_blocks[i].c();
each_blocks[i].m(tbody, null);
}
}
for (; i < each_blocks.length; i += 1) {
each_blocks[i].d(1);
}
each_blocks.length = each_value.length;
}
},
i: noop,
o: noop,
d: function destroy(detaching) {
if (detaching) detach_dev(section0);
if (detaching) detach_dev(t1);
if (detaching) detach_dev(section1);
destroy_each(each_blocks, detaching);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_fragment$1.name,
type: "component",
source: "",
ctx
});
return block;
}
function instance$1($$self, $$props, $$invalidate) {
let { $$slots: slots = {}, $$scope } = $$props;
validate_slots("Tags", slots, []);
let tags = [];
const getData = async () => {
const data = await getTags();
$$invalidate(0, tags = data);
};
const writable_props = [];
Object.keys($$props).forEach(key => {
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(`<Tags> was created with unknown prop '${key}'`);
});
$$self.$capture_state = () => ({ getTags, tags, getData });
$$self.$inject_state = $$props => {
if ("tags" in $$props) $$invalidate(0, tags = $$props.tags);
};
if ($$props && "$$inject" in $$props) {
$$self.$inject_state($$props.$$inject);
}
{
getData();
}
return [tags];
}
class Tags extends SvelteComponentDev {
constructor(options) {
super(options);
init(this, options, instance$1, create_fragment$1, safe_not_equal, {});
dispatch_dev("SvelteRegisterComponent", {
component: this,
tagName: "Tags",
options,
id: create_fragment$1.name
});
}
}
/* src/App.svelte generated by Svelte v3.38.2 */
const file = "src/App.svelte";
// (19:0) <Router {url}>
function create_default_slot(ctx) {
let navbar;
let t0;
let div;
let route0;
let t1;
let route1;
let t2;
let route2;
let t3;
let route3;
let t4;
let route4;
let t5;
let route5;
let t6;
let route6;
let t7;
let route7;
let current;
navbar = new Navbar({ $$inline: true });
route0 = new Route({
props: { path: "/", component: Home },
$$inline: true
});
route1 = new Route({
props: { path: "/posts", component: Posts },
$$inline: true
});
route2 = new Route({
props: { path: "/post/:id", component: Post },
$$inline: true
});
route3 = new Route({
props: { path: "/post/edit/:id", component: Edit },
$$inline: true
});
route4 = new Route({
props: { path: "/auth/login", component: Login },
$$inline: true
});
route5 = new Route({
props: { path: "/auth/logout", component: Logout },
$$inline: true
});
route6 = new Route({
props: { path: "/upload", component: Upload },
$$inline: true
});
route7 = new Route({
props: { path: "/tags", component: Tags },
$$inline: true
});
const block = {
c: function create() {
create_component(navbar.$$.fragment);
t0 = space();
div = element("div");
create_component(route0.$$.fragment);
t1 = space();
create_component(route1.$$.fragment);
t2 = space();
create_component(route2.$$.fragment);
t3 = space();
create_component(route3.$$.fragment);
t4 = space();
create_component(route4.$$.fragment);
t5 = space();
create_component(route5.$$.fragment);
t6 = space();
create_component(route6.$$.fragment);
t7 = space();
create_component(route7.$$.fragment);
add_location(div, file, 20, 1, 547);
},
m: function mount(target, anchor) {
mount_component(navbar, target, anchor);
insert_dev(target, t0, anchor);
insert_dev(target, div, anchor);
mount_component(route0, div, null);
append_dev(div, t1);
mount_component(route1, div, null);
append_dev(div, t2);
mount_component(route2, div, null);
append_dev(div, t3);
mount_component(route3, div, null);
append_dev(div, t4);
mount_component(route4, div, null);
append_dev(div, t5);
mount_component(route5, div, null);
append_dev(div, t6);
mount_component(route6, div, null);
append_dev(div, t7);
mount_component(route7, div, null);
current = true;
},
p: noop,
i: function intro(local) {
if (current) return;
transition_in(navbar.$$.fragment, local);
transition_in(route0.$$.fragment, local);
transition_in(route1.$$.fragment, local);
transition_in(route2.$$.fragment, local);
transition_in(route3.$$.fragment, local);
transition_in(route4.$$.fragment, local);
transition_in(route5.$$.fragment, local);
transition_in(route6.$$.fragment, local);
transition_in(route7.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(navbar.$$.fragment, local);
transition_out(route0.$$.fragment, local);
transition_out(route1.$$.fragment, local);
transition_out(route2.$$.fragment, local);
transition_out(route3.$$.fragment, local);
transition_out(route4.$$.fragment, local);
transition_out(route5.$$.fragment, local);
transition_out(route6.$$.fragment, local);
transition_out(route7.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
destroy_component(navbar, detaching);
if (detaching) detach_dev(t0);
if (detaching) detach_dev(div);
destroy_component(route0);
destroy_component(route1);
destroy_component(route2);
destroy_component(route3);
destroy_component(route4);
destroy_component(route5);
destroy_component(route6);
destroy_component(route7);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_default_slot.name,
type: "slot",
source: "(19:0) <Router {url}>",
ctx
});
return block;
}
function create_fragment(ctx) {
let router;
let current;
router = new Router({
props: {
url: /*url*/ ctx[0],
$$slots: { default: [create_default_slot] },
$$scope: { ctx }
},
$$inline: true
});
const block = {
c: function create() {
create_component(router.$$.fragment);
},
l: function claim(nodes) {
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
},
m: function mount(target, anchor) {
mount_component(router, target, anchor);
current = true;
},
p: function update(ctx, [dirty]) {
const router_changes = {};
if (dirty & /*url*/ 1) router_changes.url = /*url*/ ctx[0];
if (dirty & /*$$scope*/ 4) {
router_changes.$$scope = { dirty, ctx };
}
router.$set(router_changes);
},
i: function intro(local) {
if (current) return;
transition_in(router.$$.fragment, local);
current = true;
},
o: function outro(local) {
transition_out(router.$$.fragment, local);
current = false;
},
d: function destroy(detaching) {
destroy_component(router, detaching);
}
};
dispatch_dev("SvelteRegisterBlock", {
block,
id: create_fragment.name,
type: "component",
source: "",
ctx
});
return block;
}
function instance($$self, $$props, $$invalidate) {
let { $$slots: slots = {}, $$scope } = $$props;
validate_slots("App", slots, []);
let { url = "" } = $$props;
let baseURL = window.BASE_URL;
const writable_props = ["url"];
Object.keys($$props).forEach(key => {
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(`<App> was created with unknown prop '${key}'`);
});
$$self.$$set = $$props => {
if ("url" in $$props) $$invalidate(0, url = $$props.url);
};
$$self.$capture_state = () => ({
Router,
Link,
Route,
Navbar,
Home,
Posts,
Post,
Login,
Logout,
Upload,
Edit,
Tags,
url,
baseURL
});
$$self.$inject_state = $$props => {
if ("url" in $$props) $$invalidate(0, url = $$props.url);
if ("baseURL" in $$props) baseURL = $$props.baseURL;
};
if ($$props && "$$inject" in $$props) {
$$self.$inject_state($$props.$$inject);
}
return [url];
}
class App extends SvelteComponentDev {
constructor(options) {
super(options);
init(this, options, instance, create_fragment, safe_not_equal, { url: 0 });
dispatch_dev("SvelteRegisterComponent", {
component: this,
tagName: "App",
options,
id: create_fragment.name
});
}
get url() {
throw new Error("<App>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
set url(value) {
throw new Error("<App>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
}
}
const app = new App({
target: document.body,
hydrate: false,
});
return app;
}());
//# sourceMappingURL=bundle.js.map