block by dribnet 05b7a353e4bc782d50535400eda2cda1

p5.js starter sketch

Full Screen

STARTER KIT

p5.js starter kit. simple sketch + thumbnail generators + hsluv helpers

index.html

<head>
    <script src="//cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.0/p5.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.0/addons/p5.dom.js"></script>
    <script src="z_hsluv-0.0.3.min.js"  type="text/javascript"></script>
    <script language="javascript" type="text/javascript" src="z_purview_helper.js"></script>
    <script language="javascript" type="text/javascript" src="z_color_helper.js"></script>
    <script language="javascript" type="text/javascript" src="sketch.js"></script>
</head>
<body style="background-color:white">
</body>

preview.jpg

����JFIF��C	

			

		


��C	����"��	
��V
!1AQ"aq�2B���	Rbr�#3����Cc��Ss��������$&Gdft�������������?�p|,�K7Nµ7r2��b�1�ꘊc���=�y�����š|���='*5���&�mcL\���MW"����� ��}
��+����.c��=t�����M5�5��M۴�X��)��?s����NO-�{�<I��u�/���6�oO�j�3�7&}dǗ��i���xY��j�U:^FfM��6q�Ur����ji���-��^�^�|�ȷF/3�Z�ڬ�n���Dm�Uٹr��h����Y�O�O/yk��Ĝ�o���1۵v�gOƯΛS�ݪ:�UΞ1DLD�S���8�����Lx���;ZӴ��{�r?�ێ�tw|�C�<W�D�eW]?�n{1?�F��5�f�
����vO�o:[xUz�߅1?�:�qU386����<a�ݝ�Ǣ#�S6�n�����U?��dq�ۉ����lܟ��7����V>&�^�x׿�W���v���F��
����jgj6�=�N��30�bt�v�ƿ�z��Inbc��#C�.Qf�7���n���4kwbh�o�����[��(�����mviո��=����;�)����K��_�쩊u+zΗ�UYq]1�Us1��9�P�;14����::� �='�\�ֶ�0�j&��r����vovgrㅟ��X��;6�U��f�5�?8��ljU��}�B��Tв���jYx�^ſU���jf&�H�Æ})����M�-�5=F�g����M7g�m����?~����̽.fb��Ӯ}&�~�V���L|&�X
��
��N��|E��bN�UX�7���ٮ�ڪ*�U)�T��5�¸��t�u�g����Z�~*�m7��ͩ�/e�t��}���]�KT�UW�f"{����*Z�_˽r���W]s3UUN�2���z�`Z�ku�>���S��_�?�j�Z�^�#T�~���cY�L��z~�֛���ܪvk+:�_��ST��&���@��ژ���g��2�M8��7����c���f�r�t�n��Ų�S�&f���ލ���h݉����>JV����j��z�{p����b������k�o�W5m��~��ت�g�N����ӷ����;3V�ߓ_j�ݚ���J�Ǝ�����}��6�O]�����{��{�J���f�c���Ħ���~0�gY�����]˵ٮw���~ ��8��x[��|�e�:���oc׷j?V�gٮ�񦨘�u�%�<t�W#��ɅcJȹ1n޷������Y���q3N��(���������h�Ӥ��,l�|�{Yxy�ؿD\�v�qU�1�UL�I���0�����4�~������t\�]�󫙷��W��֫5w�M��w�e�%9���|p������1�4��S��r|.Q�Zg�����Ӵ�\a�<��"����M���g���)�MUm�f��zꝺSN�>�J�Mm�W�p'cck�kU���r��&�m4�����rbw�q1�mUS4�^pqq�3uۜM��K���7&v��s��߱n�ڛt��h��p=��G�
"�x�+�q/�L�7�bS��To1=oU"v��&ߌu���;ȹ3�"b)ߤ����æ����I8�����vͿ�_z��D�/��ɵ�H�ܞ���=�G��U��1b����x�q�;]�G�;"���s�r^>\E��U�c�d����w�����B������;��Lm�;��\���:Gp΅��̹��]72.[�{�����|��=<�I����w���^fOb�+�U4�7&#m�4�S�Dl�ܩ�)����ݧjq(�v�c��Q�c�N��e�PΚꪪ���V�UuN�(�����������'hG�͍����f��~���#:���|�g{��[?#?���hky��us�fc��D��]?J�޽g�gc�Lm�@�隧�5|�^�g�M^�R�xy��UM[m�h:����������\��Ŝz��&��D�6$D�ӿtw/u�������1W@j�f�Ujw�	���mm2�:��D�e�������
�e�{�_��f���;��
�m��Wu
:L��\߷�P��|*];ӿ��n&*�a���Lȍ��
�m�����?�a�'��>�rt�W}��'�t��]3��D��TLN��7�LoW�\�,�TLLx�OEJ���.iڅ�W�6��KM���/Q�G�q������M334L�N�4�V�xU�\k����-/��7:q5}"/ٯ��\wUn�����3MT���؟G�{�/.�8�v�Ȧ~��i�W\�˦"j�3�L��T������w�
�r�����D�-����-8���i�LU86#�̺����3��k���C��\��]�]4QDMUUT��3/9��L�v�x���ׁ��8�M�Ǫ��3M���ՙ�۪?Z�@��9Y�W���od��ܪ������]�T��]UOZ������33)L{1E1V�6%���ϯ�%j��^��Ş��=��=����:Gs��G�ItD��@>��f������b6����.%�����	\K}��g���D{�$�%���o��uM#K��S�10��~�q��������w��8v��:����
�����x[�{5_�_��3������g�H���1rt-7'&��{�V.Z�j����M�f*���11;��z����z�퓝߼�`]�����s��W�bU�T�X�s�>�C�3j�:�����]���8��)��޽v(��|�zD|\��OL��n\Ӹ濕N��]ڪ��L��N�Ϻ��Io;�|~L�|޽%��zVs�^������5���mۈ�WTU_�J��r�r�ɻW48���
5��#����;�LT��:�b���zL����78)�����k�_��_�<�{�;,��E�V���r�������5ފbzE��y���LW���?(?J��,�5��N3���}m�G
�{�LxQw(�}�S_�]���MȟH	�ѵ����Q���^��^�~͌�ڊ��DEqn���d�\�[�)�������1���9�=�����@�2f��7� �̹�g~���_|o�J�ގ�zB��{}���Fe��g�w@j�3��-�v>����{u�`d����˞�{�d�]���܄ʯ}�|g�"��Aji��g&��ό�ϯjAUԭ��Ty�G��O��:p5-C2�|)�W-�|Ajj�(�U_����f��[��&�G�k�C�U|%Q�-�v�F����b�������&<_�C�������{����w���8uܮ����ꉌ{�3�j��U���(�gz�x
O�[��x�ӏ����S{�"�
���ދ�US�EQ��EW�b{�v���,*6����z�����8��ҿ��+��?�%��&|�3�G����m�31�_{Tge�Q�MV��}����Uf���9�~�q�&z��;���Y4�4�zgk�._�o�c��6�
MS۹�U=�T�2ʎ�7���
��/�)�k.�?��=3���Bjz�g�Q����5w�E��?էh���?\wSL���n��]������(���WD������Q�5�DL{�3I�w��������?�;�r}G,�B��E�O��ƶ��ʚ�������̙���n��SG§o�?.ܘ����b'��R��.qp�*�����~�6�38�u��o_�=����=<����^w鼥Ѣ�%6���>��,Z�zm�w���^�Otw�1�wL�	�������N���7�����ݽv�����""":��s�5s��Z̜}6��X�n=S-yL���W���tP�����;�oS�4�ZU}iɿD�wi�GN�{�b<�[���ˎ�DW�ѪdS��C������W�����t�6רӰ1�m���T�O�tC&��+��31UET���N�1�;�ϑ�ڧ/�[���p����)���+��5S��6��ڹ�v��i�cSq���&_�S��Rl_�b>��ݏUUS?b��؏u��;渀s���4m[��+�>��d`���E����"�gi�f&'�bbc�����^�<S˫�\	�
G'Y�)�ر�vf�V���Wֹf<h����݉��5�[Ʃ�f���˵M����r�Q�5STt������n��a���9U�Z��*̻���v���Ui�*��(�G3;�Gƨ�T��e�^�<����g����Y�n��oQv���tUEQU5D�I������Do�o ��ʊbz��$5��3�K�ddo3Us��yy��"w�|�/������˽�H�����Ɉ߮��(����翼�Ww�7������w��˿�O^�����~���ͯ~ԫ�[�W�;�w����Ϋz;5{���y�{���#r�����j��w�+�*b�1?��?){x�p�u�����"�k�fiYvsq��n������]�k|C���A�U5b�x�s,L�۹DWL���ο�*�/DN9ɮv�n����ul8����5M}��7���<^���ٚ}	��TN����+���.����:�u���~�5QMQ�����Ǹ�?]�٪�3;LS��\0xv�i��1��|
2�5M4oR_O���M�kIǢ";1�>�ɶ�6�s���D����3����l�W�+�E��Egp�5S3E1���6��%]��q�?��#��
���cܙ�F��4���fj�m��4�KRӣi���z����/�91�j��٫8�D��s6�#}�����e������)��oLŧ�J�x�J��8�Y�k8v樢'j��=(�O����Ǻ�/���e�a؏��r/�7]����p���t�t�e�Ҭ���D������I��.-�x�3x�]�72�nMS�m��MDž4��6��o$��c�b�Xums
�t��v�~��?k�zmڡ�g����1���nj�0i�No�T��6���������EZ��v覊(���i��";� �LSM1�"<�
��놹��Ή��0��Dզj�ۚ�a�?b�S���O֢7�'ۣ�j��c�|-��W���a�P��)�DUSTULUEtU*��*��j��STLt�x5��/.�q�^�[�!g��Lu��湛�O�ٮ�[TUy����9v�o7r5����k2j��苘5U>�x�;v=�����ک��o;ڭ��j��������Zn�f�T�j﫿��گٯ��w��:�J�MZǯ�̋��4�Ӿ����|N�
������Ѝ��b%^�Z�����V��S �����N��ˊw���/j[�I�����������P�y;�3/�w���߼���3�zO^�cS��o,�����|U�ܝ���������4d���p�N]�����#B�]S�UXfg��ݛs�n����z-U��d�^|	�O��`@;~�3_�V����S��i(���K�tǿ�ڹ?'hE�?՛V��jb�i��)����oOmN��>���fj9:�q�3�j�#���-i��r����@24�:k��>2�ai��M�~~ft�L|}�F���"#ژ�>P|��k�y��+�m��
�81;U1�BÃ�ژ����8z5"(��<7�U]Ly�%��6�t�uӼ�ty��v��&*�<��	���+�)ǚ��w&)妍�[�Z����nci��=ӷ��V�/G�v��h��Z���V����}���-��}{D�Ʒ�c>��6m�Qn�kz)����m����|MǜA��_j35�۝���nb��S��쟥�Α���Ջ]�}k�E3�.QL[����MS���fgyVz6p�Oγr�E�g"��T����&h�'����*�,�Z���
[�Of�ұnL~�V�g�Y@V�����f����������O�1������n�۪�{��w�{���p'q߿���<�>/S�oSj�T�r�񦨈�'�bbc������9��E����z]ٙ�k�{Hûr���]uOͧ�ln	⌼K��M꩛�&����;�{\��.U�~���M�6ꏏf���2���+����
nG։��M�ڜ��>{�i�}b�b"��$&�[x�&>�-�O}���M�X�����S���c�ԩ�����o�Ӳ*X�a^͚���2��7ߪ.�٫ڟ�?.]��T��99;D� �ղ��UտtK��R��˜�߿������u��dM����;�um/���~�X��<��]3MV�A�b|&4�0
��};�Ey	_�S�S9��y�1�{[wt�G�rڮ���S=�j�i���6ߔ��~ҭ�t��`ұb����.7jb&:�Y��>�E4S�|��e��\�O&b���?Y��(�U]��}�}2��L��k^�ͺ(�� �ӱ&�q\�Ӻ!m�𢩎��=��D�"�bv�KNJ(��wY���"c�w��Բ��3E3�G�ݕn=N7k�O�*汑;LD��i�H�
�:�|��Z"s�h�/κb?��c|�窪f����i��a�&�sMv��t�T�MQ=��磝����.�ET�#kyx֦~ݘ�Tگ�U����:��w�d�Y�*�4�[s?�M�i���VV��l�:5n���7�l���3;Ϫ�f�'���m�zV.&f�fΣ��L�����Dc�Q]볼OJ-�]]��{����k�k+���ڪfq���Lm4]��aڹL�鮊��4��Y{���x����V����f��f��*��tDž4��1��S����q�}�Q��V,Y��z�=�w��QE1�3;Cjj�m1�n���D|"67LԦ")�v����X1��m��J��`�ƽU�Q��<߸z�dzT�O�t�.���%�������vu��������O�u^�;��*�Vf����|Du�>��#/��Dg�n����2�H�����6m^�.D�~`���R�$����z���9V�1mDu����c�3��8S@��N��_w���1�-N�oE�t�O�L<d����̿H1�š�.�u���S�ՙ�1-��޲&���^�О�<=sS��f��V��۹rv��n�۟��ӕt}�-|?��o����ڏK�-�z��y�j�f���;U���Ui:�
�9�?���Y�nMx����S;oq;o�V}_u+&mb'�ek��Ͼ6Yt��lDyͥ���?Z�����B��U'���f�=L��ӧQǾ���
=��9�U=6���߁1�j$9�v,F��TuZ�nE>_������c�j��
R?����
�}s�*�(��ߥO��.`���ұ'�?�lQ���OJ3�S����۳LD�U�U��ۯ�?�֜�����.���ׁ�cMv��Y�z'�n���������v�w������x�mefܚt��~���M3>�Ϳfz�&�7dQ](���+������b{�_��S�o%8�S��bM��
��z�g�eؙ�W~��}D|bbi��&#br7����1�+�2��:v���\���j����_g�z}P���EQS11=bc��[zB��p�������}V��\m.+��\�M���Q�E7�������}�^冃:޻��ϿN��Sri��\}��ڷ�L�j�i�}�:����<W�:��oq_�u�⻵�1M1LSES)��i��i���LDt�E'NӲ�\�xXv���'��>�Y9m�W�k��]���Y3�5�����dgb�^�%#�<-k�4kXtS�ʣ�z���T���x��;o
{��{�S�ٺO�5SMQ�
����LLo��ҷ��A����b~�ko�#6�Z���Z��[O��صiS��p '>��~[?;Yw�ٷ1�?T��%���u�LK��Q]隥�-x���Y��Oh׵=gW�N>.5��US�3=��UUOJi����[�'��̾{qE����r7�rrf;�V���v}�t�����1T�{+��a�ދz
y�ܵ��f-�Z�V�1E&q񩞶�o��j�"j�"�ig�ϣƁ���];�4��ejw'�֡M;}36�b+�7�ئ"(�?V���5L���������X�~�����F&��Ԯ:Z�>鍨��ڏ7O�uM/O��ܝ#Uŷ���j�7���]F�	Ҳb�t�OwU�K�ͽ��������9M��1w/@ˮ~��1�g�َ��<{���<b"�콻5S=c��֕{m�~��[�nDź�}�TD�v��+v��MT�Wp/�u��'~銖�:�j��|?&�Ҳ�h������NV�L�����]Ɗ��ʦ�jbb���,�Wi�Dڙ�1������b�����B߷�ۤ�r���
�V��US=��3,�N����U�����|��(��=.���5:i��W=f��n����;Lux��.Z�w,u��iw1�Y�]�nDL۹4��ٟ8��0��2����������4���Ti��j3F�-ߢ&�TDt�����_�|&�]�NJ��m��]*���[��Uj<���i�t�ǔGV��|r���5�t���jΡ��GO�ϩ1�m��_2}�h��E���+*�S��Ί��<�5��Dyo��ͨu^P�I�����~��x�)���~��-KNԭz�;?*��ػMt��IJi���m�5WTSM1�j���"<gwW�\UD�_
j�?�����?���<=�G��p;ST���(����8�Obj�rb����ڨ�F�*��~�3��1�8�җ�����썧l�F�M�umҪ,u����=g�;mU��x�#���S���*�Q�v��o����69o����8����� ��5�W�5+ھ���gf�LM���MuմE1τS�!���r�f���B��ƛV��g�-�;�+9Y4X�4o]w����o^���
_�p����Lٳ6��?��>Q�-��\���Zsr����U\{_�W��G��y��^b��4�eSNFlx��������ɫ�b�wuC'm������4��ĭ�8{����S�-�U��oُ�6���v[/aD�՘�5xUyo�6�5wS�1��+���>p�N��������s�6bg������մQO��~����}��ta踕��X�i�R֯[��ŧ�i���]ۺ�3�X��ǵ��	�s'#������p�M7��N���HV�ƾ�UW�������蘜7��6�������1-E�v��Dx�����
�(9C����\_��F����&"oe^����DGj�����""""""��Դ�?X���j�Vr�2)�.ٽDUEq�1.y������wX��W30�f��������GT�I�>��:@��W�v�|�uۮ�����i��������-^�v}����<���8�kִ�i��js1��ߧ�ڏ��TL{��R�r��W�|I��jzż�*�\G���QT����n�M5E^�wǚݥ�1TS4��;�����V�;�����O��ȷr>Q�k�dY�����چ$���j���m �zf�Mqm1�&����]6�Dm0�zWY�bb�o�[�� �1Oj������MSr�z��Y�Þ�SOI�&ħ#>���"��V���U��1� �yx�צ��(L�Y�����[?F�L���3� 3t��}蟸����x�qu�*�M1ع��-��Q�>�
�^�3v��pνoi��sh����D���u�f�W]�A�iu���q��0����p�YG�ƻE��Q=��J��ۙ��-c���vc�k��:�=+�3�۪#/G���#i�
���nW؎ԩ�:�k�>���|��<�����𩟵~�~T�?���x~�[�Z�>��p������i���bmsW�+Ȯ:ͫ4v)��y��l�Y��
"��t�+x��ˆ�>�����vwߍ��V�&^�~7��U>��k��>+ߢ+N�������ѫ�?|l���ɹ�bܻ]]"�)��~�Wlo��6%����?���O3��i��r�2mܝ��F�{�?�����;�A��"�D��Z=���mC.ݸ��E3U��A��4ʧ�O��Ώ5O[�ю��!����9ڕ��j��i�{Q>Sr�����K{p_�G"�����ƗV��2s"�˴����zj����6y7�kͮpWc;C�C��S�j��j�T�ڣn������MP�Kzrs�u���pg���;Uڝ�fժ���?Z(���۪'��t �d�`�F٘v/��[��6/�=��{h�v���h��" #(����o�~�G�&U�?��t��j��d��W��r6�b��=X�8F��&��L��)��w
\��]�����W�#s����������k�5}m?�������]���UL~��G�5-@ ��7X�(��t�����I�i�v��lh��Y�M�2@��

sketch.js

let canvasWidth = 960;
let canvasHeight = 500;

function setup () {
  createCanvas(960, 500);
  noStroke();
}

function draw () {
  let curSecond = Math.floor(millis() / 1000.0)
  let cur_bright = (millis()/10.0) % 100;
  if(curSecond % 2 == 0) {
    cur_bright = 100 - cur_bright;
  }

  if (mouseIsPressed) {
    fillUniform(0);
  }
  else {
    fillUniform(cur_bright);
  }
  ellipse(mouseX, mouseY, 80, 80);
}

function keyTyped() {
  if (key == '!') {
    saveBlocksImages();
  }
  else if (key == '@') {
    saveBlocksImages(true);
  }
}

z_color_helper.js

function fillHsluv(h, s, l) {
  var rgb = hsluv.hsluvToRgb([h, s, l]);
  fill(rgb[0] * 255, rgb[1] * 255, rgb[2] * 255);
}

function strokeHsluv(h, s, l) {
  var rgb = hsluv.hsluvToRgb([h, s, l]);
  stroke(rgb[0] * 255, rgb[1] * 255, rgb[2] * 255);
}

function fillUniform(brightness) {
    fillHsluv(0, 0, brightness);
}

function strokeUniform(brightness) {
    strokeHsluv(0, 0, brightness);    
}

z_hsluv-0.0.3.min.js

(function() {function f(a){var c=[],b=Math.pow(a+16,3)/1560896;b=b>g?b:a/k;for(var d=0;3>d;){var e=d++,h=l[e][0],w=l[e][1];e=l[e][2];for(var x=0;2>x;){var y=x++,z=(632260*e-126452*w)*b+126452*y;c.push({b:(284517*h-94839*e)*b/z,a:((838422*e+769860*w+731718*h)*a*b-769860*y*a)/z})}}return c}function m(a){a=f(a);for(var c=Infinity,b=0;b<a.length;){var d=a[b];++b;c=Math.min(c,Math.abs(d.a)/Math.sqrt(Math.pow(d.b,2)+1))}return c}
function n(a,c){c=c/360*Math.PI*2;a=f(a);for(var b=Infinity,d=0;d<a.length;){var e=a[d];++d;e=e.a/(Math.sin(c)-e.b*Math.cos(c));0<=e&&(b=Math.min(b,e))}return b}function p(a,c){for(var b=0,d=0,e=a.length;d<e;){var h=d++;b+=a[h]*c[h]}return b}function q(a){return.0031308>=a?12.92*a:1.055*Math.pow(a,.4166666666666667)-.055}function r(a){return.04045<a?Math.pow((a+.055)/1.055,2.4):a/12.92}function t(a){return[q(p(l[0],a)),q(p(l[1],a)),q(p(l[2],a))]}
function u(a){a=[r(a[0]),r(a[1]),r(a[2])];return[p(v[0],a),p(v[1],a),p(v[2],a)]}function A(a){var c=a[0],b=a[1];a=c+15*b+3*a[2];0!=a?(c=4*c/a,a=9*b/a):a=c=NaN;b=b<=g?b/B*k:116*Math.pow(b/B,.3333333333333333)-16;return 0==b?[0,0,0]:[b,13*b*(c-C),13*b*(a-D)]}function E(a){var c=a[0];if(0==c)return[0,0,0];var b=a[1]/(13*c)+C;a=a[2]/(13*c)+D;c=8>=c?B*c/k:B*Math.pow((c+16)/116,3);b=0-9*c*b/((b-4)*a-b*a);return[b,c,(9*c-15*a*c-a*b)/(3*a)]}
function F(a){var c=a[0],b=a[1],d=a[2];a=Math.sqrt(b*b+d*d);1E-8>a?b=0:(b=180*Math.atan2(d,b)/Math.PI,0>b&&(b=360+b));return[c,a,b]}function G(a){var c=a[1],b=a[2]/360*2*Math.PI;return[a[0],Math.cos(b)*c,Math.sin(b)*c]}function H(a){var c=a[0],b=a[1];a=a[2];if(99.9999999<a)return[100,0,c];if(1E-8>a)return[0,0,c];b=n(a,c)/100*b;return[a,b,c]}function I(a){var c=a[0],b=a[1];a=a[2];if(99.9999999<c)return[a,0,100];if(1E-8>c)return[a,0,0];var d=n(c,a);return[a,b/d*100,c]}
function J(a){var c=a[0],b=a[1];a=a[2];if(99.9999999<a)return[100,0,c];if(1E-8>a)return[0,0,c];b=m(a)/100*b;return[a,b,c]}function K(a){var c=a[0],b=a[1];a=a[2];if(99.9999999<c)return[a,0,100];if(1E-8>c)return[a,0,0];var d=m(c);return[a,b/d*100,c]}function L(a){for(var c="#",b=0;3>b;){var d=b++;d=Math.round(255*a[d]);var e=d%16;c+=M.charAt((d-e)/16|0)+M.charAt(e)}return c}
function N(a){a=a.toLowerCase();for(var c=[],b=0;3>b;){var d=b++;c.push((16*M.indexOf(a.charAt(2*d+1))+M.indexOf(a.charAt(2*d+2)))/255)}return c}function O(a){return t(E(G(a)))}function P(a){return F(A(u(a)))}function Q(a){return O(H(a))}function R(a){return I(P(a))}function S(a){return O(J(a))}function T(a){return K(P(a))}
var l=[[3.240969941904521,-1.537383177570093,-.498610760293],[-.96924363628087,1.87596750150772,.041555057407175],[.055630079696993,-.20397695888897,1.056971514242878]],v=[[.41239079926595,.35758433938387,.18048078840183],[.21263900587151,.71516867876775,.072192315360733],[.019330818715591,.11919477979462,.95053215224966]],B=1,C=.19783000664283,D=.46831999493879,k=903.2962962,g=.0088564516,M="0123456789abcdef";
window.hsluv={hsluvToRgb:Q,rgbToHsluv:R,hpluvToRgb:S,rgbToHpluv:T,hsluvToHex:function(a){return L(Q(a))},hexToHsluv:function(a){return R(N(a))},hpluvToHex:function(a){return L(S(a))},hexToHpluv:function(a){return T(N(a))},lchToHpluv:K,hpluvToLch:J,lchToHsluv:I,hsluvToLch:H,lchToLuv:G,luvToLch:F,xyzToLuv:A,luvToXyz:E,xyzToRgb:t,rgbToXyz:u,lchToRgb:O,rgbToLch:P};})();

z_purview_helper.js

// note: this file is poorly named - it can generally be ignored.

// helper functions below for supporting blocks/purview

function saveBlocksImages(doZoom) {
  if(doZoom == null) {
    doZoom = false;
  }

  // generate 960x500 preview.jpg of entire canvas
  // TODO: should this be recycled?
  var offscreenCanvas = document.createElement('canvas');
  offscreenCanvas.width = 960;
  offscreenCanvas.height = 500;
  var context = offscreenCanvas.getContext('2d');
  // background is flat white
  context.fillStyle="#FFFFFF";
  context.fillRect(0, 0, 960, 500);
  context.drawImage(this.canvas, 0, 0, 960, 500);
  // save to browser
  var downloadMime = 'image/octet-stream';
  var imageData = offscreenCanvas.toDataURL('image/jpeg');
  imageData = imageData.replace('image/jpeg', downloadMime);
  p5.prototype.downloadFile(imageData, 'preview.jpg', 'jpg');

  // generate 230x120 thumbnail.png centered on mouse
  offscreenCanvas.width = 230;
  offscreenCanvas.height = 120;

  // background is flat white  
  context = offscreenCanvas.getContext('2d');
  context.fillStyle="#FFFFFF";
  context.fillRect(0, 0, 230, 120);

  if(doZoom) {
    // pixelDensity does the right thing on retina displays
    var pd = this._pixelDensity;
    var sx = pd * mouseX - pd * 230/2;
    var sy = pd * mouseY - pd * 120/2;
    var sw = pd * 230;
    var sh = pd * 120;
    // bounds checking - just displace if necessary
    if (sx < 0) {
      sx = 0;
    }
    if (sx > this.canvas.width - sw) {
      sx = this.canvas.width - sw;
    }
    if (sy < 0) {
      sy = 0;
    }
    if (sy > this.canvas.height - sh) {
      sy = this.canvas.height - sh;
    }
    // save to browser
    context.drawImage(this.canvas, sx, sy, sw, sh, 0, 0, 230, 120);
  }
  else {
    // now scaledown
    var full_width = this.canvas.width;
    var full_height = this.canvas.height;
    context.drawImage(this.canvas, 0, 0, full_width, full_height, 0, 0, 230, 120);
  }
  imageData = offscreenCanvas.toDataURL('image/png');
  imageData = imageData.replace('image/png', downloadMime);
  // call this function after 1 second
  setTimeout(function(){
    p5.prototype.downloadFile(imageData, 'thumbnail.png', 'png');
  }, 1000);
}