<template>
<i :class="getIconNameByType(type)"/>
</template>
setup () {
function getIconNameByType (type) {
const iconsMap = {
'image/svg': 'fas file-icon fa-image',
'image/jpeg': 'fas file-icon fa-image',
'image/jpg': 'fas file-icon fa-image',
'text/javascript': 'fas file-icon fa-image',
// ....
};
return iconsMap[type];
}
return {
getIconNameByType
};
}
curlftpfs#ftp.server.ru /mnt/ftp fuse noauto,user=UsEr:PaSsWd,allow_other,default_permissions,umask=027,_netdev 0 0
location = my.jpg {
...
}
location ~* ^.+\.(...|ico|jpeg|jpg|...)$ {
...
}
location ~ ^my\.jpg$ {
...
}
location ~* ^.+\.(...|ico|jpeg|jpg|...)$ {
...
}
var version='5.4.3.5';
self.addEventListener('install',function(ev){
ev.waitUntil(caches.open(version).then(function(cache){
if(location.protocol=='http:'||location.protocol=='https:'){
return fetch('/resource.json').then(function(res){
return res.json();
}).then(function(files){
return cache.addAll(files);
});
}
}));
self.skipWaiting();
});
self.addEventListener('activate',function(ev){
ev.waitUntil(caches.keys().then(function(keyList){
return Promise.all(keyList.map(function(key){
if(version!=key){
return caches.delete(key);
}
}));
}));
});
self.addEventListener('fetch',function(ev){
ev.respondWith(caches.match(ev.request).then(function(res){
return res||fetch(ev.request).then(function(res){
var resToCache=res.clone(),
newHeaders=new Headers(resToCache.headers);
newHeaders.append('X-Powered-By','nginx');
var anotherResponse=new Response(resToCache.body,{
status: resToCache.status,
statusText: resToCache.statusText,
headers: newHeaders
});
caches.open(version).then(function(cache){
if(ev.request.method!='POST'&&(new URL(ev.request.url).protocol=='http:'||new URL(ev.request.url).protocol=='https:')){
cache.put(ev.request,anotherResponse);
}
});
return res;
}).catch(function(){
return caches.match('/offline.html');
});
}));
});
document.body.style.transform = 'rotate(90deg)'; // попробуйте в консоли
<code></code>
:) )type Fuc = typeof func;
.Parameters<Func>
и ReturnType<Func>
соответсвенно. Обогащённые ответы — это разновидность сниппетов, или блоков поисковой выдачи. Такие сниппеты, помимо заголовка веб-страницы и её описания, содержат дополнительные данные: картинки, ссылки на разделы сайта, адреса и телефоны и так далее. Обогащённые ответы позволяют пользователям быстрее получить ответ на свой вопрос, а владельцам сайтов — привлечь больше посетителей на свой ресурс.
[...new Map(arr.map(n => [ n.value, n ])).values()]
// или
Object.values(arr.reduce((acc, n) => (acc[n.value] ??= n, acc), {}))
arr.filter(function(n) {
return !(this[n.value] = this.hasOwnProperty(n.value));
}.bind({}))
// или
arr.filter(function({ value }) {
return !this.set(value, this.has(value)).get(value);
}, new Map)
// или
arr.filter(((picked, { value: n }) => !picked.has(n) && picked.add(n)).bind(null, new Set))
arr.filter((n, i, a) => n === a.find(m => m.value === n.value))
// или
arr.filter((n, i, a) => i === a.findIndex(m => Object.is(m.value, n.value)))
Array.from(
new Set(arr.map(n => n.value)),
n => arr.find(m => m.value === n)
)
// или
arr
.slice()
.sort((a, b) => a.value.localeCompare(b.value))
.filter((n, i, a) => n.value !== a[i - 1]?.value)
location / {
proxy_pass http://backend;
}
location ~ ^/(smokeping|pgadmin4) {
allow 192.168.11.0/25;
deny all;
proxy_pass http://backend;
}