{"id":13368,"date":"2025-02-11T18:18:17","date_gmt":"2025-02-11T15:18:17","guid":{"rendered":"https:\/\/dhtmlx.com\/blog\/?p=13368"},"modified":"2025-02-12T01:47:14","modified_gmt":"2025-02-11T22:47:14","slug":"creating-group-identical-events-js-scheduling-calendar-via-ui","status":"publish","type":"post","link":"https:\/\/dhtmlx.com\/blog\/creating-group-identical-events-js-scheduling-calendar-via-ui\/","title":{"rendered":"Creating a Group of Identical Events in JS Scheduling Calendar with Drag-and-Drop"},"content":{"rendered":"<p>DHTMLX Scheduler is a comprehensive scheduling solution that covers a wide range of needs related to planning events. Suppose you haven\u2019t found any features in our Scheduler documentation and you want to see them in your project in our Scheduler documentation. In that case, it is very likely that such functionalities can be implemented with a custom solution. This year, we\u2019ll continue exploring the customization capabilities of our <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxScheduler\/\" rel=\"noopener\" target=\"_blank\">JavaScript scheduling component<\/a>.<\/p>\n<p>Today, you\u2019ll learn how to enable the ability to easily add a range of similar events in the Week view of the calendar with drag-and-drop.<\/p>\n<h5>New Way to Schedule a Group of Events via UI<\/h5>\n<p>DHTMLX Scheduler is quite flexible when it comes to creating new events in a JavaScript calendar. End-users can plan various kinds of events, from basic one-time appointments to recurring activities based on various settings. But what if you need something in between? For instance, what if an end-user has a series of meetings (or other activities) in a similar format during the week? The use of the recurring events form is possible, but it may seem complex and time-consuming, especially when extra conditions are not required. Fortunately, the extensive API of our JavaScript scheduling component allows for the implementation of a custom solution like in the example below that we\u2019ll consider in more detail.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/02\/image3.gif\" alt=\"adding groups of events with drag-and-drop\" width=\"1864\" height=\"640\" class=\"aligncenter size-full wp-image-13375\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/82j3pey4?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>As you can see, this solution makes creating a group of identical events much easier and faster. To be more specific, one drag operation helps create copies of events for each day within the required period. This customization includes not only the functional capability to create new events (appointments) with the same timeframe for multiple days a week but also some visual elements like rendering marked timespans for copies of the event.  <\/p>\n<p>From the coding perspective, this solution requires the use of the Scheduler API (plugins, methods, and events) as well as some custom functions (<strong>compareTime<\/strong>, <strong>getDatesBetween<\/strong>, <strong>getWeekdayNumbers<\/strong>, and <strong>timeFixer<\/strong>). These functions are used to transform available data into required formats.<\/p>\n<p>Now we can proceed to the description of specific steps required for adding this functionality to your project.<\/p>\n<h6>Preparatory Step<\/h6>\n<p>You should start with a preparatory step, the result of which will be needed later. This includes enabling the plugin (limit) required for the visual part, setting optional configs, and creating variables.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">scheduler.<span class=\"me1\">plugins<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp;limit<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nscheduler.<span class=\"me1\">config<\/span>.<span class=\"me1\">time_step<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">10<\/span><span class=\"sy0\">;<\/span><br \/>\nscheduler.<span class=\"me1\">config<\/span>.<span class=\"me1\">first_hour<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">6<\/span><span class=\"sy0\">;<\/span><br \/>\nscheduler.<span class=\"me1\">config<\/span>.<span class=\"me1\">last_hour<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu0\">22<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nlet marked <span class=\"sy0\">=<\/span> <span class=\"kw2\">null<\/span><span class=\"sy0\">;<\/span><br \/>\nlet start<span class=\"sy0\">,<\/span> end<span class=\"sy0\">;<\/span><br \/>\nlet backward<span class=\"sy0\">;<\/span><br \/>\nlet dates <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\nlet daysToCreate <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Before we continue, it should also be noted that this customization is designed specifically for the Week view, while other views work in a regular mode. This limitation is enabled with the following condition:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>scheduler.<span class=\"me1\">getState<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">mode<\/span> <span class=\"sy0\">==<\/span> <span class=\"st0\">&quot;week&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><\/div><\/div>\n<h6>Step 1<\/h6>\n<p>Now, you should use the <strong>onEventDrag<\/strong> event. It is called when a new event is created by a drag in the Week view of the calendar. It is active until the end of the drag operation. This event helps collect dates during the event drag operation and add them to the variables declared in the previous step:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">scheduler.<span class=\"me1\">attachEvent<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;onEventDrag&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span> <span class=\"br0\">&#40;<\/span>id<span class=\"sy0\">,<\/span> mode<span class=\"sy0\">,<\/span> e<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; ...<br \/>\n&nbsp; &nbsp; <span class=\"me1\">start<\/span> <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">getEvent<\/span><span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">start_date<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; end <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">getActionData<\/span><span class=\"br0\">&#40;<\/span>e<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">date<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Thus, you\u2019ll get dates, when the copies of the initial event will be created.<\/p>\n<h6>Step 2<\/h6>\n<p>You create copies of the event using the custom <strong>getDatesBetween<\/strong> function that obtains a sequence of days between two dates and the <strong>getWeekdayNumbers<\/strong> function used to return numbers of these days.<\/p>\n<p>These functions could be combined into one, but our approach seems to be clearer:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">daysToCreate <span class=\"sy0\">=<\/span> getWeekdayNumbers<span class=\"br0\">&#40;<\/span>getDatesBetween<span class=\"br0\">&#40;<\/span>start<span class=\"sy0\">,<\/span> end<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\ndaysToCreate <span class=\"sy0\">=<\/span> daysToCreate.<span class=\"me1\">filter<\/span><span class=\"br0\">&#40;<\/span>el <span class=\"sy0\">=&gt;<\/span> el <span class=\"sy0\">!=<\/span> start.<span class=\"me1\">getDay<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><\/div><\/div>\n<h6>Step 3<\/h6>\n<p>Also, you\u2019ll need to use the custom <strong>compareTime<\/strong> function to check the direction of the event creation (forward or backward in time) by comparing hours and minutes:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">backward <span class=\"sy0\">=<\/span> compareTime<span class=\"br0\">&#40;<\/span>start<span class=\"sy0\">,<\/span> end<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>You will need this to correctly render placeholders for event copies.<\/p>\n<p>It is the foundation of the functional part for this customization. The whole block of code is the following:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">scheduler.<span class=\"me1\">attachEvent<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;onEventDrag&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span> <span class=\"br0\">&#40;<\/span>id<span class=\"sy0\">,<\/span> mode<span class=\"sy0\">,<\/span> e<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; start <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">getEvent<\/span><span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">start_date<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; end <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">getActionData<\/span><span class=\"br0\">&#40;<\/span>e<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">date<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; backward <span class=\"sy0\">=<\/span> compareTime<span class=\"br0\">&#40;<\/span>start<span class=\"sy0\">,<\/span> end<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; daysToCreate <span class=\"sy0\">=<\/span> getWeekdayNumbers<span class=\"br0\">&#40;<\/span>getDatesBetween<span class=\"br0\">&#40;<\/span>start<span class=\"sy0\">,<\/span> end<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; daysToCreate <span class=\"sy0\">=<\/span> daysToCreate.<span class=\"me1\">filter<\/span><span class=\"br0\">&#40;<\/span>el <span class=\"sy0\">=&gt;<\/span> el <span class=\"sy0\">!=<\/span> start.<span class=\"me1\">getDay<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<h6>Step 4<\/h6>\n<p>At the end of the drag operation, use the <strong>onDragEvent<\/strong> event to determine start and end dates for creating events forward and backward in time:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">scheduler.<span class=\"me1\">attachEvent<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;onDragEnd&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span>id<span class=\"sy0\">,<\/span> mode<span class=\"sy0\">,<\/span> e<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>scheduler.<span class=\"me1\">getState<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">mode<\/span> <span class=\"sy0\">==<\/span> <span class=\"st0\">&quot;week&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ store dates for event copies<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>backward <span class=\"sy0\">!=<\/span> <span class=\"sy0\">-<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; start <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">getActionData<\/span><span class=\"br0\">&#40;<\/span>e<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">date<\/span><span class=\"sy0\">;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">getEvent<\/span><span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">end_date<\/span><span class=\"sy0\">;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span> <span class=\"kw1\">else<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; start <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">getEvent<\/span><span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">start_date<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">getActionData<\/span><span class=\"br0\">&#40;<\/span>e<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">date<\/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><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<h6>Step 5<\/h6>\n<p>When the drag operation is finished, the parameters of the new event and its copies can be added via the lightbox. The <strong>onEventSave<\/strong> event will fire when the lightbox with data is saved.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">scheduler.<span class=\"me1\">attachEvent<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;onEventSave&quot;<\/span><span class=\"sy0\">,<\/span><span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span>id<span class=\"sy0\">,<\/span>ev<span class=\"sy0\">,<\/span>is_new<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><\/div><\/div>\n<p>The parameters (start, end) of the <strong>getDatesBetween<\/strong> function updated in the <strong>onDragEnd<\/strong> event are used to fill up an array of dates for creating event copies. <\/p>\n<p>In case, end-users change the event dates via the lightbox, you store new start and end parameters in the <strong>onEventSave<\/strong> event:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">start <span class=\"sy0\">=<\/span> ev.<span class=\"me1\">start_date<\/span><span class=\"sy0\">;<\/span> <br \/>\nend <span class=\"sy0\">=<\/span> ev.<span class=\"me1\">end_date<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>If the date array contains more than one date, you create a copy of the event for each day using the <strong>addEvent()<\/strong> method.<\/p>\n<p>Using the custom <strong>timeFixer<\/strong> function, you can separately control the dates (minutes\/hours) of event copies, so they match the initial event.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>datesToCreate.<span class=\"me1\">length<\/span> <span class=\"sy0\">&gt;<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; datesToCreate.<span class=\"me1\">forEach<\/span><span class=\"br0\">&#40;<\/span>el <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; scheduler.<span class=\"me1\">addEvent<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;start_date<span class=\"sy0\">:<\/span> timeFixer<span class=\"br0\">&#40;<\/span>el<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">fixedStart<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end_date<span class=\"sy0\">:<\/span> timeFixer<span class=\"br0\">&#40;<\/span>el<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">fixedEnd<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;text<span class=\"sy0\">:<\/span> ev.<span class=\"me1\">text<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><\/div><\/div>\n<p>After that, you clear the array of dates (<strong>datesToCreate<\/strong>):<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">datesToCreate <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>The default way to create events should be blocked (it will also be replaced by a copy) and the lightbox is hidden manually.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"co1\">\/\/ block default event creation<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; scheduler.<span class=\"me1\">hideLightbox<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw2\">false<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><\/div><\/div>\n<p>Now, it works as intended functionally, but it&#8217;s not entirely clear where the event copies will be displayed.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/02\/image2.gif\" alt=\"adding a group of events via UI\" width=\"1872\" height=\"636\" class=\"aligncenter size-full wp-image-13376\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/guaoq5sv?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>This issue can be solved by adding the rendering of placeholders for event copies. <\/p>\n<h6>Step 6<\/h6>\n<p>Since the event copies need to be rendered dynamically during the drag process, they are taken from the <strong>onEventDrag<\/strong> event.<\/p>\n<p>The placeholder is rendered with the <strong>markedTimespan()<\/strong> method. You\u2019ll also need a couple of variables (<strong>zonesStartTime<\/strong>, <strong>zonesEndTime<\/strong>). These variables will store formatted time for the <strong>markedTimespan()<\/strong> method. <\/p>\n<p>To get the formatted time, you\u2019ll have to take the the event time in the common format (hours\/minutes) and convert minutes to percentages of an hour using the custom <strong>convertMinutesToPercentage()<\/strong> method.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>backward <span class=\"sy0\">!=<\/span> <span class=\"sy0\">-<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; start <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">getEvent<\/span><span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">end_date<\/span><span class=\"sy0\">;<\/span> <br \/>\n&nbsp; &nbsp; zonesEndTime <span class=\"sy0\">=<\/span> `$<span class=\"br0\">&#123;<\/span>scheduler.<span class=\"me1\">getEvent<\/span><span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">end_date<\/span>.<span class=\"me1\">getHours<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span>.$<span class=\"br0\">&#123;<\/span>convertMinutesToPercentage<span class=\"br0\">&#40;<\/span>scheduler.<span class=\"me1\">getEvent<\/span><span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">end_date<\/span>.<span class=\"me1\">getMinutes<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span>`<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; zonesStartTime <span class=\"sy0\">=<\/span> `$<span class=\"br0\">&#123;<\/span>end.<span class=\"me1\">getHours<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span>.$<span class=\"br0\">&#123;<\/span>convertMinutesToPercentage<span class=\"br0\">&#40;<\/span>end.<span class=\"me1\">getMinutes<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span>`<span class=\"sy0\">;<\/span> <br \/>\n<span class=\"br0\">&#125;<\/span> <span class=\"kw1\">else<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; zonesStartTime <span class=\"sy0\">=<\/span> `$<span class=\"br0\">&#123;<\/span>start.<span class=\"me1\">getHours<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span>.$<span class=\"br0\">&#123;<\/span>convertMinutesToPercentage<span class=\"br0\">&#40;<\/span>start.<span class=\"me1\">getMinutes<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span>`<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; zonesEndTime <span class=\"sy0\">=<\/span> `$<span class=\"br0\">&#123;<\/span>end.<span class=\"me1\">getHours<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span>.$<span class=\"br0\">&#123;<\/span>convertMinutesToPercentage<span class=\"br0\">&#40;<\/span>end.<span class=\"me1\">getMinutes<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span>`<span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>Now you\u2019ve got days to render the placeholder (<strong>daysToCreate<\/strong>) and time in the required format (<strong>zonesStartTime<\/strong> and <strong>zonesEndTime<\/strong>).<\/p>\n<p>Here is the way to dynamically render placeholders during the event creation:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>mode <span class=\"sy0\">==<\/span> <span class=\"st0\">&quot;new-size&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"co1\">\/\/ Each time delete old placeholders<\/span><br \/>\n&nbsp; &nbsp; scheduler.<span class=\"me1\">unmarkTimespan<\/span><span class=\"br0\">&#40;<\/span>marked<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <br \/>\n<span class=\"co1\">\/\/ And render new placeholders for creating events<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy0\">+<\/span>start <span class=\"sy0\">&lt;<\/span> <span class=\"sy0\">+<\/span>end<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; marked <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">markTimespan<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; html<span class=\"sy0\">:<\/span> `<span class=\"sy0\">&lt;<\/span>div <span class=\"kw5\">class<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;marked_placeholder&quot;<\/span><span class=\"sy0\">&gt;<\/span>$<span class=\"br0\">&#123;<\/span>scheduler.<span class=\"me1\">templates<\/span>.<span class=\"me1\">event_date<\/span><span class=\"br0\">&#40;<\/span>start<span class=\"br0\">&#41;<\/span><span class=\"sy0\">+<\/span><span class=\"st0\">&quot; - &quot;<\/span><span class=\"sy0\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scheduler.<span class=\"me1\">templates<\/span>.<span class=\"me1\">event_date<\/span><span class=\"br0\">&#40;<\/span>end<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;\/<\/span>br<span class=\"sy0\">&gt;<\/span> New Event<span class=\"sy0\">&lt;<\/span>div<span class=\"sy0\">&gt;<\/span>`<span class=\"sy0\">,<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; days<span class=\"sy0\">:<\/span> daysToCreate<span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zones<span class=\"sy0\">:<\/span><span class=\"br0\">&#91;<\/span>zonesStartTime<span class=\"sy0\">*<\/span><span class=\"nu0\">60<\/span><span class=\"sy0\">,<\/span>zonesEndTime<span class=\"sy0\">*<\/span><span class=\"nu0\">60<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; css<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;highlighted_timespan&quot;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy0\">+<\/span>start <span class=\"sy0\">&gt;<\/span> <span class=\"sy0\">+<\/span>end<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; marked <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">markTimespan<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; html<span class=\"sy0\">:<\/span> `<span class=\"sy0\">&lt;<\/span>div <span class=\"kw5\">class<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;marked_placeholder&quot;<\/span><span class=\"sy0\">&gt;<\/span>$<span class=\"br0\">&#123;<\/span>scheduler.<span class=\"me1\">templates<\/span>.<span class=\"me1\">event_date<\/span><span class=\"br0\">&#40;<\/span>end<span class=\"br0\">&#41;<\/span><span class=\"sy0\">+<\/span><span class=\"st0\">&quot; - &quot;<\/span><span class=\"sy0\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scheduler.<span class=\"me1\">templates<\/span>.<span class=\"me1\">event_date<\/span><span class=\"br0\">&#40;<\/span>start<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;\/<\/span>br<span class=\"sy0\">&gt;<\/span> New Event<span class=\"sy0\">&lt;<\/span>div<span class=\"sy0\">&gt;<\/span>`<span class=\"sy0\">,<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; days<span class=\"sy0\">:<\/span> daysToCreate<span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zones<span class=\"sy0\">:<\/span><span class=\"br0\">&#91;<\/span>zonesStartTime<span class=\"sy0\">*<\/span><span class=\"nu0\">60<\/span><span class=\"sy0\">,<\/span>zonesEndTime<span class=\"sy0\">*<\/span><span class=\"nu0\">60<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; css<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;highlighted_timespan&quot;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span> <br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>One last thing to mention, all markTimespan should be deleted after the event and its copies. It is done right after the lightbox closure.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">scheduler.<span class=\"me1\">attachEvent<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;onAfterLightbox&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ remove marked timespan after closing the lightbox<\/span><br \/>\n&nbsp; &nbsp; scheduler.<span class=\"me1\">unmarkTimespan<\/span><span class=\"br0\">&#40;<\/span>marked<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> &nbsp;<br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<details>\n<summary>Click to see the final code<\/summary>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;height:600px;\"><div class=\"javascript codecolorer\">scheduler.<span class=\"me1\">attachEvent<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;onEventDrag&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span> <span class=\"br0\">&#40;<\/span>id<span class=\"sy0\">,<\/span> mode<span class=\"sy0\">,<\/span> e<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>scheduler.<span class=\"me1\">getState<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">mode<\/span> <span class=\"sy0\">==<\/span> <span class=\"st0\">&quot;week&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; let zonesStartTime<span class=\"sy0\">,<\/span> zonesEndTime<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ store dates for marked timespans<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; start <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">getEvent<\/span><span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">start_date<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; end <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">getActionData<\/span><span class=\"br0\">&#40;<\/span>e<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">date<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; backward <span class=\"sy0\">=<\/span> compareTime<span class=\"br0\">&#40;<\/span>start<span class=\"sy0\">,<\/span> end<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ get hour\/minute part for `zones` calculation *backward creation*<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>backward <span class=\"sy0\">!=<\/span> <span class=\"sy0\">-<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; start <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">getEvent<\/span><span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">end_date<\/span><span class=\"sy0\">;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zonesEndTime <span class=\"sy0\">=<\/span> `$<span class=\"br0\">&#123;<\/span>scheduler.<span class=\"me1\">getEvent<\/span><span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">end_date<\/span>.<span class=\"me1\">getHours<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span>.$<span class=\"br0\">&#123;<\/span>convertMinutesToPercentage<span class=\"br0\">&#40;<\/span>scheduler.<span class=\"me1\">getEvent<\/span><span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">end_date<\/span>.<span class=\"me1\">getMinutes<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span>`<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zonesStartTime <span class=\"sy0\">=<\/span> `$<span class=\"br0\">&#123;<\/span>end.<span class=\"me1\">getHours<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span>.$<span class=\"br0\">&#123;<\/span>convertMinutesToPercentage<span class=\"br0\">&#40;<\/span>end.<span class=\"me1\">getMinutes<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span>`<span class=\"sy0\">;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span> <span class=\"kw1\">else<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ get hour\/minute part for `zones` calculation normal creation<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zonesStartTime <span class=\"sy0\">=<\/span> `$<span class=\"br0\">&#123;<\/span>start.<span class=\"me1\">getHours<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span>.$<span class=\"br0\">&#123;<\/span>convertMinutesToPercentage<span class=\"br0\">&#40;<\/span>start.<span class=\"me1\">getMinutes<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span>`<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zonesEndTime <span class=\"sy0\">=<\/span> `$<span class=\"br0\">&#123;<\/span>end.<span class=\"me1\">getHours<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span>.$<span class=\"br0\">&#123;<\/span>convertMinutesToPercentage<span class=\"br0\">&#40;<\/span>end.<span class=\"me1\">getMinutes<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span>`<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; daysToCreate <span class=\"sy0\">=<\/span> getWeekdayNumbers<span class=\"br0\">&#40;<\/span>getDatesBetween<span class=\"br0\">&#40;<\/span>start<span class=\"sy0\">,<\/span> end<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; daysToCreate <span class=\"sy0\">=<\/span> daysToCreate.<span class=\"me1\">filter<\/span><span class=\"br0\">&#40;<\/span>el <span class=\"sy0\">=&gt;<\/span> el <span class=\"sy0\">!=<\/span> start.<span class=\"me1\">getDay<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>mode <span class=\"sy0\">==<\/span> <span class=\"st0\">&quot;new-size&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; scheduler.<span class=\"me1\">unmarkTimespan<\/span><span class=\"br0\">&#40;<\/span>marked<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy0\">+<\/span>start <span class=\"sy0\">&lt;<\/span> <span class=\"sy0\">+<\/span>end<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; marked <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">markTimespan<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; html<span class=\"sy0\">:<\/span> `<span class=\"sy0\">&lt;<\/span>div <span class=\"kw5\">class<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;marked_placeholder&quot;<\/span><span class=\"sy0\">&gt;<\/span>$<span class=\"br0\">&#123;<\/span>scheduler.<span class=\"me1\">templates<\/span>.<span class=\"me1\">event_date<\/span><span class=\"br0\">&#40;<\/span>start<span class=\"br0\">&#41;<\/span><span class=\"sy0\">+<\/span><span class=\"st0\">&quot; - &quot;<\/span><span class=\"sy0\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scheduler.<span class=\"me1\">templates<\/span>.<span class=\"me1\">event_date<\/span><span class=\"br0\">&#40;<\/span>end<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;\/<\/span>br<span class=\"sy0\">&gt;<\/span> New Event<span class=\"sy0\">&lt;<\/span>div<span class=\"sy0\">&gt;<\/span>`<span class=\"sy0\">,<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; days<span class=\"sy0\">:<\/span> daysToCreate<span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zones<span class=\"sy0\">:<\/span><span class=\"br0\">&#91;<\/span>zonesStartTime<span class=\"sy0\">*<\/span><span class=\"nu0\">60<\/span><span class=\"sy0\">,<\/span>zonesEndTime<span class=\"sy0\">*<\/span><span class=\"nu0\">60<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; css<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;highlighted_timespan&quot;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy0\">+<\/span>start <span class=\"sy0\">&gt;<\/span> <span class=\"sy0\">+<\/span>end<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; marked <span class=\"sy0\">=<\/span> scheduler.<span class=\"me1\">markTimespan<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; html<span class=\"sy0\">:<\/span> `<span class=\"sy0\">&lt;<\/span>div <span class=\"kw5\">class<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;marked_placeholder&quot;<\/span><span class=\"sy0\">&gt;<\/span>$<span class=\"br0\">&#123;<\/span>scheduler.<span class=\"me1\">templates<\/span>.<span class=\"me1\">event_date<\/span><span class=\"br0\">&#40;<\/span>end<span class=\"br0\">&#41;<\/span><span class=\"sy0\">+<\/span><span class=\"st0\">&quot; - &quot;<\/span><span class=\"sy0\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scheduler.<span class=\"me1\">templates<\/span>.<span class=\"me1\">event_date<\/span><span class=\"br0\">&#40;<\/span>start<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;\/<\/span>br<span class=\"sy0\">&gt;<\/span> New Event<span class=\"sy0\">&lt;<\/span>div<span class=\"sy0\">&gt;<\/span>`<span class=\"sy0\">,<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; days<span class=\"sy0\">:<\/span> daysToCreate<span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zones<span class=\"sy0\">:<\/span><span class=\"br0\">&#91;<\/span>zonesStartTime<span class=\"sy0\">*<\/span><span class=\"nu0\">60<\/span><span class=\"sy0\">,<\/span>zonesEndTime<span class=\"sy0\">*<\/span><span class=\"nu0\">60<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; css<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;highlighted_timespan&quot;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/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> <br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<\/details>\n<p>Following the instructions above, you can add a convenient way for creating groups of events in the Week view with drag-and-drop like in our <a href=\"https:\/\/snippet.dhtmlx.com\/82j3pey4?mode=wide\" rel=\"noopener\" target=\"_blank\">sample<\/a>.<\/p>\n<h5>Wrapping Up<\/h5>\n<p>In this blog post, we\u2019ve reviewed a useful customization that can contribute to more convenient event management and enhanced usability of a JavaScript scheduling solution in a web project. We reviewed just one example of implementing this kind of custom functionality, which can be modified even further and adopted for specific use-case scenarios.  The rich and well-documented API of DHTMLX Scheduler certainly helps to cover most of your scheduling needs, while we will continue sharing with you solutions in DHTMLX tutorials to address more specific requirements.<\/p>\n<h5>Related Materials<\/h5>\n<ul>\n<li><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/howtostart_guides.html\" rel=\"noopener\" target=\"_blank\">DHTMLX Scheduler documentation<\/a><\/li>\n<li><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/samples\/index.html?sample=%2701_initialization_loading\/01_basic_init.html%27&#038;filter=%27%27\" rel=\"noopener\" target=\"_blank\">DHTMLX Scheduler samples<\/a><\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/blog\/tutorials\/?tag=dhtmlxscheduler\" rel=\"noopener\" target=\"_blank\">DHTMLX Scheduler tutorials<\/a><\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxScheduler\/download.shtml\" rel=\"noopener\" target=\"_blank\">Free 30-day trial version<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>DHTMLX Scheduler is a comprehensive scheduling solution that covers a wide range of needs related to planning events. Suppose you haven\u2019t found any features in our Scheduler documentation and &#8230;<\/p>\n","protected":false},"author":101014,"featured_media":13374,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71],"tags":[33,15],"class_list":["post-13368","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-all-posts","tag-dhtmlxscheduler"],"_links":{"self":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/13368","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=13368"}],"version-history":[{"count":12,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/13368\/revisions"}],"predecessor-version":[{"id":13383,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/13368\/revisions\/13383"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media\/13374"}],"wp:attachment":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media?parent=13368"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/categories?post=13368"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/tags?post=13368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}