From f5b1fda6b71ae1f226b637c91f17e0f31d172b23 Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 9 Apr 2025 10:21:01 +0000 Subject: [PATCH 1/4] reorganize emojis and allow custom site emojis --- images/emoji/custom/README | 17 ++++++++ images/emoji/{ => emojitwo}/README | 0 .../emoji/{ => emojitwo}/astonished_face.png | Bin .../bottle_with_popping_cork.png | Bin .../emoji/{ => emojitwo}/clapping_hands.png | Bin .../{ => emojitwo}/disappointed_face.png | Bin images/emoji/{ => emojitwo}/grinning_face.png | Bin images/emoji/{ => emojitwo}/kiss_mark.png | Bin images/emoji/{ => emojitwo}/red_heart.png | Bin images/emoji/{ => emojitwo}/sleeping_face.png | Bin .../{ => emojitwo}/slightly_smiling_face.png | Bin .../{ => emojitwo}/smiling_face_with_halo.png | Bin .../smiling_face_with_horns.png | Bin .../winking_face_with_tongue.png | Bin images/emoji/hubzilla/hubzilla.png | Bin 0 -> 3948 bytes images/emoji/hubzilla/smiley-facepalm.gif | Bin 0 -> 582 bytes images/red-koala.png | Bin 14669 -> 0 bytes include/text.php | 41 ++++++++++++------ view/tpl/conv_item.tpl | 2 +- view/tpl/conv_list.tpl | 2 +- 20 files changed, 46 insertions(+), 16 deletions(-) create mode 100644 images/emoji/custom/README rename images/emoji/{ => emojitwo}/README (100%) rename images/emoji/{ => emojitwo}/astonished_face.png (100%) rename images/emoji/{ => emojitwo}/bottle_with_popping_cork.png (100%) rename images/emoji/{ => emojitwo}/clapping_hands.png (100%) rename images/emoji/{ => emojitwo}/disappointed_face.png (100%) rename images/emoji/{ => emojitwo}/grinning_face.png (100%) rename images/emoji/{ => emojitwo}/kiss_mark.png (100%) rename images/emoji/{ => emojitwo}/red_heart.png (100%) rename images/emoji/{ => emojitwo}/sleeping_face.png (100%) rename images/emoji/{ => emojitwo}/slightly_smiling_face.png (100%) rename images/emoji/{ => emojitwo}/smiling_face_with_halo.png (100%) rename images/emoji/{ => emojitwo}/smiling_face_with_horns.png (100%) rename images/emoji/{ => emojitwo}/winking_face_with_tongue.png (100%) create mode 100644 images/emoji/hubzilla/hubzilla.png create mode 100644 images/emoji/hubzilla/smiley-facepalm.gif delete mode 100644 images/red-koala.png diff --git a/images/emoji/custom/README b/images/emoji/custom/README new file mode 100644 index 000000000..004e6a6ce --- /dev/null +++ b/images/emoji/custom/README @@ -0,0 +1,17 @@ +# Custom site emojis + +Create a file called custom_emojis.json and add your custom emojis to this folder (or anywhere else you like). +The content of custom_emojis.json should look as follows: + +´´´ +{ + "some_emoji": { + "shortname": ":some_emoji:", + "filepath": "images/emoji/custom/some_emoji.png" + }, + "another_emoji": { + "shortname": ":another_emoji:", + "filepath": "images/emoji/custom/another_emoji.png" + }, +} +´´´ diff --git a/images/emoji/README b/images/emoji/emojitwo/README similarity index 100% rename from images/emoji/README rename to images/emoji/emojitwo/README diff --git a/images/emoji/astonished_face.png b/images/emoji/emojitwo/astonished_face.png similarity index 100% rename from images/emoji/astonished_face.png rename to images/emoji/emojitwo/astonished_face.png diff --git a/images/emoji/bottle_with_popping_cork.png b/images/emoji/emojitwo/bottle_with_popping_cork.png similarity index 100% rename from images/emoji/bottle_with_popping_cork.png rename to images/emoji/emojitwo/bottle_with_popping_cork.png diff --git a/images/emoji/clapping_hands.png b/images/emoji/emojitwo/clapping_hands.png similarity index 100% rename from images/emoji/clapping_hands.png rename to images/emoji/emojitwo/clapping_hands.png diff --git a/images/emoji/disappointed_face.png b/images/emoji/emojitwo/disappointed_face.png similarity index 100% rename from images/emoji/disappointed_face.png rename to images/emoji/emojitwo/disappointed_face.png diff --git a/images/emoji/grinning_face.png b/images/emoji/emojitwo/grinning_face.png similarity index 100% rename from images/emoji/grinning_face.png rename to images/emoji/emojitwo/grinning_face.png diff --git a/images/emoji/kiss_mark.png b/images/emoji/emojitwo/kiss_mark.png similarity index 100% rename from images/emoji/kiss_mark.png rename to images/emoji/emojitwo/kiss_mark.png diff --git a/images/emoji/red_heart.png b/images/emoji/emojitwo/red_heart.png similarity index 100% rename from images/emoji/red_heart.png rename to images/emoji/emojitwo/red_heart.png diff --git a/images/emoji/sleeping_face.png b/images/emoji/emojitwo/sleeping_face.png similarity index 100% rename from images/emoji/sleeping_face.png rename to images/emoji/emojitwo/sleeping_face.png diff --git a/images/emoji/slightly_smiling_face.png b/images/emoji/emojitwo/slightly_smiling_face.png similarity index 100% rename from images/emoji/slightly_smiling_face.png rename to images/emoji/emojitwo/slightly_smiling_face.png diff --git a/images/emoji/smiling_face_with_halo.png b/images/emoji/emojitwo/smiling_face_with_halo.png similarity index 100% rename from images/emoji/smiling_face_with_halo.png rename to images/emoji/emojitwo/smiling_face_with_halo.png diff --git a/images/emoji/smiling_face_with_horns.png b/images/emoji/emojitwo/smiling_face_with_horns.png similarity index 100% rename from images/emoji/smiling_face_with_horns.png rename to images/emoji/emojitwo/smiling_face_with_horns.png diff --git a/images/emoji/winking_face_with_tongue.png b/images/emoji/emojitwo/winking_face_with_tongue.png similarity index 100% rename from images/emoji/winking_face_with_tongue.png rename to images/emoji/emojitwo/winking_face_with_tongue.png diff --git a/images/emoji/hubzilla/hubzilla.png b/images/emoji/hubzilla/hubzilla.png new file mode 100644 index 0000000000000000000000000000000000000000..4e7c25eb49d257719da068c65f2fbb7d36f2a0ea GIT binary patch literal 3948 zcmV-y50mhTP)8S?3&boXvH)^Q3&~HNl|tegv5}dRGTQ#VyUz>i1n2i zMR#ZCGrM4dRf!)=s@SGUNTPx`S;#C_dL(Q?N404|nkiH->(xobpN2z+d4e_dM@^O!NLX{wDh2Lx~v@XPIK#?b`G=koN* z7f};$t`Bbr2vA7i8{0o+2;Bqvg@P!cG>dRsQ_OlPAV5BYy44h0@7YUKNdVyjtD}lM zBH_qw&9`$PAiyw7RibT@81p#DIWAM}ErqL+G3&*_JZu7J`| zHOuTf0t+xK;HU3Ks>te7Cq%Aadj+|G04Ew8flO<#SBh}6$5daN8Esv??JIN! z1ULcks~R(_LI2i^`YZfPcC*G+Bg*AfB+wmJv-Bj6#bMBhI(qdoxVMA0Y}N4RfJnx>^Ff^{1WPP7Ilq# z>CW=s2NnQ0(2|+&Bk%!AOS+1$4O{>RmwOeK_-)*Z-ZC>m#PM*v3%2yiG6M8^9u2pktc-yI0T8ODdSFAtzUOo4LW5kQo(0QkfC zaJdg%fCdCO{5ANJ0D&Bn3HXrqZ2|0ujG-Rz9RXAb2yi4I@*e@v!B^85febj{#~9$P z0Qf^0F~9cTQn0csfc}s%)Ls5t3f5defWvcP{6~O_kCg2KG6DRkQZXHB0Yk7QY-XaRvP;4<6+R1m8sThu-gVoq!fU_|9NAbD(tqDvYwga* zfNL7TyCR36bv+a(P_79o>lE74j(wC^pLV=4JWLXtaQV#mv5{*8(F+TLG zbQdHtXM{p}56Tq*?uX^a%`xlpL0N!qGkPUBb&8xlgi5_H$bCgl8|=$f_E^n~n|%VGNRL%x;&QOKqZ!~t{In=y zmgF+d^S~ea1pfoYPWJSpv#~x2Ff&0}r?H;`W))EBJ?i8>pNyAn|KNp52}({1*^5K zt|2|Q(%8S$g9V-j0)ARl6Qe4vNr%7(7&{^Q2=Lz{9(s7Y)Qa5q;efCQ3ovgTq2KJZ z*8zX-qA|SD6>_GDQ~Z%4byg}m`#AjGPcd>svNqD=U%}N4nVE>bFv5NRRmqt3*nkL7 z-H>iTB<4aE?^YNKga-J?YbxfZWLYY&rvFKhzaF9A|8vP$WR4!pbm`LtR5xa7 z5O)?!)`P*?K)`Po)kKS9O&$pN0A*J6Cg6WZAo{;6c5(}Q0{=r6U{ZpTN@KqQoat3d zr@{|%#`)UTyGq|Z-iN!Fi?@uR)X+iolIHs8v%TGLj0LC+WxncR@Lx7ildQ8A3R?BO1pUiXW_MOg9Qr=WX!y zJIPq|Z~D9Mum!L>ti_%JUr-g+n4;X-&2`a-hYEavR4iJr$Z8Mc|C8+K=yd~{Mpf

2yapFJJH4_7yst>Z}#U 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

V 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 Kp^ diff --git a/include/text.php b/include/text.php index fe238a297..52a6440cb 100644 --- a/include/text.php +++ b/include/text.php @@ -1272,25 +1272,38 @@ function sslify($s) { function get_emojis() { $emojis = [ // Reactions (emojitwo emojis) - 'astonished_face' => ['shortname' => ':astonished_face:', 'filepath' => 'images/emoji/astonished_face.png'], - 'bottle_with_popping_cork' => ['shortname' => ':bottle_with_popping_cork:', 'filepath' => 'images/emoji/bottle_with_popping_cork.png'], - 'clapping_hands' => ['shortname' => ':clapping_hands:', 'filepath' => 'images/emoji/clapping_hands.png'], - 'disappointed_face' => ['shortname' => ':disappointed_face:', 'filepath' => 'images/emoji/disappointed_face.png'], - 'grinning_face' => ['shortname' => ':grinning_face:', 'filepath' => 'images/emoji/grinning_face.png'], - 'kiss_mark' => ['shortname' => ':kiss_mark:', 'filepath' => 'images/emoji/kiss_mark.png'], - 'red_heart' => ['shortname' => ':red_heart:', 'filepath' => 'images/emoji/red_heart.png'], - 'sleeping_face' => ['shortname' => ':sleeping_face:', 'filepath' => 'images/emoji/sleeping_face.png'], - 'slightly_smiling_face' => ['shortname' => ':slightly_smiling_face:', 'filepath' => 'images/emoji/slightly_smiling_face.png'], - 'smiling_face_with_halo' => ['shortname' => ':smiling_face_with_halo:', 'filepath' => 'images/emoji/smiling_face_with_halo.png'], - 'smiling_face_with_horns' => ['shortname' => ':smiling_face_with_horns:', 'filepath' => 'images/emoji/smiling_face_with_horns.png'], - 'winking_face_with_tongue' => ['shortname' => ':winking_face_with_tongue:', 'filepath' => 'images/emoji/winking_face_with_tongue.png'], + 'astonished_face' => ['shortname' => ':astonished_face:', 'filepath' => 'images/emoji/emojitwo/astonished_face.png'], + 'bottle_with_popping_cork' => ['shortname' => ':bottle_with_popping_cork:', 'filepath' => 'images/emoji/emojitwo/bottle_with_popping_cork.png'], + 'clapping_hands' => ['shortname' => ':clapping_hands:', 'filepath' => 'images/emoji/emojitwo/clapping_hands.png'], + 'disappointed_face' => ['shortname' => ':disappointed_face:', 'filepath' => 'images/emoji/emojitwo/disappointed_face.png'], + 'grinning_face' => ['shortname' => ':grinning_face:', 'filepath' => 'images/emoji/emojitwo/grinning_face.png'], + 'kiss_mark' => ['shortname' => ':kiss_mark:', 'filepath' => 'images/emoji/emojitwo/kiss_mark.png'], + 'red_heart' => ['shortname' => ':red_heart:', 'filepath' => 'images/emoji/emojitwo/red_heart.png'], + 'sleeping_face' => ['shortname' => ':sleeping_face:', 'filepath' => 'images/emoji/emojitwo/sleeping_face.png'], + 'slightly_smiling_face' => ['shortname' => ':slightly_smiling_face:', 'filepath' => 'images/emoji/emojitwo/slightly_smiling_face.png'], + 'smiling_face_with_halo' => ['shortname' => ':smiling_face_with_halo:', 'filepath' => 'images/emoji/emojitwo/smiling_face_with_halo.png'], + 'smiling_face_with_horns' => ['shortname' => ':smiling_face_with_horns:', 'filepath' => 'images/emoji/emojitwo/smiling_face_with_horns.png'], + 'winking_face_with_tongue' => ['shortname' => ':winking_face_with_tongue:', 'filepath' => 'images/emoji/emojitwo/winking_face_with_tongue.png'], - 'facepalm' => ['shortname' => ':facepalm:', 'filepath' => 'images/emoticons/smiley-facepalm.gif'], - 'hubzilla' => ['shortname' => ':hubzilla:', 'filepath' => 'images/hubzilla.png'] + // Hubzilla custom + 'facepalm' => ['shortname' => ':facepalm:', 'filepath' => 'images/emoji/hubzilla/smiley-facepalm.gif'], + 'hubzilla' => ['shortname' => ':hubzilla:', 'filepath' => 'images/emoji/hubzilla/hubzilla.png'] ]; + // Provided by addon call_hooks('get_emojis', $emojis); + // Custom site emojis + $custom_json_path = 'images/emoji/custom/custom_emojis.json'; + if (file_exists($custom_json_path)) { + $custom_json = file_get_contents($custom_json_path); + $custom_arr = json_decode($custom_json, true); + + if ($custom_arr) { + $emojis = array_merge($emojis, $custom_arr); + } + } + return $emojis; } diff --git a/view/tpl/conv_item.tpl b/view/tpl/conv_item.tpl index 96e6f57df..da1e5a472 100644 --- a/view/tpl/conv_item.tpl +++ b/view/tpl/conv_item.tpl @@ -162,7 +162,7 @@

diff --git a/view/tpl/conv_list.tpl b/view/tpl/conv_list.tpl index 6143e156e..ad54fce7e 100644 --- a/view/tpl/conv_list.tpl +++ b/view/tpl/conv_list.tpl @@ -167,7 +167,7 @@
{{foreach $item.reactions as $react}}
- {{$react}} + {{$react}}
{{/foreach}}
From b9aec78ddeca2e6e2d4e3c2c17beb40345f16b2a Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 9 Apr 2025 10:26:00 +0000 Subject: [PATCH 2/4] rename README > README.md --- images/emoji/custom/{README => README.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename images/emoji/custom/{README => README.md} (100%) diff --git a/images/emoji/custom/README b/images/emoji/custom/README.md similarity index 100% rename from images/emoji/custom/README rename to images/emoji/custom/README.md From 982d7540cc0077d92795f23b4ceaa80e7cafae3e Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 9 Apr 2025 10:29:23 +0000 Subject: [PATCH 3/4] wrong ticks --- images/emoji/custom/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/images/emoji/custom/README.md b/images/emoji/custom/README.md index 004e6a6ce..96718270c 100644 --- a/images/emoji/custom/README.md +++ b/images/emoji/custom/README.md @@ -3,7 +3,7 @@ Create a file called custom_emojis.json and add your custom emojis to this folder (or anywhere else you like). The content of custom_emojis.json should look as follows: -´´´ +``` { "some_emoji": { "shortname": ":some_emoji:", @@ -14,4 +14,4 @@ The content of custom_emojis.json should look as follows: "filepath": "images/emoji/custom/another_emoji.png" }, } -´´´ +``` \ No newline at end of file From 50ea3afcb0da82d95689f89d81771023ccfb084a Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 9 Apr 2025 10:43:57 +0000 Subject: [PATCH 4/4] re-add red-koala.png which has been removed by accident --- images/red-koala.png | Bin 0 -> 14991 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/red-koala.png diff --git a/images/red-koala.png b/images/red-koala.png new file mode 100644 index 0000000000000000000000000000000000000000..723e79ba2e72d379a0ee39f25d11a4052810fef9 GIT binary patch literal 14991 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