Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Обсуждений тред (https://javascript.ru/forum/offtopic/47364-obsuzhdenijj-tred.html)

nerv_ 14.08.2016 14:19

Возник вопрос по работе с формами на стороне сервера (koa/express). Требуется програмный механизм создания, валидации, рендеринга формы. Приведу пример из php. Там есть такая штука, как Zend_Form, которая все это умеет. Выглядит как-то так

$form = $this->getBaseForm();
$form
  ->addElement('text', 'title', 
    array(
      'label' => 'Название',
      'required' => true
    )
  )
  ->addElement('textarea', 'text', 
    array(
      'label' => 'Текст',
      'cols' => 65,
      'rows' => 2
    )
  )->addElement('file', 'image', 
    array(
      'label' => 'Изображение 960x340'
    )
  )
  ->addElement('text', 'link', 
    array(
      'label' => 'Ссылка для перехода'
    )
  )->addElement('submit', 'submit', 
    array(
      'label' => 'Сохранить'
    )
  );


в шаблоне
Код:

{$form}
Есть какие-нибудь подобные модули для koa/express? Можно отдельные, но, желательно, чтобы они хорошо интегрировались между собой

destus 14.08.2016 14:37

nerv_,
Сам не использовал, но выглядит симпатично https://github.com/caolan/forms

nerv_ 14.08.2016 16:27

destus, спасибо, суть ты уловил верно.

Цитата:

Сообщение от destus
Сам не использовал, но выглядит симпатично https://github.com/caolan/forms

Я бы не сказал, что это выглядит симпатично. Об этом даже сам автор пишет:
Цитата:

This code is still in its infancy
но, похоже, альтернатив нет и это грустно :(

Скажу так: первый, кто запилит подобный пакет, будет молодец и соберет мнгого лайков на гитхабе.

---

UPD
В зенде на мой взгляд достаточно хорошее продуманное апи, можно писать на его основе https://framework.zend.com/manual/1....uickstart.html

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

trikadin 15.08.2016 16:28

nerv_

1) Возьми json-схему, на стороне сервера валидируй ею данные, которые пришли, на стороне клиента -- возьми генератор формы по ней (тысячи их, и под ангуляр, и под реакт, и под jquery, и вообще под что угодно).
2) Совмести.
3) ??????
4) PROFIT!

nerv_ 15.08.2016 22:26

Цитата:

Сообщение от trikadin
1) Возьми json-схему, на стороне сервера валидируй ею данные, которые пришли, на стороне клиента -- возьми генератор формы по ней (тысячи их, и под ангуляр, и под реакт, и под jquery, и вообще под что угодно).

1) я тебе говорю, что мне нужно разметку на сервере генерировать
2) не вижу тысяч
:)

UPD
После долгих поисков по npm нашел несколько:
https://www.npmjs.com/package/jsonschema2html
https://www.npmjs.com/package/jsonschema2form-nested
https://www.npmjs.com/package/json-editor
https://www.npmjs.com/package/iso-form
https://github.com/brutusin/json-forms

trikadin 15.08.2016 23:09

Цитата:

Сообщение от nerv_
я тебе говорю, что мне нужно разметку на сервере генерировать

Т. е. клиентской логики у тебя там нет вообще? Никак данные на клиенте не валидируешь и никакие кастомные поля ввода не добавляешь?

Цитата:

Сообщение от nerv_
не вижу тысяч

112 тыс. результатов :)

nerv_ 16.08.2016 18:47

Цитата:

Сообщение от trikadin
Т. е. клиентской логики у тебя там нет вообще? Никак данные на клиенте не валидируешь и никакие кастомные поля ввода не добавляешь?

В данном случае практически нет

Цитата:

Сообщение от trikadin
112 тыс. результатов

из которых 5 полезных, что составляет
alert(5/1120);

у меня, кстати, написано 170k результатов

trikadin 16.08.2016 23:32

Цитата:

Сообщение от nerv_
В данном случае практически нет

Сделай серверную рендерилку форм по JSON-схеме на Snakeskin :D Сообщество тебе спасибо скажет.

kobezzza 17.08.2016 00:11

Цитата:

Сделай серверную рендерилку форм по JSON-схеме на Snakeskin
Дык, ты же вроде писал, что у себя в проекте уже такое написал, не?)

trikadin 17.08.2016 02:07

Цитата:

Сообщение от kobezzza
Дык, ты же вроде писал, что у себя в проекте уже такое написал, не?)

У меня на Vue, сорян) И дальше прототипа оно так и не ушло...

cyber 19.08.2016 15:41

Кто то пробовал сделать сохранения файла с сервера через js с помощью потока? Такое вообще реально?
Т.е получил chunk на клиенте, сохранил на диск, потом получил еще один дописал до предущего и т.д пока весь файл не сохранит. Т.е по сути как в ноде только в браузере

kobezzza 19.08.2016 15:47

Цитата:

Сообщение от cyber (Сообщение 426129)
Кто то пробовал сделать сохранения файла с сервера через js с помощью потока? Такое вообще реально?
Т.е получил chunk на клиенте, сохранил на диск, потом получил еще один дописал до предущего и т.д пока весь файл не сохранит. Т.е по сути как в ноде только в браузере

А в чём проблема? Сервер шлёт тебе чанки, ты их соединяешь, и потом сейвишь и всё. Если файл не текстовый, то отправляй его как ArrayBuffer например.

cyber 19.08.2016 15:51

Цитата:

Сообщение от kobezzza
А в чём проблема? Сервер шлёт тебе чанки, ты их соединяешь, и потом сейвишь и всё. Если файл не текстовый, то отправляй его как ArrayBuffer например.

В размере файла проблема, файл может быть 20-40 мб и я не хочу насиловать браузер. Иногда файлы могут доходить до 100 метров, я бы лично возненавидел бы того кто мне бы загрузил 100 метров в оперативку, только что бы скачать файл

cyber 22.08.2016 12:38

Так и не нашел как сделать, то о чем писал выше, походу нельзя сделать что то такое

trikadin 22.08.2016 15:36

Цитата:

Сообщение от cyber
Так и не нашел как сделать, то о чем писал выше, походу нельзя сделать что то такое

Странная ситуация, я был уверен, что подобное (правда, с хаками, ты бы не смог перенаправить поток тупо на fs, пришлось бы с бубном поплясать) можно сделать на File API, но чёт быстрое гугление для "вспомнить" выдаёт результаты, которые нигде не поддерживаются -- ощущение, что такая функциональность была, а потом её выпилили. Не нашёл даже, как в песочницу записать.

cyber 22.08.2016 16:42

trikadin, я и спрашиваю потому что не нашел сам, еще проблема с file api что там прогресс скачивания не показывает(либо я криворукий)

l-liava-l 25.08.2016 11:53

Парни, подскажите софтину или модуль для ноды, как jsbeautifiler, но рекурсивно во всех папках.

bes 25.08.2016 22:26

Цитата:

Сообщение от l-liava-l
Парни, подскажите софтину или модуль для ноды, как jsbeautifiler, но рекурсивно во всех папках.

https://www.npmjs.com/package/grunt-jsbeautifier
файлы можно задать по маске

l-liava-l 26.08.2016 00:10

Благодарю

l-liava-l 09.09.2016 21:53

Localbitcoins заблокирован роскомнадзором!

Новость: http://forklog.com/v-rossii-zablokir...localbitcoins/
А ботов так просто не заблокируешь: https://bitcointalk.org/index.php?topic=1344373.0

bes 13.09.2016 20:07

возможно ли остановить выполнение команды (например, запущенный цикл) в консоли google chrome (стандартные ctrl+c, ctrl+z не помогают)?

cyber 14.09.2016 16:14

kobezzza, те проекты над которыми ты работаешь можно как то посмотреть?)
Просто интересно на сколько быстро они рендерятся, грузятся)

trikadin 14.09.2016 16:37

Цитата:

Сообщение от cyber
kobezzza, те проекты над которыми ты работаешь можно как то посмотреть?)
Просто интересно на сколько быстро они рендерятся, грузятся)

Бгггг. Там сурово всё) Тебе придётся разбирать адскую смесь высокоуровневого снейкскина, js, бэм, vue, стилуса и ещё кучи всего. Мозги опухнут, но левелапнешься прямо во время чтения.

И вообще, приходи ко мне работать, тоже прокачаешься.

kobezzza 14.09.2016 16:39

Цитата:

Сообщение от cyber (Сообщение 428711)
kobezzza, те проекты над которыми ты работаешь можно как то посмотреть?)
Просто интересно на сколько быстро они рендерятся, грузятся)

Я ж проприетарщик :) В октябре будет первый релиз проекта, который пишу, тогда скину) Но вообще скорость загрузки у меня не очень высокая, т.е. обыкновенная и каких то супер оптимизаций я не применяю. Главное над чем я заморачиваюсь - это отсутствие фризов (для меня это заморозка окна более чем на 50мс) и прогрессивность UI, чтобы пользователь мог начать работать до окончания загрузки.

Сейчас замерил: полная загрузка страницы где то пол секунды / секунда на быстром инете;
Первичный рендер: 130-200мс (время до полной загрузки, но после которого уже можно работать).

Цитата:

Сообщение от trikadin (Сообщение 428720)
Бгггг. Там сурово всё) Тебе придётся разбирать адскую смесь высокоуровневого снейкскина, js, бэм, vue, стилуса и ещё кучи всего. Мозги опухнут, но левелапнешься прямо во время чтения.

Ахаха)

Цитата:

И вообще, приходи ко мне работать, тоже прокачаешься.
А потом все ко мне :)

cyber 15.09.2016 09:33

Цитата:

Сообщение от trikadin
И вообще, приходи ко мне работать, тоже прокачаешься.

Идти далековато :)
А вообще я бы с удовольствием свалил бы с этой работы, но пока нет возможности поменять работу)

cyber 15.09.2016 11:53

достаточно ли будет
Math.random() * Date.now();
для генерации уникального ключа по стороне клиента ?

trikadin 16.09.2016 19:13

Цитата:

Сообщение от cyber
для генерации уникального ключа по стороне клиента ?

Насколько уникальным он должен быть? В рамках текущей страницы -- более-менее. В рамках хотя бы приложения -- нет.

Vlasenko Fedor 16.09.2016 20:50

Цитата:

Сообщение от trikadin
В рамках хотя бы приложения -- нет

это как на клиенте есть storage пишите генерированные ключи туда и сверяйте с ними уникальность

cyber 17.09.2016 13:05

Цитата:

Сообщение от trikadin
В рамках текущей страницы -- более-менее

мне нужны id для элементов на странице, что бы в мапе держать ссылку на элемент и id в пределах текущей страницы

Vlasenko Fedor 17.09.2016 16:44

Цитата:

Сообщение от cyber
мне нужны id для элементов на странице

может XPath следует рассмотреть иначе говорит, что изобретаем новый велосипед

cyber 18.09.2016 11:57

Poznakomlus, не совсем понял к чему тут XPath ?)

davids 18.09.2016 18:53

..

Erolast 19.09.2016 09:48

cyber, а WeakMap не устраивают?

trikadin 19.09.2016 16:09

cyber, не парься, возьми uuid.

cyber 19.09.2016 17:08

trikadin, Erolast, у меня есть атрибут на дом елементе с id, например
<div>
<ul>
<li data-id="1"></li>
<li data-id="2"></li>
</ul>
</div>

и обработчик на клик которые вeсит на div например и мапа
div.onclick = function ({target}) {
// проверки и т.д
   let functionHandler = weekMap.get(target.dataset.id);
  functionHandler();
  }

а тащить либу ради этого как то не асй что ли)
П.с держать ссылку на DOM элемент не вариант

Vlasenko Fedor 19.09.2016 17:25

Цитата:

Сообщение от cyber
Poznakomlus, не совсем понял к чему тут XPath ?)

Цитата:

Сообщение от Poznakomlus
изобретаем новый велосипед

cyber, первым делом правильно написать вопрос, чтоб всем понятно было
div.onclick = function (e) {
    var el = e ? e.target : window.event.srcElement;
    while (el != this) {
        if (/*условие*/) {
            //работаем
            break;
        }
        el = el.parentNode || el.parentElement;
    }
};

cyber 19.09.2016 19:55

Poznakomlus, я знаю что так можно, но в даном случае не прокатит из того что добавляю костыли в уже написанный код)

cyber 19.09.2016 20:08

короче можно только по id и я могу генерировать эти id ))

trikadin 20.09.2016 17:32

Цитата:

Сообщение от cyber
короче можно только по id и я могу генерировать эти id ))

Ну и генерируй их uuid'ом, нафиг ты велосипеды придумываешь. Либа эта меньше килобайта весит. А ещё есть вот такая генерация uuid'а.

function b(a){return a?(a^Math.random()*16>>a/4).toString(16):([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,b)}

alert(b());

cyber 20.09.2016 22:19

trikadin, спасибо)
МОжешь расшифровать смысел этого кода?
a^Math.random()*16>>a/4
нафига нам смещение битов?


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