Make our own screenshotting script instead of using huxley
Summary: Create our own screenshotting script which takes screenshots. This improves over huxley for a couple reasons: - It makes the screenshots the correct size (for some reason, huxley struggles with this). - Its configuration matches more with what we want (we don't need multiple screenshots or interaction, we just want a single static shot) - It runs faster I also changed the docs to reflect this change. Test Plan: - Make sure all of the tests that were in the Huxleyfile are now in ss_data.json - Run the screenshotter docker - Make sure all of the images look reasonable and don't change (except sometimes the Lap test, which has some strange pixel-positioning differences...) Reviewers: kevinb Reviewed By: kevinb Differential Revision: https://phabricator.khanacademy.org/D16731
|
@ -68,14 +68,13 @@ tests when you submit a pull request, in case you forget.
|
|||
|
||||
If you make any changes to Parser.js, add Jasmine tests to ensure they work.
|
||||
|
||||
#### Huxley tests
|
||||
#### Screenshot tests
|
||||
|
||||
To ensure the final output looks good, we use
|
||||
[Huxley](https://github.com/chenglou/node-huxley) tests, which screenshot
|
||||
different expressions. These tests can be run by using the [Huxley
|
||||
docker](https://github.com/Khan/KaTeX/tree/master/dockers/HuxleyTests).
|
||||
To ensure the final output looks good, we screenshot different expressions.
|
||||
These tests can be run by using the
|
||||
[Screenshotter docker](https://github.com/Khan/KaTeX/tree/master/dockers/Screenshotter).
|
||||
|
||||
The Huxley tests should be run if you add anything more significant than
|
||||
The screenshot tests should be run if you add anything more significant than
|
||||
individual symbols. These tests are not automatically run, so please remember!
|
||||
If the new images are different (meaning they are not byte-by-byte the same as
|
||||
the old ones), inspect them visually. If there are no visible changes, that is
|
||||
|
@ -83,8 +82,8 @@ okay. If things change in a way consistent with your additions, explain what
|
|||
changed and why. Otherwise, figure out what is causing the changes and fix it!
|
||||
|
||||
If you add a feature that is dependent on the final output looking the way you
|
||||
created it, add a huxley test. See
|
||||
[Huxleyfile.json](test/huxley/Huxleyfile.json).
|
||||
created it, add a screenshot test. See
|
||||
[ss_data.json](test/screenshotter/ss_data.json).
|
||||
|
||||
#### Testing in other browsers
|
||||
|
||||
|
|
3
Makefile
|
@ -59,3 +59,6 @@ metrics:
|
|||
|
||||
clean:
|
||||
rm -rf build/*
|
||||
|
||||
screenshots:
|
||||
docker run --volume=$(shell pwd):/KaTeX ss
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
FROM ubuntu:14.04
|
||||
MAINTAINER xymostech <xymostech@gmail.com>
|
||||
RUN apt-get -qq update
|
||||
RUN apt-get -qqy install nodejs=0.10.25~dfsg2-2ubuntu1 default-jre=2:1.7-51 firefox=28.0+build2-0ubuntu2 xvfb=2:1.15.1-0ubuntu2 wget=1.15-1ubuntu1 || true
|
||||
RUN wget http://selenium-release.storage.googleapis.com/2.42/selenium-server-standalone-2.42.2.jar
|
||||
RUN ln -s /usr/bin/nodejs /usr/bin/node
|
||||
ENV DISPLAY :1
|
||||
CMD /bin/bash ~/run.sh
|
||||
RUN echo "java -jar /selenium-server-standalone-2.42.2.jar > /dev/null &" >> ~/run.sh
|
||||
RUN echo "Xvfb :1 2> /dev/null &" >> ~/run.sh
|
||||
RUN echo "make -C /KaTeX serve > /dev/null &" >> ~/run.sh
|
||||
RUN echo "sleep 2" >> ~/run.sh
|
||||
RUN echo "/KaTeX/node_modules/.bin/hux --write /KaTeX/test/huxley/" >> ~/run.sh
|
|
@ -1,29 +0,0 @@
|
|||
### How to generate huxley images
|
||||
---------------------------------
|
||||
|
||||
Now you too can generate huxley images from your own computer, and (hopefully)
|
||||
have them look mostly the same as the current ones! To start, make a docker
|
||||
image from the included Dockerfile using a command like
|
||||
|
||||
sudo docker build --tag=huxley .
|
||||
|
||||
from within this directory (note you need to have docker installed and running
|
||||
for this to work). This will build a docker image with the huxley tag,
|
||||
which you can then use to run dockers based on them.
|
||||
|
||||
This huxleyfile is set up such that it will run everything and generate all the
|
||||
huxley images when the image is run, so no interactive input is required. All
|
||||
that you need to do is mount the KaTeX directory you want to test into the
|
||||
`/KaTeX` directory in the docker, and run the huxley docker, like so:
|
||||
|
||||
sudo docker run --volume=/your/KaTeX/:/KaTeX huxley
|
||||
|
||||
The `--volume=/your/KaTeX:/KaTeX` switch mounts your KaTeX directory into the
|
||||
docker. Note this is a read-write mounting, so the new huxley images will be
|
||||
directly placed into your KaTeX directory.
|
||||
|
||||
Since this docker is very self-contained, there should be no need to do
|
||||
interactive management of the docker, but if you feel the need, you can read the
|
||||
General Docker Help section of the MathJaxFonts docker readme.
|
||||
|
||||
That's it!
|
14
dockers/Screenshotter/Dockerfile
Normal file
|
@ -0,0 +1,14 @@
|
|||
FROM ubuntu:14.04
|
||||
MAINTAINER xymostech <xymostech@gmail.com>
|
||||
RUN apt-get -qq update
|
||||
RUN apt-get -qqy install default-jre=2:1.7-51 firefox=28.0+build2-0ubuntu2 xvfb=2:1.15.1-0ubuntu2 wget=1.15-1ubuntu1 python=2.7.5-5ubuntu3 python-pip=1.5.4-1 nodejs=0.10.25~dfsg2-2ubuntu1 || true
|
||||
RUN wget http://selenium-release.storage.googleapis.com/2.43/selenium-server-standalone-2.43.0.jar
|
||||
RUN ln -s /usr/bin/nodejs /usr/bin/node
|
||||
RUN pip install selenium pypng
|
||||
ENV DISPLAY :1
|
||||
CMD /bin/bash ~/run.sh
|
||||
RUN echo "java -jar /selenium-server-standalone-2.43.0.jar > /dev/null &" >> ~/run.sh
|
||||
RUN echo "Xvfb :1 2> /dev/null &" >> ~/run.sh
|
||||
RUN echo "make -C /KaTeX serve > /dev/null &" >> ~/run.sh
|
||||
RUN echo "sleep 2" >> ~/run.sh
|
||||
RUN echo "/KaTeX/dockers/Screenshotter/screenshotter.py /KaTeX/test/screenshotter/ss_data.json" >> ~/run.sh
|
29
dockers/Screenshotter/README.md
Normal file
|
@ -0,0 +1,29 @@
|
|||
### How to generate screenshotter images
|
||||
----------------------------------------
|
||||
|
||||
Now you too can generate screenshots from your own computer, and (hopefully)
|
||||
have them look mostly the same as the current ones! To start, make a docker
|
||||
image from the included Dockerfile using a command like
|
||||
|
||||
docker build --tag=ss .
|
||||
|
||||
from within this directory (note you need to have docker installed and running
|
||||
for this to work). This will build a docker image with the `ss` tag, which you
|
||||
can then use to run dockers based on it.
|
||||
|
||||
This Dockerfile is set up such that it will run everything and generate all the
|
||||
screenshots when the docker is run, so no interactive input is required. All
|
||||
that you need to do is mount the KaTeX directory you want to test into the
|
||||
`/KaTeX` directory in the docker, and run the `ss` docker, like so:
|
||||
|
||||
docker run --volume=/your/KaTeX/:/KaTeX ss
|
||||
|
||||
The `--volume=/your/KaTeX:/KaTeX` switch mounts your KaTeX directory into the
|
||||
docker. Note this is a read-write mounting, so the new screenshots will be
|
||||
directly placed into your KaTeX directory.
|
||||
|
||||
Since this docker is very self-contained, there should be no need to do
|
||||
interactive management of the docker, but if you feel the need, you can read the
|
||||
General Docker Help section of the MathJaxFonts docker readme.
|
||||
|
||||
That's it!
|
107
dockers/Screenshotter/screenshotter.py
Executable file
|
@ -0,0 +1,107 @@
|
|||
#!/usr/bin/env python2
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import png
|
||||
import StringIO
|
||||
import sys
|
||||
|
||||
from selenium import webdriver
|
||||
|
||||
|
||||
def get_png_size(png_data):
|
||||
w, h, _, _ = png.Reader(file=StringIO.StringIO(png_data)).read()
|
||||
return (w, h)
|
||||
|
||||
|
||||
def set_driver_size(driver, width, height):
|
||||
"""Correctly sets the size of the driver window so screenshots end up the
|
||||
provided size"""
|
||||
driver.set_window_size(width, height)
|
||||
|
||||
screenshot_size = get_png_size(driver.get_screenshot_as_png())
|
||||
attempts = 0
|
||||
while (width, height) != screenshot_size:
|
||||
attempts += 1
|
||||
if attempts > 5:
|
||||
print "Tried 5 times to size screen correctly, bailing out"
|
||||
exit(1)
|
||||
|
||||
ss_width, ss_height = screenshot_size
|
||||
driver.set_window_size(
|
||||
width + (width - ss_width),
|
||||
height + (height - ss_height))
|
||||
screenshot_size = get_png_size(driver.get_screenshot_as_png())
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description='Take screenshots of webpages', add_help=False)
|
||||
parser.add_argument('file', metavar='file.json')
|
||||
parser.add_argument('-t', '--tests', metavar='test', nargs='*')
|
||||
parser.add_argument('-w', '--width', metavar='width', default=1024,
|
||||
type=int)
|
||||
parser.add_argument('-h', '--height', metavar='height', default=768,
|
||||
type=int)
|
||||
parser.add_argument('-b', '--browser', metavar='browser',
|
||||
choices=['firefox'], default='firefox')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
data = None
|
||||
with open(args.file) as f:
|
||||
try:
|
||||
data = json.load(f)
|
||||
except ValueError:
|
||||
print "Invalid json in input file:", args.file
|
||||
exit(1)
|
||||
|
||||
tests = []
|
||||
|
||||
if args.tests is None:
|
||||
tests = data.keys()
|
||||
else:
|
||||
data_tests = data.keys()
|
||||
for test in args.tests:
|
||||
if test not in data_tests:
|
||||
print "Unknown test:", test
|
||||
exit(1)
|
||||
|
||||
tests = args.tests
|
||||
|
||||
print "Starting up"
|
||||
sys.stdout.flush()
|
||||
|
||||
driver = None
|
||||
if args.browser == 'firefox':
|
||||
driver = webdriver.Firefox()
|
||||
else:
|
||||
print "Unknown browser:", args.browser
|
||||
exit(1)
|
||||
|
||||
set_driver_size(driver, args.width, args.height)
|
||||
|
||||
data_dir = os.path.join(
|
||||
os.path.dirname(os.path.realpath(args.file)), "images")
|
||||
|
||||
try:
|
||||
os.mkdir(data_dir)
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
for test, url in data.iteritems():
|
||||
if test in tests:
|
||||
filename = os.path.join(
|
||||
data_dir, '%s-%s.png' % (test, args.browser))
|
||||
|
||||
print "Running:", test
|
||||
sys.stdout.flush()
|
||||
|
||||
driver.get(url)
|
||||
driver.get_screenshot_as_file(filename)
|
||||
|
||||
print "Done"
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
|
@ -17,7 +17,6 @@
|
|||
"browserify": "~2.29.1",
|
||||
"clean-css": "~2.2.15",
|
||||
"express": "~3.3.3",
|
||||
"huxley": "~0.8.1",
|
||||
"jasmine-node": "git://github.com/mhevery/jasmine-node.git#Jasmine2.0",
|
||||
"jshint": "^2.5.6",
|
||||
"less": "~1.7.5",
|
||||
|
|
|
@ -1,205 +0,0 @@
|
|||
[
|
||||
{
|
||||
"name": "BasicTest",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=a"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "FractionTest",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\dfrac{a}{b}\\frac{a}{b}\\tfrac{a}{b}"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "BinomTest",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\dbinom{a}{b}\\tbinom{a}{b}^{\\binom{a}{b}+17}"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "NestedFractions",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\dfrac{\\frac{a}{b}}{\\frac{c}{d}}\\dfrac{\\dfrac{a}{b}}{\\dfrac{c}{d}}\\frac{\\frac{a}{b}}{\\frac{c}{d}}"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "Exponents",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=a^{a^a_a}_{a^a_a}"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "Colors",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\blue{a}\\color{%230f0}{b}\\color{red}{c}"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "GreekLetters",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\alpha\\beta\\gamma\\omega"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "Baseline",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=a+b-c\\cdot d/e"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "Spacing",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=^3+[-1][1-1]1=1(=1)\\lvert a\\rvert~b"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "Functions",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\sin\\cos\\tan\\ln\\log"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "Sizing",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m={\\Huge x}{\\LARGE y}{\\normalsize z}{\\scriptsize w}"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "SizingBaseline",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m={\\tiny a+b}a+b{\\Huge a+b}&pre=x&post=M"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "Text",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\frac{a}{b}\\text{c~ {ab} \\ e}+fg"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "KaTeX",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\KaTeX"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "RlapBug",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\frac{\\rlap{x}}{2}"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "SupSubCharacterBox",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=a_2f_2{f}_2{aa}_2{af}_2"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "Lap",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=ab\\llap{f}cd\\rlap{g}h"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "DelimiterSizing",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\bigl\\uparrow\\Bigl\\downarrow\\biggl\\updownarrow\\Biggl\\Uparrow\\Biggr\\Downarrow\\biggr\\langle\\Bigr\\}\\bigr\\rfloor"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "Overline",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\overline{x}\\overline{x}\\overline{x^{x^{x^x}}} \\blue{\\overline{y}}"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "DeepFontSizing",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=a^{\\big| x^{\\big(}}_{\\Big\\uparrow} + i^{i^{\\Huge x}_y}_{\\Huge z} + \\dfrac{\\Huge x}{y}"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "VerticalSpacing",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?pre=potato<br>blah&post=<br>moo&m=x^{\\Huge y}z"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "SupSubHorizSpacing",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=x^{x^{x}}\\Big|x_{x_{x_{x_{x}}}}\\bigg|x^{x^{x_{x_{x_{x_{x}}}}}}\\bigg|"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "Rule",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\rule{1em}{0.5em}\\rule{1ex}{2ex}\\rule{1em}{1ex}\\rule{1em}{0.431ex}"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "LeftRight",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\left( x^2 \\right) \\left\\{ x^{x^{x^{x^x}}} \\right."
|
||||
},
|
||||
|
||||
{
|
||||
"name": "LeftRightStyleSizing",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=+\\left\\{\\rule{0.1em}{1em}\\right.x^{+\\left\\{\\rule{0.1em}{1em}\\right.x^{+\\left\\{\\rule{0.1em}{1em}\\right.}}"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "LeftRightListStyling",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=a+\\left(x+y\\right)-x"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "PrimeSpacing",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=f'+f_2'+f^{f'}"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "NullDelimiterInteraction",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=a \\bigl. + 2 \\quad \\left. + a \\right)"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "Sqrt",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\sqrt{\\sqrt{\\sqrt{x}}}_{\\sqrt{\\sqrt{x}}}^{\\sqrt{\\sqrt{\\sqrt{x}}}^{\\sqrt{\\sqrt{\\sqrt{x}}}}}"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "DisplayStyle",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m={\\displaystyle\\sqrt{x}}{\\sqrt{x}}{\\displaystyle \\frac12}{\\frac12}{\\displaystyle x^1_2}{x^1_2}"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "OpLimits",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m={\\sin_2^2 \\lim_2^2 \\int_2^2 \\sum_2^2}{\\displaystyle \\lim_2^2 \\int_2^2 \\intop_2^2 \\sum_2^2}"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "SupSubOffsets",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\displaystyle \\int_{2+3}x f^{2+3}+3\\lim_{2+3+4+5}f"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "Accents",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\vec{A}\\vec{x}\\vec x^2\\vec{x}_2^2\\vec{A}^2\\vec{xA}^2"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "DisplayMode",
|
||||
"screenSize": [1024, 768],
|
||||
"url": "http://localhost:7936/test/huxley/test.html?m=\\sum_{i=0}^\\infty \\frac{1}{i}&pre=pre&post=post&display=1"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 24 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 14 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 6.1 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 24 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 8.4 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 25 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 16 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 22 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 22 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 11 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 12 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 19 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 12 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 12 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 14 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 17 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 15 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 14 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 18 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 11 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 44 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 14 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 13 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 6.9 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 4.2 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 16 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 21 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 16 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 30 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 20 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 22 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 27 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 16 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
Before Width: | Height: | Size: 24 KiB |
|
@ -1,5 +0,0 @@
|
|||
[
|
||||
{
|
||||
"action": "screenshot"
|
||||
}
|
||||
]
|
BIN
test/screenshotter/images/Accents-firefox.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
test/screenshotter/images/Baseline-firefox.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
test/screenshotter/images/BasicTest-firefox.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
test/screenshotter/images/BinomTest-firefox.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
test/screenshotter/images/Colors-firefox.png
Normal file
After Width: | Height: | Size: 8.4 KiB |
BIN
test/screenshotter/images/DeepFontSizing-firefox.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
test/screenshotter/images/DelimiterSizing-firefox.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
test/screenshotter/images/DisplayMode-firefox.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
test/screenshotter/images/DisplayStyle-firefox.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
test/screenshotter/images/Exponents-firefox.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
test/screenshotter/images/FractionTest-firefox.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
test/screenshotter/images/Functions-firefox.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
test/screenshotter/images/GreekLetters-firefox.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
test/screenshotter/images/KaTeX-firefox.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
test/screenshotter/images/Lap-firefox.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
test/screenshotter/images/LeftRight-firefox.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
test/screenshotter/images/LeftRightListStyling-firefox.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
test/screenshotter/images/LeftRightStyleSizing-firefox.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
test/screenshotter/images/NestedFractions-firefox.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
test/screenshotter/images/NullDelimiterInteraction-firefox.png
Normal file
After Width: | Height: | Size: 9.6 KiB |
BIN
test/screenshotter/images/OpLimits-firefox.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
test/screenshotter/images/Overline-firefox.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
test/screenshotter/images/PrimeSpacing-firefox.png
Normal file
After Width: | Height: | Size: 10 KiB |