LINUX.ORG.RU

Переписать js-код Prototype.js на jquery

 , , , prototype.js,


0

1

Ну я таки рискну.

Товарищи, есть ли на ЛОРе корифеи, которые могут переписать говнокод на смеси чистого javascript и Prototype на православном jquery?

Я не осилил, честно. Прошу помощи.


function send() {
        var paySystem = getPaySelectedAttr();

        document.getElementById('payparts-period-success').innerHTML = document.getElementById('month-sel').value;
        var url = "<?php echo $this->getUrl('payparts/payment/notify/', array('_secure' => false)); ?>";
        new Ajax.Request( url, {
            method: 'post',
            parameters: 'parts='+document.getElementById('month-sel').value+'&system='+ paySystem['system'],
            onSuccess: successFunc,
            onFailure:  failureFunc
        });

    }
    function successFunc(response){
        console.log(response);
        document.getElementById("payparts-select-block").style.display = "none";
        document.getElementById("payparts-success").style.display = "block";
        document.getElementById("payment-buttons-container").style.display = "block";
        return true;
    }
    function failureFunc(response){
        document.getElementById("send-parts-error").style.display = "block";
        return false;
    }

    function getPaySelectedAttr(){
        var result = {};
        var e = document.getElementById("system-sel");
        result['value'] = e.options[e.selectedIndex].value;
        result['system'] = e.options[e.selectedIndex].getAttribute('pp-name');
        result['name'] = e.options[e.selectedIndex].getAttribute('name');
        return result;
    }
    
    function periodChange(){
        var selectData = getPaySelectedAttr();
        var result = '<option disabled>Срок,мес.</option><option selected value="2">2</option>';
        console.log(selectData);

        for ($i=0;$i < selectData['value']; $i++){
            if($i > 2){
                result += '<option value='+$i+'>'+$i+'</option>';
            }
        }
        document.getElementById('month-sel').innerHTML = result;
        document.getElementById('system-name').innerHTML = selectData['name'];

    }
    function radioLisener(){
        var radios = document.forms["co-payment-form"].elements["payment[method]"];
        for(var i = 0, max = radios.length; i < max; i++) {
            radios[i].onchange = function() {
                if(document.getElementById('p_method_payparts_redirect').checked){
                    document.getElementById("payment-buttons-container").style.display = "none";   
                } else{
                    document.getElementById("payment-buttons-container").style.display = "block";
                }
            }
        }
    }
    radioLisener();
    document.getElementById('send-parts-error').style.display = "none";
    document.getElementById('send-period').onclick = send;
    document.getElementById('system-sel').onchange = periodChange;

Если что, это кусок кода из шаблона Magento уже сил никаких нет думать как его можно переписать по-человечески :-(

★★★★★

Последнее исправление: Twissel (всего исправлений: 2)

Не благодари. jQuery > 2.1+. Извини, но времени переписывать структуру этого говнокода нет. По идее тут _все_ не так и функции не нужны. И jQuery тоже не нужен, ага. Но если тебе так хочется...
P.S.: времени тестировать тоже нет, так что если ошибки – исправишь поди.

function send() {
	var paySystem = getPaySelectedAttr();
	jQuery('#payparts-period-success').empty().html(jQuery('#month-sel').val());
	var url = "<?php echo $this->getUrl('payparts/payment/notify/', array('_secure' => false)); ?>";
	jQuery.ajax({
        type: 'POST',
        data: {
        	'parts': jQuery('#month-sel').val(),
        	'system': paySystem['system'],
        },
        cache: false,
        url: url,
        done: function(response) {
        	successFunc(response);
        }
        fail: function(response) {
        	failureFunc(response);
        }
    });
}

function successFunc(response) {
	jQuery('#payparts-select-block').css({'display': 'none'});
	jQuery('#payparts-success').css({'display': 'block'});
	jQuery('#payment-buttons-container').css({'display': 'block'});
	return true;
}

function failureFunc(response) {
	jQuery('#send-parts-error').css({'display': 'block'});
	return false;
}

function getPaySelectedAttr(){
	var result = {};
	var e = jQuery('#system-sel');
	result['value'] = e.value();
	result['system'] = e.attr('pp-name');
	result['name'] = e.attr('name');
	return result;
}

function periodChange(){
	var selectData = getPaySelectedAttr();
	var result = '<option disabled>Срок,мес.</option><option selected value="2">2</option>';
	for (var i = 0; i < selectData.value; i++) {
	    if (i > 2) {
	        result += '<option value='+i+'>'+i+'</option>';
	    }
	}
	jQuery('#month-sel').empty().html(result);
	jQuery('#system-name').empty().html(selectData['name']);
}

jQuery(document).on('change', 
	'form[name="co-payment-form"] [name="payment[method]"]', function() {
	if (jQuery('#p_method_payparts_redirect').attr('checked')) {
		jQuery('#payment-buttons-container').css({'display': 'none'});
	} else {
		jQuery('#payment-buttons-container').css({'display': 'block'});
	}
});

jQuery('#send-parts-error').css({'display': 'none'});

jQuery(document).on('click', '#send-period', function() {
	send();
});

jQuery(document).on('change', '#system-sel', function() {
	periodChange();
});

znenyegvkby
()
Последнее исправление: znenyegvkby (всего исправлений: 1)
Ответ на: комментарий от znenyegvkby

Спасибо!

Мопед не мой, это код из модуля интеграции оплаты одного известного украинского банка ;-)

Буду пробовать.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от Twissel

это код из модуля интеграции оплаты одного известного украинского банка ;-)

Жаль их клиентов, конечно. К вопросам безопасности они, наверное, тоже подходят с позиции «и так сойдет».

на православном jquery

Только не стоит забывать, что этот «код» все равно останется говнокодом и в этом случае. Здесь нужно изменять сам подход, брать какой-нибудь стоящий фрейм и создавать _приложение_, а не кучу бессвязных файлов выполняющих что-то как попало :)

znenyegvkby
()

на православном jquery

вот так мы и превращаем вэб в говно. Зачем тебе тут жикверя? разве что для аякс запроса(единственно что тут от прототайпа), но это можно и без жиквери сделать...

anonymous
()
Ответ на: комментарий от znenyegvkby

Ну, если честно, похоже, что все делалось для отчетности.

Это я уже для очистки совести попросил, чтобы кто-нибудь переписал на jquery.

Там есть еще несколько косяков взаимодействия с самой cms.

Так что, сделано действительно как попало :-\

Twissel ★★★★★
() автор топика

Лучше всего сделать рефакторинг и переписать на vanilla js.

th3m3 ★★★★★
()
Ответ на: комментарий от anonymous

Спасибо.

Но там дело не столько в jquery, сколько в том,что Мадженто 1.9.x жестко прибита гвоздями к Prototype.js. Есть модуль быстрого заказа, который «вычищает» код, приведенный в ОП, из шаблона страницы и нихрена не работает.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от Twissel

Также по-говяжьи, только с учетом того, что в структуре кода не было бы практически никакой разницы.

znenyegvkby
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.