Так что, по крайней мере, часть проблемы заключается в следующем:
newQuote.addEventListener('click', run());
Что должно быть просто:
newQuote.addEventListener('click', run);
addEventListener ожидает, что второй аргумент, который вы дадите, будет функцией. Это будет функция, выполняемая при нажатии newQuote . Но когда вы говорите run () (с круглыми скобками), вы на самом деле вызываете функцию run и передаете результат addEventListener , который в этом случае будет не определено .
Могут быть и другие проблемы, но у меня не было времени, чтобы на самом деле создать кодовую ручку и тщательно ее изучить, но это было первое, что выделилось мне.