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

    +154

    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
    var SomeObject = {
    	ToggleUploadButton: function () {
    		/// <summary>Отобразить или спрятать кнопку загрузки</summary>
    		var arr = this._ImageList.getElementsByTagName("LI");
    		if (arr.length > 0)
    			$(this._UploadPanel).removeAttr("disabled");
    		else $(this._UploadPanel).attr("disabled", "disabled");
    	},
    	OnButtonClick: function (e) {
    		/// <summary>Обаботка события нажатия на кнопку "Загрузить". Проходим по всем миниатюрам из списка, читаем у каждой свойство file (добавленное при создании) и начинаем загрузку, создавая экземпляры объекта uploaderObject. По мере загрузки, обновляем показания progress bar, через обработчик onprogress, по завершении выводим информацию.</summary>
    		if (!this.IsUploadCompatible)
    			return true;
    
    		if ($(this._UploadPanel).attr('disabled') !== undefined) return false;
    
    		//...
    	}
    }

    Вот таким красивым способом проверяем на наличие файлов в контейнере для загрузки...

    Запостил: TauSigma, 01 Августа 2014

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

    • многострочные коменты нинужоны
      Ответить
      • Да оидн фиг при паблише порежатся и код сожмётся.
        Ответить
        • Так это еще и автодокументирование. Нафига такое длинное описание в доументации, причем с указанием - я беру. кладу, ищу, прохожу? Если будет читать заказчик - ему это не интересно. Если собрат по проекту - перед ним код.
          Ответить
          • Не, больше самим, чтобы не забыть.
            А то мало-ли, что может произойти в таком говорящем за себя событии как "OnButtonClick" >:)

            Код для клиента на .NET'е, а там - Sandcastle в помощь.
            Ответить
    • А вот скажите мне, какой уебан первым придумал использовать XML для докблоков (да-да, я знаю что этот код писал на самом деле шарпер) и ставить по три слэша? Самый тупой депутат госдумы и то поймет, что их все равно надо будет парсить и выдирать из документа, так почему не облегчить задачу для девелопера? Не забывайте, блядь, страдать.
      Ответить
      • каким образом облегчить?
        Ответить
        • Кегдан, с тех пор как ты поставил эту тыкву вместо аватары, ты задаешь вопросы на уровне первокурсника колледжа. Можно было не ебашить xml, не нужно на каждую строчку ебашить по три слэша. Посмотри doxygen какой что ли.
          Ответить
          • Лол. А то что в Doxygen один гуй нужно комменты специальным образом оформлять - это ерунда. Нам же главное не 3 слэша. вот строка комента с * - нормально. с ! - нормально, \defgroup - нормально, а 3 слэша - ай-ай-ай!
            Ответить
      • Для тех кто не знает: в шарпе при наборе трёх слешей xml-разметка генерируется автоматически, остаётся только вписать в неё текст.
        Ответить
        • Не в шарпе, а в VS.
          Ответить
          • Это подразумевалось :)
            Хотя.. А что, Моно так не умеет?
            Ответить
            • ХЗ что там за IDE. Не пробовал. SharpDevoloper не умеет. Не умел. Давно его не видел, говорят хорошо развивается
              Ответить
        • В шарпе-то да, XMLи автогенерируемые, но вот в JS, даже 12 (VS 2013) студия не научилась генерить summary.
          А самом VS IDE для ES'а, есть следующие интересные конструкции:
          /// <reference path="Utils.js" /> → Подключить для IntelliSence'а внешний js файл
          
          ToggleUploadButton: function () {
          	/// <summary>Отобразить или спрятать кнопку загрузки</summary> → Отобразить в IntelliSence'е описание подключаемого метода
          
          MapBase = function (element, mapOptions) {
          	/// <summary>Просмотр карт</summary>
          	/// <param name='element'>Контейнер для отображения карты</param>
          	/// <param name='mapOptions' type='MapOptions'>Настройки создания карты</param> → Дать понять IntelliSence'у, какого типа входящий параметр.


          Но честно говоря, студийная IDE для написания ES кода - говно... ... Или ES - говно. Вообщем, без говна там точно не обошлось.
          Ответить
          • ES - это что?
            Enterprise Shit?

            мои могут и похоливарить, что им удобнее для js - студия 13 или идея 13
            Ответить
            • > ES - это что?

              ECMA Script ?
              Ответить
            • >ES - это что?
              ECMA-262
              https://ru.wikipedia.org/wiki/EcmaScript
              >мои могут и похоливарить, что им удобнее для js - студия 13 или идея 13
              Я ща попробовал идею 13. Вроде удобно, но не привычно, что после ввода точки, функции и переменные объекта не показываются. И какую-то ересь на Ctrl+пробел выдаёт.

              Хотя, я идею пару недель назад только поставил. Пока даже мир не поприветствовал.
              Ответить
          • Для ссылки надо просто перетащить соответствующий файл из Solution Explorer'а.
            А summary не пользовался, возможно, тоже как-то делается.
            Ответить
            • Я о таком финте не знал.

              Но только он его в любое место файла добавляет, а не в шапку.
              Ну и такой фишкой удобно пользоваться, если установлена синхронизация "Solution Explorer"'а и активного документа.
              Ну и для любителей гонять мышь. ;)
              Ответить
      • 1) Даже неведующий человек поймёт что за параметр используется, а не будет додумывать по волшебным символам
        2) На XML легко накладывается XSLT преобразование, что обеспечивает лёгкую расширяемость того-же IntelliSence'а

        Но, к сожалению, M$ услышал крики ненавистников XML'я и теперь, в ASP.NET vNext, конфиги будут храниться в формате JSO... x_x
        Ответить
        • > На XML легко накладывается XSLT
          Но файл с исходным кодом - не XML. Если я правильно понимаю, его всё равно же придётся парсить и вырезать все "/// питушня". А значит можно распарсить питушню в любом формате и свести к XML без заметных потерь производительности.
          Ответить
          • Че там парсить то? убрал лишние строки, из остальных отрезал 3 слеша - готов кишькильбюрюм XML. Ну и шапку набросить
            Ответить
            • Я как раз про подобную обработку.
              Кстати, реализовав более простой формат, можно закодить эффективное преобразование исходников в XmlDocument и получить ПЕРФОМАНС.
              Ответить
              • Перфоманс автодокументирования?) Да всем пох
                Ответить
      • показать все, что скрытоvanished
        Ответить
        • Не, я не гость.
          Ну и к xml/json как-то пофиг, в зависимости от решаемой проблемы.
          Ответить
    • Попробую прокомментировать исходный ГК.
      Может я такой привиредливый или недостаточно корректно описал проблему.

      Есть контейнер, куда пользователь кидает файлы на закачку.
      Есть кнопка "Upload", по нажатию на которую, всё содержимое контейнера (ul->li) закачивается на сервер.

      Соответственно, пока файлов для закачки нет, то кнопка "Upload" помечена как "disabled"="disabled".
      Как только появляются файлы для закачки, кнопка "Upload" становится активной. И при нажатии на неё должна происходить загрузка файлов на сервер.

      Соответственно, автор кода, решил в OnButtonClick проверять не наличие файлов для закачки, а проверять, доступна-ли для нажатия кнопка или не доступна (Допустим, сработал OnSubmit на форме или кто-то вызвал метод через консоль).

      Получается, следующий нехороший сценарий:
      Дизайнер решил поменять стиль на кнопке и вместо "disabled"="disabled" использовать, скажем, отдельный класс или "style="display:none".
      Последствие: Код в OnButtonClick будет всегда обходить проверку кнопки стороной. Т.к. она больше никогда не будет disabled.

      Решение:
      Вместо проверки на доступность кнопки, проверить наличие файлов для закачки.
      Ответить
      • Nesговно классик - проверка следствия, а не причины. Кому то просто нравиться рефакторить
        Ответить
        • Не, оказалось что некоторым браузерам пофигу на "disabled"="disabled".
          И не отрабатывала клиентская проверка на наличие файлов. Из-за этого, сервер генерил ошибку об отсутсвии файлов.

          Т.к. контора у нас не вендорная, то в некоторых местах, код даже с отключённым JS должен работать.
          Ответить

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