• Stars
    star
    215
  • Rank 182,877 (Top 4 %)
  • Language
    CoffeeScript
  • Created about 9 years ago
  • Updated almost 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A collection of mixins in vue

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:[
    window.vueMixins.onClick
  ]

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 = this.getViewportSize()
vs.width
vs.height

getDocumentHeight

// adds a method:
// getDocumentHeight()
//
// usage:
height = this.getDocumentHeight()

onceDocument

// adds a method:
// onceDocument(event, cb, useCapture)
//
// usage:
dispose = this.onceDocument('click',function(e){
  doSomething()
  // return true will remove the listener
  // return false will not remove the listener
  },false)
dispose() // will remove the listener

onClick

// adds a method:
// click(event) which will call this.onClick(e) if available
//
// usage:
this.onClick = function(e) {doSomething()}
<!-- in template -->
<div @click="click"></div>

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 = null
var cb = function(e) {
  doSomething()
  dispose() // to remove from stack
}
dispose = this.addToClickStack(cb)
<!-- in template -->
<div @click="click"></div>

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 = null
var cb = function(e) {
  doSomething()
  dispose() // to remove from store
}
dispose = this.onClickStore(cb)
<!-- in template -->
<div @click="click"></div>

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.onWindowResize(function(){/*doSomethingOnWindowResize*/})
// remove your cb
dispose()
// 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.onElementResize(el, function(){/*doSomethingOnElementResize*/})
// remove your cb
dispose()
// 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.onWindowScroll(function(){/*doSomethingOnWindowScroll*/})
// remove your cb
dispose()
// all events will be automatically disposed on `beforeDestroy`

setCss

// adds a method:
// setCss(element,cssProperty, cssValue)
//
// usage:
this.setCss(document.body,"overflow","hidden")

// remove overflow from style attribute
this.setCss(document.body,"overflow")
// or
this.setCss(document.body,"overflow", "")

dynamicCss

// used to create a stylesheet and set rules in it.
// adds a method:
// setCssRules(newRules)
//
// usage:
this.setCssRules({body: {overflow: "hidden"}})
// to remove a rule:
this.setCssRules({body: {overflow: null}})
// nesting:
this.setCssRules({body: {"& div": {width: "10px"},overflow:"hidden"}})
// is short for: (& will be replaced by the parent selector)
// deeper nesting is allowed
this.setCssRules({body: {overflow:"hidden"},"body div": {width: "10px"}})

vue

// adds a computed property:
// Vue
//
// usage:
Vue = this.Vue

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:
  toggle: function(){
    if (this.opened) {
      this.close()
    } else {
      this.open()
    }
  }
  open: function() {
    this.setOpened()
  }
  close: function() {
    this.setClosed()
  }  

parentListener

// adds two props: "ignoreParent" and "parent", which
// defaults to "this.$el.parentElement"
//
// usage:
methods:
  onParentClick: function() {
    // will be called when "ignoreParent" is false on click on parent
  }

fragToString

// adds a method: "fragToString"
// usage:
str = this.fragToString(someFrag)
// 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: {
    default: function() {
      return ["someClass"]
    }
  }
},
data: function() {
  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: {
    default: function() {
      return {color:"red"}
    }
  }
},
data: function() {
  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"
 }
},
ready: function() {
  this.$on("before-enter",function(){
    // will be called after element is inserted in dom but before transition starts
    // regardless of a optional provided transition
  })
}

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.onMouseMove(function(){/*doSomethingOnMouseMove*/})
// remove your cb
dispose()
// 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.

More Repositories

1

vue-materialize

materialize - done in vue
CoffeeScript
170
star
2

script-runner

Invoke multiple commands, running in parallel / sequential, matching npm scripts
CoffeeScript
27
star
3

vue-dev-server

a small development server for building `vue` components
JavaScript
21
star
4

vue-component-boilerplate

boilerplate for a standalone vue-component
Vue
17
star
5

foldername-tabs

Adds foldernames to tabs..
CoffeeScript
16
star
6

vue-filters

A collection of filters for vue
CoffeeScript
15
star
7

color-tabs

Adds colors to tabs..
CoffeeScript
13
star
8

better-spawn

a better spawn
CoffeeScript
12
star
9

abbreviate

abbreviate strings in style of R: Abbreviate
CoffeeScript
10
star
10

opened-files

Atom package to give more overview for opened files
JavaScript
9
star
11

vue-compiler

a simple cli wrapper around the vue-component-compiler
CoffeeScript
8
star
12

Rvasp

Tools for loading, manipulating and plotting VASP files within R
R
7
star
13

report-viewer

Cli for piping a unit test directly into your browser
JavaScript
6
star
14

vue-autocompile

Auto compile vue file on save
CoffeeScript
6
star
15

mocha-ui

(Package for Atom editor) A UI for running mocha inside of your project
CoffeeScript
4
star
16

linkall

Convenient tool to link up local packages
CoffeeScript
3
star
17

koa-hot-dev-webpack

webpack-dev-middleware and webpack-hot-middleware with good defaults for fast setup of koa dev servers
CoffeeScript
3
star
18

autoreload-package-service

Provides a service which other atom packages can use to reload on file change
CoffeeScript
3
star
19

imagemin-manager

declarative use of imagemin \o/
CoffeeScript
2
star
20

karma-vue-component

a tiny wrapper to load a vue-component with one function call
CoffeeScript
2
star
21

vue-directives

collection of directives for vue
CoffeeScript
2
star
22

paged-media-boilerplate

Create book-quality pdfs by writing in Jade, Stylus and Coffeescript
CSS
2
star
23

atom-package-reloader

reloades your atom packages on file change
JavaScript
1
star
24

color-picker-service

provides a color picker as a service for other packages
JavaScript
1
star
25

vue-hello-world

Boilerplate package to use vue.js within atom
CoffeeScript
1
star
26

mocha-watch

better watch for mocha
JavaScript
1
star
27

VASPmanager

Tool for managing VASP calculations on a PBS based cluster
Python
1
star
28

report-viewer-default

The default view for report-viewer
CoffeeScript
1
star
29

get-critical-css

extract critical css from website(s)
CoffeeScript
1
star
30

autodev

quick auto restart script for dev servers
CoffeeScript
1
star
31

slnn-stack

systemd, letsencrypt, node and nginx stack
CoffeeScript
1
star