EmojiPicker.pm 889 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package Trog::Component::EmojiPicker;
  2. use strict;
  3. use warnings;
  4. no warnings qw{experimental};
  5. use feature qw{signatures state};
  6. use JSON::MaybeXS;
  7. use Trog::Renderer;
  8. sub render () {
  9. state %categorized;
  10. if ( !%categorized ) {
  11. my $file = 'www/scripts/list.min.json';
  12. die "Run make prereq-frontend first" unless -f $file;
  13. my $raw = File::Slurper::read_binary($file);
  14. my $emojis = JSON::MaybeXS::decode_json($raw);
  15. foreach my $emoji ( @{ $emojis->{emojis} } ) {
  16. $categorized{ $emoji->{category} } //= [];
  17. push( @{ $categorized{ $emoji->{category} } }, $emoji->{emoji} );
  18. }
  19. }
  20. return Trog::Renderer->render(
  21. contenttype => 'text/html',
  22. component => 1,
  23. template => 'emojis.tx',
  24. data => {
  25. categories => \%categorized,
  26. },
  27. );
  28. }
  29. 1;