Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hanhdt/vue-trix
Trix text editor component for Vue.js
https://github.com/hanhdt/vue-trix
text-editor trix vue-component vue2 vuejs
Last synced: 3 months ago
JSON representation
Trix text editor component for Vue.js
- Host: GitHub
- URL: https://github.com/hanhdt/vue-trix
- Owner: hanhdt
- License: mit
- Created: 2018-09-06T05:23:47.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-05-08T23:03:34.000Z (6 months ago)
- Last Synced: 2024-06-18T14:10:41.481Z (5 months ago)
- Topics: text-editor, trix, vue-component, vue2, vuejs
- Language: Vue
- Homepage: https://nicedoc.io/hanhdt/vue-trix
- Size: 6.02 MB
- Stars: 235
- Watchers: 4
- Forks: 36
- Open Issues: 42
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-wysiwyg-editors - vue-trix - Vue.js 的简单和轻量级的 Trix 编辑器组件。 ![github star](https://img.shields.io/github/stars/hanhdt/vue-trix.svg?style=social&label=Star) (基于 Vue)
README
# Vue-Trix Text Editor
[![npm](https://img.shields.io/npm/v/vue-trix.svg?style=flat)](https://www.npmjs.com/package/vue-trix) [![Build status](https://ci.appveyor.com/api/projects/status/nffmo893v52evpgm/branch/master?svg=true)](https://ci.appveyor.com/project/tranduchanh/vue-trix/branch/master)
Simple and lightweight [Trix](https://www.npmjs.com/package/trix) rich-text editor Vue.js component for writing daily
## Table of Contents
- [Vue-Trix Text Editor](#vue-trix-text-editor)
- [Table of Contents](#table-of-contents)
- [Getting started](#getting-started)
- [Demo page](#demo-page)
- [Integrate into the form](#integrate-into-the-form)
- [Features](#features)
- [Installation](#installation)
- [NPM](#npm)
- [YARN](#yarn)
- [Or directly from latest Github repo](#or-directly-from-latest-github-repo)
- [Mount](#mount)
- [Mount with global](#mount-with-global)
- [Mount with component](#mount-with-component)
- [Setup with Nuxt.js (SSR)](#setup-with-nuxtjs-ssr)
- [Component Usages](#component-usages)
- [Create a simple editor in your single component file](#create-a-simple-editor-in-your-single-component-file)
- [Integrating with Forms](#integrating-with-forms)
- [Props descriptions](#props-descriptions)
- [Populating editor content](#populating-editor-content)
- [Init loading content into the editor](#init-loading-content-into-the-editor)
- [Track data changes](#track-data-changes)
- [Binding attachment events](#binding-attachment-events)
- [Process uploading attachment to remote server](#process-uploading-attachment-to-remote-server)
- [Trix document](#trix-document)
- [Contributing](#contributing)## Getting started
### [Demo page](/example)
![vue-trix editor](/example/src/assets/vue-trix-editor.png)
### Integrate into the form
![vue-trix in production](/example/src/assets/vue-trix-in-prod.png)
## Features
- A simple and lightweight rich-text editor for writing daily.
- Two-ways binding with `v-model` easily.
- Auto-save editor data temporally what you has typed into the form input in case something goes wrong (for example, the browser could crash or you could accidentally refresh the page without submit saving).## Installation
### NPM
```Shell
npm install --save vue-trix
```### YARN
```Shell
yarn add vue-trix
```### Or directly from latest Github repo
```Shell
npm install --save hanhdt/vue-trix
```## Mount
### Mount with global
in the `main.js`, import the package as a global component.
```javascript
import "vue-trix";
```### Mount with component
```javascript
import VueTrix from "vue-trix";export default {
// ...
components: {
VueTrix
}
};
```### Setup with Nuxt.js (SSR)
Create mounting plugin file
```javascript
// plugins/vue_trix.js
import Vue from "vue";
import VueTrix from "vue-trix";Vue.use(VueTrix);
```Update Nuxt.js config file
```javascript
// nuxt.config.js
plugins: [{ src: "~/plugins/vue_trix", mode: "client" }];
```## Component Usages
### Create a simple editor in your single component file
Add `VueTrix` component into `*.vue` template
```XML
```### Integrating with Forms
```XML
```### Props descriptions
- `inputId`: This is referenced `id` of the hidden input field defined, it is optional.
- `inputName`: This is referenced `name` of the hidden input field defined, default value is `content`.
- `placeholder`: The placeholder option attribute specifies a short hint that describes the expected value of a editor.
- `autofocus`: Automatically focus the editor when it loads
- `disabledEditor`: This prop will put the editor in read-only mode.
- `localStorage`: The boolean attribute allows saving editor state into browser's localStorage (optional, default is `false`).### Populating editor content
#### Init loading content into the editor
In case, you want to load initial data from database then display into the editor. you can use `v-model` directive with local component's state.
```javascript
// Declare local component's state is loaded from database
export default {
// ...
data() {
return {
editorContent: "Editor contents
"
};
}
// ...
};
``````HTML
// Assign to v-model directive
```#### Track data changes
The local component's state will be changed reactively when you modified contents inside the trix editor UI. Therefore, you need to `watch` the local state for updating content back to database
```javascript
export default {
// ...
methods: {
updateEditorContent(value) {
// Update new content into the database via state mutations.
}
},
watch: {
editorContent: {
handler: "updateEditorContent"
}
}
// ...
};
```### Binding attachment events
The `` element emits several events which you can use to observe and respond to changes in editor state.
- `@trix-file-accept` fires before an attachment is added to the document. If you don’t want to accept dropped or pasted files, call preventDefault() on this event.
- `@trix-attachment-add` fires after an attachment is added to the document. You can access the Trix attachment object through the attachment property on the event. If the attachment object has a file property, you should store this file remotely and set the attachment’s URL attribute.
- `@trix-attachment-remove` fires when an attachment is removed from the document. You can access the Trix attachment object through the attachment property on the event. You may wish to use this event to clean up remotely stored files.
### Process uploading attachment to remote server
Add binding event listener to `trix-attachment-add`
```HTML
```In Javascript
```Javascript
const remoteHost = 'your remote host';function handleAttachmentChanges(event) {
// 1. get file object
let file = event.attachment.file;// 2. upload file to remote server with FormData
// ...// 3. if upload success, set back the attachment's URL attribute
// @param object data from remote server response data after upload.
let attributes = {
url: remoteHost + data.path,
href: remoteHost + data.path
};
event.attachment.setAttributes(attributes);
}
```## Trix document
[Full documentation](https://github.com/basecamp/trix#readme)
## Contributing
If you're interested in contributing to Vue-Trix or share your opinions, please consider to submitting a [**pull request**](https://github.com/hanhdt/vue-trix/pulls) or post [**issues**](https://github.com/hanhdt/vue-trix/issues). Also, I will try to code-self documentation.