.',\n list[i]\n );\n }\n }\n addAttr(el, name, JSON.stringify(value), list[i]);\n // #6887 firefox doesn't update muted state if set via attribute\n // even immediately after element creation\n if (!el.component &&\n name === 'muted' &&\n platformMustUseProp(el.tag, el.attrsMap.type, name)) {\n addProp(el, name, 'true', list[i]);\n }\n }\n }\n}\n\nfunction checkInFor (el) {\n var parent = el;\n while (parent) {\n if (parent.for !== undefined) {\n return true\n }\n parent = parent.parent;\n }\n return false\n}\n\nfunction parseModifiers (name) {\n var match = name.match(modifierRE);\n if (match) {\n var ret = {};\n match.forEach(function (m) { ret[m.slice(1)] = true; });\n return ret\n }\n}\n\nfunction makeAttrsMap (attrs) {\n var map = {};\n for (var i = 0, l = attrs.length; i < l; i++) {\n if (\n true &&\n map[attrs[i].name] && !isIE && !isEdge\n ) {\n warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);\n }\n map[attrs[i].name] = attrs[i].value;\n }\n return map\n}\n\n// for script (e.g. type=\"x/template\") or style, do not decode content\nfunction isTextTag (el) {\n return el.tag === 'script' || el.tag === 'style'\n}\n\nfunction isForbiddenTag (el) {\n return (\n el.tag === 'style' ||\n (el.tag === 'script' && (\n !el.attrsMap.type ||\n el.attrsMap.type === 'text/javascript'\n ))\n )\n}\n\nvar ieNSBug = /^xmlns:NS\\d+/;\nvar ieNSPrefix = /^NS\\d+:/;\n\n/* istanbul ignore next */\nfunction guardIESVGBug (attrs) {\n var res = [];\n for (var i = 0; i < attrs.length; i++) {\n var attr = attrs[i];\n if (!ieNSBug.test(attr.name)) {\n attr.name = attr.name.replace(ieNSPrefix, '');\n res.push(attr);\n }\n }\n return res\n}\n\nfunction checkForAliasModel (el, value) {\n var _el = el;\n while (_el) {\n if (_el.for && _el.alias === value) {\n warn$2(\n \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n \"You are binding v-model directly to a v-for iteration alias. \" +\n \"This will not be able to modify the v-for source array because \" +\n \"writing to the alias is like modifying a function local variable. \" +\n \"Consider using an array of objects and use v-model on an object property instead.\",\n el.rawAttrsMap['v-model']\n );\n }\n _el = _el.parent;\n }\n}\n\n/* */\n\nfunction preTransformNode (el, options) {\n if (el.tag === 'input') {\n var map = el.attrsMap;\n if (!map['v-model']) {\n return\n }\n\n var typeBinding;\n if (map[':type'] || map['v-bind:type']) {\n typeBinding = getBindingAttr(el, 'type');\n }\n if (!map.type && !typeBinding && map['v-bind']) {\n typeBinding = \"(\" + (map['v-bind']) + \").type\";\n }\n\n if (typeBinding) {\n var ifCondition = getAndRemoveAttr(el, 'v-if', true);\n var ifConditionExtra = ifCondition ? (\"&&(\" + ifCondition + \")\") : \"\";\n var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\n var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\n // 1. checkbox\n var branch0 = cloneASTElement(el);\n // process for on the main node\n processFor(branch0);\n addRawAttr(branch0, 'type', 'checkbox');\n processElement(branch0, options);\n branch0.processed = true; // prevent it from double-processed\n branch0.if = \"(\" + typeBinding + \")==='checkbox'\" + ifConditionExtra;\n addIfCondition(branch0, {\n exp: branch0.if,\n block: branch0\n });\n // 2. add radio else-if condition\n var branch1 = cloneASTElement(el);\n getAndRemoveAttr(branch1, 'v-for', true);\n addRawAttr(branch1, 'type', 'radio');\n processElement(branch1, options);\n addIfCondition(branch0, {\n exp: \"(\" + typeBinding + \")==='radio'\" + ifConditionExtra,\n block: branch1\n });\n // 3. other\n var branch2 = cloneASTElement(el);\n getAndRemoveAttr(branch2, 'v-for', true);\n addRawAttr(branch2, ':type', typeBinding);\n processElement(branch2, options);\n addIfCondition(branch0, {\n exp: ifCondition,\n block: branch2\n });\n\n if (hasElse) {\n branch0.else = true;\n } else if (elseIfCondition) {\n branch0.elseif = elseIfCondition;\n }\n\n return branch0\n }\n }\n}\n\nfunction cloneASTElement (el) {\n return createASTElement(el.tag, el.attrsList.slice(), el.parent)\n}\n\nvar model$1 = {\n preTransformNode: preTransformNode\n};\n\nvar modules$1 = [\n klass$1,\n style$1,\n model$1\n];\n\n/* */\n\nfunction text (el, dir) {\n if (dir.value) {\n addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"), dir);\n }\n}\n\n/* */\n\nfunction html (el, dir) {\n if (dir.value) {\n addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"), dir);\n }\n}\n\nvar directives$1 = {\n model: model,\n text: text,\n html: html\n};\n\n/* */\n\nvar baseOptions = {\n expectHTML: true,\n modules: modules$1,\n directives: directives$1,\n isPreTag: isPreTag,\n isUnaryTag: isUnaryTag,\n mustUseProp: mustUseProp,\n canBeLeftOpenTag: canBeLeftOpenTag,\n isReservedTag: isReservedTag,\n getTagNamespace: getTagNamespace,\n staticKeys: genStaticKeys(modules$1)\n};\n\n/* */\n\nvar isStaticKey;\nvar isPlatformReservedTag;\n\nvar genStaticKeysCached = cached(genStaticKeys$1);\n\n/**\n * Goal of the optimizer: walk the generated template AST tree\n * and detect sub-trees that are purely static, i.e. parts of\n * the DOM that never needs to change.\n *\n * Once we detect these sub-trees, we can:\n *\n * 1. Hoist them into constants, so that we no longer need to\n * create fresh nodes for them on each re-render;\n * 2. Completely skip them in the patching process.\n */\nfunction optimize (root, options) {\n if (!root) { return }\n isStaticKey = genStaticKeysCached(options.staticKeys || '');\n isPlatformReservedTag = options.isReservedTag || no;\n // first pass: mark all non-static nodes.\n markStatic$1(root);\n // second pass: mark static roots.\n markStaticRoots(root, false);\n}\n\nfunction genStaticKeys$1 (keys) {\n return makeMap(\n 'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\n (keys ? ',' + keys : '')\n )\n}\n\nfunction markStatic$1 (node) {\n node.static = isStatic(node);\n if (node.type === 1) {\n // do not make component slot content static. this avoids\n // 1. components not able to mutate slot nodes\n // 2. static slot content fails for hot-reloading\n if (\n !isPlatformReservedTag(node.tag) &&\n node.tag !== 'slot' &&\n node.attrsMap['inline-template'] == null\n ) {\n return\n }\n for (var i = 0, l = node.children.length; i < l; i++) {\n var child = node.children[i];\n markStatic$1(child);\n if (!child.static) {\n node.static = false;\n }\n }\n if (node.ifConditions) {\n for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {\n var block = node.ifConditions[i$1].block;\n markStatic$1(block);\n if (!block.static) {\n node.static = false;\n }\n }\n }\n }\n}\n\nfunction markStaticRoots (node, isInFor) {\n if (node.type === 1) {\n if (node.static || node.once) {\n node.staticInFor = isInFor;\n }\n // For a node to qualify as a static root, it should have children that\n // are not just static text. Otherwise the cost of hoisting out will\n // outweigh the benefits and it's better off to just always render it fresh.\n if (node.static && node.children.length && !(\n node.children.length === 1 &&\n node.children[0].type === 3\n )) {\n node.staticRoot = true;\n return\n } else {\n node.staticRoot = false;\n }\n if (node.children) {\n for (var i = 0, l = node.children.length; i < l; i++) {\n markStaticRoots(node.children[i], isInFor || !!node.for);\n }\n }\n if (node.ifConditions) {\n for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {\n markStaticRoots(node.ifConditions[i$1].block, isInFor);\n }\n }\n }\n}\n\nfunction isStatic (node) {\n if (node.type === 2) { // expression\n return false\n }\n if (node.type === 3) { // text\n return true\n }\n return !!(node.pre || (\n !node.hasBindings && // no dynamic bindings\n !node.if && !node.for && // not v-if or v-for or v-else\n !isBuiltInTag(node.tag) && // not a built-in\n isPlatformReservedTag(node.tag) && // not a component\n !isDirectChildOfTemplateFor(node) &&\n Object.keys(node).every(isStaticKey)\n ))\n}\n\nfunction isDirectChildOfTemplateFor (node) {\n while (node.parent) {\n node = node.parent;\n if (node.tag !== 'template') {\n return false\n }\n if (node.for) {\n return true\n }\n }\n return false\n}\n\n/* */\n\nvar fnExpRE = /^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function(?:\\s+[\\w$]+)?\\s*\\(/;\nvar fnInvokeRE = /\\([^)]*?\\);*$/;\nvar simplePathRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/;\n\n// KeyboardEvent.keyCode aliases\nvar keyCodes = {\n esc: 27,\n tab: 9,\n enter: 13,\n space: 32,\n up: 38,\n left: 37,\n right: 39,\n down: 40,\n 'delete': [8, 46]\n};\n\n// KeyboardEvent.key aliases\nvar keyNames = {\n // #7880: IE11 and Edge use `Esc` for Escape key name.\n esc: ['Esc', 'Escape'],\n tab: 'Tab',\n enter: 'Enter',\n // #9112: IE11 uses `Spacebar` for Space key name.\n space: [' ', 'Spacebar'],\n // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\n up: ['Up', 'ArrowUp'],\n left: ['Left', 'ArrowLeft'],\n right: ['Right', 'ArrowRight'],\n down: ['Down', 'ArrowDown'],\n // #9112: IE11 uses `Del` for Delete key name.\n 'delete': ['Backspace', 'Delete', 'Del']\n};\n\n// #4868: modifiers that prevent the execution of the listener\n// need to explicitly return null so that we can determine whether to remove\n// the listener for .once\nvar genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\n\nvar modifierCode = {\n stop: '$event.stopPropagation();',\n prevent: '$event.preventDefault();',\n self: genGuard(\"$event.target !== $event.currentTarget\"),\n ctrl: genGuard(\"!$event.ctrlKey\"),\n shift: genGuard(\"!$event.shiftKey\"),\n alt: genGuard(\"!$event.altKey\"),\n meta: genGuard(\"!$event.metaKey\"),\n left: genGuard(\"'button' in $event && $event.button !== 0\"),\n middle: genGuard(\"'button' in $event && $event.button !== 1\"),\n right: genGuard(\"'button' in $event && $event.button !== 2\")\n};\n\nfunction genHandlers (\n events,\n isNative\n) {\n var prefix = isNative ? 'nativeOn:' : 'on:';\n var staticHandlers = \"\";\n var dynamicHandlers = \"\";\n for (var name in events) {\n var handlerCode = genHandler(events[name]);\n if (events[name] && events[name].dynamic) {\n dynamicHandlers += name + \",\" + handlerCode + \",\";\n } else {\n staticHandlers += \"\\\"\" + name + \"\\\":\" + handlerCode + \",\";\n }\n }\n staticHandlers = \"{\" + (staticHandlers.slice(0, -1)) + \"}\";\n if (dynamicHandlers) {\n return prefix + \"_d(\" + staticHandlers + \",[\" + (dynamicHandlers.slice(0, -1)) + \"])\"\n } else {\n return prefix + staticHandlers\n }\n}\n\nfunction genHandler (handler) {\n if (!handler) {\n return 'function(){}'\n }\n\n if (Array.isArray(handler)) {\n return (\"[\" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + \"]\")\n }\n\n var isMethodPath = simplePathRE.test(handler.value);\n var isFunctionExpression = fnExpRE.test(handler.value);\n var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\n\n if (!handler.modifiers) {\n if (isMethodPath || isFunctionExpression) {\n return handler.value\n }\n return (\"function($event){\" + (isFunctionInvocation ? (\"return \" + (handler.value)) : handler.value) + \"}\") // inline statement\n } else {\n var code = '';\n var genModifierCode = '';\n var keys = [];\n for (var key in handler.modifiers) {\n if (modifierCode[key]) {\n genModifierCode += modifierCode[key];\n // left/right\n if (keyCodes[key]) {\n keys.push(key);\n }\n } else if (key === 'exact') {\n var modifiers = (handler.modifiers);\n genModifierCode += genGuard(\n ['ctrl', 'shift', 'alt', 'meta']\n .filter(function (keyModifier) { return !modifiers[keyModifier]; })\n .map(function (keyModifier) { return (\"$event.\" + keyModifier + \"Key\"); })\n .join('||')\n );\n } else {\n keys.push(key);\n }\n }\n if (keys.length) {\n code += genKeyFilter(keys);\n }\n // Make sure modifiers like prevent and stop get executed after key filtering\n if (genModifierCode) {\n code += genModifierCode;\n }\n var handlerCode = isMethodPath\n ? (\"return \" + (handler.value) + \"($event)\")\n : isFunctionExpression\n ? (\"return (\" + (handler.value) + \")($event)\")\n : isFunctionInvocation\n ? (\"return \" + (handler.value))\n : handler.value;\n return (\"function($event){\" + code + handlerCode + \"}\")\n }\n}\n\nfunction genKeyFilter (keys) {\n return (\n // make sure the key filters only apply to KeyboardEvents\n // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\n // key events that do not have keyCode property...\n \"if(!$event.type.indexOf('key')&&\" +\n (keys.map(genFilterCode).join('&&')) + \")return null;\"\n )\n}\n\nfunction genFilterCode (key) {\n var keyVal = parseInt(key, 10);\n if (keyVal) {\n return (\"$event.keyCode!==\" + keyVal)\n }\n var keyCode = keyCodes[key];\n var keyName = keyNames[key];\n return (\n \"_k($event.keyCode,\" +\n (JSON.stringify(key)) + \",\" +\n (JSON.stringify(keyCode)) + \",\" +\n \"$event.key,\" +\n \"\" + (JSON.stringify(keyName)) +\n \")\"\n )\n}\n\n/* */\n\nfunction on (el, dir) {\n if ( true && dir.modifiers) {\n warn(\"v-on without argument does not support modifiers.\");\n }\n el.wrapListeners = function (code) { return (\"_g(\" + code + \",\" + (dir.value) + \")\"); };\n}\n\n/* */\n\nfunction bind$1 (el, dir) {\n el.wrapData = function (code) {\n return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + \",\" + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + \")\")\n };\n}\n\n/* */\n\nvar baseDirectives = {\n on: on,\n bind: bind$1,\n cloak: noop\n};\n\n/* */\n\n\n\n\n\nvar CodegenState = function CodegenState (options) {\n this.options = options;\n this.warn = options.warn || baseWarn;\n this.transforms = pluckModuleFunction(options.modules, 'transformCode');\n this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\n this.directives = extend(extend({}, baseDirectives), options.directives);\n var isReservedTag = options.isReservedTag || no;\n this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n this.onceId = 0;\n this.staticRenderFns = [];\n this.pre = false;\n};\n\n\n\nfunction generate (\n ast,\n options\n) {\n var state = new CodegenState(options);\n var code = ast ? genElement(ast, state) : '_c(\"div\")';\n return {\n render: (\"with(this){return \" + code + \"}\"),\n staticRenderFns: state.staticRenderFns\n }\n}\n\nfunction genElement (el, state) {\n if (el.parent) {\n el.pre = el.pre || el.parent.pre;\n }\n\n if (el.staticRoot && !el.staticProcessed) {\n return genStatic(el, state)\n } else if (el.once && !el.onceProcessed) {\n return genOnce(el, state)\n } else if (el.for && !el.forProcessed) {\n return genFor(el, state)\n } else if (el.if && !el.ifProcessed) {\n return genIf(el, state)\n } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\n return genChildren(el, state) || 'void 0'\n } else if (el.tag === 'slot') {\n return genSlot(el, state)\n } else {\n // component or element\n var code;\n if (el.component) {\n code = genComponent(el.component, el, state);\n } else {\n var data;\n if (!el.plain || (el.pre && state.maybeComponent(el))) {\n data = genData$2(el, state);\n }\n\n var children = el.inlineTemplate ? null : genChildren(el, state, true);\n code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\n }\n // module transforms\n for (var i = 0; i < state.transforms.length; i++) {\n code = state.transforms[i](el, code);\n }\n return code\n }\n}\n\n// hoist static sub-trees out\nfunction genStatic (el, state) {\n el.staticProcessed = true;\n // Some elements (templates) need to behave differently inside of a v-pre\n // node. All pre nodes are static roots, so we can use this as a location to\n // wrap a state change and reset it upon exiting the pre node.\n var originalPreState = state.pre;\n if (el.pre) {\n state.pre = el.pre;\n }\n state.staticRenderFns.push((\"with(this){return \" + (genElement(el, state)) + \"}\"));\n state.pre = originalPreState;\n return (\"_m(\" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\n}\n\n// v-once\nfunction genOnce (el, state) {\n el.onceProcessed = true;\n if (el.if && !el.ifProcessed) {\n return genIf(el, state)\n } else if (el.staticInFor) {\n var key = '';\n var parent = el.parent;\n while (parent) {\n if (parent.for) {\n key = parent.key;\n break\n }\n parent = parent.parent;\n }\n if (!key) {\n true && state.warn(\n \"v-once can only be used inside v-for that is keyed. \",\n el.rawAttrsMap['v-once']\n );\n return genElement(el, state)\n }\n return (\"_o(\" + (genElement(el, state)) + \",\" + (state.onceId++) + \",\" + key + \")\")\n } else {\n return genStatic(el, state)\n }\n}\n\nfunction genIf (\n el,\n state,\n altGen,\n altEmpty\n) {\n el.ifProcessed = true; // avoid recursion\n return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)\n}\n\nfunction genIfConditions (\n conditions,\n state,\n altGen,\n altEmpty\n) {\n if (!conditions.length) {\n return altEmpty || '_e()'\n }\n\n var condition = conditions.shift();\n if (condition.exp) {\n return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions, state, altGen, altEmpty)))\n } else {\n return (\"\" + (genTernaryExp(condition.block)))\n }\n\n // v-if with v-once should generate code like (a)?_m(0):_m(1)\n function genTernaryExp (el) {\n return altGen\n ? altGen(el, state)\n : el.once\n ? genOnce(el, state)\n : genElement(el, state)\n }\n}\n\nfunction genFor (\n el,\n state,\n altGen,\n altHelper\n) {\n var exp = el.for;\n var alias = el.alias;\n var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\n var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\n\n if ( true &&\n state.maybeComponent(el) &&\n el.tag !== 'slot' &&\n el.tag !== 'template' &&\n !el.key\n ) {\n state.warn(\n \"<\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\n \"v-for should have explicit keys. \" +\n \"See https://vuejs.org/guide/list.html#key for more info.\",\n el.rawAttrsMap['v-for'],\n true /* tip */\n );\n }\n\n el.forProcessed = true; // avoid recursion\n return (altHelper || '_l') + \"((\" + exp + \"),\" +\n \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n \"return \" + ((altGen || genElement)(el, state)) +\n '})'\n}\n\nfunction genData$2 (el, state) {\n var data = '{';\n\n // directives first.\n // directives may mutate the el's other properties before they are generated.\n var dirs = genDirectives(el, state);\n if (dirs) { data += dirs + ','; }\n\n // key\n if (el.key) {\n data += \"key:\" + (el.key) + \",\";\n }\n // ref\n if (el.ref) {\n data += \"ref:\" + (el.ref) + \",\";\n }\n if (el.refInFor) {\n data += \"refInFor:true,\";\n }\n // pre\n if (el.pre) {\n data += \"pre:true,\";\n }\n // record original tag name for components using \"is\" attribute\n if (el.component) {\n data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\n }\n // module data generation functions\n for (var i = 0; i < state.dataGenFns.length; i++) {\n data += state.dataGenFns[i](el);\n }\n // attributes\n if (el.attrs) {\n data += \"attrs:\" + (genProps(el.attrs)) + \",\";\n }\n // DOM props\n if (el.props) {\n data += \"domProps:\" + (genProps(el.props)) + \",\";\n }\n // event handlers\n if (el.events) {\n data += (genHandlers(el.events, false)) + \",\";\n }\n if (el.nativeEvents) {\n data += (genHandlers(el.nativeEvents, true)) + \",\";\n }\n // slot target\n // only for non-scoped slots\n if (el.slotTarget && !el.slotScope) {\n data += \"slot:\" + (el.slotTarget) + \",\";\n }\n // scoped slots\n if (el.scopedSlots) {\n data += (genScopedSlots(el, el.scopedSlots, state)) + \",\";\n }\n // component v-model\n if (el.model) {\n data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \",expression:\" + (el.model.expression) + \"},\";\n }\n // inline-template\n if (el.inlineTemplate) {\n var inlineTemplate = genInlineTemplate(el, state);\n if (inlineTemplate) {\n data += inlineTemplate + \",\";\n }\n }\n data = data.replace(/,$/, '') + '}';\n // v-bind dynamic argument wrap\n // v-bind with dynamic arguments must be applied using the same v-bind object\n // merge helper so that class/style/mustUseProp attrs are handled correctly.\n if (el.dynamicAttrs) {\n data = \"_b(\" + data + \",\\\"\" + (el.tag) + \"\\\",\" + (genProps(el.dynamicAttrs)) + \")\";\n }\n // v-bind data wrap\n if (el.wrapData) {\n data = el.wrapData(data);\n }\n // v-on data wrap\n if (el.wrapListeners) {\n data = el.wrapListeners(data);\n }\n return data\n}\n\nfunction genDirectives (el, state) {\n var dirs = el.directives;\n if (!dirs) { return }\n var res = 'directives:[';\n var hasRuntime = false;\n var i, l, dir, needRuntime;\n for (i = 0, l = dirs.length; i < l; i++) {\n dir = dirs[i];\n needRuntime = true;\n var gen = state.directives[dir.name];\n if (gen) {\n // compile-time directive that manipulates AST.\n // returns true if it also needs a runtime counterpart.\n needRuntime = !!gen(el, dir, state.warn);\n }\n if (needRuntime) {\n hasRuntime = true;\n res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\" + (dir.isDynamicArg ? dir.arg : (\"\\\"\" + (dir.arg) + \"\\\"\"))) : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\n }\n }\n if (hasRuntime) {\n return res.slice(0, -1) + ']'\n }\n}\n\nfunction genInlineTemplate (el, state) {\n var ast = el.children[0];\n if ( true && (\n el.children.length !== 1 || ast.type !== 1\n )) {\n state.warn(\n 'Inline-template components must have exactly one child element.',\n { start: el.start }\n );\n }\n if (ast && ast.type === 1) {\n var inlineRenderFns = generate(ast, state.options);\n return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\n }\n}\n\nfunction genScopedSlots (\n el,\n slots,\n state\n) {\n // by default scoped slots are considered \"stable\", this allows child\n // components with only scoped slots to skip forced updates from parent.\n // but in some cases we have to bail-out of this optimization\n // for example if the slot contains dynamic names, has v-if or v-for on them...\n var needsForceUpdate = el.for || Object.keys(slots).some(function (key) {\n var slot = slots[key];\n return (\n slot.slotTargetDynamic ||\n slot.if ||\n slot.for ||\n containsSlotChild(slot) // is passing down slot from parent which may be dynamic\n )\n });\n\n // #9534: if a component with scoped slots is inside a conditional branch,\n // it's possible for the same component to be reused but with different\n // compiled slot content. To avoid that, we generate a unique key based on\n // the generated code of all the slot contents.\n var needsKey = !!el.if;\n\n // OR when it is inside another scoped slot or v-for (the reactivity may be\n // disconnected due to the intermediate scope variable)\n // #9438, #9506\n // TODO: this can be further optimized by properly analyzing in-scope bindings\n // and skip force updating ones that do not actually use scope variables.\n if (!needsForceUpdate) {\n var parent = el.parent;\n while (parent) {\n if (\n (parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||\n parent.for\n ) {\n needsForceUpdate = true;\n break\n }\n if (parent.if) {\n needsKey = true;\n }\n parent = parent.parent;\n }\n }\n\n var generatedSlots = Object.keys(slots)\n .map(function (key) { return genScopedSlot(slots[key], state); })\n .join(',');\n\n return (\"scopedSlots:_u([\" + generatedSlots + \"]\" + (needsForceUpdate ? \",null,true\" : \"\") + (!needsForceUpdate && needsKey ? (\",null,false,\" + (hash(generatedSlots))) : \"\") + \")\")\n}\n\nfunction hash(str) {\n var hash = 5381;\n var i = str.length;\n while(i) {\n hash = (hash * 33) ^ str.charCodeAt(--i);\n }\n return hash >>> 0\n}\n\nfunction containsSlotChild (el) {\n if (el.type === 1) {\n if (el.tag === 'slot') {\n return true\n }\n return el.children.some(containsSlotChild)\n }\n return false\n}\n\nfunction genScopedSlot (\n el,\n state\n) {\n var isLegacySyntax = el.attrsMap['slot-scope'];\n if (el.if && !el.ifProcessed && !isLegacySyntax) {\n return genIf(el, state, genScopedSlot, \"null\")\n }\n if (el.for && !el.forProcessed) {\n return genFor(el, state, genScopedSlot)\n }\n var slotScope = el.slotScope === emptySlotScopeToken\n ? \"\"\n : String(el.slotScope);\n var fn = \"function(\" + slotScope + \"){\" +\n \"return \" + (el.tag === 'template'\n ? el.if && isLegacySyntax\n ? (\"(\" + (el.if) + \")?\" + (genChildren(el, state) || 'undefined') + \":undefined\")\n : genChildren(el, state) || 'undefined'\n : genElement(el, state)) + \"}\";\n // reverse proxy v-slot without scope on this.$slots\n var reverseProxy = slotScope ? \"\" : \",proxy:true\";\n return (\"{key:\" + (el.slotTarget || \"\\\"default\\\"\") + \",fn:\" + fn + reverseProxy + \"}\")\n}\n\nfunction genChildren (\n el,\n state,\n checkSkip,\n altGenElement,\n altGenNode\n) {\n var children = el.children;\n if (children.length) {\n var el$1 = children[0];\n // optimize single v-for\n if (children.length === 1 &&\n el$1.for &&\n el$1.tag !== 'template' &&\n el$1.tag !== 'slot'\n ) {\n var normalizationType = checkSkip\n ? state.maybeComponent(el$1) ? \",1\" : \",0\"\n : \"\";\n return (\"\" + ((altGenElement || genElement)(el$1, state)) + normalizationType)\n }\n var normalizationType$1 = checkSkip\n ? getNormalizationType(children, state.maybeComponent)\n : 0;\n var gen = altGenNode || genNode;\n return (\"[\" + (children.map(function (c) { return gen(c, state); }).join(',')) + \"]\" + (normalizationType$1 ? (\",\" + normalizationType$1) : ''))\n }\n}\n\n// determine the normalization needed for the children array.\n// 0: no normalization needed\n// 1: simple normalization needed (possible 1-level deep nested array)\n// 2: full normalization needed\nfunction getNormalizationType (\n children,\n maybeComponent\n) {\n var res = 0;\n for (var i = 0; i < children.length; i++) {\n var el = children[i];\n if (el.type !== 1) {\n continue\n }\n if (needsNormalization(el) ||\n (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\n res = 2;\n break\n }\n if (maybeComponent(el) ||\n (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\n res = 1;\n }\n }\n return res\n}\n\nfunction needsNormalization (el) {\n return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\n}\n\nfunction genNode (node, state) {\n if (node.type === 1) {\n return genElement(node, state)\n } else if (node.type === 3 && node.isComment) {\n return genComment(node)\n } else {\n return genText(node)\n }\n}\n\nfunction genText (text) {\n return (\"_v(\" + (text.type === 2\n ? text.expression // no need for () because already wrapped in _s()\n : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\n}\n\nfunction genComment (comment) {\n return (\"_e(\" + (JSON.stringify(comment.text)) + \")\")\n}\n\nfunction genSlot (el, state) {\n var slotName = el.slotName || '\"default\"';\n var children = genChildren(el, state);\n var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\n var attrs = el.attrs || el.dynamicAttrs\n ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\n // slot props are camelized\n name: camelize(attr.name),\n value: attr.value,\n dynamic: attr.dynamic\n }); }))\n : null;\n var bind$$1 = el.attrsMap['v-bind'];\n if ((attrs || bind$$1) && !children) {\n res += \",null\";\n }\n if (attrs) {\n res += \",\" + attrs;\n }\n if (bind$$1) {\n res += (attrs ? '' : ',null') + \",\" + bind$$1;\n }\n return res + ')'\n}\n\n// componentName is el.component, take it as argument to shun flow's pessimistic refinement\nfunction genComponent (\n componentName,\n el,\n state\n) {\n var children = el.inlineTemplate ? null : genChildren(el, state, true);\n return (\"_c(\" + componentName + \",\" + (genData$2(el, state)) + (children ? (\",\" + children) : '') + \")\")\n}\n\nfunction genProps (props) {\n var staticProps = \"\";\n var dynamicProps = \"\";\n for (var i = 0; i < props.length; i++) {\n var prop = props[i];\n var value = transformSpecialNewlines(prop.value);\n if (prop.dynamic) {\n dynamicProps += (prop.name) + \",\" + value + \",\";\n } else {\n staticProps += \"\\\"\" + (prop.name) + \"\\\":\" + value + \",\";\n }\n }\n staticProps = \"{\" + (staticProps.slice(0, -1)) + \"}\";\n if (dynamicProps) {\n return (\"_d(\" + staticProps + \",[\" + (dynamicProps.slice(0, -1)) + \"])\")\n } else {\n return staticProps\n }\n}\n\n// #3895, #4268\nfunction transformSpecialNewlines (text) {\n return text\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029')\n}\n\n/* */\n\n\n\n// these keywords should not appear inside expressions, but operators like\n// typeof, instanceof and in are allowed\nvar prohibitedKeywordRE = new RegExp('\\\\b' + (\n 'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n 'super,throw,while,yield,delete,export,import,return,switch,default,' +\n 'extends,finally,continue,debugger,function,arguments'\n).split(',').join('\\\\b|\\\\b') + '\\\\b');\n\n// these unary operators should not be used as property/method names\nvar unaryOperatorsRE = new RegExp('\\\\b' + (\n 'delete,typeof,void'\n).split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') + '\\\\s*\\\\([^\\\\)]*\\\\)');\n\n// strip strings in expressions\nvar stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\n\n// detect problematic expressions in a template\nfunction detectErrors (ast, warn) {\n if (ast) {\n checkNode(ast, warn);\n }\n}\n\nfunction checkNode (node, warn) {\n if (node.type === 1) {\n for (var name in node.attrsMap) {\n if (dirRE.test(name)) {\n var value = node.attrsMap[name];\n if (value) {\n var range = node.rawAttrsMap[name];\n if (name === 'v-for') {\n checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), warn, range);\n } else if (name === 'v-slot' || name[0] === '#') {\n checkFunctionParameterExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n } else if (onRE.test(name)) {\n checkEvent(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n } else {\n checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n }\n }\n }\n }\n if (node.children) {\n for (var i = 0; i < node.children.length; i++) {\n checkNode(node.children[i], warn);\n }\n }\n } else if (node.type === 2) {\n checkExpression(node.expression, node.text, warn, node);\n }\n}\n\nfunction checkEvent (exp, text, warn, range) {\n var stripped = exp.replace(stripStringRE, '');\n var keywordMatch = stripped.match(unaryOperatorsRE);\n if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {\n warn(\n \"avoid using JavaScript unary operator as property name: \" +\n \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim()),\n range\n );\n }\n checkExpression(exp, text, warn, range);\n}\n\nfunction checkFor (node, text, warn, range) {\n checkExpression(node.for || '', text, warn, range);\n checkIdentifier(node.alias, 'v-for alias', text, warn, range);\n checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\n checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\n}\n\nfunction checkIdentifier (\n ident,\n type,\n text,\n warn,\n range\n) {\n if (typeof ident === 'string') {\n try {\n new Function((\"var \" + ident + \"=_\"));\n } catch (e) {\n warn((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())), range);\n }\n }\n}\n\nfunction checkExpression (exp, text, warn, range) {\n try {\n new Function((\"return \" + exp));\n } catch (e) {\n var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\n if (keywordMatch) {\n warn(\n \"avoid using JavaScript keyword as property name: \" +\n \"\\\"\" + (keywordMatch[0]) + \"\\\"\\n Raw expression: \" + (text.trim()),\n range\n );\n } else {\n warn(\n \"invalid expression: \" + (e.message) + \" in\\n\\n\" +\n \" \" + exp + \"\\n\\n\" +\n \" Raw expression: \" + (text.trim()) + \"\\n\",\n range\n );\n }\n }\n}\n\nfunction checkFunctionParameterExpression (exp, text, warn, range) {\n try {\n new Function(exp, '');\n } catch (e) {\n warn(\n \"invalid function parameter expression: \" + (e.message) + \" in\\n\\n\" +\n \" \" + exp + \"\\n\\n\" +\n \" Raw expression: \" + (text.trim()) + \"\\n\",\n range\n );\n }\n}\n\n/* */\n\nvar range = 2;\n\nfunction generateCodeFrame (\n source,\n start,\n end\n) {\n if ( start === void 0 ) start = 0;\n if ( end === void 0 ) end = source.length;\n\n var lines = source.split(/\\r?\\n/);\n var count = 0;\n var res = [];\n for (var i = 0; i < lines.length; i++) {\n count += lines[i].length + 1;\n if (count >= start) {\n for (var j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) { continue }\n res.push((\"\" + (j + 1) + (repeat$1(\" \", 3 - String(j + 1).length)) + \"| \" + (lines[j])));\n var lineLength = lines[j].length;\n if (j === i) {\n // push underline\n var pad = start - (count - lineLength) + 1;\n var length = end > count ? lineLength - pad : end - start;\n res.push(\" | \" + repeat$1(\" \", pad) + repeat$1(\"^\", length));\n } else if (j > i) {\n if (end > count) {\n var length$1 = Math.min(end - count, lineLength);\n res.push(\" | \" + repeat$1(\"^\", length$1));\n }\n count += lineLength + 1;\n }\n }\n break\n }\n }\n return res.join('\\n')\n}\n\nfunction repeat$1 (str, n) {\n var result = '';\n if (n > 0) {\n while (true) { // eslint-disable-line\n if (n & 1) { result += str; }\n n >>>= 1;\n if (n <= 0) { break }\n str += str;\n }\n }\n return result\n}\n\n/* */\n\n\n\nfunction createFunction (code, errors) {\n try {\n return new Function(code)\n } catch (err) {\n errors.push({ err: err, code: code });\n return noop\n }\n}\n\nfunction createCompileToFunctionFn (compile) {\n var cache = Object.create(null);\n\n return function compileToFunctions (\n template,\n options,\n vm\n ) {\n options = extend({}, options);\n var warn$$1 = options.warn || warn;\n delete options.warn;\n\n /* istanbul ignore if */\n if (true) {\n // detect possible CSP restriction\n try {\n new Function('return 1');\n } catch (e) {\n if (e.toString().match(/unsafe-eval|CSP/)) {\n warn$$1(\n 'It seems you are using the standalone build of Vue.js in an ' +\n 'environment with Content Security Policy that prohibits unsafe-eval. ' +\n 'The template compiler cannot work in this environment. Consider ' +\n 'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\n 'templates into render functions.'\n );\n }\n }\n }\n\n // check cache\n var key = options.delimiters\n ? String(options.delimiters) + template\n : template;\n if (cache[key]) {\n return cache[key]\n }\n\n // compile\n var compiled = compile(template, options);\n\n // check compilation errors/tips\n if (true) {\n if (compiled.errors && compiled.errors.length) {\n if (options.outputSourceRange) {\n compiled.errors.forEach(function (e) {\n warn$$1(\n \"Error compiling template:\\n\\n\" + (e.msg) + \"\\n\\n\" +\n generateCodeFrame(template, e.start, e.end),\n vm\n );\n });\n } else {\n warn$$1(\n \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\n compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\n vm\n );\n }\n }\n if (compiled.tips && compiled.tips.length) {\n if (options.outputSourceRange) {\n compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\n } else {\n compiled.tips.forEach(function (msg) { return tip(msg, vm); });\n }\n }\n }\n\n // turn code into functions\n var res = {};\n var fnGenErrors = [];\n res.render = createFunction(compiled.render, fnGenErrors);\n res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\n return createFunction(code, fnGenErrors)\n });\n\n // check function generation errors.\n // this should only happen if there is a bug in the compiler itself.\n // mostly for codegen development use\n /* istanbul ignore if */\n if (true) {\n if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\n warn$$1(\n \"Failed to generate render function:\\n\\n\" +\n fnGenErrors.map(function (ref) {\n var err = ref.err;\n var code = ref.code;\n\n return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\n }).join('\\n'),\n vm\n );\n }\n }\n\n return (cache[key] = res)\n }\n}\n\n/* */\n\nfunction createCompilerCreator (baseCompile) {\n return function createCompiler (baseOptions) {\n function compile (\n template,\n options\n ) {\n var finalOptions = Object.create(baseOptions);\n var errors = [];\n var tips = [];\n\n var warn = function (msg, range, tip) {\n (tip ? tips : errors).push(msg);\n };\n\n if (options) {\n if ( true && options.outputSourceRange) {\n // $flow-disable-line\n var leadingSpaceLength = template.match(/^\\s*/)[0].length;\n\n warn = function (msg, range, tip) {\n var data = { msg: msg };\n if (range) {\n if (range.start != null) {\n data.start = range.start + leadingSpaceLength;\n }\n if (range.end != null) {\n data.end = range.end + leadingSpaceLength;\n }\n }\n (tip ? tips : errors).push(data);\n };\n }\n // merge custom modules\n if (options.modules) {\n finalOptions.modules =\n (baseOptions.modules || []).concat(options.modules);\n }\n // merge custom directives\n if (options.directives) {\n finalOptions.directives = extend(\n Object.create(baseOptions.directives || null),\n options.directives\n );\n }\n // copy other options\n for (var key in options) {\n if (key !== 'modules' && key !== 'directives') {\n finalOptions[key] = options[key];\n }\n }\n }\n\n finalOptions.warn = warn;\n\n var compiled = baseCompile(template.trim(), finalOptions);\n if (true) {\n detectErrors(compiled.ast, warn);\n }\n compiled.errors = errors;\n compiled.tips = tips;\n return compiled\n }\n\n return {\n compile: compile,\n compileToFunctions: createCompileToFunctionFn(compile)\n }\n }\n}\n\n/* */\n\n// `createCompilerCreator` allows creating compilers that use alternative\n// parser/optimizer/codegen, e.g the SSR optimizing compiler.\n// Here we just export a default compiler using the default parts.\nvar createCompiler = createCompilerCreator(function baseCompile (\n template,\n options\n) {\n var ast = parse(template.trim(), options);\n if (options.optimize !== false) {\n optimize(ast, options);\n }\n var code = generate(ast, options);\n return {\n ast: ast,\n render: code.render,\n staticRenderFns: code.staticRenderFns\n }\n});\n\n/* */\n\nvar ref$1 = createCompiler(baseOptions);\nvar compile = ref$1.compile;\nvar compileToFunctions = ref$1.compileToFunctions;\n\n/* */\n\n// check whether current browser encodes a char inside attribute values\nvar div;\nfunction getShouldDecode (href) {\n div = div || document.createElement('div');\n div.innerHTML = href ? \"
\" : \"\";\n return div.innerHTML.indexOf('
') > 0\n}\n\n// #3663: IE encodes newlines inside attribute values while other browsers don't\nvar shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\n// #6828: chrome encodes content in a[href]\nvar shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\n\n/* */\n\nvar idToTemplate = cached(function (id) {\n var el = query(id);\n return el && el.innerHTML\n});\n\nvar mount = Vue.prototype.$mount;\nVue.prototype.$mount = function (\n el,\n hydrating\n) {\n el = el && query(el);\n\n /* istanbul ignore if */\n if (el === document.body || el === document.documentElement) {\n true && warn(\n \"Do not mount Vue to or - mount to normal elements instead.\"\n );\n return this\n }\n\n var options = this.$options;\n // resolve template/el and convert to render function\n if (!options.render) {\n var template = options.template;\n if (template) {\n if (typeof template === 'string') {\n if (template.charAt(0) === '#') {\n template = idToTemplate(template);\n /* istanbul ignore if */\n if ( true && !template) {\n warn(\n (\"Template element not found or is empty: \" + (options.template)),\n this\n );\n }\n }\n } else if (template.nodeType) {\n template = template.innerHTML;\n } else {\n if (true) {\n warn('invalid template option:' + template, this);\n }\n return this\n }\n } else if (el) {\n template = getOuterHTML(el);\n }\n if (template) {\n /* istanbul ignore if */\n if ( true && config.performance && mark) {\n mark('compile');\n }\n\n var ref = compileToFunctions(template, {\n outputSourceRange: \"development\" !== 'production',\n shouldDecodeNewlines: shouldDecodeNewlines,\n shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\n delimiters: options.delimiters,\n comments: options.comments\n }, this);\n var render = ref.render;\n var staticRenderFns = ref.staticRenderFns;\n options.render = render;\n options.staticRenderFns = staticRenderFns;\n\n /* istanbul ignore if */\n if ( true && config.performance && mark) {\n mark('compile end');\n measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\n }\n }\n }\n return mount.call(this, el, hydrating)\n};\n\n/**\n * Get outerHTML of elements, taking care\n * of SVG elements in IE as well.\n */\nfunction getOuterHTML (el) {\n if (el.outerHTML) {\n return el.outerHTML\n } else {\n var container = document.createElement('div');\n container.appendChild(el.cloneNode(true));\n return container.innerHTML\n }\n}\n\nVue.compile = compileToFunctions;\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Vue);\n\n\n//# sourceURL=webpack://Latsuj/./node_modules/vue/dist/vue.esm.js?");
/***/ }),
@@ -2279,16 +2506,12 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
\*****************************/
/*! unknown exports (runtime-defined) */
/*! runtime requirements: module */
-/*! CommonJS bailout: module.exports.add_class_to_elements_increase(...) prevents optimization as module.exports is passed as call context at 12:2-47 */
-/*! CommonJS bailout: module.exports.class_to_elements_increase(...) prevents optimization as module.exports is passed as call context at 15:2-43 */
-/*! CommonJS bailout: module.exports.remove_class_to_elements_increase(...) prevents optimization as module.exports is passed as call context at 18:2-50 */
-/*! CommonJS bailout: module.exports.class_to_elements_increase(...) prevents optimization as module.exports is passed as call context at 21:2-43 */
-/*! CommonJS bailout: module.exports.search_add_class_to_element(...) prevents optimization as module.exports is passed as call context at 25:3-45 */
-/*! CommonJS bailout: module.exports.add_class_to_element(...) prevents optimization as module.exports is passed as call context at 30:2-37 */
+/*! CommonJS bailout: module.exports.class_to_elements_increase(...) prevents optimization as module.exports is passed as call context at 11:2-43 */
+/*! CommonJS bailout: module.exports.add_class_to_element(...) prevents optimization as module.exports is passed as call context at 15:3-38 */
/*! CommonJS bailout: module.exports is used directly at 1:0-14 */
/***/ ((module) => {
-eval("module.exports = {\n\tclass_to_elements_increase(selector, newclass, min, increase, fc) {\n\t\tconst elements = [...document.querySelectorAll(selector)];\n\t\tconsole.log(elements);\n\t\telements.map((element, index) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tfc(element, newclass);\n\t\t\t}, min + index * increase);\n\t\t})\n\t},\n\tadd_class_to_elements(selector, newclass) {\n\t\tmodule.exports.add_class_to_elements_increase(selector, newclass, 0, 0);\n\t},\n\tadd_class_to_elements_increase(selector, newclass, min, increase) {\n\t\tmodule.exports.class_to_elements_increase(selector, newclass, min, increase, module.exports.add_class_to_element);\n\t},\n\tremove_class_to_elements(selector, newclass) {\n\t\tmodule.exports.remove_class_to_elements_increase(selector, newclass, 0, 0);\n\t},\n\tremove_class_to_elements_increase(selector, newclass, min, increase) {\n\t\tmodule.exports.class_to_elements_increase(selector, newclass, min, increase, module.exports.remove_class_to_element);\n\t},\n\tadd_class_to_element_delay(selector, newclass, delay) {\n\t\tsetTimeout(() => {\n\t\t\tmodule.exports.search_add_class_to_element(selector, newclass);\n\t\t}, delay);\n\t},\n\tsearch_add_class_to_element(selector, newclass) {\n\t\tconst element = document.querySelector(selector);\n\t\tmodule.exports.add_class_to_element(element, newclass);\n\t},\n\ttoggle_class_to_element(element, newclass) {\n\t\tif(element.classList.contains(newclass)) {\n\t\t\telement.classList.remove(newclass);\n\t\t} else {\n\t\t\telement.classList.add(newclass);\n\t\t}\n\t},\n\tadd_class_to_element(element, newclass) {\n\t\telement.classList.add(newclass);\n\t},\n\tremove_class_to_element(element, newclass) {\n\t\telement.classList.remove(newclass);\n\t},\n\tis_array_empty(array) {\n\t\treturn array === null || array.length === 0;\n\t}\n}\n\n\n//# sourceURL=webpack://Latsuj/./src/helper/utils.js?");
+eval("module.exports = {\n\tclass_to_elements_increase(ref_elements, newclass, min, increase, fc) {\n\t\tconst elements = [...ref_elements];\n\t\telements.map((element, index) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tfc(element, newclass);\n\t\t\t}, min + index * increase);\n\t\t})\n\t},\n\tadd_class_to_elements_increase(ref_elements, newclass, min, increase) {\n\t\tmodule.exports.class_to_elements_increase(ref_elements, newclass, min, increase, module.exports.add_class_to_element);\n\t},\n\tadd_class_to_element_delay(element, newclass, delay) {\n\t\tsetTimeout(() => {\n\t\t\tmodule.exports.add_class_to_element(element, newclass);\n\t\t}, delay);\n\t},\n\ttoggle_class_to_element(element, newclass) {\n\t\tif(element.classList.contains(newclass)) {\n\t\t\telement.classList.remove(newclass);\n\t\t} else {\n\t\t\telement.classList.add(newclass);\n\t\t}\n\t},\n\tadd_class_to_element(element, newclass) {\n\t\telement.classList.add(newclass);\n\t},\n\tis_array_empty(array) {\n\t\treturn array === null || array.length === 0;\n\t},\n\tabsolute_path_from_relative(path) {\n\t\treturn {\"LESSOPEN\":\"| /usr/bin/lesspipe %s\",\"npm_config_cache_lock_stale\":\"60000\",\"npm_config_ham_it_up\":\"\",\"npm_package_dependencies_connect_history_api_fallback\":\"^1.6.0\",\"npm_package_devDependencies_babel_core\":\"*\",\"npm_package_devDependencies_html\":\"*\",\"npm_config_legacy_bundling\":\"\",\"npm_config_sign_git_tag\":\"\",\"USER\":\"rumarocket\",\"LC_TIME\":\"en_DK.UTF-8\",\"npm_package_devDependencies_mongo_seeding\":\"^3.4.1\",\"npm_package_devDependencies_vue_loader\":\"^15.9.3\",\"npm_package_devDependencies_webpack_cli\":\"^4.1.0\",\"npm_config_user_agent\":\"npm/6.11.3 node/v12.11.0 linux x64\",\"npm_config_always_auth\":\"\",\"npm_package_bugs_url\":\"https://github.com/Latsuj/Lj2/issues\",\"npm_package_devDependencies_eslint_webpack_plugin\":\"^2.1.0\",\"npm_package_devDependencies_less\":\"^3.12.2\",\"npm_config_bin_links\":\"true\",\"npm_config_key\":\"\",\"SSH_AGENT_PID\":\"12249\",\"XDG_SESSION_TYPE\":\"x11\",\"npm_package_devDependencies_file_loader\":\"^6.1.1\",\"npm_package_devDependencies_postcss_preset_env\":\"^6.7.0\",\"npm_config_description\":\"true\",\"npm_config_fetch_retries\":\"2\",\"npm_config_heading\":\"npm\",\"npm_config_init_version\":\"1.0.0\",\"npm_config_allow_same_version\":\"\",\"npm_config_if_present\":\"\",\"npm_config_user\":\"\",\"npm_node_execpath\":\"/usr/local/bin/node\",\"SHLVL\":\"1\",\"npm_package_devDependencies_babel_preset_es2015\":\"*\",\"npm_package_devDependencies_chai_http\":\"^4.3.0\",\"npm_package_devDependencies_vue_router\":\"^3.4.7\",\"npm_config_prefer_online\":\"\",\"npm_config_noproxy\":\"\",\"HOME\":\"/home/rumarocket\",\"OLDPWD\":\"/home/rumarocket/eclipse-workspace\",\"npm_package_devDependencies_babel_preset_es2016\":\"*\",\"npm_config_force\":\"\",\"DESKTOP_SESSION\":\"ubuntu\",\"npm_config_only\":\"\",\"npm_config_read_only\":\"\",\"npm_package_engines_node\":\">=12.0\",\"npm_package_devDependencies_chai\":\"^4.2.0\",\"npm_config_cache_min\":\"10\",\"npm_config_init_license\":\"ISC\",\"GNOME_SHELL_SESSION_MODE\":\"ubuntu\",\"GTK_MODULES\":\"gail:atk-bridge\",\"npm_config_editor\":\"vi\",\"npm_config_rollback\":\"true\",\"npm_config_tag_version_prefix\":\"v\",\"LC_MONETARY\":\"en_DK.UTF-8\",\"MANAGERPID\":\"10564\",\"npm_package_devDependencies_stylelint_config_standard\":\"^20.0.0\",\"npm_config_cache_max\":\"Infinity\",\"npm_config_userconfig\":\"/home/rumarocket/.npmrc\",\"npm_config_timing\":\"\",\"DBUS_SESSION_BUS_ADDRESS\":\"unix:path=/run/user/1000/bus\",\"npm_package_dependencies_dotenv\":\"^8.2.0\",\"npm_package_devDependencies_html_minifier\":\"^4.0.0\",\"npm_package_devDependencies_nyc\":\"^15.1.0\",\"npm_config_tmp\":\"/tmp\",\"npm_config_engine_strict\":\"\",\"npm_config_init_author_name\":\"\",\"npm_config_init_author_url\":\"\",\"npm_config_preid\":\"\",\"COLORTERM\":\"truecolor\",\"npm_package_description\":\"My Portfolio\",\"npm_package_devDependencies_babel_loader\":\"^8.1.0\",\"npm_package_devDependencies_eslint_config_es2015\":\"*\",\"npm_config_depth\":\"Infinity\",\"npm_config_package_lock_only\":\"\",\"npm_config_save_dev\":\"\",\"npm_config_usage\":\"\",\"npm_package_scripts_watch_server\":\"nodemon --exec 'npm run server'\",\"npm_package_homepage\":\"https://github.com/Latsuj/Lj2#readme\",\"npm_package_devDependencies__babel_preset_env\":\"^7.12.1\",\"npm_package_readmeFilename\":\"readme.md\",\"npm_config_metrics_registry\":\"https://registry.npmjs.org/\",\"npm_config_package_lock\":\"true\",\"npm_config_progress\":\"true\",\"npm_config_cafile\":\"\",\"npm_config_otp\":\"\",\"npm_config_https_proxy\":\"\",\"npm_config_save_prod\":\"\",\"MANDATORY_PATH\":\"/usr/share/gconf/ubuntu.mandatory.path\",\"QT_QPA_PLATFORMTHEME\":\"appmenu-qt5\",\"IM_CONFIG_PHASE\":\"1\",\"npm_package_scripts_dev\":\"webpack --mode development --config config/dev.config.js\",\"npm_package_devDependencies_prettier\":\"^2.1.2\",\"npm_config_audit\":\"true\",\"npm_config_sso_type\":\"oauth\",\"npm_config_cidr\":\"\",\"npm_config_onload_script\":\"\",\"LOGNAME\":\"rumarocket\",\"npm_package_devDependencies_vue_template_compiler\":\"^2.6.12\",\"npm_config_rebuild_bundle\":\"true\",\"npm_config_shell\":\"/bin/bash\",\"npm_config_save_bundle\":\"\",\"JOURNAL_STREAM\":\"9:47226\",\"_\":\"/usr/local/bin/npm\",\"npm_package_dependencies_express\":\"^4.17.1\",\"npm_config_prefix\":\"/usr/local\",\"npm_config_dry_run\":\"\",\"XDG_SESSION_CLASS\":\"user\",\"DEFAULTS_PATH\":\"/usr/share/gconf/ubuntu.default.path\",\"npm_package_devDependencies_vue\":\"^2.6.12\",\"npm_config_scope\":\"\",\"npm_config_cache_lock_wait\":\"10000\",\"npm_config_registry\":\"https://registry.npmjs.org/\",\"npm_config_browser\":\"\",\"npm_config_ignore_prepublish\":\"\",\"npm_config_save_optional\":\"\",\"npm_config_searchopts\":\"\",\"npm_config_versions\":\"\",\"USERNAME\":\"rumarocket\",\"TERM\":\"xterm-256color\",\"npm_package_devDependencies__babel_core\":\"^7.12.3\",\"npm_package_devDependencies_stylelint\":\"^13.7.2\",\"npm_config_cache\":\"/home/rumarocket/.npm\",\"npm_config_proxy\":\"\",\"npm_config_send_metrics\":\"\",\"GNOME_DESKTOP_SESSION_ID\":\"this-is-deprecated\",\"npm_package_scripts_start\":\"node -e 'require(\\\"./server/index\\\").start()'\",\"npm_package_dependencies_mongodb\":\"^3.6.2\",\"npm_package_devDependencies_html_webpack_plugin\":\"^4.5.0\",\"npm_config_global_style\":\"\",\"npm_config_ignore_scripts\":\"\",\"npm_config_version\":\"\",\"GTK2_MODULES\":\"overlay-scrollbar\",\"WINDOWPATH\":\"2\",\"npm_package_dependencies_axios\":\"^0.21.0\",\"npm_package_devDependencies_postcss_loader\":\"^4.0.4\",\"npm_config_viewer\":\"man\",\"npm_config_node_gyp\":\"/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js\",\"npm_config_local_address\":\"\",\"PATH\":\"/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/home/rumarocket/bin:/home/rumarocket/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/mssql-tools/bin:~/azuredatastudio-linux-x64\",\"SESSION_MANAGER\":\"local/rumarocket:@/tmp/.ICE-unix/12282,unix/rumarocket:/tmp/.ICE-unix/12282\",\"INVOCATION_ID\":\"8b7d25de5e5a4f8d8b15c309bf141400\",\"PAPERSIZE\":\"a4\",\"NODE\":\"/usr/local/bin/node\",\"npm_package_name\":\"Latsuj\",\"npm_package_repository_type\":\"git\",\"npm_config_audit_level\":\"low\",\"npm_config_prefer_offline\":\"\",\"XDG_MENU_PREFIX\":\"gnome-\",\"LC_ADDRESS\":\"en_DK.UTF-8\",\"GNOME_TERMINAL_SCREEN\":\"/org/gnome/Terminal/screen/6e5745d1_b2a9_4543_a8be_234bafb75407\",\"XDG_RUNTIME_DIR\":\"/run/user/1000\",\"npm_config_color\":\"true\",\"npm_config_sign_git_commit\":\"\",\"DISPLAY\":\":1\",\"npm_package_devDependencies_webpack_merge\":\"^5.2.0\",\"npm_config_fetch_retry_mintimeout\":\"10000\",\"npm_config_maxsockets\":\"50\",\"npm_config_sso_poll_frequency\":\"500\",\"npm_config_offline\":\"\",\"LANG\":\"en_US.UTF-8\",\"XDG_CURRENT_DESKTOP\":\"ubuntu:GNOME\",\"LC_TELEPHONE\":\"en_DK.UTF-8\",\"npm_package_dependencies_winston\":\"^3.3.3\",\"npm_package_devDependencies_eslint\":\"^7.12.0\",\"npm_package_devDependencies_webpack\":\"^5.2.0\",\"npm_config_umask\":\"0002\",\"XMODIFIERS\":\"@im=ibus\",\"XDG_SESSION_DESKTOP\":\"ubuntu\",\"XAUTHORITY\":\"/run/user/1000/gdm/Xauthority\",\"LS_COLORS\":\"rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:\",\"GNOME_TERMINAL_SERVICE\":\":1.102\",\"npm_package_main\":\"server/index.js\",\"npm_package_devDependencies_copy_webpack_plugin\":\"^6.2.1\",\"npm_package_devDependencies_html_loader\":\"^1.3.2\",\"npm_package_gitHead\":\"01a7d3b5eafd3465a4c0251fbb253676a200eb56\",\"npm_config_fetch_retry_maxtimeout\":\"60000\",\"npm_config_loglevel\":\"notice\",\"npm_config_logs_max\":\"10\",\"npm_config_message\":\"%s\",\"npm_lifecycle_script\":\"webpack --mode development --config config/dev.config.js\",\"SSH_AUTH_SOCK\":\"/run/user/1000/keyring/ssh\",\"npm_package_scripts_test\":\"nyc --reporter=html --reporter=text ava tests/**/*.js ava tests/**/**/*.js --verbose --timeout=1m\",\"npm_package_devDependencies_lqip_loader\":\"^2.2.1\",\"npm_config_ca\":\"\",\"npm_config_cert\":\"\",\"npm_config_global\":\"\",\"npm_config_link\":\"\",\"SHELL\":\"/bin/bash\",\"LC_NAME\":\"en_DK.UTF-8\",\"npm_package_version\":\"1.0.0\",\"npm_package_repository_url\":\"git+https://github.com/Latsuj/Lj2.git\",\"npm_package_devDependencies_less_loader\":\"^7.0.2\",\"npm_config_save\":\"true\",\"npm_config_unicode\":\"true\",\"npm_config_access\":\"\",\"npm_config_also\":\"\",\"npm_lifecycle_event\":\"dev\",\"QT_ACCESSIBILITY\":\"1\",\"GDMSESSION\":\"ubuntu\",\"npm_package_scripts_build\":\"webpack --mode production --config config/prod.config.js\",\"npm_package_devDependencies_coveralls\":\"^3.1.0\",\"npm_config_argv\":\"{\\\"remain\\\":[],\\\"cooked\\\":[\\\"run\\\",\\\"dev\\\"],\\\"original\\\":[\\\"run\\\",\\\"dev\\\"]}\",\"npm_config_searchlimit\":\"20\",\"npm_config_unsafe_perm\":\"true\",\"npm_config_update_notifier\":\"true\",\"npm_config_before\":\"\",\"npm_config_long\":\"\",\"npm_config_production\":\"\",\"LESSCLOSE\":\"/usr/bin/lesspipe %s %s\",\"npm_package_author\":\"\",\"npm_package_dependencies_nodemon\":\"^2.0.6\",\"npm_config_auth_type\":\"legacy\",\"npm_config_node_version\":\"12.11.0\",\"npm_config_tag\":\"latest\",\"LC_MEASUREMENT\":\"en_DK.UTF-8\",\"npm_config_git_tag_version\":\"true\",\"npm_config_commit_hooks\":\"true\",\"npm_config_shrinkwrap\":\"true\",\"npm_config_script_shell\":\"\",\"GPG_AGENT_INFO\":\"/run/user/1000/gnupg/S.gpg-agent:0:1\",\"LC_IDENTIFICATION\":\"en_DK.UTF-8\",\"npm_package_license\":\"MIT\",\"npm_package_dependencies_mongoose\":\"^5.10.10\",\"npm_config_fetch_retry_factor\":\"10\",\"npm_config_strict_ssl\":\"true\",\"npm_config_save_exact\":\"\",\"QT_IM_MODULE\":\"ibus\",\"npm_package_scripts_coverage\":\"nyc report --reporter=text-lcov | coveralls\",\"npm_package_devDependencies_ava\":\"^3.13.0\",\"npm_package_devDependencies_style_loader\":\"^2.0.0\",\"npm_config_globalconfig\":\"/usr/local/etc/npmrc\",\"npm_config_init_module\":\"/home/rumarocket/.npm-init.js\",\"npm_config_dev\":\"\",\"npm_config_parseable\":\"\",\"PWD\":\"/home/rumarocket/eclipse-workspace/PORTFOLIO-master\",\"npm_config_globalignorefile\":\"/usr/local/etc/npmignore\",\"npm_execpath\":\"/usr/local/lib/node_modules/npm/bin/npm-cli.js\",\"XDG_CONFIG_DIRS\":\"/etc/xdg/xdg-ubuntu:/etc/xdg\",\"XDG_DATA_DIRS\":\"/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop:/var/lib/snapd/desktop\",\"npm_package_scripts_seed\":\"node -e 'require(\\\"./seeding/seeder.js\\\").seed()'\",\"npm_package_devDependencies_css_loader\":\"^5.0.0\",\"npm_package_devDependencies_image_webpack_loader\":\"^7.0.1\",\"npm_config_cache_lock_retries\":\"10\",\"npm_config_searchstaleness\":\"900\",\"LC_NUMERIC\":\"en_DK.UTF-8\",\"npm_package_scripts_watch\":\"nodemon --watch \\\"src/\\\" -x \\\"npm run dev\\\"\",\"npm_package_devDependencies_eslint_plugin_vue\":\"^7.1.0\",\"npm_package_devDependencies_html_minifier_loader\":\"*\",\"npm_package_devDependencies_postcss\":\"^8.1.4\",\"npm_config_save_prefix\":\"^\",\"npm_config_scripts_prepend_node_path\":\"warn-only\",\"npm_config_node_options\":\"\",\"LC_PAPER\":\"en_DK.UTF-8\",\"npm_package_devDependencies_babel_eslint\":\"^10.1.0\",\"npm_package_devDependencies_stylelint_webpack_plugin\":\"^2.1.1\",\"npm_config_group\":\"1000\",\"npm_config_init_author_email\":\"\",\"npm_config_searchexclude\":\"\",\"VTE_VERSION\":\"6003\",\"NODE_ENV\":\"development\",\"npm_package_dependencies_mongo_uri_builder\":\"^3.2.2\",\"npm_config_git\":\"git\",\"npm_config_optional\":\"true\",\"INIT_CWD\":\"/home/rumarocket/eclipse-workspace/PORTFOLIO-master\",\"npm_config_json\":\"\",\"API_NAME\":\"JUSTALK-SERVER\",\"HOST\":\"localhost\",\"PORT\":\"8080\",\"PROTOCOL\":\"http\",\"DB_NAME\":\"justalk\",\"DB_URI_DATA\":\"mongodb://localhost:27017/\",\"DB_URI_LOG\":\"mongodb://localhost:27017/logs\",\"DB_USER_DATA\":\"\",\"DB_PASS_DATA\":\"\",\"DB_HOST_LOG\":\"localhost\",\"DB_PORT_LOG\":\"27017\",\"DB_NAME_LOG\":\"logs\",\"DB_USER_LOG\":\"\",\"DB_PASS_LOG\":\"\"}.PROTOCOL + '://' + {\"LESSOPEN\":\"| /usr/bin/lesspipe %s\",\"npm_config_cache_lock_stale\":\"60000\",\"npm_config_ham_it_up\":\"\",\"npm_package_dependencies_connect_history_api_fallback\":\"^1.6.0\",\"npm_package_devDependencies_babel_core\":\"*\",\"npm_package_devDependencies_html\":\"*\",\"npm_config_legacy_bundling\":\"\",\"npm_config_sign_git_tag\":\"\",\"USER\":\"rumarocket\",\"LC_TIME\":\"en_DK.UTF-8\",\"npm_package_devDependencies_mongo_seeding\":\"^3.4.1\",\"npm_package_devDependencies_vue_loader\":\"^15.9.3\",\"npm_package_devDependencies_webpack_cli\":\"^4.1.0\",\"npm_config_user_agent\":\"npm/6.11.3 node/v12.11.0 linux x64\",\"npm_config_always_auth\":\"\",\"npm_package_bugs_url\":\"https://github.com/Latsuj/Lj2/issues\",\"npm_package_devDependencies_eslint_webpack_plugin\":\"^2.1.0\",\"npm_package_devDependencies_less\":\"^3.12.2\",\"npm_config_bin_links\":\"true\",\"npm_config_key\":\"\",\"SSH_AGENT_PID\":\"12249\",\"XDG_SESSION_TYPE\":\"x11\",\"npm_package_devDependencies_file_loader\":\"^6.1.1\",\"npm_package_devDependencies_postcss_preset_env\":\"^6.7.0\",\"npm_config_description\":\"true\",\"npm_config_fetch_retries\":\"2\",\"npm_config_heading\":\"npm\",\"npm_config_init_version\":\"1.0.0\",\"npm_config_allow_same_version\":\"\",\"npm_config_if_present\":\"\",\"npm_config_user\":\"\",\"npm_node_execpath\":\"/usr/local/bin/node\",\"SHLVL\":\"1\",\"npm_package_devDependencies_babel_preset_es2015\":\"*\",\"npm_package_devDependencies_chai_http\":\"^4.3.0\",\"npm_package_devDependencies_vue_router\":\"^3.4.7\",\"npm_config_prefer_online\":\"\",\"npm_config_noproxy\":\"\",\"HOME\":\"/home/rumarocket\",\"OLDPWD\":\"/home/rumarocket/eclipse-workspace\",\"npm_package_devDependencies_babel_preset_es2016\":\"*\",\"npm_config_force\":\"\",\"DESKTOP_SESSION\":\"ubuntu\",\"npm_config_only\":\"\",\"npm_config_read_only\":\"\",\"npm_package_engines_node\":\">=12.0\",\"npm_package_devDependencies_chai\":\"^4.2.0\",\"npm_config_cache_min\":\"10\",\"npm_config_init_license\":\"ISC\",\"GNOME_SHELL_SESSION_MODE\":\"ubuntu\",\"GTK_MODULES\":\"gail:atk-bridge\",\"npm_config_editor\":\"vi\",\"npm_config_rollback\":\"true\",\"npm_config_tag_version_prefix\":\"v\",\"LC_MONETARY\":\"en_DK.UTF-8\",\"MANAGERPID\":\"10564\",\"npm_package_devDependencies_stylelint_config_standard\":\"^20.0.0\",\"npm_config_cache_max\":\"Infinity\",\"npm_config_userconfig\":\"/home/rumarocket/.npmrc\",\"npm_config_timing\":\"\",\"DBUS_SESSION_BUS_ADDRESS\":\"unix:path=/run/user/1000/bus\",\"npm_package_dependencies_dotenv\":\"^8.2.0\",\"npm_package_devDependencies_html_minifier\":\"^4.0.0\",\"npm_package_devDependencies_nyc\":\"^15.1.0\",\"npm_config_tmp\":\"/tmp\",\"npm_config_engine_strict\":\"\",\"npm_config_init_author_name\":\"\",\"npm_config_init_author_url\":\"\",\"npm_config_preid\":\"\",\"COLORTERM\":\"truecolor\",\"npm_package_description\":\"My Portfolio\",\"npm_package_devDependencies_babel_loader\":\"^8.1.0\",\"npm_package_devDependencies_eslint_config_es2015\":\"*\",\"npm_config_depth\":\"Infinity\",\"npm_config_package_lock_only\":\"\",\"npm_config_save_dev\":\"\",\"npm_config_usage\":\"\",\"npm_package_scripts_watch_server\":\"nodemon --exec 'npm run server'\",\"npm_package_homepage\":\"https://github.com/Latsuj/Lj2#readme\",\"npm_package_devDependencies__babel_preset_env\":\"^7.12.1\",\"npm_package_readmeFilename\":\"readme.md\",\"npm_config_metrics_registry\":\"https://registry.npmjs.org/\",\"npm_config_package_lock\":\"true\",\"npm_config_progress\":\"true\",\"npm_config_cafile\":\"\",\"npm_config_otp\":\"\",\"npm_config_https_proxy\":\"\",\"npm_config_save_prod\":\"\",\"MANDATORY_PATH\":\"/usr/share/gconf/ubuntu.mandatory.path\",\"QT_QPA_PLATFORMTHEME\":\"appmenu-qt5\",\"IM_CONFIG_PHASE\":\"1\",\"npm_package_scripts_dev\":\"webpack --mode development --config config/dev.config.js\",\"npm_package_devDependencies_prettier\":\"^2.1.2\",\"npm_config_audit\":\"true\",\"npm_config_sso_type\":\"oauth\",\"npm_config_cidr\":\"\",\"npm_config_onload_script\":\"\",\"LOGNAME\":\"rumarocket\",\"npm_package_devDependencies_vue_template_compiler\":\"^2.6.12\",\"npm_config_rebuild_bundle\":\"true\",\"npm_config_shell\":\"/bin/bash\",\"npm_config_save_bundle\":\"\",\"JOURNAL_STREAM\":\"9:47226\",\"_\":\"/usr/local/bin/npm\",\"npm_package_dependencies_express\":\"^4.17.1\",\"npm_config_prefix\":\"/usr/local\",\"npm_config_dry_run\":\"\",\"XDG_SESSION_CLASS\":\"user\",\"DEFAULTS_PATH\":\"/usr/share/gconf/ubuntu.default.path\",\"npm_package_devDependencies_vue\":\"^2.6.12\",\"npm_config_scope\":\"\",\"npm_config_cache_lock_wait\":\"10000\",\"npm_config_registry\":\"https://registry.npmjs.org/\",\"npm_config_browser\":\"\",\"npm_config_ignore_prepublish\":\"\",\"npm_config_save_optional\":\"\",\"npm_config_searchopts\":\"\",\"npm_config_versions\":\"\",\"USERNAME\":\"rumarocket\",\"TERM\":\"xterm-256color\",\"npm_package_devDependencies__babel_core\":\"^7.12.3\",\"npm_package_devDependencies_stylelint\":\"^13.7.2\",\"npm_config_cache\":\"/home/rumarocket/.npm\",\"npm_config_proxy\":\"\",\"npm_config_send_metrics\":\"\",\"GNOME_DESKTOP_SESSION_ID\":\"this-is-deprecated\",\"npm_package_scripts_start\":\"node -e 'require(\\\"./server/index\\\").start()'\",\"npm_package_dependencies_mongodb\":\"^3.6.2\",\"npm_package_devDependencies_html_webpack_plugin\":\"^4.5.0\",\"npm_config_global_style\":\"\",\"npm_config_ignore_scripts\":\"\",\"npm_config_version\":\"\",\"GTK2_MODULES\":\"overlay-scrollbar\",\"WINDOWPATH\":\"2\",\"npm_package_dependencies_axios\":\"^0.21.0\",\"npm_package_devDependencies_postcss_loader\":\"^4.0.4\",\"npm_config_viewer\":\"man\",\"npm_config_node_gyp\":\"/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js\",\"npm_config_local_address\":\"\",\"PATH\":\"/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/home/rumarocket/bin:/home/rumarocket/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/mssql-tools/bin:~/azuredatastudio-linux-x64\",\"SESSION_MANAGER\":\"local/rumarocket:@/tmp/.ICE-unix/12282,unix/rumarocket:/tmp/.ICE-unix/12282\",\"INVOCATION_ID\":\"8b7d25de5e5a4f8d8b15c309bf141400\",\"PAPERSIZE\":\"a4\",\"NODE\":\"/usr/local/bin/node\",\"npm_package_name\":\"Latsuj\",\"npm_package_repository_type\":\"git\",\"npm_config_audit_level\":\"low\",\"npm_config_prefer_offline\":\"\",\"XDG_MENU_PREFIX\":\"gnome-\",\"LC_ADDRESS\":\"en_DK.UTF-8\",\"GNOME_TERMINAL_SCREEN\":\"/org/gnome/Terminal/screen/6e5745d1_b2a9_4543_a8be_234bafb75407\",\"XDG_RUNTIME_DIR\":\"/run/user/1000\",\"npm_config_color\":\"true\",\"npm_config_sign_git_commit\":\"\",\"DISPLAY\":\":1\",\"npm_package_devDependencies_webpack_merge\":\"^5.2.0\",\"npm_config_fetch_retry_mintimeout\":\"10000\",\"npm_config_maxsockets\":\"50\",\"npm_config_sso_poll_frequency\":\"500\",\"npm_config_offline\":\"\",\"LANG\":\"en_US.UTF-8\",\"XDG_CURRENT_DESKTOP\":\"ubuntu:GNOME\",\"LC_TELEPHONE\":\"en_DK.UTF-8\",\"npm_package_dependencies_winston\":\"^3.3.3\",\"npm_package_devDependencies_eslint\":\"^7.12.0\",\"npm_package_devDependencies_webpack\":\"^5.2.0\",\"npm_config_umask\":\"0002\",\"XMODIFIERS\":\"@im=ibus\",\"XDG_SESSION_DESKTOP\":\"ubuntu\",\"XAUTHORITY\":\"/run/user/1000/gdm/Xauthority\",\"LS_COLORS\":\"rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:\",\"GNOME_TERMINAL_SERVICE\":\":1.102\",\"npm_package_main\":\"server/index.js\",\"npm_package_devDependencies_copy_webpack_plugin\":\"^6.2.1\",\"npm_package_devDependencies_html_loader\":\"^1.3.2\",\"npm_package_gitHead\":\"01a7d3b5eafd3465a4c0251fbb253676a200eb56\",\"npm_config_fetch_retry_maxtimeout\":\"60000\",\"npm_config_loglevel\":\"notice\",\"npm_config_logs_max\":\"10\",\"npm_config_message\":\"%s\",\"npm_lifecycle_script\":\"webpack --mode development --config config/dev.config.js\",\"SSH_AUTH_SOCK\":\"/run/user/1000/keyring/ssh\",\"npm_package_scripts_test\":\"nyc --reporter=html --reporter=text ava tests/**/*.js ava tests/**/**/*.js --verbose --timeout=1m\",\"npm_package_devDependencies_lqip_loader\":\"^2.2.1\",\"npm_config_ca\":\"\",\"npm_config_cert\":\"\",\"npm_config_global\":\"\",\"npm_config_link\":\"\",\"SHELL\":\"/bin/bash\",\"LC_NAME\":\"en_DK.UTF-8\",\"npm_package_version\":\"1.0.0\",\"npm_package_repository_url\":\"git+https://github.com/Latsuj/Lj2.git\",\"npm_package_devDependencies_less_loader\":\"^7.0.2\",\"npm_config_save\":\"true\",\"npm_config_unicode\":\"true\",\"npm_config_access\":\"\",\"npm_config_also\":\"\",\"npm_lifecycle_event\":\"dev\",\"QT_ACCESSIBILITY\":\"1\",\"GDMSESSION\":\"ubuntu\",\"npm_package_scripts_build\":\"webpack --mode production --config config/prod.config.js\",\"npm_package_devDependencies_coveralls\":\"^3.1.0\",\"npm_config_argv\":\"{\\\"remain\\\":[],\\\"cooked\\\":[\\\"run\\\",\\\"dev\\\"],\\\"original\\\":[\\\"run\\\",\\\"dev\\\"]}\",\"npm_config_searchlimit\":\"20\",\"npm_config_unsafe_perm\":\"true\",\"npm_config_update_notifier\":\"true\",\"npm_config_before\":\"\",\"npm_config_long\":\"\",\"npm_config_production\":\"\",\"LESSCLOSE\":\"/usr/bin/lesspipe %s %s\",\"npm_package_author\":\"\",\"npm_package_dependencies_nodemon\":\"^2.0.6\",\"npm_config_auth_type\":\"legacy\",\"npm_config_node_version\":\"12.11.0\",\"npm_config_tag\":\"latest\",\"LC_MEASUREMENT\":\"en_DK.UTF-8\",\"npm_config_git_tag_version\":\"true\",\"npm_config_commit_hooks\":\"true\",\"npm_config_shrinkwrap\":\"true\",\"npm_config_script_shell\":\"\",\"GPG_AGENT_INFO\":\"/run/user/1000/gnupg/S.gpg-agent:0:1\",\"LC_IDENTIFICATION\":\"en_DK.UTF-8\",\"npm_package_license\":\"MIT\",\"npm_package_dependencies_mongoose\":\"^5.10.10\",\"npm_config_fetch_retry_factor\":\"10\",\"npm_config_strict_ssl\":\"true\",\"npm_config_save_exact\":\"\",\"QT_IM_MODULE\":\"ibus\",\"npm_package_scripts_coverage\":\"nyc report --reporter=text-lcov | coveralls\",\"npm_package_devDependencies_ava\":\"^3.13.0\",\"npm_package_devDependencies_style_loader\":\"^2.0.0\",\"npm_config_globalconfig\":\"/usr/local/etc/npmrc\",\"npm_config_init_module\":\"/home/rumarocket/.npm-init.js\",\"npm_config_dev\":\"\",\"npm_config_parseable\":\"\",\"PWD\":\"/home/rumarocket/eclipse-workspace/PORTFOLIO-master\",\"npm_config_globalignorefile\":\"/usr/local/etc/npmignore\",\"npm_execpath\":\"/usr/local/lib/node_modules/npm/bin/npm-cli.js\",\"XDG_CONFIG_DIRS\":\"/etc/xdg/xdg-ubuntu:/etc/xdg\",\"XDG_DATA_DIRS\":\"/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop:/var/lib/snapd/desktop\",\"npm_package_scripts_seed\":\"node -e 'require(\\\"./seeding/seeder.js\\\").seed()'\",\"npm_package_devDependencies_css_loader\":\"^5.0.0\",\"npm_package_devDependencies_image_webpack_loader\":\"^7.0.1\",\"npm_config_cache_lock_retries\":\"10\",\"npm_config_searchstaleness\":\"900\",\"LC_NUMERIC\":\"en_DK.UTF-8\",\"npm_package_scripts_watch\":\"nodemon --watch \\\"src/\\\" -x \\\"npm run dev\\\"\",\"npm_package_devDependencies_eslint_plugin_vue\":\"^7.1.0\",\"npm_package_devDependencies_html_minifier_loader\":\"*\",\"npm_package_devDependencies_postcss\":\"^8.1.4\",\"npm_config_save_prefix\":\"^\",\"npm_config_scripts_prepend_node_path\":\"warn-only\",\"npm_config_node_options\":\"\",\"LC_PAPER\":\"en_DK.UTF-8\",\"npm_package_devDependencies_babel_eslint\":\"^10.1.0\",\"npm_package_devDependencies_stylelint_webpack_plugin\":\"^2.1.1\",\"npm_config_group\":\"1000\",\"npm_config_init_author_email\":\"\",\"npm_config_searchexclude\":\"\",\"VTE_VERSION\":\"6003\",\"NODE_ENV\":\"development\",\"npm_package_dependencies_mongo_uri_builder\":\"^3.2.2\",\"npm_config_git\":\"git\",\"npm_config_optional\":\"true\",\"INIT_CWD\":\"/home/rumarocket/eclipse-workspace/PORTFOLIO-master\",\"npm_config_json\":\"\",\"API_NAME\":\"JUSTALK-SERVER\",\"HOST\":\"localhost\",\"PORT\":\"8080\",\"PROTOCOL\":\"http\",\"DB_NAME\":\"justalk\",\"DB_URI_DATA\":\"mongodb://localhost:27017/\",\"DB_URI_LOG\":\"mongodb://localhost:27017/logs\",\"DB_USER_DATA\":\"\",\"DB_PASS_DATA\":\"\",\"DB_HOST_LOG\":\"localhost\",\"DB_PORT_LOG\":\"27017\",\"DB_NAME_LOG\":\"logs\",\"DB_USER_LOG\":\"\",\"DB_PASS_LOG\":\"\"}.HOST + ':' + {\"LESSOPEN\":\"| /usr/bin/lesspipe %s\",\"npm_config_cache_lock_stale\":\"60000\",\"npm_config_ham_it_up\":\"\",\"npm_package_dependencies_connect_history_api_fallback\":\"^1.6.0\",\"npm_package_devDependencies_babel_core\":\"*\",\"npm_package_devDependencies_html\":\"*\",\"npm_config_legacy_bundling\":\"\",\"npm_config_sign_git_tag\":\"\",\"USER\":\"rumarocket\",\"LC_TIME\":\"en_DK.UTF-8\",\"npm_package_devDependencies_mongo_seeding\":\"^3.4.1\",\"npm_package_devDependencies_vue_loader\":\"^15.9.3\",\"npm_package_devDependencies_webpack_cli\":\"^4.1.0\",\"npm_config_user_agent\":\"npm/6.11.3 node/v12.11.0 linux x64\",\"npm_config_always_auth\":\"\",\"npm_package_bugs_url\":\"https://github.com/Latsuj/Lj2/issues\",\"npm_package_devDependencies_eslint_webpack_plugin\":\"^2.1.0\",\"npm_package_devDependencies_less\":\"^3.12.2\",\"npm_config_bin_links\":\"true\",\"npm_config_key\":\"\",\"SSH_AGENT_PID\":\"12249\",\"XDG_SESSION_TYPE\":\"x11\",\"npm_package_devDependencies_file_loader\":\"^6.1.1\",\"npm_package_devDependencies_postcss_preset_env\":\"^6.7.0\",\"npm_config_description\":\"true\",\"npm_config_fetch_retries\":\"2\",\"npm_config_heading\":\"npm\",\"npm_config_init_version\":\"1.0.0\",\"npm_config_allow_same_version\":\"\",\"npm_config_if_present\":\"\",\"npm_config_user\":\"\",\"npm_node_execpath\":\"/usr/local/bin/node\",\"SHLVL\":\"1\",\"npm_package_devDependencies_babel_preset_es2015\":\"*\",\"npm_package_devDependencies_chai_http\":\"^4.3.0\",\"npm_package_devDependencies_vue_router\":\"^3.4.7\",\"npm_config_prefer_online\":\"\",\"npm_config_noproxy\":\"\",\"HOME\":\"/home/rumarocket\",\"OLDPWD\":\"/home/rumarocket/eclipse-workspace\",\"npm_package_devDependencies_babel_preset_es2016\":\"*\",\"npm_config_force\":\"\",\"DESKTOP_SESSION\":\"ubuntu\",\"npm_config_only\":\"\",\"npm_config_read_only\":\"\",\"npm_package_engines_node\":\">=12.0\",\"npm_package_devDependencies_chai\":\"^4.2.0\",\"npm_config_cache_min\":\"10\",\"npm_config_init_license\":\"ISC\",\"GNOME_SHELL_SESSION_MODE\":\"ubuntu\",\"GTK_MODULES\":\"gail:atk-bridge\",\"npm_config_editor\":\"vi\",\"npm_config_rollback\":\"true\",\"npm_config_tag_version_prefix\":\"v\",\"LC_MONETARY\":\"en_DK.UTF-8\",\"MANAGERPID\":\"10564\",\"npm_package_devDependencies_stylelint_config_standard\":\"^20.0.0\",\"npm_config_cache_max\":\"Infinity\",\"npm_config_userconfig\":\"/home/rumarocket/.npmrc\",\"npm_config_timing\":\"\",\"DBUS_SESSION_BUS_ADDRESS\":\"unix:path=/run/user/1000/bus\",\"npm_package_dependencies_dotenv\":\"^8.2.0\",\"npm_package_devDependencies_html_minifier\":\"^4.0.0\",\"npm_package_devDependencies_nyc\":\"^15.1.0\",\"npm_config_tmp\":\"/tmp\",\"npm_config_engine_strict\":\"\",\"npm_config_init_author_name\":\"\",\"npm_config_init_author_url\":\"\",\"npm_config_preid\":\"\",\"COLORTERM\":\"truecolor\",\"npm_package_description\":\"My Portfolio\",\"npm_package_devDependencies_babel_loader\":\"^8.1.0\",\"npm_package_devDependencies_eslint_config_es2015\":\"*\",\"npm_config_depth\":\"Infinity\",\"npm_config_package_lock_only\":\"\",\"npm_config_save_dev\":\"\",\"npm_config_usage\":\"\",\"npm_package_scripts_watch_server\":\"nodemon --exec 'npm run server'\",\"npm_package_homepage\":\"https://github.com/Latsuj/Lj2#readme\",\"npm_package_devDependencies__babel_preset_env\":\"^7.12.1\",\"npm_package_readmeFilename\":\"readme.md\",\"npm_config_metrics_registry\":\"https://registry.npmjs.org/\",\"npm_config_package_lock\":\"true\",\"npm_config_progress\":\"true\",\"npm_config_cafile\":\"\",\"npm_config_otp\":\"\",\"npm_config_https_proxy\":\"\",\"npm_config_save_prod\":\"\",\"MANDATORY_PATH\":\"/usr/share/gconf/ubuntu.mandatory.path\",\"QT_QPA_PLATFORMTHEME\":\"appmenu-qt5\",\"IM_CONFIG_PHASE\":\"1\",\"npm_package_scripts_dev\":\"webpack --mode development --config config/dev.config.js\",\"npm_package_devDependencies_prettier\":\"^2.1.2\",\"npm_config_audit\":\"true\",\"npm_config_sso_type\":\"oauth\",\"npm_config_cidr\":\"\",\"npm_config_onload_script\":\"\",\"LOGNAME\":\"rumarocket\",\"npm_package_devDependencies_vue_template_compiler\":\"^2.6.12\",\"npm_config_rebuild_bundle\":\"true\",\"npm_config_shell\":\"/bin/bash\",\"npm_config_save_bundle\":\"\",\"JOURNAL_STREAM\":\"9:47226\",\"_\":\"/usr/local/bin/npm\",\"npm_package_dependencies_express\":\"^4.17.1\",\"npm_config_prefix\":\"/usr/local\",\"npm_config_dry_run\":\"\",\"XDG_SESSION_CLASS\":\"user\",\"DEFAULTS_PATH\":\"/usr/share/gconf/ubuntu.default.path\",\"npm_package_devDependencies_vue\":\"^2.6.12\",\"npm_config_scope\":\"\",\"npm_config_cache_lock_wait\":\"10000\",\"npm_config_registry\":\"https://registry.npmjs.org/\",\"npm_config_browser\":\"\",\"npm_config_ignore_prepublish\":\"\",\"npm_config_save_optional\":\"\",\"npm_config_searchopts\":\"\",\"npm_config_versions\":\"\",\"USERNAME\":\"rumarocket\",\"TERM\":\"xterm-256color\",\"npm_package_devDependencies__babel_core\":\"^7.12.3\",\"npm_package_devDependencies_stylelint\":\"^13.7.2\",\"npm_config_cache\":\"/home/rumarocket/.npm\",\"npm_config_proxy\":\"\",\"npm_config_send_metrics\":\"\",\"GNOME_DESKTOP_SESSION_ID\":\"this-is-deprecated\",\"npm_package_scripts_start\":\"node -e 'require(\\\"./server/index\\\").start()'\",\"npm_package_dependencies_mongodb\":\"^3.6.2\",\"npm_package_devDependencies_html_webpack_plugin\":\"^4.5.0\",\"npm_config_global_style\":\"\",\"npm_config_ignore_scripts\":\"\",\"npm_config_version\":\"\",\"GTK2_MODULES\":\"overlay-scrollbar\",\"WINDOWPATH\":\"2\",\"npm_package_dependencies_axios\":\"^0.21.0\",\"npm_package_devDependencies_postcss_loader\":\"^4.0.4\",\"npm_config_viewer\":\"man\",\"npm_config_node_gyp\":\"/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js\",\"npm_config_local_address\":\"\",\"PATH\":\"/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/home/rumarocket/bin:/home/rumarocket/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/mssql-tools/bin:~/azuredatastudio-linux-x64\",\"SESSION_MANAGER\":\"local/rumarocket:@/tmp/.ICE-unix/12282,unix/rumarocket:/tmp/.ICE-unix/12282\",\"INVOCATION_ID\":\"8b7d25de5e5a4f8d8b15c309bf141400\",\"PAPERSIZE\":\"a4\",\"NODE\":\"/usr/local/bin/node\",\"npm_package_name\":\"Latsuj\",\"npm_package_repository_type\":\"git\",\"npm_config_audit_level\":\"low\",\"npm_config_prefer_offline\":\"\",\"XDG_MENU_PREFIX\":\"gnome-\",\"LC_ADDRESS\":\"en_DK.UTF-8\",\"GNOME_TERMINAL_SCREEN\":\"/org/gnome/Terminal/screen/6e5745d1_b2a9_4543_a8be_234bafb75407\",\"XDG_RUNTIME_DIR\":\"/run/user/1000\",\"npm_config_color\":\"true\",\"npm_config_sign_git_commit\":\"\",\"DISPLAY\":\":1\",\"npm_package_devDependencies_webpack_merge\":\"^5.2.0\",\"npm_config_fetch_retry_mintimeout\":\"10000\",\"npm_config_maxsockets\":\"50\",\"npm_config_sso_poll_frequency\":\"500\",\"npm_config_offline\":\"\",\"LANG\":\"en_US.UTF-8\",\"XDG_CURRENT_DESKTOP\":\"ubuntu:GNOME\",\"LC_TELEPHONE\":\"en_DK.UTF-8\",\"npm_package_dependencies_winston\":\"^3.3.3\",\"npm_package_devDependencies_eslint\":\"^7.12.0\",\"npm_package_devDependencies_webpack\":\"^5.2.0\",\"npm_config_umask\":\"0002\",\"XMODIFIERS\":\"@im=ibus\",\"XDG_SESSION_DESKTOP\":\"ubuntu\",\"XAUTHORITY\":\"/run/user/1000/gdm/Xauthority\",\"LS_COLORS\":\"rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:\",\"GNOME_TERMINAL_SERVICE\":\":1.102\",\"npm_package_main\":\"server/index.js\",\"npm_package_devDependencies_copy_webpack_plugin\":\"^6.2.1\",\"npm_package_devDependencies_html_loader\":\"^1.3.2\",\"npm_package_gitHead\":\"01a7d3b5eafd3465a4c0251fbb253676a200eb56\",\"npm_config_fetch_retry_maxtimeout\":\"60000\",\"npm_config_loglevel\":\"notice\",\"npm_config_logs_max\":\"10\",\"npm_config_message\":\"%s\",\"npm_lifecycle_script\":\"webpack --mode development --config config/dev.config.js\",\"SSH_AUTH_SOCK\":\"/run/user/1000/keyring/ssh\",\"npm_package_scripts_test\":\"nyc --reporter=html --reporter=text ava tests/**/*.js ava tests/**/**/*.js --verbose --timeout=1m\",\"npm_package_devDependencies_lqip_loader\":\"^2.2.1\",\"npm_config_ca\":\"\",\"npm_config_cert\":\"\",\"npm_config_global\":\"\",\"npm_config_link\":\"\",\"SHELL\":\"/bin/bash\",\"LC_NAME\":\"en_DK.UTF-8\",\"npm_package_version\":\"1.0.0\",\"npm_package_repository_url\":\"git+https://github.com/Latsuj/Lj2.git\",\"npm_package_devDependencies_less_loader\":\"^7.0.2\",\"npm_config_save\":\"true\",\"npm_config_unicode\":\"true\",\"npm_config_access\":\"\",\"npm_config_also\":\"\",\"npm_lifecycle_event\":\"dev\",\"QT_ACCESSIBILITY\":\"1\",\"GDMSESSION\":\"ubuntu\",\"npm_package_scripts_build\":\"webpack --mode production --config config/prod.config.js\",\"npm_package_devDependencies_coveralls\":\"^3.1.0\",\"npm_config_argv\":\"{\\\"remain\\\":[],\\\"cooked\\\":[\\\"run\\\",\\\"dev\\\"],\\\"original\\\":[\\\"run\\\",\\\"dev\\\"]}\",\"npm_config_searchlimit\":\"20\",\"npm_config_unsafe_perm\":\"true\",\"npm_config_update_notifier\":\"true\",\"npm_config_before\":\"\",\"npm_config_long\":\"\",\"npm_config_production\":\"\",\"LESSCLOSE\":\"/usr/bin/lesspipe %s %s\",\"npm_package_author\":\"\",\"npm_package_dependencies_nodemon\":\"^2.0.6\",\"npm_config_auth_type\":\"legacy\",\"npm_config_node_version\":\"12.11.0\",\"npm_config_tag\":\"latest\",\"LC_MEASUREMENT\":\"en_DK.UTF-8\",\"npm_config_git_tag_version\":\"true\",\"npm_config_commit_hooks\":\"true\",\"npm_config_shrinkwrap\":\"true\",\"npm_config_script_shell\":\"\",\"GPG_AGENT_INFO\":\"/run/user/1000/gnupg/S.gpg-agent:0:1\",\"LC_IDENTIFICATION\":\"en_DK.UTF-8\",\"npm_package_license\":\"MIT\",\"npm_package_dependencies_mongoose\":\"^5.10.10\",\"npm_config_fetch_retry_factor\":\"10\",\"npm_config_strict_ssl\":\"true\",\"npm_config_save_exact\":\"\",\"QT_IM_MODULE\":\"ibus\",\"npm_package_scripts_coverage\":\"nyc report --reporter=text-lcov | coveralls\",\"npm_package_devDependencies_ava\":\"^3.13.0\",\"npm_package_devDependencies_style_loader\":\"^2.0.0\",\"npm_config_globalconfig\":\"/usr/local/etc/npmrc\",\"npm_config_init_module\":\"/home/rumarocket/.npm-init.js\",\"npm_config_dev\":\"\",\"npm_config_parseable\":\"\",\"PWD\":\"/home/rumarocket/eclipse-workspace/PORTFOLIO-master\",\"npm_config_globalignorefile\":\"/usr/local/etc/npmignore\",\"npm_execpath\":\"/usr/local/lib/node_modules/npm/bin/npm-cli.js\",\"XDG_CONFIG_DIRS\":\"/etc/xdg/xdg-ubuntu:/etc/xdg\",\"XDG_DATA_DIRS\":\"/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop:/var/lib/snapd/desktop\",\"npm_package_scripts_seed\":\"node -e 'require(\\\"./seeding/seeder.js\\\").seed()'\",\"npm_package_devDependencies_css_loader\":\"^5.0.0\",\"npm_package_devDependencies_image_webpack_loader\":\"^7.0.1\",\"npm_config_cache_lock_retries\":\"10\",\"npm_config_searchstaleness\":\"900\",\"LC_NUMERIC\":\"en_DK.UTF-8\",\"npm_package_scripts_watch\":\"nodemon --watch \\\"src/\\\" -x \\\"npm run dev\\\"\",\"npm_package_devDependencies_eslint_plugin_vue\":\"^7.1.0\",\"npm_package_devDependencies_html_minifier_loader\":\"*\",\"npm_package_devDependencies_postcss\":\"^8.1.4\",\"npm_config_save_prefix\":\"^\",\"npm_config_scripts_prepend_node_path\":\"warn-only\",\"npm_config_node_options\":\"\",\"LC_PAPER\":\"en_DK.UTF-8\",\"npm_package_devDependencies_babel_eslint\":\"^10.1.0\",\"npm_package_devDependencies_stylelint_webpack_plugin\":\"^2.1.1\",\"npm_config_group\":\"1000\",\"npm_config_init_author_email\":\"\",\"npm_config_searchexclude\":\"\",\"VTE_VERSION\":\"6003\",\"NODE_ENV\":\"development\",\"npm_package_dependencies_mongo_uri_builder\":\"^3.2.2\",\"npm_config_git\":\"git\",\"npm_config_optional\":\"true\",\"INIT_CWD\":\"/home/rumarocket/eclipse-workspace/PORTFOLIO-master\",\"npm_config_json\":\"\",\"API_NAME\":\"JUSTALK-SERVER\",\"HOST\":\"localhost\",\"PORT\":\"8080\",\"PROTOCOL\":\"http\",\"DB_NAME\":\"justalk\",\"DB_URI_DATA\":\"mongodb://localhost:27017/\",\"DB_URI_LOG\":\"mongodb://localhost:27017/logs\",\"DB_USER_DATA\":\"\",\"DB_PASS_DATA\":\"\",\"DB_HOST_LOG\":\"localhost\",\"DB_PORT_LOG\":\"27017\",\"DB_NAME_LOG\":\"logs\",\"DB_USER_LOG\":\"\",\"DB_PASS_LOG\":\"\"}.PORT + '/' + path;\n\t},\n\tget_server_address() {\n\t\treturn {\"LESSOPEN\":\"| /usr/bin/lesspipe %s\",\"npm_config_cache_lock_stale\":\"60000\",\"npm_config_ham_it_up\":\"\",\"npm_package_dependencies_connect_history_api_fallback\":\"^1.6.0\",\"npm_package_devDependencies_babel_core\":\"*\",\"npm_package_devDependencies_html\":\"*\",\"npm_config_legacy_bundling\":\"\",\"npm_config_sign_git_tag\":\"\",\"USER\":\"rumarocket\",\"LC_TIME\":\"en_DK.UTF-8\",\"npm_package_devDependencies_mongo_seeding\":\"^3.4.1\",\"npm_package_devDependencies_vue_loader\":\"^15.9.3\",\"npm_package_devDependencies_webpack_cli\":\"^4.1.0\",\"npm_config_user_agent\":\"npm/6.11.3 node/v12.11.0 linux x64\",\"npm_config_always_auth\":\"\",\"npm_package_bugs_url\":\"https://github.com/Latsuj/Lj2/issues\",\"npm_package_devDependencies_eslint_webpack_plugin\":\"^2.1.0\",\"npm_package_devDependencies_less\":\"^3.12.2\",\"npm_config_bin_links\":\"true\",\"npm_config_key\":\"\",\"SSH_AGENT_PID\":\"12249\",\"XDG_SESSION_TYPE\":\"x11\",\"npm_package_devDependencies_file_loader\":\"^6.1.1\",\"npm_package_devDependencies_postcss_preset_env\":\"^6.7.0\",\"npm_config_description\":\"true\",\"npm_config_fetch_retries\":\"2\",\"npm_config_heading\":\"npm\",\"npm_config_init_version\":\"1.0.0\",\"npm_config_allow_same_version\":\"\",\"npm_config_if_present\":\"\",\"npm_config_user\":\"\",\"npm_node_execpath\":\"/usr/local/bin/node\",\"SHLVL\":\"1\",\"npm_package_devDependencies_babel_preset_es2015\":\"*\",\"npm_package_devDependencies_chai_http\":\"^4.3.0\",\"npm_package_devDependencies_vue_router\":\"^3.4.7\",\"npm_config_prefer_online\":\"\",\"npm_config_noproxy\":\"\",\"HOME\":\"/home/rumarocket\",\"OLDPWD\":\"/home/rumarocket/eclipse-workspace\",\"npm_package_devDependencies_babel_preset_es2016\":\"*\",\"npm_config_force\":\"\",\"DESKTOP_SESSION\":\"ubuntu\",\"npm_config_only\":\"\",\"npm_config_read_only\":\"\",\"npm_package_engines_node\":\">=12.0\",\"npm_package_devDependencies_chai\":\"^4.2.0\",\"npm_config_cache_min\":\"10\",\"npm_config_init_license\":\"ISC\",\"GNOME_SHELL_SESSION_MODE\":\"ubuntu\",\"GTK_MODULES\":\"gail:atk-bridge\",\"npm_config_editor\":\"vi\",\"npm_config_rollback\":\"true\",\"npm_config_tag_version_prefix\":\"v\",\"LC_MONETARY\":\"en_DK.UTF-8\",\"MANAGERPID\":\"10564\",\"npm_package_devDependencies_stylelint_config_standard\":\"^20.0.0\",\"npm_config_cache_max\":\"Infinity\",\"npm_config_userconfig\":\"/home/rumarocket/.npmrc\",\"npm_config_timing\":\"\",\"DBUS_SESSION_BUS_ADDRESS\":\"unix:path=/run/user/1000/bus\",\"npm_package_dependencies_dotenv\":\"^8.2.0\",\"npm_package_devDependencies_html_minifier\":\"^4.0.0\",\"npm_package_devDependencies_nyc\":\"^15.1.0\",\"npm_config_tmp\":\"/tmp\",\"npm_config_engine_strict\":\"\",\"npm_config_init_author_name\":\"\",\"npm_config_init_author_url\":\"\",\"npm_config_preid\":\"\",\"COLORTERM\":\"truecolor\",\"npm_package_description\":\"My Portfolio\",\"npm_package_devDependencies_babel_loader\":\"^8.1.0\",\"npm_package_devDependencies_eslint_config_es2015\":\"*\",\"npm_config_depth\":\"Infinity\",\"npm_config_package_lock_only\":\"\",\"npm_config_save_dev\":\"\",\"npm_config_usage\":\"\",\"npm_package_scripts_watch_server\":\"nodemon --exec 'npm run server'\",\"npm_package_homepage\":\"https://github.com/Latsuj/Lj2#readme\",\"npm_package_devDependencies__babel_preset_env\":\"^7.12.1\",\"npm_package_readmeFilename\":\"readme.md\",\"npm_config_metrics_registry\":\"https://registry.npmjs.org/\",\"npm_config_package_lock\":\"true\",\"npm_config_progress\":\"true\",\"npm_config_cafile\":\"\",\"npm_config_otp\":\"\",\"npm_config_https_proxy\":\"\",\"npm_config_save_prod\":\"\",\"MANDATORY_PATH\":\"/usr/share/gconf/ubuntu.mandatory.path\",\"QT_QPA_PLATFORMTHEME\":\"appmenu-qt5\",\"IM_CONFIG_PHASE\":\"1\",\"npm_package_scripts_dev\":\"webpack --mode development --config config/dev.config.js\",\"npm_package_devDependencies_prettier\":\"^2.1.2\",\"npm_config_audit\":\"true\",\"npm_config_sso_type\":\"oauth\",\"npm_config_cidr\":\"\",\"npm_config_onload_script\":\"\",\"LOGNAME\":\"rumarocket\",\"npm_package_devDependencies_vue_template_compiler\":\"^2.6.12\",\"npm_config_rebuild_bundle\":\"true\",\"npm_config_shell\":\"/bin/bash\",\"npm_config_save_bundle\":\"\",\"JOURNAL_STREAM\":\"9:47226\",\"_\":\"/usr/local/bin/npm\",\"npm_package_dependencies_express\":\"^4.17.1\",\"npm_config_prefix\":\"/usr/local\",\"npm_config_dry_run\":\"\",\"XDG_SESSION_CLASS\":\"user\",\"DEFAULTS_PATH\":\"/usr/share/gconf/ubuntu.default.path\",\"npm_package_devDependencies_vue\":\"^2.6.12\",\"npm_config_scope\":\"\",\"npm_config_cache_lock_wait\":\"10000\",\"npm_config_registry\":\"https://registry.npmjs.org/\",\"npm_config_browser\":\"\",\"npm_config_ignore_prepublish\":\"\",\"npm_config_save_optional\":\"\",\"npm_config_searchopts\":\"\",\"npm_config_versions\":\"\",\"USERNAME\":\"rumarocket\",\"TERM\":\"xterm-256color\",\"npm_package_devDependencies__babel_core\":\"^7.12.3\",\"npm_package_devDependencies_stylelint\":\"^13.7.2\",\"npm_config_cache\":\"/home/rumarocket/.npm\",\"npm_config_proxy\":\"\",\"npm_config_send_metrics\":\"\",\"GNOME_DESKTOP_SESSION_ID\":\"this-is-deprecated\",\"npm_package_scripts_start\":\"node -e 'require(\\\"./server/index\\\").start()'\",\"npm_package_dependencies_mongodb\":\"^3.6.2\",\"npm_package_devDependencies_html_webpack_plugin\":\"^4.5.0\",\"npm_config_global_style\":\"\",\"npm_config_ignore_scripts\":\"\",\"npm_config_version\":\"\",\"GTK2_MODULES\":\"overlay-scrollbar\",\"WINDOWPATH\":\"2\",\"npm_package_dependencies_axios\":\"^0.21.0\",\"npm_package_devDependencies_postcss_loader\":\"^4.0.4\",\"npm_config_viewer\":\"man\",\"npm_config_node_gyp\":\"/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js\",\"npm_config_local_address\":\"\",\"PATH\":\"/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/home/rumarocket/bin:/home/rumarocket/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/mssql-tools/bin:~/azuredatastudio-linux-x64\",\"SESSION_MANAGER\":\"local/rumarocket:@/tmp/.ICE-unix/12282,unix/rumarocket:/tmp/.ICE-unix/12282\",\"INVOCATION_ID\":\"8b7d25de5e5a4f8d8b15c309bf141400\",\"PAPERSIZE\":\"a4\",\"NODE\":\"/usr/local/bin/node\",\"npm_package_name\":\"Latsuj\",\"npm_package_repository_type\":\"git\",\"npm_config_audit_level\":\"low\",\"npm_config_prefer_offline\":\"\",\"XDG_MENU_PREFIX\":\"gnome-\",\"LC_ADDRESS\":\"en_DK.UTF-8\",\"GNOME_TERMINAL_SCREEN\":\"/org/gnome/Terminal/screen/6e5745d1_b2a9_4543_a8be_234bafb75407\",\"XDG_RUNTIME_DIR\":\"/run/user/1000\",\"npm_config_color\":\"true\",\"npm_config_sign_git_commit\":\"\",\"DISPLAY\":\":1\",\"npm_package_devDependencies_webpack_merge\":\"^5.2.0\",\"npm_config_fetch_retry_mintimeout\":\"10000\",\"npm_config_maxsockets\":\"50\",\"npm_config_sso_poll_frequency\":\"500\",\"npm_config_offline\":\"\",\"LANG\":\"en_US.UTF-8\",\"XDG_CURRENT_DESKTOP\":\"ubuntu:GNOME\",\"LC_TELEPHONE\":\"en_DK.UTF-8\",\"npm_package_dependencies_winston\":\"^3.3.3\",\"npm_package_devDependencies_eslint\":\"^7.12.0\",\"npm_package_devDependencies_webpack\":\"^5.2.0\",\"npm_config_umask\":\"0002\",\"XMODIFIERS\":\"@im=ibus\",\"XDG_SESSION_DESKTOP\":\"ubuntu\",\"XAUTHORITY\":\"/run/user/1000/gdm/Xauthority\",\"LS_COLORS\":\"rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:\",\"GNOME_TERMINAL_SERVICE\":\":1.102\",\"npm_package_main\":\"server/index.js\",\"npm_package_devDependencies_copy_webpack_plugin\":\"^6.2.1\",\"npm_package_devDependencies_html_loader\":\"^1.3.2\",\"npm_package_gitHead\":\"01a7d3b5eafd3465a4c0251fbb253676a200eb56\",\"npm_config_fetch_retry_maxtimeout\":\"60000\",\"npm_config_loglevel\":\"notice\",\"npm_config_logs_max\":\"10\",\"npm_config_message\":\"%s\",\"npm_lifecycle_script\":\"webpack --mode development --config config/dev.config.js\",\"SSH_AUTH_SOCK\":\"/run/user/1000/keyring/ssh\",\"npm_package_scripts_test\":\"nyc --reporter=html --reporter=text ava tests/**/*.js ava tests/**/**/*.js --verbose --timeout=1m\",\"npm_package_devDependencies_lqip_loader\":\"^2.2.1\",\"npm_config_ca\":\"\",\"npm_config_cert\":\"\",\"npm_config_global\":\"\",\"npm_config_link\":\"\",\"SHELL\":\"/bin/bash\",\"LC_NAME\":\"en_DK.UTF-8\",\"npm_package_version\":\"1.0.0\",\"npm_package_repository_url\":\"git+https://github.com/Latsuj/Lj2.git\",\"npm_package_devDependencies_less_loader\":\"^7.0.2\",\"npm_config_save\":\"true\",\"npm_config_unicode\":\"true\",\"npm_config_access\":\"\",\"npm_config_also\":\"\",\"npm_lifecycle_event\":\"dev\",\"QT_ACCESSIBILITY\":\"1\",\"GDMSESSION\":\"ubuntu\",\"npm_package_scripts_build\":\"webpack --mode production --config config/prod.config.js\",\"npm_package_devDependencies_coveralls\":\"^3.1.0\",\"npm_config_argv\":\"{\\\"remain\\\":[],\\\"cooked\\\":[\\\"run\\\",\\\"dev\\\"],\\\"original\\\":[\\\"run\\\",\\\"dev\\\"]}\",\"npm_config_searchlimit\":\"20\",\"npm_config_unsafe_perm\":\"true\",\"npm_config_update_notifier\":\"true\",\"npm_config_before\":\"\",\"npm_config_long\":\"\",\"npm_config_production\":\"\",\"LESSCLOSE\":\"/usr/bin/lesspipe %s %s\",\"npm_package_author\":\"\",\"npm_package_dependencies_nodemon\":\"^2.0.6\",\"npm_config_auth_type\":\"legacy\",\"npm_config_node_version\":\"12.11.0\",\"npm_config_tag\":\"latest\",\"LC_MEASUREMENT\":\"en_DK.UTF-8\",\"npm_config_git_tag_version\":\"true\",\"npm_config_commit_hooks\":\"true\",\"npm_config_shrinkwrap\":\"true\",\"npm_config_script_shell\":\"\",\"GPG_AGENT_INFO\":\"/run/user/1000/gnupg/S.gpg-agent:0:1\",\"LC_IDENTIFICATION\":\"en_DK.UTF-8\",\"npm_package_license\":\"MIT\",\"npm_package_dependencies_mongoose\":\"^5.10.10\",\"npm_config_fetch_retry_factor\":\"10\",\"npm_config_strict_ssl\":\"true\",\"npm_config_save_exact\":\"\",\"QT_IM_MODULE\":\"ibus\",\"npm_package_scripts_coverage\":\"nyc report --reporter=text-lcov | coveralls\",\"npm_package_devDependencies_ava\":\"^3.13.0\",\"npm_package_devDependencies_style_loader\":\"^2.0.0\",\"npm_config_globalconfig\":\"/usr/local/etc/npmrc\",\"npm_config_init_module\":\"/home/rumarocket/.npm-init.js\",\"npm_config_dev\":\"\",\"npm_config_parseable\":\"\",\"PWD\":\"/home/rumarocket/eclipse-workspace/PORTFOLIO-master\",\"npm_config_globalignorefile\":\"/usr/local/etc/npmignore\",\"npm_execpath\":\"/usr/local/lib/node_modules/npm/bin/npm-cli.js\",\"XDG_CONFIG_DIRS\":\"/etc/xdg/xdg-ubuntu:/etc/xdg\",\"XDG_DATA_DIRS\":\"/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop:/var/lib/snapd/desktop\",\"npm_package_scripts_seed\":\"node -e 'require(\\\"./seeding/seeder.js\\\").seed()'\",\"npm_package_devDependencies_css_loader\":\"^5.0.0\",\"npm_package_devDependencies_image_webpack_loader\":\"^7.0.1\",\"npm_config_cache_lock_retries\":\"10\",\"npm_config_searchstaleness\":\"900\",\"LC_NUMERIC\":\"en_DK.UTF-8\",\"npm_package_scripts_watch\":\"nodemon --watch \\\"src/\\\" -x \\\"npm run dev\\\"\",\"npm_package_devDependencies_eslint_plugin_vue\":\"^7.1.0\",\"npm_package_devDependencies_html_minifier_loader\":\"*\",\"npm_package_devDependencies_postcss\":\"^8.1.4\",\"npm_config_save_prefix\":\"^\",\"npm_config_scripts_prepend_node_path\":\"warn-only\",\"npm_config_node_options\":\"\",\"LC_PAPER\":\"en_DK.UTF-8\",\"npm_package_devDependencies_babel_eslint\":\"^10.1.0\",\"npm_package_devDependencies_stylelint_webpack_plugin\":\"^2.1.1\",\"npm_config_group\":\"1000\",\"npm_config_init_author_email\":\"\",\"npm_config_searchexclude\":\"\",\"VTE_VERSION\":\"6003\",\"NODE_ENV\":\"development\",\"npm_package_dependencies_mongo_uri_builder\":\"^3.2.2\",\"npm_config_git\":\"git\",\"npm_config_optional\":\"true\",\"INIT_CWD\":\"/home/rumarocket/eclipse-workspace/PORTFOLIO-master\",\"npm_config_json\":\"\",\"API_NAME\":\"JUSTALK-SERVER\",\"HOST\":\"localhost\",\"PORT\":\"8080\",\"PROTOCOL\":\"http\",\"DB_NAME\":\"justalk\",\"DB_URI_DATA\":\"mongodb://localhost:27017/\",\"DB_URI_LOG\":\"mongodb://localhost:27017/logs\",\"DB_USER_DATA\":\"\",\"DB_PASS_DATA\":\"\",\"DB_HOST_LOG\":\"localhost\",\"DB_PORT_LOG\":\"27017\",\"DB_NAME_LOG\":\"logs\",\"DB_USER_LOG\":\"\",\"DB_PASS_LOG\":\"\"}.PROTOCOL + '://' + {\"LESSOPEN\":\"| /usr/bin/lesspipe %s\",\"npm_config_cache_lock_stale\":\"60000\",\"npm_config_ham_it_up\":\"\",\"npm_package_dependencies_connect_history_api_fallback\":\"^1.6.0\",\"npm_package_devDependencies_babel_core\":\"*\",\"npm_package_devDependencies_html\":\"*\",\"npm_config_legacy_bundling\":\"\",\"npm_config_sign_git_tag\":\"\",\"USER\":\"rumarocket\",\"LC_TIME\":\"en_DK.UTF-8\",\"npm_package_devDependencies_mongo_seeding\":\"^3.4.1\",\"npm_package_devDependencies_vue_loader\":\"^15.9.3\",\"npm_package_devDependencies_webpack_cli\":\"^4.1.0\",\"npm_config_user_agent\":\"npm/6.11.3 node/v12.11.0 linux x64\",\"npm_config_always_auth\":\"\",\"npm_package_bugs_url\":\"https://github.com/Latsuj/Lj2/issues\",\"npm_package_devDependencies_eslint_webpack_plugin\":\"^2.1.0\",\"npm_package_devDependencies_less\":\"^3.12.2\",\"npm_config_bin_links\":\"true\",\"npm_config_key\":\"\",\"SSH_AGENT_PID\":\"12249\",\"XDG_SESSION_TYPE\":\"x11\",\"npm_package_devDependencies_file_loader\":\"^6.1.1\",\"npm_package_devDependencies_postcss_preset_env\":\"^6.7.0\",\"npm_config_description\":\"true\",\"npm_config_fetch_retries\":\"2\",\"npm_config_heading\":\"npm\",\"npm_config_init_version\":\"1.0.0\",\"npm_config_allow_same_version\":\"\",\"npm_config_if_present\":\"\",\"npm_config_user\":\"\",\"npm_node_execpath\":\"/usr/local/bin/node\",\"SHLVL\":\"1\",\"npm_package_devDependencies_babel_preset_es2015\":\"*\",\"npm_package_devDependencies_chai_http\":\"^4.3.0\",\"npm_package_devDependencies_vue_router\":\"^3.4.7\",\"npm_config_prefer_online\":\"\",\"npm_config_noproxy\":\"\",\"HOME\":\"/home/rumarocket\",\"OLDPWD\":\"/home/rumarocket/eclipse-workspace\",\"npm_package_devDependencies_babel_preset_es2016\":\"*\",\"npm_config_force\":\"\",\"DESKTOP_SESSION\":\"ubuntu\",\"npm_config_only\":\"\",\"npm_config_read_only\":\"\",\"npm_package_engines_node\":\">=12.0\",\"npm_package_devDependencies_chai\":\"^4.2.0\",\"npm_config_cache_min\":\"10\",\"npm_config_init_license\":\"ISC\",\"GNOME_SHELL_SESSION_MODE\":\"ubuntu\",\"GTK_MODULES\":\"gail:atk-bridge\",\"npm_config_editor\":\"vi\",\"npm_config_rollback\":\"true\",\"npm_config_tag_version_prefix\":\"v\",\"LC_MONETARY\":\"en_DK.UTF-8\",\"MANAGERPID\":\"10564\",\"npm_package_devDependencies_stylelint_config_standard\":\"^20.0.0\",\"npm_config_cache_max\":\"Infinity\",\"npm_config_userconfig\":\"/home/rumarocket/.npmrc\",\"npm_config_timing\":\"\",\"DBUS_SESSION_BUS_ADDRESS\":\"unix:path=/run/user/1000/bus\",\"npm_package_dependencies_dotenv\":\"^8.2.0\",\"npm_package_devDependencies_html_minifier\":\"^4.0.0\",\"npm_package_devDependencies_nyc\":\"^15.1.0\",\"npm_config_tmp\":\"/tmp\",\"npm_config_engine_strict\":\"\",\"npm_config_init_author_name\":\"\",\"npm_config_init_author_url\":\"\",\"npm_config_preid\":\"\",\"COLORTERM\":\"truecolor\",\"npm_package_description\":\"My Portfolio\",\"npm_package_devDependencies_babel_loader\":\"^8.1.0\",\"npm_package_devDependencies_eslint_config_es2015\":\"*\",\"npm_config_depth\":\"Infinity\",\"npm_config_package_lock_only\":\"\",\"npm_config_save_dev\":\"\",\"npm_config_usage\":\"\",\"npm_package_scripts_watch_server\":\"nodemon --exec 'npm run server'\",\"npm_package_homepage\":\"https://github.com/Latsuj/Lj2#readme\",\"npm_package_devDependencies__babel_preset_env\":\"^7.12.1\",\"npm_package_readmeFilename\":\"readme.md\",\"npm_config_metrics_registry\":\"https://registry.npmjs.org/\",\"npm_config_package_lock\":\"true\",\"npm_config_progress\":\"true\",\"npm_config_cafile\":\"\",\"npm_config_otp\":\"\",\"npm_config_https_proxy\":\"\",\"npm_config_save_prod\":\"\",\"MANDATORY_PATH\":\"/usr/share/gconf/ubuntu.mandatory.path\",\"QT_QPA_PLATFORMTHEME\":\"appmenu-qt5\",\"IM_CONFIG_PHASE\":\"1\",\"npm_package_scripts_dev\":\"webpack --mode development --config config/dev.config.js\",\"npm_package_devDependencies_prettier\":\"^2.1.2\",\"npm_config_audit\":\"true\",\"npm_config_sso_type\":\"oauth\",\"npm_config_cidr\":\"\",\"npm_config_onload_script\":\"\",\"LOGNAME\":\"rumarocket\",\"npm_package_devDependencies_vue_template_compiler\":\"^2.6.12\",\"npm_config_rebuild_bundle\":\"true\",\"npm_config_shell\":\"/bin/bash\",\"npm_config_save_bundle\":\"\",\"JOURNAL_STREAM\":\"9:47226\",\"_\":\"/usr/local/bin/npm\",\"npm_package_dependencies_express\":\"^4.17.1\",\"npm_config_prefix\":\"/usr/local\",\"npm_config_dry_run\":\"\",\"XDG_SESSION_CLASS\":\"user\",\"DEFAULTS_PATH\":\"/usr/share/gconf/ubuntu.default.path\",\"npm_package_devDependencies_vue\":\"^2.6.12\",\"npm_config_scope\":\"\",\"npm_config_cache_lock_wait\":\"10000\",\"npm_config_registry\":\"https://registry.npmjs.org/\",\"npm_config_browser\":\"\",\"npm_config_ignore_prepublish\":\"\",\"npm_config_save_optional\":\"\",\"npm_config_searchopts\":\"\",\"npm_config_versions\":\"\",\"USERNAME\":\"rumarocket\",\"TERM\":\"xterm-256color\",\"npm_package_devDependencies__babel_core\":\"^7.12.3\",\"npm_package_devDependencies_stylelint\":\"^13.7.2\",\"npm_config_cache\":\"/home/rumarocket/.npm\",\"npm_config_proxy\":\"\",\"npm_config_send_metrics\":\"\",\"GNOME_DESKTOP_SESSION_ID\":\"this-is-deprecated\",\"npm_package_scripts_start\":\"node -e 'require(\\\"./server/index\\\").start()'\",\"npm_package_dependencies_mongodb\":\"^3.6.2\",\"npm_package_devDependencies_html_webpack_plugin\":\"^4.5.0\",\"npm_config_global_style\":\"\",\"npm_config_ignore_scripts\":\"\",\"npm_config_version\":\"\",\"GTK2_MODULES\":\"overlay-scrollbar\",\"WINDOWPATH\":\"2\",\"npm_package_dependencies_axios\":\"^0.21.0\",\"npm_package_devDependencies_postcss_loader\":\"^4.0.4\",\"npm_config_viewer\":\"man\",\"npm_config_node_gyp\":\"/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js\",\"npm_config_local_address\":\"\",\"PATH\":\"/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/home/rumarocket/bin:/home/rumarocket/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/mssql-tools/bin:~/azuredatastudio-linux-x64\",\"SESSION_MANAGER\":\"local/rumarocket:@/tmp/.ICE-unix/12282,unix/rumarocket:/tmp/.ICE-unix/12282\",\"INVOCATION_ID\":\"8b7d25de5e5a4f8d8b15c309bf141400\",\"PAPERSIZE\":\"a4\",\"NODE\":\"/usr/local/bin/node\",\"npm_package_name\":\"Latsuj\",\"npm_package_repository_type\":\"git\",\"npm_config_audit_level\":\"low\",\"npm_config_prefer_offline\":\"\",\"XDG_MENU_PREFIX\":\"gnome-\",\"LC_ADDRESS\":\"en_DK.UTF-8\",\"GNOME_TERMINAL_SCREEN\":\"/org/gnome/Terminal/screen/6e5745d1_b2a9_4543_a8be_234bafb75407\",\"XDG_RUNTIME_DIR\":\"/run/user/1000\",\"npm_config_color\":\"true\",\"npm_config_sign_git_commit\":\"\",\"DISPLAY\":\":1\",\"npm_package_devDependencies_webpack_merge\":\"^5.2.0\",\"npm_config_fetch_retry_mintimeout\":\"10000\",\"npm_config_maxsockets\":\"50\",\"npm_config_sso_poll_frequency\":\"500\",\"npm_config_offline\":\"\",\"LANG\":\"en_US.UTF-8\",\"XDG_CURRENT_DESKTOP\":\"ubuntu:GNOME\",\"LC_TELEPHONE\":\"en_DK.UTF-8\",\"npm_package_dependencies_winston\":\"^3.3.3\",\"npm_package_devDependencies_eslint\":\"^7.12.0\",\"npm_package_devDependencies_webpack\":\"^5.2.0\",\"npm_config_umask\":\"0002\",\"XMODIFIERS\":\"@im=ibus\",\"XDG_SESSION_DESKTOP\":\"ubuntu\",\"XAUTHORITY\":\"/run/user/1000/gdm/Xauthority\",\"LS_COLORS\":\"rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:\",\"GNOME_TERMINAL_SERVICE\":\":1.102\",\"npm_package_main\":\"server/index.js\",\"npm_package_devDependencies_copy_webpack_plugin\":\"^6.2.1\",\"npm_package_devDependencies_html_loader\":\"^1.3.2\",\"npm_package_gitHead\":\"01a7d3b5eafd3465a4c0251fbb253676a200eb56\",\"npm_config_fetch_retry_maxtimeout\":\"60000\",\"npm_config_loglevel\":\"notice\",\"npm_config_logs_max\":\"10\",\"npm_config_message\":\"%s\",\"npm_lifecycle_script\":\"webpack --mode development --config config/dev.config.js\",\"SSH_AUTH_SOCK\":\"/run/user/1000/keyring/ssh\",\"npm_package_scripts_test\":\"nyc --reporter=html --reporter=text ava tests/**/*.js ava tests/**/**/*.js --verbose --timeout=1m\",\"npm_package_devDependencies_lqip_loader\":\"^2.2.1\",\"npm_config_ca\":\"\",\"npm_config_cert\":\"\",\"npm_config_global\":\"\",\"npm_config_link\":\"\",\"SHELL\":\"/bin/bash\",\"LC_NAME\":\"en_DK.UTF-8\",\"npm_package_version\":\"1.0.0\",\"npm_package_repository_url\":\"git+https://github.com/Latsuj/Lj2.git\",\"npm_package_devDependencies_less_loader\":\"^7.0.2\",\"npm_config_save\":\"true\",\"npm_config_unicode\":\"true\",\"npm_config_access\":\"\",\"npm_config_also\":\"\",\"npm_lifecycle_event\":\"dev\",\"QT_ACCESSIBILITY\":\"1\",\"GDMSESSION\":\"ubuntu\",\"npm_package_scripts_build\":\"webpack --mode production --config config/prod.config.js\",\"npm_package_devDependencies_coveralls\":\"^3.1.0\",\"npm_config_argv\":\"{\\\"remain\\\":[],\\\"cooked\\\":[\\\"run\\\",\\\"dev\\\"],\\\"original\\\":[\\\"run\\\",\\\"dev\\\"]}\",\"npm_config_searchlimit\":\"20\",\"npm_config_unsafe_perm\":\"true\",\"npm_config_update_notifier\":\"true\",\"npm_config_before\":\"\",\"npm_config_long\":\"\",\"npm_config_production\":\"\",\"LESSCLOSE\":\"/usr/bin/lesspipe %s %s\",\"npm_package_author\":\"\",\"npm_package_dependencies_nodemon\":\"^2.0.6\",\"npm_config_auth_type\":\"legacy\",\"npm_config_node_version\":\"12.11.0\",\"npm_config_tag\":\"latest\",\"LC_MEASUREMENT\":\"en_DK.UTF-8\",\"npm_config_git_tag_version\":\"true\",\"npm_config_commit_hooks\":\"true\",\"npm_config_shrinkwrap\":\"true\",\"npm_config_script_shell\":\"\",\"GPG_AGENT_INFO\":\"/run/user/1000/gnupg/S.gpg-agent:0:1\",\"LC_IDENTIFICATION\":\"en_DK.UTF-8\",\"npm_package_license\":\"MIT\",\"npm_package_dependencies_mongoose\":\"^5.10.10\",\"npm_config_fetch_retry_factor\":\"10\",\"npm_config_strict_ssl\":\"true\",\"npm_config_save_exact\":\"\",\"QT_IM_MODULE\":\"ibus\",\"npm_package_scripts_coverage\":\"nyc report --reporter=text-lcov | coveralls\",\"npm_package_devDependencies_ava\":\"^3.13.0\",\"npm_package_devDependencies_style_loader\":\"^2.0.0\",\"npm_config_globalconfig\":\"/usr/local/etc/npmrc\",\"npm_config_init_module\":\"/home/rumarocket/.npm-init.js\",\"npm_config_dev\":\"\",\"npm_config_parseable\":\"\",\"PWD\":\"/home/rumarocket/eclipse-workspace/PORTFOLIO-master\",\"npm_config_globalignorefile\":\"/usr/local/etc/npmignore\",\"npm_execpath\":\"/usr/local/lib/node_modules/npm/bin/npm-cli.js\",\"XDG_CONFIG_DIRS\":\"/etc/xdg/xdg-ubuntu:/etc/xdg\",\"XDG_DATA_DIRS\":\"/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop:/var/lib/snapd/desktop\",\"npm_package_scripts_seed\":\"node -e 'require(\\\"./seeding/seeder.js\\\").seed()'\",\"npm_package_devDependencies_css_loader\":\"^5.0.0\",\"npm_package_devDependencies_image_webpack_loader\":\"^7.0.1\",\"npm_config_cache_lock_retries\":\"10\",\"npm_config_searchstaleness\":\"900\",\"LC_NUMERIC\":\"en_DK.UTF-8\",\"npm_package_scripts_watch\":\"nodemon --watch \\\"src/\\\" -x \\\"npm run dev\\\"\",\"npm_package_devDependencies_eslint_plugin_vue\":\"^7.1.0\",\"npm_package_devDependencies_html_minifier_loader\":\"*\",\"npm_package_devDependencies_postcss\":\"^8.1.4\",\"npm_config_save_prefix\":\"^\",\"npm_config_scripts_prepend_node_path\":\"warn-only\",\"npm_config_node_options\":\"\",\"LC_PAPER\":\"en_DK.UTF-8\",\"npm_package_devDependencies_babel_eslint\":\"^10.1.0\",\"npm_package_devDependencies_stylelint_webpack_plugin\":\"^2.1.1\",\"npm_config_group\":\"1000\",\"npm_config_init_author_email\":\"\",\"npm_config_searchexclude\":\"\",\"VTE_VERSION\":\"6003\",\"NODE_ENV\":\"development\",\"npm_package_dependencies_mongo_uri_builder\":\"^3.2.2\",\"npm_config_git\":\"git\",\"npm_config_optional\":\"true\",\"INIT_CWD\":\"/home/rumarocket/eclipse-workspace/PORTFOLIO-master\",\"npm_config_json\":\"\",\"API_NAME\":\"JUSTALK-SERVER\",\"HOST\":\"localhost\",\"PORT\":\"8080\",\"PROTOCOL\":\"http\",\"DB_NAME\":\"justalk\",\"DB_URI_DATA\":\"mongodb://localhost:27017/\",\"DB_URI_LOG\":\"mongodb://localhost:27017/logs\",\"DB_USER_DATA\":\"\",\"DB_PASS_DATA\":\"\",\"DB_HOST_LOG\":\"localhost\",\"DB_PORT_LOG\":\"27017\",\"DB_NAME_LOG\":\"logs\",\"DB_USER_LOG\":\"\",\"DB_PASS_LOG\":\"\"}.HOST + ':' + {\"LESSOPEN\":\"| /usr/bin/lesspipe %s\",\"npm_config_cache_lock_stale\":\"60000\",\"npm_config_ham_it_up\":\"\",\"npm_package_dependencies_connect_history_api_fallback\":\"^1.6.0\",\"npm_package_devDependencies_babel_core\":\"*\",\"npm_package_devDependencies_html\":\"*\",\"npm_config_legacy_bundling\":\"\",\"npm_config_sign_git_tag\":\"\",\"USER\":\"rumarocket\",\"LC_TIME\":\"en_DK.UTF-8\",\"npm_package_devDependencies_mongo_seeding\":\"^3.4.1\",\"npm_package_devDependencies_vue_loader\":\"^15.9.3\",\"npm_package_devDependencies_webpack_cli\":\"^4.1.0\",\"npm_config_user_agent\":\"npm/6.11.3 node/v12.11.0 linux x64\",\"npm_config_always_auth\":\"\",\"npm_package_bugs_url\":\"https://github.com/Latsuj/Lj2/issues\",\"npm_package_devDependencies_eslint_webpack_plugin\":\"^2.1.0\",\"npm_package_devDependencies_less\":\"^3.12.2\",\"npm_config_bin_links\":\"true\",\"npm_config_key\":\"\",\"SSH_AGENT_PID\":\"12249\",\"XDG_SESSION_TYPE\":\"x11\",\"npm_package_devDependencies_file_loader\":\"^6.1.1\",\"npm_package_devDependencies_postcss_preset_env\":\"^6.7.0\",\"npm_config_description\":\"true\",\"npm_config_fetch_retries\":\"2\",\"npm_config_heading\":\"npm\",\"npm_config_init_version\":\"1.0.0\",\"npm_config_allow_same_version\":\"\",\"npm_config_if_present\":\"\",\"npm_config_user\":\"\",\"npm_node_execpath\":\"/usr/local/bin/node\",\"SHLVL\":\"1\",\"npm_package_devDependencies_babel_preset_es2015\":\"*\",\"npm_package_devDependencies_chai_http\":\"^4.3.0\",\"npm_package_devDependencies_vue_router\":\"^3.4.7\",\"npm_config_prefer_online\":\"\",\"npm_config_noproxy\":\"\",\"HOME\":\"/home/rumarocket\",\"OLDPWD\":\"/home/rumarocket/eclipse-workspace\",\"npm_package_devDependencies_babel_preset_es2016\":\"*\",\"npm_config_force\":\"\",\"DESKTOP_SESSION\":\"ubuntu\",\"npm_config_only\":\"\",\"npm_config_read_only\":\"\",\"npm_package_engines_node\":\">=12.0\",\"npm_package_devDependencies_chai\":\"^4.2.0\",\"npm_config_cache_min\":\"10\",\"npm_config_init_license\":\"ISC\",\"GNOME_SHELL_SESSION_MODE\":\"ubuntu\",\"GTK_MODULES\":\"gail:atk-bridge\",\"npm_config_editor\":\"vi\",\"npm_config_rollback\":\"true\",\"npm_config_tag_version_prefix\":\"v\",\"LC_MONETARY\":\"en_DK.UTF-8\",\"MANAGERPID\":\"10564\",\"npm_package_devDependencies_stylelint_config_standard\":\"^20.0.0\",\"npm_config_cache_max\":\"Infinity\",\"npm_config_userconfig\":\"/home/rumarocket/.npmrc\",\"npm_config_timing\":\"\",\"DBUS_SESSION_BUS_ADDRESS\":\"unix:path=/run/user/1000/bus\",\"npm_package_dependencies_dotenv\":\"^8.2.0\",\"npm_package_devDependencies_html_minifier\":\"^4.0.0\",\"npm_package_devDependencies_nyc\":\"^15.1.0\",\"npm_config_tmp\":\"/tmp\",\"npm_config_engine_strict\":\"\",\"npm_config_init_author_name\":\"\",\"npm_config_init_author_url\":\"\",\"npm_config_preid\":\"\",\"COLORTERM\":\"truecolor\",\"npm_package_description\":\"My Portfolio\",\"npm_package_devDependencies_babel_loader\":\"^8.1.0\",\"npm_package_devDependencies_eslint_config_es2015\":\"*\",\"npm_config_depth\":\"Infinity\",\"npm_config_package_lock_only\":\"\",\"npm_config_save_dev\":\"\",\"npm_config_usage\":\"\",\"npm_package_scripts_watch_server\":\"nodemon --exec 'npm run server'\",\"npm_package_homepage\":\"https://github.com/Latsuj/Lj2#readme\",\"npm_package_devDependencies__babel_preset_env\":\"^7.12.1\",\"npm_package_readmeFilename\":\"readme.md\",\"npm_config_metrics_registry\":\"https://registry.npmjs.org/\",\"npm_config_package_lock\":\"true\",\"npm_config_progress\":\"true\",\"npm_config_cafile\":\"\",\"npm_config_otp\":\"\",\"npm_config_https_proxy\":\"\",\"npm_config_save_prod\":\"\",\"MANDATORY_PATH\":\"/usr/share/gconf/ubuntu.mandatory.path\",\"QT_QPA_PLATFORMTHEME\":\"appmenu-qt5\",\"IM_CONFIG_PHASE\":\"1\",\"npm_package_scripts_dev\":\"webpack --mode development --config config/dev.config.js\",\"npm_package_devDependencies_prettier\":\"^2.1.2\",\"npm_config_audit\":\"true\",\"npm_config_sso_type\":\"oauth\",\"npm_config_cidr\":\"\",\"npm_config_onload_script\":\"\",\"LOGNAME\":\"rumarocket\",\"npm_package_devDependencies_vue_template_compiler\":\"^2.6.12\",\"npm_config_rebuild_bundle\":\"true\",\"npm_config_shell\":\"/bin/bash\",\"npm_config_save_bundle\":\"\",\"JOURNAL_STREAM\":\"9:47226\",\"_\":\"/usr/local/bin/npm\",\"npm_package_dependencies_express\":\"^4.17.1\",\"npm_config_prefix\":\"/usr/local\",\"npm_config_dry_run\":\"\",\"XDG_SESSION_CLASS\":\"user\",\"DEFAULTS_PATH\":\"/usr/share/gconf/ubuntu.default.path\",\"npm_package_devDependencies_vue\":\"^2.6.12\",\"npm_config_scope\":\"\",\"npm_config_cache_lock_wait\":\"10000\",\"npm_config_registry\":\"https://registry.npmjs.org/\",\"npm_config_browser\":\"\",\"npm_config_ignore_prepublish\":\"\",\"npm_config_save_optional\":\"\",\"npm_config_searchopts\":\"\",\"npm_config_versions\":\"\",\"USERNAME\":\"rumarocket\",\"TERM\":\"xterm-256color\",\"npm_package_devDependencies__babel_core\":\"^7.12.3\",\"npm_package_devDependencies_stylelint\":\"^13.7.2\",\"npm_config_cache\":\"/home/rumarocket/.npm\",\"npm_config_proxy\":\"\",\"npm_config_send_metrics\":\"\",\"GNOME_DESKTOP_SESSION_ID\":\"this-is-deprecated\",\"npm_package_scripts_start\":\"node -e 'require(\\\"./server/index\\\").start()'\",\"npm_package_dependencies_mongodb\":\"^3.6.2\",\"npm_package_devDependencies_html_webpack_plugin\":\"^4.5.0\",\"npm_config_global_style\":\"\",\"npm_config_ignore_scripts\":\"\",\"npm_config_version\":\"\",\"GTK2_MODULES\":\"overlay-scrollbar\",\"WINDOWPATH\":\"2\",\"npm_package_dependencies_axios\":\"^0.21.0\",\"npm_package_devDependencies_postcss_loader\":\"^4.0.4\",\"npm_config_viewer\":\"man\",\"npm_config_node_gyp\":\"/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js\",\"npm_config_local_address\":\"\",\"PATH\":\"/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/rumarocket/eclipse-workspace/PORTFOLIO-master/node_modules/.bin:/home/rumarocket/bin:/home/rumarocket/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/mssql-tools/bin:~/azuredatastudio-linux-x64\",\"SESSION_MANAGER\":\"local/rumarocket:@/tmp/.ICE-unix/12282,unix/rumarocket:/tmp/.ICE-unix/12282\",\"INVOCATION_ID\":\"8b7d25de5e5a4f8d8b15c309bf141400\",\"PAPERSIZE\":\"a4\",\"NODE\":\"/usr/local/bin/node\",\"npm_package_name\":\"Latsuj\",\"npm_package_repository_type\":\"git\",\"npm_config_audit_level\":\"low\",\"npm_config_prefer_offline\":\"\",\"XDG_MENU_PREFIX\":\"gnome-\",\"LC_ADDRESS\":\"en_DK.UTF-8\",\"GNOME_TERMINAL_SCREEN\":\"/org/gnome/Terminal/screen/6e5745d1_b2a9_4543_a8be_234bafb75407\",\"XDG_RUNTIME_DIR\":\"/run/user/1000\",\"npm_config_color\":\"true\",\"npm_config_sign_git_commit\":\"\",\"DISPLAY\":\":1\",\"npm_package_devDependencies_webpack_merge\":\"^5.2.0\",\"npm_config_fetch_retry_mintimeout\":\"10000\",\"npm_config_maxsockets\":\"50\",\"npm_config_sso_poll_frequency\":\"500\",\"npm_config_offline\":\"\",\"LANG\":\"en_US.UTF-8\",\"XDG_CURRENT_DESKTOP\":\"ubuntu:GNOME\",\"LC_TELEPHONE\":\"en_DK.UTF-8\",\"npm_package_dependencies_winston\":\"^3.3.3\",\"npm_package_devDependencies_eslint\":\"^7.12.0\",\"npm_package_devDependencies_webpack\":\"^5.2.0\",\"npm_config_umask\":\"0002\",\"XMODIFIERS\":\"@im=ibus\",\"XDG_SESSION_DESKTOP\":\"ubuntu\",\"XAUTHORITY\":\"/run/user/1000/gdm/Xauthority\",\"LS_COLORS\":\"rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:\",\"GNOME_TERMINAL_SERVICE\":\":1.102\",\"npm_package_main\":\"server/index.js\",\"npm_package_devDependencies_copy_webpack_plugin\":\"^6.2.1\",\"npm_package_devDependencies_html_loader\":\"^1.3.2\",\"npm_package_gitHead\":\"01a7d3b5eafd3465a4c0251fbb253676a200eb56\",\"npm_config_fetch_retry_maxtimeout\":\"60000\",\"npm_config_loglevel\":\"notice\",\"npm_config_logs_max\":\"10\",\"npm_config_message\":\"%s\",\"npm_lifecycle_script\":\"webpack --mode development --config config/dev.config.js\",\"SSH_AUTH_SOCK\":\"/run/user/1000/keyring/ssh\",\"npm_package_scripts_test\":\"nyc --reporter=html --reporter=text ava tests/**/*.js ava tests/**/**/*.js --verbose --timeout=1m\",\"npm_package_devDependencies_lqip_loader\":\"^2.2.1\",\"npm_config_ca\":\"\",\"npm_config_cert\":\"\",\"npm_config_global\":\"\",\"npm_config_link\":\"\",\"SHELL\":\"/bin/bash\",\"LC_NAME\":\"en_DK.UTF-8\",\"npm_package_version\":\"1.0.0\",\"npm_package_repository_url\":\"git+https://github.com/Latsuj/Lj2.git\",\"npm_package_devDependencies_less_loader\":\"^7.0.2\",\"npm_config_save\":\"true\",\"npm_config_unicode\":\"true\",\"npm_config_access\":\"\",\"npm_config_also\":\"\",\"npm_lifecycle_event\":\"dev\",\"QT_ACCESSIBILITY\":\"1\",\"GDMSESSION\":\"ubuntu\",\"npm_package_scripts_build\":\"webpack --mode production --config config/prod.config.js\",\"npm_package_devDependencies_coveralls\":\"^3.1.0\",\"npm_config_argv\":\"{\\\"remain\\\":[],\\\"cooked\\\":[\\\"run\\\",\\\"dev\\\"],\\\"original\\\":[\\\"run\\\",\\\"dev\\\"]}\",\"npm_config_searchlimit\":\"20\",\"npm_config_unsafe_perm\":\"true\",\"npm_config_update_notifier\":\"true\",\"npm_config_before\":\"\",\"npm_config_long\":\"\",\"npm_config_production\":\"\",\"LESSCLOSE\":\"/usr/bin/lesspipe %s %s\",\"npm_package_author\":\"\",\"npm_package_dependencies_nodemon\":\"^2.0.6\",\"npm_config_auth_type\":\"legacy\",\"npm_config_node_version\":\"12.11.0\",\"npm_config_tag\":\"latest\",\"LC_MEASUREMENT\":\"en_DK.UTF-8\",\"npm_config_git_tag_version\":\"true\",\"npm_config_commit_hooks\":\"true\",\"npm_config_shrinkwrap\":\"true\",\"npm_config_script_shell\":\"\",\"GPG_AGENT_INFO\":\"/run/user/1000/gnupg/S.gpg-agent:0:1\",\"LC_IDENTIFICATION\":\"en_DK.UTF-8\",\"npm_package_license\":\"MIT\",\"npm_package_dependencies_mongoose\":\"^5.10.10\",\"npm_config_fetch_retry_factor\":\"10\",\"npm_config_strict_ssl\":\"true\",\"npm_config_save_exact\":\"\",\"QT_IM_MODULE\":\"ibus\",\"npm_package_scripts_coverage\":\"nyc report --reporter=text-lcov | coveralls\",\"npm_package_devDependencies_ava\":\"^3.13.0\",\"npm_package_devDependencies_style_loader\":\"^2.0.0\",\"npm_config_globalconfig\":\"/usr/local/etc/npmrc\",\"npm_config_init_module\":\"/home/rumarocket/.npm-init.js\",\"npm_config_dev\":\"\",\"npm_config_parseable\":\"\",\"PWD\":\"/home/rumarocket/eclipse-workspace/PORTFOLIO-master\",\"npm_config_globalignorefile\":\"/usr/local/etc/npmignore\",\"npm_execpath\":\"/usr/local/lib/node_modules/npm/bin/npm-cli.js\",\"XDG_CONFIG_DIRS\":\"/etc/xdg/xdg-ubuntu:/etc/xdg\",\"XDG_DATA_DIRS\":\"/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop:/var/lib/snapd/desktop\",\"npm_package_scripts_seed\":\"node -e 'require(\\\"./seeding/seeder.js\\\").seed()'\",\"npm_package_devDependencies_css_loader\":\"^5.0.0\",\"npm_package_devDependencies_image_webpack_loader\":\"^7.0.1\",\"npm_config_cache_lock_retries\":\"10\",\"npm_config_searchstaleness\":\"900\",\"LC_NUMERIC\":\"en_DK.UTF-8\",\"npm_package_scripts_watch\":\"nodemon --watch \\\"src/\\\" -x \\\"npm run dev\\\"\",\"npm_package_devDependencies_eslint_plugin_vue\":\"^7.1.0\",\"npm_package_devDependencies_html_minifier_loader\":\"*\",\"npm_package_devDependencies_postcss\":\"^8.1.4\",\"npm_config_save_prefix\":\"^\",\"npm_config_scripts_prepend_node_path\":\"warn-only\",\"npm_config_node_options\":\"\",\"LC_PAPER\":\"en_DK.UTF-8\",\"npm_package_devDependencies_babel_eslint\":\"^10.1.0\",\"npm_package_devDependencies_stylelint_webpack_plugin\":\"^2.1.1\",\"npm_config_group\":\"1000\",\"npm_config_init_author_email\":\"\",\"npm_config_searchexclude\":\"\",\"VTE_VERSION\":\"6003\",\"NODE_ENV\":\"development\",\"npm_package_dependencies_mongo_uri_builder\":\"^3.2.2\",\"npm_config_git\":\"git\",\"npm_config_optional\":\"true\",\"INIT_CWD\":\"/home/rumarocket/eclipse-workspace/PORTFOLIO-master\",\"npm_config_json\":\"\",\"API_NAME\":\"JUSTALK-SERVER\",\"HOST\":\"localhost\",\"PORT\":\"8080\",\"PROTOCOL\":\"http\",\"DB_NAME\":\"justalk\",\"DB_URI_DATA\":\"mongodb://localhost:27017/\",\"DB_URI_LOG\":\"mongodb://localhost:27017/logs\",\"DB_USER_DATA\":\"\",\"DB_PASS_DATA\":\"\",\"DB_HOST_LOG\":\"localhost\",\"DB_PORT_LOG\":\"27017\",\"DB_NAME_LOG\":\"logs\",\"DB_USER_LOG\":\"\",\"DB_PASS_LOG\":\"\"}.PORT;\n\t}\n}\n\n\n//# sourceURL=webpack://Latsuj/./src/helper/utils.js?");
/***/ }),
@@ -2317,7 +2540,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue_
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! axios */ \"./node_modules/axios/index.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_0__);\n\n\nconst axios_call = async (url, params = {}) => {\n\tconst result = await axios__WEBPACK_IMPORTED_MODULE_0___default().get(url, params);\n\tif (result !== null && result.status === 200) {\n\t\treturn result.data;\n\t}\n\treturn null;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n get_projects: async () => {\n\t\treturn axios_call('http://localhost:8080/api/articles');\n\t},\n get_projects_by_page: async (page=0,tags='') => {\n\t\treturn axios_call('http://localhost:8080/api/articles', {params: {page: page, tags: tags}})\n\t},\n\tget_pages: async (name) => {\n\t\treturn axios_call('http://localhost:8080/api/pages', {params: {name: name}});\n\t},\n\tget_project_by_id: async (id) => {\n\t\treturn axios_call('http://localhost:8080/api/articles/one', {params: {id: id}});\n\t},\n\tget_project_by_slug: async (slug) => {\n\t\treturn axios_call('http://localhost:8080/api/articles/one', {params: {slug: slug}});\n\t},\n get_tags: async () => {\n\t\treturn axios_call('http://localhost:8080/api/tags');\n\t},\n\tget_my_identity: async () => {\n\t\treturn axios_call('http://localhost:8080/api/contacts/my-identity');\n\t}\n});\n\n\n//# sourceURL=webpack://Latsuj/./src/services/api.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! axios */ \"./node_modules/axios/index.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _helper_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helper/utils */ \"./src/helper/utils.js\");\n/* harmony import */ var _helper_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_helper_utils__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\nconst axios_call = async (url, params = {}) => {\n\tconst result = await axios__WEBPACK_IMPORTED_MODULE_0___default().get(url, params);\n\tif (result !== null && result.status === 200) {\n\t\treturn result.data;\n\t}\n\treturn null;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n get_projects: async () => {\n\t\treturn axios_call(_helper_utils__WEBPACK_IMPORTED_MODULE_1___default().get_server_address() + '/api/articles');\n\t},\n get_projects_by_page: async (page=0,tags='') => {\n\t\treturn axios_call(_helper_utils__WEBPACK_IMPORTED_MODULE_1___default().get_server_address() + '/api/articles', {params: {page: page, tags: tags}})\n\t},\n\tget_pages: async name => {\n\t\treturn axios_call(_helper_utils__WEBPACK_IMPORTED_MODULE_1___default().get_server_address() + '/api/pages', {params: {name: name}});\n\t},\n\tget_project_by_id: async id => {\n\t\treturn axios_call(_helper_utils__WEBPACK_IMPORTED_MODULE_1___default().get_server_address() + '/api/articles/one', {params: {id: id}});\n\t},\n\tget_project_by_slug: async slug => {\n\t\treturn axios_call(_helper_utils__WEBPACK_IMPORTED_MODULE_1___default().get_server_address() + '/api/articles/one', {params: {slug: slug, populate: true}});\n\t},\n\tget_slide_by_id: async id => {\n\t\treturn axios_call(_helper_utils__WEBPACK_IMPORTED_MODULE_1___default().get_server_address() + '/api/slides/one', {params: {id: id}});\n\t},\n get_tags: async () => {\n\t\treturn axios_call(_helper_utils__WEBPACK_IMPORTED_MODULE_1___default().get_server_address() + '/api/tags');\n\t},\n\tget_my_identity: async () => {\n\t\treturn axios_call(_helper_utils__WEBPACK_IMPORTED_MODULE_1___default().get_server_address() + '/api/contacts/my-identity');\n\t}\n});\n\n\n//# sourceURL=webpack://Latsuj/./src/services/api.js?");
/***/ })
diff --git a/documentation/imgs/project/mq_home.jpg b/documentation/imgs/project/mq_home.jpg
new file mode 100644
index 0000000..f760fa5
Binary files /dev/null and b/documentation/imgs/project/mq_home.jpg differ
diff --git a/documentation/imgs/project/mq_portfolio.jpg b/documentation/imgs/project/mq_portfolio.jpg
new file mode 100644
index 0000000..5a17311
Binary files /dev/null and b/documentation/imgs/project/mq_portfolio.jpg differ
diff --git a/env/.env.dev b/env/.env.development
similarity index 88%
rename from env/.env.dev
rename to env/.env.development
index 2be942e..8a0f29b 100644
--- a/env/.env.dev
+++ b/env/.env.development
@@ -1,8 +1,9 @@
-NODE_ENV=production
+NODE_ENV=development
API_NAME=JUSTALK-SERVER
HOST=localhost
PORT=8080
+PROTOCOL=http
DB_NAME=justalk
DB_URI_DATA=mongodb://localhost:27017/
diff --git a/env/.env.production b/env/.env.production
index 2be942e..e3bf5e3 100644
--- a/env/.env.production
+++ b/env/.env.production
@@ -3,6 +3,7 @@ NODE_ENV=production
API_NAME=JUSTALK-SERVER
HOST=localhost
PORT=8080
+BASE_URL=http://localhost:8080/
DB_NAME=justalk
DB_URI_DATA=mongodb://localhost:27017/
diff --git a/package.json b/package.json
index 4266c7c..2ea9753 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,7 @@
"build": "webpack --mode production --config config/prod.config.js",
"watch": "nodemon --watch \"src/\" -x \"npm run dev\"",
"watch-server": "nodemon --exec 'npm run server'",
- "server": "node -e 'require(\"./server/index\").start()'",
+ "start": "node -e 'require(\"./server/index\").start()'",
"test": "nyc --reporter=html --reporter=text ava tests/**/*.js ava tests/**/**/*.js --verbose --timeout=1m",
"coverage": "nyc report --reporter=text-lcov | coveralls"
},
diff --git a/seeding/datas/articles/articles.js b/seeding/datas/articles/articles.js
index 96d1260..82f759a 100644
--- a/seeding/datas/articles/articles.js
+++ b/seeding/datas/articles/articles.js
@@ -6,7 +6,7 @@ module.exports = [
{
title: "Portfolio",
slug: "portfolio",
- short_description: "A website for describing my work",
+ short_description: "A website for showing some of my work to the world.",
long_description: "laa laa laa laa laa laa laa laa laa laa laa laa laa laa laa laa laa laa laa laa laa laa laa laa laa laa",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5873"),
@@ -22,13 +22,18 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5872")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00002")],
+ slides: [
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa9001"),
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa9002")
+ ],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa80001"),
order: -1
},
{
title: "Altantic Grains App",
slug: "atlantic-grains",
- short_description: "An applications for managing trucks, stocks and deliveries",
- long_description: "lq lq lq lq lq lq lq lq lq lq lq lq lq lq lq lq lq lq lq lq lq lq lq lq lq lq lq lq lq",
+ short_description: "An applications for managing clients, sales, processes, trucks, stocks and deliveries.",
+ long_description: "A complexe React application for android and Iphone coupled with a Node.js for the backend connected to MongoDB and MS SQL Server.",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5874"),
mongoose.Types.ObjectId("5f95461688489acdd8ee5876"),
@@ -40,12 +45,17 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5871")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00003")],
+ slides: [
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa1001"),
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa1002")
+ ],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00001"),
order: 0
},
{
title: "Predictive Insights",
slug: "predictive-insights",
- short_description: "A web-app for managing the hiring process",
+ short_description: "A web-application for helping on the managing of employees and on the hiring process by using artificial intelligence.",
long_description: "lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw lw",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5874"),
@@ -58,23 +68,29 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5871")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00001")],
+ slides: [
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa2001"),
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa2002")
+ ],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8caa123001"),
order: 1
},
{
title: "COVID19PH API",
slug: "covid19ph-api",
- short_description: "An api for getting the latest cases in the Philippines",
+ short_description: "An REST API for getting all the informations about the cases in the Philippines by using the data from the csv of DOH.",
long_description: "lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5872")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00027")],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8caad00001"),
order: 2
},
{
title: "Citiglobal Nudge",
slug: "citiglobal-nudge",
- short_description: "A backend app for managing the performance of their employee",
+ short_description: "A backend app for keeping the whole company updated about the work of their employees and managers.",
long_description: "le le le le le le le le le le le le le le le le le le le le le le le le le le le le le le le le le le le le le le le le le le le",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5877"),
@@ -84,12 +100,17 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5871")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00004")],
+ slides: [
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa3001"),
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa3002")
+ ],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8caac00001"),
order: 2
},
{
title: "Bounty AI",
slug: "bounty-ai",
- short_description: "A web-app for finding the best location for malls",
+ short_description: "A web-app for predicting the best location for building a futur malls by using artificial intelligence.",
long_description: "lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5874"),
@@ -101,12 +122,17 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5871")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00005")],
+ slides: [
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa4001"),
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa4002")
+ ],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8caab00001"),
order: 3
},
{
title: "Labonapp",
slug: "labonapp",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "A web-app for discovering the restaurant around you, getting the latest promotions and making reservations.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5880"),
@@ -118,12 +144,17 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5871")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00006")],
+ slides: [
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa5001"),
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa5002")
+ ],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa60001"),
order: 4
},
{
title: "Happee",
slug: "happee",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "A website for renting a motorvan to a private individual, discovering new destinations and getting informations about travelling in motorvan.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5880"),
@@ -135,12 +166,17 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5871")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00013")],
+ slides: [
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa6001"),
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa6002")
+ ],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa40001"),
order: 5
},
{
title: "ID Newsletter",
slug: "id-newsletter",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "A website for sending, programming and designing newsletter with a very simple UI.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5880"),
@@ -150,12 +186,17 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5871")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00014")],
+ slides: [
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa7001"),
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa7002")
+ ],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa50001"),
order: 6
},
{
title: "Promarine",
slug: "promarine",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "A website for showing the latest news of promarine and selling boats.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5880"),
@@ -165,12 +206,17 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5871")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00016")],
+ slides: [
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa8001"),
+ mongoose.Types.ObjectId("5f76018c9b16e910daaa8002")
+ ],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8c0a900001"),
order: 7
},
{
title: "Saona Villas",
slug: "saona-villas",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "A multilanguage website for renting beautiful villas in different countries accross the world.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5880"),
@@ -180,12 +226,13 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5871")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00018")],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8c2a900001"),
order: 8
},
{
title: "Maison Lucas",
slug: "maison-lucas",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "A website for selling premium sea food and ordering special sea food meal from a professional chef.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5875"),
@@ -195,12 +242,13 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5871")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00015")],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa70001"),
order: 9
},
{
title: "Gouter Magique",
slug: "gouter-magique",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "A website for showing the latest delicious cake from the famous Wahou factory.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5880"),
@@ -210,12 +258,13 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5871")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00012")],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa30001"),
order: 10
},
{
- title: "Foire Au Vin",
- slug: "foire-au-vin",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ title: "Le gout du vin",
+ slug: "le-gout-du-vin-56",
+ short_description: "A website for giving all the latest news and events about wines and some alcohol in Britany.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5880"),
@@ -225,12 +274,13 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5871")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00011")],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa10001"),
order: 11
},
{
title: "Finister Assurance",
slug: "finistere assurance",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "The official website of the Finister Assurance insurrance based in Britany.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5880"),
@@ -240,12 +290,13 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5871")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00010")],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8caafa0001"),
order: 12
},
{
title: "Sails Concept",
slug: "sails-concept",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "A website for presenting boats of Sails Concepts and for creating and designing your custom sails.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5880"),
@@ -255,12 +306,13 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5871")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00017")],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8c1a900001"),
order: 13
},
{
title: "David Paysages",
slug: "david-paysages",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "A website for presenting the work of the landscaper and artist David Paysage.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5880"),
@@ -270,12 +322,13 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5871")
],
images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00008")],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e8caae00001"),
order: 14
},
{
title: "EMD Pro",
slug: "emd-pro",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "A website for selling professional equipements for armies. No weapons are sold on this website !",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5875"),
@@ -283,13 +336,14 @@ module.exports = [
mongoose.Types.ObjectId("5f95461688489acdd8ee5876"),
mongoose.Types.ObjectId("5f95461688489acdd8ee5871")
],
- images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8c4dc00009")],
+ images: [ mongoose.Types.ObjectId("5f9d88d3faed1e8caaf00001")],
+ background_image: mongoose.Types.ObjectId("5f9d88d3faed1e81aaf00001"),
order: 15
},
{
title: "Zipworld",
slug: "zipworld",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "A website for presenting the tours of Zipworld and booking flights at the lowest price possible.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5889"),
@@ -305,7 +359,7 @@ module.exports = [
{
title: "Onarto",
slug: "onarto",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "A website for selling Thai painting and scultures, presenting the best events in Bangkok involving arts and giving informations about arts in general.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5875"),
@@ -321,7 +375,7 @@ module.exports = [
{
title: "Odyssea",
slug: "odyssea",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "The official website for the association Odyssea who create events and raise money for the research against the breast cancer.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5875"),
@@ -337,7 +391,7 @@ module.exports = [
{
title: "Le monde de Zip",
slug: "le-monde-de-zip",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "A website giving a lot of advises about what are the countries to visit or those who are to be avoid.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5889"),
@@ -353,7 +407,7 @@ module.exports = [
{
title: "El Mercado",
slug: "el-mercado",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "A website for selling imported food from Europe in Thailand.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5875"),
@@ -369,7 +423,7 @@ module.exports = [
{
title: "Ogocare",
slug: "ogocare",
- short_description: "A web-app for making a reservation to a restaurant in Britany",
+ short_description: "A website for finding and getting informations about the best hospital in Thailand around you.",
long_description: "ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly ly",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5889"),
@@ -385,7 +439,7 @@ module.exports = [
{
title: "Pornhub API",
slug: "pornhub-api",
- short_description: "An api for scrapping the infamous website",
+ short_description: "A REST API for scrapping the famous porn website",
long_description: "lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5872")
@@ -396,7 +450,7 @@ module.exports = [
{
title: "Anime API",
slug: "anime-api",
- short_description: "An api for finding streaming or downloading links for animes",
+ short_description: "A REST API for finding streaming or downloading links for animes on multiple website instantly.",
long_description: "lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr lr",
tags: [
mongoose.Types.ObjectId("5f95461688489acdd8ee5872")
diff --git a/seeding/datas/images/atlantic_grains.js b/seeding/datas/images/atlantic_grains.js
new file mode 100644
index 0000000..37e1925
--- /dev/null
+++ b/seeding/datas/images/atlantic_grains.js
@@ -0,0 +1,21 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00001"),
+ name: "Atlantic Grains Background",
+ path: "./assets/imgs/atlantic-grains/background.jpg"
+ },
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00002"),
+ name: "Atlantic Grains Slide 01",
+ path: "./assets/imgs/atlantic-grains/slide_01.jpg"
+ },
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00003"),
+ name: "Atlantic Grains Slide 02",
+ path: "./assets/imgs/atlantic-grains/slide_02.jpg"
+ }
+]
diff --git a/seeding/datas/images/bounty_ai.js b/seeding/datas/images/bounty_ai.js
new file mode 100644
index 0000000..38876dd
--- /dev/null
+++ b/seeding/datas/images/bounty_ai.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8caab00001"),
+ name: "Bounty Background",
+ path: "./assets/imgs/bounty/background.jpg"
+ }
+]
diff --git a/seeding/datas/images/citiglobal_nudge.js b/seeding/datas/images/citiglobal_nudge.js
new file mode 100644
index 0000000..36af0b0
--- /dev/null
+++ b/seeding/datas/images/citiglobal_nudge.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8caac00001"),
+ name: "Citiglobal Background",
+ path: "./assets/imgs/citiglobal/background.jpg"
+ }
+]
diff --git a/seeding/datas/images/covid19ph_api.js b/seeding/datas/images/covid19ph_api.js
new file mode 100644
index 0000000..476737e
--- /dev/null
+++ b/seeding/datas/images/covid19ph_api.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8caad00001"),
+ name: "COVID 2019 Philippines API Background",
+ path: "./assets/imgs/covid19ph-api/background.jpg"
+ }
+]
diff --git a/seeding/datas/images/david_paysages.js b/seeding/datas/images/david_paysages.js
new file mode 100644
index 0000000..068abfc
--- /dev/null
+++ b/seeding/datas/images/david_paysages.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8caae00001"),
+ name: "David Paysage Background",
+ path: "./assets/imgs/david-paysage/background.jpg"
+ }
+]
diff --git a/seeding/datas/images/emd_pro.js b/seeding/datas/images/emd_pro.js
new file mode 100644
index 0000000..e3ddc31
--- /dev/null
+++ b/seeding/datas/images/emd_pro.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e81aaf00001"),
+ name: "EMD PRO Background",
+ path: "./assets/imgs/emd/background.jpg"
+ }
+]
diff --git a/seeding/datas/images/finistere_assurance.js b/seeding/datas/images/finistere_assurance.js
new file mode 100644
index 0000000..b7cec90
--- /dev/null
+++ b/seeding/datas/images/finistere_assurance.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8caafa0001"),
+ name: "Finistere assurance Background",
+ path: "./assets/imgs/finistere-assurance/background.jpg"
+ }
+]
diff --git a/seeding/datas/images/foire_aux_vins.js b/seeding/datas/images/foire_aux_vins.js
new file mode 100644
index 0000000..90e77c6
--- /dev/null
+++ b/seeding/datas/images/foire_aux_vins.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa10001"),
+ name: "Foire aux vins Background",
+ path: "./assets/imgs/foire-au-vin/background.jpg"
+ }
+]
diff --git a/seeding/datas/images/gouter_magiques.js b/seeding/datas/images/gouter_magiques.js
new file mode 100644
index 0000000..133c349
--- /dev/null
+++ b/seeding/datas/images/gouter_magiques.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa30001"),
+ name: "Gouter Magiques Background",
+ path: "./assets/imgs/gouter-magique/background.jpg"
+ }
+]
diff --git a/seeding/datas/images/hapee.js b/seeding/datas/images/hapee.js
new file mode 100644
index 0000000..db28b70
--- /dev/null
+++ b/seeding/datas/images/hapee.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa40001"),
+ name: "Hapee Background",
+ path: "./assets/imgs/happee/background.jpg"
+ }
+]
diff --git a/seeding/datas/images/id_newsletter.js b/seeding/datas/images/id_newsletter.js
new file mode 100644
index 0000000..69baf1f
--- /dev/null
+++ b/seeding/datas/images/id_newsletter.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa50001"),
+ name: "ID Newsletter Background",
+ path: "./assets/imgs/id-newsletter/background.jpg"
+ }
+]
diff --git a/seeding/datas/images/images.js b/seeding/datas/images/intro.js
similarity index 100%
rename from seeding/datas/images/images.js
rename to seeding/datas/images/intro.js
diff --git a/seeding/datas/images/labonapp.js b/seeding/datas/images/labonapp.js
new file mode 100644
index 0000000..daa48ed
--- /dev/null
+++ b/seeding/datas/images/labonapp.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa60001"),
+ name: "Labonapp Background",
+ path: "./assets/imgs/labonapp/background.jpg"
+ }
+]
diff --git a/seeding/datas/images/maison_lucas.js b/seeding/datas/images/maison_lucas.js
new file mode 100644
index 0000000..997914c
--- /dev/null
+++ b/seeding/datas/images/maison_lucas.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa70001"),
+ name: "Maison Lucas Background",
+ path: "./assets/imgs/maison-lucas/background.jpg"
+ }
+]
diff --git a/seeding/datas/images/portfolio.js b/seeding/datas/images/portfolio.js
new file mode 100644
index 0000000..4b8bb8a
--- /dev/null
+++ b/seeding/datas/images/portfolio.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa80001"),
+ name: "Portfolio Justal Kevin Background",
+ path: "./assets/imgs/portfolio/background.jpg"
+ }
+]
diff --git a/seeding/datas/images/predictive_insight.js b/seeding/datas/images/predictive_insight.js
new file mode 100644
index 0000000..0dc54a7
--- /dev/null
+++ b/seeding/datas/images/predictive_insight.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8caa123001"),
+ name: "Rumarocket Predictive Insights Background",
+ path: "./assets/imgs/rumarocket/background.jpg"
+ }
+]
diff --git a/seeding/datas/images/promarine.js b/seeding/datas/images/promarine.js
new file mode 100644
index 0000000..16a3272
--- /dev/null
+++ b/seeding/datas/images/promarine.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8c0a900001"),
+ name: "Pro Marine Background",
+ path: "./assets/imgs/promarine/background.jpg"
+ }
+]
diff --git a/seeding/datas/images/sails_concept.js b/seeding/datas/images/sails_concept.js
new file mode 100644
index 0000000..e70d361
--- /dev/null
+++ b/seeding/datas/images/sails_concept.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8c1a900001"),
+ name: "Sails Concepts Background",
+ path: "./assets/imgs/sails-concept/background.jpg"
+ }
+]
diff --git a/seeding/datas/images/saona_villas.js b/seeding/datas/images/saona_villas.js
new file mode 100644
index 0000000..bc8156f
--- /dev/null
+++ b/seeding/datas/images/saona_villas.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f9d88d3faed1e8c2a900001"),
+ name: "Saona Villas Background",
+ path: "./assets/imgs/saona-villas/background.jpg"
+ }
+]
diff --git a/seeding/datas/slides/atlantic_grains.js b/seeding/datas/slides/atlantic_grains.js
new file mode 100644
index 0000000..676ebb2
--- /dev/null
+++ b/seeding/datas/slides/atlantic_grains.js
@@ -0,0 +1,20 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa1001"),
+ title: "Presentation",
+ first_text: "This project is an application made for the atlantic-grains company. A product supplier company with many warehouses that deliver all accross the Philippines. With an experience of more than 10 years, they have really optimized processes but most of them was made in paper. A team will then digital those papers and archive everything. They wanted an application for managing easily every parts of their processes more efficiently.",
+ second_text: "The goal was to create an application for managing the deliveries, the products, the sales, the employees and giving report to the differents level of manager and CEO. There are a lot of roles like the drivers, the repairmans, the logistic admins, the logistic warehouses, the guards, the ceo... They all have their own functionnalities and interact with the other roles.",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00002")
+ },
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa1002"),
+ title: "Work",
+ first_text: "My main work for this project was to create the whole REST API, setting the server and the different connection between the different databases. And also helping the frontend as much as possible when I am in advance. This project use Javascript mainly but needed good knowledge on C#. For the frontend, we build everything with React.js and for the backend, I use Restify and MongoDB with Nodejs.",
+ second_text: "The biggest problem encountered was the countless changes of the requierements. Even if I was following the AGILE method, I needed to refactor parts of the app every weeks. The second big problem was the fact that some necessary documents for building the app was not there. I had to create a second API for communicating with their current app written in C#.",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00003")
+ }
+]
diff --git a/seeding/datas/slides/bounty_ai.js b/seeding/datas/slides/bounty_ai.js
new file mode 100644
index 0000000..c554c54
--- /dev/null
+++ b/seeding/datas/slides/bounty_ai.js
@@ -0,0 +1,20 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa4001"),
+ title: "Presentation",
+ first_text: "This project is an application made for multiple company like Chooks To Go, Baliwag and Andoks. All of those concurrent companies are food seller of chicken product. All of them are developing really fast and opening many shops accross the Philippines. We proposed to them to utilize AI for predicting where is the best location for their futur shops.",
+ second_text: "The goal was to create a web application who show the google map, give the user a way to put a proposition of a futur shop on the map and returning him a rank for this shop location based on data from different sources like the frequenting, the parking around, the population in this area, the mall projects incomming...",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00002")
+ },
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa4002"),
+ title: "Work",
+ first_text: "I was the leading developer for this project. I have both hand on the frontend and backend with 2 other developer on my team. On the backend, I use my favorite tool Node.js, Express and MongoDB. And for the frontend, React was the choice. For the server side, t3 instance from aws, nginx and PM2.",
+ second_text: "The biggest problem encountered for this project was the big data that crashed the project many times. The algorithms and the millioms of data to parse was a real struggle. The code needed to be really optimized and the calculations needed to be split into clusters.",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00003")
+ }
+]
diff --git a/seeding/datas/slides/citiglobal_nudge.js b/seeding/datas/slides/citiglobal_nudge.js
new file mode 100644
index 0000000..e8eab55
--- /dev/null
+++ b/seeding/datas/slides/citiglobal_nudge.js
@@ -0,0 +1,20 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa3001"),
+ title: "Presentation",
+ first_text: "This project is an application made for CitiGlobal Realty and Development. A real estate company with many beautiful properties in the Philippines. They wanted an application for sending emails to their employees, managers, executives under certain conditions that we called nudges.",
+ second_text: "The goal was to create something similar with a newsletter but with calculations, differents templates depending of who to send to, dynamic creations of list depending of who fill a report. Everything has to be connected to their existing systems like Typeform, Mailgun, Mailchimp and Rumarocket Software.",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00002")
+ },
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa3002"),
+ title: "Work",
+ first_text: "I was alone on this project for creating the entire backend and setting up the server. I made everything with Nodejs and restify. I also needed to connect to many API like Typeform API for getting the forms, Googlesheet API for getting some of their datas, Mailchimp API for getting the templates.",
+ second_text: "I faced two major problems on this project. First, the API of Mailchimp, I discovered a bug and report it to them. But I still smash my face to the wall trying to understand. Secondly, the calculations was quite enormous, so I often run out of memory on my server. I needed to optimize heavily my application.",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00003")
+ }
+]
diff --git a/seeding/datas/slides/hapee.js b/seeding/datas/slides/hapee.js
new file mode 100644
index 0000000..7d8a9c2
--- /dev/null
+++ b/seeding/datas/slides/hapee.js
@@ -0,0 +1,20 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa6001"),
+ title: "Presentation",
+ first_text: "This project is a website made for Evasia. It's a big company selling motor-home in Europe. With a boost in the sales in the previous years, they wanted to diversify and come to my company with an idea. They wanted an application for making people test camping-car and maybe sell even more.",
+ second_text: "After some long exchange, the final goal was to make an app for renting camping-car from particular. It involves paiement, reservations, browsing between a list of available camping-car with many different filter and a blog for the manager of the website.",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00002")
+ },
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa6002"),
+ title: "Work",
+ first_text: "I was completely alone for this project. I discussed directly with the client, created the documentations and the features requierements, made my own gantts. The timeline was short. I use PHP for the backend and frontend and created everything from scratch. I did not use any CMS.",
+ second_text: "The hardest part of this project was the change made multiple times by the client and the really short deadline. Hopefully for me, I defined the project quite effectively at the beginning so I manage to deliver on time even with the change on the way.",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00003")
+ }
+]
diff --git a/seeding/datas/slides/id_newsletter.js b/seeding/datas/slides/id_newsletter.js
new file mode 100644
index 0000000..fa0d984
--- /dev/null
+++ b/seeding/datas/slides/id_newsletter.js
@@ -0,0 +1,20 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa7001"),
+ title: "Presentation",
+ first_text: "This project is a website made for my company ID-Interactive. Our company was managing a lot of newsletter for different clients and we wanted to automatize that. So we decided to create something similar to Mailchimp and customize it like we want.",
+ second_text: "The goal was to create a website where the client can connect to it, design their own newlestter, can test the website with a limit on the functionnalities, can create and program campaigns, can create list of people and receive logs about their campaigns.",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00002")
+ },
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa7002"),
+ title: "Work",
+ first_text: "I was completely alone for this project. So I was in charge of the frontend and backend. I made the fronted with Angular and the backend was made with PHP. The project was fun since we were the owner of it, so anything was made for us only.",
+ second_text: "The biggest problem I run into was the blacklist of our sending server. That was the first time I learn about how bounce and how server IP are filtered between blacklist and whitelist. I needed to optimize the sending of email in a way to send the maximum of email without being blacklist. It was hard !",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00003")
+ }
+]
diff --git a/seeding/datas/slides/labonnap.js b/seeding/datas/slides/labonnap.js
new file mode 100644
index 0000000..7f004a3
--- /dev/null
+++ b/seeding/datas/slides/labonnap.js
@@ -0,0 +1,20 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa5001"),
+ title: "Presentation",
+ first_text: "This project is an application made for a french association. This is a local alternative to the big and famous app TheFork. They promote local restaurant at the lowest price and at the same time, they help the community by giving the fees from the reservations to a french association helping the homeless persons.",
+ second_text: "The goal was to create a web-app for making or cancelling reservations, for discovering restaurants around your positions, for finding the fatest way to this restaurant. Also, the project includes different way of paiement, splitting the paiement between different bucket.",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00002")
+ },
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa5002"),
+ title: "Work",
+ first_text: "I was the leading developer for this project. I was developing the frontend and the backend with a small team of 2 developers. For the frontend, I use React Native for the mobile app, PHP for the web browser version and for the backend I use PHP too and PhpMyAdmin.",
+ second_text: "I did not encountered any big problems on this project. The project was well defined and the client was cool. I lead the team with AGILE method, putting the ressources where we should focus and we deliver the new features of the project every week with return from the client.",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00003")
+ }
+]
diff --git a/seeding/datas/slides/portfolio.js b/seeding/datas/slides/portfolio.js
new file mode 100644
index 0000000..92419ab
--- /dev/null
+++ b/seeding/datas/slides/portfolio.js
@@ -0,0 +1,20 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa9001"),
+ title: "Presentation",
+ first_text: "This project is a personnal project for presenting my work made over the years. Of course, I cannot present everything since I signed some confidentially papers on some projects. But it presents a big amount of my work.",
+ second_text: "On this project, my goal was to have a cool way to present eveything, how I work and to make something cool that I could present to anyone.",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00002")
+ },
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa9002"),
+ title: "Work",
+ first_text: "I made everything by myself with mainly Node.js for the backend, Vue.js for the frontend, Ubuntu 20 Server for the server. I put everything on a github, so my code, tests and processes can be ananlyzed and read. I made the documentation as explicit as possible.",
+ second_text: "It's basically show off what I can do with times and what tools I know and how I use them.",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00003")
+ }
+]
diff --git a/seeding/datas/slides/predictive_insights.js b/seeding/datas/slides/predictive_insights.js
new file mode 100644
index 0000000..689107a
--- /dev/null
+++ b/seeding/datas/slides/predictive_insights.js
@@ -0,0 +1,20 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa2001"),
+ title: "Presentation",
+ first_text: "This project is an application made for the Rumarocket. A Filipino tech company who choose to put the AI in an app for helps you find and retain the right people for the right mission to help you steer your company in the right direction.",
+ second_text: "The goal was to create an application for easily spotting people struggling in your company, improving the hiring process or even automating it. The projet takes forces by using big datas and artifial intelligences for finding solutions to many problems for the managers. This project was maybe the most exciting work done with Rumarocket. I learnt a lot !",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00002")
+ },
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa2002"),
+ title: "Work",
+ first_text: "For this project, I was in charge of the backend and the server. But I also made development on the frontend because I was quite often ahead. For the backend, I did everything with Nodejs, Restify and MongoDB. For the server, I choose to setup everything on AWS with Nginx and PM2. I also use Monit for getting some automatic report. For the frontend, we went with React.",
+ second_text: "I did not encountered really big problems on this project but with the time given for the project. I could make sure that everything was written well. So I get times to try things and see what was the best solutions or tools. By example, at the beginning, I use Express but I switch to restify because the performance after test was superior.",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00003")
+ }
+]
diff --git a/seeding/datas/slides/promarine.js b/seeding/datas/slides/promarine.js
new file mode 100644
index 0000000..6d98514
--- /dev/null
+++ b/seeding/datas/slides/promarine.js
@@ -0,0 +1,20 @@
+'use strict';
+
+const mongoose = require('mongoose');
+
+module.exports = [
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa8001"),
+ title: "Presentation",
+ first_text: "This project is a website made for Pro Marine. A company who sell boat made in France. They have a big list of different model of boat. They wanted a website for presenting their boat and giving some news about their activities.",
+ second_text: "The goal was to create a small website for presenting everything to their visitors with a custom administration. The website has a listing of boat, a page for the different models and a blog section. We also pay an interest to the SEO since the client wanted the website to show on google.",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00002")
+ },
+ {
+ id: mongoose.Types.ObjectId("5f76018c9b16e910daaa8002"),
+ title: "Work",
+ first_text: "I was in collaboration with a designer for this project. For the code, I made everything from scratch in PHP and PhpMyAdmin. I also have to communicate with the client and giving him the documentation, timelines and answers on the phone to his queries and modifications.",
+ second_text: "The project was simple, so I did not face any problem on this one. The client made some changes on the way but nothing excessive that needed big change. It was a breeze between two big projects.",
+ image: mongoose.Types.ObjectId("5f9d88d3faed1e8caaa00003")
+ }
+]
diff --git a/server/dbs/articles.js b/server/dbs/articles.js
index 08a03c5..f2b6944 100644
--- a/server/dbs/articles.js
+++ b/server/dbs/articles.js
@@ -15,6 +15,14 @@ module.exports = {
get_one: (find) => {
return model
.findOne(find)
+ .populate('background_image')
+ .populate('images');
+ },
+ get_one_populated: (find) => {
+ return model
+ .findOne(find)
+ .populate({path: 'slides', populate: {path: 'image'}})
+ .populate('background_image')
.populate('images');
},
get_count: (find) => {
diff --git a/server/dbs/slides.js b/server/dbs/slides.js
new file mode 100644
index 0000000..2c8a34a
--- /dev/null
+++ b/server/dbs/slides.js
@@ -0,0 +1,13 @@
+'use strict';
+
+const path = require('path');
+const filename = path.basename(__filename, '.js');
+const model = require('../models/' + filename);
+
+module.exports = {
+ get_one: (find) => {
+ return model
+ .findOne(find)
+ .populate('image');
+ }
+};
diff --git a/server/libs/consts.js b/server/libs/consts.js
index 973c628..fb56cf9 100644
--- a/server/libs/consts.js
+++ b/server/libs/consts.js
@@ -2,5 +2,7 @@
module.exports = {
NUMBER_ARTICLES_BY_PAGE: 4,
- SUCCESS_CODE: 200
+ SUCCESS_CODE: 200,
+ BAD_REQUEST_CODE: 400,
+ BAD_REQUEST_MESSAGE: 'Your parameters for this request are not correct.'
};
diff --git a/server/libs/utils.js b/server/libs/utils.js
index 6b61111..ca606c1 100644
--- a/server/libs/utils.js
+++ b/server/libs/utils.js
@@ -8,7 +8,7 @@ module.exports = {
filters[key] = value;
},
add_tags_filter: (filters, key, value) => {
- module.exports.check_and_add_name_filter(filters, key, value, { $all: value });
+ module.exports.check_and_add_name_filter(filters, key, value, { $in: value });
},
add_name_filter: (filters, key, value) => {
module.exports.check_and_add_name_filter(filters, key, value, { $eq: value });
diff --git a/server/models/articles.js b/server/models/articles.js
index f006633..c42c159 100644
--- a/server/models/articles.js
+++ b/server/models/articles.js
@@ -4,6 +4,7 @@ const mongoose = require('mongoose');
const path = require('path');
const filename = path.basename(__filename, '.js');
require('./images');
+require('./slides');
const schema = new mongoose.Schema(
{
@@ -33,6 +34,14 @@ const schema = new mongoose.Schema(
type: mongoose.Schema.Types.ObjectId,
ref: 'images'
} ],
+ background_image: {
+ type: mongoose.Schema.Types.ObjectId,
+ ref: 'images'
+ },
+ slides: [{
+ type: mongoose.Schema.Types.ObjectId,
+ ref: 'slides'
+ }],
order: {
type: Number
}
diff --git a/server/models/slides.js b/server/models/slides.js
new file mode 100644
index 0000000..d37b1a1
--- /dev/null
+++ b/server/models/slides.js
@@ -0,0 +1,38 @@
+'use strict';
+
+const mongoose = require('mongoose');
+const path = require('path');
+const filename = path.basename(__filename, '.js');
+
+const schema = new mongoose.Schema(
+ {
+ title: {
+ type: String,
+ lowercase: true,
+ trim: true,
+ require: true
+ },
+ first_text: {
+ type: String,
+ trim: true,
+ require: true
+ },
+ second_text: {
+ type: String,
+ trim: true,
+ require: true
+ },
+ image: {
+ type: mongoose.Schema.Types.ObjectId,
+ ref: 'images'
+ }
+ },
+ {
+ timestamps: true,
+ collection: filename,
+ toJSON: { virtuals: true },
+ toObject: { virtuals: true }
+ }
+);
+
+module.exports = mongoose.model(filename, schema);
diff --git a/server/routes/apps.js b/server/routes/apps.js
index ba8504b..42f5920 100644
--- a/server/routes/apps.js
+++ b/server/routes/apps.js
@@ -2,9 +2,10 @@
const express = require('express');
const routes = express.Router();
+const constants = require('../libs/consts');
routes.route('/').get(async (request, response) => {
- response.json({
+ response.status(constants.SUCCESS_CODE).json({
name: process.env.API_NAME,
status: 'RUNNING'
});
diff --git a/server/routes/articles.js b/server/routes/articles.js
index 80a73aa..6495ae3 100644
--- a/server/routes/articles.js
+++ b/server/routes/articles.js
@@ -13,7 +13,6 @@ const utils = require('../libs/utils');
routes.route('/').get(async (request, response) => {
const params = {};
utils.add_tags_filter(params, 'tags', request.query.tags);
- utils.add_id_filter(params, '_id', request.query.id);
const limit = constants.NUMBER_ARTICLES_BY_PAGE;
const page = request.query.page === undefined ? 0 : Number(request.query.page);
@@ -21,15 +20,20 @@ routes.route('/').get(async (request, response) => {
const max_page = Math.floor( (total_number_articles - 1) / limit ) + 1;
const skip = page < 0 ? ( (max_page - (-page % max_page) ) % (max_page) ) * limit : (page % (max_page) ) * limit;
const datas = await services.get_all(params, skip, limit);
- response.json(datas);
+ response.status(constants.SUCCESS_CODE).json(datas);
});
routes.route('/one').get(async (request, response) => {
const params = {};
utils.add_id_filter(params, '_id', request.query.id);
utils.add_slug_filter(params, 'slug', request.query.slug);
- const datas = await services.get_one(params);
- response.json(datas);
+ const populate = request.query.populate == '1' ? true : false;
+ if(Object.keys(params).length === 0) {
+ response.status(constants.BAD_REQUEST_CODE).json({message: constants.BAD_REQUEST_MESSAGE});
+ } else {
+ const datas = await services.get_one(params, populate);
+ response.status(constants.SUCCESS_CODE).json(datas);
+ }
});
module.exports = routes;
diff --git a/server/routes/contacts.js b/server/routes/contacts.js
index 4dea685..d4f90f4 100644
--- a/server/routes/contacts.js
+++ b/server/routes/contacts.js
@@ -6,10 +6,11 @@ const path = require('path');
const filename = path.basename(__filename, '.js');
const dbs = require('../dbs/' + filename);
const services = require('../services/' + filename)(dbs);
+const constants = require('../libs/consts');
// Return the list of all the articles
routes.route('/my-identity').get(async (request, response) => {
- response.json(await services.get_my_identity());
+ response.status(constants.SUCCESS_CODE).json(await services.get_my_identity());
});
module.exports = routes;
diff --git a/server/routes/pages.js b/server/routes/pages.js
index ec7c129..477e29d 100644
--- a/server/routes/pages.js
+++ b/server/routes/pages.js
@@ -7,13 +7,14 @@ const filename = path.basename(__filename, '.js');
const dbs = require('../dbs/' + filename);
const services = require('../services/' + filename)(dbs);
const utils = require('../libs/utils');
+const constants = require('../libs/consts');
// Return the list of all the articles
routes.route('/').get(async (request, response) => {
const params = {};
utils.add_name_filter(params, 'name', request.query.name);
const datas = await services.get_all(params);
- response.json(datas);
+ response.status(constants.SUCCESS_CODE).json(datas);
});
module.exports = routes;
diff --git a/server/routes/slides.js b/server/routes/slides.js
new file mode 100644
index 0000000..0226089
--- /dev/null
+++ b/server/routes/slides.js
@@ -0,0 +1,24 @@
+'use strict';
+
+const express = require('express');
+const routes = express.Router();
+const path = require('path');
+const filename = path.basename(__filename, '.js');
+const dbs = require('../dbs/' + filename);
+const services = require('../services/' + filename)(dbs);
+const constants = require('../libs/consts');
+const utils = require('../libs/utils');
+
+routes.route('/one').get(async (request, response) => {
+ const params = {};
+ utils.add_id_filter(params, '_id', request.query.id);
+ if(Object.keys(params).length === 0) {
+ response.status(constants.BAD_REQUEST_CODE).json({message: constants.BAD_REQUEST_MESSAGE});
+ } else {
+ const datas = await services.get_one(params);
+ response.status(constants.SUCCESS_CODE).json(datas);
+ }
+
+});
+
+module.exports = routes;
diff --git a/server/routes/tags.js b/server/routes/tags.js
index 3577b8f..9e364f2 100644
--- a/server/routes/tags.js
+++ b/server/routes/tags.js
@@ -6,10 +6,11 @@ const path = require('path');
const filename = path.basename(__filename, '.js');
const dbs = require('../dbs/' + filename);
const services = require('../services/' + filename)(dbs);
+const constants = require('../libs/consts');
// Return the list of all the articles
routes.route('/').get(async (request, response) => {
- response.json(await services.get_all());
+ response.status(constants.SUCCESS_CODE).json(await services.get_all());
});
module.exports = routes;
diff --git a/server/server.js b/server/server.js
index 0cde5a5..22a16c7 100644
--- a/server/server.js
+++ b/server/server.js
@@ -23,6 +23,7 @@ module.exports = {
module.exports.adding_route('tags', '/api/tags', server);
module.exports.adding_route('contacts', '/api/contacts', server);
module.exports.adding_route('pages', '/api/pages', server);
+ module.exports.adding_route('slides', '/api/slides', server);
server.use(history());
server.use('/api/documentation', express.static('documentation'));
server.use('/', express.static('dev'));
diff --git a/server/services/articles.js b/server/services/articles.js
index 96e68ff..ccb2a3e 100644
--- a/server/services/articles.js
+++ b/server/services/articles.js
@@ -4,8 +4,12 @@ module.exports = dbs => ({
get_all: async (params, skip = 0, limit = null) => {
return dbs.get_all(params, skip, limit);
},
- get_one: async (params) => {
- return dbs.get_one(params);
+ get_one: async (params, populate) => {
+ if (populate) {
+ return dbs.get_one_populated(params);
+ } else {
+ return dbs.get_one(params);
+ }
},
get_count: async (params) => {
return dbs.get_count(params);
diff --git a/server/services/slides.js b/server/services/slides.js
new file mode 100644
index 0000000..dbb5bae
--- /dev/null
+++ b/server/services/slides.js
@@ -0,0 +1,7 @@
+'use strict';
+
+module.exports = dbs => ({
+ get_one: async (params) => {
+ return dbs.get_one(params);
+ }
+});
diff --git a/src/assets/imgs/atlantic-grains/background.jpg b/src/assets/imgs/atlantic-grains/background.jpg
new file mode 100644
index 0000000..9af9ffd
Binary files /dev/null and b/src/assets/imgs/atlantic-grains/background.jpg differ
diff --git a/src/assets/imgs/atlantic-grains/slide_01.jpg b/src/assets/imgs/atlantic-grains/slide_01.jpg
new file mode 100644
index 0000000..b2d3da1
Binary files /dev/null and b/src/assets/imgs/atlantic-grains/slide_01.jpg differ
diff --git a/src/assets/imgs/atlantic-grains/slide_02.jpg b/src/assets/imgs/atlantic-grains/slide_02.jpg
new file mode 100644
index 0000000..52fede0
Binary files /dev/null and b/src/assets/imgs/atlantic-grains/slide_02.jpg differ
diff --git a/src/assets/imgs/bounty/background.jpg b/src/assets/imgs/bounty/background.jpg
new file mode 100644
index 0000000..506cfc7
Binary files /dev/null and b/src/assets/imgs/bounty/background.jpg differ
diff --git a/src/assets/imgs/citiglobal/background.jpg b/src/assets/imgs/citiglobal/background.jpg
new file mode 100644
index 0000000..4c15fe6
Binary files /dev/null and b/src/assets/imgs/citiglobal/background.jpg differ
diff --git a/src/assets/imgs/covid19ph-api/background.jpg b/src/assets/imgs/covid19ph-api/background.jpg
new file mode 100644
index 0000000..8cec969
Binary files /dev/null and b/src/assets/imgs/covid19ph-api/background.jpg differ
diff --git a/src/assets/imgs/david-paysage/background.jpg b/src/assets/imgs/david-paysage/background.jpg
new file mode 100644
index 0000000..cbb2543
Binary files /dev/null and b/src/assets/imgs/david-paysage/background.jpg differ
diff --git a/src/assets/imgs/emd/background.jpg b/src/assets/imgs/emd/background.jpg
new file mode 100644
index 0000000..af32545
Binary files /dev/null and b/src/assets/imgs/emd/background.jpg differ
diff --git a/src/assets/imgs/finistere-assurance/background.jpg b/src/assets/imgs/finistere-assurance/background.jpg
new file mode 100644
index 0000000..8b6c1cc
Binary files /dev/null and b/src/assets/imgs/finistere-assurance/background.jpg differ
diff --git a/src/assets/imgs/foire-au-vin/background.jpg b/src/assets/imgs/foire-au-vin/background.jpg
new file mode 100644
index 0000000..e704259
Binary files /dev/null and b/src/assets/imgs/foire-au-vin/background.jpg differ
diff --git a/src/assets/imgs/fork_github.png b/src/assets/imgs/fork_github.png
deleted file mode 100644
index 10c08f4..0000000
Binary files a/src/assets/imgs/fork_github.png and /dev/null differ
diff --git a/src/assets/imgs/gouter-magique/background.jpg b/src/assets/imgs/gouter-magique/background.jpg
new file mode 100644
index 0000000..28b7ba4
Binary files /dev/null and b/src/assets/imgs/gouter-magique/background.jpg differ
diff --git a/src/assets/imgs/happee/background.jpg b/src/assets/imgs/happee/background.jpg
new file mode 100644
index 0000000..6efafd2
Binary files /dev/null and b/src/assets/imgs/happee/background.jpg differ
diff --git a/src/assets/imgs/id-newsletter/background.jpg b/src/assets/imgs/id-newsletter/background.jpg
new file mode 100644
index 0000000..9ac2a41
Binary files /dev/null and b/src/assets/imgs/id-newsletter/background.jpg differ
diff --git a/src/assets/imgs/labonapp/background.jpg b/src/assets/imgs/labonapp/background.jpg
new file mode 100644
index 0000000..79911e5
Binary files /dev/null and b/src/assets/imgs/labonapp/background.jpg differ
diff --git a/src/assets/imgs/maison-lucas/background.jpg b/src/assets/imgs/maison-lucas/background.jpg
new file mode 100644
index 0000000..42684b6
Binary files /dev/null and b/src/assets/imgs/maison-lucas/background.jpg differ
diff --git a/src/assets/imgs/portfolio/background.jpg b/src/assets/imgs/portfolio/background.jpg
new file mode 100644
index 0000000..9dfc634
Binary files /dev/null and b/src/assets/imgs/portfolio/background.jpg differ
diff --git a/src/assets/imgs/promarine/background.jpg b/src/assets/imgs/promarine/background.jpg
new file mode 100644
index 0000000..221be33
Binary files /dev/null and b/src/assets/imgs/promarine/background.jpg differ
diff --git a/src/assets/imgs/rumarocket/background.jpg b/src/assets/imgs/rumarocket/background.jpg
new file mode 100644
index 0000000..5f9fb6a
Binary files /dev/null and b/src/assets/imgs/rumarocket/background.jpg differ
diff --git a/src/assets/imgs/sails-concept/background.jpg b/src/assets/imgs/sails-concept/background.jpg
new file mode 100644
index 0000000..4de840f
Binary files /dev/null and b/src/assets/imgs/sails-concept/background.jpg differ
diff --git a/src/assets/imgs/saona-villas/background.jpg b/src/assets/imgs/saona-villas/background.jpg
new file mode 100644
index 0000000..78b5604
Binary files /dev/null and b/src/assets/imgs/saona-villas/background.jpg differ
diff --git a/src/assets/less/back.less b/src/assets/less/back.less
index c8b7eb3..eb32995 100644
--- a/src/assets/less/back.less
+++ b/src/assets/less/back.less
@@ -48,10 +48,10 @@
left: -86px;
top: 89px;
transform: rotateZ(-45deg);
- font-size: 14px;
color: @background-bloc-2;
opacity: 1;
user-select: none;
+ .font-size(1.4);
.transition(all 0.5s cubic-bezier(0.8, 0, 0.25, 1) 0.25s);
}
@@ -65,3 +65,18 @@
}
}
}
+
+@media screen and (max-width: @PHONE_MQ) {
+ .back {
+ & a {
+ left: 4px;
+ top: 20px;
+ }
+
+ & span {
+ left: 39px;
+ top: 58px;
+ .font-size(1.5);
+ }
+ }
+}
diff --git a/src/assets/less/github.less b/src/assets/less/github.less
new file mode 100644
index 0000000..f8fccf8
--- /dev/null
+++ b/src/assets/less/github.less
@@ -0,0 +1,49 @@
+@import (reference) "libs/constants.less";
+@import (reference) "libs/mixins.less";
+
+#GITHUB {
+ position: absolute;
+ width: 350px;
+ height: 350px;
+ right: 0;
+ top: 0;
+ cursor: pointer;
+ z-index: 1;
+ box-shadow: 10px 10px @background-shadow;
+ transform: translate(55%, -55%) rotateZ(45deg);
+ .transition(all 0.25s cubic-bezier(0.8, 0, 0.25, 1));
+
+ & span {
+ position: absolute;
+ bottom: 0;
+ text-align: center;
+ width: 100%;
+ background: @text-color-dark;
+ color: @text-color;
+ height: 40px;
+ font-family: 'Lato-Bold', sans-serif;
+ line-height: 40px;
+ text-transform: uppercase;
+ .font-size(1.3);
+ .transition(all 0.35s cubic-bezier(0.8, 0, 0.25, 1));
+ }
+
+ &:hover {
+ box-shadow: none;
+
+ & span {
+ background: @text-color;
+ color: @text-color-white;
+ }
+ }
+
+ &.invisible {
+ transform: translate(100%, -100%) rotateZ(45deg);
+ }
+}
+
+@media screen and (max-width: @PHONE_MQ) {
+ #GITHUB {
+ transform: translate(65%, -65%) rotateZ(45deg);
+ }
+}
diff --git a/src/assets/less/informations.less b/src/assets/less/informations.less
index 76af409..c51662d 100644
--- a/src/assets/less/informations.less
+++ b/src/assets/less/informations.less
@@ -4,27 +4,41 @@
.informations {
& > h1 {
padding-top: 50px;
- height: 50px;
margin: 0;
- line-height: 50px;
color: @text-color-white;
text-transform: uppercase;
- font-size: 2.5em;
+ .font-size(5);
}
& span:nth-child(2) {
margin-top: 20px;
- height: 50px;
text-align: justify;
- line-height: 25px;
- font-size: 1.2em;
+ .font-size(2);
}
& span:nth-child(4) {
margin-top: 20px;
- height: 25px;
margin-bottom: 25px;
- font-size: 14px;
+ .font-size(1.4);
+
font-style: italic;
}
}
+
+@media screen and (max-width: @PHONE_MQ) {
+ .informations {
+ & > h1 {
+ padding-top: 135px;
+ text-align: center;
+ .font-size(6);
+ }
+
+ & span:nth-child(2) {
+ .font-size(2);
+ }
+
+ & span:nth-child(4) {
+ .font-size(1.4);
+ }
+ }
+}
diff --git a/src/assets/less/introduction.less b/src/assets/less/introduction.less
index 6cf7db4..51fb09a 100644
--- a/src/assets/less/introduction.less
+++ b/src/assets/less/introduction.less
@@ -11,7 +11,8 @@
opacity: 0;
color: @text-color;
transform: translateY(-50%);
- font-size: 2em;
+ .font-size(3);
+
font-family: 'Lato-Light', sans-serif;
.transition(all 0.5s cubic-bezier(0.1, 0.59, 0.02, 0.6) 1s);
diff --git a/src/assets/less/introduction_link.less b/src/assets/less/introduction_link.less
index e590048..05dd6d9 100644
--- a/src/assets/less/introduction_link.less
+++ b/src/assets/less/introduction_link.less
@@ -17,11 +17,34 @@
text-transform: uppercase;
cursor: pointer;
transition: color 0.5s cubic-bezier(0.8, 0, 0.25, 1), background 0.5s cubic-bezier(0.8, 0, 0.25, 1), box-shadow 0.5s cubic-bezier(0.8, 0, 0.25, 1), top 0.25s cubic-bezier(0.8, 0, 0.25, 1) 1s;
+ .font-size(1.3);
+ &::after,
+ &::before {
+ content: ' ';
+ width: 100%;
+ height: 100%;
+ border: none;
+ position: absolute;
+ left: 0;
+ .transition(transform 0.3s cubic-bezier(0.8, 0, 0.25, 1) 0.1s);
+ }
+
+ &.active,
&:hover {
background: @text-color;
color: @text-color-white;
box-shadow: none;
+
+ &::before {
+ transform: scale(1.2, 1.4);
+ border: 1px solid @text-color-white;
+ }
+
+ &::after {
+ transform: scale(1.1, 1.8);
+ border: 1px solid @text-color-white;
+ }
}
&.left {
@@ -38,3 +61,9 @@
top: 70%;
}
}
+
+@media screen and (max-width: @PHONE_MQ) {
+ .links-open-door {
+ width: 80%;
+ }
+}
diff --git a/src/assets/less/libs/constants.less b/src/assets/less/libs/constants.less
index ea865cb..ee2d133 100644
--- a/src/assets/less/libs/constants.less
+++ b/src/assets/less/libs/constants.less
@@ -16,6 +16,7 @@
@background-text-animation: #0a2234;
@text-color: #61C3FF;
@text-color-h2: #1d1d23;
+@text-color-h2-lighter: #383840;
@text-color-white: #FFF;
@text-color-less-dark: darken(@text-color, 20%);
@text-color-before-dark: darken(@text-color, 40%);
@@ -32,3 +33,10 @@
@background-bloc-1: darken(@text-color, 20%);
@background-bloc-2: darken(@text-color, 40%);
@background-bloc-3: darken(@text-color, 60%);
+
+@SCREEN_1800: 1800px;
+@SCREEN_1500: 1500px;
+@SCREEN_1400: 1400px;
+@SCREEN_1200: 1200px;
+@SCREEN_1100: 1100px;
+@PHONE_MQ: 900px;
diff --git a/src/assets/less/libs/mixins.less b/src/assets/less/libs/mixins.less
index 794264c..3243283 100644
--- a/src/assets/less/libs/mixins.less
+++ b/src/assets/less/libs/mixins.less
@@ -10,6 +10,14 @@
}
}
+.font-size(@size) {
+ @rem: @size;
+ @px: (@size * 10);
+
+ font-size: ~"@{px}px";
+ font-size: ~"@{rem}rem";
+}
+
.full {
height: 100%;
width: 100%;
diff --git a/src/assets/less/main.less b/src/assets/less/main.less
index 011f114..2ef3ce5 100644
--- a/src/assets/less/main.less
+++ b/src/assets/less/main.less
@@ -10,6 +10,14 @@ a {
.font-face('Lato-Black','../../fonts/Lato-Black', normal, normal);
.font-face(@font-name-1,'../../fonts/Lato-LightItalic', normal, normal);
+html {
+ font-size: 62.5%;
+}
+
+body {
+ overflow-x: hidden;
+}
+
html,
body,
#app {
@@ -22,34 +30,6 @@ body,
height: 100%;
}
-.github {
- position: absolute;
- top: -149px;
- right: -149px;
- background: url('../imgs/fork_github.png');
- width: 149px;
- height: 149px;
- z-index: @LAYER-COUCHE-1;
-}
-
-.mounted {
- .github {
- .transition(all 0.25s cubic-bezier(0.1, 0.59, 0.02, 0.6) 1s);
-
- top: 0;
- right: 0;
- }
-}
-
-.unmounted {
- .github {
- .transition(all 2s cubic-bezier(0.1, 0.59, 0.02, 0.6));
-
- top: -149px;
- right: -149px;
- }
-}
-
#PROJECT,
#PORTFOLIO {
&::before,
@@ -83,119 +63,3 @@ body,
}
}
}
-
-.links-blocks {
- position: absolute;
- width: 20px;
- height: 20px;
- color: #111116;
- overflow: hidden;
- background: @text-color;
- transition: all 1.5s cubic-bezier(0.1, 0.59, 0.02, 0.6);
- font-weight: bold;
-}
-
-.links-background {
- color: #5ef3fb;
- font-weight: bold;
-}
-
-.links-open-door:hover .links-blocks {
- transition: all 20s cubic-bezier(0, 1.07, 0.01, 0.88);
-}
-
-.lb-inside {
- position: absolute;
- width: 1000%;
-}
-
-@position-explosion-right:
- -25px -5px 20deg,
- -52px -52px 78deg,
- -30px -70px 30deg,
- -17px -114px -12deg,
- -14px -60px -12deg,
- 86px -160px 21deg,
- 20px -104px 42deg,
- 97px -75px 16deg,
- 130px -151px -18deg,
- 153px -51px 49deg,
- -48px 49px 57deg,
- -16px 24px 106deg,
- 13px 61px 27deg,
- 46px 36px 96deg,
- 67px 79px 59deg,
- 84px 56px 105deg,
- 148px 47px 91deg,
- 181px 70px -42deg,
- 139px 4px -7deg,
- 185px 21px -33deg;
-
-@position-explosion-left:
- -153px -51px 49deg,
- -130px -151px -18deg,
- -97px -75px 16deg,
- -20px -104px 42deg,
- -86px -160px 21deg,
- 14px -60px -12deg,
- 17px -114px -12deg,
- 30px -70px 30deg,
- 52px -52px 78deg,
- 25px -5px 20deg,
- -185px 21px -33deg,
- -139px 4px -7deg,
- -181px 70px -42deg,
- -148px 47px 91deg,
- -84px 56px 105deg,
- -67px 79px 59deg,
- -46px 36px 96deg,
- -13px 61px 27deg,
- 16px 24px 106deg,
- 48px 49px 57deg;
-
-.generate-lb(@n, @i: 0) when (@i =< @n) {
- .lb-@{i} {
- & when (@i < 10) {
- top: 0;
- left: @i*20px;
-
- & .lb-inside {
- left: -@i*20px;
- }
- }
-
- & when (@i >= 10) {
- top: 20px;
- left: @i*20 - 200px;
-
- & .lb-inside {
- top: -20px;
- left: 200 - @i*20px;
- }
- }
- }
-
- @positionFullRight: extract(@position-explosion-right,(@i+1));
- @positionFullLeft: extract(@position-explosion-left,(@i+1));
- @positionXright: extract(@positionFullRight, 1);
- @positionYright: extract(@positionFullRight, 2);
- @rotationZright: extract(@positionFullRight, 3);
- @positionXleft: extract(@positionFullLeft, 1);
- @positionYleft: extract(@positionFullLeft, 2);
- @rotationZleft: extract(@positionFullLeft, 3);
- .links-open-door.left:hover .lb-@{i} {
- transform: translate(@positionXleft, @positionYleft) rotateZ(@rotationZleft);
- }
- .links-open-door.right:hover .lb-@{i} {
- transform: translate(@positionXright, @positionYright) rotateZ(@rotationZright);
- }
- .generate-lb(@n, (@i + 1));
-}
-
-.generate-lb(20);
-
-#header {
- position: absolute;
- top: 0;
- right: 0;
-}
diff --git a/src/assets/less/portfolio.less b/src/assets/less/portfolio.less
index 74e8a7c..7620d22 100644
--- a/src/assets/less/portfolio.less
+++ b/src/assets/less/portfolio.less
@@ -3,12 +3,51 @@
#PORTFOLIO {
height: 100%;
- max-width: 1000px;
- margin: auto;
+ position: relative;
+ overflow-x: hidden;
& > div {
+ margin: auto;
+ max-width: 1200px;
width: 100%;
height: 100%;
position: relative;
}
}
+
+@media screen and (max-width: @SCREEN_1800) {
+ #PORTFOLIO > div {
+ max-width: 1200px;
+ }
+}
+
+@media screen and (max-width: @SCREEN_1500) {
+ #PORTFOLIO > div {
+ max-width: 1000px;
+ }
+}
+
+@media screen and (max-width: @SCREEN_1400) {
+ #PORTFOLIO > div {
+ max-width: 900px;
+ }
+}
+
+@media screen and (max-width: @SCREEN_1200) {
+ #PORTFOLIO > div {
+ max-width: 800px;
+ }
+}
+
+@media screen and (max-width: @SCREEN_1100) {
+ #PORTFOLIO > div {
+ max-width: 600px;
+ }
+}
+
+@media screen and (max-width: @PHONE_MQ) {
+ #PORTFOLIO > div {
+ width: 90%;
+ margin: auto;
+ }
+}
diff --git a/src/assets/less/project.less b/src/assets/less/project.less
index 4155ee8..a09af42 100644
--- a/src/assets/less/project.less
+++ b/src/assets/less/project.less
@@ -2,12 +2,14 @@
@import (reference) "libs/mixins.less";
#PROJECT {
+ position: relative;
height: 100%;
- max-width: 1000px;
- margin: auto;
+ overflow-x: hidden;
.transition(all 0.5s cubic-bezier(0.8, 0, 0.25, 1) 1.5s);
& > div {
+ margin: auto;
+ max-width: 1200px;
width: 100%;
height: 100%;
position: relative;
@@ -26,3 +28,40 @@
opacity: 0;
}
}
+
+@media screen and (max-width: @SCREEN_1800) {
+ #PROJECT > div {
+ max-width: 1200px;
+ }
+}
+
+@media screen and (max-width: @SCREEN_1500) {
+ #PROJECT > div {
+ max-width: 1000px;
+ }
+}
+
+@media screen and (max-width: @SCREEN_1400) {
+ #PROJECT > div {
+ max-width: 900px;
+ }
+}
+
+@media screen and (max-width: @SCREEN_1200) {
+ #PROJECT > div {
+ max-width: 800px;
+ }
+}
+
+@media screen and (max-width: @SCREEN_1100) {
+ #PROJECT > div {
+ max-width: 600px;
+ }
+}
+
+@media screen and (max-width: @PHONE_MQ) {
+ #PROJECT > div {
+ width: 90%;
+ margin: auto;
+ }
+}
diff --git a/src/assets/less/pubs.less b/src/assets/less/pubs.less
index 4a5cf5b..13d17db 100644
--- a/src/assets/less/pubs.less
+++ b/src/assets/less/pubs.less
@@ -10,6 +10,7 @@
margin: 0;
text-align: center;
line-height: 25px;
+ .font-size(1.6);
&:nth-child(1) {
font-weight: bold;
@@ -20,3 +21,13 @@
opacity: 0;
}
}
+
+@media screen and (max-width: @PHONE_MQ) {
+ #PUBS {
+ padding: 25px 0 40px;
+
+ & span {
+ font-size: 1.5rem;
+ }
+ }
+}
diff --git a/src/assets/less/slide.less b/src/assets/less/slide.less
index 9ee2520..03f60f3 100644
--- a/src/assets/less/slide.less
+++ b/src/assets/less/slide.less
@@ -1,28 +1,143 @@
@import (reference) "libs/constants.less";
@import (reference) "libs/mixins.less";
-#SLIDE {
- height: 600px;
- min-height: 600px;
- background: @background-bloc-3;
- position: relative;
- box-shadow: 10px 10px #000;
-
- & h2 {
- font-family: 'Lato-Bold', sans-serif;
+.slide {
+ height: 100%;
+
+ & p::before,
+ & span::before {
+ content: ' ';
position: absolute;
+ top: -20px;
width: 100%;
- top: 0;
- font-size: 14px;
- color: @text-color-white;
- background: @text-color-h2;
- height: 40px;
- pointer-events: none;
- z-index: @LAYER-COUCHE-2;
- overflow: hidden;
- line-height: 40px;
+ height: 20px;
+ left: -1px;
+ border-top-right-radius: 10px;
+ border-top-left-radius: 10px;
+ background: #1d1d23;
+ border: 1px solid black;
+ }
+
+ & p::after,
+ & span::after {
+ content: ' ';
+ position: absolute;
+ bottom: -20px;
+ width: 100%;
+ height: 20px;
+ left: -1px;
+ border-bottom-right-radius: 10px;
+ border-bottom-left-radius: 10px;
+ background: #1d1d23;
+ border: 1px solid black;
+ }
+
+ & span {
+ position: absolute;
+ left: 15%;
+ top: 15%;
+ width: 25%;
+ background: @text-color-h2-lighter;
+ min-height: 50px;
+ line-height: 50px;
+ border: 1px solid black;
text-align: center;
- margin: 0;
+ color: @text-color-white;
text-transform: uppercase;
+ .transition(all 0.5s cubic-bezier(0.8, 0, 0.25, 1));
+ .font-size(1.2);
+ }
+
+ & p:nth-child(2) {
+ position: absolute;
+ left: 10%;
+ top: 35%;
+ width: 20%;
+ line-height: 18px;
+ word-spacing: 2px;
+ background: @text-color-h2-lighter;
+ padding: 10px 30px;
+ border: 1px solid black;
+ color: @text-color-white;
+ .transition(all 0.5s cubic-bezier(0.8, 0, 0.25, 1));
+ .font-size(1.2);
+ }
+
+ & p:nth-child(3) {
+ position: absolute;
+ right: 20%;
+ bottom: 5%;
+ width: 30%;
+ line-height: 18px;
+ word-spacing: 2px;
+ background: @text-color-h2-lighter;
+ color: @text-color-white;
+ padding: 10px 30px;
+ border: 1px solid black;
+ .transition(all 0.5s cubic-bezier(0.8, 0, 0.25, 1));
+ .font-size(1.2);
+ }
+
+ & img {
+ position: absolute;
+ right: 10%;
+ width: 400px;
+ height: 250px;
+ top: 20%;
+ border: 1px solid black;
+ .transition(all 0.5s cubic-bezier(0.8, 0, 0.25, 1));
+ }
+
+ &.invisible {
+ & span {
+ transform: translateY(-300%);
+ }
+
+ & p:nth-child(2) {
+ transform: translateX(-200%);
+ }
+
+ & img {
+ transform: translateX(200%);
+ }
+
+ & p:nth-child(3) {
+ transform: translateY(200%);
+ }
+ }
+}
+
+@media screen and (max-width: @PHONE_MQ) {
+ .slide {
+ & img {
+ right: 5%;
+ width: 300px;
+ top: 21%;
+ height: 170px;
+ object-fit: cover;
+ }
+
+ & span {
+ left: 5%;
+ top: 10%;
+ width: 80%;
+ .font-size(1.4);
+ }
+
+ & p:nth-child(2) {
+ left: 4%;
+ top: 44%;
+ width: 44%;
+ padding: 15px;
+ .font-size(1.4);
+ }
+
+ & p:nth-child(3) {
+ right: 2%;
+ bottom: 3%;
+ padding: 15px;
+ width: 35%;
+ .font-size(1.4);
+ }
}
}
diff --git a/src/assets/less/sliders.less b/src/assets/less/sliders.less
index 2e81083..2aad4b6 100644
--- a/src/assets/less/sliders.less
+++ b/src/assets/less/sliders.less
@@ -1,12 +1,12 @@
@import (reference) "libs/constants.less";
@import (reference) "libs/mixins.less";
-.position-to-corner(@index, @pos_x, @pos_y, @delay) {
+.position-to-corner(@index, @pos_x, @pos_y, @delay, @x, @y) {
&:nth-child(@{index}) {
.transition(all 0.5s cubic-bezier(0.8, 0, 0.25, 1) @delay);
- @{pos_x}: 0;
- @{pos_y}: 0;
+ @{pos_x}: @x;
+ @{pos_y}: @y;
}
}
@@ -48,10 +48,10 @@
opacity: 0;
top: 50%;
@{pos_y}: 0;
- font-size: 14px;
line-height: 18px;
color: @background-bloc-0;
user-select: none;
+ .font-size(1.2);
}
em::before,
@@ -124,13 +124,18 @@
width: 48%;
height: 280px;
position: absolute;
- transform: translateY(100%);
- opacity: 0;
+ transform: initial;
+ opacity: 1;
- .position-to-corner(1, top, left, 0s);
- .position-to-corner(2, top, right, 0.25s);
- .position-to-corner(3, bottom, left, 0.5s);
- .position-to-corner(4, bottom, right, 0.75s);
+ .position-to-corner(1, top, left, 0s, 0, 0);
+ .position-to-corner(2, top, right, 0.25s, 0, 0);
+ .position-to-corner(3, bottom, left, 0.5s, 0, 0);
+ .position-to-corner(4, bottom, right, 0.75s, 0, 0);
+
+ &.invisible {
+ transform: translateY(100%);
+ opacity: 0;
+ }
& a {
overflow: hidden;
@@ -183,12 +188,15 @@
& span {
text-align: center;
- line-height: 280px;
- height: 100%;
+ transform: translateY(-50%);
display: block;
color: white;
- font-size: 1.1em;
+ width: 80%;
+ margin: 0 10%;
+ position: absolute;
+ top: calc(50% + 20px);
text-shadow: 0 0 8px #000;
+ .font-size(1.6);
}
}
@@ -224,7 +232,6 @@
position: absolute;
width: 100%;
top: 0;
- font-size: 14px;
color: @text-color-white;
background: @text-color-h2;
height: 40px;
@@ -237,15 +244,13 @@
text-align: center;
margin: 0;
text-transform: uppercase;
+ .font-size(1.2);
}
}
.mounted {
& #PROJECTS {
& li {
- transform: initial;
- opacity: 1;
-
&.filtered {
opacity: 0;
}
@@ -274,3 +279,46 @@
}
}
}
+
+@media screen and (max-width: @PHONE_MQ) {
+ #PROJECTS {
+ height: 860px;
+ margin-bottom: 120px;
+
+ & ul {
+ padding: 0;
+ }
+
+ & li {
+ height: 200px;
+ position: absolute;
+ float: initial;
+ width: 100%;
+
+ .position-to-corner(1, top, left, 0s, 0, 0);
+ .position-to-corner(2, top, right, 0.25s, 220px, 0);
+ .position-to-corner(3, bottom, left, 0.5s, 220px, 0);
+ .position-to-corner(4, bottom, right, 0.75s, 0, 0);
+
+ & i {
+ display: none;
+ }
+
+ & h2 {
+ .font-size(1.2);
+ }
+ }
+
+ & .previous {
+ left: 40px;
+ bottom: -120px;
+ height: 100px;
+ }
+
+ & .next {
+ right: 40px;
+ bottom: -120px;
+ height: 100px;
+ }
+ }
+}
diff --git a/src/assets/less/slides.less b/src/assets/less/slides.less
new file mode 100644
index 0000000..e01ceea
--- /dev/null
+++ b/src/assets/less/slides.less
@@ -0,0 +1,74 @@
+@import (reference) "libs/constants.less";
+@import (reference) "libs/mixins.less";
+
+#SLIDE {
+ height: 600px;
+ min-height: 600px;
+ background: @background-bloc-3;
+ position: relative;
+ box-shadow: 10px 10px #000;
+
+ & a {
+ overflow: hidden;
+ position: relative;
+ display: block;
+ background: @text-color-dark;
+ width: 100%;
+ height: 100%;
+ cursor: pointer;
+ text-decoration: none;
+ border: 1px solid #000;
+ background-size: cover;
+ background-position: center center;
+ box-shadow: 10px 10px @background-shadow;
+
+ & i {
+ .button-window(10px, 12px, #61c3ff);
+
+ &::before {
+ content: ' ';
+ .button-window(20px, 0, #005c94);
+ }
+
+ &::after {
+ content: ' ';
+ .button-window(40px, 0, #dc4242);
+ }
+ }
+ }
+
+ & h2 {
+ font-family: 'Lato-Bold', sans-serif;
+ position: absolute;
+ width: 100%;
+ top: 0;
+ .font-size(1.2);
+
+ color: @text-color-white;
+ background: @text-color-h2;
+ height: 40px;
+ pointer-events: none;
+ z-index: @LAYER-COUCHE-1;
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.75);
+ border-bottom: 1px solid black;
+ overflow: hidden;
+ line-height: 40px;
+ text-align: center;
+ margin: 0;
+ text-transform: uppercase;
+ }
+}
+
+@media screen and (max-width: @PHONE_MQ) {
+ #SLIDE {
+ height: 860px;
+
+ & i {
+ display: none;
+ }
+
+ & h2 {
+ .font-size(1.2);
+ }
+ }
+}
diff --git a/src/assets/less/tags.less b/src/assets/less/tags.less
index 6b071c9..0b34d7a 100644
--- a/src/assets/less/tags.less
+++ b/src/assets/less/tags.less
@@ -10,7 +10,7 @@
&-tag {
font-family: 'Lato-Bold', sans-serif;
- font-size: 0.8em;
+ .font-size(1.2);
.transition(all 0.5s cubic-bezier(0.8, 0, 0.25, 1));
display: block !important;
@@ -41,7 +41,7 @@
background: #61c3ff;
border: 1px solid #61c3ff;
top: 0;
- left: -150%;
+ left: -160%;
width: 100%;
height: 100%;
transform: skewX(50deg);
@@ -54,7 +54,7 @@
background: #61c3ff;
border: 1px solid #61c3ff;
top: 0;
- left: 150%;
+ left: 160%;
width: 100%;
height: 100%;
transform: skewX(50deg);
@@ -87,3 +87,11 @@
}
}
}
+
+@media screen and (max-width: @PHONE_MQ) {
+ .tags {
+ &-tag {
+ .font-size(1.2);
+ }
+ }
+}
diff --git a/src/components/informations.vue b/src/components/informations.vue
index 0b6cde3..c78ea23 100644
--- a/src/components/informations.vue
+++ b/src/components/informations.vue
@@ -3,10 +3,12 @@
@@ -55,6 +58,10 @@ export default {
invisible_text: {
type: Boolean,
required: true
+ },
+ unmounted: {
+ type: Boolean,
+ required: true
}
},
emits: ['filter'],
diff --git a/src/components/introduction/introduction_link.vue b/src/components/introduction/introduction_link.vue
index d484048..9b1079f 100644
--- a/src/components/introduction/introduction_link.vue
+++ b/src/components/introduction/introduction_link.vue
@@ -2,11 +2,13 @@
+
diff --git a/src/components/main/text.vue b/src/components/main/text.vue
index eee20ea..a870904 100644
--- a/src/components/main/text.vue
+++ b/src/components/main/text.vue
@@ -1,6 +1,6 @@