Commit faa318a1 authored by JIŘÍ's avatar JIŘÍ
Browse files

Initial commit

parent fd939e93
> 1%
last 2 versions
not dead
{
"extends": [
"eslint:recommended"
],
"env": {
"browser": true,
"mocha": true
},
"globals": {
"chai": "readonly"
},
"parser": "babel-eslint",
"parserOptions": {
"sourceType": "module"
},
"rules": {
"no-unexpected-multiline": "off"
}
}
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
/live/
/src/core/config/config.js
{
"singleQuote": true,
"bracketSpacing": false
}
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
]
}
This diff is collapsed.
{
"name": "gov-modules",
"version": "v1.3.5",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"build:stage": "npm run build:pre-task stage && npm run build && npm run build:post-task stage",
"build:build": "npm run build:pre-task build && npm run build && npm run build:post-task build",
"build:pre-task": "node build/pre-task.js",
"build:post-task": "node build/post-task.js"
},
"dependencies": {
"axios": "^0.21.0",
"core-js": "^3.6.5",
"lodash": "^4.17.20",
"vue": "^2.6.11",
"vue-content-loading": "^1.6.0",
"vue-i18n": "^8.22.1",
"vue-router": "^3.2.0",
"vuex": "^3.4.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-router": "~4.5.0",
"@vue/cli-plugin-vuex": "~4.5.0",
"@vue/cli-service": "~4.5.0",
"sass": "^1.29.0",
"sass-loader": "^10.0.5",
"vue-template-compiler": "^2.6.11"
}
}
{
"meta": {
"title": "%s - Portál veřejné správy"
},
"widgets": {
"DPS_NAV": {
"basePath": "/vyber-verejne-spravy",
"url": "/verejna-sprava"
},
"OZC_NAV": {
"basePath": "/o-zivote-v-cr"
},
"DPS": {
"url": {
"cs": "/verejna-sprava",
"en": "/verejna-sprava"
},
"basePath": {
"cs": "/verejna-sprava",
"en": "/verejna-sprava"
},
"mode": "history"
},
"RZC": {
"url": "/rozcestnik",
"basePath": "/rozcestnik",
"mode": "history"
},
"ASL": {
"url": {
"cs": "/asistencni-sluzby",
"en": "/assistance-service"
},
"basePath": {
"cs": "/asistencni-sluzby",
"en": "/assistance-service"
},
"mode": "history"
},
"INF": {
"url": "/informace",
"basePath": "/informace",
"mode": "history"
},
"OMO": {
"basePath": "/obecne-moznosti-odvolani",
"url": "/obecne-moznosti-odvolani",
"mode": "history"
}
}
}
<!doctype html>
<html lang="en" class="pvs-theme js-ok">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="initial-scale=1"/>
<!--<link rel="stylesheet" href="/style.min.css?v=6" media="all"/>-->
<!--<link rel="stylesheet" href="https://newpvsstorage.z16.web.core.windows.net/ds/10/css/style.min.css?v=332"
media="all"/>-->
<link rel="stylesheet" href="https://newpvsstorage.z16.web.core.windows.net/ds/1.0.0/build/style.min.css?v=33223"
media="all"/>
<link rel="stylesheet" href="https://newpvsstorage.z16.web.core.windows.net/ds/1.0.0/build/print.min.css?v=33223"
media="printu-screen--only"/>
<meta name="description" content="">
<style>
html, body {
background: #f5f5f5;
}
</style>
</head>
<body>
<script>
window.onload = function () {
const govWidget = new GovWidget({
manifestPath: '/gov-manifest.json?v=2',
locale: 'cs',
});
const govNavOZC = new GovNavOZC({
el: '#gov-about-life-nav',
});
const govFeedback = new GovFeedback({
el: '#gov-feedback',
});
const govContent = new GovContent({
el: '#gov-content',
});
const govSdgIndex = new GovSdgIndex({
el: '#gov-sdg-index',
});
const govNavDPS = new GovNavDPS({
el: '#gov-public-administration-nav',
});
const govContentPreview = new GovContentPreview({
el: '#gov-content'
}, 'DPS', {"kod":"S2628","nazev":"Autorizace metrologického střediska","nazevEn":null,"nazevCs":"Autorizace metrologického střediska","relevanceSdg":false,"platnostOd":{"formatted":"2020-11-05"},"platnostDo":{"formatted":null},"datumKontroly":{"formatted":null},"marketingovyNazev":"Autorizace metrologického střediska","marketingovyNazevEn":null,"marketingovyNazevCs":"Autorizace metrologického střediska","charakter":"Ověřování stanovených měřidel nebo certifikaci referenčních materiálů mohou vykonávat autorizovaná metrologická střediska. Autorizaci metrologických středisek provádí Úřad pro technickou normalizaci, metrologii a státní zkušebnictví, který v rámci tohoto řízení prověřuje, zda žadatel splňuje předepsané požadavky.","kdyVecResit":"Tato služba se vás týká v případě, že chcete působit jako autorizované metrologické středisko, které ověřuje stanovená měřidla nebo certifikuje referenční materiály.","typSluzby":[{"nazev":"Iniciovaná klientem"}],"vystupSluzby":"Výstupem této služby je rozhodnutí o autorizaci.","jakyMaSluzbaBenefit":"Na základě rozhodnutí o autorizaci je žadatel oprávněn působit jako autorizované metrologické středisko.","vysledek":[{"nazev":"Ne"}],"kdyJednat":"Tuto službu je nutné řešit předtím, než hodláte působit jako autorizované metrologické středisko.&nbsp;","zpusobVyrizeni":[{"hodnota":"OSOBNE","nazev":"Osobně nebo poštou"},{"hodnota":"ELEKTRONICKY","nazev":"Elektronicky"}],"lzeVyriditDatovouSchrankou":true,"zpusobVyrizeniEl":"<p>K udělení autorizace je nutné podat žádost, která obsahuje</p>\n\n<p>- identifikační údaje o žadateli (jméno a příjmení, bydliště, místo podnikání a identifikační číslo fyzické osoby nebo obchodní jméno, sídlo a identifikační číslo právnické osoby),<br />\n- metrologickou činnost, která má být předmětem autorizace, a technickou specifikaci předmětných stanovených měřidel nebo certifikovaných referenčních materiálů, včetně soupisu metodik výkonů, pro které je autorizace požadována,<br />\n- seznam etalonů a etalonážního zařízení a dalšího technického vybavení s uvedením příslušných parametrů,<br />\n- specifikaci provozních a prostorových podmínek včetně umístění příslušného pracoviště,<br />\n- doklady o odborné způsobilosti zaměstnanců zabezpečujících metrologickou činnost podle podmínek stanovených Úřadem pro technickou normalizaci, metrologii a státní zkušebnictví.</p>\n\n<p>K podání žádosti lze využít vzor žádosti uvedený <a href=\"https://www.unmz.cz/wp-content/uploads/MPM-10-20.pdf\">v tomto metodickém pokynu</a>.&nbsp;</p>\n\n<p>Prověření úrovně metrologického a technického vybavení a kvalifikace odpovědných zaměstnanců doložte Osvědčením o metrologické, technické a personální způsobilosti k ověřování stanovených měřidel vydaným Českým metrologickým institutem. &nbsp;</p>\n","kdeAJakSluzbuResitEl":"<p>Žádost lze podat u Úřadu pro technickou normalizaci, metrologii a státní zkušebnictví prostřednictvím datové schránky nebo e-mailem s uznávaným elektronickým podpisem. E-mailem lze žádost poslat na adresu <a href=\"mailto:podatelna@unmz.cz\">podatelna@unmz.cz</a>.</p>\n\n<p>Úřad pro technickou normalizaci, metrologii a státní zkušebnictví rozhoduje v rámci správního řízení. V takovém případě se v řízení postupuje podle správního řádu. Správní řízení počíná podáním úplné žádosti. K vyřízení žádosti správní řád stanovuje lhůtu 30 dnů (která v odůvodněných případech může být prodloužena o dalších 30 dnů).&nbsp;</p>\n\n<p>Při rozhodování o autorizaci Úřad pro technickou normalizaci, metrologii a státní zkušebnictví posuzuje, zda žadatel<br />\n- je právnickou osobou nebo fyzickou osobou, která je podnikatelem,<br />\n- je vybaven etalony a dalším zařízením potřebným k provádění příslušných technických a administrativních úkonů,<br />\n- má zaměstnance způsobilé k úkonům v rozsahu autorizace s odpovídajícími znalostmi a schopnostmi,<br />\n- nemá finanční nebo jiné zájmy, které by mohly ovlivnit výsledky metrologické činnosti, která je předmětem autorizace; v případě autorizace k následnému ověřování stanovených měřidel ověřovaných na místě používání a zároveň určených pro stanovení množství při přímém prodeji veřejnosti nesmí být autorizovaný subjekt uživatelem, výrobcem, opravcem, dovozcem ani distributorem těchto měřidel a<br />\n- prokázal metrologickou, technickou a personální způsobilost k ověřování stanovených měřidel předložením k tomu zákonem stanovených osvědčení nebo osvědčení o akreditaci.</p>\n\n<p>Podrobné informace o procesu autorizace můžete nalézt <a href=\"https://www.businessinfo.cz/navody/autorizovana-metrologicka-strediska/#b1\">zde</a>&nbsp;a rovněž v metodickém pokynu dostupném <a href=\"https://www.unmz.cz/wp-content/uploads/MPM-10-20.pdf\">zde</a>.&nbsp;</p>\n","nazevPortalu":null,"odkazNaPortal":null,"vysePoplatkuEl":null,"zpusobVyrizeniOs":"<p>K udělení autorizace je nutné podat žádost, která obsahuje</p>\n\n<p>- identifikační údaje o žadateli (jméno a příjmení, bydliště, místo podnikání a identifikační číslo fyzické osoby nebo obchodní jméno, sídlo a identifikační číslo právnické osoby),<br />\n- metrologickou činnost, která má být předmětem autorizace, a technickou specifikaci předmětných stanovených měřidel nebo certifikovaných referenčních materiálů, včetně soupisu metodik výkonů, pro které je autorizace požadována,<br />\n- seznam etalonů a etalonážního zařízení a dalšího technického vybavení s uvedením příslušných parametrů,<br />\n- specifikaci provozních a prostorových podmínek včetně umístění příslušného pracoviště,<br />\n- doklady o odborné způsobilosti zaměstnanců zabezpečujících metrologickou činnost podle podmínek stanovených Úřadem pro technickou normalizaci, metrologii a státní zkušebnictví.</p>\n\n<p>K podání žádosti lze využít vzor žádosti uvedený <a href=\"https://www.unmz.cz/wp-content/uploads/MPM-10-20.pdf\">v tomto metodickém pokynu</a>.&nbsp;</p>\n\n<p>Prověření úrovně metrologického a technického vybavení a kvalifikace odpovědných zaměstnanců doložte Osvědčením o metrologické, technické a personální způsobilosti k ověřování stanovených měřidel vydaným Českým metrologickým institutem. &nbsp;</p>\n","kdeAJakSluzbuResitOs":"<p>Žádost je lze doručit prostřednictvím provozovatele poštovních služeb na adresu Úřadu pro technickou normalizaci, metrologii a státní zkušebnictví, se sídlem Biskupský dvůr 1148/5, 110 00 Praha 1, dočasné pracoviště Na Žertvách 132/24, 180 00 Praha 8 nebo osobně na podatelně tohoto úřadu na adrese dočasného pracoviště <a href=\"https://www.unmz.cz/stehovani-unmz-do-novych-prostor-a-omezeni-provozu-v-dusledku-stehovacich-praci/\">(https://www.unmz.cz/stehovani-unmz-do-novych-prostor-a-omezeni-provozu-v-dusledku-stehovacich-praci/)</a>.&nbsp;</p>\n\n<p>Úřad pro technickou normalizaci, metrologii a státní zkušebnictví rozhoduje v rámci správního řízení. V takovém případě se v řízení postupuje podle správního řádu. Správní řízení počíná podáním úplné žádosti. K vyřízení žádosti správní řád stanovuje lhůtu 30 dnů (která v odůvodněných případech může být prodloužena o dalších 30 dnů).&nbsp;</p>\n\n<p>Při rozhodování o autorizaci Úřad pro technickou normalizaci, metrologii a státní zkušebnictví posuzuje, zda žadatel<br />\n- je právnickou osobou nebo fyzickou osobou, která je podnikatelem,<br />\n- je vybaven etalony a dalším zařízením potřebným k provádění příslušných technických a administrativních úkonů,<br />\n- má zaměstnance způsobilé k úkonům v rozsahu autorizace s odpovídajícími znalostmi a schopnostmi,<br />\n- nemá finanční nebo jiné zájmy, které by mohly ovlivnit výsledky metrologické činnosti, která je předmětem autorizace; v případě autorizace k následnému ověřování stanovených měřidel ověřovaných na místě používání a zároveň určených pro stanovení množství při přímém prodeji veřejnosti nesmí být autorizovaný subjekt uživatelem, výrobcem, opravcem, dovozcem ani distributorem těchto měřidel a<br />\n- prokázal metrologickou, technickou a personální způsobilost k ověřování stanovených měřidel předložením k tomu zákonem stanovených osvědčení nebo osvědčení o akreditaci.</p>\n\n<p>Podrobné informace o procesu autorizace můžete nalézt <a href=\"https://www.businessinfo.cz/navody/autorizovana-metrologicka-strediska/#b1\">zde</a>&nbsp;a rovněž v metodickém pokynu dostupném <a href=\"https://www.unmz.cz/wp-content/uploads/MPM-10-20.pdf\">zde</a>.&nbsp;</p>\n","vysePoplatkuOs":null,"poskytovateleOvm":[{"nazev":"Úřad pro technickou normalizaci, metrologii a státní zkušebnictví"}],"poskytovateleKategorieOvm":[],"specifikacePokynu":null,"vyseDavkyText":null,"opravneProstredkyText":"Odvolání lze podat u Úřadu pro technickou normalizaci, metrologii a státní zkušebnictví, který následně postupuje podle &sect; 87 a násl. správního řádu. O odvolání rozhoduje Ministerstvo průmyslu a obchodu.","sankceText":"Subjekt se dopustí přestupku tím, že aniž by byl autorizovaným metrologickým střediskem, provede ověření stanoveného měřidla. Za takový přestupek lze uložit pokutu do výše 1 000 000 Kč.<br />\n&nbsp;","casteDotazyText":null,"klicovaSlova":["autorizované metrologické středisko","metrologie","stanovené měřidlo","měřidlo","autorizace"],"jazykPodani":null,"obecnaMoznostOdvolani":[],"asistencniSluzbySdg":[],"oblastSdg":[],"ovm":{"nazev":"Ministerstvo průmyslu a obchodu","identifikator":"47609109"},"_id":"52717"});
govContentPreview.on('render', function (data) {
console.log('loaded...');
console.log(data);
});
//govWidget.use(govContent);
//govWidget.use(govSdgIndex);
govWidget.use(govContentPreview);
//govWidget.use(govNavDPS);
//govWidget.use(govNavOZC);
//govWidget.use(govFeedback);monito
govWidget.mount();
}
</script>
<div>
<div id="gov-about-life-nav"></div>
<div id="gov-public-administration-nav"></div>
<div id="gov-feedback"></div>
<div id="gov-content"></div>
<div id="gov-sdg-index"></div>
</div>
</body>
</html>
import isObject from 'lodash/isObject';
import $store from '@/core/store';
import $axios from '@/core/axios';
import GovError from '@/core/error/gov.error';
import {defaultLocale, availableLocales} from '@/core/locale';
import '@/widgets/GovNavDPS';
import '@/widgets/GovNavOZC';
import '@/widgets/GovFeedback';
import '@/widgets/GovContent';
import '@/widgets/GovSdgIndex';
import '@/widgets/GovContentPreview';
window.GovWidget = class GovWidget {
/**
* @param {Object} options
*/
constructor(options) {
const defaultOptions = {
manifestStructure: null,
manifestPath: null,
locale: defaultLocale,
};
this._options = Object.assign(defaultOptions, options);
this._widgets = [];
}
/**
* @param {Object} widgetInstance
* @return {void}
*/
use(widgetInstance) {
this._widgets.push(widgetInstance);
}
/**
* @return {Promise<void>}
*/
async mount() {
try {
await this._prepareLocal();
await this._prepareManifest();
this._installPlugins();
} catch (e) {
console.error(e.message);
}
}
/**
* @return {void}
* @private
*/
_installPlugins() {
this._widgets.map((plugin) => {
if (typeof plugin.init === 'function') {
plugin.init();
}
});
}
/**
* @return {Promise<void>}
* @private
*/
async _prepareManifest() {
const {manifestStructure, manifestPath} = this._options;
if (null === manifestStructure && null === manifestPath) {
throw new GovError('Gov manifest is not defined');
}
if (isObject(manifestStructure) && Object.keys(manifestStructure).length !== 0) {
await $store.dispatch('gov/setManifest', manifestStructure);
} else if (manifestPath) {
const response = await $axios.get(manifestPath);
const {data} = response;
await $store.dispatch('gov/setManifest', data);
} else {
throw new GovError('Gov manifest inicialization failed');
}
}
/**
* @return {Promise<void>}
* @private
*/
async _prepareLocal() {
const {locale} = this._options;
if (availableLocales.indexOf(locale) === -1) {
console.info('Gov locale [' + locale + '] is not supported. Used default locale [' + defaultLocale + ']');
return Promise.resolve(null);
} else {
await $store.dispatch('gov/setLocale', locale);
}
}
}
window.GOV_WIDGET_VERSION = 'v1.3.5';
<template>
<div class="gov-accordion" role="presentation">
<slot/>
</div>
</template>
<template>
<div :id="'accordion-' + groupId + '-' + id">
<button :id="'gov-accordion-header.' + id"
class="gov-accordion__header"
v-bind:class="{'is-expanded': active, 'gov-accordion__header--noborder': first}"
:aria-expanded="active"
:aria-controls="'gov-accordion-content-' + id"
@click="toggle">
<h3>{{ title }}</h3>
</button>
<div v-show="active"
class="gov-accordion__content is-expanded"
:id="'gov-accordion-content-' + id"
:aria-labelledby="'gov-accordion-header-' + id">
<div class="gov-accordion__content-inner">
<template v-if="link">
<p>
<a :href="link" :title="$t('moreAboutService')">
{{ $t('moreAboutService') }}
</a>
</p>
<br>
</template>
<slot/>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
multiple: {type: Boolean, required: false, default: true},
groupId: {type: [Number, null], required: false, default: 1},
link: {type: [String, null], required: false, default: null},
title: {type: String, required: true},
first: {type: Boolean, required: false, default: false},
},
data() {
return {
active: false,
id: null,
}
},
beforeMount() {
this.id = 'akordeon-' + Math.random();
},
methods: {
toggle(event) {
if (this.multiple) this.active = !this.active
else {
this.$parent.$children.forEach((item) => {
if (item.$el.id === event.currentTarget.parentElement.id) {
item.setActive(!item.$data.active)
} else {
item.setActive(false)
}
})
}
},
setActive(active) {
this.active = active;
}
}
}
</script>
<template>
<div class="gov-content--accordion-part" v-if="items.length">
<gov-accordion>
<gov-accordion-item
:title="item.title"
:id="item.id"
:key="item.id"
:link="item.link"
:first="index === 0"
v-for="(item, index) in items">
<gov-html-content :content="item.detail"/>
</gov-accordion-item>
</gov-accordion>
</div>
</template>
<script>
import GovAccordion from './GovAccordion';
import GovAccordionItem from './GovAccordionItem';
import GovHtmlContent from '@/components/GovContent/GovHtmlContent';
export default {
components: {
GovHtmlContent,
GovAccordion,
GovAccordionItem
},
props: {
items: {
type: Array,
required: true,
}
}
}
</script>
<template>
<div>
<ul class="gov-list--plain gov-category-list__nav" v-if="categories.length">
<template v-for="category in categories">
<li class="gov-category-list__nav-item">
<router-link class="gov-category-list__nav-link" :to="constructLink(category)"
:title="category.nazev">
<span class="gov-link gov-link--standalone">
{{ titleResolver(category) }}
</span>
</router-link>
</li>
</template>
</ul>
<div class="gov-category-list__content" v-if="categories.length === 0">
<p>{{ $t('emptyNavCategories') }}</p>
</div>
</div>
</template>
<script>
import {titleResolver} from '@/widgets/GovContent/helpers/content';
import {slugify} from '@/helper/string.helper';
export default {
props: {
categories: {
type: Array,
required: true,
},
level: {
type: Number,
required: true,
}
},
data() {
return {
titleResolver,
router: {
1: {path: 'first-parameter', slug: 'firstParameter'},
2: {path: 'second-parameter', slug: 'secondParameter'}
}
}
},
methods: {
/**
* @param {Object} category
* @return {Object}
*/
constructLink(category) {
const title = slugify(this.titleResolver(category));
const {slug, path} = this.router[this.level];
const data = {name: path, params: {}}
data.params[slug] = title + '-' + category.kod;
return data;
}
}
}
</script>
<template>
<div>
<div class="gov-category-list__content" v-if="processing">
<vue-content-loading :width="200" :height="100">
<rect x="0" y="0" rx="2" ry="2" width="180" height="10"/>
<rect x="0" y="30" rx="2" ry="2" width="100" height="10"/>
<rect x="0" y="60" rx="2" ry="2" width="150" height="10"/>
<rect x="0" y="90" rx="2" ry="2" width="80" height="10"/>
</vue-content-loading>
</div>
<div class="gov-category-list__content" v-if="error">
<p>{{ $t('categoryErrorLoading') }}</p>
</div>
<template v-if="!processing && !error">
<slot/>
</template>
</div>
</template>
<script>
import VueContentLoading from 'vue-content-loading';
export default {
components: {
VueContentLoading
},
props: {
processing: {
type: Boolean,
required: true,
},
error: {
type: Boolean,
required: true,
}
}
}
</script>
<template>
<div class="gov-category-list" v-bind:class="{'subcategories-visible': isSecond, 'tasks-visible': isThird}">
<div class="gov-category-list__inner">
<div class="gov-category-list__col gov-category-list__categories">
<div class="gov-category-list__col-inner">
<gov-category-load-controller :processing="processing[1]" :error="error[1]">
<gov-category-list :categories="firstLevel" :level="1" ref="firstLevel"/>
</gov-category-load-controller>
</div>
</div>
<div class="gov-category-list__col gov-category-list__subcategories">
<div class="gov-category-list__col-inner is-active" v-if="isSecond">
<div class="gov-category-list__content">
<h2 v-if="firstLevelName">
<router-link :to="{name: 'default-parameter'}"
class="gov-category-list__back-btn"
:aria-label="$t('backToCategory') + firstLevelName"
role="button"
tabindex="0"/>
{{ firstLevelName }}
</h2>
</div>
<gov-category-load-controller :processing="processing[2]" :error="error[2]">
<gov-category-list :categories="secondLevel" :level="2" ref="secondLevel"/>
</gov-category-load-controller>
</div>
</div>
<div class="gov-category-list__col gov-category-list__col--wide gov-category-list__tasks">
<div class="gov-category-list__col-inner is-active" v-if="isThird">
<div class="gov-category-list__content">
<h2 v-if="secondLevelName">
<router-link :to="{name: 'first-parameter', params: {firstParameter: firstParam}}"
class="gov-category-list__back-btn"
:aria-label="$t('backToCategory') + secondLevelName"
role="button"
tabindex="0"/>
{{ secondLevelName }}
</h2>
</div>
<gov-category-load-controller :processing="processing[3]" :error="error[3]">
<gov-service-list :services="thirdLevel" ref="thirdLevel" :service-title-resolver="serviceTitleResolver"/>
</gov-category-load-controller>
</div>
</div>
</div>
</div>
</template>
<script>
import GovCategoryLoadController from '@/components/GovCategoryNav/GovCategoryLoadController';
import GovCategoryList from '@/components/GovCategoryNav/GovCategoryList';
import GovServiceList from '@/components/GovCategoryNav/GovServiceList';
export default {
components: {GovServiceList, GovCategoryList, GovCategoryLoadController},
props: {
processing: {
type: Object,
required: