{"id":41012065,"url":"https://github.com/davekinkead/reasons","last_synced_at":"2026-01-22T09:06:52.586Z","repository":{"id":15705064,"uuid":"78643946","full_name":"davekinkead/reasons","owner":"davekinkead","description":"Web based argument mapping tools","archived":false,"fork":false,"pushed_at":"2023-07-17T07:26:18.000Z","size":7348,"stargazers_count":18,"open_issues_count":12,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-26T01:38:56.601Z","etag":null,"topics":["argument-mapping","critical-thinking","html","logic"],"latest_commit_sha":null,"homepage":"https://dave.kinkead.com.au/reasons","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/davekinkead.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-01-11T13:56:50.000Z","updated_at":"2025-06-06T03:37:50.000Z","dependencies_parsed_at":"2025-04-14T17:19:19.127Z","dependency_job_id":null,"html_url":"https://github.com/davekinkead/reasons","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/davekinkead/reasons","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davekinkead%2Freasons","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davekinkead%2Freasons/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davekinkead%2Freasons/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davekinkead%2Freasons/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davekinkead","download_url":"https://codeload.github.com/davekinkead/reasons/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davekinkead%2Freasons/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28659969,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["argument-mapping","critical-thinking","html","logic"],"created_at":"2026-01-22T09:06:51.822Z","updated_at":"2026-01-22T09:06:52.582Z","avatar_url":"https://github.com/davekinkead.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Reasons\n\n`Reasons` is a digital argument mapping library designed for modern web browsers.\n\nArgument mapping is the process of visually representating the logical structure of arguments.  Argument maps are an important pedagogical tool in the analysis of argumentation and have been [associated with substantial increases in student cognative gains](https://www.pdcnet.org/teachphil/content/teachphil_2004_0027_0002_0095_0116).\n\nArgument mapping forms the middle of the three stages of informal logical analysis - identification of truth claims within arguments, the analysis of logical structure, and synthesis of logcial structure into writen form. `Reasons` is designed to seemlessly integrate these stages into existing teaching pedagogies.\n\n[![DOI](http://joss.theoj.org/papers/10.21105/joss.01044/status.svg)](https://doi.org/10.21105/joss.01044)\n\n## Embedding Reasons\n\nDownload the library and add a reference to it and any initial data just before the `\u003c/body\u003e` tag of a HTML page.\n\n\n```html\n\u003chtml\u003e\n\u003cbody\u003e\n  \u003cdiv id=\"element\"\u003e\u003c/div\u003e\n\n  ...\n\n  \u003cscript src=\"reasons.js\"\u003e\u003c/script\u003e\n  \u003cscript\u003e\n    let graph = [\n        {id: 'p1', text: \"Circular arguments work\"},\n        {id: 'c1', text: \"Circular arguments work\"},\n        {from: 'p1', to: 'c1', type: \"because\"},\n        {from: 'c1', to: 'p1', type: \"because\"}\n      ]\n    Reasons.mapper('#element').render(graph)\n  \u003c/script\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n```\n\n\n`Reasons` needs to know the target `#element` of the DOM in which to render the argument map. You could use `body` to append the map to the HTML body tag or `#id` to append it to a specific element id.  The optional `graph` is just an array of nodes and edges representing the logical structure of an argument.  `Nodes` and `edges` are plain javascript objects representing propositional claims and inferential support.\n\nSaving an argument map is left as an implementation detail.  `Mapper.export()` will return a `Graph` array from the map's current state.\n\n\n## Using Reasons\n\nReasons relies on a few simple commands to edit an argument map:\n\n  - Double clicking/touching on an empty canvas will create a new reason node.\n\n  - Double clicking/touching on an element will open the edit dialog.  `Return` or `Esc` will close the dialog.\n\n  - Dragging one reason onto another creates an inferential connection.  Dragging reasons that share an inferential connection onto one another will create a conjoined reason.\n\n  - A single click or `Tab` will select an element.  `Delete` or `Backspace` will remove that element.\n\n  - `Ctrl z` or `⌘ z` or device shake will undo an action.  `Ctrl y` or `⌘ y` will redo it.\n\n  - `Ctrl +` or `⌘ +` or wheel or expand will zoom in. `Ctrl -` or `⌘ -` or wheel or pinch will zoom out.\n\n\n[Click for a demonstration](http://reasons.io/)\n\n\n## Development \u0026 Testing\n\n\nClone the repo and install the dependencies.\n\n\n    $ git clone https://github.com/davekinkead/reasons.git\n    $ npm install\n\n\nRunning the tests requires additional dev dependencies listed in the [package.json](/package.json) file under dev-dependencies including [JSDOM](https://github.com/jsdom/jsdom) and [Canvas](https://github.com/node-gfx/node-canvas-prebuilt).\n.  You will need to install all these using the command:\n\n\n    $ npm install mocha --save-dev\n    $ npm install jsdom --save-dev\n      ...\n\nThen:\n\n    $ npm test\n\nTo get autobuilding to work, install [workman](https://facebook.github.io/watchman/)\n\n    $ watchman-make --make \"npm run\" -p \"lib/*.js\" -t build\n\n\n## Browser Compatibility\n\n`Reasons` relies on the HTML5 Canvas library - as such, it will not work on legacy browsers.  Touch events will be added in future releases.  It has been tested and works on the following browsers:\n\n\n  - [X] Chrome on OSX (60+)\n  - [X] Firefox on OSX (54+)\n  - [X] Safari on OSX (11+)\n  - [X] Chrome on Windows\n  - [X] Firefox on Windows\n  - [X] Safari iOS (View only)\n  - [ ] Safari iOS (Touch)\n  - [ ] Internet Explorer on Windows\n  - [ ] Chrome on Android\n\n\n## Contributing \u0026 Support\n\nWe gladly accept feature requests and bug fixes.  If you have questions or problems, please [open an issue](https://github.com/davekinkead/reasons/issues).\n\nPlease read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.\n\n## How to Cite\n\nIf you are using this software in an academic capacity, please cite as:\n\n\u003e Kinkead et al., (2019). Reasons: A digital argument mapping library for modern browsers. Journal of Open Source Software, 4(37), 1044, https://doi.org/10.21105/joss.01044\n\n[![DOI](http://joss.theoj.org/papers/10.21105/joss.01044/status.svg)](https://doi.org/10.21105/joss.01044)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavekinkead%2Freasons","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavekinkead%2Freasons","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavekinkead%2Freasons/lists"}