{"id":13500348,"url":"https://github.com/bergie/hallo","last_synced_at":"2025-09-28T19:31:37.866Z","repository":{"id":1468473,"uuid":"1707621","full_name":"bergie/hallo","owner":"bergie","description":"Simple rich text editor (contentEditable) for jQuery UI","archived":true,"fork":false,"pushed_at":"2020-09-03T15:39:25.000Z","size":3214,"stargazers_count":2432,"open_issues_count":97,"forks_count":308,"subscribers_count":69,"default_branch":"master","last_synced_at":"2025-08-26T13:56:02.895Z","etag":null,"topics":["jquery-ui","rich-text-editor"],"latest_commit_sha":null,"homepage":"http://hallojs.org/","language":"CoffeeScript","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/bergie.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-05-05T18:04:46.000Z","updated_at":"2025-05-24T01:25:32.000Z","dependencies_parsed_at":"2022-07-07T12:44:32.373Z","dependency_job_id":null,"html_url":"https://github.com/bergie/hallo","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/bergie/hallo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bergie%2Fhallo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bergie%2Fhallo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bergie%2Fhallo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bergie%2Fhallo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bergie","download_url":"https://codeload.github.com/bergie/hallo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bergie%2Fhallo/sbom","scorecard":{"id":234135,"data":{"date":"2025-08-11","repo":{"name":"github.com/bergie/hallo","commit":"3d10b2f34290fbebf75e80c397ba3b2bcc7a4615"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":3,"reason":"Found 4/13 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 21 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T05:18:19.601Z","repository_id":1468473,"created_at":"2025-08-17T05:18:19.601Z","updated_at":"2025-08-17T05:18:19.601Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277088732,"owners_count":25758763,"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","status":"online","status_checked_at":"2025-09-26T02:00:09.010Z","response_time":78,"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":["jquery-ui","rich-text-editor"],"created_at":"2024-07-31T22:00:56.876Z","updated_at":"2025-09-28T19:31:37.555Z","avatar_url":"https://github.com/bergie.png","language":"CoffeeScript","funding_links":[],"categories":["CoffeeScript","others","Rich-text editors using contenteditable","Animation"],"sub_categories":["Editors"],"readme":"Hallo - contentEditable for jQuery UI [![Build Status](https://secure.travis-ci.org/bergie/hallo.png)](http://travis-ci.org/bergie/hallo) [![Greenkeeper badge](https://badges.greenkeeper.io/bergie/hallo.svg)](https://greenkeeper.io/)\n=====================================\n\n![Hallo Editor logo](https://raw.github.com/bergie/hallo/master/design/logo-200x59.png)\n\n[![Cross-browser testing status](https://saucelabs.com/browser-matrix/hallo-js.svg)](https://saucelabs.com/u/hallo-js)\n\nHallo is a very simple in-place rich text editor for web pages. It uses jQuery UI and the [HTML5 contentEditable functionality](https://developer.mozilla.org/en/rich-text_editing_in_mozilla) to edit web content.\n\nThe widget has been written as a simple and liberally licensed editor. It doesn't aim to replace popular editors like [Aloha](http://aloha-editor.org), but instead to provide a simpler and more reusable option.\n\nRead the [introductory blog post](http://bergie.iki.fi/blog/hallo-editor/) for more information.\n\n## Using the editor\n\nYou need jQuery, jQuery UI (1.10+), and [Rangy](https://code.google.com/p/rangy/) loaded. An easy way to do this is to use Google's JS service:\n\n```html\n\u003cscript src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"http://rangy.googlecode.com/svn/trunk/currentrelease/rangy-core.js\"\u003e\u003c/script\u003e\n```\n\nThe editor toolbar is using jQuery UI theming, so you'll probably also want to [grab a theme](http://jqueryui.com/themeroller/) that fits your needs. Toolbar pluggins use icons from [Font Awesome](http://fortawesome.github.com/Font-Awesome/). Check these [integration instructions](http://fortawesome.github.com/Font-Awesome/#integration) for the right way to include Font Awesome depending on if/how you use Twitter Bootstrap. To style the toolbar as it appears in the demo, you'll also want to add some CSS (like background and border) to the class `hallotoolbar`.\n\n```html\n\u003clink rel=\"stylesheet\" href=\"/path/to/your/jquery-ui.css\"\u003e\n\u003clink rel=\"stylesheet\" href=\"/path/to/your/font-awesome.css\"\u003e\n```\n\nThen include Hallo itself:\n\n```html\n\u003cscript src=\"hallo.js\"\u003e\u003c/script\u003e\n```\n\nEditor activation is easy:\n\n```javascript\njQuery('p').hallo();\n```\n\nYou can also deactivate the editor:\n\n```javascript\njQuery('p').hallo({editable: false});\n```\n\nHallo itself only makes the selected DOM elements editable and doesn't provide any formatting tools. Formatting is accomplished by loading plugins when initializing Hallo. Even simple things like *bold* and *italic* are plugins:\n\n```javascript\njQuery('.editable').hallo({\n  plugins: {\n    'halloformat': {}\n  }\n});\n```\n\nThis example would enable the simple formatting plugin that provides functionality like _bold_ and _italic_. You can include as many Hallo plugins as you want, and if necessary pass them options.\n\nHallo has got more options you set when instantiating. See the [hallo.coffee](https://github.com/bergie/hallo/blob/master/src/hallo.coffee) file for further documentation.\n\n### Events\n\nHallo provides some events that are useful for integration. You can use [jQuery bind](http://api.jquery.com/bind/) to subscribe to them:\n\n* `halloenabled`: Triggered when an editable is enabled (`editable` set to `true`)\n* `hallodisabled`: Triggered when an editable is disabled (`editable` set to `false`)\n* `hallomodified`: Triggered whenever user has changed the contents being edited. Event data key `content` contains the HTML\n* `halloactivated`: Triggered when user activates an editable area (usually by clicking it)\n* `hallodeactivated`: Triggered when user deactivates an editable area\n\n## Plugins\n\n* halloformat - Adds Bold, Italic, StrikeThrough and Underline support to the toolbar. (Enable/Disable with options: \"formattings\": {\"bold\": true, \"italic\": true, \"strikethrough\": true, \"underline\": false})\n* halloheadings - Adds support for H1, H2, H3. You can pass a headings option key to specify what is going to be displayed (e.g. \"formatBlocks\":[\"p\", \"h2\",\"h3\"])\n* hallojustify - Adds align left, center, right support\n* hallolists - Adds support for ordered and unordered lists (Pick with options: \"lists\": {\"ordered\": false, \"unordered\": true})\n* halloreundo - Adds support for undo and redo\n* hallolink - Adds support to add links to a selection (currently not working)\n* halloimage - Image uploading, searching, suggestions\n* halloblacklist - Filtering unwanted tags from the content\n\n## Licensing\n\nHallo is free software available under the [MIT license](http://en.wikipedia.org/wiki/MIT_License).\n\n## Contributing\n\nHallo is written in [CoffeeScript](http://jashkenas.github.com/coffee-script/), a simple language that compiles into JavaScript. You'll need Node.js to to build it. All build dependencies can be installed with:\n\n    $ npm install\n\nTo generate the JavaScript code to `dist/hallo.js` from Hallo sources, run [Grunt](http://gruntjs.com):\n\n    $ grunt build\n\nHallo development is coordinated using Git. Just fork the [Hallo repository on GitHub](https://github.com/bergie/hallo) and [send pull requests](http://help.github.com/pull-requests/).\n\n### Unit tests\n\nWe use the Travis continuous integration service for testing Hallo. Currently we run two types of tests:\n\n* [CoffeeLint](http://www.coffeelint.org/) for ensuring compliance with [coding standards](https://github.com/polarmobile/coffeescript-style-guide)\n* Some [QUnit](http://qunitjs.com/) tests\n\nYou can run the unit tests locally by opening `test/index.html` in your browser, or with [PhantomJS](http://phantomjs.org/) by running:\n\n    $ grunt test\n\nor:\n\n    $ npm test\n\n### Writing plugins\n\nHallo plugins are written as regular [jQuery UI widgets](http://semantic-interaction.org/blog/2011/03/01/jquery-ui-widget-factory/).\n\nWhen Hallo is loaded it will also load all the enabled plugins for the element, and pass them some additional options:\n\n* `editable`: The main Hallo widget instance\n* `uuid`: unique identifier of the Hallo instance, can be used for element IDs\n\nA simplistic plugin would look like the following:\n\n```coffeescript\n#    Formatting plugin for Hallo\n#    (c) 2011 Henri Bergius, IKS Consortium\n#    Hallo may be freely distributed under the MIT license\n((jQuery) -\u003e\n  jQuery.widget \"IKS.halloformat\",\n    boldElement: null\n\n    options:\n      uuid: ''\n      editable: null\n\n    _create: -\u003e\n      # Add any actions you want to run on plugin initialization\n      # here\n\n    populateToolbar: (toolbar) -\u003e\n      # Create an element for holding the button\n      @boldElement = jQuery '\u003cspan\u003e\u003c/span\u003e'\n\n      # Use Hallo Button\n      @boldElement.hallobutton\n        uuid: @options.uuid\n        editable: @options.editable\n        label: 'Bold'\n        # Icons come from Font Awesome\n        icon: 'icon-bold'\n        # Commands are used for execCommand and queryCommandState\n        command: 'bold'\n\n      # Append the button to toolbar\n      toolbar.append @boldElement\n\n    cleanupContentClone: (element) -\u003e\n      # Perform content clean-ups before HTML is sent out\n\n)(jQuery)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbergie%2Fhallo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbergie%2Fhallo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbergie%2Fhallo/lists"}