Giter Site home page Giter Site logo

web-standards-ru / calendar Goto Github PK

View Code? Open in Web Editor NEW
441.0 59.0 217.0 1011 KB

Календарь событий по фронтенду

License: Creative Commons Attribution Share Alike 4.0 International

JavaScript 100.00%
web-standards events front-end calendar

calendar's Introduction

Веб-стандарты

Исходный код сайта «Веб-стандарты» для совместной разработки и поддержки проекта силами редакции ВСТ.

calendar's People

Contributors

allfayn avatar antipenko avatar ariarzer avatar avdeev avatar avol-v avatar baitun avatar bmsdave avatar dmorenogogoleva avatar flvingdutchman avatar fogrew avatar gucol avatar h4 avatar ilyalesik avatar kdkuru avatar lenavladi avatar lex111 avatar madmxg avatar mbelsky avatar mcslayer avatar mefody avatar neonick avatar obenjiro avatar shastel avatar smolnikov avatar tadatuta avatar tenebricosa avatar tsergeytovarov avatar vbagmut avatar volkova-annie avatar vostrik avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

calendar's Issues

Генерация JSON

Предлагаю уже сделать генерацию JSON — послужит отправной точкой для #16, да и может ещё пригодиться кому-нибудь возможность загрузить данные в удобном для обработки формате.

Формат мне видится такой (пишу в виде интерфейсов TypeScript, т. к. они гораздо более лаконичные, чем JSON Schema):

/**
 * Календарь
 */
interface Calendar
{
	/** Название календаря */
	title: string;
	/** Ссылка на сам календарь */
	url: string;
	/** Timestamp последнего изменения */
	modified: number;
	/** Массив событий */
	events: CalendarEvent[];
}

/**
 * Событие календаря
 */
interface CalendarEvent
{
	/** Идентификатор */
	uid: string;
	/** Название события */
	title: string;
	/** Ссылка на подробности */
	url: string;
	/** Город, страна проведения */
	city: string;
	/** Timestamp начала */
	timeStart: number;
	/** Timestamp окончания */
	timeEnd: number;
	/** На весь день? */
	allDay: boolean;
}

Например:

{
	"title": "Календарь событий по фронтенду",
	"url": "https://web-standards.ru/calendar.ics",
	"modified": 1503242160160,
	"events": [
		{
			"uid": "2016-11-24-moscowjs@https://web-standards.ru/",
			"title": "MoscowJS 34",
			"url": "https://moscowjs.timepad.ru/event/407854/",
			"city": "Москва, Россия",
			"timeStart": 1479945600000,
			"timeEnd": 1480032000000,
			"allDay": true
		},
		{
			"uid": "2017-08-17-kyivjs@https://web-standards.ru/",
			"title": "KyivJS",
			"url": "http://kyivjs.org/",
			"city": "Киев, Украина",
			"timeStart": 1502983800000,
			"timeEnd": 1502994600000,
			"allDay": false
		}
	]
}

Что можно обсудить:

  • title или name? Я использовать первое, т. к. здесь идёт описательный контекст, но в yml используется name, а в ics вообще summary,
  • Даты в виде UNIX timestamp — мне кажется это наименее проблемный для конвертации в правильную дату вариант. Проблемой может быть, что он не читаем человеком, но вроде JSON создаётся не для людей, а для программного чтения.
  • Для событий на целый день / несколько дней — писать финальную дату на 0 часов следующего дня (в примере так), или на 23:59:59.999 текущего?
  • Поле для города — city (как в yml), или location (как в ics). Я использовал city, т. к. это ближе к сути.
  • Какие-то поля лишние?
  • Чего-то не хватает? Например, можно добавить название часового пояса, но я не придумал, зачем оно может быть нужно, ведь timestamp хранится в UTC.
  • Что-то ещё?

Как определимся с видом, я готов это дело добавить.

Добавить ссылки на инструкции по подписке на календарь

Я ни разу не подписывался на календари. Поэтому не сразу понял как это сделать. И искал инструкцию в Readme, но ее нет.
Нагуглив нашел как это сделать на macOS – инструкция.
Еще нашел для Google Календарь, но данный не проверял – инструкция
Возможно, я не один такой, поэтому можно сразу в readme добавить

Добавить формат события

Предлагаю добавить новое поле в котором будет формат события: online || offline.
Если формата нет, то по умолчанию считается offline, для прошлых событий.

Фильтровать экранирование при генерации

Так вышло, что все очень любят анлоязычную традицию писать номера вот так #1, а # это комментарий в YAML, поэтому проще всего писать \# и не париться. Но этот слэш пролазит в экспорт — вот бы его фильтровать при генерации.

Повторяющиеся мероприятия

Реализована ли возможность добавлять мероприятия с периодичностью? Как пример, в Минске проходят ежемесячно мини встречи (я одну как пример добавил). У этих встреч есть периодинчность - ежемесячно последнее воскресенье.

  1. Есть ли смысл в размещении таких мелких мероприятий?
  2. Реализована ли возможность с периодичностью или необходима ли такая функциональность?

Формат «на целый день»

Сейчас события создаются с 00:00 до 23:59 и в календаре есть ощущение, что где-то там есть информация о начале и конце, но её нет. Есть вариант пометить событие как «на целый день», чтобы по календарю было видно — это особый тип.

image

На SO обсуждают решения.

Хранить одно мероприятие в одном файле

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

Также не придется сортировать их по дате, если указывать ее в названии файла. Гитхаб отсортирует вместо нас.

Что думаете об этом?

//CC @pepelsbey

Время начала сдвинуто на 3 часа вперёд

image

Когда добавляешь календарь через Google Calendar, то время начала сдвигается на 3 часа вперёд. Есть подозрение, что нужна какая-то компенсация по GMT или вроде того.

Телеграмм-канал с событиями

Предлагаю сделать телеграмм-канал с автопостингом всех событий, добавляемых в календарь (по хуку например). Как считаете, имеет ли это смысл и нужно ли это кому?

Не добавляется ссылка

В добавляемых мероприятиях есть пункт link, но в подписке гугл календарём ссылок на мероприятия не видно.

frontend calendar - event details

В маковском приложении «календарь» ссылку видно, так что, кажется, это баг скорее гугл календаря. Но я пользуюсь именно гугл календарём. И, думаю, не я один.

Возможно, имеет смысл добавлять ссылку в description события?

Падает сборка

  • node -v v14.16.1
  • npm -v 6.14.13
npm run build
…
������\x00\x00\x00\x1C\x002\x000\x002\x000\x00-\x001\x000\x00-\x001\x005\x00-\x00d\x00y\x00m\x00a\x00n\x00i\x00c\x00-\x00t\x00a\x00l\x00k\x00s\x00.\x00y\x00m\x00lIlocblob\x00\x00\x00\x10����������������\x00\x00\x00(\x002\x000\x002\x000\x00-\x001\x000\x00-\x001\x005\x00-\x00f\x00a\x00c\x00e\x00b\x00o\x00o',
    position: 0,
    line: 0,
    column: 0,
    snippet: ' 1 | \n-----^\n 2 | \n 3 | '
  }
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @ build: `node scripts/generateCalendar.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the @ build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/pepelsbey/.npm/_logs/2021-06-16T14_02_27_635Z-debug.log

Время начала и окончания в многодневном мероприятии

Сейчас, когда мероприятие идёт несколько дней, оно автоматически выглядит в календаре как мероприятие на целый день, даже если такой галочки не стоит.

Пример многодневного мероприятия

Есть предложение на нашей стороне автоматически бить такие мероприятия на несколько с пометкой в стиле (2 day). Тогда для каждого дня можно было бы видеть время начала и время окончания в календаре.

Ведь по факту фронтнд-мероприятия это не camp-лагерь, где мероприятие однажды начинается и однажды заканчивается. Чаще всего после окончания первого дня нужно/можно куда-то ещё пойти пить/ночевать. Было бы круто видеть из календаря это промежуточное время сразу.

iCal / CalDAV

Было бы круто, заводя мероприятия в calendar.yml, автоматически конвертировать их в ical и caldav форматы. Идеально бы ещё в html, чтобы можно было зайти на сайт с календарём и просто посмотреть.

Представляю себе такую автоматизацию процесса:

  • завести ветку gh-pages, где будет сайт и календарь в нужных форматах
  • написать gulp-task, который разбирает yml и трансформирует в ical и caldav. Если так не выйдет, то сделать организацию через какие-нибудь сервисы генерации событий в календарь (типа API Google Calendar).
  • написать таск, который генерит и деплоит всё в ветку gh-pages
  • написать конфиг для travis ci, следуя которому всё будет деплоиться при комите в master. в конфиге примерно следующее: установить npm пакеты (хорошо их кэшировать между установками), сконвертировать в три формата календарь, если всё прошло без ошибок, то закомитить их в gh-pages

Вижу себе это примерно так. Понимаю, что кажется слишком сложным, но, один раз автоматизировав, с этим сталкиваться больше не придётся и никакой рутины не потребуется.
Как считаете?

Нельзя подписаться на календарь (ошибка валидации)

Iphone Xs Max / Software Version 15.5

photo_2022-07-13 12 04 34
photo_2022-07-13 12 04 32

Адрес календаря копировал из мануала по подписке.

*заработало, когда скопировал ссылку из девтулзов. Может, сразу в мануале правильный путь https://web-standards.ru/calendar.ics указать, так как плейсхолдер в поле ввода не подсказывает про https://?

Веб-версия

Привет!

Было бы круто, если бы можно было зайти на условный web-standards.ru/calend и попасть на веб-версию календаря с фильтром по городам. Потому что иметь разом все события в календаре не очень удобно, плюс, там не сразу видно город:

screen shot 2017-08-11 at 14 27 48

(можно изменить вид или просто кликнуть, но факт остаётся фактом)

Я верю, что найдётся какой-то клёвый чувак, который реализует что-то такое, чтобы всем было удобно и приятно! 🐨

По шагам всё выглядит примерно просто:

  1. Помимо генерации ics-файла генерировать json.
  2. Завести небольшой фронт, который тянет этот json и выводит список карточек с событиями.
  3. Прикрутить к этому простенькую библиотеку-фильтр по необходимым полям. Можно сразу и по названию, и по месту и пр. Чтобы можно было ввести «FrontTa» → и получить отфильтрованные результаты с FrontTalks; или «Моск» → и получить результаты с Москвой. (но такая гибкость, это уже фича, не стоит сразу на это ориентироваться и усложнять).
  4. Договориться с кем-нибудь (например, с @pepelsbey), как хостить всё это дело (gh-pages на первое время хватит).

Пулреквест подходит для новичков, потому что здесь не сильно важно, умеете ли вы в дизайн, в годную вёрстку или в красивый код — сообщество поможет вам, сделав ревью. Тем самым вы научитесь новому и поможете всем!

Расширение тестов

Предлагаю расширить тесты: добавить проверять, в папке events/ только *.yml с корректным названием, а в других папках их нет (на случай, когда промахнулись).

Сделать автосборку

Сейчас приходиться пулить локально и потом делать npm start, а хотелось бы на Тревисе собирать и арсинкать прямо живой календарь без редиректов на web-standards.ru/calendar.ics.

@h4 сможешь завести?

Опциональные поля «время начала» и «время конца»

Если они не указаны, то можно делать «на целый день», как в #8. Осталось понять, в каком формате указывать временные зоны, чтобы на такой календарь можно было и правда положиться. В принципе, сдвиг можно вычислять по city, country, но это нетривиальная задача.

Обновить зависимости и починить сборку

Было

  "devDependencies": {
    "geo-tz": "^3.3.3",
    "ical-generator": "^0.2.9",
    "js-yaml": "^3.7.0",
    "moment-timezone": "^0.5.13",
    "mutex-js": "^1.1.5",
    "node-geocoder": "^3.22.0",
    "pify": "^3.0.0",
    "yaml-lint": "^1.2.3"
  }

Стало

  "devDependencies": {
    "geo-tz": "^5.1.0",
    "ical-generator": "^1.9.3",
    "js-yaml": "^3.13.1",
    "moment-timezone": "^0.5.13",
    "mutex-js": "^1.1.5",
    "node-geocoder": "^3.22.0",
    "pify": "^5.0.0",
    "yaml-lint": "^1.2.3"
  }

При «стало» скрипт generate валится с ошибкой. Судя по всему, поменялся API пакета node-geo-tz, но правка GeoTz.tz() на GeoTz() решает только часть проблемы, ошибки продолжают сыпаться.

Krasnodar Frontend Meetup #4

Проводим уже четвертый краснодарский митап по фронтенду, в этот раз будет 5 докладов (уже прям мини-конференция).

В этот раз:

  • типизация в js
  • как починить Redux
  • перфоманс анимаций
  • композитные слои и отрисовка
  • что разработчик должен знать про дизайн

Кроме этого у нас футболки сообщества за классные вопросы и буккроссинг технической литературы.

https://krddevdays.timepad.ru/event/851590/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.