Skip to content

changelog

David Sowerby edited this page May 10, 2018 · 26 revisions

Change Log for krail

0.16.4.3 (2018-05-10)

Summary

  • Updated Readme and Release notes
  • Dev guide corrections of links and formatting
  • Typo correction
  • User Guide checked for format and linking errors
  • Fix 695 Documentation converted to rst and re-imported to ReadTheDocs
  • Removed old document control files
  • Title added
  • Tutorial migrated to RST
  • Dev guide and User guide files converted to RST. Document structure organised. The files will need tidying up - there are some conversion errors.
  • Docs to RST
  • Merge branch 'doc-rst' of https://github.com/davidsowerby/krail into doc-rst
  • Serialization fixes
  • User guide converted to RST
  • Limited changelog versions to 10

Issues closed

Documentation

  • 695 Consider migrating documentation back to ReadTheDocs

Detail

Updated Readme and Release notes


Dev guide corrections of links and formatting


Typo correction


User Guide checked for format and linking errors


Fix 695 Documentation converted to rst and re-imported to ReadTheDocs


Removed old document control files


Title added


Tutorial migrated to RST


Dev guide and User guide files converted to RST. Document structure organised. The files will need tidying up - there are some conversion errors.


Docs to RST


Merge branch 'doc-rst' of https://github.com/davidsowerby/krail into doc-rst


Serialization fixes


User guide converted to RST


Limited changelog versions to 10



0.16.3.0 (2018-04-27)

Summary

  • Update version and release notes
  • Fix 690 In UIScope, Guice keys are proxied using GuiceKeyProxy, readObject / writeObject methods introduced
  • Kotlin "org.jetbrains.kotlin.jvm" changed to old format to enable use of version variable

Issues closed

Fixes

  • 690 UIScope Serialization fails if it has content

Detail

Update version and release notes


Fix 690 In UIScope, Guice keys are proxied using GuiceKeyProxy, readObject / writeObject methods introduced


Kotlin "org.jetbrains.kotlin.jvm" changed to old format to enable use of version variable



0.16.2.0 (2018-04-26)

Summary

  • Updated Kotlin. Updated q3c-util to bring in GuiceKeyProxy (see #690). Cleared some compiler warnings

Issues closed

None

Detail

Updated Kotlin. Updated q3c-util to bring in GuiceKeyProxy (see #690). Cleared some compiler warnings



0.16.1.0 (2018-04-18)

Summary

  • Fix 6.8.8 Vaadin to 8.3.3

Issues closed

None

Detail

Fix 6.8.8 Vaadin to 8.3.3



0.16.0.0 (2018-04-17)

Summary

  • Build dependencies cleaned up, Readme and Release notes updated
  • Fix 684 Documented AOP serialisation issue. Fix 670 All relevant classes Serializable
  • Corrected some build scope entries, incorrectly had compile scope, or are now unnecessary> See 35
  • servlet-api is compileOnly, see 35
  • Correcting some fields to be final
  • Fix 685 MasterSitemapQueue removed. Also Fix 660 MasterSitemap was held by MasterSitemapQueue and therefore did not need to be Singleton - it is now
  • Fixed serialisation for DefaultViewFactory, and migrated it to Kotlin. Creating injector only when InjectorHolder.hasInjector is false (ServletContextListener)
  • Fixed serialisation for DefaultSitemapService. Migrated DefaultSitemapService to Kotlin
  • Corrected javadoc
  • Fix 683 Removed ServicesModule. It was uing AOP to invoke stop() during finalize()
  • Removed explicit dependency on service-api
  • Moved the invocation of InjectorFactory.createInjector to the ContextListener. Explicitly forced versions of dependencies where conflicting
  • Merge remote-tracking branch 'origin/serial_1' into serial_1
  • See 670 Service API and the implementation of it within Krail core simplified to better enable serialisation
  • Documentation typo
  • Dev guide goals added to contents
  • Documenting goals and objectives
  • Documenting goals and objectives
  • Documentation updates
  • Serailization in libraries and core complete, but Sitemap service needs to be externalised. The "clever" part of AbstractService is giving some issues with serialisation
  • DefaultUserNotifier and OptionPopup are Serializable
  • SerializationSupport and InjectorLocator (interface only) moved to q3c-util 1.0.0.0
  • Made Serializable: SubjectProvider, BrowserProvider, UserQueryDao, VaadinCurrentLocale
  • Short form SerializationSupport invokation added for use in non-View and UI situation. Several core classes made Serializable
  • VaadinCurrentLocale holds reference to SessionBusProvider instead of the bus instance
  • VaadinCurrentLocale made Serializable
  • Documentation amendments
  • Simplified bootstrap file structure
  • Documentation and log output changes
  • Exclusions for SerializationSupport simplified
  • Deserialization logic added to ScopedUI
  • Documentation updates
  • Documentation corrections after change to asciidoc
  • Documentation corrections after change to asciidoc
  • Converted documentation to asciidoc
  • ViewBase provides a readObject() method with SerializationSupport to re-inject from Guice where required after deserialization
  • Documentation updates
  • experimental
  • Functional tests passed
  • Replaced deprecated I18NKeys in tests
  • UserStatusChangeMessage replaced in VaadinCurrentLocale by UserHasLoggedIn
  • UserStatusChangeMessage replaced in UserSitemapBuilder by UserHasLoggedIn and UserHasLoggedOut
  • UserStatusChangeMessage replaced in DefaultNavigator by UserHasLoggedIn and UserHasLoggedOut
  • DefaultUserStatusPanel migrated to Kotlin, and uses new events, UserHasLoggedIn and UserHasLoggedOut
  • Moved login related I18NKeys to LoginLabelKey and LoginDescriptionKey - focus on feature context for I18NKey definition
  • see 670 Subject serialisation uses a JWT
  • See 670 Subject no longer stored directly in session

Issues closed

Fixes

  • 683 Service serialisation fails

Quality

  • 660 Why is MasterSitemap not a Singleton?
  • 685 Remove MasterSitemapQueue

Tasks

  • 670 Conform to Serializable sessions

Documentation

  • 684 Avoid using AOP

Detail

Build dependencies cleaned up, Readme and Release notes updated


Fix 684 Documented AOP serialisation issue. Fix 670 All relevant classes Serializable

SerializableSupport provided to assist in reconstructing dependencies through Guice as part of Deserialization


Corrected some build scope entries, incorrectly had compile scope, or are now unnecessary> See 35

Removed completely: groovy-all, Removed from runtime: spock-core, spock-guice, hamcrest-core Removed from Krail: servlet-api, but still brought in by com.github.mcollovati.vertx:vertx-vaadin8:0.4.0 No longer duplicated: jsoup


servlet-api is compileOnly, see 35


Correcting some fields to be final


Fix 685 MasterSitemapQueue removed. Also Fix 660 MasterSitemap was held by MasterSitemapQueue and therefore did not need to be Singleton - it is now


Fixed serialisation for DefaultViewFactory, and migrated it to Kotlin. Creating injector only when InjectorHolder.hasInjector is false (ServletContextListener)


Fixed serialisation for DefaultSitemapService. Migrated DefaultSitemapService to Kotlin


Corrected javadoc


Fix 683 Removed ServicesModule. It was uing AOP to invoke stop() during finalize()

AOP causes Serialization to fail, probably because the constructor for the byte enhanced class is not the same as the original class. It is probably just easier never to use AOP! This needs to be documented, see 684


Removed explicit dependency on service-api


Moved the invocation of InjectorFactory.createInjector to the ContextListener. Explicitly forced versions of dependencies where conflicting

Made provision for an application startup class, but not yet used. Added some debug logging


Merge remote-tracking branch 'origin/serial_1' into serial_1


See 670 Service API and the implementation of it within Krail core simplified to better enable serialisation


Documentation typo


Dev guide goals added to contents


Documenting goals and objectives


Documenting goals and objectives


Documentation updates


Serailization in libraries and core complete, but Sitemap service needs to be externalised. The "clever" part of AbstractService is giving some issues with serialisation


DefaultUserNotifier and OptionPopup are Serializable


SerializationSupport and InjectorLocator (interface only) moved to q3c-util 1.0.0.0


Made Serializable: SubjectProvider, BrowserProvider, UserQueryDao, VaadinCurrentLocale


Short form SerializationSupport invokation added for use in non-View and UI situation. Several core classes made Serializable


VaadinCurrentLocale holds reference to SessionBusProvider instead of the bus instance


VaadinCurrentLocale made Serializable


Documentation amendments


Simplified bootstrap file structure


Documentation and log output changes


Exclusions for SerializationSupport simplified


Deserialization logic added to ScopedUI


Documentation updates


Documentation corrections after change to asciidoc


Documentation corrections after change to asciidoc


Converted documentation to asciidoc


ViewBase provides a readObject() method with SerializationSupport to re-inject from Guice where required after deserialization


Documentation updates


experimental


Functional tests passed


Replaced deprecated I18NKeys in tests


UserStatusChangeMessage replaced in VaadinCurrentLocale by UserHasLoggedIn


UserStatusChangeMessage replaced in UserSitemapBuilder by UserHasLoggedIn and UserHasLoggedOut


UserStatusChangeMessage replaced in DefaultNavigator by UserHasLoggedIn and UserHasLoggedOut


DefaultUserStatusPanel migrated to Kotlin, and uses new events, UserHasLoggedIn and UserHasLoggedOut


Moved login related I18NKeys to LoginLabelKey and LoginDescriptionKey - focus on feature context for I18NKey definition


see 670 Subject serialisation uses a JWT

The useful part of the JWT (the body) is parsed out as a KrailJWTBody Many of the changed files migrated to Kotlin


See 670 Subject no longer stored directly in session

Subject is not Serializable, but its principals are. Principals are stored in the session, and a new Subject instance created to holde the principals when needed.



0.15.0.0 (2018-03-03)

Summary

  • Fix 659 Vaadin to 8.3.1
  • Separated Guice module collation from Injector creation.
  • Fix 668 Documentation restructured for a move to GitBook

Issues closed

Tasks

  • 655 com.vaadin:vaadin-server 8.2.1
  • 659 com.vaadin:vaadin-server 8.3.0

Documentation

  • 668 ReadTheDocs search not working

Detail

Fix 659 Vaadin to 8.3.1

Added notes on injector scope in Vert.x Also fix 655 (earlier Vaadin version)


Separated Guice module collation from Injector creation.

This is in preparation for enabling Vert.x, and will also helps with integration testing, see 581 and also with Kotlin DSL for module configuration, see 663


Fix 668 Documentation restructured for a move to GitBook



0.14.0.0 (2018-02-19)

Summary

  • Updating documentation for release
  • Added getter for localeCombo in DefaultApplicationUI for testing
  • Fix 667 LocaleSelector is used more as a data provider, with the combo provided to it. This means the combo is visible to the ComponentIdGenerator
  • FormsModule removed, Validator set up moved to KrailValidationModule
  • Added new dev guide page to documentation index
  • Documenting Functional Test Support
  • Fix 645 Integrated EasyBinder addon to provide Validation and basic Form support
  • Updated glossary to properly describe use of terms susch as fragment, and route. see 657
  • Removed test (should be with functional test support)
  • Added EasyBinder to build
  • Moved functional test support to testapp
  • Restructured ViewElement and PageElement to a common CompositeElement. PageObjectGenerator generation of custom objects corrected parameter
  • RouteMap as a distinct identity, so that it can be exported to JSON. Functions for JSON export and import provided for it.
  • Renamed MenuElement to MenuBarElement for consistency with Vaadin component names
  • FunctionalTestSupport restructured, more future proof, and easier to lookup a view and page id from a route
  • MenuElement added
  • LogInOut tests successfully using generated page objects
  • Transfer of id corrected for CustomObject . Moved common elements into Krail core
  • PageObject generation completed
  • Ensures class names as recorded by the ComponentIdGenerator do not include "$$" if their object have been enhanced by Guice
  • FunctionalTestSupport creates a model of URL fragment to View, and mapping of component ids. Mapping of component ids also for UI
  • revised ComponentIdGenerator to drill down by default, and also to always assign when drill-down is true
  • Found and removed more hardcoded component ids
  • Disabled failing test (see #652)
  • Added toString() to NavigationState
  • Component ids generated automatically and removed hardcoded setId from views
  • BindingManager allows overriding SitemapModule and ServicesModule
  • Sitemap bind methods changed to protected
  • Non-breaking changes to LoginView in support of functional testing. Kotlin updated
  • DefaultUserNavigationTree.afterViewChange uses event data in place of retrieving current node. Tests added/amended
  • Corrected test
  • Fix 656 Correctly handles change to URI through the browser address bar
  • Fix 648 FileResource appears not to work under Vaadin 8, using ThemeResource instead, see Vaadin issue
  • Fix 647 Replaced missing bus subscribes
  • LocaleSelection re-written. Test app runs but has some bugs.
  • Removed redundant ConverterFactory in test. All references to Vaadin 7 noow gone, and compatibility server removed from build.gradle
  • Removed deprecated messageIn from PushMessageRouter
  • Label instances to Vaadin 8
  • Removed use of call to deprecated NavigationState.addParameter
  • Update to uk.q3c.krail:krail-persist-api:0.14.0.0 This removes VaadinContainerProvider (Container not used in Vaadin 8)
  • SourceTreeWrapper_VaadinTree to Vaadin 8 Tree
  • Removed deprecated get.... methods from BusProviders
  • DefaultUserNavigationTree uses Vaadin 8 Tree
  • BeanValidator also removed to enable quicker move to Vaadin 8. See 645
  • BeanFieldGroup and its associated classes have been removed completely.
  • Kotlin to 1.2.10
  • Replace reference to Vaadin 7 Property in {javadoc}
  • Removed all references to Container from Option code - also removed from krail-option-api
  • Removed VaadinOptionSource, and experimental sys admin pages which used it. No real value in these experimental items
  • LocaleContainer acts as a builder for Vaadin 8 data model, and returns a ListDataProvider
  • Removed I18N support for Vaadin 7 Table
  • Vaadin 8.2.0 Slight change to handling of Notification
  • Vaadin 8.1.5
  • Vaadin 7 Grid replaced by Vaadin 8. I18NAnnotationProcessor no longer supports the version 7 Grid
  • Javadoc only. Replaced reference to deprecated MessageFormat
  • Page.UriFragmentChangedListener replaced by Page.PopStateListener. Mainly affects Navigator
  • References to Property interface replaced
  • Replaced internal deprecated calls
  • Fix 587 EventBus API provided by library eventbus-api. Fix 643 Implementation independent EventBus
  • Updated to latest Option, which uses OptionChangeMessage via the eventBus in place of callback. Option 'test' package was renamed 'mock'
  • OptionBinder wraps Vaadin 8 binder to create OptionPopup. ConverterFactory removed from where no longer used
  • Components to Vaadin 8
  • Typos correction
  • @Value annotation does not work on Label now. Label does not implement HasValue (replacement for Property) - TextField used for testing instead
  • Various standard components to Vaadin 8
  • NavigationButtonPanel has all Vaadin 8 components
  • DefaultI18NProcessor handles both Vaadin 7 and 8 Grids
  • version to 0.14.0.0
  • Updated release notes

Issues closed

Fixes

  • 647 Log in / out only partially working
  • 648 Icons missing from LocaleSelector
  • 656 Browser back causes error
  • 667 LocaleSelector is not getting an id

Enhancements

  • 587 Split EventBusModule

Tasks

  • 643 Migrate to independent EventBus API

Detail

Updating documentation for release


Added getter for localeCombo in DefaultApplicationUI for testing


Fix 667 LocaleSelector is used more as a data provider, with the combo provided to it. This means the combo is visible to the ComponentIdGenerator


FormsModule removed, Validator set up moved to KrailValidationModule


Added new dev guide page to documentation index


Documenting Functional Test Support


Fix 645 Integrated EasyBinder addon to provide Validation and basic Form support

FormsModule provides an instance of javax.validation.Validator, configured to use KrailInterpolator. The EasyBinder class uses that to construct instances of binder provided by the EasyBinder addon


Updated glossary to properly describe use of terms susch as fragment, and route. see 657


Removed test (should be with functional test support)


Added EasyBinder to build


Moved functional test support to testapp


Restructured ViewElement and PageElement to a common CompositeElement. PageObjectGenerator generation of custom objects corrected parameter


RouteMap as a distinct identity, so that it can be exported to JSON. Functions for JSON export and import provided for it.

This assists with: see 1


Renamed MenuElement to MenuBarElement for consistency with Vaadin component names


FunctionalTestSupport restructured, more future proof, and easier to lookup a view and page id from a route


MenuElement added


LogInOut tests successfully using generated page objects


Transfer of id corrected for CustomObject . Moved common elements into Krail core


PageObject generation completed


Ensures class names as recorded by the ComponentIdGenerator do not include "$$" if their object have been enhanced by Guice


FunctionalTestSupport creates a model of URL fragment to View, and mapping of component ids. Mapping of component ids also for UI


revised ComponentIdGenerator to drill down by default, and also to always assign when drill-down is true


Found and removed more hardcoded component ids


Disabled failing test (see #652)


Added toString() to NavigationState


Component ids generated automatically and removed hardcoded setId from views

Corrected documentation headings - spacing was incorrect for Markdown


BindingManager allows overriding SitemapModule and ServicesModule


Sitemap bind methods changed to protected


Non-breaking changes to LoginView in support of functional testing. Kotlin updated


DefaultUserNavigationTree.afterViewChange uses event data in place of retrieving current node. Tests added/amended

Added test for correct expansion of DefaultUserNavigationTree node in response to URI change Corrected LocaleContainerTest - a ThemeResource is always returned by the IconGenerator {{javadoc}} corrected reference in class javadoc


Corrected test


Fix 656 Correctly handles change to URI through the browser address bar

Vaadin 8 deprecated UriFragmentChangedEvent to Page.PopStateEvent. The PopStateEvent contains the full URI, as opposed to the URI fragment previously carried by UriFragmentChangedEvent.

URIFragmentHandler.navigationState(URI uri) added

Some corrections made to the misuse of "URI" where it should have been "fragment" - see 657


Fix 648 FileResource appears not to work under Vaadin 8, using ThemeResource instead, see Vaadin issue


Fix 647 Replaced missing bus subscribes

Change to Auto Subscription meant some @SessionBus subscriptions were missing Also see 651, a comment describes attempt to do a quick fix and got "UIScopeException: UI and uiKey are null" - that has been fixed, bus migration will need to be a bit more thoughtful


LocaleSelection re-written. Test app runs but has some bugs.

LocaleContainer becomes an interface and implementation (DefaultLocaleContainer) re-written. DefaultLocaleSelector modified to attach container after its containing View has completed building. The new container was accessing the UI before the UI was ready. KrailI18NModule contains new bindings and that caused a lot of tests to need updating. OptionTestBase moved from src to test folder.

New tests (and some modified tests) using Kotlin with Kluent.


Removed redundant ConverterFactory in test. All references to Vaadin 7 noow gone, and compatibility server removed from build.gradle


Removed deprecated messageIn from PushMessageRouter


Label instances to Vaadin 8


Removed use of call to deprecated NavigationState.addParameter


Update to uk.q3c.krail:krail-persist-api:0.14.0.0 This removes VaadinContainerProvider (Container not used in Vaadin 8)

Large number of tests modified to use InMemoryModule directly, as without containers, there is no need for a VaadinInMemoryModule


SourceTreeWrapper_VaadinTree to Vaadin 8 Tree


Removed deprecated get.... methods from BusProviders


DefaultUserNavigationTree uses Vaadin 8 Tree


BeanValidator also removed to enable quicker move to Vaadin 8. See 645


BeanFieldGroup and its associated classes have been removed completely.

This attempt at support for Forms has been dropped from this release, so that dependencies on Vaadin 7 can be completely removed. Forms support will be redeveloped and re-instated as a priority - possibly using Vaadin addons EasyBinder and/or Viritin, though that has yet to be decided.


Kotlin to 1.2.10


Replace reference to Vaadin 7 Property in {javadoc}


Removed all references to Container from Option code - also removed from krail-option-api


Removed VaadinOptionSource, and experimental sys admin pages which used it. No real value in these experimental items


LocaleContainer acts as a builder for Vaadin 8 data model, and returns a ListDataProvider


Removed I18N support for Vaadin 7 Table


Vaadin 8.2.0 Slight change to handling of Notification


Vaadin 8.1.5


Vaadin 7 Grid replaced by Vaadin 8. I18NAnnotationProcessor no longer supports the version 7 Grid


Javadoc only. Replaced reference to deprecated MessageFormat


Page.UriFragmentChangedListener replaced by Page.PopStateListener. Mainly affects Navigator


References to Property interface replaced


Replaced internal deprecated calls


Fix 587 EventBus API provided by library eventbus-api. Fix 643 Implementation independent EventBus

Library eventbus-mbassador provides implementation. MessageBus replaces MessageBusProvider. Changes to tests made to accommodate design change. One mysterious change needed to Option_IntegrationTest.write_to_Cache_invalidate(), which required the very last assertions changing from:

assertThat(actualHigh).isNotNull();
assertThat(actualLow).isNotNull();

To

assertThat(actualHigh).isNotPresent();
assertThat(actualLow).isNotPresent();

THe new version makes sense, but unclear how the test could have worked before


Updated to latest Option, which uses OptionChangeMessage via the eventBus in place of callback. Option 'test' package was renamed 'mock'


OptionBinder wraps Vaadin 8 binder to create OptionPopup. ConverterFactory removed from where no longer used


Components to Vaadin 8


Typos correction


@Value annotation does not work on Label now. Label does not implement HasValue (replacement for Property) - TextField used for testing instead


Various standard components to Vaadin 8


NavigationButtonPanel has all Vaadin 8 components


DefaultI18NProcessor handles both Vaadin 7 and 8 Grids


version to 0.14.0.0


Updated release notes



0.13.0.0-v7compat+1 (2017-10-03)

Summary

  • Disabled merge to master
  • Update kaytee-plugin to 0.18.10.0
  • Update Release Notes
  • Readme update - versions for Vaadin 8 transition
  • Readme update - versions for Vaadin 8 transition
  • Update kaytee-plugin, Fix 631 and Fix 622
  • Fix 629 Changed to v7 compatibility import for Tree. All tests now pass
  • See 629 Changed AbstractField and TextField imports to v7 compatibility type, fixes DefaultOptionPopupTest
  • Merge pull request 628 from taurus227/vaadin8
  • Fix 607 Change vaadin version to 8.1.3
  • Fix 607 Changes for Vaadin8
  • Fix 627 Change vaadin version to 8.1.3
  • Vaadin8: Ran migration tool
  • Disabled KayTee plugin

Issues closed

Fixes

  • 622 KayTee build: Generate Change Log failed
  • 629 Test failures after upgrade to Vaadin 8
  • 631 Collaborators unable to build without API token

Enhancements

  • 607 Consider running as embedded

Tasks

  • 627 com.vaadin:vaadin-server 8.1.3

Detail

Disabled merge to master


Update kaytee-plugin to 0.18.10.0


Update Release Notes


Readme update - versions for Vaadin 8 transition


Readme update - versions for Vaadin 8 transition


Update kaytee-plugin, Fix 631 and Fix 622

Update enables normal clone and build to take place without the need for API keys. Cleaning up dependencies for Hamcrest matchers in the chain also appears to have fixed the change log generation failure


Fix 629 Changed to v7 compatibility import for Tree. All tests now pass


See 629 Changed AbstractField and TextField imports to v7 compatibility type, fixes DefaultOptionPopupTest


Merge pull request 628 from taurus227/vaadin8

Vaadin8


Fix 607 Change vaadin version to 8.1.3


Fix 607 Changes for Vaadin8


Fix 627 Change vaadin version to 8.1.3


Vaadin8: Ran migration tool


Disabled KayTee plugin



0.10.2.0 (2017-08-31)

Summary

  • Fix 626 Gradle wrapper was git ignored
  • Tutorial I18N Components and Validation Complete
  • Tutorial I18N Complete
  • Tutorial User Access Control Complete
  • Tutorial Configuration from ini file complete
  • Tutorial Options and UserHierarchies Complete
  • Tutorial User Notification complete
  • Tutorial UI & Theme complete
  • Tutorial 'Pages and Navigation' complete

Issues closed

None

Detail

Fix 626 Gradle wrapper was git ignored

Removed redundant Kotlin dependencies Updated wrapper task to 4.1 Tutorial updates removed mavneLocal() from build.gradle to avoid difference between local and public run


Tutorial I18N Components and Validation Complete


Tutorial I18N Complete


Tutorial User Access Control Complete


Tutorial Configuration from ini file complete


Tutorial Options and UserHierarchies Complete


Tutorial User Notification complete


Tutorial UI & Theme complete


Tutorial 'Pages and Navigation' complete



0.10.1.0 (2017-08-27)

Summary

  • KayTee plugin updated
  • Tutorial 'Getting Started' amended. Tutorial functional at this point
  • Amend Tutorial

Issues closed

None

Detail

KayTee plugin updated


Tutorial 'Getting Started' amended. Tutorial functional at this point


Amend Tutorial



Clone this wiki locally