npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

shopware-vueify

v1.0.1

Published

use vue components with the shopware statemanager

Downloads

8

Readme

shopware-vueify

use vue components with the shopware statemanager

Requirements

Requires Vue, jQuery and Shopware JS environment.

Basic usage

vueify(<Component>) : <Shopware-jQuery-Plugin>
$.plugin('myComponent', vueify({
    template: `
        <div>
            <i>Hello, {{ who }}!</i>
            <button @click="toggleWho">toggle</button>
        </div>
    `,
    data() {
        return { who: 'world' };
    },
    methods: {
        toggleWho(e) {
            this.who = this.who === 'world' ? 'there' : 'world';
        }
    }
}));

StateManager.addPlugin('[data-my-component="true"]', 'myComponent', ['l', 'xl']);

Can be required. If not, vueify is available globally.

Stand-alone component files

Can be used with vue-files:

const MyComponent = require('components/my-component.vue');
$.plugin('myComponent', vueify(MyComponent));

Properties

Vueify has support for options, which get passed to vue as properties. Including support for shopware inline-option style.

$.plugin('myComponent', vueify({
    props: {
        value: Number,
        additional: String
    },

    template: '<div>{{ value }}</div>'
}));

StateManager.addPlugin('[data-my-component="true"]', 'myComponent', { additional: 'Foobar' });
<div data-my-component="true" data-value="135"></div>

Overriding

$.override is supported. Vueify makes the parent-component available to developers as supercomponent.

$.plugin('myComponent', vueify({
    template: `
        <div>
            {{ message }}
            <a @click.prevent="triggerPonies">click me</a>
        </div>
    `,
    data() {
        return { message: 'initial message' };
    },
    methods: {
        triggerPonies() {
            this.message = 'component message';
            alert('hurray! message is: ' + this.message);
        }
    }
}));

// no vueify here
$.overridePlugin('myComponent', {
    methods: {
        triggerPonies() {
            this.supercomponent.methods.triggerPonies.call(this);
            this.message = 'child message';
        }
    }
});

$.overridePlugin works as you expect it. You can override any property with it, including props and template.

Plugin access

To access the Vue-instance externally you need to get hold of the plugin-data first.

const plugin = $('.element').data('plugin_myComponent');
const vm = plugin.vm;

And vice versa:

$.plugin('myComponent', vueify({
    methods: {
        enableCake() {
            const plugin = this.$options.$plugin;
            const $el = plugin.$el;
        }
    }
}));

Lifecycle

Remember init() and destroy()? Yeah, screw those. now we've got a better lifecycle. You may use any Lifecycle Events Vue offers you.

Once a Vueified™ plugin gets added to an element, the $els content will get replaced by the vue-component.

When that plugin then gets destroyed, the original content will get re-added and the vue-component disappears.

$.plugin('myComponent', vueify({
    template: '<div>Hello, world!</div>'
}));

StateManager.addPlugin('[data-my-component="true"]', 'myComponent', ['xl']);
<div data-my-component="true">
    <b>original content</b>
</div>

When viewport equals xl:
<div data-my-component="true">
    <div>Hello, world!</div>
</div>

When viewport equals anything but xl:
<div data-my-component="true">
    <b>original content</b>
</div>

Currently unsupported:

  • Slots

Changelog

1.0.1 - 23. November 2016

  • Improve README
  • Fix webpack requiring $.PluginBase

1.0.0 - 22. November 2016

  • Initial Release