From b0cab134ae57189dead3cd4a25770c904301bd64 Mon Sep 17 00:00:00 2001 From: Ray Date: Thu, 9 Jul 2026 20:50:52 +0100 Subject: [PATCH] Added readme --- README.md | 23 +++ wiki/USAGE.md | 345 +++++++++++++++++++++++++++++++++++++ wiki/screenshot-1-h240.png | Bin 0 -> 28746 bytes wiki/screenshot-1.png | Bin 0 -> 5447 bytes 4 files changed, 368 insertions(+) create mode 100644 README.md create mode 100644 wiki/USAGE.md create mode 100644 wiki/screenshot-1-h240.png create mode 100644 wiki/screenshot-1.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..280b44b --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# LiteRyzJS/Timeline + +> LiteRyzJS/Timeline is a basic timeline control written in pure JavaScript with the Canvas API. Formerly, BBTimeline. + +--- + +## Features + +- Basic timeline with JavaScript and Canvas API + +## Screenshots + +[![screenshot](wiki/screenshot-1-h240.png)](wiki/screenshot-1.png) + +--- + +## Releases & Builds + +See [Releases](/Ray/literyzjs-timeline/releases) + +## Documentation + +See [Usage](wiki/USAGE.md) diff --git a/wiki/USAGE.md b/wiki/USAGE.md new file mode 100644 index 0000000..903d8ed --- /dev/null +++ b/wiki/USAGE.md @@ -0,0 +1,345 @@ +# Usage: v0.2.0.121 alpha + +This is the usage guide for [LiteRyzJS/Timeline](/literyzjs-timeline), version 0.2.0.121 alpha. + +## Usage + +### LiteRyzJS.Timeline(el) + +Creates a timeline. + +#### Parameters + +| Parameter | Type | Description | +|-----------|------|-------------| +| el | string | Identifier of canvas element | + +#### Examples + +```javascript + + +var timeline1 = new LiteRyzJS.Timeline("myCanvas"); +``` + +### Clear() + +Clear timeline and blank canvas. + +#### Examples + +```javascript +timeline1.Clear(); +``` + +### Invalidate(redrawAxis, redrawMarkers) + +Invalidates and redraws the canvas. + +#### Parameters + +| Parameter | Type | Description | +|-----------|------|-------------| +| redrawAxis | bool | Redraw the whole canvas (with the axis and labels only) | +| redrawMarkers | bool | Clear the the contents of the graph and redrawn the markers | + +#### Examples + +```javascript +timeline1.Invalidate(true, true); +``` + +### Load(date) + +Set the start date of the timeline and load the start date. + +#### Parameters + +| Parameter | Type | Description | +|-----------|------|-------------| +| date | Date (yyyy-MM-dd) | The start date of the timeline | + +#### Examples + +```javascript +timeline1.Load("2023-10-08"); +``` + +### Show(date) + +Load the timeline starting with the date. + +#### Parameters + +| Parameter | Type | Description | +|-----------|------|-------------| +| date | Date (yyyy-MM-dd) | The date of the timeline | + +#### Examples + +```javascript +timeline1.Show("2023-10-08"); +``` + +### DateToString(date, pattern) + +Convert a JavaScript date to string using the .NET standard format for date-time. + +#### Parameters + +| Parameter | Type | Description | +|-----------|------|-------------| +| date | Date (yyyy-MM-dd) | The start date of the timeline | + +#### Result + +Returned a string of the date-time. + +#### Examples + +```javascript +timeline1.DateToString(new Date(), "yyyy-MM-dd"); +``` + +### ConvertToDate(date) + +Convert a date string "yyyy-MM-dd" into a JavaScript date object. + +#### Parameters + +| Parameter | Type | Description | +|-----------|------|-------------| +| date | Date (yyyy-MM-dd) | The date | + +#### Result + +Returned a JavaScript date object. + +#### Examples + +```javascript +timeline1.ConvertToDate("2023-10-08"); +``` + +### CalcEndDate() + +Calculates the end date displayed on the current view of the timeline. + +#### Result + +Returns a string of the laste date on-screen in "yyyy-MM-dd" format. + +#### Examples + +```javascript +timeline1.DateToString(new Date(), "yyyy-MM-dd"); +``` + +### AddEvent(date, label, options) + +Add an event marker to the timeline. A marker can contain multiple events. + +#### Options + +```javascript +{ + Title: "", + Description: "", + Link: "", + Tag: null +} +``` + +#### Parameters + +| Parameter | Type | Description | +|-----------|------|-------------| +| date | Date ("yyyy-MM-dd") | The date of the marker | +| label | string | The label of the marker, null to leave unchanged otherwise update existing label | +| Title | string | Title of the event | +| Description | string | Description of the event | +| Link | string | Link to the event | +| Tag | string | Extra data object for this event | + +#### Examples + +```javascript + const markerName = "Random Marker #" + GetRandy(10000, 99999); + + timeline1.AddEvent(markerDate, markerName, { Title: markerName, Description: "This is a randomly generated marker" }); +``` + +### DeleteMarker(date) + +Delete marker and all events on a date. + +#### Parameters + +| Parameter | Type | Description | +|-----------|------|-------------| +| date | Date (yyyy-MM-dd) | The date | + +#### Examples + +```javascript +timeline1.DeleteMarker("2023-10-08"); +``` + +### UpdateLabel(date, label) + +Update the label on a marker. + +#### Parameters + +| Parameter | Type | Description | +|-----------|------|-------------| +| date | Date (yyyy-MM-dd) | The date | +| label | string | Label text | + +#### Examples + +```javascript +timeline1.UpdateLabel("2023-10-08", "New Label"); +``` + +### UpdateMarker(date, borderColour, backColour) + +Update the style of a marker. + +#### Parameters + +| Parameter | Type | Description | +|-----------|------|-------------| +| date | Date (yyyy-MM-dd) | The date | +| borderColour | Hex colour | Colour of the marker's border | +| backColour | Hex colour | Fill colour of the marker | + +#### Examples + +```javascript +timeline1.UpdateMarker("2023-10-08", "#E68422", "#FAE7D3"); +``` + +### FindDatePosition(date) + +Find the position of the date on the timeline chart. Date must be within the display range of the chart. + +#### Parameters + +| Parameter | Type | Description | +|-----------|------|-------------| +| date | Date (yyyy-MM-dd) | The date | + +#### Result + +Null, if date not found or is not currently visible. + +```javascript +{ + Date: "yyyy-MM-dd", + X: 0 +} +``` + +| Property | Type | Description | +|----------|------|-------------| +| Date | Date (yyyy-MM-dd) | The date | +| X | integer | The horizontal locaton of the marker | + +#### Examples + +```javascript +const coords = timeline1.FindDatePosition("2023-10-08"); +``` + +### FindVisibleEvents() + +Find all markers/events that are within the current visible date range. + +#### Result + +Null, if no markers found. + +```javascript +[{ + Date: date, + Label: "", + Position: { X: 0, Y: 0 }, + Events: [], + HitBox: null, + BorderColour: "#3A5D9C", + BackColour: "#D4DEEF" +}] +``` + +| Property | Type | Description | +|----------|------|-------------| +| Date | Date (yyyy-MM-dd) | The date | +| Label | string | Text label of the marker | +| Position | Point { X: float, Y: float } | The location of the marker | +| Events | Array of Events | An array of events, see *FindEvent*. | +| HitBox | Rectangle { X: float, Y: float, W: float, H: float } | The hitbox or rectangle that repersents the marker and label | +| BorderColour | Hex colour | Colour of the marker border | +| BackColour | Hex colour | Fill colour of the marker | + +#### Examples + +```javascript +const visibleEvents = timeline1.FindVisibleEvents(); +``` + +### FindEvent(date) + +Find a list of events by date (yyyy-MM-dd). + +#### Parameters + +| Parameter | Type | Description | +|-----------|------|-------------| +| date | Date (yyyy-MM-dd) | The date | + +#### Result + +Null, if no events found. + +```javascript +[{ + Title: "", + Description: "", + Link: "", + Tag: null +}] +``` + +| Property | Type | Description | +|----------|------|-------------| +| Title | string | Title of the event | +| Description | string | Description of the event | +| Link | string | Link to the event | +| Tag | string | Extra data object for this event | + +#### Examples + +```javascript +const events = timeline1.FindEvent("2023-10-08"); +``` + +### FindEventsByCoords(x, y) + +Find a list of events by a point (x, y) on the chart. + +#### Parameters + +| Parameter | Type | Description | +|-----------|------|-------------| +| date | Date (yyyy-MM-dd) | The date | + +#### Result + +Null, if no events found. For results, see *FindEvent*. + +#### Examples + +```javascript +const events = timeline1.FindEventsByCoords(400, 280); +``` diff --git a/wiki/screenshot-1-h240.png b/wiki/screenshot-1-h240.png new file mode 100644 index 0000000000000000000000000000000000000000..e6bc0ccd6903873f60e78e973e020a77f7d2bf3c GIT binary patch literal 28746 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 literal 0 HcmV?d00001