import random
import string
from time import sleep

from flask import Flask

app = Flask(__name__)

@app.route('/js')
def js():
    with open('line-numbers.js') as f:
        js = f.read()
    return app.response_class(js, mimetype='text/javascript')

@app.route('/css')
def css():
    text = """
pre #line-numbers {
  color:black;
  display:block;
}

pre #line-numbers {
  float:left;
  margin:0 1em 0 -1em;
  border-right:1px solid;
  text-align:right;
}

pre #line-numbers span {
  display:block;
  padding:0 .5em 0 1em;
}

pre #line-numbers .highlight {
  background: lightgrey;
}
"""
    return app.response_class(text, mimetype='text/css')

@app.route('/stream')
def stream():
    def generate():
        yield "<!DOCTYPE html><html>"
        yield f"<link href='/css' rel='stylesheet'>"
        yield f"<script src='/js'></script>"
        yield "<pre>"
        for _ in range(1000):
            text = ''.join(random.choice(string.ascii_letters + ' \n' * 4) for _ in range(1000))
            yield f"{text}\n"
            sleep(random.random() * 0.5)
        yield "</pre></html>"

    return app.response_class(generate(), mimetype='text/html')