# Observe.js - Change Log:
## Version 1.1.0:
- Improved the HTML testing files.
- Improved event assigning, and re-organized the code into separate files.
- The GUIDs generated now used the "crypto.randomUUID()" instead of the custom-built one (this is now RFC4122-compliant).
- Updated all the NPM packages to the latest versions.
- Moved all event assignments to use lambdas.
- Updates to the README files to make the features stand out.
- Added an ignore path for ".DS_Store" files when packing the NuGet package.
- Removed replicated conditions to check for DOM elements.
- Internal renames to reflect the correct return types.
#### **Language Shift:**
## Version 1.0.1:
- Updated to the latest NPM packages.
- Organized all of the .ts files into separate folders.
- Removed the dead JS code.
## Version 1.0.0:
#### **Language Shift:**
- The entire project has been rewritten in TypeScript, allowing all components to be exported, which allows better support for libraries such as React, Angular, etc.
- Added CDN links for the minimized version of the files.
- The TypeScript code is compiled to ES2016 instead of ES5 (older browsers, such as IE, are no longer supported).
#### **Building:**
- You can now run separate builds to produce CJS, ESM, and Minimized project versions.
- All files not required for the NPM packages have now been excluded.
#### **Watch Options:**
- BREAKING: All the event custom triggers are now under a new section called "events".
#### **Configuration Options:**
- BREAKING: All the text options are now under a new section called "text".
#### **Testing:**
- Removed the "src" and "dist" folders under "test". Only the dist versions remain, removing duplication.
- Added "BUILD_INSTRUCTIONS.md" to help first-time users set up their dev environments.
## Version 0.8.2:
- Added export support for the global "$observe" object, which can now be imported as "observe.js".
- BREAKING: Renamed the binding attribute "data-observe-watch-options" to "data-observe-js".
## Version 0.8.1:
- The "unload" window event has been replaced with "pagehide" (due to "unload" being deprecated).
- The public function "setConfiguration()" will now only update the configuration if something in the configuration has been changed.
- All public functions now only accept the right variable types for data (to prevent issues from occurring).
- Added "use strict" support internally and updated all public functions to use the new scope.
## Version 0.8.0:
#### **Binding Options:**
- Added a new binding option called "removeAttribute", which states if the binding attribute should be removed (defaults to true).
#### **Configuration Options:**
- Added a new configuration option called "objectErrorText", which states the error text that should be shown when an object error is detected (defaults to "Errors in object: {{error_1}}, {{error_2}}").
- Added a new configuration option called "attributeNotValidErrorText", which states the error text that should be shown when a binding object isn't valid (defaults to "The attribute '{{attribute_name}}' is not a valid object.").
- Added a new configuration option called "attributeNotSetErrorText", which states the error text that should be shown when a binding attribute isn't set (defaults to "The attribute '{{attribute_name}}' has not been set correctly.").
#### **General Improvements:**
- All console error logging now goes through the correct method.
- Objects are now checked and defaulted properly when invalid values are passed.
- Updated the formatting used in the "package.json" file so that it can always be parsed.
#### **Documentation:**
- Minor tweaks to the documentation.
## Version 0.7.1:
- Fixed a fault that caused clearTimeout() to be called instead of clearInterval().
## Version 0.7.0:
#### **Rules:**
- Watches will now only start if an object can be found (is not null, or the DOM element exists).
#### **Binding Options / Function Options - Custom Triggers:**
- Added a new binding/option custom trigger called "onStart", which states an event that should be triggered when a watch is started.
#### **General Improvements:**
- Added Math injection directly into the main instance.
- Added JSON injection directly into the main instance.
- Improved keywords in the package files.
#### **Documentation:**
- Added install instructions into the main README files.
- Added documentation that states how issues and new feature requests should be raised.
#### **Fixes:**
- Fixed the "observe.js.nuspec" file including the ".github" folder when NuGet PACK is called.
## Version 0.6.1:
- Updated project homepage URL.
- Fixed the binding property "allowPausing" defaulting to "null" instead of "true" when not manually set.
## Version 0.6.0:
#### **Binding Options / Function Options:**
- Added a new binding/option called "allowCanceling", which states the watch can be cancelled (defaults to true).
- Added a new binding/option called "allowPausing", which states the watch can be paused (defaults to true).
#### **Public Functions:**
- Added new public function "pauseWatches()", which is used to pause all the watches for a specific number of milliseconds.
- Added new public function "resumeWatches()", which is used to resume all the watches currently paused.
#### **General Improvements:**
- Minor internal refactoring to make things a little clearer.
#### **Fixes:**
- Fixed some errors in HTML files when calling the public functions.
## Version 0.5.1:
- Project description update.
- Minor documentation updates.
- Fixed a small fault that prevented the total changes from being handled correctly when a watch was stopped.
- Added support to watch array objects for changes.
## Version 0.5.0:
#### **New Features:**
- Added specific properties watch support! This will only watch for changes in specific properties on an object, instead of all of them by default.
#### **Binding Options / Function Options:**
- Added a new binding/option called "propertyNames", which states the property names that should be watched for changes (defaults to all).
#### **Binding Options / Function Options - Custom Triggers:**
- Added a new binding/option custom trigger called "onRemove", which states an event that should be triggered when a DOM element is removed.
#### **Public Functions:**
- Added new public function "resumeWatch()", which is used to resume a watch that has been paused.
#### **Fixes:**
- Fixed a fault that allowed comparisons between arrays and objects (was causing some script errors).
#### **Documentation:**
- Fixed some of the documentation mistakes.
## Version 0.4.0:
#### **Public Functions:**
- Added new public function "searchDomForNewWatches()", which is used to search the DOM for new elements to watch, then adds them.
#### **BREAKING CHANGES:**
- Renamed the DOM attribute "data-observe-options" to "data-observe-watch-options".
- Renamed the public function "watchObject()" to "watch()".
#### **General Improvements:**
- Minor internal refactoring to make things a little clearer.
#### **Fixes:**
- Fixed a fault that prevented the binding attribute from being removed from the DOM elements.
- Fixed a fault that prevented changes from being detected when a DOM element is removed from the DOM.
- Fixed some properties being assigned to internal watches when not required.
## Version 0.3.0:
#### **New Features:**
- Added "Pause Timeout On Change" support, which will force the watch to wait a specific number of milliseconds before detecting changes again when a change is detected.
#### **Binding Options / Function Options:**
- Added a new binding/option called "pauseTimeoutOnChange", which states the milliseconds to wait for new changes to be detected when a change is detected (defaults to 0, which is off).
#### **Public Functions:**
- Added new public function "cancelWatches()", which is used to cancel all the watches currently running, or paused.
- Added new public function "getWatches()", which is used to return all the watches currently running, or paused.
- Added new public function "pauseWatch()", which is used to pause a running watch for a specific number of milliseconds.
#### **General Improvements:**
- When the page is unloaded, all active watches are now cancelled.
#### **Documentation:**
- Fixed some of the documentation spelling/grammar mistakes.
## Version 0.2.0:
#### **New Features:**
- Added "Reset" support, which will force any object to be reset back to its original value when a change is detected.
- Added "Cancel On Change" support, which will force a watch to cancel when the first change is detected in an object.
- Added "Maximum Changes Before Canceling" support, which states how many changes are allowed before a watch is cancelled.
- Added "Starts" support, which states a date/time a watch should be started.
#### **Binding Options / Function Options:**
- Added a new binding/option called "reset", which states if an object should be reset back to its original value when a change is detected (defaults to false).
- Added a new binding/option called "cancelOnChange", which states if a watch should be cancelled when the first change is detected (defaults to false).
- Added a new binding/option called "maximumChangesBeforeCanceling", which states the total number of changes allowed before a watch is cancelled (defaults to 0, which for off).
- Added a new binding/option called "starts", which states the date/time a watch should start (defaults to null).
- Renamed the binding/option "observeTimeout" to "timeout".
#### **Binding Options / Function Options - Custom Triggers:**
- Added a new binding/option custom trigger called "onCancel", which states an event that should be triggered when a watch is cancelled.
#### **Public Functions:**
- Added new public function "getWatch()", which is used to return all the watch properties for an object being watched.
- Removed the public function "cancelDomElementWatch()", as "cancelWatch()" will now do it for you.
#### **Watching:**
- Changes are now detected for HTML DOM element objects when attributes are updated.
#### **General Improvements:**
- Refactored lots of the internal code to align with the naming of the areas.
#### **Documentation:**
- Fixed some of the documentation referencing the wrong properties.
#### **Fixes:**
- Fixed the "expires" binding/option not accurately checking the expired date and time.
- Fixed a script error that occurred sometimes when a watch is cancelled using the public function "cancelWatch()".
## Version 0.1.0:
- Everything :)