{"id":24443643,"url":"https://github.com/endlessm/eos-knowledge-lib","last_synced_at":"2025-04-12T21:28:00.378Z","repository":{"id":15420502,"uuid":"18152801","full_name":"endlessm/eos-knowledge-lib","owner":"endlessm","description":"GUI library for knowledge apps","archived":false,"fork":false,"pushed_at":"2024-04-24T05:12:07.000Z","size":52371,"stargazers_count":10,"open_issues_count":10,"forks_count":8,"subscribers_count":31,"default_branch":"master","last_synced_at":"2024-12-23T09:37:42.484Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"arboshiki/lobibox","license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/endlessm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-03-26T20:28:39.000Z","updated_at":"2024-08-05T13:46:38.000Z","dependencies_parsed_at":"2023-02-14T10:00:31.025Z","dependency_job_id":"eb205e3c-a1c5-4470-9c50-f2b3bb8f385e","html_url":"https://github.com/endlessm/eos-knowledge-lib","commit_stats":{"total_commits":4351,"total_committers":43,"mean_commits":"101.18604651162791","dds":0.7402895886003218,"last_synced_commit":"5ad64615b2d584e9684d8ad0c49f8e1ef06dac65"},"previous_names":[],"tags_count":316,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/endlessm%2Feos-knowledge-lib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/endlessm%2Feos-knowledge-lib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/endlessm%2Feos-knowledge-lib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/endlessm%2Feos-knowledge-lib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/endlessm","download_url":"https://codeload.github.com/endlessm/eos-knowledge-lib/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248633852,"owners_count":21136925,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-20T22:16:59.595Z","updated_at":"2025-04-12T21:28:00.339Z","avatar_url":"https://github.com/endlessm.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"eos-knowledge-lib\n=================\n\nWelcome to **eos-knowledge-lib**!\nThis is Endless' Javascript library for building offline content apps using modular UI blocks and declarative UI files.\n\nThis project uses the GNOME technology stack, including GTK and WebKit for UI, and GJS for its Javascript interpreter.\n\nBuilding\n--------\nWe recommend using [Flapjack] to build this code, especially if you are planning to make changes to it.\nThe [example.flapjack.ini] configuration file included with Flapjack is precisely made to build the `eos-knowledge-lib` and other components.\n\nCopy the `example.flapjack.ini` to `~/.config/flapjack.ini` and follow the instructions for [Flapjack] to know how to build, test, and run apps.\n\nIf you wish to run the tests, you will also need to clone, build, and install [jasmine-gjs].\n\nDeveloper introduction to offline content apps\n----------------------------------------------\n**UI structure + UI theme + content = app.**\n\nThe **structure** is written in terms of modular UI blocks (see below) assembled in a declarative UI file.\nThis declarative file is a JSON file.\nHowever, we include a preprocessor tool called Autobahn so that you can write your app description in a more expressive, human-friendly YAML format.\nSee `data/preset/*.yaml` for examples.\n\nThe **theme** is a GTK CSS file.\nWe suggest writing themes using SCSS and then compiling them down to regular CSS.\nWe provide SCSS modules that your SCSS code can import; see `data/css/`.\n\nThe **content** is in the form of a shard file; see [eos-shard] for more information.\nWe are working on tools that allow you to build shard files easily on your own machine.\nFor now, you can include the --dummy-content option when running an app and it will load with sample content.\n\nModular UI blocks\n-----------------\nUI modules are GObjects, with a few extra features and a few restrictions.\nThey are meant to be assembled in a declarative file, without writing having to write any code such as signal handlers.\n\nFirst of all, UI modules do not emit signals, because their behavior is part of their implementation, and UI descriptions are purely declarative: no code.\nAll properties accessible from the declarative file are treated as construct-only (except when using property bindings.)\nModules have **slots** and **references**, which are named spots where other modules can be contained or referenced.\n\nHere are the types of UI modules and how they fit together.\nSee `js/framework/modules/` for the code.\n\n- **Arrangement** - These modules generally have a `card` slot which a **Card** can go into.\n  They arrange a set of dynamically created cards on the screen.\n- **Banner** - These modules represent a piece of data which is presented to the user, such as an app's logo or a search term.\n- **Card** - These modules represent a document in the database of offline content, but are not a full **View** of the document.\n  They display its metadata (title, keywords) in various ways.\n- **ContentGroup** - This is the heart of displaying offline content.\n  Content groups have `selection` and `arrangement` slots.\n  They make sure the **Arrangement** receives (and creates **Card**s for) the records that the **Selection** wants to display.\n- **Controller** - These modules define different types of app experiences.\n  They are in charge of what happens when you click somewhere.\n- **Decoration** - These modules are UI elements which are used for display only.\n- **Filter** - These modules can be added to a **Selection** to display only some of its records.\n- **Layout** - These modules contain submodules and arrange them on one page of the app.\n- **Navigation** - These modules are UI elements which are used for navigation through an app.\n- **Order** - These modules can be added to a **Selection** to change the sorting order in which its records are displayed.\n- **Pager** - Modules can also act as pages of an app, like pages in a website.\n  Pager modules contain submodules and display them one at a time, with optional animations between them.\n- **Selection** - These modules retrieve content records from the offline content database.\n  A **Selection** serves records through a **ContentGroup** to an **Arrangement**, which turns the records into **Card**s.\n- **View** - These modules display the actual content.\n- **Window** - These modules are the toplevel windows which contain other modules.\n\nHere's a diagram of what contains what, roughly:\n```\nController\n  Window\n    Pager\n      Layout\n        Banner\n        Decoration\n        Navigation\n        (more) Layout\n        View\n        ContentGroup\n          Arrangement\n            Card\n          Selection\n```\n\nTranslations\n------------\nPlease don't do translations by directly editing the `.po` files in this repository.\nInstead, sign up at our [Transifex project][transifex] and translate there.\n\nRelease schedule\n----------------\nAs this codebase evolves, we will release new versions of it as Flatpak runtimes.\nThe first public release was in com.endlessm.Platform version eos3.0, which was a unified runtime for all apps shipped with Endless OS 3.0.x.\nSubsequent releases will move to a separate runtime.\n\nOnce code is released in a runtime branch, the Git repository will be branched and the API considered stable.\nRuntimes will receive bug fixes, but no new API and no API changes.\n\nWhen we add, change, or delete API, this will go in a new Flatpak runtime branch.\nIt is not expected that apps built for one API release will run on a subsequent release without some porting.\n\nDocumentation\n-------------\nSee the [website] for more documentation.\n\nFuture notes\n------------\nMore and better documentation on all of this is incoming.\n\nFor the next release, we may split this repository up into smaller units.\n\n[Flapjack]: https://github.com/endlessm/flapjack\n[example.flapjack.ini]: https://github.com/endlessm/flapjack/blob/master/example.flapjack.ini\n[eos-shard]: https://github.com/endlessm/eos-shard\n[jasmine-gjs]: https://github.com/ptomato/jasmine-gjs\n[transifex]: https://www.transifex.com/endless-os/eos-knowledge-lib/\n[website]: http://endlessm.github.io/eos-knowledge-lib/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fendlessm%2Feos-knowledge-lib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fendlessm%2Feos-knowledge-lib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fendlessm%2Feos-knowledge-lib/lists"}