網頁

2016年5月16日

2016 表情符號 V2 更新版 ( Unicode Emoji 格式 ) 顯示策劃

一個星期前, 發表了 Unicode Emoji 表情符號 2016 版.
期間, 經過研究; 實踐; 改進...
終於找到一個更好, 更方便的程式碼. V2 更新版

  • 放棄使用 CSS 對表的方式
  • 只是用單一段 JavaScript
  • 放入 [設計]>[版面配置]>[新增小工具]>[HTML/Javascript]>
  • 只是針對留言區進行顯示處理
  • 對應 Win8/10 浮動鍵盤所有 Emoji (自帶輸入工具設計中)
  • 加入 YouTube 超連結對應
  • 支援 YouTube 長網址 e.g. https://www.youtube.com/watch?v=usO_6-RuCrg
  • 支援 YouTube 短網址 e.g. https://youtu.be/usO_6-RuCrg
  • 加入圖片超連結對應 e.g. https://c1.staticflickr.com/9/8325/8149501783_656c5e33a1_b.jpg
  • 支援 jpg , jpeg , gif , png 這4種圖片顯示格式
  • Enoji 的轉換用了 ECMAScript 6 指令, 因為它完全不被 IE 支援. 所以 IE "被"沒有效果.

先列出整段 JavaScript

<!-- 2016 My Emoji blogspot 顯示 start -->
<script>(function() {
        var c = document.getElementById("comment-holder");
        if (c) {
            var p = c.getElementsByTagName("p");
            for (i = 0; i < p.length; i++) {
                if (p[i].getAttribute("CLASS") == "comment-content") {
                    var str = p[i].innerHTML.replace(/(http(s?):\/(\/[^\/\s]+)+)(\.jpg|\.jpeg|\.gif|\.png)/gi, "<img style='max-width:500px;' src='$&' />");
                    str = str.replace(/http(s?):\/\/www\.youtube\.com\/watch\?v\=.{11}/gi,
                    function(a) {
                        return "<iframe width='500' height='300' src='https://www.youtube.com/embed/" + a.split("v=")[1] + "' frameborder='0' allowfullscreen></iframe>"
                    });
                    str = str.replace(/http(s?):\/\/youtu\.be\/.{11}/gi,
                    function(a) {
                        return "<iframe width='500' height='300' src='https://www.youtube.com/embed/" + a.split("/")[3] + "' frameborder='0' allowfullscreen></iframe>"
                    });
                    if (
                    /*@cc_on!@*/
                    false || !!document.documentMode == false) {
                        str = str.replace(/\ud83c[\udc00-\udfff]|\ud83d[\udc00-\ude4f]|\ud83d[\ude80-\udeff]|\u203c|[\u2b1b-\u2b1c]|[\u2b05-\u2b07]|[\u2049-\u2935]|[\u3030-\u3299]|\u00a9|\u00ae/gi,
                        function(A) {
                            return '<img style="margin: 0 0.1em" width="20" src="//mail.google.com/mail/e/' + A.codePointAt(0).toString(16) + '" />'
                        });
                    }
                    p[i].innerHTML = str;
                };
            };
        };
    })();</script>
<!-- 2016 My Emoji blogspot 顯示 end -->

程式已經指定 Emoji 大小為 20px (第22行 width='20')
YouTube 大小為 500px x 300px (第11,15行 width='500' height='300')
圖片顯示不超過 500px (第8行 max-width:500px)
以上數字因應你的需要, 可以自行修改.
YouTube & 圖片的網址, 建議整句放在同一行, 而沒有其他字句. 顯示較好.

這篇的留言裡, 先作出一個示範展示. 這裡上一張未經處理的原始文字截圖, 作為對比.

安裝只是用單一段 JavaScript,
放入 [設計]>[版面配置]>[新增小工具]>[HTML/Javascript]>
如下圖...


2016年5月8日

2016 表情符號 ( Unicode Emoji 格式 ) 顯示策劃

Blogspot 留言使用表情符號問題, 多年來都是"土砲"制作,
用上 Yahoo 的圖像, 用上可動插畫的 ...

在手機上, 不論 Android / IOS 都可以好好顯示 Emoji 彩色圖像了.
因為 Emoji 已經是 Unicode 對應.

今日 Win10 已經面世差不多一年, 跟隨的瀏覽器也有大的改進...
Chorme PC版本 50.0.2661.94 m (8-May-2016 記錄)
Edge PC版本 20.10240.16384.0 (8-May-2016 記錄)
可以輸入 Unicode Emoji ... (Win10 有它的 Emoji 浮動鍵盤)

也可以顯示, 但是 ... 黑白的.
當然, 用回老方法, innerHTML.replace 找出它們的 Unicode, 換上對應的 Emoji 圖像.
彩色的可愛小公仔, 通通跑出來.

好了上主菜, 2 個主要文件, CSS & Javascript.
blogger 應該不會陌生的一個方法,
[設計]>[版面配置]>[新增小工具]>[HTML/Javascript]>
貼上 CSS (所有 Emoji 圖像對應 url, 以及圖像格式控制)
~~ 這次選用的是 Googel email 裡顯示的 Emoji 圖像. ~~ e.g. https://mail.google.com/mail/e/1f601

<link href='https://drive.google.com/file/d/0B9w7kASMsnuxdGxZSEVNUE5GdjA/view' rel='stylesheet' type='text/css'/>

因為內容十分長, 所以用了 link CSS 的方法, 你可以打開看看, 打它的內容全部複製下來,
貼入 "HTML/JavaScript" 小工具裡, 只要在之前及之後加入 style 標籤...
<style>
--- CSS 文件內容 ---
</style>
或是儲存它成為你自家的 CSS 文件, 放在個人可外連空間, 再用 CSS link 回網誌即可.
開首可自己改動的2 項,
height: 20px;
width: 20px;
它是圖像的大小, 我設定為 20px, 可以加大 e.g. 32px, 或是改細 e.g. 16px

另一段是 Javascript (抽出 Emoji 的 unicode, replace CSS 相應圖片 url)
同樣的貼到 CSS HTML/Javascript小工具裡.

<script>
c = document.getElementById("comment-holder");
if (c) {
  p = c.getElementsByTagName("p");
  for (i=0; i<p.length; i++) {
    if (p[i].getAttribute("CLASS") == "comment-content") {
      str = p[i].innerHTML.replace( /\ud83c[\udc00-\udfff]|\ud83d[\udc00-\ude4f]|\ud83d[\ude80-\udeff]|[\u2030-\u3299]|\u00a9|\u00ae/gi , '<span class="emoji" data-emoji="$&"></span>');
      p[i].innerHTML = str
    }
  }
};
</script>

這次處理的共有 831 個圖像對換 (Win10 Emoji 鍵盤可輸入的), 一次過轉換, 可能有點慢.
所以只針對留言區為處置位置. 而且在網誌裡, 或是小工具裡直接寫入 Uni-Emoji, 日後是一個可怕的處理問題, 不搞為上策.

參考網站:
http://crocodillon.com/blog/parsing-emoji-unicode-in-javascript
https://r12a.github.io/apps/conversion/
http://apps.timwhitlock.info/emoji/tables/unicode
http://emojipedia.org/slightly-smiling-face/
http://emojicss.com/