vue-mixins
A collection of mixins in vue. Heavily used in vue-comps.
Policy
all sorts of mixins can be submitted. There will be no removes because of deprecation. If the API of a mixin changes the name has to change, for example onResize
-> onResize2
Install
npm install --save-dev vue-mixins
or include bundle.js
Usage
## whithin your module components: mixins: require"vue-mixins/onClick" # if you have used the bundle.js components: mixins: windowvueMixinsonClick
List of mixins
Name | src | description |
---|---|---|
getViewportSize | src | adds a method getViewportSize which returns an object containing the width and height of the viewport |
getDocumentHeight | src | adds a method getDocumentHeight which returns the height of the document |
onceDocument | src | adds a eventListener to the document which removes itself after first successful call |
onClick | src | adds a method click which will call the function onClick if set |
onClickStack | src | adds two methods: click and addToClickStack |
onClickStore | src | adds two methods: click and onClick (see below) |
onDocument | src | like onceDocument but doesn't removes itself |
onResize | src | deprecated |
onWindowResize | src | fires on resize of window (throttled and bundled) |
onElementResize | src | fires on resize of window or element, but only if the dimensions of the element changed |
onWindowScroll | src | fires on scroll on window (throttled and bundled) |
setCss | src | set Css of another element |
dynamicCss | src | dynamically manipulate css stylesheet |
getVue | src | deprecated, use vue instead |
vue | src | adds a computed property Vue with the current instance of Vue |
isOpened | src | adds everything for opened state management (two-way) |
isOpened2 | src | same as isOpened but for vue 2.0 (one-way) |
parentListener | src | hooks a function upon parent click |
parentListener2 | src | same as parentListener but for vue 2.0 |
fragToString | src | converts a documentFragment to String |
class | src | used to create a properly merged vue class object/array from a given prop and another vue class object/array |
style | src | used to create a properly merged vue style object/array from a given prop and another vue style object/array |
transition | src | used to manage user provided transition in a reusable component |
transition2 | src | same as transition but for vue 2.0 |
onMouseMove | src | fires on move of the mouse (throttled and bundled) |
Detailed usage
getViewportSize
// adds a method:// getViewportSize()//// usage:vs = thisvswidthvsheight
getDocumentHeight
// adds a method:// getDocumentHeight()//// usage:height = this
onceDocument
// adds a method:// onceDocument(event, cb, useCapture)//// usage:dispose = this // will remove the listener
onClick
// adds a method:// click(event) which will call this.onClick(e) if available//// usage:this {}
<!-- in template -->
onClickStack
// adds two methods:// - click(event) will call the last function in this.onClickStack if available// - addToClickStack(fn) will add a function to this.onClickStack and return a function to dispose it//// usage:var dispose = nullvar { // to remove from stack}dispose = this
<!-- in template -->
onClickStore
// adds two methods:// - click(event) will call all functions in this.onClickStore// - onClick(fn) will add a function to this.onClickStore and return a function to dispose it//// usage:var dispose = nullvar { // to remove from store}dispose = this
<!-- in template -->
onDocument
like onceDocument
, but doesn't remove itself on first successful invokation.
onWindowResize
// adds a method: onWindowResize(cb) which will return a function to dispose it//// usage:dispose = this// remove your cb// all events will be automatically disposed on `beforeDestroy`
onElementResize
// adds a method: onElementResize(el, cb) which will return a function to dispose it//// usage:dispose = this// remove your cb// all events will be automatically disposed on `beforeDestroy`
onWindowScroll
// adds a method: onWindowScroll(cb) which will return a function to dispose it//// usage:dispose = this// remove your cb// all events will be automatically disposed on `beforeDestroy`
setCss
// adds a method:// setCss(element,cssProperty, cssValue)//// usage:this // remove overflow from style attributethis// orthis
dynamicCss
// used to create a stylesheet and set rules in it.// adds a method:// setCssRules(newRules)//// usage:this// to remove a rule:this// nesting:this// is short for: (& will be replaced by the parent selector)// deeper nesting is allowedthis
vue
// adds a computed property:// Vue//// usage:Vue = thisVue
isOpened
// adds a boolean prop "isOpened" which will call "this.toggle()" on change// the state is saved on "opened"//// adds two methods:// setOpened(), setClosed() which will set "this.isOpened" without triggering// the toggle// and emit a event "toggled(opened)"//// usage:methods: { if thisopened this else this } { this } { this }
parentListener
// adds two props: "ignoreParent" and "parent", which// defaults to "this.$el.parentElement"//// usage:methods: { // will be called when "ignoreParent" is false on click on parent }
fragToString
// adds a method: "fragToString"// usage:str = this// str contains outerHTML of someFrag
class
// adds a computed property: "computedClass"// which merges a "mergeClass" data object/array and a "class" prop.// usage:template: "<div :class=computedClass></div>"props: class: { return "someClass" } { return mergeClass: "anotherClass" }// computedClass will be ["anotherClass","someClass"] when no prop is given// if the component is used like this <comp :class="['yetAnotherClass']"></comp>// computedClass will be ["anotherClass","yetAnotherClass"]// works also with object notation and a mixture of both
style
// adds a computed property: "computedStyle"// which merges a "mergeStyle" data object and a "style" prop.// usage:template: "<div :style=computedStyle></div>"props: style: { return color:"red" } { return mergeStyle: color:"blue" }// computedStyle will be [{color:"blue"},{color:"red"}] when no prop is given// if the component is used like this <comp :style="{color:white}"></comp>// computedStyle will be [{color:"blue"},{color:"white"}]// works also with array notation and a mixture of both
transition
used to manage user provided transition in a reusable component
// adds a method: "processTransition" and a computed value "cTransition"// usage:template: "<div :transition=cTransition></div>"props: transition: type: String default: "someDefaultTransition" { this}
processTransition(name,parent = this.$parent)
resolves name
to the actual transition on
parent
vm or global Vue. Adds before-enter
, after-enter
, before-leave
, after-leave
, enterCancelled
and leaveCancelled
emit hooks on the instance and inserts the modified transition into this.$options.transitions[name]
cTransition
lazily calls processTransition
on the first transition and every time transition
changes.
You can disable transition by setting this.disableTransition = true
.
onMouseMove
// adds a method: onMouseMove(cb) which will return a function to dispose it//// usage:dispose = this// remove your cb// all events will be automatically disposed on `beforeDestroy`
Develop
Clone rep
npm install
Available scripts:
npm run build # compiles coffee-script in src/
npm run test # runs a single-run karma in chrome and firefox
npm run watch # runs karma in chrome (uses src/*.coffee files direclty, no need for build)
# to run only single tests:
karma start --browsers Chrome --auto-watch --reporters spec --files ['test/onClick.coffee']
License
Copyright (c) 2015 Paul Pflugradt Licensed under the MIT license.