Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Идея: Табличный процессор с JS (https://javascript.ru/forum/offtopic/24790-ideya-tablichnyjj-processor-s-js.html)

FINoM 14.01.2012 04:06

Идея: Табличный процессор с JS
 
Активно пользуюсь Гуглодоксом, в том числе таблицами (их вариант Экселя). Возникла идея, за которую я вряд ли когда-то возьмусь из-за отсутствия времени. Поэтому предлагаю, кому хочется что-то сделать, но не знает что, реализовать следующую вещь.

Таблицы мне кажутся очень негибкими в плане формул. Сегодня пытался вывести день недели и получилось вот что:
Код:

=IF(WEEKDAY(A2;2)=1; "пн"; IF(WEEKDAY(A2;2)=2; "вт"; IF(WEEKDAY(A2;2)=3; "ср"; IF(WEEKDAY(A2;2)=4; "чт";
IF(WEEKDAY(A2;2)=5; "пт"; IF(WEEKDAY(A2;2)=6; "сб"; IF(WEEKDAY(A2;2)=7; "вс")))))))

В конце это не жабросмайлик (не смое страшное, что может быть), это конец формулы. Кроме этого, возникает еще ряд задач, совершенно неосуществимых (по крайней мере, в рамках моих знаний).
Предлагаю сделать свой табличный препроцессор, где формулы будут обычными JS выражениями, так как JS знают очень многие, а учить быдлоформулы не всем в кайф.

Каждая ячейка имеет свой адрес вида A[1] (может A1, то есть как обычная переменная?). Диапазоны можно задавать в таком виде: range(A[1], C[54]), то есть здесь каждый элемент массива имеет информацию о своём адресе, позволяя функции range создавать диапазон.

Встроенный функций тут может быть очень мало, весь остальной функционал может быть реализован встроенными средствами JS.

Вот пара гипотетических примеров, тупо вписываемых в нужную ячейку:
1. =range(A[1], C[54]).sum();
2. =function(){
       switch(todayWeekDay()) {// допустим weekday определена где-то в программе,
                               // в виде модуля к теблицам, чтоб не писать каждый раз new Date().getDay()
         case 1: return "Понедельник";
         ......
         case 7: return "Воскресенье";
   }
3. Какая-то сторонняя функция (модуль)
   table.range(A[1], C[54]).forEach(function( cell ){
         if( cell == 4 ) {
                   cell.node.style.color = 'red'; // node — ссылка на ячейку в таблице
         }
   });


В общем, я не знаю, предлагаю ли я что-то свежее и интересное, просто такой вещью сам бы пользовался, если бы она была где-то в облаке (например, использовала Google Fusion Tables, к которому я не ровно дышу).

FINoM 14.01.2012 04:16

В яваскрипте, тем более, все числа, строки и прочее являются объектами:
//создание объекта одной ячейки:
var node = querySelector( 'table tr:nth-child($col) td:nth-child($row)'.replace( '$col', col ).replace( '$row', row ) );
var cell = new Number( value );
cell.node = node;
cell.address = [col, row];

trikadin 14.01.2012 04:24

Цитата:

Сообщение от FINoM
Предлагаю сделать свой табличный препроцессор, где формулы будут обычными JS выражениями, так как JS знают очень многие, а учить быдлоформулы не всем в кайф.

Тут либо охуевать от написания своего интерпретатора JS, либо охуевать от проблем с безопасностью. Извините.

А быдлоформулы скопированы из excel'я, и понятны большинству бухгалтерья, которое нифига не знает JS.

FINoM 14.01.2012 04:27

Цитата:

Сообщение от trikadin
А быдлоформулы скопированы из excel'я, и понятны большинству бухгалтерья, которое нифига не знает JS.

Вопрос в гибкости. Мне формулы кажутся крайне не гибкими.
Цитата:

Сообщение от trikadin
Тут либо охуевать от написания своего интерпретатора JS, либо охуевать от проблем с безопасностью. Извините.

Эм?
Для убирания проблем, связанных с кукисами и прочим, можно каждый документ вешать на отдельный домен.

trikadin 14.01.2012 04:30

Цитата:

Сообщение от FINoM
Для убирания проблем, связанных с кукисами и прочим, можно каждый документ вешать на отдельный домен.

Офигеть идея.

Цитата:

Сообщение от FINoM
Вопрос в гибкости. Мне формулы кажутся крайне не гибкими.

А что гибкого в js? Ну, если нужны расчёты на уровне power(a1, b2) - то тут ничего не меняется, будет только Math.power(a1, b2).

FINoM 14.01.2012 04:37

trikadin,
1. Ну, например, я хочу обратиться к ячейке, строка которой указана в другой ячейке:
B[A[5]] — как это сделать в Эксэле?
2. Условное форматирование, которое сильно хромает в современных процессорах
3. Тот же самый аякс для взятия некоторых данных из апи (мне, например, нужно постоянно вручную брать курсы НБУ за разные дни). В тех же GFT очень много самой разной информации.

Gvozd 14.01.2012 04:38

Цитата:

Сообщение от trikadin
Офигеть идея.

Идея странная, но ничего криминального в ней не вижу.
Что криминального вы увидели?

trikadin 14.01.2012 05:16

Цитата:

Сообщение от Gvozd
Идея странная, но ничего криминального в ней не вижу.
Что криминального вы увидели?

Может, я что-то неправильно понял, но, допустим, сервисом пользуется пару тысяч человек. У каждого открыто 2-3 документа.

Эм... Пол десятка тысяч доменов?

trikadin 14.01.2012 05:19

FINoM, ну это на маленькую команду проект тогда получается.

elf2002 14.01.2012 05:25

Ничего не понял, наверное потому что с таблицами в JS почти не работал.
Но вот если бы еще и сортировка столбиков, то било би неплохо.

FINoM 14.01.2012 05:39

Цитата:

Сообщение от trikadin
FINoM, ну это на маленькую команду проект тогда получается.

Такие проекты делятся на этапы. После первого этапа (разработка самого процессора) проектом уже можно пользоваться самому, ну или выложить в опен сорц.
Цитата:

Сообщение от trikadin
Эм... Пол десятка тысяч доменов?

Эм, типа много?

trikadin 14.01.2012 05:55

Цитата:

Сообщение от FINoM
Эм, типа много?

Да.

FINoM 14.01.2012 07:02

Цитата:

Сообщение от trikadin
Да.

А сколько не много? Или ты просто не в курсе, что домены можно генерировать автоматически.

trikadin 14.01.2012 07:43

Цитата:

Сообщение от FINoM
Или ты просто не в курсе, что домены можно генерировать автоматически.

В курсе. Если это вопрос, конечно. Но просто создавать отдельный домен на каждый документ... Как-то мне претит эта идея)

FINoM 14.01.2012 07:52

Цитата:

Сообщение от trikadin
Но просто создавать отдельный домен на каждый документ...

Ну что не так?
fd898ff8bc.docs.example.com вместо docs.example.com/fd898ff8bc

trikadin 14.01.2012 08:44

Цитата:

Сообщение от FINoM
Ну что не так?
fd898ff8bc.docs.example.com вместо docs.example.com/fd898ff8bc

Да на здоровье) Всё равное не я это реализовывать буду...

Kolyaj 14.01.2012 10:15

А как отдельный домен для каждого документа помешает спереть куки? Они на этом отдельном домене должны быть для авторизации на этом домене.

Gvozd 14.01.2012 14:08

Kolyaj,
Это да.
Я бы поместил на корневом домене скрипт, который бы выдавал куки для конкретного поддомена(для разных поддоменов авторизационные куки - разные, и выдаются центральным доменом)

Ну, то есть с поддомена идет запрос "авторизован ли я?" на центральный домен. Просто запрос, без клиентской JS-обработки
В ответ центральный домен выдает куку для конкретного поддомена, сообразуясь со своей мастер-кукой.

Как-то так

Kolyaj 14.01.2012 18:12

Цитата:

Сообщение от Gvozd
Ну, то есть с поддомена идет запрос "авторизован ли я?" на центральный домен. Просто запрос, без клиентской JS-обработки
В ответ центральный домен выдает куку для конкретного поддомена, сообразуясь со своей мастер-кукой.

Центральный (как и любой другой) домен может выдать куку только на себя.

Gvozd 14.01.2012 18:24

Цитата:

Сообщение от Kolyaj
Центральный (как и любой другой) домен может выдать куку только на себя.

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

Kolyaj 14.01.2012 18:30

Да, если поддомены делать на каком-нибудь другом домене, с авторизацией прокатит.
Но всё равно схема ненадёжная, обязательно где-нибудь взорвётся.

GuardCat 14.01.2012 21:07

FINoM, мне кажется, это у вас от нелюбви к Excel. Например, первая формула может быть заменена экселевской формулой ВЫБОР. Для обращения к ячейке по её адресу из строки в другой ячейке, используется ДВССЫЛ. Привожу пример для русифицированного экселя, поскольку только таким пользовался. Вообще, я привык к тому, что если чего-то сделать не получается в Excel, нужно луркать в 90% случаев.

elf2002 14.01.2012 21:35

Ничо не взорвется.
Взломать пожно и ПК

FINoM 14.01.2012 22:32

GuardCat, экселем я не пользуюсь, пользуюсь гуглодоксом. Именно облачной версии широкофункционального табличного процессора мне не хватает.

kobezzza 14.01.2012 23:15

А ты не пробовал MS Office Web Apps? По моему оч крутая штука.

FINoM 15.01.2012 00:19

Цитата:

Сообщение от kobezzza
А ты не пробовал MS Office Web Apps?

Ой, у меня всё, что делается майкрософтом (кроме некоторых ОС) ассоциируется с говном. Но попробовать нужно, вдруг облачные сервисы у них адекватные.

Kolyaj 15.01.2012 00:22

Цитата:

Сообщение от FINoM
Ой, у меня всё, что делается майкрософтом (кроме некоторых ОС) ассоциируется с говном.

А есть примеры говна (кроме некоторых ОС)?

trikadin 15.01.2012 00:23

Цитата:

Сообщение от FINoM
Ой, у меня всё, что делается майкрософтом (кроме некоторых ОС) ассоциируется с говном. Но попробовать нужно, вдруг облачные сервисы у них адекватные.

Зря ты так про MS, зря-зря-зря...

А если без шуток - то правда зря. Есть риск появления холивара.

trikadin 15.01.2012 00:23

Цитата:

Сообщение от Kolyaj
А есть примеры говна (кроме некоторых ОС)?

Ну вот, не успел я дописать, как он уже начался))

Kolyaj 15.01.2012 00:24

Мне всего лишь интересно. Прикладных программ у МС не так много.

FINoM 15.01.2012 00:27

Цитата:

Сообщение от Kolyaj
А есть примеры говна (кроме некоторых ОС)?

Офис, браузер, аутлук, простейшие программы, вшитые в ос (тот же архиватор), медиа плеер...

Gozar 15.01.2012 00:31

Аутлук не плохой, он просто ДРУГОЙ, ака фильм про чужих, там был один без глаз, но видит.

Kolyaj 15.01.2012 00:32

Цитата:

Сообщение от FINoM
Офис

Почему он говно? ОпенОфис, например, гораздо большее говно по внешнему виду, а по возможностям даже близко не стоит. А больше альтернатив и нет.

Цитата:

Сообщение от FINoM
браузер

Я бы назвал говном только IE7 и IE8. IE9 уже достойный браузер, а IE6 был лучшим на момент создания. То, что он прожил 10 лет, это только подтверждает.

Цитата:

Сообщение от FINoM
аутлук

Тут не могу судить.


Цитата:

Сообщение от FINoM
простейшие программы, вшитые в ос (тот же архиватор)

А с архиватором-то что не так?


Цитата:

Сообщение от FINoM
медиа плеер

Возможно, тоже не пользуюсь почти.

trikadin 15.01.2012 00:37

Цитата:

Сообщение от Kolyaj
Почему он говно? ОпенОфис, например, гораздо большее говно по внешнему виду, а по возможностям даже близко не стоит. А больше альтернатив и нет.

+1.

Цитата:

Сообщение от Kolyaj
А с архиватором-то что не так?

Имхо, под виндой никто другим и не пользуется.

Цитата:

Сообщение от Kolyaj
Возможно, тоже не пользуюсь почти.

Вот тут соглашусь, и правда фигня...

Gozar 15.01.2012 00:39

Цитата:

Сообщение от Kolyaj (Сообщение 150675)
ОпенОфис, например, гораздо большее говно по внешнему виду, а по возможностям даже близко не стоит.

А чем ОпенОфис провинился?

Я считаю что ОпенОфис и ВинОфис97 пик необходимого функционала, дальше пошло по кругу(смена дизайна -> залатывание дыр). Причем пошло в обоих программах.

Gozar 15.01.2012 00:44

Ну конечно рисование сайтов в Ворде(В XP вроде ввели) нужное и важное повседневное занятие среднестатистического пользователя, как и пасьянс, но мне кажется не столь необходимое в Офисной программе.

FINoM 15.01.2012 00:46

Цитата:

Сообщение от Kolyaj
Почему он говно? ОпенОфис, например, гораздо большее говно по внешнему виду, а по возможностям даже близко не стоит. А больше альтернатив и нет.

Глючит и ломает верстку при любом удачном случае.
Цитата:

Сообщение от Kolyaj
IE9 уже достойный браузер

Да, по сравнению со старыми IE он хорош, но по сравнению с хромом или новыми ФФ, он ужасен.
Цитата:

Сообщение от Kolyaj
А с архиватором-то что не так?

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

melky 15.01.2012 00:49

Цитата:

Сообщение от Gozar (Сообщение 150679)
А чем ОпенОфис провинился?

а KOffice чем? всё нормально открывает, при наличии kde ещё и вид "ок".

PS косяк видел только один - с размером шрифта в расписании :) но для меня это не было критичным - расписание давно было в pdf... для просмотра на айфоне.

trikadin 15.01.2012 01:07

Цитата:

Сообщение от FINoM
В первую очередь, нельзя запустить файл, использующий другие файлы, прямо из архива. Нужно тыкать кнопочки в каком-то блевотном диалоговом окне, чтоб сперва разархивировать куда-то.

Хм. Я что-то не знаю архиваторов, которые позволяют. А вообще - кликнул правой клавишей по архиву - выбрал "Разархивировать сюда" (ну, или как там пишут). И счастлив.
Да здравствует срач!!!

FINoM 15.01.2012 01:36

Цитата:

Сообщение от trikadin
Я что-то не знаю архиваторов, которые позволяют.

Win Rar, например.


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