diff --git a/assets/index.js b/assets/index.js index 5994aec7..161b5329 100644 --- a/assets/index.js +++ b/assets/index.js @@ -1,7 +1,15 @@ // 正则转义 -RegExp.escape = function (s) { - return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); -}; +escapeRe = s => { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); +} + +// html实体编码 +escapeHtml = s => { + return s.replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, ""); +} // 列表 list = (path, initial, type, name ,desc) => { @@ -19,26 +27,29 @@ showList = (text, index, listnum) => { var obn = []; var obd = []; index.forEach(i => { - let name = i.name, - desc = i.desc != undefined ? i.desc : "", - initial = name.slice(0, 1).toUpperCase(), - reg = new RegExp(RegExp.escape(text), "i"), - match1 = reg.exec(name), - match2 = reg.exec(desc); + let reg = new RegExp(escapeRe(text), "i",) + match1 = reg.exec(i.name), + match2 = reg.exec(i.desc), + name = escapeHtml(i.name), + desc = i.desc != undefined ? escapeHtml(i.desc) : "", + type = i.type != undefined ? escapeHtml(i.type) : ""; + let initial = i.name.replace(/<|>|"|'/ig, '') + initial = /^.*?([a-zA-Z])/.exec(initial); + initial = initial ? initial[1].toUpperCase() : ' '; // 优先显示名称匹配的内容 if (match1) { name = highlightList(name, match1[0]); if (match2) desc = highlightList(desc, match2[0]); // 置顶全字匹配的内容 if (i.name.toUpperCase() == text.toUpperCase()) { - obn.unshift(list(i.path, initial, i.type, name, desc)); + obn.unshift(list(i.path, initial, type, name, desc)); } else { - obn.push(list(i.path, initial, i.type, name, desc)); + obn.push(list(i.path, initial, type, name, desc)); } // 其次显示描述匹配的内容 } else if (match2) { desc = highlightList(desc, match2[0]); - obd.push(list(i.path, initial, i.type, name, desc)); + obd.push(list(i.path, initial, type, name, desc)); } }); window.info = obn.concat(obd); @@ -47,39 +58,38 @@ showList = (text, index, listnum) => { utools.setExpendHeight(num > 11 ? 550 : 50 * num); $(".select").removeClass('select'); $(".info:first").addClass('select'); + // 鼠标锁,方式鼠标抢占选择条 window.mouseLockTime = new Date().getTime(); } // 显示手册 -showManual = async path => { +showManual = path => { utools.setExpendHeight(550); if (/^((ht|f)tps?):\/\//.test(path)) { window.open(path); } else { - let p = path.split('.html#') - if (p.length == 2) { - var f = p[0] + '.html'; - var id = '#' + p[1]; + let e = /(.*?)(\.html)*#(.*)/.exec(path); + if (e) { + var f = e[1] + '.html'; + var id = '#' + e[3]; } else { - var f = p[0] + var f = window.dirs.idxFile ? path : path + '.html'; } var file = `${window.dirs.docPath}/${f}`; - try { - var data = await readFile(file); - $("#mainlist").fadeOut(); - $("#manual").fadeOut().promise().done(() => { - var relPath = f.substr(0, f.lastIndexOf('/') + 1), - absPath = window.dirs.docPath + relPath; + $("#mainlist").fadeOut(); + $("#manual").fadeIn().html('
Loading
') + $.get(file, data => { + // $("#manual").fadeOut().promise().done(() => { + var relPath = f.substr(0, f.lastIndexOf('/') + 1); + // a 标签改为相对路径 data = data.replace(/(a.*?)href="(?!http)(.*?)"(.*?)(?!\#)/g, `$1href="${relPath}$2$3"`); - data = data.replace(/(link.*?)href="(?!http)(.*?)"(.*?)(?!\#)/g, `$1href="${absPath}$2$3"`); - data = data.replace(/src="(?!http)(.*?)"/g, `src="${absPath}$1"`); - $("#manual").html(`
${data}
`).fadeIn(); + // devdocs 语法高亮 + data = data.replace(/
([\s\S]*?)<\/pre>/g, '
$2
') + $("#manual").html(`
${data}
`); Prism.highlightAll(); - location.href = p.length == 2 ? id : '#manualHead'; + location.href = e ? id : '#manualHead'; }) - } catch(e) { - console.log(e) - } + // }) } } @@ -157,20 +167,21 @@ utools.onPluginEnter( async ({ code, type, payload }) => { init(); checkUpdate(); if (code == 'options') { + window.defaultPage = 0; showOptions(); } else { $("#mainlist").fadeIn(); - var allFts = getAllFeatures(), + var allFts = /^dd_/.test(code) ? await getDevdocs() : await getManuals(), baseDir, css; switch (allFts[code].type) { case "default": - baseDir = getDirname(); + baseDir = dirname; css = `${baseDir}/assets/${code}.css` window.dirs = { idxFile: `${baseDir}/index/${code}.json`, docPath: `${baseDir}/docs`, - } + } break; case "custom": baseDir = allFts[code].path; @@ -180,14 +191,20 @@ utools.onPluginEnter( async ({ code, type, payload }) => { docPath: `${baseDir}`, } break; + case "devdocs": + window.dirs = { + docPath: allFts[code].url.slice(0, -11), + } } - if (window.exists(css)) { - $("#manualCSS").attr("href", css) - } + window.exists(css) && $("#manualCSS").attr("href", css); // 读取目录文件 try { - var index = await readFile(window.dirs.idxFile); - index = JSON.parse(index); + if (window.dirs.idxFile) { + var index = await readFile(window.dirs.idxFile); + index = JSON.parse(index); + } else { + var index = utools.db.get(code).data; + } if (type == 'over') { showList(payload, index, 500) } else { @@ -216,7 +233,7 @@ $("#mainlist").on('mousedown', '.info', function (e) { // 鼠标滑过列表,高亮 $("#mainlist").on('mousemove', '.info', function () { - // 设置500ms的鼠标锁 + // 鼠标锁 500ms var mouseUnlockTime = new Date().getTime(); if (mouseUnlockTime - window.mouseLockTime > 500) { $(".select").removeClass('select'); @@ -276,7 +293,6 @@ $(document).keydown(e => { let pre = $(".select").prev(); // 没有到达边界时移动选择条 if(pre.length != 0){ - // event.preventDefault(); if(pre.offset().top < $(window).scrollTop()){ $("html").animate({ scrollTop: "-=50" }, 0); } @@ -292,7 +308,6 @@ $(document).keydown(e => { let next = $(".select").next(); // 没有到达边界时移动选择条 if(next.length !=0){ - // event.preventDefault(); if(next.offset().top >= $(window).scrollTop() + 550){ $("html").animate({ scrollTop: "+=50" }, 0); } diff --git a/assets/options.js b/assets/options.js index c59045c1..531802d8 100644 --- a/assets/options.js +++ b/assets/options.js @@ -1,169 +1,94 @@ +// 选择器转义 +escapeJq = s => { + return s.replace( /(:|\.|\[|\]|,|=|@)/g, "\\$1" ); +} + // 默认和自定义手册 -getAllFeatures = () => { - var defaultFts = { - "linux": { - features: { - "code": "linux", - "explain": "linux命令大全", - "cmds": ["linux命令"], - "icon": "logo/linux.png" - }, - type: "default" - }, - "php": { - features: { - "code": "php", - "explain": "官方php函数文档", - "cmds": ["php函数"], - "icon": "logo/php.png" - }, - type: "default" - }, - "python": { - features: { - "code": "python", - "explain": "官方python标准库及常用第三方库文档", - "cmds": ["python库"], - "icon": "logo/python.png" - }, - type: "default" - }, - "c": { - features: { - "code": "c", - "explain": "C语言函数速查", - "cmds": ["C函数"], - "icon": "logo/c.png" - }, - type: "default" - }, - "javascript": { - features: { - "code": "javascript", - "explain": "MDN javascript中文文档", - "cmds": ["js文档"], - "icon": "logo/javascript.png" - }, - type: "default" - }, - "jQuery": { - features: { - "code": "jQuery", - "explain": "jQuery官方中文文档", - "cmds": ["jQuery文档"], - "icon": "logo/jQuery.png" - }, - type: "default" - }, - "vue": { - features: { - "code": "vue", - "explain": "vue官方中文API文档", - "cmds": ["vue文档"], - "icon": "logo/vue.png" - }, - type: "default" - }, - "vim": { - features: { - "code": "vim", - "explain": "vim命令大全", - "cmds": ["vim命令"], - "icon": "logo/vim.png" - }, - type: "default" - }, - "git": { - features: { - "code": "git", - "explain": "git命令概览", - "cmds": ["git命令"], - "icon": "logo/git.png" - }, - type: "default" - }, - "docker": { - features: { - "code": "docker", - "explain": "docker常用命令", - "cmds": ["docker命令"], - "icon": "logo/docker.png" - }, - type: "default" - }, - "sql": { - features: { - "code": "sql", - "explain": "sql操作手册", - "cmds": ["sql手册"], - "icon": "logo/sql.png" - }, - type: "default" - }, - "utools": { - features: { - "code": "utools", - "explain": "uTools的API文档", - "cmds": ["uToolsAPI"], - "icon": "logo/utools.png" - }, - type: "default" - } - }; +getManuals = async () => { + var defaultFts = await readFile(`${dirname}/features/default.json`); + defaultFts = JSON.parse(defaultFts); var db = utools.db.get("customFts"), customFts = db ? db.data : {}, allFts = Object.assign(defaultFts, customFts); return allFts; } +// devdocs +getDevdocs = async () => { + var devDocs = await readFile(`${dirname}/features/devdocs.json`); + return JSON.parse(devDocs); +} // 配置页面 -showOptions = () => { - $("#options").show(); - var currentFts = utools.getFeatures(), - allFts = getAllFeatures(); - let featureList = ''; +showOptions = async () => { + var currentFts = utools.getFeatures(); + var allFts = window.defaultPage ? await getDevdocs() : await getManuals(); + let featureList = `
关键字说明启用主输入框搜索
+ + + + + + + `; for (var fts in allFts) { - let features = allFts[fts].features; + let configs = allFts[fts], + features = configs.features; var cmds = ''; features.cmds.forEach(cmd => { if (typeof (cmd) == "string") cmds += `${cmd}`; }); var isChecked1 = '', isChecked2 = '', - isDisabled = 'disabled'; + isDisabled1 = '', + isDisabled2 = 'disabled'; for(var c of currentFts){ if (c.code == features.code) { isChecked1 = 'checked'; - isDisabled = ''; + isDisabled2 = ''; if (typeof(c.cmds[c.cmds.length - 1]) != 'string') isChecked2 = 'checked'; break; } } - var editBtn = ""; - if (allFts[fts].type != "default") { - editBtn = ` + var tailBtn = ""; + if (configs.type == "custom") { + tailBtn = ``; + } else if (configs.type == "devdocs") { + if (utools.db.get(features.code)) { + tailBtn = ``; + } else { + tailBtn = ``; + isDisabled1 = 'disabled'; + } } - featureList += ` - + ` + ${tailBtn}` }; featureList += `
关键字说明启用主输入框搜索
${cmds}${features.explain} + var icon = exists(`${dirname}/${features.icon}`) ? features.icon : 'logo.png'; + featureList += `
${cmds}${features.explain} ${editBtn}
添加手册
+
英文手册
全部禁用
全部启用
` $("#options").html(featureList); + if (window.defaultPage) { + $("#devdocs").html('中文手册'); + $('#add').addClass("disabled"); + } + $('#options').fadeIn(); + $('html').getNiceScroll().resize(); } showCustomize = () => { @@ -185,17 +110,20 @@ showCustomize = () => { } // 开关 -$("#options").on('change', 'input[type=checkbox]', function () { - var allFts = getAllFeatures(), - id = $(this).attr('id').split('_'), - code = id[0]; - if (id[1] == '1') { - if (!utools.removeFeature(code)) { +$("#options").on('change', 'input[type=checkbox]', async function () { + var allFts = window.defaultPage ? await getDevdocs() : await getManuals(); + var id = $(this).attr('id'), + code = id.slice(0, -2), + num = id.slice(-1); + if (num == '1') { + id = escapeJq(code); + if ($(this).prop('checked')) { utools.setFeature(allFts[code].features); - $(`#${code}_2`).prop('disabled', false); + $(`#${id}_2`).prop('disabled', false); } else { - $(`#${code}_2`).prop('checked', false); - $(`#${code}_2`).prop('disabled', true); + utools.removeFeature(code); + $(`#${id}_2`).prop('checked', false); + $(`#${id}_2`).prop('disabled', true); } } else { var featureConf = allFts[code].features; @@ -213,11 +141,20 @@ $("#options").on('change', 'input[type=checkbox]', function () { // 底部功能按钮 $("#options").on('click', '.footBtn', function () { switch ($(this).attr('id')) { - case 'add': showCustomize(); + case 'add': + $(this).hasClass("disabled") || showCustomize(); break; - case 'enableAll': $(".checked-switch:not(:checked)[id*='_1']").click(); + case 'devdocs': + window.defaultPage = (window.defaultPage + 1) % 2; + $('#options').fadeOut().promise().done(() => { + showOptions(); + }) break; - case 'disableAll': $(".checked-switch:checked").click(); + case 'enableAll': + $(".checked-switch:not(:checked)[id*='_1']").click(); + break; + case 'disableAll': + $(".checked-switch:checked").click(); break; } }) @@ -228,26 +165,49 @@ $("#options").on('click', '.cancelBtn', function () { }) // 编辑 -$("#options").on('click', '.editBtn', function () { +$("#options").on('click', '.editBtn', async function () { var code = $(this).attr('code'); - var data = utools.db.get("customFts").data[code]; - showCustomize(); - $("#code").attr('disabled', true); - $('#code').val(data.features.code); - $('#kw').val(data.features.cmds.toString()); - $('#desc').val(data.features.explain); - $('#path').val(data.path); + if (window.defaultPage) { + var docs = await getDevdocs(), + url = docs[code].url; + $(this).removeClass('editBtn'); + $(this).html('Waiting...') + $.get(url, content => { + utools.db.put({ _id: code, data: content.entries }); + var id = escapeJq(code) + $(`#${id}_1`).prop('disabled', false); + $(this).html('✘'); + $(this).addClass('delBtn'); + }) + } else { + var data = utools.db.get("customFts").data[code]; + showCustomize(); + $("#code").attr('disabled', true); + $('#code').val(data.features.code); + $('#kw').val(data.features.cmds.toString()); + $('#desc').val(data.features.explain); + $('#path').val(data.path); + } }) // 删除 $("#options").on('click', '.delBtn', function () { - var code = $(this).attr('code'), - db = utools.db.get("customFts"), - data = db.data; - delete data[code]; - utools.removeFeature(code); - utools.db.put({ _id: "customFts", data: data, _rev: db._rev }); - showOptions(); + var code = $(this).attr('code'); + if (window.defaultPage) { + utools.db.remove(code); + $(this).html('⇩'); + $(this).removeClass('delBtn').addClass('editBtn'); + var id = escapeJq(code); + $(`#${id}_1:checked`).click(); + $(`#${id}_1`).prop('disabled', true); + } else { + var db = utools.db.get("customFts"), + data = db.data; + delete data[code]; + utools.removeFeature(code); + utools.db.put({ _id: "customFts", data: data, _rev: db._rev }); + showOptions(); + } }) // 选择文件夹 @@ -258,7 +218,7 @@ $("#options").on('click', '.selectBtn', function () { // 保存 $("#options").on('click', '.saveBtn', function () { var code = $('#code').val() - var allFts = getAllFeatures(); + var allFts = getManuals(); if (code in allFts && $("#code").prop('disabled') == false) { $('#code').css({ 'border-bottom-color': '#ec1212' }) window.messageBox({ type: 'error', message: "名称与现有的手册重复!", buttons: ['朕知道了'] }) diff --git a/features/default.json b/features/default.json new file mode 100644 index 00000000..ac9540aa --- /dev/null +++ b/features/default.json @@ -0,0 +1,110 @@ +{ + "linux": { + "features": { + "code": "linux", + "explain": "linux命令大全", + "cmds": ["linux命令"], + "icon": "logo/linux.png" + }, + "type": "default" + }, + "php": { + "features": { + "code": "php", + "explain": "官方php函数文档", + "cmds": ["php函数"], + "icon": "logo/php.png" + }, + "type": "default" + }, + "python": { + "features": { + "code": "python", + "explain": "官方python标准库及常用第三方库文档", + "cmds": ["python库"], + "icon": "logo/python.png" + }, + "type": "default" + }, + "c": { + "features": { + "code": "c", + "explain": "C语言函数速查", + "cmds": ["C函数"], + "icon": "logo/c.png" + }, + "type": "default" + }, + "javascript": { + "features": { + "code": "javascript", + "explain": "MDN javascript中文文档", + "cmds": ["js文档"], + "icon": "logo/javascript.png" + }, + "type": "default" + }, + "jQuery": { + "features": { + "code": "jQuery", + "explain": "jQuery官方中文文档", + "cmds": ["jQuery文档"], + "icon": "logo/jQuery.png" + }, + "type": "default" + }, + "vue": { + "features": { + "code": "vue", + "explain": "vue官方中文API文档", + "cmds": ["vue文档"], + "icon": "logo/vue.png" + }, + "type": "default" + }, + "vim": { + "features": { + "code": "vim", + "explain": "vim命令大全", + "cmds": ["vim命令"], + "icon": "logo/vim.png" + }, + "type": "default" + }, + "git": { + "features": { + "code": "git", + "explain": "git命令概览", + "cmds": ["git命令"], + "icon": "logo/git.png" + }, + "type": "default" + }, + "docker": { + "features": { + "code": "docker", + "explain": "docker常用命令", + "cmds": ["docker命令"], + "icon": "logo/docker.png" + }, + "type": "default" + }, + "sql": { + "features": { + "code": "sql", + "explain": "sql操作手册", + "cmds": ["sql手册"], + "icon": "logo/sql.png" + }, + "type": "default" + }, + "utools": { + "features": { + "code": "utools", + "explain": "uTools的API文档", + "cmds": ["uToolsAPI"], + "icon": "logo/utools.png" + }, + "type": "default" + } +} \ No newline at end of file diff --git a/features/devdocs.json b/features/devdocs.json new file mode 100644 index 00000000..36f85998 --- /dev/null +++ b/features/devdocs.json @@ -0,0 +1,3182 @@ + { + "dd_Angular": { + "features": { + "code": "dd_Angular", + "explain": "devdocs上的Angular文档", + "cmds": ["dd_Angular"], + "icon": "logo/Angular.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/angular/index.json" + }, + "dd_Angular_5": { + "features": { + "code": "dd_Angular_5", + "explain": "devdocs上的Angular 5文档", + "cmds": ["dd_Angular_5"], + "icon": "logo/Angular.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/angular~5/index.json" + }, + "dd_Angular_4": { + "features": { + "code": "dd_Angular_4", + "explain": "devdocs上的Angular 4文档", + "cmds": ["dd_Angular_4"], + "icon": "logo/Angular.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/angular~4/index.json" + }, + "dd_Angular_2": { + "features": { + "code": "dd_Angular_2", + "explain": "devdocs上的Angular 2文档", + "cmds": ["dd_Angular_2"], + "icon": "logo/Angular.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/angular~2/index.json" + }, + "dd_Angular.js_1.6": { + "features": { + "code": "dd_Angular.js_1.6", + "explain": "devdocs上的Angular.js 1.6文档", + "cmds": ["dd_Angular.js_1.6"], + "icon": "logo/Angular.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/angularjs~1.6/index.json" + }, + "dd_Angular.js_1.5": { + "features": { + "code": "dd_Angular_1.5", + "explain": "devdocs上的Angular.js 1.5文档", + "cmds": ["dd_Angular.js_1.5"], + "icon": "logo/Angular.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/angularjs~1.5/index.json" + }, + "dd_Angular.js_1.4": { + "features": { + "code": "dd_Angular.js_1.4", + "explain": "devdocs上的Angular.js 1.4文档", + "cmds": ["dd_Angular.js_1.4"], + "icon": "logo/Angular.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/angularjs~1.4/index.json" + }, + "dd_Angular.js_1.3": { + "features": { + "code": "dd_Angular.js_1.3", + "explain": "devdocs上的Angular.js 1.3文档", + "cmds": ["dd_Angular.js_1.3"], + "icon": "logo/Angular.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/angularjs~1.3/index.json" + }, + "dd_Angular.js_1.2": { + "features": { + "code": "dd_Angular.js_1.2", + "explain": "devdocs上的Angular.js 1.2文档", + "cmds": ["dd_Angular.js_1.2"], + "icon": "logo/Angular.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/angularjs~1.2/index.json" + }, + "dd_Ansible_2.7": { + "features": { + "code": "dd_Ansible_2.7", + "explain": "devdocs上的Ansible 2.7文档", + "cmds": ["dd_Ansible_2.7"], + "icon": "logo/Ansible.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/ansible~2.7/index.json" + }, + "dd_Ansible_2.6": { + "features": { + "code": "dd_Ansible_2.6", + "explain": "devdocs上的Ansible 2.6文档", + "cmds": ["dd_Ansible_2.6"], + "icon": "logo/Ansible.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/ansible~2.6/index.json" + }, + "dd_Ansible_2.5": { + "features": { + "code": "dd_Ansible_2.5", + "explain": "devdocs上的Ansible 2.5文档", + "cmds": ["dd_Ansible_2.5"], + "icon": "logo/Ansible.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/ansible~2.5/index.json" + }, + "dd_Ansible_2.4": { + "features": { + "code": "dd_Ansible_2.4", + "explain": "devdocs上的Ansible 2.4文档", + "cmds": ["dd_Ansible_2.4"], + "icon": "logo/Ansible.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/ansible~2.4/index.json" + }, + "dd_Apache_HTTP_Server": { + "features": { + "code": "dd_Apache_HTTP_Server", + "explain": "devdocs上的Apache HTTP Server文档", + "cmds": ["dd_Apache_HTTP_Server"], + "icon": "logo/Apache.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/apache_http_server/index.json" + }, + "dd_Apache_Pig_0.17": { + "features": { + "code": "dd_Apache_Pig_0.17", + "explain": "devdocs上的Apache Pig 0.17文档", + "cmds": ["dd_Apache_Pig_0.17"], + "icon": "logo/Apache.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/apache_pig~0.17/index.json" + }, + "dd_Apache_Pig_0.16": { + "features": { + "code": "dd_Apache_Pig_0.16", + "explain": "devdocs上的Apache Pig 0.16文档", + "cmds": ["dd_Apache_Pig_0.16"], + "icon": "logo/Apache.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/apache_pig~0.16/index.json" + }, + "dd_Apache_Pig_0.15": { + "features": { + "code": "dd_Apache_Pig_0.15", + "explain": "devdocs上的Apache Pig 0.15文档", + "cmds": ["dd_Apache_Pig_0.15"], + "icon": "logo/Apache.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/apache_pig~0.15/index.json" + }, + "dd_Apache_Pig_0.14": { + "features": { + "code": "dd_Apache_Pig_0.14", + "explain": "devdocs上的Apache Pig 0.14文档", + "cmds": ["dd_Apache_Pig_0.14"], + "icon": "logo/Apache.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/apache_pig~0.14/index.json" + }, + "dd_Apache_Pig_0.13": { + "features": { + "code": "dd_Apache_Pig_0.13", + "explain": "devdocs上的Apache Pig 0.13文档", + "cmds": ["dd_Apache_Pig_0.13"], + "icon": "logo/Apache.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/apache_pig~0.13/index.json" + }, + "dd_Async": { + "features": { + "code": "dd_Async", + "explain": "devdocs上的Async文档", + "cmds": ["dd_Async"], + "icon": "logo/Async.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/async/index.json" + }, + "dd_Babel": { + "features": { + "code": "dd_Babel", + "explain": "devdocs上的Babel文档", + "cmds": ["dd_Babel"], + "icon": "logo/Babel.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/babel/index.json" + }, + "dd_Backbone.js": { + "features": { + "code": "dd_Backbone.js", + "explain": "devdocs上的Backbone.js文档", + "cmds": ["dd_Backbone.js"], + "icon": "logo/Backbone.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/backbone/index.json" + }, + "dd_Bash": { + "features": { + "code": "dd_Bash", + "explain": "devdocs上的Bash文档", + "cmds": ["dd_Bash"], + "icon": "logo/Bash.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/bash/index.json" + }, + "dd_Bluebird": { + "features": { + "code": "dd_Bluebird", + "explain": "devdocs上的Bluebird文档", + "cmds": ["dd_Bluebird"], + "icon": "logo/Bluebird.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/bluebird/index.json" + }, + "dd_Bootstrap_4": { + "features": { + "code": "dd_Bootstrap_4", + "explain": "devdocs上的Bootstrap 4文档", + "cmds": ["dd_Bootstrap_4"], + "icon": "logo/Bootstrap.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/bootstrap~4/index.json" + }, + "dd_Bootstrap_3": { + "features": { + "code": "dd_Bootstrap_3", + "explain": "devdocs上的Bootstrap 3文档", + "cmds": ["dd_Bootstrap_3"], + "icon": "logo/Bootstrap.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/bootstrap~3/index.json" + }, + "dd_Bottle_0.12": { + "features": { + "code": "dd_Bottle_0.12", + "explain": "devdocs上的Bottle 0.12文档", + "cmds": ["dd_Bottle_0.12"], + "icon": "logo/Bottle.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/bottle~0.12/index.json" + }, + "dd_Bottle_0.11": { + "features": { + "code": "dd_Bottle_0.11", + "explain": "devdocs上的Bottle 0.11文档", + "cmds": ["dd_Bottle_0.11"], + "icon": "logo/Bottle.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/bottle~0.11/index.json" + }, + "dd_Bower": { + "features": { + "code": "dd_Bower", + "explain": "devdocs上的Bower文档", + "cmds": ["dd_Bower"], + "icon": "logo/Bower.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/bower/index.json" + }, + "dd_C": { + "features": { + "code": "dd_C", + "explain": "devdocs上的C文档", + "cmds": ["dd_C"], + "icon": "logo/C.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/c/index.json" + }, + "dd_C++": { + "features": { + "code": "dd_C++", + "explain": "devdocs上的C++文档", + "cmds": ["dd_C++"], + "icon": "logo/C++.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cpp/index.json" + }, + "dd_CakePHP_3.6": { + "features": { + "code": "dd_CakePHP_3.6", + "explain": "devdocs上的CakePHP 3.6文档", + "cmds": ["dd_CakePHP_3.6"], + "icon": "logo/CakePHP.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cakephp~3.6/index.json" + }, + "dd_CakePHP_3.5": { + "features": { + "code": "dd_CakePHP_3.5", + "explain": "devdocs上的CakePHP 3.5文档", + "cmds": ["dd_CakePHP_3.5"], + "icon": "logo/CakePHP.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cakephp~3.5/index.json" + }, + "dd_CakePHP_3.4": { + "features": { + "code": "dd_CakePHP_3.4", + "explain": "devdocs上的CakePHP 3.4文档", + "cmds": ["dd_CakePHP_3.4"], + "icon": "logo/CakePHP.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cakephp~3.4/index.json" + }, + "dd_CakePHP_3.3": { + "features": { + "code": "dd_CakePHP_3.3", + "explain": "devdocs上的CakePHP 3.3文档", + "cmds": ["dd_CakePHP_3.3"], + "icon": "logo/CakePHP.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cakephp~3.3/index.json" + }, + "dd_CakePHP_3.2": { + "features": { + "code": "dd_CakePHP_3.2", + "explain": "devdocs上的CakePHP 3.2文档", + "cmds": ["dd_CakePHP_3.2"], + "icon": "logo/CakePHP.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cakephp~3.2/index.json" + }, + "dd_CakePHP_3.1": { + "features": { + "code": "dd_CakePHP_3.1", + "explain": "devdocs上的CakePHP 3.1文档", + "cmds": ["dd_CakePHP_3.1"], + "icon": "logo/CakePHP.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cakephp~3.1/index.json" + }, + "dd_CakePHP_2.10": { + "features": { + "code": "dd_CakePHP_2.10", + "explain": "devdocs上的CakePHP 2.10文档", + "cmds": ["dd_CakePHP_2.10"], + "icon": "logo/CakePHP.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cakephp~2.10/index.json" + }, + "dd_CakePHP_2.9": { + "features": { + "code": "dd_CakePHP_2.9", + "explain": "devdocs上的CakePHP 2.9文档", + "cmds": ["dd_CakePHP_2.9"], + "icon": "logo/CakePHP.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cakephp~2.9/index.json" + }, + "dd_CakePHP_2.8": { + "features": { + "code": "dd_CakePHP_2.8", + "explain": "devdocs上的CakePHP 2.8文档", + "cmds": ["dd_CakePHP_2.8"], + "icon": "logo/CakePHP.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cakephp~2.8/index.json" + }, + "dd_CakePHP_2.7": { + "features": { + "code": "dd_CakePHP_2.7", + "explain": "devdocs上的CakePHP 2.7文档", + "cmds": ["dd_CakePHP_2.7"], + "icon": "logo/CakePHP.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cakephp~2.7/index.json" + }, + "dd_Chai": { + "features": { + "code": "dd_Chai", + "explain": "devdocs上的Chai文档", + "cmds": ["dd_Chai"], + "icon": "logo/Chai.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/chai/index.json" + }, + "dd_Chef_12": { + "features": { + "code": "dd_Chef_12", + "explain": "devdocs上的Chef 12文档", + "cmds": ["dd_Chef_12"], + "icon": "logo/Chef.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/chef~12/index.json" + }, + "dd_Chef_11": { + "features": { + "code": "dd_Chef_11", + "explain": "devdocs上的Chef 11文档", + "cmds": ["dd_Chef_11"], + "icon": "logo/Chef.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/chef~11/index.json" + }, + "dd_Clojure_1.9": { + "features": { + "code": "dd_Clojure_1.9", + "explain": "devdocs上的Clojure 1.9文档", + "cmds": ["dd_Clojure_1.9"], + "icon": "logo/Clojure.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/clojure~1.9/index.json" + }, + "dd_Clojure_1.8": { + "features": { + "code": "dd_Clojure_1.8", + "explain": "devdocs上的Clojure 1.8文档", + "cmds": ["dd_Clojure_1.8"], + "icon": "logo/Clojure.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/clojure~1.8/index.json" + }, + "dd_Clojure_1.7": { + "features": { + "code": "dd_Clojure_1.7", + "explain": "devdocs上的Clojure 1.7文档", + "cmds": ["dd_Clojure_1.7"], + "icon": "logo/Clojure.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/clojure~1.7/index.json" + }, + "dd_CMake_3.12": { + "features": { + "code": "dd_CMake_3.12", + "explain": "devdocs上的CMake 3.12文档", + "cmds": ["dd_CMake_3.12"], + "icon": "logo/CMake.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cmake~3.12/index.json" + }, + "dd_CMake_3.11": { + "features": { + "code": "dd_CMake_3.11", + "explain": "devdocs上的CMake 3.11文档", + "cmds": ["dd_CMake_3.11"], + "icon": "logo/CMake.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cmake~3.11/index.json" + }, + "dd_CMake_3.10": { + "features": { + "code": "dd_CMake_3.10", + "explain": "devdocs上的CMake 3.10文档", + "cmds": ["dd_CMake_3.10"], + "icon": "logo/CMake.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cmake~3.10/index.json" + }, + "dd_CMake_3.9": { + "features": { + "code": "dd_CMake_3.9", + "explain": "devdocs上的CMake 3.9文档", + "cmds": ["dd_CMake_3.9"], + "icon": "logo/CMake.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cmake~3.9/index.json" + }, + "dd_CMake_3.8": { + "features": { + "code": "dd_CMake_3.8", + "explain": "devdocs上的CMake 3.8文档", + "cmds": ["dd_CMake_3.8"], + "icon": "logo/CMake.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cmake~3.8/index.json" + }, + "dd_CMake_3.7": { + "features": { + "code": "dd_CMake_3.7", + "explain": "devdocs上的CMake 3.7文档", + "cmds": ["dd_CMake_3.7"], + "icon": "logo/CMake.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cmake~3.7/index.json" + }, + "dd_CMake_3.6": { + "features": { + "code": "dd_CMake_3.6", + "explain": "devdocs上的CMake 3.6文档", + "cmds": ["dd_CMake_3.6"], + "icon": "logo/CMake.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cmake~3.6/index.json" + }, + "dd_CMake_3.5": { + "features": { + "code": "dd_CMake_3.5", + "explain": "devdocs上的CMake 3.5文档", + "cmds": ["dd_CMake_3.5"], + "icon": "logo/CMake.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cmake~3.5/index.json" + }, + "dd_Codeception": { + "features": { + "code": "dd_Codeception", + "explain": "devdocs上的Codeception文档", + "cmds": ["dd_Codeception"], + "icon": "logo/Codeception.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/codeception/index.json" + }, + "dd_CodeceptJS": { + "features": { + "code": "dd_CodeceptJS", + "explain": "devdocs上的CodeceptJS文档", + "cmds": ["dd_CodeceptJS"], + "icon": "logo/CodeceptJS.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/codeceptjs/index.json" + }, + "dd_CodeIgniter_3": { + "features": { + "code": "dd_CodeIgniter_3", + "explain": "devdocs上的CodeIgniter 3文档", + "cmds": ["dd_CodeIgniter_3"], + "icon": "logo/CodeIgniter.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/codeigniter~3/index.json" + }, + "dd_CoffeeScript_2": { + "features": { + "code": "dd_CoffeeScript_2", + "explain": "devdocs上的CoffeeScript 2文档", + "cmds": ["dd_CoffeeScript_2"], + "icon": "logo/CoffeeScript.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/coffeescript~2/index.json" + }, + "dd_CoffeeScript_1": { + "features": { + "code": "dd_CoffeeScript_1", + "explain": "devdocs上的CoffeeScript 1文档", + "cmds": ["dd_CoffeeScript_1"], + "icon": "logo/CoffeeScript.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/coffeescript~1/index.json" + }, + "dd_Cordova_8": { + "features": { + "code": "dd_Cordova_8", + "explain": "devdocs上的Cordova 8文档", + "cmds": ["dd_Cordova_8"], + "icon": "logo/Cordova.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cordova~8/index.json" + }, + "dd_Cordova_7": { + "features": { + "code": "dd_Cordova_7", + "explain": "devdocs上的Cordova 7文档", + "cmds": ["dd_Cordova_7"], + "icon": "logo/Cordova.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cordova~7/index.json" + }, + "dd_Cordova_6": { + "features": { + "code": "dd_Cordova_6", + "explain": "devdocs上的Cordova 6文档", + "cmds": ["dd_Cordova_6"], + "icon": "logo/Cordova.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/cordova~6/index.json" + }, + "dd_Crystal": { + "features": { + "code": "dd_Crystal", + "explain": "devdocs上的Crystal文档", + "cmds": ["dd_Crystal"], + "icon": "logo/Crystal.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/crystal/index.json" + }, + "dd_CSS": { + "features": { + "code": "dd_CSS", + "explain": "devdocs上的CSS文档", + "cmds": ["dd_CSS"], + "icon": "logo/CSS.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/css/index.json" + }, + "dd_D": { + "features": { + "code": "dd_D", + "explain": "devdocs上的D文档", + "cmds": ["dd_D"], + "icon": "logo/D.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/d/index.json" + }, + "dd_D3.js_5": { + "features": { + "code": "dd_D3.js_5", + "explain": "devdocs上的D3.js 5文档", + "cmds": ["dd_D3.js_5"], + "icon": "logo/D3.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/d3~5/index.json" + }, + "dd_D3.js_4": { + "features": { + "code": "dd_D3.js_4", + "explain": "devdocs上的D3.js 4文档", + "cmds": ["dd_D3.js_4"], + "icon": "logo/D3.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/d3~4/index.json" + }, + "dd_D3.js_3": { + "features": { + "code": "dd_D3.js_3", + "explain": "devdocs上的D3.js 3文档", + "cmds": ["dd_D3.js_3"], + "icon": "logo/D3.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/d3~3/index.json" + }, + "dd_Dart_2": { + "features": { + "code": "dd_Dart_2", + "explain": "devdocs上的Dart 2文档", + "cmds": ["dd_Dart_2"], + "icon": "logo/Dart.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/dart~2/index.json" + }, + "dd_Dart_1": { + "features": { + "code": "dd_Dart_1", + "explain": "devdocs上的Dart 1文档", + "cmds": ["dd_Dart_1"], + "icon": "logo/Dart.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/dart~1/index.json" + }, + "dd_Django_2.1": { + "features": { + "code": "dd_Django_2.1", + "explain": "devdocs上的Django 2.1文档", + "cmds": ["dd_Django_2.1"], + "icon": "logo/Django.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/django~2.1/index.json" + }, + "dd_Django_2.0": { + "features": { + "code": "dd_Django_2.0", + "explain": "devdocs上的Django 2.0文档", + "cmds": ["dd_Django_2.0"], + "icon": "logo/Django.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/django~2.0/index.json" + }, + "dd_Django_1.11": { + "features": { + "code": "dd_Django_1.11", + "explain": "devdocs上的Django 1.11文档", + "cmds": ["dd_Django_1.11"], + "icon": "logo/Django.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/django~1.11/index.json" + }, + "dd_Django_1.10": { + "features": { + "code": "dd_Django_1.10", + "explain": "devdocs上的Django 1.10文档", + "cmds": ["dd_Django_1.10"], + "icon": "logo/Django.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/django~1.10/index.json" + }, + "dd_Django_1.9": { + "features": { + "code": "dd_Django_1.9", + "explain": "devdocs上的Django 1.9文档", + "cmds": ["dd_Django_1.9"], + "icon": "logo/Django.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/django~1.9/index.json" + }, + "dd_Django_1.8": { + "features": { + "code": "dd_Django_1.8", + "explain": "devdocs上的Django 1.8文档", + "cmds": ["dd_Django_1.8"], + "icon": "logo/Django.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/django~1.8/index.json" + }, + "dd_Docker_17": { + "features": { + "code": "dd_Docker_17", + "explain": "devdocs上的Docker 17文档", + "cmds": ["dd_Docker_17"], + "icon": "logo/Docker.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/docker~17/index.json" + }, + "dd_Docker_1.13": { + "features": { + "code": "dd_Docker_1.13", + "explain": "devdocs上的Docker 1.13文档", + "cmds": ["dd_Docker_1.13"], + "icon": "logo/Docker.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/docker~1.13/index.json" + }, + "dd_Docker_1.12": { + "features": { + "code": "dd_Docker_1.12", + "explain": "devdocs上的Docker 1.12文档", + "cmds": ["dd_Docker_1.12"], + "icon": "logo/Docker.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/docker~1.12/index.json" + }, + "dd_Docker_1.11": { + "features": { + "code": "dd_Docker_1.11", + "explain": "devdocs上的Docker 1.11文档", + "cmds": ["dd_Docker_1.11"], + "icon": "logo/Docker.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/docker~1.11/index.json" + }, + "dd_Docker_1.10": { + "features": { + "code": "dd_Docker_1.10", + "explain": "devdocs上的Docker 1.10文档", + "cmds": ["dd_Docker_1.10"], + "icon": "logo/Docker.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/docker~1.10/index.json" + }, + "dd_Dojo": { + "features": { + "code": "dd_Dojo", + "explain": "devdocs上的Dojo文档", + "cmds": ["dd_Dojo"], + "icon": "logo/Dojo.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/dojo/index.json" + }, + "dd_DOM": { + "features": { + "code": "dd_DOM", + "explain": "devdocs上的DOM文档", + "cmds": ["dd_DOM"], + "icon": "logo/DOM.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/dom/index.json" + }, + "dd_DOM_Events": { + "features": { + "code": "dd_DOM_Events", + "explain": "devdocs上的DOM Events文档", + "cmds": ["dd_DOM_Events"], + "icon": "logo/DOM.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/dom_events/index.json" + }, + "dd_Drupal_8": { + "features": { + "code": "dd_Drupal_8", + "explain": "devdocs上的Drupal 8文档", + "cmds": ["dd_Drupal_8"], + "icon": "logo/Drupal.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/drupal~8/index.json" + }, + "dd_Drupal_7": { + "features": { + "code": "dd_Drupal_7", + "explain": "devdocs上的Drupal 7文档", + "cmds": ["dd_Drupal_7"], + "icon": "logo/Drupal.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/drupal~7/index.json" + }, + "dd_Electron": { + "features": { + "code": "dd_Electron", + "explain": "devdocs上的Electron文档", + "cmds": ["dd_Electron"], + "icon": "logo/Electron.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/electron/index.json" + }, + "dd_Elixir_1.7": { + "features": { + "code": "dd_Elixir_1.7", + "explain": "devdocs上的Elixir 1.7文档", + "cmds": ["dd_Elixir_1.7"], + "icon": "logo/Elixir.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/elixir~1.7/index.json" + }, + "dd_Elixir_1.6": { + "features": { + "code": "dd_Elixir_1.6", + "explain": "devdocs上的Elixir 1.6文档", + "cmds": ["dd_Elixir_1.6"], + "icon": "logo/Elixir.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/elixir~1.6/index.json" + }, + "dd_Elixir_1.5": { + "features": { + "code": "dd_Elixir_1.5", + "explain": "devdocs上的Elixir 1.5文档", + "cmds": ["dd_Elixir_1.5"], + "icon": "logo/Elixir.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/elixir~1.5/index.json" + }, + "dd_Elixir_1.4": { + "features": { + "code": "dd_Elixir_1.4", + "explain": "devdocs上的Elixir 1.4文档", + "cmds": ["dd_Elixir_1.4"], + "icon": "logo/Elixir.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/elixir~1.4/index.json" + }, + "dd_Elixir_1.3": { + "features": { + "code": "dd_Elixir_1.3", + "explain": "devdocs上的Elixir 1.3文档", + "cmds": ["dd_Elixir_1.3"], + "icon": "logo/Elixir.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/elixir~1.3/index.json" + }, + "dd_Ember.js": { + "features": { + "code": "dd_Ember.js", + "explain": "devdocs上的Ember.js文档", + "cmds": ["dd_Ember.js"], + "icon": "logo/Ember.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/ember/index.json" + }, + "dd_Erlang_21": { + "features": { + "code": "dd_Erlang_21", + "explain": "devdocs上的Erlang 21文档", + "cmds": ["dd_Erlang_21"], + "icon": "logo/Erlang.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/erlang~21/index.json" + }, + "dd_Erlang_20": { + "features": { + "code": "dd_Erlang_20", + "explain": "devdocs上的Erlang 20文档", + "cmds": ["dd_Erlang_20"], + "icon": "logo/Erlang.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/erlang~20/index.json" + }, + "dd_Erlang_19": { + "features": { + "code": "dd_Erlang_19", + "explain": "devdocs上的Erlang 19文档", + "cmds": ["dd_Erlang_19"], + "icon": "logo/Erlang.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/erlang~19/index.json" + }, + "dd_Erlang_18": { + "features": { + "code": "dd_Erlang_18", + "explain": "devdocs上的Erlang 18文档", + "cmds": ["dd_Erlang_18"], + "icon": "logo/Erlang.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/erlang~18/index.json" + }, + "dd_ESLint": { + "features": { + "code": "dd_ESLint", + "explain": "devdocs上的ESLint文档", + "cmds": ["dd_ESLint"], + "icon": "logo/ESLint.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/eslint/index.json" + }, + "dd_Express": { + "features": { + "code": "dd_Express", + "explain": "devdocs上的Express文档", + "cmds": ["dd_Express"], + "icon": "logo/Express.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/express/index.json" + }, + "dd_Falcon_1.4": { + "features": { + "code": "dd_Falcon_1.4", + "explain": "devdocs上的Falcon 1.4文档", + "cmds": ["dd_Falcon_1.4"], + "icon": "logo/Falcon.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/falcon~1.4/index.json" + }, + "dd_Falcon_1.3": { + "features": { + "code": "dd_Falcon_1.3", + "explain": "devdocs上的Falcon 1.3文档", + "cmds": ["dd_Falcon_1.3"], + "icon": "logo/Falcon.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/falcon~1.3/index.json" + }, + "dd_Falcon_1.2": { + "features": { + "code": "dd_Falcon_1.2", + "explain": "devdocs上的Falcon 1.2文档", + "cmds": ["dd_Falcon_1.2"], + "icon": "logo/Falcon.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/falcon~1.2/index.json" + }, + "dd_Fish_2.7": { + "features": { + "code": "dd_Fish_2.7", + "explain": "devdocs上的Fish 2.7文档", + "cmds": ["dd_Fish_2.7"], + "icon": "logo/Fish.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/fish~2.7/index.json" + }, + "dd_Fish_2.6": { + "features": { + "code": "dd_Fish_2.6", + "explain": "devdocs上的Fish 2.6文档", + "cmds": ["dd_Fish_2.6"], + "icon": "logo/Fish.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/fish~2.6/index.json" + }, + "dd_Fish_2.5": { + "features": { + "code": "dd_Fish_2.5", + "explain": "devdocs上的Fish 2.5文档", + "cmds": ["dd_Fish_2.5"], + "icon": "logo/Fish.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/fish~2.5/index.json" + }, + "dd_Fish_2.4": { + "features": { + "code": "dd_Fish_2.4", + "explain": "devdocs上的Fish 2.4文档", + "cmds": ["dd_Fish_2.4"], + "icon": "logo/Fish.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/fish~2.4/index.json" + }, + "dd_Fish_2.3": { + "features": { + "code": "dd_Fish_2.3", + "explain": "devdocs上的Fish 2.3文档", + "cmds": ["dd_Fish_2.3"], + "icon": "logo/Fish.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/fish~2.3/index.json" + }, + "dd_Fish_2.2": { + "features": { + "code": "dd_Fish_2.2", + "explain": "devdocs上的Fish 2.2文档", + "cmds": ["dd_Fish_2.2"], + "icon": "logo/Fish.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/fish~2.2/index.json" + }, + "dd_Flow": { + "features": { + "code": "dd_Flow", + "explain": "devdocs上的Flow文档", + "cmds": ["dd_Flow"], + "icon": "logo/Flow.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/flow/index.json" + }, + "dd_GCC_7": { + "features": { + "code": "dd_GCC_7", + "explain": "devdocs上的GCC 7文档", + "cmds": ["dd_GCC_7"], + "icon": "logo/GCC.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/gcc~7/index.json" + }, + "dd_GCC_7_CPP": { + "features": { + "code": "dd_GCC_7_CPP", + "explain": "devdocs上的GCC 7 CPP文档", + "cmds": ["dd_GCC_7_CPP"], + "icon": "logo/GCC.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/gcc~7_cpp/index.json" + }, + "dd_GCC_6": { + "features": { + "code": "dd_GCC_6", + "explain": "devdocs上的GCC 6文档", + "cmds": ["dd_GCC_6"], + "icon": "logo/GCC.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/gcc~6/index.json" + }, + "dd_GCC_6_CPP": { + "features": { + "code": "dd_GCC_6_CPP", + "explain": "devdocs上的GCC 6 CPP文档", + "cmds": ["dd_GCC_6_CPP"], + "icon": "logo/GCC.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/gcc~6_cpp/index.json" + }, + "dd_GCC_5": { + "features": { + "code": "dd_GCC_5", + "explain": "devdocs上的GCC 5文档", + "cmds": ["dd_GCC_5"], + "icon": "logo/GCC.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/gcc~5/index.json" + }, + "dd_GCC_5_CPP": { + "features": { + "code": "dd_GCC_5_CPP", + "explain": "devdocs上的GCC 5 CPP文档", + "cmds": ["dd_GCC_5_CPP"], + "icon": "logo/GCC.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/gcc~5_cpp/index.json" + }, + "dd_GCC_4": { + "features": { + "code": "dd_GCC_4", + "explain": "devdocs上的GCC 4文档", + "cmds": ["dd_GCC_4"], + "icon": "logo/GCC.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/gcc~4/index.json" + }, + "dd_GCC_4_CPP": { + "features": { + "code": "dd_GCC_4_CPP", + "explain": "devdocs上的GCC 4 CPP文档", + "cmds": ["dd_GCC_4_CPP"], + "icon": "logo/GCC.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/gcc~4_cpp/index.json" + }, + "dd_Git": { + "features": { + "code": "dd_Git", + "explain": "devdocs上的Git文档", + "cmds": ["dd_Git"], + "icon": "logo/Git.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/git/index.json" + }, + "dd_GNU_Fortran_7": { + "features": { + "code": "dd_GNU_Fortran_7", + "explain": "devdocs上的GNU Fortran 7文档", + "cmds": ["dd_GNU_Fortran_7"], + "icon": "logo/GNU.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/gnu_fortran~7/index.json" + }, + "dd_GNU_Fortran_6": { + "features": { + "code": "dd_GNU_Fortran_6", + "explain": "devdocs上的GNU Fortran 6文档", + "cmds": ["dd_GNU_Fortran_6"], + "icon": "logo/GNU.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/gnu_fortran~6/index.json" + }, + "dd_GNU_Fortran_5": { + "features": { + "code": "dd_GNU_Fortran_5", + "explain": "devdocs上的GNU Fortran 5文档", + "cmds": ["dd_GNU_Fortran_5"], + "icon": "logo/GNU.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/gnu_fortran~5/index.json" + }, + "dd_GNU_Fortran_4": { + "features": { + "code": "dd_GNU_Fortran_4", + "explain": "devdocs上的GNU Fortran 4文档", + "cmds": ["dd_GNU_Fortran_4"], + "icon": "logo/GNU.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/gnu_fortran~4/index.json" + }, + "dd_Go": { + "features": { + "code": "dd_Go", + "explain": "devdocs上的Go文档", + "cmds": ["dd_Go"], + "icon": "logo/Go.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/go/index.json" + }, + "dd_Godot_3.0": { + "features": { + "code": "dd_Godot_3.0", + "explain": "devdocs上的Godot 3.0文档", + "cmds": ["dd_Godot_3.0"], + "icon": "logo/Godot.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/godot~3.0/index.json" + }, + "dd_Godot_2.1": { + "features": { + "code": "dd_Godot_2.1", + "explain": "devdocs上的Godot 2.1文档", + "cmds": ["dd_Godot_2.1"], + "icon": "logo/Godot.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/godot~2.1/index.json" + }, + "dd_Graphite": { + "features": { + "code": "dd_Graphite", + "explain": "devdocs上的Graphite文档", + "cmds": ["dd_Graphite"], + "icon": "logo/Graphite.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/graphite/index.json" + }, + "dd_Grunt": { + "features": { + "code": "dd_Grunt", + "explain": "devdocs上的Grunt文档", + "cmds": ["dd_Grunt"], + "icon": "logo/Grunt.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/grunt/index.json" + }, + "dd_Handlebars.js": { + "features": { + "code": "dd_Handlebars.js", + "explain": "devdocs上的Handlebars.js文档", + "cmds": ["dd_Handlebars.js"], + "icon": "logo/Handlebars.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/handlebars/index.json" + }, + "dd_Haskell_8": { + "features": { + "code": "dd_Haskell_8", + "explain": "devdocs上的Haskell 8文档", + "cmds": ["dd_Haskell_8"], + "icon": "logo/Haskell.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/haskell~8/index.json" + }, + "dd_Haskell_7": { + "features": { + "code": "dd_Haskell_7", + "explain": "devdocs上的Haskell 7文档", + "cmds": ["dd_Haskell_7"], + "icon": "logo/Haskell.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/haskell~7/index.json" + }, + "dd_Haxe": { + "features": { + "code": "dd_Haxe", + "explain": "devdocs上的Haxe文档", + "cmds": ["dd_Haxe"], + "icon": "logo/Haxe.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/haxe/index.json" + }, + "dd_Haxe_C++": { + "features": { + "code": "dd_Haxe_C++", + "explain": "devdocs上的Haxe C++文档", + "cmds": ["dd_Haxe_C++"], + "icon": "logo/Haxe.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/haxe~cpp/index.json" + }, + "dd_Haxe_C#": { + "features": { + "code": "dd_Haxe_C#", + "explain": "devdocs上的Haxe C#文档", + "cmds": ["dd_Haxe_C#"], + "icon": "logo/Haxe.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/haxe~cs/index.json" + }, + "dd_Haxe_Flash": { + "features": { + "code": "dd_Haxe_Flash", + "explain": "devdocs上的Haxe Flash文档", + "cmds": ["dd_Haxe_Flash"], + "icon": "logo/Haxe.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/haxe~flash/index.json" + }, + "dd_Haxe_Java": { + "features": { + "code": "dd_Haxe_Java", + "explain": "devdocs上的Haxe Java文档", + "cmds": ["dd_Haxe_Java"], + "icon": "logo/Haxe.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/haxe~java/index.json" + }, + "dd_Haxe_JavaScript": { + "features": { + "code": "dd_Haxe_JavaScript", + "explain": "devdocs上的Haxe JavaScript文档", + "cmds": ["dd_Haxe_JavaScript"], + "icon": "logo/Haxe.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/haxe~javascript/index.json" + }, + "dd_Haxe_Neko": { + "features": { + "code": "dd_Haxe_Neko", + "explain": "devdocs上的Haxe Neko文档", + "cmds": ["dd_Haxe_Neko"], + "icon": "logo/Haxe.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/haxe~neko/index.json" + }, + "dd_Haxe_PHP": { + "features": { + "code": "dd_Haxe_PHP", + "explain": "devdocs上的Haxe PHP文档", + "cmds": ["dd_Haxe_PHP"], + "icon": "logo/Haxe.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/haxe~php/index.json" + }, + "dd_Haxe_Lua": { + "features": { + "code": "dd_Haxe_Lua", + "explain": "devdocs上的Haxe Lua文档", + "cmds": ["dd_Haxe_Lua"], + "icon": "logo/Haxe.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/haxe~lua/index.json" + }, + "dd_Haxe_HashLink": { + "features": { + "code": "dd_Haxe_HashLink", + "explain": "devdocs上的Haxe HashLink文档", + "cmds": ["dd_Haxe_HashLink"], + "icon": "logo/Haxe.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/haxe~hashlink/index.json" + }, + "dd_Haxe_Sys": { + "features": { + "code": "dd_Haxe_Sys", + "explain": "devdocs上的Haxe Sys文档", + "cmds": ["dd_Haxe_Sys"], + "icon": "logo/Haxe.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/haxe~sys/index.json" + }, + "dd_Haxe_Python": { + "features": { + "code": "dd_Haxe_Python", + "explain": "devdocs上的Haxe Python文档", + "cmds": ["dd_Haxe_Python"], + "icon": "logo/Haxe.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/haxe~python/index.json" + }, + "dd_Homebrew": { + "features": { + "code": "dd_Homebrew", + "explain": "devdocs上的Homebrew文档", + "cmds": ["dd_Homebrew"], + "icon": "logo/Homebrew.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/homebrew/index.json" + }, + "dd_HTML": { + "features": { + "code": "dd_HTML", + "explain": "devdocs上的HTML文档", + "cmds": ["dd_HTML"], + "icon": "logo/HTML.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/html/index.json" + }, + "dd_HTTP": { + "features": { + "code": "dd_HTTP", + "explain": "devdocs上的HTTP文档", + "cmds": ["dd_HTTP"], + "icon": "logo/HTTP.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/http/index.json" + }, + "dd_Immutable.js": { + "features": { + "code": "dd_Immutable.js", + "explain": "devdocs上的Immutable.js文档", + "cmds": ["dd_Immutable.js"], + "icon": "logo/Immutable.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/immutable/index.json" + }, + "dd_InfluxData": { + "features": { + "code": "dd_InfluxData", + "explain": "devdocs上的InfluxData文档", + "cmds": ["dd_InfluxData"], + "icon": "logo/InfluxData.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/influxdata/index.json" + }, + "dd_Jasmine": { + "features": { + "code": "dd_Jasmine", + "explain": "devdocs上的Jasmine文档", + "cmds": ["dd_Jasmine"], + "icon": "logo/Jasmine.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/jasmine/index.json" + }, + "dd_JavaScript": { + "features": { + "code": "dd_JavaScript", + "explain": "devdocs上的JavaScript文档", + "cmds": ["dd_JavaScript"], + "icon": "logo/JavaScript.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/javascript/index.json" + }, + "dd_Jekyll": { + "features": { + "code": "dd_Jekyll", + "explain": "devdocs上的Jekyll文档", + "cmds": ["dd_Jekyll"], + "icon": "logo/Jekyll.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/jekyll/index.json" + }, + "dd_Jest": { + "features": { + "code": "dd_Jest", + "explain": "devdocs上的Jest文档", + "cmds": ["dd_Jest"], + "icon": "logo/Jest.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/jest/index.json" + }, + "dd_jQuery": { + "features": { + "code": "dd_jQuery", + "explain": "devdocs上的jQuery文档", + "cmds": ["dd_jQuery"], + "icon": "logo/jQuery.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/jquery/index.json" + }, + "dd_jQuery_Mobile": { + "features": { + "code": "dd_jQuery_Mobile", + "explain": "devdocs上的jQuery Mobile文档", + "cmds": ["dd_jQuery_Mobile"], + "icon": "logo/jQuery.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/jquerymobile/index.json" + }, + "dd_jQuery_UI": { + "features": { + "code": "dd_jQuery_UI", + "explain": "devdocs上的jQuery UI文档", + "cmds": ["dd_jQuery_UI"], + "icon": "logo/jQuery.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/jqueryui/index.json" + }, + "dd_JSDoc": { + "features": { + "code": "dd_JSDoc", + "explain": "devdocs上的JSDoc文档", + "cmds": ["dd_JSDoc"], + "icon": "logo/JSDoc.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/jsdoc/index.json" + }, + "dd_Julia_1.0": { + "features": { + "code": "dd_Julia_1.0", + "explain": "devdocs上的Julia 1.0文档", + "cmds": ["dd_Julia_1.0"], + "icon": "logo/Julia.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/julia~1.0/index.json" + }, + "dd_Julia_0.7": { + "features": { + "code": "dd_Julia_0.7", + "explain": "devdocs上的Julia 0.7文档", + "cmds": ["dd_Julia_0.7"], + "icon": "logo/Julia.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/julia~0.7/index.json" + }, + "dd_Julia_0.6": { + "features": { + "code": "dd_Julia_0.6", + "explain": "devdocs上的Julia 0.6文档", + "cmds": ["dd_Julia_0.6"], + "icon": "logo/Julia.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/julia~0.6/index.json" + }, + "dd_Julia_0.5": { + "features": { + "code": "dd_Julia_0.5", + "explain": "devdocs上的Julia 0.5文档", + "cmds": ["dd_Julia_0.5"], + "icon": "logo/Julia.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/julia~0.5/index.json" + }, + "dd_Knockout.js": { + "features": { + "code": "dd_Knockout.js", + "explain": "devdocs上的Knockout.js文档", + "cmds": ["dd_Knockout.js"], + "icon": "logo/Knockout.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/knockout/index.json" + }, + "dd_Koa": { + "features": { + "code": "dd_Koa", + "explain": "devdocs上的Koa文档", + "cmds": ["dd_Koa"], + "icon": "logo/Koa.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/koa/index.json" + }, + "dd_Kotlin": { + "features": { + "code": "dd_Kotlin", + "explain": "devdocs上的Kotlin文档", + "cmds": ["dd_Kotlin"], + "icon": "logo/Kotlin.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/kotlin/index.json" + }, + "dd_Laravel_5.7": { + "features": { + "code": "dd_Laravel_5.7", + "explain": "devdocs上的Laravel 5.7文档", + "cmds": ["dd_Laravel_5.7"], + "icon": "logo/Laravel.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/laravel~5.7/index.json" + }, + "dd_Laravel_5.6": { + "features": { + "code": "dd_Laravel_5.6", + "explain": "devdocs上的Laravel 5.6文档", + "cmds": ["dd_Laravel_5.6"], + "icon": "logo/Laravel.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/laravel~5.6/index.json" + }, + "dd_Laravel_5.5": { + "features": { + "code": "dd_Laravel_5.5", + "explain": "devdocs上的Laravel 5.5文档", + "cmds": ["dd_Laravel_5.5"], + "icon": "logo/Laravel.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/laravel~5.5/index.json" + }, + "dd_Laravel_5.4": { + "features": { + "code": "dd_Laravel_5.4", + "explain": "devdocs上的Laravel 5.4文档", + "cmds": ["dd_Laravel_5.4"], + "icon": "logo/Laravel.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/laravel~5.4/index.json" + }, + "dd_Laravel_5.3": { + "features": { + "code": "dd_Laravel_5.3", + "explain": "devdocs上的Laravel 5.3文档", + "cmds": ["dd_Laravel_5.3"], + "icon": "logo/Laravel.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/laravel~5.3/index.json" + }, + "dd_Laravel_5.2": { + "features": { + "code": "dd_Laravel_5.2", + "explain": "devdocs上的Laravel 5.2文档", + "cmds": ["dd_Laravel_5.2"], + "icon": "logo/Laravel.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/laravel~5.2/index.json" + }, + "dd_Laravel_5.1": { + "features": { + "code": "dd_Laravel_5.1", + "explain": "devdocs上的Laravel 5.1文档", + "cmds": ["dd_Laravel_5.1"], + "icon": "logo/Laravel.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/laravel~5.1/index.json" + }, + "dd_Laravel_4.2": { + "features": { + "code": "dd_Laravel_4.2", + "explain": "devdocs上的Laravel 4.2文档", + "cmds": ["dd_Laravel_4.2"], + "icon": "logo/Laravel.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/laravel~4.2/index.json" + }, + "dd_Leaflet_1.3": { + "features": { + "code": "dd_Leaflet_1.3", + "explain": "devdocs上的Leaflet 1.3文档", + "cmds": ["dd_Leaflet_1.3"], + "icon": "logo/Leaflet.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/leaflet~1.3/index.json" + }, + "dd_Leaflet_1.2": { + "features": { + "code": "dd_Leaflet_1.2", + "explain": "devdocs上的Leaflet 1.2文档", + "cmds": ["dd_Leaflet_1.2"], + "icon": "logo/Leaflet.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/leaflet~1.2/index.json" + }, + "dd_Leaflet_1.1": { + "features": { + "code": "dd_Leaflet_1.1", + "explain": "devdocs上的Leaflet 1.1文档", + "cmds": ["dd_Leaflet_1.1"], + "icon": "logo/Leaflet.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/leaflet~1.1/index.json" + }, + "dd_Leaflet_1.0": { + "features": { + "code": "dd_Leaflet_1.0", + "explain": "devdocs上的Leaflet 1.0文档", + "cmds": ["dd_Leaflet_1.0"], + "icon": "logo/Leaflet.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/leaflet~1.0/index.json" + }, + "dd_Less": { + "features": { + "code": "dd_Less", + "explain": "devdocs上的Less文档", + "cmds": ["dd_Less"], + "icon": "logo/Less.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/less/index.json" + }, + "dd_Liquid": { + "features": { + "code": "dd_Liquid", + "explain": "devdocs上的Liquid文档", + "cmds": ["dd_Liquid"], + "icon": "logo/Liquid.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/liquid/index.json" + }, + "dd_lodash_4": { + "features": { + "code": "dd_lodash_4", + "explain": "devdocs上的lodash 4文档", + "cmds": ["dd_lodash_4"], + "icon": "logo/lodash.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/lodash~4/index.json" + }, + "dd_lodash_3": { + "features": { + "code": "dd_lodash_3", + "explain": "devdocs上的lodash 3文档", + "cmds": ["dd_lodash_3"], + "icon": "logo/lodash.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/lodash~3/index.json" + }, + "dd_lodash_2": { + "features": { + "code": "dd_lodash_2", + "explain": "devdocs上的lodash 2文档", + "cmds": ["dd_lodash_2"], + "icon": "logo/lodash.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/lodash~2/index.json" + }, + "dd_Lua_5.3": { + "features": { + "code": "dd_Lua_5.3", + "explain": "devdocs上的Lua 5.3文档", + "cmds": ["dd_Lua_5.3"], + "icon": "logo/Lua.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/lua~5.3/index.json" + }, + "dd_Lua_5.2": { + "features": { + "code": "dd_Lua_5.2", + "explain": "devdocs上的Lua 5.2文档", + "cmds": ["dd_Lua_5.2"], + "icon": "logo/Lua.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/lua~5.2/index.json" + }, + "dd_Lua_5.1": { + "features": { + "code": "dd_Lua_5.1", + "explain": "devdocs上的Lua 5.1文档", + "cmds": ["dd_Lua_5.1"], + "icon": "logo/Lua.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/lua~5.1/index.json" + }, + "dd_LÖVE": { + "features": { + "code": "dd_LÖVE", + "explain": "devdocs上的LÖVE文档", + "cmds": ["dd_LÖVE"], + "icon": "logo/LÖVE.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/love/index.json" + }, + "dd_Marionette.js_4": { + "features": { + "code": "dd_Marionette.js_4", + "explain": "devdocs上的Marionette.js 4文档", + "cmds": ["dd_Marionette.js_4"], + "icon": "logo/Marionette.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/marionette~4/index.json" + }, + "dd_Marionette.js_3": { + "features": { + "code": "dd_Marionette.js_3", + "explain": "devdocs上的Marionette.js 3文档", + "cmds": ["dd_Marionette.js_3"], + "icon": "logo/Marionette.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/marionette~3/index.json" + }, + "dd_Marionette.js_2": { + "features": { + "code": "dd_Marionette.js_2", + "explain": "devdocs上的Marionette.js 2文档", + "cmds": ["dd_Marionette.js_2"], + "icon": "logo/Marionette.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/marionette~2/index.json" + }, + "dd_Markdown": { + "features": { + "code": "dd_Markdown", + "explain": "devdocs上的Markdown文档", + "cmds": ["dd_Markdown"], + "icon": "logo/Markdown.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/markdown/index.json" + }, + "dd_Matplotlib_3.0": { + "features": { + "code": "dd_Matplotlib_3.0", + "explain": "devdocs上的Matplotlib 3.0文档", + "cmds": ["dd_Matplotlib_3.0"], + "icon": "logo/Matplotlib.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/matplotlib~3.0/index.json" + }, + "dd_Matplotlib_2.2": { + "features": { + "code": "dd_Matplotlib_2.2", + "explain": "devdocs上的Matplotlib 2.2文档", + "cmds": ["dd_Matplotlib_2.2"], + "icon": "logo/Matplotlib.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/matplotlib~2.2/index.json" + }, + "dd_Matplotlib_2.1": { + "features": { + "code": "dd_Matplotlib_2.1", + "explain": "devdocs上的Matplotlib 2.1文档", + "cmds": ["dd_Matplotlib_2.1"], + "icon": "logo/Matplotlib.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/matplotlib~2.1/index.json" + }, + "dd_Matplotlib_2.0": { + "features": { + "code": "dd_Matplotlib_2.0", + "explain": "devdocs上的Matplotlib 2.0文档", + "cmds": ["dd_Matplotlib_2.0"], + "icon": "logo/Matplotlib.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/matplotlib~2.0/index.json" + }, + "dd_Matplotlib_1.5": { + "features": { + "code": "dd_Matplotlib_1.5", + "explain": "devdocs上的Matplotlib 1.5文档", + "cmds": ["dd_Matplotlib_1.5"], + "icon": "logo/Matplotlib.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/matplotlib~1.5/index.json" + }, + "dd_Meteor_1.5": { + "features": { + "code": "dd_Meteor_1.5", + "explain": "devdocs上的Meteor 1.5文档", + "cmds": ["dd_Meteor_1.5"], + "icon": "logo/Meteor.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/meteor~1.5/index.json" + }, + "dd_Meteor_1.4": { + "features": { + "code": "dd_Meteor_1.4", + "explain": "devdocs上的Meteor 1.4文档", + "cmds": ["dd_Meteor_1.4"], + "icon": "logo/Meteor.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/meteor~1.4/index.json" + }, + "dd_Meteor_1.3": { + "features": { + "code": "dd_Meteor_1.3", + "explain": "devdocs上的Meteor 1.3文档", + "cmds": ["dd_Meteor_1.3"], + "icon": "logo/Meteor.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/meteor~1.3/index.json" + }, + "dd_Mocha": { + "features": { + "code": "dd_Mocha", + "explain": "devdocs上的Mocha文档", + "cmds": ["dd_Mocha"], + "icon": "logo/Mocha.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/mocha/index.json" + }, + "dd_Modernizr": { + "features": { + "code": "dd_Modernizr", + "explain": "devdocs上的Modernizr文档", + "cmds": ["dd_Modernizr"], + "icon": "logo/Modernizr.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/modernizr/index.json" + }, + "dd_Moment.js": { + "features": { + "code": "dd_Moment.js", + "explain": "devdocs上的Moment.js文档", + "cmds": ["dd_Moment.js"], + "icon": "logo/Moment.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/moment/index.json" + }, + "dd_Mongoose": { + "features": { + "code": "dd_Mongoose", + "explain": "devdocs上的Mongoose文档", + "cmds": ["dd_Mongoose"], + "icon": "logo/Mongoose.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/mongoose/index.json" + }, + "dd_nginx": { + "features": { + "code": "dd_nginx", + "explain": "devdocs上的nginx文档", + "cmds": ["dd_nginx"], + "icon": "logo/nginx.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/nginx/index.json" + }, + "dd_nginx_Lua_Module": { + "features": { + "code": "dd_nginx_Lua_Module", + "explain": "devdocs上的nginx_Lua_Module文档", + "cmds": ["dd_nginx_Lua_Module"], + "icon": "logo/nginx_Lua_Module.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/nginx_lua_module/index.json" + }, + "dd_Nim": { + "features": { + "code": "dd_Nim", + "explain": "devdocs上的Nim文档", + "cmds": ["dd_Nim"], + "icon": "logo/Nim.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/nim/index.json" + }, + "dd_Node.js": { + "features": { + "code": "dd_Node.js", + "explain": "devdocs上的Node.js文档", + "cmds": ["dd_Node.js"], + "icon": "logo/Node.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/node/index.json" + }, + "dd_Node.js_10_LTS": { + "features": { + "code": "dd_Node.js_10_LTS", + "explain": "devdocs上的Node.js 10 LTS文档", + "cmds": ["dd_Node.js_10_LTS"], + "icon": "logo/Node.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/node~10_lts/index.json" + }, + "dd_Node.js_8_LTS": { + "features": { + "code": "dd_Node.js_8_LTS", + "explain": "devdocs上的Node.js 8 LTS文档", + "cmds": ["dd_Node.js_8_LTS"], + "icon": "logo/Node.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/node~8_lts/index.json" + }, + "dd_Node.js_6_LTS": { + "features": { + "code": "dd_Node.js_6_LTS", + "explain": "devdocs上的Node.js 6 LTS文档", + "cmds": ["dd_Node.js_6_LTS"], + "icon": "logo/Node.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/node~6_lts/index.json" + }, + "dd_Node.js_4_LTS": { + "features": { + "code": "dd_Node.js_4_LTS", + "explain": "devdocs上的Node.js 4 LTS文档", + "cmds": ["dd_Node.js_4_LTS"], + "icon": "logo/Node.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/node~4_lts/index.json" + }, + "dd_Nokogiri": { + "features": { + "code": "dd_Nokogiri", + "explain": "devdocs上的Nokogiri文档", + "cmds": ["dd_Nokogiri"], + "icon": "logo/Nokogiri.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/nokogiri/index.json" + }, + "dd_npm": { + "features": { + "code": "dd_npm", + "explain": "devdocs上的npm文档", + "cmds": ["dd_npm"], + "icon": "logo/npm.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/npm/index.json" + }, + "dd_NumPy_1.14": { + "features": { + "code": "dd_NumPy_1.14", + "explain": "devdocs上的NumPy 1.14文档", + "cmds": ["dd_NumPy_1.14"], + "icon": "logo/NumPy.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/numpy~1.14/index.json" + }, + "dd_NumPy_1.13": { + "features": { + "code": "dd_NumPy_1.13", + "explain": "devdocs上的NumPy 1.13文档", + "cmds": ["dd_NumPy_1.13"], + "icon": "logo/NumPy.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/numpy~1.13/index.json" + }, + "dd_NumPy_1.12": { + "features": { + "code": "dd_NumPy_1.12", + "explain": "devdocs上的NumPy 1.12文档", + "cmds": ["dd_NumPy_1.12"], + "icon": "logo/NumPy.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/numpy~1.12/index.json" + }, + "dd_NumPy_1.11": { + "features": { + "code": "dd_NumPy_1.11", + "explain": "devdocs上的NumPy 1.11文档", + "cmds": ["dd_NumPy_1.11"], + "icon": "logo/NumPy.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/numpy~1.11/index.json" + }, + "dd_NumPy_1.10": { + "features": { + "code": "dd_NumPy_1.10", + "explain": "devdocs上的NumPy 1.10文档", + "cmds": ["dd_NumPy_1.10"], + "icon": "logo/NumPy.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/numpy~1.10/index.json" + }, + "dd_OpenJDK_8": { + "features": { + "code": "dd_OpenJDK_8", + "explain": "devdocs上的OpenJDK 8文档", + "cmds": ["dd_OpenJDK_8"], + "icon": "logo/OpenJDK.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/openjdk~8/index.json" + }, + "dd_OpenJDK_8_GUI": { + "features": { + "code": "dd_OpenJDK_8_GUI", + "explain": "devdocs上的OpenJDK 8 GUI文档", + "cmds": ["dd_OpenJDK_8_GUI"], + "icon": "logo/OpenJDK.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/openjdk~8_gui/index.json" + }, + "dd_OpenJDK_8_Web": { + "features": { + "code": "dd_OpenJDK_8_Web", + "explain": "devdocs上的OpenJDK 8 Web文档", + "cmds": ["dd_OpenJDK_8_Web"], + "icon": "logo/OpenJDK.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/openjdk~8_web/index.json" + }, + "dd_OpenTSDB": { + "features": { + "code": "dd_OpenTSDB", + "explain": "devdocs上的OpenTSDB文档", + "cmds": ["dd_OpenTSDB"], + "icon": "logo/OpenTSDB.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/opentsdb/index.json" + }, + "dd_Padrino": { + "features": { + "code": "dd_Padrino", + "explain": "devdocs上的Padrino文档", + "cmds": ["dd_Padrino"], + "icon": "logo/Padrino.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/padrino/index.json" + }, + "dd_pandas_0.23": { + "features": { + "code": "dd_pandas_0.23", + "explain": "devdocs上的pandas 0.23文档", + "cmds": ["dd_pandas_0.23"], + "icon": "logo/pandas.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/pandas~0.23/index.json" + }, + "dd_pandas_0.22": { + "features": { + "code": "dd_pandas_0.22", + "explain": "devdocs上的pandas 0.22文档", + "cmds": ["dd_pandas_0.22"], + "icon": "logo/pandas.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/pandas~0.22/index.json" + }, + "dd_pandas_0.21": { + "features": { + "code": "dd_pandas_0.21", + "explain": "devdocs上的pandas 0.21文档", + "cmds": ["dd_pandas_0.21"], + "icon": "logo/pandas.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/pandas~0.21/index.json" + }, + "dd_pandas_0.20": { + "features": { + "code": "dd_pandas_0.20", + "explain": "devdocs上的pandas 0.20文档", + "cmds": ["dd_pandas_0.20"], + "icon": "logo/pandas.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/pandas~0.20/index.json" + }, + "dd_pandas_0.19": { + "features": { + "code": "dd_pandas_0.19", + "explain": "devdocs上的pandas 0.19文档", + "cmds": ["dd_pandas_0.19"], + "icon": "logo/pandas.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/pandas~0.19/index.json" + }, + "dd_pandas_0.18": { + "features": { + "code": "dd_pandas_0.18", + "explain": "devdocs上的pandas 0.18文档", + "cmds": ["dd_pandas_0.18"], + "icon": "logo/pandas.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/pandas~0.18/index.json" + }, + "dd_Perl_5.26": { + "features": { + "code": "dd_Perl_5.26", + "explain": "devdocs上的Perl 5.26文档", + "cmds": ["dd_Perl_5.26"], + "icon": "logo/Perl.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/perl~5.26/index.json" + }, + "dd_Perl_5.24": { + "features": { + "code": "dd_Perl_5.24", + "explain": "devdocs上的Perl 5.24文档", + "cmds": ["dd_Perl_5.24"], + "icon": "logo/Perl.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/perl~5.24/index.json" + }, + "dd_Perl_5.22": { + "features": { + "code": "dd_Perl_5.22", + "explain": "devdocs上的Perl 5.22文档", + "cmds": ["dd_Perl_5.22"], + "icon": "logo/Perl.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/perl~5.22/index.json" + }, + "dd_Perl_5.20": { + "features": { + "code": "dd_Perl_5.20", + "explain": "devdocs上的Perl 5.20文档", + "cmds": ["dd_Perl_5.20"], + "icon": "logo/Perl.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/perl~5.20/index.json" + }, + "dd_Phalcon_3": { + "features": { + "code": "dd_Phalcon_3", + "explain": "devdocs上的Phalcon 3文档", + "cmds": ["dd_Phalcon_3"], + "icon": "logo/Phalcon.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/phalcon~3/index.json" + }, + "dd_Phalcon_2": { + "features": { + "code": "dd_Phalcon_2", + "explain": "devdocs上的Phalcon 2文档", + "cmds": ["dd_Phalcon_2"], + "icon": "logo/Phalcon.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/phalcon~2/index.json" + }, + "dd_Phaser": { + "features": { + "code": "dd_Phaser", + "explain": "devdocs上的Phaser文档", + "cmds": ["dd_Phaser"], + "icon": "logo/Phaser.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/phaser/index.json" + }, + "dd_Phoenix": { + "features": { + "code": "dd_Phoenix", + "explain": "devdocs上的Phoenix文档", + "cmds": ["dd_Phoenix"], + "icon": "logo/Phoenix.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/phoenix/index.json" + }, + "dd_PHP": { + "features": { + "code": "dd_PHP", + "explain": "devdocs上的PHP文档", + "cmds": ["dd_PHP"], + "icon": "logo/PHP.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/php/index.json" + }, + "dd_PHPUnit_6": { + "features": { + "code": "dd_PHPUnit_6", + "explain": "devdocs上的PHPUnit 6文档", + "cmds": ["dd_PHPUnit_6"], + "icon": "logo/PHPUnit.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/phpunit~6/index.json" + }, + "dd_PHPUnit_5": { + "features": { + "code": "dd_PHPUnit_5", + "explain": "devdocs上的PHPUnit 5文档", + "cmds": ["dd_PHPUnit_5"], + "icon": "logo/PHPUnit.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/phpunit~5/index.json" + }, + "dd_PHPUnit_4": { + "features": { + "code": "dd_PHPUnit_4", + "explain": "devdocs上的PHPUnit 4文档", + "cmds": ["dd_PHPUnit_4"], + "icon": "logo/PHPUnit.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/phpunit~4/index.json" + }, + "dd_PostgreSQL_10": { + "features": { + "code": "dd_PostgreSQL_10", + "explain": "devdocs上的PostgreSQL 10文档", + "cmds": ["dd_PostgreSQL_10"], + "icon": "logo/PostgreSQL.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/postgresql~10/index.json" + }, + "dd_PostgreSQL_9.6": { + "features": { + "code": "dd_PostgreSQL_9.6", + "explain": "devdocs上的PostgreSQL 9.6文档", + "cmds": ["dd_PostgreSQL_9.6"], + "icon": "logo/PostgreSQL.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/postgresql~9.6/index.json" + }, + "dd_PostgreSQL_9.5": { + "features": { + "code": "dd_PostgreSQL_9.5", + "explain": "devdocs上的PostgreSQL 9.5文档", + "cmds": ["dd_PostgreSQL_9.5"], + "icon": "logo/PostgreSQL.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/postgresql~9.5/index.json" + }, + "dd_PostgreSQL_9.4": { + "features": { + "code": "dd_PostgreSQL_9.4", + "explain": "devdocs上的PostgreSQL 9.4文档", + "cmds": ["dd_PostgreSQL_9.4"], + "icon": "logo/PostgreSQL.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/postgresql~9.4/index.json" + }, + "dd_Pug": { + "features": { + "code": "dd_Pug", + "explain": "devdocs上的Pug文档", + "cmds": ["dd_Pug"], + "icon": "logo/Pug.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/pug/index.json" + }, + "dd_Puppeteer": { + "features": { + "code": "dd_Puppeteer", + "explain": "devdocs上的Puppeteer文档", + "cmds": ["dd_Puppeteer"], + "icon": "logo/Puppeteer.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/puppeteer/index.json" + }, + "dd_Pygame": { + "features": { + "code": "dd_Pygame", + "explain": "devdocs上的Pygame文档", + "cmds": ["dd_Pygame"], + "icon": "logo/Pygame.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/pygame/index.json" + }, + "dd_Python_3.7": { + "features": { + "code": "dd_Python_3.7", + "explain": "devdocs上的Python 3.7文档", + "cmds": ["dd_Python_3.7"], + "icon": "logo/Python.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/python~3.7/index.json" + }, + "dd_Python_3.6": { + "features": { + "code": "dd_Python_3.6", + "explain": "devdocs上的Python 3.6文档", + "cmds": ["dd_Python_3.6"], + "icon": "logo/Python.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/python~3.6/index.json" + }, + "dd_Python_3.5": { + "features": { + "code": "dd_Python_3.5", + "explain": "devdocs上的Python 3.5文档", + "cmds": ["dd_Python_3.5"], + "icon": "logo/Python.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/python~3.5/index.json" + }, + "dd_Python_2.7": { + "features": { + "code": "dd_Python_2.7", + "explain": "devdocs上的Python 2.7文档", + "cmds": ["dd_Python_2.7"], + "icon": "logo/Python.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/python~2.7/index.json" + }, + "dd_Q": { + "features": { + "code": "dd_Q", + "explain": "devdocs上的Q文档", + "cmds": ["dd_Q"], + "icon": "logo/Q.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/q/index.json" + }, + "dd_Qt_5.11": { + "features": { + "code": "dd_Qt_5.11", + "explain": "devdocs上的Qt 5.11文档", + "cmds": ["dd_Qt_5.11"], + "icon": "logo/Qt.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/qt~5.11/index.json" + }, + "dd_Qt_5.9": { + "features": { + "code": "dd_Qt_5.9", + "explain": "devdocs上的Qt 5.9文档", + "cmds": ["dd_Qt_5.9"], + "icon": "logo/Qt.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/qt~5.9/index.json" + }, + "dd_Qt_5.6": { + "features": { + "code": "dd_Qt_5.6", + "explain": "devdocs上的Qt 5.6文档", + "cmds": ["dd_Qt_5.6"], + "icon": "logo/Qt.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/qt~5.6/index.json" + }, + "dd_Ramda": { + "features": { + "code": "dd_Ramda", + "explain": "devdocs上的Ramda文档", + "cmds": ["dd_Ramda"], + "icon": "logo/Ramda.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/ramda/index.json" + }, + "dd_React": { + "features": { + "code": "dd_React", + "explain": "devdocs上的React文档", + "cmds": ["dd_React"], + "icon": "logo/React.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/react/index.json" + }, + "dd_ReactNative": { + "features": { + "code": "dd_ReactNative", + "explain": "devdocs上的ReactNative文档", + "cmds": ["dd_ReactNative"], + "icon": "logo/ReactNative.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/react_native/index.json" + }, + "dd_Redis": { + "features": { + "code": "dd_Redis", + "explain": "devdocs上的Redis文档", + "cmds": ["dd_Redis"], + "icon": "logo/Redis.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/redis/index.json" + }, + "dd_Redux": { + "features": { + "code": "dd_Redux", + "explain": "devdocs上的Redux文档", + "cmds": ["dd_Redux"], + "icon": "logo/Redux.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/redux/index.json" + }, + "dd_Relay": { + "features": { + "code": "dd_Relay", + "explain": "devdocs上的Relay文档", + "cmds": ["dd_Relay"], + "icon": "logo/Relay.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/relay/index.json" + }, + "dd_RequireJS": { + "features": { + "code": "dd_RequireJS", + "explain": "devdocs上的RequireJS文档", + "cmds": ["dd_RequireJS"], + "icon": "logo/RequireJS.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/requirejs/index.json" + }, + "dd_RethinkDB_JavaScript": { + "features": { + "code": "dd_RethinkDB_JavaScript", + "explain": "devdocs上的RethinkDB JavaScript文档", + "cmds": ["dd_RethinkDB_JavaScript"], + "icon": "logo/RethinkDB.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/rethinkdb~javascript/index.json" + }, + "dd_RethinkDB_Ruby": { + "features": { + "code": "dd_RethinkDB_Ruby", + "explain": "devdocs上的RethinkDB Ruby文档", + "cmds": ["dd_RethinkDB_Ruby"], + "icon": "logo/RethinkDB.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/rethinkdb~ruby/index.json" + }, + "dd_RethinkDB_Python": { + "features": { + "code": "dd_RethinkDB_Python", + "explain": "devdocs上的RethinkDB Python文档", + "cmds": ["dd_RethinkDB_Python"], + "icon": "logo/RethinkDB.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/rethinkdb~python/index.json" + }, + "dd_RethinkDB_Java": { + "features": { + "code": "dd_RethinkDB_Java", + "explain": "devdocs上的RethinkDB Java文档", + "cmds": ["dd_RethinkDB_Java"], + "icon": "logo/RethinkDB.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/rethinkdb~java/index.json" + }, + "dd_Ruby_2.5": { + "features": { + "code": "dd_Ruby_2.5", + "explain": "devdocs上的Ruby 2.5文档", + "cmds": ["dd_Ruby_2.5"], + "icon": "logo/Ruby.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/ruby~2.5/index.json" + }, + "dd_Ruby_2.4": { + "features": { + "code": "dd_Ruby_2.4", + "explain": "devdocs上的Ruby 2.4文档", + "cmds": ["dd_Ruby_2.4"], + "icon": "logo/Ruby.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/ruby~2.4/index.json" + }, + "dd_Ruby_2.3": { + "features": { + "code": "dd_Ruby_2.3", + "explain": "devdocs上的Ruby 2.3文档", + "cmds": ["dd_Ruby_2.3"], + "icon": "logo/Ruby.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/ruby~2.3/index.json" + }, + "dd_Ruby_2.2": { + "features": { + "code": "dd_Ruby_2.2", + "explain": "devdocs上的Ruby 2.2文档", + "cmds": ["dd_Ruby_2.2"], + "icon": "logo/Ruby.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/ruby~2.2/index.json" + }, + "dd_Ruby_Minitest": { + "features": { + "code": "dd_Ruby_Minitest", + "explain": "devdocs上的Ruby_Minitest文档", + "cmds": ["dd_Ruby_Minitest"], + "icon": "logo/Ruby_Minitest.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/minitest/index.json" + }, + "dd_Ruby_on_Rails_5.2": { + "features": { + "code": "dd_Ruby_on_Rails_5.2", + "explain": "devdocs上的Ruby on Rails 5.2文档", + "cmds": ["dd_Ruby_on_Rails_5.2"], + "icon": "logo/Ruby.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/rails~5.2/index.json" + }, + "dd_Ruby_on_Rails_5.1": { + "features": { + "code": "dd_Ruby_on_Rails_5.1", + "explain": "devdocs上的Ruby on Rails 5.1文档", + "cmds": ["dd_Ruby_on_Rails_5.1"], + "icon": "logo/Ruby.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/rails~5.1/index.json" + }, + "dd_Ruby_on_Rails_5.0": { + "features": { + "code": "dd_Ruby_on_Rails_5.0", + "explain": "devdocs上的Ruby on Rails 5.0文档", + "cmds": ["dd_Ruby_on_Rails_5.0"], + "icon": "logo/Ruby.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/rails~5.0/index.json" + }, + "dd_Ruby_on_Rails_4.2": { + "features": { + "code": "dd_Ruby_on_Rails_4.2", + "explain": "devdocs上的Ruby on Rails 4.2文档", + "cmds": ["dd_Ruby_on_Rails_4.2"], + "icon": "logo/Ruby.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/rails~4.2/index.json" + }, + "dd_Ruby_on_Rails_4.1": { + "features": { + "code": "dd_Ruby_on_Rails_4.1", + "explain": "devdocs上的Ruby on Rails 4.1文档", + "cmds": ["dd_Ruby_on_Rails_4.1"], + "icon": "logo/Ruby.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/rails~4.1/index.json" + }, + "dd_Rust": { + "features": { + "code": "dd_Rust", + "explain": "devdocs上的Rust文档", + "cmds": ["dd_Rust"], + "icon": "logo/Rust.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/rust/index.json" + }, + "dd_Sass": { + "features": { + "code": "dd_Sass", + "explain": "devdocs上的Sass文档", + "cmds": ["dd_Sass"], + "icon": "logo/Sass.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/sass/index.json" + }, + "dd_scikit-image": { + "features": { + "code": "dd_scikit-image", + "explain": "devdocs上的scikit-image文档", + "cmds": ["dd_scikit-image"], + "icon": "logo/scikit-image.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/scikit_image/index.json" + }, + "dd_scikit-learn": { + "features": { + "code": "dd_scikit-learn", + "explain": "devdocs上的scikit-learn文档", + "cmds": ["dd_scikit-learn"], + "icon": "logo/scikit-learn.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/scikit_learn/index.json" + }, + "dd_Sinon.JS_7": { + "features": { + "code": "dd_Sinon.JS_7", + "explain": "devdocs上的Sinon.JS 7文档", + "cmds": ["dd_Sinon.JS_7"], + "icon": "logo/Sinon.JS.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/sinon~7/index.json" + }, + "dd_Sinon.JS_6": { + "features": { + "code": "dd_Sinon.JS_6", + "explain": "devdocs上的Sinon.JS 6文档", + "cmds": ["dd_Sinon.JS_6"], + "icon": "logo/Sinon.JS.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/sinon~6/index.json" + }, + "dd_Sinon.JS_5": { + "features": { + "code": "dd_Sinon.JS_5", + "explain": "devdocs上的Sinon.JS 5文档", + "cmds": ["dd_Sinon.JS_5"], + "icon": "logo/Sinon.JS.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/sinon~5/index.json" + }, + "dd_Sinon.JS_4": { + "features": { + "code": "dd_Sinon.JS_4", + "explain": "devdocs上的Sinon.JS 4文档", + "cmds": ["dd_Sinon.JS_4"], + "icon": "logo/Sinon.JS.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/sinon~4/index.json" + }, + "dd_Sinon.JS_3": { + "features": { + "code": "dd_Sinon.JS_3", + "explain": "devdocs上的Sinon.JS 3文档", + "cmds": ["dd_Sinon.JS_3"], + "icon": "logo/Sinon.JS.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/sinon~3/index.json" + }, + "dd_Sinon.JS_2": { + "features": { + "code": "dd_Sinon.JS_2", + "explain": "devdocs上的Sinon.JS 2文档", + "cmds": ["dd_Sinon.JS_2"], + "icon": "logo/Sinon.JS.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/sinon~2/index.json" + }, + "dd_Sinon.JS_1": { + "features": { + "code": "dd_Sinon.JS_1", + "explain": "devdocs上的Sinon.JS 1文档", + "cmds": ["dd_Sinon.JS_1"], + "icon": "logo/Sinon.JS.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/sinon~1/index.json" + }, + "dd_Socket.IO": { + "features": { + "code": "dd_Socket.IO", + "explain": "devdocs上的Socket.IO文档", + "cmds": ["dd_Socket.IO"], + "icon": "logo/Socket.IO.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/socketio/index.json" + }, + "dd_SQLite": { + "features": { + "code": "dd_SQLite", + "explain": "devdocs上的SQLite文档", + "cmds": ["dd_SQLite"], + "icon": "logo/SQLite.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/sqlite/index.json" + }, + "dd_Statsmodels": { + "features": { + "code": "dd_Statsmodels", + "explain": "devdocs上的Statsmodels文档", + "cmds": ["dd_Statsmodels"], + "icon": "logo/Statsmodels.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/statsmodels/index.json" + }, + "dd_Support_Tables": { + "features": { + "code": "dd_Support_Tables", + "explain": "devdocs上的Support Tables文档", + "cmds": ["dd_Support_Tables"], + "icon": "logo/Support.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/browser_support_tables/index.json" + }, + "dd_SVG": { + "features": { + "code": "dd_SVG", + "explain": "devdocs上的SVG文档", + "cmds": ["dd_SVG"], + "icon": "logo/SVG.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/svg/index.json" + }, + "dd_Symfony_4.1": { + "features": { + "code": "dd_Symfony_4.1", + "explain": "devdocs上的Symfony 4.1文档", + "cmds": ["dd_Symfony_4.1"], + "icon": "logo/Symfony.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/symfony~4.1/index.json" + }, + "dd_Symfony_4.0": { + "features": { + "code": "dd_Symfony_4.0", + "explain": "devdocs上的Symfony 4.0文档", + "cmds": ["dd_Symfony_4.0"], + "icon": "logo/Symfony.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/symfony~4.0/index.json" + }, + "dd_Symfony_3.4": { + "features": { + "code": "dd_Symfony_3.4", + "explain": "devdocs上的Symfony 3.4文档", + "cmds": ["dd_Symfony_3.4"], + "icon": "logo/Symfony.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/symfony~3.4/index.json" + }, + "dd_Symfony_3.3": { + "features": { + "code": "dd_Symfony_3.3", + "explain": "devdocs上的Symfony 3.3文档", + "cmds": ["dd_Symfony_3.3"], + "icon": "logo/Symfony.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/symfony~3.3/index.json" + }, + "dd_Symfony_3.2": { + "features": { + "code": "dd_Symfony_3.2", + "explain": "devdocs上的Symfony 3.2文档", + "cmds": ["dd_Symfony_3.2"], + "icon": "logo/Symfony.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/symfony~3.2/index.json" + }, + "dd_Symfony_3.1": { + "features": { + "code": "dd_Symfony_3.1", + "explain": "devdocs上的Symfony 3.1文档", + "cmds": ["dd_Symfony_3.1"], + "icon": "logo/Symfony.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/symfony~3.1/index.json" + }, + "dd_Symfony_3.0": { + "features": { + "code": "dd_Symfony_3.0", + "explain": "devdocs上的Symfony 3.0文档", + "cmds": ["dd_Symfony_3.0"], + "icon": "logo/Symfony.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/symfony~3.0/index.json" + }, + "dd_Symfony_2.8": { + "features": { + "code": "dd_Symfony_2.8", + "explain": "devdocs上的Symfony 2.8文档", + "cmds": ["dd_Symfony_2.8"], + "icon": "logo/Symfony.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/symfony~2.8/index.json" + }, + "dd_Symfony_2.7": { + "features": { + "code": "dd_Symfony_2.7", + "explain": "devdocs上的Symfony 2.7文档", + "cmds": ["dd_Symfony_2.7"], + "icon": "logo/Symfony.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/symfony~2.7/index.json" + }, + "dd_Tcl_Tk": { + "features": { + "code": "dd_Tcl_Tk", + "explain": "devdocs上的Tcl_Tk文档", + "cmds": ["dd_Tcl_Tk"], + "icon": "logo/Tcl_Tk.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/tcl_tk/index.json" + }, + "dd_TensorFlow_Python": { + "features": { + "code": "dd_TensorFlow_Python", + "explain": "devdocs上的TensorFlow Python文档", + "cmds": ["dd_TensorFlow_Python"], + "icon": "logo/TensorFlow.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/tensorflow~python/index.json" + }, + "dd_TensorFlow_C++": { + "features": { + "code": "dd_TensorFlow_C++", + "explain": "devdocs上的TensorFlow C++文档", + "cmds": ["dd_TensorFlow_C++"], + "icon": "logo/TensorFlow.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/tensorflow~cpp/index.json" + }, + "dd_TensorFlow_Guide": { + "features": { + "code": "dd_TensorFlow_Guide", + "explain": "devdocs上的TensorFlow Guide文档", + "cmds": ["dd_TensorFlow_Guide"], + "icon": "logo/TensorFlow.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/tensorflow~guide/index.json" + }, + "dd_Terraform": { + "features": { + "code": "dd_Terraform", + "explain": "devdocs上的Terraform文档", + "cmds": ["dd_Terraform"], + "icon": "logo/Terraform.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/terraform/index.json" + }, + "dd_Twig_2": { + "features": { + "code": "dd_Twig_2", + "explain": "devdocs上的Twig 2文档", + "cmds": ["dd_Twig_2"], + "icon": "logo/Twig.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/twig~2/index.json" + }, + "dd_Twig_1": { + "features": { + "code": "dd_Twig_1", + "explain": "devdocs上的Twig 1文档", + "cmds": ["dd_Twig_1"], + "icon": "logo/Twig.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/twig~1/index.json" + }, + "dd_TypeScript": { + "features": { + "code": "dd_TypeScript", + "explain": "devdocs上的TypeScript文档", + "cmds": ["dd_TypeScript"], + "icon": "logo/TypeScript.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/typescript/index.json" + }, + "dd_Underscore.js": { + "features": { + "code": "dd_Underscore.js", + "explain": "devdocs上的Underscore.js文档", + "cmds": ["dd_Underscore.js"], + "icon": "logo/Underscore.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/underscore/index.json" + }, + "dd_Vagrant": { + "features": { + "code": "dd_Vagrant", + "explain": "devdocs上的Vagrant文档", + "cmds": ["dd_Vagrant"], + "icon": "logo/Vagrant.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/vagrant/index.json" + }, + "dd_Vue.js_2": { + "features": { + "code": "dd_Vue.js_2", + "explain": "devdocs上的Vue.js 2文档", + "cmds": ["dd_Vue.js_2"], + "icon": "logo/Vue.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/vue~2/index.json" + }, + "dd_Vue.js_1": { + "features": { + "code": "dd_Vue.js_1", + "explain": "devdocs上的Vue.js 1文档", + "cmds": ["dd_Vue.js_1"], + "icon": "logo/Vue.js.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/vue~1/index.json" + }, + "dd_Vulkan": { + "features": { + "code": "dd_Vulkan", + "explain": "devdocs上的Vulkan文档", + "cmds": ["dd_Vulkan"], + "icon": "logo/Vulkan.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/vulkan/index.json" + }, + "dd_webpack": { + "features": { + "code": "dd_webpack", + "explain": "devdocs上的webpack文档", + "cmds": ["dd_webpack"], + "icon": "logo/webpack.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/webpack/index.json" + }, + "dd_webpack_1": { + "features": { + "code": "dd_webpack_1", + "explain": "devdocs上的webpack 1文档", + "cmds": ["dd_webpack_1"], + "icon": "logo/webpack.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/webpack~1/index.json" + }, + "dd_XSLT&XPath": { + "features": { + "code": "dd_XSLT&XPath", + "explain": "devdocs上的XSLT & XPath文档", + "cmds": ["dd_XSLT&XPath"], + "icon": "logo/XSLT.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/xslt_xpath/index.json" + }, + "dd_Yarn": { + "features": { + "code": "dd_Yarn", + "explain": "devdocs上的Yarn文档", + "cmds": ["dd_Yarn"], + "icon": "logo/Yarn.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/yarn/index.json" + }, + "dd_Yii_2.0": { + "features": { + "code": "dd_Yii_2.0", + "explain": "devdocs上的Yii 2.0文档", + "cmds": ["dd_Yii_2.0"], + "icon": "logo/Yii.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/yii~2.0/index.json" + }, + "dd_Yii_1.1": { + "features": { + "code": "dd_Yii_1.1", + "explain": "devdocs上的Yii 1.1文档", + "cmds": ["dd_Yii_1.1"], + "icon": "logo/Yii.png" + }, + "type": "devdocs", + "url": "https://docs.devdocs.io/yii~1.1/index.json" + } + } \ No newline at end of file diff --git a/plugin.json b/plugin.json index 00563520..57ab9d58 100644 --- a/plugin.json +++ b/plugin.json @@ -15,6 +15,11 @@ "code": "options", "explain": "调整程序员手册的功能", "cmds": [ "手册设置", "ManualOptions" ] + }, + { + "code": "devdocs", + "explain": "查看 devdocs 的英文文档", + "cmds": [ "devdocs" ] } ] } \ No newline at end of file diff --git a/preload.js b/preload.js index 6fa0b7eb..662e2dc6 100644 --- a/preload.js +++ b/preload.js @@ -3,7 +3,7 @@ const { shell } = require('electron'); const { dialog, BrowserWindow, nativeImage } = require('electron').remote const path = require("path") -getDirname = () => __dirname; +dirname = __dirname; open = url => { shell.openExternal(url);