xueditor
Version:
clone from ueditor 1.5.0
22 lines (21 loc) • 1.19 MB
JavaScript
/*!
* UEditor
* version: ueditor
* build: Thu Jun 01 2017 17:57:11 GMT+0800 (中国标准时间)
*/
(function () {
var iframeUrlDocMap = {
'dialogs/anchor/anchor.html': '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"\n "http://www.w3.org/TR/html4/loose.dtd">\n<html>\n <head>\n <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>\n <title></title>\n <style type="text/css">\n *{color: #838383;margin: 0;padding: 0}\n html,body {font-size: 12px;overflow: hidden; }\n .content{padding:5px 0 0 15px;}\n input{width:210px;height:21px;line-height:21px;margin-left: 4px;}\n </style>\n </head>\n <body>\n <div class="content">\n <span><var id="lang_input_anchorName"></var></span><input id="anchorName" value="" />\n </div>\n <script type="text/javascript" src="../internal.js"></script>\n <script type="text/javascript">\n var anchorInput = $G(\'anchorName\'),\n node = editor.selection.getRange().getClosedNode();\n if(node && node.tagName == \'IMG\' && (node = node.getAttribute(\'anchorname\'))){\n anchorInput.value = node;\n }\n anchorInput.onkeydown = function(evt){\n evt = evt || window.event;\n if(evt.keyCode == 13){\n editor.execCommand(\'anchor\', anchorInput.value);\n dialog.close();\n domUtils.preventDefault(evt)\n }\n };\n dialog.onok = function (){\n editor.execCommand(\'anchor\', anchorInput.value);\n dialog.close();\n };\n $focus(anchorInput);\n </script>\n </body>\n</html>',
'dialogs/image/image.html': '<!doctype html>\n<html>\n<head>\n <meta charset="UTF-8">\n <title>ueditor图片对话框</title>\n <script type="text/javascript" src="../internal.js"></script>\n <!-- jquery -->\n <script type="text/javascript" src="../../third-party/jquery-1.10.2.min.js"></script>\n <!-- webuploader -->\n <script src="../../third-party/webuploader/webuploader.min.js"></script>\n <link rel="stylesheet" type="text/css" href="../../third-party/webuploader/webuploader.css">\n <!-- image dialog -->\n <link rel="stylesheet" href="image.css" type="text/css" />\n</head>\n<body>\n <div class="wrapper">\n <div id="tabhead" class="tabhead">\n <span class="tab" data-content-id="remote"><var id="lang_tab_remote"></var></span>\n <span class="tab focus" data-content-id="upload"><var id="lang_tab_upload"></var></span>\n <!-- <span class="tab" data-content-id="online"><var id="lang_tab_online"></var></span> -->\n <!-- <span class="tab" data-content-id="search"><var id="lang_tab_search"></var></span> -->\n </div>\n <div class="alignBar">\n <label class="algnLabel"><var id="lang_input_align"></var></label>\n <span id="alignIcon">\n <span id="noneAlign" class="none-align focus" data-align="none"></span>\n <span id="leftAlign" class="left-align" data-align="left"></span>\n <span id="rightAlign" class="right-align" data-align="right"></span>\n <span id="centerAlign" class="center-align" data-align="center"></span>\n </span>\n <input id="align" name="align" type="hidden" value="none"/>\n </div>\n <div id="tabbody" class="tabbody">\n <!-- 远程图片 -->\n <div id="remote" class="panel">\n <div class="top">\n <div class="row">\n <label for="url"><var id="lang_input_url"></var></label>\n <span><input class="text" id="url" type="text"/></span>\n </div>\n </div>\n <div class="left">\n <div class="row">\n <label><var id="lang_input_size"></var></label>\n <span><var id="lang_input_width"> </var><input class="text" type="number" id="width"/>px </span>\n </div>\n <div class="row">\n <label> </label>\n <span><var id="lang_input_height"> </var><input class="text" type="number" id="height"/>px </span>\n <span><input id="lock" type="checkbox" disabled="disabled"><span id="lockicon"></span></span>\n </div>\n <div class="row">\n <label><var id="lang_input_border"></var></label>\n <span><input class="text" type="text" id="border"/>px </span>\n </div>\n <div class="row">\n <label><var id="lang_input_vhspace"></var></label>\n <span><input class="text" type="text" id="vhSpace"/>px </span>\n </div>\n <div class="row">\n <label><var id="lang_input_title"></var></label>\n <span><input class="text" type="text" id="title"/></span>\n </div>\n </div>\n <div class="right"><div id="preview"></div></div>\n </div>\n <!-- 上传图片 -->\n <div id="upload" class="panel focus">\n <div id="queueList" class="queueList">\n <div class="statusBar element-invisible">\n <div class="progress">\n <span class="text">0%</span>\n <span class="percentage"></span>\n </div><div class="info"></div>\n <div class="btns">\n <div id="filePickerBtn"></div>\n <div class="uploadBtn"><var id="lang_start_upload"></var></div>\n </div>\n </div>\n <div id="dndArea" class="placeholder">\n <div class="filePickerContainer">\n <div id="filePickerReady"></div>\n </div>\n </div>\n <ul class="filelist element-invisible">\n <li id="filePickerBlock" class="filePickerBlock"></li>\n </ul>\n </div>\n </div>\n <!-- 在线图片 -->\n <div id="online" class="panel">\n <div id="imageList"><var id="lang_imgLoading"></var></div>\n </div>\n <!-- 搜索图片 -->\n <div id="search" class="panel">\n <div class="searchBar">\n <input id="searchTxt" class="searchTxt text" type="text" />\n <select id="searchType" class="searchType">\n <option value="&s=4&z=0"></option>\n <option value="&s=1&z=19"></option>\n <option value="&s=2&z=0"></option>\n <option value="&s=3&z=0"></option>\n </select>\n <input id="searchReset" type="button" />\n <input id="searchBtn" type="button" />\n </div>\n <div id="searchList" class="searchList"><ul id="searchListUl"></ul></div>\n </div>\n </div>\n </div>\n <script type="text/javascript" src="image.js"></script>\n</body>\n</html>',
'dialogs/link/link.html': '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"\n "http://www.w3.org/TR/html4/loose.dtd">\n<html>\n<head>\n <title></title>\n <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>\n <script type="text/javascript" src="../internal.js"></script>\n <style type="text/css">\n *{margin:0;padding:0;color: #838383;}\n table{font-size: 12px;margin: 10px;line-height: 30px}\n .txt{width:300px;height:21px;line-height:21px;border:1px solid #d7d7d7;}\n </style>\n</head>\n<body>\n <table>\n <tr>\n <td><label for="text"> <var id="lang_input_text"></var></label></td>\n <td><input class="txt" id="text" type="text" disabled="true"/></td>\n </tr>\n <tr>\n <td><label for="href"> <var id="lang_input_url"></var></label></td>\n <td><input class="txt" id="href" type="text" /></td>\n </tr>\n <tr>\n <td><label for="title"> <var id="lang_input_title"></var></label></td>\n <td><input class="txt" id="title" type="text"/></td>\n </tr>\n <tr>\n <td colspan="2">\n <label for="target"><var id="lang_input_target"></var></label>\n <input id="target" type="checkbox"/>\n </td>\n </tr>\n <tr>\n <td colspan="2" id="msg"></td>\n </tr>\n </table>\n<script type="text/javascript">\n editor.setOpt(\'allowLinkProtocols\', [\'http:\', \'https:\', \'#\', \'/\', \'ftp:\', \'mailto:\', \'tel:\']);\n var allowLinkProtocols = editor.getOpt(\'allowLinkProtocols\');\n var range = editor.selection.getRange(),\n link = range.collapsed ? editor.queryCommandValue( "link" ) : editor.selection.getStart(),\n url,\n text = $G(\'text\'),\n rangeLink = domUtils.findParentByTagName(range.getCommonAncestor(),\'a\',true),\n orgText;\n link = domUtils.findParentByTagName( link, "a", true );\n if(link){\n url = utils.html(link.getAttribute( \'_href\' ) || link.getAttribute( \'href\', 2 ));\n if(rangeLink === link && !link.getElementsByTagName(\'img\').length){\n text.removeAttribute(\'disabled\');\n orgText = text.value = link[browser.ie ? \'innerText\':\'textContent\'];\n }else{\n text.setAttribute(\'disabled\',\'true\');\n text.value = lang.validLink;\n }\n }else{\n if(range.collapsed){\n text.removeAttribute(\'disabled\');\n text.value = \'\';\n }else{\n text.setAttribute(\'disabled\',\'true\');\n text.value = lang.validLink;\n }\n }\n $G("title").value = url ? link.title : "";\n $G("href").value = url ? url: \'\';\n $G("target").checked = url && link.target == "_blank" ? true : false;\n $focus($G("href"));\n function handleDialogOk(){\n var href =$G(\'href\').value.replace(/^\s+|\s+$/g, \'\');\n if(href){\n if(!hrefStartWith(href, allowLinkProtocols)) {\n href = "http://" + href;\n }\n var obj = {\n \'href\' : href,\n \'target\' : $G("target").checked ? "_blank" : \'_self\',\n \'title\' : $G("title").value.replace(/^\s+|\s+$/g, \'\'),\n \'_href\':href\n };\n //修改链接内容的情况太特殊了,所以先做到这里了\n //todo:情况多的时候,做到command里\n if(orgText && text.value != orgText){\n link[browser.ie ? \'innerText\' : \'textContent\'] = obj.textValue = text.value;\n range.selectNode(link).select()\n }\n if(range.collapsed){\n obj.textValue = text.value;\n }\n editor.execCommand(\'link\',utils.clearEmptyAttrs(obj) );\n dialog.close();\n }\n }\n dialog.onok = handleDialogOk;\n $G(\'href\').onkeydown = $G(\'title\').onkeydown = function(evt){\n evt = evt || window.event;\n if (evt.keyCode == 13) {\n handleDialogOk();\n return false;\n }\n };\n $G(\'href\').onblur = function(){\n if(!hrefStartWith(this.value, allowLinkProtocols)){\n $G("msg").innerHTML = "<span style=\'color: red\'>"+lang.httpPrompt+"</span>";\n }else{\n $G("msg").innerHTML = "";\n }\n };\n function hrefStartWith(href,arr){\n href = href.replace(/^\s+|\s+$/g, \'\');\n for(var i=0,ai;ai=arr[i++];){\n if(href.indexOf(ai)==0){\n return true;\n }\n }\n return false;\n }\n</script>\n</body>\n</html>\n',
'dialogs/spechars/spechars.html': '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"\n "http://www.w3.org/TR/html4/loose.dtd">\n<html>\n<head>\n <title></title>\n <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>\n <script type="text/javascript" src="../internal.js"></script>\n <style type="text/css">\n html,body{overflow:hidden;}\n #specharsTab{width: 97%;margin: 10px auto; zoom:1;position: relative}\n .tabbody {height:447px;}\n .tabbody span{ margin: 5px 3px;text-align: center;display:inline-block;width: 40px;height:16px;line-height: 16px;cursor: pointer; }\n </style>\n</head>\n<body>\n <div id="specharsTab">\n <div id="tabHeads" class="tabhead"></div><div id="tabBodys" class="tabbody"></div>\n </div>\n<script type="text/javascript" src="spechars.js"></script>\n</body>\n</html>',
'dialogs/searchreplace/searchreplace.html': '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"\n "http://www.w3.org/TR/html4/loose.dtd">\n<html>\n<head>\n <title></title>\n <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>\n <script type="text/javascript" src="../internal.js"></script>\n <style type="text/css">\n .warpper{ position:relative;width: 380px; height: 100%; margin: 10px auto;}\n .tabbody{height: 160px;}\n .tabbody table{width:100%;border-collapse: separate;border-spacing: 3px;}\n .tabbody .panel{width:373px;height:100%;padding-left: 5px;position: absolute;background-color: #fff;}\n .tabbody input.int{ width:190px;height:21px;border:1px solid #d7d7d7;line-height:21px;}\n .tabbody input.btn{padding: 0 5px; text-align:center;line-height:24px; text-decoration: none;height:24px;background:url("../../themes/default/images/dialog-title-bg.png") repeat-x;border:1px solid #ccc; }\n </style>\n</head>\n<body>\n<div class="warpper" id="searchtab">\n <div id="head" class="tabhead">\n <span tabsrc="find" class="focus"><var id="lang_tab_search"></var></span>\n <span tabsrc="replace" ><var id="lang_tab_replace"></var></span>\n </div>\n <div class="tabbody">\n <div class="panel" id="find">\n <table>\n <tr>\n <td width="80"><var id="lang_search1"></var>: </td>\n <td><input id="findtxt" type="text" class="int" /></td>\n </tr>\n <!--<tr>-->\n <!--<td colspan="2"><span style="color:red"><var id="lang_searchReg"></var></span></td>-->\n <!--</tr>-->\n <tr>\n <td><var id="lang_case_sensitive1"></var></td>\n <td>\n <input id="matchCase" type="checkbox" />\n </td>\n </tr>\n <tr>\n <td colspan="2">\n <input id="nextFindBtn" type="button" class="btn" />\n <input id="preFindBtn" type="button" class="btn" />\n </td>\n </tr>\n <tr>\n <td colspan="2">\n \n </td>\n </tr>\n <tr>\n <td colspan="2">\n <span id="search-msg" style="color:red"></span>\n </td>\n </tr>\n </table>\n </div>\n <div class="panel" id="replace">\n <table>\n <tr>\n <td width="80"><var id="lang_search2"></var>: </td>\n <td><input id="findtxt1" type="text" class="int" /></td>\n </tr>\n <!--<tr>-->\n <!--<td colspan="2"><span style="color:red"><var id="lang_searchReg1"></var></span></td>-->\n <!--</tr>-->\n <tr>\n <td><var id="lang_replace"></var>: </td>\n <td><input id="replacetxt" type="text" class="int" /></td>\n </tr>\n <tr>\n <td><var id="lang_case_sensitive2"></var></td>\n <td>\n <input id="matchCase1" type="checkbox" />\n </td>\n </tr>\n <tr>\n <td colspan="2">\n <input id="nextReplaceBtn" type="button" class="btn" />\n <input id="preReplaceBtn" type="button" class="btn" />\n <input id="repalceBtn" type="button" class="btn" />\n <input id="repalceAllBtn" type="button" class="btn" />\n </td>\n </tr>\n <tr>\n <td colspan="2">\n \n </td>\n </tr>\n <tr>\n <td colspan="2">\n <span id="replace-msg" style="color:red"></span>\n </td>\n </tr>\n </table>\n </div>\n </div>\n</div>\n<script type="text/javascript" src="searchreplace.js"></script>\n</body>\n</html>',
'dialogs/map/map.html': '<!DOCTYPE html>\n<html>\n<head>\n <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\n <title></title>\n <script type="text/javascript" src="../internal.js"></script>\n <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.1&services=true"></script>\n <style type="text/css">\n .content{width:530px; height: 350px;margin: 10px auto;}\n .content table{width: 100%}\n .content table td{vertical-align: middle;}\n #city,#address{height:21px;background: #FFF;border:1px solid #d7d7d7; line-height: 21px;}\n #city{width:60px}\n #address{width:130px}\n #is_dynamic_label span{vertical-align:middle;margin: 3px 0px 3px 3px;}\n #is_dynamic_label input{vertical-align:middle;margin: 3px 3px 3px 50px;}\n </style>\n</head>\n<body>\n<div class="content">\n <table>\n <tr>\n <td><var id="lang_city"></var>:</td>\n <td><input id="city" type="text" /></td>\n <td><var id="lang_address"></var>:</td>\n <td><input id="address" type="text" value="" /></td>\n <td><a href="javascript:doSearch()" class="button"><var id="lang_search"></var></a></td>\n <td><label id="is_dynamic_label" for="is_dynamic"><input id="is_dynamic" type="checkbox" name="is_dynamic" /><span><var id="lang_dynamicmap"></var></span></label></td>\n </tr>\n </table>\n <div style="width:100%;height:340px;margin:5px auto;border:1px solid gray" id="container"></div>\n</div>\n<script type="text/javascript">\n var map = new BMap.Map("container"),marker,point,styleStr;\n map.enableScrollWheelZoom();\n map.enableContinuousZoom();\n function doSearch(){\n if (!document.getElementById(\'city\').value) {\n alert(lang.cityMsg);\n return;\n }\n var search = new BMap.LocalSearch(document.getElementById(\'city\').value, {\n onSearchComplete: function (results){\n if (results && results.getNumPois()) {\n var points = [];\n for (var i=0; i<results.getCurrentNumPois(); i++) {\n points.push(results.getPoi(i).point);\n }\n if (points.length > 1) {\n map.setViewport(points);\n } else {\n map.centerAndZoom(points[0], 13);\n }\n point = map.getCenter();\n marker.setPoint(point);\n } else {\n alert(lang.errorMsg);\n }\n }\n });\n search.search(document.getElementById(\'address\').value || document.getElementById(\'city\').value);\n }\n //获得参数\n function getPars(str,par){\n var reg = new RegExp(par+"=((\\d+|[.,])*)","g");\n return reg.exec(str)[1];\n }\n function init(){\n var mapNode = editor.selection.getRange().getClosedNode(),\n isMapImg = mapNode && /api[.]map[.]baidu[.]com/ig.test(mapNode.getAttribute("src")),\n isMapIframe = mapNode && domUtils.hasClass(mapNode, \'ueditor_baidumap\');\n if(isMapImg || isMapIframe){\n var url, centerPos, markerPos;\n if(isMapIframe) {\n url = decodeURIComponent(mapNode.getAttribute("src"));\n $G(\'is_dynamic\').checked = true;\n styleStr = mapNode.style.cssText;\n } else {\n url = mapNode.getAttribute("src");\n styleStr = mapNode.style.cssText;\n }\n centerPos = getPars(url,"center").split(",");\n markerPos = getPars(url, "markers").split(",");\n point = new BMap.Point(Number(centerPos[0]),Number(centerPos[1]));\n marker = new BMap.Marker(new BMap.Point(Number(markerPos[0]), Number(markerPos[1])));\n map.addControl(new BMap.NavigationControl());\n map.centerAndZoom(point, Number(getPars(url,"zoom")));\n }else{\n point = new BMap.Point(116.404, 39.915); // 创建点坐标\n marker = new BMap.Marker(point);\n map.addControl(new BMap.NavigationControl());\n map.centerAndZoom(point, 10); // 初始化地图,设置中心点坐标和地图级别。\n }\n marker.enableDragging();\n map.addOverlay(marker);\n }\n init();\n document.getElementById(\'address\').onkeydown = function (evt){\n evt = evt || event;\n if (evt.keyCode == 13) {\n doSearch();\n }\n };\n dialog.onok = function (){\n var center = map.getCenter();\n var zoom = map.zoomLevel;\n var size = map.getSize();\n var mapWidth = size.width;\n var mapHeight = size.height;\n var point = marker.getPoint();\n if($G(\'is_dynamic\').checked) {\n var URL = editor.options.UEDITOR_HOME_URL,\n url = [URL + (/\/$/.test(URL) ? \'\':\'/\') + "dialogs/map/show.html" +\n \'#center=\' + center.lng + \',\' + center.lat,\n \'&zoom=\' + zoom,\n \'&width=\' + mapWidth,\n \'&height=\' + mapHeight,\n \'&markers=\' + point.lng + \',\' + point.lat,\n \'&markerStyles=\' + \'l,A\'].join(\'\');\n editor.execCommand(\'inserthtml\', \'<iframe class="ueditor_baidumap" src="\' + url + \'"\' + (styleStr ? \' style="\' + styleStr + \'"\' :\'\') + \' frameborder="0" width="\' + (mapWidth+4) + \'" height="\' + (mapHeight+4) + \'"></iframe>\');\n } else {\n var url = "http://api.map.baidu.com/staticimage?center=" + center.lng + \',\' + center.lat +\n "&zoom=" + zoom + "&width=" + size.width + \'&height=\' + size.height + "&markers=" + point.lng + \',\' + point.lat;\n editor.execCommand(\'inserthtml\', \'<img width="\'+ size.width +\'"height="\'+ size.height +\'" src="\' + url + \'"\' + (styleStr ? \' style="\' + styleStr + \'"\' :\'\') + \'/>\');\n }\n };\n document.getElementById("address").focus();\n</script>\n</body>\n</html>\n',
'dialogs/video/video.html': '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"\n "http://www.w3.org/TR/html4/loose.dtd">\n<html>\n<head>\n <title></title>\n <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>\n <script type="text/javascript" src="../internal.js"></script>\n <link rel="stylesheet" type="text/css" href="video.css" />\n</head>\n<body>\n<div class="wrapper">\n <div id="videoTab">\n <div id="tabHeads" class="tabhead">\n <span tabSrc="video" class="focus" data-content-id="video"><var id="lang_tab_insertV"></var></span>\n <span tabSrc="upload" data-content-id="upload"><var id="lang_tab_uploadV"></var></span>\n </div>\n <div id="tabBodys" class="tabbody">\n <div id="video" class="panel focus">\n <table><tr><td><label for="videoUrl" class="url"><var id="lang_video_url"></var></label></td><td><input id="videoUrl" type="text"></td></tr></table>\n <div id="preview"></div>\n <div id="videoInfo">\n <fieldset>\n <legend><var id="lang_video_size"></var></legend>\n <table>\n <tr><td><label for="videoWidth"><var id="lang_videoW"></var></label></td><td><input class="txt" id="videoWidth" type="text"/></td></tr>\n <tr><td><label for="videoHeight"><var id="lang_videoH"></var></label></td><td><input class="txt" id="videoHeight" type="text"/></td></tr>\n </table>\n </fieldset>\n <fieldset>\n <legend><var id="lang_alignment"></var></legend>\n <div id="videoFloat"></div>\n </fieldset>\n </div>\n </div>\n <div id="upload" class="panel">\n <div id="upload_left">\n <div id="queueList" class="queueList">\n <div class="statusBar element-invisible">\n <div class="progress">\n <span class="text">0%</span>\n <span class="percentage"></span>\n </div><div class="info"></div>\n <div class="btns">\n <div id="filePickerBtn"></div>\n <div class="uploadBtn"><var id="lang_start_upload"></var></div>\n </div>\n </div>\n <div id="dndArea" class="placeholder">\n <div class="filePickerContainer">\n <div id="filePickerReady"></div>\n </div>\n </div>\n <ul class="filelist element-invisible">\n <li id="filePickerBlock" class="filePickerBlock"></li>\n </ul>\n </div>\n </div>\n <div id="uploadVideoInfo">\n <fieldset>\n <legend><var id="lang_upload_size"></var></legend>\n <table>\n <tr><td><label><var id="lang_upload_width"></var></label></td><td><input class="txt" id="upload_width" type="text"/></td></tr>\n <tr><td><label><var id="lang_upload_height"></var></label></td><td><input class="txt" id="upload_height" type="text"/></td></tr>\n </table>\n </fieldset>\n <fieldset>\n <legend><var id="lang_upload_alignment"></var></legend>\n <div id="upload_alignment"></div>\n </fieldset>\n </div>\n </div>\n </div>\n </div>\n</div>\n<!-- jquery -->\n<script type="text/javascript" src="../../third-party/jquery-1.10.2.min.js"></script>\n<!-- webuploader -->\n<script type="text/javascript" src="../../third-party/webuploader/webuploader.min.js"></script>\n<link rel="stylesheet" type="text/css" href="../../third-party/webuploader/webuploader.css">\n<!-- video -->\n<script type="text/javascript" src="video.js"></script>\n</body>\n</html>',
'dialogs/help/help.html': '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"\n "http://www.w3.org/TR/html4/loose.dtd">\n<html>\n<head>\n <title>帮助</title>\n <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>\n <script type="text/javascript" src="../internal.js"></script>\n <link rel="stylesheet" type="text/css" href="help.css">\n</head>\n<body>\n<div class="wrapper" id="helptab">\n <div id="tabHeads" class="tabhead">\n <span class="focus" tabsrc="about"><var id="lang_input_about"></var></span>\n <span tabsrc="shortcuts"><var id="lang_input_shortcuts"></var></span>\n </div>\n <div id="tabBodys" class="tabbody">\n <div id="about" class="panel">\n <h1>UEditor</h1>\n <p id="version"></p>\n <p><var id="lang_input_introduction"></var></p>\n </div>\n <div id="shortcuts" class="panel">\n <table>\n <thead>\n <tr>\n <td><var id="lang_Txt_shortcuts"></var></td>\n <td><var id="lang_Txt_func"></var></td>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>ctrl+b</td>\n <td><var id="lang_Txt_bold"></var></td>\n </tr>\n <tr>\n <td>ctrl+c</td>\n <td><var id="lang_Txt_copy"></var></td>\n </tr>\n <tr>\n <td>ctrl+x</td>\n <td><var id="lang_Txt_cut"></var></td>\n </tr>\n <tr>\n <td>ctrl+v</td>\n <td><var id="lang_Txt_Paste"></var></td>\n </tr>\n <tr>\n <td>ctrl+y</td>\n <td><var id="lang_Txt_undo"></var></td>\n </tr>\n <tr>\n <td>ctrl+z</td>\n <td><var id="lang_Txt_redo"></var></td>\n </tr>\n <tr>\n <td>ctrl+i</td>\n <td><var id="lang_Txt_italic"></var></td>\n </tr>\n <tr>\n <td>ctrl+u</td>\n <td><var id="lang_Txt_underline"></var></td>\n </tr>\n <tr>\n <td>ctrl+a</td>\n <td><var id="lang_Txt_selectAll"></var></td>\n </tr>\n <tr>\n <td>shift+enter</td>\n <td><var id="lang_Txt_visualEnter"></var></td>\n </tr>\n <tr>\n <td>alt+z</td>\n <td><var id="lang_Txt_fullscreen"></var></td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n<script type="text/javascript" src="help.js"></script>\n</body>\n</html>',
'dialogs/emotion/emotion.html': '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n <title></title>\n <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>\n <meta name="robots" content="noindex, nofollow"/>\n <script type="text/javascript" src="../internal.js"></script>\n <link rel="stylesheet" type="text/css" href="emotion.css">\n</head>\n<body>\n<div id="tabPanel" class="wrapper">\n <div id="tabHeads" class="tabhead">\n <span><var id="lang_input_choice"></var></span>\n <span><var id="lang_input_Tuzki"></var></span>\n <span><var id="lang_input_lvdouwa"></var></span>\n <span><var id="lang_input_BOBO"></var></span>\n <span><var id="lang_input_babyCat"></var></span>\n <span><var id="lang_input_bubble"></var></span>\n <span><var id="lang_input_youa"></var></span>\n </div>\n <div id="tabBodys" class="tabbody">\n <div id="tab0"></div>\n <div id="tab1"></div>\n <div id="tab2"></div>\n <div id="tab3"></div>\n <div id="tab4"></div>\n <div id="tab5"></div>\n <div id="tab6"></div>\n </div>\n</div>\n<div id="tabIconReview">\n <img id=\'faceReview\' class=\'review\' src="../../themes/default/images/spacer.gif"/>\n</div>\n<script type="text/javascript" src="emotion.js"></script>\n<script type="text/javascript">\n var emotion = {\n tabNum:7, //切换面板数量\n SmilmgName:{ tab0:[\'j_00\', 84], tab1:[\'t_00\', 40], tab2:[\'w_00\', 52], tab3:[\'B_00\', 63], tab4:[\'C_00\', 20], tab5:[\'i_f\', 50], tab6:[\'y_00\', 40] }, //图片前缀名\n imageFolders:{ tab0:\'jx2/\', tab1:\'tsj/\', tab2:\'ldw/\', tab3:\'bobo/\', tab4:\'babycat/\', tab5:\'face/\', tab6:\'youa/\'}, //图片对应文件夹路径\n imageCss:{tab0:\'jd\', tab1:\'tsj\', tab2:\'ldw\', tab3:\'bb\', tab4:\'cat\', tab5:\'pp\', tab6:\'youa\'}, //图片css类名\n imageCssOffset:{tab0:35, tab1:35, tab2:35, tab3:35, tab4:35, tab5:25, tab6:35}, //图片偏移\n SmileyInfor:{\n tab0:[\'Kiss\', \'Love\', \'Yeah\', \'啊!\', \'背扭\', \'顶\', \'抖胸\', \'88\', \'汗\', \'瞌睡\', \'鲁拉\', \'拍砖\', \'揉脸\', \'生日快乐\', \'大笑\', \'瀑布汗~\', \'惊讶\', \'臭美\', \'傻笑\', \'抛媚眼\', \'发怒\', \'打酱油\', \'俯卧撑\', \'气愤\', \'?\', \'吻\', \'怒\', \'胜利\', \'HI\', \'KISS\', \'不说\', \'不要\', \'扯花\', \'大心\', \'顶\', \'大惊\', \'飞吻\', \'鬼脸\', \'害羞\', \'口水\', \'狂哭\', \'来\', \'发财了\', \'吃西瓜\', \'套牢\', \'害羞\', \'庆祝\', \'我来了\', \'敲打\', \'晕了\', \'胜利\', \'臭美\', \'被打了\', \'贪吃\', \'迎接\', \'酷\', \'微笑\', \'亲吻\', \'调皮\', \'惊恐\', \'耍酷\', \'发火\', \'害羞\', \'汗水\', \'大哭\', \'\', \'加油\', \'困\', \'你NB\', \'晕倒\', \'开心\', \'偷笑\', \'大哭\', \'滴汗\', \'叹气\', \'超赞\', \'??\', \'飞吻\', \'天使\', \'撒花\', \'生气\', \'被砸\', \'吓傻\', \'随意吐\'],\n tab1:[\'Kiss\', \'Love\', \'Yeah\', \'啊!\', \'背扭\', \'顶\', \'抖胸\', \'88\', \'汗\', \'瞌睡\', \'鲁拉\', \'拍砖\', \'揉脸\', \'生日快乐\', \'摊手\', \'睡觉\', \'瘫坐\', \'无聊\', \'星星闪\', \'旋转\', \'也不行\', \'郁闷\', \'正Music\', \'抓墙\', \'撞墙至死\', \'歪头\', \'戳眼\', \'飘过\', \'互相拍砖\', \'砍死你\', \'扔桌子\', \'少林寺\', \'什么?\', \'转头\', \'我爱牛奶\', \'我踢\', \'摇晃\', \'晕厥\', \'在笼子里\', \'震荡\'],\n tab2:[\'大笑\', \'瀑布汗~\', \'惊讶\', \'臭美\', \'傻笑\', \'抛媚眼\', \'发怒\', \'我错了\', \'money\', \'气愤\', \'挑逗\', \'吻\', \'怒\', \'胜利\', \'委屈\', \'受伤\', \'说啥呢?\', \'闭嘴\', \'不\', \'逗你玩儿\', \'飞吻\', \'眩晕\', \'魔法\', \'我来了\', \'睡了\', \'我打\', \'闭嘴\', \'打\', \'打晕了\', \'刷牙\', \'爆揍\', \'炸弹\', \'倒立\', \'刮胡子\', \'邪恶的笑\', \'不要不要\', \'爱恋中\', \'放大仔细看\', \'偷窥\', \'超高兴\', \'晕\', \'松口气\', \'我跑\', \'享受\', \'修养\', \'哭\', \'汗\', \'啊~\', \'热烈欢迎\', \'打酱油\', \'俯卧撑\', \'?\'],\n tab3:[\'HI\', \'KISS\', \'不说\', \'不要\', \'扯花\', \'大心\', \'顶\', \'大惊\', \'飞吻\', \'鬼脸\', \'害羞\', \'口水\', \'狂哭\', \'来\', \'泪眼\', \'流泪\', \'生气\', \'吐舌\', \'喜欢\', \'旋转\', \'再见\', \'抓狂\', \'汗\', \'鄙视\', \'拜\', \'吐血\', \'嘘\', \'打人\', \'蹦跳\', \'变脸\', \'扯肉\', \'吃To\', \'吃花\', \'吹泡泡糖\', \'大变身\', \'飞天舞\', \'回眸\', \'可怜\', \'猛抽\', \'泡泡\', \'苹果\', \'亲\', \'\', \'骚舞\', \'烧香\', \'睡\', \'套娃娃\', \'捅捅\', \'舞倒\', \'西红柿\', \'爱慕\', \'摇\', \'摇摆\', \'杂耍\', \'招财\', \'被殴\', \'被球闷\', \'大惊\', \'理想\', \'欧打\', \'呕吐\', \'碎\', \'吐痰\'],\n tab4:[\'发财了\', \'吃西瓜\', \'套牢\', \'害羞\', \'庆祝\', \'我来了\', \'敲打\', \'晕了\', \'胜利\', \'臭美\', \'被打了\', \'贪吃\', \'迎接\', \'酷\', \'顶\', \'幸运\', \'爱心\', \'躲\', \'送花\', \'选择\'],\n tab5:[\'微笑\', \'亲吻\', \'调皮\', \'惊讶\', \'耍酷\', \'发火\', \'害羞\', \'汗水\', \'大哭\', \'得意\', \'鄙视\', \'困\', \'夸奖\', \'晕倒\', \'疑问\', \'媒婆\', \'狂吐\', \'青蛙\', \'发愁\', \'亲吻\', \'\', \'爱心\', \'心碎\', \'玫瑰\', \'礼物\', \'哭\', \'奸笑\', \'可爱\', \'得意\', \'呲牙\', \'暴汗\', \'楚楚可怜\', \'困\', \'哭\', \'生气\', \'惊讶\', \'口水\', \'彩虹\', \'夜空\', \'太阳\', \'钱钱\', \'灯泡\', \'咖啡\', \'蛋糕\', \'音乐\', \'爱\', \'胜利\', \'赞\', \'鄙视\', \'OK\'],\n tab6:[\'男兜\', \'女兜\', \'开心\', \'乖乖\', \'偷笑\', \'大笑\', \'抽泣\', \'大哭\', \'无奈\', \'滴汗\', \'叹气\', \'狂晕\', \'委屈\', \'超赞\', \'??\', \'疑问\', \'飞吻\', \'天使\', \'撒花\', \'生气\', \'被砸\', \'口水\', \'泪奔\', \'吓傻\', \'吐舌头\', \'点头\', \'随意吐\', \'旋转\', \'困困\', \'鄙视\', \'狂顶\', \'篮球\', \'再见\', \'欢迎光临\', \'恭喜发财\', \'稍等\', \'我在线\', \'恕不议价\', \'库房有货\', \'货在路上\']\n }\n };\n</script>\n</body>\n</html>',
'dialogs/wordimage/wordimage.html': '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"\n "http://www.w3.org/TR/html4/loose.dtd">\n<html>\n<head>\n <title></title>\n <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>\n <script type="text/javascript" src="../internal.js"></script>\n <style type="text/css">\n .wrapper{width: 600px;padding: 10px;height: 352px;overflow: hidden;position: relative;border-bottom: 1px solid #d7d7d7}\n .localPath input{float: left;width: 350px;line-height: 20px;height: 20px;}\n #clipboard{float:left;width: 70px;height: 30px; }\n .description{ color: #0066cc; margin-top: 2px; width: 450px;height: 45px;float: left;line-height: 22px}\n #upload{width: 100px;height: 30px;float: right; margin:10px 2px 0 0;cursor: pointer;}\n #msg{ width: 140px; height: 30px; line-height:25px;float: left;color: red}\n </style>\n</head>\n<body>\n <div class="wrapper">\n <div class="localPath">\n <input id="localPath" type="text" readonly />\n <div id="clipboard"></div>\n <div id="msg"></div>\n </div>\n <div id="flashContainer"></div>\n <div>\n <div id="upload" style="display: none" ><img id="uploadBtn"></div>\n <div class="description">\n <span style="color: red"><var id="lang_resave"></var>: </span><var id="lang_step"></var>\n </div>\n </div>\n </div>\n <script type="text/javascript" src="tangram.js"></script>\n <script type="text/javascript" src="wordimage.js"></script>\n <script type="text/javascript">\n editor.setOpt({\n wordImageFieldName:"upfile",\n compressSide:0,\n maxImageSideLength:900\n });\n //全局变量\n var imageUrls = [], //用于保存从服务器返回的图片信息数组\n selectedImageCount = 0, //当前已选择的但未上传的图片数量\n optImageUrl = editor.getActionUrl(editor.getOpt(\'imageActionName\')),\n optImageFieldName = editor.getOpt(\'imageFieldName\'),\n optImageCompressBorder = editor.getOpt(\'imageCompressEnable\') ? editor.getOpt(\'imageCompressBorder\'):null,\n maxSize = editor.getOpt(\'imageMaxSize\') / 1024 / 1024,\n extension = editor.getOpt(\'imageAllowFiles\').join(\';\').replace(/\./g, \'*.\');\n /* 添加额外的GET参数 */\n var params = utils.serializeParam(editor.queryCommandValue(\'serverparam\')) || \'\',\n urlWidthParams = optImageUrl + (optImageUrl.indexOf(\'?\') == -1 ? \'?\':\'&\') + params;\n utils.domReady(function(){\n //创建Flash相关的参数集合\n var flashOptions = {\n container:"flashContainer", //flash容器id\n url:urlWidthParams, // 上传处理页面的url地址\n ext:editor.queryCommandValue(\'serverParam\') || {}, //可向服务器提交的自定义参数列表\n fileType:\'{"description":"\'+lang.fileType+\'", "extension":"\' + extension + \'"}\', //上传文件格式限制\n flashUrl:\'imageUploader.swf\', //上传用的flash组件地址\n width:600, //flash的宽度\n height:272, //flash的高度\n gridWidth:120, // 每一个预览图片所占的宽度\n gridHeight:120, // 每一个预览图片所占的高度\n picWidth:100, // 单张预览图片的宽度\n picHeight:100, // 单张预览图片的高度\n uploadDataFieldName: optImageFieldName, // POST请求中图片数据的key\n picDescFieldName:\'pictitle\', // POST请求中图片描述的key\n maxSize: maxSize, // 文件的最大体积,单位M\n compressSize:1, // 上传前如果图片体积超过该值,会先压缩,单位M\n maxNum:32, // 单次最大可上传多少个文件\n compressSide: 0, //等比压缩的基准,0为按照最长边,1为按照宽度,2为按照高度\n compressLength: optImageCompressBorder //能接受的最大边长,超过该值Flash会自动等比压缩\n };\n //回调函数集合,支持传递函数名的字符串、函数句柄以及函数本身三种类型\n var callbacks={\n selectFileCallback: function(selectFiles){ // 选择文件的回调\n selectedImageCount += selectFiles.length;\n if(selectedImageCount) baidu.g("upload").style.display = "";\n dialog.buttons[0].setDisabled(true); //初始化时置灰确定按钮\n },\n deleteFileCallback: function(delFiles){ // 删除文件的回调\n selectedImageCount -= delFiles.length;\n if (!selectedImageCount) {\n baidu.g("upload").style.display = "none";\n dialog.buttons[0].setDisabled(false); //没有选择图片时重新点亮按钮\n }\n },\n uploadCompleteCallback: function(data){ // 单个文件上传完成的回调\n try{var info = eval("(" + data.info + ")");\n info && imageUrls.push(info);\n selectedImageCount--;\n }catch(e){}\n },\n uploadErrorCallback: function (data){ // 单个文件上传失败的回调,\n console && console.log(data);\n },\n allCompleteCallback: function(){ // 全部上传完成时的回调\n dialog.buttons[0].setDisabled(false); //上传完毕后点亮按钮\n }\n //exceedFileCallback: \'exceedFileCallback\', // 文件超出限制的最大体积时的回调\n //startUploadCallback: startUploadCallback // 开始上传某个文件时的回调\n };\n wordImage.init(flashOptions,callbacks);\n });\n </script>\n</body>\n</html>',
'dialogs/attachment/attachment.html': '<!doctype html>\n<html>\n<head>\n <meta charset="UTF-8">\n <title>ueditor图片对话框</title>\n <script type="text/javascript" src="../internal.js"></script>\n <!-- jquery -->\n <script type="text/javascript" src="../../third-party/jquery-1.10.2.min.js"></script>\n <!-- webuploader -->\n <script src="../../third-party/webuploader/webuploader.min.js"></script>\n <link rel="stylesheet" type="text/css" href="../../third-party/webuploader/webuploader.css">\n <!-- attachment dialog -->\n <link rel="stylesheet" href="attachment.css" type="text/css" />\n</head>\n<body>\n <div class="wrapper">\n <div id="tabhead" class="tabhead">\n <span class="tab focus" data-content-id="upload"><var id="lang_tab_upload"></var></span>\n <!-- <span class="tab" data-content-id="online"><var id="lang_tab_online"></var></span> -->\n </div>\n <div id="tabbody" class="tabbody">\n <!-- 上传图片 -->\n <div id="upload" class="panel focus">\n <div id="queueList" class="queueList">\n <div class="statusBar element-invisible">\n <div class="progress">\n <span class="text">0%</span>\n <span class="percentage"></span>\n </div><div class="info"></div>\n <div class="btns">\n <div id="filePickerBtn"></div>\n <div class="uploadBtn"><var id="lang_start_upload"></var></div>\n </div>\n </div>\n <div id="dndArea" class="placeholder">\n <div class="filePickerContainer">\n <div id="filePickerReady"></div>\n </div>\n </div>\n <ul class="filelist element-invisible">\n <li id="filePickerBlock" class="filePickerBlock"></li>\n </ul>\n </div>\n </div>\n <!-- 在线图片 -->\n <div id="online" class="panel">\n <div id="fileList"><var id="lang_imgLoading"></var></div>\n </div>\n </div>\n </div>\n <script type="text/javascript" src="attachment.js"></script>\n</body>\n</html>',
'dialogs/insertframe/insertframe.html': '<!DOCTYPE html>\n<html>\n<head>\n <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>\n <title></title>\n <script type="text/javascript" src="../internal.js"></script>\n <style type="text/css">\n .warp {width: 320px;height: 153px;margin-left:5px;padding: 20px 0 0 15px;position: relative;}\n #url {width: 290px; margin-bottom: 2px; margin-left: -6px; margin-left: -2px\9;*margin-left:0;_margin-left:0; }\n .format span{display: inline-block; width: 58px;text-align: center; zoom:1;}\n table td{padding:5px 0;}\n #align{width: 65px;height: 23px;line-height: 22px;}\n </style>\n</head>\n<body>\n<div class="warp">\n <table width="300" cellpadding="0" cellspacing="0">\n <tr>\n <td colspan="2" class="format">\n <span><var id="lang_input_address"></var></span>\n <input style="width:200px" id="url" type="text" value=""/>\n </td>\n </tr>\n <tr>\n <td colspan="2" class="format"><span><var id="lang_input_width"></var></span><input style="width:200px" type="text" id="width"/> px</td>\n </tr>\n <tr>\n <td colspan="2" class="format"><span><var id="lang_input_height"></var></span><input style="width:200px" type="text" id="height"/> px</td>\n </tr>\n <tr>\n <td><span><var id="lang_input_isScroll"></var></span><input type="checkbox" id="scroll"/> </td>\n <td><span><var id="lang_input_frameborder"></var></span><input type="checkbox" id="frameborder"/> </td>\n </tr>\n <tr>\n <td colspan="2"><span><var id="lang_input_alignMode"></var></span>\n <select id="align">\n <option value=""></option>\n <option value="left"></option>\n <option value="right"></option>\n </select>\n </td>\n </tr>\n </table>\n</div>\n<script type="text/javascript">\n var iframe = editor._iframe;\n if(iframe){\n $G("url").value = iframe.getAttribute("src")||"";\n $G("width").value = iframe.getAttribute("width")||iframe.style.width.replace("px","")||"";\n $G("height").value = iframe.getAttribute("height") || iframe.style.height.replace("px","") ||"";\n $G("scroll").checked = (iframe.getAttribute("scrolling") == "yes") ? true : false;\n $G("frameborder").checked = (iframe.getAttribute("frameborder") == "1") ? true : false;\n $G("align").value = iframe.align ? iframe.align : "";\n }\n function queding(){\n var url = $G("url").value.replace(/^\s*|\s*$/ig,""),\n width = $G("width").value,\n height = $G("height").value,\n scroll = $G("scroll"),\n frameborder = $G("frameborder"),\n float = $G("align").value,\n newIframe = editor.document.createElement("iframe"),\n div;\n if(!url){\n alert(lang.enterAddress);\n return false;\n }\n newIframe.setAttribute("src",/http:\/\/|https:\/\//ig.test(url) ? url : "http://"+url);\n /^[1-9]+[.]?\d*$/g.test( width ) ? newIframe.setAttribute("width",width) : "";\n /^[1-9]+[.]?\d*$/g.test( height ) ? newIframe.setAttribute("height",height) : "";\n scroll.checked ? newIframe.setAttribute("scrolling","yes") : newIframe.setAttribute("scrolling","no");\n frameborder.checked ? newIframe.setAttribute("frameborder","1",0) : newIframe.setAttribute("frameborder","0",0);\n float ? newIframe.setAttribute("align",float) : newIframe.setAttribute("align","");\n if(iframe){\n iframe.parentNode.insertBefore(newIframe,iframe);\n domUtils.remove(iframe);\n }else{\n div = editor.document.createElement("div");\n div.appendChild(newIframe);\n editor.execCommand("inserthtml",div.innerHTML);\n }\n editor._iframe = null;\n dialog.close();\n }\n dialog.onok = queding;\n $G("url").onkeydown = function(evt){\n evt = evt || event;\n if(evt.keyCode == 13){\n queding();\n }\n };\n $focus($G( "url" ));\n</script>\n</body>\n</html>',
'dialogs/table/edittip.html': '<!DOCTYPE html>\n<html>\n<head>\n <title>表格删除提示</title>\n <script type="text/javascript" src="../internal.js"></script>\n <style type="text/css">\n .section {\n width: 200px;\n margin: 10px auto 0;\n font-size: 14px;\n }\n .item {\n text-align: center;\n }\n </style>\n</head>\n<body>\n<div class="section">\n <div class="item">\n <label><input type="radio" id="J_delRow" name="cmd" checked/><var id="lang_delRow"></var></label>\n </div>\n <div class="item">\n <label><input type="radio" id="J_delCol" name="cmd"/><var id="lang_delCol"></var></label>\n </div>\n</div>\n<script type="text/javascript">\n dialog.onok = function () {\n $G("J_delRow").checked ? editor.execCommand("deleterow") : editor.execCommand("deletecol");\n };\n</script>\n</body>\n</html>',
'dialogs/table/edittable.html': '<!DOCTYPE html>\n<html>\n<head>\n <title></title>\n <script type="text/javascript" src="../internal.js"></script>\n <link rel="stylesheet" type="text/css" href="edittable.css">\n</head>\n<body>\n<div class="wrappe