Вот обновленное решение
. Большая проблема предыдущего кода заключалась в том, что он не мог динамически вычислять ширину столбцов. Поэтому необходимо было указать с каждым столбцом.
Эта версия исправляет эту проблему.
@Directive({
selector: '[cdkFixedHeader]'
})
export class FixedHeaderDirective implements AfterViewInit{
constructor(private el: ElementRef, private renderer:Renderer2) {}
ngAfterViewInit(){
// get the viewport element
let cdkViewport = this.el.nativeElement.closest("cdk-virtual-scroll-viewport");
// check if table was already cloned
let clonedHeader = cdkViewport.querySelectorAll('.cloned-header');
// create a clone if not exists
if (clonedHeader.length == 0)
{
let table = this.el.nativeElement.closest('table');
let cloned = table.cloneNode(true);
cloned.style.position = 'sticky';
cloned.style.top = '0';
cloned.style.zIndex = '100';
// remove tbody with elements
let tbody = cloned.querySelector('tbody');
cloned.removeChild(tbody);
// add a "helper" class
this.renderer.addClass(cloned, "cloned-header");
// append cloned object to viewport
cdkViewport.appendChild(cloned);
}
//
// walk through all <tr> with their <td> and store the max value in an array
//
let width = [];
let td = this.el.nativeElement.querySelectorAll("td");
width = new Array(td.length).fill(0);
td.forEach((item,index) => {
const w = item.getBoundingClientRect().width;
width[index] = Math.max(w, width[index]);
})
//
// get <th> elements and apply the max-width values
//
let th = cdkViewport.querySelectorAll('.cloned-header th');
th.forEach((item,index) => {
this.renderer.setStyle(item, "min-width", width[index] + 'px')
})
}
}
Использование:
Использование немного изменилось, потому что это было необходимо для вызова директивы, когда обрабатывается *cdkVirtualFor
.
<tr *cdkVirtualFor="let item of list" cdkFixedHeader>
...
</tr>
Вот и все! Не очень хорошо, но работает ...
I didn't mean to answer my own question but I just thought about running a sitemap generator. First one I found http://www.xml-sitemaps.com has a nice text output. Perfect for my needs.
do wget -r -l0 www.oldsite.com
Then just find www.oldsite.com
would reveal all urls, I believe.
Alternatively, just serve that custom not-found page on every 404 request! То есть, если кто-то использовал неправильную ссылку, он получал бы страницу с сообщением, что страница не найдена, и с подсказками о содержании сайта.
Итак, в идеальном мире у вас была бы спецификация для всех страниц вашего сайта. У вас также будет тестовая инфраструктура, которая сможет проверять все ваши страницы
. Вы, вероятно, не в идеальном мире. Почему бы не сделать это ...?
Создайте карту между колодцами известные старые URL-адреса и новые. Перенаправить, когда вы видите старый URL. Я бы подумал о том, чтобы представить "эта страница переехала, это новый URL XXX, вы будете перенаправлены shortly".
If you have no mapping, present a "sorry - this page has moved. Here's a link to the home page" message and redirect them if you like.
Log all redirects - especially the ones with no mapping. Over time, add mappings for pages that are important.
wget from a linux box might also be a good option as there are switches to spider and change it's output.
EDIT: wget is also available on Windows: http://gnuwin32.sourceforge.net/packages/wget.htm
Я бы изучил любое количество онлайн-инструментов для создания карты сайта. Лично я использовал этот (на основе java) в прошлом, но если вы выполните поиск в Google по запросу «построитель карты сайта», я уверен, что вы найдете множество различных вариантов.
Напишите паука, который читает каждый HTML-код с диска и выводит каждый атрибут «href» элемента «a» (можно сделать с помощью парсера). Помните, какие ссылки принадлежат определенной странице (это обычная задача для структуры данных MultiMap). После этого вы можете создать файл сопоставления, который действует как ввод для обработчика 404.