diff --git a/.gitignore b/.gitignore index 0a79b04..c0fd66b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,9 @@ node_modules/** src/bundle/** publish/** +ext/bundle/** +ext/assets/faces/** +ext/assets/icons/** + # for mac **/.DS_Store diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..15060d7 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,70 @@ +
+一个简单、可靠、纯粹、中文语义化的 Emoji 扩展
+ +*** + +名字 +--- +`+Emoji` _灵感来源于 `文字 + Emoji` 之意_ + +下载 +--- +[Chrome 应用商店](https://chrome.google.com/webstore/detail/+emoji/kieghamlkoahkbimidmahcjpikacoclm) · [Firefox 附加组件](https://addons.mozilla.org/zh-CN/developers/addon/emoji_cn/edit) · [更多版本](http://ksria.com/emoji/) + +详细介绍 +--- +https://github.com/Kenshin/emoji + +版本说明 +--- + +#### 1.1.0 + +> 2017.11.07,包括:`Chrome` 与 `Firefox` + +- [x] :sparkles: 新的 `多选插入模式`,详细 [请看这里](https://github.com/Kenshin/emoji/wiki#多选插入模式); + +- [x] :sparkles: 新的 `直接插入模式`,详细 [请看这里](https://github.com/Kenshin/emoji/wiki#直接插入模式); + +- [x] :bug: 修复插入模式输入多个中文只匹配一个的问题; + +#### 1.0.0 with Firefox + +> 2017.11.03 + +- [x] :rocket: 适配 `Firefox`,并上架到 [Firefox 附加组件](https://addons.mozilla.org/zh-CN/developers/addon/emoji_cn/) + +#### 1.0.0 with Chrome + +> 2017.11.02 + +- [x] :bookmark: 上架 Chrome 应用商城; + +#### 1.0.0 测试版 + +> 2017.10.25 ~ 2017.10.31 + +- [x] :lipstick: `2017.10.31` 完成 `+Emoji` 的首页; + +- [x] :construction: `2017.10.28` 增加 [单选插入模式](https://github.com/Kenshin/emoji/wiki#单选插入模式) 的 `中文匹配` 模式; + +- [x] :sparkles: `2017.10.27` 完成 `选项页` 的功能; + +- [x] :wrench: `2017.10.25` 完成 `开发环境` 与 `发布环境` 的自动化配置; + +#### 1.0.0 - 内部测试版 + +> 2017.09.16 ~ 2017.09.22 + +- [x] :sparkles: `2017.09.21` 完成 [单选插入模式](https://github.com/Kenshin/emoji/wiki#单选插入模式) 的 `Tab 迁移功能` ; + +- [x] :sparkles: `2017.09.20` 完成 [单选插入模式](https://github.com/Kenshin/emoji/wiki#单选插入模式) 的 `ESC 退出功能`; + +- [x] :sparkles: `2017.09.19` 完成 `独立窗体` 功能; + +- [x] :sparkles: `2017.09.19` 替换 Popup 为 `Google Android 7.0 Emoji`; + +- [x] :tada: `2017.09.18` 完成 `单选插入模式`; + +- [x] :tada: `2017.09.16` 需求构思,并初次提交; diff --git a/README.md b/README.md index eaa83c6..55cec22 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@一个基于 Chrome 简单、可靠、纯粹、中文语义化的 Emoji 扩展
+一个简单、可靠、纯粹、中文语义化的 Emoji 扩展
*** @@ -8,38 +8,29 @@ `+Emoji` _灵感来源于 `文字 + Emoji` 之意_ ### 下载: -http://ksria.com/emoji - -### 截图: - -**独立窗口** - - -**Popup 窗口** - - -**中文语义化** - - -**插入全部** - - -**选项** - +[Chrome 应用商店](https://chrome.google.com/webstore/detail/+emoji/kieghamlkoahkbimidmahcjpikacoclm) · [Firefox 附加组件](https://addons.mozilla.org/zh-CN/developers/addon/emoji_cn/) · [更多版本](http://ksria.com/emoji/) ### 功能: - 使用了最基本的 Emoji 集合,支持任何 App; _均不会出现乱码情况_ -- 支持关键字(中/英文)查询匹配 Emoji; - > 呼出关键字 [:: | ::] [关键字 | 空格] [空格] +- 支持 `中文语义`并具有多种插入模式: + + 1. **[单选插入模式](https://github.com/Kenshin/emoji/wiki#单选插入模式)** + _通过触发条件以及关键字会显示相关的 Emoji,适合全键盘操作;触发条件默认为 [:: | ::] [关键字 | 空格] [空格]_ + + 例如: + * `::gr ` // 查询关键字 gr 为内容的 Emoji + * `:: ` // 查询全部 Emoji + * `::笑 ` // 查询中文语义 + * `:: ` // 查询全部 Emoji + + 2. **[多选插入模式](https://github.com/Kenshin/emoji/wiki#多选插入模式)** + _通过 `右键菜单` 进入,显示全部的 Emoji,可跟随光标插入,适合鼠标操作;_ - 例如: - * `::gr ` // 查询关键字 gr 为内容的 Emoji - * `:: ` // 查询全部 Emoji - * `::笑 ` // 查询中文语义 - * `:: ` // 查询全部 Emoji + 3. **[直接插入模式](https://github.com/Kenshin/emoji/wiki#直接插入模式)** + _当明确知道 Emoji 的名称,或通过关键字查找的结果唯一的话,则直接将 Emoji 插入到触发器中;_ - 复制到剪切板并支持多个复制; @@ -50,18 +41,45 @@ _均不会出现乱码情况_ - 个性化定制,包括:可定义触发条件、插入规则,黑名单(支持 [minimatch](https://github.com/isaacs/minimatch) 模糊匹配)等; +### 截图: + +**独立窗口** + + +**Popup 窗口** + + +**选项** + + +**中文语义化** + + ### 附一段使用视频: - [常规操作](https://i.imgur.com/XYTpirX.gif) - [语义化插入](https://i.imgur.com/GCPgNrt.gif) +### 投票: +`+Emoji` 是一个免费并开源的项目,如果觉得不错,请帮忙好评 [Chrome 应用商店](https://chrome.google.com/webstore/detail/%2Bemoji/kieghamlkoahkbimidmahcjpikacoclm/reviews) · [Firefox 附加组件](https://addons.mozilla.org/zh-CN/firefox/addon/emoji_cn/reviews/) ,你的认可是对我最大的鼓励 😀 。 + ### 已知问题: - iFrame 无法使用 `插入模式`; - 非标准 ` / ",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h