This file documents all the notable changes for each version of Markbot. Markbot adheres to Semantic Versioning.
- Added
favicon
to the internal dictionary.
- Relaxed the requirements for Twitter Cards in the SEO template because Twitter now defaults to OpenGraph.
- Allow the OpenJDK as a dependency for Markbot’s Java requirements.
- Added “formspree” to the Markbot dictionary.
- Allow
@2x
in file names for.jpg
and.png
only.
- Made a horrible hack to work around the CSS validator’s parse errors for the
:root
selector and CSS variables within media queries.
- Fixed a bug related to warnings inside the SVG image checking system.
- The previous responsive screenshot update broke the ability to generate reference screenshots—this fixes it.
- Add a cancel & submit button to the initial sign-in for to allow Markbot use without Progressinator.
- Fixed a bug with retina screens when comparing print screenshots captured on retina devices.
- Trim the GitHub username & Progressinator API token to help prevent unnecessary problems.
- Added the ability to screenshot printed versions of websites.
- Added a few more words to the commit verb list and the language dictionary.
- Removed a duplicated reference to
role="contentinfo"
in the ARIA template. - All the
role="main"
to be on more than just the<main>
tag:<article>
,<section>
&<div>
- Moved the favicon
48px
size to a warning instead of an error message.
- Adjusted the favicon template requirements to match current best practices & lesson requirements.
- Fixed a bug when generating reference screenshots for assessments.
- Added a few more allowed verbs to Markbot’s commit checking.
- Removed the extra
.
on Markbot’s cheater comment. - Fixed a bug that caused the colour profile to shift when screenshots were taken.
- Downgraded to an older version of JS-Beautify to fix some improper indentation bugs.
- Fixed the rounded corners on the main window & differ window.
- Added a few more acceptable commit starting verbs.
- Added back in the “Edit” menu to allow for copying-and-pasting of the API token.
- Added a toolbar button and menu item to access Progressinator.
- Added a local
.npmrc
to allow for configuring the Python version for NodeGyp.
- Reduced the max size of screenshots to increase performance.
- Moved to submitting assignments on the new Progressinator app on Learn the Web directly.
- Update many of the dependencies.
- Closed a security hole by re-enabling
webSecurity
in the task pool. - Fixed a bug when retrieving the line location when using Parse5.
- Fixed a bug with the Git commit checking and time calculation when the folder wasn’t a repository.
- Add the ability to ignore certain files when checking naming conventions with the new
namingIgnore
property in MarkbotFiles.
- Allow nav hovers to include just a border change.
- Update the dependencies and fix any associated issues.
- Fixed a bug in the HTML validation when the amount of validation errors was so long the response was chunked. Markbot would only grab the first part of the chunk.
- Fixed a bug in the accessibility testing when there are no landmark regions at all.
- Added a few more words to the dictionary.
- A huge bug when related to the backwards compatibility of
.has_not
it was clobbering all the checks from the templates.
- Add more CSS variable
var()
error ignore messages into the CSS validation.
- The extra space error messages are now clearer because they highlight the spaces using the red spelling error squiggle underline.
- Fixed a bug where Markbot for enforcing
id
attributes onto<input>
tags that werehidden
- Fixed the
<thead>
,<tbody>
,<tfoot>
order checking to force<tfoot>
after the<tbody>
as per the HTML specification. - Fixed a validation bug when CSS custom properties were defined within a CSS block instead of inside
:root
- Added a new template for Modulifier icons.
- Finally fixed the rounded corners on the top of the window by using
border-radius
- More new commit message starting imperative verbs.
- Updated a bunch of application dependencies.
- Made some changes to the app quitting—when the main window is closed the app quits. It’s not what I ideally want but I can figure out the MacOS-like way.
- Changed the build process to remove MacOS extended attributes files from within the folder.
- Prevented the folder name from overflowing when it is really long.
- Added the missing “Exit” menu item on Windows.
- Fixed the path stripping method on Windows to better support finding files & folders.
- Markbot will now allow empty lines before custom properties to allow for organization.
- Fixed a bug when the CSS contained only
:root
an error message was displayed. - Fix a bug when the
files.directory
option is used and the directory was empty Markbot would never finish loading.
- Added a new template for when not using the grid system.
- Removed the requirement for the button modifier class in the Modulifier template.
- When the functionality testing
noErrors
option was used an error message was triggered because Markbot was still trying to run and empty array of tests.
- Added a new template for working with Patternbot.
- Made some small compatibility adjustments to better work with Patternbot.
- Fixed a bug in the MarkbotIgnoreFile matching system where the file paths weren’t restricted to the beginning of paths and would match inside any directory.
- Added more verbs to the allowed commit starting words whitelist.
- Make the unrestricted modular CSS templates even more open.
- Update some dependencies. Especially Electron to fix the security problem.
- Removed the extraneous bullet point and text when no elements are shown in the accessibility related elements list.
- Added more verbs to the allowed commit starting words whitelist.
- Removed the “descendent-selectors” rule from Stylelint because it causes more problems than necessary.
- Added a rule ignore for the CSS
::selection
selector. - SVG image dimension checking will now attempt to ignore SVG spritesheets by checking to see if the only child elements are
<symbol>
tags. - Attempted to clarify some of the ARIA role error messages.
- Fixed external links within warning messages because they weren’t opening in the external browser.
- Updated a whole bunch of dependencies, specifically for the Stylelint patch for media queries.
- Changed the max number of class selectors to 3 to support my example toggle navigation.
- Added some more words to the dictionary.
- Added more verbs to the allowed commit words whitelist.
- Added some major performance improvements when there are many functionality tests running by queuing the tests.
- Added a new template for checking to make sure the standard
.img-flex
class exists. - Added another new template to confirm
modules.css
comes beforemain.css
- Added new templates for checking the focus state of navigation links and main body content links.
- Added the ability to confirm the dimensions of
favicon.ico
files—always forcing both16
and32
pixels sizes—and a template for checking favicon best practices. - Added the ability to confirm the dimensions of
.svg
files. - Added the ability to define a minimum percentage for each screenshot with a new screenshot object syntax.
- Fancified the submission checkmark graphic to make it a little more user friendly.
- Added some fun little stats to the success screen: start, end and completion times & number of commits.
- A template for checking basic SEO recommendations.
- Added more checks to the responsive CSS template & create a template for checking responsive font sizes.
- Added a new template named
border-box
that is exactly the same asbox-sizing
because I can never remember thebox-sizing
name. - Added unrestricted Web Dev Tools templates to allow students to choose their own settings.
- A 404 and 500 error page for the internal server.
- Added another check to the Google Fonts template to confirm there aren’t multiple
<link>
tags. - Clarified an accessibility error message in the accessibility template.
- Add the
accessibility
&outline
properties toallFiles.html
inside the accessibility template for convenience. - Changed the
html-good-semantics
template to not enforce a<ul>
for navigation so an<ol>
is also acceptable. - Changed all instances of
localhost
to127.0.0.1
to help alleviate incorrectly configured/etc/hosts
files that are missing thelocalhost
loopback. - Adjusted the HTTPS certificate creation to put the domains into the
subjectAltName
field instead of theCN
field. - Switched to a white list of commit verbs to be more strict on commit message conventions.
- Relaxed the requirements for running Markbot tests to allow just files or functionality or performance tests too.
- Added checks for
@import
and@charset
to CSS to avoid their use. - Updated a bunch of dependencies to their newest versions.
- When no MarkbotFile is found a warning is emitted with details instead of showing a green all-clear check.
- Upgraded to the most recent version of Electron.
- Fixed a bug when the
before
method of a screenshot had an error Markbot would just hang and wait. - Fixed a bug when the test code takes too long to run—there’s now a time limit before a failure is executed.
- Fixed a small bug in one of the templates: the
has
property was missing. - Fixed a bug in the
allFiles.functionality
tests where only the last functionality test was actually run, causing the requirements to be easier than they should be. - Fixed a bug when Markbot isn’t running and a folder is dropped onto the Dock icon—it wouldn’t load the project properly.
- Fixed a bug where the CSS validator wouldn’t run when there were invalid characters in the path—it now just stops and alerts the student to the problem.
- Fixed a bug where text files would throw an error when they weren’t smushed even if the property was missing from the MarkbotFile.
- When the
files
MarkbotFile property is empty an error message is now thrown. - Fixed a bug in the
files.directory
property where the directory was discarded when the MarkbotFile was generated. - Fixed the performance testing to properly test multiple files one at a time.
- Removed the dependency logging because it wasn’t helping anything.
- Fixed some confusing grammar in the functionality error tests.
- Added another word to the dictionary.
- All CSS animations are now paused in the browser window until the screenshot or the functionality test is ready to execute.
- Changed the “nav-hover” template so that it doesn’t choose the
.current
<a>
tag to check for hovering.
- Added back in a Windows full-quit check that accidentally got removed with I was debugging a Mac quitting problem.
- Allow screenshot tests to enable animations & transitions with the
allowAnimations
option. - Added a datetime to the end of the request URL for live website checking to see if it becomes a little more reliable.
- Added a template that checks images for
block
andwidth: 100%
- Added a template for checking button hovering with the
.btn
class—it’s very similar to the Modulifier button hover without the requirement of a modifier class.
- Added some more words to the spelling dictionary.
- Added labels to all the template functionality tests.
- Improved the shutdown procedure a little bit.
- Added some path-fixing code because on some MacOS environments the
$PATH
variable wasn’t inheriting into Electron. - Fixed a bug where after an alert was shown the toolbar wasn’t re-enabling.
- Added better error handling for corrupt and improperly formated images.
- Added a
User-Agent
to the live website check, and internally to HTML validation and Git commit best practices checks.
- Fixed a bug in the HTML validator where it wouldn’t run if there were spaces in filenames.
- Added some detections and logging for different possible errors Git may show, like
license
and not in$PATH
- There’s a new
activate
function for functionality tests that will trigger the CSS:active
state. - Screenshots can now execute some Javascript before capturing using the new
before
property. - Screenshot groups can now be labeled using the new
label
property, similar to functionality. - Text files, including SVG graphics, can now be checked if they are smushed, essentially just checks for line breaks.
- The four new font-sizes to the Typografier checker.
- Replaced the default
alert()
with a custom one that has the ability to restart the application. - Allow functionality tests to now provide a
test
(singular) string that will function properly. - Allow
hover()
&activate()
to accept already selected DOM elements instead of just a CSS selector.
- Changed the toolbar drag ability so it can’t be dragged when clicking the buttons.
- Ignore the
clip-path: inset
CSS validation error messages. - Successful checks can now also be clicked in the check list when they have a matching element to focus.
- If the functionality
tests
property isn’t an array it’ll be converted to one.
- Screenshots and functionality tests of the same path are not merged together any more—it was originally this way.
- Fixed a bug where the checks wouldn’t be bypassed properly when the file didn’t exist.
- Fixed a bug in the missing optional tag checking where it would actually ignore missing optional tags.
- Markbot will now display MarkbotFile errors in the Activity window for easier debugging.
- There’s better error handling if the background servers crash while Markbot is still open.
- The ability to display an error when a file exists and it shouldn’t.
- The error messages created by Typografier for
margin
&padding
have been down-graded to warnings. - Updated the links for the Command Line Tools & Java installations to match the new unique tutorials.
- When a file is
locked
no other tests will be run. - Switched to another Git state checking library that’s more up-to-date and compatible with Windows.
- The Markbot file generator wasn’t combining duplicate files properly, some were being skipped because of the way the code ran.
- There were errors being thrown when the WebLoader was trying load the page initially.
- When multiple hover functionality tests were activated they didn’t work properly because the previous hover would still be active—the mouse position is reset before each functionality test now.
- Added
gh-pages
to the list of words ignored by the dictionary. - The toolbar design for Windows to more closely match the OS.
- When you signed-out of the Markbot interface it got stuck on the start-up screen.
- A bug in the start-up when detecting if the browser has started on Windows.
- Modified some of the error messages to match the language used in the new GitHub application.
- Added “Starting up…” to the start-up screen for a little better on-boarding.
- A new screenshots template for only 320 size.
- A new template for testing the hover state of navigation.
- A new template for checking common HTML semantic tags exist.
- A couple new templates for checking specific Modulifier classes.
- Some error messages now show links to cheat sheets and checklists on Learn the Web.
- [Backwards incompatible] The cheat detection system was getting bungled when the templates changed, now only the original
.markbot.yml
is locked, not the template-parsed version. - Removed the
text-align
restriction when using Typografier to allow for responsive alignments. - Offscreen elements that should be hovered with functionality tests are now made visible with
scrollIntoView()
instead of resizing the browser window. - Upgraded some dependencies.
- The positive accessibility message now only shows if they get grade better than 75%.
- The accessibility tests are now run on the full
document
instead of justbody
. - Some accessibility errors messages have been clarified or ignored as appropriate.
- The
allFiles.functionality
tests weren’t merging properly causing the tests to hang. - Attempted again to fix the font display issues before screenshots are taken by listening for a secondary font load event.
- Accessibility testing using a bunch of built-in template checks and the axe-core library.
- Git commit message best practice checking, including spelling, grammar, length & proper tense.
- Dependency checking on startup, specifically checks for Git command line & Java Development Kit.
- A warning message system that doesn’t impede handing homework in but gives “tips for next time”.
- Error messages can now output with sub-lists.
- An “underline” style for displayed messages.
- A “big-number” style for displayed messages.
- For
html.has
and*.search
there’s now alimit
option to disallow repetition of specific content. - Spaces before and after attribute equals signs are now called out as separate, more descriptive error messages.
- [Backwards incompatible] The Markbot file template
inherit
system now supports inheriting from multiple templates to make it more usable. - A check can now output errors, messages & warnings all at the same time.
- Upgraded the HTML & CSS validators.
- Upgraded a bunch of dependencies.
- The HTML validator now starts up when Markbot starts to make validation much faster: one initialization time instead of one of each HTML file.
- The web server now starts immediately instead of on demand when a file is dropped.
- The
has/Not
&search/Not
checks can now emit warnings with a new object syntax for each entry. Remains backwards compatible with the old array syntax, but warnings must use the new object syntax. - More error messages now display line numbers when available.
- Improved the
debug()
function’s ability to better handle different types. - Functionality tests are now wrapped in a function so they can
return
to short-circuit themselves. - The
outline
test now outputs the heading structure as a visible outline.
- [Backwards incompatible] The
.markbotignore
file is now taken into account when checking for cheating, it’s locked & compared.
- Add a new
offset()
function for functionality testing that will calculate the offset to the top of the page. - The
on()
function for testing now also accepts a pre-selected DOM element as it’s first argument. - HTML, CSS & JS files tests can now include a
maxLines
option to confirm the code is shorter than a certain number of lines. - Functionality tests can now have an optional
label
which Markbot will use to display next to the filename in the checks list.
- There’s a lot more error catching in the functionality tests to be more helpful and show more error messages in the “Activity” window.
- Fixed a small bug when there were empty tags, Markbot would force them onto separate lines which isn’t necessary.
- Shortcut keys and menu items to focus different regions of the Markbot window.
- Some more keyboard navigation & accessibility improvements, including improved focus states.
- Refactored some of the menu-driven code for simplicity.
- Refactored some of the task completion & initialization logic for more reliability.
- A bug where the “Open Repository” menu item wouldn’t work when there was no window.
- A bug where the menu items weren’t disabled when the main window was closed.
- Fixed a bug where if you held
Command/Ctrl
when clicking the check list links it would confusingly open a new instance of the Markbot window. - Fixed a bug where if the
.markbot.lock
file was missing locked files would get positively matched as “Unchanged”. - Fixed a bug where tasks were sometimes triggering their completion more than once, causing other tasks to never trigger completion.
- Functionality tests can now specify a
setup
option that will be injected into the page before it loads—it’s helpful for overwritingprompt()
to pass fake data. - A debugging toggle menu item to help debugging built versions of Markbot.
- Added a few small accessibility improvements related to keyboard navigation.
- Fixed a huge security hole when testing websites because of
nodeIntegration
being turned on. If the user’s website had downloaded a compromised Javascript file that used Node.js functionality it could completely control the user’s computer.nodeIntegration
is now off in testing windows & Markbot encapsulates Node.js required functionality into private methods. - The error messages for Javascript errors are cleaned up for when pieces of information are missing.
- Stopped the GitHub-related buttons from enabling when they shouldn’t be.
- Added a “Submit Assignment” entry to the “File” menu.
- Updated some cursors for when things are loading and added more
pointer-events: none
entries. - The submit button now says “Submitting…” when it’s contact the server and loading.
- Fixed the broken scrolling in the debug window caused by the previous fixed.
- Stopped the interface from scrolling when on the drop-a-folder screen.
- The submit button became enabled when there was nowhere to submit to, no
canvasCourse
entry.
- Added a small robot illustration to the start screen to differentiate Markbot from the other Toolbots.
- A few small visual design tweaks.
- The ability to pop the code open in Atom.
- The ability to pop the repository open on GitHub’s website.
- Completely revamped the interface to be more MacOS-like and more refined—including a new toolbar with buttons & a status display.
- A bug with the Markbot file
files
entry when listing a directory and there is no.markbotignore
file.
- Updated the version of Markdownlint to fix a bug with trailing spaces & front matter.
- Fixed a bug in the closing
</p>
tag checking for when there isn’t a matched closing</p>
tag and improved the paragraph indenting algorithm.
- Increased the compound selector limitation to 4 to allow more complex selectors for forms & error messages.
- The paragraph closing tag checking is a little more forgiving, especially when there are tags inside the
<p>
.
- Markdown Lint was not enforcing spaces after list markers (partial fix).
- Allow CSS4 form element pseudo-classes:
:required
,:valid
,:invalid
, etc.
- Removed the restriction on
font-weight
numbers—it was too strict.
- Support for Markdown validation & with the
md
entry. - Support for YAML validation & checking with the
yml
entry.
- Changed the “Unexpected indentation” message to say “Unexpected spacing or indentation” to be slightly more descriptive.
- The naming conventions checking wasn’t using the
.markbotignore
file causing some unnecessary naming convention errors.
- A bug when using Markbot without a
.markbot.yml
file and no files of a specific extension (e.g..js
) were found.
- CSS variable error ignoring because they aren’t part of the validator yet.
- The ability to specify a
.markbotignore
file that will make Markbot ignore files and folders.
- Removed the
DEBUG
config option inpackage.json
and replaced it with a new script:npm start debug
- More descriptive error message for the CSS validation errors including selectors & code snippets if available.
- The port finder & web server now work properly together and everything that uses the web server now gets the correct port.
- Added a
bounds()
function to the functionality tests that is just a shortcut togetBoundingClientRect()
. - Shortcut keys for browsing the website with the web server and on GitHub.
- Removed the
aria-describedat
error ignoring because ARIA 1.1 replaced the attribute witharia-details
. - Removed the
Cache-Control
andLast-Modified
headers from the web server requests—it was interfering with using the web server as testing & I don’t think (though could use more testing) that it affects the performance metrics. - The localhost server now uses PortFinder to find an open port and the port cannot be configured in
package.json
any more.
- Dragging to the Markbot icon in the dock didn’t work if there was already a visible window.
- The live website link in the positive messages opened within Markbot instead of the default browser.
- The
hover()
functionality test failed when the element to be hovered wasn’t visible—Markbot will now resize the hidden window to be sure the element is visible before hovering.
- Removed the
no-descending-specificity
Stylelint rule because it was causing too many, and weird problems for the students.
- The way Markbot checks to see if it’s done or has errors is now completely dependent upon the list of checks on the left. Markbot used to use a boolean to try and track now it just runs through the list of checks and looks at the status of each.
- The performance tests weren’t running because the unpacking mechanism wasn’t working properly creating a broken
node_modules
folder. There was an updated toelectron-builder
that needed to be installed.
- The live website checking will show the URL when the website is online—encouraging students to check it out on their mobile devices.
- Upgraded some dependencies to new versions.
- The titlebar for the screenshot comparison window now shows the width of the screenshot.
- On Windows the Markbot background processes were never quitting.
- A Windows bug where the tasks weren’t executing because the paths were being escaped incorrectly.
- Added a single-run process to the task queue—some students were having performance checking problems because of Markbot’s other tasks running concurrently.
- Move the
DEBUG
& theserverPort
settings into thepackage.json
file for simpler editing. - Rewrote the
require()
statements to better work off the main process. - Rewrote how the
markbot-main
module finds the main window to be more reliable.
- Fixed a bug in the screenshots where it didn’t tally which screenshots were completed properly.
- Added back the
asar
packing for the application. - An error message being displayed when the main window is closed and a folder is dropped to the dock icon.
- Ignore validation errors related to
aria-describedat
- Fixed a bug where the done checking interval wasn’t actually placed into a variable—therefore it was never cleared.
- Made the missing file error message for screenshots more descriptive.
- The web server wasn’t starting on Windows—I didn’t realize (for some reason)
openssl
was a dependency. I’ve now replaced it with a static key/cert pair. - Added a kludgy work around for Markbot not triggering its done state.
- Now the performance metrics don’t show that the website passed the performance budget when the website cannot be loaded.
- Disabled
asar
compression for the application—it was significantly slowing performance testing, by about 300ms. I’d love to be able to turn it back on in the future.
- The network used to test the performance of the website is output to the activity window.
- A new network setting that’s half way between WIFI and 4G called WIFI-REGULAR.
- The ability to control the maximum number of fonts for the website with the performance budget.
- The ability to have custom error messages in
has
&hasNot
CSS options. - The ability to detect if a media query exists without looking for properties inside.
- Tried to improve performance scores by introducing
max-age
and compression. Had to rewrite the whole web server layer. - The
<iframe>
tag is no longer required to be on separate lines. - Removed
listener
from being passed around and converted it into a module that can be required. - Completely rewrote the task queuing system to include a pool of task runners and queuing.
- Renamed a bunch of files because they were niggling me.
- The diff window is now automatically closed when Markbot is refreshed.
- The performance budget default template was getting merged with the users settings permanently.
- A bug in the diff window that prevented the split from touching the right edge.
- A bug in the diff window where it wasn’t always resized to the correct width to match the screenshot.
- The files checker will now throw an error if the
directory
options points to a location that doesn’t exist.
- Image dimensions
minWidth
andminHeight
can now be checked. - A directory can now be parsed by the
files
directive, relying on the settings ofallFiles
.
- Removed “ImageOptim” from the error message to make the error messages slightly more opaque.
- There’s now a timeout of
50ms
on events in the interaction testing—it was consistently firing too early, even with therequestAnimationFrame
slowdowns. - Extracted the directory listing & ignorable file list into their own modules.
- Changed the naming conventions check to use the new directory listing module.
- Remove the “Best practices, outlines… not checked” error when HTML files are locked.
- Markbot will now fail with an error when performing a
hover
functionality test and the element’s height or width is0
.
- A HAR is now generated for each page load so performance testing can be completed. This also adds a little more time to wait for the screen to fully render before triggering screenshots.
- A static web server & web loader is introduced to help with loading websites & emulating different network conditions —
https://localhost:8080
. - Performance testing for HTML files using The coach, including support for performance budgets.
- File & image checking: file sizes & emptiness, search inside text files, image smushing & dimensions.
- Added more asyncronization to the browser window loading to help get the Google Fonts shown on the screen before the screenshots are taken.
- Screenshots & functionality tests are now loaded through a web server.
- Change
has_not
andsearch_not
to use camel case:hasNot
andsearchNot
for consistency—maintaining backwards compatibility. - The loading gears message is now randomized for more funness.
- The big green check now bounces when submitted to Canvas for ultimate levels of fun.
- When trying to debug functionality tests, if types other than string were sent, an error was thrown. Markbot is a little more forgiving and will accept more types to debug now.
- A memory leak with too many
__markbot-hidden-browser-window-loaded
events being bound in the screenshot checking.
- Removed the
no-indistinguishable-colors
Stylelint rule—it was causing problems.
- Markbot now supports
<pre>
,<code>
and<textarea>
tags properly by ignoring indentation within the tags. - An unexpected indentation error was thrown when there was a space before a closing
>
in a tag, like:<h1 >
—this is now caught by Markbot, showing a more descriptive error message.
- Screenshots comparisons—if the tests pass—are still shown even when there are errors. Some students wanted to be able to get better screenshot results without having to constantly commit and sync.
- Clarified the live website error message to include a hint about capitalization on the GitHub servers.
- Updated dependencies, especially Stylelint, to new versions to handle more CSS.
- Markbot will now ignore
touch-action
andappearance
related CSS errors. - The screenshots were sometimes taken before the web fonts finished downloading—Markbot waits for the
document.fonts.ready()
event. - The window flashed white on load because the page wasn’t loaded yet—fix with the
ready-to-show
event. - Fix a bug in the cheat logging when one of the hashes was missing.
- Added more load checks for screenshots & functionality tests to help prevent incomplete loading issues.
- A bug in the cheat detection when HTML, CSS & JS files were changed, the interface still sometimes registered them as being unchanged.
- When Markbot detects cheating the error message is more detailed, including the names of the files and their hashes.
- The debug window now allows outputting
code
blocks with the backtick syntax.
- The validation Java paths are now output as code blocks in the activity window for consistency.
- Text within the Activity window can now be selected.
- The restricted file types search was looking inside
.git
folders and sometimes finding bad files. - When a single file is dropped to Markbot an alert is now shown and Markbot stops.
- When a folder is dropped that has no HTML, CSS or Javascript files Markbot will reset and show an alert.
- Upgraded to a newer version of the CSS validator that better supports
calc()
,attr()
and SVG properties—removing a bunch of hacky work arounds.
- A CSS validator parse error bug when there was a extra closing brace at the bottom of the file.
- A folder can now be dragged and dropped to the dock icon and MacOS will handle it.
- Restored the ability to drag and move the window.
- Prevented the window from scrolling horizontally when there are long code samples.
- Updated to the newer Electron build process.
- Simplified maintenance on Canvas IDs by removing them from the
.markbot.yml
file and moving them into Canvas itself.
- Update all the dependencies
- Fixed a bug in the Markbot file
inherit
property where it didn’t seem to be inheriting in some situations. - When HTML files are missing the unique content checker was still trying to run—hanging the process and never finishing.
- Added double+ space checking within lines to help prevent confusing “unexpected indentation” errors.
- Relaxed the file restrictions in the
restrictFileTypes
option.
- If the mouse move coordinates are negative in the hover test they are now set to 0—negative mouse coordinates do nothing.
- Fixed the functionality
hover()
tests that weren’t always returning properly for two reasons: if using a toggle nav, the testing screen width was too narrow; and transitions.
- Any folder can be dropped into Markbot and it will search for HTML, CSS & JS files to test.
- An
allFiles
entry for Markbot files that will share settings between all files of the same type. - An
inherit
entry for Markbot files so they can extend embedded templates. - A set of restricted file types that can be included with the
restrictFileTypes
option. - A
unique
search ability which will confirm that tag text, or an attribute on a tag, is different for every HTML file—like unique<title>
tags.
- Updated the configuration for Stylelint to better handle multi-line CSS values.
- The scrollbar doesn’t go under the top gradient for the checks panel now.
- Better support for void SVG tags.
- If CSS checks without media queries came after media queries their error messages would show them as being inside media queries.
- When the HTML & CSS
valid
option isn’t present but other options that require it are Markbot will bypass the checks.
- Ability to search within media queries for the CSS
has
andhas_not
checks.
- The filename inside of functionality errors wasn’t highlighted like other files.
- The positive messages & completed check sometimes showed prematurely—added a 100ms timeout that clears regularly.
- Added some error checking the HTML element matching for when there’s a problem in the Markbot file.
- When a folder wasn’t a Git repository the sync and commit checks were still getting green, even with error messages.
- Added a
hover()
function for functionality testing to see if elements change when hovered. - More status checking for Git & GitHub, including outstanding commits and pushes.
- A functionality test to confirm there are now errors in the Javascript:
noErrors
. - HTML document heading outline order verification.
- Some checks for
viewport
best practices: no maximum zoom, no disabling of user zooming. - An “Activity” window that shows the same information as console, but with clickable links and clearer for students.
- Refactored the functionality testing code to match how the new screenshot code runs.
- Clarified the live website error message.
- Groups are now tagged with the time to prevent quick refreshes & older check interference.
- The background of the diff window is now a transparency grid instead of white.
- Cleaned up error messages so code samples are highlighted instead of using Markdown-like backticks.
- Live website links are now clickable and open in a browser window.
- Added an
on()
function for functionality tests to help prevent listener timing issues. Theon()
function has the benefit of a timeout for listeners.
- Moved to the spread operator for debug statements.
- Functionality tests are now executed with
exec()
to help debugging and catch syntax errors.
- Completely rewrote and refactored the screenshot system to be based off events and message passing (as it should have been from the start) to fix a bunch of timing bugs.
- Fixed the differ screen for when the student’s screen shot was longer than the reference one: previously it was cropped.
- The live website testing didn’t work with capital letters in GitHub usernames.
- When the screenshots are successfully matched and there are no error messages, the screenshot differences show with a positive message.
- Javascript integration testing: whereby code can be run against a page with pass/fail tests & custom error messages.
- The live website can now be tested, using the repo’s GitHub URL and the student’s username.
- The screenshot difference percentage is now calculated based on the area of the image. This change was made to allow larger screenshots to be a little more strict—students were getting away with too much on big screenshots.
- Made the screenshot status pills go into computing/yellow mode earlier to better perception of speed.
- The menu items that linked to websites had an
undefined
in them because of code I reordered. - On Windows and older MacOS X, the checks list is now closer to the top because space for the traffic light buttons isn’t necessary.
- When the file to lock isn’t found a more descriptive error message is shown.
- When the Git repo has no commits or it’s not a repo Markbot shows an error message.
- File lock hashes can now be generated for the Markbot file, any files marked as
locked: true
, and the screenshots. - Markbot will now detect if the student cheated by changing the Markbot file, the screenshots, or the locked code files—this information is passed to Markbot Server.
- A signature is now sent to Markbot Server to confirm the URL wasn’t hacked.
- Fixed another HTML validation related bug on Windows.
- The ability to search the documents for content that shouldn’t exist,
search_not
. - The
search
andsearch_not
entries can now accept an array, where the second item is a custom error message. - The
has
&has_not
properties forhtml
can now have custom error messages. - Added a “Help” menu with links to the license, issues, the version on Windows & a link to the GitHub Issues page for the current assignment.
- Added a script,
hash-passcode
, that will hash theMARKBOT_LOCK_PASSCODE
environment variable and embed it (with asecret
) intoconfig.json
. - The “Develop” menu only becomes visible when the environment variables are present and the hashed passcode in
config.json
matches the environment variable. - Added menu items to preview the website locally and view the live website on GitHub.
- The main window now has a minimum resizable width and height.
- Removed the about screen on Mac OS X, replacing it with just the version number.
- The distance measurement for screenshot comparison is now higher—it matters a little less in the tested metrics.
- Updated the dependencies including Electron & ESLint.
- Changed the version updating script to hook into the
npm version
script.
- Add some more error checking in the HTML validation to fix a weird bug in Windows.
- Tried to make a better job of ignoring the CSS
calc()
validation errors. - Validation errors inside single line
@viewport
declarations were skipped—they will now be caught by best practices or properties checking. - Fixed a very specific screenshot bug: sometimes the cropping would cut at exactly the point needed to get 0% differences. This has been changed, now the images are cropped to match dimensions but the shorter one is lengthened.
- Error messages from regex searches now remove the
\
to help with clarity and understanding.
- Re-disabled the Node integration in the hidden screenshot window.
- Accidental drags of screenshot images don’t attempt to re-check the website.
- Fixed line breaking to better support Windows’s CRLF and other edge cases.
- Change the window loading detection to better handle remote resources.
- Move screenshot check initialization earlier to prevent Submit to Canvas button showing prematurely.
- Adjusted the gradient width to not cover interface border between the checks list and the error list.
- Updated dependencies.
- A Markbot file status message that says “Exists” is now shown at the top of the checks panel.
- Added a
has_not
element matching option to the HTML entry of the Markbot file that will throw an error if that element is encountered.
- Increased allowed screenshot differences to 13% based on student feedback.
- The labels on the diff window are more visible than before.
- The “Force Reload” menu item will now reload the focused window.
- The “Develop” menu can only be displayed with the
MARKBOT_DEVELOP_MENU
environment variable now. - Upgraded to a newer version of Electron, v0.36.9.
- Added basic CSS to enable hardware acceleration for the application windows.
- Markbot would attempt to bypass some checks without them every being initialized.
- Fix screenshot window resizing to support shorter screens after longer screens.
- Fix the differ’s split slider so that it’s properly centred on load.
- Screenshots for really long websites now capture the whole page without missing some at the bottom—up to a maximum of 6000 pixels.
- Fixed a bug when trying to check CSS properties: they are now not checked until the CSS is valid. Did the same for HTML for consistency.
- When the user’s screenshot was shorter than the reference, the reference one would show through into the user’s and cause confusion.
- CSS validator parse error message issue when it was the first line of the CSS file.
- The screenshot comparison results are now presented with a split view and difference window to make it easier to tell what’s wrong.
- Improved the installer DMG window graphics.
- Moved to using the
asar
packing format to decrease loading and copying times. - Rewrote the screenshot comparison functionality for better performance and accuracy.
- Debugging console messages are now grouped together to more easily see.
- Errors related to
svg:not(:root)
will now be ignored when the root specific rules are turned on. - The Canvas submission button still displayed hover effects when disabled.
- Add screenshot resizing to support retina displays.
- Screenshot difference percentages are now always sent to the console window for debugging.
- Updated the checking dependencies to fix a few errors.
- Stop forcing the
<script>
tag onto separate lines.
- When
@viewport
without vendor prefixes was the first line in the file a Javascript error was thrown.
- CSS can now be checked, using the
has_not
Markbot property, to make sure certain selectors don’t have specific properties—to enforce DRY.
- When screenshots are taken for multiple files only one “Screenshots” group heading is shown.
- Screenshot diffing will now round the mismatch percentage up and throw an error at exactly 10%, not above 10%.
- Markbot will display an error when trying to check screenshots if the HTML file is missing.
- Screenshots in error list now have a maximum height and can be zoomed (opened in default image viewer) by clicking.
- Markbot will send its current version number to Markbot Server to help prevent students from using outdated versions of Markbot.
- Refactored screenshot diffing system to support Windows more reliably and better support for slower events and processing.
- The green, successful pill buttons in the left checks column are no longer clickable, because they didn’t do anything anyways.
- Screenshot differences can now be compared against reference files.
- Reference screenshots can be generated from the “Develop” menu.
- Multiple file checking now works as expected, previously only the last file would be properly checked.
- Markbot is now capable of linting and stylistically checking Javascript with ESLint.
- Made the “Open Repo” only be enabled when the user is signed in.
- Clicking the robot head will now rerun the tests.
- Certain menu items are now enabled and disabled on demand.
- Clicking the pill buttons will jump down and highlight the associated error messages.
- Clicking the folder name will now reveal the folder (also includes a menu item).
- Some SVG attributes with uppercase letters were missing, causing validation errors.
- With SVG self closing tags, the error skipping was too aggressive and missed actual indentation errors.
- When working with embedded SVG, paths can get extremely long, Beautifier’s
max_line_length
is actually32786
, which is sometimes too short. Changed toNumber.MAX_SAFE_INTEGER
. - An error was thrown when the CSS file was empty. Markbot now checks that both HTML & CSS have contents before passing “Exists” test.
- Add missing menu items on Windows to support all of Markbot’s features and refactor menu code to clean it up.
- Fixes the Windows naming convention checking by normalizing paths and properly ignoring everything before the current folder.
- Fixes the Windows CSS validator issue: the validator was looking for a valid URL, not a path, so no backslashes.
- Code samples for expected code when confusing indentation is found.
- Better support for SVG—allowing uppercase letters in tags and ignoring closing
/>
in self-closing tags.
- Error message consistency in the use of periods at the end of sentences.
- The CSS validation script would throw an error when there was absolutely no CSS validation errors—I was only testing when there were errors to be ignored.
- Checks didn’t finish if the file doesn’t exist—they now all bypass with skip messages.
- Change the
<p>
tag selection regex to not grab SVGs<path>
tags also. - Stopped the code style checker from performing indentation checks because they aren’t good enough.
- Checks to confirm
<p>
tags are closed on the same line. - Checks to confirm all the document tags (
<head>
,<body>
, etc.) are in place. - Checks for missing optional closing tags like
<li>
. - Checks for maximum number of empty lines.
- Refactored the whole main process/render process messaging system to use events instead of callbacks.
- No HTML or CSS best practice checks will be completed until after the files are completely valid. Display greyed-out messages stating so to users.
- Change the whole HTML best practices process by doing lots of checks before getting to indentation—students were having lots of problems.
- Made the indentation checking more strict in enforcing multiple lines within tags.
- Allow SVG tags and properties to pass checks.
- Allow spaces in any folders of the path when running the JAR validators
- Initial release of the desktop app. Version 2.0.0 instead of one because there was another Markbot before—see the README.md.