Friday, April 14, 2017

Сравниваем лучшие библиотеки для построения диаграмм Ганта

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

Вот список наших библиотек:

Bryntum Gantt является инструментом, позволяющим добавить диаграмму Ганта к проекту, разработанному с помощью Ext JS. Bryntum Gantt является детищем компании Bryntum, которая также известна благодаря такому плагину для Ext JS как Bryntum Scheduler

DHTMLX Gantt, автономный JavaScript компонент для создания полнофункциональных диаграмм Ганта для кросс-браузерных и кросс-платформенных приложений

Google Gantt chart, диаграмма Ганта от всем известного веб-гиганта. Согласно документации, Google Gantt chart в данный момент находится в состоянии беты, но, тем не менее, не будет лишним узнать, какие возможности нам доступны на данном этапе развития

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

Bryntum Gantt


Давайте начнем со списка основных возможностей:

  • Определение критического пути
  • Масштабирование
  • Встроенное контекстное меню
  • Drag and drop
  • Возможность настроить отставание и опережение для тасков
  • Фильтрование тасков
  • Разные виды зависимостей между тасками (FF/FS/SF/SS)
  • Интеграция с популярными серверными технологиями, такими как PHP, JavaScript, ASP.NET, и т.д.
  • Экспорт в PDF/PNG, импорт из MS Project

А также  многие другие возможности. Выглядит впечатляюще. К сожалению, руководство для новичков не является достаточно детальным. Похоже на то, что оно было разработано скорее для опытных разработчиков, которые уже имеют представление о том, как все работает.
После того, как вы добавите необходимые JavaScript и CSS файлы на страницу, вы должны инициализировать чарт:

Ext.onReady(function(){

    var taskStore = Ext.create('Gnt.data.TaskStore', {
        autoLoad    : true,
        proxy       : {
            type    : 'memory',
            reader  : {
                type : 'json'
            },

            data    : [
                {
                    /* define the required tasks here */
                }
            ]
            // eof data
        }
        // eof proxy
    });

    /* panel definition */
});

В этом коде TaskStore содержит дерево тасков, которое нужно отобразить на экране. После его создания, мы определили, что мы хотим автоматически загрузить некоторые данные в JSON формате. Определение тасков может выглядеть примерно вот так:

"StartDate"  : "2017-01-18",
"EndDate"   : "2017-02-02",
"Id"        : 1,
"Name"      : "Planning",
"expanded"  : true,

Каждый таск имеет начальную и конечную дату, ID, а также имя. Вы также можете определить будет ли раскрыто подробное описание таска ("expanded"  : true). Кроме этого, вы можете создавать вложенные таски.

После этого не забудьте настроить  и отобразить на экране панель управления:

var ganttPanel = Ext.create('Gnt.panel.Gantt', {
        height     : 400,
        width      : 1000,
        viewPreset : 'weekAndDayLetter',
        startDate  : new Date(2017, 0, 15),
        endDate    : Sch.util.Date.add(new Date(2017, 0, 15), Sch.util.Date.WEEK, 3),

        columns    : [
            {
                xtype       : 'treecolumn',
                header      : 'Tasks',
                sortable    : false,
                dataIndex   : 'Name',
                width       : 200
            }
        ],

        taskStore       : taskStore
    });

ganttPanel.render(Ext.getBody());

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



Базовое приложение выглядит довольно функциональным, но главный вопрос состоит в том, существует ли более удобный способ создания диаграммы Ганта. Давайте выясним.

DHTMLX Gantt


По сложившейся традиции, давайте начнем с основных возможностей:

  • Кросс-браузерные диаграммы Ганта с поддержкой мобильных платформ
  • Экспорт/импорт из MS Project
  • Подсчет критического пути
  • Обратное планирование
  • Бэйслайны, дэдлайны и прочие полезные элементы
  • Автоматическое планирование
  • Простой API для показа/скрытия столбцов
  • Динамическая загрузка
  • Поддержка пользовательских типов

Мы не упоминали отдельно такие тривиальные возможности, как drag-and-drop или разные типы зависимостей между тасками, поскольку они повторяют аналогичный функционал Bryntum Gantt. Что более интересно, так это, например такие возможности, как автоматическое планирование. Стоит отметить, что не каждая библиотека позволяет вам использовать подобные функции.

Согласно документации, все, что вам нужно сделать, чтобы создать базовое приложение, это добавить необходимые JavaScript и CSS файлы на страницу, создать DIV контейнер, который будет содержать чарт, а затем использовать команду gantt.init() для инициализации чарта:

<!DOCTYPE html>
<html>
<head>
   <title>How to Start with dhtmlxGantt</title>
   <script src="codebase/dhtmlxgantt.js"></script>
   <link href="codebase/dhtmlxgantt.css" rel="stylesheet">
</head>
<body>
    <div id="gantt_here" style='width:1000px; height:400px;'></div>
    <script type="text/javascript">
        gantt.init("gantt_here");
    </script>
</body>
</html>

Вы можете создать несколько тасков и связей между ними, чтобы протестировать работу приложения:

var tasks = {
    data:[
        {id:1, text:"Project #1",start_date:"01-04-2013", duration:11,
        progress: 0.6, open: true},
        { /* more tasks */ }
    ],
    links:[
        {id:1, source:1, target:2, type:"1"},
        { /* more links */}
    ]
};

А затем отобразить их на диаграмме:

gantt.init("gantt_here");
gantt.parse (tasks);

Это все, что от вас требуется для получения следующего результата:



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

Google Gantt Chart


Диаграммы Ганта являются новым пополнением в семействе Google Charts и они становятся все более популярными в последнее время. Впрочем, ничего удивительного. В конце концов, это очередное изобретение от Google. На момент написания этой статьи, этот чарт находился в статусе беты с вероятностью привнесений существенных изменений в будущем. Поэтому, в отличие от прочих инструментов из этой статьи, этот вариант, возможно, не является лучшим выбором для разработки корпоративного приложения.

Диаграмма Ганта от Google помогает отобразить дату начала и конца таска, его продолжительность, а также зависимости между разными тасками. При наведении курсора появляется всплывающая подсказка.

Для создания простого чарта мы должны использовать объект DataTable, который представляет из себя двухмерную таблицу. Именно эту таблицу мы и заполним данными, описывающими имеющиеся таски. С помощью метода  addColumn() мы можем определить из каких данных будут состоять наши таски (ID, название, продолжительность, и т.д.), а затем с помощью метода addRows() мы можем добавить так много тасков, как нам нужно.

Вот пример кода:

var data = new google.visualization.DataTable();
data.addColumn('string', 'Task ID');
data.addColumn('string', 'Task Name');
/* more columns */
data.addColumn('string', 'Dependencies');

data.addRows([
  ['Research', 'Find sources',
   new Date(2015, 0, 1), new Date(2015, 0, 5), null,  100,  null],
  ['Write', 'Write paper',
   null, new Date(2015, 0, 9), daysToMilliseconds(3), 25, 'Research,Outline'],
   <...more rows...>
  ['Outline', 'Outline paper',
   null, new Date(2015, 0, 6), daysToMilliseconds(1), 100, 'Research']
]);

Затем нужно создать новый объект Gantt, относящийся к определенному DIV контейнеру на странице и отобразить в нем наши таски:

var chart = new google.visualization.Gantt(document.getElementById('chart_div'));

chart.draw(data, options);

В результате мы получим вот такой аккуратно выглядящий график:



Полный пример доступен здесь.

Помимо этой базовой функциональности вы также можете отключить отображение зависимостей между тасками, вычислить критический путь, изменить стиль и настроить внешний вид. Практически все, что вам может понадобиться для создания легковесного, аккуратного и приятно выглядящего приложения. Но стоит отметить, что Google Gantt Chart на данный момент уступает в функциональности двум предыдущим примерам.

Заключение


Bryntum Gantt выглядит довольно продвинутым инструментом для создания диаграмм Ганта с обширным набором полезных функций. Исчерпывающая документация, снабженная подробными руководствами и демо, поможет вам понять, чего и каким образом можно достичь с помощью Bryntum Gantt. Но, тем не менее, данный вариант подойдет не каждому. Поскольку это плагин для Ext JS, возможно, это не самый лучший вариант, если вы уже не используете эту библиотеку в качестве одной из основных технологий.

DHTMLX Gantt, в свою очередь, является автономной JavaScript библиотекой без лишних зависимостей. Хотите создать высокопроизводительное и настраиваемое онлайн приложение? Обратите внимание на DHTMLX Gantt. Богатый API и детальная документация со множеством пошаговых руководств будут хорошим подспорьем на первых порах. Продвинутые функции, такие как автоматическое планирование, делают этот вариант еще более привлекательным.

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

Перевод. Оригинал статьи находится здесь.

Thursday, July 7, 2016

Разные способы применения Material Design в ваших проектах

Со дня своего первого релиза в июне 2014-го года концепция Material Design, изначально разработанная компанией Google, стала самой настоящей современной классикой. В последние дни дизайн в области веба и мобильных приложений следует стремлению к простоте и аккуратности. Одна из главных целей современных дизайнеров – сохранять свои творения настолько простыми и не загруженными лишними элементами, насколько это возможно, при этом не забывая о внешней привлекательности. Минимализм и яркие цвета стали главными отличительными чертами данного подхода. Material Design даже вышел за рамки веба и мобильных приложений, для которых изначально был предназначен. Последние десктопные версии браузера Google Chrome были разработаны, следуя его основным положениям. В этой статье мы поговорим о пяти фреймворках, с помощью которых вы сможете создавать сайты и мобильные приложения, которые следуют концепциям Material Design. Мы попытались сфокусировать свое внимание на инструментах разного рода, чтобы вам было легче найти среди них те, которые лучше всего соответствуют вашим требованиям и уровню знаний. Итак, начнем.

Material-UI

Если вы следите за последними новостями из мира веб-разработок, вы наверняка знаете о том, что React, разработанный компанией Facebook довольно популярен в последнее время. Передовые технологии, такие как Virtual DOM или изоморфный JavaScript, используемые в этом фреймворке, помогают достичь достаточно высокой производительности. Прибавьте к этому возможность глубокой кастомизации созданных компонентов и переиспользования кода – и вы поймете, почему React так популярен. Material-UI это фреймворк, который предоставляет вам возможность работать с набором React компонентов, реализующих идеи Material Design. Компоненты доступны в светлом и темном оформлении. Документация довольно детальна и подробно описывает процесс установки. Но есть кое что, о чем вам нужно помнить, прежде чем начинать знакомство c React. Этот фреймворк использует язык JSX, таким образом работа с ним может оказаться несколько не привычной, если вы с ним не знакомы. 

  

Webix

Если вам нужен набор продвинутых UI компонентов, доступных “из коробки”, вы можете обратить свое внимание на Webix. В отличие от React, этот фреймворк не дает такой свободы вашему воображению, если говорить о возможности кастомизации. Но Webix дает вам доступ к более продвинутым версиям таких компонентов как деревья или таблицы. Набор доступных виджетов варьируется от простой кнопки до чего-то более сложного, как например, Kanban. Базовых знаний JavaScript будет вполне достаточно для начала работы. Документация хорошо написана и содержит большое количество пошаговых руководств. Но есть и плохие новости. Они состоят в том, что Webix не поддерживает Material Design по умолчанию. Для того, чтобы добавить его к вашему проекту, следуйте данному руководству.


DHTMLX Suite

Теперь давайте поговорим о более комплексных решениях. DHTMLX Suite это JavaScript UI библиотека для создания кросс-браузерных веб и мобильных приложений. Помимо, собственно, набора UI компонентов разной степени сложности, таких как графики и календари, вы можете использовать доплнительные инструменты разработки. Среди них, например, есть Form Builder и Visual Designer, инструменты для визуального создания пользовательских интерфейсов. Начиная с версии 5.0, Material Design доступен в этой библиотеке по умолчанию. Таким образом, никакой дополнительной работы для его добавления в ваш будущий проект вам делать не придется. 


Angular Material

Вы, возможно, слышали о таком фреймворке как Angular и почти наверняка работали с ним, если у вас есть какой-то опыт веб-разработки. Если вам пришлись по вкусу его возможности, вы можете попробовать также и Angular Material. Это полнофункциональный фреймворк, который разрабатывается при поддержке Google. Такие два фактора, как популярность самого Angular и поддержка Google сделали Angular Material довольно популярной технологией. Детальная документация, привлекательные демо и подробно описанная справка по API делают работу с этим фреймворком простым и приятным занятием. 


Materialize

Если вы только планируете создать ваш первый проект, который реализовал бы подход Material Design, Materialize мог бы быть хорошим началом для вас. Он работает почти так же, как и довольно известный Bootstrap и доступ к элементам можно получить через CSS классы. Вы можете начать использовать этот фронтенд фреймворк также, как и Bootstrap. Просто добавьте к проекту нужный CSS файл – и приступайте к работе. Materialize довольно прост в освоении, а SASS версия позволяет выбрать только те компоненты, которые вам действительно нужны.


Заключение

Судя по всему, Material Design с нами надолго. Он довольно хорошо исследован и тщательно доведен до ума. Изо дня в день вы можете увидеть все больше и больше новых сайтов и мобильных приложений, следующих этой концепции подхода к дизайну. Обновленные версии давно знакомых приложений также довольно часто обнаруживают в себе признаки этого подхода. Для того, чтобы быть трендовым и современным, вы должны держать нос по ветру и осваивать самые передовые техники. И сегодня одной из таких техник является Material Design. Сложно перечислить все имеющиеся на данный момент фреймворки, позволяющие реализовать этот подход в вашем проекте. И каждый день появляются все новые. Но мы попытались познакомить вас с самыми разными из них. Вы можете выбрать, например, легковесный и простой в освоении Materialize, который придется по вкусу новичкам. С другой стороны, DHTMLX Suite является набором довольно разнообразных инструментов и компонентов. Мы надеемся, что вы найдете для себя именно тот фреймворк, который наилучшим образом соответствует вашим нуждам и будет в состоянии помочь вам воплотить свои идеи в жизнь.

Originally appeared on: http://www.codeproject.com/Articles/1110002/Different-Ways-of-Material-Design-Implementation

Covered by The Code Project Open License (CPOL) 1.02


Thursday, April 21, 2016

Сравнение JavaScript планировщиков

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

У читателя может возникнуть вопрос: “Зачем создавать собственное приложение, если можно использовать уже имеющийся?” Вот несколько примеров:
  • Если вы работаете над Интранет приложением, которое не обязательно будет иметь выход во внешнюю Сеть. В этом случае вам, наверняка, понадобится автономный компонент, которому не требуются сторонние сервисы и который может хранить данные там, где вы захотите. Или вам просто хочется иметь полный контроль над над вашим приложением и вы не хотите полагаться на сторонние сервисы
  • Когда вам нужно создать планировщик, который будет работать с уже имеющимися у вас данными, которые не состоят из “традиционных” событий вида Дата/Заголовок/Описание. Эти данные могут содержать, например, больше количество бизнес-правил
  • В случае, если вам необходима продвинутая функциональность, не поддерживаемая, например, Google Calendar. Или вам необходимо изменить внешний вид или логику приложения, например, добавить отображение рабочих/нерабочих часов
Мы рассмотрим три разных типа JS-планировщиков:

Создание планировщика 

JavaScript Event Calendar


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

dhtmlxScheduler

Если вы заглянете на страницу загрузки, то увидите, что нам доступна для свободного скачивания Стандартная Версия. Если вы хотите получить дополнительные возможности, вам доступна платная версия PRO Edition.

Для начала нужно включить в файл проекта необходимые файлы из папки codebase:

<script src="codebase/dhtmlxscheduler.js"></script>
<link rel="stylesheet" href="codebase/dhtmlxscheduler.css" />
 
Теперь нужно определить контейнер для будущего планировщика:

<div id="scheduler_here" class="dhx_cal_container" style='width:100%; height:100%;'>
    <div class="dhx_cal_navline">
        <div class="dhx_cal_prev_button">&nbsp;</div>
        <div class="dhx_cal_next_button">&nbsp;</div>
        <div class="dhx_cal_today_button"></div>
        <div class="dhx_cal_date"></div>
        <div class="dhx_cal_tab" name="day_tab" style="right:204px;"></div>
        <div class="dhx_cal_tab" name="week_tab" style="right:140px;"></div>
        <div class="dhx_cal_tab" name="month_tab" style="right:76px;"></div>
    </div>
    <div class="dhx_cal_header"></div>
    <div class="dhx_cal_data"></div>       
</div>
 
И, наконец, можно создать календарь:

<body onload="init();">
<!--поместите div-ы сюда-->
</body>
function init() {
    scheduler.init('scheduler_here',new Date(),"week");
}
 
Конструктор scheduler.init() создаст планировщик внутри контейнера scheduler_here. new Date() выберет текущую дату в качестве даты по умолчанию. Параметр"week" выберет неделю в качестве масштаба календаря по умолчанию. Доступные варианты: "day", "week" и "month".

Все готово и мы можем посмотреть на результат:

js планировщик


Итак, базовые возможности. Мы можем выбирать текущий масштаб. Доступные значения: день, неделя и месяц. Текущая дата подсвечена желтым цветом, но если вы потеряетесь в днях, вам поможет кнопка “Today”.

Для того, чтобы создать новое событие, нужно использовать двойной клик. Меняя размер события, можно изменить его длительность. Также можно перетаскивать события внутри календаря для изменения даты:

js календарь


Для того, чтобы создать многодневное событие, можно использовать кнопку редактирования слева:

джаваскриптовый календарь


В результате будет создано событие, занимающее несколько ячеек календаря. Вам нужно переключиться на масштаб “Month”, чтобы изменить дату начала такого события перетаскиванием.

js планировщик


Kendo UI Scheduler

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

<link rel="stylesheet" href="styles/kendo.common.min.css" />
<link rel="stylesheet" href="styles/kendo.default.min.css" />
<script src="js/jquery.min.js"></script>
<script src="js/kendo.all.min.js"></script>
 
Важно! Помните, что файл jquery.min.js должен быть подключен перед файлом

kendo.all.min.js.

Далее следует определить стили. Если вы хотите использовать календарь в полноэкранном режиме, стоит также добавить следующий CSS-код:

html, body{
  margin:0;
  padding:0;
  height: 100%;
}
#scheduler {
  border-width: 0;
  height: 100%;
}
 
Теперь мы можем определить контейнер, в который будет помещен наш календарь и вызвать конструктор для его создания:

<div id="scheduler"></div>
$("#scheduler").kendoScheduler({
  // Текущая дата
  date: new Date(),
  views: [
    "day",
    { type: "week", selected: true },
    "month"
  ]
});
 
В качестве даты по-умолчанию используется текущая дата. Свойство views позволяет добавить возможность выбора масштаба календаря. В данном случае будет добавлена возможность выбора между днем, неделей и месяцем. С помощью selected: true значением по-умолчанию выбирается неделя.

Этого кода достаточно, чтобы создать календарь:



Новое событие создается по двойному клику в необходимой области:



Созданные события можно перетаскивать для изменения даты и растягивать для изменения длительности. Еще одна полезная функция – мини-календарь:



Копка “Show business hours”/”Show full day” в самом низу календаря позволит отделить рабочие события от всех прочих.



Планировщик выглядит интуитивно понятным и обладает всеми базовыми функциями, которые могут вам понадобиться. Вы можете создать новое событие и перемещать его по сетке календаря. Дополнительные функции, такие как мини-календарь и кнопка Show business hours также окажутся полезными.

На этом список возможностей базового календаря заканчивается.

FullCalendar

Этот планировщик распространяется по лицензии MIT License, таким образом, вы можете его использовать практически без ограничений. Установить его можно несколькими способами: с помощью Bower, добавив необходимые для работы файлы через CDNJS или загрузив архив с необходимыми JavaSctipt и CSS файлами. Больше информации вы можете найти на странице загрузки.

Поскольку FullCalendar является плагином для jQuery, не забудьте также подключить файлы, необходимые для его работы. Еще одной зависимостью является Moment.js, JavaScript библиотека, предназначенная для работы с датами. Вот как можно включить все необходимые файлы с помощью CDN:

<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.6.0/fullcalendar.css' />

<script src='http://code.jquery.com/jquery-1.11.3.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.1/moment.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.6.0/fullcalendar.min.js'></script>

После этого вы можете добавить на страницу <div> контейнер, который будет содержать календарь и, если необходимо, добавить стили и инициализировать календарь. Например, у нас есть контейнер:

<div id='calendar'></div>
 
Вот как можно инициализировать планировщик внутри него:

$(document).ready(function() {
  // страница загружена
  $('#calendar').fullCalendar({
      // свойства календаря
  })
});
 
Как видите, вам понадобится не так уж и много кода. Но и функционал, который вы получите по умолчанию, не так разнообразен.

Ниже вы можете увидеть, как выглядит наше приложение:



В качестве масштаба календаря по умолчанию выбран Месяц, текущая дата подсвечена, есть возможность изменить отображаемый месяц, а также кнопка Today. На этом всё. Дело в том, что FullCalendar больше всего похож на набор “Сделай Сам”. В нем реализовано большое количество полезных функций, но базовый планировщик выглядит ну очень базовым. Это хороший выбор в том случае, если вы хотите создать компактное приложение с тем минимумом доступных функций, который вам нужен.

Давайте добавим код, необходимый для того, чтобы планировщик выглядел и работал немного лучше:

// поддержка тем
theme: true,
// рабочие/нерабочие часы
businessHours: true,
// изменение и перемещение событий 
editable: true,
// заголовок
header: {
  left: 'prev,next today',
  center: 'title',
  right: 'month,agendaWeek,agendaDay'
},
 
Поскольку мы включили поддержку тем, нужно подключить дополнительный CSS-файл.

<link rel='stylesheet' href='./lib/cupertino/jquery-ui.min.css' />
 
Почти готово! Осталось только добавить несколько событий, которые будут отображены на нашем планировщике. Это можно сделать разными способами: как массив, источник JSON данных или даже в виде функции.

Вот пример того, как этом может выглядеть:

events: [
  // all day event
  {
    title  : 'Meeting',
    start  : '2015-11-12'
  },
  // long-term event 
  {
    title  : 'Conference',
    start  : '2015-11-13',
    end    : '2015-11-15'
  },
  // short term event 
  {
    title  : 'Dentist',
    start  : '2015-11-09T11:30:00',
    end  : '2015-11-09T012:30:00'
    allDay : false // will make the time show
  }
]
 
Давайте проверим результат:



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



Общее впечатление от FullCalendar такое. Он был спроектирован, как легковесный инструмент, который дает вам полный контроль над приложением. В можете создать базовое приложение с минимумом возможностей, а затем добавлять необходимый функционал шаг за шагом. И вам будет из чего выбрать: настройки цвета и событий, настройка видов и т.д. Посетите страницу документации, чтобы увидеть полный список доступных функций.

Результаты

dhtmlxScheduler. Хорошо подойдет, если собственно планировщик – это то, что вам нужно. Пример интеграции с Google maps дает понять, что базовый функционал можно расширить в случае надобности. Страница документации содержит набор пошаговых руководств, что может пригодиться, если вы только начинаете работу с ним. На первых порах смутить может разве что обилие <div> контейнеров, нужных для его инициализации. 

Kendo UI Scheduler. Kendo UI это довольно большой фреймворк с множеством полезных виджетов. Использовать только Kendo UI Scheduler, возможно, не самая лучшая идея, если вы не заинтересованы в других компонентах. Документация поможет разобраться с работой виджета даже новичкам, а набор демок, снабженных примерами кода поможет на первых порах. Создать базовый календарь, руководствуясь документацией не так сложно. Внешний вид по-умолчанию не так примечателен, однако все это легко поправимо.

FullCalendar. Хороший выбор для тех, кто знает, что именно он хочет получить. Здесь нет детального пошагового руководства, которое объясняло бы, что нужно делать, чтобы добиться той или иной цели. Только короткое руководство и страница документации.

Оригинал здесь: http://www.sitepoint.com/comparison-javascript-calendars-schedulers/