{"id":13473136,"url":"https://github.com/lula/ngx-summernote","last_synced_at":"2026-01-21T15:07:20.400Z","repository":{"id":33672611,"uuid":"137036428","full_name":"lula/ngx-summernote","owner":"lula","description":"Summernote editor for Angular :sunglasses:","archived":false,"fork":false,"pushed_at":"2025-05-23T16:32:52.000Z","size":1098,"stargazers_count":106,"open_issues_count":56,"forks_count":50,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-10-24T18:47:07.231Z","etag":null,"topics":["angular","angular6","angular7","angular8","angular9","ngx-summernote","summernote","summernote-editor","wysiwyg-editor"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/lula.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2018-06-12T07:50:45.000Z","updated_at":"2025-07-24T14:35:43.000Z","dependencies_parsed_at":"2024-04-16T23:41:46.637Z","dependency_job_id":"4fd2eefe-e36d-4c03-968b-455fd8322f73","html_url":"https://github.com/lula/ngx-summernote","commit_stats":{"total_commits":110,"total_committers":12,"mean_commits":9.166666666666666,"dds":0.5,"last_synced_commit":"0e99acf416bfb12645e01e9fd5577b41a7cecc73"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/lula/ngx-summernote","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lula%2Fngx-summernote","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lula%2Fngx-summernote/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lula%2Fngx-summernote/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lula%2Fngx-summernote/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lula","download_url":"https://codeload.github.com/lula/ngx-summernote/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lula%2Fngx-summernote/sbom","scorecard":{"id":604996,"data":{"date":"2025-08-11","repo":{"name":"github.com/lula/ngx-summernote","commit":"beecf11504f684ea893ebf57e0b6c92bc3b39cba"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.1,"checks":[{"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":"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":"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":"Maintained","score":1,"reason":"2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1","details":null,"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":2,"reason":"Found 4/15 approved changesets -- score normalized to 2","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":"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":"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":"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":"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":"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":"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 20 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"}},{"name":"Vulnerabilities","score":0,"reason":"11 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-c75v-2vq8-878f","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-cc55-mvqc-g9mg","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h","Warn: Project is vulnerable to: GHSA-776f-qx25-q3cc"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T01:22:30.859Z","repository_id":33672611,"created_at":"2025-08-21T01:22:30.860Z","updated_at":"2025-08-21T01:22:30.860Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28635123,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T14:50:40.221Z","status":"ssl_error","status_checked_at":"2026-01-21T14:48:59.225Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["angular","angular6","angular7","angular8","angular9","ngx-summernote","summernote","summernote-editor","wysiwyg-editor"],"created_at":"2024-07-31T16:01:01.121Z","updated_at":"2026-01-21T15:07:20.394Z","avatar_url":"https://github.com/lula.png","language":"TypeScript","readme":"# NgxSummernote\n\n[Summernote](https://github.com/summernote/summernote) editor for Angular :sunglasses:\n\n## Installation\n\nInstall ngx-summernote and dependencies:\n\n`npm install --save ngx-summernote summernote jquery`\n\nCompatibility:\n\nAngular | ngx-summernote\n------- | --------------\n\\\u003e 19   | 1.1.0\n\\\u003e 14   | 1.0.0 (Ivy support)\n\\\u003e 14   | 0.9.0\n13      | 0.8.8\n12      | 0.8.5\n11      | 0.8.4\n10      | 0.8.x\n9       | 0.7.x\n8       | 0.7.x\n7       | 0.6.x\n6       | 0.5.4\n\n## Editor\n\nAdd JQuery and Summernote scripts and styles to the angular.json file:\n\n```json\n\"styles\": [\n  ...\n  \"node_modules/summernote/dist/summernote-lite.min.css\"\n],\n\"scripts\": [\n  ...\n  \"node_modules/jquery/dist/jquery.min.js\",\n  \"node_modules/summernote/dist/summernote-lite.min.js\"\n]\n```\n\nAdd NgxSummernoteModule to the app.module.ts file OR to the subcomponent module.ts file if using lazy loading:\n\n```\n...\nimport { NgxSummernoteModule } from 'ngx-summernote';\n...\n@NgModule({\n...\n  imports: [\n    ...\n    NgxSummernoteModule\n    ...\n  ]\n})\nexport class AppModule { }\n```\n\nUse `[ngxSummernote]` directive on an element to init Summernote editor:\n\n```html\n\u003cdiv [ngxSummernote]\u003e\u003c/div\u003e\n```\n\nYou may also configure Summernote with your own config:\n\n```html\n\u003cdiv [ngxSummernote]=\"config\"\u003e\u003c/div\u003e\n```\n\n```typescript\nexport class AppComponent implements OnInit {\n  ...\n  config = {\n    placeholder: '',\n    tabsize: 2,\n    height: '200px',\n    uploadImagePath: '/api/upload',\n    toolbar: [\n        ['misc', ['codeview', 'undo', 'redo']],\n        ['style', ['bold', 'italic', 'underline', 'clear']],\n        ['font', ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'clear']],\n        ['fontsize', ['fontname', 'fontsize', 'color']],\n        ['para', ['style', 'ul', 'ol', 'paragraph', 'height']],\n        ['insert', ['table', 'picture', 'link', 'video', 'hr']]\n    ],\n    fontNames: ['Helvetica', 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Roboto', 'Times']\n  }\n  ...\n}\n```\n\nSee Summernote available initialization options [here](https://summernote.org/deep-dive/#initialization-options).\n\n## Viewer\n\nUse `[ngxSummernoteView]` directive on an element to set innerHTML of an element:\n\n```html\n\u003cdiv [ngxSummernoteView]=\"content\"\u003e\u003c/div\u003e\n```\n\n## Upload images to server\n\nIf you want to upload images to server and use remote paths in editor, you need to set `uploadImagePath` option in config:\n\n```javascipt\nconfig = {\n  uploadImagePath: 'http://example.com/upload' // API URL to upload image\n};\n```\n\nAPI call response is expected to be like:\n\n```javascript\n{\n  path: 'the path of the image' // http://example.com/image-path.png\n}\n```\n\nIf the reponse does not follow the above structure then the image is inserted as data URL.\n\nTo remove images from server when deleted from HTML, use `(mediaDelete)`:\n\n```html\n\u003cdiv [ngxSummernote] (mediaDelete)=\"onDelete($event)\"\u003e\u003c/div\u003e\n```\n\n```typescript\nonDelete(file) {\n  deleteResource(file.url);\n}\n```\n\n## Add custom button\n\nIn your component setup summernote `config` and code for the custom button, e.g.:\n\n```typescript\nfunction customButton(context) {\n  const ui = $.summernote.ui;\n  const button = ui.button({\n    contents: '\u003ci class=\"note-icon-magic\"\u003e\u003c/i\u003e Hello',\n    tooltip: 'Custom button',\n    container: '.note-editor',\n    className: 'note-btn',\n    click: function() {\n      context.invoke('editor.insertText', 'Hello from test btn!!!');\n    }\n  });\n  return button.render();\n}\n\nexport class AppComponent implements OnInit {\n  config: any = {\n    ...\n    buttons: {\n      'testBtn': customButton\n    }\n  };\n  ...\n}\n```\n\nSee detailed info on custom buttons [here](https://summernote.org/deep-dive/#custom-button).\n\n## Development\n\nTo use the test application, first build the lib:\n\n```\nng build ngx-summernote\n```\n\nThen serve the test application and open it in your browser:\n\n```\nnpm start\n```\n\n## Contributors\n- [Ishan Mahajan](https://github.com/ishan123456789)\n- [NickShcherba](https://github.com/shcherbanikolay)\n- [Mathis Hofer](https://github.com/hupf)\n- [James Manners](https://github.com/jmannau)\n- [Tim Börner](https://github.com/tim-boerner)\n- [Jason K.](https://github.com/lonerzzz)\n- [Elle](https://github.com/LuigiElleBalotta)\n","funding_links":[],"categories":["基于 Angular","Third Party Components","For Angular"],"sub_categories":["Editors"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flula%2Fngx-summernote","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flula%2Fngx-summernote","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flula%2Fngx-summernote/lists"}