If the onInit callback wasn't set before init() was called, make sure that an onInit callback passed to init() is called.
Accept the section title as just a string.
Pass options to GM_configDefaultValue. Fixes #49.
Add a link to the live demo
If there isn't a label prop, don't create a label element. Closes #52.
Little cleanup of the label adding code.
Allow some fields to optionally not be saved. Closes #51. Also don't add a label element to a button field since the label is on the button.
Return null from toValue if the node is null.
A changed needed because I'm an idiot.
Move reset method onto the field object in preparation for #54.
Allow for full JSON initialization of GM_config. Closes #53.
Implement custom field types. Closes #54.
Simplify custom type field creation.
Allow adding new fields, and modifying or deleting fields already defined at runtime IN MEMORY. Closes #18.
Remove unused prop.
Store the default value on the field object to make reseting a custom field type easier and simplify the default field reset code. I also encountered a durr moment when I realized we were treating the select field options like an object rather than an array when we created the field in toNode.
Enable removing and reloading individual fields while the config panel is open. Closes #57.
Improve code for removing and reloading fields in the config panel.
Correct a fuckup.
Remove redundant loop in save() and save non-null values in write(). This change ensures that custom types need only return the value they want saved from toValue(), rather than also having to set this.value for the field.