{"id":10951,"date":"2023-02-14T19:00:11","date_gmt":"2023-02-14T16:00:11","guid":{"rendered":"https:\/\/dhtmlx.com\/blog\/?p=10951"},"modified":"2023-05-02T12:45:27","modified_gmt":"2023-05-02T09:45:27","slug":"dhtmlx-event-calendar-2-0","status":"publish","type":"post","link":"https:\/\/dhtmlx.com\/blog\/dhtmlx-event-calendar-2-0\/","title":{"rendered":"DHTMLX Event Calendar 2.0 with Timeline and Custom Views, Recurring and Unassigned Events, and More"},"content":{"rendered":"<p>It is high time to start writing the DHTMLX release history of 2023. So we are excited to present DHTMLX Event Calendar 2.0! This major update of our <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxEventCalendar\/\" rel=\"noopener\" target=\"_blank\">JavaScript Event Calendar<\/a> comprises a pack of top features and improvements for productive event management. The most notable novelties are a Timeline view mode with a column for unassigned events, support for recurring events, and an ability to set custom view modes. We also added new controls for switching between view modes in the toolbar, the ability to dim past events,  a current time marker in Agenda and Timeline views, and auto scrolling for drag-and-drop actions. Besides, there are numerous enhancements to facilitate your experience with DHTMLX Event Calendar.<\/p>\n<p><strong><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxEventCalendar\/download.shtml\" rel=\"noopener\" target=\"_blank\">Download a free trial of DHTMLX Event Calendar v2.0 ><\/a><\/strong><\/p>\n<p>Now we proceed with the main aspects of this release in more detail.<\/p>\n<h5>Timeline View Mode<\/h5>\n<p>Let us start with the new view mode, namely Timeline. It becomes the sixth option in the list of available built-in Event Calendar views, including Day, Week, Month, Year, and Agenda. But contrary to all existing view modes available by default, Timeline is optional. <\/p>\n<p>Considering the great popularity of this view in the DHTMLX Scheduler component, it can become a big asset for your DHTMLX Event Calendar as well. The Timeline view provides a clear overview of planned appointments arranged from left to right along the timeline.  But the main value of the Timeline view is the possibility to assign events to resources (employees, equipment, etc.).<\/p>\n<p>The example below shows how your event calendar built with DHTMLX may look in all view modes. To select a specific one, you should use special controls in the toolbar.  <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/Timeline-1024x421.png\" alt=\"DHTMLX Event Calendar  v2.0 - Timeline view mode\" width=\"1024\" height=\"421\" class=\"aligncenter size-large wp-image-10970\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/Timeline-1024x421.png 1024w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/Timeline-300x123.png 300w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/Timeline-768x316.png 768w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/Timeline.png 1278w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/dmoijc47?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>By default, our Calendar displays events in the Week mode. But you can set Timeline or any other available view as the initial option by specifying the corresponding value in the <a href=\"https:\/\/docs.dhtmlx.com\/eventcalendar\/api\/config\/js_eventcalendar_mode_config\/\" rel=\"noopener\" target=\"_blank\">mode<\/a> config:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"co1\">\/\/ create Event Calendar<\/span><br \/>\n<span class=\"kw1\">new<\/span> eventCalendar.<span class=\"me1\">EventCalendar<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;#root&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp;mode<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;timeline&quot;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"co1\">\/\/ other configuration parameters<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>There are two ways to set the Timeline mode dynamically:<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/docs.dhtmlx.com\/eventcalendar\/api\/methods\/js_eventcalendar_setmode_method\/\" rel=\"noopener\" target=\"_blank\">setMode()<\/a><\/strong> method<\/li>\n<\/ul>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">calendar.<span class=\"me1\">setMode<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span> value<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;timeline&quot;<\/span> <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Note that you can also define a custom view ID (value) for this method using the <strong>config.views<\/strong> property.<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/docs.dhtmlx.com\/eventcalendar\/api\/methods\/js_eventcalendar_setconfig_method\/\" rel=\"noopener\" target=\"_blank\">setConfig()<\/a><\/strong> method<\/li>\n<\/ul>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">calendar.<span class=\"me1\">setConfig<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp;config<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;dragCreate<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;eventInfoOnClick<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;eventsOverlay<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;autoSave<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;dragResize<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;dragMove<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp;mode<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;timeline&quot;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Then you need to specify settings for your timeline in the array of the <strong><a href=\"https:\/\/docs.dhtmlx.com\/eventcalendar\/api\/config\/js_eventcalendar_config_config\/\" rel=\"noopener\" target=\"_blank\">config.view<\/a><\/strong> property that provides Timeline with greater configuration opportunities compared to other view modes:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">config<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; views<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp;id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;timeline&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp;label<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Hour Timeline&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp;value<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Hour Timeline&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp;layout<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;timeline&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp;config<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp;unassignedCol<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp;step<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;hour&quot;<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp;header<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"br0\">&#123;<\/span> unit<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;day&quot;<\/span><span class=\"sy0\">,<\/span> step<span class=\"sy0\">:<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> format<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;d MMM&quot;<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"br0\">&#123;<\/span> unit<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;hour&quot;<\/span><span class=\"sy0\">,<\/span> step<span class=\"sy0\">:<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> format<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;H&quot;<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; sections<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;label<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Andy Warh&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;1&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;img<span class=\"sy0\">:<\/span><span class=\"st0\">&quot;\/img\/01\/avatar_01.jpg&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;label<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;James Tamer&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;2&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;img<span class=\"sy0\">:<\/span><span class=\"st0\">&quot;\/img\/02\/avatar_02.jpg&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"co1\">\/\/ other sections config<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp;<span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n<span class=\"br0\">&#93;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>You also have an opportunity to specify a custom template for defining the appearance of timeline sections using the newly added <strong>timelineSection<\/strong> parameter in the <strong><a href=\"https:\/\/docs.dhtmlx.com\/eventcalendar\/api\/config\/js_eventcalendar_templates_config\/\" rel=\"noopener\" target=\"_blank\">templates<\/a><\/strong> object. This parameter takes an object of the section parameters.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">templates<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp;timelineSection<span class=\"sy0\">:<\/span> <span class=\"br0\">&#40;<\/span>section<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> `<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>div className<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;template-wrapper&quot;<\/span><span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>img src<span class=\"sy0\">=<\/span>$<span class=\"br0\">&#123;<\/span>section.<span class=\"me1\">img<\/span><span class=\"br0\">&#125;<\/span> alt<span class=\"sy0\">=<\/span>$<span class=\"br0\">&#123;<\/span>section.<span class=\"me1\">label<\/span><span class=\"br0\">&#125;<\/span> className<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;section-img&quot;<\/span> <span class=\"sy0\">\/&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>div className<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;section-label&quot;<\/span><span class=\"sy0\">&gt;<\/span>$<span class=\"br0\">&#123;<\/span>section.<span class=\"me1\">label<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">&lt;\/<\/span>div<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;\/<\/span>div<span class=\"sy0\">&gt;<\/span>`<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ other configuration parameters<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/bandicam-2023-02-14-21-10-03-260-1024x441.png\" alt=\"DHTMLX Event Calendar v2.0  - template\" width=\"1024\" height=\"441\" class=\"aligncenter size-large wp-image-10982\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/bandicam-2023-02-14-21-10-03-260-1024x441.png 1024w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/bandicam-2023-02-14-21-10-03-260-300x129.png 300w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/bandicam-2023-02-14-21-10-03-260-768x331.png 768w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/bandicam-2023-02-14-21-10-03-260.png 1320w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/rmgc73n6?&#038;tag=event_calendar&#038;mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>With the Timeline view mode in action, end-users get a bird\u2019s-eye view of their working schedules, become able to analyze the workload, and make necessary adjustments.<\/p>\n<h5>Recurring Events<\/h5>\n<p>When managing your schedule via an event calendar, you will certainly deal with regularly repeated activities. And it may be tiresome and time-consuming to set up such tasks individually every time in your calendar. Fortunately, it is no longer the issue with DHTMLX Event Calendar. Starting from v2.0, you can specify the recurrence of appointments for all view modes using predefined or custom frequency rates.<\/p>\n<p>When it comes to implementing event recurrence via API, you should use the <strong>recurring<\/strong> editor field type in the <strong><a href=\"https:\/\/docs.dhtmlx.com\/eventcalendar\/api\/config\/js_eventcalendar_editorshape_config\/\" rel=\"noopener\" target=\"_blank\">editorShape<\/a><\/strong> property.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">new<\/span> eventCalendar.<span class=\"me1\">EventCalendar<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;#root&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp;events<span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp;editorShape<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;type<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;recurring&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;label<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Recurring&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"co1\">\/\/ settings of other custom fields<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#93;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>In the <strong><a href=\"https:\/\/docs.dhtmlx.com\/eventcalendar\/api\/config\/js_eventcalendar_events_config\/\" rel=\"noopener\" target=\"_blank\">events<\/a><\/strong> property, we added several optional parameters for specifying event recurrence rules in the calendar:<\/p>\n<ul>\n<li><strong>RRULE<\/strong> &#8211; defines a rule for recurring events<\/li>\n<li><strong>recurring<\/strong> &#8211; enables\/disables the recurrence of events<\/li>\n<li><strong>STDATE<\/strong> &#8211; sets a start date for recurring events<\/li>\n<li><strong>DTEND<\/strong> &#8211; sets an end date for recurring events<\/li>\n<\/ul>\n<p>These new parameters are bound to the <strong>recurring<\/strong> editor field type. In practice, all you have to do is set the necessary recurrence rule in the <strong>RRULE<\/strong> parameter &#8211; and the other three parameters will be calculated automatically.<br \/>\nFor instance, you may need to display a particular event on Monday, Wednesday, and Friday every two weeks:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> events <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;...<span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;RRULE<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;FREQ=WEEKLY;INTERVAL=2;BYDAY=Mo,We,Fr&quot;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span>...<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/Recurring-events-1.gif\" alt=\"DHTMLX Event Calendar v2.0 - Recurring events\" width=\"955\" height=\"792\" class=\"aligncenter size-full wp-image-10976\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/dmoijc47?tag=event_calendar&#038;mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>When editing or deleting any of the recurring events, your changes can be applied to: <\/p>\n<ol>\n<li>only a single event,<\/li>\n<li>the event being edited\/deleted and all the following ones,<\/li>\n<li>all recurring events.<\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/deleting-recurring-events.gif\" alt=\"DHTMLX Event Calendar 2.0 - deleting recurring events\" width=\"968\" height=\"513\" class=\"aligncenter size-full wp-image-10961\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/dmoijc47?tag=event_calendar&#038;mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<h5>Unassigned Events in Timeline View<\/h5>\n<p>It is not that easy to make an optimal event calendar for a single person, let alone a schedule for a group of people using the Timeline view mode. That is why we also decided to add the possibility to keep tasks unassigned as long as needed in an extra column. Thus, when end-users have doubts about the most suitable assignee or date for a given task, they can just leave it unassigned and get back to it later.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/Unassigned-Events-in-Timeline-View.gif\" alt=\"Unassigned Events in Timeline View\" width=\"943\" height=\"556\" class=\"aligncenter size-full wp-image-10984\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/dmoijc47?tag=event_calendar&#038;mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><br \/>\nTo add a separate column for unassigned events to your JavaScript event calendar, it is required to set the value of the <strong>unassignedCol?<\/strong> parameter to <em>true<\/em> in the Timeline view mode settings.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> config <span class=\"sy0\">=<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; viewControlButton<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;none&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; views<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;timeline&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Timeline&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; layout<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;timeline&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; config<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unassignedCol<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n<span class=\"co1\">\/\/ Timeline sections config<\/span><\/div><\/div>\n<p>As a result, end-users can store unassigned events in the column on the right side of the timeline, assign them to a specific person, and, if plans have changed, move them back from the calendar to the unassigned column.<\/p>\n<h5>Custom View Modes in Toolbar<\/h5>\n<p>During the preparation of this release, we also focused on giving you the freedom to define your own view modes in DHTMLX Event Calendar. Previously, events could be displayed only with built-in views (Day, Week, Month, Year, Agenda) using the corresponding controls in the toolbar. From now on, it is possible to create a custom set of view modes, including the new Timeline view, and specify your own settings for them. <\/p>\n<p>Custom views in the toolbar are specified using the <strong>config.views<\/strong> property. For instance, the toolbar of your event calendar can contain a couple of Timeline views with different sets of sections and timescale settings.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> views <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n<span class=\"co1\">\/\/ other views config<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;timeline&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; label<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Timeline&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; layout<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;timeline&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; config<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; unassignedCol<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; sections<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; ...<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;timeline2&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; label<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Hour Timeline&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; layout<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;timeline&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; config<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; unassignedCol<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; step<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;hour&quot;<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; header<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span> unit<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;day&quot;<\/span><span class=\"sy0\">,<\/span> step<span class=\"sy0\">:<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> format<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;d MMM&quot;<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span> unit<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;hour&quot;<\/span><span class=\"sy0\">,<\/span> step<span class=\"sy0\">:<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> format<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;H&quot;<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n<span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/Custom-view-modes-FV.gif\" alt=\"DHTMLX Event Calendar v2.0  - Custom view modes\" width=\"968\" height=\"531\" class=\"aligncenter size-full wp-image-10963\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/dmoijc47?tag=event_calendar&#038;mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><br \/>\nMore information on the customization of view modes can be found in the <a href=\"https:\/\/docs.dhtmlx.com\/eventcalendar\/api\/config\/js_eventcalendar_config_config\/#parameters\" rel=\"noopener\" target=\"_blank\">documentation<\/a>.<\/p>\n<h5>New Controls for Changing Modes<\/h5>\n<p>Another contribution to the convenient and diverse user experience in v2.0 is the availability of two new controls for switching between view modes \u2013 toggle and selector (drop-down list). By default, our Event Calendar automatically activates one of the following options depending on the number of views added to the toolbar:<\/p>\n<ul>\n<li>toggle buttons with 3 views,<\/li>\n<li>dropdown list with more than 3 views.<\/li>\n<\/ul>\n<p>To define a particular control for switching calendar views manually, you should set it as a value in the <strong><a href=\"https:\/\/docs.dhtmlx.com\/eventcalendar\/api\/config\/js_eventcalendar_config_config\/#parameters\" rel=\"noopener\" target=\"_blank\">viewControl<\/a><\/strong> parameter of the Calendar config object:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> config <span class=\"sy0\">=<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; viewControl<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;toggle&quot;<\/span><span class=\"sy0\">,<\/span><span class=\"co1\">\/\/ &quot;auto&quot; | &quot;dropdown&quot; | &quot;none&quot;<\/span><br \/>\n&nbsp; views<span class=\"sy0\">:<\/span> views<br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Here is how view modes can be changed with toggle buttons:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/toggle-buttons.gif\" alt=\"DHTMLX Event Calendar v2.0 -  switching between modes with toggle buttons\" width=\"968\" height=\"525\" class=\"aligncenter size-full wp-image-10965\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/dmoijc47?tag=event_calendar&#038;mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><br \/>\nIf end-users don&#8217;t need to change view modes, you can hide the switcher via API.<\/p>\n<h5>Dimming Past Events and Showing Current Time Marker<\/h5>\n<p>Similar to Google Calendar, the new version of our event calendar library allows dimming the brightness of past events. It is aimed at simplifying the calendar navigation and ensuring better focus on current and upcoming events. To activate this way of displaying past events, you have to change the value of the <strong><a href=\"https:\/\/docs.dhtmlx.com\/eventcalendar\/api\/config\/js_eventcalendar_config_config\/#parameters\" rel=\"noopener\" target=\"_blank\">dimPastEvents<\/a><\/strong> parameter from <em>false<\/em> (set by default) to <em>true<\/em> in the <strong>config<\/strong> property of Event Calendar.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">new<\/span> eventCalendar.<span class=\"me1\">EventCalendar<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;#root&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp;config<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"co1\">\/\/ other configuration parameters<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;dimPastEvents<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Moreover, now you can add a special marker that will highlight the present day and time in your calendar.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/image3-1024x527.png\" alt=\"Event Calendar v2.0 - Current time marker\" width=\"1024\" height=\"527\" class=\"aligncenter size-large wp-image-10954\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/image3-1024x527.png 1024w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/image3-300x154.png 300w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/image3-768x395.png 768w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/image3.png 1267w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h5>Autoscrolling for Drag-and-Drop Actions<\/h5>\n<p>DHTMLX Event Calendar v2.0 has become more user-friendly in terms of rescheduling events. In this major update, we introduced auto-scrolling support to facilitate drag-and-drop operations with scheduled appointments. <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/02\/drag-n-drop.gif\" alt=\"DHTMLX Event Calendar v2.0 - autoscrolling\" width=\"968\" height=\"489\" class=\"aligncenter size-full wp-image-10966\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/dmoijc47?tag=event_calendar&#038;mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>This feature will make it much easier for end-users to drag and drop calendar items to the time slots that are out of the screen visibility zone.<\/p>\n<p>We invite you to review all features delivered in the new DHTMLX Event Calendar in the \u201c<a href=\"https:\/\/docs.dhtmlx.com\/eventcalendar\/news\/whats_new\/#version-20\" rel=\"noopener\" target=\"_blank\">What\u2019s new<\/a>\u201d section of the documentation. <\/p>\n<p>All necessary information on the migration to v2.0 is provided in the \u201c<a href=\"https:\/\/docs.dhtmlx.com\/eventcalendar\/news\/migration\/#11---20\" rel=\"noopener\" target=\"_blank\">Migration to newer versions<\/a>\u201d section. <\/p>\n<p>Don\u2019t miss an opportunity to practically estimate the latest Event Calendar version via a <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxEventCalendar\/download.shtml\" rel=\"noopener\" target=\"_blank\">free 30-day trial version<\/a>. For our current clients, v2.0 is available in their <a href=\"https:\/\/dhtmlx.com\/clients\/\" rel=\"noopener\" target=\"_blank\">Client\u2019s Area<\/a>.<\/p>\n<h5>Related Materials:<\/h5>\n<ul>\n<li><a href=\"https:\/\/docs.dhtmlx.com\/eventcalendar\/news\/whats_new\/#version-20\" rel=\"noopener\" target=\"_blank\">What\u2019s new in v2.0<\/a><\/li>\n<li><a href=\"https:\/\/docs.dhtmlx.com\/eventcalendar\/\" rel=\"noopener\" target=\"_blank\">DHTMLX Event Calendar documentation<\/a><\/li>\n<li><a href=\"https:\/\/snippet.dhtmlx.com\/dmoijc47?tag=event_calendar&#038;mode=wide\" rel=\"noopener\" target=\"_blank\">Code snippets<\/a><\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxEventCalendar\/download.shtml\" rel=\"noopener\" target=\"_blank\">Free 30-day trial version<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>It is high time to start writing the DHTMLX release history of 2023. So we are excited to present DHTMLX Event Calendar 2.0! This major update of our JavaScript &#8230;<\/p>\n","protected":false},"author":101014,"featured_media":10956,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70],"tags":[33,69],"class_list":["post-10951","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-releases","tag-all-posts","tag-eventcalendar"],"_links":{"self":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/10951","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/users\/101014"}],"replies":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/comments?post=10951"}],"version-history":[{"count":17,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/10951\/revisions"}],"predecessor-version":[{"id":10953,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/10951\/revisions\/10953"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media\/10956"}],"wp:attachment":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media?parent=10951"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/categories?post=10951"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/tags?post=10951"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}