JSFiddle - React, Tailwind, and code Playground

by Mateus Fernandes de Mello

JavaScript

// elemento é um elemento no DOM

(function($){
    $.fn.plug = function(optionsPlugin) {
    	var plugin = this;

        var defaultsPlugin = {
			debug	: false
			elementos : true
		};

		confPlugin = $.extend(true, defaultsPlugin, optionsPlugin);

        var defaultsEnvio = {
			ajax : {
				type		: 'post',
				url			: '',
				data		: {}				
			}
        };


        if (confPlugin.elementos) {

        	var idElement = 0;
        	var elementos = new Array();
// elemento é um elemento no DOM
	        var criaElemento = function() {
                elementos.push('novo elemento com id: '+ idElement );
	        };
// elemento é um elemento no DOM
            var removeElemento = function(elemento){
	        	elemento.fadeOut(1000, function() {
	        		elemento.remove();
	        	});
	        };
// elemento é um elemento no DOM
	        var statusElemento = function(elemento, status){

	        	if (status)
	        		elemento.addClass('ele-sucesso');
	        	else
	        		elemento.addClass('ele-erro');
	        };
	    };
        
        var enviaAjax = function(){
        	
	    	$.ajax(
	    		confEnvio.ajax
	    	)
	    	.done(function(res) {
		        if (confPlugin.elementos)
	    			statusElemento(elementos[idElement], true);
	    	})
	    	.fail(function(res) {
		        if (confPlugin.elementos)
	    			statusElemento(elementos[idElement], false);
	    	})
	    	.always(function() {
		        if (confPlugin.elementos)
	    			setTimeout(
                        function(){
                        	removeElemento(elementos[idElement]);
                        }
                        , 2000
                    );
	    	});
        };

        var confEnvio = {};

        plugin.enviar = function(optionsEnvio){

	        confEnvio = $.extend(true, defaultsEnvio, optionsEnvio);

	        if (confPlugin.elementos)
	        	criaElemento();

	        enviaAjax();

            idElement++;
        };

        return this.each(function() {
        ...