"
47 | ],
48 | "match_about_blank": true,
49 | "all_frames": true
50 | }],
51 | "options_ui": {
52 | "page": "options.html",
53 | "browser_style": true
54 | },
55 | "web_accessible_resources": [
56 | "_locales/*.json"
57 | ],
58 | "browser_action": {
59 | "default_icon": {
60 | "16": "icons/icon16.png",
61 | "32": "icons/icon32.png"
62 | },
63 | "default_title": "Text Linky Tool"
64 | },
65 | "commands": {
66 | "command_action": {
67 | "suggested_key": {
68 | "default": "F8"
69 | }
70 | }
71 | }
72 | }
--------------------------------------------------------------------------------
/TextLinkyTool/options.css:
--------------------------------------------------------------------------------
1 | hr { border-color: #CCCCCC; margin: 1em 0; }
2 |
3 | #inpOpenPagesLimit { width: 4em; }
4 | #selToolbarButtonAction, #selKeyboardShortcutAction { font-size: small; }
5 | #lblSaved { color: red; visibility: hidden; }
6 |
7 | .formatdiv { display: inline-table; border: 1px solid black; padding: 0.5em; }
8 | .listName { width: 20%; font-size: small; }
9 | .listData { width: 60%; font-size: small; }
10 | .btnAdd { background-color: #009933;color:#000000; }
11 | .btnDel { background-color: #990033;color:#FFFFFF; }
12 |
13 | .urlpart span {color:blue; text-decoration: underline;}
14 | .iplang span {color:blue; text-decoration: underline;}
15 | .tipbox { position: relative; display: inline-block; text-decoration: underline; }
16 | .tiptxt { position: absolute; bottom: 100%; padding: 0.5em; display: none;
17 | border: 1px solid #000000; border-radius: 1em; background-color: #FFFFFF; white-space: nowrap; }
18 | .tipbox:hover .tiptxt { display: block; }
--------------------------------------------------------------------------------
/TextLinkyTool/options.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
140 |
141 |
142 |
143 |
144 |
145 | URL part text format:
146 |
147 | [[url]] - URL text
148 | [[host]] - URL host text
149 | [[fullhost]] - URL full host text
150 | [[fullpath]] - URL full path text
151 |
152 | [[potocol]] - URL potocol text
153 | [[hostname]] - URL hostname text
154 | [[port]] - URL port text
155 | [[pathname]] - URL pathname text
156 | [[search]] - URL search text
157 | [[hash]] - URL hash text
158 |
159 |
160 | Improve translation:
161 |
162 | Fork the repository from
Github ,
163 | apply your changes and create a pull request.
164 |
165 |
166 |
--------------------------------------------------------------------------------
/TextLinkyTool/options.js:
--------------------------------------------------------------------------------
1 | //page ready
2 | function pageReady() {
3 | commonLookup.getUserTltSetting().then((tlt)=>{
4 | //i18n message support for page elements
5 | document.querySelectorAll("[data-i18n]").forEach(ele => {
6 | let ctxt = commonLookup.getMessage(tlt.userTltSetting.locale,tlt.userTltSetting.localeData,ele.getAttribute("data-i18n"));
7 | switch (ele.tagName){
8 | case "INPUT":
9 | ele.value = ctxt;
10 | //case "LABEL": case "OPTION":
11 | default:
12 | ele.textContent = ctxt;
13 | }
14 | });
15 |
16 | //get option settings
17 | showOptionSettings(tlt.userTltSetting);
18 | });
19 |
20 | //Tooltips active
21 | document.querySelectorAll(".tiptxt").forEach((ele)=>{
22 | let tptxt = ele.cloneNode(true);
23 | let boxcss = ele.getAttribute("data-boxcss");
24 | tptxt.attributes.removeNamedItem("data-boxcss");
25 | document.querySelectorAll(`.tipbox.${boxcss}`).forEach((box)=>{ box.appendChild(tptxt.cloneNode(true)); });
26 | });
27 | }
28 |
29 | //custom formats list delete
30 | function listDel(list,idx)
31 | {
32 | clearSavedMessage();
33 | list.querySelectorAll(`[data-idx="${idx}"]`).forEach(ele => ele.remove());
34 | }
35 |
36 | //custom formats list add
37 | function listAdd(list,name,value,idx)
38 | {
39 | clearSavedMessage();
40 | let frag = document.createDocumentFragment();
41 | let inpName = document.createElement("input");
42 | inpName.setAttribute("tpye","text");
43 | inpName.setAttribute("class","listName");
44 | inpName.setAttribute("value",name);
45 | inpName.setAttribute("maxlength","40");
46 | inpName.setAttribute("data-idx",idx.toString());
47 | inpName.addEventListener("change", clearSavedMessage);
48 | inpName.addEventListener("keypress", clearSavedMessage);
49 | frag.appendChild(inpName);
50 | let inpData = document.createElement("input");
51 | inpData.setAttribute("tpye","text");
52 | inpData.setAttribute("class","listData");
53 | inpData.setAttribute("value",value);
54 | inpData.setAttribute("maxlength","200");
55 | inpData.setAttribute("data-idx",idx.toString());
56 | inpData.addEventListener("change", clearSavedMessage);
57 | inpData.addEventListener("keypress", clearSavedMessage);
58 | frag.appendChild(inpData);
59 | let inpDel = document.createElement("input");
60 | inpDel.setAttribute("type","button");
61 | inpDel.setAttribute("class","btnDel");
62 | inpDel.setAttribute("value","-");
63 | inpDel.setAttribute("data-idx",idx.toString());
64 | inpDel.addEventListener("click",function(e){
65 | let list = e.target.parentNode;
66 | let idx = e.target.getAttribute("data-idx");
67 | listDel(list,idx);
68 | changeToolbarAction();
69 | changeKeyboardAction();
70 | });
71 | frag.appendChild(inpDel);
72 | let br = document.createElement("br");
73 | br.setAttribute("data-idx",idx.toString());
74 | frag.appendChild(br);
75 | list.appendChild(frag);
76 | changeToolbarAction();
77 | changeKeyboardAction();
78 | }
79 |
80 | //button add list click event
81 | function btnAddClick(e)
82 | {
83 | let list = document.getElementById(e.target.getAttribute("data-listid"));
84 | let name = e.target.getAttribute("data-name");
85 | let value = e.target.getAttribute("data-value");
86 | let dels = list.querySelectorAll("input.btnDel");
87 | let idx = dels.length==0?0:Number(dels[dels.length-1].getAttribute("data-idx")) + 1;
88 | listAdd(list,name,value,idx);
89 | }
90 |
91 | //get custom formats list data
92 | function getListData(list)
93 | {
94 | let result=[];
95 | if (list==null) {return result;}
96 | let names = list.querySelectorAll(".listName[data-idx]");
97 | let datas = list.querySelectorAll(".listData[data-idx]");
98 | for (let i=0;ires.json());
110 | return data;
111 | }
112 |
113 | //show option settings
114 | function showOptionSettings(setting) {
115 | let frag=null;
116 | document.querySelector("#inpOpenPagesLimit").value = setting.openPagesLimit;
117 | frag=document.createDocumentFragment();
118 | setting.linkCustomFormatList.forEach( function(item,itemidx) { listAdd(frag,item.name,item.data,itemidx); });
119 | document.querySelector("#divLinkCustomFormat").clearElement().appendChild(frag);
120 | frag=null;
121 | frag=document.createDocumentFragment();
122 | setting.tabCustomFormatList.forEach( function(item,itemidx) { listAdd(frag,item.name,item.data,itemidx); });
123 | document.querySelector("#divTabCustomFormat").clearElement().appendChild(frag);
124 | frag=null;
125 | document.querySelector("#selToolbarButtonAction").value = setting.toolbarButtonAction;
126 | document.querySelector("#selKeyboardShortcutAction").value = setting.keyboardShortcutAction;
127 | document.querySelector("#inpFixUrlQuotEnd").checked = setting.fixUrlQuotEnd;
128 | document.querySelector("#inpPuretextFormatDelAroundSpace").checked = setting.puretextFormat.delAroundSpace;
129 | document.querySelector("#inpPuretextFormatDelInvisibleSpace").checked = setting.puretextFormat.delInvisibleSpace;
130 | document.querySelector("#inpPuretextFormatConvertQuotation").checked = setting.puretextFormat.convertQuotation;
131 | document.querySelector("#inpPuretextFormatConvertApostrophe").checked = setting.puretextFormat.convertApostrophe;
132 | document.querySelector("#inpPuretextFormatConvertDash").checked = setting.puretextFormat.convertDash;
133 | document.querySelector("#inpPuretextFormatConvertSpace").checked = setting.puretextFormat.convertSpace;
134 | document.querySelector("#inpPuretextFormatMergeNewline").checked = setting.puretextFormat.mergeNewline;
135 | document.querySelector("#inpPuretextFormatMergeSpace").checked = setting.puretextFormat.mergeSpace;
136 | document.querySelector("#inpPuretextFormatMergeFullwidthSpace").checked = setting.puretextFormat.mergeFullwidthSpace;
137 | document.querySelector("#inpPuretextFormatMergeTabulation").checked = setting.puretextFormat.mergeTabulation;
138 | document.querySelector("#inpPuretextFormatMergeAllTypeSpace").checked = setting.puretextFormat.mergeAllTypeSpace;
139 | document.querySelector("#inpHtmltextFormatWithoutTag").checked = setting.htmltextFormatWithoutTag;
140 | document.querySelector("#inpOpenOneImageDirectly").checked = setting.openOneImageDirectly;
141 | frag=document.createDocumentFragment();
142 | setting.tabsinfoCustomFormatList.forEach( function(item,itemidx) { listAdd(frag,item.name,item.data,itemidx); });
143 | document.querySelector("#divTabsinfoCustomFormat").clearElement().appendChild(frag);
144 | frag=null;
145 | frag=document.createDocumentFragment();
146 | setting.urlsCustomFormatList.forEach( function(item,itemidx) { listAdd(frag,item.name,item.data,itemidx); });
147 | document.querySelector("#divUrlsCustomFormat").clearElement().appendChild(frag);
148 | frag=null;
149 | frag=document.createDocumentFragment();
150 | setting.imageUrlsCustomFormatList.forEach( function(item,itemidx) { listAdd(frag,item.name,item.data,itemidx); });
151 | document.querySelector("#divImageUrlsCustomFormat").clearElement().appendChild(frag);
152 | frag=null;
153 | frag=document.createDocumentFragment();
154 | setting.aObjectsCustomFormatList.forEach( function(item,itemidx) { listAdd(frag,item.name,item.data,itemidx); });
155 | document.querySelector("#divAObjectsCustomFormat").clearElement().appendChild(frag);
156 | frag=null;
157 | frag=document.createDocumentFragment();
158 | setting.imgObjectsCustomFormatList.forEach( function(item,itemidx) { listAdd(frag,item.name,item.data,itemidx); });
159 | document.querySelector("#divImgObjectsCustomFormat").clearElement().appendChild(frag);
160 | frag=null;
161 | document.querySelector("#inpBlobUrlToLocal").checked = setting.blobUrlToLocal;
162 | document.querySelector("#selInterfaceLanguage").value = setting.locale;
163 | changeToolbarAction();
164 | document.querySelector("#selToolbarButtonActionIdx").value = setting.toolbarButtonActionIdx.toString();
165 | changeKeyboardAction();
166 | document.querySelector("#selKeyboardShortcutActionIdx").value = setting.keyboardShortcutActionIdx.toString();
167 | }
168 |
169 | //set option settings
170 | async function setOptionSettings(e) {
171 | let ldata = await getlocaleData(document.querySelector("#selInterfaceLanguage").value);
172 | let tlt = {
173 | openPagesLimit: document.querySelector("#inpOpenPagesLimit").value,
174 | linkCustomFormatList: getListData(document.querySelector("#divLinkCustomFormat")),
175 | tabCustomFormatList: getListData(document.querySelector("#divTabCustomFormat")),
176 | toolbarButtonAction: document.querySelector("#selToolbarButtonAction").value,
177 | toolbarButtonActionIdx: document.querySelector("#selToolbarButtonActionIdx").selectedIndex,
178 | keyboardShortcutAction: document.querySelector("#selKeyboardShortcutAction").value,
179 | keyboardShortcutActionIdx: document.querySelector("#selKeyboardShortcutActionIdx").selectedIndex,
180 | fixUrlQuotEnd: document.querySelector("#inpFixUrlQuotEnd").checked,
181 | puretextFormat: {
182 | delAroundSpace: document.querySelector("#inpPuretextFormatDelAroundSpace").checked,
183 | delInvisibleSpace: document.querySelector("#inpPuretextFormatDelInvisibleSpace").checked,
184 | convertQuotation: document.querySelector("#inpPuretextFormatConvertQuotation").checked,
185 | convertApostrophe: document.querySelector("#inpPuretextFormatConvertApostrophe").checked,
186 | convertDash: document.querySelector("#inpPuretextFormatConvertDash").checked,
187 | convertSpace: document.querySelector("#inpPuretextFormatConvertSpace").checked,
188 | mergeNewline: document.querySelector("#inpPuretextFormatMergeNewline").checked,
189 | mergeSpace: document.querySelector("#inpPuretextFormatMergeSpace").checked,
190 | mergeFullwidthSpace: document.querySelector("#inpPuretextFormatMergeFullwidthSpace").checked,
191 | mergeTabulation: document.querySelector("#inpPuretextFormatMergeTabulation").checked,
192 | mergeAllTypeSpace: document.querySelector("#inpPuretextFormatMergeAllTypeSpace").checked
193 | },
194 | htmltextFormatWithoutTag: document.querySelector("#inpHtmltextFormatWithoutTag").checked,
195 | openOneImageDirectly: document.querySelector("#inpOpenOneImageDirectly").checked,
196 | tabsinfoCustomFormatList: getListData(document.querySelector("#divTabsinfoCustomFormat")),
197 | urlsCustomFormatList: getListData(document.querySelector("#divUrlsCustomFormat")),
198 | imageUrlsCustomFormatList: getListData(document.querySelector("#divImageUrlsCustomFormat")),
199 | aObjectsCustomFormatList: getListData(document.querySelector("#divAObjectsCustomFormat")),
200 | imgObjectsCustomFormatList: getListData(document.querySelector("#divImgObjectsCustomFormat")),
201 | blobUrlToLocal: document.querySelector("#inpBlobUrlToLocal").checked,
202 | locale: document.querySelector("#selInterfaceLanguage").value,
203 | localeData: ldata
204 | }
205 |
206 | //checking settings
207 | if ((tlt.toolbarButtonAction==commonLookup.actlist.copySelectedUrls && tlt.toolbarButtonActionIdx==-1) ||
208 | (tlt.keyboardShortcutAction==commonLookup.actlist.copySelectedUrls && tlt.keyboardShortcutActionIdx==-1))
209 | {
210 | commonLookup.getUserTltSetting().then((tlt)=>{
211 | alert(commonLookup.getMessage(tlt.userTltSetting.locale,tlt.userTltSetting.localeData,"actUrlFormatEmpty"));
212 | });
213 | return;
214 | }
215 | if ((tlt.toolbarButtonAction==commonLookup.actlist.copySelectedImageUrls && tlt.toolbarButtonActionIdx==-1) ||
216 | (tlt.keyboardShortcutAction==commonLookup.actlist.copySelectedImageUrls && tlt.keyboardShortcutActionIdx==-1))
217 | {
218 | commonLookup.getUserTltSetting().then((tlt)=>{
219 | alert(commonLookup.getMessage(tlt.userTltSetting.locale,tlt.userTltSetting.localeData,"actImgUrlFormatEmpty"));
220 | });
221 | return;
222 | }
223 |
224 | //save settings
225 | browser.storage.local.set({
226 | "userTltSetting": tlt
227 | });
228 | document.querySelector("#lblSaved").style.visibility = "visible";
229 | }
230 |
231 | //clear saved message
232 | function clearSavedMessage() {
233 | document.querySelector("#lblSaved").style.visibility = "hidden";
234 | }
235 |
236 | //clear saved message
237 | function resetOptionSettings() {
238 | clearSavedMessage();
239 | showOptionSettings(commonLookup.defaultTltSetting);
240 | }
241 |
242 | //fill ActionIdx list
243 | function fillActionIdx(actqs,selqs){
244 | let sel=document.querySelector(selqs);
245 | let list=[];
246 | if (document.querySelector(actqs).value==commonLookup.actlist.copySelectedUrls)
247 | {
248 | list=getListData(document.querySelector("#divUrlsCustomFormat"));
249 | }
250 | if (document.querySelector(actqs).value==commonLookup.actlist.copySelectedImageUrls)
251 | {
252 | list=getListData(document.querySelector("#divImageUrlsCustomFormat"));
253 | }
254 | let frag=document.createDocumentFragment();
255 | list.forEach((item,idx)=>{
256 | let op = document.createElement("option");
257 | op.setAttribute("value",idx.toString());
258 | op.text = (idx+1).toString() + " - " + item.name;
259 | frag.appendChild(op);
260 | });
261 | sel.querySelectorAll("option").forEach(ele => ele.remove());
262 | sel.appendChild(frag);
263 | }
264 |
265 | //change ToolbarButtonAction
266 | function changeToolbarAction(){
267 | fillActionIdx("#selToolbarButtonAction","#selToolbarButtonActionIdx");
268 | }
269 |
270 | //change KeyboardShortcutAction
271 | function changeKeyboardAction(){
272 | fillActionIdx("#selKeyboardShortcutAction","#selKeyboardShortcutActionIdx");
273 | }
274 |
275 |
276 | //page listener
277 | document.addEventListener("DOMContentLoaded", pageReady);
278 | document.querySelector("#inpSaveSettings").addEventListener("click", setOptionSettings);
279 | document.querySelector("#inpResetSettings").addEventListener("click", resetOptionSettings);
280 | document.querySelector("#selToolbarButtonAction").addEventListener("change", changeToolbarAction);
281 | document.querySelector("#divUrlsCustomFormat").addEventListener("focusout",e=> {changeToolbarAction();e.stopPropagation();});
282 | document.querySelector("#selKeyboardShortcutAction").addEventListener("change", changeKeyboardAction);
283 | document.querySelector("#divImageUrlsCustomFormat").addEventListener("focusout",e=> {changeToolbarAction();e.stopPropagation();});
284 | document.querySelectorAll("form input").forEach((e) => e.addEventListener("change", clearSavedMessage));
285 | document.querySelectorAll("form input").forEach((e) => e.addEventListener("keypress", clearSavedMessage));
286 | document.querySelectorAll("select").forEach((e) => e.addEventListener("change", clearSavedMessage));
287 | document.querySelectorAll(".btnAdd").forEach((e) => e.addEventListener("click",btnAddClick));
--------------------------------------------------------------------------------
/change.log:
--------------------------------------------------------------------------------
1 | Version 1.2.11 2019-06-04
2 | ------
3 | Fix wiki syntax format.
4 |
5 | Features complated:
6 | 22. copy selected objects info.
7 | 23. copy page objects info.
8 | 24. copy selected objects info.
9 | 25. copy page
objects info.
10 |
11 |
12 | Version 1.2.10 2018-11-17
13 | ------
14 | Fix analyze custom formats not enable bug.
15 |
16 |
17 | Version 1.2.9 2018-10-01
18 | ------
19 | Update ru locale. [ Thanks to solokot ]
20 | Fix options read setting bug.
21 |
22 |
23 | Version 1.2.8 2018-08-19
24 | ------
25 | Toolbar button action support copy URLs with custom format.
26 | Keyboard shortcut action support copy Urls with custom format.
27 | Options - copy URLs format list.
28 | Options - copy ImageURLs format list.
29 | Options - Hide not support locate.
30 | Update lacate.
31 | Fix context menu separator line.
32 | Fix a few bugs.
33 |
34 |
35 | Version 1.2.7 2018-06-07
36 | ------
37 | Add ru locale. [ Thanks to solokot ]
38 | Modify ja locale.
39 | Options - URL part text tooltips.
40 | Options - Improve translation tooltips.
41 | Images Viewer - display loading status.
42 | Images Viewer - display origin page title & URL.
43 | Fix a few bugs.
44 |
45 |
46 | Version 1.2.6 2018-05-31
47 | ------
48 | Support multiple custom formats. ( default suppport BBCode Format / Wiki Syntax / Custom Format )
49 | Support more custom formats text. ( URL part text support potocol/host/port/path/search/hash )
50 | Custom options - locale language.
51 | Performance tuning.
52 |
53 |
54 | Version 1.2.5 2018-05-18
55 | ------
56 | Support blob/data style URL.
57 | Custom options - Blob URL to local URL.
58 | Custom options format name can be setting.
59 |
60 |
61 | Version 1.2.4 2018-03-14
62 | ------
63 | Modify en locale.
64 | Modify zh_TW locale.
65 | Modify zh_CN locale.
66 | Modify ja locale.
67 | Disable toolbar button in block site (addons.mozilla.org / about:newtab / about:config)
68 | Hide contextmenus in block site (addons.mozilla.org / about:newtab / about:config)
69 |
70 |
71 | Version 1.2.3 2018-03-08
72 | ------
73 | Support copy features on "New Tab"( about:blank ).
74 | ***Cannot support any features on "New Tab"( about:newtab / about:home ), becouse Mozilla policy. [ extend URL: https://bugzil.la/1270412 ]
75 | Add ja locale.
76 |
77 |
78 | Version 1.2.2 2017-12-04
79 | ------
80 | Fix analyze full page URLs in frame/iframe.
81 | enhance analyze URLs of background images.
82 |
83 |
84 | Version 1.2.1 2017-10-28
85 | ------
86 | Bugs fix.
87 |
88 |
89 | Version 1.2.0 2017-10-27
90 | ------
91 | Change version name. (1.1.7 to 1.2.0)
92 |
93 |
94 | Version 1.1.7 2017-10-27
95 | ------
96 | Custom options - Open a single Image link directly
97 | Custom options - Copy all tabs info custom format
98 | Custom options - Copy URLs custom format
99 | Custom options - Copy Image URLs custom format
100 |
101 | Features complated:
102 | 21.Copy all tabs info
103 |
104 |
105 | Version 1.1.6 2017-10-27
106 | ------
107 | Optimization code.
108 | Image Viewer - display style button.
109 | Option page add default button.
110 |
111 |
112 | Version 1.1.5 2017-10-26
113 | ------
114 | Bug fix.
115 | Optimization code.
116 | Custom options - Copy as HTML text - Format.
117 | Enhance get selection Objects for "input/textArea" elements.
118 |
119 |
120 | Version 1.1.4 2017-10-23
121 | ------
122 | Custom options - Copy as pure text - Format.
123 |
124 |
125 | Version 1.1.3 2017-10-23
126 | ------
127 | Bug fix.
128 | Custom options - fix URLs end with quotation.
129 | Enhance analyze images feature.
130 | "Images Viewer" add pics count.
131 |
132 |
133 | Version 1.1.2 2017-10-22
134 | ------
135 | Custom options - Keyboard shortcut action
136 | Add keyboard shortcut: F8
137 |
138 |
139 | Version 1.1.1 2017-10-12
140 | ------
141 | Optimization code.
142 |
143 | Features complated:
144 | 20.Show Image
145 |
146 |
147 | Version 1.1.0 2017-10-12
148 | ------
149 | Change version name. (1.0.6 to 1.1.0)
150 |
151 |
152 | Version 1.0.6 2017-10-12
153 | ------
154 | Custom options - Toolbar button action
155 | Add "Browser toolbar button".
156 |
157 |
158 | Version 1.0.5 2017-10-10
159 | ------
160 | Fix a few bugs.
161 | Add "Images Viewer" Page.
162 | "Show selected/page images" show in new tab.
163 | Custom options - Link custom format
164 | Custom options - Tab custom format
165 |
166 | Features complated:
167 | 18.Copy Link format text
168 | 19.Copy Tab format text
169 |
170 |
171 | Version 1.0.4 2017-10-09
172 | ------
173 | Add options page.
174 | Custom options - max open tabs limit.
175 | Enable "Open page URLs" feature.
176 |
177 | Features complated:
178 | 11.Copy selected image urls
179 | 12.Show selected images
180 | 13.Copy page image urls
181 | 14.Show page images
182 | 15.Copy Tab Name
183 | 16.Copy Tab URL
184 | 17.Copy Image URL
185 |
186 |
187 | Version 1.0.3 2017-10-05
188 | ------
189 | Add zh_CN locale. [ Thanks to YFdyh000 ]
190 | Modify zh_TW locale.
191 |
192 |
193 | Version 1.0.2 2017-10-03
194 | ------
195 | relative URLs can be correctly analyzed.
196 |
197 |
198 | Version 1.0.1 2017-10-03
199 | ------
200 | Modify en locale.
201 |
202 |
203 | Version 1.0.0 2017-10-02
204 | ------
205 | Fix a few bugs.
206 | Disable "Open page URLs" feature.
207 | Release to AMO. [ https://addons.mozilla.org/addon/text-linky-tool/ ]
208 |
209 |
210 | Version 1.0beta 2017-10-01
211 | ------
212 | Languages complated:
213 | 1.en
214 | 2.zh_TW
215 |
216 | Features complated:
217 | 1.Copy Link Name
218 | 2.Copy Link URL
219 | 3.Copy selected pure text
220 | 4.Copy selected HTML text
221 | 5.Copy selected URLs
222 | 6.Open selected URLs to new tabs
223 | 7.Copy page pure text
224 | 8.Copy page HTML text
225 | 9.Copy page URLs
226 | 10.Open page URLs to new tabs
227 |
--------------------------------------------------------------------------------