Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Загрузчик фалов в 30 строк (dd+multi+del) (https://javascript.ru/forum/project/42751-zagruzchik-falov-v-30-strok-dd-multi-del.html)

Gozar 08.11.2013 00:48

Загрузчик фалов в 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);
    });

nerv_ 08.11.2013 00:55

Цитата:

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

нерв считает твое решение:
- не гибким
- неудобным в плане кастомизации, коллбеков и т.п.
- частично обсфуцированным

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

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

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

Если уж зашла речь, мое решение. Кстати, тоже не оч сахарное )

Gozar 08.11.2013 01:06

Цитата:

Сообщение от nerv_
- частично обсфуцированным

это сахар
$ в jquery тоже сахар.

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

Gvozd 09.11.2013 20:20

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

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

Gozar 09.11.2013 20:47

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

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

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

Цитата:

Сообщение от Gvozd
Задавать короткие, нечитаемые, контекстно-зависимые, только вам понятные(пока вы пишите код) алиасы для стандартных объектов

По твоим словам все разработчики всех либ тупые люди, раз делают именно это.

Gozar 09.11.2013 20:53

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

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

Цитата:

Сообщение от Gvozd
Если вырвать этот код из контекста, то совершенно непонятно что это за объекты

Тогда у меня для тебя плохие новости ... Я тебе по первой строке скажу что FormData отправляет форму на сервер. Свойство у нее такое! на сервер отправлять данные.

nerv_ 09.11.2013 23:51

Цитата:

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

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

и я, и я, и я того же мнения :)
Цитата:

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

а во время написания другого скрипта, придет другой стиль :)

Цитата:

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

не знаю почему тебе все время мерещится, что тебя кто-то в чем то убеждает. Люди просто высказывают свое мнение :)

Кстати, тему ты создал не в том разделе. Надо было в оффтопе создавать.

Gozar 10.11.2013 03:25

Цитата:

Сообщение от nerv_
Кстати, тему ты создал не в том разделе.

Сей скрипт кому надо пригодится может!

Цитата:

Сообщение от nerv_
Люди просто высказывают свое мнение

Как и другие имею мнение я. ;)

Gozar 10.11.2013 12:09

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

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

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

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

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

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

:)

Gvozd 11.11.2013 00:27

Цитата:

Сообщение от 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.

Честно - не было.


Часовой пояс GMT +3, время: 17:07.