Skip to content

Instantly share code, notes, and snippets.

@fmassicano
Forked from bunkat/index.html
Last active August 28, 2018 11:20
Show Gist options
  • Save fmassicano/c1be96f1ec4ceba4c6fe0439b8306fbb to your computer and use it in GitHub Desktop.
Save fmassicano/c1be96f1ec4ceba4c6fe0439b8306fbb to your computer and use it in GitHub Desktop.
Swimlane Chart using d3.js
license: mit
height: 500
scrolling: no
border: yes

A new Swimlane Timeline version

  • d3.v2 -> d3.v4
<!--
The MIT License (MIT)
Copyright (c) 2013 [email protected]
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-->
<html>
<head>
<title>Swimlane using d3.js</title>
<script type="text/javascript" src="https://d3js.org/d3.v4.js"></script>
<script type="text/javascript" src="randomData.js"></script>
<style>
.chart {
shape-rendering: crispEdges;
}
.mini text {
font: 9px sans-serif;
}
.main text {
font: 12px sans-serif;
}
.month text {
text-anchor: start;
}
.todayLine {
stroke: blue;
stroke-width: 1.5;
}
.axis line, .axis path {
stroke: black;
}
.miniItem {
stroke-width: 6;
}
.future {
stroke: gray;
fill: #ddd;
}
.past {
stroke: green;
fill: lightgreen;
}
.brush .extent {
stroke: gray;
fill: blue;
fill-opacity: .165;
}
</style>
</head>
<body>
<script type="text/javascript">
var data = randomData()
, lanes = data.lanes
, items = data.items
, now = new Date();
var margin = {top: 20, right: 15, bottom: 15, left: 60}
, width = 960 - margin.left - margin.right
, height = 500 - margin.top - margin.bottom
, miniHeight = lanes.length * 12 + 50
, mainHeight = height - miniHeight - 50;
var x = d3.scaleTime()
.domain([d3.timeSunday(d3.min(items, function(d) { return d.start; })),
d3.max(items, function(d) { return d.end; })])
.range([0, width]);
var x1 = d3.scaleTime().range([0, width]);
var ext = d3.extent(lanes, function(d) { return d.id; });
var y1 = d3.scaleLinear().domain([ext[0], ext[1] + 1]).range([0, mainHeight]);
var y2 = d3.scaleLinear().domain([ext[0], ext[1] + 1]).range([0, miniHeight]);
var chart = d3.select('body')
.append('svg:svg')
.attr('width', width + margin.right + margin.left)
.attr('height', height + margin.top + margin.bottom)
.attr('class', 'chart');
chart.append('defs').append('clipPath')
.attr('id', 'clip')
.append('rect')
.attr('width', width)
.attr('height', mainHeight);
var main = chart.append('g')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')
.attr('width', width)
.attr('height', mainHeight)
.attr('class', 'main');
var mini = chart.append('g')
.attr('transform', 'translate(' + margin.left + ',' + (mainHeight + 60) + ')')
.attr('width', width)
.attr('height', miniHeight)
.attr('class', 'mini');
// draw the lanes for the main chart
main.append('g').selectAll('.laneLines')
.data(lanes)
.enter().append('line')
.attr('x1', 0)
.attr('y1', function(d) { return d3.format(".1f")((y1(d.id)) + 0.5); })
.attr('x2', width)
.attr('y2', function(d) { return d3.format(".1f")((y1(d.id)) + 0.5); })
.attr('stroke', function(d) { return d.label === '' ? 'white' : 'lightgray' });
main.append('g').selectAll('.laneText')
.data(lanes)
.enter().append('text')
.text(function(d) { return d.label; })
.attr('x', -10)
.attr('y', function(d) { return y1(d.id + .5); })
.attr('dy', '0.5ex')
.attr('text-anchor', 'end')
.attr('class', 'laneText');
// draw the lanes for the mini chart
mini.append('g').selectAll('.laneLines')
.data(lanes)
.enter().append('line')
.attr('x1', 0)
.attr('y1', function(d) { return d3.format(".1f")((y2(d.id)) + 0.5); })
.attr('x2', width)
.attr('y2', function(d) { return d3.format(".1f")((y2(d.id)) + 0.5); })
.attr('stroke', function(d) { return d.label === '' ? 'white' : 'lightgray' });
mini.append('g').selectAll('.laneText')
.data(lanes)
.enter().append('text')
.text(function(d) { return d.label; })
.attr('x', -10)
.attr('y', function(d) { return y2(d.id + .5); })
.attr('dy', '0.5ex')
.attr('text-anchor', 'end')
.attr('class', 'laneText');
// draw the x axis
var xDateAxis = d3.axisBottom(x)
.tickArguments(d3.timeMondays, (x.domain()[1] - x.domain()[0]) > 15552e6 ? 2 : 1)
.tickFormat(d3.timeFormat('%d'))
.tickSize(6);
var x1DateAxis = d3.axisBottom(x1)
.tickArguments(d3.timeDays,1)
.tickFormat(d3.timeFormat('%a %d'))
.tickSize(6);
var xMonthAxis = d3.axisTop(x)
.tickArguments(d3.timeMonths, 1)
.tickFormat(d3.timeFormat('%b %Y'))
.tickSize(15);
var x1MonthAxis = d3.axisTop(x1)
.tickArguments(d3.timeMondays, 1)
.tickFormat(d3.timeFormat('%b - Week %W'))
.tickSize(15);
main.append('g')
.attr('transform', 'translate(0,' + mainHeight + ')')
.attr('class', 'main axis date')
.call(x1DateAxis);
main.append('g')
.attr('transform', 'translate(0,0.5)')
.attr('class', 'main axis month')
.call(x1MonthAxis)
.selectAll('text')
.attr('dx', 5)
.attr('dy', 12);
mini.append('g')
.attr('transform', 'translate(0,' + miniHeight + ')')
.attr('class', 'axis date')
.call(xDateAxis);
mini.append('g')
.attr('transform', 'translate(0,0.5)')
.attr('class', 'axis month')
.call(xMonthAxis)
.selectAll('text')
.attr('dx', 5)
.attr('dy', 12);
// draw a line representing today's date
main.append('line')
.attr('y1', 0)
.attr('y2', mainHeight)
.attr('class', 'main todayLine')
.attr('clip-path', 'url(#clip)');
mini.append('line')
.attr('x1', x(now) + 0.5)
.attr('y1', 0)
.attr('x2', x(now) + 0.5)
.attr('y2', miniHeight)
.attr('class', 'todayLine');
// draw the items
var itemRects = main.append('g')
.attr('clip-path', 'url(#clip)');
mini.append('g').selectAll('miniItems')
.data(getPaths(items))
.enter().append('path')
.attr('class', function(d) { return 'miniItem ' + d.class; })
.attr('d', function(d) { return d.path; });
// invisible hit area to move around the selection window
mini.append('rect')
.attr('pointer-events', 'painted')
.attr('width', width)
.attr('height', miniHeight)
.attr('visibility', 'hidden')
.on('mouseup', moveBrush);
// draw the selection area
var brush = d3.brush()
.extent([d3.timeMonday(now),d3.timeSaturday.ceil(now)])
.on("brush", display);
mini.append('g')
.attr('class', 'x brush')
.call(brush)
.selectAll('rect')
.attr('y', 1)
.attr('height', miniHeight - 1);
mini.selectAll('rect.background').remove();
display();
function display () {
var rects, labels
, minExtent = d3.timeDay(brush.extent()[0])
, maxExtent = d3.timeDay(brush.extent()[1])
, visItems = items.filter(function (d) { return d.start < maxExtent && d.end > minExtent});
mini.select('.brush').call(brush.extent([minExtent, maxExtent]));
x1.domain([minExtent, maxExtent]);
if ((maxExtent - minExtent) > 1468800000) {
x1DateAxis.tickArguments(d3.timeMondays, 1).tickFormat(d3.timeFormat('%a %d'))
x1MonthAxis.tickArguments(d3.timeMondays, 1).tickFormat(d3.timeFormat('%b - Week %W'))
}
else if ((maxExtent - minExtent) > 172800000) {
x1DateAxis.tickArguments(d3.timeDays, 1).tickFormat(d3.timeFormat('%a %d'))
x1MonthAxis.tickArguments(d3.timeMondays, 1).tickFormat(d3.timeFormat('%b - Week %W'))
}
else {
x1DateAxis.tickArguments(d3.timeHours, 4).tickFormat(d3.timeFormat('%I %p'))
x1MonthAxis.tickArguments(d3.timeDays, 1).tickFormat(d3.timeFormat('%b %e'))
}
//x1Offset.range([0, x1(d3.time.day.ceil(now) - x1(d3.time.day.floor(now)))]);
// shift the today line
main.select('.main.todayLine')
.attr('x1', x1(now) + 0.5)
.attr('x2', x1(now) + 0.5);
// update the axis
main.select('.main.axis.date').call(x1DateAxis);
main.select('.main.axis.month').call(x1MonthAxis)
.selectAll('text')
.attr('dx', 5)
.attr('dy', 12);
// upate the item rects
rects = itemRects.selectAll('rect')
.data(visItems, function (d) { return d.id; })
.attr('x', function(d) { return x1(d.start); })
.attr('width', function(d) { return x1(d.end) - x1(d.start); });
rects.enter().append('rect')
.attr('x', function(d) { return x1(d.start); })
.attr('y', function(d) { return y1(d.lane) + .1 * y1(1) + 0.5; })
.attr('width', function(d) { return x1(d.end) - x1(d.start); })
.attr('height', function(d) { return .8 * y1(1); })
.attr('class', function(d) { return 'mainItem ' + d.class; });
rects.exit().remove();
// update the item labels
labels = itemRects.selectAll('text')
.data(visItems, function (d) { return d.id; })
.attr('x', function(d) { return x1(Math.max(d.start, minExtent)) + 2; });
labels.enter().append('text')
.text(function (d) { return 'Item\n\n\n\n Id: ' + d.id; })
.attr('x', function(d) { return x1(Math.max(d.start, minExtent)) + 2; })
.attr('y', function(d) { return y1(d.lane) + .4 * y1(1) + 0.5; })
.attr('text-anchor', 'start')
.attr('class', 'itemLabel');
labels.exit().remove();
}
function moveBrush () {
var origin = d3.mouse(this)
, point = x.invert(origin[0])
, halfExtent = (brush.extent()[1].getTime() - brush.extent()[0].getTime()) / 2
, start = new Date(point.getTime() - halfExtent)
, end = new Date(point.getTime() + halfExtent);
brush.extent([start,end]);
display();
}
// generates a single path for each item class in the mini display
// ugly - but draws mini 2x faster than append lines or line generator
// is there a better way to do a bunch of lines as a single path with d3?
function getPaths(items) {
var paths = {}, d, offset = .5 * y2(1) + 0.5, result = [];
for (var i = 0; i < items.length; i++) {
d = items[i];
if (!paths[d.class]) paths[d.class] = '';
paths[d.class] += ['M',x(d.start),(y2(d.lane) + offset),'H',x(d.end)].join(' ');
}
for (var className in paths) {
result.push({class: className, path: paths[className]});
}
return result;
}
</script>
</body>
</html>
�PNG

IHDR�x���iCCPkCGColorSpaceGenericRGB8��U]hU>�sg#$�Sl4�t�? % �V4�����6n�I6�"�d��Θ��83���OEP|1�Ŀ�� (��>�/�
%�� (>���P苦�;3�i���e�|��{�g�蹪X����-2�s���=+�����WQ+]�L6O w�[�C�{_�������F qb�� ���U�vz��?�Z�b�1@�/z��c��s>~�if�,�ӈUSj������F �1��_�Mj���b�uݠ�p�a��m�h��mçϙ�>��a\�+5%��Q�K���F��km}��ۖ��?��ޚ���D\���������!~�6�,�-��7��S�ث��Ŝ�vķ5Z��;���[���r�mS�����5��{yD���yH�}r�9��|��-�����ă��FA������Jj�I.��[/�]m���K 7�K���R��D��r��Y�Q��O�-����Q��|�|�6��� � (�0��
MXd(@��h��2��_�f��<�:�����”���_���δ*d�>������e�\c?~,7?& ك�^2I��q2"y�<M���d���JlE^<7����3R��E�9���`�3*L\S׬,��#�)�]���_�\�,7Q����W��_���2�+�j���W�r�Z̻�L��lXswUm��љʼn��q��WF~�ə��]<Yo.F���j�VN�D���,�'}(�ƽ�}�}�}�}�]�;˝��.ps_��j�Z�{y�g�k�J!#lr�6�Qa2�' cBQ؁�����/�=c��\�.V����M�UUT�p�)VoM8�A�$Cd��6T��W�"�O�RiS;S���A���v�m��թn�R��c�}Y�:n� �wKғb�6*���舨��L�hS��mZ�����2�[.G�� ��?���.⎴����#n���8�ڲ���H| �������2x~�����s��-��7;����t�>@��g���|U\ � pHYs  ��YiTXtXML:com.adobe.xmp<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.4.0">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:tiff="http://ns.adobe.com/tiff/1.0/">
<tiff:Orientation>1</tiff:Orientation>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
L�'Y@IDATx� �]Gu&^�޷��o�Z�%[��E�m������![�l`��ɦv�0qB�dbτ@� XCL�`0���e[�%YKK�n��������_�W��{��խ�e\���U�N�:uN�� ��2��j*�ȁW|~�M�&��?+�` إ�c�Ͱ:l/l6 � "�ߕx� ML
��͋$�5<3��;�-��>Q{[�%.�Us�9��(���Fa�a�Î�N�a)y�v�%�̻Q�!XlS�=��2X/� �,�Ŗ鲬��35e$g��,é���Xf�Ͱq����l�%�Md ���.��"�PTf2�'`�"r2Ù�1�#%w�~�, ���2Ѷ�n�M��`Y��JWKY�|3��OŦ��?��b���U��d
Nל�b^\ʧb'3Yk2-Oî�W+���׷�����O��D�wg�b&w¶ �hv���=�kz���.�� �7{�d.�jn�n�����]v3sA�.�K �E��\�i��jk�6�r(w*����`��e����#k�>ا`),�}�4 ;\z��' e���9����a�����J� !�Y�r�6� �ddzLKK>)ȤU)�rc�3�����] �����~#��],5�/?�\ ��~ΟӐk��b��6dw�Mң�T�X��`Y��p� �3��W��TT�O��?�
�� jH��*ֳ�1)�L�è�4�%S#�ؔ���dE� f�Ym��2D=UfV�Yh�f@�9Y�\���2Ă�\[k�
S�Y�����B�|�8k@*�P�+��l��Z�Qf��4īޥ�E��У�@�y�Ö���������Y��L�,���B�5a[�<�"�~�4�ʀ�-QJ$��2^frw��zw�S��� ͛N��}}�����r����?}������y�-�k��N�뺀� %rI�t����al@�'F&�~���o����*A΄>����3Aq��PI�G�G�mK1 nXy�����̣���RB�d� ё����q�����lK�5��G���^F��s������6xv=�K6_��Эk�_�F��$O.�}:�)0�RGp�?����t��ſ���Եɳ�k{E-B�W�qVJ`-ŬV8�sN�)fU Z@ �6�͒�Ғ���p��=�U�5�P��W� �(�E��jT��DwT�D�! 00�4�P� �V�(�s�����ٯ0��0L�Ww>�W�Wܹ‚b�84۞�E��Yo�cQZ�7�f�(�����(P�a�YHDy�{ n� �C�eL��k�@*�(��n�~��"�j)�l�|�2���3�0�~jo���<�Ơ���>�h��VP���C�M��[��B� �m@!=�ZE�$�Y�� �ض�t���=��&�0(���c�b�{�� h�jZ>��<�ȷ��7 � �o�Ԏ�t�_PZ���&���Z�Ry�I�f;�!�D�f�RF�r�#Gts��s�䵈,�)OJ����
��F^CpT���H��G��~i�TTU[��9���<�9
9�&�hkD�)SdY��/���_ͯ�=(ߩx^�T"-a�I�� ����F�� &E ��J1�*��o���AE�ۋ���]�XN�0x]�F�{E��&Ѷ�MU��!+? �>
�tԚ$,��e�b�S��y.��$ĺ�# �HcX�T%�)�+�i������_�|g�8���Bb�ŢE)�����l+-�=�9�������r*BMS�ua&� ��E�M9�ᇢ�MV~˒�I*���N��L��c��#t( ���c�衢��6x̲������쫦6�b*Q�~�,,'l����D.k�nX*'�r��/ �`�^Z*�I+�4�TYP����̍�1�dWb��>M֢Ģx,aJ3��pn��ZA)�t'�
I� 'si��J)�å�#��' kHe� �:��Q��B�lcW#������<�ߕ % ��Z�I&�T��]Վ����ZĀX[6�(1�8 ×K�`������,]_ ��q�-%A�K��aAژ.�y���9�+��b�Ɯ! s� ����Ox �V���2�)�訧BV��j7|5,q(qtÝK���f��c$y���X����_�/
V���l�']��P�^�0�P
���]��ܷm��h�P�|�Z�y�����dɄ9>8���>�wx@�C��Y��'�Ja)�AP �F��.X�Ν���2� ^��nl�(����ǛO懓�rI�� ����m[���L&����1a��|�X�hڜ�*��ٙLƛJ�8�(Ӆ8.�A�9'x��`c%և�}��K����fZ3�vKK��a�{׮]g' {�eHO ��^Ct
qo罅����V�A�J�g/��ó�h��4T/�'u3cZ��г����r���rH�B&�m5��-��<��k���r~��Z�`[Yi�J��b-� Fצ����Zصb���{���r�F�=�=5e|��
�l�R.��Xi�_H�"[?-#0*�i� ���!�l>�D] �m ����x ^�'��E�EY W�����A��r� r�9�Ȉ=���>w�~aiŞ��bs�;�AACx �����I���j|��N�S���X�l�e����=v���C�PaQdQ
� {>�7�Z~SӃ��߰���C�9�*�S�}(�ea�����^�G�;�ı��Tβ?7��ʹ����h����l�J,����6]9�B�(��6|h�b����0(��%r�/!�����:\�7�j���^ �vyk�$��t�."-*�*܅|���݃u���@��߼�͇[����^#V�M���k����z{�gx�aN�� �}>��i��O>P�xl%�s����3T�C�>2^���v���T0x)�0�arJ���K�`$aM������ :S�`�F�qCh�C}C߿�;�yz���oyǢ�?��zRE�*�9WFQ�C��t��#(�+x���MW�2.��D�A�t;�_�� K?~���a�?��w ��E��C�)��oE���
���ջ����ylh��on�ͷ�9/�.�k�t�[o���H����4܈�9���0��T!w Q *q@9��`Z����Cz�םK�+��e�x,���yQ��2~�Aϧ����؂e�`����U�{�]ߺu�"U�~j��6�۷�"uM+:��9��l��ܵ�Q=g��!�SIM\m2��TG����9����D1k1�ـ�w=��ۺy��6�7�����>�[^��bK[�h�|6d��T�t\�� O� ���M��N�K< ���Db2Ņ<eSK1�rJ�J
7�g�`�� ���d_�� dB�!�2�FeZv}g��L�� �������?��;���Ɗ\?
�셕� � ����̉�N".���Т�u3�
Ml+�h
G}g����>2"[u��>�����Z!�+���Lӫ\�" ����[�':�w��=�}��'�����h2ѓ�c�ZJ��'�v��B��O *�������C#rK�?��W�ƒ�Ja�A5DR�U,zPcV�2j)&Q�Z~W�X��1�;)�^�B���}v6�=�B����~$ї8���ύ�2�p� �����(�+M9V�I��DVL��0�eHC�Fg�Լ�Y�9��b�H� �Q�&���b�:�>����t“Q��s�f�9G����k�m<�4��@�3~t\������#.�o���}�r��`�T��hZ �4(Z.o +�lJ͛A3eK��C�����gH�RLJ,y� �XvDi�h*���5dž� Q�K�Eq� �6s��Ǝ -=)��l��0`�9����r�VB��›:E�!,r��͍�l��-[h:,�~���[�L�cPZ��D���tY��ë~g��c�� �@�I�����~,�H�U��p�l��P+�_��5�� �C��m��M^�B�;�ԱR릁)�Tl�"^�V5K���m~���xJńRh���a�QK�"����N;`��ݭc���7��Q�����3z��/̭EfE��ٖGH��$� ���/�&.���J��L��Q��9W��[!lu�v�k��%����� 5g�*���w�Z�e�N�r�����=C�T+&۹'a��lnr~��E�H��#a�8#�6Vl�m�65+>�`�`Y@�yp8�����UJ!�*�2�C�&M�)BŔM�R��w�CX�Ve7G��߫��r��,�(��ɺ�$w,�۔}�lIe<Gr�S)
���*Y<�٭^����P�N���Eq��n.��[�Sv�� u�a*b�]U�*�a^5�r�,9�Zke4n;�rW��,G6� �9�yaT�D���Y-%TdOC1�%��ﵾ�n2Ы?�l� �N�繎�"�+�rm
΁�̈́_՘�3J�H��2_L MK !��s�lbZp �OX��Z'�٘�,��� k�)%,�&��L���vi�CM|���kZ��{>��:iJ�cd<VWy�/�|�c��:� ��� ,lӘ���4�#
f��@Ǡ4X���#���L�����S�[��E'8Zv<�`Ul�_���1B�~1@d�ھ��@M+��@����Bl[��M��b�G��h:۷�W/:�﷽aOH X�w�O�Mk7�O�O0U>�y��x@4���zuo���GC��B&�s�Υak��$�B�g�8bY63)f����e%�=48�[�*�*�5&�!64:�3��q���e)J�<S�3z�y}����ѳ�2q��%��5�-K�*rw����W�F��x�6|u�o��-��V��x��������Bѵ�+y�kYf�qI�.Gv�=��ަS�?�LL�c� Ӆ�Yj�y&�?�5�m�X9�3�Af����`��՛��f]{������k�'V��f��>.���6,n���>�s����)��W,���������+�p+�)l�|C���YY���ꥇy�ޙ�P�Pә����=�۷�H[�t�0�[I��@�>�u�ό��iS�w���Ѝ8��+��؉n'�IO�?P(4��{F bX[��Ow�tfp�eA.M�E�=�A4���iv��Mk1[2�40�2��n���(x�/��}ɾ@���Dۙ�j'l��0��ec!�ƙ�PA+huf]6�?��@d%M�I��N�hU�%��%u�~9:�f�+~Λ�a�F��C�]v�Z|sB���f�%3���ݲ�-� FB톡�b�𩾁���m?z1h�~���eN��.�Ѩn�qK~c�����`:7�kA�g�]�^Wsk˭��e�LDv0k�xd���N�\A��Ol���* K�e�fr/�^\��\����_���2�JE ��>���F=�N%����}���;������u��ڛ�-z=;��@bPP%�D��tX\�1ƴ,��H�'ƾ��[�H~7�?Y�Y�����*��W�"~g>���#@�gEâΎ�k:�R�i�aU�����!�{j��Ur�z��i<�]J�pyG�=��r�{�ɬ\ߋ�?t,�A_�|v��@�����5U *�d�#�ճ�1��O��ᩆWad�3�az�u!��R_?.k �B����*�E{k�־�����9�-����c�ܡ��p'l��z_�Xw��?#vnڴIl�c{�|�P�秺�e,���)���׹u�j�4,_�b�tѠO��(���eeĭS!L��:;;�%L455E��y�f�T��L�9�D��歛˴x��<�K�P����v�q�)o���9��b�+�� �)�͍�Ef(#� k1m@W[b��zV�����8�O��^}����Vs�"��e���J��b�e䘊���7 I0�D�i��c솑Jѽ� �Ȋ�D|ƍ�9�dN`�l:"�U����弛 g ��׍G��ʍ��)V��y|nG����M��#����e{�^���.��m�'����lL�TTt����3<<�����n|ʫ�����vF<�q���L��}�OdFҖ7������ r���A [�Dۺ6{�gB�u�q��n^�$W6r� ��)�{�;�����wep�/�V���)���+����Lp Ӂ��p,��ױβ�uf�Q�@�Ӛ� �I8�4�~\*���8-ǖf�M�[�м����y�u-"���p[$� �P�"թ"�[�]��3Պ�����'�2Ov��wvCe�HZ1����:"(�OL�T��h�4�}�/0���❻a��r���wn8�T͹�t�si��‘��뉁���}�ٌ͌f�Y���Z$Њy���#<`��H�0�&��e��KuX|;>��+�b�p+QDeG�<�C;�`��_V�5W3i3:�G�܌=�Z�?��7nZ!�o�";�n
E��D�u��_\ψ�9�Y��KrÌ����d���W�R1�F���(,�~%�3�TN2�w��9�߿RԷ׋,J=O�#�&��s_���;�w�����to���l�D���$�,lU�r^iD<gd<�7��m�� ��v"�#)4r� �ܭ�] �R�a��=��B
�+�@
eM �>uM��D]G�(���;;�Pr ?�ݹJ�7��>�J"�y�d1}������X�v��+`������M"�Ǚ�D�� ܿ(p��\��e~E�q�A�2j���f��,V(��Ś��E�A[��u*雌������ L;�fRCᑩz��9�D�
S*#/<�x�
5H����.�BN��y�J>���V��={���TN��²f�p� �t� z�l�skY���.�89Aź�k�W5#顨*�4�1�}�:����� 4�gVF��2Bb���Ȭ��Z�U�tq��+�����|���cvԩ�n���E�6G݆�����;�,'>�a��*sa���Hai����2��C��'ݨ�� � � �N@*�e������I��[��9w$�����>+~����0L
�sH��X�j�Z��D]!/H��3�l�\�+j1�l��"f��.��,H�k7����a� ��y�]��*����1P8�W�yN�y"e ��\�AY�o,��z��T3E ��5��χ������Bm�W� ^<ki�|�d��nc�����b9'O�����u<�S�ö9��*�E,&G�,������$�}�'�O�Vƥ�V��p�P��|`b.� 3���>5�Mk���P[]��v��"��m۶-�f��[�1�-y �؏h� 2%;���R����!�tl)��u;�:�NP ,g�Dz�!g�1+�J*���>o5�#NI՟� ���9ӫy�*�49
"M�Ϻ,����K�tm�*��f!y0�]��Y{f��J��1�/�t����W�s뎿6n�Z8� �#�� �R�>����Ƈ+�of��cG���I�'�Q+��r����<[��D�P���f�}�v�w�
43���I1��ن�_*ڛ����� ���i��Y����}������(;.�6�J�d_Ͽ�4' i:���-�*@���p�++�2�*��~��d�x�?X�k�H�J%��ľ�)����sLMY�{�{~��̀���> Tus�1��h���g��p��7G1�H�Y��Kܱ~�p �Y��57��O���N ��ť�K3��R���������c�cQ�8��/n�Z��c�$�H8���V}�>��Ӑ�L��A����ys���]� ���b����t�h��K�|�O��J��,�E����Z[�-W�>'WWϏ�H�=�x"�*� ^z4_s����u �ܸ�9�ϸ����?�Cd���V'9�8I����7ݙ��"l�g5o�j������|%���M��\�z{S�������Q������R��;����4)7<�]�,�kͫ���'���]����~?�-X�q���~�������Y�.� �=�###�݇v��\���`l�c�HS�O�u��u�C����)%��H���vG�O1e��!r��Ͽ -��b�W���)F򡨜��*�6dT�*�T��rW 8U�� 䴺ε���{��u?x������{�G˺���\���$��7�wz�9v [ܺ��H��y�{oϋn�W߅��7�~�M��ԇ���_�v/���ܑ�Y��u��t�m?�;�R�0�BV<��V8��BM�f��V|��à<�n^���M� p{G�5�uu3�eJ,-t�B2*�KqB��Y�P�7U����5I����5��>츰�dP�͏l6.���]tjm�m�Y�v����S�O��_%��}� �>�@�[\�w]�1���#���__�xD<�����Ε+�^qk����5�R��Q�Q�J���)������� 6���0>D�Ǻ���Dg9ʭ���J�px���v��T�xK����L�k� `)Y>]pV\�!�)�͈|"'o�
���` ��979�vBY��7�8�K�p����=W�X��8u��p ��1����Y��ͽ��`]Pˌg�Q*X:��������-8��Y�����y�ki�Xj
r���; ����!�y�n@�a�d�msm, :_���\���@Ҁ����)�v\-�)�n���h@�V я�*ڵjLf0�4���\2�Y���~�K��H+.�������� ܒ$��_�q��? �����J\�����uZ �@ V;���H�r��3<�v4���Mg!mj�Gr(�sdt̯e�ڮl�D^�������},���DB4�h��M��*!X�ۂ7��3��yK�Ĉ �I��b��� o��yL�݈K~�-����\���dN��1y�H�=��AYy��%)S
7�$���1�;��e�f\Պ�o�7���]iX|��`� =\7+<���{�T@i��ꃌE.��p�Vk��ò���1ױH�X�/l��s1,�dAp$���������0�����H���yS�-e��w��q!xY��^��;�GqoF���7.�G�@3��[~�ي�.�
��i\)7 E�qy����d����z5�主$��[��戨�7sqk��a>8JY���ON����M��X�f�
��4��'a�����|6� {���V_�H@q�x4�?눱��85ф��Mغ��QĕO��ݰ—�D�ʆ�cX(�HJo�lR|C��+9�ӓKҸ��W���"O.��N�K�2I��g��,��h�Ȗ�?��U��X��|����޸D�E���р,��22���眶��4�K�v�)�Tn���]��}�Ka �ŜO(5g�,0������7� ��g�b����&ń餔�zp������&�Fa@?�l�J��.X��,"ߤP���2-ݞ���N�������+w��:0���RT��ܯļ`�x� ��ZQ*�TQ1����q.� X*k�媖�ɞI�? #3!��1x%~��4����q���&\%�t���YG8�P�������J�M��\�w�l��3 :n%��+I�!��i����‹X�8-b�������=B�("���;<�&��Ē'�O��T�e�>-�)Lsx�p�w�fHKt���C�V�i�;���[�o
|A�iA��+�F&sĐ-:�f��yX"���B��q�4Iiu���)RY�$�2 F�t5o���"� 6gqԷ��� bgA���Ͽ�����.Jm��dFe݉��|�q�'�������t^I���Ѿ�!���ki��m���Ӻ�(z�c\�w�rG�?����z����>*+����d��l~�R% ��C\*���>�R{S�T �+��S�ʍ0�w�7[�y /�_X���v� �m\��)���eJ�����$�ɈD�5�h��a��{�! '����+����׊��K�4��s���_�������f<��n �>�r��U- ����t��i����E�4~�_$�dł�Z5f5����c#c�c$�9s�i;H�R|�����V s'F�+x��H��Y�I ���D�uG��%���@���L�2%��i����S'�=�o�̚Pf8� _Y�:�j�p��A���]��T���^�����ς�Sp>�+ݲ��K�5�����'`Bl<`�l�T˕��ҽ�[�)���;a�?ߕQ��~2Ge��E���:�T�c��}���!G��{.��&��� �Q���`��ֿ�p&��SFJ�7�c�f��}�O�N��_�?ye�k7AT�h��Rf�D>@m �M���D,���������v�(�������V�*��tք��U7^g2������iKK�X�[[��]�X<�\�E�)�{�d�lҍ��<V�z�������?Z�ۇ-ϸƝ����D0�ʄ���^j��fp~+�g�sf����`P�9��ӝ65�@&#��Aq�>ˋ�+�.L�!��mM��V$���=S�~�����j����x���9��*-d�rk�k'1�0� ?<=�Rϟ��""���jY�[��H)��*�=�����T;� @��:�k��I�R5��F�7����_�[�.7�3d�R�y+���F �r{ʅf�Vik׮�g[z���)_v=���bs#G堫�� a����^�+&�ԯ~���?�|��ǽL�\g��x8�p���gn~-���yAds.�U��F�N����:�(��@\+����D�"G��W�ޅ�"�㥆����J}�O ����� �`T���tw��a�rI`X΃] ��������H�;��|1k�����˗�����`Q�� RqA�d~�o>��0O�<`pY�B ����n�I����}쮏m� ~���u��}���'����C>'aeO��N+�J���2��H"��-�Uؘrv1�`^�~xK���+�j�bh�M4�������k`b�G�%Q�7<�?�}W9�[^�!��~df�"� �b���bM�n�~�ه��G�-\������ F@ uSx}��qѲ�´�FGH;W���@��p�+���e�K3���,�i�m_���r�W��*��'{�#��|��n-7���e���h(ֱhQ�7'�t:򉋕e@��C�����r��PM��ܹ0� K�ʎ'� �lfRL'e0�R!8��t�o/�/�"�pcH˧������xa���%9�"5����̤ ��qAq�5�(z�n�#���rd���|�ݰ3��q���;��� _�^�^�b���R
ک�*��u���|wIB��Ou?�-
)3��:�.d�xHwb0),�+��%)쉞 �O�͊0y��n�"X�/�e�ҵBѲBE�8�'�G�h۾}�-�����V|�0�z�'&O$��b��� \ �N�$h�wl���K�b�wR�9l��쉾���E6��):V&��u�'�q���CN%�r�Oh?:#_�W�M�����.�Oaro�2�E� ۻ|�YBe� MX���i���JJ�d��Jq��=6ʽ�� �~[l_��q�+7>���ݍ{�wwؙ`��n��w|1 ӌ� ��p�V<�J��c���c8����>��C�>��y�'�����ľSр\��O�ؒ��!|a/�<�n#d>�r�_^����A��8u�yH>�>��#��v�ͼ�ɛI����|��E��L^�0�7�K��E��VQw֔� \�%D:d�B�d�\��XA�����ޫ�
X��o�42�2�x����>RF�I�e�<y�n욳��;���� �O7_4�-�a1wC��Cu�mU@A� @��6�́�C�!YCr0/�ai�&K�_#�S��`����Ϧ(/=
Ă6jJ����J�qZ��a����܏��
]�ǂk�[�iRD!��f�y����b�Wv��}�;~eL��R6�=�5|�M,RAaм��#�9 ��a;b1oʽ��EBlj��?Z�@:�A)g5�RL�N����`��ԜXn���F
��y���iz�1"�WJa��d2��t�w� n�[�� j@@n���%< �M��^iI�br��Ą~Qn��ITr���]¸
O�:@%y�����������QQ|�/��a�%6��,���Ԣh�*��yőG�|*�%YN->_
� O��\���z��]t ���x���G� ��Ld9�%+�*�R~2�%����xJ����p�I� ��a����R�X�r�G���Z����=�5d�\0��c�ĚY�'�e_N��� ����g�\�����y{��b�b*^P�^,YE ��Ҍ��J���0�C5j�*7�t�PnN�W�/K��\�^tb��K a�2�Z�T���M:��w
$5y_Mq�F׼�[DY3���sC��;��S��2�gGj�OY2�(=�{��rWaԳ�{-7�+N~�g-<��f�1?��OX�G��� #'� L#�L�T����Mx����-]Q�I�B���)"�!����C)^%�N��?��.�*¹�����U�$aYK3bwZU��v���N���e@KOوg�
�%X7�Z��pnݔ{5~�n W ^��_�{&�v#.����pK��)�K�,�(�[�Br����S��()�������I����e8������JJЗvV�:
���~a҆�TN��I �yD7bW�*�j7����Qp��N�*w>�� �rA*+|k)�;z7n�+�xЏs^��"�߀��){��R� ʢ���^���mx&�����j����}���*��9^?��(�4NY?��ئ��;�{��}���]��Y.K�r��Pv����g�ʧ3�)�^?���6@��S�M{vm��U������ t�C��K6��ӂ;� J )�8|�2��|�����%5���؛)�Z����p)Ҧ����>����������0(�@ �"�T��~�3]��Mq�����~������h�F��|r,q�؞c��.�q��r8���x#ӏY5���pTe%Y!�W �r!w,5�< ^�������S�i~�۱��'�E{uFR��xT�a!��'�`bL�Ռt�SK9lɵ��?%a�K� 2����j<��cڈ���l[+�O�1�SE��;k`�p�p��ˬ3ɼ�1P֭�#Y�U�q(��ãp H9Nοr����r���(���.s�i">������ȶ��:Mv�)Z���\����t�����7M�A\ G:�G� �e�|�����8���cG;��\�� �Ш��< �I�ѝ^¹���q\�O�G�pL+E��On�����p�p�����;M�N�^x�4ħp*X���G��\�ɰL�$�� �ċ��33��n�lP�a}E�j6�gb�[����F��E��ʊ�
���~/ޥ�bН��*��Q�p���=� �P>�%����R�
U�����M<~����y�EL�[�SH_�,�9��&…���d�`Q���6��
���l�ˤ�xhU��ߣb�#(�<��1�Xf �M��=�� ah�B��y� y������J�{� SXig3������|_ �� �
S�
r`��0q
y�zb�N�ie~��Y��ш�'� K�2�;�z#^���&i`�Y���V�C�)X�C�{w��A4`) v
��B^�bU_r&e2� ���<����'�N��R�N<u��� �D�7/�R�A���R�7�R����YaGsbr)h{
AU�C4s2#
��<��;9��� e��=��Ե�,�|_u�*�8ge:��:n���M��{�yņ���r����¾�2���Ӣ�����r��q+0���%*r�;���<K+�����v�h}}k���a7�켷s��0n�����Wz�5��)�t� �$�e�6��fX��D� �,øKu����j�k`wò�c��[�6�R�V�Xx� q0� ������`)��-�+`�@�R�T�*�c�Be~#,ñ�]��k,ñ��,,�@� �FaF�2u v������ɴ�%��a=��5.���^;K����E���L�aX�󝼨6t[˼:�c_�RX�D�}�骅C��<},�H�2 ��e����e��3��ò��K�&����)}�����j<�-yB���Uq�;��%�x�ӥҴ~� �Ұ,�����c��&3�3�`~2�H+i!<a��tQ�);a�Ӥha���j1_}�ka%R>g2D�DS�X�1q�a�1����D %^%|�/%�p�x�&X�e��K�� '�4wX���},���
�n/�2㩜�X�C�j��!3)0� ����d.����x� �� v),3z=,��,3�4�w4��Z��1fh�簌c9,��2, ��iR4ҏ��B��B|* T.�B�Q1-x-�c��.�e�
���q���>X��ӣpЏ�� �� =���4�fO>3k�g�ґ���#4옓_�{,�d��ЍVE��0K`��2]��q��aZ��p����T8�_���zX�&�GC�Z���|2:a������gT�������� *�*�❙M�3qL8�;��2�Kxf���a�3,3�
BÒ�D�q���* �#s)��#=d(KT2�x(̤��g��BAKkZ��7 ����
z�΂��df�I����a���*��f��J�#��~���
O���OA�-M���!/��I�t#]��L�����exR9I?�,�?ݙwL�l��D��� ,��(<��)X��4�|f�2<eO���'��[�y�tQf� ��Ð� �<f��'�I3�^��pxD�0�ɟ^X�� N��Vz�, ��ϸ��)�C���~�h�D��axfƥf(�œ-���ʾ̹JS����|3��U)�we�[-b��Z��f+òd`I��8Xr�D�2��E��4|�ᓰ��M��o�׊ڍ��� �p�'aY�yBY��g I��he��p����f5
�Owڔ����I8>W�7yI��c֠�9݂ ‡��H3ӥ����蠟���J#�f2
��r�SY�'��Ò��F���3kV��V�}o�I��k�f��2�O�]N�����D�Qp�c�,[���l1�NvmX����R�C�'����;��ǐ�Z��r� / ]
��?� {5,����`G��F�Q���@N��*�zVÑqd�������ð�`�da���~��f��7 ����Ra�dfS �òp9 { v9l���&\<<:����]pf0&W��:-tW~%�
��LXX�-Y��N^��H�w�2Ml�>K3W܄uӮh��| �Q��!èC�+y��z, �u����'�s�,l�Q4�g�;\X�#/qi2ʙ`�0����1����2|x�X*�~�B2�a&5��8�DF*#��C�<;��3 �q��\�f��8�?St�p)
�g!ͤl b�þ��|�i� �|��Un���L�4�u�0�@=� y`?Ǩ�kF
z|���@�j*�J����?H.퀺��y
�5>�HX��-���d��t��0a3���)ln�cI܌?��U���2���H'��)�1� x��1���e}&Ѓ_��y���r�� �
�zr�9%��(�РԠ*n������(
�S�;��.��p���(;�>��`��Д��A#�WV���pu�r�S����j���b�V� �֒�̳E(,&7��Bb�����a#՛"�o��{�MM�l �l��@m�XbZ2l�����t��W� � ��,Y5wOڞ������~u��� `ـ�̫��a2W�O���N�Ï"�L1p����M���fb��BMRl�0o�f�Moq!���2N��Tn _��8� n*_T�)?ң�⭒�)\N& �E�l��Z �YZ�f�IYV����Va�c�lhf=%��T@ ]��Z#��x>�Ir���: �ؕ qaMC�j��L��2�F��ZӍ�������
���6f:u4��˚�;�!�8"^�^J�Zi&�Q� �×6�ߏ8dU�W�C���TR�$�#�RQ@;����)�C_+2n@
gq��,h��5�f3��/)腏'?>�%��k��~���'O^g���n��5���I_F` 9�u@��(:�-�E-��'��B#�t�a8\� �8���ڎŚ�S��B_�|&���;�`�G�]��?G!R.~��n�,0J�Y��`i9����Ն�,�˸lN��|P�h���CzhBp�H�:~i��֫6�#H �n\���qsh%hI�Rz���ox�4� w�:m�����J(��6?�d�1����ǃo�"� �,#ְ��px�η^�𮍻��D�'�o�Q�c1 �� ���d�����m��I�H��? � �_�S@�k���#��/8v��:闇V+x��lzb�����|��'&6�IDAT_VhŒ>āQ}���Գ�'��/��'�S��ET!ПG\8� �ڝr�4�o ��ɗ�����n �L� ؖ��@:d��z��c��#tkWkK�ց!�d:�!�/������"}�E_��iHh�'W���ʮ����f���*+�iCZre>��%��ᑿ�~YF���ϴ5GS��%�/������<�ܝ֞�˺Ţ�Vq���-�Z"�����!a6��o�[Я�/�)���!�o��x�����M��E���w=T�XӇ�Ӆ�z�nN���C7�~0�݆O� m�g�F����&+z:>�����}쟋�O"�����������F>�����铡����nG+!�DYAM{�o_W m�����e͇���]����"�5�I8��y|����U��?�_gr�@�
́�|Dq,՞��~]�����޸(5�z�*�E�c�p���>q��J��?Y�� h��C�Y �A *K=�p4��ltS�W��7ي ���:�;#z�_|�} p�}�y����w�MT��.�F�(���zg�?5��^-l����g"}����g�+�]v;���_z�� 7������� �۱f���ѯ�q�,+���Q��iqRߡ?�戸\����p���b���!L�=�9��7wm��L��#y���O�a�ӂ�h�8�(�@S�N��a�b��eW~l0���Cw���c���w7a!�������B��P�4��ۧ���2]uf��p��gC�c~��)Z������Lk�a��#wwܝ�r4K�.35�+�g3"��e%���8�L�\q >~�?k��Uv�/���L�� ��j`�~�m����Ed�"�?
�h��xY{2�E���F��vR�������u[�d��~��^gC�@3�w�K�wm7��⪫�Uq���3������� x��|��O#?�����\_*Ӗ7�fD��ȼ�e�0n��.����3���ƭX��ڬ�y�e�m۶���f=h�1��pH���ۺ�������"�p�\A\���O��������$��C�֐�M����c�� �x1��X��u={�~oj��-n�f��5�֭��O
��0�a�HťR�*�+#�����8ZO�xP��_��Q�U��B����<Z0V�ғWm��B�؏���-�۱�$����AO5��/E��Eq e����x'�b�ZG\�uًqWM��ɥe����W�
{��^ i�����@{�Q�l-���&ޅ%�>4w��Jp<��&����rQðyG:*ͽ�!��&7��ޭ�'�?˕Q*�N��\�F�jW�e_�1P}�6����(y �{q��.h{���o���~��=V����׋�Y-�#1a����(h�;��Z�iq��V��ݝ�� Gı7�B
�Y'��������O ��V��< �}uB��w��&��.�}:����5=��h�2�6o+��e2�^��)�Gj������N���Qh��*4�7ʑS��:,�'GL���W\��_&x�6s@�rh�~U� (,���
N�D� �h/<��3uIT�9?�i�A�_��h�6ܴ�q �(�u<Sf4g��7��~*�t �����Jv��`iz��5���K��}������7��!��Ph��v���ZY�h=Pl�6�C|i
����x�WޘDX���J����S�|>���뮻�}L6ܧhs����H�hҨ����T*����uK�KA�����CM�^HGz8�{t/�^��=V&�1�oQ
i���4�3,<;����p�����)�f�4`܂��Ӈ���iϡ�Ca��f��4ɏ���g��_�=�tj���Ֆa,���?�/J�DI[a�}��9V��� ���[�1o8�,fCY{ܯc ȶ�f����ܼ������S��D>�oE�{ϑ=��e�)��<!��eٱX�PL�����y����2��n���l�e������gD��>p�;:���,[-��'''�E7�8j/,�e���skV�a�L;y,xt�h���ʹ�8�8�f���f(�����8a�hi�k͖������#^���e<��i� �*CX�!�^��w�m�q�_�i���tϟ������R8���E 7\e�J�s��wxl�۴��}%5����`�V�֞���6�ż������_q�lR+�j����
C
c(*F=�b�xw0���lL�L�Ć�T�J��g�}6��ڙ�l�O�Ɓe]d ��;�+�]�7��%�Vϡ�����l�Ke$M����0��g<� ���l��4-�P+���}��áC'��KVgH㑽G�L_PoY ���
��0�ՋV�G����y��?��HOg��Y6�p�2
$��4K� ��y��m�.Oۃ�ޢ���Y��D˸m�����}��|j�x:���Q�T��7b�Ok��M��I�䵶����Ġ�0t$
�����Lq��ՙ�[ק�&��g�Y��i��ǟ-x�k���EGT<%Dʹ��Z�-������<�2��� ��-̡ ����A�o�n>Sݩ� }/�M�ԕb1��k6�7���OG�^�+�^��񭔩����z��\�U�)�S.�y�,�j���a �Z��wwI�O�y=��r '2X�pޒc�#hL\�$�3��)����ɋ�)d�ۼ�^ ��L�ba�14G{��J��1~UC{��Ќc�X��������� ����N�t1��":Ɓ��eB�������G�My6�p�8J�#hjw����{1����C�E���{шұ�t��Vm���Zn�}|��]�p#\M�/Kwto@h�Us����1��ȣ!|���&6��{k�]לz�m��<u�qq��М����g��;�t��ƚ'��7�i�J�B���m��jI|x�ʖCb{�K��c'�W��v���=��E���l��/���)�ٌ�tMN�8>���Hg.��qs c�K�C �!6� }�E��;gp� ~���A���0A�ה!��w��GK�'E�]��e�e����#o��NM�� eM���"*}U���ph8(�J��(0f
��Jr;,��� ���S ��V2'�Z�}������T����A�]��%�sp�,�x�`�8 �R���O���⇑��E�1⁊!�`����(!L&���V�yٗ��&@m�>
�Z�����#bQ��j8R� M�rI ���D꿊��؊���΁Ȑ>��e@�p�����%%��x�w[��ѡy�������� h�&�LC��z�W� �ğ{"�r��� 9���|l��p�<�Ջ��c�S�����DS�/�Z����V �=�ތ��6�x_D|JG�,U��w����Zڷ��$�h�����'���Π- �0$��s��� ��*v��8\,��H\,y�s�`�s���8�� �O�{,���/�����!�n�s6ƕR��_/���f��#��� ����7��.���b� j�N�� ��A6�U���(=bUX_�Ч%h ���b�&qV�'D|���ҏ����!(H.���C~�`��7���� <6�W�n���K$���۠�uh"m��!��J?W������-��J���4�V}�'�B���$������.rj���%Y��(X�F3,�Sq�g���`yu(GP-q0i�8/��dyU�}�kq��*�8��!�qC}B�Nsh�e/N[Bm�<RlA:z��o*-�:*FR�ă(��>�p,x�a¸�e ��ILsJ�}�ɸ��4�
��L���(0&�@�$�<?RޠE*%��y��\�Pep��7��bb ��9�q�;A1�v4�˴ᮞ�V�Xr���L�I������G�����y� �F{İ��L�eV��b���D�ƇD:�B��2���H(�Q:������K�n�.��Ģ�I�+��ha"���Dq:e�<�w6/��-� �@��HUu�1 ���Y�,����1��\z�����l5yc᛽�g�|����p*R�G7�s�� r�;_�Tr�px��W�:/[B�R�� ��
B�ٛ'��6���qS)i>/R����� O��<��iV�(�ɗ����4u��]���������ŋ��N��򾼞�d5#kh��ͅ�o�Y���f��!����G� �PfWf43+L0�`�Ǝ;�C�!��絈�����
-� KQx��S��!��G�� �U$-���n �˛��/~�_﫷6m�4���aPnp�M*��V�X�\qP�����<�'6b�p0E
Қ<�q<���У�?*�?�`�v��<�� �CI� <�pf�#xN����,�����_y��m3��׽�u�d����O�|"�j6�>�/�]�z|���yr˚[�Mk��C�ȃ�<��t���@*�t$����!���� 5���; ��`�RO���o]�������\=o_��O?s�����w�-p� ����,ҊOU��KCG����47��9�q]��� �8�UW]��oI?>m�$= �A4 �XD?�yQ.�ǰ���Z���)՗��4���ɱ��[��N�p2���+��'i`�x�gq�1�888�76�,^sM'����ΟDBŐM�d2)y�<&ʔ�Qs�/����(Y����h4�m7�|690��P|���)YƂ�\s���C�$rg�=Ó���5D�n87��/�#~#n~riYò���
fA���):����iQ� ���#���7�7�;�����T!��`:L�q�vq���XB&��NxG��
Y�Hp2����@ �+;�:�1�x(�o
�J��]�^EK�oFN_<����%�|�D�I���@#uv[]j1T�Ŕ141$��ptk�5e� ⑼*�_c�1K���~I�ix�W��S{���+��Wz��va�'{��D(���:n���%z�OQƇ�O���Ҷx��j���-�͇���s�S����I(2��a_���S�?y���I�' �I5Vߊ�ҳ���+8�w�L����_�O�S8������T� ǰa'���#�ޫ�0,eL3y`��c����o�;�L�I��G�T��lsZ�N-�Oit����U e?q2lM)g$�f4Q�W5��љ���[�j]��e�� �f;d��7#~�] N�ld<E��F
�ǡ/Ґ&�Jϓ�q����p�Q4���J��!E�q���I}�͙)U�+�8>Ŀ��$+�4���4 �G������4���AÉ�Ek�|b�A�㲹��������\w�W�o#h�,��|n�����o�>x���d^|�sL4��e�6�Ē�8_k����1�3ޜ����/O�[����o�����.����ܒ��߄��-�А�4}��:=���r@��.VP��8*�-�
�s,\ �vB�^Y�ю�Ȉ��Ł���r����w�M��T�g���躌Bw����`׋f����o����>�j����4�b���&ֶ�7y�e`���/��� �|� �;F?}����d����g�wG?���c{셥�񺴕�'����BF6Iþ��m��ۑ/,zC�;rv�Ax�)�Ǹmܿ4���}�_%4 �܄P�\1�.�;��0����>j��_\���;' �7��ට�O�����_��W�0l��ރ���|@oC�_�;聂��dQ��;��k몺�Y~7^M���[</���� ��Ͷ��r�ȫ��?\{�������8��������>�uK�o�'�uz�������Żh���Ӧe��S��N}�?��ѿ9��u b��ľ7�h��&~�O����G��z����T0u�'>m�'oŊ?g�>ρ�
1-�׵�7~�n���F�����<���H���Z�� ��
�z�v�x�U�ן\��o;���!S�?%b:kx�h]�N�Ӷ�x�k��ݮ僚���lݴ���P��f�֭��m� ;.�P�O�Z+\-X7���Y�6.���VL�B�> ��mg��)xP,90$�4L
��d���(X�aj*0q��܋�4�1�8�
W���M�����qY��F�2�7�y�f���hO� �}�wvg0�z�8��3�HȚ��8h cЃ5�S��)AMd3�734
�M�)&��U6'x����/�H�� p�ȁj�Ѯ��"}��W$�|��TJ��J�*�w�Z�H���d��1�?���f �C_&1�T�@�ǭ��g� '-��c~,'>�4�3|S<�ύ;<��n 8m10�M�e!���/c��)}�H^3=�8�F�uƀ�y� ˓F�a�bZ�dG�h %�'E�3q <l�Z���F֒��7�M �C�{2�S���ż��? ��]��;��.�'�ǧ4X�Vz��( 1}O{���G��M�u���� ��oE 5�2��^�1=�б�%Ov�u L�������,l, nii�D03�u��cb�A��DB�v�Et��߅L� ��}�{����4�Q87,�P�xw8���80��4���� X!r�8�9�/ .��1���}��*kG~�gw�n#�J�����ؘ�������A����� |��эip㧛�C��o�C’g###ڛ���x�m�.�G��v��DV'm�~��|'=崢��G��"���5��� ��Ǽ�?�����7h���o��}٬��x
��`����鵋El�B5�it�P��z˷l,6M��fk�����=����hW�r�$� �}� ҫ�P���$����K� 8vBS���&` �ķ�-k��~m;&�N��"a����%��{
���O� ��t�,˸��C���O�Ý_ʿ����)`98UN[YઁK�ʟOG�J;w�\�& > ?�J�1ѓ��%�0�DD��N��+S�:"���<��'v�+ q�a����Qg ��� �L��쌕1<�5�Ȑqb�Ef(��� CE�1��ݴ��I���9p�N�.�A���4���L6������^�Нig�L;;���k��GC>�3i���2r0��8p�tM�h��i���t6FemLZ�'[�l"n7�V����,$}#P �/��Dܤţ{ps���G?Y��j=^1������~�'�Ǫ9(d|e���Wc �c1��mwcK�~�[�ޑL�DnX��0��ް5^����{��ƇY0�l.�Q�*wL�H9Bbj�,Ԓ��G ���9�W�ˍ��u���#�2�4��a)�� `�rO�1��|S��:��@ �T�
G9_��!Qa`�{Jf>������ƍ9%)�T��z�
�R��@H��Z�! S�9���> }5�L$�+�WW�f�(���'��ԇ�M�5�u�
���� �?��S��1#�+͝��I|�E�\P�E#vԌ�K�.5����C��d���;e8*�
�x-<��xf�ߍ7����V������S^0QSz�){͚5TE��g�g���?�'=I�=�n��z-�"�G��Ụk/��9�;/�3�5H�R�|�>��3����2�k�\+�/xZ׷��5���N�<���׼�5y�&�v�_��o4�8Zo%�<�H<�V����o�g�\��$G�����X+�ϊ| ڐ���y񊣹�;zj��t��ps�uMk��9��N�Y��Ā�$��F�B�at-�+�����ΰ�DB��c��g\�j�U2 䁅��1�!�B�$��b`z�G�� �������2bx�0�N��B��A߉'��am5�l#?������+��������i_mٖ-�F��m7v��b
�' I�(-MXℓp����N!��rB�֜CR�=u�1qK�l��*/��K��[����[��~󽑞dI==����}�7s�Ν;w�;w��a����-�X � ����d�?�C��2��2�L�
"��v`B*N�sM3��,n��#��>���4�"�6���t��B� k ��o\>��ɓ0�b���E`������� ��w�"��h��8�����# W�]*�pDk�c0�ۊ3w�r�pmD�/ñ�p5Lڲ�@�&��nj?�\��+0Xn�y� ����>'��iLg��Q��U76��i|��#��Ю>�-���f`�@��4o `��3XD���
�C�6���A�%��<�F��`ڰ����a�(�O5��(���n4��_��-���#�Y����A�C��c��u�c�������_�,����M��b��"����è�7an�"`X�A���@^�V���e�e��ޓ_���0����&��L�8�J�c��x� R�^��![�$�U��e�/�-�E�Y�!OC�(L8���Vpj �X�w���ǾΛP���-�mxb2�5R<�����?,c��X�:Z
��n[�dQW۠c��N��)Ґ��v�T���8 Ox9m�YI�s�7w]��W6k�������F�L(q�8�3=�.n-��m�l�EN�Ja�n�<� � Ӏ����>��e�m��>�[/v�W�L�[ыđ~�?xQf�9�^�������,�)��:V�p�7��\��1�bG<"9��F��%��S�g����n������#��E�� �6$Fd�\
������.G 7���a'�B�����8�tg�nmE0*���"`���f���~Px�Q��i�8�Q��4gE�V�sG�sa�ղ?$�e�Tt�������4�(���Ғע�0_����["����_6��\����ղI���g�c�Ң�T�����QK�1�9���m�CbĴ0ⰴ�BŌ��=�Ts�^�XF\&'��:�G����ɶb��)g2��'HG�]��.�y眈Ɇɟ&h�ޚ�\R\�2���W~�<�h�|8�س�k׹s�\g�͵U����'�S}i���W�񋝹X6v��它�^�s����� ʆY��:w�Է�w%&(K)$���t�Z�[�7bÔ�@�`�`�Y�Ϙl�%v�J���(�A���U��X6�:n���!� S���@7�Q� C�(�� 3���d0ؘ�sZg_��рI�7Q�݃���~���ѣ��iŽ�,���x��Ÿ�=�p4=V�8�������%���p��, D iy�n���y�r�ߋ��e؜8�P٘�r4�Xo�O����<��<�t<����(�al�,w���BXE���QjW��� ���<��w�8�t�^�) w��Ɯ� -���e"4 � ��<��7h,�CGm���C+��.�B�sb�!&�/"N��X�N���>��k�F����E�%��46�\���H������齘/��/�#�����}&����'=���f]f�͜��i�9%(��@B���vYV ��:ٱ��� ��N/�v l<��b���qj�{D�e��S&�#�!P���)���h�\h�'��rZ���&g��ʍ �J��x��*X�c���h8��Q1�܁tSMSL�}���?���jܑ�G<C#Cv���Ђ�I�i��w���8�� �I��sA��|A��_�D�br�
?�v��Y �6��i.��� �¼��.>�hN
x�A�N�4�8t��M��=�*���º�!iTpDMGq�:B��'<�
�b�I�5�ʢ��<p��aB�z4���?+M���⺋c�� �& ��Rٓ� .s���6O(��W�G,Y0 XN�4��h�QW�P��P�಺�k�����5�q�KF���=�ݡᐣ,P6�\�< Q���9���'/��k�ݎ��D�/��Ԫ,|��\n��F�}��^Y�2�Ͱ ȹp6p8�iɌf{�%%Z���w�O��m��<<_ Su��d�D�J� ��zC��w��p��:
�/��2��ͼ �v�Z"��"ӆ�����r���ꥲ�ii��˘�n�Ov��RQ�MrI��R�V-Az޿��:��2F�Y������"L �� <�׾�[]\�,/)�T|������Oz�U�wa�¸����<H�`��U8MMuM1�Y6�p{��6��f<eb*��@������%�t㙪�Y>w����G��ŋ������b�I������{�z��O�}��4ϫ��K�uK��֪�?9�C|K,�Ғ���&Nz��d�{ߙ}^�m����ܲe�X 2��Q#�5���wO��cERË��Z�z5iUpc4c����8Mh0�*�o�h�p9��Gu�ap �3�(��<�ӣ�j�� +���^� os�������*U*��ZNt�pU+RP0�nҡ`�*�Ʋ0?ϛ��f�m�+篌�_�V1NV:���G�):�s�EA���@t��P�0>��������:�t��*�+R��[k�z/�1��+i\4d2cDIR�ua�/g�8QdŮ$���#`u�d�RΚ����w[n����}gN�[��L%�ij��ʕC�z��e��>Cd�⎅���|�C� -sͺk��.q�߿߇��dg��Zk��<>�|�5Vɏ������.[V��Q3�k��G�]V;F Uw�_�N,��/�t�C=�\^�J���D-�ٞР�&h��n���:� ����8Ny=��?���4�cyZ�~��6T1N%�7 �4���q�nb��I ޕ�c��؂HmLC��ȡ��'������\���L]�vN!u�}>�T�½8[�pr���$�9qz���ȟ3d��zPL���40.�����1]�i�?,}�F��ʀ���ɋC!�o�`Y �e�T CY���kL��/��Η�eA�e��"�+���o� �WXpJ��Q� T�q
M�r��>�f��W�܂��%8.E���7x����H:�n^�Q3 vh��LhY�7�@�R\�<u���s��h&��� ��ǜ������_���>-V��rQ�����ODOc�hx}-�R.�6��[�%�xu�X�݁ɴ *�#=O��P��b�Э�v��(���ҍH˩"@&�fvB�wf �&Q�E�z�cF=&��8&�2��PJ�*���Wp��υB ���z����!��
&���}�<�J�/�g�y��e�h���_=��h���}�����(�'����hm ,g�{�ǖ�����{d둶MOmr���+�E�_<��)Ҹ�`��U֧��xp�s��z���pI����fr@&ݖ�z��_���]��w��K�NEoE3o����!Q�{�����!X��Y�"��� q8��yZqGݨ��k�~���ƎI�9Zw��}Y���BT�ݗ�6��w�ۘu2�( �^Be߮�˦�]����-��`u;��|�o��UU�W,g���j������Y&N�"����v���{����ڲ?�8hJxc@�t(��8Loo�ݱaɆ��͛��s�oL;�O��0�L��j��>y�lp�w��m}\D�QY�跆q� �P �@�4���T`�W������� ��V�G�¯�����{��dr���,j��#b�1��gr��u�( ��p��i�
��� fkV�vո#�A~0|�ӛ��.���v���6UI�/xxo��߆ �<0� �kҖ�6i� �zI<Ԃ�9=�Pѥm?h���x����79����P���w>q�i�ܒ�ʒ�{r��<�kv[����رÌm�Y��p��U�����Ty�J�u�>&=��M���Q� �O~O�u�vo��#h��8�@�:tX�h"9@�?�^�{1�-F lR��}�*�����:
����!�.�I�焏��MpĔ B�6�{���c.���U��
l�#&��*���[����g�~oH�����,)����,[�qm�A�A$�?#|��G�n����W�-X��g p�al��Y��b�7���<2eN;���tl�a`h x��{�@#Ϗq;�' i�E[������p �9�����������1����f �Fm��;bX;/����{��g�z�(f ��a��Z��e���pȸ|Ȉ+~�D��Y!�������0b&k�z`a�)���_���E�R���ȟY\�YF��;�w�.�jAG_�r�+��Tr!v��U\��=�:���l@�N|W�x��Qk��|��Ѐ���m��Rl�L��WAq�~��M�$n����[�>���qB���fj���
�п�B6V��9�U8٘ؐ9��ӎ�Y��V�!9�� �'��Z*�������2]�c� x��3��Ȇļ ��ViH�>�.&�7��N8�3_�h-�D�|����1��EA�b2�A�bp�Q�"��'Gf�3��� �CP����� �' �V��I�~��24�~���#;K��r�1�%��V�L4�0����$n_�:` w�#%�v��6Y��t�6��u{-Y(G,���=����5�E�7R9�_‘���M]ޜ�����0콲6_�?������9.�A� $������ ���,��3ꍡ���� ~��;���� ���#>�S���7�i�y�����#�$_���3�|p���pvZ�OqP�G7p��|��X���NA��A2U��+���q�G�< ~n�t��aglz�L
��H1���F4�a�LcFd
�� ��~����
0d?�-(8�ud5�9"r[a��K�!���D�0��
����������T����B�ր�v�!�h�Tm�#��>���1�+7n�T�i�BE'WΤ���=a�b�3� �fg�+��⊊��I�1�TR�{�rx7�����P��ަ��(]o��"��/\Dp�=��:�ƨ�!1)VnHvB��R>~�L���� ��]�b���ב��A�]��<\�+�/jh����%V����t;���{vњ�����P؈�C�N1ל+�J��$=q�Y�q�/���f�L�� ��B-<c9�O ��3�r�a9e���z����;�I~�e�W�Y��7jQK\+�V=�޸��@�7%f�d�-��()�P���S%f���m<�t�S��V�9^%��.��ki�prB�L�<��)��ɭ�\!n6���)���=�R�P� ��h�kg㘷�W44}ޥ�e�u!����3�u�LDh6.0K�p܀Y�,PZg���KPu:j��ffG�8�����^���-/9�0�^�R����m`�\��QΧm;�O�X�l�\�6—�S����r�;�X ?�=�*���
� �C;]!�b4�y������)��Wi�X�RCJ�̛�ӹ����7S�-Y>���TD��1��v1}pU>D�=l)�[ 8�2e��o!�z�n9F�����cZ���ѐ��Y�8�����ߖAF!P_B=�bFԂ�~h�������Z����w� ������-�?��,�K�Q��`�ӹ*�x1"و�� _萷tp�# �X��ƪ8�Npu��@�PJ0,�զ�Q�a�a��C��#>�� ���u�lă�aX�|=��������C����"�� ؛���
��<{;2�#(��Wn*����p
g!�z��B�;q����WO���d�TN��|Y~5r���t��3��M�X_���ae�<���i,a�G�g*�������S�(#��>�._'N� �-����|�-
�7��Gl��m����xE��,(���PN���Y'll�r*���]��Ev�S9K�3�B�
^������2JW���J>��WO��~��L��3�M�{l!��"/@f��)T칧s�C aɈ�q�X^���
�@ϼ�pL�#.�7�fʛB���ʂhI�d�,�ty#JV4��ʣp�G��t^(o
a9�� 'a���f�C�,� 7]�Y�̛O�=ϙ/눸f⻒!�L�/����f��\(%�4�X^�*٘ '�C7 #o�τO�~����q����sg6J�i��IEND�B`�
(function() {
"use strict";
var RandomData = function() {
var addToLane = function (chart, item) {
var name = item.lane;
if (!chart.lanes[name])
chart.lanes[name] = [];
var lane = chart.lanes[name];
var sublane = 0;
while(isOverlapping(item, lane[sublane]))
sublane++;
if (!lane[sublane]) {
lane[sublane] = [];
}
lane[sublane].push(item);
};
var isOverlapping = function(item, lane) {
if (lane) {
for (var i = 0; i < lane.length; i++) {
var t = lane[i];
if (item.start < t.end && item.end > t.start) {
return true;
}
}
}
return false;
};
var parseData = function (data) {
var i = 0, length = data.length, node;
chart = { lanes: {} };
for (i; i < length; i++) {
var item = data[i];
addToLane(chart, item);
}
return collapseLanes(chart);
};
var collapseLanes = function (chart) {
var lanes = [], items = [], laneId = 0;
var now = new Date();
for (var laneName in chart.lanes) {
var lane = chart.lanes[laneName];
for (var i = 0; i < lane.length; i++) {
var subLane = lane[i];
lanes.push({
id: laneId,
label: i === 0 ? laneName : ''
});
for (var j = 0; j < subLane.length; j++) {
var item = subLane[j];
items.push({
id: item.id,
lane: laneId,
start: item.start,
end: item.end,
class: item.end > now ? 'future' : 'past',
desc: item.desc
});
}
laneId++;
}
}
return {lanes: lanes, items: items};
}
var randomNumber = function(min, max) {
return Math.floor(Math.random(0, 1) * (max - min)) + min;
};
var generateRandomWorkItems = function () {
var data = [];
var laneCount = randomNumber(5,7)
, totalWorkItems = randomNumber(20,30)
, startMonth = randomNumber(0,1)
, startDay = randomNumber(1,28)
, totalMonths = randomNumber(4,10);
for (var i = 0; i < laneCount; i++) {
var dt = new Date(2012, startMonth, startDay);
for (var j = 0; j < totalWorkItems; j++) {
var dtS = new Date(dt.getFullYear(), dt.getMonth(), dt.getDate() + randomNumber(1,5), randomNumber(8, 16), 0, 0);
var dateOffset = randomNumber(0,7);
var dt = new Date(dtS.getFullYear(), dtS.getMonth(), dtS.getDate() + dateOffset, randomNumber(dateOffset === 0 ? dtS.getHours() + 2 : 8, 18), 0, 0);
var workItem = {
id: i * totalWorkItems + j,
name: 'work item ' + j,
lane: 'lane ' + i,
start: dtS,
end: dt,
desc: 'This is a description.'
};
data.push(workItem);
}
}
return data;
};
return parseData(generateRandomWorkItems());
};
/**
* Allow library to be used within both the browser and node.js
*/
var root = typeof exports !== "undefined" && exports !== null ? exports : window;
root.randomData = RandomData;
}).call(this);
@Umesh-Markande
Copy link

Hi
The Brush functionality is not working in above code.
it was giving error Cannot read property 'getTime' of undefined for brush extent so that graph is not shown
can you please help

Thank

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment