Date Released #

Final: April 30, 2018
Final Candidate 3: April 26, 2018
Final Candidate 2: April 15, 2018
Final Candidate 1: April 8, 2018
Beta 12: March 26, 2018
Beta 10: March 21, 2018
Beta 9: March 20, 2018

Desktop #

Type Change
[ADD] GraffitiHTMLEditor now has four new properties for controlling margins around content: EditorMarginTop, EditorMarginRight, EditorMarginBottom, and EditorMarginLeft.
[FIX] GraffitiHTMLEditor regression with link failure from toolbar fixed (for good this time).
[FIX] GraffitiHTMLExporter now properly converts <p><br /><p> HTML segments in the toEmail method.
[FIX] GraffitiSwitch animation updated to use a timer rather than a tight loop.
[FIX] GraffitiSwitch once again animates properly on HiDPI screens.
[FIX] GraffitiSyntaxEditor once again properly sets content of the editor when the Content property is assigned in the Open event.
[FIX] GraffitiTagField once again draws properly on HiDPI displays.

Web #

Type Change
[ADD] GraffitiWebCalendar now has a LockUpdate property which should be used when making a large amount of changes to the instance’s events.
[ADD] GraffitiWebCalendar’s DateSelected event now has mouseX and mouseY parameters (Thanks to Luciano Monti).
[ADD] GraffitiWebCalendar now has a ScrollToTime( d as Date ) method which only functions in those views that display time slats.
[ADD] GraffitiWebCalendar now has additional views. All current Views: Month, Agenda, AgendaWeek, AgendaDay, Basic, BasicWeek, BasicDay, List, ListYear, ListMonth, ListWeek, ListDay
[ADD] GraffitiWebCalendar now has a HidePastEvents as Boolean property.
[ADD] GraffitiWebCalendar now has a RestrictEventsDisplay as Boolean property. When True and using object-based restrictions, events not within the restriction timeframe will be hidden.
[ADD] GraffitiWebCalendar now has a RestrictSelection as Boolean property. When True and using object-based restrictions, users will not be able to select dates/times that fall outside the defined restrictions.
[ADD] GraffitiWebChart now has a LockUpdate property which should be used when modifying data outside of the Open event, especially when using the DeleteAll method to reinitilaize the display with new data.
[ADD] GraffitiWebChart has a new Image As Picture property, which converts the BASE64 content of ImageData to a Picture.
[ADD] GraffitiWebContextMenu now allows for assigning WebStyles to menus as an additional parameter in the BindTo method.
[ADD] GraffitiWebContextMenuItem now has an additional Constructor for supplying a WebStyle.
[ADD] GraffitiWebGrid now has a EditCell( Row as Integer, Column as Integer ) method.
[ADD] GraffitiWebGrid now has SetRowStyle and RemoveRowStyle methods. These will NOT overwrite cell styles or row selection styles.
[ADD] GraffitiWebGrid now has a toCSV() as String function.
[ADD] GraffitiWebGrid now has a RowEnabled( Row as Integer, Assigns State as Boolean ) method for disabling editing on rows.
[ADD] GraffitiWebGrid now has a RowEnabled( Row as Integer ) as Boolean method for determining if a row is currently enabled.
[ADD] GraffitiWebGrid now has a ScrollTo( X as Integer, Y as Integer ) method for scrolling the display.
[ADD] GraffitiWebGrid now has a ScrollToCell( Row as Integer, Cell as Integer ) method for scrolling a cell in to view.
[ADD] GraffitiWebHTMLEditor now has a WordWrap As Boolean property.
[ADD] GraffitiWebHTMLEditor now supports more web-safe fonts.
[ADD] GraffitiWebHTMLEditor now supports more font sizes.
[ADD] GraffitiWebHTMLEditor now supports background colors.
[ADD] GraffitiWebPopupMenu now has a LockUpdate property to buffer item addition. Setting to False causes the UI to update immediately.
[ADD] GraffitiWebQRReader now has an Error event that provides the error text returned when attempting to capture.
[ADD] GraffitiWebSlider
[ADD] GraffitiWebSpeechRecog.Start now has a userLanguage as String parameter which accepts an ISO 639-1 language_region code. If this parameter is undefined, the browser will automatically use the default language from the UserAgent string.
[ADD] GraffitiWebAlert version 2.0
[ADD] GraffitiWebFontAwesome version 2.0
[REMOVE] GraffitiWebAlert version 1.0
[REMOVE] GraffitiWebFontAwesome version 1.0
[REMOVE] GraffitiWebToggle no longer has CanClick and CanDrag properties. These are now both enabled by default.
[FIX] GraffitiWebAccordionNavItem constructor’s Count parameter is now optional.
[FIX] GraffitiWebCalendar once again properly honors EndDate times when the EndDate’s date is the same as StartDate.
[FIX] GraffitiWebCalendar now properly retains the view date when switching between month and other views instead of jumping back to Day 1 of the month.
[FIX] GraffitiWebCalendar no longer reloads removed events after calling RemoveAllEvents then adding new events (events events events).
[FIX] GraffitiWebCalendar no longer fires ViewChanged far more often than it should.
[FIX] GraffitiWebCalendar no longer returns the EndDate + 1 in DateSelected. It now returns one second before midnight of the true end date.
[FIX] GraffitiWebCalendar now properly updates event’s AllDay and EndDate properties when dragged through the various views.
[FIX] GraffitiWebCalendar now properly updates AllDay events’ time when resized.
[FIX] GraffitiWebCamera now properly scales images based on browser DPI.
[FIX] GraffitiWebChart now properly responds to DeleteAll, but must be used in conjunction with LockUpdate to avoid errors. DeleteAll will automatically set LockUpdate to True, and must be manually set to False after adding new data.
[FIX] GraffitiWebChart once again fires the AnimationComplete event.
[FIX] GraffitiWebChart once again populates the ImageData As String property when animation has completed.
[FIX] GraffitiWebColorPicker once again returns the correct Alpha value when Transparency is True.
[FIX] GraffitiWebContextMenu CSS updated to remove the default item background color on menu items when not hovered.
[FIX] GraffitiWebDatePicker now properly updates it’s cached value for more accurate changes.
[FIX] GraffitiWebGrid now has ListIndex and ListCount read-only properties.
[FIX] GraffitiWebGrid now properly resizes rows when setting RowHeight after initial load.
[FIX] GraffitiWebGrid no longer throws a JavaScript exception when calling EditActiveCell on the first column.
[FIX] GraffitiWebGrid no longer truncates LongText columns, instead it word wraps and applies scrollbars as necessary.
[FIX] GraffitiWebGrid now hides columns in-place in both Xojo and the browser to negate index offset issues with the old method.
[FIX] GraffitiWebGrid now properly assigns cell styles for all column types.
[FIX] GraffitiWebGrid no longer returns day+1 on edited Date cells when using certain locales (Thanks to Andrea Cinelli)
[FIX] GraffitiWebGrid now properly uses JavaScript for applying WebStyles rather than relying on server callbacks.
[FIX] GraffitiWebGrid no longer cuts off last row when styles with borders are applied.
[FIX] GraffitiWebPopupMenu no longer throws a JavaScript exception when item text contains single or double quotes.
[FIX] GraffitiWebPopupMenu now properly adds user-defined custom values that are numeric-only.
[FIX] GraffitiWebQRReader no longer throws a JavaScript exception when pressing Stop and a camera device was not found.
[FIX] GraffitiWebSlideshow now has a RemoveAll method.
[FIX] GraffitiWebSpeechRecog no longer attempts to function on any browser except Chrome, since it’s only supported there.
[FIX] GraffitiWebToggle multiple value change firing regression fixed.
[FIX] GraffitiWebTooltip now properly positions itself on top of WebDialogs.
[FIX] GraffitiWebTree Hide/ShowCheckbox methods are no longer inverted.
[FIX] GraffitiWebWall now loads much more quickly when using LockUpdate.
[NOTE] GraffitiWebPDF has a much improved method for generating PDFs from HTML with the rewritten FromHTML method.
[NOTE] Layout and Navigator icons updated for all classes.
[NOTE] pgeDemo updated to a more mobile-friendly style.
[NOTE] pgeAlert updated to a more mobile-friendly style.
[NOTE] GraffitiWebCalendar updated to fullCalendar 3.9.0
[NOTE] GraffitiWebCalendar now supports a NIL EndDate for GraffitiWebCalendarEvents that are single all-day events.
[NOTE] GraffitiWebCalendar now uses the Views enumeration for all View-Related methods/properties.
[NOTE] GraffitiWebCursor updated to version 0.3.1
[NOTE] GraffitiWebFontAwesome updated to version 5.0.8 (Free).

Changes may be needed in parts of your project where you use GraffitiSuite classes that are reliant on FontAwesome icons to match the new formats. Formats should now specify which type of icon, “fa fa-address-book” for a Regular FontAwesome icon, “fab fa-apple” for a Brand icon, “fas fa-address-book” for a Solid icon. Some icon names have also changed.

     Classes Effected by FontAwesome Changes:
            - GraffitiControlWrapper
            - GraffitiWebAccordion
            - GraffitiWebAccordionNav
            - GraffitiWebButton
            - GraffitiWebButtonSegment
            - GraffitiWebContextMenu
            - GraffitiWebCursor
            - GraffitiWebFontAwesome
            - GraffitiWebGrid
            - GraffitiWebLabel
            - GraffitiWebPopupMenu
            - GraffitiWebProgressRadial
            - GraffitiWebProgressSemiCircle
            - GraffitiWebTree