/vue-contenteditable

This plugin provides a ``<contenteditable/>`` element supporting ``v-model``. It also provides some (optional) features, like preventing html input / paste or new lines.

Primary LanguageVueMIT LicenseMIT

vue-contenteditable

This plugin provides a <contenteditable/> element supporting v-model. It also provides some (optional) features, like preventing html input / paste or new lines.

It is inpired by the nice (but limited by design) https://github.com/asconwe/vue-contenteditable-directive .

Contrary to vue-contenteditable-directive, this plugin has full support of v-model reactivity.

Should you use a content editable ?

The response is generally NO.

But... there are edge cases where neither <input/> nor <textarea> could suit, for example when you need a dynamic object size to adapt to user input text size.

Installation

With a build system

npm install --save vue-contenteditable

In your main.js :

import contenteditable from 'vue-contenteditable'
Vue.use(contenteditable)

(Re)build

The needed files are already provided in dist/, but if you want to re build, simlply run :

npm run build

Directely in html

<script src="contenteditable.min.js"></script>

Usage

Where you need a contenteditable element :

<template>
  <contenteditable tag="div" :contenteditable="isEditable" v-model="message" :noNL="true" @returned="enterPressed" />
</template>

<script>
export default {
  data() {
    return {
      isEditable: true,
      message: "hello"
    }
  },
  methods : {
    enterPressed(){
      alert('Enter Pressed');
    }
  }
}

Props

tag
String Html element type (p, div...)
v-model
v-model as usually used with <input/> and <textarea/>
:contenteditable
(Default : true) Forwarded to DOM's contenteditable.
noHTML
(Default : true) Prevent insertion (either typed or pasted) of html text
noNL
(Default : false) Prevent insertion of new-lines. Also activate returned event emission
v-on:...
All comon input DOM events are forwarded, so that you can use v-on as usual.

Events

returned
When the user press :kbd:Return and noNL is set, then it emits the returned event with the current value (as String) as argument.

License

This code is provided as-is, under the terms of the MIT license (see License file for more details).

A link to the original sources and contribution / pull request are welcome if you enjoy / use / contribute to this module ! :)