1. JavaScript / Говнокод #2564

    +174.3

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    function _start() {
    	var $p = $("input#text-f").val();
    	if (($p == 'undefined')||($p == '')||($p.length != 10))
    		return false;
    	$("#callsexample").animate({height: "hide", opacity: "0"}, "fast")
    	$("#demoexample").animate({height: "show", opacity: "0"}, "low", function(){
    		$("#close").html('<a href="">Инициализация</a>');
    		for (i=1; i<15; i++)
    			$("#res"+i).html('');
    		$("#demoexample").animate({height: "hide", opacity: "0"}, "fast", function(){
    			$("#provider").load("/info?a=p&p="+$("select#pref-code").val()+$("input#text-f").val());
    			$("#region").load("/info?a=r&p="+$("select#pref-code").val()+$("input#text-f").val());
    			$("#status").load("/info?a=s&p="+$("select#pref-code").val()+$("input#text-f").val());
    			setTimeout(function(){
    				$("#close").html('<a href="">Определение оператора абонента</a>');
    				$("#res1").html('Определение оператора абонента');
    				setTimeout(function(){
    					$("#close").html('<a href="">Получение сервисных параметров</a>');
    					$("#res3").html('Получение сервисных параметров');
    					$("#res2").html('OK');
    					setTimeout(function(){
    						$("#close").html('<a href="">Запуск эмулятора устройства GSM</a>');
    						$("#res5").html('Запуск эмулятора устройства GSM');
    						$("#res4").html('OK');
    						setTimeout(function(){
    							$("#close").html('<a href="">Формирование запроса</a>');
    							$("#res7").html('Формирование запроса');
    							$("#res6").html('OK');
    							setTimeout(function(){
    								$("#close").html('<a href="">Отправка запроса оператору</a>');
    								$("#res9").html('Отправка запроса оператору');
    								$("#res8").html('OK');
    								setTimeout(function(){
    									$("#close").html('<a href="">Получение списка SMS</a>');
    									$("#res11").html('Получение списка SMS');
    									$("#res10").html('OK');
    									setTimeout(function(){
    										$("#close").html('<a href="">Получение списка звонков</a>');
    										$("#res13").html('Получение списка звонков');
    										$("#res12").html('OK');
    										setTimeout(function(){
    											$("#close").html('<a href="">Завершение соединения</a>');
    											$("#res14").html('OK');
    											setTimeout(function(){
    											$("#demoresult").animate({height: 200, opacity: "1"}, "low", function(){});
    											$("#demosearch").animate({height: "hide", opacity: "0"}, "low");
    									$("#demoexample").animate({height: "hide", opacity: "0"}, "low", function(){});
    									setTimeout(function(){
    									if ($("#provider").html() == 'ERROR') {
    											$("#demoresult").animate({height: "hide", opacity: "0"}, "fast");
    											$("#demosearch").animate({height: "hide", opacity: "0"}, "fast");
    											$("#demoexample").animate({height: "show", opacity: "1"}, "fast");
    											$("#close").html('<a href="">Получение данных невозможно</a>');
    											} else {
    											$("#demosearch").animate({height: "hide", opacity: "0"}, "low");
    											$("#demoresult").animate({height: "show", opacity: "1"}, "low");
    											$("#close").html('<a href="">Данные успешно получены</a>');
    													}
    												}, 200);
    											},2100);
    										},2100);
    									},2700);
    								},2000);
    							},3700);
    						},3500);

    Это "чудо" - один из вариантов "Эмулятора GSM для получения чужих СМСок доверчивыми хомячками". "Назначение" этого... кхм... высера, доставляет не хуже способа реализации...
    Использует jQuery

    Запостил: Shitafaka, 07 Февраля 2010

    Комментарии (25) RSS

    • Пиздец о0 Можно посмотреть где это используется?
      Ответить
      • За что тебя на гугле забанили? Что ты натворил?!
        http://www.google.ru/search?hl=ru&client=firefox-a&rls=org.gentoo%3Aen-US%3Aunofficial&hs=czP&newwindow=1&q=%22 %D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0% BA%D0%B0+%D0%B7%D0%B0%D0%BF%D1%80%D0%BE% D1%81%D0%B0+%D0%BE%D0%BF%D0%B5%D1%80%D0% B0%D1%82%D0%BE%D1%80%D1%83%22+%22%D0%9F% D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B 8%D0%B5+%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D 0%B0+SMS%22&btnG=%D0%9F%D0%BE%D0%B8%D1%8 1%D0%BA&lr=&aq=f&oq=
        Ответить
        • Вопросы глупые задавал;)
          Ответить
        • > nil
          Тебе чё, делать больше нехуй? Иди разводи унылое говно своими быдлоприколами.
          Ответить
          • Да не, просто отвечал на вопрос по доброте душевной. Но эти ресурсы быстро выпиливают. О чем результат поиска и намекает.
            Ответить
            • Ну извини :)
              Что выпиливают - это да... Гэбня ими занялась вплотную.
              Ответить
          • Ой, сорри, я и не заметил, что ссылку кто-то побил... Я просто с адресной строки взял и вставил.
            Кто ж ее так.
            Короче, запрос был «"Определение оператора абонента" "Получение списка SMS"»
            Ответить
        • nil, ты ниасилил юникод?
          Ответить
          • Если про ссылку, то уж не знаю, кто ее не осилил, у меня впечатление, что движок сайта.
            А если про меня, то да, там в стандарте очень многа букав было, причем, непонятных.
            Ответить
    • Зато как красиво отформатировано :)
      Ответить
    • Баааальшой жирный плюс! Тут уже похоже надо в скорую звонить :)
      Ответить
      • Не надо так категорично заявлять. Как по Вашему можно лучше организовать? Написать для каждого setTimeout отдельную функцию? Ну будет не одна функция, а много функций - тоже самое, что и тут
        Ответить
        • Есть такая вещь.. .queue()

          http://api.jquery.com/queue/
          Ответить
          • Есть. Много чего в jQuery есть. Только как ее прикрутить к этому примеру?

            Я так понял, она выполняет последовательность действий с элементом? Поправьте, если ошибаюсь.
            Ответить
            • Она выполняет последовательность действий. Не обязательно с выбранным элементом.

              Чем это лучше? Тем, что не будет такой вложенности, а в setTimeout, который будет в конце каждой функции, нужно будет дописывать только .dequeue()
              Ответить
              • Можно примерчик хотя бы на парочку setTimeout, а то не совсем понял
                Ответить
                • Конечно :)

                  function md(time)
                  {
                  	setTimeout(function(){ $().dequeue("myownqueue"); }, time);
                  };
                  
                  var array = [function()
                  {
                   alert('Йа. Действие 1.');
                   md(1000);
                  }, function()
                  {
                   alert('Йа. Действие 2.');
                   md(3000);
                  }, function()
                  {
                   alert('Йа. Действие 3.')
                  }];
                  
                  $().queue("myownqueue", array).dequeue("myownqueue");
                  Ответить
                  • Ну да, покрасивее будет. Буду знать
                    Ответить
                  • Хотя это тоже самое, что я предложил выше - все в отдельных функциях, а в конце каждой вызов через setTimeout следующей, только без извращений :)

                    // ivmaroz
                    Ответить
        • Вы хоть представляете, что при выполнении этого чудо-кода все эти функции будут "скомпилированы" по-новой, а в браузерах типа ИЕ такие штуки вам не простят и не вычистят память от этого хлама. Т.е. этот код явно распологает к утечкам памяти.
          А еще есть такие вещи, как "конвеер" реализованые и легко реализуемые во всех языках, специально задуманые для того, чтобы такой бред не писать.
          Ответить
          • Можно примерчик правильной реализации?
            Ответить
            • Развлекайтесь :)
              var callbacks = 
              	[{f: callback, t: 1000},
              	{f: callback, t: 2000},
              	{f: callback, t: 3000}];
              var current = 0;
              function callback()
              {
              	if (confirm("Called after " + callbacks[current].t + 
              		" milliseconds. callback #" + current))
              	{
              		current = (current + 1) % callbacks.length;
              		var o = callbacks[current];
              		setTimeout(o.f, o.t);
              	}
              }
              setTimeout(callback, 1000);
              Ответить
    • В простейшем виде - примерно так.
      var stack = [];
      function record(fn,t){
      	stack.push( [fn, t] );
      }
      function runNext(){
      	var arr = stack.shift();
      	if(!!arr) setTimeout( function(){ arr[0](); runNext();}, arr[1]);
      }
      record( function(){alert('ONE')}, 2000 );
      record( function(){alert('TWO')}, 5000 );
      runNext();
      Ответить
      • ну или так, с передачей произвольного числа аргументов и без обертывания функций
        var stack = [];
        function record(fn,t,p){	 stack.push( arguments );		 }
        function runNext(){
        	var arr = stack.shift();
        	if(!arr)return;
        	arr[0].apply(null,arr.slice(2));
        	setTimeout(runNext, arr[1]);
        }
        
        function custom(){alert(arguments.join(''));}
        
        record( alert, 2000, 'ONE');
        record( custom, 2000, 'T','W','O' );
        record( function(){alert('THREE')}, 1000 );
        
        setTimeout(runNext, 1000);

        А сабж восхитителен.
        Ответить

    Добавить комментарий