Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.11.2013, 00:48
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Загрузчик фалов в 30 строк (dd+multi+del)
http://learn.javascript.ru/play/qXwXEb или http://jsfiddle.net/2HKCX/5/

В общем поспорили мы с nerv, можно ли написать нормальный загрузчик файлов в 30 строк, с drug&drop, % загрузки, удалением из списка выбранных файлов. В общем человеческий.

Я считаю, что я вполне себе справился, nerv насколько я понял считает что спор я проиграл и нужно использовать обязательно доп. либу аля ангуляр обязательно.

Небольшая оговорка: в первоначальном споре должна была еще быть загрузка для старых ослов в iframe. Я не стал ее пихать ибо не продакшн и по сути это к спору имеет мало отношения, но в случае чего можно выровнять листнеры и впихнуть костыль в код.

В общем-то зашли мы в конце концов в тупик, nerv считает код не читабельным, я думаю что 30 строк помещающихся на экране вполне можно считать. Также он считает что у меня обфускация, а я считаю что это удачный сахар.

Если я в чем-то ошибся - nerv поправь меня.

Что скажите? Я думаю такой код с небольшими допилками вполне себе может существовать.

Ну и сам код(js only):
var d=document, q='querySelector', on='addEventListener', f=d[q]('#f'), list=d[q]('#list'), upload=d[q]('#upload'), files=[], form = new FormData(), request = new XMLHttpRequest();

    function add (f) {
        for(var i = 0; i < f.length; i += 1) {
            files.push(f[i]);
            list.insertAdjacentHTML('beforeend', '<div class="item">'+f[i].name+', size: '+f[i].size+'<div class="del" data-i="'+i+'">delete</div></div>');
        }
    }
    f[on]('change', function(e) { add(e.target.files); f.value = ''; });
    list[on]('click', function (e) {
        var t = e.target;
        if (t.className == 'del') {
            files.splice(t.getAttribute('data-i'),1);
            t.parentNode.parentNode.removeChild(t.parentNode);
        }
    });
    function drag (e) {  e.stopPropagation();  e.preventDefault();}
    list[on]('dragenter', drag, false);
    list[on]('dragover', drag, false);
    list[on]('drop', function (e) { add(e.dataTransfer.files); f.value = ''; drag(e); }, false);

    upload[on]('click', function () {
        for(var i = 0; i < files.length; i += 1) {
            form.append("photo[]", files[i], files[i].name);
        }
        request.upload[on]('progress', function(e){ (e.lengthComputable) ? list.innerHTML = 'загружено: ' + Math.floor((e.loaded * 100) / e.total) + '%' : 'файлы загружены'}, false);
        request.onload = function () { list.innerHTML = 'файлы загружены'; }
        request.open("POST", "./post.php", true);
        request.send(form);
    });
Ответить с цитированием
  #2 (permalink)  
Старый 08.11.2013, 00:55
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Gozar
Я считаю, что я вполне себе справился, nerv насколько я понял считает что спор я проиграл и нужно использовать обязательно доп. либу аля ангуляр обязательно
нерв считает твое решение:
- не гибким
- неудобным в плане кастомизации, коллбеков и т.п.
- частично обсфуцированным

А какую либу кому использовать и использовать ли вообще личное дело каждого.

Моя позиция в том, что нормальный загрузчик 100+ строк минимум. И вряд ли он будет сахарный, если в нем будет только 100 строк

Т.е. твое решение придется постоянно исправлять / переписывать / допиливать, в моем только менять настройки.

Если уж зашла речь, мое решение. Кстати, тоже не оч сахарное )
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 08.11.2013 в 00:57.
Ответить с цитированием
  #3 (permalink)  
Старый 08.11.2013, 01:06
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от nerv_
- частично обсфуцированным
это сахар
$ в jquery тоже сахар.

По поводу гибкости я не очень понял. Но в общем мы зашли в тупик из-за того, кто что считает сахаром, а что обфускацией.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #4 (permalink)  
Старый 09.11.2013, 20:20
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

d[q], f[on], l - это обфускация а не сахар.
Если вырвать этот код из контекста, то совершенно непонятно что это за объекты, в отличии от общепринятых document.querySelector, someElement.addEventListener

Задавать короткие, нечитаемые, контекстно-зависимые, только вам понятные(пока вы пишите код) алиасы для стандартных объектов -усложняет поддержку и разработку проекта как другими людьми, так и вами через полгода, и потому не может быть сахаром
Ответить с цитированием
  #5 (permalink)  
Старый 09.11.2013, 20:47
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Gvozd,
Обфускация это запутывание кода, а здесь сокращения. По сути я мог не сокращать, но так код хорошо помещается в этот форум, в общем считай кроссмониторный.

d[q] надо заменить на q так будет сахарнее.
on - тоже международное навешивание событий.

Код написанный на спор, не идет ни в какую поддержку. (теперь идет см. ниже)

Сообщение от Gvozd
Задавать короткие, нечитаемые, контекстно-зависимые, только вам понятные(пока вы пишите код) алиасы для стандартных объектов
По твоим словам все разработчики всех либ тупые люди, раз делают именно это.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.

Последний раз редактировалось Gozar, 10.11.2013 в 12:52.
Ответить с цитированием
  #6 (permalink)  
Старый 09.11.2013, 20:53
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Ты наверное вместо id пишешь identificator.
Ты еще начни меня убеждать, что у тебя никогда небыло желания писать вместо document - d, а вместо document.querySelector - q, а вместо console.log - log.

Такой стиль кода пришел именно во время написания этого скрипта и я начинаю думать, что он не просто сокращения, а очень даже упрощает написание и чтение кода.

Сообщение от Gvozd
Если вырвать этот код из контекста, то совершенно непонятно что это за объекты
Тогда у меня для тебя плохие новости ... Я тебе по первой строке скажу что FormData отправляет форму на сервер. Свойство у нее такое! на сервер отправлять данные.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.

Последний раз редактировалось Gozar, 09.11.2013 в 21:04.
Ответить с цитированием
  #7 (permalink)  
Старый 09.11.2013, 23:51
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Gvozd
d[q], f[on], l - это обфускация а не сахар.
Если вырвать этот код из контекста, то совершенно непонятно что это за объекты, в отличии от общепринятых document.querySelector, someElement.addEventListener

Задавать короткие, нечитаемые, контекстно-зависимые, только вам понятные(пока вы пишите код) алиасы для стандартных объектов -усложняет поддержку и разработку проекта как другими людьми, так и вами через полгода, и потому не может быть сахаром
и я, и я, и я того же мнения
Сообщение от Gozar
Такой стиль кода пришел именно во время написания этого скрипта и я начинаю думать, что он не просто сокращения, а очень даже упрощает написание и чтение кода.
а во время написания другого скрипта, придет другой стиль

Сообщение от Gozar
Ты еще начни меня убеждать, что у тебя никогда небыло желания писать вместо document - d, а вместо document.querySelector - q, а вместо console.log - log.
не знаю почему тебе все время мерещится, что тебя кто-то в чем то убеждает. Люди просто высказывают свое мнение

Кстати, тему ты создал не в том разделе. Надо было в оффтопе создавать.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #8 (permalink)  
Старый 10.11.2013, 03:25
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от nerv_
Кстати, тему ты создал не в том разделе.
Сей скрипт кому надо пригодится может!

Сообщение от nerv_
Люди просто высказывают свое мнение
Как и другие имею мнение я.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #9 (permalink)  
Старый 10.11.2013, 12:09
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сидел я думал и понял мысль важную!

Я создал микробиблиотеку, только добавить еще сахара, сокращений и удобства.

И зваться сея библиотека будет corn.js

https://github.com/seolog/corn.js

Библиотека предназначена в первую очередь для работы в консоли. Но также может быть использована там, где нет смысла тянуть даже zepto.

Будет добавлен(возможно опционально) метод для работы с массивом(списком элементов) и возможно ajax. На этом пожалуй все!

__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.

Последний раз редактировалось Gozar, 10.11.2013 в 20:21.
Ответить с цитированием
  #10 (permalink)  
Старый 11.11.2013, 00:27
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Gozar
Обфускация это запутывание кода, а здесь сокращения. По сути я мог не сокращать, но так код хорошо помещается в этот форум, в общем считай кроссмониторный.
Так как кроме уже известных мне стандартных имен для стандартных объектов и методов, мне нужно держать в голове еще и ваши придуманные "сокращения"(а при анализе другой либы, они будут называться по другому), которым вы еще и не дали нормальных имен - это запутывание кода для всех, кроме вас.

Сообщение от Gozar
кроссмониторный
Шта?
Длина строки более 80 символов не может считаться кроссмониторной

Сообщение от Gozar
По твоим словам все разработчики всех либ тупые люди, раз делают именно это.
Не надо перевирать.
Я про умственные способности ничьи не говорил.
Более того подобная практика имеет свои некоторые плюсы, и область применения.
Я лишь утверждаю, что такие вещи усложняют разработку другим людям, и потому не может считаться сахаром.

Я работал с jQuery, и видел подобные алиасы.
И насколько я могу судить из структуры и ориентированности проекта, это сделано не для того чтобы разработчикам было "удобнее" писать код, а для того чтобы полученная либа лучше сжималась обфускатором, ведь core_hasOwn.call( cache, id) жмется лучше, чем вызов cache.hasOwnProperty( id )
Да, для обфускации такие алисы подходят хорошо, но никак не для удобства разработки

Сообщение от Gozar
Ты наверное вместо id пишешь identificator.
Не стоит перегибать палку в крайности, и додумывать за меня.
Нет, я вполне спокойно пишу id, потому что это вполне себе общеизвестный синоним слова identificator, о чем знают википедия, гугло-переводчик, и большинство разработчиков.
Сообщение от Gozar
Ты еще начни меня убеждать, что у тебя никогда небыло желания писать вместо document - d, а вместо document.querySelector - q, а вместо console.log - log.
Честно - не было.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск