contributte / live-form-validation

:no_entry: Nice client-side live form validation for Nette Forms.
https://contributte.org/packages/contributte/live-form-validation.html
BSD 3-Clause "New" or "Revised" License
59 stars 24 forks source link

Add support for modules #49

Open kopecmi8 opened 5 years ago

kopecmi8 commented 5 years ago

Because of integration of modified Nette Forms into your plugin is nowdays unusable as module in ES6 syntax. Nette Form contains module export factory and funcionality of your plugin is unreachable.

This commit add support for use this plugin as module. Focus on this example usage with ES6 module syntax:

import LiveFormValidation from 'live-form-validation-es6';

window.LiveForm = LiveFormValidation.LiveForm;
window.Nette = LiveFormValidation.Nette;

Or with NodeJs module syntax:

const liveFormValidation = require('live-form-validation-es6');

window.LiveForm = liveFormValidation.LiveForm;
window.Nette = liveFormValidation.Nette;
f3l1x commented 5 years ago

I like it. Have you test it?

kopecmi8 commented 5 years ago

Yes, I tested and it should be compatible with usage in old way style, and it works as I wrote in examples. But I just tested It only on one project. Now I plan, release own NPM package for testing purpose on more projects.

But I would like if you will tested too and this can become part of official plugin, because I am not such a JavaScript expert ;-) I just want to use this amazing plugin with Webpack, and its nowadays not possible.

kopecmi8 commented 5 years ago

Zjistil jsem že je ještě potřeba vyčlenit tělo z metody initOnLoad. Toto je problém přímo toho jak je špatně udělané původní nette-forms. V továrně je tato podmínka:

if (init) {
   global.Nette.initOnLoad();
}

K zavolání této metody ale dojde jen když je knihovna použita přímým vložením do DOM. Pokud ji chceme použít jako modul musíme jí zavolat manuálně. (Je zajímavé že v komentáři je označení @private) Pokud to neuděláme funguje validace pouze v ajaxovém módu.

Člověk by si řekl, že tedy zavolá metodu initOnLoad manuálně nehledě na private komentář. Jenže je problém, že metoda používá event DOMContentLoaded, který se firuje pouze při načtení stránky, a pokud použiji modul například asynchronně tato událost už mohla dávno nastat a její zavolání proto nic neudělá.

Vyčlenil jsem proto tělo funkce volané při eventu do vlastní metody ìnit, kterou je potřeba zavolat v patřičnou chvíli. Sám programátor modulu má pak na starost aby ji zavolal v pravou chvíli, tedy pod DOM ready.

f3l1x commented 3 years ago

Ahoj @kopecmi8. Bezi ti to tedka na nejakem projektu?

kopecmi8 commented 3 years ago

@f3l1x Jo běží. Já jsem si to tenkrát vydal jako vlastní balíček https://www.npmjs.com/package/live-form-validation-es6 Ale řešil jsem to kvůli projektu ve staré práci, a teď už k němu nemám přístupy...

f3l1x commented 2 years ago

Ahoj @kopecmi8. Nemohl by jsi to rebasnout?

radimvaculik commented 1 year ago

@kopecmi8 Ping. Prosim o rebase.